/contrib/media/updf_newlib/SYSCALL/include/menuet/os.h |
---|
0,0 → 1,218 |
#ifndef __GLIBC__MENUET_OS_H |
#define __GLIBC__MENUET_OS_H |
#ifdef __cplusplus |
extern "C" { |
#endif |
typedef unsigned char __u8; |
typedef unsigned short __u16; |
typedef unsigned long __u32; |
#pragma pack(push,1) |
void __menuet__define_window(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize, |
__u32 body_color,__u32 grab_color,__u32 frame_color); |
void __menuet__window_redraw(int status); |
void __menuet__putpixel(__u32 x,__u32 y,__u32 color); |
int __menuet__getkey(void); |
__u32 __menuet__getsystemclock(void); |
void __menuet__write_text(__u16 x,__u16 y,__u32 color,char * text,int len); |
void __menuet__delay100(int m); |
__u32 __menuet__open(char * name,char * data); |
void __menuet__save(char * name,char * data,__u32 count); |
void __menuet__putimage(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,char * image); |
void __menuet__make_button(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize, |
int id,__u32 color); |
int __menuet__get_button_id(void); |
int __menuet__wait_for_event(void); |
int __menuet__check_for_event(void); |
void __menuet__bar(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,__u32 color); |
void __menuet__sys_exit(void); |
void * __menuet__exec_thread(void (* func_ptr)(void),__u32 stack_size,int * retp); |
void __menuet__idle(void); |
void __menuet__exec_ramdisk(char * filename,char * args,...); |
void __menuet__exec_hd(char * filename,char * args,...); |
struct process_table_entry |
{ |
__u32 cpu_usage; |
__u16 pos_in_windowing_stack; |
__u16 win_stack_val_at_ecx; |
__u16 reserved1; |
char name[12]; |
__u32 memstart; |
__u32 memused; |
__u32 pid; |
__u32 winx_start,winy_start; |
__u32 winx_size,winy_size; |
__u16 thread_state; |
__u16 reserved2; |
__u32 client_left,client_top,client_width,client_height; |
__u8 window_state; |
__u8 reserved3[1024-71]; |
}; |
#define PID_WHOAMI (-1) |
int __menuet__get_process_table(struct process_table_entry * proctab,int pid); |
void __menuet__get_screen_max(__u16 * x,__u16 * y); |
#define BTYPE_TILE 1 |
#define BTYPE_STRETCH 2 |
void __menuet__set_background_size(__u32 xsz,__u32 ysz); |
void __menuet__write_background_mem(__u32 pos,__u32 color); |
void __menuet__draw_background(void); |
void __menuet__set_background_draw_type(int type); |
void __menuet__background_blockmove(char * src_ptr,__u32 bgr_dst,__u32 count); |
void __menuet__reset_mpu401(void); |
void __menuet__write_mpu401(__u8 d); |
__u32 __menuet__get_date(void); |
void __menuet__line(__u16 x1,__u16 y1,__u16 x2,__u16 y2,__u32 color); |
void __menuet__set_bitfield_for_wanted_events(__u32 ev); |
#define EVENT_REDRAW 0x00000001 |
#define EVENT_KEY 0x00000002 |
#define EVENT_BUTTON 0x00000004 |
#define EVENT_END_REQUEST 0x00000008 |
#define EVENT_DESKTOP_BACK_DRAW 0x00000010 |
#define EVENT_MOUSE_CHANGE 0x00000020 |
#define EVENT_IPC 0x00000040 |
#define EVENT_MOUSE_CURSOR_MASK 0x40000000 // the window does not receive mouse events if cursor outside window |
#define EVENT_MOUSE_WINDOW_MASK 0x80000000 // inactive window does not receive mouse events |
__u32 __menuet__get_irq_owner(__u32 irq); |
int __menuet__get_data_read_by_irq(__u32 irq,__u32 * num_bytes_in_buf,__u8 * data); |
int __menuet__send_data_to_device(__u16 port,__u8 val); |
void __menuet__program_irq(void * intr_table,__u32 irq_num); |
int __menuet__reserve_irq(int irqno); |
int __menuet__free_irq(int irqno); |
int __menuet__reserve_port_area(__u32 start,__u32 end); |
int __menuet__free_port_area(__u32 start,__u32 end); |
#define NAME_LEN 512 |
#define STC_READ 0 |
#define STC_WRITE 1 |
#define STC_APPEND 2 |
struct systree_info |
{ |
__u32 command; |
__u32 file_offset_low; |
__u32 file_offset_high; |
__u32 size; |
__u32 data_pointer; |
char _zero; |
const char* nameptr; |
}; |
struct systree_info2 |
{ |
__u32 command; |
__u32 file_offset_low; |
__u32 file_offset_high; |
__u32 size; |
__u32 data_pointer; |
char name[NAME_LEN]; |
}; |
struct bdfe_time |
{ |
__u8 seconds; |
__u8 minutes; |
__u8 hours; |
__u8 reserved; |
}; |
struct bdfe_date |
{ |
__u8 day; |
__u8 month; |
__u16 year; |
}; |
struct bdfe_item |
{ |
__u32 attr; |
__u8 nametype; |
__u8 reserved[3]; |
struct bdfe_time ctime; |
struct bdfe_date cdate; |
struct bdfe_time atime; |
struct bdfe_date adate; |
struct bdfe_time mtime; |
struct bdfe_date mdate; |
__u32 filesize_low; |
__u32 filesize_high; |
}; |
int __kolibri__system_tree_access(struct systree_info * info); |
int __kolibri__system_tree_access2(struct systree_info2 * info); |
int __fslayer_open(char * name,int flags); |
int __fslayer_close(int fd); |
int __fslayer_lseek(int fd,int pos,int seek_type); |
int __fslayer_tell(int fd); |
int __fslayer_read(int fd,void * buffer,__u32 count); |
int __fslayer_write(int fd,void * buffer,__u32 count); |
typedef struct |
{ |
__u8 lock; |
__u8 resvd[3]; |
__u32 ptr_to_fmsg_pos; |
/* Below is for message */ |
__u32 sender_pid; |
__u32 msg_length; |
} msgrcva_t /*__attribute__((packed))*/; |
void send_message(int pid,void * msg_ptr,int message_size); |
void define_receive_area(msgrcva_t * rcva_ptr,int size); |
void __menuet__sound_load_block(char * blockptr); |
void __menuet__sound_play_block(void); |
void __menuet__dga_get_caps(int * xres,int * yres,int * bpp,int * bpscan); |
void get_pci_version(__u8 * major,__u8 * minor); |
void pci_get_last_bus(__u8 * last_bus); |
void get_pci_access_mechanism(__u8 * mechanism); |
void pci_write_config_byte(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u8 val); |
void pci_write_config_word(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u16 val); |
void pci_write_config_dword(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u32 val); |
__u8 pci_read_config_byte(__u8 bus,__u8 dev,__u8 fn,__u8 reg); |
__u16 pci_read_config_word(__u8 bus,__u8 dev,__u8 fn,__u8 reg); |
__u32 pci_read_config_dword(__u8 bus,__u8 dev,__u8 fn,__u8 reg); |
typedef struct{ |
char* name; |
void* pointer; |
} IMP_ENTRY; |
typedef const IMP_ENTRY* IMP_TABLE; |
IMP_TABLE __kolibri__cofflib_load(const char*); |
__u32 __kolibri__cofflib_getproc(IMP_TABLE, const char*); |
//int __kolibri__cofflib_link(FUNC*, IMP_TABLE); |
static __inline__ void __menuet__debug_out_byte(const char ch){ |
__asm__ __volatile__ ("int $0x40"::"a"(63L),"b"(1L),"c"((__u8)ch)); |
} |
void __menuet__debug_out(const char* str); |
#define TIME_GETH(x) ((x)&0x000000FF) |
#define TIME_GETM(x) ((((x)&0x00FF00)>>8)&0xFF) |
#define TIME_GETS(x) ((((x)&0xFF0000)>>16)&0xFF) |
#pragma pack(pop) |
#ifdef __cplusplus |
} |
#endif |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/Makefile |
---|
0,0 → 1,22 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = $(abspath ../../../../sdk) |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I ../include -I $(SDK_DIR)/sources/newlib/libc/include |
SYSCALL_SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(SYSCALL_SRC)) |
default: $(patsubst %.c,%.o,$(SYSCALL_SRC)) |
ar rcs libsyscall.a *.o |
rm *.o |
mv libsyscall.a ../../lib |
%.o : %.c Makefile $(SYSCALL_SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
clean: |
rm *.o |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/backgr.c |
---|
0,0 → 1,26 |
#include<menuet/os.h> |
void __menuet__set_background_size(__u32 xsz,__u32 ysz) |
{ |
__asm__ __volatile__("int $0x40"::"a"(15),"b"(1),"c"(xsz),"d"(ysz)); |
} |
void __menuet__write_background_mem(__u32 pos,__u32 color) |
{ |
__asm__ __volatile__("int $0x40"::"a"(15),"b"(2),"c"(pos),"d"(color)); |
} |
void __menuet__draw_background(void) |
{ |
__asm__ __volatile__("int $0x40"::"a"(15),"b"(3)); |
} |
void __menuet__set_background_draw_type(int type) |
{ |
__asm__ __volatile__("int $0x40"::"a"(15),"b"(3),"c"(type)); |
} |
void __menuet__background_blockmove(char * src_ptr,__u32 bgr_dst,__u32 count) |
{ |
__asm__ __volatile__("int $0x40"::"a"(15),"b"(3),"c"(src_ptr),"d"(bgr_dst),"S"(count)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/bar.c |
---|
0,0 → 1,9 |
#include<menuet/os.h> |
void __menuet__bar(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,__u32 color) |
{ |
__u32 a,b; |
a=(x1<<16)|xsize; |
b=(y1<<16)|ysize; |
__asm__ __volatile__("int $0x40"::"a"(13),"b"(a),"c"(b),"d"(color)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/button.c |
---|
0,0 → 1,17 |
#include<menuet/os.h> |
void __menuet__make_button(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize, |
int id,__u32 color) |
{ |
__u32 a,b; |
a=(x1<<16)|xsize; |
b=(y1<<16)|ysize; |
__asm__ __volatile__("int $0x40"::"a"(8),"b"(a),"c"(b),"d"(id),"S"(color)); |
} |
int __menuet__get_button_id(void) |
{ |
__u16 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(17)); |
if((__ret & 0xFF)==0) return (__ret>>8)&0xFF; else return -1; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/clock.c |
---|
0,0 → 1,8 |
#include<menuet/os.h> |
__u32 __menuet__getsystemclock(void) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(3)); |
return __ret; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/cofflib.c |
---|
0,0 → 1,15 |
#include <menuet/os.h> |
#include <stdio.h> |
#include <string.h> |
IMP_TABLE __kolibri__cofflib_load(const char* name){ |
__asm__ __volatile__("int $0x40"::"a"(68L),"b"(19L),"c"((__u32)name)); |
} |
__u32 __kolibri__cofflib_getproc(IMP_TABLE lib, const char* name){ |
if(!name || !name[0]) return 0; |
int i; |
for(i = 0; lib[i].name && strcmp(name, lib[i].name); i++); |
if(lib[i].name) return (__u32)lib[i].pointer; |
else return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/date.c |
---|
0,0 → 1,8 |
#include<menuet/os.h> |
__u32 __menuet__get_date(void) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(29)); |
return __ret; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/debug.c |
---|
0,0 → 1,5 |
#include <menuet/os.h> |
void __menuet__debug_out(const char* str){ |
while(*str) |
__menuet__debug_out_byte(*str++); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/delay.c |
---|
0,0 → 1,11 |
#include<menuet/os.h> |
void __menuet__delay100(int m) |
{ |
__asm__ __volatile__("int $0x40"::"a"(5),"b"(m)); |
} |
void __menuet__idle(void) |
{ |
__menuet__delay100(10); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/dga.c |
---|
0,0 → 1,19 |
#include<menuet/os.h> |
void __menuet__dga_get_caps(int * xres,int * yres,int * bpp,int * bpscan) |
{ |
int p; |
__asm__ __volatile__("int $0x40":"=a"(p):"0"(61),"b"(1)); |
if(xres) *xres=(p>>16)&0xFFFF; |
if(yres) *yres=p & 0xFFFF; |
if(bpp) |
{ |
__asm__ __volatile__("int $0x40":"=a"(p):"0"(61),"b"(2)); |
*bpp=p; |
} |
if(bpscan) |
{ |
__asm__ __volatile__("int $0x40":"=a"(p):"0"(61),"b"(3)); |
*bpscan=p; |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/event.c |
---|
0,0 → 1,20 |
#include<menuet/os.h> |
int __menuet__wait_for_event(void) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(10)); |
return __ret; |
} |
int __menuet__check_for_event(void) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(11)); |
return __ret; |
} |
void __menuet__set_bitfield_for_wanted_events(__u32 ev) |
{ |
__asm__ __volatile__("int $0x40"::"a"(40),"b"(ev)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/exit.c |
---|
0,0 → 1,6 |
#include<menuet/os.h> |
void __menuet__sys_exit(void) |
{ |
__asm__ __volatile__("int $0x40"::"a"(0xFFFFFFFF)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/file.c |
---|
0,0 → 1,45 |
#include<menuet/os.h> |
#include<stdio.h> |
#include<stdarg.h> |
#include<string.h> |
__u32 __menuet__open(char * name,char * data) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(6),"b"((__u32)name),"c"(0),"d"(0xFFFFFFFF),"S"((__u32)data)); |
return __ret; |
} |
void __menuet__save(char * name,char * data,__u32 count) |
{ |
__asm__ __volatile__("int $0x40"::"a"(33),"b"((__u32)name),"c"((__u32)data),"d"(count),"S"(0)); |
} |
void __menuet__exec_ramdisk(char * filename,char * args,...) |
{ |
va_list argz; |
char buffer[1024]; |
memset(buffer,0,1024); |
if(args) |
{ |
va_start(argz,args); |
vsprintf(buffer,args,argz); |
} |
va_end(argz); |
__asm__ __volatile__("int $0x40"::"a"(19),"b"(filename),"c"((args ? buffer : NULL))); |
} |
void __menuet__exec_hd(char * filename,char * args,...) |
{ |
va_list argz; |
char buffer[1024]; |
char work_area[0xFFFF]; |
memset(buffer,0,1024); |
if(args) |
{ |
va_start(argz,args); |
vsprintf(buffer,args,argz); |
} |
va_end(argz); |
__asm__ __volatile__("int $0x40"::"a"(19),"b"(filename),"c"(args ? buffer : NULL),"d"(work_area)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/image.c |
---|
0,0 → 1,9 |
#include<menuet/os.h> |
void __menuet__putimage(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,char * image) |
{ |
__u32 a,b; |
a=(xsize<<16)|ysize; |
b=(x1<<16)|y1; |
__asm__ __volatile__("int $0x40"::"a"(7),"b"(image),"c"(a),"d"(b)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/ipc.c |
---|
0,0 → 1,11 |
#include<menuet/os.h> |
void send_message(int pid,void * msg_ptr,int message_size) |
{ |
__asm__ __volatile__("int $0x40"::"a"(60),"b"(2),"c"(pid),"d"(msg_ptr),"S"(message_size)); |
} |
void define_receive_area(msgrcva_t * rcva_ptr,int size) |
{ |
__asm__ __volatile__("int $0x40"::"a"(60),"b"(1),"c"(rcva_ptr),"d"(size)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/irq.c |
---|
0,0 → 1,62 |
#include<menuet/os.h> |
__u32 __menuet__get_irq_owner(__u32 irq) |
{ |
__u32 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(41),"b"(irq)); |
return __ret; |
} |
int __menuet__get_data_read_by_irq(__u32 irq,__u32 * num_bytes_in_buf,__u8 * data) |
{ |
__u32 a,b,c; |
__asm__ __volatile__("int $0x40":"=a"(a),"=b"(b),"=c"(c):"0"(42),"1"(irq)); |
if(num_bytes_in_buf) *num_bytes_in_buf=a; |
if(data) *data=b & 0xFF; |
return c; |
} |
int __menuet__send_data_to_device(__u16 port,__u8 val) |
{ |
int __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(43),"b"(port),"c"(val)); |
return __ret; |
} |
void __menuet__program_irq(void * intr_table,__u32 irq_num) |
{ |
__asm__ __volatile__("int $0x40"::"a"(44),"b"(intr_table),"c"(irq_num)); |
} |
int __menuet__reserve_irq(int irqno) |
{ |
int __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(45),"b"(0),"c"(irqno)); |
return __ret; |
} |
int __menuet__free_irq(int irqno) |
{ |
int __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(45),"b"(1),"c"(irqno)); |
return __ret; |
} |
int __menuet__reserve_port_area(__u32 start,__u32 end) |
{ |
int __ret; |
__asm__("int $0x40":"=a"(__ret):"a"(45),"b"(0),"c"(start),"d"(end)); |
return __ret; |
} |
int __menuet__free_port_area(__u32 start,__u32 end) |
{ |
int __ret; |
__asm__("int $0x40":"=a"(__ret):"a"(45),"b"(1),"c"(start),"d"(end)); |
return __ret; |
} |
void __menuet__define_app_internal_intrs(void * intr_table) |
{ |
__asm__("int $0x40"::"a"(49),"b"(0),"c"(intr_table)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/keyb.c |
---|
0,0 → 1,8 |
#include<menuet/os.h> |
int __menuet__getkey(void) |
{ |
__u16 __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(2)); |
if(!(__ret & 0xFF)) return (__ret>>8)&0xFF; else return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/line.c |
---|
0,0 → 1,9 |
#include<menuet/os.h> |
void __menuet__line(__u16 x1,__u16 y1,__u16 x2,__u16 y2,__u32 color) |
{ |
__u32 b,c; |
b=(x1<<16)|x1; |
c=(y1<<16)|y2; |
__asm__ __volatile__("int $0x40"::"a"(38),"b"(b),"c"(c),"d"(color)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/mpu401.c |
---|
0,0 → 1,11 |
#include<menuet/os.h> |
void __menuet__reset_mpu401(void) |
{ |
__asm__ __volatile__("int $0x40"::"a"(20),"b"(1)); |
} |
void __menuet__write_mpu401(__u8 d) |
{ |
__asm__ __volatile__("int $0x40"::"a"(20),"b"(2),"c"(d)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/param.c |
---|
0,0 → 1,7 |
#include<menuet/os.h> |
#define APP_PARAM_SZ (1024) |
#define APP_PATH_SZ (1024) |
char __menuet__app_param_area[APP_PARAM_SZ]; |
char __menuet__app_path_area[APP_PATH_SZ]; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/pci.c |
---|
0,0 → 1,50 |
#include<menuet/os.h> |
#define PCI_FN 62 |
void get_pci_version(__u8 * major,__u8 * minor) |
{ |
int r; |
__asm__ __volatile__("int $0x40":"=a"(r):"0"(PCI_FN),"b"(0)); |
*minor=r&0xFF; |
*major=(r>>8)&0xFF; |
} |
void pci_get_last_bus(__u8 * last_bus) |
{ |
__asm__ __volatile__("int $0x40":"=a"(*last_bus):"0"(PCI_FN),"b"(1)); |
} |
void get_pci_access_mechanism(__u8 * mechanism) |
{ |
__asm__ __volatile__("int $0x40":"=a"(*mechanism):"0"(PCI_FN),"b"(2)); |
} |
#define read_config(x,c,bits) \ |
__u##bits pci_read_config_##x (__u8 bus,__u8 dev,__u8 fn,__u8 reg) \ |
{ \ |
__u##bits __ret; \ |
__u16 cx; \ |
__u16 bx; \ |
cx=(((fn&7)|(((dev)&~7)<<3))<<8)|reg; \ |
bx=(bus<<8)|(c); \ |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(PCI_FN),"b"(bx),"c"(cx)); \ |
return __ret; \ |
} |
#define write_config(x,c,bits) \ |
void pci_write_config_##x (__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u##bits val) \ |
{ \ |
__u16 cx,bx; \ |
cx=(((fn&7)|(((dev)&~7)<<3))<<8)|reg; \ |
bx=(bus<<8)|(c); \ |
__asm__ __volatile__("int $0x40"::"a"(PCI_FN),"b"(bx),"c"(cx),"d"(val)); \ |
} |
#define rw_config(x,c,bits) \ |
read_config(x,4+c,bits) \ |
write_config(x,7+c,bits) |
rw_config(byte,0,8) |
rw_config(word,1,16) |
rw_config(dword,2,32) |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/pixel.c |
---|
0,0 → 1,6 |
#include<menuet/os.h> |
void __menuet__putpixel(__u32 x,__u32 y,__u32 color) |
{ |
__asm__ __volatile__("int $0x40"::"a"(1),"b"(x),"c"(y),"d"(color)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/process.c |
---|
0,0 → 1,8 |
#include<menuet/os.h> |
int __menuet__get_process_table(struct process_table_entry * proctab,int pid) |
{ |
int __ret; |
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(9),"b"((__u32)proctab),"c"(pid)); |
return __ret; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/screen.c |
---|
0,0 → 1,9 |
#include<menuet/os.h> |
void __menuet__get_screen_max(__u16 * x,__u16 * y) |
{ |
__u32 v; |
__asm__ __volatile__("int $0x40":"=a"(v):"0"(14)); |
if(x) *x=v>>16; |
if(y) *y=v & 0xFFFF; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/sound.c |
---|
0,0 → 1,11 |
#include<menuet/os.h> |
void __menuet__sound_load_block(char * blockptr) |
{ |
__asm__ __volatile__("int $0x40"::"a"(55),"b"(0),"c"(blockptr)); |
} |
void __menuet__sound_play_block(void) |
{ |
__asm__ __volatile__("int $0x40"::"a"(55),"b"(1)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/systree.c |
---|
0,0 → 1,16 |
#include<menuet/os.h> |
int __kolibri__system_tree_access(struct systree_info * info) |
{ |
int __ret; |
int d0; |
__asm__ __volatile__("int $0x40":"=a"(__ret),"=&b"(d0):"0"(70),"1"((__u32)info)); |
return __ret; |
} |
int __kolibri__system_tree_access2(struct systree_info2 * info) |
{ |
int __ret; |
int d0; |
__asm__ __volatile__("int $0x40":"=a"(__ret),"=&b"(d0):"0"(70),"1"((__u32)info)); |
return __ret; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/text.c |
---|
0,0 → 1,6 |
#include<menuet/os.h> |
void __menuet__write_text(__u16 x,__u16 y,__u32 color,char * text,int len) |
{ |
__asm__ __volatile__("int $0x40"::"a"(4),"b"((x<<16)|y),"c"(color),"d"((__u32)text),"S"(len)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/thread.c |
---|
0,0 → 1,12 |
#include<menuet/os.h> |
#include<stdio.h> |
#include<stdlib.h> |
void * __menuet__exec_thread(void (* func_ptr)(void),__u32 stack_size,int * retp) |
{ |
void * __stk, * __ret; |
__ret=__stk=malloc(stack_size); |
__stk+=stack_size-1; |
__asm__ __volatile__("int $0x40":"=a"(*retp):"0"(51L),"b"(1L),"c"((__u32)func_ptr),"d"((__u32)__stk)); |
return __ret; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/SYSCALL/src/window.c |
---|
0,0 → 1,16 |
#include<menuet/os.h> |
void __menuet__define_window(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize, |
__u32 body_color,__u32 grab_color,__u32 frame_color) |
{ |
__u32 a,b; |
a=(x1<<16)|xsize; |
b=(y1<<16)|ysize; |
__asm__ __volatile__("int $0x40"::"a"(0),"b"(a),"c"(b),"d"(body_color),"S"(grab_color), |
"D"(frame_color)); |
} |
void __menuet__window_redraw(int status) |
{ |
__asm__ __volatile__("int $0x40"::"a"(12),"b"(status)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/Makefile |
---|
0,0 → 1,21 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = $(abspath ../../../sdk) |
LDFLAGS = -static -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds --image-base 0 |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I ../SYSCALL/include -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/zlib -I ../include -I ../fitz -I ../pdf |
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib -L ../lib |
APPS_SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(APPS_SRC)) |
default: $(patsubst %.c,%.o,$(APPS_SRC)) |
$(LD) $(LDFLAGS) $(LIBPATH) -o mupdf $(OBJECTS) -lmupdf -lfreetype -lfitz -lgcc -lfitz -ldraw -ljpeg -ljbig2dec -lfreetype -lc.dll -lopenjpeg -lz -lc -lsyscall --subsystem native |
objcopy mupdf -O binary |
%.o : %.c Makefile $(APPS_SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/icons/allbtns.h |
---|
0,0 → 1,940 |
// 26x144 |
unsigned char toolbar_image[14976] = { |
0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA5, 0xA5, 0xA5, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, 0xB0, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, 0xB0, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xA5, 0xA5, |
0xA5, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA5, 0xA5, 0xA5, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xA5, 0xA5, 0xA5, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, |
0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x98, 0x98, 0x98, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x98, 0x98, 0x98, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEC, 0xEC, 0xEC, 0x87, 0x87, |
0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xB1, 0xB1, 0xB1, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, |
0xB1, 0xB1, 0xB1, 0x87, 0x87, 0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xEC, 0xEC, 0xEC, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEC, 0xEC, 0xEC, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xC2, |
0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xEC, 0xEC, 0xEC, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0x87, 0x87, 0x87, 0x76, 0x76, 0x76, 0xDB, 0xDB, 0xDB, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xDB, 0xDB, 0xDB, 0x76, 0x76, 0x76, 0x87, 0x87, 0x87, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, |
0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, |
0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, 0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, |
0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, 0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, |
0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0xF3, 0xF3, 0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, 0xF3, 0xF3, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, |
0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, 0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, |
0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, 0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, |
0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, 0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, |
0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0x86, 0x86, 0x86, 0x75, 0x75, 0x75, 0xD9, 0xD9, 0xD9, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xD9, 0xD9, 0xD9, 0x75, 0x75, 0x75, 0x86, 0x86, 0x86, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xEA, 0xEA, 0xEA, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, |
0xC0, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xEA, 0xEA, 0xEA, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xEA, 0xEA, 0xEA, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, 0x86, 0x86, 0xAF, 0xAF, 0xAF, |
0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xAF, 0xAF, 0xAF, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, |
0x86, 0x86, 0xEA, 0xEA, 0xEA, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, 0xC0, 0x97, 0x97, 0x97, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, |
0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x97, 0x97, 0x97, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x98, 0x98, 0x98, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x98, 0x98, 0x98, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEC, 0xEC, 0xEC, 0x87, 0x87, |
0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xB1, 0xB1, 0xB1, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, |
0xB1, 0xB1, 0xB1, 0x87, 0x87, 0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xEC, 0xEC, 0xEC, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEC, 0xEC, 0xEC, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xC2, |
0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xEC, 0xEC, 0xEC, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0x87, 0x87, 0x87, 0x76, 0x76, 0x76, 0xDB, 0xDB, 0xDB, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xDB, 0xDB, 0xDB, 0x76, 0x76, 0x76, 0x87, 0x87, 0x87, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, |
0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, |
0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, 0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, |
0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, 0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, |
0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0xF3, 0xF3, 0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, 0xF3, 0xF3, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, |
0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, 0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, |
0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, 0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, |
0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, 0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, |
0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0x86, 0x86, 0x86, 0x75, 0x75, 0x75, 0xD9, 0xD9, 0xD9, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xD9, 0xD9, 0xD9, 0x75, 0x75, 0x75, 0x86, 0x86, 0x86, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xEA, 0xEA, 0xEA, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, |
0xC0, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xEA, 0xEA, 0xEA, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xEA, 0xEA, 0xEA, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, 0x86, 0x86, 0xAF, 0xAF, 0xAF, |
0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xAF, 0xAF, 0xAF, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, |
0x86, 0x86, 0xEA, 0xEA, 0xEA, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, 0xC0, 0x97, 0x97, 0x97, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, |
0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x97, 0x97, 0x97, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, |
0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x98, 0x98, 0x98, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x98, 0x98, 0x98, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x87, 0x87, |
0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xB1, 0xB1, 0xB1, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, |
0xB1, 0xB1, 0xB1, 0x87, 0x87, 0x87, 0x6E, 0x6E, 0x6E, 0x87, 0x87, 0x87, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xC2, |
0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0x87, 0x87, 0x87, 0x76, 0x76, 0x76, 0xDB, 0xDB, 0xDB, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xDB, 0xDB, 0xDB, 0x76, 0x76, 0x76, 0x87, 0x87, 0x87, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, |
0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0x8F, 0x8F, 0x8F, 0x87, 0x87, 0x87, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xC2, 0xC2, 0xC2, 0x6E, 0x6E, 0x6E, 0xC2, 0xC2, 0xC2, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, |
0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, 0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, |
0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, 0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, |
0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xC9, 0xC9, 0xC9, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, |
0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xC9, 0xC9, 0xC9, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0xB0, 0xB0, 0xB0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xB0, |
0xB0, 0xB0, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0x8F, 0x8F, 0x8F, 0x86, 0x86, 0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x86, 0x86, 0x86, |
0x8F, 0x8F, 0x8F, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, 0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xC1, 0xC1, 0xC1, 0x6E, 0x6E, 0x6E, 0xC1, 0xC1, |
0xC1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0x86, 0x86, 0x86, 0x75, 0x75, 0x75, 0xD9, 0xD9, 0xD9, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xD9, 0xD9, 0xD9, 0x75, 0x75, 0x75, 0x86, 0x86, 0x86, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, |
0xC0, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, 0x86, 0x86, 0xAF, 0xAF, 0xAF, |
0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xAF, 0xAF, 0xAF, 0x86, 0x86, 0x86, 0x6D, 0x6D, 0x6D, 0x86, |
0x86, 0x86, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xC0, 0xC0, 0xC0, 0x97, 0x97, 0x97, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, |
0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x97, 0x97, 0x97, 0xC0, 0xC0, 0xC0, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, |
0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA7, 0xA7, 0xA7, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0x94, 0x94, 0x94, 0x67, 0x67, 0x67, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEF, 0xEF, 0xEF, 0x83, 0x83, 0x83, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xE1, 0xE1, 0xE1, 0x77, 0x77, 0x77, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x72, 0x72, 0x72, 0x8C, 0x8C, 0x8C, 0xB7, 0xB7, 0xB7, 0xED, 0xED, |
0xED, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xD1, 0xD1, |
0xD1, 0x6F, 0x6F, 0x6F, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0xAD, |
0xAD, 0xAD, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xBD, 0xBD, 0xBD, 0x68, 0x68, 0x68, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x8E, 0x8E, 0x8E, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xBD, 0xBD, 0xBD, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0xA2, 0xA2, 0xA2, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xD1, 0xD1, 0xD1, 0x6F, 0x6F, 0x6F, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0xE3, 0xE3, 0xE3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xE1, 0xE1, 0xE1, 0x77, 0x77, 0x77, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0xAB, 0xAB, 0xAB, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0x83, 0x83, 0x83, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0xD1, 0xD1, 0xD1, 0x9A, 0x9A, 0x9A, 0x67, 0x67, 0x67, 0x86, 0x86, |
0x86, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x94, 0x94, |
0x94, 0x67, 0x67, 0x67, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xB9, 0xB9, 0xB9, 0x71, 0x71, 0x71, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA7, |
0xA7, 0xA7, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x8B, 0x8B, 0x8B, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA7, 0xA7, |
0xA7, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x67, 0x67, 0x67, 0x94, |
0x94, 0x94, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x83, 0x83, 0x83, 0xEF, 0xEF, 0xEF, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xED, 0xED, 0xED, 0xB7, 0xB7, 0xB7, 0x8C, |
0x8C, 0x8C, 0x72, 0x72, 0x72, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x77, 0x77, 0x77, 0xE1, 0xE1, 0xE1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xAD, 0xAD, 0xAD, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x6F, 0x6F, 0x6F, 0xD1, 0xD1, 0xD1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x8E, |
0x8E, 0x8E, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0xBD, 0xBD, 0xBD, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA2, 0xA2, 0xA2, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x68, 0x68, 0x68, 0xBD, 0xBD, 0xBD, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xE3, 0xE3, 0xE3, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x6F, 0x6F, 0x6F, 0xD1, |
0xD1, 0xD1, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xAB, 0xAB, 0xAB, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x77, 0x77, 0x77, 0xE1, 0xE1, 0xE1, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0x86, 0x86, 0x86, 0x67, 0x67, 0x67, 0x9A, 0x9A, 0x9A, 0xD1, 0xD1, 0xD1, 0xEF, 0xEF, 0xEF, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x67, 0x67, 0x67, 0x67, |
0x67, 0x67, 0x83, 0x83, 0x83, 0xEF, 0xEF, 0xEF, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x71, |
0x71, 0x71, 0xB9, 0xB9, 0xB9, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x67, 0x67, 0x67, 0x94, 0x94, 0x94, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0x8B, 0x8B, 0x8B, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA7, 0xA7, 0xA7, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, |
0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEF, 0xEF, |
0xEF, 0xA0, 0xA0, 0xA0, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, |
0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x8E, |
0x8E, 0x8E, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEF, 0xEF, 0xEF, 0x73, |
0x73, 0x73, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x83, 0x83, 0x83, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x83, 0x83, 0x83, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x83, 0x83, 0x83, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xDC, 0xDC, 0xDC, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xDC, 0xDC, 0xDC, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, |
0xBE, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xBE, 0xBE, 0xBE, |
0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xF5, 0xF5, 0xF5, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF5, 0xF5, 0xF5, 0x81, 0x81, 0x81, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0xB4, 0xB4, 0xB4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF5, 0xF5, 0xF5, 0x77, 0x77, 0x77, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xA0, 0xA0, 0xA0, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF5, 0xF5, 0xF5, 0x73, 0x73, 0x73, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x97, 0x97, 0x97, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF4, 0xF4, 0xF4, 0x6E, 0x6E, 0x6E, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x8A, 0x8A, 0x8A, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xEC, 0xEC, 0xEC, 0x6C, 0x6C, 0x6C, 0x81, 0x81, 0x81, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xD8, 0xD8, 0xD8, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2, 0xA5, 0xA5, |
0xA5, 0xEE, 0xEE, 0xEE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, |
0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xEE, 0xEE, 0xEE, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x8E, 0x8E, 0x8E, 0x79, 0x79, 0x79, 0x79, 0x79, |
0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, |
0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x9C, 0x9C, 0x9C, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x83, 0x83, 0x83, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x73, 0x73, 0x73, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x83, 0x83, 0x83, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x83, 0x83, 0x83, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, |
0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xDA, 0xDA, 0xDA, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xEF, 0xEF, 0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xEF, 0xEF, |
0xEF, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xEF, 0xEF, 0xEF, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xEB, 0xEB, 0xEB, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, |
0xBE, 0xBE, 0xF5, 0xF5, 0xF5, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF5, |
0xF5, 0xF5, 0x81, 0x81, 0x81, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xB4, 0xB4, 0xB4, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF5, 0xF5, 0xF5, 0x77, 0x77, 0x77, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xA0, 0xA0, 0xA0, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, |
0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF5, 0xF5, 0xF5, 0x73, 0x73, 0x73, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, |
0x6C, 0x6C, 0x6C, 0x97, 0x97, 0x97, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF4, 0xF4, 0xF4, 0x6E, 0x6E, 0x6E, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x8A, 0x8A, |
0x8A, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xEC, 0xEC, 0xEC, 0x6C, 0x6C, 0x6C, 0x81, 0x81, 0x81, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xD8, 0xD8, 0xD8, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, |
0xF2, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xE9, 0xE9, 0xE9, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE9, 0xE9, 0xE9, 0xA5, |
0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, |
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xC2, 0xC2, 0xC2 |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/kolibri.c |
---|
0,0 → 1,485 |
#include "kolibri.h" |
#include "string.h" |
extern char KOL_PATH[256]; |
extern char KOL_PARAM[256]; |
extern char KOL_DIR[256]; |
void kol_exit() |
{ |
asm volatile ("int $0x40"::"a"(-1)); |
} |
void kol_sleep(unsigned d) |
{ |
asm volatile ("int $0x40"::"a"(5), "b"(d)); |
} |
// define a window |
// x, y - position; w, h - size; cs - color and style; c - caption; b - boder |
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned cs, unsigned b, char *t) |
{ |
asm volatile ("int $0x40"::"a"(0), "b"(x*65536+w), "c"(y*65536+h), "d"(cs), "D"(t), "S"(b) ); |
} |
void kol_wnd_move(unsigned x, unsigned y) |
{ |
asm volatile ("int $0x40"::"a"(67), "b"(x), "c"(y), "d"(-1), "S"(-1)); |
} |
void kol_event_mask(unsigned e) |
{ |
asm volatile ("int $0x40"::"a"(40), "b"(e)); |
} |
unsigned kol_event_wait() |
{ |
asm volatile ("int $0x40"::"a"(10)); |
} |
unsigned kol_event_wait_time(unsigned time) |
{ |
asm volatile ("int $0x40"::"a"(23), "b"(time)); |
} |
unsigned kol_event_check() |
{ |
asm volatile ("int $0x40"::"a"(11)); |
} |
inline void __attribute__((__always_inline__)) kol_paint_start() |
{ |
asm volatile ("int $0x40"::"a"(12), "b"(1)); |
} |
inline void __attribute__((__always_inline__)) kol_paint_end() |
{ |
asm volatile ("int $0x40"::"a"(12), "b"(2)); |
} |
void kol_paint_pixel(unsigned x, unsigned y, unsigned c) |
{ |
asm volatile ("int $0x40"::"a"(1), "b"(x), "c"(y), "d"(c)); |
} |
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c) |
{ |
asm volatile ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c)); |
} |
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c) |
{ |
asm volatile ("int $0x40"::"a"(38), "b"(x1*65536+x2), "c"(y1*65536+y2), "d"(c)); |
} |
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c) |
{ |
asm volatile ("int $0x40"::"a"(4), "b"(x*65536+y), "c"(c), "d"(s)); |
} |
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d) |
{ |
asm volatile ("int $0x40"::"a"(7), "c"(w*65536+h), "d"(x*65536+y), "b"(d)); |
} |
void kol_paint_image_24(unsigned x, unsigned y, unsigned w, unsigned h, char *d) |
{ |
asm volatile ("int $0x40"::"a"(65), "b"(d), "c"(w*65536+h), "d"(x*65536+y), "S"(32)); |
} |
unsigned kol_key_get() |
{ |
asm volatile ("int $0x40"::"a"(2)); |
} |
unsigned kol_key_control() |
{ |
asm volatile ("int $0x40"::"a"(66), "b"(3)); |
} |
void kol_key_lang_set(unsigned lang) |
{ |
asm volatile ("int $0x40"::"a"(21), "b"(2), "c"(9), "d"(lang)); |
} |
unsigned kol_key_lang_get() |
{ |
asm volatile ("int $0x40"::"a"(26), "b"(2), "c"(9)); |
} |
void kol_key_mode_set(unsigned mode) |
{ |
asm volatile ("int $0x40"::"a"(66), "b"(1), "c"(mode)); |
} |
unsigned kol_key_mode_get() |
{ |
asm volatile ("int $0x40"::"a"(66), "b"(2)); |
} |
unsigned kol_btn_get() |
{ |
asm volatile ("int $0x40"::"a"(17)); |
} |
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c) |
{ |
asm volatile ("int $0x40"::"a"(8), "b"(x*65536+w), "c"(y*65536+h), "d"(d), "S"(c)); |
} |
void kol_btn_type(unsigned t) |
{ |
asm volatile ("int $0x40"::"a"(48), "b"(1), "c"(t)); |
} |
void kol_wnd_caption(char *s) |
{ |
asm volatile ("int $0x40"::"a"(71), "b"(1), "c"(s)); |
} |
unsigned kol_mouse_pos() |
{ |
asm volatile ("int $0x40"::"a"(37), "b"(0)); |
} |
unsigned kol_mouse_posw() |
{ |
asm volatile ("int $0x40"::"a"(37), "b"(1)); |
} |
unsigned kol_mouse_btn() |
{ |
asm volatile ("int $0x40"::"a"(37), "b"(2)); |
} |
void kol_board_putc(char c) |
{ |
asm volatile ("int $0x40"::"a"(63), "b"(1), "c"(c)); |
} |
void kol_board_puts(char *s) |
{ |
unsigned i; |
i = 0; |
while (*(s+i)) |
{ |
asm volatile ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i))); |
i++; |
} |
} |
void kol_board_puti(int n) |
{ |
char c; |
if ( n > 1 ) |
kol_board_puti(n / 10); |
c = n % 10 + '0'; |
asm volatile ("int $0x40"::"a"(63), "b"(1), "c"(c)); |
} |
int kol_file_70(kol_struct70 *k) |
{ |
asm volatile ("int $0x40"::"a"(70), "b"(k)); |
} |
kol_struct_import* kol_cofflib_load(char *name) |
{ |
asm volatile ("int $0x40"::"a"(68), "b"(19), "c"(name)); |
} |
void* kol_cofflib_procload (kol_struct_import *imp, char *name) |
{ |
int i; |
for (i=0;;i++) |
if ( NULL == ((imp+i) -> name)) |
break; |
else |
if ( 0 == strcmp(name, (imp+i)->name) ) |
return (imp+i)->data; |
return NULL; |
} |
unsigned kol_cofflib_procnum (kol_struct_import *imp) |
{ |
unsigned i, n; |
for (i=n=0;;i++) |
if ( NULL == ((imp+i) -> name)) |
break; |
else |
n++; |
return n; |
} |
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n) |
{ |
unsigned i; |
*name = 0; |
for (i=0;;i++) |
if ( NULL == ((imp+i) -> name)) |
break; |
else |
if ( i == n ) |
{ |
strcpy(name, ((imp+i)->name)); |
break; |
} |
} |
unsigned kol_system_cpufreq() |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(5)); |
} |
unsigned kol_system_mem() |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(17)); |
} |
unsigned kol_system_memfree() |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(16)); |
} |
unsigned kol_system_time_get() |
{ |
asm volatile ("int $0x40"::"a"(3)); |
} |
unsigned kol_system_date_get() |
{ |
asm volatile ("int $0x40"::"a"(29)); |
} |
unsigned kol_system_end(unsigned param) |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(9), "c"(param)); |
} |
void kol_path_file2dir(char *dir, char *fname) |
{ |
unsigned i; |
strcpy (dir, fname); |
for ( i = strlen(dir);; --i) |
if ( '/' == dir[i]) |
{ |
dir[i] = '\0'; |
return; |
} |
} |
void kol_path_full(char *full, char *fname) |
{ |
char temp[256]; |
switch (*fname) |
{ |
case '/': |
strncpy(temp, fname+1, 2); |
temp[2]=0; |
if ( (!strcmp("rd", temp)) || (!strcmp("hd", temp)) || (!strcmp("cd", temp)) ) |
strcpy (full, fname); |
break; |
case '.': |
break; |
default: |
break; |
}; |
} |
inline void __attribute__((__always_inline__)) kol_screen_wait_rr() |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(14)); |
} |
void kol_screen_get_size(unsigned *w, unsigned *h) |
{ |
unsigned size; |
asm volatile ("int $0x40":"=a"(size):"a"(14)); |
*w = size / 65536; |
*h = size % 65536; |
} |
unsigned kol_skin_height() |
{ |
asm volatile ("int $0x40"::"a"(48), "b"(4)); |
} |
unsigned kol_thread_start(unsigned start, unsigned stack) |
{ |
asm volatile ("int $0x40"::"a"(51), "b"(1), "c"(start), "d"(stack)); |
} |
unsigned kol_time_tick() |
{ |
asm volatile ("int $0x40"::"a"(26), "b"(9)); |
} |
unsigned kol_sound_speaker(char data[]) |
{ |
asm volatile ("movl %0, %%esi"::"a"(data)); |
asm volatile ("int $0x40"::"a"(55), "b"(55)); |
} |
unsigned kol_process_info(unsigned slot, char buf1k[]) |
{ |
asm volatile ("int $0x40"::"a"(9), "b"(buf1k), "c"(slot)); |
} |
int kol_process_kill_pid(unsigned process) |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(18), "c"(process)); |
} |
int kol_kill_process(unsigned process) |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(2), "c"(process)); |
} |
void kol_get_kernel_ver(char buff16b[]) |
{ |
asm volatile ("int $0x40"::"a"(18), "b"(13), "c"(buff16b)); |
} |
int kol_buffer_open(char name[], int mode, int size, char **buf) |
{ |
int error; |
asm volatile ("int $0x40":"=a"(*buf), "=d"(error):"a"(68), "b"(22), "c"(name), "d"(size), "S"(mode)); |
return error; |
} |
void kol_buffer_close(char name[]) |
{ |
asm volatile ("int $0x40"::"a"(68), "b"(23), "c"(name)); |
} |
int kol_clip_num() |
{ |
asm volatile ("int $0x40"::"a"(54), "b"(0)); |
} |
char* kol_clip_get(int n) |
{ |
asm volatile ("int $0x40"::"a"(54), "b"(1), "c"(n)); |
} |
int kol_clip_set(int n, char buffer[]) |
{ |
asm volatile ("int $0x40"::"a"(54), "b"(2), "c"(n), "d"(buffer)); |
} |
int kos_random(int num) |
{ |
srand(kol_time_tick()); |
return rand() % num; |
} |
int kos_get_mouse_wheels(void) |
{ |
int val; |
asm ("int $0x40":"=a"(val):"a"(37),"b"(7)); |
return val; |
}; |
struct blit_call |
{ |
int dstx; |
int dsty; |
int w; |
int h; |
int srcx; |
int srcy; |
int srcw; |
int srch; |
unsigned char *d; |
int stride; |
}; |
void kos_blit(int dstx, int dsty, int w, int h, int srcx, |
int srcy,int srcw, int srch, int stride, char *d) |
{ |
struct blit_call image; |
image.dstx=dstx; |
image.dsty=dsty; |
image.w=w; |
image.h=h; |
image.srcx=srcx; |
image.srcy=srcy; |
image.srcw=srcw; |
image.srch=srch; |
image.stride=stride; |
image.d=d; |
asm ("int $0x40"::"a"(73),"b"(0),"c"(&image)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/kolibri.h |
---|
0,0 → 1,145 |
#define NULL ((void*)0) |
#define SHM_OPEN 0 |
#define SHM_OPEN_ALWAYS 0x04 |
#define SHM_CREATE 0x08 |
#define SHM_READ 0x00 |
#define SHM_WRITE 0x01 |
#define E_NOTFOUND 5 |
#define E_ACCESS 10 |
#define E_NOMEM 30 |
#define E_PARAM 33 |
#define FILENAME_MAX 1024 |
#define BT_DEL 0x80000000 |
#define BT_HIDE 0x40000000 |
#define BT_NOFRAME 0x20000000 |
#define evReDraw 1 |
#define evKey 2 |
#define evButton 3 |
#define evMouse 6 |
#define evNetwork 8 |
#define ASCII_KEY_LEFT 176 |
#define ASCII_KEY_RIGHT 179 |
#define ASCII_KEY_DOWN 177 |
#define ASCII_KEY_UP 178 |
#define ASCII_KEY_HOME 180 |
#define ASCII_KEY_END 181 |
#define ASCII_KEY_PGDN 183 |
#define ASCII_KEY_PGUP 184 |
#define ASCII_KEY_BS 8 |
#define ASCII_KEY_TAB 9 |
#define ASCII_KEY_ENTER 13 |
#define ASCII_KEY_ESC 27 |
#define ASCII_KEY_DEL 182 |
#define ASCII_KEY_INS 185 |
#define ASCII_KEY_SPACE 032 |
#pragma pack(push,1) |
typedef struct |
{ |
unsigned p00; |
unsigned p04; |
unsigned p08; |
unsigned p12; |
unsigned p16; |
char p20; |
char *p21; |
} kol_struct70; |
#pragma pack(pop) |
#pragma pack(push,1) |
typedef struct |
{ |
unsigned p00; |
char p04; |
char p05[3]; |
unsigned p08; |
unsigned p12; |
unsigned p16; |
unsigned p20; |
unsigned p24; |
unsigned p28; |
unsigned long long p32; |
unsigned p40; |
} kol_struct_BDVK; |
#pragma pack(pop) |
#pragma pack(push,1) |
typedef struct |
{ |
char *name; |
void *data; |
} kol_struct_import; |
#pragma pack(pop) |
void kol_exit(); |
void kol_sleep(unsigned d); |
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned cs, unsigned b, char *t); |
void kol_wnd_move(unsigned x, unsigned y); |
void kol_wnd_caption(char *s); |
void kol_event_mask(unsigned e); |
unsigned kol_event_wait(); |
unsigned kol_event_wait_time(unsigned time); |
unsigned kol_event_check(); |
void kol_paint_start(); |
void kol_paint_end(); |
void kol_paint_pixel(unsigned x, unsigned y, unsigned c); |
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c); |
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c); |
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c); |
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d); |
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *buf, unsigned bits, unsigned palette); |
unsigned kol_key_get(); |
unsigned kol_key_control(); |
void kol_key_lang_set(unsigned lang); |
unsigned kol_key_lang_get(); |
void kol_key_mode_set(unsigned mode); |
unsigned kol_key_mode_get(); |
void kol_paint_image_24(unsigned x, unsigned y, unsigned w, unsigned h, char *d); |
unsigned kol_btn_get(); |
void kol_btn_type(unsigned t); |
unsigned kol_mouse_pos(); |
unsigned kol_mouse_posw(); |
unsigned kol_mouse_btn(); |
void kol_board_putc(char c); |
void kol_board_puts(char *s); |
void kol_board_puti(int n); |
int kol_file_70(kol_struct70 *k); |
kol_struct_import* kol_cofflib_load(char *name); |
void* kol_cofflib_procload (kol_struct_import *imp, char *name); |
unsigned kol_cofflib_procnum (kol_struct_import *imp); |
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n); |
unsigned kol_system_end(unsigned param); |
unsigned kol_system_cpufreq(); |
unsigned kol_system_mem(); |
unsigned kol_system_memfree(); |
unsigned kol_system_time_get(); |
unsigned kol_system_date_get(); |
void kol_path_file2dir(char *dir, char *fname); |
void kol_path_full(char *full, char *fname); |
void kol_screen_wait_rr(); |
void kol_screen_get_size(unsigned *w, unsigned *h); |
unsigned kol_skin_height(); |
unsigned kol_thread_start(unsigned start, unsigned stack); |
unsigned kol_time_tick(); |
unsigned kol_sound_speaker(char data[]); |
unsigned kol_process_info(unsigned slot, char buf1k[]); |
int kol_process_kill_pid(unsigned process); |
void kol_get_kernel_ver(char buff16b[]); |
int kol_kill_process(unsigned process); |
int kol_buffer_open(char name[], int mode, int size, char **buf); |
void kol_buffer_close(char name[]); |
int kol_clip_num(); |
char* kol_clip_get(int n); |
int kol_clip_set(int n, char buffer[]); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/kos_main.c |
---|
0,0 → 1,468 |
// getrusage |
#include "resource.h" |
#include <menuet/os.h> |
#define _WIN32 |
#include "fitz.h" |
#include "mupdf.h" |
#include "pdfapp.h" |
#include "icons/allbtns.h" |
#include "kolibri.h" |
void run_app() |
{ |
return; |
} |
/*==== DATA ====*/ |
static char Title[1024] = "uPDF"; |
static pdfapp_t gapp; |
char debugstr[256]; |
char do_not_blit=0; |
#define TOOLBAR_HEIGHT 34 |
struct process_table_entry Form; |
#define DOCUMENT_BORDER 0x979797 |
#define DOCUMENT_BG 0xABABAB |
#define SCROLL_H 25 |
short show_area_w = 65; |
short show_area_x; |
char key_mode_enter_page_number; |
int new_page_number; |
static short window_center, draw_h, draw_w; |
const char *help[] = { |
"Keys:", |
" ", |
"PageUp - go to previous page", |
"PageDown - go to next page", |
"Home - go to first page", |
"End - go to last page", |
"Down arrow - scroll current page down", |
"Up arrow - scroll current page up", |
"+/- - zoom in/out", |
"[ or l - rotate page 90 deg to the left", |
"] or r - rotate page 90 deg to the right", |
"g - grayscale on/off", |
" ", |
"Press Escape to hide help", |
0 |
}; |
/*==== CODE ====*/ |
// not implemented yet |
void wincursor(pdfapp_t *app, int curs) { } |
void winhelp(pdfapp_t *app) { } |
void winresize(pdfapp_t *app, int w, int h) { } |
void windocopy(pdfapp_t *app) { } |
void winopenuri(pdfapp_t *app, char *buf) { } |
void winrepaintsearch(pdfapp_t *app) { } |
void winwarn(pdfapp_t *app, char *msg) |
{ |
fprintf(stderr, "mupdf: %s\n", msg); |
} |
void winerror(pdfapp_t *app, fz_error error) |
{ |
fz_catch(error, "aborting"); |
exit(1); |
} |
char *winpassword(pdfapp_t *app, char *filename) |
{ |
char *r = ""; |
return r; |
random(); |
} |
void wintitle(pdfapp_t *app, char *s) |
{ |
char* param = *(char**)0x1C; |
sprintf(Title,"%s - uPDF", strrchr(param, '/') + 1 ); |
} |
void winreloadfile(pdfapp_t *app) |
{ |
//pdfapp_close(app); |
//pdfapp_open(app, filename, 0, 1); |
} |
void winclose(pdfapp_t *app) |
{ |
pdfapp_close(&gapp); |
__menuet__sys_exit(); |
} |
void RunOpenApp() |
{ |
RunApp("/sys/lod", "*pdf* ./mupdf"); |
} |
void winrepaint(pdfapp_t *app) |
{ |
winblit(&gapp); |
} |
void winblit(pdfapp_t *app) |
{ |
if (do_not_blit) return; |
if (key_mode_enter_page_number==1) HandleNewPageNumber(0); else DrawPagination(); |
if (Form.client_width > gapp.image->w) window_center = (Form.client_width - gapp.image->w) / 2; else window_center = 0; |
gapp.panx = 0; |
if (gapp.image->n == 4) { |
kos_blit(window_center + Form.client_left, |
Form.client_top + TOOLBAR_HEIGHT, |
Form.client_width, |
Form.client_height - TOOLBAR_HEIGHT, |
gapp.panx, |
gapp.pany, |
gapp.image->w, |
gapp.image->h, |
gapp.image->w * gapp.image->n, |
gapp.image->samples |
); |
} |
else if (gapp.image->n == 2) |
{ |
int i = gapp.image->w*gapp.image->h; |
unsigned char *color = malloc(i*4); |
if (color != NULL) |
{ |
unsigned char *s = gapp.image->samples; |
unsigned char *d = color; |
for (; i > 0 ; i--) |
{ |
d[2] = d[1] = d[0] = *s++; |
d[3] = *s++; |
d += 4; |
} |
kos_blit(window_center + Form.client_left, |
Form.client_top + TOOLBAR_HEIGHT, |
Form.client_width, |
Form.client_height - TOOLBAR_HEIGHT, |
gapp.panx, |
gapp.pany, |
gapp.image->w, |
gapp.image->h, |
gapp.image->w * 4, |
color |
); |
free(color); |
} |
} |
} |
void DrawPageSides(void) |
{ |
if (gapp.image->h < Form.client_height - TOOLBAR_HEIGHT) { |
draw_h = gapp.image->h - gapp.pany; |
} else { |
draw_h = Form.client_height - TOOLBAR_HEIGHT; |
} |
if (gapp.image->w < Form.client_width) { |
window_center = (Form.client_width - gapp.image->w) / 2; |
draw_w = gapp.image->w + 2; |
kol_paint_bar(0, TOOLBAR_HEIGHT, window_center-1, Form.client_height - TOOLBAR_HEIGHT, DOCUMENT_BG); |
kol_paint_bar(window_center-1, TOOLBAR_HEIGHT, 1, draw_h, DOCUMENT_BORDER); |
kol_paint_bar(window_center + gapp.image->w, TOOLBAR_HEIGHT, 1, draw_h, DOCUMENT_BORDER); |
kol_paint_bar(window_center + gapp.image->w+1, TOOLBAR_HEIGHT, Form.client_width - window_center - gapp.image->w - 1, Form.client_height - TOOLBAR_HEIGHT, DOCUMENT_BG); |
} else { |
window_center = 1; |
draw_w = Form.client_width; |
} |
kol_paint_bar(window_center - 1, gapp.image->h - gapp.pany + TOOLBAR_HEIGHT, draw_w, 1, DOCUMENT_BORDER); |
kol_paint_bar(window_center - 1, gapp.image->h - gapp.pany + TOOLBAR_HEIGHT + 1, |
draw_w, Form.client_height - gapp.image->h - TOOLBAR_HEIGHT + gapp.pany - 1, DOCUMENT_BG); |
} |
void GetNewPageNumber(void) |
{ |
new_page_number = gapp.pageno; |
key_mode_enter_page_number = 1; |
HandleNewPageNumber(0); |
} |
void HandleNewPageNumber(unsigned char key) |
{ |
char label_new_page[8]; |
if ((key >= '0') && (key <= '9')) |
{ |
new_page_number = new_page_number * 10 + key - '0'; |
} |
if (key == ASCII_KEY_BS) |
{ |
new_page_number /= 10; |
} |
if (key == ASCII_KEY_ENTER) |
{ |
ApplyNewPageNumber(); |
return; |
} |
if (key==ASCII_KEY_ESC) |
{ |
key_mode_enter_page_number = 0; |
DrawWindow(); |
return; |
} |
itoa(new_page_number, label_new_page, 10); |
strcat(label_new_page, "_"); |
kol_paint_bar(show_area_x, 6, show_area_w, 22, 0xFDF88E); |
__menuet__write_text(show_area_x + show_area_w/2 - strlen(label_new_page)*6/2, 14, 0x000000, label_new_page, strlen(label_new_page)); |
if (new_page_number > gapp.pagecount) ApplyNewPageNumber(); |
} |
void ApplyNewPageNumber(void) |
{ |
key_mode_enter_page_number = 0; |
gapp.pageno = new_page_number -1; |
pdfapp_onkey(&gapp, ']'); |
} |
void DrawPagination(void) |
{ |
char pages_display[12]; |
kol_paint_bar(show_area_x, 6, show_area_w, 22, 0xF4F4F4); |
sprintf (pages_display, "%d/%d", gapp.pageno, gapp.pagecount); |
__menuet__write_text(show_area_x + show_area_w/2 - strlen(pages_display)*6/2, 14, 0x000000, pages_display, strlen(pages_display)); |
} |
void DrawToolbarButton(int x, char image_id) |
{ |
__menuet__make_button(x, 5, 26-1, 24-1, 10 + image_id + BT_HIDE, 0); |
__menuet__putimage(x, 5, 26, 24, image_id * 24 * 26 * 3 + toolbar_image); |
} |
void DrawWindow(void) |
{ |
kol_paint_bar(0, 0, Form.client_width, TOOLBAR_HEIGHT - 1, 0xe1e1e1); // bar on the top (buttons holder) |
kol_paint_bar(0, TOOLBAR_HEIGHT - 1, Form.client_width, 1, 0x7F7F7F); |
DrawToolbarButton(8,0); //open_folder |
DrawToolbarButton(42,1); //magnify - |
DrawToolbarButton(67,2); //magnify + |
DrawToolbarButton(101,6); //rotate left |
DrawToolbarButton(126,7); //rotate right |
DrawToolbarButton(Form.client_width - 160,3); //show help |
show_area_x = Form.client_width - show_area_w - 34; |
DrawToolbarButton(show_area_x - 26,4); //prev page |
DrawToolbarButton(show_area_x + show_area_w,5); //nex page |
__menuet__make_button(show_area_x-1, 5, show_area_w+1, 23, 20 + BT_HIDE, 0xA4A4A4); |
kol_paint_bar(show_area_x, 5, show_area_w, 1, 0xA4A4A4); |
kol_paint_bar(show_area_x, 28, show_area_w, 1, 0xA4A4A4); |
winblit(&gapp); |
DrawPageSides(); |
} |
/* Actions */ |
void PageScrollDown(void) |
{ |
//pdfapp_onkey(&gapp, 'k'); //move down |
if (gapp.image->h - gapp.pany - SCROLL_H < Form.client_height - TOOLBAR_HEIGHT) |
{ |
pdfapp_onkey(&gapp, '.'); |
} |
else { |
gapp.pany += SCROLL_H; |
winblit(&gapp); |
} |
} |
void PageScrollUp(void) |
{ |
//pdfapp_onkey(&gapp, 'j'); //move up |
if (gapp.pany >= SCROLL_H) { |
gapp.pany -= SCROLL_H; |
winblit(&gapp); |
} |
else { |
//not very nice way of using do_not_blit, but it simple |
if (gapp.pageno == 1) return; |
do_not_blit = 1; |
pdfapp_onkey(&gapp, ','); |
do_not_blit = 0; |
gapp.pany = gapp.image->h - SCROLL_H - Form.client_height + TOOLBAR_HEIGHT; |
if (gapp.pany < 0) gapp.pany = 0; |
//sprintf (debugstr, "gapp.pany: %d \n", gapp.pany); |
//kol_board_puts(debugstr); |
winblit(&gapp); |
} |
} |
void RunApp(char app[], char param[]) |
{ |
kol_struct70 r; |
r.p00 = 7; |
r.p04 = 0; |
r.p08 = param; |
r.p12 = 0; |
r.p16 = 0; |
r.p20 = 0; |
r.p21 = app; |
kol_file_70(&r); |
} |
void PageZoomIn(void) |
{ |
pdfapp_onkey(&gapp, '+'); |
DrawPageSides(); |
} |
void PageZoomOut(void) |
{ |
pdfapp_onkey(&gapp, '-'); |
DrawPageSides(); |
} |
void PageRotateLeft(void) |
{ |
pdfapp_onkey(&gapp, 'L'); |
DrawPageSides(); |
} |
void PageRotateRight(void) |
{ |
pdfapp_onkey(&gapp, 'R'); |
DrawPageSides(); |
} |
int main (void) |
{ |
char ii, mouse_wheels_state; |
char* original_command_line = *(char**)0x1C; |
if (*original_command_line == 0) { |
kol_board_puts("uPDF: no param set, showing OpenDialog"); |
RunOpenApp(); |
__menuet__sys_exit(); |
} |
kol_board_puts(original_command_line); |
kol_board_puts("\n"); |
char buf[128]; |
int resolution = 72; |
int pageno = 1; |
fz_accelerate(); |
kol_board_puts("PDF init\n"); |
pdfapp_init(&gapp); |
gapp.scrw = 600; |
gapp.scrh = 400; |
gapp.resolution = resolution; |
gapp.pageno = pageno; |
kol_board_puts("PDF Open\n"); |
pdfapp_open(&gapp, original_command_line, 0, 0); |
kol_board_puts("PDF Opened\n"); |
wintitle(&gapp, 0); |
kol_board_puts("Inital paint\n"); |
int butt, key, screen_max_x, screen_max_y; |
__menuet__get_screen_max(&screen_max_x, &screen_max_y); |
__menuet__set_bitfield_for_wanted_events(EVENT_REDRAW+EVENT_KEY+EVENT_BUTTON+EVENT_MOUSE_CHANGE); |
for(;;) |
{ |
switch(__menuet__wait_for_event()) |
{ |
case evReDraw: |
// gapp.shrinkwrap = 2; |
__menuet__window_redraw(1); |
__menuet__define_window(screen_max_x / 2 - 350-50+kos_random(50), |
screen_max_y / 2 - 300-50+kos_random(50), |
700, 600, 0x73000000, 0x800000FF, Title); |
__menuet__window_redraw(2); |
__menuet__get_process_table(&Form, PID_WHOAMI); |
if (Form.window_state > 2) continue; //fix rolled up |
Form.client_width++; //fix for Menuet kernel bug |
Form.client_height++; //fix for Menuet kernel bug |
DrawWindow(); |
break; |
case evKey: |
key = __menuet__getkey(); |
if (key_mode_enter_page_number) |
{ |
HandleNewPageNumber(key); |
break; |
} |
if (key==ASCII_KEY_ESC) DrawWindow(); //close help |
if (key==ASCII_KEY_PGDN) pdfapp_onkey(&gapp, ']'); |
if (key==ASCII_KEY_PGUP) pdfapp_onkey(&gapp, '['); |
if (key==ASCII_KEY_HOME) pdfapp_onkey(&gapp, 'g'); |
if (key==ASCII_KEY_END ) pdfapp_onkey(&gapp, 'G'); |
if (key=='g' ) pdfapp_onkey(&gapp, 'c'); |
if ((key=='[' ) || (key=='l')) PageRotateLeft(); |
if ((key==']' ) || (key=='r')) PageRotateRight(); |
if (key==ASCII_KEY_DOWN ) PageScrollDown(); |
if (key==ASCII_KEY_UP ) PageScrollUp(); |
if (key=='-') PageZoomOut(); |
if ((key=='=') || (key=='+')) PageZoomIn(); |
break; |
case evButton: |
butt = __menuet__get_button_id(); |
if(butt==1) __menuet__sys_exit(); |
if(butt==10) RunOpenApp(); |
if(butt==11) PageZoomOut(); //magnify - |
if(butt==12) PageZoomIn(); //magnify + |
if(butt==13) //show help |
{ |
kol_paint_bar(0, TOOLBAR_HEIGHT, Form.client_width, Form.client_height - TOOLBAR_HEIGHT, 0xF2F2F2); |
__menuet__write_text(20, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0); |
__menuet__write_text(21, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0); |
for (ii=0; help[ii]!=0; ii++) { |
__menuet__write_text(20, TOOLBAR_HEIGHT + 60 + ii * 15, 0x80000000, help[ii], 0); |
} |
} |
if(butt==14) pdfapp_onkey(&gapp, '['); //previous page |
if(butt==15) pdfapp_onkey(&gapp, ']'); //next page |
if(butt==16) PageRotateLeft(); |
if(butt==17) PageRotateRight(); |
if(butt==20) GetNewPageNumber(); |
break; |
case evMouse: |
if (mouse_wheels_state = kos_get_mouse_wheels()) |
{ |
if (mouse_wheels_state==1) { PageScrollDown(); PageScrollDown(); } |
if (mouse_wheels_state==-1) { PageScrollUp(); PageScrollUp(); } |
} |
//sprintf (debugstr, "mouse_wheels_state: %d \n", mouse_wheels_state); |
//kol_board_puts(debugstr); |
//pdfapp_onmouse(&gapp, int x, int y, int btn, int modifiers, int state) |
break; |
} |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/pdfapp.c |
---|
0,0 → 1,1171 |
#include "fitz.h" |
#include "mupdf.h" |
#include "pdfapp.h" |
// #include <ctype.h> /* for tolower() */ |
#define ZOOMSTEP 1.142857 |
#define BEYOND_THRESHHOLD 40 |
enum panning |
{ |
DONT_PAN = 0, |
PAN_TO_TOP, |
PAN_TO_BOTTOM |
}; |
static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repaint); |
static void pdfapp_warn(pdfapp_t *app, const char *fmt, ...) |
{ |
char buf[1024]; |
va_list ap; |
va_start(ap, fmt); |
vsprintf(buf, fmt, ap); |
va_end(ap); |
winwarn(app, buf); |
} |
static void pdfapp_error(pdfapp_t *app, fz_error error) |
{ |
winerror(app, error); |
} |
char *pdfapp_version(pdfapp_t *app) |
{ |
return |
"MuPDF 0.9\n" |
"Copyright 2006-2011 Artifex Sofware, Inc.\n"; |
} |
char *pdfapp_usage(pdfapp_t *app) |
{ |
return " "; |
/* |
"L\t\t-- rotate left\n" |
"R\t\t-- rotate right\n" |
"h\t\t-- scroll left\n" |
"j down\t\t-- scroll down\n" |
"k up\t\t-- scroll up\n" |
"l\t\t-- scroll right\n" |
"+\t\t-- zoom in\n" |
"-\t\t-- zoom out\n" |
"w\t\t-- shrinkwrap\n" |
"r\t\t-- reload file\n" |
". pgdn right space\t-- next page\n" |
", pgup left b\t-- previous page\n" |
">\t\t-- next 10 pages\n" |
"<\t\t-- back 10 pages\n" |
"m\t\t-- mark page for snap back\n" |
"t\t\t-- pop back to latest mark\n" |
"1m\t\t-- mark page in register 1\n" |
"1t\t\t-- go to page in register 1\n" |
"123g\t\t-- go to page 123\n" |
"/\t\t-- search for text\n" |
"n\t\t-- find next search result\n" |
"N\t\t-- find previous search result\n" |
"c\t\t-- toggle between color and grayscale\n" |
; |
*/ |
} |
void pdfapp_init(pdfapp_t *app) |
{ |
memset(app, 0, sizeof(pdfapp_t)); |
app->scrw = 640; |
app->scrh = 480; |
app->resolution = 72; |
} |
void pdfapp_invert(pdfapp_t *app, fz_bbox rect) |
{ |
unsigned char *p; |
int x, y, n; |
int x0 = CLAMP(rect.x0 - app->image->x, 0, app->image->w - 1); |
int x1 = CLAMP(rect.x1 - app->image->x, 0, app->image->w - 1); |
int y0 = CLAMP(rect.y0 - app->image->y, 0, app->image->h - 1); |
int y1 = CLAMP(rect.y1 - app->image->y, 0, app->image->h - 1); |
for (y = y0; y < y1; y++) |
{ |
p = app->image->samples + (y * app->image->w + x0) * app->image->n; |
for (x = x0; x < x1; x++) |
{ |
for (n = app->image->n; n > 0; n--, p++) |
*p = 255 - *p; |
} |
} |
} |
static void pdfapp_open_pdf(pdfapp_t *app, char *filename, int fd) |
{ |
fz_error error; |
fz_stream *file; |
char *password = ""; |
fz_obj *obj; |
fz_obj *info; |
/* |
* Open PDF and load xref table |
*/ |
__menuet__debug_out("FZ OPEN\n"); |
//file = fz_open_fd(fd); |
__menuet__debug_out("FZ ready\n"); |
error = pdf_open_xref(&app->xref, filename, NULL); |
if (error){ |
__menuet__debug_out("FZ can't open\n"); |
pdfapp_error(app, fz_rethrow(error, "cannot open document '%s'", filename));} |
fz_close(file); |
/* |
* Handle encrypted PDF files |
*/ |
/* |
if (pdf_needs_password(app->xref)) |
{ |
int okay = pdf_authenticate_password(app->xref, password); |
while (!okay) |
{ |
password = winpassword(app, filename); |
if (!password) |
exit(1); |
okay = pdf_authenticate_password(app->xref, password); |
if (!okay) |
pdfapp_warn(app, "Invalid password."); |
} |
} |
* */ |
/* |
* Load meta information |
*/ |
/* |
app->outline = pdf_load_outline(app->xref); |
app->doctitle = filename; |
if (strrchr(app->doctitle, '\\')) |
app->doctitle = strrchr(app->doctitle, '\\') + 1; |
if (strrchr(app->doctitle, '/')) |
app->doctitle = strrchr(app->doctitle, '/') + 1; |
info = fz_dict_gets(app->xref->trailer, "Info"); |
if (info) |
{ |
obj = fz_dict_gets(info, "Title"); |
if (obj) |
app->doctitle = pdf_to_utf8(obj); |
} */ |
/* |
* Start at first page |
*/ |
__menuet__debug_out("Start at first page\n"); |
error = pdf_load_page_tree(app->xref); |
if (error) { |
__menuet__debug_out("Can't load tree\n"); |
pdfapp_error(app, fz_rethrow(error, "cannot load page tree"));} |
__menuet__debug_out("Page counter\n"); |
app->pagecount = pdf_count_pages(app->xref); |
__menuet__debug_out("All is set!\n"); |
} |
void pdfapp_open(pdfapp_t *app, char *filename, int fd, int reload) |
{ |
pdfapp_open_pdf(app, filename, fd); |
app->cache = fz_new_glyph_cache(); |
if (app->pageno < 1) |
app->pageno = 1; |
if (app->pageno > app->pagecount) |
app->pageno = app->pagecount; |
if (app->resolution < MINRES) |
app->resolution = MINRES; |
if (app->resolution > MAXRES) |
app->resolution = MAXRES; |
if (!reload) |
{ |
app->shrinkwrap = 1; |
app->rotate = 0; |
app->panx = 0; |
app->pany = 0; |
} |
pdfapp_showpage(app, 1, 1, 1); |
} |
void pdfapp_close(pdfapp_t *app) |
{ |
if (app->cache) |
fz_free_glyph_cache(app->cache); |
app->cache = NULL; |
if (app->image) |
fz_drop_pixmap(app->image); |
app->image = NULL; |
if (app->outline) |
pdf_free_outline(app->outline); |
app->outline = NULL; |
if (app->xref) |
{ |
if (app->xref->store) |
pdf_free_store(app->xref->store); |
app->xref->store = NULL; |
pdf_free_xref(app->xref); |
app->xref = NULL; |
} |
fz_flush_warnings(); |
} |
static fz_matrix pdfapp_viewctm(pdfapp_t *app) |
{ |
fz_matrix ctm; |
ctm = fz_identity; |
ctm = fz_concat(ctm, fz_translate(0, -app->page_bbox.y1)); |
if (app->xref) |
ctm = fz_concat(ctm, fz_scale(app->resolution/72.0f, -app->resolution/72.0f)); |
else |
ctm = fz_concat(ctm, fz_scale(app->resolution/96.0f, app->resolution/96.0f)); |
ctm = fz_concat(ctm, fz_rotate(app->rotate + app->page_rotate)); |
return ctm; |
} |
static void pdfapp_panview(pdfapp_t *app, int newx, int newy) |
{ |
if (newx < 0) |
newx = 0; |
if (newy < 0) |
newy = 0; |
if (newx + app->image->w < app->winw) |
newx = app->winw - app->image->w; |
if (newy + app->image->h < app->winh) |
newy = app->winh - app->image->h; |
if (app->winw >= app->image->w) |
newx = (app->winw - app->image->w) / 2; |
if (app->winh >= app->image->h) |
newy = (app->winh - app->image->h) / 2; |
if (newx != app->panx || newy != app->pany) |
winrepaint(app); |
if (newy > app->image->h) { |
app->pageno++; |
if (app->pageno > app->pagecount) |
app->pageno = app->pagecount; |
newy = 0; |
app->pany = newy; |
pdfapp_showpage(app, 1, 1, 1); |
} |
app->panx = newx; |
app->pany = newy; |
} |
static void pdfapp_loadpage_pdf(pdfapp_t *app) |
{ |
pdf_page *page; |
fz_error error; |
fz_device *mdev; |
error = pdf_load_page(&page, app->xref, app->pageno - 1); |
if (error) |
pdfapp_error(app, error); |
app->page_bbox = page->mediabox; |
app->page_rotate = page->rotate; |
app->page_links = page->links; |
page->links = NULL; |
/* Create display list */ |
app->page_list = fz_new_display_list(); |
mdev = fz_new_list_device(app->page_list); |
error = pdf_run_page(app->xref, page, mdev, fz_identity); |
if (error) |
{ |
error = fz_rethrow(error, "cannot draw page %d in '%s'", app->pageno, app->doctitle); |
pdfapp_error(app, error); |
} |
fz_free_device(mdev); |
pdf_free_page(page); |
pdf_age_store(app->xref->store, 3); |
} |
static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repaint) |
{ |
char buf[256]; |
fz_device *idev; |
fz_device *tdev; |
fz_colorspace *colorspace; |
fz_matrix ctm; |
fz_bbox bbox; |
wincursor(app, WAIT); |
if (loadpage) |
{ |
if (app->page_list) |
fz_free_display_list(app->page_list); |
if (app->page_text) |
fz_free_text_span(app->page_text); |
if (app->page_links) |
pdf_free_link(app->page_links); |
if (app->xref) |
pdfapp_loadpage_pdf(app); |
/* Zero search hit position */ |
app->hit = -1; |
app->hitlen = 0; |
/* Extract text */ |
app->page_text = fz_new_text_span(); |
tdev = fz_new_text_device(app->page_text); |
fz_execute_display_list(app->page_list, tdev, fz_identity, fz_infinite_bbox); |
fz_free_device(tdev); |
} |
if (drawpage) |
{ |
sprintf(buf, "%s - %d/%d (%d dpi)", app->doctitle, |
app->pageno, app->pagecount, app->resolution); |
wintitle(app, buf); |
ctm = pdfapp_viewctm(app); |
bbox = fz_round_rect(fz_transform_rect(ctm, app->page_bbox)); |
/* Draw */ |
if (app->image) |
fz_drop_pixmap(app->image); |
if (app->grayscale) |
colorspace = fz_device_gray; |
else |
//#ifdef _WIN32 |
colorspace = fz_device_bgr; |
//#else |
// colorspace = fz_device_rgb; |
//#endif |
app->image = fz_new_pixmap_with_rect(colorspace, bbox); |
fz_clear_pixmap_with_color(app->image, 255); |
idev = fz_new_draw_device(app->cache, app->image); |
fz_execute_display_list(app->page_list, idev, ctm, bbox); |
fz_free_device(idev); |
} |
if (repaint) |
{ |
pdfapp_panview(app, app->panx, app->pany); |
if (app->shrinkwrap) |
{ |
__menuet__debug_out ("SHRINK\n"); |
int w = app->image->w; |
int h = app->image->h; |
if (app->winw == w) |
app->panx = 0; |
if (app->winh == h) |
app->pany = 0; |
if (w > app->scrw * 90 / 100) |
w = app->scrw * 90 / 100; |
if (h > app->scrh * 90 / 100) |
h = app->scrh * 90 / 100; |
if (w != app->winw || h != app->winh) |
winresize(app, w, h); |
} |
winrepaint(app); |
wincursor(app, ARROW); |
} |
fz_flush_warnings(); |
} |
static void pdfapp_gotouri(pdfapp_t *app, fz_obj *uri) |
{ |
char *buf; |
buf = fz_malloc(fz_to_str_len(uri) + 1); |
memcpy(buf, fz_to_str_buf(uri), fz_to_str_len(uri)); |
buf[fz_to_str_len(uri)] = 0; |
winopenuri(app, buf); |
fz_free(buf); |
} |
static void pdfapp_gotopage(pdfapp_t *app, fz_obj *obj) |
{ |
int number; |
number = pdf_find_page_number(app->xref, obj); |
if (number < 0) |
return; |
if (app->histlen + 1 == 256) |
{ |
memmove(app->hist, app->hist + 1, sizeof(int) * 255); |
app->histlen --; |
} |
app->hist[app->histlen++] = app->pageno; |
app->pageno = number + 1; |
pdfapp_showpage(app, 1, 1, 1); |
} |
static inline fz_bbox bboxcharat(fz_text_span *span, int idx) |
{ |
int ofs = 0; |
while (span) |
{ |
if (idx < ofs + span->len) |
return span->text[idx - ofs].bbox; |
if (span->eol) |
{ |
if (idx == ofs + span->len) |
return fz_empty_bbox; |
ofs ++; |
} |
ofs += span->len; |
span = span->next; |
} |
return fz_empty_bbox; |
} |
void pdfapp_inverthit(pdfapp_t *app) |
{ |
fz_bbox hitbox, bbox; |
fz_matrix ctm; |
int i; |
if (app->hit < 0) |
return; |
hitbox = fz_empty_bbox; |
ctm = pdfapp_viewctm(app); |
for (i = app->hit; i < app->hit + app->hitlen; i++) |
{ |
bbox = bboxcharat(app->page_text, i); |
if (fz_is_empty_rect(bbox)) |
{ |
if (!fz_is_empty_rect(hitbox)) |
pdfapp_invert(app, fz_transform_bbox(ctm, hitbox)); |
hitbox = fz_empty_bbox; |
} |
else |
{ |
hitbox = fz_union_bbox(hitbox, bbox); |
} |
} |
if (!fz_is_empty_rect(hitbox)) |
pdfapp_invert(app, fz_transform_bbox(ctm, hitbox)); |
} |
static inline int charat(fz_text_span *span, int idx) |
{ |
int ofs = 0; |
while (span) |
{ |
if (idx < ofs + span->len) |
return span->text[idx - ofs].c; |
if (span->eol) |
{ |
if (idx == ofs + span->len) |
return ' '; |
ofs ++; |
} |
ofs += span->len; |
span = span->next; |
} |
return 0; |
} |
static int textlen(fz_text_span *span) |
{ |
int len = 0; |
while (span) |
{ |
len += span->len; |
if (span->eol) |
len ++; |
span = span->next; |
} |
return len; |
} |
static int match(char *s, fz_text_span *span, int n) |
{ |
int orig = n; |
int c; |
while ((c = *s++)) |
{ |
if (c == ' ' && charat(span, n) == ' ') |
{ |
while (charat(span, n) == ' ') |
n++; |
} |
else |
{ |
if (tolower(c) != tolower(charat(span, n))) |
return 0; |
n++; |
} |
} |
return n - orig; |
} |
static void pdfapp_searchforward(pdfapp_t *app, enum panning *panto) |
{ |
int matchlen; |
int test; |
int len; |
int startpage; |
wincursor(app, WAIT); |
startpage = app->pageno; |
do |
{ |
len = textlen(app->page_text); |
if (app->hit >= 0) |
test = app->hit + strlen(app->search); |
else |
test = 0; |
while (test < len) |
{ |
matchlen = match(app->search, app->page_text, test); |
if (matchlen) |
{ |
app->hit = test; |
app->hitlen = matchlen; |
wincursor(app, HAND); |
winrepaint(app); |
return; |
} |
test++; |
} |
app->pageno++; |
if (app->pageno > app->pagecount) |
app->pageno = 1; |
pdfapp_showpage(app, 1, 0, 0); |
*panto = PAN_TO_TOP; |
} while (app->pageno != startpage); |
if (app->pageno == startpage) |
{ |
pdfapp_warn(app, "String '%s' not found.", app->search); |
winrepaintsearch(app); |
} |
else |
winrepaint(app); |
wincursor(app, HAND); |
} |
static void pdfapp_searchbackward(pdfapp_t *app, enum panning *panto) |
{ |
int matchlen; |
int test; |
int len; |
int startpage; |
wincursor(app, WAIT); |
startpage = app->pageno; |
do |
{ |
len = textlen(app->page_text); |
if (app->hit >= 0) |
test = app->hit - 1; |
else |
test = len; |
while (test >= 0) |
{ |
matchlen = match(app->search, app->page_text, test); |
if (matchlen) |
{ |
app->hit = test; |
app->hitlen = matchlen; |
wincursor(app, HAND); |
winrepaint(app); |
return; |
} |
test--; |
} |
app->pageno--; |
if (app->pageno < 1) |
app->pageno = app->pagecount; |
pdfapp_showpage(app, 1, 0, 0); |
*panto = PAN_TO_BOTTOM; |
} while (app->pageno != startpage); |
if (app->pageno == startpage) |
{ |
pdfapp_warn(app, "String '%s' not found.", app->search); |
winrepaintsearch(app); |
} |
else |
winrepaint(app); |
wincursor(app, HAND); |
} |
void pdfapp_onresize(pdfapp_t *app, int w, int h) |
{ |
if (app->winw != w || app->winh != h) |
{ |
app->winw = w; |
app->winh = h; |
pdfapp_panview(app, app->panx, app->pany); |
winrepaint(app); |
} |
} |
void pdfapp_onkey(pdfapp_t *app, int c) |
{ |
int oldpage = app->pageno; |
enum panning panto = PAN_TO_TOP; |
int loadpage = 1; |
if (app->isediting) |
{ |
int n = strlen(app->search); |
if (c < ' ') |
{ |
if (c == '\b' && n > 0) |
{ |
app->search[n - 1] = 0; |
winrepaintsearch(app); |
} |
if (c == '\n' || c == '\r') |
{ |
app->isediting = 0; |
if (n > 0) |
{ |
winrepaintsearch(app); |
pdfapp_onkey(app, 'n'); |
} |
else |
winrepaint(app); |
} |
if (c == '\033') |
{ |
app->isediting = 0; |
winrepaint(app); |
} |
} |
else |
{ |
if (n + 2 < sizeof app->search) |
{ |
app->search[n] = c; |
app->search[n + 1] = 0; |
winrepaintsearch(app); |
} |
} |
return; |
} |
/* |
* Save numbers typed for later |
*/ |
if (c >= '0' && c <= '9') |
{ |
app->number[app->numberlen++] = c; |
app->number[app->numberlen] = '\0'; |
} |
switch (c) |
{ |
case '?': |
winhelp(app); |
break; |
case 'q': |
winclose(app); |
break; |
/* |
* Zoom and rotate |
*/ |
case '+': |
case '=': |
app->resolution *= ZOOMSTEP; |
if (app->resolution > MAXRES) |
app->resolution = MAXRES; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
case '-': |
app->resolution /= ZOOMSTEP; |
if (app->resolution < MINRES) |
app->resolution = MINRES; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
case 'L': |
app->rotate -= 90; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
case 'R': |
app->rotate += 90; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
case 'c': |
app->grayscale ^= 1; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
#ifndef NDEBUG |
case 'a': |
app->rotate -= 15; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
case 's': |
app->rotate += 15; |
pdfapp_showpage(app, 0, 1, 1); |
break; |
#endif |
/* |
* Pan view, but dont need to repaint image |
*/ |
case 'w': |
app->shrinkwrap = 1; |
app->panx = app->pany = 0; |
pdfapp_showpage(app, 0, 0, 1); |
break; |
case 'h': |
app->panx += app->image->w / 10; |
pdfapp_showpage(app, 0, 0, 1); |
break; |
case 'j': |
app->pany -= app->image->h / 10; |
pdfapp_showpage(app, 0, 0, 1); |
break; |
case 'k': |
app->pany += app->image->h / 10; |
pdfapp_showpage(app, 0, 0, 1); |
break; |
case 'l': |
app->panx -= app->image->w / 10; |
pdfapp_showpage(app, 0, 0, 1); |
break; |
/* |
* Page navigation |
*/ |
case 'g': |
case '\n': |
case '\r': |
if (app->numberlen > 0) |
app->pageno = atoi(app->number); |
else |
app->pageno = 1; |
break; |
case 'G': |
app->pageno = app->pagecount; |
break; |
case 'm': |
if (app->numberlen > 0) |
{ |
int idx = atoi(app->number); |
if (idx >= 0 && idx < nelem(app->marks)) |
app->marks[idx] = app->pageno; |
} |
else |
{ |
if (app->histlen + 1 == 256) |
{ |
memmove(app->hist, app->hist + 1, sizeof(int) * 255); |
app->histlen --; |
} |
app->hist[app->histlen++] = app->pageno; |
} |
break; |
case 't': |
if (app->numberlen > 0) |
{ |
int idx = atoi(app->number); |
if (idx >= 0 && idx < nelem(app->marks)) |
if (app->marks[idx] > 0) |
app->pageno = app->marks[idx]; |
} |
else if (app->histlen > 0) |
app->pageno = app->hist[--app->histlen]; |
break; |
/* |
* Back and forth ... |
*/ |
case ',': |
panto = PAN_TO_BOTTOM; |
if (app->numberlen > 0) |
app->pageno -= atoi(app->number); |
else |
app->pageno--; |
break; |
case '.': |
panto = PAN_TO_TOP; |
if (app->numberlen > 0) |
app->pageno += atoi(app->number); |
else |
app->pageno++; |
break; |
case 'b': |
panto = DONT_PAN; |
if (app->numberlen > 0) |
app->pageno -= atoi(app->number); |
else |
app->pageno--; |
break; |
case ' ': |
panto = DONT_PAN; |
if (app->numberlen > 0) |
app->pageno += atoi(app->number); |
else |
app->pageno++; |
break; |
case ']': |
panto = PAN_TO_TOP; |
app->pageno++; |
break; |
case '[': |
panto = PAN_TO_TOP; |
app->pageno--; |
break; |
case '<': |
panto = PAN_TO_TOP; |
app->pageno -= 10; |
break; |
case '>': |
panto = PAN_TO_TOP; |
app->pageno += 10; |
break; |
/* |
* Reloading the file... |
*/ |
case 'r': |
panto = DONT_PAN; |
oldpage = -1; |
winreloadfile(app); |
break; |
/* |
* Searching |
*/ |
case '/': |
app->isediting = 1; |
app->search[0] = 0; |
app->hit = -1; |
app->hitlen = 0; |
winrepaintsearch(app); |
break; |
case 'n': |
pdfapp_searchforward(app, &panto); |
loadpage = 0; |
break; |
case 'N': |
pdfapp_searchbackward(app, &panto); |
loadpage = 0; |
break; |
} |
if (c < '0' || c > '9') |
app->numberlen = 0; |
if (app->pageno < 1) |
app->pageno = 1; |
if (app->pageno > app->pagecount) |
app->pageno = app->pagecount; |
if (app->pageno != oldpage) |
{ |
switch (panto) |
{ |
case PAN_TO_TOP: |
app->pany = 0; |
break; |
case PAN_TO_BOTTOM: |
app->pany = -2000; |
break; |
case DONT_PAN: |
break; |
} |
pdfapp_showpage(app, loadpage, 1, 1); |
} |
} |
void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int state) |
{ |
pdf_link *link; |
fz_matrix ctm; |
fz_point p; |
p.x = x - app->panx + app->image->x; |
p.y = y - app->pany + app->image->y; |
ctm = pdfapp_viewctm(app); |
ctm = fz_invert_matrix(ctm); |
p = fz_transform_point(ctm, p); |
for (link = app->page_links; link; link = link->next) |
{ |
if (p.x >= link->rect.x0 && p.x <= link->rect.x1) |
if (p.y >= link->rect.y0 && p.y <= link->rect.y1) |
break; |
} |
if (link) |
{ |
wincursor(app, HAND); |
if (btn == 1 && state == 1) |
{ |
if (link->kind == PDF_LINK_URI) |
pdfapp_gotouri(app, link->dest); |
else if (link->kind == PDF_LINK_GOTO) |
pdfapp_gotopage(app, fz_array_get(link->dest, 0)); /* [ pageobj ... ] */ |
return; |
} |
} |
else |
{ |
wincursor(app, ARROW); |
} |
if (state == 1) |
{ |
if (btn == 1 && !app->iscopying) |
{ |
app->ispanning = 1; |
app->selx = x; |
app->sely = y; |
app->beyondy = 0; |
} |
if (btn == 3 && !app->ispanning) |
{ |
app->iscopying = 1; |
app->selx = x; |
app->sely = y; |
app->selr.x0 = x; |
app->selr.x1 = x; |
app->selr.y0 = y; |
app->selr.y1 = y; |
} |
if (btn == 4 || btn == 5) /* scroll wheel */ |
{ |
int dir = btn == 4 ? 1 : -1; |
app->ispanning = app->iscopying = 0; |
if (modifiers & (1<<2)) |
{ |
/* zoom in/out if ctrl is pressed */ |
if (dir > 0) |
app->resolution *= ZOOMSTEP; |
else |
app->resolution /= ZOOMSTEP; |
if (app->resolution > MAXRES) |
app->resolution = MAXRES; |
if (app->resolution < MINRES) |
app->resolution = MINRES; |
pdfapp_showpage(app, 0, 1, 1); |
} |
else |
{ |
/* scroll up/down, or left/right if |
shift is pressed */ |
int isx = (modifiers & (1<<0)); |
int xstep = isx ? 20 * dir : 0; |
int ystep = !isx ? 20 * dir : 0; |
pdfapp_panview(app, app->panx + xstep, app->pany + ystep); |
} |
} |
} |
else if (state == -1) |
{ |
if (app->iscopying) |
{ |
app->iscopying = 0; |
app->selr.x0 = MIN(app->selx, x) - app->panx + app->image->x; |
app->selr.x1 = MAX(app->selx, x) - app->panx + app->image->x; |
app->selr.y0 = MIN(app->sely, y) - app->pany + app->image->y; |
app->selr.y1 = MAX(app->sely, y) - app->pany + app->image->y; |
winrepaint(app); |
if (app->selr.x0 < app->selr.x1 && app->selr.y0 < app->selr.y1) |
windocopy(app); |
} |
if (app->ispanning) |
app->ispanning = 0; |
} |
else if (app->ispanning) |
{ |
int newx = app->panx + x - app->selx; |
int newy = app->pany + y - app->sely; |
/* Scrolling beyond limits implies flipping pages */ |
/* Are we requested to scroll beyond limits? */ |
if (newy + app->image->h < app->winh || newy > 0) |
{ |
/* Yes. We can assume that deltay != 0 */ |
int deltay = y - app->sely; |
/* Check whether the panning has occured in the |
* direction that we are already crossing the |
* limit it. If not, we can conclude that we |
* have switched ends of the page and will thus |
* start over counting. |
*/ |
if( app->beyondy == 0 || (app->beyondy ^ deltay) >= 0 ) |
{ |
/* Updating how far we are beyond and |
* flipping pages if beyond threshhold |
*/ |
app->beyondy += deltay; |
if (app->beyondy > BEYOND_THRESHHOLD) |
{ |
if( app->pageno > 1 ) |
{ |
app->pageno--; |
pdfapp_showpage(app, 1, 1, 1); |
newy = -app->image->h; |
} |
app->beyondy = 0; |
} |
else if (app->beyondy < -BEYOND_THRESHHOLD) |
{ |
if( app->pageno < app->pagecount ) |
{ |
app->pageno++; |
pdfapp_showpage(app, 1, 1, 1); |
newy = 0; |
} |
app->beyondy = 0; |
} |
} |
else |
app->beyondy = 0; |
} |
/* Although at this point we've already determined that |
* or that no scrolling will be performed in |
* y-direction, the x-direction has not yet been taken |
* care off. Therefore |
*/ |
pdfapp_panview(app, newx, newy); |
app->selx = x; |
app->sely = y; |
} |
else if (app->iscopying) |
{ |
app->selr.x0 = MIN(app->selx, x) - app->panx + app->image->x; |
app->selr.x1 = MAX(app->selx, x) - app->panx + app->image->x; |
app->selr.y0 = MIN(app->sely, y) - app->pany + app->image->y; |
app->selr.y1 = MAX(app->sely, y) - app->pany + app->image->y; |
winrepaint(app); |
} |
} |
void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen) |
{ |
fz_bbox hitbox; |
fz_matrix ctm; |
fz_text_span *span; |
int c, i, p; |
int seen; |
int x0 = app->selr.x0; |
int x1 = app->selr.x1; |
int y0 = app->selr.y0; |
int y1 = app->selr.y1; |
ctm = pdfapp_viewctm(app); |
p = 0; |
for (span = app->page_text; span; span = span->next) |
{ |
seen = 0; |
for (i = 0; i < span->len; i++) |
{ |
hitbox = fz_transform_bbox(ctm, span->text[i].bbox); |
c = span->text[i].c; |
if (c < 32) |
c = '?'; |
if (hitbox.x1 >= x0 && hitbox.x0 <= x1 && hitbox.y1 >= y0 && hitbox.y0 <= y1) |
{ |
if (p < ucslen - 1) |
ucsbuf[p++] = c; |
seen = 1; |
} |
} |
if (seen && span->eol) |
{ |
#ifdef _WIN32 |
if (p < ucslen - 1) |
ucsbuf[p++] = '\r'; |
#endif |
if (p < ucslen - 1) |
ucsbuf[p++] = '\n'; |
} |
} |
ucsbuf[p] = 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/pdfapp.h |
---|
0,0 → 1,104 |
/* |
* Utility object for handling a pdf application / view |
* Takes care of PDF loading and displaying and navigation, |
* uses a number of callbacks to the GUI app. |
*/ |
#define MINRES 54 |
#define MAXRES 300 |
typedef struct pdfapp_s pdfapp_t; |
enum { ARROW, HAND, WAIT }; |
extern void winwarn(pdfapp_t*, char *s); |
extern void winerror(pdfapp_t*, fz_error error); |
extern void wintitle(pdfapp_t*, char *title); |
extern void winresize(pdfapp_t*, int w, int h); |
extern void winrepaint(pdfapp_t*); |
extern void winrepaintsearch(pdfapp_t*); |
extern char *winpassword(pdfapp_t*, char *filename); |
extern void winopenuri(pdfapp_t*, char *s); |
extern void wincursor(pdfapp_t*, int curs); |
extern void windocopy(pdfapp_t*); |
extern void winreloadfile(pdfapp_t*); |
extern void windrawstring(pdfapp_t*, int x, int y, char *s); |
extern void winclose(pdfapp_t*); |
extern void winhelp(pdfapp_t*); |
struct pdfapp_s |
{ |
/* current document params */ |
char *doctitle; |
pdf_xref *xref; |
pdf_outline *outline; |
int pagecount; |
fz_glyph_cache *cache; |
/* current view params */ |
int resolution; |
int rotate; |
fz_pixmap *image; |
int grayscale; |
/* current page params */ |
int pageno; |
fz_rect page_bbox; |
float page_rotate; |
fz_display_list *page_list; |
fz_text_span *page_text; |
pdf_link *page_links; |
/* snapback history */ |
int hist[256]; |
int histlen; |
int marks[10]; |
/* window system sizes */ |
int winw, winh; |
int scrw, scrh; |
int shrinkwrap; |
/* event handling state */ |
char number[256]; |
int numberlen; |
int ispanning; |
int panx, pany; |
int iscopying; |
int selx, sely; |
/* TODO - While sely keeps track of the relative change in |
* cursor position between two ticks/events, beyondy shall keep |
* track of the relative change in cursor position from the |
* point where the user hits a scrolling limit. This is ugly. |
* Used in pdfapp.c:pdfapp_onmouse. |
*/ |
int beyondy; |
fz_bbox selr; |
/* search state */ |
int isediting; |
char search[512]; |
int hit; |
int hitlen; |
/* client context storage */ |
void *userdata; |
}; |
void pdfapp_init(pdfapp_t *app); |
void pdfapp_open(pdfapp_t *app, char *filename, int fd, int reload); |
void pdfapp_close(pdfapp_t *app); |
char *pdfapp_version(pdfapp_t *app); |
char *pdfapp_usage(pdfapp_t *app); |
void pdfapp_onkey(pdfapp_t *app, int c); |
void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int state); |
void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen); |
void pdfapp_onresize(pdfapp_t *app, int w, int h); |
void pdfapp_invert(pdfapp_t *app, fz_bbox rect); |
void pdfapp_inverthit(pdfapp_t *app); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/apps/resource.h |
---|
0,0 → 1,70 |
#ifndef __dj_include_sys_resource_h_ |
#define __dj_include_sys_resource_h_ |
#ifdef __cplusplus |
extern "C" { |
#endif |
#ifndef __dj_ENFORCE_ANSI_FREESTANDING |
#ifndef __STRICT_ANSI__ |
#ifndef _POSIX_SOURCE |
#include <time.h> |
#define RUSAGE_SELF 0 /* calling process */ |
#define RUSAGE_CHILDREN -1 /* terminated child processes */ |
struct rusage { |
struct timeval ru_utime; /* user time used */ |
struct timeval ru_stime; /* system time used */ |
long ru_maxrss; /* integral max resident set size */ |
long ru_ixrss; /* integral shared text memory size */ |
long ru_idrss; /* integral unshared data size */ |
long ru_isrss; /* integral unshared stack size */ |
long ru_minflt; /* page reclaims */ |
long ru_majflt; /* page faults */ |
long ru_nswap; /* swaps */ |
long ru_inblock; /* block input operations */ |
long ru_oublock; /* block output operations */ |
long ru_msgsnd; /* messages sent */ |
long ru_msgrcv; /* messages received */ |
long ru_nsignals; /* signals received */ |
long ru_nvcsw; /* voluntary context switches */ |
long ru_nivcsw; /* involuntary context switches */ |
}; |
#define RLIMIT_CPU 0 /* cpu time in milliseconds */ |
#define RLIMIT_FSIZE 1 /* maximum file size */ |
#define RLIMIT_DATA 2 /* data size */ |
#define RLIMIT_STACK 3 /* stack size */ |
#define RLIMIT_CORE 4 /* core file size */ |
#define RLIMIT_RSS 5 /* resident set size */ |
#define RLIMIT_MEMLOCK 6 /* locked-in-memory address space */ |
#define RLIMIT_NPROC 7 /* number of processes */ |
#define RLIMIT_NOFILE 8 /* number of open files */ |
#define RLIM_NLIMITS 9 /* number of resource limits */ |
#define RLIM_INFINITY ((long) ((1UL << 31) - 1UL)) |
struct rlimit { |
long rlim_cur; /* current (soft) limit */ |
long rlim_max; /* maximum value for rlim_cur */ |
}; |
/// ZAGLUSHKA /// |
int getrusage(int _who, struct rusage *_rusage) {}; |
#endif /* !_POSIX_SOURCE */ |
#endif /* !__STRICT_ANSI__ */ |
#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ |
#ifndef __dj_ENFORCE_FUNCTION_CALLS |
#endif /* !__dj_ENFORCE_FUNCTION_CALLS */ |
#ifdef __cplusplus |
} |
#endif |
#endif /* !__dj_include_sys_resource_h_ */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/Makefile |
---|
0,0 → 1,21 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = $(abspath ../../../sdk) |
LDFLAGS = -call_shared -nostdlib -T $(SDK_DIR)/sources/newlib/app-dynamic.lds --image-base 0 |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz |
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib |
DRAW_SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(DRAW_SRC)) |
default: $(patsubst %.c,%.o,$(DRAW_SRC)) |
ar rcs libdraw.a $(OBJECTS) |
rm *.o |
mv libdraw.a ../lib |
%.o : %.c Makefile $(DRAW_SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/arch_arm.c |
---|
0,0 → 1,232 |
/* |
* ARM specific render optims live here |
*/ |
#include "fitz.h" |
typedef unsigned char byte; |
/* always surround cpu specific code with HAVE_XXX */ |
#ifdef ARCH_ARM |
/* from imagescalearm.s */ |
extern void fz_srow4_arm(byte *src, byte *dst, int w, int denom); |
extern void fz_scol4_arm(byte *src, byte *dst, int w, int denom); |
static void |
path_w4i1o4_arm(byte * restrict rgba, byte * restrict src, byte cov, int len, byte * restrict dst) |
{ |
/* The ARM code here is a hand coded implementation of the optimized C version. */ |
if (len <= 0) |
return; |
asm volatile( |
"ldr %0, [%0] @ %0 = rgba \n" |
"mov r11,#0 \n" |
"mov r8, #0xFF00 \n" |
"mov r14,%0,lsr #24 @ r14= alpha \n" |
"orr %0, %0, #0xFF000000 @ %0 = rgba |= 0xFF000000 \n" |
"orr r8, r8, r8, LSL #16 @ r8 = 0xFF00FF00 \n" |
"adds r14,r14,r14,LSR #7 @ r14 = alpha += alpha>>7 \n" |
"beq 9f @ if (alpha == 0) bale \n" |
"and r6, %0, r8 @ r6 = ga<<8 \n" |
"bic %0, %0, r8 @ %0 = rb \n" |
"mov r6, r6, LSR #8 @ r6 = ga \n" |
"cmp r14,#256 @ if (alpha == 256) \n" |
"beq 4f @ no-alpha loop \n" |
"B 2f @ enter the loop \n" |
"1: @ Loop used for when coverage*alpha == 0 \n" |
"subs %3, %3, #1 @ len-- \n" |
"ble 9f \n" |
"2: \n" |
"ldrb r12,[%1] @ r12= *src \n" |
"ldr r9, [%4], #4 @ r9 = drb = *dst32++ \n" |
"strb r11,[%1], #1 @ r11= *src++ = 0 \n" |
"add %2, r12, %2 @ %2 = cov += r12 \n" |
"ands %2, %2, #255 @ %2 = cov &= 255 \n" |
"beq 1b @ if coverage == 0 loop back \n" |
"add r10,%2, %2, LSR #7 @ r10= ca = cov+(cov>>7) \n" |
"mul r10,r14,r10 @ r10= ca *= alpha \n" |
"and r7, r8, r9 @ r7 = dga = drb & MASK \n" |
"mov r10,r10,LSR #8 @ r10= ca >>= 8 \n" |
"and r9, r8, r9, LSL #8 @ r9 = drb = (drb<<8) & MASK \n" |
"sub r12,r6, r7, LSR #8 @ r12= cga = ga - (dga>>8) \n" |
"sub r5, %0, r9, LSR #8 @ r5 = crb = rb - (drb>>8) \n" |
"mla r7, r12,r10,r7 @ r7 = dga += cga * ca \n" |
"subs %3, %3, #1 @ len-- \n" |
"mla r9, r5, r10,r9 @ r9 = drb += crb * ca \n" |
"and r7, r8, r7 @ r7 = dga &= MASK \n" |
"and r9, r8, r9 @ r9 = drb &= MASK \n" |
"orr r9, r7, r9, LSR #8 @ r9 = drb = dga | (drb>>8) \n" |
"str r9, [%4, #-4] @ dst32[-1] = r9 \n" |
"bgt 2b \n" |
"b 9f \n" |
"@ --- Solid alpha loop --------------------------------------- \n" |
"3: @ Loop used when coverage == 256 \n" |
"orr r9, %0, r6, LSL #8 @ r9 = rgba \n" |
"str r9, [%4, #-4] @ dst32[-1] = r9 \n" |
"4: @ Loop used for when coverage*alpha == 0 \n" |
"subs %3, %3, #1 @ len-- \n" |
"ble 9f \n" |
"5: \n" |
"ldrb r12,[%1] @ r12= *src \n" |
"ldr r9, [%4], #4 @ r9 = drb = *dst32++ \n" |
"strb r11,[%1], #1 @ r11= *src++ = 0 \n" |
"add %2, r12, %2 @ %2 = cov += r12 \n" |
"ands %2, %2, #255 @ %2 = cov &= 255 \n" |
"beq 4b @ if coverage == 0 loop back \n" |
"cmp %2, #255 @ if coverage == solid \n" |
"beq 3b @ loop back \n" |
"add r10,%2, %2, LSR #7 @ r10= ca = cov+(cov>>7) \n" |
"and r7, r8, r9 @ r7 = dga = drb & MASK \n" |
"and r9, r8, r9, LSL #8 @ r9 = dga = (drb<<8) & MASK \n" |
"sub r12,r6, r7, LSR #8 @ r12= cga = ga - (dga>>8) \n" |
"sub r5, %0, r9, LSR #8 @ r5 = crb = rb - (drb>>8) \n" |
"mla r7, r12,r10,r7 @ r7 = dga += cga * ca \n" |
"subs %3, %3, #1 @ len-- \n" |
"mla r9, r5, r10,r9 @ r9 = drb += crb * ca \n" |
"and r7, r8, r7 @ r7 = dga &= MASK \n" |
"and r9, r8, r9 @ r9 = drb &= MASK \n" |
"orr r9, r7, r9, LSR #8 @ r9 = drb = dga | (drb>>8) \n" |
"str r9, [%4, #-4] @ dst32[-1] = r9 \n" |
"bgt 5b \n" |
"9: @ End \n" |
: |
"+r" (rgba), |
"+r" (src), |
"+r" (cov), |
"+r" (len), |
"+r" (dst) |
: |
: |
"r5","r6","r7","r8","r9","r10","r11","r12","r14","memory","cc" |
); |
} |
static void load_tile8_arm(byte * restrict src, int sw, byte * restrict dst, int dw, int w, int h, int pad) |
{ |
if ((h == 0) || (w == 0)) |
return; |
switch (pad) |
{ |
case 0: |
while (h--) |
{ |
memcpy(dst, src, w); |
src += sw; |
dst += dw; |
} |
break; |
case 1: |
sw -= w; |
dw -= w<<1; |
asm volatile( |
"MOV r11,#255 \n" |
"1: \n" |
"MOV r5, %[w] @ r5 = x = w \n" |
"2: \n" |
"LDRB r4, [%[src]], #1 @ r4 = *src++ \n" |
"SUBS r5, r5, #1 \n" |
"STRB r4, [%[dst]], #1 @ *dst++ = r4 \n" |
"STRB r11,[%[dst]], #1 @ *dst++ = 255 \n" |
"BGT 2b \n" |
"ADD %[src],%[src],%[sw] @ src += sw \n" |
"ADD %[dst],%[dst],%[dw] @ dst += dw \n" |
"SUBS %[h],%[h],#1 \n" |
"BGT 1b \n" |
: |
[src] "+r" (src), |
[sw] "+r" (sw), |
[dst] "+r" (dst), |
[dw] "+r" (dw), |
[h] "+r" (h), |
[w] "+r" (w) |
: |
: |
"r4","r5","r11","memory","cc" |
); |
break; |
case 3: |
sw -= w; |
asm volatile( |
"MOV r11,#255 \n" |
"1: \n" |
"MOV r5, %[w] @ r5 = x = w \n" |
"MOV r8, %[dst] @ r8 = dp = dst \n" |
"2: \n" |
"LDRB r4, [%[src]], #1 @ r4 = *src++ \n" |
"LDRB r6, [%[src]], #1 @ r6 = *src++ \n" |
"LDRB r7, [%[src]], #1 @ r7 = *src++ \n" |
"SUBS r5, r5, #3 \n" |
"STRB r4, [r8], #1 @ *dp++ = r4 \n" |
"STRB r6, [r8], #1 @ *dp++ = r6 \n" |
"STRB r7, [r8], #1 @ *dp++ = r7 \n" |
"STRB r11,[r8], #1 @ *dp++ = 255 \n" |
"BGT 2b \n" |
"ADD %[src],%[src],%[sw] @ src += sw \n" |
"ADD %[dst],%[dst],%[dw] @ dst += dw \n" |
"SUBS %[h],%[h],#1 \n" |
"BGT 1b \n" |
: |
[src] "+r" (src), |
[sw] "+r" (sw), |
[dst] "+r" (dst), |
[dw] "+r" (dw), |
[h] "+r" (h), |
[w] "+r" (w) |
: |
: |
"r4","r5","r6","r7","r8","r11","memory","cc" |
); |
break; |
default: |
sw -= w; |
asm volatile( |
"mov r9,#255 \n" |
"1: \n" |
"mov r7, %[dst] @ r7 = dp = dst \n" |
"mov r8, #1 @ r8 = tpad = 1 \n" |
"mov r14,%[w] @ r11= x = w \n" |
"2: \n" |
"ldrb r10,[%[src]],#1 \n" |
"subs r8, r8, #1 \n" |
"moveq r8, %[pad] \n" |
"streqb r9, [r7], #1 \n" |
"strb r10,[r7], #1 \n" |
"subs r14,r14, #1 \n" |
"bgt 2b \n" |
"add %[src],%[src],%[sw] \n" |
"add %[dst],%[dst],%[dw] \n" |
"subs %[h], %[h], #1 \n" |
"bgt 1b \n" |
: |
[src] "+r" (src), |
[sw] "+r" (sw), |
[dst] "+r" (dst), |
[dw] "+r" (dw), |
[h] "+r" (h), |
[w] "+r" (w), |
[pad] "+r" (pad) |
: |
: |
"r7","r8","r9","r10","r14","memory","cc" |
); |
break; |
} |
} |
void |
fz_accelerate_arch(void) |
{ |
fz_path_w4i1o4 = path_w4i1o4_arm; |
fz_loadtile8 = load_tile8_arm; |
fz_srow4 = fz_srow4_arm; |
fz_scol4 = fz_scol4_arm; |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/arch_port.c |
---|
0,0 → 1,486 |
#include "fitz.h" |
typedef unsigned char byte; |
/* These C implementations use SWAR (SIMD-within-a-register) techniques. */ |
#if 0 /* TODO: move into porterduff.c functions */ |
#define MASK 0xFF00FF00; |
static void |
path_w4i1o4_32bit(byte *rgba, |
byte * restrict src, byte cov, int len, byte * restrict dst) |
{ |
/* COLOR * coverage + DST * (256-coverage) = (COLOR - DST)*coverage + DST*256 */ |
unsigned int *dst32 = (unsigned int *)(void *)dst; |
int alpha = rgba[3]; |
unsigned int rb = rgba[0] | (rgba[2] << 16); |
unsigned int ga = rgba[1] | 0xFF0000; |
if (alpha == 0) |
return; |
if (alpha != 255) |
{ |
alpha += alpha>>7; /* alpha is now in the 0...256 range */ |
while (len--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
cov += *src; *src++ = 0; |
ca = cov + (cov>>7); /* ca is in 0...256 range */ |
ca = (ca*alpha)>>8; /* ca is is in 0...256 range */ |
drb = *dst32++; |
if (ca != 0) |
{ |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga | (drb>>8); |
dst32[-1] = drb; |
} |
} |
} |
else |
{ |
while (len--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
cov += *src; *src++ = 0; |
ca = cov + (cov>>7); /* ca is in 0...256 range */ |
drb = *dst32++; |
if (ca == 0) |
continue; |
if (ca == 255) |
{ |
drb = (ga<<8) | rb; |
} |
else |
{ |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga |(drb>>8); |
} |
dst32[-1] = drb; |
} |
} |
} |
static void |
text_w4i1o4_32bit(byte *rgba, |
byte * restrict src, int srcw, |
byte * restrict dst, int dstw, int w0, int h) |
{ |
unsigned int *dst32 = (unsigned int *)(void *)dst; |
unsigned int alpha = rgba[3]; |
unsigned int rb = rgba[0] | (rgba[2] << 16); |
unsigned int ga = rgba[1] | 0xFF0000; |
if (alpha == 0) |
return; |
srcw -= w0; |
dstw = (dstw>>2)-w0; |
if (alpha != 255) |
{ |
alpha += alpha>>7; /* alpha is now in the 0...256 range */ |
while (h--) |
{ |
int w = w0; |
while (w--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
ca = *src++; |
drb = *dst32++; |
ca += ca>>7; |
ca = (ca*alpha)>>8; |
if (ca == 0) |
continue; |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga | (drb>>8); |
dst32[-1] = drb; |
} |
src += srcw; |
dst32 += dstw; |
} |
} |
else |
{ |
while (h--) |
{ |
int w = w0; |
while (w--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
ca = *src++; |
drb = *dst32++; |
ca += ca>>7; |
if (ca == 0) |
continue; |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga | (drb>>8); |
dst32[-1] = drb; |
} |
src += srcw; |
dst32 += dstw; |
} |
} |
} |
static void |
img_4o4_32bit(byte * restrict src, byte cov, int len, byte * restrict dst, |
fz_pixmap *image, int u, int v, int fa, int fb) |
{ |
unsigned int *dst32 = (unsigned int *)(void *)dst; |
unsigned int *samples = (unsigned int *)(void *)image->samples; |
int w = image->w; |
int h = image->h-1; |
while (len--) |
{ |
unsigned int a, a1, d, d1; |
int sa; |
cov += *src; *src = 0; src++; |
/* (a,a1) = sampleargb(samples, w, h, u, v, argb); */ |
{ |
int ui, ui1, vi, vi1, ud, vd; |
unsigned int b, b1, c, c1; |
ui1 = 1; |
ui = u >> 16; |
if (ui < 0) |
{ |
ui = 0; |
ui1 = 0; |
} |
else if (ui >= w-1) |
{ |
ui = w-1; |
ui1 = 0; |
} |
vi1 = w; |
vi = v >> 16; |
if (vi < 0) |
{ |
vi = 0; |
vi1 = 0; |
} |
else if (vi >= h) |
{ |
vi = h; |
vi1 = 0; |
} |
ui += vi*w; |
a = samples[ui]; |
b = samples[ui + ui1]; |
c = samples[ui + vi1]; |
d = samples[ui + ui1 + vi1]; |
ud = (u>>8) & 0xFF; |
vd = (v>>8) & 0xFF; |
ud = FZ_EXPAND(ud); |
vd = FZ_EXPAND(vd); |
/* (a,a1) = blend(a,b,ud) */ |
a1 = a & MASK; |
a = (a<<8) & MASK; |
b1 = (b>>8) & ~MASK; |
b = b & ~MASK; |
a = ((b -(a >>8)) * ud + a ) & MASK; |
a1 = ((b1-(a1>>8)) * ud + a1) & MASK; |
/* (c,c1) = blend(c,d,ud) */ |
c1 = c & MASK; |
c = (c<<8) & MASK; |
d1 = (d>>8) & ~MASK; |
d = d & ~MASK; |
c = ((d -(c >>8)) * ud + c ) & MASK; |
c1 = ((d1-(c1>>8)) * ud + c1) & MASK; |
/* (a,a1) = blend((a,a1),(c,c1),vd) */ |
a = (((c >>8)-(a >>8)) * vd + a ) & MASK; |
a1 = (((c1>>8)-(a1>>8)) * vd + a1) & MASK; |
} |
sa = (a1>>24); |
sa = FZ_COMBINE(FZ_EXPAND(sa), FZ_EXPAND(cov)); |
a1 |= 0xFF000000; |
d = *dst32++; |
d1 = d & MASK; |
d = (d<<8) & MASK; |
a = (((a >>8)-(d >>8)) * sa + d ) & MASK; |
a1 = (((a1>>8)-(d1>>8)) * sa + d1) & MASK; |
dst32[-1] = (a>>8) | a1; |
u += fa; |
v += fb; |
} |
} |
static void |
img_w4i1o4_32bit(byte *rgba, byte * restrict src, byte cov, int len, |
byte * restrict dst, fz_pixmap *image, int u, int v, int fa, int fb) |
{ |
byte *samples = image->samples; |
int w = image->w; |
int h = image->h-1; |
int alpha = FZ_EXPAND(rgba[3]); |
unsigned int rb = rgba[0] | (rgba[2] << 16); |
unsigned int ga = rgba[1] | 0xFF0000; |
unsigned int *dst32 = (unsigned int *)(void *)dst; |
if (alpha == 0) |
return; |
if (alpha != 256) |
{ |
while (len--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
unsigned int a, b; |
cov += *src; *src = 0; src++; |
drb = *dst32++; |
ca = FZ_COMBINE(FZ_EXPAND(cov), alpha); |
if (ca != 0) |
{ |
int ui, ui1, vi, vi1, ud, vd; |
/* a = samplemask(samples, w, h, u, v); */ |
ui1 = 1; |
ui = u >> 16; |
if (ui < 0) |
{ |
ui = 0; |
ui1 = 0; |
} |
else if (ui >= w-1) |
{ |
ui = w-1; |
ui1 = 0; |
} |
vi1 = w; |
vi = v >> 16; |
if (vi < 0) |
{ |
vi = 0; |
vi1 = 0; |
} |
else if (vi >= h) |
{ |
vi = h; |
vi1 = 0; |
} |
ui += vi*w; |
a = samples[ui]; |
b = samples[ui + ui1]; |
a |= samples[ui + vi1]<<16; |
b |= samples[ui + ui1 + vi1]<<16; |
ud = (u>>8) & 0xFF; |
vd = (v>>8) & 0xFF; |
ud = FZ_EXPAND(ud); |
vd = FZ_EXPAND(vd); |
/* a = blend(a,b,ud) */ |
a = ((b-a) * ud + (a<<8)) & MASK; |
/* a = blend(a,a>>16,vd) */ |
a = (((a>>24)-(a>>8)) * vd + a); |
a = (a>>8) & 0xFF; |
ca = FZ_COMBINE(ca, FZ_EXPAND(a)); |
} |
if (ca != 0) |
{ |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga | (drb>>8); |
dst32[-1] = drb; |
} |
u += fa; |
v += fb; |
} |
} |
else |
{ |
while (len--) |
{ |
unsigned int ca, drb, dga, crb, cga; |
unsigned int a, b; |
cov += *src; *src = 0; src++; |
drb = *dst32++; |
if (cov != 0) |
{ |
int ui, ui1, vi, vi1, ud, vd; |
/* a = samplemask(samples, w, h, u, v); */ |
ui1 = 1; |
ui = u >> 16; |
if (ui < 0) |
{ |
ui = 0; |
ui1 = 0; |
} |
else if (ui >= w-1) |
{ |
ui = w-1; |
ui1 = 0; |
} |
vi1 = w; |
vi = v >> 16; |
if (vi < 0) |
{ |
vi = 0; |
vi1 = 0; |
} |
else if (vi >= h) |
{ |
vi = h; |
vi1 = 0; |
} |
ui += vi*w; |
a = samples[ui]; |
b = samples[ui + ui1]; |
a |= samples[ui + vi1]<<16; |
b |= samples[ui + ui1 + vi1]<<16; |
ud = (u>>8) & 0xFF; |
vd = (v>>8) & 0xFF; |
ud = FZ_EXPAND(ud); |
vd = FZ_EXPAND(vd); |
/* a = blend(a,b,ud) */ |
a = ((b-a) * ud + (a<<8)) & MASK; |
/* a = blend(a,a>>16,vd) */ |
a = (((a>>24)-(a>>8)) * vd + a); |
a = (a>>8) & 0xFF; |
ca = FZ_COMBINE(FZ_EXPAND(cov),FZ_EXPAND(a)); |
if (ca != 0) |
{ |
if (ca == 256) |
{ |
drb = (ga<<8) | rb; |
} |
else |
{ |
dga = drb & MASK; |
drb = (drb<<8) & MASK; |
cga = ga - (dga>>8); |
crb = rb - (drb>>8); |
dga += cga * ca; |
drb += crb * ca; |
dga &= MASK; |
drb &= MASK; |
drb = dga | (drb>>8); |
} |
dst32[-1] = drb; |
} |
} |
u += fa; |
v += fb; |
} |
} |
} |
static void |
img_1o1_32bit(byte * restrict src, byte cov, int len, byte * restrict dst, |
fz_pixmap *image, int u, int v, int fa, int fb) |
{ |
byte *samples = image->samples; |
int w = image->w; |
int h = image->h-1; |
while (len--) |
{ |
unsigned int a, b; |
cov += *src; *src = 0; src++; |
if (cov != 0) |
{ |
int ui, ui1, vi, vi1, ud, vd; |
/* sa = samplemask(samples, w, h, u, v); */ |
ui1 = 1; |
ui = u >> 16; |
if (ui < 0) |
{ |
ui = 0; |
ui1 = 0; |
} |
else if (ui >= w-1) |
{ |
ui = w-1; |
ui1 = 0; |
} |
vi1 = w; |
vi = v >> 16; |
if (vi < 0) |
{ |
vi = 0; |
vi1 = 0; |
} |
else if (vi >= h) |
{ |
vi = h; |
vi1 = 0; |
} |
ui += vi*w; |
a = samples[ui]; |
b = samples[ui + ui1]; |
a |= samples[ui + vi1]<<16; |
b |= samples[ui + ui1 + vi1]<<16; |
ud = (u>>8) & 0xFF; |
vd = (v>>8) & 0xFF; |
ud = FZ_EXPAND(ud); |
vd = FZ_EXPAND(vd); |
/* a = blend(a,b,ud) */ |
a = ((b-a) * ud + (a<<8)) & MASK; |
/* a = blend(a,a>>16,vd) */ |
a = (((a>>24)-(a>>8)) * vd + a); |
a = (a>>8) & 0xFF; |
a = FZ_COMBINE(FZ_EXPAND(a), FZ_EXPAND(cov)); |
if (a != 0) |
{ |
if (a == 256) |
dst[0] = 255; |
else |
dst[0] = FZ_BLEND(255, dst[0], a); |
} |
} |
dst++; |
u += fa; |
v += fb; |
} |
} |
#endif |
void fz_accelerate(void) |
{ |
if (sizeof(int) == 4 && sizeof(unsigned int) == 4 && !fz_is_big_endian()) |
{ |
// fz_path_w4i1o4 = path_w4i1o4_32bit; |
// fz_text_w4i1o4 = text_w4i1o4_32bit; |
// fz_img_4o4 = img_4o4_32bit; |
// fz_img_w4i1o4 = img_w4i1o4_32bit; |
// fz_img_1o1 = img_1o1_32bit; |
} |
#ifdef HAVE_CPUDEP |
fz_accelerate_arch(); |
#endif |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_affine.c |
---|
0,0 → 1,588 |
#include "fitz.h" |
typedef unsigned char byte; |
static inline float roundup(float x) |
{ |
return (x < 0) ? floorf(x) : ceilf(x); |
} |
static inline int lerp(int a, int b, int t) |
{ |
return a + (((b - a) * t) >> 16); |
} |
static inline int bilerp(int a, int b, int c, int d, int u, int v) |
{ |
return lerp(lerp(a, b, u), lerp(c, d, u), v); |
} |
static inline byte *sample_nearest(byte *s, int w, int h, int n, int u, int v) |
{ |
if (u < 0) u = 0; |
if (v < 0) v = 0; |
if (u >= w) u = w - 1; |
if (v >= h) v = h - 1; |
return s + (v * w + u) * n; |
} |
/* Blend premultiplied source image in constant alpha over destination */ |
static inline void |
fz_paint_affine_alpha_N_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *hp) |
{ |
int k; |
int n1 = n-1; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int uf = u & 0xffff; |
int vf = v & 0xffff; |
byte *a = sample_nearest(sp, sw, sh, n, ui, vi); |
byte *b = sample_nearest(sp, sw, sh, n, ui+1, vi); |
byte *c = sample_nearest(sp, sw, sh, n, ui, vi+1); |
byte *d = sample_nearest(sp, sw, sh, n, ui+1, vi+1); |
int xa = bilerp(a[n1], b[n1], c[n1], d[n1], uf, vf); |
int t; |
xa = fz_mul255(xa, alpha); |
t = 255 - xa; |
for (k = 0; k < n1; k++) |
{ |
int x = bilerp(a[k], b[k], c[k], d[k], uf, vf); |
dp[k] = fz_mul255(x, alpha) + fz_mul255(dp[k], t); |
} |
dp[n1] = xa + fz_mul255(dp[n1], t); |
if (hp) |
hp[0] = xa + fz_mul255(hp[n1], t); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
/* Special case code for gray -> rgb */ |
static inline void |
fz_paint_affine_alpha_g2rgb_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int alpha, byte *hp) |
{ |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int uf = u & 0xffff; |
int vf = v & 0xffff; |
byte *a = sample_nearest(sp, sw, sh, 2, ui, vi); |
byte *b = sample_nearest(sp, sw, sh, 2, ui+1, vi); |
byte *c = sample_nearest(sp, sw, sh, 2, ui, vi+1); |
byte *d = sample_nearest(sp, sw, sh, 2, ui+1, vi+1); |
int y = bilerp(a[1], b[1], c[1], d[1], uf, vf); |
int x = bilerp(a[0], b[0], c[0], d[0], uf, vf); |
int t; |
x = fz_mul255(x, alpha); |
y = fz_mul255(y, alpha); |
t = 255 - y; |
dp[0] = x + fz_mul255(dp[0], t); |
dp[1] = x + fz_mul255(dp[1], t); |
dp[2] = x + fz_mul255(dp[2], t); |
dp[3] = y + fz_mul255(dp[3], t); |
if (hp) |
hp[0] = y + fz_mul255(hp[0], t); |
} |
dp += 4; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_alpha_N_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *hp) |
{ |
int k; |
int n1 = n-1; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
byte *sample = sp + ((vi * sw + ui) * n); |
int a = fz_mul255(sample[n-1], alpha); |
int t = 255 - a; |
for (k = 0; k < n1; k++) |
dp[k] = fz_mul255(sample[k], alpha) + fz_mul255(dp[k], t); |
dp[n1] = a + fz_mul255(dp[n1], t); |
if (hp) |
hp[0] = a + fz_mul255(hp[n1], t); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_alpha_g2rgb_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int alpha, byte *hp) |
{ |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
byte *sample = sp + ((vi * sw + ui) * 2); |
int x = fz_mul255(sample[0], alpha); |
int a = fz_mul255(sample[1], alpha); |
int t = 255 - a; |
dp[0] = x + fz_mul255(dp[0], t); |
dp[1] = x + fz_mul255(dp[1], t); |
dp[2] = x + fz_mul255(dp[2], t); |
dp[3] = a + fz_mul255(dp[3], t); |
if (hp) |
hp[0] = a + fz_mul255(hp[0], t); |
} |
dp += 4; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
/* Blend premultiplied source image over destination */ |
static inline void |
fz_paint_affine_N_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *hp) |
{ |
int k; |
int n1 = n-1; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int uf = u & 0xffff; |
int vf = v & 0xffff; |
byte *a = sample_nearest(sp, sw, sh, n, ui, vi); |
byte *b = sample_nearest(sp, sw, sh, n, ui+1, vi); |
byte *c = sample_nearest(sp, sw, sh, n, ui, vi+1); |
byte *d = sample_nearest(sp, sw, sh, n, ui+1, vi+1); |
int y = bilerp(a[n1], b[n1], c[n1], d[n1], uf, vf); |
int t = 255 - y; |
for (k = 0; k < n1; k++) |
{ |
int x = bilerp(a[k], b[k], c[k], d[k], uf, vf); |
dp[k] = x + fz_mul255(dp[k], t); |
} |
dp[n1] = y + fz_mul255(dp[n1], t); |
if (hp) |
hp[0] = y + fz_mul255(hp[0], t); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_solid_g2rgb_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, byte *hp) |
{ |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int uf = u & 0xffff; |
int vf = v & 0xffff; |
byte *a = sample_nearest(sp, sw, sh, 2, ui, vi); |
byte *b = sample_nearest(sp, sw, sh, 2, ui+1, vi); |
byte *c = sample_nearest(sp, sw, sh, 2, ui, vi+1); |
byte *d = sample_nearest(sp, sw, sh, 2, ui+1, vi+1); |
int y = bilerp(a[1], b[1], c[1], d[1], uf, vf); |
int t = 255 - y; |
int x = bilerp(a[0], b[0], c[0], d[0], uf, vf); |
dp[0] = x + fz_mul255(dp[0], t); |
dp[1] = x + fz_mul255(dp[1], t); |
dp[2] = x + fz_mul255(dp[2], t); |
dp[3] = y + fz_mul255(dp[3], t); |
if (hp) |
hp[0] = y + fz_mul255(hp[0], t); |
} |
dp += 4; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_N_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *hp) |
{ |
int k; |
int n1 = n-1; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
byte *sample = sp + ((vi * sw + ui) * n); |
int a = sample[n1]; |
int t = 255 - a; |
for (k = 0; k < n1; k++) |
dp[k] = sample[k] + fz_mul255(dp[k], t); |
dp[n1] = a + fz_mul255(dp[n1], t); |
if (hp) |
hp[0] = a + fz_mul255(hp[0], t); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_solid_g2rgb_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, byte *hp) |
{ |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
byte *sample = sp + ((vi * sw + ui) * 2); |
int x = sample[0]; |
int a = sample[1]; |
int t = 255 - a; |
dp[0] = x + fz_mul255(dp[0], t); |
dp[1] = x + fz_mul255(dp[1], t); |
dp[2] = x + fz_mul255(dp[2], t); |
dp[3] = a + fz_mul255(dp[3], t); |
if (hp) |
hp[0] = a + fz_mul255(hp[0], t); |
} |
dp += 4; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
/* Blend non-premultiplied color in source image mask over destination */ |
static inline void |
fz_paint_affine_color_N_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *color, byte *hp) |
{ |
int n1 = n - 1; |
int sa = color[n1]; |
int k; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int uf = u & 0xffff; |
int vf = v & 0xffff; |
byte *a = sample_nearest(sp, sw, sh, 1, ui, vi); |
byte *b = sample_nearest(sp, sw, sh, 1, ui+1, vi); |
byte *c = sample_nearest(sp, sw, sh, 1, ui, vi+1); |
byte *d = sample_nearest(sp, sw, sh, 1, ui+1, vi+1); |
int ma = bilerp(a[0], b[0], c[0], d[0], uf, vf); |
int masa = FZ_COMBINE(FZ_EXPAND(ma), sa); |
for (k = 0; k < n1; k++) |
dp[k] = FZ_BLEND(color[k], dp[k], masa); |
dp[n1] = FZ_BLEND(255, dp[n1], masa); |
if (hp) |
hp[0] = FZ_BLEND(255, hp[0], masa); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static inline void |
fz_paint_affine_color_N_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *color, byte *hp) |
{ |
int n1 = n-1; |
int sa = color[n1]; |
int k; |
while (w--) |
{ |
int ui = u >> 16; |
int vi = v >> 16; |
if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) |
{ |
int ma = sp[vi * sw + ui]; |
int masa = FZ_COMBINE(FZ_EXPAND(ma), sa); |
for (k = 0; k < n1; k++) |
dp[k] = FZ_BLEND(color[k], dp[k], masa); |
dp[n1] = FZ_BLEND(255, dp[n1], masa); |
if (hp) |
hp[n1] = FZ_BLEND(255, hp[n1], masa); |
} |
dp += n; |
if (hp) |
hp++; |
u += fa; |
v += fb; |
} |
} |
static void |
fz_paint_affine_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *color/*unused*/, byte *hp) |
{ |
if (alpha == 255) |
{ |
switch (n) |
{ |
case 1: fz_paint_affine_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 1, hp); break; |
case 2: fz_paint_affine_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 2, hp); break; |
case 4: fz_paint_affine_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 4, hp); break; |
default: fz_paint_affine_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, n, hp); break; |
} |
} |
else if (alpha > 0) |
{ |
switch (n) |
{ |
case 1: fz_paint_affine_alpha_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 1, alpha, hp); break; |
case 2: fz_paint_affine_alpha_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 2, alpha, hp); break; |
case 4: fz_paint_affine_alpha_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 4, alpha, hp); break; |
default: fz_paint_affine_alpha_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, n, alpha, hp); break; |
} |
} |
} |
static void |
fz_paint_affine_g2rgb_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *color/*unused*/, byte *hp) |
{ |
if (alpha == 255) |
{ |
fz_paint_affine_solid_g2rgb_lerp(dp, sp, sw, sh, u, v, fa, fb, w, hp); |
} |
else if (alpha > 0) |
{ |
fz_paint_affine_alpha_g2rgb_lerp(dp, sp, sw, sh, u, v, fa, fb, w, alpha, hp); |
} |
} |
static void |
fz_paint_affine_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *color/*unused */, byte *hp) |
{ |
if (alpha == 255) |
{ |
switch (n) |
{ |
case 1: fz_paint_affine_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 1, hp); break; |
case 2: fz_paint_affine_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 2, hp); break; |
case 4: fz_paint_affine_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 4, hp); break; |
default: fz_paint_affine_N_near(dp, sp, sw, sh, u, v, fa, fb, w, n, hp); break; |
} |
} |
else if (alpha > 0) |
{ |
switch (n) |
{ |
case 1: fz_paint_affine_alpha_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 1, alpha, hp); break; |
case 2: fz_paint_affine_alpha_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 2, alpha, hp); break; |
case 4: fz_paint_affine_alpha_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 4, alpha, hp); break; |
default: fz_paint_affine_alpha_N_near(dp, sp, sw, sh, u, v, fa, fb, w, n, alpha, hp); break; |
} |
} |
} |
static void |
fz_paint_affine_g2rgb_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *color/*unused*/, byte *hp) |
{ |
if (alpha == 255) |
{ |
fz_paint_affine_solid_g2rgb_near(dp, sp, sw, sh, u, v, fa, fb, w, hp); |
} |
else if (alpha > 0) |
{ |
fz_paint_affine_alpha_g2rgb_near(dp, sp, sw, sh, u, v, fa, fb, w, alpha, hp); |
} |
} |
static void |
fz_paint_affine_color_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha/*unused*/, byte *color, byte *hp) |
{ |
switch (n) |
{ |
case 2: fz_paint_affine_color_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 2, color, hp); break; |
case 4: fz_paint_affine_color_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, 4, color, hp); break; |
default: fz_paint_affine_color_N_lerp(dp, sp, sw, sh, u, v, fa, fb, w, n, color, hp); break; |
} |
} |
static void |
fz_paint_affine_color_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha/*unused*/, byte *color, byte *hp) |
{ |
switch (n) |
{ |
case 2: fz_paint_affine_color_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 2, color, hp); break; |
case 4: fz_paint_affine_color_N_near(dp, sp, sw, sh, u, v, fa, fb, w, 4, color, hp); break; |
default: fz_paint_affine_color_N_near(dp, sp, sw, sh, u, v, fa, fb, w, n, color, hp); break; |
} |
} |
/* Draw an image with an affine transform on destination */ |
static void |
fz_paint_image_imp(fz_pixmap *dst, fz_bbox scissor, fz_pixmap *shape, fz_pixmap *img, fz_matrix ctm, byte *color, int alpha) |
{ |
byte *dp, *sp, *hp; |
int u, v, fa, fb, fc, fd; |
int x, y, w, h; |
int sw, sh, n, hw; |
fz_matrix inv; |
fz_bbox bbox; |
int dolerp; |
void (*paintfn)(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, int alpha, byte *color, byte *hp); |
/* grid fit the image */ |
if (fz_is_rectilinear(ctm)) |
{ |
ctm.a = roundup(ctm.a); |
ctm.b = roundup(ctm.b); |
ctm.c = roundup(ctm.c); |
ctm.d = roundup(ctm.d); |
ctm.e = floorf(ctm.e); |
ctm.f = floorf(ctm.f); |
} |
/* turn on interpolation for upscaled and non-rectilinear transforms */ |
dolerp = 0; |
if (!fz_is_rectilinear(ctm)) |
dolerp = 1; |
if (sqrtf(ctm.a * ctm.a + ctm.b * ctm.b) > img->w) |
dolerp = 1; |
if (sqrtf(ctm.c * ctm.c + ctm.d * ctm.d) > img->h) |
dolerp = 1; |
/* except when we shouldn't, at large magnifications */ |
if (!img->interpolate) |
{ |
if (sqrtf(ctm.a * ctm.a + ctm.b * ctm.b) > img->w * 2) |
dolerp = 0; |
if (sqrtf(ctm.c * ctm.c + ctm.d * ctm.d) > img->h * 2) |
dolerp = 0; |
} |
bbox = fz_round_rect(fz_transform_rect(ctm, fz_unit_rect)); |
bbox = fz_intersect_bbox(bbox, scissor); |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
/* map from screen space (x,y) to image space (u,v) */ |
inv = fz_scale(1.0f / img->w, -1.0f / img->h); |
inv = fz_concat(inv, fz_translate(0, 1)); |
inv = fz_concat(inv, ctm); |
inv = fz_invert_matrix(inv); |
fa = inv.a * 65536; |
fb = inv.b * 65536; |
fc = inv.c * 65536; |
fd = inv.d * 65536; |
/* Calculate initial texture positions. Do a half step to start. */ |
u = (fa * x) + (fc * y) + inv.e * 65536 + ((fa + fc) >> 1); |
v = (fb * x) + (fd * y) + inv.f * 65536 + ((fb + fd) >> 1); |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * dst->n; |
n = dst->n; |
sp = img->samples; |
sw = img->w; |
sh = img->h; |
if (shape) |
{ |
hw = shape->w; |
hp = shape->samples + ((y - shape->y) * hw) + x - dst->x; |
} |
else |
{ |
hw = 0; |
hp = NULL; |
} |
/* TODO: if (fb == 0 && fa == 1) call fz_paint_span */ |
if (dst->n == 4 && img->n == 2) |
{ |
assert(color == NULL); |
if (dolerp) |
paintfn = fz_paint_affine_g2rgb_lerp; |
else |
paintfn = fz_paint_affine_g2rgb_near; |
} |
else |
{ |
if (dolerp) |
{ |
if (color) |
paintfn = fz_paint_affine_color_lerp; |
else |
paintfn = fz_paint_affine_lerp; |
} |
else |
{ |
if (color) |
paintfn = fz_paint_affine_color_near; |
else |
paintfn = fz_paint_affine_near; |
} |
} |
while (h--) |
{ |
paintfn(dp, sp, sw, sh, u, v, fa, fb, w, n, alpha, color, hp); |
dp += dst->w * n; |
hp += hw; |
u += fc; |
v += fd; |
} |
} |
void |
fz_paint_image_with_color(fz_pixmap *dst, fz_bbox scissor, fz_pixmap *shape, fz_pixmap *img, fz_matrix ctm, byte *color) |
{ |
assert(img->n == 1); |
fz_paint_image_imp(dst, scissor, shape, img, ctm, color, 255); |
} |
void |
fz_paint_image(fz_pixmap *dst, fz_bbox scissor, fz_pixmap *shape, fz_pixmap *img, fz_matrix ctm, int alpha) |
{ |
assert(dst->n == img->n || (dst->n == 4 && img->n == 2)); |
fz_paint_image_imp(dst, scissor, shape, img, ctm, NULL, alpha); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_blend.c |
---|
0,0 → 1,567 |
#include "fitz.h" |
/* PDF 1.4 blend modes. These are slow. */ |
typedef unsigned char byte; |
static const char *fz_blendmode_names[] = |
{ |
"Normal", |
"Multiply", |
"Screen", |
"Overlay", |
"Darken", |
"Lighten", |
"ColorDodge", |
"ColorBurn", |
"HardLight", |
"SoftLight", |
"Difference", |
"Exclusion", |
"Hue", |
"Saturation", |
"Color", |
"Luminosity", |
}; |
int fz_find_blendmode(char *name) |
{ |
int i; |
for (i = 0; i < nelem(fz_blendmode_names); i++) |
if (!strcmp(name, fz_blendmode_names[i])) |
return i; |
return FZ_BLEND_NORMAL; |
} |
char *fz_blendmode_name(int blendmode) |
{ |
if (blendmode >= 0 && blendmode < nelem(fz_blendmode_names)) |
return (char*)fz_blendmode_names[blendmode]; |
return "Normal"; |
} |
/* Separable blend modes */ |
static inline int fz_screen_byte(int b, int s) |
{ |
return b + s - fz_mul255(b, s); |
} |
static inline int fz_hard_light_byte(int b, int s) |
{ |
int s2 = s << 1; |
if (s <= 127) |
return fz_mul255(b, s2); |
else |
return fz_screen_byte(b, s2 - 255); |
} |
static inline int fz_overlay_byte(int b, int s) |
{ |
return fz_hard_light_byte(s, b); /* note swapped order */ |
} |
static inline int fz_darken_byte(int b, int s) |
{ |
return MIN(b, s); |
} |
static inline int fz_lighten_byte(int b, int s) |
{ |
return MAX(b, s); |
} |
static inline int fz_color_dodge_byte(int b, int s) |
{ |
s = 255 - s; |
if (b == 0) |
return 0; |
else if (b >= s) |
return 255; |
else |
return (0x1fe * b + s) / (s << 1); |
} |
static inline int fz_color_burn_byte(int b, int s) |
{ |
b = 255 - b; |
if (b == 0) |
return 255; |
else if (b >= s) |
return 0; |
else |
return 0xff - (0x1fe * b + s) / (s << 1); |
} |
static inline int fz_soft_light_byte(int b, int s) |
{ |
/* review this */ |
if (s < 128) { |
return b - fz_mul255(fz_mul255((255 - (s<<1)), b), 255 - b); |
} |
else { |
int dbd; |
if (b < 64) |
dbd = fz_mul255(fz_mul255((b << 4) - 12, b) + 4, b); |
else |
dbd = (int)sqrtf(255.0f * b); |
return b + fz_mul255(((s<<1) - 255), (dbd - b)); |
} |
} |
static inline int fz_difference_byte(int b, int s) |
{ |
return ABS(b - s); |
} |
static inline int fz_exclusion_byte(int b, int s) |
{ |
return b + s - (fz_mul255(b, s)<<1); |
} |
/* Non-separable blend modes */ |
static void |
fz_luminosity_rgb(int *rd, int *gd, int *bd, int rb, int gb, int bb, int rs, int gs, int bs) |
{ |
int delta, scale; |
int r, g, b, y; |
/* 0.3, 0.59, 0.11 in fixed point */ |
delta = ((rs - rb) * 77 + (gs - gb) * 151 + (bs - bb) * 28 + 0x80) >> 8; |
r = rb + delta; |
g = gb + delta; |
b = bb + delta; |
if ((r | g | b) & 0x100) |
{ |
y = (rs * 77 + gs * 151 + bs * 28 + 0x80) >> 8; |
if (delta > 0) |
{ |
int max; |
max = MAX(r, MAX(g, b)); |
scale = ((255 - y) << 16) / (max - y); |
} |
else |
{ |
int min; |
min = MIN(r, MIN(g, b)); |
scale = (y << 16) / (y - min); |
} |
r = y + (((r - y) * scale + 0x8000) >> 16); |
g = y + (((g - y) * scale + 0x8000) >> 16); |
b = y + (((b - y) * scale + 0x8000) >> 16); |
} |
*rd = r; |
*gd = g; |
*bd = b; |
} |
static void |
fz_saturation_rgb(int *rd, int *gd, int *bd, int rb, int gb, int bb, int rs, int gs, int bs) |
{ |
int minb, maxb; |
int mins, maxs; |
int y; |
int scale; |
int r, g, b; |
minb = MIN(rb, MIN(gb, bb)); |
maxb = MAX(rb, MAX(gb, bb)); |
if (minb == maxb) |
{ |
/* backdrop has zero saturation, avoid divide by 0 */ |
*rd = gb; |
*gd = gb; |
*bd = gb; |
return; |
} |
mins = MIN(rs, MIN(gs, bs)); |
maxs = MAX(rs, MAX(gs, bs)); |
scale = ((maxs - mins) << 16) / (maxb - minb); |
y = (rb * 77 + gb * 151 + bb * 28 + 0x80) >> 8; |
r = y + ((((rb - y) * scale) + 0x8000) >> 16); |
g = y + ((((gb - y) * scale) + 0x8000) >> 16); |
b = y + ((((bb - y) * scale) + 0x8000) >> 16); |
if ((r | g | b) & 0x100) |
{ |
int scalemin, scalemax; |
int min, max; |
min = MIN(r, MIN(g, b)); |
max = MAX(r, MAX(g, b)); |
if (min < 0) |
scalemin = (y << 16) / (y - min); |
else |
scalemin = 0x10000; |
if (max > 255) |
scalemax = ((255 - y) << 16) / (max - y); |
else |
scalemax = 0x10000; |
scale = MIN(scalemin, scalemax); |
r = y + (((r - y) * scale + 0x8000) >> 16); |
g = y + (((g - y) * scale + 0x8000) >> 16); |
b = y + (((b - y) * scale + 0x8000) >> 16); |
} |
*rd = r; |
*gd = g; |
*bd = b; |
} |
static void |
fz_color_rgb(int *rr, int *rg, int *rb, int br, int bg, int bb, int sr, int sg, int sb) |
{ |
fz_luminosity_rgb(rr, rg, rb, sr, sg, sb, br, bg, bb); |
} |
static void |
fz_hue_rgb(int *rr, int *rg, int *rb, int br, int bg, int bb, int sr, int sg, int sb) |
{ |
int tr, tg, tb; |
fz_luminosity_rgb(&tr, &tg, &tb, sr, sg, sb, br, bg, bb); |
fz_saturation_rgb(rr, rg, rb, tr, tg, tb, br, bg, bb); |
} |
/* Blending loops */ |
void |
fz_blend_separable(byte * restrict bp, byte * restrict sp, int n, int w, int blendmode) |
{ |
int k; |
int n1 = n - 1; |
while (w--) |
{ |
int sa = sp[n1]; |
int ba = bp[n1]; |
int saba = fz_mul255(sa, ba); |
/* ugh, division to get non-premul components */ |
int invsa = sa ? 255 * 256 / sa : 0; |
int invba = ba ? 255 * 256 / ba : 0; |
for (k = 0; k < n1; k++) |
{ |
int sc = (sp[k] * invsa) >> 8; |
int bc = (bp[k] * invba) >> 8; |
int rc; |
switch (blendmode) |
{ |
default: |
case FZ_BLEND_NORMAL: rc = sc; break; |
case FZ_BLEND_MULTIPLY: rc = fz_mul255(bc, sc); break; |
case FZ_BLEND_SCREEN: rc = fz_screen_byte(bc, sc); break; |
case FZ_BLEND_OVERLAY: rc = fz_overlay_byte(bc, sc); break; |
case FZ_BLEND_DARKEN: rc = fz_darken_byte(bc, sc); break; |
case FZ_BLEND_LIGHTEN: rc = fz_lighten_byte(bc, sc); break; |
case FZ_BLEND_COLOR_DODGE: rc = fz_color_dodge_byte(bc, sc); break; |
case FZ_BLEND_COLOR_BURN: rc = fz_color_burn_byte(bc, sc); break; |
case FZ_BLEND_HARD_LIGHT: rc = fz_hard_light_byte(bc, sc); break; |
case FZ_BLEND_SOFT_LIGHT: rc = fz_soft_light_byte(bc, sc); break; |
case FZ_BLEND_DIFFERENCE: rc = fz_difference_byte(bc, sc); break; |
case FZ_BLEND_EXCLUSION: rc = fz_exclusion_byte(bc, sc); break; |
} |
bp[k] = fz_mul255(255 - sa, bp[k]) + fz_mul255(255 - ba, sp[k]) + fz_mul255(saba, rc); |
} |
bp[k] = ba + sa - saba; |
sp += n; |
bp += n; |
} |
} |
void |
fz_blend_nonseparable(byte * restrict bp, byte * restrict sp, int w, int blendmode) |
{ |
while (w--) |
{ |
int rr, rg, rb; |
int sa = sp[3]; |
int ba = bp[3]; |
int saba = fz_mul255(sa, ba); |
/* ugh, division to get non-premul components */ |
int invsa = sa ? 255 * 256 / sa : 0; |
int invba = ba ? 255 * 256 / ba : 0; |
int sr = (sp[0] * invsa) >> 8; |
int sg = (sp[1] * invsa) >> 8; |
int sb = (sp[2] * invsa) >> 8; |
int br = (bp[0] * invba) >> 8; |
int bg = (bp[1] * invba) >> 8; |
int bb = (bp[2] * invba) >> 8; |
switch (blendmode) |
{ |
default: |
case FZ_BLEND_HUE: |
fz_hue_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_SATURATION: |
fz_saturation_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_COLOR: |
fz_color_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_LUMINOSITY: |
fz_luminosity_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
} |
bp[0] = fz_mul255(255 - sa, bp[0]) + fz_mul255(255 - ba, sp[0]) + fz_mul255(saba, rr); |
bp[1] = fz_mul255(255 - sa, bp[1]) + fz_mul255(255 - ba, sp[1]) + fz_mul255(saba, rg); |
bp[2] = fz_mul255(255 - sa, bp[2]) + fz_mul255(255 - ba, sp[2]) + fz_mul255(saba, rb); |
bp[3] = ba + sa - saba; |
sp += 4; |
bp += 4; |
} |
} |
static void |
fz_blend_separable_nonisolated(byte * restrict bp, byte * restrict sp, int n, int w, int blendmode, byte * restrict hp, int alpha) |
{ |
int k; |
int n1 = n - 1; |
if (alpha == 255 && blendmode == 0) |
{ |
/* In this case, the uncompositing and the recompositing |
* cancel one another out, and it's just a simple copy. */ |
/* FIXME: Maybe we can avoid using the shape plane entirely |
* and just copy? */ |
while (w--) |
{ |
int ha = fz_mul255(*hp++, alpha); /* ha = shape_alpha */ |
/* If ha == 0 then leave everything unchanged */ |
if (ha != 0) |
{ |
for (k = 0; k < n; k++) |
{ |
bp[k] = sp[k]; |
} |
} |
sp += n; |
bp += n; |
} |
return; |
} |
while (w--) |
{ |
int ha = *hp++; |
int haa = fz_mul255(ha, alpha); /* ha = shape_alpha */ |
/* If haa == 0 then leave everything unchanged */ |
if (haa != 0) |
{ |
int sa = sp[n1]; |
int ba = bp[n1]; |
int baha = fz_mul255(ba, haa); |
/* ugh, division to get non-premul components */ |
int invsa = sa ? 255 * 256 / sa : 0; |
int invba = ba ? 255 * 256 / ba : 0; |
/* Calculate result_alpha */ |
int ra = bp[n1] = ba - baha + haa; |
/* Because we are a non-isolated group, we need to |
* 'uncomposite' before we blend (recomposite). |
* We assume that normal blending has been done inside |
* the group, so: ra.rc = (1-ha).bc + ha.sc |
* A bit of rearrangement, and that gives us that: |
* sc = (ra.rc - bc)/ha + bc |
* Now, the result of the blend was stored in src, so: |
*/ |
int invha = ha ? 255 * 256 / ha : 0; |
if (ra != 0) for (k = 0; k < n1; k++) |
{ |
int sc = (sp[k] * invsa) >> 8; |
int bc = (bp[k] * invba) >> 8; |
int rc; |
/* Uncomposite */ |
sc = (((sc-bc)*invha)>>8) + bc; |
if (sc < 0) sc = 0; |
if (sc > 255) sc = 255; |
switch (blendmode) |
{ |
default: |
case FZ_BLEND_NORMAL: rc = sc; break; |
case FZ_BLEND_MULTIPLY: rc = fz_mul255(bc, sc); break; |
case FZ_BLEND_SCREEN: rc = fz_screen_byte(bc, sc); break; |
case FZ_BLEND_OVERLAY: rc = fz_overlay_byte(bc, sc); break; |
case FZ_BLEND_DARKEN: rc = fz_darken_byte(bc, sc); break; |
case FZ_BLEND_LIGHTEN: rc = fz_lighten_byte(bc, sc); break; |
case FZ_BLEND_COLOR_DODGE: rc = fz_color_dodge_byte(bc, sc); break; |
case FZ_BLEND_COLOR_BURN: rc = fz_color_burn_byte(bc, sc); break; |
case FZ_BLEND_HARD_LIGHT: rc = fz_hard_light_byte(bc, sc); break; |
case FZ_BLEND_SOFT_LIGHT: rc = fz_soft_light_byte(bc, sc); break; |
case FZ_BLEND_DIFFERENCE: rc = fz_difference_byte(bc, sc); break; |
case FZ_BLEND_EXCLUSION: rc = fz_exclusion_byte(bc, sc); break; |
} |
rc = fz_mul255(255 - haa, bc) + fz_mul255(fz_mul255(255 - ba, sc), haa) + fz_mul255(baha, rc); |
if (rc < 0) rc = 0; |
if (rc > 255) rc = 255; |
bp[k] = fz_mul255(rc, ra); |
} |
} |
sp += n; |
bp += n; |
} |
} |
static void |
fz_blend_nonseparable_nonisolated(byte * restrict bp, byte * restrict sp, int w, int blendmode, byte * restrict hp, int alpha) |
{ |
while (w--) |
{ |
int ha = *hp++; |
int haa = fz_mul255(ha, alpha); |
if (haa != 0) |
{ |
int sa = sp[3]; |
int ba = bp[3]; |
int baha = fz_mul255(ba, haa); |
/* Calculate result_alpha */ |
int ra = bp[3] = ba - baha + haa; |
if (ra != 0) |
{ |
/* Because we are a non-isolated group, we |
* need to 'uncomposite' before we blend |
* (recomposite). We assume that normal |
* blending has been done inside the group, |
* so: ra.rc = (1-ha).bc + ha.sc |
* A bit of rearrangement, and that gives us |
* that: sc = (ra.rc - bc)/ha + bc |
* Now, the result of the blend was stored in |
* src, so: */ |
int invha = ha ? 255 * 256 / ha : 0; |
int rr, rg, rb; |
/* ugh, division to get non-premul components */ |
int invsa = sa ? 255 * 256 / sa : 0; |
int invba = ba ? 255 * 256 / ba : 0; |
int sr = (sp[0] * invsa) >> 8; |
int sg = (sp[1] * invsa) >> 8; |
int sb = (sp[2] * invsa) >> 8; |
int br = (bp[0] * invba) >> 8; |
int bg = (bp[1] * invba) >> 8; |
int bb = (bp[2] * invba) >> 8; |
/* Uncomposite */ |
sr = (((sr-br)*invha)>>8) + br; |
sg = (((sg-bg)*invha)>>8) + bg; |
sb = (((sb-bb)*invha)>>8) + bb; |
switch (blendmode) |
{ |
default: |
case FZ_BLEND_HUE: |
fz_hue_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_SATURATION: |
fz_saturation_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_COLOR: |
fz_color_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
case FZ_BLEND_LUMINOSITY: |
fz_luminosity_rgb(&rr, &rg, &rb, br, bg, bb, sr, sg, sb); |
break; |
} |
rr = fz_mul255(255 - haa, bp[0]) + fz_mul255(fz_mul255(255 - ba, sr), haa) + fz_mul255(baha, rr); |
rg = fz_mul255(255 - haa, bp[1]) + fz_mul255(fz_mul255(255 - ba, sg), haa) + fz_mul255(baha, rg); |
rb = fz_mul255(255 - haa, bp[2]) + fz_mul255(fz_mul255(255 - ba, sb), haa) + fz_mul255(baha, rb); |
bp[0] = fz_mul255(ra, rr); |
bp[1] = fz_mul255(ra, rg); |
bp[2] = fz_mul255(ra, rb); |
} |
} |
sp += 4; |
bp += 4; |
} |
} |
void |
fz_blend_pixmap(fz_pixmap *dst, fz_pixmap *src, int alpha, int blendmode, int isolated, fz_pixmap *shape) |
{ |
unsigned char *sp, *dp; |
fz_bbox bbox; |
int x, y, w, h, n; |
/* TODO: fix this hack! */ |
if (isolated && alpha < 255) |
{ |
sp = src->samples; |
n = src->w * src->h * src->n; |
while (n--) |
{ |
*sp = fz_mul255(*sp, alpha); |
sp++; |
} |
} |
bbox = fz_bound_pixmap(dst); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(src)); |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
n = src->n; |
sp = src->samples + ((y - src->y) * src->w + (x - src->x)) * n; |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * n; |
assert(src->n == dst->n); |
if (!isolated) |
{ |
unsigned char *hp = shape->samples + (y - shape->y) * shape->w + (x - shape->x); |
while (h--) |
{ |
if (n == 4 && blendmode >= FZ_BLEND_HUE) |
fz_blend_nonseparable_nonisolated(dp, sp, w, blendmode, hp, alpha); |
else |
fz_blend_separable_nonisolated(dp, sp, n, w, blendmode, hp, alpha); |
sp += src->w * n; |
dp += dst->w * n; |
hp += shape->w; |
} |
} |
else |
{ |
while (h--) |
{ |
if (n == 4 && blendmode >= FZ_BLEND_HUE) |
fz_blend_nonseparable(dp, sp, w, blendmode); |
else |
fz_blend_separable(dp, sp, n, w, blendmode); |
sp += src->w * n; |
dp += dst->w * n; |
} |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_device.c |
---|
0,0 → 1,1582 |
#include "fitz.h" |
#define QUANT(x,a) (((int)((x) * (a))) / (a)) |
#define HSUBPIX 5.0 |
#define VSUBPIX 5.0 |
#define STACK_SIZE 96 |
/* Enable the following to attempt to support knockout and/or isolated |
* blending groups. This code is known to give incorrect results currently |
* so disabled by default. See bug 692377. */ |
#undef ATTEMPT_KNOCKOUT_AND_ISOLATED |
/* Enable the following to help debug group blending. */ |
#undef DUMP_GROUP_BLENDS |
/* Note #1: At various points in this code (notably when clipping with non |
* rectangular masks), we create a new (empty) destination pixmap. We then |
* render this pixmap, then plot it back into the original destination |
* through a mask. This works well for normal blending, but falls down for |
* non-zero blending modes; effectively we are forcing ourselves to use an |
* isolated group. |
* |
* The fix for this would be to copy the contents from the underlying dest |
* into the newly created dest. This would enable us to use a non |
* FZ_BLEND_ISOLATED blendmode. Unfortunately, tt would break tiling, as |
* we could no longer render once and blend back multiple times. |
*/ |
typedef struct fz_draw_device_s fz_draw_device; |
enum { |
FZ_DRAWDEV_FLAGS_TYPE3 = 1, |
}; |
struct fz_draw_device_s |
{ |
fz_glyph_cache *cache; |
fz_gel *gel; |
fz_pixmap *dest; |
fz_pixmap *shape; |
fz_bbox scissor; |
int flags; |
int top; |
int blendmode; |
struct { |
fz_bbox scissor; |
fz_pixmap *dest; |
fz_pixmap *mask; |
fz_pixmap *shape; |
int blendmode; |
int luminosity; |
float alpha; |
fz_matrix ctm; |
float xstep, ystep; |
fz_rect area; |
} stack[STACK_SIZE]; |
}; |
#ifdef DUMP_GROUP_BLENDS |
static int group_dump_count = 0; |
static void fz_dump_blend(fz_pixmap *pix, const char *s) |
{ |
char name[80]; |
if (pix == NULL) |
return; |
sprintf(name, "dump%02d.png", group_dump_count); |
if (s) |
printf("%s%02d", s, group_dump_count); |
group_dump_count++; |
fz_write_png(pix, name, (pix->n > 1)); |
} |
static void dump_spaces(int x, const char *s) |
{ |
int i; |
for (i = 0; i < x; i++) |
printf(" "); |
printf("%s", s); |
} |
#endif |
static void fz_knockout_begin(void *user) |
{ |
fz_draw_device *dev = user; |
fz_bbox bbox; |
fz_pixmap *dest, *shape; |
int isolated = dev->blendmode & FZ_BLEND_ISOLATED; |
if ((dev->blendmode & FZ_BLEND_KNOCKOUT) == 0) |
return; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
bbox = fz_bound_pixmap(dev->dest); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
dest = fz_new_pixmap_with_rect(dev->dest->colorspace, bbox); |
if (isolated) |
{ |
fz_clear_pixmap(dest); |
} |
else |
{ |
fz_pixmap *prev; |
int i = dev->top; |
do |
prev = dev->stack[--i].dest; |
while (prev == NULL); |
fz_copy_pixmap_rect(dest, prev, bbox); |
} |
if (dev->blendmode == 0 && isolated) |
{ |
/* We can render direct to any existing shape plane. If there |
* isn't one, we don't need to make one. */ |
shape = dev->shape; |
} |
else |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
dev->stack[dev->top].blendmode = dev->blendmode; |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Knockout begin\n"); |
#endif |
dev->top++; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
dev->blendmode &= ~FZ_BLEND_MODEMASK; |
} |
static void fz_knockout_end(void *user) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *group = dev->dest; |
fz_pixmap *shape = dev->shape; |
int blendmode; |
int isolated; |
if ((dev->blendmode & FZ_BLEND_KNOCKOUT) == 0) |
return; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (dev->top > 0) |
{ |
dev->top--; |
blendmode = dev->blendmode & FZ_BLEND_MODEMASK; |
isolated = dev->blendmode & FZ_BLEND_ISOLATED; |
dev->blendmode = dev->stack[dev->top].blendmode; |
dev->shape = dev->stack[dev->top].shape; |
dev->dest = dev->stack[dev->top].dest; |
dev->scissor = dev->stack[dev->top].scissor; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, ""); |
fz_dump_blend(group, "Blending "); |
if (shape) |
fz_dump_blend(shape, "/"); |
fz_dump_blend(dev->dest, " onto "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
if (blendmode != 0) |
printf(" (blend %d)", blendmode); |
if (isolated != 0) |
printf(" (isolated)"); |
printf(" (knockout)"); |
#endif |
if ((blendmode == 0) && (shape == NULL)) |
fz_paint_pixmap(dev->dest, group, 255); |
else |
fz_blend_pixmap(dev->dest, group, 255, blendmode, isolated, shape); |
fz_drop_pixmap(group); |
if (shape != dev->shape) |
{ |
if (dev->shape) |
{ |
fz_paint_pixmap(dev->shape, shape, 255); |
} |
fz_drop_pixmap(shape); |
} |
#ifdef DUMP_GROUP_BLENDS |
fz_dump_blend(dev->dest, " to get "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
printf("\n"); |
#endif |
} |
} |
static void |
fz_draw_fill_path(void *user, fz_path *path, int even_odd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
float expansion = fz_matrix_expansion(ctm); |
float flatness = 0.3f / expansion; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
float colorfv[FZ_MAX_COLORS]; |
fz_bbox bbox; |
int i; |
fz_reset_gel(dev->gel, dev->scissor); |
fz_flatten_fill_path(dev->gel, path, ctm, flatness); |
fz_sort_gel(dev->gel); |
bbox = fz_bound_gel(dev->gel); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
if (fz_is_empty_rect(bbox)) |
return; |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
fz_convert_color(colorspace, color, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = alpha * 255; |
fz_scan_convert(dev->gel, even_odd, bbox, dev->dest, colorbv); |
if (dev->shape) |
{ |
fz_reset_gel(dev->gel, dev->scissor); |
fz_flatten_fill_path(dev->gel, path, ctm, flatness); |
fz_sort_gel(dev->gel); |
colorbv[0] = alpha * 255; |
fz_scan_convert(dev->gel, even_odd, bbox, dev->shape, colorbv); |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_stroke_path(void *user, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
float expansion = fz_matrix_expansion(ctm); |
float flatness = 0.3f / expansion; |
float linewidth = stroke->linewidth; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
float colorfv[FZ_MAX_COLORS]; |
fz_bbox bbox; |
int i; |
if (linewidth * expansion < 0.1f) |
linewidth = 1 / expansion; |
fz_reset_gel(dev->gel, dev->scissor); |
if (stroke->dash_len > 0) |
fz_flatten_dash_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
else |
fz_flatten_stroke_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
fz_sort_gel(dev->gel); |
bbox = fz_bound_gel(dev->gel); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
if (fz_is_empty_rect(bbox)) |
return; |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
fz_convert_color(colorspace, color, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = alpha * 255; |
fz_scan_convert(dev->gel, 0, bbox, dev->dest, colorbv); |
if (dev->shape) |
{ |
fz_reset_gel(dev->gel, dev->scissor); |
if (stroke->dash_len > 0) |
fz_flatten_dash_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
else |
fz_flatten_stroke_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
fz_sort_gel(dev->gel); |
colorbv[0] = 255; |
fz_scan_convert(dev->gel, 0, bbox, dev->shape, colorbv); |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_clip_path(void *user, fz_path *path, fz_rect *rect, int even_odd, fz_matrix ctm) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
float expansion = fz_matrix_expansion(ctm); |
float flatness = 0.3f / expansion; |
fz_pixmap *mask, *dest, *shape; |
fz_bbox bbox; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
fz_reset_gel(dev->gel, dev->scissor); |
fz_flatten_fill_path(dev->gel, path, ctm, flatness); |
fz_sort_gel(dev->gel); |
bbox = fz_bound_gel(dev->gel); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
if (rect) |
bbox = fz_intersect_bbox(bbox, fz_round_rect(*rect)); |
if (fz_is_empty_rect(bbox) || fz_is_rect_gel(dev->gel)) |
{ |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = NULL; |
dev->stack[dev->top].dest = NULL; |
dev->stack[dev->top].shape = dev->shape; |
dev->stack[dev->top].blendmode = dev->blendmode; |
dev->scissor = bbox; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (rectangular) begin\n"); |
#endif |
dev->top++; |
return; |
} |
mask = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(mask); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
if (dev->shape) |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
else |
shape = NULL; |
fz_scan_convert(dev->gel, even_odd, bbox, mask, NULL); |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = mask; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (non-rectangular) begin\n"); |
#endif |
dev->top++; |
} |
static void |
fz_draw_clip_stroke_path(void *user, fz_path *path, fz_rect *rect, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
float expansion = fz_matrix_expansion(ctm); |
float flatness = 0.3f / expansion; |
float linewidth = stroke->linewidth; |
fz_pixmap *mask, *dest, *shape; |
fz_bbox bbox; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (linewidth * expansion < 0.1f) |
linewidth = 1 / expansion; |
fz_reset_gel(dev->gel, dev->scissor); |
if (stroke->dash_len > 0) |
fz_flatten_dash_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
else |
fz_flatten_stroke_path(dev->gel, path, stroke, ctm, flatness, linewidth); |
fz_sort_gel(dev->gel); |
bbox = fz_bound_gel(dev->gel); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
if (rect) |
bbox = fz_intersect_bbox(bbox, fz_round_rect(*rect)); |
mask = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(mask); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
if (dev->shape) |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
else |
shape = NULL; |
if (!fz_is_empty_rect(bbox)) |
fz_scan_convert(dev->gel, 0, bbox, mask, NULL); |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = mask; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (stroke) begin\n"); |
#endif |
dev->top++; |
} |
static void |
draw_glyph(unsigned char *colorbv, fz_pixmap *dst, fz_pixmap *msk, |
int xorig, int yorig, fz_bbox scissor) |
{ |
unsigned char *dp, *mp; |
fz_bbox bbox; |
int x, y, w, h; |
bbox = fz_bound_pixmap(msk); |
bbox.x0 += xorig; |
bbox.y0 += yorig; |
bbox.x1 += xorig; |
bbox.y1 += yorig; |
bbox = fz_intersect_bbox(bbox, scissor); /* scissor < dst */ |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
mp = msk->samples + ((y - msk->y - yorig) * msk->w + (x - msk->x - xorig)); |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * dst->n; |
assert(msk->n == 1); |
while (h--) |
{ |
if (dst->colorspace) |
fz_paint_span_with_color(dp, mp, dst->n, w, colorbv); |
else |
fz_paint_span(dp, mp, 1, w, 255); |
dp += dst->w * dst->n; |
mp += msk->w; |
} |
} |
static void |
fz_draw_fill_text(void *user, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
unsigned char shapebv; |
float colorfv[FZ_MAX_COLORS]; |
fz_matrix tm, trm; |
fz_pixmap *glyph; |
int i, x, y, gid; |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
fz_convert_color(colorspace, color, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = alpha * 255; |
shapebv = 255; |
tm = text->trm; |
for (i = 0; i < text->len; i++) |
{ |
gid = text->items[i].gid; |
if (gid < 0) |
continue; |
tm.e = text->items[i].x; |
tm.f = text->items[i].y; |
trm = fz_concat(tm, ctm); |
x = floorf(trm.e); |
y = floorf(trm.f); |
trm.e = QUANT(trm.e - floorf(trm.e), HSUBPIX); |
trm.f = QUANT(trm.f - floorf(trm.f), VSUBPIX); |
glyph = fz_render_glyph(dev->cache, text->font, gid, trm, model); |
if (glyph) |
{ |
if (glyph->n == 1) |
{ |
draw_glyph(colorbv, dev->dest, glyph, x, y, dev->scissor); |
if (dev->shape) |
draw_glyph(&shapebv, dev->shape, glyph, x, y, dev->scissor); |
} |
else |
{ |
fz_matrix ctm = {glyph->w, 0.0, 0.0, -glyph->h, x + glyph->x, y + glyph->y + glyph->h}; |
fz_paint_image(dev->dest, dev->scissor, dev->shape, glyph, ctm, alpha * 255); |
} |
fz_drop_pixmap(glyph); |
} |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
float colorfv[FZ_MAX_COLORS]; |
fz_matrix tm, trm; |
fz_pixmap *glyph; |
int i, x, y, gid; |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
fz_convert_color(colorspace, color, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = alpha * 255; |
tm = text->trm; |
for (i = 0; i < text->len; i++) |
{ |
gid = text->items[i].gid; |
if (gid < 0) |
continue; |
tm.e = text->items[i].x; |
tm.f = text->items[i].y; |
trm = fz_concat(tm, ctm); |
x = floorf(trm.e); |
y = floorf(trm.f); |
trm.e = QUANT(trm.e - floorf(trm.e), HSUBPIX); |
trm.f = QUANT(trm.f - floorf(trm.f), VSUBPIX); |
glyph = fz_render_stroked_glyph(dev->cache, text->font, gid, trm, ctm, stroke); |
if (glyph) |
{ |
draw_glyph(colorbv, dev->dest, glyph, x, y, dev->scissor); |
if (dev->shape) |
draw_glyph(colorbv, dev->shape, glyph, x, y, dev->scissor); |
fz_drop_pixmap(glyph); |
} |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_clip_text(void *user, fz_text *text, fz_matrix ctm, int accumulate) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_bbox bbox; |
fz_pixmap *mask, *dest, *shape; |
fz_matrix tm, trm; |
fz_pixmap *glyph; |
int i, x, y, gid; |
/* If accumulate == 0 then this text object is guaranteed complete */ |
/* If accumulate == 1 then this text object is the first (or only) in a sequence */ |
/* If accumulate == 2 then this text object is a continuation */ |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (accumulate == 0) |
{ |
/* make the mask the exact size needed */ |
bbox = fz_round_rect(fz_bound_text(text, ctm)); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
} |
else |
{ |
/* be conservative about the size of the mask needed */ |
bbox = dev->scissor; |
} |
if (accumulate == 0 || accumulate == 1) |
{ |
mask = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(mask); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
if (dev->shape) |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
else |
shape = NULL; |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = mask; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (text) begin\n"); |
#endif |
dev->top++; |
} |
else |
{ |
mask = dev->stack[dev->top-1].mask; |
} |
if (!fz_is_empty_rect(bbox)) |
{ |
tm = text->trm; |
for (i = 0; i < text->len; i++) |
{ |
gid = text->items[i].gid; |
if (gid < 0) |
continue; |
tm.e = text->items[i].x; |
tm.f = text->items[i].y; |
trm = fz_concat(tm, ctm); |
x = floorf(trm.e); |
y = floorf(trm.f); |
trm.e = QUANT(trm.e - floorf(trm.e), HSUBPIX); |
trm.f = QUANT(trm.f - floorf(trm.f), VSUBPIX); |
glyph = fz_render_glyph(dev->cache, text->font, gid, trm, model); |
if (glyph) |
{ |
draw_glyph(NULL, mask, glyph, x, y, bbox); |
if (dev->shape) |
draw_glyph(NULL, dev->shape, glyph, x, y, bbox); |
fz_drop_pixmap(glyph); |
} |
} |
} |
} |
static void |
fz_draw_clip_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_bbox bbox; |
fz_pixmap *mask, *dest, *shape; |
fz_matrix tm, trm; |
fz_pixmap *glyph; |
int i, x, y, gid; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
/* make the mask the exact size needed */ |
bbox = fz_round_rect(fz_bound_text(text, ctm)); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
mask = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(mask); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
if (dev->shape) |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
else |
shape = dev->shape; |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = mask; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (stroke text) begin\n"); |
#endif |
dev->top++; |
if (!fz_is_empty_rect(bbox)) |
{ |
tm = text->trm; |
for (i = 0; i < text->len; i++) |
{ |
gid = text->items[i].gid; |
if (gid < 0) |
continue; |
tm.e = text->items[i].x; |
tm.f = text->items[i].y; |
trm = fz_concat(tm, ctm); |
x = floorf(trm.e); |
y = floorf(trm.f); |
trm.e = QUANT(trm.e - floorf(trm.e), HSUBPIX); |
trm.f = QUANT(trm.f - floorf(trm.f), VSUBPIX); |
glyph = fz_render_stroked_glyph(dev->cache, text->font, gid, trm, ctm, stroke); |
if (glyph) |
{ |
draw_glyph(NULL, mask, glyph, x, y, bbox); |
if (dev->shape) |
draw_glyph(NULL, dev->shape, glyph, x, y, bbox); |
fz_drop_pixmap(glyph); |
} |
} |
} |
} |
static void |
fz_draw_ignore_text(void *user, fz_text *text, fz_matrix ctm) |
{ |
} |
static void |
fz_draw_fill_shade(void *user, fz_shade *shade, fz_matrix ctm, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_pixmap *dest = dev->dest; |
fz_rect bounds; |
fz_bbox bbox, scissor; |
float colorfv[FZ_MAX_COLORS]; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
bounds = fz_bound_shade(shade, ctm); |
bbox = fz_intersect_bbox(fz_round_rect(bounds), dev->scissor); |
scissor = dev->scissor; |
// TODO: proper clip by shade->bbox |
if (fz_is_empty_rect(bbox)) |
return; |
if (!model) |
{ |
fz_warn("cannot render shading directly to an alpha mask"); |
return; |
} |
if (alpha < 1) |
{ |
dest = fz_new_pixmap_with_rect(dev->dest->colorspace, bbox); |
fz_clear_pixmap(dest); |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
if (shade->use_background) |
{ |
unsigned char *s; |
int x, y, n, i; |
fz_convert_color(shade->colorspace, shade->background, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = 255; |
n = dest->n; |
for (y = scissor.y0; y < scissor.y1; y++) |
{ |
s = dest->samples + ((scissor.x0 - dest->x) + (y - dest->y) * dest->w) * dest->n; |
for (x = scissor.x0; x < scissor.x1; x++) |
{ |
for (i = 0; i < n; i++) |
*s++ = colorbv[i]; |
} |
} |
if (dev->shape) |
{ |
for (y = scissor.y0; y < scissor.y1; y++) |
{ |
s = dev->shape->samples + (scissor.x0 - dev->shape->x) + (y - dev->shape->y) * dev->shape->w; |
for (x = scissor.x0; x < scissor.x1; x++) |
{ |
*s++ = 255; |
} |
} |
} |
} |
fz_paint_shade(shade, ctm, dest, bbox); |
if (dev->shape) |
fz_clear_pixmap_rect_with_color(dev->shape, 255, bbox); |
if (alpha < 1) |
{ |
fz_paint_pixmap(dev->dest, dest, alpha * 255); |
fz_drop_pixmap(dest); |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static fz_pixmap * |
fz_transform_pixmap(fz_pixmap *image, fz_matrix *ctm, int x, int y, int dx, int dy, int gridfit) |
{ |
fz_pixmap *scaled; |
if (ctm->a != 0 && ctm->b == 0 && ctm->c == 0 && ctm->d != 0) |
{ |
/* Unrotated or X-flip or Y-flip or XY-flip */ |
scaled = fz_scale_pixmap_gridfit(image, ctm->e, ctm->f, ctm->a, ctm->d, gridfit); |
if (scaled == NULL) |
return NULL; |
ctm->a = scaled->w; |
ctm->d = scaled->h; |
ctm->e = scaled->x; |
ctm->f = scaled->y; |
return scaled; |
} |
if (ctm->a == 0 && ctm->b != 0 && ctm->c != 0 && ctm->d == 0) |
{ |
/* Other orthogonal flip/rotation cases */ |
scaled = fz_scale_pixmap_gridfit(image, ctm->f, ctm->e, ctm->b, ctm->c, gridfit); |
if (scaled == NULL) |
return NULL; |
ctm->b = scaled->w; |
ctm->c = scaled->h; |
ctm->f = scaled->x; |
ctm->e = scaled->y; |
return scaled; |
} |
/* Downscale, non rectilinear case */ |
if (dx > 0 && dy > 0) |
{ |
scaled = fz_scale_pixmap(image, 0, 0, (float)dx, (float)dy); |
return scaled; |
} |
return NULL; |
} |
static void |
fz_draw_fill_image(void *user, fz_pixmap *image, fz_matrix ctm, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_pixmap *converted = NULL; |
fz_pixmap *scaled = NULL; |
int after; |
int dx, dy; |
if (!model) |
{ |
fz_warn("cannot render image directly to an alpha mask"); |
return; |
} |
if (image->w == 0 || image->h == 0) |
return; |
/* convert images with more components (cmyk->rgb) before scaling */ |
/* convert images with fewer components (gray->rgb after scaling */ |
/* convert images with expensive colorspace transforms after scaling */ |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
after = 0; |
if (image->colorspace == fz_device_gray) |
after = 1; |
if (image->colorspace != model && !after) |
{ |
converted = fz_new_pixmap_with_rect(model, fz_bound_pixmap(image)); |
fz_convert_pixmap(image, converted); |
image = converted; |
} |
dx = sqrtf(ctm.a * ctm.a + ctm.b * ctm.b); |
dy = sqrtf(ctm.c * ctm.c + ctm.d * ctm.d); |
if (dx < image->w && dy < image->h) |
{ |
int gridfit = alpha == 1.0f && !(dev->flags & FZ_DRAWDEV_FLAGS_TYPE3); |
scaled = fz_transform_pixmap(image, &ctm, dev->dest->x, dev->dest->y, dx, dy, gridfit); |
if (scaled == NULL) |
{ |
if (dx < 1) |
dx = 1; |
if (dy < 1) |
dy = 1; |
scaled = fz_scale_pixmap(image, image->x, image->y, dx, dy); |
} |
if (scaled != NULL) |
image = scaled; |
} |
if (image->colorspace != model) |
{ |
if ((image->colorspace == fz_device_gray && model == fz_device_rgb) || |
(image->colorspace == fz_device_gray && model == fz_device_bgr)) |
{ |
/* We have special case rendering code for gray -> rgb/bgr */ |
} |
else |
{ |
converted = fz_new_pixmap_with_rect(model, fz_bound_pixmap(image)); |
fz_convert_pixmap(image, converted); |
image = converted; |
} |
} |
fz_paint_image(dev->dest, dev->scissor, dev->shape, image, ctm, alpha * 255); |
if (scaled) |
fz_drop_pixmap(scaled); |
if (converted) |
fz_drop_pixmap(converted); |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_fill_image_mask(void *user, fz_pixmap *image, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
unsigned char colorbv[FZ_MAX_COLORS + 1]; |
float colorfv[FZ_MAX_COLORS]; |
fz_pixmap *scaled = NULL; |
int dx, dy; |
int i; |
if (image->w == 0 || image->h == 0) |
return; |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
dx = sqrtf(ctm.a * ctm.a + ctm.b * ctm.b); |
dy = sqrtf(ctm.c * ctm.c + ctm.d * ctm.d); |
if (dx < image->w && dy < image->h) |
{ |
int gridfit = alpha == 1.0f && !(dev->flags & FZ_DRAWDEV_FLAGS_TYPE3); |
scaled = fz_transform_pixmap(image, &ctm, dev->dest->x, dev->dest->y, dx, dy, gridfit); |
if (scaled == NULL) |
{ |
if (dx < 1) |
dx = 1; |
if (dy < 1) |
dy = 1; |
scaled = fz_scale_pixmap(image, image->x, image->y, dx, dy); |
} |
if (scaled != NULL) |
image = scaled; |
} |
fz_convert_color(colorspace, color, model, colorfv); |
for (i = 0; i < model->n; i++) |
colorbv[i] = colorfv[i] * 255; |
colorbv[i] = alpha * 255; |
fz_paint_image_with_color(dev->dest, dev->scissor, dev->shape, image, ctm, colorbv); |
if (scaled) |
fz_drop_pixmap(scaled); |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
} |
static void |
fz_draw_clip_image_mask(void *user, fz_pixmap *image, fz_rect *rect, fz_matrix ctm) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_bbox bbox; |
fz_pixmap *mask, *dest, *shape; |
fz_pixmap *scaled = NULL; |
int dx, dy; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip (image mask) begin\n"); |
#endif |
if (image->w == 0 || image->h == 0) |
{ |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = NULL; |
dev->stack[dev->top].dest = NULL; |
dev->stack[dev->top].blendmode = dev->blendmode; |
dev->scissor = fz_empty_bbox; |
dev->top++; |
return; |
} |
bbox = fz_round_rect(fz_transform_rect(ctm, fz_unit_rect)); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
if (rect) |
bbox = fz_intersect_bbox(bbox, fz_round_rect(*rect)); |
mask = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(mask); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
if (dev->shape) |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
else |
shape = NULL; |
dx = sqrtf(ctm.a * ctm.a + ctm.b * ctm.b); |
dy = sqrtf(ctm.c * ctm.c + ctm.d * ctm.d); |
if (dx < image->w && dy < image->h) |
{ |
int gridfit = !(dev->flags & FZ_DRAWDEV_FLAGS_TYPE3); |
scaled = fz_transform_pixmap(image, &ctm, dev->dest->x, dev->dest->y, dx, dy, gridfit); |
if (scaled == NULL) |
{ |
if (dx < 1) |
dx = 1; |
if (dy < 1) |
dy = 1; |
scaled = fz_scale_pixmap(image, image->x, image->y, dx, dy); |
} |
if (scaled != NULL) |
image = scaled; |
} |
fz_paint_image(mask, bbox, dev->shape, image, ctm, 255); |
if (scaled) |
fz_drop_pixmap(scaled); |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = mask; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
dev->top++; |
} |
static void |
fz_draw_pop_clip(void *user) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *mask, *dest, *shape; |
if (dev->top > 0) |
{ |
dev->top--; |
dev->scissor = dev->stack[dev->top].scissor; |
mask = dev->stack[dev->top].mask; |
dest = dev->stack[dev->top].dest; |
shape = dev->stack[dev->top].shape; |
dev->blendmode = dev->stack[dev->top].blendmode; |
/* We can get here with mask == NULL if the clipping actually |
* resolved to a rectangle earlier. In this case, we will |
* have a dest, and the shape will be unchanged. |
*/ |
if (mask) |
{ |
assert(dest); |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, ""); |
fz_dump_blend(dev->dest, "Clipping "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
fz_dump_blend(dest, " onto "); |
if (shape) |
fz_dump_blend(shape, "/"); |
fz_dump_blend(mask, " with "); |
#endif |
fz_paint_pixmap_with_mask(dest, dev->dest, mask); |
if (shape != NULL) |
{ |
assert(shape != dev->shape); |
fz_paint_pixmap_with_mask(shape, dev->shape, mask); |
fz_drop_pixmap(dev->shape); |
dev->shape = shape; |
} |
fz_drop_pixmap(mask); |
fz_drop_pixmap(dev->dest); |
dev->dest = dest; |
#ifdef DUMP_GROUP_BLENDS |
fz_dump_blend(dev->dest, " to get "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
printf("\n"); |
#endif |
} |
else |
{ |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Clip End\n"); |
#endif |
assert(dest == NULL); |
assert(shape == dev->shape); |
} |
} |
} |
static void |
fz_draw_begin_mask(void *user, fz_rect rect, int luminosity, fz_colorspace *colorspace, float *colorfv) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *dest; |
fz_pixmap *shape = dev->shape; |
fz_bbox bbox; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
bbox = fz_round_rect(rect); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
dest = fz_new_pixmap_with_rect(fz_device_gray, bbox); |
if (dev->shape) |
{ |
/* FIXME: If we ever want to support AIS true, then we |
* probably want to create a shape pixmap here, using: |
* shape = fz_new_pixmap_with_rect(NULL, bbox); |
* then, in the end_mask code, we create the mask from this |
* rather than dest. |
*/ |
shape = NULL; |
} |
if (luminosity) |
{ |
float bc; |
if (!colorspace) |
colorspace = fz_device_gray; |
fz_convert_color(colorspace, colorfv, fz_device_gray, &bc); |
fz_clear_pixmap_with_color(dest, bc * 255); |
if (shape) |
fz_clear_pixmap_with_color(shape, 255); |
} |
else |
{ |
fz_clear_pixmap(dest); |
if (shape) |
fz_clear_pixmap(shape); |
} |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].luminosity = luminosity; |
dev->stack[dev->top].shape = dev->shape; |
dev->stack[dev->top].blendmode = dev->blendmode; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Mask begin\n"); |
#endif |
dev->top++; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
} |
static void |
fz_draw_end_mask(void *user) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *mask = dev->dest; |
fz_pixmap *maskshape = dev->shape; |
fz_pixmap *temp, *dest; |
fz_bbox bbox; |
int luminosity; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (dev->top > 0) |
{ |
/* pop soft mask buffer */ |
dev->top--; |
luminosity = dev->stack[dev->top].luminosity; |
dev->scissor = dev->stack[dev->top].scissor; |
dev->dest = dev->stack[dev->top].dest; |
dev->shape = dev->stack[dev->top].shape; |
/* convert to alpha mask */ |
temp = fz_alpha_from_gray(mask, luminosity); |
fz_drop_pixmap(mask); |
fz_drop_pixmap(maskshape); |
/* create new dest scratch buffer */ |
bbox = fz_bound_pixmap(temp); |
dest = fz_new_pixmap_with_rect(dev->dest->colorspace, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
/* push soft mask as clip mask */ |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].mask = temp; |
dev->stack[dev->top].dest = dev->dest; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
/* If we have a shape, then it'll need to be masked with the |
* clip mask when we pop. So create a new shape now. */ |
if (dev->shape) |
{ |
dev->stack[dev->top].shape = dev->shape; |
dev->shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(dev->shape); |
} |
dev->scissor = bbox; |
dev->dest = dest; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Mask -> Clip\n"); |
#endif |
dev->top++; |
} |
} |
static void |
fz_draw_begin_group(void *user, fz_rect rect, int isolated, int knockout, int blendmode, float alpha) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_bbox bbox; |
fz_pixmap *dest, *shape; |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
bbox = fz_round_rect(rect); |
bbox = fz_intersect_bbox(bbox, dev->scissor); |
dest = fz_new_pixmap_with_rect(model, bbox); |
#ifndef ATTEMPT_KNOCKOUT_AND_ISOLATED |
knockout = 0; |
isolated = 1; |
#endif |
if (isolated) |
{ |
fz_clear_pixmap(dest); |
} |
else |
{ |
fz_copy_pixmap_rect(dest, dev->dest, bbox); |
} |
if (blendmode == 0 && alpha == 1.0 && isolated) |
{ |
/* We can render direct to any existing shape plane. If there |
* isn't one, we don't need to make one. */ |
shape = dev->shape; |
} |
else |
{ |
shape = fz_new_pixmap_with_rect(NULL, bbox); |
fz_clear_pixmap(shape); |
} |
dev->stack[dev->top].alpha = alpha; |
dev->stack[dev->top].blendmode = dev->blendmode; |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Group Begin\n"); |
#endif |
dev->top++; |
dev->scissor = bbox; |
dev->dest = dest; |
dev->shape = shape; |
dev->blendmode = blendmode | (isolated ? FZ_BLEND_ISOLATED : 0) | (knockout ? FZ_BLEND_KNOCKOUT : 0); |
} |
static void |
fz_draw_end_group(void *user) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *group = dev->dest; |
fz_pixmap *shape = dev->shape; |
int blendmode; |
int isolated; |
float alpha; |
if (dev->top > 0) |
{ |
dev->top--; |
alpha = dev->stack[dev->top].alpha; |
blendmode = dev->blendmode & FZ_BLEND_MODEMASK; |
isolated = dev->blendmode & FZ_BLEND_ISOLATED; |
dev->blendmode = dev->stack[dev->top].blendmode; |
dev->shape = dev->stack[dev->top].shape; |
dev->dest = dev->stack[dev->top].dest; |
dev->scissor = dev->stack[dev->top].scissor; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, ""); |
fz_dump_blend(group, "Blending "); |
if (shape) |
fz_dump_blend(shape, "/"); |
fz_dump_blend(dev->dest, " onto "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
if (alpha != 1.0f) |
printf(" (alpha %g)", alpha); |
if (blendmode != 0) |
printf(" (blend %d)", blendmode); |
if (isolated != 0) |
printf(" (isolated)"); |
if (blendmode & FZ_BLEND_KNOCKOUT) |
printf(" (knockout)"); |
#endif |
if ((blendmode == 0) && (shape == NULL)) |
fz_paint_pixmap(dev->dest, group, alpha * 255); |
else |
fz_blend_pixmap(dev->dest, group, alpha * 255, blendmode, isolated, shape); |
fz_drop_pixmap(group); |
if (shape != dev->shape) |
{ |
if (dev->shape) |
{ |
fz_paint_pixmap(dev->shape, shape, alpha * 255); |
} |
fz_drop_pixmap(shape); |
} |
#ifdef DUMP_GROUP_BLENDS |
fz_dump_blend(dev->dest, " to get "); |
if (dev->shape) |
fz_dump_blend(dev->shape, "/"); |
printf("\n"); |
#endif |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_end(dev); |
} |
static void |
fz_draw_begin_tile(void *user, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm) |
{ |
fz_draw_device *dev = user; |
fz_colorspace *model = dev->dest->colorspace; |
fz_pixmap *dest; |
fz_bbox bbox; |
/* area, view, xstep, ystep are in pattern space */ |
/* ctm maps from pattern space to device space */ |
if (dev->top == STACK_SIZE) |
{ |
fz_warn("assert: too many buffers on stack"); |
return; |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
bbox = fz_round_rect(fz_transform_rect(ctm, view)); |
dest = fz_new_pixmap_with_rect(model, bbox); |
/* FIXME: See note #1 */ |
fz_clear_pixmap(dest); |
dev->stack[dev->top].scissor = dev->scissor; |
dev->stack[dev->top].dest = dev->dest; |
dev->stack[dev->top].shape = dev->shape; |
/* FIXME: See note #1 */ |
dev->stack[dev->top].blendmode = dev->blendmode | FZ_BLEND_ISOLATED; |
dev->stack[dev->top].xstep = xstep; |
dev->stack[dev->top].ystep = ystep; |
dev->stack[dev->top].area = area; |
dev->stack[dev->top].ctm = ctm; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Tile begin\n"); |
#endif |
dev->top++; |
dev->scissor = bbox; |
dev->dest = dest; |
} |
static void |
fz_draw_end_tile(void *user) |
{ |
fz_draw_device *dev = user; |
fz_pixmap *tile = dev->dest; |
float xstep, ystep; |
fz_matrix ctm, ttm; |
fz_rect area; |
int x0, y0, x1, y1, x, y; |
if (dev->top > 0) |
{ |
dev->top--; |
#ifdef DUMP_GROUP_BLENDS |
dump_spaces(dev->top, "Tile end\n"); |
#endif |
xstep = dev->stack[dev->top].xstep; |
ystep = dev->stack[dev->top].ystep; |
area = dev->stack[dev->top].area; |
ctm = dev->stack[dev->top].ctm; |
dev->scissor = dev->stack[dev->top].scissor; |
dev->dest = dev->stack[dev->top].dest; |
dev->blendmode = dev->stack[dev->top].blendmode; |
x0 = floorf(area.x0 / xstep); |
y0 = floorf(area.y0 / ystep); |
x1 = ceilf(area.x1 / xstep); |
y1 = ceilf(area.y1 / ystep); |
ctm.e = tile->x; |
ctm.f = tile->y; |
for (y = y0; y < y1; y++) |
{ |
for (x = x0; x < x1; x++) |
{ |
ttm = fz_concat(fz_translate(x * xstep, y * ystep), ctm); |
tile->x = ttm.e; |
tile->y = ttm.f; |
fz_paint_pixmap_with_rect(dev->dest, tile, 255, dev->scissor); |
} |
} |
fz_drop_pixmap(tile); |
} |
if (dev->blendmode & FZ_BLEND_KNOCKOUT) |
fz_knockout_begin(dev); |
} |
static void |
fz_draw_free_user(void *user) |
{ |
fz_draw_device *dev = user; |
/* TODO: pop and free the stacks */ |
if (dev->top > 0) |
fz_warn("items left on stack in draw device: %d", dev->top); |
fz_free_gel(dev->gel); |
fz_free(dev); |
} |
fz_device * |
fz_new_draw_device(fz_glyph_cache *cache, fz_pixmap *dest) |
{ |
fz_device *dev; |
fz_draw_device *ddev = fz_malloc(sizeof(fz_draw_device)); |
ddev->cache = cache; |
ddev->gel = fz_new_gel(); |
ddev->dest = dest; |
ddev->shape = NULL; |
ddev->top = 0; |
ddev->blendmode = 0; |
ddev->flags = 0; |
ddev->scissor.x0 = dest->x; |
ddev->scissor.y0 = dest->y; |
ddev->scissor.x1 = dest->x + dest->w; |
ddev->scissor.y1 = dest->y + dest->h; |
dev = fz_new_device(ddev); |
dev->free_user = fz_draw_free_user; |
dev->fill_path = fz_draw_fill_path; |
dev->stroke_path = fz_draw_stroke_path; |
dev->clip_path = fz_draw_clip_path; |
dev->clip_stroke_path = fz_draw_clip_stroke_path; |
dev->fill_text = fz_draw_fill_text; |
dev->stroke_text = fz_draw_stroke_text; |
dev->clip_text = fz_draw_clip_text; |
dev->clip_stroke_text = fz_draw_clip_stroke_text; |
dev->ignore_text = fz_draw_ignore_text; |
dev->fill_image_mask = fz_draw_fill_image_mask; |
dev->clip_image_mask = fz_draw_clip_image_mask; |
dev->fill_image = fz_draw_fill_image; |
dev->fill_shade = fz_draw_fill_shade; |
dev->pop_clip = fz_draw_pop_clip; |
dev->begin_mask = fz_draw_begin_mask; |
dev->end_mask = fz_draw_end_mask; |
dev->begin_group = fz_draw_begin_group; |
dev->end_group = fz_draw_end_group; |
dev->begin_tile = fz_draw_begin_tile; |
dev->end_tile = fz_draw_end_tile; |
return dev; |
} |
fz_device * |
fz_new_draw_device_type3(fz_glyph_cache *cache, fz_pixmap *dest) |
{ |
fz_device *dev = fz_new_draw_device(cache, dest); |
fz_draw_device *ddev = dev->user; |
ddev->flags |= FZ_DRAWDEV_FLAGS_TYPE3; |
return dev; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_edge.c |
---|
0,0 → 1,735 |
#include "fitz.h" |
#define BBOX_MIN -(1<<20) |
#define BBOX_MAX (1<<20) |
/* divide and floor towards -inf */ |
static inline int fz_idiv(int a, int b) |
{ |
return a < 0 ? (a - b + 1) / b : a / b; |
} |
/* If AA_BITS is defined, then we assume constant N bits of antialiasing. We |
* will attempt to provide at least that number of bits of accuracy in the |
* antialiasing (to a maximum of 8). If it is defined to be 0 then no |
* antialiasing is done. If it is undefined to we will leave the antialiasing |
* accuracy as a run time choice. |
*/ |
#ifndef AA_BITS |
#define AA_SCALE(x) ((x * fz_aa_scale) >> 8) |
static int fz_aa_hscale = 17; |
static int fz_aa_vscale = 15; |
static int fz_aa_scale = 256; |
static int fz_aa_level = 8; |
#elif AA_BITS > 6 |
#define AA_SCALE(x) (x) |
#define fz_aa_hscale 17 |
#define fz_aa_vscale 15 |
#define fz_aa_level 8 |
#elif AA_BITS > 4 |
#define AA_SCALE(x) ((x * 255) >> 6) |
#define fz_aa_hscale 8 |
#define fz_aa_vscale 8 |
#define fz_aa_level 6 |
#elif AA_BITS > 2 |
#define AA_SCALE(x) (x * 17) |
#define fz_aa_hscale 5 |
#define fz_aa_vscale 3 |
#define fz_aa_level 4 |
#elif AA_BITS > 0 |
#define AA_SCALE(x) ((x * 255) >> 2) |
#define fz_aa_hscale 2 |
#define fz_aa_vscale 2 |
#define fz_aa_level 2 |
#else |
#define AA_SCALE(x) (x * 255) |
#define fz_aa_hscale 1 |
#define fz_aa_vscale 1 |
#define fz_aa_level 0 |
#endif |
int |
fz_get_aa_level(void) |
{ |
return fz_aa_level; |
} |
void |
fz_set_aa_level(int level) |
{ |
#ifdef AA_BITS |
fz_warn("anti-aliasing was compiled with a fixed precision of %d bits", fz_aa_level); |
#else |
if (level > 6) |
{ |
fz_aa_hscale = 17; |
fz_aa_vscale = 15; |
fz_aa_level = 8; |
} |
else if (level > 4) |
{ |
fz_aa_hscale = 8; |
fz_aa_vscale = 8; |
fz_aa_level = 6; |
} |
else if (level > 2) |
{ |
fz_aa_hscale = 5; |
fz_aa_vscale = 3; |
fz_aa_level = 4; |
} |
else if (level > 0) |
{ |
fz_aa_hscale = 2; |
fz_aa_vscale = 2; |
fz_aa_level = 2; |
} |
else |
{ |
fz_aa_hscale = 1; |
fz_aa_vscale = 1; |
fz_aa_level = 0; |
} |
fz_aa_scale = 0xFF00 / (fz_aa_hscale * fz_aa_vscale); |
#endif |
} |
/* |
* Global Edge List -- list of straight path segments for scan conversion |
* |
* Stepping along the edges is with bresenham's line algorithm. |
* |
* See Mike Abrash -- Graphics Programming Black Book (notably chapter 40) |
*/ |
typedef struct fz_edge_s fz_edge; |
struct fz_edge_s |
{ |
int x, e, h, y; |
int adj_up, adj_down; |
int xmove; |
int xdir, ydir; /* -1 or +1 */ |
}; |
struct fz_gel_s |
{ |
fz_bbox clip; |
fz_bbox bbox; |
int cap, len; |
fz_edge *edges; |
int acap, alen; |
fz_edge **active; |
}; |
fz_gel * |
fz_new_gel(void) |
{ |
fz_gel *gel; |
gel = fz_malloc(sizeof(fz_gel)); |
gel->cap = 512; |
gel->len = 0; |
gel->edges = fz_calloc(gel->cap, sizeof(fz_edge)); |
gel->clip.x0 = gel->clip.y0 = BBOX_MAX; |
gel->clip.x1 = gel->clip.y1 = BBOX_MIN; |
gel->bbox.x0 = gel->bbox.y0 = BBOX_MAX; |
gel->bbox.x1 = gel->bbox.y1 = BBOX_MIN; |
gel->acap = 64; |
gel->alen = 0; |
gel->active = fz_calloc(gel->acap, sizeof(fz_edge*)); |
return gel; |
} |
void |
fz_reset_gel(fz_gel *gel, fz_bbox clip) |
{ |
if (fz_is_infinite_rect(clip)) |
{ |
gel->clip.x0 = gel->clip.y0 = BBOX_MAX; |
gel->clip.x1 = gel->clip.y1 = BBOX_MIN; |
} |
else { |
gel->clip.x0 = clip.x0 * fz_aa_hscale; |
gel->clip.x1 = clip.x1 * fz_aa_hscale; |
gel->clip.y0 = clip.y0 * fz_aa_vscale; |
gel->clip.y1 = clip.y1 * fz_aa_vscale; |
} |
gel->bbox.x0 = gel->bbox.y0 = BBOX_MAX; |
gel->bbox.x1 = gel->bbox.y1 = BBOX_MIN; |
gel->len = 0; |
} |
void |
fz_free_gel(fz_gel *gel) |
{ |
fz_free(gel->active); |
fz_free(gel->edges); |
fz_free(gel); |
} |
fz_bbox |
fz_bound_gel(fz_gel *gel) |
{ |
fz_bbox bbox; |
if (gel->len == 0) |
return fz_empty_bbox; |
bbox.x0 = fz_idiv(gel->bbox.x0, fz_aa_hscale); |
bbox.y0 = fz_idiv(gel->bbox.y0, fz_aa_vscale); |
bbox.x1 = fz_idiv(gel->bbox.x1, fz_aa_hscale) + 1; |
bbox.y1 = fz_idiv(gel->bbox.y1, fz_aa_vscale) + 1; |
return bbox; |
} |
enum { INSIDE, OUTSIDE, LEAVE, ENTER }; |
#define clip_lerp_y(v,m,x0,y0,x1,y1,t) clip_lerp_x(v,m,y0,x0,y1,x1,t) |
static int |
clip_lerp_x(int val, int m, int x0, int y0, int x1, int y1, int *out) |
{ |
int v0out = m ? x0 > val : x0 < val; |
int v1out = m ? x1 > val : x1 < val; |
if (v0out + v1out == 0) |
return INSIDE; |
if (v0out + v1out == 2) |
return OUTSIDE; |
if (v1out) |
{ |
*out = y0 + (y1 - y0) * (val - x0) / (x1 - x0); |
return LEAVE; |
} |
else |
{ |
*out = y1 + (y0 - y1) * (val - x1) / (x0 - x1); |
return ENTER; |
} |
} |
static void |
fz_insert_gel_raw(fz_gel *gel, int x0, int y0, int x1, int y1) |
{ |
fz_edge *edge; |
int dx, dy; |
int winding; |
int width; |
int tmp; |
if (y0 == y1) |
return; |
if (y0 > y1) { |
winding = -1; |
tmp = x0; x0 = x1; x1 = tmp; |
tmp = y0; y0 = y1; y1 = tmp; |
} |
else |
winding = 1; |
if (x0 < gel->bbox.x0) gel->bbox.x0 = x0; |
if (x0 > gel->bbox.x1) gel->bbox.x1 = x0; |
if (x1 < gel->bbox.x0) gel->bbox.x0 = x1; |
if (x1 > gel->bbox.x1) gel->bbox.x1 = x1; |
if (y0 < gel->bbox.y0) gel->bbox.y0 = y0; |
if (y1 > gel->bbox.y1) gel->bbox.y1 = y1; |
if (gel->len + 1 == gel->cap) { |
gel->cap = gel->cap + 512; |
gel->edges = fz_realloc(gel->edges, gel->cap, sizeof(fz_edge)); |
} |
edge = &gel->edges[gel->len++]; |
dy = y1 - y0; |
dx = x1 - x0; |
width = ABS(dx); |
edge->xdir = dx > 0 ? 1 : -1; |
edge->ydir = winding; |
edge->x = x0; |
edge->y = y0; |
edge->h = dy; |
edge->adj_down = dy; |
/* initial error term going l->r and r->l */ |
if (dx >= 0) |
edge->e = 0; |
else |
edge->e = -dy + 1; |
/* y-major edge */ |
if (dy >= width) { |
edge->xmove = 0; |
edge->adj_up = width; |
} |
/* x-major edge */ |
else { |
edge->xmove = (width / dy) * edge->xdir; |
edge->adj_up = width % dy; |
} |
} |
void |
fz_insert_gel(fz_gel *gel, float fx0, float fy0, float fx1, float fy1) |
{ |
int x0, y0, x1, y1; |
int d, v; |
fx0 = floorf(fx0 * fz_aa_hscale); |
fx1 = floorf(fx1 * fz_aa_hscale); |
fy0 = floorf(fy0 * fz_aa_vscale); |
fy1 = floorf(fy1 * fz_aa_vscale); |
x0 = CLAMP(fx0, BBOX_MIN, BBOX_MAX); |
y0 = CLAMP(fy0, BBOX_MIN, BBOX_MAX); |
x1 = CLAMP(fx1, BBOX_MIN, BBOX_MAX); |
y1 = CLAMP(fy1, BBOX_MIN, BBOX_MAX); |
d = clip_lerp_y(gel->clip.y0, 0, x0, y0, x1, y1, &v); |
if (d == OUTSIDE) return; |
if (d == LEAVE) { y1 = gel->clip.y0; x1 = v; } |
if (d == ENTER) { y0 = gel->clip.y0; x0 = v; } |
d = clip_lerp_y(gel->clip.y1, 1, x0, y0, x1, y1, &v); |
if (d == OUTSIDE) return; |
if (d == LEAVE) { y1 = gel->clip.y1; x1 = v; } |
if (d == ENTER) { y0 = gel->clip.y1; x0 = v; } |
d = clip_lerp_x(gel->clip.x0, 0, x0, y0, x1, y1, &v); |
if (d == OUTSIDE) { |
x0 = x1 = gel->clip.x0; |
} |
if (d == LEAVE) { |
fz_insert_gel_raw(gel, gel->clip.x0, v, gel->clip.x0, y1); |
x1 = gel->clip.x0; |
y1 = v; |
} |
if (d == ENTER) { |
fz_insert_gel_raw(gel, gel->clip.x0, y0, gel->clip.x0, v); |
x0 = gel->clip.x0; |
y0 = v; |
} |
d = clip_lerp_x(gel->clip.x1, 1, x0, y0, x1, y1, &v); |
if (d == OUTSIDE) { |
x0 = x1 = gel->clip.x1; |
} |
if (d == LEAVE) { |
fz_insert_gel_raw(gel, gel->clip.x1, v, gel->clip.x1, y1); |
x1 = gel->clip.x1; |
y1 = v; |
} |
if (d == ENTER) { |
fz_insert_gel_raw(gel, gel->clip.x1, y0, gel->clip.x1, v); |
x0 = gel->clip.x1; |
y0 = v; |
} |
fz_insert_gel_raw(gel, x0, y0, x1, y1); |
} |
void |
fz_sort_gel(fz_gel *gel) |
{ |
fz_edge *a = gel->edges; |
int n = gel->len; |
int h, i, k; |
fz_edge t; |
h = 1; |
if (n < 14) { |
h = 1; |
} |
else { |
while (h < n) |
h = 3 * h + 1; |
h /= 3; |
h /= 3; |
} |
while (h > 0) |
{ |
for (i = 0; i < n; i++) { |
t = a[i]; |
k = i - h; |
/* TODO: sort on y major, x minor */ |
while (k >= 0 && a[k].y > t.y) { |
a[k + h] = a[k]; |
k -= h; |
} |
a[k + h] = t; |
} |
h /= 3; |
} |
} |
int |
fz_is_rect_gel(fz_gel *gel) |
{ |
/* a rectangular path is converted into two vertical edges of identical height */ |
if (gel->len == 2) |
{ |
fz_edge *a = gel->edges + 0; |
fz_edge *b = gel->edges + 1; |
return a->y == b->y && a->h == b->h && |
a->xmove == 0 && a->adj_up == 0 && |
b->xmove == 0 && b->adj_up == 0; |
} |
return 0; |
} |
/* |
* Active Edge List -- keep track of active edges while sweeping |
*/ |
static void |
sort_active(fz_edge **a, int n) |
{ |
int h, i, k; |
fz_edge *t; |
h = 1; |
if (n < 14) { |
h = 1; |
} |
else { |
while (h < n) |
h = 3 * h + 1; |
h /= 3; |
h /= 3; |
} |
while (h > 0) |
{ |
for (i = 0; i < n; i++) { |
t = a[i]; |
k = i - h; |
while (k >= 0 && a[k]->x > t->x) { |
a[k + h] = a[k]; |
k -= h; |
} |
a[k + h] = t; |
} |
h /= 3; |
} |
} |
static void |
insert_active(fz_gel *gel, int y, int *e) |
{ |
/* insert edges that start here */ |
while (*e < gel->len && gel->edges[*e].y == y) { |
if (gel->alen + 1 == gel->acap) { |
int newcap = gel->acap + 64; |
fz_edge **newactive = fz_realloc(gel->active, newcap, sizeof(fz_edge*)); |
gel->active = newactive; |
gel->acap = newcap; |
} |
gel->active[gel->alen++] = &gel->edges[(*e)++]; |
} |
/* shell-sort the edges by increasing x */ |
sort_active(gel->active, gel->alen); |
} |
static void |
advance_active(fz_gel *gel) |
{ |
fz_edge *edge; |
int i = 0; |
while (i < gel->alen) |
{ |
edge = gel->active[i]; |
edge->h --; |
/* terminator! */ |
if (edge->h == 0) { |
gel->active[i] = gel->active[--gel->alen]; |
} |
else { |
edge->x += edge->xmove; |
edge->e += edge->adj_up; |
if (edge->e > 0) { |
edge->x += edge->xdir; |
edge->e -= edge->adj_down; |
} |
i ++; |
} |
} |
} |
/* |
* Anti-aliased scan conversion. |
*/ |
static inline void add_span_aa(int *list, int x0, int x1, int xofs) |
{ |
int x0pix, x0sub; |
int x1pix, x1sub; |
if (x0 == x1) |
return; |
/* x between 0 and width of bbox */ |
x0 -= xofs; |
x1 -= xofs; |
x0pix = x0 / fz_aa_hscale; |
x0sub = x0 % fz_aa_hscale; |
x1pix = x1 / fz_aa_hscale; |
x1sub = x1 % fz_aa_hscale; |
if (x0pix == x1pix) |
{ |
list[x0pix] += x1sub - x0sub; |
list[x0pix+1] += x0sub - x1sub; |
} |
else |
{ |
list[x0pix] += fz_aa_hscale - x0sub; |
list[x0pix+1] += x0sub; |
list[x1pix] += x1sub - fz_aa_hscale; |
list[x1pix+1] += -x1sub; |
} |
} |
static inline void non_zero_winding_aa(fz_gel *gel, int *list, int xofs) |
{ |
int winding = 0; |
int x = 0; |
int i; |
for (i = 0; i < gel->alen; i++) |
{ |
if (!winding && (winding + gel->active[i]->ydir)) |
x = gel->active[i]->x; |
if (winding && !(winding + gel->active[i]->ydir)) |
add_span_aa(list, x, gel->active[i]->x, xofs); |
winding += gel->active[i]->ydir; |
} |
} |
static inline void even_odd_aa(fz_gel *gel, int *list, int xofs) |
{ |
int even = 0; |
int x = 0; |
int i; |
for (i = 0; i < gel->alen; i++) |
{ |
if (!even) |
x = gel->active[i]->x; |
else |
add_span_aa(list, x, gel->active[i]->x, xofs); |
even = !even; |
} |
} |
static inline void undelta_aa(unsigned char * restrict out, int * restrict in, int n) |
{ |
int d = 0; |
while (n--) |
{ |
d += *in++; |
*out++ = AA_SCALE(d); |
} |
} |
static inline void blit_aa(fz_pixmap *dst, int x, int y, |
unsigned char *mp, int w, unsigned char *color) |
{ |
unsigned char *dp; |
dp = dst->samples + ( (y - dst->y) * dst->w + (x - dst->x) ) * dst->n; |
if (color) |
fz_paint_span_with_color(dp, mp, dst->n, w, color); |
else |
fz_paint_span(dp, mp, 1, w, 255); |
} |
static void |
fz_scan_convert_aa(fz_gel *gel, int eofill, fz_bbox clip, |
fz_pixmap *dst, unsigned char *color) |
{ |
unsigned char *alphas; |
int *deltas; |
int y, e; |
int yd, yc; |
int xmin = fz_idiv(gel->bbox.x0, fz_aa_hscale); |
int xmax = fz_idiv(gel->bbox.x1, fz_aa_hscale) + 1; |
int xofs = xmin * fz_aa_hscale; |
int skipx = clip.x0 - xmin; |
int clipn = clip.x1 - clip.x0; |
if (gel->len == 0) |
return; |
assert(clip.x0 >= xmin); |
assert(clip.x1 <= xmax); |
alphas = fz_malloc(xmax - xmin + 1); |
deltas = fz_malloc((xmax - xmin + 1) * sizeof(int)); |
memset(deltas, 0, (xmax - xmin + 1) * sizeof(int)); |
e = 0; |
y = gel->edges[0].y; |
yc = fz_idiv(y, fz_aa_vscale); |
yd = yc; |
while (gel->alen > 0 || e < gel->len) |
{ |
yc = fz_idiv(y, fz_aa_vscale); |
if (yc != yd) |
{ |
if (yd >= clip.y0 && yd < clip.y1) |
{ |
undelta_aa(alphas, deltas, skipx + clipn); |
blit_aa(dst, xmin + skipx, yd, alphas + skipx, clipn, color); |
memset(deltas, 0, (skipx + clipn) * sizeof(int)); |
} |
} |
yd = yc; |
insert_active(gel, y, &e); |
if (yd >= clip.y0 && yd < clip.y1) |
{ |
if (eofill) |
even_odd_aa(gel, deltas, xofs); |
else |
non_zero_winding_aa(gel, deltas, xofs); |
} |
advance_active(gel); |
if (gel->alen > 0) |
y ++; |
else if (e < gel->len) |
y = gel->edges[e].y; |
} |
if (yd >= clip.y0 && yd < clip.y1) |
{ |
undelta_aa(alphas, deltas, skipx + clipn); |
blit_aa(dst, xmin + skipx, yd, alphas + skipx, clipn, color); |
} |
fz_free(deltas); |
fz_free(alphas); |
} |
/* |
* Sharp (not anti-aliased) scan conversion |
*/ |
static inline void blit_sharp(int x0, int x1, int y, |
fz_bbox clip, fz_pixmap *dst, unsigned char *color) |
{ |
unsigned char *dp; |
x0 = CLAMP(x0, dst->x, dst->x + dst->w); |
x1 = CLAMP(x1, dst->x, dst->x + dst->w); |
if (x0 < x1) |
{ |
dp = dst->samples + ( (y - dst->y) * dst->w + (x0 - dst->x) ) * dst->n; |
if (color) |
fz_paint_solid_color(dp, dst->n, x1 - x0, color); |
else |
fz_paint_solid_alpha(dp, x1 - x0, 255); |
} |
} |
static inline void non_zero_winding_sharp(fz_gel *gel, int y, |
fz_bbox clip, fz_pixmap *dst, unsigned char *color) |
{ |
int winding = 0; |
int x = 0; |
int i; |
for (i = 0; i < gel->alen; i++) |
{ |
if (!winding && (winding + gel->active[i]->ydir)) |
x = gel->active[i]->x; |
if (winding && !(winding + gel->active[i]->ydir)) |
blit_sharp(x, gel->active[i]->x, y, clip, dst, color); |
winding += gel->active[i]->ydir; |
} |
} |
static inline void even_odd_sharp(fz_gel *gel, int y, |
fz_bbox clip, fz_pixmap *dst, unsigned char *color) |
{ |
int even = 0; |
int x = 0; |
int i; |
for (i = 0; i < gel->alen; i++) |
{ |
if (!even) |
x = gel->active[i]->x; |
else |
blit_sharp(x, gel->active[i]->x, y, clip, dst, color); |
even = !even; |
} |
} |
static void |
fz_scan_convert_sharp(fz_gel *gel, int eofill, fz_bbox clip, |
fz_pixmap *dst, unsigned char *color) |
{ |
int e = 0; |
int y = gel->edges[0].y; |
while (gel->alen > 0 || e < gel->len) |
{ |
insert_active(gel, y, &e); |
if (y >= clip.y0 && y < clip.y1) |
{ |
if (eofill) |
even_odd_sharp(gel, y, clip, dst, color); |
else |
non_zero_winding_sharp(gel, y, clip, dst, color); |
} |
advance_active(gel); |
if (gel->alen > 0) |
y ++; |
else if (e < gel->len) |
y = gel->edges[e].y; |
} |
} |
void |
fz_scan_convert(fz_gel *gel, int eofill, fz_bbox clip, |
fz_pixmap *dst, unsigned char *color) |
{ |
if (fz_aa_level > 0) |
fz_scan_convert_aa(gel, eofill, clip, dst, color); |
else |
fz_scan_convert_sharp(gel, eofill, clip, dst, color); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_glyph.c |
---|
0,0 → 1,134 |
#include "fitz.h" |
#define MAX_FONT_SIZE 1000 |
#define MAX_GLYPH_SIZE 256 |
#define MAX_CACHE_SIZE (1024*1024) |
typedef struct fz_glyph_key_s fz_glyph_key; |
struct fz_glyph_cache_s |
{ |
fz_hash_table *hash; |
int total; |
}; |
struct fz_glyph_key_s |
{ |
fz_font *font; |
int a, b; |
int c, d; |
unsigned short gid; |
unsigned char e, f; |
}; |
fz_glyph_cache * |
fz_new_glyph_cache(void) |
{ |
fz_glyph_cache *cache; |
cache = fz_malloc(sizeof(fz_glyph_cache)); |
cache->hash = fz_new_hash_table(509, sizeof(fz_glyph_key)); |
cache->total = 0; |
return cache; |
} |
static void |
fz_evict_glyph_cache(fz_glyph_cache *cache) |
{ |
fz_glyph_key *key; |
fz_pixmap *pixmap; |
int i; |
for (i = 0; i < fz_hash_len(cache->hash); i++) |
{ |
key = fz_hash_get_key(cache->hash, i); |
if (key->font) |
fz_drop_font(key->font); |
pixmap = fz_hash_get_val(cache->hash, i); |
if (pixmap) |
fz_drop_pixmap(pixmap); |
} |
cache->total = 0; |
fz_empty_hash(cache->hash); |
} |
void |
fz_free_glyph_cache(fz_glyph_cache *cache) |
{ |
fz_evict_glyph_cache(cache); |
fz_free_hash(cache->hash); |
fz_free(cache); |
} |
fz_pixmap * |
fz_render_stroked_glyph(fz_glyph_cache *cache, fz_font *font, int gid, fz_matrix trm, fz_matrix ctm, fz_stroke_state *stroke) |
{ |
if (font->ft_face) |
return fz_render_ft_stroked_glyph(font, gid, trm, ctm, stroke); |
return fz_render_glyph(cache, font, gid, trm, NULL); |
} |
fz_pixmap * |
fz_render_glyph(fz_glyph_cache *cache, fz_font *font, int gid, fz_matrix ctm, fz_colorspace *model) |
{ |
fz_glyph_key key; |
fz_pixmap *val; |
float size = fz_matrix_expansion(ctm); |
if (size > MAX_FONT_SIZE) |
{ |
/* TODO: this case should be handled by rendering glyph as a path fill */ |
fz_warn("font size too large (%g), not rendering glyph", size); |
return NULL; |
} |
memset(&key, 0, sizeof key); |
key.font = font; |
key.gid = gid; |
key.a = ctm.a * 65536; |
key.b = ctm.b * 65536; |
key.c = ctm.c * 65536; |
key.d = ctm.d * 65536; |
key.e = (ctm.e - floorf(ctm.e)) * 256; |
key.f = (ctm.f - floorf(ctm.f)) * 256; |
val = fz_hash_find(cache->hash, &key); |
if (val) |
return fz_keep_pixmap(val); |
ctm.e = floorf(ctm.e) + key.e / 256.0f; |
ctm.f = floorf(ctm.f) + key.f / 256.0f; |
if (font->ft_face) |
{ |
val = fz_render_ft_glyph(font, gid, ctm); |
} |
else if (font->t3procs) |
{ |
val = fz_render_t3_glyph(font, gid, ctm, model); |
} |
else |
{ |
fz_warn("assert: uninitialized font structure"); |
return NULL; |
} |
if (val) |
{ |
if (val->w < MAX_GLYPH_SIZE && val->h < MAX_GLYPH_SIZE) |
{ |
if (cache->total + val->w * val->h > MAX_CACHE_SIZE) |
fz_evict_glyph_cache(cache); |
fz_keep_font(key.font); |
fz_hash_insert(cache->hash, &key, val); |
cache->total += val->w * val->h; |
return fz_keep_pixmap(val); |
} |
return val; |
} |
return NULL; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_mesh.c |
---|
0,0 → 1,574 |
#include "fitz.h" |
/* |
* polygon clipping |
*/ |
enum { IN, OUT, ENTER, LEAVE }; |
enum { MAXV = 3 + 4 }; |
enum { MAXN = 2 + FZ_MAX_COLORS }; |
static int clipx(float val, int ismax, float *v1, float *v2, int n) |
{ |
float t; |
int i; |
int v1o = ismax ? v1[0] > val : v1[0] < val; |
int v2o = ismax ? v2[0] > val : v2[0] < val; |
if (v1o + v2o == 0) |
return IN; |
if (v1o + v2o == 2) |
return OUT; |
if (v2o) |
{ |
t = (val - v1[0]) / (v2[0] - v1[0]); |
v2[0] = val; |
v2[1] = v1[1] + t * (v2[1] - v1[1]); |
for (i = 2; i < n; i++) |
v2[i] = v1[i] + t * (v2[i] - v1[i]); |
return LEAVE; |
} |
else |
{ |
t = (val - v2[0]) / (v1[0] - v2[0]); |
v1[0] = val; |
v1[1] = v2[1] + t * (v1[1] - v2[1]); |
for (i = 2; i < n; i++) |
v1[i] = v2[i] + t * (v1[i] - v2[i]); |
return ENTER; |
} |
} |
static int clipy(float val, int ismax, float *v1, float *v2, int n) |
{ |
float t; |
int i; |
int v1o = ismax ? v1[1] > val : v1[1] < val; |
int v2o = ismax ? v2[1] > val : v2[1] < val; |
if (v1o + v2o == 0) |
return IN; |
if (v1o + v2o == 2) |
return OUT; |
if (v2o) |
{ |
t = (val - v1[1]) / (v2[1] - v1[1]); |
v2[0] = v1[0] + t * (v2[0] - v1[0]); |
v2[1] = val; |
for (i = 2; i < n; i++) |
v2[i] = v1[i] + t * (v2[i] - v1[i]); |
return LEAVE; |
} |
else |
{ |
t = (val - v2[1]) / (v1[1] - v2[1]); |
v1[0] = v2[0] + t * (v1[0] - v2[0]); |
v1[1] = val; |
for (i = 2; i < n; i++) |
v1[i] = v2[i] + t * (v1[i] - v2[i]); |
return ENTER; |
} |
} |
static inline void copy_vert(float *dst, float *src, int n) |
{ |
while (n--) |
*dst++ = *src++; |
} |
static int clip_poly(float src[MAXV][MAXN], |
float dst[MAXV][MAXN], int len, int n, |
float val, int isy, int ismax) |
{ |
float cv1[MAXN]; |
float cv2[MAXN]; |
int v1, v2, cp; |
int r; |
v1 = len - 1; |
cp = 0; |
for (v2 = 0; v2 < len; v2++) |
{ |
copy_vert(cv1, src[v1], n); |
copy_vert(cv2, src[v2], n); |
if (isy) |
r = clipy(val, ismax, cv1, cv2, n); |
else |
r = clipx(val, ismax, cv1, cv2, n); |
switch (r) |
{ |
case IN: |
copy_vert(dst[cp++], cv2, n); |
break; |
case OUT: |
break; |
case LEAVE: |
copy_vert(dst[cp++], cv2, n); |
break; |
case ENTER: |
copy_vert(dst[cp++], cv1, n); |
copy_vert(dst[cp++], cv2, n); |
break; |
} |
v1 = v2; |
} |
return cp; |
} |
/* |
* gouraud shaded polygon scan conversion |
*/ |
static void paint_scan(fz_pixmap *pix, int y, int x1, int x2, int *v1, int *v2, int n) |
{ |
unsigned char *p = pix->samples + ((y - pix->y) * pix->w + (x1 - pix->x)) * pix->n; |
int v[FZ_MAX_COLORS]; |
int dv[FZ_MAX_COLORS]; |
int w = x2 - x1; |
int k; |
assert(w >= 0); |
assert(y >= pix->y); |
assert(y < pix->y + pix->h); |
assert(x1 >= pix->x); |
assert(x2 <= pix->x + pix->w); |
if (w == 0) |
return; |
for (k = 0; k < n; k++) |
{ |
v[k] = v1[k]; |
dv[k] = (v2[k] - v1[k]) / w; |
} |
while (w--) |
{ |
for (k = 0; k < n; k++) |
{ |
*p++ = v[k] >> 16; |
v[k] += dv[k]; |
} |
*p++ = 255; |
} |
} |
static int find_next(int gel[MAXV][MAXN], int len, int a, int *s, int *e, int d) |
{ |
int b; |
while (1) |
{ |
b = a + d; |
if (b == len) |
b = 0; |
if (b == -1) |
b = len - 1; |
if (gel[b][1] == gel[a][1]) |
{ |
a = b; |
continue; |
} |
if (gel[b][1] > gel[a][1]) |
{ |
*s = a; |
*e = b; |
return 0; |
} |
return 1; |
} |
} |
static void load_edge(int gel[MAXV][MAXN], int s, int e, int *ael, int *del, int n) |
{ |
int swp, k, dy; |
if (gel[s][1] > gel[e][1]) |
{ |
swp = s; s = e; e = swp; |
} |
dy = gel[e][1] - gel[s][1]; |
ael[0] = gel[s][0]; |
del[0] = (gel[e][0] - gel[s][0]) / dy; |
for (k = 2; k < n; k++) |
{ |
ael[k] = gel[s][k]; |
del[k] = (gel[e][k] - gel[s][k]) / dy; |
} |
} |
static inline void step_edge(int *ael, int *del, int n) |
{ |
int k; |
ael[0] += del[0]; |
for (k = 2; k < n; k++) |
ael[k] += del[k]; |
} |
static void |
fz_paint_triangle(fz_pixmap *pix, float *av, float *bv, float *cv, int n, fz_bbox bbox) |
{ |
float poly[MAXV][MAXN]; |
float temp[MAXV][MAXN]; |
float cx0 = bbox.x0; |
float cy0 = bbox.y0; |
float cx1 = bbox.x1; |
float cy1 = bbox.y1; |
int gel[MAXV][MAXN]; |
int ael[2][MAXN]; |
int del[2][MAXN]; |
int y, s0, s1, e0, e1; |
int top, bot, len; |
int i, k; |
copy_vert(poly[0], av, n); |
copy_vert(poly[1], bv, n); |
copy_vert(poly[2], cv, n); |
len = clip_poly(poly, temp, 3, n, cx0, 0, 0); |
len = clip_poly(temp, poly, len, n, cx1, 0, 1); |
len = clip_poly(poly, temp, len, n, cy0, 1, 0); |
len = clip_poly(temp, poly, len, n, cy1, 1, 1); |
if (len < 3) |
return; |
for (i = 0; i < len; i++) |
{ |
gel[i][0] = floorf(poly[i][0] + 0.5f) * 65536; /* trunc and fix */ |
gel[i][1] = floorf(poly[i][1] + 0.5f); /* y is not fixpoint */ |
for (k = 2; k < n; k++) |
gel[i][k] = poly[i][k] * 65536; /* fix with precision */ |
} |
top = bot = 0; |
for (i = 0; i < len; i++) |
{ |
if (gel[i][1] < gel[top][1]) |
top = i; |
if (gel[i][1] > gel[bot][1]) |
bot = i; |
} |
if (gel[bot][1] - gel[top][1] == 0) |
return; |
y = gel[top][1]; |
if (find_next(gel, len, top, &s0, &e0, 1)) |
return; |
if (find_next(gel, len, top, &s1, &e1, -1)) |
return; |
load_edge(gel, s0, e0, ael[0], del[0], n); |
load_edge(gel, s1, e1, ael[1], del[1], n); |
while (1) |
{ |
int x0 = ael[0][0] >> 16; |
int x1 = ael[1][0] >> 16; |
if (ael[0][0] < ael[1][0]) |
paint_scan(pix, y, x0, x1, ael[0]+2, ael[1]+2, n-2); |
else |
paint_scan(pix, y, x1, x0, ael[1]+2, ael[0]+2, n-2); |
step_edge(ael[0], del[0], n); |
step_edge(ael[1], del[1], n); |
y ++; |
if (y >= gel[e0][1]) |
{ |
if (find_next(gel, len, e0, &s0, &e0, 1)) |
return; |
load_edge(gel, s0, e0, ael[0], del[0], n); |
} |
if (y >= gel[e1][1]) |
{ |
if (find_next(gel, len, e1, &s1, &e1, -1)) |
return; |
load_edge(gel, s1, e1, ael[1], del[1], n); |
} |
} |
} |
static void |
fz_paint_quad(fz_pixmap *pix, |
fz_point p0, fz_point p1, fz_point p2, fz_point p3, |
float c0, float c1, float c2, float c3, |
int n, fz_bbox bbox) |
{ |
float v[4][3]; |
v[0][0] = p0.x; |
v[0][1] = p0.y; |
v[0][2] = c0; |
v[1][0] = p1.x; |
v[1][1] = p1.y; |
v[1][2] = c1; |
v[2][0] = p2.x; |
v[2][1] = p2.y; |
v[2][2] = c2; |
v[3][0] = p3.x; |
v[3][1] = p3.y; |
v[3][2] = c3; |
fz_paint_triangle(pix, v[0], v[2], v[3], n, bbox); |
fz_paint_triangle(pix, v[0], v[3], v[1], n, bbox); |
} |
/* |
* linear, radial and mesh painting |
*/ |
#define HUGENUM 32000 /* how far to extend axial/radial shadings */ |
#define RADSEGS 32 /* how many segments to generate for radial meshes */ |
static fz_point |
fz_point_on_circle(fz_point p, float r, float theta) |
{ |
p.x = p.x + cosf(theta) * r; |
p.y = p.y + sinf(theta) * r; |
return p; |
} |
static void |
fz_paint_linear(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox) |
{ |
fz_point p0, p1; |
fz_point v0, v1, v2, v3; |
fz_point e0, e1; |
float theta; |
p0.x = shade->mesh[0]; |
p0.y = shade->mesh[1]; |
p0 = fz_transform_point(ctm, p0); |
p1.x = shade->mesh[3]; |
p1.y = shade->mesh[4]; |
p1 = fz_transform_point(ctm, p1); |
theta = atan2f(p1.y - p0.y, p1.x - p0.x); |
theta += (float)M_PI * 0.5f; |
v0 = fz_point_on_circle(p0, HUGENUM, theta); |
v1 = fz_point_on_circle(p1, HUGENUM, theta); |
v2 = fz_point_on_circle(p0, -HUGENUM, theta); |
v3 = fz_point_on_circle(p1, -HUGENUM, theta); |
fz_paint_quad(dest, v0, v1, v2, v3, 0, 255, 0, 255, 3, bbox); |
if (shade->extend[0]) |
{ |
e0.x = v0.x - (p1.x - p0.x) * HUGENUM; |
e0.y = v0.y - (p1.y - p0.y) * HUGENUM; |
e1.x = v2.x - (p1.x - p0.x) * HUGENUM; |
e1.y = v2.y - (p1.y - p0.y) * HUGENUM; |
fz_paint_quad(dest, e0, e1, v0, v2, 0, 0, 0, 0, 3, bbox); |
} |
if (shade->extend[1]) |
{ |
e0.x = v1.x + (p1.x - p0.x) * HUGENUM; |
e0.y = v1.y + (p1.y - p0.y) * HUGENUM; |
e1.x = v3.x + (p1.x - p0.x) * HUGENUM; |
e1.y = v3.y + (p1.y - p0.y) * HUGENUM; |
fz_paint_quad(dest, e0, e1, v1, v3, 255, 255, 255, 255, 3, bbox); |
} |
} |
static void |
fz_paint_annulus(fz_matrix ctm, |
fz_point p0, float r0, float c0, |
fz_point p1, float r1, float c1, |
fz_pixmap *dest, fz_bbox bbox) |
{ |
fz_point t0, t1, t2, t3, b0, b1, b2, b3; |
float theta, step; |
int i; |
theta = atan2f(p1.y - p0.y, p1.x - p0.x); |
step = (float)M_PI * 2 / RADSEGS; |
for (i = 0; i < RADSEGS / 2; i++) |
{ |
t0 = fz_point_on_circle(p0, r0, theta + i * step); |
t1 = fz_point_on_circle(p0, r0, theta + i * step + step); |
t2 = fz_point_on_circle(p1, r1, theta + i * step); |
t3 = fz_point_on_circle(p1, r1, theta + i * step + step); |
b0 = fz_point_on_circle(p0, r0, theta - i * step); |
b1 = fz_point_on_circle(p0, r0, theta - i * step - step); |
b2 = fz_point_on_circle(p1, r1, theta - i * step); |
b3 = fz_point_on_circle(p1, r1, theta - i * step - step); |
t0 = fz_transform_point(ctm, t0); |
t1 = fz_transform_point(ctm, t1); |
t2 = fz_transform_point(ctm, t2); |
t3 = fz_transform_point(ctm, t3); |
b0 = fz_transform_point(ctm, b0); |
b1 = fz_transform_point(ctm, b1); |
b2 = fz_transform_point(ctm, b2); |
b3 = fz_transform_point(ctm, b3); |
fz_paint_quad(dest, t0, t1, t2, t3, c0, c0, c1, c1, 3, bbox); |
fz_paint_quad(dest, b0, b1, b2, b3, c0, c0, c1, c1, 3, bbox); |
} |
} |
static void |
fz_paint_radial(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox) |
{ |
fz_point p0, p1; |
float r0, r1; |
fz_point e; |
float er, rs; |
p0.x = shade->mesh[0]; |
p0.y = shade->mesh[1]; |
r0 = shade->mesh[2]; |
p1.x = shade->mesh[3]; |
p1.y = shade->mesh[4]; |
r1 = shade->mesh[5]; |
if (shade->extend[0]) |
{ |
if (r0 < r1) |
rs = r0 / (r0 - r1); |
else |
rs = -HUGENUM; |
e.x = p0.x + (p1.x - p0.x) * rs; |
e.y = p0.y + (p1.y - p0.y) * rs; |
er = r0 + (r1 - r0) * rs; |
fz_paint_annulus(ctm, e, er, 0, p0, r0, 0, dest, bbox); |
} |
fz_paint_annulus(ctm, p0, r0, 0, p1, r1, 255, dest, bbox); |
if (shade->extend[1]) |
{ |
if (r0 > r1) |
rs = r1 / (r1 - r0); |
else |
rs = -HUGENUM; |
e.x = p1.x + (p0.x - p1.x) * rs; |
e.y = p1.y + (p0.y - p1.y) * rs; |
er = r1 + (r0 - r1) * rs; |
fz_paint_annulus(ctm, p1, r1, 255, e, er, 255, dest, bbox); |
} |
} |
static void |
fz_paint_mesh(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox) |
{ |
float tri[3][MAXN]; |
fz_point p; |
float *mesh; |
int ntris; |
int i, k; |
mesh = shade->mesh; |
if (shade->use_function) |
ntris = shade->mesh_len / 9; |
else |
ntris = shade->mesh_len / ((2 + shade->colorspace->n) * 3); |
while (ntris--) |
{ |
for (k = 0; k < 3; k++) |
{ |
p.x = *mesh++; |
p.y = *mesh++; |
p = fz_transform_point(ctm, p); |
tri[k][0] = p.x; |
tri[k][1] = p.y; |
if (shade->use_function) |
tri[k][2] = *mesh++ * 255; |
else |
{ |
fz_convert_color(shade->colorspace, mesh, dest->colorspace, tri[k] + 2); |
for (i = 0; i < dest->colorspace->n; i++) |
tri[k][i + 2] *= 255; |
mesh += shade->colorspace->n; |
} |
} |
fz_paint_triangle(dest, tri[0], tri[1], tri[2], 2 + dest->colorspace->n, bbox); |
} |
} |
void |
fz_paint_shade(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox) |
{ |
unsigned char clut[256][FZ_MAX_COLORS]; |
fz_pixmap *temp, *conv; |
float color[FZ_MAX_COLORS]; |
int i, k; |
ctm = fz_concat(shade->matrix, ctm); |
if (shade->use_function) |
{ |
for (i = 0; i < 256; i++) |
{ |
fz_convert_color(shade->colorspace, shade->function[i], dest->colorspace, color); |
for (k = 0; k < dest->colorspace->n; k++) |
clut[i][k] = color[k] * 255; |
clut[i][k] = shade->function[i][shade->colorspace->n] * 255; |
} |
conv = fz_new_pixmap_with_rect(dest->colorspace, bbox); |
temp = fz_new_pixmap_with_rect(fz_device_gray, bbox); |
fz_clear_pixmap(temp); |
} |
else |
{ |
temp = dest; |
} |
switch (shade->type) |
{ |
case FZ_LINEAR: fz_paint_linear(shade, ctm, temp, bbox); break; |
case FZ_RADIAL: fz_paint_radial(shade, ctm, temp, bbox); break; |
case FZ_MESH: fz_paint_mesh(shade, ctm, temp, bbox); break; |
} |
if (shade->use_function) |
{ |
unsigned char *s = temp->samples; |
unsigned char *d = conv->samples; |
int len = temp->w * temp->h; |
while (len--) |
{ |
int v = *s++; |
int a = fz_mul255(*s++, clut[v][conv->n - 1]); |
for (k = 0; k < conv->n - 1; k++) |
*d++ = fz_mul255(clut[v][k], a); |
*d++ = a; |
} |
fz_paint_pixmap(dest, conv, 255); |
fz_drop_pixmap(conv); |
fz_drop_pixmap(temp); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_paint.c |
---|
0,0 → 1,471 |
#include "fitz.h" |
/* |
The functions in this file implement various flavours of Porter-Duff blending. |
We take the following as definitions: |
Cx = Color (from plane x) |
ax = Alpha (from plane x) |
cx = Cx.ax = Premultiplied color (from plane x) |
The general PorterDuff blending equation is: |
Blend Z = X op Y cz = Fx.cx + Fy. cy where Fx and Fy depend on op |
The two operations we use in this file are: '(X in Y) over Z' and |
'S over Z'. The definitions of the 'over' and 'in' operations are as |
follows: |
For S over Z, Fs = 1, Fz = 1-as |
For X in Y, Fx = ay, Fy = 0 |
We have 2 choices; we can either work with premultiplied data, or non |
premultiplied data. Our |
First the premultiplied case: |
Let S = (X in Y) |
Let R = (X in Y) over Z = S over Z |
cs = cx.Fx + cy.Fy (where Fx = ay, Fy = 0) |
= cx.ay |
as = ax.Fx + ay.Fy |
= ax.ay |
cr = cs.Fs + cz.Fz (where Fs = 1, Fz = 1-as) |
= cs + cz.(1-as) |
= cx.ay + cz.(1-ax.ay) |
ar = as.Fs + az.Fz |
= as + az.(1-as) |
= ax.ay + az.(1-ax.ay) |
This has various nice properties, like not needing any divisions, and |
being symmetric in color and alpha, so this is what we use. Because we |
went through the pain of deriving the non premultiplied forms, we list |
them here too, though they are not used. |
Non Pre-multiplied case: |
Cs.as = Fx.Cx.ax + Fy.Cy.ay (where Fx = ay, Fy = 0) |
= Cx.ay.ax |
Cs = (Cx.ay.ax)/(ay.ax) |
= Cx |
Cr.ar = Fs.Cs.as + Fz.Cz.az (where Fs = 1, Fz = 1-as) |
= Cs.as + (1-as).Cz.az |
= Cx.ax.ay + Cz.az.(1-ax.ay) |
Cr = (Cx.ax.ay + Cz.az.(1-ax.ay))/(ax.ay + az.(1-ax-ay)) |
Much more complex, it seems. However, if we could restrict ourselves to |
the case where we were always plotting onto an opaque background (i.e. |
az = 1), then: |
Cr = Cx.(ax.ay) + Cz.(1-ax.ay) |
= (Cx-Cz)*(1-ax.ay) + Cz (a single MLA operation) |
ar = 1 |
Sadly, this is not true in the general case, so we abandon this effort |
and stick to using the premultiplied form. |
*/ |
typedef unsigned char byte; |
/* These are used by the non-aa scan converter */ |
void |
fz_paint_solid_alpha(byte * restrict dp, int w, int alpha) |
{ |
int t = FZ_EXPAND(255 - alpha); |
while (w--) |
{ |
*dp = alpha + FZ_COMBINE(*dp, t); |
dp ++; |
} |
} |
void |
fz_paint_solid_color(byte * restrict dp, int n, int w, byte *color) |
{ |
int n1 = n - 1; |
int sa = FZ_EXPAND(color[n1]); |
int k; |
while (w--) |
{ |
int ma = FZ_COMBINE(FZ_EXPAND(255), sa); |
for (k = 0; k < n1; k++) |
dp[k] = FZ_BLEND(color[k], dp[k], ma); |
dp[k] = FZ_BLEND(255, dp[k], ma); |
dp += n; |
} |
} |
/* Blend a non-premultiplied color in mask over destination */ |
static inline void |
fz_paint_span_with_color_2(byte * restrict dp, byte * restrict mp, int w, byte *color) |
{ |
int sa = FZ_EXPAND(color[1]); |
int g = color[0]; |
while (w--) |
{ |
int ma = *mp++; |
ma = FZ_COMBINE(FZ_EXPAND(ma), sa); |
dp[0] = FZ_BLEND(g, dp[0], ma); |
dp[1] = FZ_BLEND(255, dp[1], ma); |
dp += 2; |
} |
} |
static inline void |
fz_paint_span_with_color_4(byte * restrict dp, byte * restrict mp, int w, byte *color) |
{ |
int sa = FZ_EXPAND(color[3]); |
int r = color[0]; |
int g = color[1]; |
int b = color[2]; |
while (w--) |
{ |
int ma = *mp++; |
ma = FZ_COMBINE(FZ_EXPAND(ma), sa); |
dp[0] = FZ_BLEND(r, dp[0], ma); |
dp[1] = FZ_BLEND(g, dp[1], ma); |
dp[2] = FZ_BLEND(b, dp[2], ma); |
dp[3] = FZ_BLEND(255, dp[3], ma); |
dp += 4; |
} |
} |
static inline void |
fz_paint_span_with_color_N(byte * restrict dp, byte * restrict mp, int n, int w, byte *color) |
{ |
int n1 = n - 1; |
int sa = FZ_EXPAND(color[n1]); |
int k; |
while (w--) |
{ |
int ma = *mp++; |
ma = FZ_COMBINE(FZ_EXPAND(ma), sa); |
for (k = 0; k < n1; k++) |
dp[k] = FZ_BLEND(color[k], dp[k], ma); |
dp[k] = FZ_BLEND(255, dp[k], ma); |
dp += n; |
} |
} |
void |
fz_paint_span_with_color(byte * restrict dp, byte * restrict mp, int n, int w, byte *color) |
{ |
switch (n) |
{ |
case 2: fz_paint_span_with_color_2(dp, mp, w, color); break; |
case 4: fz_paint_span_with_color_4(dp, mp, w, color); break; |
default: fz_paint_span_with_color_N(dp, mp, n, w, color); break; |
} |
} |
/* Blend source in mask over destination */ |
static inline void |
fz_paint_span_with_mask_2(byte * restrict dp, byte * restrict sp, byte * restrict mp, int w) |
{ |
while (w--) |
{ |
int masa; |
int ma = *mp++; |
ma = FZ_EXPAND(ma); |
masa = FZ_COMBINE(sp[1], ma); |
masa = 255 - masa; |
masa = FZ_EXPAND(masa); |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
} |
} |
static inline void |
fz_paint_span_with_mask_4(byte * restrict dp, byte * restrict sp, byte * restrict mp, int w) |
{ |
while (w--) |
{ |
int masa; |
int ma = *mp++; |
ma = FZ_EXPAND(ma); |
masa = FZ_COMBINE(sp[3], ma); |
masa = 255 - masa; |
masa = FZ_EXPAND(masa); |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
} |
} |
static inline void |
fz_paint_span_with_mask_N(byte * restrict dp, byte * restrict sp, byte * restrict mp, int n, int w) |
{ |
while (w--) |
{ |
int k = n; |
int masa; |
int ma = *mp++; |
ma = FZ_EXPAND(ma); |
masa = FZ_COMBINE(sp[n-1], ma); |
masa = 255-masa; |
masa = FZ_EXPAND(masa); |
while (k--) |
{ |
*dp = FZ_COMBINE2(*sp, ma, *dp, masa); |
sp++; dp++; |
} |
} |
} |
static void |
fz_paint_span_with_mask(byte * restrict dp, byte * restrict sp, byte * restrict mp, int n, int w) |
{ |
switch (n) |
{ |
case 2: fz_paint_span_with_mask_2(dp, sp, mp, w); break; |
case 4: fz_paint_span_with_mask_4(dp, sp, mp, w); break; |
default: fz_paint_span_with_mask_N(dp, sp, mp, n, w); break; |
} |
} |
/* Blend source in constant alpha over destination */ |
static inline void |
fz_paint_span_2_with_alpha(byte * restrict dp, byte * restrict sp, int w, int alpha) |
{ |
alpha = FZ_EXPAND(alpha); |
while (w--) |
{ |
int masa = FZ_COMBINE(sp[1], alpha); |
*dp = FZ_BLEND(*sp, *dp, masa); |
dp++; sp++; |
*dp = FZ_BLEND(*sp, *dp, masa); |
dp++; sp++; |
} |
} |
static inline void |
fz_paint_span_4_with_alpha(byte * restrict dp, byte * restrict sp, int w, int alpha) |
{ |
alpha = FZ_EXPAND(alpha); |
while (w--) |
{ |
int masa = FZ_COMBINE(sp[3], alpha); |
*dp = FZ_BLEND(*sp, *dp, masa); |
sp++; dp++; |
*dp = FZ_BLEND(*sp, *dp, masa); |
sp++; dp++; |
*dp = FZ_BLEND(*sp, *dp, masa); |
sp++; dp++; |
*dp = FZ_BLEND(*sp, *dp, masa); |
sp++; dp++; |
} |
} |
static inline void |
fz_paint_span_N_with_alpha(byte * restrict dp, byte * restrict sp, int n, int w, int alpha) |
{ |
alpha = FZ_EXPAND(alpha); |
while (w--) |
{ |
int masa = FZ_COMBINE(sp[n-1], alpha); |
int k = n; |
while (k--) |
{ |
*dp = FZ_BLEND(*sp++, *dp, masa); |
dp++; |
} |
} |
} |
/* Blend source over destination */ |
static inline void |
fz_paint_span_1(byte * restrict dp, byte * restrict sp, int w) |
{ |
while (w--) |
{ |
int t = FZ_EXPAND(255 - sp[0]); |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp ++; |
} |
} |
static inline void |
fz_paint_span_2(byte * restrict dp, byte * restrict sp, int w) |
{ |
while (w--) |
{ |
int t = FZ_EXPAND(255 - sp[1]); |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
} |
} |
static inline void |
fz_paint_span_4(byte * restrict dp, byte * restrict sp, int w) |
{ |
while (w--) |
{ |
int t = FZ_EXPAND(255 - sp[3]); |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
} |
} |
static inline void |
fz_paint_span_N(byte * restrict dp, byte * restrict sp, int n, int w) |
{ |
while (w--) |
{ |
int k = n; |
int t = FZ_EXPAND(255 - sp[n-1]); |
while (k--) |
{ |
*dp = *sp++ + FZ_COMBINE(*dp, t); |
dp++; |
} |
} |
} |
void |
fz_paint_span(byte * restrict dp, byte * restrict sp, int n, int w, int alpha) |
{ |
if (alpha == 255) |
{ |
switch (n) |
{ |
case 1: fz_paint_span_1(dp, sp, w); break; |
case 2: fz_paint_span_2(dp, sp, w); break; |
case 4: fz_paint_span_4(dp, sp, w); break; |
default: fz_paint_span_N(dp, sp, n, w); break; |
} |
} |
else if (alpha > 0) |
{ |
switch (n) |
{ |
case 2: fz_paint_span_2_with_alpha(dp, sp, w, alpha); break; |
case 4: fz_paint_span_4_with_alpha(dp, sp, w, alpha); break; |
default: fz_paint_span_N_with_alpha(dp, sp, n, w, alpha); break; |
} |
} |
} |
/* |
* Pixmap blending functions |
*/ |
void |
fz_paint_pixmap_with_rect(fz_pixmap *dst, fz_pixmap *src, int alpha, fz_bbox bbox) |
{ |
unsigned char *sp, *dp; |
int x, y, w, h, n; |
assert(dst->n == src->n); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(dst)); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(src)); |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
if ((w | h) == 0) |
return; |
n = src->n; |
sp = src->samples + ((y - src->y) * src->w + (x - src->x)) * src->n; |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * dst->n; |
while (h--) |
{ |
fz_paint_span(dp, sp, n, w, alpha); |
sp += src->w * n; |
dp += dst->w * n; |
} |
} |
void |
fz_paint_pixmap(fz_pixmap *dst, fz_pixmap *src, int alpha) |
{ |
unsigned char *sp, *dp; |
fz_bbox bbox; |
int x, y, w, h, n; |
assert(dst->n == src->n); |
bbox = fz_bound_pixmap(dst); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(src)); |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
if ((w | h) == 0) |
return; |
n = src->n; |
sp = src->samples + ((y - src->y) * src->w + (x - src->x)) * src->n; |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * dst->n; |
while (h--) |
{ |
fz_paint_span(dp, sp, n, w, alpha); |
sp += src->w * n; |
dp += dst->w * n; |
} |
} |
void |
fz_paint_pixmap_with_mask(fz_pixmap *dst, fz_pixmap *src, fz_pixmap *msk) |
{ |
unsigned char *sp, *dp, *mp; |
fz_bbox bbox; |
int x, y, w, h, n; |
assert(dst->n == src->n); |
assert(msk->n == 1); |
bbox = fz_bound_pixmap(dst); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(src)); |
bbox = fz_intersect_bbox(bbox, fz_bound_pixmap(msk)); |
x = bbox.x0; |
y = bbox.y0; |
w = bbox.x1 - bbox.x0; |
h = bbox.y1 - bbox.y0; |
if ((w | h) == 0) |
return; |
n = src->n; |
sp = src->samples + ((y - src->y) * src->w + (x - src->x)) * src->n; |
mp = msk->samples + ((y - msk->y) * msk->w + (x - msk->x)) * msk->n; |
dp = dst->samples + ((y - dst->y) * dst->w + (x - dst->x)) * dst->n; |
while (h--) |
{ |
fz_paint_span_with_mask(dp, sp, mp, n, w); |
sp += src->w * n; |
dp += dst->w * n; |
mp += msk->w; |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_path.c |
---|
0,0 → 1,807 |
#include "fitz.h" |
#define MAX_DEPTH 8 |
enum { BUTT = 0, ROUND = 1, SQUARE = 2, TRIANGLE = 3, MITER = 0, BEVEL = 2 }; |
static void |
line(fz_gel *gel, fz_matrix *ctm, float x0, float y0, float x1, float y1) |
{ |
float tx0 = ctm->a * x0 + ctm->c * y0 + ctm->e; |
float ty0 = ctm->b * x0 + ctm->d * y0 + ctm->f; |
float tx1 = ctm->a * x1 + ctm->c * y1 + ctm->e; |
float ty1 = ctm->b * x1 + ctm->d * y1 + ctm->f; |
fz_insert_gel(gel, tx0, ty0, tx1, ty1); |
} |
static void |
bezier(fz_gel *gel, fz_matrix *ctm, float flatness, |
float xa, float ya, |
float xb, float yb, |
float xc, float yc, |
float xd, float yd, int depth) |
{ |
float dmax; |
float xab, yab; |
float xbc, ybc; |
float xcd, ycd; |
float xabc, yabc; |
float xbcd, ybcd; |
float xabcd, yabcd; |
/* termination check */ |
dmax = ABS(xa - xb); |
dmax = MAX(dmax, ABS(ya - yb)); |
dmax = MAX(dmax, ABS(xd - xc)); |
dmax = MAX(dmax, ABS(yd - yc)); |
if (dmax < flatness || depth >= MAX_DEPTH) |
{ |
line(gel, ctm, xa, ya, xd, yd); |
return; |
} |
xab = xa + xb; |
yab = ya + yb; |
xbc = xb + xc; |
ybc = yb + yc; |
xcd = xc + xd; |
ycd = yc + yd; |
xabc = xab + xbc; |
yabc = yab + ybc; |
xbcd = xbc + xcd; |
ybcd = ybc + ycd; |
xabcd = xabc + xbcd; |
yabcd = yabc + ybcd; |
xab *= 0.5f; yab *= 0.5f; |
xbc *= 0.5f; ybc *= 0.5f; |
xcd *= 0.5f; ycd *= 0.5f; |
xabc *= 0.25f; yabc *= 0.25f; |
xbcd *= 0.25f; ybcd *= 0.25f; |
xabcd *= 0.125f; yabcd *= 0.125f; |
bezier(gel, ctm, flatness, xa, ya, xab, yab, xabc, yabc, xabcd, yabcd, depth + 1); |
bezier(gel, ctm, flatness, xabcd, yabcd, xbcd, ybcd, xcd, ycd, xd, yd, depth + 1); |
} |
void |
fz_flatten_fill_path(fz_gel *gel, fz_path *path, fz_matrix ctm, float flatness) |
{ |
float x1, y1, x2, y2, x3, y3; |
float cx = 0; |
float cy = 0; |
float bx = 0; |
float by = 0; |
int i = 0; |
while (i < path->len) |
{ |
switch (path->items[i++].k) |
{ |
case FZ_MOVETO: |
/* implicit closepath before moveto */ |
if (i && (cx != bx || cy != by)) |
line(gel, &ctm, cx, cy, bx, by); |
x1 = path->items[i++].v; |
y1 = path->items[i++].v; |
cx = bx = x1; |
cy = by = y1; |
break; |
case FZ_LINETO: |
x1 = path->items[i++].v; |
y1 = path->items[i++].v; |
line(gel, &ctm, cx, cy, x1, y1); |
cx = x1; |
cy = y1; |
break; |
case FZ_CURVETO: |
x1 = path->items[i++].v; |
y1 = path->items[i++].v; |
x2 = path->items[i++].v; |
y2 = path->items[i++].v; |
x3 = path->items[i++].v; |
y3 = path->items[i++].v; |
bezier(gel, &ctm, flatness, cx, cy, x1, y1, x2, y2, x3, y3, 0); |
cx = x3; |
cy = y3; |
break; |
case FZ_CLOSE_PATH: |
line(gel, &ctm, cx, cy, bx, by); |
cx = bx; |
cy = by; |
break; |
} |
} |
if (i && (cx != bx || cy != by)) |
line(gel, &ctm, cx, cy, bx, by); |
} |
struct sctx |
{ |
fz_gel *gel; |
fz_matrix *ctm; |
float flatness; |
int linejoin; |
float linewidth; |
float miterlimit; |
fz_point beg[2]; |
fz_point seg[2]; |
int sn, bn; |
int dot; |
float *dash_list; |
float dash_phase; |
int dash_len; |
int toggle, cap; |
int offset; |
float phase; |
fz_point cur; |
}; |
static void |
fz_add_line(struct sctx *s, float x0, float y0, float x1, float y1) |
{ |
float tx0 = s->ctm->a * x0 + s->ctm->c * y0 + s->ctm->e; |
float ty0 = s->ctm->b * x0 + s->ctm->d * y0 + s->ctm->f; |
float tx1 = s->ctm->a * x1 + s->ctm->c * y1 + s->ctm->e; |
float ty1 = s->ctm->b * x1 + s->ctm->d * y1 + s->ctm->f; |
fz_insert_gel(s->gel, tx0, ty0, tx1, ty1); |
} |
static void |
fz_add_arc(struct sctx *s, |
float xc, float yc, |
float x0, float y0, |
float x1, float y1) |
{ |
float th0, th1, r; |
float theta; |
float ox, oy, nx, ny; |
int n, i; |
r = fabsf(s->linewidth); |
theta = 2 * (float)M_SQRT2 * sqrtf(s->flatness / r); |
th0 = atan2f(y0, x0); |
th1 = atan2f(y1, x1); |
if (r > 0) |
{ |
if (th0 < th1) |
th0 += (float)M_PI * 2; |
n = ceilf((th0 - th1) / theta); |
} |
else |
{ |
if (th1 < th0) |
th1 += (float)M_PI * 2; |
n = ceilf((th1 - th0) / theta); |
} |
ox = x0; |
oy = y0; |
for (i = 1; i < n; i++) |
{ |
theta = th0 + (th1 - th0) * i / n; |
nx = cosf(theta) * r; |
ny = sinf(theta) * r; |
fz_add_line(s, xc + ox, yc + oy, xc + nx, yc + ny); |
ox = nx; |
oy = ny; |
} |
fz_add_line(s, xc + ox, yc + oy, xc + x1, yc + y1); |
} |
static void |
fz_add_line_stroke(struct sctx *s, fz_point a, fz_point b) |
{ |
float dx = b.x - a.x; |
float dy = b.y - a.y; |
float scale = s->linewidth / sqrtf(dx * dx + dy * dy); |
float dlx = dy * scale; |
float dly = -dx * scale; |
fz_add_line(s, a.x - dlx, a.y - dly, b.x - dlx, b.y - dly); |
fz_add_line(s, b.x + dlx, b.y + dly, a.x + dlx, a.y + dly); |
} |
static void |
fz_add_line_join(struct sctx *s, fz_point a, fz_point b, fz_point c) |
{ |
float miterlimit = s->miterlimit; |
float linewidth = s->linewidth; |
int linejoin = s->linejoin; |
float dx0, dy0; |
float dx1, dy1; |
float dlx0, dly0; |
float dlx1, dly1; |
float dmx, dmy; |
float dmr2; |
float scale; |
float cross; |
dx0 = b.x - a.x; |
dy0 = b.y - a.y; |
dx1 = c.x - b.x; |
dy1 = c.y - b.y; |
if (dx0 * dx0 + dy0 * dy0 < FLT_EPSILON) |
linejoin = BEVEL; |
if (dx1 * dx1 + dy1 * dy1 < FLT_EPSILON) |
linejoin = BEVEL; |
scale = linewidth / sqrtf(dx0 * dx0 + dy0 * dy0); |
dlx0 = dy0 * scale; |
dly0 = -dx0 * scale; |
scale = linewidth / sqrtf(dx1 * dx1 + dy1 * dy1); |
dlx1 = dy1 * scale; |
dly1 = -dx1 * scale; |
cross = dx1 * dy0 - dx0 * dy1; |
dmx = (dlx0 + dlx1) * 0.5f; |
dmy = (dly0 + dly1) * 0.5f; |
dmr2 = dmx * dmx + dmy * dmy; |
if (cross * cross < FLT_EPSILON && dx0 * dx1 + dy0 * dy1 >= 0) |
linejoin = BEVEL; |
if (linejoin == MITER) |
if (dmr2 * miterlimit * miterlimit < linewidth * linewidth) |
linejoin = BEVEL; |
if (linejoin == BEVEL) |
{ |
fz_add_line(s, b.x - dlx0, b.y - dly0, b.x - dlx1, b.y - dly1); |
fz_add_line(s, b.x + dlx1, b.y + dly1, b.x + dlx0, b.y + dly0); |
} |
if (linejoin == MITER) |
{ |
scale = linewidth * linewidth / dmr2; |
dmx *= scale; |
dmy *= scale; |
if (cross < 0) |
{ |
fz_add_line(s, b.x - dlx0, b.y - dly0, b.x - dlx1, b.y - dly1); |
fz_add_line(s, b.x + dlx1, b.y + dly1, b.x + dmx, b.y + dmy); |
fz_add_line(s, b.x + dmx, b.y + dmy, b.x + dlx0, b.y + dly0); |
} |
else |
{ |
fz_add_line(s, b.x + dlx1, b.y + dly1, b.x + dlx0, b.y + dly0); |
fz_add_line(s, b.x - dlx0, b.y - dly0, b.x - dmx, b.y - dmy); |
fz_add_line(s, b.x - dmx, b.y - dmy, b.x - dlx1, b.y - dly1); |
} |
} |
if (linejoin == ROUND) |
{ |
if (cross < 0) |
{ |
fz_add_line(s, b.x - dlx0, b.y - dly0, b.x - dlx1, b.y - dly1); |
fz_add_arc(s, b.x, b.y, dlx1, dly1, dlx0, dly0); |
} |
else |
{ |
fz_add_line(s, b.x + dlx1, b.y + dly1, b.x + dlx0, b.y + dly0); |
fz_add_arc(s, b.x, b.y, -dlx0, -dly0, -dlx1, -dly1); |
} |
} |
} |
static void |
fz_add_line_cap(struct sctx *s, fz_point a, fz_point b, int linecap) |
{ |
float flatness = s->flatness; |
float linewidth = s->linewidth; |
float dx = b.x - a.x; |
float dy = b.y - a.y; |
float scale = linewidth / sqrtf(dx * dx + dy * dy); |
float dlx = dy * scale; |
float dly = -dx * scale; |
if (linecap == BUTT) |
fz_add_line(s, b.x - dlx, b.y - dly, b.x + dlx, b.y + dly); |
if (linecap == ROUND) |
{ |
int i; |
int n = ceilf((float)M_PI / (2.0f * (float)M_SQRT2 * sqrtf(flatness / linewidth))); |
float ox = b.x - dlx; |
float oy = b.y - dly; |
for (i = 1; i < n; i++) |
{ |
float theta = (float)M_PI * i / n; |
float cth = cosf(theta); |
float sth = sinf(theta); |
float nx = b.x - dlx * cth - dly * sth; |
float ny = b.y - dly * cth + dlx * sth; |
fz_add_line(s, ox, oy, nx, ny); |
ox = nx; |
oy = ny; |
} |
fz_add_line(s, ox, oy, b.x + dlx, b.y + dly); |
} |
if (linecap == SQUARE) |
{ |
fz_add_line(s, b.x - dlx, b.y - dly, |
b.x - dlx - dly, b.y - dly + dlx); |
fz_add_line(s, b.x - dlx - dly, b.y - dly + dlx, |
b.x + dlx - dly, b.y + dly + dlx); |
fz_add_line(s, b.x + dlx - dly, b.y + dly + dlx, |
b.x + dlx, b.y + dly); |
} |
if (linecap == TRIANGLE) |
{ |
float mx = -dly; |
float my = dlx; |
fz_add_line(s, b.x - dlx, b.y - dly, b.x + mx, b.y + my); |
fz_add_line(s, b.x + mx, b.y + my, b.x + dlx, b.y + dly); |
} |
} |
static void |
fz_add_line_dot(struct sctx *s, fz_point a) |
{ |
float flatness = s->flatness; |
float linewidth = s->linewidth; |
int n = ceilf((float)M_PI / ((float)M_SQRT2 * sqrtf(flatness / linewidth))); |
float ox = a.x - linewidth; |
float oy = a.y; |
int i; |
for (i = 1; i < n; i++) |
{ |
float theta = (float)M_PI * 2 * i / n; |
float cth = cosf(theta); |
float sth = sinf(theta); |
float nx = a.x - cth * linewidth; |
float ny = a.y + sth * linewidth; |
fz_add_line(s, ox, oy, nx, ny); |
ox = nx; |
oy = ny; |
} |
fz_add_line(s, ox, oy, a.x - linewidth, a.y); |
} |
static void |
fz_stroke_flush(struct sctx *s, int start_cap, int end_cap) |
{ |
if (s->sn == 2) |
{ |
fz_add_line_cap(s, s->beg[1], s->beg[0], start_cap); |
fz_add_line_cap(s, s->seg[0], s->seg[1], end_cap); |
} |
else if (s->dot) |
{ |
fz_add_line_dot(s, s->beg[0]); |
} |
} |
static void |
fz_stroke_moveto(struct sctx *s, fz_point cur) |
{ |
s->seg[0] = cur; |
s->beg[0] = cur; |
s->sn = 1; |
s->bn = 1; |
s->dot = 0; |
} |
static void |
fz_stroke_lineto(struct sctx *s, fz_point cur) |
{ |
float dx = cur.x - s->seg[s->sn-1].x; |
float dy = cur.y - s->seg[s->sn-1].y; |
if (dx * dx + dy * dy < FLT_EPSILON) |
{ |
if (s->cap == ROUND || s->dash_list) |
s->dot = 1; |
return; |
} |
fz_add_line_stroke(s, s->seg[s->sn-1], cur); |
if (s->sn == 2) |
{ |
fz_add_line_join(s, s->seg[0], s->seg[1], cur); |
s->seg[0] = s->seg[1]; |
s->seg[1] = cur; |
} |
if (s->sn == 1) |
s->seg[s->sn++] = cur; |
if (s->bn == 1) |
s->beg[s->bn++] = cur; |
} |
static void |
fz_stroke_closepath(struct sctx *s) |
{ |
if (s->sn == 2) |
{ |
fz_stroke_lineto(s, s->beg[0]); |
if (s->seg[1].x == s->beg[0].x && s->seg[1].y == s->beg[0].y) |
fz_add_line_join(s, s->seg[0], s->beg[0], s->beg[1]); |
else |
fz_add_line_join(s, s->seg[1], s->beg[0], s->beg[1]); |
} |
else if (s->dot) |
{ |
fz_add_line_dot(s, s->beg[0]); |
} |
s->seg[0] = s->beg[0]; |
s->bn = 1; |
s->sn = 1; |
s->dot = 0; |
} |
static void |
fz_stroke_bezier(struct sctx *s, |
float xa, float ya, |
float xb, float yb, |
float xc, float yc, |
float xd, float yd, int depth) |
{ |
float dmax; |
float xab, yab; |
float xbc, ybc; |
float xcd, ycd; |
float xabc, yabc; |
float xbcd, ybcd; |
float xabcd, yabcd; |
/* termination check */ |
dmax = ABS(xa - xb); |
dmax = MAX(dmax, ABS(ya - yb)); |
dmax = MAX(dmax, ABS(xd - xc)); |
dmax = MAX(dmax, ABS(yd - yc)); |
if (dmax < s->flatness || depth >= MAX_DEPTH) |
{ |
fz_point p; |
p.x = xd; |
p.y = yd; |
fz_stroke_lineto(s, p); |
return; |
} |
xab = xa + xb; |
yab = ya + yb; |
xbc = xb + xc; |
ybc = yb + yc; |
xcd = xc + xd; |
ycd = yc + yd; |
xabc = xab + xbc; |
yabc = yab + ybc; |
xbcd = xbc + xcd; |
ybcd = ybc + ycd; |
xabcd = xabc + xbcd; |
yabcd = yabc + ybcd; |
xab *= 0.5f; yab *= 0.5f; |
xbc *= 0.5f; ybc *= 0.5f; |
xcd *= 0.5f; ycd *= 0.5f; |
xabc *= 0.25f; yabc *= 0.25f; |
xbcd *= 0.25f; ybcd *= 0.25f; |
xabcd *= 0.125f; yabcd *= 0.125f; |
fz_stroke_bezier(s, xa, ya, xab, yab, xabc, yabc, xabcd, yabcd, depth + 1); |
fz_stroke_bezier(s, xabcd, yabcd, xbcd, ybcd, xcd, ycd, xd, yd, depth + 1); |
} |
void |
fz_flatten_stroke_path(fz_gel *gel, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, float flatness, float linewidth) |
{ |
struct sctx s; |
fz_point p0, p1, p2, p3; |
int i; |
s.gel = gel; |
s.ctm = &ctm; |
s.flatness = flatness; |
s.linejoin = stroke->linejoin; |
s.linewidth = linewidth * 0.5f; /* hairlines use a different value from the path value */ |
s.miterlimit = stroke->miterlimit; |
s.sn = 0; |
s.bn = 0; |
s.dot = 0; |
s.dash_list = NULL; |
s.dash_phase = 0; |
s.dash_len = 0; |
s.toggle = 0; |
s.offset = 0; |
s.phase = 0; |
s.cap = stroke->start_cap; |
i = 0; |
if (path->len > 0 && path->items[0].k != FZ_MOVETO) |
{ |
fz_warn("assert: path must begin with moveto"); |
return; |
} |
p0.x = p0.y = 0; |
while (i < path->len) |
{ |
switch (path->items[i++].k) |
{ |
case FZ_MOVETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
fz_stroke_flush(&s, stroke->start_cap, stroke->end_cap); |
fz_stroke_moveto(&s, p1); |
p0 = p1; |
break; |
case FZ_LINETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
fz_stroke_lineto(&s, p1); |
p0 = p1; |
break; |
case FZ_CURVETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
p2.x = path->items[i++].v; |
p2.y = path->items[i++].v; |
p3.x = path->items[i++].v; |
p3.y = path->items[i++].v; |
fz_stroke_bezier(&s, p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, 0); |
p0 = p3; |
break; |
case FZ_CLOSE_PATH: |
fz_stroke_closepath(&s); |
break; |
} |
} |
fz_stroke_flush(&s, stroke->start_cap, stroke->end_cap); |
} |
static void |
fz_dash_moveto(struct sctx *s, fz_point a, int start_cap, int end_cap) |
{ |
s->toggle = 1; |
s->offset = 0; |
s->phase = s->dash_phase; |
while (s->phase >= s->dash_list[s->offset]) |
{ |
s->toggle = !s->toggle; |
s->phase -= s->dash_list[s->offset]; |
s->offset ++; |
if (s->offset == s->dash_len) |
s->offset = 0; |
} |
s->cur = a; |
if (s->toggle) |
{ |
fz_stroke_flush(s, s->cap, end_cap); |
s->cap = start_cap; |
fz_stroke_moveto(s, a); |
} |
} |
static void |
fz_dash_lineto(struct sctx *s, fz_point b, int dash_cap) |
{ |
float dx, dy; |
float total, used, ratio; |
fz_point a; |
fz_point m; |
a = s->cur; |
dx = b.x - a.x; |
dy = b.y - a.y; |
total = sqrtf(dx * dx + dy * dy); |
used = 0; |
while (total - used > s->dash_list[s->offset] - s->phase) |
{ |
used += s->dash_list[s->offset] - s->phase; |
ratio = used / total; |
m.x = a.x + ratio * dx; |
m.y = a.y + ratio * dy; |
if (s->toggle) |
{ |
fz_stroke_lineto(s, m); |
} |
else |
{ |
fz_stroke_flush(s, s->cap, dash_cap); |
s->cap = dash_cap; |
fz_stroke_moveto(s, m); |
} |
s->toggle = !s->toggle; |
s->phase = 0; |
s->offset ++; |
if (s->offset == s->dash_len) |
s->offset = 0; |
} |
s->phase += total - used; |
s->cur = b; |
if (s->toggle) |
{ |
fz_stroke_lineto(s, b); |
} |
} |
static void |
fz_dash_bezier(struct sctx *s, |
float xa, float ya, |
float xb, float yb, |
float xc, float yc, |
float xd, float yd, int depth, |
int dash_cap) |
{ |
float dmax; |
float xab, yab; |
float xbc, ybc; |
float xcd, ycd; |
float xabc, yabc; |
float xbcd, ybcd; |
float xabcd, yabcd; |
/* termination check */ |
dmax = ABS(xa - xb); |
dmax = MAX(dmax, ABS(ya - yb)); |
dmax = MAX(dmax, ABS(xd - xc)); |
dmax = MAX(dmax, ABS(yd - yc)); |
if (dmax < s->flatness || depth >= MAX_DEPTH) |
{ |
fz_point p; |
p.x = xd; |
p.y = yd; |
fz_dash_lineto(s, p, dash_cap); |
return; |
} |
xab = xa + xb; |
yab = ya + yb; |
xbc = xb + xc; |
ybc = yb + yc; |
xcd = xc + xd; |
ycd = yc + yd; |
xabc = xab + xbc; |
yabc = yab + ybc; |
xbcd = xbc + xcd; |
ybcd = ybc + ycd; |
xabcd = xabc + xbcd; |
yabcd = yabc + ybcd; |
xab *= 0.5f; yab *= 0.5f; |
xbc *= 0.5f; ybc *= 0.5f; |
xcd *= 0.5f; ycd *= 0.5f; |
xabc *= 0.25f; yabc *= 0.25f; |
xbcd *= 0.25f; ybcd *= 0.25f; |
xabcd *= 0.125f; yabcd *= 0.125f; |
fz_dash_bezier(s, xa, ya, xab, yab, xabc, yabc, xabcd, yabcd, depth + 1, dash_cap); |
fz_dash_bezier(s, xabcd, yabcd, xbcd, ybcd, xcd, ycd, xd, yd, depth + 1, dash_cap); |
} |
void |
fz_flatten_dash_path(fz_gel *gel, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, float flatness, float linewidth) |
{ |
struct sctx s; |
fz_point p0, p1, p2, p3, beg; |
float phase_len; |
int i; |
s.gel = gel; |
s.ctm = &ctm; |
s.flatness = flatness; |
s.linejoin = stroke->linejoin; |
s.linewidth = linewidth * 0.5f; |
s.miterlimit = stroke->miterlimit; |
s.sn = 0; |
s.bn = 0; |
s.dot = 0; |
s.dash_list = stroke->dash_list; |
s.dash_phase = stroke->dash_phase; |
s.dash_len = stroke->dash_len; |
s.toggle = 0; |
s.offset = 0; |
s.phase = 0; |
s.cap = stroke->start_cap; |
if (path->len > 0 && path->items[0].k != FZ_MOVETO) |
{ |
fz_warn("assert: path must begin with moveto"); |
return; |
} |
phase_len = 0; |
for (i = 0; i < stroke->dash_len; i++) |
phase_len += stroke->dash_list[i]; |
if (phase_len < 0.01f || phase_len < stroke->linewidth * 0.5f) |
{ |
fz_flatten_stroke_path(gel, path, stroke, ctm, flatness, linewidth); |
return; |
} |
p0.x = p0.y = 0; |
i = 0; |
while (i < path->len) |
{ |
switch (path->items[i++].k) |
{ |
case FZ_MOVETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
fz_dash_moveto(&s, p1, stroke->start_cap, stroke->end_cap); |
beg = p0 = p1; |
break; |
case FZ_LINETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
fz_dash_lineto(&s, p1, stroke->dash_cap); |
p0 = p1; |
break; |
case FZ_CURVETO: |
p1.x = path->items[i++].v; |
p1.y = path->items[i++].v; |
p2.x = path->items[i++].v; |
p2.y = path->items[i++].v; |
p3.x = path->items[i++].v; |
p3.y = path->items[i++].v; |
fz_dash_bezier(&s, p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, 0, stroke->dash_cap); |
p0 = p3; |
break; |
case FZ_CLOSE_PATH: |
fz_dash_lineto(&s, beg, stroke->dash_cap); |
p0 = p1 = beg; |
break; |
} |
} |
fz_stroke_flush(&s, s.cap, stroke->end_cap); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_scale.c |
---|
0,0 → 1,1250 |
/* |
This code does smooth scaling of a pixmap. |
This function returns a new pixmap representing the area starting at (0,0) |
given by taking the source pixmap src, scaling it to width w, and height h, |
and then positioning it at (frac(x),frac(y)). |
*/ |
#include "fitz.h" |
/* Do we special case handling of single pixel high/wide images? The |
* 'purest' handling is given by not special casing them, but certain |
* files that use such images 'stack' them to give full images. Not |
* special casing them results in then being fainter and giving noticable |
* rounding errors. |
*/ |
#define SINGLE_PIXEL_SPECIALS |
#ifdef DEBUG_SCALING |
#ifdef WIN32 |
#include <windows.h> |
static void debug_print(const char *fmt, ...) |
{ |
va_list args; |
char text[256]; |
va_start(args, fmt); |
vsprintf(text, fmt, args); |
va_end(args); |
OutputDebugStringA(text); |
printf(text); |
} |
#else |
static void debug_print(const char *fmt, ...) |
{ |
va_list args; |
va_start(args, fmt); |
vfprintf(stderr, fmt, args); |
va_end(args); |
} |
#endif |
#endif |
#ifdef DEBUG_SCALING |
#define DBUG(A) debug_print A |
#else |
#define DBUG(A) do {} while(0==1) |
#endif |
/* |
Consider a row of source samples, src, of width src_w, positioned at x, |
scaled to width dst_w. |
src[i] is centred at: x + (i + 0.5)*dst_w/src_w |
Therefore the distance between the centre of the jth output pixel and |
the centre of the ith source sample is: |
dist[j,i] = j + 0.5 - (x + (i + 0.5)*dst_w/src_w) |
When scaling up, therefore: |
dst[j] = SUM(filter(dist[j,i]) * src[i]) |
(for all ints i) |
This can be simplified by noticing that filters are only non zero within |
a given filter width (henceforth called W). So: |
dst[j] = SUM(filter(dist[j,i]) * src[i]) |
(for ints i, s.t. (j*src_w/dst_w)-W < i < (j*src_w/dst_w)+W) |
When scaling down, each filtered source sample is stretched to be wider |
to avoid aliasing issues. This effectively reduces the distance between |
centres. |
dst[j] = SUM(filter(dist[j,i] * F) * F * src[i]) |
(where F = dst_w/src_w) |
(for ints i, s.t. (j-W)/F < i < (j+W)/F) |
*/ |
typedef struct fz_scale_filter_s fz_scale_filter; |
struct fz_scale_filter_s |
{ |
int width; |
float (*fn)(fz_scale_filter *, float); |
}; |
/* Image scale filters */ |
static float |
triangle(fz_scale_filter *filter, float f) |
{ |
if (f >= 1) |
return 0; |
return 1-f; |
} |
static float |
box(fz_scale_filter *filter, float f) |
{ |
if (f >= 0.5f) |
return 0; |
return 1; |
} |
static float |
simple(fz_scale_filter *filter, float x) |
{ |
if (x >= 1) |
return 0; |
return 1 + (2*x - 3)*x*x; |
} |
static float |
lanczos2(fz_scale_filter *filter, float x) |
{ |
if (x >= 2) |
return 0; |
return sinf(M_PI*x) * sinf(M_PI*x/2) / (M_PI*x) / (M_PI*x/2); |
} |
static float |
lanczos3(fz_scale_filter *filter, float f) |
{ |
if (f >= 3) |
return 0; |
return sinf(M_PI*f) * sinf(M_PI*f/3) / (M_PI*f) / (M_PI*f/3); |
} |
/* |
The Mitchell family of filters is defined: |
f(x) = 1 { (12-9B-6C)x^3 + (-18+12B+6C)x^2 + (6-2B) for x < 1 |
- { |
6 { (-B-6C)x^3+(6B+30C)x^2+(-12B-48C)x+(8B+24C) for 1<=x<=2 |
The 'best' ones lie along the line B+2C = 1. |
The literature suggests that B=1/3, C=1/3 is best. |
f(x) = 1 { (12-3-2)x^3 - (-18+4+2)x^2 + (16/3) for x < 1 |
- { |
6 { (-7/3)x^3 + 12x^2 - 20x + (32/3) for 1<=x<=2 |
f(x) = 1 { 21x^3 - 36x^2 + 16 for x < 1 |
- { |
18{ -7x^3 + 36x^2 - 60x + 32 for 1<=x<=2 |
*/ |
static float |
mitchell(fz_scale_filter *filter, float x) |
{ |
if (x >= 2) |
return 0; |
if (x >= 1) |
return (32 + x*(-60 + x*(36 - 7*x)))/18; |
return (16 + x*x*(-36 + 21*x))/18; |
} |
fz_scale_filter fz_scale_filter_box = { 1, box }; |
fz_scale_filter fz_scale_filter_triangle = { 1, triangle }; |
fz_scale_filter fz_scale_filter_simple = { 1, simple }; |
fz_scale_filter fz_scale_filter_lanczos2 = { 2, lanczos2 }; |
fz_scale_filter fz_scale_filter_lanczos3 = { 3, lanczos3 }; |
fz_scale_filter fz_scale_filter_mitchell = { 2, mitchell }; |
/* |
We build ourselves a set of tables to contain the precalculated weights |
for a given set of scale settings. |
The first dst_w entries in index are the index into index of the |
sets of weight for each destination pixel. |
Each of the sets of weights is a set of values consisting of: |
the minimum source pixel index used for this destination pixel |
the number of weights used for this destination pixel |
the weights themselves |
So to calculate dst[i] we do the following: |
weights = &index[index[i]]; |
min = *weights++; |
len = *weights++; |
dst[i] = 0; |
while (--len > 0) |
dst[i] += src[min++] * *weights++ |
in addition, we guarantee that at the end of this process weights will now |
point to the weights value for dst pixel i+1. |
In the simplest version of this algorithm, we would scale the whole image |
horizontally first into a temporary buffer, then scale that temporary |
buffer again vertically to give us our result. Using such a simple |
algorithm would mean that could use the same style of weights for both |
horizontal and vertical scaling. |
Unfortunately, this would also require a large temporary buffer, |
particularly in the case where we are scaling up. |
We therefore modify the algorithm as follows; we scale scanlines from the |
source image horizontally into a temporary buffer, until we have all the |
contributors for a given output scanline. We then produce that output |
scanline from the temporary buffer. In this way we restrict the height |
of the temporary buffer to a small fraction of the final size. |
Unfortunately, this means that the pseudo code for recombining a |
scanline of fully scaled pixels is as follows: |
weights = &index[index[y]]; |
min = *weights++; |
len = *weights++; |
for (x=0 to dst_w) |
min2 = min |
len2 = len |
weights2 = weights |
dst[x] = 0; |
while (--len2 > 0) |
dst[x] += temp[x][(min2++) % tmp_buf_height] * *weights2++ |
i.e. it requires a % operation for every source pixel - this is typically |
expensive. |
To avoid this, we alter the order in which vertical weights are stored, |
so that they are ordered in the same order as the temporary buffer lines |
would appear. This simplifies the algorithm to: |
weights = &index[index[y]]; |
min = *weights++; |
len = *weights++; |
for (x=0 to dst_w) |
min2 = 0 |
len2 = len |
weights2 = weights |
dst[x] = 0; |
while (--len2 > 0) |
dst[x] += temp[i][min2++] * *weights2++ |
This means that len may be larger than it needs to be (due to the |
possible inclusion of a zero weight row or two), but in practise this |
is only an increase of 1 or 2 at worst. |
We implement this by generating the weights as normal (but ensuring we |
leave enough space) and then reordering afterwards. |
*/ |
typedef struct fz_weights_s fz_weights; |
struct fz_weights_s |
{ |
int count; |
int max_len; |
int n; |
int flip; |
int new_line; |
int index[1]; |
}; |
static fz_weights * |
new_weights(fz_scale_filter *filter, int src_w, float dst_w, int dst_w_i, int n, int flip) |
{ |
int max_len; |
fz_weights *weights; |
if (src_w > dst_w) |
{ |
/* Scaling down, so there will be a maximum of |
* 2*filterwidth*src_w/dst_w src pixels |
* contributing to each dst pixel. */ |
max_len = (int)ceilf((2 * filter->width * src_w)/dst_w); |
if (max_len > src_w) |
max_len = src_w; |
} |
else |
{ |
/* Scaling up, so there will be a maximum of |
* 2*filterwidth src pixels contributing to each dst pixel. |
*/ |
max_len = 2 * filter->width; |
} |
/* We need the size of the struct, |
* plus dst_w*sizeof(int) for the index |
* plus (2+max_len)*sizeof(int) for the weights |
* plus room for an extra set of weights for reordering. |
*/ |
weights = fz_malloc(sizeof(*weights)+(max_len+3)*(dst_w_i+1)*sizeof(int)); |
if (weights == NULL) |
return NULL; |
weights->count = -1; |
weights->max_len = max_len; |
weights->index[0] = dst_w_i; |
weights->n = n; |
weights->flip = flip; |
return weights; |
} |
static void |
init_weights(fz_weights *weights, int j) |
{ |
int index; |
assert(weights->count == j-1); |
weights->count++; |
weights->new_line = 1; |
if (j == 0) |
index = weights->index[0]; |
else |
{ |
index = weights->index[j-1]; |
index += 2 + weights->index[index+1]; |
} |
weights->index[j] = index; /* row pointer */ |
weights->index[index] = 0; /* min */ |
weights->index[index+1] = 0; /* len */ |
} |
static void |
add_weight(fz_weights *weights, int j, int i, fz_scale_filter *filter, |
float x, float F, float G, int src_w, float dst_w) |
{ |
float dist = j - x + 0.5f - ((i + 0.5f)*dst_w/src_w); |
float f; |
int min, len, index, weight; |
dist *= G; |
if (dist < 0) |
dist = -dist; |
f = filter->fn(filter, dist)*F; |
weight = (int)(256*f+0.5f); |
if (weight == 0) |
return; |
/* wrap i back into range */ |
#ifdef MIRROR_WRAP |
do |
{ |
if (i < 0) |
i = -1-i; |
else if (i >= src_w) |
i = 2*src_w-1-i; |
else |
break; |
} |
while (1); |
#elif defined(WRAP) |
if (i < 0) |
i = 0; |
else if (i >= src_w) |
i = src_w-1; |
#else |
if (i < 0) |
{ |
i = 0; |
weight = 0; |
} |
else if (i >= src_w) |
{ |
i = src_w-1; |
weight = 0; |
} |
if (weight == 0) |
return; |
#endif |
DBUG(("add_weight[%d][%d] = %d(%g) dist=%g\n",j,i,weight,f,dist)); |
if (weights->new_line) |
{ |
/* New line */ |
weights->new_line = 0; |
index = weights->index[j]; /* row pointer */ |
weights->index[index] = i; /* min */ |
weights->index[index+1] = 0; /* len */ |
} |
index = weights->index[j]; |
min = weights->index[index++]; |
len = weights->index[index++]; |
while (i < min) |
{ |
/* This only happens in rare cases, but we need to insert |
* one earlier. In exceedingly rare cases we may need to |
* insert more than one earlier. */ |
int k; |
for (k = len; k > 0; k--) |
{ |
weights->index[index+k] = weights->index[index+k-1]; |
} |
weights->index[index] = 0; |
min--; |
len++; |
weights->index[index-2] = min; |
weights->index[index-1] = len; |
} |
if (i-min >= len) |
{ |
/* The usual case */ |
while (i-min >= ++len) |
{ |
weights->index[index+len-1] = 0; |
} |
assert(len-1 == i-min); |
weights->index[index+i-min] = weight; |
weights->index[index-1] = len; |
assert(len <= weights->max_len); |
} |
else |
{ |
/* Infrequent case */ |
weights->index[index+i-min] += weight; |
} |
} |
static void |
reorder_weights(fz_weights *weights, int j, int src_w) |
{ |
int idx = weights->index[j]; |
int min = weights->index[idx++]; |
int len = weights->index[idx++]; |
int max = weights->max_len; |
int tmp = idx+max; |
int i, off; |
/* Copy into the temporary area */ |
memcpy(&weights->index[tmp], &weights->index[idx], sizeof(int)*len); |
/* Pad out if required */ |
assert(len <= max); |
assert(min+len <= src_w); |
off = 0; |
if (len < max) |
{ |
memset(&weights->index[tmp+len], 0, sizeof(int)*(max-len)); |
len = max; |
if (min + len > src_w) |
{ |
off = min + len - src_w; |
min = src_w - len; |
weights->index[idx-2] = min; |
} |
weights->index[idx-1] = len; |
} |
/* Copy back into the proper places */ |
for (i = 0; i < len; i++) |
{ |
weights->index[idx+((min+i+off) % max)] = weights->index[tmp+i]; |
} |
} |
/* Due to rounding and edge effects, the sums for the weights sometimes don't |
* add up to 256. This causes visible rendering effects. Therefore, we take |
* pains to ensure that they 1) never exceed 256, and 2) add up to exactly |
* 256 for all pixels that are completely covered. See bug #691629. */ |
static void |
check_weights(fz_weights *weights, int j, int w, float x, float wf) |
{ |
int idx, len; |
int sum = 0; |
int max = -256; |
int maxidx = 0; |
int i; |
idx = weights->index[j]; |
idx++; /* min */ |
len = weights->index[idx++]; |
for(i=0; i < len; i++) |
{ |
int v = weights->index[idx++]; |
sum += v; |
if (v > max) |
{ |
max = v; |
maxidx = idx; |
} |
} |
/* If we aren't the first or last pixel, OR if the sum is too big |
* then adjust it. */ |
if (((j != 0) && (j != w-1)) || (sum > 256)) |
weights->index[maxidx-1] += 256-sum; |
/* Otherwise, if we are the first pixel, and it's fully covered, then |
* adjust it. */ |
else if ((j == 0) && (x < 0.0001F) && (sum != 256)) |
weights->index[maxidx-1] += 256-sum; |
/* Finally, if we are the last pixel, and it's fully covered, then |
* adjust it. */ |
else if ((j == w-1) && ((float)w-wf < 0.0001F) && (sum != 256)) |
weights->index[maxidx-1] += 256-sum; |
DBUG(("total weight %d = %d\n", j, sum)); |
} |
static fz_weights * |
make_weights(int src_w, float x, float dst_w, fz_scale_filter *filter, int vertical, int dst_w_int, int n, int flip) |
{ |
fz_weights *weights; |
float F, G; |
float window; |
int j; |
if (dst_w < src_w) |
{ |
/* Scaling down */ |
F = dst_w / src_w; |
G = 1; |
} |
else |
{ |
/* Scaling up */ |
F = 1; |
G = src_w / dst_w; |
} |
window = filter->width / F; |
DBUG(("make_weights src_w=%d x=%g dst_w=%g dst_w_int=%d F=%g window=%g\n", src_w, x, dst_w, dst_w_int, F, window)); |
weights = new_weights(filter, src_w, dst_w, dst_w_int, n, flip); |
if (weights == NULL) |
return NULL; |
for (j = 0; j < dst_w_int; j++) |
{ |
/* find the position of the centre of dst[j] in src space */ |
float centre = (j - x + 0.5f)*src_w/dst_w - 0.5f; |
int l, r; |
l = ceilf(centre - window); |
r = floorf(centre + window); |
DBUG(("%d: centre=%g l=%d r=%d\n", j, centre, l, r)); |
init_weights(weights, j); |
for (; l <= r; l++) |
{ |
add_weight(weights, j, l, filter, x, F, G, src_w, dst_w); |
} |
check_weights(weights, j, dst_w_int, x, dst_w); |
if (vertical) |
{ |
reorder_weights(weights, j, src_w); |
} |
} |
weights->count++; /* weights->count = dst_w_int now */ |
return weights; |
} |
static void |
scale_row_to_temp(int *dst, unsigned char *src, fz_weights *weights) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
int len, i, j, n; |
unsigned char *min; |
n = weights->n; |
if (weights->flip) |
{ |
dst += (weights->count-1)*n; |
for (i=weights->count; i > 0; i--) |
{ |
min = &src[n * *contrib++]; |
len = *contrib++; |
for (j = 0; j < n; j++) |
dst[j] = 0; |
while (len-- > 0) |
{ |
for (j = n; j > 0; j--) |
*dst++ += *min++ * *contrib; |
dst -= n; |
contrib++; |
} |
dst -= n; |
} |
} |
else |
{ |
for (i=weights->count; i > 0; i--) |
{ |
min = &src[n * *contrib++]; |
len = *contrib++; |
for (j = 0; j < n; j++) |
dst[j] = 0; |
while (len-- > 0) |
{ |
for (j = n; j > 0; j--) |
*dst++ += *min++ * *contrib; |
dst -= n; |
contrib++; |
} |
dst += n; |
} |
} |
} |
static void |
scale_row_to_temp1(int *dst, unsigned char *src, fz_weights *weights) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
int len, i; |
unsigned char *min; |
assert(weights->n == 1); |
if (weights->flip) |
{ |
dst += weights->count; |
for (i=weights->count; i > 0; i--) |
{ |
int val = 0; |
min = &src[*contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
val += *min++ * *contrib++; |
} |
*--dst = val; |
} |
} |
else |
{ |
for (i=weights->count; i > 0; i--) |
{ |
int val = 0; |
min = &src[*contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
val += *min++ * *contrib++; |
} |
*dst++ = val; |
} |
} |
} |
static void |
scale_row_to_temp2(int *dst, unsigned char *src, fz_weights *weights) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
int len, i; |
unsigned char *min; |
assert(weights->n == 2); |
if (weights->flip) |
{ |
dst += 2*weights->count; |
for (i=weights->count; i > 0; i--) |
{ |
int c1 = 0; |
int c2 = 0; |
min = &src[2 * *contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
c1 += *min++ * *contrib; |
c2 += *min++ * *contrib++; |
} |
*--dst = c2; |
*--dst = c1; |
} |
} |
else |
{ |
for (i=weights->count; i > 0; i--) |
{ |
int c1 = 0; |
int c2 = 0; |
min = &src[2 * *contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
c1 += *min++ * *contrib; |
c2 += *min++ * *contrib++; |
} |
*dst++ = c1; |
*dst++ = c2; |
} |
} |
} |
static void |
scale_row_to_temp4(int *dst, unsigned char *src, fz_weights *weights) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
#ifndef ARCH_ARM |
int len, i; |
unsigned char *min; |
#endif |
assert(weights->n == 4); |
if (weights->flip) |
{ |
dst += 4*weights->count; |
#ifdef ARCH_ARM |
asm volatile( |
"1:" |
"ldr r4, [%2], #4 @ r4 = *contrib++ \n" |
"ldr r9, [%2], #4 @ r9 = len = *contrib++ \n" |
"mov r5, #0 @ r5 = r = 0 \n" |
"mov r6, #0 @ r6 = g = 0 \n" |
"mov r7, #0 @ r7 = b = 0 \n" |
"mov r8, #0 @ r8 = a = 0 \n" |
"add r4, %1, r4, LSL #2 @ r4 = min = &src[4*r4] \n" |
"cmp r9, #0 @ while (len-- > 0) \n" |
"beq 3f @ { \n" |
"2: \n" |
"ldr r10,[%2], #4 @ r10 = *contrib++ \n" |
"ldrb r11,[r4], #1 @ r11 = *min++ \n" |
"ldrb r12,[r4], #1 @ r12 = *min++ \n" |
"ldrb r14,[r4], #1 @ r14 = *min++ \n" |
"mla r5, r10,r11,r5 @ r += r11 * r10 \n" |
"ldrb r11,[r4], #1 @ r11 = *min++ \n" |
"mla r6, r10,r12,r6 @ g += r12 * r10 \n" |
"mla r7, r10,r14,r7 @ b += r14 * r10 \n" |
"mla r8, r10,r11,r8 @ a += r11 * r10 \n" |
"subs r9, r9, #1 @ r9 = len-- \n" |
"bgt 2b @ } \n" |
"stmdb %0!,{r5,r6,r7,r8} @ *--dst=a;*--dst=b; \n" |
"3: @ *--dst=g;*--dst=r; \n" |
"subs %3, %3, #1 @ i-- \n" |
"bgt 1b @ \n" |
: |
: |
"r" (dst), |
"r" (src), |
"r" (contrib), |
"r" (weights->count) |
: |
"r4","r5","r6","r7","r8","r9","r10","r11","r12","r14", |
"memory","cc" |
); |
#else |
for (i=weights->count; i > 0; i--) |
{ |
int r = 0; |
int g = 0; |
int b = 0; |
int a = 0; |
min = &src[4 * *contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
r += *min++ * *contrib; |
g += *min++ * *contrib; |
b += *min++ * *contrib; |
a += *min++ * *contrib++; |
} |
*--dst = a; |
*--dst = b; |
*--dst = g; |
*--dst = r; |
} |
#endif |
} |
else |
{ |
#ifdef ARCH_ARM |
asm volatile( |
"1:" |
"ldr r4, [%2], #4 @ r4 = *contrib++ \n" |
"ldr r9, [%2], #4 @ r9 = len = *contrib++ \n" |
"mov r5, #0 @ r5 = r = 0 \n" |
"mov r6, #0 @ r6 = g = 0 \n" |
"mov r7, #0 @ r7 = b = 0 \n" |
"mov r8, #0 @ r8 = a = 0 \n" |
"add r4, %1, r4, LSL #2 @ r4 = min = &src[4*r4] \n" |
"cmp r9, #0 @ while (len-- > 0) \n" |
"beq 3f @ { \n" |
"2: \n" |
"ldr r10,[%2], #4 @ r10 = *contrib++ \n" |
"ldrb r11,[r4], #1 @ r11 = *min++ \n" |
"ldrb r12,[r4], #1 @ r12 = *min++ \n" |
"ldrb r14,[r4], #1 @ r14 = *min++ \n" |
"mla r5, r10,r11,r5 @ r += r11 * r10 \n" |
"ldrb r11,[r4], #1 @ r11 = *min++ \n" |
"mla r6, r10,r12,r6 @ g += r12 * r10 \n" |
"mla r7, r10,r14,r7 @ b += r14 * r10 \n" |
"mla r8, r10,r11,r8 @ a += r11 * r10 \n" |
"subs r9, r9, #1 @ r9 = len-- \n" |
"bgt 2b @ } \n" |
"stmia %0!,{r5,r6,r7,r8} @ *dst++=r;*dst++=g; \n" |
"3: @ *dst++=b;*dst++=a; \n" |
"subs %3, %3, #1 @ i-- \n" |
"bgt 1b @ \n" |
: |
: |
"r" (dst), |
"r" (src), |
"r" (contrib), |
"r" (weights->count) |
: |
"r4","r5","r6","r7","r8","r9","r10","r11","r12","r14", |
"memory","cc" |
); |
#else |
for (i=weights->count; i > 0; i--) |
{ |
int r = 0; |
int g = 0; |
int b = 0; |
int a = 0; |
min = &src[4 * *contrib++]; |
len = *contrib++; |
while (len-- > 0) |
{ |
r += *min++ * *contrib; |
g += *min++ * *contrib; |
b += *min++ * *contrib; |
a += *min++ * *contrib++; |
} |
*dst++ = r; |
*dst++ = g; |
*dst++ = b; |
*dst++ = a; |
} |
#endif |
} |
} |
static void |
scale_row_from_temp(unsigned char *dst, int *src, fz_weights *weights, int width, int row) |
{ |
int *contrib = &weights->index[weights->index[row]]; |
int len, x; |
contrib++; /* Skip min */ |
len = *contrib++; |
for (x=width; x > 0; x--) |
{ |
int *min = src; |
int val = 0; |
int len2 = len; |
int *contrib2 = contrib; |
while (len2-- > 0) |
{ |
val += *min * *contrib2++; |
min += width; |
} |
val = (val+(1<<15))>>16; |
if (val < 0) |
val = 0; |
else if (val > 255) |
val = 255; |
*dst++ = val; |
src++; |
} |
} |
#ifdef SINGLE_PIXEL_SPECIALS |
static void |
duplicate_single_pixel(unsigned char *dst, unsigned char *src, int n, int w, int h) |
{ |
int i; |
for (i = n; i > 0; i--) |
*dst++ = *src++; |
for (i = (w*h-1)*n; i > 0; i--) |
{ |
*dst = dst[-n]; |
dst++; |
} |
} |
static void |
scale_single_row(unsigned char *dst, unsigned char *src, fz_weights *weights, int src_w, int h) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
int min, len, i, j, val, n; |
int tmp[FZ_MAX_COLORS]; |
n = weights->n; |
/* Scale a single row */ |
if (weights->flip) |
{ |
dst += (weights->count-1)*n; |
for (i=weights->count; i > 0; i--) |
{ |
min = *contrib++; |
len = *contrib++; |
min *= n; |
for (j = 0; j < n; j++) |
tmp[j] = 0; |
while (len-- > 0) |
{ |
for (j = 0; j < n; j++) |
tmp[j] += src[min++] * *contrib; |
contrib++; |
} |
for (j = 0; j < n; j++) |
{ |
val = (tmp[j]+(1<<7))>>8; |
if (val < 0) |
val = 0; |
else if (val > 255) |
val = 255; |
*dst++ = val; |
} |
dst -= 2*n; |
} |
dst += n * (weights->count+1); |
} |
else |
{ |
for (i=weights->count; i > 0; i--) |
{ |
min = *contrib++; |
len = *contrib++; |
min *= n; |
for (j = 0; j < n; j++) |
tmp[j] = 0; |
while (len-- > 0) |
{ |
for (j = 0; j < n; j++) |
tmp[j] += src[min++] * *contrib; |
contrib++; |
} |
for (j = 0; j < n; j++) |
{ |
val = (tmp[j]+(1<<7))>>8; |
if (val < 0) |
val = 0; |
else if (val > 255) |
val = 255; |
*dst++ = val; |
} |
} |
} |
/* And then duplicate it h times */ |
n *= weights->count; |
while (--h > 0) |
{ |
memcpy(dst, dst-n, n); |
dst += n; |
} |
} |
static void |
scale_single_col(unsigned char *dst, unsigned char *src, fz_weights *weights, int src_w, int n, int w, int flip_y) |
{ |
int *contrib = &weights->index[weights->index[0]]; |
int min, len, i, j, val; |
int tmp[FZ_MAX_COLORS]; |
if (flip_y) |
{ |
src_w = (src_w-1)*n; |
w = (w-1)*n; |
for (i=weights->count; i > 0; i--) |
{ |
/* Scale the next pixel in the column */ |
min = *contrib++; |
len = *contrib++; |
min = src_w-min*n; |
for (j = 0; j < n; j++) |
tmp[j] = 0; |
while (len-- > 0) |
{ |
for (j = 0; j < n; j++) |
tmp[j] += src[src_w-min+j] * *contrib; |
contrib++; |
} |
for (j = 0; j < n; j++) |
{ |
val = (tmp[j]+(1<<7))>>8; |
if (val < 0) |
val = 0; |
else if (val > 255) |
val = 255; |
*dst++ = val; |
} |
/* And then duplicate it across the row */ |
for (j = w; j > 0; j--) |
{ |
*dst = dst[-n]; |
dst++; |
} |
} |
} |
else |
{ |
w = (w-1)*n; |
for (i=weights->count; i > 0; i--) |
{ |
/* Scale the next pixel in the column */ |
min = *contrib++; |
len = *contrib++; |
min *= n; |
for (j = 0; j < n; j++) |
tmp[j] = 0; |
while (len-- > 0) |
{ |
for (j = 0; j < n; j++) |
tmp[j] += src[min++] * *contrib; |
contrib++; |
} |
for (j = 0; j < n; j++) |
{ |
val = (tmp[j]+(1<<7))>>8; |
if (val < 0) |
val = 0; |
else if (val > 255) |
val = 255; |
*dst++ = val; |
} |
/* And then duplicate it across the row */ |
for (j = w; j > 0; j--) |
{ |
*dst = dst[-n]; |
dst++; |
} |
} |
} |
} |
#endif /* SINGLE_PIXEL_SPECIALS */ |
fz_pixmap * |
fz_scale_pixmap_gridfit(fz_pixmap *src, float x, float y, float w, float h, int gridfit) |
{ |
if (gridfit) { |
float n; |
if (w > 0) { |
/* Adjust the left hand edge, leftwards to a pixel boundary */ |
n = (float)(int)x; /* n is now on a pixel boundary */ |
if (n > x) /* Ensure it's the pixel boundary BELOW x */ |
n -= 1.0f; |
w += x-n; /* width gets wider as x >= n */ |
x = n; |
/* Adjust the right hand edge rightwards to a pixel boundary */ |
n = (float)(int)w; /* n is now the integer width <= w */ |
if (n != w) /* If w isn't an integer already, bump it */ |
w = 1.0f + n;/* up to the next integer. */ |
} else { |
/* Adjust the right hand edge, rightwards to a pixel boundary */ |
n = (float)(int)x; /* n is now on a pixel boundary */ |
if (n > x) /* Ensure it's the pixel boundary <= x */ |
n -= 1.0f; |
if (n != x) /* If x isn't on a pixel boundary already, */ |
n += 1.0f; /* make n be the pixel boundary above x. */ |
w -= n-x; /* Expand width (more negative!) as n >= x */ |
x = n; |
/* Adjust the left hand edge leftwards to a pixel boundary */ |
n = (float)(int)w; |
if (n != w) |
w = n - 1.0f; |
} |
if (h > 0) { |
/* Adjust the bottom edge, downwards to a pixel boundary */ |
n = (float)(int)y; /* n is now on a pixel boundary */ |
if (n > y) /* Ensure it's the pixel boundary BELOW y */ |
n -= 1.0f; |
h += y-n; /* height gets larger as y >= n */ |
y = n; |
/* Adjust the top edge upwards to a pixel boundary */ |
n = (float)(int)h; /* n is now the integer height <= h */ |
if (n != h) /* If h isn't an integer already, bump it */ |
h = 1.0f + n;/* up to the next integer. */ |
} else { |
/* Adjust the top edge, upwards to a pixel boundary */ |
n = (float)(int)y; /* n is now on a pixel boundary */ |
if (n > y) /* Ensure it's the pixel boundary <= y */ |
n -= 1.0f; |
if (n != y) /* If y isn't on a pixel boundary already, */ |
n += 1.0f; /* make n be the pixel boundary above y. */ |
h -= n-y; /* Expand height (more negative!) as n >= y */ |
y = n; |
/* Adjust the bottom edge downwards to a pixel boundary */ |
n = (float)(int)h; |
if (n != h) |
h = n - 1.0f; |
} |
} |
return fz_scale_pixmap(src, x, y, w, h); |
} |
fz_pixmap * |
fz_scale_pixmap(fz_pixmap *src, float x, float y, float w, float h) |
{ |
fz_scale_filter *filter = &fz_scale_filter_simple; |
fz_weights *contrib_rows = NULL; |
fz_weights *contrib_cols = NULL; |
fz_pixmap *output = NULL; |
int *temp = NULL; |
int max_row, temp_span, temp_rows, row; |
int dst_w_int, dst_h_int, dst_x_int, dst_y_int; |
int flip_x, flip_y; |
DBUG(("Scale: (%d,%d) to (%g,%g) at (%g,%g)\n",src->w,src->h,w,h,x,y)); |
/* Find the destination bbox, width/height, and sub pixel offset, |
* allowing for whether we're flipping or not. */ |
/* Note that the x and y sub pixel offsets here are different. |
* The (x,y) position given describes where the bottom left corner |
* of the source image should be mapped to (i.e. where (0,h) in image |
* space ends up, not the more logical and sane (0,0)). Also there |
* are differences in the way we scale horizontally and vertically. |
* When scaling rows horizontally, we always read forwards through |
* the source, and store either forwards or in reverse as required. |
* When scaling vertically, we always store out forwards, but may |
* feed source rows in in a different order. |
* |
* Consider the image rectange 'r' to which the image is mapped, |
* and the (possibly) larger rectangle 'R', given by expanding 'r' to |
* complete pixels. |
* |
* x can either be r.xmin-R.xmin or R.xmax-r.xmax depending on whether |
* the image is x flipped or not. Whatever happens 0 <= x < 1. |
* y is always R.ymax - r.ymax. |
*/ |
/* dst_x_int is calculated to be the left of the scaled image, and |
* x (the sub_pixel_offset) is the distance in from either the left |
* or right pixel expanded edge. */ |
flip_x = (w < 0); |
if (flip_x) |
{ |
float tmp; |
w = -w; |
dst_x_int = floor(x-w); |
tmp = ceilf(x); |
dst_w_int = (int)tmp; |
x = tmp - x; |
dst_w_int -= dst_x_int; |
} |
else |
{ |
dst_x_int = floor(x); |
x -= (float)dst_x_int; |
dst_w_int = (int)ceilf(x + w); |
} |
flip_y = (h < 0); |
/* dst_y_int is calculated to be the bottom of the scaled image, but |
* y (the sub pixel offset) has to end up being the value at the top. |
*/ |
if (flip_y) |
{ |
h = -h; |
dst_y_int = floor(y-h); |
dst_h_int = (int)ceilf(y) - dst_y_int; |
} else { |
dst_y_int = floor(y); |
y += h; |
dst_h_int = (int)ceilf(y) - dst_y_int; |
} |
/* y is the top edge position in floats. We want it to be the |
* distance down from the next pixel boundary. */ |
y = ceilf(y) - y; |
DBUG(("Result image: (%d,%d) at (%d,%d) (subpix=%g,%g)\n", dst_w_int, dst_h_int, dst_x_int, dst_y_int, x, y)); |
/* Step 1: Calculate the weights for columns and rows */ |
#ifdef SINGLE_PIXEL_SPECIALS |
if (src->w == 1) |
{ |
contrib_cols = NULL; |
} |
else |
#endif /* SINGLE_PIXEL_SPECIALS */ |
{ |
contrib_cols = make_weights(src->w, x, w, filter, 0, dst_w_int, src->n, flip_x); |
if (contrib_cols == NULL) |
goto cleanup; |
} |
#ifdef SINGLE_PIXEL_SPECIALS |
if (src->h == 1) |
{ |
contrib_rows = NULL; |
} |
else |
#endif /* SINGLE_PIXEL_SPECIALS */ |
{ |
contrib_rows = make_weights(src->h, y, h, filter, 1, dst_h_int, src->n, flip_y); |
if (contrib_rows == NULL) |
goto cleanup; |
} |
assert(contrib_cols == NULL || contrib_cols->count == dst_w_int); |
assert(contrib_rows == NULL || contrib_rows->count == dst_h_int); |
output = fz_new_pixmap(src->colorspace, dst_w_int, dst_h_int); |
output->x = dst_x_int; |
output->y = dst_y_int; |
/* Step 2: Apply the weights */ |
#ifdef SINGLE_PIXEL_SPECIALS |
if (contrib_rows == NULL) |
{ |
/* Only 1 source pixel high. */ |
if (contrib_cols == NULL) |
{ |
/* Only 1 pixel in the entire image! */ |
duplicate_single_pixel(output->samples, src->samples, src->n, dst_w_int, dst_h_int); |
} |
else |
{ |
/* Scale the row once, then copy it. */ |
scale_single_row(output->samples, src->samples, contrib_cols, src->w, dst_h_int); |
} |
} |
else if (contrib_cols == NULL) |
{ |
/* Only 1 source pixel wide. Scale the col and duplicate. */ |
scale_single_col(output->samples, src->samples, contrib_rows, src->h, src->n, dst_w_int, flip_y); |
} |
else |
#endif /* SINGLE_PIXEL_SPECIALS */ |
{ |
void (*row_scale)(int *dst, unsigned char *src, fz_weights *weights); |
temp_span = contrib_cols->count * src->n; |
temp_rows = contrib_rows->max_len; |
if (temp_span <= 0 || temp_rows > INT_MAX / temp_span) |
goto cleanup; |
temp = fz_calloc(temp_span*temp_rows, sizeof(int)); |
if (temp == NULL) |
goto cleanup; |
switch (src->n) |
{ |
default: |
row_scale = scale_row_to_temp; |
break; |
case 1: /* Image mask case */ |
row_scale = scale_row_to_temp1; |
break; |
case 2: /* Greyscale with alpha case */ |
row_scale = scale_row_to_temp2; |
break; |
case 4: /* RGBA */ |
row_scale = scale_row_to_temp4; |
break; |
} |
max_row = 0; |
for (row = 0; row < contrib_rows->count; row++) |
{ |
/* |
Which source rows do we need to have scaled into the |
temporary buffer in order to be able to do the final |
scale? |
*/ |
int row_index = contrib_rows->index[row]; |
int row_min = contrib_rows->index[row_index++]; |
int row_len = contrib_rows->index[row_index++]; |
while (max_row < row_min+row_len) |
{ |
/* Scale another row */ |
assert(max_row < src->h); |
DBUG(("scaling row %d to temp\n", max_row)); |
(*row_scale)(&temp[temp_span*(max_row % temp_rows)], &src->samples[(flip_y ? (src->h-1-max_row): max_row)*src->w*src->n], contrib_cols); |
max_row++; |
} |
DBUG(("scaling row %d from temp\n", row)); |
scale_row_from_temp(&output->samples[row*output->w*output->n], temp, contrib_rows, temp_span, row); |
} |
fz_free(temp); |
} |
cleanup: |
fz_free(contrib_rows); |
fz_free(contrib_cols); |
return output; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/draw/draw_unpack.c |
---|
0,0 → 1,235 |
#include "fitz.h" |
/* Unpack image samples and optionally pad pixels with opaque alpha */ |
#define get1(buf,x) ((buf[x >> 3] >> ( 7 - (x & 7) ) ) & 1 ) |
#define get2(buf,x) ((buf[x >> 2] >> ( ( 3 - (x & 3) ) << 1 ) ) & 3 ) |
#define get4(buf,x) ((buf[x >> 1] >> ( ( 1 - (x & 1) ) << 2 ) ) & 15 ) |
#define get8(buf,x) (buf[x]) |
#define get16(buf,x) (buf[x << 1]) |
static unsigned char get1_tab_1[256][8]; |
static unsigned char get1_tab_1p[256][16]; |
static unsigned char get1_tab_255[256][8]; |
static unsigned char get1_tab_255p[256][16]; |
static void |
init_get1_tables(void) |
{ |
static int once = 0; |
unsigned char bits[1]; |
int i, k, x; |
/* TODO: mutex lock here */ |
if (once) |
return; |
for (i = 0; i < 256; i++) |
{ |
bits[0] = i; |
for (k = 0; k < 8; k++) |
{ |
x = get1(bits, k); |
get1_tab_1[i][k] = x; |
get1_tab_1p[i][k * 2] = x; |
get1_tab_1p[i][k * 2 + 1] = 255; |
get1_tab_255[i][k] = x * 255; |
get1_tab_255p[i][k * 2] = x * 255; |
get1_tab_255p[i][k * 2 + 1] = 255; |
} |
} |
once = 1; |
} |
void |
fz_unpack_tile(fz_pixmap *dst, unsigned char * restrict src, int n, int depth, int stride, int scale) |
{ |
int pad, x, y, k; |
int w = dst->w; |
pad = 0; |
if (dst->n > n) |
pad = 255; |
if (depth == 1) |
init_get1_tables(); |
if (scale == 0) |
{ |
switch (depth) |
{ |
case 1: scale = 255; break; |
case 2: scale = 85; break; |
case 4: scale = 17; break; |
} |
} |
for (y = 0; y < dst->h; y++) |
{ |
unsigned char *sp = src + y * stride; |
unsigned char *dp = dst->samples + y * (dst->w * dst->n); |
/* Specialized loops */ |
if (n == 1 && depth == 1 && scale == 1 && !pad) |
{ |
int w3 = w >> 3; |
for (x = 0; x < w3; x++) |
{ |
memcpy(dp, get1_tab_1[*sp++], 8); |
dp += 8; |
} |
x = x << 3; |
if (x < w) |
memcpy(dp, get1_tab_1[*sp], w - x); |
} |
else if (n == 1 && depth == 1 && scale == 255 && !pad) |
{ |
int w3 = w >> 3; |
for (x = 0; x < w3; x++) |
{ |
memcpy(dp, get1_tab_255[*sp++], 8); |
dp += 8; |
} |
x = x << 3; |
if (x < w) |
memcpy(dp, get1_tab_255[*sp], w - x); |
} |
else if (n == 1 && depth == 1 && scale == 1 && pad) |
{ |
int w3 = w >> 3; |
for (x = 0; x < w3; x++) |
{ |
memcpy(dp, get1_tab_1p[*sp++], 16); |
dp += 16; |
} |
x = x << 3; |
if (x < w) |
memcpy(dp, get1_tab_1p[*sp], (w - x) << 1); |
} |
else if (n == 1 && depth == 1 && scale == 255 && pad) |
{ |
int w3 = w >> 3; |
for (x = 0; x < w3; x++) |
{ |
memcpy(dp, get1_tab_255p[*sp++], 16); |
dp += 16; |
} |
x = x << 3; |
if (x < w) |
memcpy(dp, get1_tab_255p[*sp], (w - x) << 1); |
} |
else if (depth == 8 && !pad) |
{ |
int len = w * n; |
while (len--) |
*dp++ = *sp++; |
} |
else if (depth == 8 && pad) |
{ |
for (x = 0; x < w; x++) |
{ |
for (k = 0; k < n; k++) |
*dp++ = *sp++; |
*dp++ = 255; |
} |
} |
else |
{ |
int b = 0; |
for (x = 0; x < w; x++) |
{ |
for (k = 0; k < n; k++) |
{ |
switch (depth) |
{ |
case 1: *dp++ = get1(sp, b) * scale; break; |
case 2: *dp++ = get2(sp, b) * scale; break; |
case 4: *dp++ = get4(sp, b) * scale; break; |
case 8: *dp++ = get8(sp, b); break; |
case 16: *dp++ = get16(sp, b); break; |
} |
b++; |
} |
if (pad) |
*dp++ = 255; |
} |
} |
} |
} |
/* Apply decode array */ |
void |
fz_decode_indexed_tile(fz_pixmap *pix, float *decode, int maxval) |
{ |
int add[FZ_MAX_COLORS]; |
int mul[FZ_MAX_COLORS]; |
unsigned char *p = pix->samples; |
int len = pix->w * pix->h; |
int n = pix->n - 1; |
int needed; |
int k; |
needed = 0; |
for (k = 0; k < n; k++) |
{ |
int min = decode[k * 2] * 256; |
int max = decode[k * 2 + 1] * 256; |
add[k] = min; |
mul[k] = (max - min) / maxval; |
needed |= min != 0 || max != maxval * 256; |
} |
if (!needed) |
return; |
while (len--) |
{ |
for (k = 0; k < n; k++) |
p[k] = (add[k] + (((p[k] << 8) * mul[k]) >> 8)) >> 8; |
p += n + 1; |
} |
} |
void |
fz_decode_tile(fz_pixmap *pix, float *decode) |
{ |
int add[FZ_MAX_COLORS]; |
int mul[FZ_MAX_COLORS]; |
unsigned char *p = pix->samples; |
int len = pix->w * pix->h; |
int n = MAX(1, pix->n - 1); |
int needed; |
int k; |
needed = 0; |
for (k = 0; k < n; k++) |
{ |
int min = decode[k * 2] * 255; |
int max = decode[k * 2 + 1] * 255; |
add[k] = min; |
mul[k] = max - min; |
needed |= min != 0 || max != 255; |
} |
if (!needed) |
return; |
while (len--) |
{ |
for (k = 0; k < n; k++) |
p[k] = add[k] + fz_mul255(p[k], mul[k]); |
p += pix->n; |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/Makefile |
---|
0,0 → 1,19 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = $(abspath ../../../sdk) |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I /media/maxim/E22406D62406AE1B/SVNKOS/contrib/sdk/sources/zlib -I ../libopenjpeg -I ../include |
FITZ_SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(FITZ_SRC)) |
default: $(patsubst %.c,%.o,$(FITZ_SRC)) |
ar rcs libfitz.a *.o |
rm *.o |
mv libfitz.a ../lib |
%.o : %.c Makefile $(FITZ_SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_error.c |
---|
0,0 → 1,159 |
#include "fitz.h" |
enum { LINE_LEN = 160, LINE_COUNT = 25 }; |
static char warn_message[LINE_LEN] = ""; |
static int warn_count = 0; |
void fz_flush_warnings(void) |
{ |
if (warn_count > 1) |
fprintf(stderr, "warning: ... repeated %d times ...\n", warn_count); |
warn_message[0] = 0; |
warn_count = 0; |
} |
void fz_warn(char *fmt, ...) |
{ |
va_list ap; |
char buf[LINE_LEN]; |
va_start(ap, fmt); |
vsnprintf(buf, sizeof buf, fmt, ap); |
va_end(ap); |
if (!strcmp(buf, warn_message)) |
{ |
warn_count++; |
} |
else |
{ |
fz_flush_warnings(); |
fprintf(stderr, "warning: %s\n", buf); |
fz_strlcpy(warn_message, buf, sizeof warn_message); |
warn_count = 1; |
} |
} |
static char error_message[LINE_COUNT][LINE_LEN]; |
static int error_count = 0; |
static void |
fz_emit_error(char what, char *location, char *message) |
{ |
fz_flush_warnings(); |
fprintf(stderr, "%c %s%s\n", what, location, message); |
if (error_count < LINE_COUNT) |
{ |
fz_strlcpy(error_message[error_count], location, LINE_LEN); |
fz_strlcat(error_message[error_count], message, LINE_LEN); |
error_count++; |
} |
} |
int |
fz_get_error_count(void) |
{ |
return error_count; |
} |
char * |
fz_get_error_line(int n) |
{ |
return error_message[n]; |
} |
fz_error |
fz_throw_imp(const char *file, int line, const char *func, char *fmt, ...) |
{ |
va_list ap; |
char one[LINE_LEN], two[LINE_LEN]; |
error_count = 0; |
snprintf(one, sizeof one, "%s:%d: %s(): ", file, line, func); |
va_start(ap, fmt); |
vsnprintf(two, sizeof two, fmt, ap); |
va_end(ap); |
fz_emit_error('+', one, two); |
return -1; |
} |
fz_error |
fz_rethrow_imp(const char *file, int line, const char *func, fz_error cause, char *fmt, ...) |
{ |
va_list ap; |
char one[LINE_LEN], two[LINE_LEN]; |
snprintf(one, sizeof one, "%s:%d: %s(): ", file, line, func); |
va_start(ap, fmt); |
vsnprintf(two, sizeof two, fmt, ap); |
va_end(ap); |
fz_emit_error('|', one, two); |
return cause; |
} |
void |
fz_catch_imp(const char *file, int line, const char *func, fz_error cause, char *fmt, ...) |
{ |
va_list ap; |
char one[LINE_LEN], two[LINE_LEN]; |
snprintf(one, sizeof one, "%s:%d: %s(): ", file, line, func); |
va_start(ap, fmt); |
vsnprintf(two, sizeof two, fmt, ap); |
va_end(ap); |
fz_emit_error('\\', one, two); |
} |
fz_error |
fz_throw_impx(char *fmt, ...) |
{ |
va_list ap; |
char buf[LINE_LEN]; |
error_count = 0; |
va_start(ap, fmt); |
vsnprintf(buf, sizeof buf, fmt, ap); |
va_end(ap); |
fz_emit_error('+', "", buf); |
return -1; |
} |
fz_error |
fz_rethrow_impx(fz_error cause, char *fmt, ...) |
{ |
va_list ap; |
char buf[LINE_LEN]; |
va_start(ap, fmt); |
vsnprintf(buf, sizeof buf, fmt, ap); |
va_end(ap); |
fz_emit_error('|', "", buf); |
return cause; |
} |
void |
fz_catch_impx(fz_error cause, char *fmt, ...) |
{ |
va_list ap; |
char buf[LINE_LEN]; |
va_start(ap, fmt); |
vsnprintf(buf, sizeof buf, fmt, ap); |
va_end(ap); |
fz_emit_error('\\', "", buf); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_geometry.c |
---|
0,0 → 1,268 |
#include "fitz.h" |
#define MAX4(a,b,c,d) MAX(MAX(a,b), MAX(c,d)) |
#define MIN4(a,b,c,d) MIN(MIN(a,b), MIN(c,d)) |
/* Matrices, points and affine transformations */ |
const fz_matrix fz_identity = { 1, 0, 0, 1, 0, 0 }; |
fz_matrix |
fz_concat(fz_matrix one, fz_matrix two) |
{ |
fz_matrix dst; |
dst.a = one.a * two.a + one.b * two.c; |
dst.b = one.a * two.b + one.b * two.d; |
dst.c = one.c * two.a + one.d * two.c; |
dst.d = one.c * two.b + one.d * two.d; |
dst.e = one.e * two.a + one.f * two.c + two.e; |
dst.f = one.e * two.b + one.f * two.d + two.f; |
return dst; |
} |
fz_matrix |
fz_scale(float sx, float sy) |
{ |
fz_matrix m; |
m.a = sx; m.b = 0; |
m.c = 0; m.d = sy; |
m.e = 0; m.f = 0; |
return m; |
} |
fz_matrix |
fz_shear(float h, float v) |
{ |
fz_matrix m; |
m.a = 1; m.b = v; |
m.c = h; m.d = 1; |
m.e = 0; m.f = 0; |
return m; |
} |
fz_matrix |
fz_rotate(float theta) |
{ |
fz_matrix m; |
float s; |
float c; |
while (theta < 0) |
theta += 360; |
while (theta >= 360) |
theta -= 360; |
if (fabsf(0 - theta) < FLT_EPSILON) |
{ |
s = 0; |
c = 1; |
} |
else if (fabsf(90.0f - theta) < FLT_EPSILON) |
{ |
s = 1; |
c = 0; |
} |
else if (fabsf(180.0f - theta) < FLT_EPSILON) |
{ |
s = 0; |
c = -1; |
} |
else if (fabsf(270.0f - theta) < FLT_EPSILON) |
{ |
s = -1; |
c = 0; |
} |
else |
{ |
s = sinf(theta * (float)M_PI / 180); |
c = cosf(theta * (float)M_PI / 180); |
} |
m.a = c; m.b = s; |
m.c = -s; m.d = c; |
m.e = 0; m.f = 0; |
return m; |
} |
fz_matrix |
fz_translate(float tx, float ty) |
{ |
fz_matrix m; |
m.a = 1; m.b = 0; |
m.c = 0; m.d = 1; |
m.e = tx; m.f = ty; |
return m; |
} |
fz_matrix |
fz_invert_matrix(fz_matrix src) |
{ |
fz_matrix dst; |
float rdet = 1 / (src.a * src.d - src.b * src.c); |
dst.a = src.d * rdet; |
dst.b = -src.b * rdet; |
dst.c = -src.c * rdet; |
dst.d = src.a * rdet; |
dst.e = -src.e * dst.a - src.f * dst.c; |
dst.f = -src.e * dst.b - src.f * dst.d; |
return dst; |
} |
int |
fz_is_rectilinear(fz_matrix m) |
{ |
return (fabsf(m.b) < FLT_EPSILON && fabsf(m.c) < FLT_EPSILON) || |
(fabsf(m.a) < FLT_EPSILON && fabsf(m.d) < FLT_EPSILON); |
} |
float |
fz_matrix_expansion(fz_matrix m) |
{ |
return sqrtf(fabsf(m.a * m.d - m.b * m.c)); |
} |
fz_point |
fz_transform_point(fz_matrix m, fz_point p) |
{ |
fz_point t; |
t.x = p.x * m.a + p.y * m.c + m.e; |
t.y = p.x * m.b + p.y * m.d + m.f; |
return t; |
} |
fz_point |
fz_transform_vector(fz_matrix m, fz_point p) |
{ |
fz_point t; |
t.x = p.x * m.a + p.y * m.c; |
t.y = p.x * m.b + p.y * m.d; |
return t; |
} |
/* Rectangles and bounding boxes */ |
const fz_rect fz_infinite_rect = { 1, 1, -1, -1 }; |
const fz_rect fz_empty_rect = { 0, 0, 0, 0 }; |
const fz_rect fz_unit_rect = { 0, 0, 1, 1 }; |
const fz_bbox fz_infinite_bbox = { 1, 1, -1, -1 }; |
const fz_bbox fz_empty_bbox = { 0, 0, 0, 0 }; |
const fz_bbox fz_unit_bbox = { 0, 0, 1, 1 }; |
fz_bbox |
fz_round_rect(fz_rect f) |
{ |
fz_bbox i; |
i.x0 = floorf(f.x0 + 0.001f); /* adjust by 0.001 to compensate for precision errors */ |
i.y0 = floorf(f.y0 + 0.001f); |
i.x1 = ceilf(f.x1 - 0.001f); |
i.y1 = ceilf(f.y1 - 0.001f); |
return i; |
} |
fz_rect |
fz_intersect_rect(fz_rect a, fz_rect b) |
{ |
fz_rect r; |
if (fz_is_infinite_rect(a)) return b; |
if (fz_is_infinite_rect(b)) return a; |
if (fz_is_empty_rect(a)) return fz_empty_rect; |
if (fz_is_empty_rect(b)) return fz_empty_rect; |
r.x0 = MAX(a.x0, b.x0); |
r.y0 = MAX(a.y0, b.y0); |
r.x1 = MIN(a.x1, b.x1); |
r.y1 = MIN(a.y1, b.y1); |
return (r.x1 < r.x0 || r.y1 < r.y0) ? fz_empty_rect : r; |
} |
fz_rect |
fz_union_rect(fz_rect a, fz_rect b) |
{ |
fz_rect r; |
if (fz_is_infinite_rect(a)) return a; |
if (fz_is_infinite_rect(b)) return b; |
if (fz_is_empty_rect(a)) return b; |
if (fz_is_empty_rect(b)) return a; |
r.x0 = MIN(a.x0, b.x0); |
r.y0 = MIN(a.y0, b.y0); |
r.x1 = MAX(a.x1, b.x1); |
r.y1 = MAX(a.y1, b.y1); |
return r; |
} |
fz_bbox |
fz_intersect_bbox(fz_bbox a, fz_bbox b) |
{ |
fz_bbox r; |
if (fz_is_infinite_rect(a)) return b; |
if (fz_is_infinite_rect(b)) return a; |
if (fz_is_empty_rect(a)) return fz_empty_bbox; |
if (fz_is_empty_rect(b)) return fz_empty_bbox; |
r.x0 = MAX(a.x0, b.x0); |
r.y0 = MAX(a.y0, b.y0); |
r.x1 = MIN(a.x1, b.x1); |
r.y1 = MIN(a.y1, b.y1); |
return (r.x1 < r.x0 || r.y1 < r.y0) ? fz_empty_bbox : r; |
} |
fz_bbox |
fz_union_bbox(fz_bbox a, fz_bbox b) |
{ |
fz_bbox r; |
if (fz_is_infinite_rect(a)) return a; |
if (fz_is_infinite_rect(b)) return b; |
if (fz_is_empty_rect(a)) return b; |
if (fz_is_empty_rect(b)) return a; |
r.x0 = MIN(a.x0, b.x0); |
r.y0 = MIN(a.y0, b.y0); |
r.x1 = MAX(a.x1, b.x1); |
r.y1 = MAX(a.y1, b.y1); |
return r; |
} |
fz_rect |
fz_transform_rect(fz_matrix m, fz_rect r) |
{ |
fz_point s, t, u, v; |
if (fz_is_infinite_rect(r)) |
return r; |
s.x = r.x0; s.y = r.y0; |
t.x = r.x0; t.y = r.y1; |
u.x = r.x1; u.y = r.y1; |
v.x = r.x1; v.y = r.y0; |
s = fz_transform_point(m, s); |
t = fz_transform_point(m, t); |
u = fz_transform_point(m, u); |
v = fz_transform_point(m, v); |
r.x0 = MIN4(s.x, t.x, u.x, v.x); |
r.y0 = MIN4(s.y, t.y, u.y, v.y); |
r.x1 = MAX4(s.x, t.x, u.x, v.x); |
r.y1 = MAX4(s.y, t.y, u.y, v.y); |
return r; |
} |
fz_bbox |
fz_transform_bbox(fz_matrix m, fz_bbox b) |
{ |
fz_point s, t, u, v; |
if (fz_is_infinite_bbox(b)) |
return b; |
s.x = b.x0; s.y = b.y0; |
t.x = b.x0; t.y = b.y1; |
u.x = b.x1; u.y = b.y1; |
v.x = b.x1; v.y = b.y0; |
s = fz_transform_point(m, s); |
t = fz_transform_point(m, t); |
u = fz_transform_point(m, u); |
v = fz_transform_point(m, v); |
b.x0 = MIN4(s.x, t.x, u.x, v.x); |
b.y0 = MIN4(s.y, t.y, u.y, v.y); |
b.x1 = MAX4(s.x, t.x, u.x, v.x); |
b.y1 = MAX4(s.y, t.y, u.y, v.y); |
return b; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_getopt.c |
---|
0,0 → 1,66 |
/* |
* This is a version of the public domain getopt implementation by |
* Henry Spencer originally posted to net.sources. |
* |
* This file is in the public domain. |
*/ |
#include <stdio.h> |
#include <string.h> |
#define getopt fz_getopt |
#define optarg fz_optarg |
#define optind fz_optind |
char *optarg; /* Global argument pointer. */ |
int optind = 0; /* Global argv index. */ |
static char *scan = NULL; /* Private scan pointer. */ |
int |
getopt(int argc, char *argv[], char *optstring) |
{ |
char c; |
char *place; |
optarg = NULL; |
if (scan == NULL || *scan == '\0') { |
if (optind == 0) |
optind++; |
if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0') |
return EOF; |
if (argv[optind][1] == '-' && argv[optind][2] == '\0') { |
optind++; |
return EOF; |
} |
scan = argv[optind]+1; |
optind++; |
} |
c = *scan++; |
place = strchr(optstring, c); |
if (place == NULL || c == ':') { |
fprintf(stderr, "%s: unknown option -%c\n", argv[0], c); |
return '?'; |
} |
place++; |
if (*place == ':') { |
if (*scan != '\0') { |
optarg = scan; |
scan = NULL; |
} else if( optind < argc ) { |
optarg = argv[optind]; |
optind++; |
} else { |
fprintf(stderr, "%s: option requires argument -%c\n", argv[0], c); |
return ':'; |
} |
} |
return c; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_hash.c |
---|
0,0 → 1,241 |
#include "fitz.h" |
/* |
Simple hashtable with open adressing linear probe. |
Unlike text book examples, removing entries works |
correctly in this implementation, so it wont start |
exhibiting bad behaviour if entries are inserted |
and removed frequently. |
*/ |
enum { MAX_KEY_LEN = 48 }; |
typedef struct fz_hash_entry_s fz_hash_entry; |
struct fz_hash_entry_s |
{ |
unsigned char key[MAX_KEY_LEN]; |
void *val; |
}; |
struct fz_hash_table_s |
{ |
int keylen; |
int size; |
int load; |
fz_hash_entry *ents; |
}; |
static unsigned hash(unsigned char *s, int len) |
{ |
unsigned val = 0; |
int i; |
for (i = 0; i < len; i++) |
{ |
val += s[i]; |
val += (val << 10); |
val ^= (val >> 6); |
} |
val += (val << 3); |
val ^= (val >> 11); |
val += (val << 15); |
return val; |
} |
fz_hash_table * |
fz_new_hash_table(int initialsize, int keylen) |
{ |
fz_hash_table *table; |
assert(keylen <= MAX_KEY_LEN); |
table = fz_malloc(sizeof(fz_hash_table)); |
table->keylen = keylen; |
table->size = initialsize; |
table->load = 0; |
table->ents = fz_calloc(table->size, sizeof(fz_hash_entry)); |
memset(table->ents, 0, sizeof(fz_hash_entry) * table->size); |
return table; |
} |
void |
fz_empty_hash(fz_hash_table *table) |
{ |
table->load = 0; |
memset(table->ents, 0, sizeof(fz_hash_entry) * table->size); |
} |
int |
fz_hash_len(fz_hash_table *table) |
{ |
return table->size; |
} |
void * |
fz_hash_get_key(fz_hash_table *table, int idx) |
{ |
return table->ents[idx].key; |
} |
void * |
fz_hash_get_val(fz_hash_table *table, int idx) |
{ |
return table->ents[idx].val; |
} |
void |
fz_free_hash(fz_hash_table *table) |
{ |
fz_free(table->ents); |
fz_free(table); |
} |
static void |
fz_resize_hash(fz_hash_table *table, int newsize) |
{ |
fz_hash_entry *oldents = table->ents; |
int oldsize = table->size; |
int oldload = table->load; |
int i; |
if (newsize < oldload * 8 / 10) |
{ |
fz_throw("assert: resize hash too small"); |
return; |
} |
table->ents = fz_calloc(newsize, sizeof(fz_hash_entry)); |
memset(table->ents, 0, sizeof(fz_hash_entry) * newsize); |
table->size = newsize; |
table->load = 0; |
for (i = 0; i < oldsize; i++) |
{ |
if (oldents[i].val) |
{ |
fz_hash_insert(table, oldents[i].key, oldents[i].val); |
} |
} |
fz_free(oldents); |
} |
void * |
fz_hash_find(fz_hash_table *table, void *key) |
{ |
fz_hash_entry *ents = table->ents; |
unsigned size = table->size; |
unsigned pos = hash(key, table->keylen) % size; |
while (1) |
{ |
if (!ents[pos].val) |
return NULL; |
if (memcmp(key, ents[pos].key, table->keylen) == 0) |
return ents[pos].val; |
pos = (pos + 1) % size; |
} |
} |
void |
fz_hash_insert(fz_hash_table *table, void *key, void *val) |
{ |
fz_hash_entry *ents; |
unsigned size; |
unsigned pos; |
if (table->load > table->size * 8 / 10) |
{ |
fz_resize_hash(table, table->size * 2); |
} |
ents = table->ents; |
size = table->size; |
pos = hash(key, table->keylen) % size; |
while (1) |
{ |
if (!ents[pos].val) |
{ |
memcpy(ents[pos].key, key, table->keylen); |
ents[pos].val = val; |
table->load ++; |
return; |
} |
if (memcmp(key, ents[pos].key, table->keylen) == 0) |
fz_warn("assert: overwrite hash slot"); |
pos = (pos + 1) % size; |
} |
} |
void |
fz_hash_remove(fz_hash_table *table, void *key) |
{ |
fz_hash_entry *ents = table->ents; |
unsigned size = table->size; |
unsigned pos = hash(key, table->keylen) % size; |
unsigned hole, look, code; |
while (1) |
{ |
if (!ents[pos].val) |
{ |
fz_warn("assert: remove inexistant hash entry"); |
return; |
} |
if (memcmp(key, ents[pos].key, table->keylen) == 0) |
{ |
ents[pos].val = NULL; |
hole = pos; |
look = (hole + 1) % size; |
while (ents[look].val) |
{ |
code = hash(ents[look].key, table->keylen) % size; |
if ((code <= hole && hole < look) || |
(look < code && code <= hole) || |
(hole < look && look < code)) |
{ |
ents[hole] = ents[look]; |
ents[look].val = NULL; |
hole = look; |
} |
look = (look + 1) % size; |
} |
table->load --; |
return; |
} |
pos = (pos + 1) % size; |
} |
} |
void |
fz_debug_hash(fz_hash_table *table) |
{ |
int i, k; |
printf("cache load %d / %d\n", table->load, table->size); |
for (i = 0; i < table->size; i++) |
{ |
if (!table->ents[i].val) |
printf("table % 4d: empty\n", i); |
else |
{ |
printf("table % 4d: key=", i); |
for (k = 0; k < MAX_KEY_LEN; k++) |
printf("%02x", ((char*)table->ents[i].key)[k]); |
printf(" val=$%p\n", table->ents[i].val); |
} |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_memory.c |
---|
0,0 → 1,77 |
#include "fitz.h" |
void * |
fz_malloc(int size) |
{ |
void *p = malloc(size); |
if (!p) |
{ |
fprintf(stderr, "fatal error: out of memory\n"); |
abort(); |
} |
return p; |
} |
void * |
fz_calloc(int count, int size) |
{ |
void *p; |
if (count == 0 || size == 0) |
return 0; |
if (count < 0 || size < 0 || count > INT_MAX / size) |
{ |
fprintf(stderr, "fatal error: out of memory (integer overflow)\n"); |
abort(); |
} |
p = malloc(count * size); |
if (!p) |
{ |
fprintf(stderr, "fatal error: out of memory\n"); |
abort(); |
} |
return p; |
} |
void * |
fz_realloc(void *p, int count, int size) |
{ |
void *np; |
if (count == 0 || size == 0) |
{ |
fz_free(p); |
return 0; |
} |
if (count < 0 || size < 0 || count > INT_MAX / size) |
{ |
fprintf(stderr, "fatal error: out of memory (integer overflow)\n"); |
abort(); |
} |
np = realloc(p, count * size); |
if (np == NULL) |
{ |
fprintf(stderr, "fatal error: out of memory\n"); |
abort(); |
} |
return np; |
} |
void |
fz_free(void *p) |
{ |
free(p); |
} |
char * |
fz_strdup(char *s) |
{ |
int len = strlen(s) + 1; |
char *ns = fz_malloc(len); |
memcpy(ns, s, len); |
return ns; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_object.c |
---|
0,0 → 1,802 |
#include "fitz.h" |
typedef enum fz_objkind_e |
{ |
FZ_NULL, |
FZ_BOOL, |
FZ_INT, |
FZ_REAL, |
FZ_STRING, |
FZ_NAME, |
FZ_ARRAY, |
FZ_DICT, |
FZ_INDIRECT |
} fz_objkind; |
struct keyval |
{ |
fz_obj *k; |
fz_obj *v; |
}; |
struct fz_obj_s |
{ |
int refs; |
fz_objkind kind; |
union |
{ |
int b; |
int i; |
float f; |
struct { |
unsigned short len; |
char buf[1]; |
} s; |
char n[1]; |
struct { |
int len; |
int cap; |
fz_obj **items; |
} a; |
struct { |
char sorted; |
int len; |
int cap; |
struct keyval *items; |
} d; |
struct { |
int num; |
int gen; |
struct pdf_xref_s *xref; |
} r; |
} u; |
}; |
static fz_obj *fz_resolve_indirect_null(fz_obj *ref) |
{ |
return ref; |
} |
fz_obj* (*fz_resolve_indirect)(fz_obj*) = fz_resolve_indirect_null; |
fz_obj * |
fz_new_null(void) |
{ |
fz_obj *obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_NULL; |
return obj; |
} |
fz_obj * |
fz_new_bool(int b) |
{ |
fz_obj *obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_BOOL; |
obj->u.b = b; |
return obj; |
} |
fz_obj * |
fz_new_int(int i) |
{ |
fz_obj *obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_INT; |
obj->u.i = i; |
return obj; |
} |
fz_obj * |
fz_new_real(float f) |
{ |
fz_obj *obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_REAL; |
obj->u.f = f; |
return obj; |
} |
fz_obj * |
fz_new_string(char *str, int len) |
{ |
fz_obj *obj = fz_malloc(offsetof(fz_obj, u.s.buf) + len + 1); |
obj->refs = 1; |
obj->kind = FZ_STRING; |
obj->u.s.len = len; |
memcpy(obj->u.s.buf, str, len); |
obj->u.s.buf[len] = '\0'; |
return obj; |
} |
fz_obj * |
fz_new_name(char *str) |
{ |
fz_obj *obj = fz_malloc(offsetof(fz_obj, u.n) + strlen(str) + 1); |
obj->refs = 1; |
obj->kind = FZ_NAME; |
strcpy(obj->u.n, str); |
return obj; |
} |
fz_obj * |
fz_new_indirect(int num, int gen, void *xref) |
{ |
fz_obj *obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_INDIRECT; |
obj->u.r.num = num; |
obj->u.r.gen = gen; |
obj->u.r.xref = xref; |
return obj; |
} |
fz_obj * |
fz_keep_obj(fz_obj *obj) |
{ |
assert(obj != NULL); |
obj->refs ++; |
return obj; |
} |
int fz_is_indirect(fz_obj *obj) |
{ |
return obj ? obj->kind == FZ_INDIRECT : 0; |
} |
int fz_is_null(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_NULL : 0; |
} |
int fz_is_bool(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_BOOL : 0; |
} |
int fz_is_int(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_INT : 0; |
} |
int fz_is_real(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_REAL : 0; |
} |
int fz_is_string(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_STRING : 0; |
} |
int fz_is_name(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_NAME : 0; |
} |
int fz_is_array(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_ARRAY : 0; |
} |
int fz_is_dict(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
return obj ? obj->kind == FZ_DICT : 0; |
} |
int fz_to_bool(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_bool(obj)) |
return obj->u.b; |
return 0; |
} |
int fz_to_int(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_int(obj)) |
return obj->u.i; |
if (fz_is_real(obj)) |
return obj->u.f; |
return 0; |
} |
float fz_to_real(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_real(obj)) |
return obj->u.f; |
if (fz_is_int(obj)) |
return obj->u.i; |
return 0; |
} |
char *fz_to_name(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_name(obj)) |
return obj->u.n; |
return ""; |
} |
char *fz_to_str_buf(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_string(obj)) |
return obj->u.s.buf; |
return ""; |
} |
int fz_to_str_len(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_string(obj)) |
return obj->u.s.len; |
return 0; |
} |
/* for use by pdf_crypt_obj_imp to decrypt AES string in place */ |
void fz_set_str_len(fz_obj *obj, int newlen) |
{ |
obj = fz_resolve_indirect(obj); |
if (fz_is_string(obj)) |
if (newlen < obj->u.s.len) |
obj->u.s.len = newlen; |
} |
int fz_to_num(fz_obj *obj) |
{ |
if (fz_is_indirect(obj)) |
return obj->u.r.num; |
return 0; |
} |
int fz_to_gen(fz_obj *obj) |
{ |
if (fz_is_indirect(obj)) |
return obj->u.r.gen; |
return 0; |
} |
void *fz_get_indirect_xref(fz_obj *obj) |
{ |
if (fz_is_indirect(obj)) |
return obj->u.r.xref; |
return NULL; |
} |
int |
fz_objcmp(fz_obj *a, fz_obj *b) |
{ |
int i; |
if (a == b) |
return 0; |
if (!a || !b) |
return 1; |
if (a->kind != b->kind) |
return 1; |
switch (a->kind) |
{ |
case FZ_NULL: |
return 0; |
case FZ_BOOL: |
return a->u.b - b->u.b; |
case FZ_INT: |
return a->u.i - b->u.i; |
case FZ_REAL: |
if (a->u.f < b->u.f) |
return -1; |
if (a->u.f > b->u.f) |
return 1; |
return 0; |
case FZ_STRING: |
if (a->u.s.len < b->u.s.len) |
{ |
if (memcmp(a->u.s.buf, b->u.s.buf, a->u.s.len) <= 0) |
return -1; |
return 1; |
} |
if (a->u.s.len > b->u.s.len) |
{ |
if (memcmp(a->u.s.buf, b->u.s.buf, b->u.s.len) >= 0) |
return 1; |
return -1; |
} |
return memcmp(a->u.s.buf, b->u.s.buf, a->u.s.len); |
case FZ_NAME: |
return strcmp(a->u.n, b->u.n); |
case FZ_INDIRECT: |
if (a->u.r.num == b->u.r.num) |
return a->u.r.gen - b->u.r.gen; |
return a->u.r.num - b->u.r.num; |
case FZ_ARRAY: |
if (a->u.a.len != b->u.a.len) |
return a->u.a.len - b->u.a.len; |
for (i = 0; i < a->u.a.len; i++) |
if (fz_objcmp(a->u.a.items[i], b->u.a.items[i])) |
return 1; |
return 0; |
case FZ_DICT: |
if (a->u.d.len != b->u.d.len) |
return a->u.d.len - b->u.d.len; |
for (i = 0; i < a->u.d.len; i++) |
{ |
if (fz_objcmp(a->u.d.items[i].k, b->u.d.items[i].k)) |
return 1; |
if (fz_objcmp(a->u.d.items[i].v, b->u.d.items[i].v)) |
return 1; |
} |
return 0; |
} |
return 1; |
} |
static char * |
fz_objkindstr(fz_obj *obj) |
{ |
if (obj == NULL) |
return "<NULL>"; |
switch (obj->kind) |
{ |
case FZ_NULL: return "null"; |
case FZ_BOOL: return "boolean"; |
case FZ_INT: return "integer"; |
case FZ_REAL: return "real"; |
case FZ_STRING: return "string"; |
case FZ_NAME: return "name"; |
case FZ_ARRAY: return "array"; |
case FZ_DICT: return "dictionary"; |
case FZ_INDIRECT: return "reference"; |
} |
return "<unknown>"; |
} |
fz_obj * |
fz_new_array(int initialcap) |
{ |
fz_obj *obj; |
int i; |
obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_ARRAY; |
obj->u.a.len = 0; |
obj->u.a.cap = initialcap > 1 ? initialcap : 6; |
obj->u.a.items = fz_calloc(obj->u.a.cap, sizeof(fz_obj*)); |
for (i = 0; i < obj->u.a.cap; i++) |
obj->u.a.items[i] = NULL; |
return obj; |
} |
fz_obj * |
fz_copy_array(fz_obj *obj) |
{ |
fz_obj *new; |
int i; |
if (fz_is_indirect(obj) || !fz_is_array(obj)) |
fz_warn("assert: not an array (%s)", fz_objkindstr(obj)); |
new = fz_new_array(fz_array_len(obj)); |
for (i = 0; i < fz_array_len(obj); i++) |
fz_array_push(new, fz_array_get(obj, i)); |
return new; |
} |
int |
fz_array_len(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_array(obj)) |
return 0; |
return obj->u.a.len; |
} |
fz_obj * |
fz_array_get(fz_obj *obj, int i) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_array(obj)) |
return NULL; |
if (i < 0 || i >= obj->u.a.len) |
return NULL; |
return obj->u.a.items[i]; |
} |
void |
fz_array_put(fz_obj *obj, int i, fz_obj *item) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_array(obj)) |
fz_warn("assert: not an array (%s)", fz_objkindstr(obj)); |
else if (i < 0) |
fz_warn("assert: index %d < 0", i); |
else if (i >= obj->u.a.len) |
fz_warn("assert: index %d > length %d", i, obj->u.a.len); |
else |
{ |
if (obj->u.a.items[i]) |
fz_drop_obj(obj->u.a.items[i]); |
obj->u.a.items[i] = fz_keep_obj(item); |
} |
} |
void |
fz_array_push(fz_obj *obj, fz_obj *item) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_array(obj)) |
fz_warn("assert: not an array (%s)", fz_objkindstr(obj)); |
else |
{ |
if (obj->u.a.len + 1 > obj->u.a.cap) |
{ |
int i; |
obj->u.a.cap = (obj->u.a.cap * 3) / 2; |
obj->u.a.items = fz_realloc(obj->u.a.items, obj->u.a.cap, sizeof(fz_obj*)); |
for (i = obj->u.a.len ; i < obj->u.a.cap; i++) |
obj->u.a.items[i] = NULL; |
} |
obj->u.a.items[obj->u.a.len] = fz_keep_obj(item); |
obj->u.a.len++; |
} |
} |
void |
fz_array_insert(fz_obj *obj, fz_obj *item) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_array(obj)) |
fz_warn("assert: not an array (%s)", fz_objkindstr(obj)); |
else |
{ |
if (obj->u.a.len + 1 > obj->u.a.cap) |
{ |
int i; |
obj->u.a.cap = (obj->u.a.cap * 3) / 2; |
obj->u.a.items = fz_realloc(obj->u.a.items, obj->u.a.cap, sizeof(fz_obj*)); |
for (i = obj->u.a.len ; i < obj->u.a.cap; i++) |
obj->u.a.items[i] = NULL; |
} |
memmove(obj->u.a.items + 1, obj->u.a.items, obj->u.a.len * sizeof(fz_obj*)); |
obj->u.a.items[0] = fz_keep_obj(item); |
obj->u.a.len++; |
} |
} |
/* dicts may only have names as keys! */ |
static int keyvalcmp(const void *ap, const void *bp) |
{ |
const struct keyval *a = ap; |
const struct keyval *b = bp; |
return strcmp(fz_to_name(a->k), fz_to_name(b->k)); |
} |
fz_obj * |
fz_new_dict(int initialcap) |
{ |
fz_obj *obj; |
int i; |
obj = fz_malloc(sizeof(fz_obj)); |
obj->refs = 1; |
obj->kind = FZ_DICT; |
obj->u.d.sorted = 1; |
obj->u.d.len = 0; |
obj->u.d.cap = initialcap > 1 ? initialcap : 10; |
obj->u.d.items = fz_calloc(obj->u.d.cap, sizeof(struct keyval)); |
for (i = 0; i < obj->u.d.cap; i++) |
{ |
obj->u.d.items[i].k = NULL; |
obj->u.d.items[i].v = NULL; |
} |
return obj; |
} |
fz_obj * |
fz_copy_dict(fz_obj *obj) |
{ |
fz_obj *new; |
int i; |
if (fz_is_indirect(obj) || !fz_is_dict(obj)) |
fz_throw("assert: not a dict (%s)", fz_objkindstr(obj)); |
new = fz_new_dict(fz_dict_len(obj)); |
for (i = 0; i < fz_dict_len(obj); i++) |
fz_dict_put(new, fz_dict_get_key(obj, i), fz_dict_get_val(obj, i)); |
return new; |
} |
int |
fz_dict_len(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
return 0; |
return obj->u.d.len; |
} |
fz_obj * |
fz_dict_get_key(fz_obj *obj, int i) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
return NULL; |
if (i < 0 || i >= obj->u.d.len) |
return NULL; |
return obj->u.d.items[i].k; |
} |
fz_obj * |
fz_dict_get_val(fz_obj *obj, int i) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
return NULL; |
if (i < 0 || i >= obj->u.d.len) |
return NULL; |
return obj->u.d.items[i].v; |
} |
static int |
fz_dict_finds(fz_obj *obj, char *key) |
{ |
if (obj->u.d.sorted) |
{ |
int l = 0; |
int r = obj->u.d.len - 1; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
int c = -strcmp(fz_to_name(obj->u.d.items[m].k), key); |
if (c < 0) |
r = m - 1; |
else if (c > 0) |
l = m + 1; |
else |
return m; |
} |
} |
else |
{ |
int i; |
for (i = 0; i < obj->u.d.len; i++) |
if (strcmp(fz_to_name(obj->u.d.items[i].k), key) == 0) |
return i; |
} |
return -1; |
} |
fz_obj * |
fz_dict_gets(fz_obj *obj, char *key) |
{ |
int i; |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
return NULL; |
i = fz_dict_finds(obj, key); |
if (i >= 0) |
return obj->u.d.items[i].v; |
return NULL; |
} |
fz_obj * |
fz_dict_get(fz_obj *obj, fz_obj *key) |
{ |
if (fz_is_name(key)) |
return fz_dict_gets(obj, fz_to_name(key)); |
return NULL; |
} |
fz_obj * |
fz_dict_getsa(fz_obj *obj, char *key, char *abbrev) |
{ |
fz_obj *v; |
v = fz_dict_gets(obj, key); |
if (v) |
return v; |
return fz_dict_gets(obj, abbrev); |
} |
void |
fz_dict_put(fz_obj *obj, fz_obj *key, fz_obj *val) |
{ |
char *s; |
int i; |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
{ |
fz_warn("assert: not a dict (%s)", fz_objkindstr(obj)); |
return; |
} |
if (fz_is_name(key)) |
s = fz_to_name(key); |
else |
{ |
fz_warn("assert: key is not a name (%s)", fz_objkindstr(obj)); |
return; |
} |
if (!val) |
{ |
fz_warn("assert: val does not exist for key (%s)", s); |
return; |
} |
i = fz_dict_finds(obj, s); |
if (i >= 0) |
{ |
fz_drop_obj(obj->u.d.items[i].v); |
obj->u.d.items[i].v = fz_keep_obj(val); |
return; |
} |
if (obj->u.d.len + 1 > obj->u.d.cap) |
{ |
obj->u.d.cap = (obj->u.d.cap * 3) / 2; |
obj->u.d.items = fz_realloc(obj->u.d.items, obj->u.d.cap, sizeof(struct keyval)); |
for (i = obj->u.d.len; i < obj->u.d.cap; i++) |
{ |
obj->u.d.items[i].k = NULL; |
obj->u.d.items[i].v = NULL; |
} |
} |
/* borked! */ |
if (obj->u.d.len) |
if (strcmp(fz_to_name(obj->u.d.items[obj->u.d.len - 1].k), s) > 0) |
obj->u.d.sorted = 0; |
obj->u.d.items[obj->u.d.len].k = fz_keep_obj(key); |
obj->u.d.items[obj->u.d.len].v = fz_keep_obj(val); |
obj->u.d.len ++; |
} |
void |
fz_dict_puts(fz_obj *obj, char *key, fz_obj *val) |
{ |
fz_obj *keyobj = fz_new_name(key); |
fz_dict_put(obj, keyobj, val); |
fz_drop_obj(keyobj); |
} |
void |
fz_dict_dels(fz_obj *obj, char *key) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
fz_warn("assert: not a dict (%s)", fz_objkindstr(obj)); |
else |
{ |
int i = fz_dict_finds(obj, key); |
if (i >= 0) |
{ |
fz_drop_obj(obj->u.d.items[i].k); |
fz_drop_obj(obj->u.d.items[i].v); |
obj->u.d.sorted = 0; |
obj->u.d.items[i] = obj->u.d.items[obj->u.d.len-1]; |
obj->u.d.len --; |
} |
} |
} |
void |
fz_dict_del(fz_obj *obj, fz_obj *key) |
{ |
if (fz_is_name(key)) |
fz_dict_dels(obj, fz_to_name(key)); |
else |
fz_warn("assert: key is not a name (%s)", fz_objkindstr(obj)); |
} |
void |
fz_sort_dict(fz_obj *obj) |
{ |
obj = fz_resolve_indirect(obj); |
if (!fz_is_dict(obj)) |
return; |
if (!obj->u.d.sorted) |
{ |
qsort(obj->u.d.items, obj->u.d.len, sizeof(struct keyval), keyvalcmp); |
obj->u.d.sorted = 1; |
} |
} |
static void |
fz_free_array(fz_obj *obj) |
{ |
int i; |
for (i = 0; i < obj->u.a.len; i++) |
if (obj->u.a.items[i]) |
fz_drop_obj(obj->u.a.items[i]); |
fz_free(obj->u.a.items); |
fz_free(obj); |
} |
static void |
fz_free_dict(fz_obj *obj) |
{ |
int i; |
for (i = 0; i < obj->u.d.len; i++) { |
if (obj->u.d.items[i].k) |
fz_drop_obj(obj->u.d.items[i].k); |
if (obj->u.d.items[i].v) |
fz_drop_obj(obj->u.d.items[i].v); |
} |
fz_free(obj->u.d.items); |
fz_free(obj); |
} |
void |
fz_drop_obj(fz_obj *obj) |
{ |
assert(obj != NULL); |
if (--obj->refs == 0) |
{ |
if (obj->kind == FZ_ARRAY) |
fz_free_array(obj); |
else if (obj->kind == FZ_DICT) |
fz_free_dict(obj); |
else |
fz_free(obj); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_string.c |
---|
0,0 → 1,265 |
#include "fitz.h" |
int |
fz_is_big_endian(void) |
{ |
static const int one = 1; |
return *(char*)&one == 0; |
} |
char * |
fz_strsep(char **stringp, const char *delim) |
{ |
char *ret = *stringp; |
if (ret == NULL) return NULL; |
if ((*stringp = strpbrk(*stringp, delim)) != NULL) |
*((*stringp)++) = '\0'; |
return ret; |
} |
int |
fz_strlcpy(char *dst, const char *src, int siz) |
{ |
register char *d = dst; |
register const char *s = src; |
register int n = siz; |
/* Copy as many bytes as will fit */ |
if (n != 0 && --n != 0) { |
do { |
if ((*d++ = *s++) == 0) |
break; |
} while (--n != 0); |
} |
/* Not enough room in dst, add NUL and traverse rest of src */ |
if (n == 0) { |
if (siz != 0) |
*d = '\0'; /* NUL-terminate dst */ |
while (*s++) |
; |
} |
return(s - src - 1); /* count does not include NUL */ |
} |
int |
fz_strlcat(char *dst, const char *src, int siz) |
{ |
register char *d = dst; |
register const char *s = src; |
register int n = siz; |
int dlen; |
/* Find the end of dst and adjust bytes left but don't go past end */ |
while (*d != '\0' && n-- != 0) |
d++; |
dlen = d - dst; |
n = siz - dlen; |
if (n == 0) |
return dlen + strlen(s); |
while (*s != '\0') { |
if (n != 1) { |
*d++ = *s; |
n--; |
} |
s++; |
} |
*d = '\0'; |
return dlen + (s - src); /* count does not include NUL */ |
} |
enum |
{ |
UTFmax = 4, /* maximum bytes per rune */ |
Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */ |
Runeself = 0x80, /* rune and UTF sequences are the same (<) */ |
Runeerror = 0xFFFD, /* decoding error in UTF */ |
Runemax = 0x10FFFF, /* maximum rune value */ |
}; |
enum |
{ |
Bit1 = 7, |
Bitx = 6, |
Bit2 = 5, |
Bit3 = 4, |
Bit4 = 3, |
Bit5 = 2, |
T1 = ((1<<(Bit1+1))-1) ^ 0xFF, /* 0000 0000 */ |
Tx = ((1<<(Bitx+1))-1) ^ 0xFF, /* 1000 0000 */ |
T2 = ((1<<(Bit2+1))-1) ^ 0xFF, /* 1100 0000 */ |
T3 = ((1<<(Bit3+1))-1) ^ 0xFF, /* 1110 0000 */ |
T4 = ((1<<(Bit4+1))-1) ^ 0xFF, /* 1111 0000 */ |
T5 = ((1<<(Bit5+1))-1) ^ 0xFF, /* 1111 1000 */ |
Rune1 = (1<<(Bit1+0*Bitx))-1, /* 0000 0000 0111 1111 */ |
Rune2 = (1<<(Bit2+1*Bitx))-1, /* 0000 0111 1111 1111 */ |
Rune3 = (1<<(Bit3+2*Bitx))-1, /* 1111 1111 1111 1111 */ |
Rune4 = (1<<(Bit4+3*Bitx))-1, /* 0001 1111 1111 1111 1111 1111 */ |
Maskx = (1<<Bitx)-1, /* 0011 1111 */ |
Testx = Maskx ^ 0xFF, /* 1100 0000 */ |
Bad = Runeerror, |
}; |
int |
chartorune(int *rune, char *str) |
{ |
int c, c1, c2, c3; |
long l; |
/* |
* one character sequence |
* 00000-0007F => T1 |
*/ |
c = *(unsigned char*)str; |
if(c < Tx) { |
*rune = c; |
return 1; |
} |
/* |
* two character sequence |
* 0080-07FF => T2 Tx |
*/ |
c1 = *(unsigned char*)(str+1) ^ Tx; |
if(c1 & Testx) |
goto bad; |
if(c < T3) { |
if(c < T2) |
goto bad; |
l = ((c << Bitx) | c1) & Rune2; |
if(l <= Rune1) |
goto bad; |
*rune = l; |
return 2; |
} |
/* |
* three character sequence |
* 0800-FFFF => T3 Tx Tx |
*/ |
c2 = *(unsigned char*)(str+2) ^ Tx; |
if(c2 & Testx) |
goto bad; |
if(c < T4) { |
l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3; |
if(l <= Rune2) |
goto bad; |
*rune = l; |
return 3; |
} |
/* |
* four character sequence (21-bit value) |
* 10000-1FFFFF => T4 Tx Tx Tx |
*/ |
c3 = *(unsigned char*)(str+3) ^ Tx; |
if (c3 & Testx) |
goto bad; |
if (c < T5) { |
l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4; |
if (l <= Rune3) |
goto bad; |
*rune = l; |
return 4; |
} |
/* |
* Support for 5-byte or longer UTF-8 would go here, but |
* since we don't have that, we'll just fall through to bad. |
*/ |
/* |
* bad decoding |
*/ |
bad: |
*rune = Bad; |
return 1; |
} |
int |
runetochar(char *str, int *rune) |
{ |
/* Runes are signed, so convert to unsigned for range check. */ |
unsigned long c; |
/* |
* one character sequence |
* 00000-0007F => 00-7F |
*/ |
c = *rune; |
if(c <= Rune1) { |
str[0] = c; |
return 1; |
} |
/* |
* two character sequence |
* 0080-07FF => T2 Tx |
*/ |
if(c <= Rune2) { |
str[0] = T2 | (c >> 1*Bitx); |
str[1] = Tx | (c & Maskx); |
return 2; |
} |
/* |
* If the Rune is out of range, convert it to the error rune. |
* Do this test here because the error rune encodes to three bytes. |
* Doing it earlier would duplicate work, since an out of range |
* Rune wouldn't have fit in one or two bytes. |
*/ |
if (c > Runemax) |
c = Runeerror; |
/* |
* three character sequence |
* 0800-FFFF => T3 Tx Tx |
*/ |
if (c <= Rune3) { |
str[0] = T3 | (c >> 2*Bitx); |
str[1] = Tx | ((c >> 1*Bitx) & Maskx); |
str[2] = Tx | (c & Maskx); |
return 3; |
} |
/* |
* four character sequence (21-bit value) |
* 10000-1FFFFF => T4 Tx Tx Tx |
*/ |
str[0] = T4 | (c >> 3*Bitx); |
str[1] = Tx | ((c >> 2*Bitx) & Maskx); |
str[2] = Tx | ((c >> 1*Bitx) & Maskx); |
str[3] = Tx | (c & Maskx); |
return 4; |
} |
int |
runelen(int c) |
{ |
char str[10]; |
return runetochar(str, &c); |
} |
float fz_atof(const char *s) |
{ |
double d; |
/* The errno voodoo here checks for us reading numbers that are too |
* big to fit into a double. The checks for FLT_MAX ensure that we |
* don't read a number that's OK as a double and then become invalid |
* as we convert to a float. */ |
errno = 0; |
d = strtod(s, NULL); |
if (errno == ERANGE || d > FLT_MAX || d < -FLT_MAX) { |
/* Return 1.0, as it's a small known value that won't cause a |
* divide by 0. */ |
return 1.0; |
} |
return (float)d; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/base_time.c |
---|
0,0 → 1,42 |
#ifdef _WIN32 |
#include <time.h> |
#include <winsock2.h> |
#include <windows.h> |
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) |
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 |
#else |
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL |
#endif |
struct timeval; |
int gettimeofday(struct timeval *tv, struct timezone *tz) |
{ |
FILETIME ft; |
unsigned __int64 tmpres = 0; |
if (tv) |
{ |
GetSystemTimeAsFileTime(&ft); |
tmpres |= ft.dwHighDateTime; |
tmpres <<= 32; |
tmpres |= ft.dwLowDateTime; |
tmpres /= 10; /*convert into microseconds*/ |
/*converting file time to unix epoch*/ |
tmpres -= DELTA_EPOCH_IN_MICROSECS; |
tv->tv_sec = (long)(tmpres / 1000000UL); |
tv->tv_usec = (long)(tmpres % 1000000UL); |
} |
return 0; |
} |
#else |
void fz_gettimeofday_dummy() { } |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/crypt_aes.c |
---|
0,0 → 1,565 |
/* |
* FIPS-197 compliant AES implementation |
* |
* Copyright (C) 2006-2007 Christophe Devine |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* * Redistributions of source code _must_ retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* * Redistributions in binary form may or may not reproduce the above |
* copyright notice, this list of conditions and the following |
* disclaimer in the documentation and/or other materials provided |
* with the distribution. |
* * Neither the name of XySSL nor the names of its contributors may be |
* used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/* |
* The AES block cipher was designed by Vincent Rijmen and Joan Daemen. |
* |
* http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf |
* http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf |
*/ |
#include "fitz.h" |
#define aes_context fz_aes |
/* AES block cipher implementation from XYSSL */ |
/* |
* 32-bit integer manipulation macros (little endian) |
*/ |
#ifndef GET_ULONG_LE |
#define GET_ULONG_LE(n,b,i) \ |
{ \ |
(n) = ( (unsigned long) (b)[(i)] ) \ |
| ( (unsigned long) (b)[(i) + 1] << 8 ) \ |
| ( (unsigned long) (b)[(i) + 2] << 16 ) \ |
| ( (unsigned long) (b)[(i) + 3] << 24 ); \ |
} |
#endif |
#ifndef PUT_ULONG_LE |
#define PUT_ULONG_LE(n,b,i) \ |
{ \ |
(b)[(i) ] = (unsigned char) ( (n) ); \ |
(b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ |
(b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ |
(b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ |
} |
#endif |
/* |
* Forward S-box & tables |
*/ |
static unsigned char FSb[256]; |
static unsigned long FT0[256]; |
static unsigned long FT1[256]; |
static unsigned long FT2[256]; |
static unsigned long FT3[256]; |
/* |
* Reverse S-box & tables |
*/ |
static unsigned char RSb[256]; |
static unsigned long RT0[256]; |
static unsigned long RT1[256]; |
static unsigned long RT2[256]; |
static unsigned long RT3[256]; |
/* |
* Round constants |
*/ |
static unsigned long RCON[10]; |
/* |
* Tables generation code |
*/ |
#define ROTL8(x) ( ( x << 8 ) & 0xFFFFFFFF ) | ( x >> 24 ) |
#define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) ) |
#define MUL(x,y) ( ( x && y ) ? pow[(log[x]+log[y]) % 255] : 0 ) |
static int aes_init_done = 0; |
static void aes_gen_tables( void ) |
{ |
int i, x, y, z; |
int pow[256]; |
int log[256]; |
/* |
* compute pow and log tables over GF(2^8) |
*/ |
for( i = 0, x = 1; i < 256; i++ ) |
{ |
pow[i] = x; |
log[x] = i; |
x = ( x ^ XTIME( x ) ) & 0xFF; |
} |
/* |
* calculate the round constants |
*/ |
for( i = 0, x = 1; i < 10; i++ ) |
{ |
RCON[i] = (unsigned long) x; |
x = XTIME( x ) & 0xFF; |
} |
/* |
* generate the forward and reverse S-boxes |
*/ |
FSb[0x00] = 0x63; |
RSb[0x63] = 0x00; |
for( i = 1; i < 256; i++ ) |
{ |
x = pow[255 - log[i]]; |
y = x; y = ( (y << 1) | (y >> 7) ) & 0xFF; |
x ^= y; y = ( (y << 1) | (y >> 7) ) & 0xFF; |
x ^= y; y = ( (y << 1) | (y >> 7) ) & 0xFF; |
x ^= y; y = ( (y << 1) | (y >> 7) ) & 0xFF; |
x ^= y ^ 0x63; |
FSb[i] = (unsigned char) x; |
RSb[x] = (unsigned char) i; |
} |
/* |
* generate the forward and reverse tables |
*/ |
for( i = 0; i < 256; i++ ) |
{ |
x = FSb[i]; |
y = XTIME( x ) & 0xFF; |
z = ( y ^ x ) & 0xFF; |
FT0[i] = ( (unsigned long) y ) ^ |
( (unsigned long) x << 8 ) ^ |
( (unsigned long) x << 16 ) ^ |
( (unsigned long) z << 24 ); |
FT1[i] = ROTL8( FT0[i] ); |
FT2[i] = ROTL8( FT1[i] ); |
FT3[i] = ROTL8( FT2[i] ); |
x = RSb[i]; |
RT0[i] = ( (unsigned long) MUL( 0x0E, x ) ) ^ |
( (unsigned long) MUL( 0x09, x ) << 8 ) ^ |
( (unsigned long) MUL( 0x0D, x ) << 16 ) ^ |
( (unsigned long) MUL( 0x0B, x ) << 24 ); |
RT1[i] = ROTL8( RT0[i] ); |
RT2[i] = ROTL8( RT1[i] ); |
RT3[i] = ROTL8( RT2[i] ); |
} |
} |
/* |
* AES key schedule (encryption) |
*/ |
void aes_setkey_enc( aes_context *ctx, const unsigned char *key, int keysize ) |
{ |
int i; |
unsigned long *RK; |
#if !defined(XYSSL_AES_ROM_TABLES) |
if( aes_init_done == 0 ) |
{ |
aes_gen_tables(); |
aes_init_done = 1; |
} |
#endif |
switch( keysize ) |
{ |
case 128: ctx->nr = 10; break; |
case 192: ctx->nr = 12; break; |
case 256: ctx->nr = 14; break; |
default : return; |
} |
#if defined(PADLOCK_ALIGN16) |
ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); |
#else |
ctx->rk = RK = ctx->buf; |
#endif |
for( i = 0; i < (keysize >> 5); i++ ) |
{ |
GET_ULONG_LE( RK[i], key, i << 2 ); |
} |
switch( ctx->nr ) |
{ |
case 10: |
for( i = 0; i < 10; i++, RK += 4 ) |
{ |
RK[4] = RK[0] ^ RCON[i] ^ |
( FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ |
( FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( RK[3] ) & 0xFF ] << 24 ); |
RK[5] = RK[1] ^ RK[4]; |
RK[6] = RK[2] ^ RK[5]; |
RK[7] = RK[3] ^ RK[6]; |
} |
break; |
case 12: |
for( i = 0; i < 8; i++, RK += 6 ) |
{ |
RK[6] = RK[0] ^ RCON[i] ^ |
( FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ |
( FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( RK[5] ) & 0xFF ] << 24 ); |
RK[7] = RK[1] ^ RK[6]; |
RK[8] = RK[2] ^ RK[7]; |
RK[9] = RK[3] ^ RK[8]; |
RK[10] = RK[4] ^ RK[9]; |
RK[11] = RK[5] ^ RK[10]; |
} |
break; |
case 14: |
for( i = 0; i < 7; i++, RK += 8 ) |
{ |
RK[8] = RK[0] ^ RCON[i] ^ |
( FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ |
( FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( RK[7] ) & 0xFF ] << 24 ); |
RK[9] = RK[1] ^ RK[8]; |
RK[10] = RK[2] ^ RK[9]; |
RK[11] = RK[3] ^ RK[10]; |
RK[12] = RK[4] ^ |
( FSb[ ( RK[11] ) & 0xFF ] ) ^ |
( FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); |
RK[13] = RK[5] ^ RK[12]; |
RK[14] = RK[6] ^ RK[13]; |
RK[15] = RK[7] ^ RK[14]; |
} |
break; |
default: |
break; |
} |
} |
/* |
* AES key schedule (decryption) |
*/ |
void aes_setkey_dec( aes_context *ctx, const unsigned char *key, int keysize ) |
{ |
int i, j; |
aes_context cty; |
unsigned long *RK; |
unsigned long *SK; |
switch( keysize ) |
{ |
case 128: ctx->nr = 10; break; |
case 192: ctx->nr = 12; break; |
case 256: ctx->nr = 14; break; |
default : return; |
} |
#if defined(PADLOCK_ALIGN16) |
ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); |
#else |
ctx->rk = RK = ctx->buf; |
#endif |
aes_setkey_enc( &cty, key, keysize ); |
SK = cty.rk + cty.nr * 4; |
*RK++ = *SK++; |
*RK++ = *SK++; |
*RK++ = *SK++; |
*RK++ = *SK++; |
for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) |
{ |
for( j = 0; j < 4; j++, SK++ ) |
{ |
*RK++ = RT0[ FSb[ ( *SK ) & 0xFF ] ] ^ |
RT1[ FSb[ ( *SK >> 8 ) & 0xFF ] ] ^ |
RT2[ FSb[ ( *SK >> 16 ) & 0xFF ] ] ^ |
RT3[ FSb[ ( *SK >> 24 ) & 0xFF ] ]; |
} |
} |
*RK++ = *SK++; |
*RK++ = *SK++; |
*RK++ = *SK++; |
*RK++ = *SK++; |
memset( &cty, 0, sizeof( aes_context ) ); |
} |
#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ |
{ \ |
X0 = *RK++ ^ FT0[ ( Y0 ) & 0xFF ] ^ \ |
FT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ |
FT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ |
FT3[ ( Y3 >> 24 ) & 0xFF ]; \ |
\ |
X1 = *RK++ ^ FT0[ ( Y1 ) & 0xFF ] ^ \ |
FT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ |
FT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ |
FT3[ ( Y0 >> 24 ) & 0xFF ]; \ |
\ |
X2 = *RK++ ^ FT0[ ( Y2 ) & 0xFF ] ^ \ |
FT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ |
FT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ |
FT3[ ( Y1 >> 24 ) & 0xFF ]; \ |
\ |
X3 = *RK++ ^ FT0[ ( Y3 ) & 0xFF ] ^ \ |
FT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ |
FT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ |
FT3[ ( Y2 >> 24 ) & 0xFF ]; \ |
} |
#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ |
{ \ |
X0 = *RK++ ^ RT0[ ( Y0 ) & 0xFF ] ^ \ |
RT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ |
RT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ |
RT3[ ( Y1 >> 24 ) & 0xFF ]; \ |
\ |
X1 = *RK++ ^ RT0[ ( Y1 ) & 0xFF ] ^ \ |
RT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ |
RT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ |
RT3[ ( Y2 >> 24 ) & 0xFF ]; \ |
\ |
X2 = *RK++ ^ RT0[ ( Y2 ) & 0xFF ] ^ \ |
RT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ |
RT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ |
RT3[ ( Y3 >> 24 ) & 0xFF ]; \ |
\ |
X3 = *RK++ ^ RT0[ ( Y3 ) & 0xFF ] ^ \ |
RT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ |
RT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ |
RT3[ ( Y0 >> 24 ) & 0xFF ]; \ |
} |
/* |
* AES-ECB block encryption/decryption |
*/ |
void aes_crypt_ecb( aes_context *ctx, |
int mode, |
const unsigned char input[16], |
unsigned char output[16] ) |
{ |
int i; |
unsigned long *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; |
#if defined(XYSSL_PADLOCK_C) && defined(XYSSL_HAVE_X86) |
if( padlock_supports( PADLOCK_ACE ) ) |
{ |
if( padlock_xcryptecb( ctx, mode, input, output ) == 0 ) |
return; |
} |
#endif |
RK = ctx->rk; |
GET_ULONG_LE( X0, input, 0 ); X0 ^= *RK++; |
GET_ULONG_LE( X1, input, 4 ); X1 ^= *RK++; |
GET_ULONG_LE( X2, input, 8 ); X2 ^= *RK++; |
GET_ULONG_LE( X3, input, 12 ); X3 ^= *RK++; |
if( mode == AES_DECRYPT ) |
{ |
for( i = (ctx->nr >> 1) - 1; i > 0; i-- ) |
{ |
AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); |
AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); |
} |
AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); |
X0 = *RK++ ^ ( RSb[ ( Y0 ) & 0xFF ] ) ^ |
( RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ |
( RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ |
( RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); |
X1 = *RK++ ^ ( RSb[ ( Y1 ) & 0xFF ] ) ^ |
( RSb[ ( Y0 >>8 ) & 0xFF ] << 8 ) ^ |
( RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ |
( RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); |
X2 = *RK++ ^ ( RSb[ ( Y2 ) & 0xFF ] ) ^ |
( RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ |
( RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ |
( RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); |
X3 = *RK++ ^ ( RSb[ ( Y3 ) & 0xFF ] ) ^ |
( RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ |
( RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ |
( RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); |
} |
else /* AES_ENCRYPT */ |
{ |
for( i = (ctx->nr >> 1) - 1; i > 0; i-- ) |
{ |
AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); |
AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); |
} |
AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); |
X0 = *RK++ ^ ( FSb[ ( Y0 ) & 0xFF ] ) ^ |
( FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); |
X1 = *RK++ ^ ( FSb[ ( Y1 ) & 0xFF ] ) ^ |
( FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); |
X2 = *RK++ ^ ( FSb[ ( Y2 ) & 0xFF ] ) ^ |
( FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); |
X3 = *RK++ ^ ( FSb[ ( Y3 ) & 0xFF ] ) ^ |
( FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ |
( FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ |
( FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); |
} |
PUT_ULONG_LE( X0, output, 0 ); |
PUT_ULONG_LE( X1, output, 4 ); |
PUT_ULONG_LE( X2, output, 8 ); |
PUT_ULONG_LE( X3, output, 12 ); |
} |
/* |
* AES-CBC buffer encryption/decryption |
*/ |
void aes_crypt_cbc( aes_context *ctx, |
int mode, |
int length, |
unsigned char iv[16], |
const unsigned char *input, |
unsigned char *output ) |
{ |
int i; |
unsigned char temp[16]; |
#if defined(XYSSL_PADLOCK_C) && defined(XYSSL_HAVE_X86) |
if( padlock_supports( PADLOCK_ACE ) ) |
{ |
if( padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) |
return; |
} |
#endif |
if( mode == AES_DECRYPT ) |
{ |
while( length > 0 ) |
{ |
memcpy( temp, input, 16 ); |
aes_crypt_ecb( ctx, mode, input, output ); |
for( i = 0; i < 16; i++ ) |
output[i] = (unsigned char)( output[i] ^ iv[i] ); |
memcpy( iv, temp, 16 ); |
input += 16; |
output += 16; |
length -= 16; |
} |
} |
else |
{ |
while( length > 0 ) |
{ |
for( i = 0; i < 16; i++ ) |
output[i] = (unsigned char)( input[i] ^ iv[i] ); |
aes_crypt_ecb( ctx, mode, output, output ); |
memcpy( iv, output, 16 ); |
input += 16; |
output += 16; |
length -= 16; |
} |
} |
} |
/* |
* AES-CFB buffer encryption/decryption |
*/ |
void aes_crypt_cfb( aes_context *ctx, |
int mode, |
int length, |
int *iv_off, |
unsigned char iv[16], |
const unsigned char *input, |
unsigned char *output ) |
{ |
int c, n = *iv_off; |
if( mode == AES_DECRYPT ) |
{ |
while( length-- ) |
{ |
if( n == 0 ) |
aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); |
c = *input++; |
*output++ = (unsigned char)( c ^ iv[n] ); |
iv[n] = (unsigned char) c; |
n = (n + 1) & 0x0F; |
} |
} |
else |
{ |
while( length-- ) |
{ |
if( n == 0 ) |
aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); |
iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); |
n = (n + 1) & 0x0F; |
} |
} |
*iv_off = n; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/crypt_arc4.c |
---|
0,0 → 1,98 |
/* This code illustrates a sample implementation |
* of the Arcfour algorithm |
* Copyright (c) April 29, 1997 Kalle Kaukonen. |
* All Rights Reserved. |
* |
* Redistribution and use in source and binary forms, with or |
* without modification, are permitted provided that this copyright |
* notice and disclaimer are retained. |
* |
* THIS SOFTWARE IS PROVIDED BY KALLE KAUKONEN AND CONTRIBUTORS ``AS |
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALLE |
* KAUKONEN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "fitz.h" |
void |
fz_arc4_init(fz_arc4 *arc4, const unsigned char *key, const unsigned keylen) |
{ |
unsigned int t, u; |
unsigned int keyindex; |
unsigned int stateindex; |
unsigned char *state; |
unsigned int counter; |
state = arc4->state; |
arc4->x = 0; |
arc4->y = 0; |
for (counter = 0; counter < 256; counter++) |
{ |
state[counter] = counter; |
} |
keyindex = 0; |
stateindex = 0; |
for (counter = 0; counter < 256; counter++) |
{ |
t = state[counter]; |
stateindex = (stateindex + key[keyindex] + t) & 0xff; |
u = state[stateindex]; |
state[stateindex] = t; |
state[counter] = u; |
if (++keyindex >= keylen) |
{ |
keyindex = 0; |
} |
} |
} |
static unsigned char |
fz_arc4_next(fz_arc4 *arc4) |
{ |
unsigned int x; |
unsigned int y; |
unsigned int sx, sy; |
unsigned char *state; |
state = arc4->state; |
x = (arc4->x + 1) & 0xff; |
sx = state[x]; |
y = (sx + arc4->y) & 0xff; |
sy = state[y]; |
arc4->x = x; |
arc4->y = y; |
state[y] = sx; |
state[x] = sy; |
return state[(sx + sy) & 0xff]; |
} |
void |
fz_arc4_encrypt(fz_arc4 *arc4, unsigned char *dest, const unsigned char *src, const unsigned len) |
{ |
unsigned int i; |
for (i = 0; i < len; i++) |
{ |
unsigned char x; |
x = fz_arc4_next(arc4); |
dest[i] = src[i] ^ x; |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/crypt_md5.c |
---|
0,0 → 1,272 |
/* |
MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm |
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. |
All rights reserved. |
License to copy and use this software is granted provided that it |
is identified as the "RSA Data Security, Inc. MD5 Message-Digest |
Algorithm" in all material mentioning or referencing this software |
or this function. |
License is also granted to make and use derivative works provided |
that such works are identified as "derived from the RSA Data |
Security, Inc. MD5 Message-Digest Algorithm" in all material |
mentioning or referencing the derived work. |
RSA Data Security, Inc. makes no representations concerning either |
the merchantability of this software or the suitability of this |
software for any particular purpose. It is provided "as is" |
without express or implied warranty of any kind. |
These notices must be retained in any copies of any part of this |
documentation and/or software. |
*/ |
#include "fitz.h" |
/* Constants for MD5Transform routine */ |
enum |
{ |
S11 = 7, S12 = 12, S13 = 17, S14 = 22, |
S21 = 5, S22 = 9, S23 = 14, S24 = 20, |
S31 = 4, S32 = 11, S33 = 16, S34 = 23, |
S41 = 6, S42 = 10, S43 = 15, S44 = 21 |
}; |
static void encode(unsigned char *, const unsigned int *, const unsigned); |
static void decode(unsigned int *, const unsigned char *, const unsigned); |
static void transform(unsigned int state[4], const unsigned char block[64]); |
static unsigned char padding[64] = |
{ |
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
}; |
/* F, G, H and I are basic MD5 functions */ |
#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) |
#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) |
#define H(x, y, z) ((x) ^ (y) ^ (z)) |
#define I(x, y, z) ((y) ^ ((x) | (~z))) |
/* ROTATE rotates x left n bits */ |
#define ROTATE(x, n) (((x) << (n)) | ((x) >> (32-(n)))) |
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. |
* Rotation is separate from addition to prevent recomputation. |
*/ |
#define FF(a, b, c, d, x, s, ac) { \ |
(a) += F ((b), (c), (d)) + (x) + (unsigned int)(ac); \ |
(a) = ROTATE ((a), (s)); \ |
(a) += (b); \ |
} |
#define GG(a, b, c, d, x, s, ac) { \ |
(a) += G ((b), (c), (d)) + (x) + (unsigned int)(ac); \ |
(a) = ROTATE ((a), (s)); \ |
(a) += (b); \ |
} |
#define HH(a, b, c, d, x, s, ac) { \ |
(a) += H ((b), (c), (d)) + (x) + (unsigned int)(ac); \ |
(a) = ROTATE ((a), (s)); \ |
(a) += (b); \ |
} |
#define II(a, b, c, d, x, s, ac) { \ |
(a) += I ((b), (c), (d)) + (x) + (unsigned int)(ac); \ |
(a) = ROTATE ((a), (s)); \ |
(a) += (b); \ |
} |
static void encode(unsigned char *output, const unsigned int *input, const unsigned len) |
{ |
unsigned i, j; |
for (i = 0, j = 0; j < len; i++, j += 4) |
{ |
output[j] = (unsigned char)(input[i] & 0xff); |
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); |
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); |
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); |
} |
} |
static void decode(unsigned int *output, const unsigned char *input, const unsigned len) |
{ |
unsigned i, j; |
for (i = 0, j = 0; j < len; i++, j += 4) |
{ |
output[i] = ((unsigned int)input[j]) | |
(((unsigned int)input[j+1]) << 8) | |
(((unsigned int)input[j+2]) << 16) | |
(((unsigned int)input[j+3]) << 24); |
} |
} |
static void transform(unsigned int state[4], const unsigned char block[64]) |
{ |
unsigned int a = state[0]; |
unsigned int b = state[1]; |
unsigned int c = state[2]; |
unsigned int d = state[3]; |
unsigned int x[16]; |
decode(x, block, 64); |
/* Round 1 */ |
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ |
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ |
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ |
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ |
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ |
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ |
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ |
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ |
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ |
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ |
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ |
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ |
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ |
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ |
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ |
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ |
/* Round 2 */ |
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ |
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ |
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ |
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ |
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ |
GG (d, a, b, c, x[10], S22, 0x02441453); /* 22 */ |
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ |
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ |
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ |
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ |
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ |
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ |
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ |
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ |
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ |
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ |
/* Round 3 */ |
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ |
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ |
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ |
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ |
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ |
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ |
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ |
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ |
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ |
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ |
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ |
HH (b, c, d, a, x[ 6], S34, 0x04881d05); /* 44 */ |
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ |
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ |
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ |
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ |
/* Round 4 */ |
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ |
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ |
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ |
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ |
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ |
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ |
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ |
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ |
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ |
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ |
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ |
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ |
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ |
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ |
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ |
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ |
state[0] += a; |
state[1] += b; |
state[2] += c; |
state[3] += d; |
/* Zeroize sensitive information */ |
memset(x, 0, sizeof (x)); |
} |
/* MD5 initialization. Begins an MD5 operation, writing a new context. */ |
void fz_md5_init(fz_md5 *context) |
{ |
context->count[0] = context->count[1] = 0; |
/* Load magic initialization constants */ |
context->state[0] = 0x67452301; |
context->state[1] = 0xefcdab89; |
context->state[2] = 0x98badcfe; |
context->state[3] = 0x10325476; |
} |
/* MD5 block update operation. Continues an MD5 message-digest operation, |
* processing another message block, and updating the context. |
*/ |
void fz_md5_update(fz_md5 *context, const unsigned char *input, const unsigned inlen) |
{ |
unsigned i, index, partlen; |
/* Compute number of bytes mod 64 */ |
index = (unsigned)((context->count[0] >> 3) & 0x3F); |
/* Update number of bits */ |
context->count[0] += (unsigned int) inlen << 3; |
if (context->count[0] < (unsigned int) inlen << 3) |
context->count[1] ++; |
context->count[1] += (unsigned int) inlen >> 29; |
partlen = 64 - index; |
/* Transform as many times as possible. */ |
if (inlen >= partlen) |
{ |
memcpy(context->buffer + index, input, partlen); |
transform(context->state, context->buffer); |
for (i = partlen; i + 63 < inlen; i += 64) |
transform(context->state, input + i); |
index = 0; |
} |
else |
{ |
i = 0; |
} |
/* Buffer remaining input */ |
memcpy(context->buffer + index, input + i, inlen - i); |
} |
/* MD5 finalization. Ends an MD5 message-digest operation, writing the |
* the message digest and zeroizing the context. |
*/ |
void fz_md5_final(fz_md5 *context, unsigned char digest[16]) |
{ |
unsigned char bits[8]; |
unsigned index, padlen; |
/* Save number of bits */ |
encode(bits, context->count, 8); |
/* Pad out to 56 mod 64 */ |
index = (unsigned)((context->count[0] >> 3) & 0x3f); |
padlen = index < 56 ? 56 - index : 120 - index; |
fz_md5_update(context, padding, padlen); |
/* Append length (before padding) */ |
fz_md5_update(context, bits, 8); |
/* Store state in digest */ |
encode(digest, context->state, 16); |
/* Zeroize sensitive information */ |
memset(context, 0, sizeof(fz_md5)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/crypt_sha2.c |
---|
0,0 → 1,182 |
/* |
This code is based on the code found from 7-Zip, which has a modified |
version of the SHA-256 found from Crypto++ <http://www.cryptopp.com/>. |
The code was modified a little to fit into liblzma and fitz. |
This file has been put into the public domain. |
You can do whatever you want with this file. |
*/ |
#include "fitz.h" |
static inline int isbigendian(void) |
{ |
static const int one = 1; |
return *(char*)&one == 0; |
} |
static inline unsigned int bswap32(unsigned int num) |
{ |
if (!isbigendian()) |
{ |
return ( (((num) << 24)) |
| (((num) << 8) & 0x00FF0000) |
| (((num) >> 8) & 0x0000FF00) |
| (((num) >> 24)) ); |
} |
return num; |
} |
/* At least on x86, GCC is able to optimize this to a rotate instruction. */ |
#define rotr_32(num, amount) ((num) >> (amount) | (num) << (32 - (amount))) |
#define blk0(i) (W[i] = data[i]) |
#define blk2(i) (W[i & 15] += s1(W[(i - 2) & 15]) + W[(i - 7) & 15] \ |
+ s0(W[(i - 15) & 15])) |
#define Ch(x, y, z) (z ^ (x & (y ^ z))) |
#define Maj(x, y, z) ((x & y) | (z & (x | y))) |
#define a(i) T[(0 - i) & 7] |
#define b(i) T[(1 - i) & 7] |
#define c(i) T[(2 - i) & 7] |
#define d(i) T[(3 - i) & 7] |
#define e(i) T[(4 - i) & 7] |
#define f(i) T[(5 - i) & 7] |
#define g(i) T[(6 - i) & 7] |
#define h(i) T[(7 - i) & 7] |
#define R(i) \ |
h(i) += S1(e(i)) + Ch(e(i), f(i), g(i)) + SHA256_K[i + j] \ |
+ (j ? blk2(i) : blk0(i)); \ |
d(i) += h(i); \ |
h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) |
#define S0(x) (rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22)) |
#define S1(x) (rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25)) |
#define s0(x) (rotr_32(x, 7) ^ rotr_32(x, 18) ^ (x >> 3)) |
#define s1(x) (rotr_32(x, 17) ^ rotr_32(x, 19) ^ (x >> 10)) |
static const unsigned int SHA256_K[64] = { |
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, |
0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, |
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, |
0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, |
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, |
0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, |
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, |
0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, |
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, |
0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, |
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, |
0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, |
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, |
0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, |
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, |
0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, |
}; |
static void |
transform(unsigned int state[8], const unsigned int data_xe[16]) |
{ |
unsigned int data[16]; |
unsigned int W[16]; |
unsigned int T[8]; |
unsigned int j; |
/* ensure big-endian integers */ |
for (j = 0; j < 16; j++) |
data[j] = bswap32(data_xe[j]); |
/* Copy state[] to working vars. */ |
memcpy(T, state, sizeof(T)); |
/* 64 operations, partially loop unrolled */ |
for (j = 0; j < 64; j += 16) { |
R( 0); R( 1); R( 2); R( 3); |
R( 4); R( 5); R( 6); R( 7); |
R( 8); R( 9); R(10); R(11); |
R(12); R(13); R(14); R(15); |
} |
/* Add the working vars back into state[]. */ |
state[0] += a(0); |
state[1] += b(0); |
state[2] += c(0); |
state[3] += d(0); |
state[4] += e(0); |
state[5] += f(0); |
state[6] += g(0); |
state[7] += h(0); |
} |
void fz_sha256_init(fz_sha256 *context) |
{ |
context->count[0] = context->count[1] = 0; |
context->state[0] = 0x6A09E667; |
context->state[1] = 0xBB67AE85; |
context->state[2] = 0x3C6EF372; |
context->state[3] = 0xA54FF53A; |
context->state[4] = 0x510E527F; |
context->state[5] = 0x9B05688C; |
context->state[6] = 0x1F83D9AB; |
context->state[7] = 0x5BE0CD19; |
} |
void fz_sha256_update(fz_sha256 *context, const unsigned char *input, unsigned int inlen) |
{ |
/* Copy the input data into a properly aligned temporary buffer. |
* This way we can be called with arbitrarily sized buffers |
* (no need to be multiple of 64 bytes), and the code works also |
* on architectures that don't allow unaligned memory access. */ |
while (inlen > 0) |
{ |
const unsigned int copy_start = context->count[0] & 0x3F; |
unsigned int copy_size = 64 - copy_start; |
if (copy_size > inlen) |
copy_size = inlen; |
memcpy(context->buffer.u8 + copy_start, input, copy_size); |
input += copy_size; |
inlen -= copy_size; |
context->count[0] += copy_size; |
/* carry overflow from low to high */ |
if (context->count[0] < copy_size) |
context->count[1]++; |
if ((context->count[0] & 0x3F) == 0) |
transform(context->state, context->buffer.u32); |
} |
} |
void fz_sha256_final(fz_sha256 *context, unsigned char digest[32]) |
{ |
/* Add padding as described in RFC 3174 (it describes SHA-1 but |
* the same padding style is used for SHA-256 too). */ |
unsigned int j = context->count[0] & 0x3F; |
context->buffer.u8[j++] = 0x80; |
while (j != 56) |
{ |
if (j == 64) |
{ |
transform(context->state, context->buffer.u32); |
j = 0; |
} |
context->buffer.u8[j++] = 0x00; |
} |
/* Convert the message size from bytes to bits. */ |
context->count[1] = (context->count[1] << 3) + (context->count[0] >> 29); |
context->count[0] = context->count[0] << 3; |
context->buffer.u32[14] = bswap32(context->count[1]); |
context->buffer.u32[15] = bswap32(context->count[0]); |
transform(context->state, context->buffer.u32); |
for (j = 0; j < 8; j++) |
((unsigned int *)digest)[j] = bswap32(context->state[j]); |
memset(context, 0, sizeof(fz_sha256)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/dev_bbox.c |
---|
0,0 → 1,82 |
#include "fitz.h" |
/* TODO: add clip stack and use to intersect bboxes */ |
static void |
fz_bbox_fill_path(void *user, fz_path *path, int even_odd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_bound_path(path, NULL, ctm)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_stroke_path(void *user, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_bound_path(path, stroke, ctm)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_fill_text(void *user, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_bound_text(text, ctm)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_bound_text(text, ctm)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_fill_shade(void *user, fz_shade *shade, fz_matrix ctm, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_bound_shade(shade, ctm)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_fill_image(void *user, fz_pixmap *image, fz_matrix ctm, float alpha) |
{ |
fz_bbox *result = user; |
fz_bbox bbox = fz_round_rect(fz_transform_rect(ctm, fz_unit_rect)); |
*result = fz_union_bbox(*result, bbox); |
} |
static void |
fz_bbox_fill_image_mask(void *user, fz_pixmap *image, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_bbox_fill_image(user, image, ctm, alpha); |
} |
fz_device * |
fz_new_bbox_device(fz_bbox *result) |
{ |
fz_device *dev; |
dev = fz_new_device(result); |
dev->fill_path = fz_bbox_fill_path; |
dev->stroke_path = fz_bbox_stroke_path; |
dev->fill_text = fz_bbox_fill_text; |
dev->stroke_text = fz_bbox_stroke_text; |
dev->fill_shade = fz_bbox_fill_shade; |
dev->fill_image = fz_bbox_fill_image; |
dev->fill_image_mask = fz_bbox_fill_image_mask; |
*result = fz_empty_bbox; |
return dev; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/dev_list.c |
---|
0,0 → 1,660 |
#include "fitz.h" |
typedef struct fz_display_node_s fz_display_node; |
#define STACK_SIZE 96 |
typedef enum fz_display_command_e |
{ |
FZ_CMD_FILL_PATH, |
FZ_CMD_STROKE_PATH, |
FZ_CMD_CLIP_PATH, |
FZ_CMD_CLIP_STROKE_PATH, |
FZ_CMD_FILL_TEXT, |
FZ_CMD_STROKE_TEXT, |
FZ_CMD_CLIP_TEXT, |
FZ_CMD_CLIP_STROKE_TEXT, |
FZ_CMD_IGNORE_TEXT, |
FZ_CMD_FILL_SHADE, |
FZ_CMD_FILL_IMAGE, |
FZ_CMD_FILL_IMAGE_MASK, |
FZ_CMD_CLIP_IMAGE_MASK, |
FZ_CMD_POP_CLIP, |
FZ_CMD_BEGIN_MASK, |
FZ_CMD_END_MASK, |
FZ_CMD_BEGIN_GROUP, |
FZ_CMD_END_GROUP, |
FZ_CMD_BEGIN_TILE, |
FZ_CMD_END_TILE |
} fz_display_command; |
struct fz_display_node_s |
{ |
fz_display_command cmd; |
fz_display_node *next; |
fz_rect rect; |
union { |
fz_path *path; |
fz_text *text; |
fz_shade *shade; |
fz_pixmap *image; |
int blendmode; |
} item; |
fz_stroke_state *stroke; |
int flag; /* even_odd, accumulate, isolated/knockout... */ |
fz_matrix ctm; |
fz_colorspace *colorspace; |
float alpha; |
float color[FZ_MAX_COLORS]; |
}; |
struct fz_display_list_s |
{ |
fz_display_node *first; |
fz_display_node *last; |
int top; |
struct { |
fz_rect *update; |
fz_rect rect; |
} stack[STACK_SIZE]; |
int tiled; |
}; |
enum { ISOLATED = 1, KNOCKOUT = 2 }; |
static fz_display_node * |
fz_new_display_node(fz_display_command cmd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
int i; |
node = fz_malloc(sizeof(fz_display_node)); |
node->cmd = cmd; |
node->next = NULL; |
node->rect = fz_empty_rect; |
node->item.path = NULL; |
node->stroke = NULL; |
node->flag = 0; |
node->ctm = ctm; |
if (colorspace) |
{ |
node->colorspace = fz_keep_colorspace(colorspace); |
if (color) |
{ |
for (i = 0; i < node->colorspace->n; i++) |
node->color[i] = color[i]; |
} |
} |
else |
{ |
node->colorspace = NULL; |
} |
node->alpha = alpha; |
return node; |
} |
static fz_stroke_state * |
fz_clone_stroke_state(fz_stroke_state *stroke) |
{ |
fz_stroke_state *newstroke = fz_malloc(sizeof(fz_stroke_state)); |
*newstroke = *stroke; |
return newstroke; |
} |
static void |
fz_append_display_node(fz_display_list *list, fz_display_node *node) |
{ |
switch (node->cmd) |
{ |
case FZ_CMD_CLIP_PATH: |
case FZ_CMD_CLIP_STROKE_PATH: |
case FZ_CMD_CLIP_IMAGE_MASK: |
if (list->top < STACK_SIZE) |
{ |
list->stack[list->top].update = &node->rect; |
list->stack[list->top].rect = fz_empty_rect; |
} |
list->top++; |
break; |
case FZ_CMD_END_MASK: |
case FZ_CMD_CLIP_TEXT: |
case FZ_CMD_CLIP_STROKE_TEXT: |
if (list->top < STACK_SIZE) |
{ |
list->stack[list->top].update = NULL; |
list->stack[list->top].rect = fz_empty_rect; |
} |
list->top++; |
break; |
case FZ_CMD_BEGIN_TILE: |
list->tiled++; |
if (list->top > 0 && list->top < STACK_SIZE) |
{ |
list->stack[list->top-1].rect = fz_infinite_rect; |
} |
break; |
case FZ_CMD_END_TILE: |
list->tiled--; |
break; |
case FZ_CMD_END_GROUP: |
break; |
case FZ_CMD_POP_CLIP: |
if (list->top > STACK_SIZE) |
{ |
list->top--; |
node->rect = fz_infinite_rect; |
} |
else if (list->top > 0) |
{ |
fz_rect *update; |
list->top--; |
update = list->stack[list->top].update; |
if (list->tiled == 0) |
{ |
if (update != NULL) |
{ |
*update = fz_intersect_rect(*update, list->stack[list->top].rect); |
node->rect = *update; |
} |
else |
node->rect = list->stack[list->top].rect; |
} |
else |
node->rect = fz_infinite_rect; |
} |
/* fallthrough */ |
default: |
if (list->top > 0 && list->tiled == 0 && list->top <= STACK_SIZE) |
list->stack[list->top-1].rect = fz_union_rect(list->stack[list->top-1].rect, node->rect); |
break; |
} |
if (!list->first) |
{ |
list->first = node; |
list->last = node; |
} |
else |
{ |
list->last->next = node; |
list->last = node; |
} |
} |
static void |
fz_free_display_node(fz_display_node *node) |
{ |
switch (node->cmd) |
{ |
case FZ_CMD_FILL_PATH: |
case FZ_CMD_STROKE_PATH: |
case FZ_CMD_CLIP_PATH: |
case FZ_CMD_CLIP_STROKE_PATH: |
fz_free_path(node->item.path); |
break; |
case FZ_CMD_FILL_TEXT: |
case FZ_CMD_STROKE_TEXT: |
case FZ_CMD_CLIP_TEXT: |
case FZ_CMD_CLIP_STROKE_TEXT: |
case FZ_CMD_IGNORE_TEXT: |
fz_free_text(node->item.text); |
break; |
case FZ_CMD_FILL_SHADE: |
fz_drop_shade(node->item.shade); |
break; |
case FZ_CMD_FILL_IMAGE: |
case FZ_CMD_FILL_IMAGE_MASK: |
case FZ_CMD_CLIP_IMAGE_MASK: |
fz_drop_pixmap(node->item.image); |
break; |
case FZ_CMD_POP_CLIP: |
case FZ_CMD_BEGIN_MASK: |
case FZ_CMD_END_MASK: |
case FZ_CMD_BEGIN_GROUP: |
case FZ_CMD_END_GROUP: |
case FZ_CMD_BEGIN_TILE: |
case FZ_CMD_END_TILE: |
break; |
} |
if (node->stroke) |
fz_free(node->stroke); |
if (node->colorspace) |
fz_drop_colorspace(node->colorspace); |
fz_free(node); |
} |
static void |
fz_list_fill_path(void *user, fz_path *path, int even_odd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_FILL_PATH, ctm, colorspace, color, alpha); |
node->rect = fz_bound_path(path, NULL, ctm); |
node->item.path = fz_clone_path(path); |
node->flag = even_odd; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_stroke_path(void *user, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_STROKE_PATH, ctm, colorspace, color, alpha); |
node->rect = fz_bound_path(path, stroke, ctm); |
node->item.path = fz_clone_path(path); |
node->stroke = fz_clone_stroke_state(stroke); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_clip_path(void *user, fz_path *path, fz_rect *rect, int even_odd, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_CLIP_PATH, ctm, NULL, NULL, 0); |
node->rect = fz_bound_path(path, NULL, ctm); |
if (rect != NULL) |
node->rect = fz_intersect_rect(node->rect, *rect); |
node->item.path = fz_clone_path(path); |
node->flag = even_odd; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_clip_stroke_path(void *user, fz_path *path, fz_rect *rect, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_CLIP_STROKE_PATH, ctm, NULL, NULL, 0); |
node->rect = fz_bound_path(path, stroke, ctm); |
if (rect != NULL) |
node->rect = fz_intersect_rect(node->rect, *rect); |
node->item.path = fz_clone_path(path); |
node->stroke = fz_clone_stroke_state(stroke); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_fill_text(void *user, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_FILL_TEXT, ctm, colorspace, color, alpha); |
node->rect = fz_bound_text(text, ctm); |
node->item.text = fz_clone_text(text); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_STROKE_TEXT, ctm, colorspace, color, alpha); |
node->rect = fz_bound_text(text, ctm); |
node->item.text = fz_clone_text(text); |
node->stroke = fz_clone_stroke_state(stroke); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_clip_text(void *user, fz_text *text, fz_matrix ctm, int accumulate) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_CLIP_TEXT, ctm, NULL, NULL, 0); |
node->rect = fz_bound_text(text, ctm); |
node->item.text = fz_clone_text(text); |
node->flag = accumulate; |
/* when accumulating, be conservative about culling */ |
if (accumulate) |
node->rect = fz_infinite_rect; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_clip_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_CLIP_STROKE_TEXT, ctm, NULL, NULL, 0); |
node->rect = fz_bound_text(text, ctm); |
node->item.text = fz_clone_text(text); |
node->stroke = fz_clone_stroke_state(stroke); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_ignore_text(void *user, fz_text *text, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_IGNORE_TEXT, ctm, NULL, NULL, 0); |
node->rect = fz_bound_text(text, ctm); |
node->item.text = fz_clone_text(text); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_pop_clip(void *user) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_POP_CLIP, fz_identity, NULL, NULL, 0); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_fill_shade(void *user, fz_shade *shade, fz_matrix ctm, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_FILL_SHADE, ctm, NULL, NULL, alpha); |
node->rect = fz_bound_shade(shade, ctm); |
node->item.shade = fz_keep_shade(shade); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_fill_image(void *user, fz_pixmap *image, fz_matrix ctm, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_FILL_IMAGE, ctm, NULL, NULL, alpha); |
node->rect = fz_transform_rect(ctm, fz_unit_rect); |
node->item.image = fz_keep_pixmap(image); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_fill_image_mask(void *user, fz_pixmap *image, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_FILL_IMAGE_MASK, ctm, colorspace, color, alpha); |
node->rect = fz_transform_rect(ctm, fz_unit_rect); |
node->item.image = fz_keep_pixmap(image); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_clip_image_mask(void *user, fz_pixmap *image, fz_rect *rect, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_CLIP_IMAGE_MASK, ctm, NULL, NULL, 0); |
node->rect = fz_transform_rect(ctm, fz_unit_rect); |
if (rect != NULL) |
node->rect = fz_intersect_rect(node->rect, *rect); |
node->item.image = fz_keep_pixmap(image); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_begin_mask(void *user, fz_rect rect, int luminosity, fz_colorspace *colorspace, float *color) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_BEGIN_MASK, fz_identity, colorspace, color, 0); |
node->rect = rect; |
node->flag = luminosity; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_end_mask(void *user) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_END_MASK, fz_identity, NULL, NULL, 0); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_begin_group(void *user, fz_rect rect, int isolated, int knockout, int blendmode, float alpha) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_BEGIN_GROUP, fz_identity, NULL, NULL, alpha); |
node->rect = rect; |
node->item.blendmode = blendmode; |
node->flag |= isolated ? ISOLATED : 0; |
node->flag |= knockout ? KNOCKOUT : 0; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_end_group(void *user) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_END_GROUP, fz_identity, NULL, NULL, 0); |
fz_append_display_node(user, node); |
} |
static void |
fz_list_begin_tile(void *user, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_BEGIN_TILE, ctm, NULL, NULL, 0); |
node->rect = area; |
node->color[0] = xstep; |
node->color[1] = ystep; |
node->color[2] = view.x0; |
node->color[3] = view.y0; |
node->color[4] = view.x1; |
node->color[5] = view.y1; |
fz_append_display_node(user, node); |
} |
static void |
fz_list_end_tile(void *user) |
{ |
fz_display_node *node; |
node = fz_new_display_node(FZ_CMD_END_TILE, fz_identity, NULL, NULL, 0); |
fz_append_display_node(user, node); |
} |
fz_device * |
fz_new_list_device(fz_display_list *list) |
{ |
fz_device *dev = fz_new_device(list); |
dev->fill_path = fz_list_fill_path; |
dev->stroke_path = fz_list_stroke_path; |
dev->clip_path = fz_list_clip_path; |
dev->clip_stroke_path = fz_list_clip_stroke_path; |
dev->fill_text = fz_list_fill_text; |
dev->stroke_text = fz_list_stroke_text; |
dev->clip_text = fz_list_clip_text; |
dev->clip_stroke_text = fz_list_clip_stroke_text; |
dev->ignore_text = fz_list_ignore_text; |
dev->fill_shade = fz_list_fill_shade; |
dev->fill_image = fz_list_fill_image; |
dev->fill_image_mask = fz_list_fill_image_mask; |
dev->clip_image_mask = fz_list_clip_image_mask; |
dev->pop_clip = fz_list_pop_clip; |
dev->begin_mask = fz_list_begin_mask; |
dev->end_mask = fz_list_end_mask; |
dev->begin_group = fz_list_begin_group; |
dev->end_group = fz_list_end_group; |
dev->begin_tile = fz_list_begin_tile; |
dev->end_tile = fz_list_end_tile; |
return dev; |
} |
fz_display_list * |
fz_new_display_list(void) |
{ |
fz_display_list *list = fz_malloc(sizeof(fz_display_list)); |
list->first = NULL; |
list->last = NULL; |
list->top = 0; |
list->tiled = 0; |
return list; |
} |
void |
fz_free_display_list(fz_display_list *list) |
{ |
fz_display_node *node = list->first; |
while (node) |
{ |
fz_display_node *next = node->next; |
fz_free_display_node(node); |
node = next; |
} |
fz_free(list); |
} |
void |
fz_execute_display_list(fz_display_list *list, fz_device *dev, fz_matrix top_ctm, fz_bbox scissor) |
{ |
fz_display_node *node; |
fz_matrix ctm; |
fz_rect rect; |
fz_bbox bbox; |
int clipped = 0; |
int tiled = 0; |
int empty; |
if (!fz_is_infinite_bbox(scissor)) |
{ |
/* add some fuzz at the edges, as especially glyph rects |
* are sometimes not actually completely bounding the glyph */ |
scissor.x0 -= 20; scissor.y0 -= 20; |
scissor.x1 += 20; scissor.y1 += 20; |
} |
for (node = list->first; node; node = node->next) |
{ |
/* cull objects to draw using a quick visibility test */ |
if (tiled || node->cmd == FZ_CMD_BEGIN_TILE || node->cmd == FZ_CMD_END_TILE) |
{ |
empty = 0; |
} |
else |
{ |
bbox = fz_round_rect(fz_transform_rect(top_ctm, node->rect)); |
bbox = fz_intersect_bbox(bbox, scissor); |
empty = fz_is_empty_bbox(bbox); |
} |
if (clipped || empty) |
{ |
switch (node->cmd) |
{ |
case FZ_CMD_CLIP_PATH: |
case FZ_CMD_CLIP_STROKE_PATH: |
case FZ_CMD_CLIP_TEXT: |
case FZ_CMD_CLIP_STROKE_TEXT: |
case FZ_CMD_CLIP_IMAGE_MASK: |
case FZ_CMD_BEGIN_MASK: |
case FZ_CMD_BEGIN_GROUP: |
clipped++; |
continue; |
case FZ_CMD_POP_CLIP: |
case FZ_CMD_END_GROUP: |
if (!clipped) |
goto visible; |
clipped--; |
continue; |
case FZ_CMD_END_MASK: |
if (!clipped) |
goto visible; |
continue; |
default: |
continue; |
} |
} |
visible: |
ctm = fz_concat(node->ctm, top_ctm); |
switch (node->cmd) |
{ |
case FZ_CMD_FILL_PATH: |
fz_fill_path(dev, node->item.path, node->flag, ctm, |
node->colorspace, node->color, node->alpha); |
break; |
case FZ_CMD_STROKE_PATH: |
fz_stroke_path(dev, node->item.path, node->stroke, ctm, |
node->colorspace, node->color, node->alpha); |
break; |
case FZ_CMD_CLIP_PATH: |
{ |
fz_rect trect = fz_transform_rect(top_ctm, node->rect); |
fz_clip_path(dev, node->item.path, &trect, node->flag, ctm); |
break; |
} |
case FZ_CMD_CLIP_STROKE_PATH: |
{ |
fz_rect trect = fz_transform_rect(top_ctm, node->rect); |
fz_clip_stroke_path(dev, node->item.path, &trect, node->stroke, ctm); |
break; |
} |
case FZ_CMD_FILL_TEXT: |
fz_fill_text(dev, node->item.text, ctm, |
node->colorspace, node->color, node->alpha); |
break; |
case FZ_CMD_STROKE_TEXT: |
fz_stroke_text(dev, node->item.text, node->stroke, ctm, |
node->colorspace, node->color, node->alpha); |
break; |
case FZ_CMD_CLIP_TEXT: |
fz_clip_text(dev, node->item.text, ctm, node->flag); |
break; |
case FZ_CMD_CLIP_STROKE_TEXT: |
fz_clip_stroke_text(dev, node->item.text, node->stroke, ctm); |
break; |
case FZ_CMD_IGNORE_TEXT: |
fz_ignore_text(dev, node->item.text, ctm); |
break; |
case FZ_CMD_FILL_SHADE: |
fz_fill_shade(dev, node->item.shade, ctm, node->alpha); |
break; |
case FZ_CMD_FILL_IMAGE: |
fz_fill_image(dev, node->item.image, ctm, node->alpha); |
break; |
case FZ_CMD_FILL_IMAGE_MASK: |
fz_fill_image_mask(dev, node->item.image, ctm, |
node->colorspace, node->color, node->alpha); |
break; |
case FZ_CMD_CLIP_IMAGE_MASK: |
{ |
fz_rect trect = fz_transform_rect(top_ctm, node->rect); |
fz_clip_image_mask(dev, node->item.image, &trect, ctm); |
break; |
} |
case FZ_CMD_POP_CLIP: |
fz_pop_clip(dev); |
break; |
case FZ_CMD_BEGIN_MASK: |
rect = fz_transform_rect(top_ctm, node->rect); |
fz_begin_mask(dev, rect, node->flag, node->colorspace, node->color); |
break; |
case FZ_CMD_END_MASK: |
fz_end_mask(dev); |
break; |
case FZ_CMD_BEGIN_GROUP: |
rect = fz_transform_rect(top_ctm, node->rect); |
fz_begin_group(dev, rect, |
(node->flag & ISOLATED) != 0, (node->flag & KNOCKOUT) != 0, |
node->item.blendmode, node->alpha); |
break; |
case FZ_CMD_END_GROUP: |
fz_end_group(dev); |
break; |
case FZ_CMD_BEGIN_TILE: |
tiled++; |
rect.x0 = node->color[2]; |
rect.y0 = node->color[3]; |
rect.x1 = node->color[4]; |
rect.y1 = node->color[5]; |
fz_begin_tile(dev, node->rect, rect, |
node->color[0], node->color[1], ctm); |
break; |
case FZ_CMD_END_TILE: |
tiled--; |
fz_end_tile(dev); |
break; |
} |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/dev_null.c |
---|
0,0 → 1,165 |
#include "fitz.h" |
fz_device * |
fz_new_device(void *user) |
{ |
fz_device *dev = fz_malloc(sizeof(fz_device)); |
memset(dev, 0, sizeof(fz_device)); |
dev->hints = 0; |
dev->flags = 0; |
dev->user = user; |
return dev; |
} |
void |
fz_free_device(fz_device *dev) |
{ |
if (dev->free_user) |
dev->free_user(dev->user); |
fz_free(dev); |
} |
void |
fz_fill_path(fz_device *dev, fz_path *path, int even_odd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
if (dev->fill_path) |
dev->fill_path(dev->user, path, even_odd, ctm, colorspace, color, alpha); |
} |
void |
fz_stroke_path(fz_device *dev, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
if (dev->stroke_path) |
dev->stroke_path(dev->user, path, stroke, ctm, colorspace, color, alpha); |
} |
void |
fz_clip_path(fz_device *dev, fz_path *path, fz_rect *rect, int even_odd, fz_matrix ctm) |
{ |
if (dev->clip_path) |
dev->clip_path(dev->user, path, rect, even_odd, ctm); |
} |
void |
fz_clip_stroke_path(fz_device *dev, fz_path *path, fz_rect *rect, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
if (dev->clip_stroke_path) |
dev->clip_stroke_path(dev->user, path, rect, stroke, ctm); |
} |
void |
fz_fill_text(fz_device *dev, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
if (dev->fill_text) |
dev->fill_text(dev->user, text, ctm, colorspace, color, alpha); |
} |
void |
fz_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
if (dev->stroke_text) |
dev->stroke_text(dev->user, text, stroke, ctm, colorspace, color, alpha); |
} |
void |
fz_clip_text(fz_device *dev, fz_text *text, fz_matrix ctm, int accumulate) |
{ |
if (dev->clip_text) |
dev->clip_text(dev->user, text, ctm, accumulate); |
} |
void |
fz_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
if (dev->clip_stroke_text) |
dev->clip_stroke_text(dev->user, text, stroke, ctm); |
} |
void |
fz_ignore_text(fz_device *dev, fz_text *text, fz_matrix ctm) |
{ |
if (dev->ignore_text) |
dev->ignore_text(dev->user, text, ctm); |
} |
void |
fz_pop_clip(fz_device *dev) |
{ |
if (dev->pop_clip) |
dev->pop_clip(dev->user); |
} |
void |
fz_fill_shade(fz_device *dev, fz_shade *shade, fz_matrix ctm, float alpha) |
{ |
if (dev->fill_shade) |
dev->fill_shade(dev->user, shade, ctm, alpha); |
} |
void |
fz_fill_image(fz_device *dev, fz_pixmap *image, fz_matrix ctm, float alpha) |
{ |
if (dev->fill_image) |
dev->fill_image(dev->user, image, ctm, alpha); |
} |
void |
fz_fill_image_mask(fz_device *dev, fz_pixmap *image, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
if (dev->fill_image_mask) |
dev->fill_image_mask(dev->user, image, ctm, colorspace, color, alpha); |
} |
void |
fz_clip_image_mask(fz_device *dev, fz_pixmap *image, fz_rect *rect, fz_matrix ctm) |
{ |
if (dev->clip_image_mask) |
dev->clip_image_mask(dev->user, image, rect, ctm); |
} |
void |
fz_begin_mask(fz_device *dev, fz_rect area, int luminosity, fz_colorspace *colorspace, float *bc) |
{ |
if (dev->begin_mask) |
dev->begin_mask(dev->user, area, luminosity, colorspace, bc); |
} |
void |
fz_end_mask(fz_device *dev) |
{ |
if (dev->end_mask) |
dev->end_mask(dev->user); |
} |
void |
fz_begin_group(fz_device *dev, fz_rect area, int isolated, int knockout, int blendmode, float alpha) |
{ |
if (dev->begin_group) |
dev->begin_group(dev->user, area, isolated, knockout, blendmode, alpha); |
} |
void |
fz_end_group(fz_device *dev) |
{ |
if (dev->end_group) |
dev->end_group(dev->user); |
} |
void |
fz_begin_tile(fz_device *dev, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm) |
{ |
if (dev->begin_tile) |
dev->begin_tile(dev->user, area, view, xstep, ystep, ctm); |
} |
void |
fz_end_tile(fz_device *dev) |
{ |
if (dev->end_tile) |
dev->end_tile(dev->user); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/dev_text.c |
---|
0,0 → 1,418 |
#include "fitz.h" |
#define LINE_DIST 0.9f |
#define SPACE_DIST 0.2f |
#include <ft2build.h> |
#include FT_FREETYPE_H |
#include FT_ADVANCES_H |
typedef struct fz_text_device_s fz_text_device; |
struct fz_text_device_s |
{ |
fz_point point; |
fz_text_span *head; |
fz_text_span *span; |
}; |
fz_text_span * |
fz_new_text_span(void) |
{ |
fz_text_span *span; |
span = fz_malloc(sizeof(fz_text_span)); |
span->font = NULL; |
span->wmode = 0; |
span->size = 0; |
span->len = 0; |
span->cap = 0; |
span->text = NULL; |
span->next = NULL; |
span->eol = 0; |
return span; |
} |
void |
fz_free_text_span(fz_text_span *span) |
{ |
if (span->font) |
fz_drop_font(span->font); |
if (span->next) |
fz_free_text_span(span->next); |
fz_free(span->text); |
fz_free(span); |
} |
static void |
fz_add_text_char_imp(fz_text_span *span, int c, fz_bbox bbox) |
{ |
if (span->len + 1 >= span->cap) |
{ |
span->cap = span->cap > 1 ? (span->cap * 3) / 2 : 80; |
span->text = fz_realloc(span->text, span->cap, sizeof(fz_text_char)); |
} |
span->text[span->len].c = c; |
span->text[span->len].bbox = bbox; |
span->len ++; |
} |
static fz_bbox |
fz_split_bbox(fz_bbox bbox, int i, int n) |
{ |
float w = (float)(bbox.x1 - bbox.x0) / n; |
float x0 = bbox.x0; |
bbox.x0 = x0 + i * w; |
bbox.x1 = x0 + (i + 1) * w; |
return bbox; |
} |
static void |
fz_add_text_char(fz_text_span **last, fz_font *font, float size, int wmode, int c, fz_bbox bbox) |
{ |
fz_text_span *span = *last; |
if (!span->font) |
{ |
span->font = fz_keep_font(font); |
span->size = size; |
} |
if ((span->font != font || span->size != size || span->wmode != wmode) && c != 32) |
{ |
span = fz_new_text_span(); |
span->font = fz_keep_font(font); |
span->size = size; |
span->wmode = wmode; |
(*last)->next = span; |
*last = span; |
} |
switch (c) |
{ |
case -1: /* ignore when one unicode character maps to multiple glyphs */ |
break; |
case 0xFB00: /* ff */ |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 2)); |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 2)); |
break; |
case 0xFB01: /* fi */ |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 2)); |
fz_add_text_char_imp(span, 'i', fz_split_bbox(bbox, 1, 2)); |
break; |
case 0xFB02: /* fl */ |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 2)); |
fz_add_text_char_imp(span, 'l', fz_split_bbox(bbox, 1, 2)); |
break; |
case 0xFB03: /* ffi */ |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 3)); |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 3)); |
fz_add_text_char_imp(span, 'i', fz_split_bbox(bbox, 2, 3)); |
break; |
case 0xFB04: /* ffl */ |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 3)); |
fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 3)); |
fz_add_text_char_imp(span, 'l', fz_split_bbox(bbox, 2, 3)); |
break; |
case 0xFB05: /* long st */ |
case 0xFB06: /* st */ |
fz_add_text_char_imp(span, 's', fz_split_bbox(bbox, 0, 2)); |
fz_add_text_char_imp(span, 't', fz_split_bbox(bbox, 1, 2)); |
break; |
default: |
fz_add_text_char_imp(span, c, bbox); |
break; |
} |
} |
static void |
fz_divide_text_chars(fz_text_span **last, int n, fz_bbox bbox) |
{ |
fz_text_span *span = *last; |
int i, x; |
x = span->len - n; |
if (x >= 0) |
for (i = 0; i < n; i++) |
span->text[x + i].bbox = fz_split_bbox(bbox, i, n); |
} |
static void |
fz_add_text_newline(fz_text_span **last, fz_font *font, float size, int wmode) |
{ |
fz_text_span *span; |
span = fz_new_text_span(); |
span->font = fz_keep_font(font); |
span->size = size; |
span->wmode = wmode; |
(*last)->eol = 1; |
(*last)->next = span; |
*last = span; |
} |
void |
fz_debug_text_span_xml(fz_text_span *span) |
{ |
char buf[10]; |
int c, n, k, i; |
printf("<span font=\"%s\" size=\"%g\" wmode=\"%d\" eol=\"%d\">\n", |
span->font ? span->font->name : "NULL", span->size, span->wmode, span->eol); |
for (i = 0; i < span->len; i++) |
{ |
printf("\t<char ucs=\""); |
c = span->text[i].c; |
if (c < 128) |
putchar(c); |
else |
{ |
n = runetochar(buf, &c); |
for (k = 0; k < n; k++) |
putchar(buf[k]); |
} |
printf("\" bbox=\"%d %d %d %d\" />\n", |
span->text[i].bbox.x0, |
span->text[i].bbox.y0, |
span->text[i].bbox.x1, |
span->text[i].bbox.y1); |
} |
printf("</span>\n"); |
if (span->next) |
fz_debug_text_span_xml(span->next); |
} |
void |
fz_debug_text_span(fz_text_span *span) |
{ |
char buf[10]; |
int c, n, k, i; |
for (i = 0; i < span->len; i++) |
{ |
c = span->text[i].c; |
if (c < 128) |
putchar(c); |
else |
{ |
n = runetochar(buf, &c); |
for (k = 0; k < n; k++) |
putchar(buf[k]); |
} |
} |
if (span->eol) |
putchar('\n'); |
if (span->next) |
fz_debug_text_span(span->next); |
} |
static void |
fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point *pen) |
{ |
fz_font *font = text->font; |
FT_Face face = font->ft_face; |
fz_matrix tm = text->trm; |
fz_matrix trm; |
float size; |
float adv; |
fz_rect rect; |
fz_point dir, ndir; |
fz_point delta, ndelta; |
float dist, dot; |
float ascender = 1; |
float descender = 0; |
int multi; |
int i, err; |
if (text->len == 0) |
return; |
if (font->ft_face) |
{ |
err = FT_Set_Char_Size(font->ft_face, 64, 64, 72, 72); |
if (err) |
fz_warn("freetype set character size: %s", ft_error_string(err)); |
ascender = (float)face->ascender / face->units_per_EM; |
descender = (float)face->descender / face->units_per_EM; |
} |
rect = fz_empty_rect; |
if (text->wmode == 0) |
{ |
dir.x = 1; |
dir.y = 0; |
} |
else |
{ |
dir.x = 0; |
dir.y = 1; |
} |
tm.e = 0; |
tm.f = 0; |
trm = fz_concat(tm, ctm); |
dir = fz_transform_vector(trm, dir); |
dist = sqrtf(dir.x * dir.x + dir.y * dir.y); |
ndir.x = dir.x / dist; |
ndir.y = dir.y / dist; |
size = fz_matrix_expansion(trm); |
multi = 1; |
for (i = 0; i < text->len; i++) |
{ |
if (text->items[i].gid < 0) |
{ |
fz_add_text_char(last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect)); |
multi ++; |
fz_divide_text_chars(last, multi, fz_round_rect(rect)); |
continue; |
} |
multi = 1; |
/* Calculate new pen location and delta */ |
tm.e = text->items[i].x; |
tm.f = text->items[i].y; |
trm = fz_concat(tm, ctm); |
delta.x = pen->x - trm.e; |
delta.y = pen->y - trm.f; |
if (pen->x == -1 && pen->y == -1) |
delta.x = delta.y = 0; |
dist = sqrtf(delta.x * delta.x + delta.y * delta.y); |
/* Add space and newlines based on pen movement */ |
if (dist > 0) |
{ |
ndelta.x = delta.x / dist; |
ndelta.y = delta.y / dist; |
dot = ndelta.x * ndir.x + ndelta.y * ndir.y; |
if (dist > size * LINE_DIST) |
{ |
fz_add_text_newline(last, font, size, text->wmode); |
} |
else if (fabsf(dot) > 0.95f && dist > size * SPACE_DIST) |
{ |
if ((*last)->len > 0 && (*last)->text[(*last)->len - 1].c != ' ') |
{ |
fz_rect spacerect; |
spacerect.x0 = -0.2f; |
spacerect.y0 = 0; |
spacerect.x1 = 0; |
spacerect.y1 = 1; |
spacerect = fz_transform_rect(trm, spacerect); |
fz_add_text_char(last, font, size, text->wmode, ' ', fz_round_rect(spacerect)); |
} |
} |
} |
/* Calculate bounding box and new pen position based on font metrics */ |
if (font->ft_face) |
{ |
FT_Fixed ftadv = 0; |
int mask = FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING | FT_LOAD_IGNORE_TRANSFORM; |
/* TODO: freetype returns broken vertical metrics */ |
/* if (text->wmode) mask |= FT_LOAD_VERTICAL_LAYOUT; */ |
FT_Get_Advance(font->ft_face, text->items[i].gid, mask, &ftadv); |
adv = ftadv / 65536.0f; |
rect.x0 = 0; |
rect.y0 = descender; |
rect.x1 = adv; |
rect.y1 = ascender; |
} |
else |
{ |
adv = font->t3widths[text->items[i].gid]; |
rect.x0 = 0; |
rect.y0 = descender; |
rect.x1 = adv; |
rect.y1 = ascender; |
} |
rect = fz_transform_rect(trm, rect); |
pen->x = trm.e + dir.x * adv; |
pen->y = trm.f + dir.y * adv; |
fz_add_text_char(last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect)); |
} |
} |
static void |
fz_text_fill_text(void *user, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_text_device *tdev = user; |
fz_text_extract_span(&tdev->span, text, ctm, &tdev->point); |
} |
static void |
fz_text_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
fz_text_device *tdev = user; |
fz_text_extract_span(&tdev->span, text, ctm, &tdev->point); |
} |
static void |
fz_text_clip_text(void *user, fz_text *text, fz_matrix ctm, int accumulate) |
{ |
fz_text_device *tdev = user; |
fz_text_extract_span(&tdev->span, text, ctm, &tdev->point); |
} |
static void |
fz_text_clip_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_text_device *tdev = user; |
fz_text_extract_span(&tdev->span, text, ctm, &tdev->point); |
} |
static void |
fz_text_ignore_text(void *user, fz_text *text, fz_matrix ctm) |
{ |
fz_text_device *tdev = user; |
fz_text_extract_span(&tdev->span, text, ctm, &tdev->point); |
} |
static void |
fz_text_free_user(void *user) |
{ |
fz_text_device *tdev = user; |
tdev->span->eol = 1; |
/* TODO: unicode NFC normalization */ |
/* TODO: bidi logical reordering */ |
fz_free(tdev); |
} |
fz_device * |
fz_new_text_device(fz_text_span *root) |
{ |
fz_device *dev; |
fz_text_device *tdev = fz_malloc(sizeof(fz_text_device)); |
tdev->head = root; |
tdev->span = root; |
tdev->point.x = -1; |
tdev->point.y = -1; |
dev = fz_new_device(tdev); |
dev->hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE; |
dev->free_user = fz_text_free_user; |
dev->fill_text = fz_text_fill_text; |
dev->stroke_text = fz_text_stroke_text; |
dev->clip_text = fz_text_clip_text; |
dev->clip_stroke_text = fz_text_clip_stroke_text; |
dev->ignore_text = fz_text_ignore_text; |
return dev; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/dev_trace.c |
---|
0,0 → 1,305 |
#include "fitz.h" |
static void |
fz_trace_matrix(fz_matrix ctm) |
{ |
printf("matrix=\"%g %g %g %g %g %g\" ", |
ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f); |
} |
static void |
fz_trace_color(fz_colorspace *colorspace, float *color, float alpha) |
{ |
int i; |
printf("colorspace=\"%s\" color=\"", colorspace->name); |
for (i = 0; i < colorspace->n; i++) |
printf("%s%g", i == 0 ? "" : " ", color[i]); |
printf("\" "); |
if (alpha < 1) |
printf("alpha=\"%g\" ", alpha); |
} |
static void |
fz_trace_path(fz_path *path, int indent) |
{ |
float x, y; |
int i = 0; |
int n; |
while (i < path->len) |
{ |
for (n = 0; n < indent; n++) |
putchar(' '); |
switch (path->items[i++].k) |
{ |
case FZ_MOVETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("<moveto x=\"%g\" y=\"%g\" />\n", x, y); |
break; |
case FZ_LINETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("<lineto x=\"%g\" y=\"%g\" />\n", x, y); |
break; |
case FZ_CURVETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("<curveto x1=\"%g\" y1=\"%g\" ", x, y); |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("x2=\"%g\" y2=\"%g\" ", x, y); |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("x3=\"%g\" y3=\"%g\" />\n", x, y); |
break; |
case FZ_CLOSE_PATH: |
printf("<closepath />\n"); |
break; |
} |
} |
} |
static void |
fz_trace_fill_path(void *user, fz_path *path, int even_odd, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
printf("<fill_path "); |
if (even_odd) |
printf("winding=\"eofill\" "); |
else |
printf("winding=\"nonzero\" "); |
fz_trace_color(colorspace, color, alpha); |
fz_trace_matrix(ctm); |
printf(">\n"); |
fz_trace_path(path, 0); |
printf("</fill_path>\n"); |
} |
static void |
fz_trace_stroke_path(void *user, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
int i; |
printf("<stroke_path "); |
printf("linewidth=\"%g\" ", stroke->linewidth); |
printf("miterlimit=\"%g\" ", stroke->miterlimit); |
printf("linecap=\"%d,%d,%d\" ", stroke->start_cap, stroke->dash_cap, stroke->end_cap); |
printf("linejoin=\"%d\" ", stroke->linejoin); |
if (stroke->dash_len) |
{ |
printf("dash_phase=\"%g\" dash=\"", stroke->dash_phase); |
for (i = 0; i < stroke->dash_len; i++) |
printf("%g ", stroke->dash_list[i]); |
printf("\""); |
} |
fz_trace_color(colorspace, color, alpha); |
fz_trace_matrix(ctm); |
printf(">\n"); |
fz_trace_path(path, 0); |
printf("</stroke_path>\n"); |
} |
static void |
fz_trace_clip_path(void *user, fz_path *path, fz_rect *rect, int even_odd, fz_matrix ctm) |
{ |
printf("<clip_path "); |
if (even_odd) |
printf("winding=\"eofill\" "); |
else |
printf("winding=\"nonzero\" "); |
fz_trace_matrix(ctm); |
printf("contentbbox=\"%g %g %g %g\">\n", |
rect->x0, rect->y0, rect->x1, rect->y1); |
fz_trace_path(path, 0); |
printf("</clip_path>\n"); |
} |
static void |
fz_trace_clip_stroke_path(void *user, fz_path *path, fz_rect *rect, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
printf("<clip_stroke_path "); |
fz_trace_matrix(ctm); |
printf(">\n"); |
fz_trace_path(path, 0); |
printf("</clip_stroke_path>\n"); |
} |
static void |
fz_trace_fill_text(void *user, fz_text *text, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
printf("<fill_text font=\"%s\" wmode=\"%d\" ", text->font->name, text->wmode); |
fz_trace_color(colorspace, color, alpha); |
fz_trace_matrix(fz_concat(ctm, text->trm)); |
printf(">\n"); |
fz_debug_text(text, 0); |
printf("</fill_text>\n"); |
} |
static void |
fz_trace_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
printf("<stroke_text font=\"%s\" wmode=\"%d\" ", text->font->name, text->wmode); |
fz_trace_color(colorspace, color, alpha); |
fz_trace_matrix(fz_concat(ctm, text->trm)); |
printf(">\n"); |
fz_debug_text(text, 0); |
printf("</stroke_text>\n"); |
} |
static void |
fz_trace_clip_text(void *user, fz_text *text, fz_matrix ctm, int accumulate) |
{ |
printf("<clip_text font=\"%s\" wmode=\"%d\" ", text->font->name, text->wmode); |
printf("accumulate=\"%d\" ", accumulate); |
fz_trace_matrix(fz_concat(ctm, text->trm)); |
printf(">\n"); |
fz_debug_text(text, 0); |
printf("</clip_text>\n"); |
} |
static void |
fz_trace_clip_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
printf("<clip_stroke_text font=\"%s\" wmode=\"%d\" ", text->font->name, text->wmode); |
fz_trace_matrix(fz_concat(ctm, text->trm)); |
printf(">\n"); |
fz_debug_text(text, 0); |
printf("</clip_stroke_text>\n"); |
} |
static void |
fz_trace_ignore_text(void *user, fz_text *text, fz_matrix ctm) |
{ |
printf("<ignore_text font=\"%s\" wmode=\"%d\" ", text->font->name, text->wmode); |
fz_trace_matrix(fz_concat(ctm, text->trm)); |
printf(">\n"); |
fz_debug_text(text, 0); |
printf("</ignore_text>\n"); |
} |
static void |
fz_trace_fill_image(void *user, fz_pixmap *image, fz_matrix ctm, float alpha) |
{ |
printf("<fill_image alpha=\"%g\" ", alpha); |
fz_trace_matrix(ctm); |
printf("/>\n"); |
} |
static void |
fz_trace_fill_shade(void *user, fz_shade *shade, fz_matrix ctm, float alpha) |
{ |
printf("<fill_shade alpha=\"%g\" ", alpha); |
fz_trace_matrix(ctm); |
printf("/>\n"); |
} |
static void |
fz_trace_fill_image_mask(void *user, fz_pixmap *image, fz_matrix ctm, |
fz_colorspace *colorspace, float *color, float alpha) |
{ |
printf("<fill_image_mask "); |
fz_trace_matrix(ctm); |
fz_trace_color(colorspace, color, alpha); |
printf("/>\n"); |
} |
static void |
fz_trace_clip_image_mask(void *user, fz_pixmap *image, fz_rect *rect, fz_matrix ctm) |
{ |
printf("<clip_image_mask "); |
fz_trace_matrix(ctm); |
printf("/>\n"); |
} |
static void |
fz_trace_pop_clip(void *user) |
{ |
printf("<pop_clip />\n"); |
} |
static void |
fz_trace_begin_mask(void *user, fz_rect bbox, int luminosity, fz_colorspace *colorspace, float *color) |
{ |
printf("<mask bbox=\"%g %g %g %g\" s=\"%s\" ", |
bbox.x0, bbox.y0, bbox.x1, bbox.y1, |
luminosity ? "luminosity" : "alpha"); |
// fz_trace_color(colorspace, color, 1); |
printf(">\n"); |
} |
static void |
fz_trace_end_mask(void *user) |
{ |
printf("</mask>\n"); |
} |
static void |
fz_trace_begin_group(void *user, fz_rect bbox, int isolated, int knockout, int blendmode, float alpha) |
{ |
printf("<group bbox=\"%g %g %g %g\" isolated=\"%d\" knockout=\"%d\" blendmode=\"%s\" alpha=\"%g\">\n", |
bbox.x0, bbox.y0, bbox.x1, bbox.y1, |
isolated, knockout, fz_blendmode_name(blendmode), alpha); |
} |
static void |
fz_trace_end_group(void *user) |
{ |
printf("</group>\n"); |
} |
static void |
fz_trace_begin_tile(void *user, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm) |
{ |
printf("<tile "); |
printf("area=\"%g %g %g %g\" ", area.x0, area.y0, area.x1, area.y1); |
printf("view=\"%g %g %g %g\" ", view.x0, view.y0, view.x1, view.y1); |
printf("xstep=\"%g\" ystep=\"%g\" ", xstep, ystep); |
fz_trace_matrix(ctm); |
printf(">\n"); |
} |
static void |
fz_trace_end_tile(void *user) |
{ |
printf("</tile>\n"); |
} |
fz_device *fz_new_trace_device(void) |
{ |
fz_device *dev = fz_new_device(NULL); |
dev->fill_path = fz_trace_fill_path; |
dev->stroke_path = fz_trace_stroke_path; |
dev->clip_path = fz_trace_clip_path; |
dev->clip_stroke_path = fz_trace_clip_stroke_path; |
dev->fill_text = fz_trace_fill_text; |
dev->stroke_text = fz_trace_stroke_text; |
dev->clip_text = fz_trace_clip_text; |
dev->clip_stroke_text = fz_trace_clip_stroke_text; |
dev->ignore_text = fz_trace_ignore_text; |
dev->fill_shade = fz_trace_fill_shade; |
dev->fill_image = fz_trace_fill_image; |
dev->fill_image_mask = fz_trace_fill_image_mask; |
dev->clip_image_mask = fz_trace_clip_image_mask; |
dev->pop_clip = fz_trace_pop_clip; |
dev->begin_mask = fz_trace_begin_mask; |
dev->end_mask = fz_trace_end_mask; |
dev->begin_group = fz_trace_begin_group; |
dev->end_group = fz_trace_end_group; |
dev->begin_tile = fz_trace_begin_tile; |
dev->end_tile = fz_trace_end_tile; |
return dev; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_basic.c |
---|
0,0 → 1,504 |
#include "fitz.h" |
/* Pretend we have a filter that just copies data forever */ |
fz_stream * |
fz_open_copy(fz_stream *chain) |
{ |
return fz_keep_stream(chain); |
} |
/* Null filter copies a specified amount of data */ |
struct null_filter |
{ |
fz_stream *chain; |
int remain; |
}; |
static int |
read_null(fz_stream *stm, unsigned char *buf, int len) |
{ |
struct null_filter *state = stm->state; |
int amount = MIN(len, state->remain); |
int n = fz_read(state->chain, buf, amount); |
if (n < 0) |
return fz_rethrow(n, "read error in null filter"); |
state->remain -= n; |
return n; |
} |
static void |
close_null(fz_stream *stm) |
{ |
struct null_filter *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_null(fz_stream *chain, int len) |
{ |
struct null_filter *state; |
state = fz_malloc(sizeof(struct null_filter)); |
state->chain = chain; |
state->remain = len; |
return fz_new_stream(state, read_null, close_null); |
} |
/* ASCII Hex Decode */ |
typedef struct fz_ahxd_s fz_ahxd; |
struct fz_ahxd_s |
{ |
fz_stream *chain; |
int eod; |
}; |
static inline int iswhite(int a) |
{ |
switch (a) { |
case '\n': case '\r': case '\t': case ' ': |
case '\0': case '\f': case '\b': case 0177: |
return 1; |
} |
return 0; |
} |
static inline int ishex(int a) |
{ |
return (a >= 'A' && a <= 'F') || |
(a >= 'a' && a <= 'f') || |
(a >= '0' && a <= '9'); |
} |
static inline int unhex(int a) |
{ |
if (a >= 'A' && a <= 'F') return a - 'A' + 0xA; |
if (a >= 'a' && a <= 'f') return a - 'a' + 0xA; |
if (a >= '0' && a <= '9') return a - '0'; |
return 0; |
} |
static int |
read_ahxd(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_ahxd *state = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
int a, b, c, odd; |
odd = 0; |
while (p < ep) |
{ |
if (state->eod) |
return p - buf; |
c = fz_read_byte(state->chain); |
if (c < 0) |
return p - buf; |
if (ishex(c)) |
{ |
if (!odd) |
{ |
a = unhex(c); |
odd = 1; |
} |
else |
{ |
b = unhex(c); |
*p++ = (a << 4) | b; |
odd = 0; |
} |
} |
else if (c == '>') |
{ |
if (odd) |
*p++ = (a << 4); |
state->eod = 1; |
} |
else if (!iswhite(c)) |
{ |
return fz_throw("bad data in ahxd: '%c'", c); |
} |
} |
return p - buf; |
} |
static void |
close_ahxd(fz_stream *stm) |
{ |
fz_ahxd *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_ahxd(fz_stream *chain) |
{ |
fz_ahxd *state; |
state = fz_malloc(sizeof(fz_ahxd)); |
state->chain = chain; |
state->eod = 0; |
return fz_new_stream(state, read_ahxd, close_ahxd); |
} |
/* ASCII 85 Decode */ |
typedef struct fz_a85d_s fz_a85d; |
struct fz_a85d_s |
{ |
fz_stream *chain; |
unsigned char bp[4]; |
unsigned char *rp, *wp; |
int eod; |
}; |
static int |
read_a85d(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_a85d *state = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
int count = 0; |
int word = 0; |
int c; |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
while (p < ep) |
{ |
if (state->eod) |
return p - buf; |
c = fz_read_byte(state->chain); |
if (c < 0) |
return p - buf; |
if (c >= '!' && c <= 'u') |
{ |
if (count == 4) |
{ |
word = word * 85 + (c - '!'); |
state->bp[0] = (word >> 24) & 0xff; |
state->bp[1] = (word >> 16) & 0xff; |
state->bp[2] = (word >> 8) & 0xff; |
state->bp[3] = (word) & 0xff; |
state->rp = state->bp; |
state->wp = state->bp + 4; |
word = 0; |
count = 0; |
} |
else |
{ |
word = word * 85 + (c - '!'); |
count ++; |
} |
} |
else if (c == 'z' && count == 0) |
{ |
state->bp[0] = 0; |
state->bp[1] = 0; |
state->bp[2] = 0; |
state->bp[3] = 0; |
state->rp = state->bp; |
state->wp = state->bp + 4; |
} |
else if (c == '~') |
{ |
c = fz_read_byte(state->chain); |
if (c != '>') |
fz_warn("bad eod marker in a85d"); |
switch (count) { |
case 0: |
break; |
case 1: |
return fz_throw("partial final byte in a85d"); |
case 2: |
word = word * (85 * 85 * 85) + 0xffffff; |
state->bp[0] = word >> 24; |
state->rp = state->bp; |
state->wp = state->bp + 1; |
break; |
case 3: |
word = word * (85 * 85) + 0xffff; |
state->bp[0] = word >> 24; |
state->bp[1] = word >> 16; |
state->rp = state->bp; |
state->wp = state->bp + 2; |
break; |
case 4: |
word = word * 85 + 0xff; |
state->bp[0] = word >> 24; |
state->bp[1] = word >> 16; |
state->bp[2] = word >> 8; |
state->rp = state->bp; |
state->wp = state->bp + 3; |
break; |
} |
state->eod = 1; |
} |
else if (!iswhite(c)) |
{ |
return fz_throw("bad data in a85d: '%c'", c); |
} |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
} |
return p - buf; |
} |
static void |
close_a85d(fz_stream *stm) |
{ |
fz_a85d *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_a85d(fz_stream *chain) |
{ |
fz_a85d *state; |
state = fz_malloc(sizeof(fz_a85d)); |
state->chain = chain; |
state->rp = state->bp; |
state->wp = state->bp; |
state->eod = 0; |
return fz_new_stream(state, read_a85d, close_a85d); |
} |
/* Run Length Decode */ |
typedef struct fz_rld_s fz_rld; |
struct fz_rld_s |
{ |
fz_stream *chain; |
int run, n, c; |
}; |
static int |
read_rld(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_rld *state = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
while (p < ep) |
{ |
if (state->run == 128) |
return p - buf; |
if (state->n == 0) |
{ |
state->run = fz_read_byte(state->chain); |
if (state->run < 0) |
state->run = 128; |
if (state->run < 128) |
state->n = state->run + 1; |
if (state->run > 128) |
{ |
state->n = 257 - state->run; |
state->c = fz_read_byte(state->chain); |
if (state->c < 0) |
return fz_throw("premature end of data in run length decode"); |
} |
} |
if (state->run < 128) |
{ |
while (p < ep && state->n) |
{ |
int c = fz_read_byte(state->chain); |
if (c < 0) |
return fz_throw("premature end of data in run length decode"); |
*p++ = c; |
state->n--; |
} |
} |
if (state->run > 128) |
{ |
while (p < ep && state->n) |
{ |
*p++ = state->c; |
state->n--; |
} |
} |
} |
return p - buf; |
} |
static void |
close_rld(fz_stream *stm) |
{ |
fz_rld *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_rld(fz_stream *chain) |
{ |
fz_rld *state; |
state = fz_malloc(sizeof(fz_rld)); |
state->chain = chain; |
state->run = 0; |
state->n = 0; |
state->c = 0; |
return fz_new_stream(state, read_rld, close_rld); |
} |
/* RC4 Filter */ |
typedef struct fz_arc4c_s fz_arc4c; |
struct fz_arc4c_s |
{ |
fz_stream *chain; |
fz_arc4 arc4; |
}; |
static int |
read_arc4(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_arc4c *state = stm->state; |
int n; |
n = fz_read(state->chain, buf, len); |
if (n < 0) |
return fz_rethrow(n, "read error in arc4 filter"); |
fz_arc4_encrypt(&state->arc4, buf, buf, n); |
return n; |
} |
static void |
close_arc4(fz_stream *stm) |
{ |
fz_arc4c *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_arc4(fz_stream *chain, unsigned char *key, unsigned keylen) |
{ |
fz_arc4c *state; |
state = fz_malloc(sizeof(fz_arc4c)); |
state->chain = chain; |
fz_arc4_init(&state->arc4, key, keylen); |
return fz_new_stream(state, read_arc4, close_arc4); |
} |
/* AES Filter */ |
typedef struct fz_aesd_s fz_aesd; |
struct fz_aesd_s |
{ |
fz_stream *chain; |
fz_aes aes; |
unsigned char iv[16]; |
int ivcount; |
unsigned char bp[16]; |
unsigned char *rp, *wp; |
}; |
static int |
read_aesd(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_aesd *state = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
while (state->ivcount < 16) |
{ |
int c = fz_read_byte(state->chain); |
if (c < 0) |
return fz_throw("premature end in aes filter"); |
state->iv[state->ivcount++] = c; |
} |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
while (p < ep) |
{ |
int n = fz_read(state->chain, state->bp, 16); |
if (n < 0) |
return fz_rethrow(n, "read error in aes filter"); |
else if (n == 0) |
return p - buf; |
else if (n < 16) |
return fz_throw("partial block in aes filter"); |
aes_crypt_cbc(&state->aes, AES_DECRYPT, 16, state->iv, state->bp, state->bp); |
state->rp = state->bp; |
state->wp = state->bp + 16; |
/* strip padding at end of file */ |
if (fz_is_eof(state->chain)) |
{ |
int pad = state->bp[15]; |
if (pad < 1 || pad > 16) |
return fz_throw("aes padding out of range: %d", pad); |
state->wp -= pad; |
} |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
} |
return p - buf; |
} |
static void |
close_aesd(fz_stream *stm) |
{ |
fz_aesd *state = stm->state; |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_aesd(fz_stream *chain, unsigned char *key, unsigned keylen) |
{ |
fz_aesd *state; |
state = fz_malloc(sizeof(fz_aesd)); |
state->chain = chain; |
aes_setkey_dec(&state->aes, key, keylen * 8); |
state->ivcount = 0; |
state->rp = state->bp; |
state->wp = state->bp; |
return fz_new_stream(state, read_aesd, close_aesd); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_dctd.c |
---|
0,0 → 1,221 |
#include "fitz.h" |
#include <jpeglib.h> |
#include <setjmp.h> |
typedef struct fz_dctd_s fz_dctd; |
struct fz_dctd_s |
{ |
fz_stream *chain; |
int color_transform; |
int init; |
int stride; |
unsigned char *scanline; |
unsigned char *rp, *wp; |
struct jpeg_decompress_struct cinfo; |
struct jpeg_source_mgr srcmgr; |
struct jpeg_error_mgr errmgr; |
jmp_buf jb; |
char msg[JMSG_LENGTH_MAX]; |
}; |
static void error_exit(j_common_ptr cinfo) |
{ |
fz_dctd *state = cinfo->client_data; |
cinfo->err->format_message(cinfo, state->msg); |
longjmp(state->jb, 1); |
} |
static void init_source(j_decompress_ptr cinfo) |
{ |
/* nothing to do */ |
} |
static void term_source(j_decompress_ptr cinfo) |
{ |
/* nothing to do */ |
} |
static boolean fill_input_buffer(j_decompress_ptr cinfo) |
{ |
struct jpeg_source_mgr *src = cinfo->src; |
fz_dctd *state = cinfo->client_data; |
fz_stream *chain = state->chain; |
chain->rp = chain->wp; |
fz_fill_buffer(chain); |
src->next_input_byte = chain->rp; |
src->bytes_in_buffer = chain->wp - chain->rp; |
if (src->bytes_in_buffer == 0) |
{ |
static unsigned char eoi[2] = { 0xFF, JPEG_EOI }; |
fz_warn("premature end of file in jpeg"); |
src->next_input_byte = eoi; |
src->bytes_in_buffer = 2; |
} |
return 1; |
} |
static void skip_input_data(j_decompress_ptr cinfo, long num_bytes) |
{ |
struct jpeg_source_mgr *src = cinfo->src; |
if (num_bytes > 0) |
{ |
while ((size_t)num_bytes > src->bytes_in_buffer) |
{ |
num_bytes -= src->bytes_in_buffer; |
(void) src->fill_input_buffer(cinfo); |
} |
src->next_input_byte += num_bytes; |
src->bytes_in_buffer -= num_bytes; |
} |
} |
static int |
read_dctd(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_dctd *state = stm->state; |
j_decompress_ptr cinfo = &state->cinfo; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
if (setjmp(state->jb)) |
{ |
if (cinfo->src) |
state->chain->rp = state->chain->wp - cinfo->src->bytes_in_buffer; |
return fz_throw("jpeg error: %s", state->msg); |
} |
if (!state->init) |
{ |
cinfo->client_data = state; |
cinfo->err = &state->errmgr; |
jpeg_std_error(cinfo->err); |
cinfo->err->error_exit = error_exit; |
jpeg_create_decompress(cinfo); |
cinfo->src = &state->srcmgr; |
cinfo->src->init_source = init_source; |
cinfo->src->fill_input_buffer = fill_input_buffer; |
cinfo->src->skip_input_data = skip_input_data; |
cinfo->src->resync_to_restart = jpeg_resync_to_restart; |
cinfo->src->term_source = term_source; |
cinfo->src->next_input_byte = state->chain->rp; |
cinfo->src->bytes_in_buffer = state->chain->wp - state->chain->rp; |
jpeg_read_header(cinfo, 1); |
/* speed up jpeg decoding a bit */ |
cinfo->dct_method = JDCT_FASTEST; |
cinfo->do_fancy_upsampling = FALSE; |
/* default value if ColorTransform is not set */ |
if (state->color_transform == -1) |
{ |
if (state->cinfo.num_components == 3) |
state->color_transform = 1; |
else |
state->color_transform = 0; |
} |
if (cinfo->saw_Adobe_marker) |
state->color_transform = cinfo->Adobe_transform; |
/* Guess the input colorspace, and set output colorspace accordingly */ |
switch (cinfo->num_components) |
{ |
case 3: |
if (state->color_transform) |
cinfo->jpeg_color_space = JCS_YCbCr; |
else |
cinfo->jpeg_color_space = JCS_RGB; |
break; |
case 4: |
if (state->color_transform) |
cinfo->jpeg_color_space = JCS_YCCK; |
else |
cinfo->jpeg_color_space = JCS_CMYK; |
break; |
} |
jpeg_start_decompress(cinfo); |
state->stride = cinfo->output_width * cinfo->output_components; |
state->scanline = fz_malloc(state->stride); |
state->rp = state->scanline; |
state->wp = state->scanline; |
state->init = 1; |
} |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
while (p < ep) |
{ |
if (cinfo->output_scanline == cinfo->output_height) |
break; |
if (p + state->stride <= ep) |
{ |
jpeg_read_scanlines(cinfo, &p, 1); |
p += state->stride; |
} |
else |
{ |
jpeg_read_scanlines(cinfo, &state->scanline, 1); |
state->rp = state->scanline; |
state->wp = state->scanline + state->stride; |
} |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
} |
return p - buf; |
} |
static void |
close_dctd(fz_stream *stm) |
{ |
fz_dctd *state = stm->state; |
if (setjmp(state->jb)) |
{ |
state->chain->rp = state->chain->wp - state->cinfo.src->bytes_in_buffer; |
fz_warn("jpeg error: %s", state->msg); |
goto skip; |
} |
if (state->init) |
jpeg_finish_decompress(&state->cinfo); |
skip: |
state->chain->rp = state->chain->wp - state->cinfo.src->bytes_in_buffer; |
jpeg_destroy_decompress(&state->cinfo); |
fz_free(state->scanline); |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_dctd(fz_stream *chain, fz_obj *params) |
{ |
fz_dctd *state; |
fz_obj *obj; |
state = fz_malloc(sizeof(fz_dctd)); |
memset(state, 0, sizeof(fz_dctd)); |
state->chain = chain; |
state->color_transform = -1; /* unset */ |
state->init = 0; |
obj = fz_dict_gets(params, "ColorTransform"); |
if (obj) |
state->color_transform = fz_to_int(obj); |
return fz_new_stream(state, read_dctd, close_dctd); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_faxd.c |
---|
0,0 → 1,731 |
#include "fitz.h" |
/* Fax G3/G4 decoder */ |
/* TODO: uncompressed */ |
/* |
<raph> the first 2^(initialbits) entries map bit patterns to decodes |
<raph> let's say initial_bits is 8 for the sake of example |
<raph> and that the code is 1001 |
<raph> that means that entries 0x90 .. 0x9f have the entry { val, 4 } |
<raph> because those are all the bytes that start with the code |
<raph> and the 4 is the length of the code |
... if (n_bits > initial_bits) ... |
<raph> anyway, in that case, it basically points to a mini table |
<raph> the n_bits is the maximum length of all codes beginning with that byte |
<raph> so 2^(n_bits - initial_bits) is the size of the mini-table |
<raph> peter came up with this, and it makes sense |
*/ |
typedef struct cfd_node_s cfd_node; |
struct cfd_node_s |
{ |
short val; |
short nbits; |
}; |
enum |
{ |
cfd_white_initial_bits = 8, |
cfd_black_initial_bits = 7, |
cfd_2d_initial_bits = 7, |
cfd_uncompressed_initial_bits = 6 /* must be 6 */ |
}; |
/* non-run codes in tables */ |
enum |
{ |
ERROR = -1, |
ZEROS = -2, /* EOL follows, possibly with more padding first */ |
UNCOMPRESSED = -3 |
}; |
/* semantic codes for cf_2d_decode */ |
enum |
{ |
P = -4, |
H = -5, |
VR3 = 0, |
VR2 = 1, |
VR1 = 2, |
V0 = 3, |
VL1 = 4, |
VL2 = 5, |
VL3 = 6 |
}; |
/* White decoding table. */ |
const cfd_node cf_white_decode[] = { |
{256,12},{272,12},{29,8},{30,8},{45,8},{46,8},{22,7},{22,7}, |
{23,7},{23,7},{47,8},{48,8},{13,6},{13,6},{13,6},{13,6},{20,7}, |
{20,7},{33,8},{34,8},{35,8},{36,8},{37,8},{38,8},{19,7},{19,7}, |
{31,8},{32,8},{1,6},{1,6},{1,6},{1,6},{12,6},{12,6},{12,6},{12,6}, |
{53,8},{54,8},{26,7},{26,7},{39,8},{40,8},{41,8},{42,8},{43,8}, |
{44,8},{21,7},{21,7},{28,7},{28,7},{61,8},{62,8},{63,8},{0,8}, |
{320,8},{384,8},{10,5},{10,5},{10,5},{10,5},{10,5},{10,5},{10,5}, |
{10,5},{11,5},{11,5},{11,5},{11,5},{11,5},{11,5},{11,5},{11,5}, |
{27,7},{27,7},{59,8},{60,8},{288,9},{290,9},{18,7},{18,7},{24,7}, |
{24,7},{49,8},{50,8},{51,8},{52,8},{25,7},{25,7},{55,8},{56,8}, |
{57,8},{58,8},{192,6},{192,6},{192,6},{192,6},{1664,6},{1664,6}, |
{1664,6},{1664,6},{448,8},{512,8},{292,9},{640,8},{576,8},{294,9}, |
{296,9},{298,9},{300,9},{302,9},{256,7},{256,7},{2,4},{2,4},{2,4}, |
{2,4},{2,4},{2,4},{2,4},{2,4},{2,4},{2,4},{2,4},{2,4},{2,4},{2,4}, |
{2,4},{2,4},{3,4},{3,4},{3,4},{3,4},{3,4},{3,4},{3,4},{3,4},{3,4}, |
{3,4},{3,4},{3,4},{3,4},{3,4},{3,4},{3,4},{128,5},{128,5},{128,5}, |
{128,5},{128,5},{128,5},{128,5},{128,5},{8,5},{8,5},{8,5},{8,5}, |
{8,5},{8,5},{8,5},{8,5},{9,5},{9,5},{9,5},{9,5},{9,5},{9,5},{9,5}, |
{9,5},{16,6},{16,6},{16,6},{16,6},{17,6},{17,6},{17,6},{17,6}, |
{4,4},{4,4},{4,4},{4,4},{4,4},{4,4},{4,4},{4,4},{4,4},{4,4},{4,4}, |
{4,4},{4,4},{4,4},{4,4},{4,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4}, |
{5,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4}, |
{14,6},{14,6},{14,6},{14,6},{15,6},{15,6},{15,6},{15,6},{64,5}, |
{64,5},{64,5},{64,5},{64,5},{64,5},{64,5},{64,5},{6,4},{6,4}, |
{6,4},{6,4},{6,4},{6,4},{6,4},{6,4},{6,4},{6,4},{6,4},{6,4},{6,4}, |
{6,4},{6,4},{6,4},{7,4},{7,4},{7,4},{7,4},{7,4},{7,4},{7,4},{7,4}, |
{7,4},{7,4},{7,4},{7,4},{7,4},{7,4},{7,4},{7,4},{-2,3},{-2,3}, |
{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0}, |
{-1,0},{-1,0},{-1,0},{-1,0},{-3,4},{1792,3},{1792,3},{1984,4}, |
{2048,4},{2112,4},{2176,4},{2240,4},{2304,4},{1856,3},{1856,3}, |
{1920,3},{1920,3},{2368,4},{2432,4},{2496,4},{2560,4},{1472,1}, |
{1536,1},{1600,1},{1728,1},{704,1},{768,1},{832,1},{896,1}, |
{960,1},{1024,1},{1088,1},{1152,1},{1216,1},{1280,1},{1344,1}, |
{1408,1} |
}; |
/* Black decoding table. */ |
const cfd_node cf_black_decode[] = { |
{128,12},{160,13},{224,12},{256,12},{10,7},{11,7},{288,12},{12,7}, |
{9,6},{9,6},{8,6},{8,6},{7,5},{7,5},{7,5},{7,5},{6,4},{6,4},{6,4}, |
{6,4},{6,4},{6,4},{6,4},{6,4},{5,4},{5,4},{5,4},{5,4},{5,4},{5,4}, |
{5,4},{5,4},{1,3},{1,3},{1,3},{1,3},{1,3},{1,3},{1,3},{1,3},{1,3}, |
{1,3},{1,3},{1,3},{1,3},{1,3},{1,3},{1,3},{4,3},{4,3},{4,3},{4,3}, |
{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3}, |
{4,3},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2}, |
{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2}, |
{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2},{3,2}, |
{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2}, |
{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2}, |
{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2},{2,2}, |
{-2,4},{-2,4},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0}, |
{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-3,5},{1792,4}, |
{1792,4},{1984,5},{2048,5},{2112,5},{2176,5},{2240,5},{2304,5}, |
{1856,4},{1856,4},{1920,4},{1920,4},{2368,5},{2432,5},{2496,5}, |
{2560,5},{18,3},{18,3},{18,3},{18,3},{18,3},{18,3},{18,3},{18,3}, |
{52,5},{52,5},{640,6},{704,6},{768,6},{832,6},{55,5},{55,5}, |
{56,5},{56,5},{1280,6},{1344,6},{1408,6},{1472,6},{59,5},{59,5}, |
{60,5},{60,5},{1536,6},{1600,6},{24,4},{24,4},{24,4},{24,4}, |
{25,4},{25,4},{25,4},{25,4},{1664,6},{1728,6},{320,5},{320,5}, |
{384,5},{384,5},{448,5},{448,5},{512,6},{576,6},{53,5},{53,5}, |
{54,5},{54,5},{896,6},{960,6},{1024,6},{1088,6},{1152,6},{1216,6}, |
{64,3},{64,3},{64,3},{64,3},{64,3},{64,3},{64,3},{64,3},{13,1}, |
{13,1},{13,1},{13,1},{13,1},{13,1},{13,1},{13,1},{13,1},{13,1}, |
{13,1},{13,1},{13,1},{13,1},{13,1},{13,1},{23,4},{23,4},{50,5}, |
{51,5},{44,5},{45,5},{46,5},{47,5},{57,5},{58,5},{61,5},{256,5}, |
{16,3},{16,3},{16,3},{16,3},{17,3},{17,3},{17,3},{17,3},{48,5}, |
{49,5},{62,5},{63,5},{30,5},{31,5},{32,5},{33,5},{40,5},{41,5}, |
{22,4},{22,4},{14,1},{14,1},{14,1},{14,1},{14,1},{14,1},{14,1}, |
{14,1},{14,1},{14,1},{14,1},{14,1},{14,1},{14,1},{14,1},{14,1}, |
{15,2},{15,2},{15,2},{15,2},{15,2},{15,2},{15,2},{15,2},{128,5}, |
{192,5},{26,5},{27,5},{28,5},{29,5},{19,4},{19,4},{20,4},{20,4}, |
{34,5},{35,5},{36,5},{37,5},{38,5},{39,5},{21,4},{21,4},{42,5}, |
{43,5},{0,3},{0,3},{0,3},{0,3} |
}; |
/* 2-D decoding table. */ |
const cfd_node cf_2d_decode[] = { |
{128,11},{144,10},{6,7},{0,7},{5,6},{5,6},{1,6},{1,6},{-4,4}, |
{-4,4},{-4,4},{-4,4},{-4,4},{-4,4},{-4,4},{-4,4},{-5,3},{-5,3}, |
{-5,3},{-5,3},{-5,3},{-5,3},{-5,3},{-5,3},{-5,3},{-5,3},{-5,3}, |
{-5,3},{-5,3},{-5,3},{-5,3},{-5,3},{4,3},{4,3},{4,3},{4,3},{4,3}, |
{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3},{4,3}, |
{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{2,3}, |
{2,3},{2,3},{2,3},{2,3},{2,3},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1},{3,1}, |
{3,1},{3,1},{3,1},{-2,4},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0}, |
{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0}, |
{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-1,0},{-3,3} |
}; |
/* Uncompresssed decoding table. */ |
const cfd_node cf_uncompressed_decode[] = { |
{64,12},{5,6},{4,5},{4,5},{3,4},{3,4},{3,4},{3,4},{2,3},{2,3}, |
{2,3},{2,3},{2,3},{2,3},{2,3},{2,3},{1,2},{1,2},{1,2},{1,2},{1,2}, |
{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2}, |
{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1}, |
{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1}, |
{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0,1}, |
{-1,0},{-1,0},{8,6},{9,6},{6,5},{6,5},{7,5},{7,5},{4,4},{4,4}, |
{4,4},{4,4},{5,4},{5,4},{5,4},{5,4},{2,3},{2,3},{2,3},{2,3},{2,3}, |
{2,3},{2,3},{2,3},{3,3},{3,3},{3,3},{3,3},{3,3},{3,3},{3,3},{3,3}, |
{0,2},{0,2},{0,2},{0,2},{0,2},{0,2},{0,2},{0,2},{0,2},{0,2},{0,2}, |
{0,2},{0,2},{0,2},{0,2},{0,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2}, |
{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2},{1,2} |
}; |
/* bit magic */ |
static inline int getbit(const unsigned char *buf, int x) |
{ |
return ( buf[x >> 3] >> ( 7 - (x & 7) ) ) & 1; |
} |
static int |
find_changing(const unsigned char *line, int x, int w) |
{ |
int a, b; |
if (!line) |
return w; |
if (x == -1) |
{ |
a = 0; |
x = 0; |
} |
else |
{ |
a = getbit(line, x); |
x++; |
} |
while (x < w) |
{ |
b = getbit(line, x); |
if (a != b) |
break; |
x++; |
} |
return x; |
} |
static int |
find_changing_color(const unsigned char *line, int x, int w, int color) |
{ |
if (!line) |
return w; |
x = find_changing(line, x, w); |
if (x < w && getbit(line, x) != color) |
x = find_changing(line, x, w); |
return x; |
} |
static const unsigned char lm[8] = { |
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 |
}; |
static const unsigned char rm[8] = { |
0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE |
}; |
static inline void setbits(unsigned char *line, int x0, int x1) |
{ |
int a0, a1, b0, b1, a; |
a0 = x0 >> 3; |
a1 = x1 >> 3; |
b0 = x0 & 7; |
b1 = x1 & 7; |
if (a0 == a1) |
{ |
if (b1) |
line[a0] |= lm[b0] & rm[b1]; |
} |
else |
{ |
line[a0] |= lm[b0]; |
for (a = a0 + 1; a < a1; a++) |
line[a] = 0xFF; |
if (b1) |
line[a1] |= rm[b1]; |
} |
} |
typedef struct fz_faxd_s fz_faxd; |
enum |
{ |
STATE_NORMAL, /* neutral state, waiting for any code */ |
STATE_MAKEUP, /* got a 1d makeup code, waiting for terminating code */ |
STATE_EOL, /* at eol, needs output buffer space */ |
STATE_H1, STATE_H2, /* in H part 1 and 2 (both makeup and terminating codes) */ |
STATE_DONE /* all done */ |
}; |
struct fz_faxd_s |
{ |
fz_stream *chain; |
int k; |
int end_of_line; |
int encoded_byte_align; |
int columns; |
int rows; |
int end_of_block; |
int black_is_1; |
int stride; |
int ridx; |
int bidx; |
unsigned int word; |
int stage; |
int a, c, dim, eolc; |
unsigned char *ref; |
unsigned char *dst; |
unsigned char *rp, *wp; |
}; |
static inline void eat_bits(fz_faxd *fax, int nbits) |
{ |
fax->word <<= nbits; |
fax->bidx += nbits; |
} |
static int |
fill_bits(fz_faxd *fax) |
{ |
while (fax->bidx >= 8) |
{ |
int c = fz_read_byte(fax->chain); |
if (c == EOF) |
return EOF; |
fax->bidx -= 8; |
fax->word |= c << fax->bidx; |
} |
return 0; |
} |
static int |
get_code(fz_faxd *fax, const cfd_node *table, int initialbits) |
{ |
unsigned int word = fax->word; |
int tidx = word >> (32 - initialbits); |
int val = table[tidx].val; |
int nbits = table[tidx].nbits; |
if (nbits > initialbits) |
{ |
int mask = (1 << (32 - initialbits)) - 1; |
tidx = val + ((word & mask) >> (32 - nbits)); |
val = table[tidx].val; |
nbits = initialbits + table[tidx].nbits; |
} |
eat_bits(fax, nbits); |
return val; |
} |
/* decode one 1d code */ |
static fz_error |
dec1d(fz_faxd *fax) |
{ |
int code; |
if (fax->a == -1) |
fax->a = 0; |
if (fax->c) |
code = get_code(fax, cf_black_decode, cfd_black_initial_bits); |
else |
code = get_code(fax, cf_white_decode, cfd_white_initial_bits); |
if (code == UNCOMPRESSED) |
return fz_throw("uncompressed data in faxd"); |
if (code < 0) |
return fz_throw("negative code in 1d faxd"); |
if (fax->a + code > fax->columns) |
return fz_throw("overflow in 1d faxd"); |
if (fax->c) |
setbits(fax->dst, fax->a, fax->a + code); |
fax->a += code; |
if (code < 64) |
{ |
fax->c = !fax->c; |
fax->stage = STATE_NORMAL; |
} |
else |
fax->stage = STATE_MAKEUP; |
return fz_okay; |
} |
/* decode one 2d code */ |
static fz_error |
dec2d(fz_faxd *fax) |
{ |
int code, b1, b2; |
if (fax->stage == STATE_H1 || fax->stage == STATE_H2) |
{ |
if (fax->a == -1) |
fax->a = 0; |
if (fax->c) |
code = get_code(fax, cf_black_decode, cfd_black_initial_bits); |
else |
code = get_code(fax, cf_white_decode, cfd_white_initial_bits); |
if (code == UNCOMPRESSED) |
return fz_throw("uncompressed data in faxd"); |
if (code < 0) |
return fz_throw("negative code in 2d faxd"); |
if (fax->a + code > fax->columns) |
return fz_throw("overflow in 2d faxd"); |
if (fax->c) |
setbits(fax->dst, fax->a, fax->a + code); |
fax->a += code; |
if (code < 64) |
{ |
fax->c = !fax->c; |
if (fax->stage == STATE_H1) |
fax->stage = STATE_H2; |
else if (fax->stage == STATE_H2) |
fax->stage = STATE_NORMAL; |
} |
return fz_okay; |
} |
code = get_code(fax, cf_2d_decode, cfd_2d_initial_bits); |
switch (code) |
{ |
case H: |
fax->stage = STATE_H1; |
break; |
case P: |
b1 = find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 >= fax->columns) |
b2 = fax->columns; |
else |
b2 = find_changing(fax->ref, b1, fax->columns); |
if (fax->c) setbits(fax->dst, fax->a, b2); |
fax->a = b2; |
break; |
case V0: |
b1 = find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VR1: |
b1 = 1 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 >= fax->columns) b1 = fax->columns; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VR2: |
b1 = 2 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 >= fax->columns) b1 = fax->columns; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VR3: |
b1 = 3 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 >= fax->columns) b1 = fax->columns; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VL1: |
b1 = -1 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 < 0) b1 = 0; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VL2: |
b1 = -2 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 < 0) b1 = 0; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case VL3: |
b1 = -3 + find_changing_color(fax->ref, fax->a, fax->columns, !fax->c); |
if (b1 < 0) b1 = 0; |
if (fax->c) setbits(fax->dst, fax->a, b1); |
fax->a = b1; |
fax->c = !fax->c; |
break; |
case UNCOMPRESSED: |
return fz_throw("uncompressed data in faxd"); |
case ERROR: |
return fz_throw("invalid code in 2d faxd"); |
default: |
return fz_throw("invalid code in 2d faxd (%d)", code); |
} |
return 0; |
} |
static int |
read_faxd(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_faxd *fax = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
unsigned char *tmp; |
fz_error error; |
if (fax->stage == STATE_DONE) |
return 0; |
if (fax->stage == STATE_EOL) |
goto eol; |
loop: |
if (fill_bits(fax)) |
{ |
if (fax->bidx > 31) |
{ |
if (fax->a > 0) |
goto eol; |
goto rtc; |
} |
} |
if ((fax->word >> (32 - 12)) == 0) |
{ |
eat_bits(fax, 1); |
goto loop; |
} |
if ((fax->word >> (32 - 12)) == 1) |
{ |
eat_bits(fax, 12); |
fax->eolc ++; |
if (fax->k > 0) |
{ |
if (fax->a == -1) |
fax->a = 0; |
if ((fax->word >> (32 - 1)) == 1) |
fax->dim = 1; |
else |
fax->dim = 2; |
eat_bits(fax, 1); |
} |
} |
else if (fax->k > 0 && fax->a == -1) |
{ |
fax->a = 0; |
if ((fax->word >> (32 - 1)) == 1) |
fax->dim = 1; |
else |
fax->dim = 2; |
eat_bits(fax, 1); |
} |
else if (fax->dim == 1) |
{ |
fax->eolc = 0; |
error = dec1d(fax); |
if (error) |
return fz_rethrow(error, "cannot decode 1d code"); |
} |
else if (fax->dim == 2) |
{ |
fax->eolc = 0; |
error = dec2d(fax); |
if (error) |
return fz_rethrow(error, "cannot decode 2d code"); |
} |
/* no eol check after makeup codes nor in the middle of an H code */ |
if (fax->stage == STATE_MAKEUP || fax->stage == STATE_H1 || fax->stage == STATE_H2) |
goto loop; |
/* check for eol conditions */ |
if (fax->eolc || fax->a >= fax->columns) |
{ |
if (fax->a > 0) |
goto eol; |
if (fax->eolc == (fax->k < 0 ? 2 : 6)) |
goto rtc; |
} |
goto loop; |
eol: |
fax->stage = STATE_EOL; |
if (fax->black_is_1) |
{ |
while (fax->rp < fax->wp && p < ep) |
*p++ = *fax->rp++; |
} |
else |
{ |
while (fax->rp < fax->wp && p < ep) |
*p++ = *fax->rp++ ^ 0xff; |
} |
if (fax->rp < fax->wp) |
return p - buf; |
tmp = fax->ref; |
fax->ref = fax->dst; |
fax->dst = tmp; |
memset(fax->dst, 0, fax->stride); |
fax->rp = fax->dst; |
fax->wp = fax->dst + fax->stride; |
fax->stage = STATE_NORMAL; |
fax->c = 0; |
fax->a = -1; |
fax->ridx ++; |
if (!fax->end_of_block && fax->rows) |
{ |
if (fax->ridx >= fax->rows) |
goto rtc; |
} |
/* we have not read dim from eol, make a guess */ |
if (fax->k > 0 && !fax->eolc && fax->a == -1) |
{ |
if (fax->ridx % fax->k == 0) |
fax->dim = 1; |
else |
fax->dim = 2; |
} |
/* if end_of_line & encoded_byte_align, EOLs are *not* optional */ |
if (fax->encoded_byte_align) |
{ |
if (fax->end_of_line) |
eat_bits(fax, (12 - fax->bidx) & 7); |
else |
eat_bits(fax, (8 - fax->bidx) & 7); |
} |
/* no more space in output, don't decode the next row yet */ |
if (p == buf + len) |
return p - buf; |
goto loop; |
rtc: |
fax->stage = STATE_DONE; |
return p - buf; |
} |
static void |
close_faxd(fz_stream *stm) |
{ |
fz_faxd *fax = stm->state; |
int i; |
/* if we read any extra bytes, try to put them back */ |
i = (32 - fax->bidx) / 8; |
while (i--) |
fz_unread_byte(fax->chain); |
fz_close(fax->chain); |
fz_free(fax->ref); |
fz_free(fax->dst); |
fz_free(fax); |
} |
fz_stream * |
fz_open_faxd(fz_stream *chain, fz_obj *params) |
{ |
fz_faxd *fax; |
fz_obj *obj; |
fax = fz_malloc(sizeof(fz_faxd)); |
fax->chain = chain; |
fax->ref = NULL; |
fax->dst = NULL; |
fax->k = 0; |
fax->end_of_line = 0; |
fax->encoded_byte_align = 0; |
fax->columns = 1728; |
fax->rows = 0; |
fax->end_of_block = 1; |
fax->black_is_1 = 0; |
obj = fz_dict_gets(params, "K"); |
if (obj) fax->k = fz_to_int(obj); |
obj = fz_dict_gets(params, "EndOfLine"); |
if (obj) fax->end_of_line = fz_to_bool(obj); |
obj = fz_dict_gets(params, "EncodedByteAlign"); |
if (obj) fax->encoded_byte_align = fz_to_bool(obj); |
obj = fz_dict_gets(params, "Columns"); |
if (obj) fax->columns = fz_to_int(obj); |
obj = fz_dict_gets(params, "Rows"); |
if (obj) fax->rows = fz_to_int(obj); |
obj = fz_dict_gets(params, "EndOfBlock"); |
if (obj) fax->end_of_block = fz_to_bool(obj); |
obj = fz_dict_gets(params, "BlackIs1"); |
if (obj) fax->black_is_1 = fz_to_bool(obj); |
fax->stride = ((fax->columns - 1) >> 3) + 1; |
fax->ridx = 0; |
fax->bidx = 32; |
fax->word = 0; |
fax->stage = STATE_NORMAL; |
fax->a = -1; |
fax->c = 0; |
fax->dim = fax->k < 0 ? 2 : 1; |
fax->eolc = 0; |
fax->ref = fz_malloc(fax->stride); |
fax->dst = fz_malloc(fax->stride); |
fax->rp = fax->dst; |
fax->wp = fax->dst + fax->stride; |
memset(fax->ref, 0, fax->stride); |
memset(fax->dst, 0, fax->stride); |
return fz_new_stream(fax, read_faxd, close_faxd); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_flate.c |
---|
0,0 → 1,103 |
#include "fitz.h" |
#include <zlib.h> |
typedef struct fz_flate_s fz_flate; |
struct fz_flate_s |
{ |
fz_stream *chain; |
z_stream z; |
}; |
static void *zalloc(void *opaque, unsigned int items, unsigned int size) |
{ |
return fz_calloc(items, size); |
} |
static void zfree(void *opaque, void *ptr) |
{ |
fz_free(ptr); |
} |
static int |
read_flated(fz_stream *stm, unsigned char *outbuf, int outlen) |
{ |
fz_flate *state = stm->state; |
fz_stream *chain = state->chain; |
z_streamp zp = &state->z; |
int code; |
zp->next_out = outbuf; |
zp->avail_out = outlen; |
while (zp->avail_out > 0) |
{ |
if (chain->rp == chain->wp) |
fz_fill_buffer(chain); |
zp->next_in = chain->rp; |
zp->avail_in = chain->wp - chain->rp; |
code = inflate(zp, Z_SYNC_FLUSH); |
chain->rp = chain->wp - zp->avail_in; |
if (code == Z_STREAM_END) |
{ |
return outlen - zp->avail_out; |
} |
else if (code == Z_BUF_ERROR) |
{ |
fz_warn("premature end of data in flate filter"); |
return outlen - zp->avail_out; |
} |
else if (code == Z_DATA_ERROR && zp->avail_in == 0) |
{ |
fz_warn("ignoring zlib error: %s", zp->msg); |
return outlen - zp->avail_out; |
} |
else if (code != Z_OK) |
{ |
return fz_throw("zlib error: %s", zp->msg); |
} |
} |
return outlen - zp->avail_out; |
} |
static void |
close_flated(fz_stream *stm) |
{ |
fz_flate *state = stm->state; |
int code; |
code = inflateEnd(&state->z); |
if (code != Z_OK) |
fz_warn("zlib error: inflateEnd: %s", state->z.msg); |
fz_close(state->chain); |
fz_free(state); |
} |
fz_stream * |
fz_open_flated(fz_stream *chain) |
{ |
fz_flate *state; |
int code; |
state = fz_malloc(sizeof(fz_flate)); |
state->chain = chain; |
state->z.zalloc = zalloc; |
state->z.zfree = zfree; |
state->z.opaque = NULL; |
state->z.next_in = NULL; |
state->z.avail_in = 0; |
code = inflateInit(&state->z); |
if (code != Z_OK) |
fz_warn("zlib error: inflateInit: %s", state->z.msg); |
return fz_new_stream(state, read_flated, close_flated); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_jbig2d.c |
---|
0,0 → 1,103 |
#include "fitz.h" |
#ifdef _WIN32 /* Microsoft Visual C++ */ |
typedef signed char int8_t; |
typedef short int int16_t; |
typedef int int32_t; |
typedef __int64 int64_t; |
typedef unsigned char uint8_t; |
typedef unsigned short int uint16_t; |
typedef unsigned int uint32_t; |
#else |
#include <inttypes.h> |
#endif |
#include <jbig2.h> |
typedef struct fz_jbig2d_s fz_jbig2d; |
struct fz_jbig2d_s |
{ |
fz_stream *chain; |
Jbig2Ctx *ctx; |
Jbig2GlobalCtx *gctx; |
Jbig2Image *page; |
int idx; |
}; |
static void |
close_jbig2d(fz_stream *stm) |
{ |
fz_jbig2d *state = stm->state; |
if (state->page) |
jbig2_release_page(state->ctx, state->page); |
if (state->gctx) |
jbig2_global_ctx_free(state->gctx); |
jbig2_ctx_free(state->ctx); |
fz_close(state->chain); |
fz_free(state); |
} |
static int |
read_jbig2d(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_jbig2d *state = stm->state; |
unsigned char tmp[4096]; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
unsigned char *s; |
int x, w, n; |
if (!state->page) |
{ |
while (1) |
{ |
n = fz_read(state->chain, tmp, sizeof tmp); |
if (n < 0) |
return fz_rethrow(n, "read error in jbig2 filter"); |
if (n == 0) |
break; |
jbig2_data_in(state->ctx, tmp, n); |
} |
jbig2_complete_page(state->ctx); |
state->page = jbig2_page_out(state->ctx); |
if (!state->page) |
return fz_throw("jbig2_page_out failed"); |
} |
s = state->page->data; |
w = state->page->height * state->page->stride; |
x = state->idx; |
while (p < ep && x < w) |
*p++ = s[x++] ^ 0xff; |
state->idx = x; |
return p - buf; |
} |
fz_stream * |
fz_open_jbig2d(fz_stream *chain, fz_buffer *globals) |
{ |
fz_jbig2d *state; |
state = fz_malloc(sizeof(fz_jbig2d)); |
state->chain = chain; |
state->ctx = jbig2_ctx_new(NULL, JBIG2_OPTIONS_EMBEDDED, NULL, NULL, NULL); |
state->gctx = NULL; |
state->page = NULL; |
state->idx = 0; |
if (globals) |
{ |
jbig2_data_in(state->ctx, globals->data, globals->len); |
state->gctx = jbig2_make_global_ctx(state->ctx); |
state->ctx = jbig2_ctx_new(NULL, JBIG2_OPTIONS_EMBEDDED, state->gctx, NULL, NULL); |
} |
return fz_new_stream(state, read_jbig2d, close_jbig2d); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_jpxd.c |
---|
0,0 → 1,153 |
#include "fitz.h" |
#define OPJ_STATIC |
#include <openjpeg.h> |
static void fz_opj_error_callback(const char *msg, void *client_data) |
{ |
fprintf(stderr, "openjpeg error: %s", msg); |
} |
static void fz_opj_warning_callback(const char *msg, void *client_data) |
{ |
fprintf(stderr, "openjpeg warning: %s", msg); |
} |
static void fz_opj_info_callback(const char *msg, void *client_data) |
{ |
/* fprintf(stderr, "openjpeg info: %s", msg); */ |
} |
fz_error |
fz_load_jpx_image(fz_pixmap **imgp, unsigned char *data, int size, fz_colorspace *defcs) |
{ |
fz_pixmap *img; |
opj_event_mgr_t evtmgr; |
opj_dparameters_t params; |
opj_dinfo_t *info; |
opj_cio_t *cio; |
opj_image_t *jpx; |
fz_colorspace *colorspace; |
unsigned char *p; |
int format; |
int a, n, w, h, depth, sgnd; |
int x, y, k, v; |
if (size < 2) |
return fz_throw("not enough data to determine image format"); |
/* Check for SOC marker -- if found we have a bare J2K stream */ |
if (data[0] == 0xFF && data[1] == 0x4F) |
format = CODEC_J2K; |
else |
format = CODEC_JP2; |
memset(&evtmgr, 0, sizeof(evtmgr)); |
evtmgr.error_handler = fz_opj_error_callback; |
evtmgr.warning_handler = fz_opj_warning_callback; |
evtmgr.info_handler = fz_opj_info_callback; |
opj_set_default_decoder_parameters(¶ms); |
info = opj_create_decompress(format); |
opj_set_event_mgr((opj_common_ptr)info, &evtmgr, stderr); |
opj_setup_decoder(info, ¶ms); |
cio = opj_cio_open((opj_common_ptr)info, data, size); |
jpx = opj_decode(info, cio); |
opj_cio_close(cio); |
opj_destroy_decompress(info); |
if (!jpx) |
return fz_throw("opj_decode failed"); |
for (k = 1; k < jpx->numcomps; k++) |
{ |
if (jpx->comps[k].w != jpx->comps[0].w) |
return fz_throw("image components have different width"); |
if (jpx->comps[k].h != jpx->comps[0].h) |
return fz_throw("image components have different height"); |
if (jpx->comps[k].prec != jpx->comps[0].prec) |
return fz_throw("image components have different precision"); |
} |
n = jpx->numcomps; |
w = jpx->comps[0].w; |
h = jpx->comps[0].h; |
depth = jpx->comps[0].prec; |
sgnd = jpx->comps[0].sgnd; |
if (jpx->color_space == CLRSPC_SRGB && n == 4) { n = 3; a = 1; } |
else if (jpx->color_space == CLRSPC_SYCC && n == 4) { n = 3; a = 1; } |
else if (n == 2) { n = 1; a = 1; } |
else if (n > 4) { n = 4; a = 1; } |
else { a = 0; } |
if (defcs) |
{ |
if (defcs->n == n) |
{ |
colorspace = defcs; |
} |
else |
{ |
fz_warn("jpx file and dict colorspaces do not match"); |
defcs = NULL; |
} |
} |
if (!defcs) |
{ |
switch (n) |
{ |
case 1: colorspace = fz_device_gray; break; |
case 3: colorspace = fz_device_rgb; break; |
case 4: colorspace = fz_device_cmyk; break; |
} |
} |
img = fz_new_pixmap_with_limit(colorspace, w, h); |
if (!img) |
{ |
opj_image_destroy(jpx); |
return fz_throw("out of memory"); |
} |
p = img->samples; |
for (y = 0; y < h; y++) |
{ |
for (x = 0; x < w; x++) |
{ |
for (k = 0; k < n + a; k++) |
{ |
v = jpx->comps[k].data[y * w + x]; |
if (sgnd) |
v = v + (1 << (depth - 1)); |
if (depth > 8) |
v = v >> (depth - 8); |
*p++ = v; |
} |
if (!a) |
*p++ = 255; |
} |
} |
if (a) |
{ |
if (n == 4) |
{ |
fz_pixmap *tmp = fz_new_pixmap(fz_device_rgb, w, h); |
fz_convert_pixmap(img, tmp); |
fz_drop_pixmap(img); |
img = tmp; |
} |
fz_premultiply_pixmap(img); |
} |
opj_image_destroy(jpx); |
*imgp = img; |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_lzwd.c |
---|
0,0 → 1,206 |
#include "fitz.h" |
/* TODO: error checking */ |
enum |
{ |
MIN_BITS = 9, |
MAX_BITS = 12, |
NUM_CODES = (1 << MAX_BITS), |
LZW_CLEAR = 256, |
LZW_EOD = 257, |
LZW_FIRST = 258, |
MAX_LENGTH = 4097 |
}; |
typedef struct lzw_code_s lzw_code; |
struct lzw_code_s |
{ |
int prev; /* prev code (in string) */ |
unsigned short length; /* string len, including this token */ |
unsigned char value; /* data value */ |
unsigned char first_char; /* first token of string */ |
}; |
typedef struct fz_lzwd_s fz_lzwd; |
struct fz_lzwd_s |
{ |
fz_stream *chain; |
int eod; |
int early_change; |
int code_bits; /* num bits/code */ |
int code; /* current code */ |
int old_code; /* previously recognized code */ |
int next_code; /* next free entry */ |
lzw_code table[NUM_CODES]; |
unsigned char bp[MAX_LENGTH]; |
unsigned char *rp, *wp; |
}; |
static int |
read_lzwd(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_lzwd *lzw = stm->state; |
lzw_code *table = lzw->table; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
unsigned char *s; |
int codelen; |
int code_bits = lzw->code_bits; |
int code = lzw->code; |
int old_code = lzw->old_code; |
int next_code = lzw->next_code; |
while (lzw->rp < lzw->wp && p < ep) |
*p++ = *lzw->rp++; |
while (p < ep) |
{ |
if (lzw->eod) |
return 0; |
code = fz_read_bits(lzw->chain, code_bits); |
if (fz_is_eof_bits(lzw->chain)) |
{ |
lzw->eod = 1; |
break; |
} |
if (code == LZW_EOD) |
{ |
lzw->eod = 1; |
break; |
} |
if (code == LZW_CLEAR) |
{ |
code_bits = MIN_BITS; |
next_code = LZW_FIRST; |
old_code = -1; |
continue; |
} |
/* if stream starts without a clear code, old_code is undefined... */ |
if (old_code == -1) |
{ |
old_code = code; |
} |
else |
{ |
/* add new entry to the code table */ |
table[next_code].prev = old_code; |
table[next_code].first_char = table[old_code].first_char; |
table[next_code].length = table[old_code].length + 1; |
if (code < next_code) |
table[next_code].value = table[code].first_char; |
else if (code == next_code) |
table[next_code].value = table[next_code].first_char; |
else |
fz_warn("out of range code encountered in lzw decode"); |
next_code ++; |
if (next_code > (1 << code_bits) - lzw->early_change - 1) |
{ |
code_bits ++; |
if (code_bits > MAX_BITS) |
code_bits = MAX_BITS; /* FIXME */ |
} |
old_code = code; |
} |
/* code maps to a string, copy to output (in reverse...) */ |
if (code > 255) |
{ |
codelen = table[code].length; |
lzw->rp = lzw->bp; |
lzw->wp = lzw->bp + codelen; |
assert(codelen < MAX_LENGTH); |
s = lzw->wp; |
do { |
*(--s) = table[code].value; |
code = table[code].prev; |
} while (code >= 0 && s > lzw->bp); |
} |
/* ... or just a single character */ |
else |
{ |
lzw->bp[0] = code; |
lzw->rp = lzw->bp; |
lzw->wp = lzw->bp + 1; |
} |
/* copy to output */ |
while (lzw->rp < lzw->wp && p < ep) |
*p++ = *lzw->rp++; |
} |
lzw->code_bits = code_bits; |
lzw->code = code; |
lzw->old_code = old_code; |
lzw->next_code = next_code; |
return p - buf; |
} |
static void |
close_lzwd(fz_stream *stm) |
{ |
fz_lzwd *lzw = stm->state; |
fz_close(lzw->chain); |
fz_free(lzw); |
} |
fz_stream * |
fz_open_lzwd(fz_stream *chain, fz_obj *params) |
{ |
fz_lzwd *lzw; |
fz_obj *obj; |
int i; |
lzw = fz_malloc(sizeof(fz_lzwd)); |
lzw->chain = chain; |
lzw->eod = 0; |
lzw->early_change = 1; |
obj = fz_dict_gets(params, "EarlyChange"); |
if (obj) |
lzw->early_change = !!fz_to_int(obj); |
for (i = 0; i < 256; i++) |
{ |
lzw->table[i].value = i; |
lzw->table[i].first_char = i; |
lzw->table[i].length = 1; |
lzw->table[i].prev = -1; |
} |
for (i = 256; i < NUM_CODES; i++) |
{ |
lzw->table[i].value = 0; |
lzw->table[i].first_char = 0; |
lzw->table[i].length = 0; |
lzw->table[i].prev = -1; |
} |
lzw->code_bits = MIN_BITS; |
lzw->code = -1; |
lzw->next_code = LZW_FIRST; |
lzw->old_code = -1; |
lzw->rp = lzw->bp; |
lzw->wp = lzw->bp; |
return fz_new_stream(lzw, read_lzwd, close_lzwd); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/filt_predict.c |
---|
0,0 → 1,243 |
#include "fitz.h" |
/* TODO: check if this works with 16bpp images */ |
enum { MAXC = 32 }; |
typedef struct fz_predict_s fz_predict; |
struct fz_predict_s |
{ |
fz_stream *chain; |
int predictor; |
int columns; |
int colors; |
int bpc; |
int stride; |
int bpp; |
unsigned char *in; |
unsigned char *out; |
unsigned char *ref; |
unsigned char *rp, *wp; |
}; |
static inline int getcomponent(unsigned char *line, int x, int bpc) |
{ |
switch (bpc) |
{ |
case 1: return (line[x >> 3] >> ( 7 - (x & 7) ) ) & 1; |
case 2: return (line[x >> 2] >> ( ( 3 - (x & 3) ) << 1 ) ) & 3; |
case 4: return (line[x >> 1] >> ( ( 1 - (x & 1) ) << 2 ) ) & 15; |
case 8: return line[x]; |
} |
return 0; |
} |
static inline void putcomponent(unsigned char *buf, int x, int bpc, int value) |
{ |
switch (bpc) |
{ |
case 1: buf[x >> 3] |= value << (7 - (x & 7)); break; |
case 2: buf[x >> 2] |= value << ((3 - (x & 3)) << 1); break; |
case 4: buf[x >> 1] |= value << ((1 - (x & 1)) << 2); break; |
case 8: buf[x] = value; break; |
} |
} |
static inline int paeth(int a, int b, int c) |
{ |
/* The definitions of ac and bc are correct, not a typo. */ |
int ac = b - c, bc = a - c, abcc = ac + bc; |
int pa = ABS(ac); |
int pb = ABS(bc); |
int pc = ABS(abcc); |
return pa <= pb && pa <= pc ? a : pb <= pc ? b : c; |
} |
static void |
fz_predict_tiff(fz_predict *state, unsigned char *out, unsigned char *in, int len) |
{ |
int left[MAXC]; |
int i, k; |
for (k = 0; k < state->colors; k++) |
left[k] = 0; |
for (i = 0; i < state->columns; i++) |
{ |
for (k = 0; k < state->colors; k++) |
{ |
int a = getcomponent(in, i * state->colors + k, state->bpc); |
int b = a + left[k]; |
int c = b % (1 << state->bpc); |
putcomponent(out, i * state->colors + k, state->bpc, c); |
left[k] = c; |
} |
} |
} |
static void |
fz_predict_png(fz_predict *state, unsigned char *out, unsigned char *in, int len, int predictor) |
{ |
int bpp = state->bpp; |
int i; |
unsigned char *ref = state->ref; |
switch (predictor) |
{ |
case 0: |
memcpy(out, in, len); |
break; |
case 1: |
for (i = bpp; i > 0; i--) |
{ |
*out++ = *in++; |
} |
for (i = len - bpp; i > 0; i--) |
{ |
*out = *in++ + out[-bpp]; |
out++; |
} |
break; |
case 2: |
for (i = bpp; i > 0; i--) |
{ |
*out++ = *in++ + *ref++; |
} |
for (i = len - bpp; i > 0; i--) |
{ |
*out++ = *in++ + *ref++; |
} |
break; |
case 3: |
for (i = bpp; i > 0; i--) |
{ |
*out++ = *in++ + (*ref++) / 2; |
} |
for (i = len - bpp; i > 0; i--) |
{ |
*out = *in++ + (out[-bpp] + *ref++) / 2; |
out++; |
} |
break; |
case 4: |
for (i = bpp; i > 0; i--) |
{ |
*out++ = *in++ + paeth(0, *ref++, 0); |
} |
for (i = len - bpp; i > 0; i --) |
{ |
*out = *in++ + paeth(out[-bpp], *ref, ref[-bpp]); |
ref++; |
out++; |
} |
break; |
} |
} |
static int |
read_predict(fz_stream *stm, unsigned char *buf, int len) |
{ |
fz_predict *state = stm->state; |
unsigned char *p = buf; |
unsigned char *ep = buf + len; |
int ispng = state->predictor >= 10; |
int n; |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
while (p < ep) |
{ |
n = fz_read(state->chain, state->in, state->stride + ispng); |
if (n < 0) |
return fz_rethrow(n, "read error in prediction filter"); |
if (n == 0) |
return p - buf; |
if (state->predictor == 1) |
memcpy(state->out, state->in, n); |
else if (state->predictor == 2) |
fz_predict_tiff(state, state->out, state->in, n); |
else |
{ |
fz_predict_png(state, state->out, state->in + 1, n - 1, state->in[0]); |
memcpy(state->ref, state->out, state->stride); |
} |
state->rp = state->out; |
state->wp = state->out + n - ispng; |
while (state->rp < state->wp && p < ep) |
*p++ = *state->rp++; |
} |
return p - buf; |
} |
static void |
close_predict(fz_stream *stm) |
{ |
fz_predict *state = stm->state; |
fz_close(state->chain); |
fz_free(state->in); |
fz_free(state->out); |
fz_free(state->ref); |
fz_free(state); |
} |
fz_stream * |
fz_open_predict(fz_stream *chain, fz_obj *params) |
{ |
fz_predict *state; |
fz_obj *obj; |
state = fz_malloc(sizeof(fz_predict)); |
state->chain = chain; |
state->predictor = 1; |
state->columns = 1; |
state->colors = 1; |
state->bpc = 8; |
obj = fz_dict_gets(params, "Predictor"); |
if (obj) |
state->predictor = fz_to_int(obj); |
if (state->predictor != 1 && state->predictor != 2 && |
state->predictor != 10 && state->predictor != 11 && |
state->predictor != 12 && state->predictor != 13 && |
state->predictor != 14 && state->predictor != 15) |
{ |
fz_warn("invalid predictor: %d", state->predictor); |
state->predictor = 1; |
} |
obj = fz_dict_gets(params, "Columns"); |
if (obj) |
state->columns = fz_to_int(obj); |
obj = fz_dict_gets(params, "Colors"); |
if (obj) |
state->colors = fz_to_int(obj); |
obj = fz_dict_gets(params, "BitsPerComponent"); |
if (obj) |
state->bpc = fz_to_int(obj); |
state->stride = (state->bpc * state->colors * state->columns + 7) / 8; |
state->bpp = (state->bpc * state->colors + 7) / 8; |
state->in = fz_malloc(state->stride + 1); |
state->out = fz_malloc(state->stride); |
state->ref = fz_malloc(state->stride); |
state->rp = state->out; |
state->wp = state->out; |
memset(state->ref, 0, state->stride); |
return fz_new_stream(state, read_predict, close_predict); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/fitz.h |
---|
0,0 → 1,1120 |
#ifndef _FITZ_H_ |
#define _FITZ_H_ |
/* |
* Include the standard libc headers. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <stddef.h> |
#include <stdarg.h> |
#include <string.h> |
#include <math.h> |
#include <assert.h> |
#include <errno.h> |
#include <limits.h> /* INT_MAX & co */ |
#include <float.h> /* FLT_EPSILON */ |
#include <fcntl.h> /* O_RDONLY & co */ |
#define nelem(x) (sizeof(x)/sizeof((x)[0])) |
#define ABS(x) ( (x) < 0 ? -(x) : (x) ) |
#define MIN(a,b) ( (a) < (b) ? (a) : (b) ) |
#define MAX(a,b) ( (a) > (b) ? (a) : (b) ) |
#define CLAMP(x,a,b) ( (x) > (b) ? (b) : ( (x) < (a) ? (a) : (x) ) ) |
/* |
* Some differences in libc can be smoothed over |
*/ |
#ifdef _MSC_VER /* Microsoft Visual C */ |
#pragma warning( disable: 4244 ) /* conversion from X to Y, possible loss of data */ |
#pragma warning( disable: 4996 ) /* The POSIX name for this item is deprecated */ |
#pragma warning( disable: 4996 ) /* This function or variable may be unsafe */ |
#include <io.h> |
int gettimeofday(struct timeval *tv, struct timezone *tz); |
#define snprintf _snprintf |
#define strtoll _strtoi64 |
#else /* Unix or close enough */ |
#include <unistd.h> |
#ifndef O_BINARY |
#define O_BINARY 0 |
#endif |
#endif |
#ifndef M_PI |
#define M_PI 3.14159265358979323846 |
#endif |
#ifndef M_SQRT2 |
#define M_SQRT2 1.41421356237309504880 |
#endif |
/* |
* Variadic macros, inline and restrict keywords |
*/ |
#if __STDC_VERSION__ == 199901L /* C99 */ |
#define fz_throw(...) fz_throw_imp(__FILE__, __LINE__, __func__, __VA_ARGS__) |
#define fz_rethrow(cause, ...) fz_rethrow_imp(__FILE__, __LINE__, __func__, cause, __VA_ARGS__) |
#define fz_catch(cause, ...) fz_catch_imp(__FILE__, __LINE__, __func__, cause, __VA_ARGS__) |
#elif _MSC_VER >= 1500 /* MSVC 9 or newer */ |
#define inline __inline |
#define restrict __restrict |
#define fz_throw(...) fz_throw_imp(__FILE__, __LINE__, __FUNCTION__, __VA_ARGS__) |
#define fz_rethrow(cause, ...) fz_rethrow_imp(__FILE__, __LINE__, __FUNCTION__, cause, __VA_ARGS__) |
#define fz_catch(cause, ...) fz_catch_imp(__FILE__, __LINE__, __FUNCTION__, cause, __VA_ARGS__) |
#elif __GNUC__ >= 3 /* GCC 3 or newer */ |
#define inline __inline |
#define restrict __restrict |
#define fz_throw(fmt...) fz_throw_imp(__FILE__, __LINE__, __FUNCTION__, fmt) |
#define fz_rethrow(cause, fmt...) fz_rethrow_imp(__FILE__, __LINE__, __FUNCTION__, cause, fmt) |
#define fz_catch(cause, fmt...) fz_catch_imp(__FILE__, __LINE__, __FUNCTION__, cause, fmt) |
#else /* Unknown or ancient */ |
#define inline |
#define restrict |
#define fz_throw fz_throw_impx |
#define fz_rethrow fz_rethrow_impx |
#define fz_catch fz_catch_impx |
#endif |
/* |
* GCC can do type checking of printf strings |
*/ |
#ifndef __printflike |
#if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7 |
#define __printflike(fmtarg, firstvararg) \ |
__attribute__((__format__ (__printf__, fmtarg, firstvararg))) |
#else |
#define __printflike(fmtarg, firstvararg) |
#endif |
#endif |
/* |
* Error handling |
*/ |
typedef int fz_error; |
#define fz_okay ((fz_error)0) |
void fz_warn(char *fmt, ...) __printflike(1, 2); |
void fz_flush_warnings(void); |
fz_error fz_throw_imp(const char *file, int line, const char *func, char *fmt, ...) __printflike(4, 5); |
fz_error fz_rethrow_imp(const char *file, int line, const char *func, fz_error cause, char *fmt, ...) __printflike(5, 6); |
void fz_catch_imp(const char *file, int line, const char *func, fz_error cause, char *fmt, ...) __printflike(5, 6); |
fz_error fz_throw_impx(char *fmt, ...) __printflike(1, 2); |
fz_error fz_rethrow_impx(fz_error cause, char *fmt, ...) __printflike(2, 3); |
void fz_catch_impx(fz_error cause, char *fmt, ...) __printflike(2, 3); |
/* extract the last error stack trace */ |
int fz_get_error_count(void); |
char *fz_get_error_line(int n); |
/* |
* Basic runtime and utility functions |
*/ |
/* memory allocation */ |
void *fz_malloc(int size); |
void *fz_calloc(int count, int size); |
void *fz_realloc(void *p, int count, int size); |
void fz_free(void *p); |
char *fz_strdup(char *s); |
/* runtime (hah!) test for endian-ness */ |
int fz_is_big_endian(void); |
/* safe string functions */ |
char *fz_strsep(char **stringp, const char *delim); |
int fz_strlcpy(char *dst, const char *src, int n); |
int fz_strlcat(char *dst, const char *src, int n); |
/* Range checking atof */ |
float fz_atof(const char *s); |
/* utf-8 encoding and decoding */ |
int chartorune(int *rune, char *str); |
int runetochar(char *str, int *rune); |
int runelen(int c); |
/* getopt */ |
extern int fz_getopt(int nargc, char * const *nargv, const char *ostr); |
extern int fz_optind; |
extern char *fz_optarg; |
/* |
* Generic hash-table with fixed-length keys. |
*/ |
typedef struct fz_hash_table_s fz_hash_table; |
fz_hash_table *fz_new_hash_table(int initialsize, int keylen); |
void fz_debug_hash(fz_hash_table *table); |
void fz_empty_hash(fz_hash_table *table); |
void fz_free_hash(fz_hash_table *table); |
void *fz_hash_find(fz_hash_table *table, void *key); |
void fz_hash_insert(fz_hash_table *table, void *key, void *val); |
void fz_hash_remove(fz_hash_table *table, void *key); |
int fz_hash_len(fz_hash_table *table); |
void *fz_hash_get_key(fz_hash_table *table, int idx); |
void *fz_hash_get_val(fz_hash_table *table, int idx); |
/* |
* Math and geometry |
*/ |
/* Multiply scaled two integers in the 0..255 range */ |
static inline int fz_mul255(int a, int b) |
{ |
/* see Jim Blinn's book "Dirty Pixels" for how this works */ |
int x = a * b + 128; |
x += x >> 8; |
return x >> 8; |
} |
/* Expand a value A from the 0...255 range to the 0..256 range */ |
#define FZ_EXPAND(A) ((A)+((A)>>7)) |
/* Combine values A (in any range) and B (in the 0..256 range), |
* to give a single value in the same range as A was. */ |
#define FZ_COMBINE(A,B) (((A)*(B))>>8) |
/* Combine values A and C (in the same (any) range) and B and D (in the |
* 0..256 range), to give a single value in the same range as A and C were. */ |
#define FZ_COMBINE2(A,B,C,D) (FZ_COMBINE((A), (B)) + FZ_COMBINE((C), (D))) |
/* Blend SRC and DST (in the same range) together according to |
* AMOUNT (in the 0...256 range). */ |
#define FZ_BLEND(SRC, DST, AMOUNT) ((((SRC)-(DST))*(AMOUNT) + ((DST)<<8))>>8) |
typedef struct fz_matrix_s fz_matrix; |
typedef struct fz_point_s fz_point; |
typedef struct fz_rect_s fz_rect; |
typedef struct fz_bbox_s fz_bbox; |
extern const fz_rect fz_unit_rect; |
extern const fz_rect fz_empty_rect; |
extern const fz_rect fz_infinite_rect; |
extern const fz_bbox fz_unit_bbox; |
extern const fz_bbox fz_empty_bbox; |
extern const fz_bbox fz_infinite_bbox; |
#define fz_is_empty_rect(r) ((r).x0 == (r).x1) |
#define fz_is_infinite_rect(r) ((r).x0 > (r).x1) |
#define fz_is_empty_bbox(b) ((b).x0 == (b).x1) |
#define fz_is_infinite_bbox(b) ((b).x0 > (b).x1) |
struct fz_matrix_s |
{ |
float a, b, c, d, e, f; |
}; |
struct fz_point_s |
{ |
float x, y; |
}; |
struct fz_rect_s |
{ |
float x0, y0; |
float x1, y1; |
}; |
struct fz_bbox_s |
{ |
int x0, y0; |
int x1, y1; |
}; |
extern const fz_matrix fz_identity; |
fz_matrix fz_concat(fz_matrix one, fz_matrix two); |
fz_matrix fz_scale(float sx, float sy); |
fz_matrix fz_shear(float sx, float sy); |
fz_matrix fz_rotate(float theta); |
fz_matrix fz_translate(float tx, float ty); |
fz_matrix fz_invert_matrix(fz_matrix m); |
int fz_is_rectilinear(fz_matrix m); |
float fz_matrix_expansion(fz_matrix m); |
fz_bbox fz_round_rect(fz_rect r); |
fz_bbox fz_intersect_bbox(fz_bbox a, fz_bbox b); |
fz_rect fz_intersect_rect(fz_rect a, fz_rect b); |
fz_bbox fz_union_bbox(fz_bbox a, fz_bbox b); |
fz_rect fz_union_rect(fz_rect a, fz_rect b); |
fz_point fz_transform_point(fz_matrix m, fz_point p); |
fz_point fz_transform_vector(fz_matrix m, fz_point p); |
fz_rect fz_transform_rect(fz_matrix m, fz_rect r); |
fz_bbox fz_transform_bbox(fz_matrix m, fz_bbox b); |
/* |
* Basic crypto functions. |
* Independent of the rest of fitz. |
* For further encapsulation in filters, or not. |
*/ |
/* md5 digests */ |
typedef struct fz_md5_s fz_md5; |
struct fz_md5_s |
{ |
unsigned int state[4]; |
unsigned int count[2]; |
unsigned char buffer[64]; |
}; |
void fz_md5_init(fz_md5 *state); |
void fz_md5_update(fz_md5 *state, const unsigned char *input, unsigned inlen); |
void fz_md5_final(fz_md5 *state, unsigned char digest[16]); |
/* sha-256 digests */ |
typedef struct fz_sha256_s fz_sha256; |
struct fz_sha256_s |
{ |
unsigned int state[8]; |
unsigned int count[2]; |
union { |
unsigned char u8[64]; |
unsigned int u32[16]; |
} buffer; |
}; |
void fz_sha256_init(fz_sha256 *state); |
void fz_sha256_update(fz_sha256 *state, const unsigned char *input, unsigned int inlen); |
void fz_sha256_final(fz_sha256 *state, unsigned char digest[32]); |
/* arc4 crypto */ |
typedef struct fz_arc4_s fz_arc4; |
struct fz_arc4_s |
{ |
unsigned x; |
unsigned y; |
unsigned char state[256]; |
}; |
void fz_arc4_init(fz_arc4 *state, const unsigned char *key, unsigned len); |
void fz_arc4_encrypt(fz_arc4 *state, unsigned char *dest, const unsigned char *src, unsigned len); |
/* AES block cipher implementation from XYSSL */ |
typedef struct fz_aes_s fz_aes; |
#define AES_DECRYPT 0 |
#define AES_ENCRYPT 1 |
struct fz_aes_s |
{ |
int nr; /* number of rounds */ |
unsigned long *rk; /* AES round keys */ |
unsigned long buf[68]; /* unaligned data */ |
}; |
void aes_setkey_enc( fz_aes *ctx, const unsigned char *key, int keysize ); |
void aes_setkey_dec( fz_aes *ctx, const unsigned char *key, int keysize ); |
void aes_crypt_cbc( fz_aes *ctx, int mode, int length, |
unsigned char iv[16], |
const unsigned char *input, |
unsigned char *output ); |
/* |
* Dynamic objects. |
* The same type of objects as found in PDF and PostScript. |
* Used by the filters and the mupdf parser. |
*/ |
typedef struct fz_obj_s fz_obj; |
extern fz_obj* (*fz_resolve_indirect)(fz_obj*); |
fz_obj *fz_new_null(void); |
fz_obj *fz_new_bool(int b); |
fz_obj *fz_new_int(int i); |
fz_obj *fz_new_real(float f); |
fz_obj *fz_new_name(char *str); |
fz_obj *fz_new_string(char *str, int len); |
fz_obj *fz_new_indirect(int num, int gen, void *xref); |
fz_obj *fz_new_array(int initialcap); |
fz_obj *fz_new_dict(int initialcap); |
fz_obj *fz_copy_array(fz_obj *array); |
fz_obj *fz_copy_dict(fz_obj *dict); |
fz_obj *fz_keep_obj(fz_obj *obj); |
void fz_drop_obj(fz_obj *obj); |
/* type queries */ |
int fz_is_null(fz_obj *obj); |
int fz_is_bool(fz_obj *obj); |
int fz_is_int(fz_obj *obj); |
int fz_is_real(fz_obj *obj); |
int fz_is_name(fz_obj *obj); |
int fz_is_string(fz_obj *obj); |
int fz_is_array(fz_obj *obj); |
int fz_is_dict(fz_obj *obj); |
int fz_is_indirect(fz_obj *obj); |
int fz_objcmp(fz_obj *a, fz_obj *b); |
/* safe, silent failure, no error reporting */ |
int fz_to_bool(fz_obj *obj); |
int fz_to_int(fz_obj *obj); |
float fz_to_real(fz_obj *obj); |
char *fz_to_name(fz_obj *obj); |
char *fz_to_str_buf(fz_obj *obj); |
int fz_to_str_len(fz_obj *obj); |
int fz_to_num(fz_obj *obj); |
int fz_to_gen(fz_obj *obj); |
int fz_array_len(fz_obj *array); |
fz_obj *fz_array_get(fz_obj *array, int i); |
void fz_array_put(fz_obj *array, int i, fz_obj *obj); |
void fz_array_push(fz_obj *array, fz_obj *obj); |
void fz_array_insert(fz_obj *array, fz_obj *obj); |
int fz_dict_len(fz_obj *dict); |
fz_obj *fz_dict_get_key(fz_obj *dict, int idx); |
fz_obj *fz_dict_get_val(fz_obj *dict, int idx); |
fz_obj *fz_dict_get(fz_obj *dict, fz_obj *key); |
fz_obj *fz_dict_gets(fz_obj *dict, char *key); |
fz_obj *fz_dict_getsa(fz_obj *dict, char *key, char *abbrev); |
void fz_dict_put(fz_obj *dict, fz_obj *key, fz_obj *val); |
void fz_dict_puts(fz_obj *dict, char *key, fz_obj *val); |
void fz_dict_del(fz_obj *dict, fz_obj *key); |
void fz_dict_dels(fz_obj *dict, char *key); |
void fz_sort_dict(fz_obj *dict); |
int fz_fprint_obj(FILE *fp, fz_obj *obj, int tight); |
void fz_debug_obj(fz_obj *obj); |
void fz_debug_ref(fz_obj *obj); |
void fz_set_str_len(fz_obj *obj, int newlen); /* private */ |
void *fz_get_indirect_xref(fz_obj *obj); /* private */ |
/* |
* Data buffers. |
*/ |
typedef struct fz_buffer_s fz_buffer; |
struct fz_buffer_s |
{ |
int refs; |
unsigned char *data; |
int cap, len; |
}; |
fz_buffer *fz_new_buffer(int size); |
fz_buffer *fz_keep_buffer(fz_buffer *buf); |
void fz_drop_buffer(fz_buffer *buf); |
void fz_resize_buffer(fz_buffer *buf, int size); |
void fz_grow_buffer(fz_buffer *buf); |
/* |
* Buffered reader. |
* Only the data between rp and wp is valid data. |
*/ |
typedef struct fz_stream_s fz_stream; |
struct fz_stream_s |
{ |
int refs; |
int error; |
int eof; |
int pos; |
int avail; |
int bits; |
unsigned char *bp, *rp, *wp, *ep; |
void *state; |
int (*read)(fz_stream *stm, unsigned char *buf, int len); |
void (*close)(fz_stream *stm); |
void (*seek)(fz_stream *stm, int offset, int whence); |
unsigned char buf[4096]; |
}; |
fz_stream *fz_open_fd(int file); |
fz_stream *fz_open_file(const char *filename); |
fz_stream *fz_open_file_w(const wchar_t *filename); /* only on win32 */ |
fz_stream *fz_open_buffer(fz_buffer *buf); |
fz_stream *fz_open_memory(unsigned char *data, int len); |
void fz_close(fz_stream *stm); |
fz_stream *fz_new_stream(void*, int(*)(fz_stream*, unsigned char*, int), void(*)(fz_stream *)); |
fz_stream *fz_keep_stream(fz_stream *stm); |
void fz_fill_buffer(fz_stream *stm); |
int fz_tell(fz_stream *stm); |
void fz_seek(fz_stream *stm, int offset, int whence); |
int fz_read(fz_stream *stm, unsigned char *buf, int len); |
void fz_read_line(fz_stream *stm, char *buf, int max); |
fz_error fz_read_all(fz_buffer **bufp, fz_stream *stm, int initial); |
static inline int fz_read_byte(fz_stream *stm) |
{ |
if (stm->rp == stm->wp) |
{ |
fz_fill_buffer(stm); |
return stm->rp < stm->wp ? *stm->rp++ : EOF; |
} |
return *stm->rp++; |
} |
static inline int fz_peek_byte(fz_stream *stm) |
{ |
if (stm->rp == stm->wp) |
{ |
fz_fill_buffer(stm); |
return stm->rp < stm->wp ? *stm->rp : EOF; |
} |
return *stm->rp; |
} |
static inline void fz_unread_byte(fz_stream *stm) |
{ |
if (stm->rp > stm->bp) |
stm->rp--; |
} |
static inline int fz_is_eof(fz_stream *stm) |
{ |
if (stm->rp == stm->wp) |
{ |
if (stm->eof) |
return 1; |
return fz_peek_byte(stm) == EOF; |
} |
return 0; |
} |
static inline unsigned int fz_read_bits(fz_stream *stm, int n) |
{ |
unsigned int x; |
if (n <= stm->avail) |
{ |
stm->avail -= n; |
x = (stm->bits >> stm->avail) & ((1 << n) - 1); |
} |
else |
{ |
x = stm->bits & ((1 << stm->avail) - 1); |
n -= stm->avail; |
stm->avail = 0; |
while (n > 8) |
{ |
x = (x << 8) | fz_read_byte(stm); |
n -= 8; |
} |
if (n > 0) |
{ |
stm->bits = fz_read_byte(stm); |
stm->avail = 8 - n; |
x = (x << n) | (stm->bits >> stm->avail); |
} |
} |
return x; |
} |
static inline void fz_sync_bits(fz_stream *stm) |
{ |
stm->avail = 0; |
} |
static inline int fz_is_eof_bits(fz_stream *stm) |
{ |
return fz_is_eof(stm) && (stm->avail == 0 || stm->bits == EOF); |
} |
/* |
* Data filters. |
*/ |
fz_stream *fz_open_copy(fz_stream *chain); |
fz_stream *fz_open_null(fz_stream *chain, int len); |
fz_stream *fz_open_arc4(fz_stream *chain, unsigned char *key, unsigned keylen); |
fz_stream *fz_open_aesd(fz_stream *chain, unsigned char *key, unsigned keylen); |
fz_stream *fz_open_a85d(fz_stream *chain); |
fz_stream *fz_open_ahxd(fz_stream *chain); |
fz_stream *fz_open_rld(fz_stream *chain); |
fz_stream *fz_open_dctd(fz_stream *chain, fz_obj *param); |
fz_stream *fz_open_faxd(fz_stream *chain, fz_obj *param); |
fz_stream *fz_open_flated(fz_stream *chain); |
fz_stream *fz_open_lzwd(fz_stream *chain, fz_obj *param); |
fz_stream *fz_open_predict(fz_stream *chain, fz_obj *param); |
fz_stream *fz_open_jbig2d(fz_stream *chain, fz_buffer *global); |
/* |
* Resources and other graphics related objects. |
*/ |
enum { FZ_MAX_COLORS = 32 }; |
int fz_find_blendmode(char *name); |
char *fz_blendmode_name(int blendmode); |
/* |
* Pixmaps have n components per pixel. the last is always alpha. |
* premultiplied alpha when rendering, but non-premultiplied for colorspace |
* conversions and rescaling. |
*/ |
typedef struct fz_pixmap_s fz_pixmap; |
typedef struct fz_colorspace_s fz_colorspace; |
struct fz_pixmap_s |
{ |
int refs; |
int x, y, w, h, n; |
fz_pixmap *mask; /* explicit soft/image mask */ |
int interpolate; |
int xres, yres; |
fz_colorspace *colorspace; |
unsigned char *samples; |
int free_samples; |
}; |
/* will return NULL if soft limit is exceeded */ |
fz_pixmap *fz_new_pixmap_with_limit(fz_colorspace *colorspace, int w, int h); |
fz_pixmap *fz_new_pixmap_with_data(fz_colorspace *colorspace, int w, int h, unsigned char *samples); |
fz_pixmap *fz_new_pixmap_with_rect(fz_colorspace *, fz_bbox bbox); |
fz_pixmap *fz_new_pixmap_with_rect_and_data(fz_colorspace *, fz_bbox bbox, unsigned char *samples); |
fz_pixmap *fz_new_pixmap(fz_colorspace *, int w, int h); |
fz_pixmap *fz_keep_pixmap(fz_pixmap *pix); |
void fz_drop_pixmap(fz_pixmap *pix); |
void fz_clear_pixmap(fz_pixmap *pix); |
void fz_clear_pixmap_with_color(fz_pixmap *pix, int value); |
void fz_clear_pixmap_rect_with_color(fz_pixmap *pix, int value, fz_bbox r); |
void fz_copy_pixmap_rect(fz_pixmap *dest, fz_pixmap *src, fz_bbox r); |
void fz_premultiply_pixmap(fz_pixmap *pix); |
fz_pixmap *fz_alpha_from_gray(fz_pixmap *gray, int luminosity); |
fz_bbox fz_bound_pixmap(fz_pixmap *pix); |
void fz_invert_pixmap(fz_pixmap *pix); |
void fz_gamma_pixmap(fz_pixmap *pix, float gamma); |
fz_pixmap *fz_scale_pixmap(fz_pixmap *src, float x, float y, float w, float h); |
fz_pixmap *fz_scale_pixmap_gridfit(fz_pixmap *src, float x, float y, float w, float h, int gridfit); |
fz_error fz_write_pnm(fz_pixmap *pixmap, char *filename); |
fz_error fz_write_pam(fz_pixmap *pixmap, char *filename, int savealpha); |
fz_error fz_write_png(fz_pixmap *pixmap, char *filename, int savealpha); |
fz_error fz_load_jpx_image(fz_pixmap **imgp, unsigned char *data, int size, fz_colorspace *dcs); |
/* |
* Bitmaps have 1 component per bit. Only used for creating halftoned versions |
* of contone buffers, and saving out. Samples are stored msb first, akin to |
* pbms. |
*/ |
typedef struct fz_bitmap_s fz_bitmap; |
struct fz_bitmap_s |
{ |
int refs; |
int w, h, stride, n; |
unsigned char *samples; |
}; |
fz_bitmap *fz_new_bitmap(int w, int h, int n); |
fz_bitmap *fz_keep_bitmap(fz_bitmap *bit); |
void fz_clear_bitmap(fz_bitmap *bit); |
void fz_drop_bitmap(fz_bitmap *bit); |
fz_error fz_write_pbm(fz_bitmap *bitmap, char *filename); |
/* |
* A halftone is a set of threshold tiles, one per component. Each threshold |
* tile is a pixmap, possibly of varying sizes and phases. |
*/ |
typedef struct fz_halftone_s fz_halftone; |
struct fz_halftone_s |
{ |
int refs; |
int n; |
fz_pixmap *comp[1]; |
}; |
fz_halftone *fz_new_halftone(int num_comps); |
fz_halftone *fz_get_default_halftone(int num_comps); |
fz_halftone *fz_keep_halftone(fz_halftone *half); |
void fz_drop_halftone(fz_halftone *half); |
fz_bitmap *fz_halftone_pixmap(fz_pixmap *pix, fz_halftone *ht); |
/* |
* Colorspace resources. |
*/ |
extern fz_colorspace *fz_device_gray; |
extern fz_colorspace *fz_device_rgb; |
extern fz_colorspace *fz_device_bgr; |
extern fz_colorspace *fz_device_cmyk; |
struct fz_colorspace_s |
{ |
int refs; |
char name[16]; |
int n; |
void (*to_rgb)(fz_colorspace *, float *src, float *rgb); |
void (*from_rgb)(fz_colorspace *, float *rgb, float *dst); |
void (*free_data)(fz_colorspace *); |
void *data; |
}; |
fz_colorspace *fz_new_colorspace(char *name, int n); |
fz_colorspace *fz_keep_colorspace(fz_colorspace *colorspace); |
void fz_drop_colorspace(fz_colorspace *colorspace); |
void fz_convert_color(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv); |
void fz_convert_pixmap(fz_pixmap *src, fz_pixmap *dst); |
fz_colorspace *fz_find_device_colorspace(char *name); |
/* |
* Fonts come in two variants: |
* Regular fonts are handled by FreeType. |
* Type 3 fonts have callbacks to the interpreter. |
*/ |
struct fz_device_s; |
typedef struct fz_font_s fz_font; |
char *ft_error_string(int err); |
struct fz_font_s |
{ |
int refs; |
char name[32]; |
void *ft_face; /* has an FT_Face if used */ |
int ft_substitute; /* ... substitute metrics */ |
int ft_bold; /* ... synthesize bold */ |
int ft_italic; /* ... synthesize italic */ |
int ft_hint; /* ... force hinting for DynaLab fonts */ |
/* origin of font data */ |
char *ft_file; |
unsigned char *ft_data; |
int ft_size; |
fz_matrix t3matrix; |
fz_obj *t3resources; |
fz_buffer **t3procs; /* has 256 entries if used */ |
float *t3widths; /* has 256 entries if used */ |
void *t3xref; /* a pdf_xref for the callback */ |
fz_error (*t3run)(void *xref, fz_obj *resources, fz_buffer *contents, |
struct fz_device_s *dev, fz_matrix ctm); |
fz_rect bbox; |
/* substitute metrics */ |
int width_count; |
int *width_table; |
}; |
fz_font *fz_new_type3_font(char *name, fz_matrix matrix); |
fz_error fz_new_font_from_memory(fz_font **fontp, unsigned char *data, int len, int index); |
fz_error fz_new_font_from_file(fz_font **fontp, char *path, int index); |
fz_font *fz_keep_font(fz_font *font); |
void fz_drop_font(fz_font *font); |
void fz_debug_font(fz_font *font); |
void fz_set_font_bbox(fz_font *font, float xmin, float ymin, float xmax, float ymax); |
/* |
* Vector path buffer. |
* It can be stroked and dashed, or be filled. |
* It has a fill rule (nonzero or even_odd). |
* |
* When rendering, they are flattened, stroked and dashed straight |
* into the Global Edge List. |
*/ |
typedef struct fz_path_s fz_path; |
typedef struct fz_stroke_state_s fz_stroke_state; |
typedef union fz_path_item_s fz_path_item; |
typedef enum fz_path_item_kind_e |
{ |
FZ_MOVETO, |
FZ_LINETO, |
FZ_CURVETO, |
FZ_CLOSE_PATH |
} fz_path_item_kind; |
union fz_path_item_s |
{ |
fz_path_item_kind k; |
float v; |
}; |
struct fz_path_s |
{ |
int len, cap; |
fz_path_item *items; |
}; |
struct fz_stroke_state_s |
{ |
int start_cap, dash_cap, end_cap; |
int linejoin; |
float linewidth; |
float miterlimit; |
float dash_phase; |
int dash_len; |
float dash_list[32]; |
}; |
fz_path *fz_new_path(void); |
void fz_moveto(fz_path*, float x, float y); |
void fz_lineto(fz_path*, float x, float y); |
void fz_curveto(fz_path*, float, float, float, float, float, float); |
void fz_curvetov(fz_path*, float, float, float, float); |
void fz_curvetoy(fz_path*, float, float, float, float); |
void fz_closepath(fz_path*); |
void fz_free_path(fz_path *path); |
void fz_transform_path(fz_path *path, fz_matrix transform); |
fz_path *fz_clone_path(fz_path *old); |
fz_rect fz_bound_path(fz_path *path, fz_stroke_state *stroke, fz_matrix ctm); |
void fz_debug_path(fz_path *, int indent); |
/* |
* Text buffer. |
* |
* The trm field contains the a, b, c and d coefficients. |
* The e and f coefficients come from the individual elements, |
* together they form the transform matrix for the glyph. |
* |
* Glyphs are referenced by glyph ID. |
* The Unicode text equivalent is kept in a separate array |
* with indexes into the glyph array. |
*/ |
typedef struct fz_text_s fz_text; |
typedef struct fz_text_item_s fz_text_item; |
struct fz_text_item_s |
{ |
float x, y; |
int gid; /* -1 for one gid to many ucs mappings */ |
int ucs; /* -1 for one ucs to many gid mappings */ |
}; |
struct fz_text_s |
{ |
fz_font *font; |
fz_matrix trm; |
int wmode; |
int len, cap; |
fz_text_item *items; |
}; |
fz_text *fz_new_text(fz_font *face, fz_matrix trm, int wmode); |
void fz_add_text(fz_text *text, int gid, int ucs, float x, float y); |
void fz_free_text(fz_text *text); |
void fz_debug_text(fz_text*, int indent); |
fz_rect fz_bound_text(fz_text *text, fz_matrix ctm); |
fz_text *fz_clone_text(fz_text *old); |
/* |
* The shading code uses gouraud shaded triangle meshes. |
*/ |
enum |
{ |
FZ_LINEAR, |
FZ_RADIAL, |
FZ_MESH, |
}; |
typedef struct fz_shade_s fz_shade; |
struct fz_shade_s |
{ |
int refs; |
fz_rect bbox; /* can be fz_infinite_rect */ |
fz_colorspace *colorspace; |
fz_matrix matrix; /* matrix from pattern dict */ |
int use_background; /* background color for fills but not 'sh' */ |
float background[FZ_MAX_COLORS]; |
int use_function; |
float function[256][FZ_MAX_COLORS + 1]; |
int type; /* linear, radial, mesh */ |
int extend[2]; |
int mesh_len; |
int mesh_cap; |
float *mesh; /* [x y 0], [x y r], [x y t] or [x y c1 ... cn] */ |
}; |
fz_shade *fz_keep_shade(fz_shade *shade); |
void fz_drop_shade(fz_shade *shade); |
void fz_debug_shade(fz_shade *shade); |
fz_rect fz_bound_shade(fz_shade *shade, fz_matrix ctm); |
void fz_paint_shade(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox); |
/* |
* Glyph cache |
*/ |
typedef struct fz_glyph_cache_s fz_glyph_cache; |
fz_glyph_cache *fz_new_glyph_cache(void); |
fz_pixmap *fz_render_ft_glyph(fz_font *font, int cid, fz_matrix trm); |
fz_pixmap *fz_render_t3_glyph(fz_font *font, int cid, fz_matrix trm, fz_colorspace *model); |
fz_pixmap *fz_render_ft_stroked_glyph(fz_font *font, int gid, fz_matrix trm, fz_matrix ctm, fz_stroke_state *state); |
fz_pixmap *fz_render_glyph(fz_glyph_cache*, fz_font*, int, fz_matrix, fz_colorspace *model); |
fz_pixmap *fz_render_stroked_glyph(fz_glyph_cache*, fz_font*, int, fz_matrix, fz_matrix, fz_stroke_state *stroke); |
void fz_free_glyph_cache(fz_glyph_cache *); |
/* |
* Scan converter |
*/ |
int fz_get_aa_level(void); |
void fz_set_aa_level(int bits); |
typedef struct fz_gel_s fz_gel; |
fz_gel *fz_new_gel(void); |
void fz_insert_gel(fz_gel *gel, float x0, float y0, float x1, float y1); |
void fz_reset_gel(fz_gel *gel, fz_bbox clip); |
void fz_sort_gel(fz_gel *gel); |
fz_bbox fz_bound_gel(fz_gel *gel); |
void fz_free_gel(fz_gel *gel); |
int fz_is_rect_gel(fz_gel *gel); |
void fz_scan_convert(fz_gel *gel, int eofill, fz_bbox clip, fz_pixmap *pix, unsigned char *colorbv); |
void fz_flatten_fill_path(fz_gel *gel, fz_path *path, fz_matrix ctm, float flatness); |
void fz_flatten_stroke_path(fz_gel *gel, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, float flatness, float linewidth); |
void fz_flatten_dash_path(fz_gel *gel, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, float flatness, float linewidth); |
/* |
* The device interface. |
*/ |
enum |
{ |
/* Hints */ |
FZ_IGNORE_IMAGE = 1, |
FZ_IGNORE_SHADE = 2, |
/* Flags */ |
FZ_CHARPROC_MASK = 1, |
FZ_CHARPROC_COLOR = 2, |
}; |
typedef struct fz_device_s fz_device; |
struct fz_device_s |
{ |
int hints; |
int flags; |
void *user; |
void (*free_user)(void *); |
void (*fill_path)(void *, fz_path *, int even_odd, fz_matrix, fz_colorspace *, float *color, float alpha); |
void (*stroke_path)(void *, fz_path *, fz_stroke_state *, fz_matrix, fz_colorspace *, float *color, float alpha); |
void (*clip_path)(void *, fz_path *, fz_rect *rect, int even_odd, fz_matrix); |
void (*clip_stroke_path)(void *, fz_path *, fz_rect *rect, fz_stroke_state *, fz_matrix); |
void (*fill_text)(void *, fz_text *, fz_matrix, fz_colorspace *, float *color, float alpha); |
void (*stroke_text)(void *, fz_text *, fz_stroke_state *, fz_matrix, fz_colorspace *, float *color, float alpha); |
void (*clip_text)(void *, fz_text *, fz_matrix, int accumulate); |
void (*clip_stroke_text)(void *, fz_text *, fz_stroke_state *, fz_matrix); |
void (*ignore_text)(void *, fz_text *, fz_matrix); |
void (*fill_shade)(void *, fz_shade *shd, fz_matrix ctm, float alpha); |
void (*fill_image)(void *, fz_pixmap *img, fz_matrix ctm, float alpha); |
void (*fill_image_mask)(void *, fz_pixmap *img, fz_matrix ctm, fz_colorspace *, float *color, float alpha); |
void (*clip_image_mask)(void *, fz_pixmap *img, fz_rect *rect, fz_matrix ctm); |
void (*pop_clip)(void *); |
void (*begin_mask)(void *, fz_rect, int luminosity, fz_colorspace *, float *bc); |
void (*end_mask)(void *); |
void (*begin_group)(void *, fz_rect, int isolated, int knockout, int blendmode, float alpha); |
void (*end_group)(void *); |
void (*begin_tile)(void *, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm); |
void (*end_tile)(void *); |
}; |
void fz_fill_path(fz_device *dev, fz_path *path, int even_odd, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha); |
void fz_stroke_path(fz_device *dev, fz_path *path, fz_stroke_state *stroke, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha); |
void fz_clip_path(fz_device *dev, fz_path *path, fz_rect *rect, int even_odd, fz_matrix ctm); |
void fz_clip_stroke_path(fz_device *dev, fz_path *path, fz_rect *rect, fz_stroke_state *stroke, fz_matrix ctm); |
void fz_fill_text(fz_device *dev, fz_text *text, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha); |
void fz_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha); |
void fz_clip_text(fz_device *dev, fz_text *text, fz_matrix ctm, int accumulate); |
void fz_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm); |
void fz_ignore_text(fz_device *dev, fz_text *text, fz_matrix ctm); |
void fz_pop_clip(fz_device *dev); |
void fz_fill_shade(fz_device *dev, fz_shade *shade, fz_matrix ctm, float alpha); |
void fz_fill_image(fz_device *dev, fz_pixmap *image, fz_matrix ctm, float alpha); |
void fz_fill_image_mask(fz_device *dev, fz_pixmap *image, fz_matrix ctm, fz_colorspace *colorspace, float *color, float alpha); |
void fz_clip_image_mask(fz_device *dev, fz_pixmap *image, fz_rect *rect, fz_matrix ctm); |
void fz_begin_mask(fz_device *dev, fz_rect area, int luminosity, fz_colorspace *colorspace, float *bc); |
void fz_end_mask(fz_device *dev); |
void fz_begin_group(fz_device *dev, fz_rect area, int isolated, int knockout, int blendmode, float alpha); |
void fz_end_group(fz_device *dev); |
void fz_begin_tile(fz_device *dev, fz_rect area, fz_rect view, float xstep, float ystep, fz_matrix ctm); |
void fz_end_tile(fz_device *dev); |
fz_device *fz_new_device(void *user); |
void fz_free_device(fz_device *dev); |
fz_device *fz_new_trace_device(void); |
fz_device *fz_new_bbox_device(fz_bbox *bboxp); |
fz_device *fz_new_draw_device(fz_glyph_cache *cache, fz_pixmap *dest); |
fz_device *fz_new_draw_device_type3(fz_glyph_cache *cache, fz_pixmap *dest); |
/* |
* Text extraction device |
*/ |
typedef struct fz_text_span_s fz_text_span; |
typedef struct fz_text_char_s fz_text_char; |
struct fz_text_char_s |
{ |
int c; |
fz_bbox bbox; |
}; |
struct fz_text_span_s |
{ |
fz_font *font; |
float size; |
int wmode; |
int len, cap; |
fz_text_char *text; |
fz_text_span *next; |
int eol; |
}; |
fz_text_span *fz_new_text_span(void); |
void fz_free_text_span(fz_text_span *line); |
void fz_debug_text_span(fz_text_span *line); |
void fz_debug_text_span_xml(fz_text_span *span); |
fz_device *fz_new_text_device(fz_text_span *text); |
/* |
* Display list device -- record and play back device commands. |
*/ |
typedef struct fz_display_list_s fz_display_list; |
fz_display_list *fz_new_display_list(void); |
void fz_free_display_list(fz_display_list *list); |
fz_device *fz_new_list_device(fz_display_list *list); |
void fz_execute_display_list(fz_display_list *list, fz_device *dev, fz_matrix ctm, fz_bbox area); |
/* |
* Plotting functions. |
*/ |
void fz_accelerate(void); |
void fz_accelerate_arch(void); |
void fz_decode_tile(fz_pixmap *pix, float *decode); |
void fz_decode_indexed_tile(fz_pixmap *pix, float *decode, int maxval); |
void fz_unpack_tile(fz_pixmap *dst, unsigned char * restrict src, int n, int depth, int stride, int scale); |
void fz_paint_solid_alpha(unsigned char * restrict dp, int w, int alpha); |
void fz_paint_solid_color(unsigned char * restrict dp, int n, int w, unsigned char *color); |
void fz_paint_span(unsigned char * restrict dp, unsigned char * restrict sp, int n, int w, int alpha); |
void fz_paint_span_with_color(unsigned char * restrict dp, unsigned char * restrict mp, int n, int w, unsigned char *color); |
void fz_paint_image(fz_pixmap *dst, fz_bbox scissor, fz_pixmap *shape, fz_pixmap *img, fz_matrix ctm, int alpha); |
void fz_paint_image_with_color(fz_pixmap *dst, fz_bbox scissor, fz_pixmap *shape, fz_pixmap *img, fz_matrix ctm, unsigned char *colorbv); |
void fz_paint_pixmap(fz_pixmap *dst, fz_pixmap *src, int alpha); |
void fz_paint_pixmap_with_mask(fz_pixmap *dst, fz_pixmap *src, fz_pixmap *msk); |
void fz_paint_pixmap_with_rect(fz_pixmap *dst, fz_pixmap *src, int alpha, fz_bbox bbox); |
void fz_blend_pixmap(fz_pixmap *dst, fz_pixmap *src, int alpha, int blendmode, int isolated, fz_pixmap *shape); |
enum |
{ |
/* PDF 1.4 -- standard separable */ |
FZ_BLEND_NORMAL, |
FZ_BLEND_MULTIPLY, |
FZ_BLEND_SCREEN, |
FZ_BLEND_OVERLAY, |
FZ_BLEND_DARKEN, |
FZ_BLEND_LIGHTEN, |
FZ_BLEND_COLOR_DODGE, |
FZ_BLEND_COLOR_BURN, |
FZ_BLEND_HARD_LIGHT, |
FZ_BLEND_SOFT_LIGHT, |
FZ_BLEND_DIFFERENCE, |
FZ_BLEND_EXCLUSION, |
/* PDF 1.4 -- standard non-separable */ |
FZ_BLEND_HUE, |
FZ_BLEND_SATURATION, |
FZ_BLEND_COLOR, |
FZ_BLEND_LUMINOSITY, |
/* For packing purposes */ |
FZ_BLEND_MODEMASK = 15, |
FZ_BLEND_ISOLATED = 16, |
FZ_BLEND_KNOCKOUT = 32 |
}; |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/lrintf.c |
---|
0,0 → 1,5 |
#include <math.h> |
/* |
long long int lrintf(float x) { |
return floor(x); |
}*/ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/obj_print.c |
---|
0,0 → 1,335 |
#include "fitz.h" |
struct fmt |
{ |
char *buf; |
int cap; |
int len; |
int indent; |
int tight; |
int col; |
int sep; |
int last; |
}; |
static void fmt_obj(struct fmt *fmt, fz_obj *obj); |
static inline int iswhite(int ch) |
{ |
return |
ch == '\000' || |
ch == '\011' || |
ch == '\012' || |
ch == '\014' || |
ch == '\015' || |
ch == '\040'; |
} |
static inline int isdelim(int ch) |
{ |
return ch == '(' || ch == ')' || |
ch == '<' || ch == '>' || |
ch == '[' || ch == ']' || |
ch == '{' || ch == '}' || |
ch == '/' || |
ch == '%'; |
} |
static inline void fmt_putc(struct fmt *fmt, int c) |
{ |
if (fmt->sep && !isdelim(fmt->last) && !isdelim(c)) { |
fmt->sep = 0; |
fmt_putc(fmt, ' '); |
} |
fmt->sep = 0; |
if (fmt->buf && fmt->len < fmt->cap) |
fmt->buf[fmt->len] = c; |
if (c == '\n') |
fmt->col = 0; |
else |
fmt->col ++; |
fmt->len ++; |
fmt->last = c; |
} |
static inline void fmt_indent(struct fmt *fmt) |
{ |
int i = fmt->indent; |
while (i--) { |
fmt_putc(fmt, ' '); |
fmt_putc(fmt, ' '); |
} |
} |
static inline void fmt_puts(struct fmt *fmt, char *s) |
{ |
while (*s) |
fmt_putc(fmt, *s++); |
} |
static inline void fmt_sep(struct fmt *fmt) |
{ |
fmt->sep = 1; |
} |
static void fmt_str(struct fmt *fmt, fz_obj *obj) |
{ |
char *s = fz_to_str_buf(obj); |
int n = fz_to_str_len(obj); |
int i, c; |
fmt_putc(fmt, '('); |
for (i = 0; i < n; i++) |
{ |
c = (unsigned char)s[i]; |
if (c == '\n') |
fmt_puts(fmt, "\\n"); |
else if (c == '\r') |
fmt_puts(fmt, "\\r"); |
else if (c == '\t') |
fmt_puts(fmt, "\\t"); |
else if (c == '\b') |
fmt_puts(fmt, "\\b"); |
else if (c == '\f') |
fmt_puts(fmt, "\\f"); |
else if (c == '(') |
fmt_puts(fmt, "\\("); |
else if (c == ')') |
fmt_puts(fmt, "\\)"); |
else if (c < 32 || c >= 127) { |
char buf[16]; |
fmt_putc(fmt, '\\'); |
sprintf(buf, "%03o", c); |
fmt_puts(fmt, buf); |
} |
else |
fmt_putc(fmt, c); |
} |
fmt_putc(fmt, ')'); |
} |
static void fmt_hex(struct fmt *fmt, fz_obj *obj) |
{ |
char *s = fz_to_str_buf(obj); |
int n = fz_to_str_len(obj); |
int i, b, c; |
fmt_putc(fmt, '<'); |
for (i = 0; i < n; i++) { |
b = (unsigned char) s[i]; |
c = (b >> 4) & 0x0f; |
fmt_putc(fmt, c < 0xA ? c + '0' : c + 'A' - 0xA); |
c = (b) & 0x0f; |
fmt_putc(fmt, c < 0xA ? c + '0' : c + 'A' - 0xA); |
} |
fmt_putc(fmt, '>'); |
} |
static void fmt_name(struct fmt *fmt, fz_obj *obj) |
{ |
unsigned char *s = (unsigned char *) fz_to_name(obj); |
int i, c; |
fmt_putc(fmt, '/'); |
for (i = 0; s[i]; i++) |
{ |
if (isdelim(s[i]) || iswhite(s[i]) || |
s[i] == '#' || s[i] < 32 || s[i] >= 127) |
{ |
fmt_putc(fmt, '#'); |
c = (s[i] >> 4) & 0xf; |
fmt_putc(fmt, c < 0xA ? c + '0' : c + 'A' - 0xA); |
c = s[i] & 0xf; |
fmt_putc(fmt, c < 0xA ? c + '0' : c + 'A' - 0xA); |
} |
else |
{ |
fmt_putc(fmt, s[i]); |
} |
} |
} |
static void fmt_array(struct fmt *fmt, fz_obj *obj) |
{ |
int i; |
if (fmt->tight) { |
fmt_putc(fmt, '['); |
for (i = 0; i < fz_array_len(obj); i++) { |
fmt_obj(fmt, fz_array_get(obj, i)); |
fmt_sep(fmt); |
} |
fmt_putc(fmt, ']'); |
} |
else { |
fmt_puts(fmt, "[ "); |
for (i = 0; i < fz_array_len(obj); i++) { |
if (fmt->col > 60) { |
fmt_putc(fmt, '\n'); |
fmt_indent(fmt); |
} |
fmt_obj(fmt, fz_array_get(obj, i)); |
fmt_putc(fmt, ' '); |
} |
fmt_putc(fmt, ']'); |
fmt_sep(fmt); |
} |
} |
static void fmt_dict(struct fmt *fmt, fz_obj *obj) |
{ |
int i; |
fz_obj *key, *val; |
if (fmt->tight) { |
fmt_puts(fmt, "<<"); |
for (i = 0; i < fz_dict_len(obj); i++) { |
fmt_obj(fmt, fz_dict_get_key(obj, i)); |
fmt_sep(fmt); |
fmt_obj(fmt, fz_dict_get_val(obj, i)); |
fmt_sep(fmt); |
} |
fmt_puts(fmt, ">>"); |
} |
else { |
fmt_puts(fmt, "<<\n"); |
fmt->indent ++; |
for (i = 0; i < fz_dict_len(obj); i++) { |
key = fz_dict_get_key(obj, i); |
val = fz_dict_get_val(obj, i); |
fmt_indent(fmt); |
fmt_obj(fmt, key); |
fmt_putc(fmt, ' '); |
if (!fz_is_indirect(val) && fz_is_array(val)) |
fmt->indent ++; |
fmt_obj(fmt, val); |
fmt_putc(fmt, '\n'); |
if (!fz_is_indirect(val) && fz_is_array(val)) |
fmt->indent --; |
} |
fmt->indent --; |
fmt_indent(fmt); |
fmt_puts(fmt, ">>"); |
} |
} |
static void fmt_obj(struct fmt *fmt, fz_obj *obj) |
{ |
char buf[256]; |
if (!obj) |
fmt_puts(fmt, "<NULL>"); |
else if (fz_is_indirect(obj)) |
{ |
sprintf(buf, "%d %d R", fz_to_num(obj), fz_to_gen(obj)); |
fmt_puts(fmt, buf); |
} |
else if (fz_is_null(obj)) |
fmt_puts(fmt, "null"); |
else if (fz_is_bool(obj)) |
fmt_puts(fmt, fz_to_bool(obj) ? "true" : "false"); |
else if (fz_is_int(obj)) |
{ |
sprintf(buf, "%d", fz_to_int(obj)); |
fmt_puts(fmt, buf); |
} |
else if (fz_is_real(obj)) |
{ |
sprintf(buf, "%g", fz_to_real(obj)); |
if (strchr(buf, 'e')) /* bad news! */ |
sprintf(buf, fabsf(fz_to_real(obj)) > 1 ? "%1.1f" : "%1.8f", fz_to_real(obj)); |
fmt_puts(fmt, buf); |
} |
else if (fz_is_string(obj)) |
{ |
char *str = fz_to_str_buf(obj); |
int len = fz_to_str_len(obj); |
int added = 0; |
int i, c; |
for (i = 0; i < len; i++) { |
c = (unsigned char)str[i]; |
if (strchr("()\\\n\r\t\b\f", c)) |
added ++; |
else if (c < 32 || c >= 127) |
added += 3; |
} |
if (added < len) |
fmt_str(fmt, obj); |
else |
fmt_hex(fmt, obj); |
} |
else if (fz_is_name(obj)) |
fmt_name(fmt, obj); |
else if (fz_is_array(obj)) |
fmt_array(fmt, obj); |
else if (fz_is_dict(obj)) |
fmt_dict(fmt, obj); |
else |
fmt_puts(fmt, "<unknown object>"); |
} |
static int |
fz_sprint_obj(char *s, int n, fz_obj *obj, int tight) |
{ |
struct fmt fmt; |
fmt.indent = 0; |
fmt.col = 0; |
fmt.sep = 0; |
fmt.last = 0; |
fmt.tight = tight; |
fmt.buf = s; |
fmt.cap = n; |
fmt.len = 0; |
fmt_obj(&fmt, obj); |
if (fmt.buf && fmt.len < fmt.cap) |
fmt.buf[fmt.len] = '\0'; |
return fmt.len; |
} |
int |
fz_fprint_obj(FILE *fp, fz_obj *obj, int tight) |
{ |
char buf[1024]; |
char *ptr; |
int n; |
n = fz_sprint_obj(NULL, 0, obj, tight); |
if ((n + 1) < sizeof buf) |
{ |
fz_sprint_obj(buf, sizeof buf, obj, tight); |
fputs(buf, fp); |
fputc('\n', fp); |
} |
else |
{ |
ptr = fz_malloc(n + 1); |
fz_sprint_obj(ptr, n + 1, obj, tight); |
fputs(ptr, fp); |
fputc('\n', fp); |
fz_free(ptr); |
} |
return n; |
} |
void |
fz_debug_obj(fz_obj *obj) |
{ |
fz_fprint_obj(stdout, obj, 0); |
} |
void |
fz_debug_ref(fz_obj *ref) |
{ |
fz_obj *obj; |
obj = fz_resolve_indirect(ref); |
fz_debug_obj(obj); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_bitmap.c |
---|
0,0 → 1,76 |
#include "fitz.h" |
fz_bitmap * |
fz_new_bitmap(int w, int h, int n) |
{ |
fz_bitmap *bit; |
bit = fz_malloc(sizeof(fz_bitmap)); |
bit->refs = 1; |
bit->w = w; |
bit->h = h; |
bit->n = n; |
/* Span is 32 bit aligned. We may want to make this 64 bit if we |
* use SSE2 etc. */ |
bit->stride = ((n * w + 31) & ~31) >> 3; |
bit->samples = fz_calloc(h, bit->stride); |
return bit; |
} |
fz_bitmap * |
fz_keep_bitmap(fz_bitmap *pix) |
{ |
pix->refs++; |
return pix; |
} |
void |
fz_drop_bitmap(fz_bitmap *bit) |
{ |
if (bit && --bit->refs == 0) |
{ |
fz_free(bit->samples); |
fz_free(bit); |
} |
} |
void |
fz_clear_bitmap(fz_bitmap *bit) |
{ |
memset(bit->samples, 0, bit->stride * bit->h); |
} |
/* |
* Write bitmap to PBM file |
*/ |
fz_error |
fz_write_pbm(fz_bitmap *bitmap, char *filename) |
{ |
FILE *fp; |
unsigned char *p; |
int h, bytestride; |
fp = fopen(filename, "wb"); |
if (!fp) |
return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); |
assert(bitmap->n == 1); |
fprintf(fp, "P4\n%d %d\n", bitmap->w, bitmap->h); |
p = bitmap->samples; |
h = bitmap->h; |
bytestride = (bitmap->w + 7) >> 3; |
while (h--) |
{ |
fwrite(p, 1, bytestride, fp); |
p += bitmap->stride; |
} |
fclose(fp); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_colorspace.c |
---|
0,0 → 1,685 |
#include "fitz.h" |
#define SLOWCMYK |
fz_colorspace * |
fz_new_colorspace(char *name, int n) |
{ |
fz_colorspace *cs = fz_malloc(sizeof(fz_colorspace)); |
cs->refs = 1; |
fz_strlcpy(cs->name, name, sizeof cs->name); |
cs->n = n; |
cs->to_rgb = NULL; |
cs->from_rgb = NULL; |
cs->free_data = NULL; |
cs->data = NULL; |
return cs; |
} |
fz_colorspace * |
fz_keep_colorspace(fz_colorspace *cs) |
{ |
if (cs->refs < 0) |
return cs; |
cs->refs ++; |
return cs; |
} |
void |
fz_drop_colorspace(fz_colorspace *cs) |
{ |
if (cs && cs->refs < 0) |
return; |
if (cs && --cs->refs == 0) |
{ |
if (cs->free_data && cs->data) |
cs->free_data(cs); |
fz_free(cs); |
} |
} |
/* Device colorspace definitions */ |
static void gray_to_rgb(fz_colorspace *cs, float *gray, float *rgb) |
{ |
rgb[0] = gray[0]; |
rgb[1] = gray[0]; |
rgb[2] = gray[0]; |
} |
static void rgb_to_gray(fz_colorspace *cs, float *rgb, float *gray) |
{ |
float r = rgb[0]; |
float g = rgb[1]; |
float b = rgb[2]; |
gray[0] = r * 0.3f + g * 0.59f + b * 0.11f; |
} |
static void rgb_to_rgb(fz_colorspace *cs, float *rgb, float *xyz) |
{ |
xyz[0] = rgb[0]; |
xyz[1] = rgb[1]; |
xyz[2] = rgb[2]; |
} |
static void bgr_to_rgb(fz_colorspace *cs, float *bgr, float *rgb) |
{ |
rgb[0] = bgr[2]; |
rgb[1] = bgr[1]; |
rgb[2] = bgr[0]; |
} |
static void rgb_to_bgr(fz_colorspace *cs, float *rgb, float *bgr) |
{ |
bgr[0] = rgb[2]; |
bgr[1] = rgb[1]; |
bgr[2] = rgb[0]; |
} |
static void cmyk_to_rgb(fz_colorspace *cs, float *cmyk, float *rgb) |
{ |
#ifdef SLOWCMYK /* from poppler */ |
float c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3]; |
float c1 = 1 - c, m1 = 1 - m, y1 = 1 - y, k1 = 1 - k; |
float r, g, b, x; |
/* this is a matrix multiplication, unrolled for performance */ |
x = c1 * m1 * y1 * k1; /* 0 0 0 0 */ |
r = g = b = x; |
x = c1 * m1 * y1 * k; /* 0 0 0 1 */ |
r += 0.1373 * x; |
g += 0.1216 * x; |
b += 0.1255 * x; |
x = c1 * m1 * y * k1; /* 0 0 1 0 */ |
r += x; |
g += 0.9490 * x; |
x = c1 * m1 * y * k; /* 0 0 1 1 */ |
r += 0.1098 * x; |
g += 0.1020 * x; |
x = c1 * m * y1 * k1; /* 0 1 0 0 */ |
r += 0.9255 * x; |
b += 0.5490 * x; |
x = c1 * m * y1 * k; /* 0 1 0 1 */ |
r += 0.1412 * x; |
x = c1 * m * y * k1; /* 0 1 1 0 */ |
r += 0.9294 * x; |
g += 0.1098 * x; |
b += 0.1412 * x; |
x = c1 * m * y * k; /* 0 1 1 1 */ |
r += 0.1333 * x; |
x = c * m1 * y1 * k1; /* 1 0 0 0 */ |
g += 0.6784 * x; |
b += 0.9373 * x; |
x = c * m1 * y1 * k; /* 1 0 0 1 */ |
g += 0.0588 * x; |
b += 0.1412 * x; |
x = c * m1 * y * k1; /* 1 0 1 0 */ |
g += 0.6510 * x; |
b += 0.3137 * x; |
x = c * m1 * y * k; /* 1 0 1 1 */ |
g += 0.0745 * x; |
x = c * m * y1 * k1; /* 1 1 0 0 */ |
r += 0.1804 * x; |
g += 0.1922 * x; |
b += 0.5725 * x; |
x = c * m * y1 * k; /* 1 1 0 1 */ |
b += 0.0078 * x; |
x = c * m * y * k1; /* 1 1 1 0 */ |
r += 0.2118 * x; |
g += 0.2119 * x; |
b += 0.2235 * x; |
rgb[0] = CLAMP(r, 0, 1); |
rgb[1] = CLAMP(g, 0, 1); |
rgb[2] = CLAMP(b, 0, 1); |
#else |
rgb[0] = 1 - MIN(1, cmyk[0] + cmyk[3]); |
rgb[1] = 1 - MIN(1, cmyk[1] + cmyk[3]); |
rgb[2] = 1 - MIN(1, cmyk[2] + cmyk[3]); |
#endif |
} |
static void rgb_to_cmyk(fz_colorspace *cs, float *rgb, float *cmyk) |
{ |
float c, m, y, k; |
c = 1 - rgb[0]; |
m = 1 - rgb[1]; |
y = 1 - rgb[2]; |
k = MIN(c, MIN(m, y)); |
cmyk[0] = c - k; |
cmyk[1] = m - k; |
cmyk[2] = y - k; |
cmyk[3] = k; |
} |
static fz_colorspace k_device_gray = { -1, "DeviceGray", 1, gray_to_rgb, rgb_to_gray }; |
static fz_colorspace k_device_rgb = { -1, "DeviceRGB", 3, rgb_to_rgb, rgb_to_rgb }; |
static fz_colorspace k_device_bgr = { -1, "DeviceRGB", 3, bgr_to_rgb, rgb_to_bgr }; |
static fz_colorspace k_device_cmyk = { -1, "DeviceCMYK", 4, cmyk_to_rgb, rgb_to_cmyk }; |
fz_colorspace *fz_device_gray = &k_device_gray; |
fz_colorspace *fz_device_rgb = &k_device_rgb; |
fz_colorspace *fz_device_bgr = &k_device_bgr; |
fz_colorspace *fz_device_cmyk = &k_device_cmyk; |
fz_colorspace * |
fz_find_device_colorspace(char *name) |
{ |
if (!strcmp(name, "DeviceGray")) |
return fz_device_gray; |
if (!strcmp(name, "DeviceRGB")) |
return fz_device_rgb; |
if (!strcmp(name, "DeviceBGR")) |
return fz_device_bgr; |
if (!strcmp(name, "DeviceCMYK")) |
return fz_device_cmyk; |
fz_warn("unknown device colorspace: %s", name); |
return NULL; |
} |
/* Fast pixmap color conversions */ |
static void fast_gray_to_rgb(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
d[0] = s[0]; |
d[1] = s[0]; |
d[2] = s[0]; |
d[3] = s[1]; |
s += 2; |
d += 4; |
} |
} |
static void fast_gray_to_cmyk(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
d[0] = 0; |
d[1] = 0; |
d[2] = 0; |
d[3] = s[0]; |
d[4] = s[1]; |
s += 2; |
d += 5; |
} |
} |
static void fast_rgb_to_gray(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
d[0] = ((s[0]+1) * 77 + (s[1]+1) * 150 + (s[2]+1) * 28) >> 8; |
d[1] = s[3]; |
s += 4; |
d += 2; |
} |
} |
static void fast_bgr_to_gray(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
d[0] = ((s[0]+1) * 28 + (s[1]+1) * 150 + (s[2]+1) * 77) >> 8; |
d[1] = s[3]; |
s += 4; |
d += 2; |
} |
} |
static void fast_rgb_to_cmyk(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
unsigned char c = 255 - s[0]; |
unsigned char m = 255 - s[1]; |
unsigned char y = 255 - s[2]; |
unsigned char k = MIN(c, MIN(m, y)); |
d[0] = c - k; |
d[1] = m - k; |
d[2] = y - k; |
d[3] = k; |
d[4] = s[3]; |
s += 4; |
d += 5; |
} |
} |
static void fast_bgr_to_cmyk(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
unsigned char c = 255 - s[2]; |
unsigned char m = 255 - s[1]; |
unsigned char y = 255 - s[0]; |
unsigned char k = MIN(c, MIN(m, y)); |
d[0] = c - k; |
d[1] = m - k; |
d[2] = y - k; |
d[3] = k; |
d[4] = s[3]; |
s += 4; |
d += 5; |
} |
} |
static void fast_cmyk_to_gray(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
unsigned char c = fz_mul255(s[0], 77); |
unsigned char m = fz_mul255(s[1], 150); |
unsigned char y = fz_mul255(s[2], 28); |
d[0] = 255 - MIN(c + m + y + s[3], 255); |
d[1] = s[4]; |
s += 5; |
d += 2; |
} |
} |
static void fast_cmyk_to_rgb(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
#ifdef SLOWCMYK |
float cmyk[4], rgb[3]; |
cmyk[0] = s[0] / 255.0f; |
cmyk[1] = s[1] / 255.0f; |
cmyk[2] = s[2] / 255.0f; |
cmyk[3] = s[3] / 255.0f; |
cmyk_to_rgb(NULL, cmyk, rgb); |
d[0] = rgb[0] * 255; |
d[1] = rgb[1] * 255; |
d[2] = rgb[2] * 255; |
#else |
d[0] = 255 - MIN(s[0] + s[3], 255); |
d[1] = 255 - MIN(s[1] + s[3], 255); |
d[2] = 255 - MIN(s[2] + s[3], 255); |
#endif |
d[3] = s[4]; |
s += 5; |
d += 4; |
} |
} |
static void fast_cmyk_to_bgr(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
#ifdef SLOWCMYK |
float cmyk[4], rgb[3]; |
cmyk[0] = s[0] / 255.0f; |
cmyk[1] = s[1] / 255.0f; |
cmyk[2] = s[2] / 255.0f; |
cmyk[3] = s[3] / 255.0f; |
cmyk_to_rgb(NULL, cmyk, rgb); |
d[0] = rgb[2] * 255; |
d[1] = rgb[1] * 255; |
d[2] = rgb[0] * 255; |
#else |
d[0] = 255 - MIN(s[2] + s[3], 255); |
d[1] = 255 - MIN(s[1] + s[3], 255); |
d[2] = 255 - MIN(s[0] + s[3], 255); |
#endif |
d[3] = s[4]; |
s += 5; |
d += 4; |
} |
} |
static void fast_rgb_to_bgr(fz_pixmap *src, fz_pixmap *dst) |
{ |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
int n = src->w * src->h; |
while (n--) |
{ |
d[0] = s[2]; |
d[1] = s[1]; |
d[2] = s[0]; |
d[3] = s[3]; |
s += 4; |
d += 4; |
} |
} |
static void |
fz_std_conv_pixmap(fz_pixmap *src, fz_pixmap *dst) |
{ |
float srcv[FZ_MAX_COLORS]; |
float dstv[FZ_MAX_COLORS]; |
int srcn, dstn; |
int y, x, k, i; |
fz_colorspace *ss = src->colorspace; |
fz_colorspace *ds = dst->colorspace; |
unsigned char *s = src->samples; |
unsigned char *d = dst->samples; |
assert(src->w == dst->w && src->h == dst->h); |
assert(src->n == ss->n + 1); |
assert(dst->n == ds->n + 1); |
srcn = ss->n; |
dstn = ds->n; |
/* Special case for Lab colorspace (scaling of components to float) */ |
if (!strcmp(ss->name, "Lab") && srcn == 3) |
{ |
for (y = 0; y < src->h; y++) |
{ |
for (x = 0; x < src->w; x++) |
{ |
srcv[0] = *s++ / 255.0f * 100; |
srcv[1] = *s++ - 128; |
srcv[2] = *s++ - 128; |
fz_convert_color(ss, srcv, ds, dstv); |
for (k = 0; k < dstn; k++) |
*d++ = dstv[k] * 255; |
*d++ = *s++; |
} |
} |
} |
/* Brute-force for small images */ |
else if (src->w * src->h < 256) |
{ |
for (y = 0; y < src->h; y++) |
{ |
for (x = 0; x < src->w; x++) |
{ |
for (k = 0; k < srcn; k++) |
srcv[k] = *s++ / 255.0f; |
fz_convert_color(ss, srcv, ds, dstv); |
for (k = 0; k < dstn; k++) |
*d++ = dstv[k] * 255; |
*d++ = *s++; |
} |
} |
} |
/* 1-d lookup table for separation and similar colorspaces */ |
else if (srcn == 1) |
{ |
unsigned char lookup[FZ_MAX_COLORS * 256]; |
for (i = 0; i < 256; i++) |
{ |
srcv[0] = i / 255.0f; |
fz_convert_color(ss, srcv, ds, dstv); |
for (k = 0; k < dstn; k++) |
lookup[i * dstn + k] = dstv[k] * 255; |
} |
for (y = 0; y < src->h; y++) |
{ |
for (x = 0; x < src->w; x++) |
{ |
i = *s++; |
for (k = 0; k < dstn; k++) |
*d++ = lookup[i * dstn + k]; |
*d++ = *s++; |
} |
} |
} |
/* Memoize colors using a hash table for the general case */ |
else |
{ |
fz_hash_table *lookup; |
unsigned char *color; |
lookup = fz_new_hash_table(509, srcn); |
for (y = 0; y < src->h; y++) |
{ |
for (x = 0; x < src->w; x++) |
{ |
color = fz_hash_find(lookup, s); |
if (color) |
{ |
memcpy(d, color, dstn); |
s += srcn; |
d += dstn; |
*d++ = *s++; |
} |
else |
{ |
for (k = 0; k < srcn; k++) |
srcv[k] = *s++ / 255.0f; |
fz_convert_color(ss, srcv, ds, dstv); |
for (k = 0; k < dstn; k++) |
*d++ = dstv[k] * 255; |
fz_hash_insert(lookup, s - srcn, d - dstn); |
*d++ = *s++; |
} |
} |
} |
fz_free_hash(lookup); |
} |
} |
void |
fz_convert_pixmap(fz_pixmap *sp, fz_pixmap *dp) |
{ |
fz_colorspace *ss = sp->colorspace; |
fz_colorspace *ds = dp->colorspace; |
assert(ss && ds); |
if (sp->mask) |
dp->mask = fz_keep_pixmap(sp->mask); |
dp->interpolate = sp->interpolate; |
if (ss == fz_device_gray) |
{ |
if (ds == fz_device_rgb) fast_gray_to_rgb(sp, dp); |
else if (ds == fz_device_bgr) fast_gray_to_rgb(sp, dp); /* bgr == rgb here */ |
else if (ds == fz_device_cmyk) fast_gray_to_cmyk(sp, dp); |
else fz_std_conv_pixmap(sp, dp); |
} |
else if (ss == fz_device_rgb) |
{ |
if (ds == fz_device_gray) fast_rgb_to_gray(sp, dp); |
else if (ds == fz_device_bgr) fast_rgb_to_bgr(sp, dp); |
else if (ds == fz_device_cmyk) fast_rgb_to_cmyk(sp, dp); |
else fz_std_conv_pixmap(sp, dp); |
} |
else if (ss == fz_device_bgr) |
{ |
if (ds == fz_device_gray) fast_bgr_to_gray(sp, dp); |
else if (ds == fz_device_rgb) fast_rgb_to_bgr(sp, dp); /* bgr = rgb here */ |
else if (ds == fz_device_cmyk) fast_bgr_to_cmyk(sp, dp); |
else fz_std_conv_pixmap(sp, dp); |
} |
else if (ss == fz_device_cmyk) |
{ |
if (ds == fz_device_gray) fast_cmyk_to_gray(sp, dp); |
else if (ds == fz_device_bgr) fast_cmyk_to_bgr(sp, dp); |
else if (ds == fz_device_rgb) fast_cmyk_to_rgb(sp, dp); |
else fz_std_conv_pixmap(sp, dp); |
} |
else fz_std_conv_pixmap(sp, dp); |
} |
/* Convert a single color */ |
static void |
fz_std_conv_color(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv) |
{ |
float rgb[3]; |
int i; |
if (srcs != dsts) |
{ |
assert(srcs->to_rgb && dsts->from_rgb); |
srcs->to_rgb(srcs, srcv, rgb); |
dsts->from_rgb(dsts, rgb, dstv); |
for (i = 0; i < dsts->n; i++) |
dstv[i] = CLAMP(dstv[i], 0, 1); |
} |
else |
{ |
for (i = 0; i < srcs->n; i++) |
dstv[i] = srcv[i]; |
} |
} |
void |
fz_convert_color(fz_colorspace *ss, float *sv, fz_colorspace *ds, float *dv) |
{ |
if (ss == fz_device_gray) |
{ |
if ((ds == fz_device_rgb) || (ds == fz_device_bgr)) |
{ |
dv[0] = sv[0]; |
dv[1] = sv[0]; |
dv[2] = sv[0]; |
} |
else if (ds == fz_device_cmyk) |
{ |
dv[0] = 0; |
dv[1] = 0; |
dv[2] = 0; |
dv[3] = sv[0]; |
} |
else |
fz_std_conv_color(ss, sv, ds, dv); |
} |
else if (ss == fz_device_rgb) |
{ |
if (ds == fz_device_gray) |
{ |
dv[0] = sv[0] * 0.3f + sv[1] * 0.59f + sv[2] * 0.11f; |
} |
else if (ds == fz_device_bgr) |
{ |
dv[0] = sv[2]; |
dv[1] = sv[1]; |
dv[2] = sv[0]; |
} |
else if (ds == fz_device_cmyk) |
{ |
float c = 1 - sv[0]; |
float m = 1 - sv[1]; |
float y = 1 - sv[2]; |
float k = MIN(c, MIN(m, y)); |
dv[0] = c - k; |
dv[1] = m - k; |
dv[2] = y - k; |
dv[3] = k; |
} |
else |
fz_std_conv_color(ss, sv, ds, dv); |
} |
else if (ss == fz_device_bgr) |
{ |
if (ds == fz_device_gray) |
{ |
dv[0] = sv[0] * 0.11f + sv[1] * 0.59f + sv[2] * 0.3f; |
} |
else if (ds == fz_device_bgr) |
{ |
dv[0] = sv[2]; |
dv[1] = sv[1]; |
dv[2] = sv[0]; |
} |
else if (ds == fz_device_cmyk) |
{ |
float c = 1 - sv[2]; |
float m = 1 - sv[1]; |
float y = 1 - sv[0]; |
float k = MIN(c, MIN(m, y)); |
dv[0] = c - k; |
dv[1] = m - k; |
dv[2] = y - k; |
dv[3] = k; |
} |
else |
fz_std_conv_color(ss, sv, ds, dv); |
} |
else if (ss == fz_device_cmyk) |
{ |
if (ds == fz_device_gray) |
{ |
float c = sv[0] * 0.3f; |
float m = sv[1] * 0.59f; |
float y = sv[2] * 0.11f; |
dv[0] = 1 - MIN(c + m + y + sv[3], 1); |
} |
else if (ds == fz_device_rgb) |
{ |
#ifdef SLOWCMYK |
cmyk_to_rgb(NULL, sv, dv); |
#else |
dv[0] = 1 - MIN(sv[0] + sv[3], 1); |
dv[1] = 1 - MIN(sv[1] + sv[3], 1); |
dv[2] = 1 - MIN(sv[2] + sv[3], 1); |
#endif |
} |
else if (ds == fz_device_bgr) |
{ |
#ifdef SLOWCMYK |
float rgb[3]; |
cmyk_to_rgb(NULL, sv, rgb); |
dv[0] = rgb[2]; |
dv[1] = rgb[1]; |
dv[2] = rgb[0]; |
#else |
dv[0] = 1 - MIN(sv[2] + sv[3], 1); |
dv[1] = 1 - MIN(sv[1] + sv[3], 1); |
dv[2] = 1 - MIN(sv[0] + sv[3], 1); |
#endif |
} |
else |
fz_std_conv_color(ss, sv, ds, dv); |
} |
else |
fz_std_conv_color(ss, sv, ds, dv); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_font.c |
---|
0,0 → 1,609 |
#include "fitz.h" |
#include <ft2build.h> |
#include FT_FREETYPE_H |
#include FT_STROKER_H |
static void fz_finalize_freetype(void); |
static fz_font * |
fz_new_font(char *name) |
{ |
fz_font *font; |
font = fz_malloc(sizeof(fz_font)); |
font->refs = 1; |
if (name) |
fz_strlcpy(font->name, name, sizeof font->name); |
else |
fz_strlcpy(font->name, "(null)", sizeof font->name); |
font->ft_face = NULL; |
font->ft_substitute = 0; |
font->ft_bold = 0; |
font->ft_italic = 0; |
font->ft_hint = 0; |
font->ft_file = NULL; |
font->ft_data = NULL; |
font->ft_size = 0; |
font->t3matrix = fz_identity; |
font->t3resources = NULL; |
font->t3procs = NULL; |
font->t3widths = NULL; |
font->t3xref = NULL; |
font->t3run = NULL; |
font->bbox.x0 = 0; |
font->bbox.y0 = 0; |
font->bbox.x1 = 1000; |
font->bbox.y1 = 1000; |
font->width_count = 0; |
font->width_table = NULL; |
return font; |
} |
fz_font * |
fz_keep_font(fz_font *font) |
{ |
font->refs ++; |
return font; |
} |
void |
fz_drop_font(fz_font *font) |
{ |
int fterr; |
int i; |
if (font && --font->refs == 0) |
{ |
if (font->t3procs) |
{ |
if (font->t3resources) |
fz_drop_obj(font->t3resources); |
for (i = 0; i < 256; i++) |
if (font->t3procs[i]) |
fz_drop_buffer(font->t3procs[i]); |
fz_free(font->t3procs); |
fz_free(font->t3widths); |
} |
if (font->ft_face) |
{ |
fterr = FT_Done_Face((FT_Face)font->ft_face); |
if (fterr) |
fz_warn("freetype finalizing face: %s", ft_error_string(fterr)); |
fz_finalize_freetype(); |
} |
if (font->ft_file) |
fz_free(font->ft_file); |
if (font->ft_data) |
fz_free(font->ft_data); |
if (font->width_table) |
fz_free(font->width_table); |
fz_free(font); |
} |
} |
void |
fz_set_font_bbox(fz_font *font, float xmin, float ymin, float xmax, float ymax) |
{ |
font->bbox.x0 = xmin; |
font->bbox.y0 = ymin; |
font->bbox.x1 = xmax; |
font->bbox.y1 = ymax; |
} |
/* |
* Freetype hooks |
*/ |
static FT_Library fz_ftlib = NULL; |
static int fz_ftlib_refs = 0; |
#undef __FTERRORS_H__ |
#define FT_ERRORDEF(e, v, s) { (e), (s) }, |
#define FT_ERROR_START_LIST |
#define FT_ERROR_END_LIST { 0, NULL } |
struct ft_error |
{ |
int err; |
char *str; |
}; |
static const struct ft_error ft_errors[] = |
{ |
#include FT_ERRORS_H |
}; |
char *ft_error_string(int err) |
{ |
const struct ft_error *e; |
for (e = ft_errors; e->str != NULL; e++) |
if (e->err == err) |
return e->str; |
return "Unknown error"; |
} |
static fz_error |
fz_init_freetype(void) |
{ |
int fterr; |
int maj, min, pat; |
if (fz_ftlib) |
{ |
fz_ftlib_refs++; |
return fz_okay; |
} |
fterr = FT_Init_FreeType(&fz_ftlib); |
if (fterr) |
return fz_throw("cannot init freetype: %s", ft_error_string(fterr)); |
FT_Library_Version(fz_ftlib, &maj, &min, &pat); |
if (maj == 2 && min == 1 && pat < 7) |
{ |
fterr = FT_Done_FreeType(fz_ftlib); |
if (fterr) |
fz_warn("freetype finalizing: %s", ft_error_string(fterr)); |
return fz_throw("freetype version too old: %d.%d.%d", maj, min, pat); |
} |
fz_ftlib_refs++; |
return fz_okay; |
} |
static void |
fz_finalize_freetype(void) |
{ |
int fterr; |
if (--fz_ftlib_refs == 0) |
{ |
fterr = FT_Done_FreeType(fz_ftlib); |
if (fterr) |
fz_warn("freetype finalizing: %s", ft_error_string(fterr)); |
fz_ftlib = NULL; |
} |
} |
fz_error |
fz_new_font_from_file(fz_font **fontp, char *path, int index) |
{ |
FT_Face face; |
fz_error error; |
fz_font *font; |
int fterr; |
error = fz_init_freetype(); |
if (error) |
return fz_rethrow(error, "cannot init freetype library"); |
fterr = FT_New_Face(fz_ftlib, path, index, &face); |
if (fterr) |
return fz_throw("freetype: cannot load font: %s", ft_error_string(fterr)); |
font = fz_new_font(face->family_name); |
font->ft_face = face; |
font->bbox.x0 = face->bbox.xMin * 1000 / face->units_per_EM; |
font->bbox.y0 = face->bbox.yMin * 1000 / face->units_per_EM; |
font->bbox.x1 = face->bbox.xMax * 1000 / face->units_per_EM; |
font->bbox.y1 = face->bbox.yMax * 1000 / face->units_per_EM; |
*fontp = font; |
return fz_okay; |
} |
fz_error |
fz_new_font_from_memory(fz_font **fontp, unsigned char *data, int len, int index) |
{ |
FT_Face face; |
fz_error error; |
fz_font *font; |
int fterr; |
error = fz_init_freetype(); |
if (error) |
return fz_rethrow(error, "cannot init freetype library"); |
fterr = FT_New_Memory_Face(fz_ftlib, data, len, index, &face); |
if (fterr) |
return fz_throw("freetype: cannot load font: %s", ft_error_string(fterr)); |
font = fz_new_font(face->family_name); |
font->ft_face = face; |
font->bbox.x0 = face->bbox.xMin * 1000 / face->units_per_EM; |
font->bbox.y0 = face->bbox.yMin * 1000 / face->units_per_EM; |
font->bbox.x1 = face->bbox.xMax * 1000 / face->units_per_EM; |
font->bbox.y1 = face->bbox.yMax * 1000 / face->units_per_EM; |
*fontp = font; |
return fz_okay; |
} |
static fz_matrix |
fz_adjust_ft_glyph_width(fz_font *font, int gid, fz_matrix trm) |
{ |
/* Fudge the font matrix to stretch the glyph if we've substituted the font. */ |
if (font->ft_substitute && gid < font->width_count) |
{ |
FT_Error fterr; |
int subw; |
int realw; |
float scale; |
/* TODO: use FT_Get_Advance */ |
fterr = FT_Set_Char_Size(font->ft_face, 1000, 1000, 72, 72); |
if (fterr) |
fz_warn("freetype setting character size: %s", ft_error_string(fterr)); |
fterr = FT_Load_Glyph(font->ft_face, gid, |
FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM); |
if (fterr) |
fz_warn("freetype failed to load glyph: %s", ft_error_string(fterr)); |
realw = ((FT_Face)font->ft_face)->glyph->metrics.horiAdvance; |
subw = font->width_table[gid]; |
if (realw) |
scale = (float) subw / realw; |
else |
scale = 1; |
return fz_concat(fz_scale(scale, 1), trm); |
} |
return trm; |
} |
static fz_pixmap * |
fz_copy_ft_bitmap(int left, int top, FT_Bitmap *bitmap) |
{ |
fz_pixmap *pixmap; |
int y; |
pixmap = fz_new_pixmap(NULL, bitmap->width, bitmap->rows); |
pixmap->x = left; |
pixmap->y = top - bitmap->rows; |
if (bitmap->pixel_mode == FT_PIXEL_MODE_MONO) |
{ |
for (y = 0; y < pixmap->h; y++) |
{ |
unsigned char *out = pixmap->samples + y * pixmap->w; |
unsigned char *in = bitmap->buffer + (pixmap->h - y - 1) * bitmap->pitch; |
unsigned char bit = 0x80; |
int w = pixmap->w; |
while (w--) |
{ |
*out++ = (*in & bit) ? 255 : 0; |
bit >>= 1; |
if (bit == 0) |
{ |
bit = 0x80; |
in++; |
} |
} |
} |
} |
else |
{ |
for (y = 0; y < pixmap->h; y++) |
{ |
memcpy(pixmap->samples + y * pixmap->w, |
bitmap->buffer + (pixmap->h - y - 1) * bitmap->pitch, |
pixmap->w); |
} |
} |
return pixmap; |
} |
fz_pixmap * |
fz_render_ft_glyph(fz_font *font, int gid, fz_matrix trm) |
{ |
FT_Face face = font->ft_face; |
FT_Matrix m; |
FT_Vector v; |
FT_Error fterr; |
trm = fz_adjust_ft_glyph_width(font, gid, trm); |
if (font->ft_italic) |
trm = fz_concat(fz_shear(0.3f, 0), trm); |
/* |
Freetype mutilates complex glyphs if they are loaded |
with FT_Set_Char_Size 1.0. it rounds the coordinates |
before applying transformation. to get more precision in |
freetype, we shift part of the scale in the matrix |
into FT_Set_Char_Size instead |
*/ |
m.xx = trm.a * 64; /* should be 65536 */ |
m.yx = trm.b * 64; |
m.xy = trm.c * 64; |
m.yy = trm.d * 64; |
v.x = trm.e * 64; |
v.y = trm.f * 64; |
fterr = FT_Set_Char_Size(face, 65536, 65536, 72, 72); /* should be 64, 64 */ |
if (fterr) |
fz_warn("freetype setting character size: %s", ft_error_string(fterr)); |
FT_Set_Transform(face, &m, &v); |
if (fz_get_aa_level() == 0) |
{ |
/* If you really want grid fitting, enable this code. */ |
float scale = fz_matrix_expansion(trm); |
m.xx = trm.a * 65536 / scale; |
m.xy = trm.b * 65536 / scale; |
m.yx = trm.c * 65536 / scale; |
m.yy = trm.d * 65536 / scale; |
v.x = 0; |
v.y = 0; |
fterr = FT_Set_Char_Size(face, 64 * scale, 64 * scale, 72, 72); |
if (fterr) |
fz_warn("freetype setting character size: %s", ft_error_string(fterr)); |
FT_Set_Transform(face, &m, &v); |
fterr = FT_Load_Glyph(face, gid, FT_LOAD_NO_BITMAP | FT_LOAD_TARGET_MONO); |
if (fterr) |
fz_warn("freetype load glyph (gid %d): %s", gid, ft_error_string(fterr)); |
} |
else if (font->ft_hint) |
{ |
/* |
Enable hinting, but keep the huge char size so that |
it is hinted for a character. This will in effect nullify |
the effect of grid fitting. This form of hinting should |
only be used for DynaLab and similar tricky TrueType fonts, |
so that we get the correct outline shape. |
*/ |
fterr = FT_Load_Glyph(face, gid, FT_LOAD_NO_BITMAP); |
if (fterr) |
fz_warn("freetype load glyph (gid %d): %s", gid, ft_error_string(fterr)); |
} |
else |
{ |
fterr = FT_Load_Glyph(face, gid, FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING); |
if (fterr) |
{ |
fz_warn("freetype load glyph (gid %d): %s", gid, ft_error_string(fterr)); |
return NULL; |
} |
} |
if (font->ft_bold) |
{ |
float strength = fz_matrix_expansion(trm) * 0.04f; |
FT_Outline_Embolden(&face->glyph->outline, strength * 64); |
FT_Outline_Translate(&face->glyph->outline, -strength * 32, -strength * 32); |
} |
fterr = FT_Render_Glyph(face->glyph, fz_get_aa_level() > 0 ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO); |
if (fterr) |
{ |
fz_warn("freetype render glyph (gid %d): %s", gid, ft_error_string(fterr)); |
return NULL; |
} |
return fz_copy_ft_bitmap(face->glyph->bitmap_left, face->glyph->bitmap_top, &face->glyph->bitmap); |
} |
fz_pixmap * |
fz_render_ft_stroked_glyph(fz_font *font, int gid, fz_matrix trm, fz_matrix ctm, fz_stroke_state *state) |
{ |
FT_Face face = font->ft_face; |
float expansion = fz_matrix_expansion(ctm); |
int linewidth = state->linewidth * expansion * 64 / 2; |
FT_Matrix m; |
FT_Vector v; |
FT_Error fterr; |
FT_Stroker stroker; |
FT_Glyph glyph; |
FT_BitmapGlyph bitmap; |
fz_pixmap *pixmap; |
trm = fz_adjust_ft_glyph_width(font, gid, trm); |
if (font->ft_italic) |
trm = fz_concat(fz_shear(0.3f, 0), trm); |
m.xx = trm.a * 64; /* should be 65536 */ |
m.yx = trm.b * 64; |
m.xy = trm.c * 64; |
m.yy = trm.d * 64; |
v.x = trm.e * 64; |
v.y = trm.f * 64; |
fterr = FT_Set_Char_Size(face, 65536, 65536, 72, 72); /* should be 64, 64 */ |
if (fterr) |
{ |
fz_warn("FT_Set_Char_Size: %s", ft_error_string(fterr)); |
return NULL; |
} |
FT_Set_Transform(face, &m, &v); |
fterr = FT_Load_Glyph(face, gid, FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING); |
if (fterr) |
{ |
fz_warn("FT_Load_Glyph(gid %d): %s", gid, ft_error_string(fterr)); |
return NULL; |
} |
fterr = FT_Stroker_New(fz_ftlib, &stroker); |
if (fterr) |
{ |
fz_warn("FT_Stroker_New: %s", ft_error_string(fterr)); |
return NULL; |
} |
FT_Stroker_Set(stroker, linewidth, state->start_cap, state->linejoin, state->miterlimit * 65536); |
fterr = FT_Get_Glyph(face->glyph, &glyph); |
if (fterr) |
{ |
fz_warn("FT_Get_Glyph: %s", ft_error_string(fterr)); |
FT_Stroker_Done(stroker); |
return NULL; |
} |
fterr = FT_Glyph_Stroke(&glyph, stroker, 1); |
if (fterr) |
{ |
fz_warn("FT_Glyph_Stroke: %s", ft_error_string(fterr)); |
FT_Done_Glyph(glyph); |
FT_Stroker_Done(stroker); |
return NULL; |
} |
FT_Stroker_Done(stroker); |
fterr = FT_Glyph_To_Bitmap(&glyph, fz_get_aa_level() > 0 ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO, 0, 1); |
if (fterr) |
{ |
fz_warn("FT_Glyph_To_Bitmap: %s", ft_error_string(fterr)); |
FT_Done_Glyph(glyph); |
return NULL; |
} |
bitmap = (FT_BitmapGlyph)glyph; |
pixmap = fz_copy_ft_bitmap(bitmap->left, bitmap->top, &bitmap->bitmap); |
FT_Done_Glyph(glyph); |
return pixmap; |
} |
/* |
* Type 3 fonts... |
*/ |
fz_font * |
fz_new_type3_font(char *name, fz_matrix matrix) |
{ |
fz_font *font; |
int i; |
font = fz_new_font(name); |
font->t3procs = fz_calloc(256, sizeof(fz_buffer*)); |
font->t3widths = fz_calloc(256, sizeof(float)); |
font->t3matrix = matrix; |
for (i = 0; i < 256; i++) |
{ |
font->t3procs[i] = NULL; |
font->t3widths[i] = 0; |
} |
return font; |
} |
fz_pixmap * |
fz_render_t3_glyph(fz_font *font, int gid, fz_matrix trm, fz_colorspace *model) |
{ |
fz_error error; |
fz_matrix ctm; |
fz_buffer *contents; |
fz_bbox bbox; |
fz_device *dev; |
fz_glyph_cache *cache; |
fz_pixmap *glyph; |
fz_pixmap *result; |
if (gid < 0 || gid > 255) |
return NULL; |
contents = font->t3procs[gid]; |
if (!contents) |
return NULL; |
ctm = fz_concat(font->t3matrix, trm); |
dev = fz_new_bbox_device(&bbox); |
error = font->t3run(font->t3xref, font->t3resources, contents, dev, ctm); |
if (error) |
fz_catch(error, "cannot draw type3 glyph"); |
if (dev->flags & FZ_CHARPROC_MASK) |
{ |
if (dev->flags & FZ_CHARPROC_COLOR) |
fz_warn("type3 glyph claims to be both masked and colored"); |
model = NULL; |
} |
else if (dev->flags & FZ_CHARPROC_COLOR) |
{ |
if (model == NULL) |
fz_warn("colored type3 glyph wanted in masked context"); |
} |
else |
{ |
fz_warn("type3 glyph doesn't specify masked or colored"); |
model = NULL; /* Treat as masked */ |
} |
fz_free_device(dev); |
bbox.x0--; |
bbox.y0--; |
bbox.x1++; |
bbox.y1++; |
glyph = fz_new_pixmap_with_rect(model ? model : fz_device_gray, bbox); |
fz_clear_pixmap(glyph); |
cache = fz_new_glyph_cache(); |
dev = fz_new_draw_device_type3(cache, glyph); |
error = font->t3run(font->t3xref, font->t3resources, contents, dev, ctm); |
if (error) |
fz_catch(error, "cannot draw type3 glyph"); |
fz_free_device(dev); |
fz_free_glyph_cache(cache); |
if (model == NULL) |
{ |
result = fz_alpha_from_gray(glyph, 0); |
fz_drop_pixmap(glyph); |
} |
else |
result = glyph; |
return result; |
} |
void |
fz_debug_font(fz_font *font) |
{ |
printf("font '%s' {\n", font->name); |
if (font->ft_face) |
{ |
printf("\tfreetype face %p\n", font->ft_face); |
if (font->ft_substitute) |
printf("\tsubstitute font\n"); |
} |
if (font->t3procs) |
{ |
printf("\ttype3 matrix [%g %g %g %g]\n", |
font->t3matrix.a, font->t3matrix.b, |
font->t3matrix.c, font->t3matrix.d); |
} |
printf("\tbbox [%g %g %g %g]\n", |
font->bbox.x0, font->bbox.y0, |
font->bbox.x1, font->bbox.y1); |
printf("}\n"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_halftone.c |
---|
0,0 → 1,190 |
#include "fitz.h" |
fz_halftone * |
fz_new_halftone(int comps) |
{ |
fz_halftone *ht; |
int i; |
ht = fz_malloc(sizeof(fz_halftone) + (comps-1)*sizeof(fz_pixmap *)); |
ht->refs = 1; |
ht->n = comps; |
for (i = 0; i < comps; i++) |
ht->comp[i] = NULL; |
return ht; |
} |
fz_halftone * |
fz_keep_halftone(fz_halftone *ht) |
{ |
ht->refs++; |
return ht; |
} |
void |
fz_drop_halftone(fz_halftone *ht) |
{ |
int i; |
if (!ht || --ht->refs != 0) |
return; |
for (i = 0; i < ht->n; i++) |
fz_drop_pixmap(ht->comp[i]); |
fz_free(ht); |
} |
/* Default mono halftone, lifted from Ghostscript. */ |
static unsigned char mono_ht[] = |
{ |
0x0E, 0x8E, 0x2E, 0xAE, 0x06, 0x86, 0x26, 0xA6, 0x0C, 0x8C, 0x2C, 0xAC, 0x04, 0x84, 0x24, 0xA4, |
0xCE, 0x4E, 0xEE, 0x6E, 0xC6, 0x46, 0xE6, 0x66, 0xCC, 0x4C, 0xEC, 0x6C, 0xC4, 0x44, 0xE4, 0x64, |
0x3E, 0xBE, 0x1E, 0x9E, 0x36, 0xB6, 0x16, 0x96, 0x3C, 0xBC, 0x1C, 0x9C, 0x34, 0xB4, 0x14, 0x94, |
0xFE, 0x7E, 0xDE, 0x5E, 0xF6, 0x76, 0xD6, 0x56, 0xFC, 0x7C, 0xDC, 0x5C, 0xF4, 0x74, 0xD4, 0x54, |
0x01, 0x81, 0x21, 0xA1, 0x09, 0x89, 0x29, 0xA9, 0x03, 0x83, 0x23, 0xA3, 0x0B, 0x8B, 0x2B, 0xAB, |
0xC1, 0x41, 0xE1, 0x61, 0xC9, 0x49, 0xE9, 0x69, 0xC3, 0x43, 0xE3, 0x63, 0xCB, 0x4B, 0xEB, 0x6B, |
0x31, 0xB1, 0x11, 0x91, 0x39, 0xB9, 0x19, 0x99, 0x33, 0xB3, 0x13, 0x93, 0x3B, 0xBB, 0x1B, 0x9B, |
0xF1, 0x71, 0xD1, 0x51, 0xF9, 0x79, 0xD9, 0x59, 0xF3, 0x73, 0xD3, 0x53, 0xFB, 0x7B, 0xDB, 0x5B, |
0x0D, 0x8D, 0x2D, 0xAD, 0x05, 0x85, 0x25, 0xA5, 0x0F, 0x8F, 0x2F, 0xAF, 0x07, 0x87, 0x27, 0xA7, |
0xCD, 0x4D, 0xED, 0x6D, 0xC5, 0x45, 0xE5, 0x65, 0xCF, 0x4F, 0xEF, 0x6F, 0xC7, 0x47, 0xE7, 0x67, |
0x3D, 0xBD, 0x1D, 0x9D, 0x35, 0xB5, 0x15, 0x95, 0x3F, 0xBF, 0x1F, 0x9F, 0x37, 0xB7, 0x17, 0x97, |
0xFD, 0x7D, 0xDD, 0x5D, 0xF5, 0x75, 0xD5, 0x55, 0xFF, 0x7F, 0xDF, 0x5F, 0xF7, 0x77, 0xD7, 0x57, |
0x02, 0x82, 0x22, 0xA2, 0x0A, 0x8A, 0x2A, 0xAA, 0x00, 0x80, 0x20, 0xA0, 0x08, 0x88, 0x28, 0xA8, |
0xC2, 0x42, 0xE2, 0x62, 0xCA, 0x4A, 0xEA, 0x6A, 0xC0, 0x40, 0xE0, 0x60, 0xC8, 0x48, 0xE8, 0x68, |
0x32, 0xB2, 0x12, 0x92, 0x3A, 0xBA, 0x1A, 0x9A, 0x30, 0xB0, 0x10, 0x90, 0x38, 0xB8, 0x18, 0x98, |
0xF2, 0x72, 0xD2, 0x52, 0xFA, 0x7A, 0xDA, 0x5A, 0xF0, 0x70, 0xD0, 0x50, 0xF8, 0x78, 0xD8, 0x58 |
}; |
fz_halftone *fz_get_default_halftone(int num_comps) |
{ |
fz_halftone *ht = fz_new_halftone(num_comps); |
assert(num_comps == 1); /* Only support 1 component for now */ |
ht->comp[0] = fz_new_pixmap_with_data(NULL, 16, 16, mono_ht); |
return ht; |
} |
/* Finally, code to actually perform halftoning. */ |
static void make_ht_line(unsigned char *buf, fz_halftone *ht, int x, int y, int w) |
{ |
/* FIXME: There is a potential optimisation here; in the case where |
* the LCM of the halftone tile widths is smaller than w, we could |
* form just one 'LCM' run, then copy it repeatedly. |
*/ |
int k, n; |
n = ht->n; |
for (k = 0; k < n; k++) |
{ |
fz_pixmap *tile = ht->comp[k]; |
unsigned char *b = buf++; |
unsigned char *t; |
unsigned char *tbase; |
int px = x + tile->x; |
int py = y + tile->y; |
int tw = tile->w; |
int th = tile->h; |
int w2 = w; |
int len; |
px = px % tw; |
if (px < 0) |
px += tw; |
py = py % th; |
if (py < 0) |
py += th; |
assert(tile->n == 1); |
/* Left hand section; from x to tile width */ |
tbase = tile->samples + py * tw; |
t = tbase + px; |
len = tw - px; |
if (len > w2) |
len = w2; |
w2 -= len; |
while (len--) |
{ |
*b = *t++; |
b += n; |
} |
/* Centre section - complete copies */ |
w2 -= tw; |
while (w2 >= 0) |
{ |
len = tw; |
t = tbase; |
while (len--) |
{ |
*b = *t++; |
b += n; |
} |
w2 -= tw; |
} |
w2 += tw; |
/* Right hand section - stragglers */ |
t = tbase; |
while (w2--) |
{ |
*b = *t++; |
b += n; |
} |
} |
} |
/* Inner mono thresholding code */ |
static void do_threshold_1(unsigned char *ht_line, unsigned char *pixmap, unsigned char *out, int w) |
{ |
int bit = 0x80; |
int h = 0; |
do |
{ |
if (*pixmap < *ht_line++) |
h |= bit; |
pixmap += 2; /* Skip the alpha */ |
bit >>= 1; |
if (bit == 0) |
{ |
*out++ = h; |
h = 0; |
bit = 0x80; |
} |
} |
while (--w); |
if (bit != 0x80) |
*out++ = h; |
} |
fz_bitmap *fz_halftone_pixmap(fz_pixmap *pix, fz_halftone *ht) |
{ |
fz_bitmap *out; |
unsigned char *ht_line, *o, *p; |
int w, h, x, y, n, pstride, ostride; |
if (pix == NULL || ht == NULL) |
return NULL; |
assert(pix->n == 2); /* Mono + Alpha */ |
n = pix->n-1; /* Remove alpha */ |
ht_line = fz_malloc(pix->w * n); |
out = fz_new_bitmap(pix->w, pix->h, n); |
o = out->samples; |
p = pix->samples; |
h = pix->h; |
x = pix->x; |
y = pix->y; |
w = pix->w; |
ostride = out->stride; |
pstride = pix->w * pix->n; |
while (h--) |
{ |
make_ht_line(ht_line, ht, x, y++, w); |
do_threshold_1(ht_line, p, o, w); |
o += ostride; |
p += pstride; |
} |
return out; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_path.c |
---|
0,0 → 1,262 |
#include "fitz.h" |
fz_path * |
fz_new_path(void) |
{ |
fz_path *path; |
path = fz_malloc(sizeof(fz_path)); |
path->len = 0; |
path->cap = 0; |
path->items = NULL; |
return path; |
} |
fz_path * |
fz_clone_path(fz_path *old) |
{ |
fz_path *path; |
path = fz_malloc(sizeof(fz_path)); |
path->len = old->len; |
path->cap = old->len; |
path->items = fz_calloc(path->cap, sizeof(fz_path_item)); |
memcpy(path->items, old->items, sizeof(fz_path_item) * path->len); |
return path; |
} |
void |
fz_free_path(fz_path *path) |
{ |
fz_free(path->items); |
fz_free(path); |
} |
static void |
grow_path(fz_path *path, int n) |
{ |
if (path->len + n < path->cap) |
return; |
while (path->len + n > path->cap) |
path->cap = path->cap + 36; |
path->items = fz_realloc(path->items, path->cap, sizeof(fz_path_item)); |
} |
void |
fz_moveto(fz_path *path, float x, float y) |
{ |
grow_path(path, 3); |
path->items[path->len++].k = FZ_MOVETO; |
path->items[path->len++].v = x; |
path->items[path->len++].v = y; |
} |
void |
fz_lineto(fz_path *path, float x, float y) |
{ |
if (path->len == 0) |
{ |
fz_warn("lineto with no current point"); |
return; |
} |
grow_path(path, 3); |
path->items[path->len++].k = FZ_LINETO; |
path->items[path->len++].v = x; |
path->items[path->len++].v = y; |
} |
void |
fz_curveto(fz_path *path, |
float x1, float y1, |
float x2, float y2, |
float x3, float y3) |
{ |
if (path->len == 0) |
{ |
fz_warn("curveto with no current point"); |
return; |
} |
grow_path(path, 7); |
path->items[path->len++].k = FZ_CURVETO; |
path->items[path->len++].v = x1; |
path->items[path->len++].v = y1; |
path->items[path->len++].v = x2; |
path->items[path->len++].v = y2; |
path->items[path->len++].v = x3; |
path->items[path->len++].v = y3; |
} |
void |
fz_curvetov(fz_path *path, float x2, float y2, float x3, float y3) |
{ |
float x1, y1; |
if (path->len == 0) |
{ |
fz_warn("curvetov with no current point"); |
return; |
} |
x1 = path->items[path->len-2].v; |
y1 = path->items[path->len-1].v; |
fz_curveto(path, x1, y1, x2, y2, x3, y3); |
} |
void |
fz_curvetoy(fz_path *path, float x1, float y1, float x3, float y3) |
{ |
fz_curveto(path, x1, y1, x3, y3, x3, y3); |
} |
void |
fz_closepath(fz_path *path) |
{ |
if (path->len == 0) |
{ |
fz_warn("closepath with no current point"); |
return; |
} |
grow_path(path, 1); |
path->items[path->len++].k = FZ_CLOSE_PATH; |
} |
static inline fz_rect bound_expand(fz_rect r, fz_point p) |
{ |
if (p.x < r.x0) r.x0 = p.x; |
if (p.y < r.y0) r.y0 = p.y; |
if (p.x > r.x1) r.x1 = p.x; |
if (p.y > r.y1) r.y1 = p.y; |
return r; |
} |
fz_rect |
fz_bound_path(fz_path *path, fz_stroke_state *stroke, fz_matrix ctm) |
{ |
fz_point p; |
fz_rect r = fz_empty_rect; |
int i = 0; |
if (path->len) |
{ |
p.x = path->items[1].v; |
p.y = path->items[2].v; |
p = fz_transform_point(ctm, p); |
r.x0 = r.x1 = p.x; |
r.y0 = r.y1 = p.y; |
} |
while (i < path->len) |
{ |
switch (path->items[i++].k) |
{ |
case FZ_CURVETO: |
p.x = path->items[i++].v; |
p.y = path->items[i++].v; |
r = bound_expand(r, fz_transform_point(ctm, p)); |
p.x = path->items[i++].v; |
p.y = path->items[i++].v; |
r = bound_expand(r, fz_transform_point(ctm, p)); |
p.x = path->items[i++].v; |
p.y = path->items[i++].v; |
r = bound_expand(r, fz_transform_point(ctm, p)); |
break; |
case FZ_MOVETO: |
case FZ_LINETO: |
p.x = path->items[i++].v; |
p.y = path->items[i++].v; |
r = bound_expand(r, fz_transform_point(ctm, p)); |
break; |
case FZ_CLOSE_PATH: |
break; |
} |
} |
if (stroke) |
{ |
float miterlength = stroke->miterlimit; |
float linewidth = stroke->linewidth; |
float expand = MAX(miterlength, linewidth) * 0.5f; |
r.x0 -= expand; |
r.y0 -= expand; |
r.x1 += expand; |
r.y1 += expand; |
} |
return r; |
} |
void |
fz_transform_path(fz_path *path, fz_matrix ctm) |
{ |
fz_point p; |
int k, i = 0; |
while (i < path->len) |
{ |
switch (path->items[i++].k) |
{ |
case FZ_CURVETO: |
for (k = 0; k < 3; k++) |
{ |
p.x = path->items[i].v; |
p.y = path->items[i+1].v; |
p = fz_transform_point(ctm, p); |
path->items[i].v = p.x; |
path->items[i+1].v = p.y; |
i += 2; |
} |
break; |
case FZ_MOVETO: |
case FZ_LINETO: |
p.x = path->items[i].v; |
p.y = path->items[i+1].v; |
p = fz_transform_point(ctm, p); |
path->items[i].v = p.x; |
path->items[i+1].v = p.y; |
i += 2; |
break; |
case FZ_CLOSE_PATH: |
break; |
} |
} |
} |
void |
fz_debug_path(fz_path *path, int indent) |
{ |
float x, y; |
int i = 0; |
int n; |
while (i < path->len) |
{ |
for (n = 0; n < indent; n++) |
putchar(' '); |
switch (path->items[i++].k) |
{ |
case FZ_MOVETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("%g %g m\n", x, y); |
break; |
case FZ_LINETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("%g %g l\n", x, y); |
break; |
case FZ_CURVETO: |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("%g %g ", x, y); |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("%g %g ", x, y); |
x = path->items[i++].v; |
y = path->items[i++].v; |
printf("%g %g c\n", x, y); |
break; |
case FZ_CLOSE_PATH: |
printf("h\n"); |
break; |
} |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_pixmap.c |
---|
0,0 → 1,519 |
#include "fitz.h" |
static int fz_memory_limit = 256 << 20; |
static int fz_memory_used = 0; |
fz_pixmap * |
fz_new_pixmap_with_data(fz_colorspace *colorspace, int w, int h, unsigned char *samples) |
{ |
fz_pixmap *pix; |
pix = fz_malloc(sizeof(fz_pixmap)); |
pix->refs = 1; |
pix->x = 0; |
pix->y = 0; |
pix->w = w; |
pix->h = h; |
pix->mask = NULL; |
pix->interpolate = 1; |
pix->xres = 96; |
pix->yres = 96; |
pix->colorspace = NULL; |
pix->n = 1; |
if (colorspace) |
{ |
pix->colorspace = fz_keep_colorspace(colorspace); |
pix->n = 1 + colorspace->n; |
} |
if (samples) |
{ |
pix->samples = samples; |
pix->free_samples = 0; |
} |
else |
{ |
fz_memory_used += pix->w * pix->h * pix->n; |
pix->samples = fz_calloc(pix->h, pix->w * pix->n); |
pix->free_samples = 1; |
} |
return pix; |
} |
fz_pixmap * |
fz_new_pixmap_with_limit(fz_colorspace *colorspace, int w, int h) |
{ |
int n = colorspace ? colorspace->n + 1 : 1; |
int size = w * h * n; |
if (fz_memory_used + size > fz_memory_limit) |
{ |
fz_warn("pixmap memory exceeds soft limit %dM + %dM > %dM", |
fz_memory_used/(1<<20), size/(1<<20), fz_memory_limit/(1<<20)); |
return NULL; |
} |
return fz_new_pixmap_with_data(colorspace, w, h, NULL); |
} |
fz_pixmap * |
fz_new_pixmap(fz_colorspace *colorspace, int w, int h) |
{ |
return fz_new_pixmap_with_data(colorspace, w, h, NULL); |
} |
fz_pixmap * |
fz_new_pixmap_with_rect(fz_colorspace *colorspace, fz_bbox r) |
{ |
fz_pixmap *pixmap; |
pixmap = fz_new_pixmap(colorspace, r.x1 - r.x0, r.y1 - r.y0); |
pixmap->x = r.x0; |
pixmap->y = r.y0; |
return pixmap; |
} |
fz_pixmap * |
fz_new_pixmap_with_rect_and_data(fz_colorspace *colorspace, fz_bbox r, unsigned char *samples) |
{ |
fz_pixmap *pixmap; |
pixmap = fz_new_pixmap_with_data(colorspace, r.x1 - r.x0, r.y1 - r.y0, samples); |
pixmap->x = r.x0; |
pixmap->y = r.y0; |
return pixmap; |
} |
fz_pixmap * |
fz_keep_pixmap(fz_pixmap *pix) |
{ |
pix->refs++; |
return pix; |
} |
void |
fz_drop_pixmap(fz_pixmap *pix) |
{ |
if (pix && --pix->refs == 0) |
{ |
fz_memory_used -= pix->w * pix->h * pix->n; |
if (pix->mask) |
fz_drop_pixmap(pix->mask); |
if (pix->colorspace) |
fz_drop_colorspace(pix->colorspace); |
if (pix->free_samples) |
fz_free(pix->samples); |
fz_free(pix); |
} |
} |
fz_bbox |
fz_bound_pixmap(fz_pixmap *pix) |
{ |
fz_bbox bbox; |
bbox.x0 = pix->x; |
bbox.y0 = pix->y; |
bbox.x1 = pix->x + pix->w; |
bbox.y1 = pix->y + pix->h; |
return bbox; |
} |
void |
fz_clear_pixmap(fz_pixmap *pix) |
{ |
memset(pix->samples, 0, pix->w * pix->h * pix->n); |
} |
void |
fz_clear_pixmap_with_color(fz_pixmap *pix, int value) |
{ |
if (value == 255) |
memset(pix->samples, 255, pix->w * pix->h * pix->n); |
else |
{ |
int k, x, y; |
unsigned char *s = pix->samples; |
for (y = 0; y < pix->h; y++) |
{ |
for (x = 0; x < pix->w; x++) |
{ |
for (k = 0; k < pix->n - 1; k++) |
*s++ = value; |
*s++ = 255; |
} |
} |
} |
} |
void |
fz_copy_pixmap_rect(fz_pixmap *dest, fz_pixmap *src, fz_bbox r) |
{ |
const unsigned char *srcp; |
unsigned char *destp; |
int y, w, destspan, srcspan; |
r = fz_intersect_bbox(r, fz_bound_pixmap(dest)); |
r = fz_intersect_bbox(r, fz_bound_pixmap(src)); |
w = r.x1 - r.x0; |
y = r.y1 - r.y0; |
if (w <= 0 || y <= 0) |
return; |
w *= src->n; |
srcspan = src->w * src->n; |
srcp = src->samples + srcspan * (r.y0 - src->y) + src->n * (r.x0 - src->x); |
destspan = dest->w * dest->n; |
destp = dest->samples + destspan * (r.y0 - dest->y) + dest->n * (r.x0 - dest->x); |
do |
{ |
memcpy(destp, srcp, w); |
srcp += srcspan; |
destp += destspan; |
} |
while (--y); |
} |
void |
fz_clear_pixmap_rect_with_color(fz_pixmap *dest, int value, fz_bbox r) |
{ |
unsigned char *destp; |
int x, y, w, k, destspan; |
r = fz_intersect_bbox(r, fz_bound_pixmap(dest)); |
w = r.x1 - r.x0; |
y = r.y1 - r.y0; |
if (w <= 0 || y <= 0) |
return; |
destspan = dest->w * dest->n; |
destp = dest->samples + destspan * (r.y0 - dest->y) + dest->n * (r.x0 - dest->x); |
if (value == 255) |
do |
{ |
memset(destp, 255, w * dest->n); |
destp += destspan; |
} |
while (--y); |
else |
do |
{ |
unsigned char *s = destp; |
for (x = 0; x < w; x++) |
{ |
for (k = 0; k < dest->n - 1; k++) |
*s++ = value; |
*s++ = 255; |
} |
destp += destspan; |
} |
while (--y); |
} |
void |
fz_premultiply_pixmap(fz_pixmap *pix) |
{ |
unsigned char *s = pix->samples; |
unsigned char a; |
int k, x, y; |
for (y = 0; y < pix->h; y++) |
{ |
for (x = 0; x < pix->w; x++) |
{ |
a = s[pix->n - 1]; |
for (k = 0; k < pix->n - 1; k++) |
s[k] = fz_mul255(s[k], a); |
s += pix->n; |
} |
} |
} |
fz_pixmap * |
fz_alpha_from_gray(fz_pixmap *gray, int luminosity) |
{ |
fz_pixmap *alpha; |
unsigned char *sp, *dp; |
int len; |
assert(gray->n == 2); |
alpha = fz_new_pixmap_with_rect(NULL, fz_bound_pixmap(gray)); |
dp = alpha->samples; |
sp = gray->samples; |
if (!luminosity) |
sp ++; |
len = gray->w * gray->h; |
while (len--) |
{ |
*dp++ = sp[0]; |
sp += 2; |
} |
return alpha; |
} |
void |
fz_invert_pixmap(fz_pixmap *pix) |
{ |
unsigned char *s = pix->samples; |
int k, x, y; |
for (y = 0; y < pix->h; y++) |
{ |
for (x = 0; x < pix->w; x++) |
{ |
for (k = 0; k < pix->n - 1; k++) |
s[k] = 255 - s[k]; |
s += pix->n; |
} |
} |
} |
void |
fz_gamma_pixmap(fz_pixmap *pix, float gamma) |
{ |
unsigned char gamma_map[256]; |
unsigned char *s = pix->samples; |
int k, x, y; |
for (k = 0; k < 256; k++) |
gamma_map[k] = pow(k / 255.0f, gamma) * 255; |
for (y = 0; y < pix->h; y++) |
{ |
for (x = 0; x < pix->w; x++) |
{ |
for (k = 0; k < pix->n - 1; k++) |
s[k] = gamma_map[s[k]]; |
s += pix->n; |
} |
} |
} |
/* |
* Write pixmap to PNM file (without alpha channel) |
*/ |
fz_error |
fz_write_pnm(fz_pixmap *pixmap, char *filename) |
{ |
FILE *fp; |
unsigned char *p; |
int len; |
if (pixmap->n != 1 && pixmap->n != 2 && pixmap->n != 4) |
return fz_throw("pixmap must be grayscale or rgb to write as pnm"); |
fp = fopen(filename, "wb"); |
if (!fp) |
return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); |
if (pixmap->n == 1 || pixmap->n == 2) |
fprintf(fp, "P5\n"); |
if (pixmap->n == 4) |
fprintf(fp, "P6\n"); |
fprintf(fp, "%d %d\n", pixmap->w, pixmap->h); |
fprintf(fp, "255\n"); |
len = pixmap->w * pixmap->h; |
p = pixmap->samples; |
switch (pixmap->n) |
{ |
case 1: |
fwrite(p, 1, len, fp); |
break; |
case 2: |
while (len--) |
{ |
putc(p[0], fp); |
p += 2; |
} |
break; |
case 4: |
while (len--) |
{ |
putc(p[0], fp); |
putc(p[1], fp); |
putc(p[2], fp); |
p += 4; |
} |
} |
fclose(fp); |
return fz_okay; |
} |
/* |
* Write pixmap to PAM file (with or without alpha channel) |
*/ |
fz_error |
fz_write_pam(fz_pixmap *pixmap, char *filename, int savealpha) |
{ |
unsigned char *sp; |
int y, w, k; |
FILE *fp; |
int sn = pixmap->n; |
int dn = pixmap->n; |
if (!savealpha && dn > 1) |
dn--; |
fp = fopen(filename, "wb"); |
if (!fp) |
return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); |
fprintf(fp, "P7\n"); |
fprintf(fp, "WIDTH %d\n", pixmap->w); |
fprintf(fp, "HEIGHT %d\n", pixmap->h); |
fprintf(fp, "DEPTH %d\n", dn); |
fprintf(fp, "MAXVAL 255\n"); |
if (pixmap->colorspace) |
fprintf(fp, "# COLORSPACE %s\n", pixmap->colorspace->name); |
switch (dn) |
{ |
case 1: fprintf(fp, "TUPLTYPE GRAYSCALE\n"); break; |
case 2: if (sn == 2) fprintf(fp, "TUPLTYPE GRAYSCALE_ALPHA\n"); break; |
case 3: if (sn == 4) fprintf(fp, "TUPLTYPE RGB\n"); break; |
case 4: if (sn == 4) fprintf(fp, "TUPLTYPE RGB_ALPHA\n"); break; |
} |
fprintf(fp, "ENDHDR\n"); |
sp = pixmap->samples; |
for (y = 0; y < pixmap->h; y++) |
{ |
w = pixmap->w; |
while (w--) |
{ |
for (k = 0; k < dn; k++) |
putc(sp[k], fp); |
sp += sn; |
} |
} |
fclose(fp); |
return fz_okay; |
} |
/* |
* Write pixmap to PNG file (with or without alpha channel) |
*/ |
#include <zlib.h> |
static inline void big32(unsigned char *buf, unsigned int v) |
{ |
buf[0] = (v >> 24) & 0xff; |
buf[1] = (v >> 16) & 0xff; |
buf[2] = (v >> 8) & 0xff; |
buf[3] = (v) & 0xff; |
} |
static inline void put32(unsigned int v, FILE *fp) |
{ |
putc(v >> 24, fp); |
putc(v >> 16, fp); |
putc(v >> 8, fp); |
putc(v, fp); |
} |
static void putchunk(char *tag, unsigned char *data, int size, FILE *fp) |
{ |
unsigned int sum; |
put32(size, fp); |
fwrite(tag, 1, 4, fp); |
fwrite(data, 1, size, fp); |
sum = crc32(0, NULL, 0); |
sum = crc32(sum, (unsigned char*)tag, 4); |
sum = crc32(sum, data, size); |
put32(sum, fp); |
} |
fz_error |
fz_write_png(fz_pixmap *pixmap, char *filename, int savealpha) |
{ |
static const unsigned char pngsig[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; |
FILE *fp; |
unsigned char head[13]; |
unsigned char *udata, *cdata, *sp, *dp; |
uLong usize, csize; |
int y, x, k, sn, dn; |
int color; |
int err; |
if (pixmap->n != 1 && pixmap->n != 2 && pixmap->n != 4) |
return fz_throw("pixmap must be grayscale or rgb to write as png"); |
sn = pixmap->n; |
dn = pixmap->n; |
if (!savealpha && dn > 1) |
dn--; |
switch (dn) |
{ |
default: |
case 1: color = 0; break; |
case 2: color = 4; break; |
case 3: color = 2; break; |
case 4: color = 6; break; |
} |
usize = (pixmap->w * dn + 1) * pixmap->h; |
csize = compressBound(usize); |
udata = fz_malloc(usize); |
cdata = fz_malloc(csize); |
sp = pixmap->samples; |
dp = udata; |
for (y = 0; y < pixmap->h; y++) |
{ |
*dp++ = 1; /* sub prediction filter */ |
for (x = 0; x < pixmap->w; x++) |
{ |
for (k = 0; k < dn; k++) |
{ |
if (x == 0) |
dp[k] = sp[k]; |
else |
dp[k] = sp[k] - sp[k-sn]; |
} |
sp += sn; |
dp += dn; |
} |
} |
err = compress(cdata, &csize, udata, usize); |
if (err != Z_OK) |
{ |
fz_free(udata); |
fz_free(cdata); |
return fz_throw("cannot compress image data"); |
} |
fp = fopen(filename, "wb"); |
if (!fp) |
{ |
fz_free(udata); |
fz_free(cdata); |
return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); |
} |
big32(head+0, pixmap->w); |
big32(head+4, pixmap->h); |
head[8] = 8; /* depth */ |
head[9] = color; |
head[10] = 0; /* compression */ |
head[11] = 0; /* filter */ |
head[12] = 0; /* interlace */ |
fwrite(pngsig, 1, 8, fp); |
putchunk("IHDR", head, 13, fp); |
putchunk("IDAT", cdata, csize, fp); |
putchunk("IEND", head, 0, fp); |
fclose(fp); |
fz_free(udata); |
fz_free(cdata); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_shade.c |
---|
0,0 → 1,127 |
#include "fitz.h" |
fz_shade * |
fz_keep_shade(fz_shade *shade) |
{ |
shade->refs ++; |
return shade; |
} |
void |
fz_drop_shade(fz_shade *shade) |
{ |
if (shade && --shade->refs == 0) |
{ |
if (shade->colorspace) |
fz_drop_colorspace(shade->colorspace); |
fz_free(shade->mesh); |
fz_free(shade); |
} |
} |
fz_rect |
fz_bound_shade(fz_shade *shade, fz_matrix ctm) |
{ |
float *v; |
fz_rect r; |
fz_point p; |
int i, ncomp, nvert; |
ctm = fz_concat(shade->matrix, ctm); |
ncomp = shade->use_function ? 3 : 2 + shade->colorspace->n; |
nvert = shade->mesh_len / ncomp; |
v = shade->mesh; |
if (shade->type == FZ_LINEAR) |
return fz_infinite_rect; |
if (shade->type == FZ_RADIAL) |
return fz_infinite_rect; |
if (nvert == 0) |
return fz_empty_rect; |
p.x = v[0]; |
p.y = v[1]; |
v += ncomp; |
p = fz_transform_point(ctm, p); |
r.x0 = r.x1 = p.x; |
r.y0 = r.y1 = p.y; |
for (i = 1; i < nvert; i++) |
{ |
p.x = v[0]; |
p.y = v[1]; |
p = fz_transform_point(ctm, p); |
v += ncomp; |
if (p.x < r.x0) r.x0 = p.x; |
if (p.y < r.y0) r.y0 = p.y; |
if (p.x > r.x1) r.x1 = p.x; |
if (p.y > r.y1) r.y1 = p.y; |
} |
return r; |
} |
void |
fz_debug_shade(fz_shade *shade) |
{ |
int i, j, n; |
float *vertex; |
int triangle; |
printf("shading {\n"); |
switch (shade->type) |
{ |
case FZ_LINEAR: printf("\ttype linear\n"); break; |
case FZ_RADIAL: printf("\ttype radial\n"); break; |
case FZ_MESH: printf("\ttype mesh\n"); break; |
} |
printf("\tbbox [%g %g %g %g]\n", |
shade->bbox.x0, shade->bbox.y0, |
shade->bbox.x1, shade->bbox.y1); |
printf("\tcolorspace %s\n", shade->colorspace->name); |
printf("\tmatrix [%g %g %g %g %g %g]\n", |
shade->matrix.a, shade->matrix.b, shade->matrix.c, |
shade->matrix.d, shade->matrix.e, shade->matrix.f); |
if (shade->use_background) |
{ |
printf("\tbackground ["); |
for (i = 0; i < shade->colorspace->n; i++) |
printf("%s%g", i == 0 ? "" : " ", shade->background[i]); |
printf("]\n"); |
} |
if (shade->use_function) |
{ |
printf("\tfunction\n"); |
n = 3; |
} |
else |
n = 2 + shade->colorspace->n; |
printf("\tvertices: %d\n", shade->mesh_len); |
vertex = shade->mesh; |
triangle = 0; |
i = 0; |
while (i < shade->mesh_len) |
{ |
printf("\t%d:(%g, %g): ", triangle, vertex[0], vertex[1]); |
for (j = 2; j < n; j++) |
printf("%s%g", j == 2 ? "" : " ", vertex[j]); |
printf("\n"); |
vertex += n; |
i++; |
if (i % 3 == 0) |
triangle++; |
} |
printf("}\n"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/res_text.c |
---|
0,0 → 1,133 |
#include "fitz.h" |
fz_text * |
fz_new_text(fz_font *font, fz_matrix trm, int wmode) |
{ |
fz_text *text; |
text = fz_malloc(sizeof(fz_text)); |
text->font = fz_keep_font(font); |
text->trm = trm; |
text->wmode = wmode; |
text->len = 0; |
text->cap = 0; |
text->items = NULL; |
return text; |
} |
void |
fz_free_text(fz_text *text) |
{ |
fz_drop_font(text->font); |
fz_free(text->items); |
fz_free(text); |
} |
fz_text * |
fz_clone_text(fz_text *old) |
{ |
fz_text *text; |
text = fz_malloc(sizeof(fz_text)); |
text->font = fz_keep_font(old->font); |
text->trm = old->trm; |
text->wmode = old->wmode; |
text->len = old->len; |
text->cap = text->len; |
text->items = fz_calloc(text->len, sizeof(fz_text_item)); |
memcpy(text->items, old->items, text->len * sizeof(fz_text_item)); |
return text; |
} |
fz_rect |
fz_bound_text(fz_text *text, fz_matrix ctm) |
{ |
fz_matrix trm; |
fz_rect bbox; |
fz_rect fbox; |
int i; |
if (text->len == 0) |
return fz_empty_rect; |
/* find bbox of glyph origins in ctm space */ |
bbox.x0 = bbox.x1 = text->items[0].x; |
bbox.y0 = bbox.y1 = text->items[0].y; |
for (i = 1; i < text->len; i++) |
{ |
bbox.x0 = MIN(bbox.x0, text->items[i].x); |
bbox.y0 = MIN(bbox.y0, text->items[i].y); |
bbox.x1 = MAX(bbox.x1, text->items[i].x); |
bbox.y1 = MAX(bbox.y1, text->items[i].y); |
} |
bbox = fz_transform_rect(ctm, bbox); |
/* find bbox of font in trm * ctm space */ |
trm = fz_concat(text->trm, ctm); |
trm.e = 0; |
trm.f = 0; |
fbox.x0 = text->font->bbox.x0 * 0.001f; |
fbox.y0 = text->font->bbox.y0 * 0.001f; |
fbox.x1 = text->font->bbox.x1 * 0.001f; |
fbox.y1 = text->font->bbox.y1 * 0.001f; |
fbox = fz_transform_rect(trm, fbox); |
/* expand glyph origin bbox by font bbox */ |
bbox.x0 += fbox.x0; |
bbox.y0 += fbox.y0; |
bbox.x1 += fbox.x1; |
bbox.y1 += fbox.y1; |
return bbox; |
} |
static void |
fz_grow_text(fz_text *text, int n) |
{ |
if (text->len + n < text->cap) |
return; |
while (text->len + n > text->cap) |
text->cap = text->cap + 36; |
text->items = fz_realloc(text->items, text->cap, sizeof(fz_text_item)); |
} |
void |
fz_add_text(fz_text *text, int gid, int ucs, float x, float y) |
{ |
fz_grow_text(text, 1); |
text->items[text->len].ucs = ucs; |
text->items[text->len].gid = gid; |
text->items[text->len].x = x; |
text->items[text->len].y = y; |
text->len++; |
} |
static int isxmlmeta(int c) |
{ |
return c < 32 || c >= 128 || c == '&' || c == '<' || c == '>' || c == '\'' || c == '"'; |
} |
void fz_debug_text(fz_text *text, int indent) |
{ |
int i, n; |
for (i = 0; i < text->len; i++) |
{ |
for (n = 0; n < indent; n++) |
putchar(' '); |
if (!isxmlmeta(text->items[i].ucs)) |
printf("<g ucs=\"%c\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n", |
text->items[i].ucs, text->items[i].gid, text->items[i].x, text->items[i].y); |
else |
printf("<g ucs=\"U+%04X\" gid=\"%d\" x=\"%g\" y=\"%g\" />\n", |
text->items[i].ucs, text->items[i].gid, text->items[i].x, text->items[i].y); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/stm_buffer.c |
---|
0,0 → 1,49 |
#include "fitz.h" |
fz_buffer * |
fz_new_buffer(int size) |
{ |
fz_buffer *b; |
size = size > 1 ? size : 16; |
b = fz_malloc(sizeof(fz_buffer)); |
b->refs = 1; |
b->data = fz_malloc(size); |
b->cap = size; |
b->len = 0; |
return b; |
} |
fz_buffer * |
fz_keep_buffer(fz_buffer *buf) |
{ |
buf->refs ++; |
return buf; |
} |
void |
fz_drop_buffer(fz_buffer *buf) |
{ |
if (--buf->refs == 0) |
{ |
fz_free(buf->data); |
fz_free(buf); |
} |
} |
void |
fz_resize_buffer(fz_buffer *buf, int size) |
{ |
buf->data = fz_realloc(buf->data, size, 1); |
buf->cap = size; |
if (buf->len > buf->cap) |
buf->len = buf->cap; |
} |
void |
fz_grow_buffer(fz_buffer *buf) |
{ |
fz_resize_buffer(buf, (buf->cap * 3) / 2); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/stm_open.c |
---|
0,0 → 1,174 |
#include "fitz.h" |
fz_stream * |
fz_new_stream(void *state, |
int(*read)(fz_stream *stm, unsigned char *buf, int len), |
void(*close)(fz_stream *stm)) |
{ |
fz_stream *stm; |
stm = fz_malloc(sizeof(fz_stream)); |
stm->refs = 1; |
stm->error = 0; |
stm->eof = 0; |
stm->pos = 0; |
stm->bits = 0; |
stm->avail = 0; |
stm->bp = stm->buf; |
stm->rp = stm->bp; |
stm->wp = stm->bp; |
stm->ep = stm->buf + sizeof stm->buf; |
stm->state = state; |
stm->read = read; |
stm->close = close; |
stm->seek = NULL; |
return stm; |
} |
fz_stream * |
fz_keep_stream(fz_stream *stm) |
{ |
stm->refs ++; |
return stm; |
} |
void |
fz_close(fz_stream *stm) |
{ |
stm->refs --; |
if (stm->refs == 0) |
{ |
if (stm->close) |
stm->close(stm); |
fz_free(stm); |
} |
} |
/* File stream */ |
static int read_file(fz_stream *stm, unsigned char *buf, int len) |
{ |
int n = read(*(int*)stm->state, buf, len); |
if (n < 0) |
return fz_throw("read error: %s", strerror(errno)); |
return n; |
} |
static void seek_file(fz_stream *stm, int offset, int whence) |
{ |
int n = lseek(*(int*)stm->state, offset, whence); |
if (n < 0) |
fz_warn("cannot lseek: %s", strerror(errno)); |
stm->pos = n; |
stm->rp = stm->bp; |
stm->wp = stm->bp; |
} |
static void close_file(fz_stream *stm) |
{ |
int n = close(*(int*)stm->state); |
if (n < 0) |
fz_warn("close error: %s", strerror(errno)); |
fz_free(stm->state); |
} |
fz_stream * |
fz_open_fd(int fd) |
{ |
fz_stream *stm; |
int *state; |
state = fz_malloc(sizeof(int)); |
*state = fd; |
stm = fz_new_stream(state, read_file, close_file); |
stm->seek = seek_file; |
return stm; |
} |
fz_stream * |
fz_open_file(const char *name) |
{ |
int fd = open(name, O_BINARY | O_RDONLY, 0); |
if (fd == -1) |
return NULL; |
return fz_open_fd(fd); |
} |
#ifdef _WIN32 |
fz_stream * |
fz_open_file_w(const wchar_t *name) |
{ |
int fd = _wopen(name, O_BINARY | O_RDONLY, 0); |
if (fd == -1) |
return NULL; |
return fz_open_fd(fd); |
} |
#endif |
/* Memory stream */ |
static int read_buffer(fz_stream *stm, unsigned char *buf, int len) |
{ |
return 0; |
} |
static void seek_buffer(fz_stream *stm, int offset, int whence) |
{ |
if (whence == 0) |
stm->rp = stm->bp + offset; |
if (whence == 1) |
stm->rp += offset; |
if (whence == 2) |
stm->rp = stm->ep - offset; |
stm->rp = CLAMP(stm->rp, stm->bp, stm->ep); |
stm->wp = stm->ep; |
} |
static void close_buffer(fz_stream *stm) |
{ |
if (stm->state) |
fz_drop_buffer(stm->state); |
} |
fz_stream * |
fz_open_buffer(fz_buffer *buf) |
{ |
fz_stream *stm; |
stm = fz_new_stream(fz_keep_buffer(buf), read_buffer, close_buffer); |
stm->seek = seek_buffer; |
stm->bp = buf->data; |
stm->rp = buf->data; |
stm->wp = buf->data + buf->len; |
stm->ep = buf->data + buf->len; |
stm->pos = buf->len; |
return stm; |
} |
fz_stream * |
fz_open_memory(unsigned char *data, int len) |
{ |
fz_stream *stm; |
stm = fz_new_stream(NULL, read_buffer, close_buffer); |
stm->seek = seek_buffer; |
stm->bp = data; |
stm->rp = data; |
stm->wp = data + len; |
stm->ep = data + len; |
stm->pos = len; |
return stm; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/stm_read.c |
---|
0,0 → 1,201 |
#include "fitz.h" |
int |
fz_read(fz_stream *stm, unsigned char *buf, int len) |
{ |
int count, n; |
count = MIN(len, stm->wp - stm->rp); |
if (count) |
{ |
memcpy(buf, stm->rp, count); |
stm->rp += count; |
} |
if (count == len || stm->error || stm->eof) |
return count; |
assert(stm->rp == stm->wp); |
if (len - count < stm->ep - stm->bp) |
{ |
n = stm->read(stm, stm->bp, stm->ep - stm->bp); |
if (n < 0) |
{ |
stm->error = 1; |
return fz_rethrow(n, "read error"); |
} |
else if (n == 0) |
{ |
stm->eof = 1; |
} |
else if (n > 0) |
{ |
stm->rp = stm->bp; |
stm->wp = stm->bp + n; |
stm->pos += n; |
} |
n = MIN(len - count, stm->wp - stm->rp); |
if (n) |
{ |
memcpy(buf + count, stm->rp, n); |
stm->rp += n; |
count += n; |
} |
} |
else |
{ |
n = stm->read(stm, buf + count, len - count); |
if (n < 0) |
{ |
stm->error = 1; |
return fz_rethrow(n, "read error"); |
} |
else if (n == 0) |
{ |
stm->eof = 1; |
} |
else if (n > 0) |
{ |
stm->pos += n; |
count += n; |
} |
} |
return count; |
} |
void |
fz_fill_buffer(fz_stream *stm) |
{ |
int n; |
assert(stm->rp == stm->wp); |
if (stm->error || stm->eof) |
return; |
n = stm->read(stm, stm->bp, stm->ep - stm->bp); |
if (n < 0) |
{ |
stm->error = 1; |
fz_catch(n, "read error; treating as end of file"); |
} |
else if (n == 0) |
{ |
stm->eof = 1; |
} |
else if (n > 0) |
{ |
stm->rp = stm->bp; |
stm->wp = stm->bp + n; |
stm->pos += n; |
} |
} |
fz_error |
fz_read_all(fz_buffer **bufp, fz_stream *stm, int initial) |
{ |
fz_buffer *buf; |
int n; |
if (initial < 1024) |
initial = 1024; |
buf = fz_new_buffer(initial); |
while (1) |
{ |
if (buf->len == buf->cap) |
fz_grow_buffer(buf); |
if (buf->len / 200 > initial) |
{ |
fz_drop_buffer(buf); |
return fz_throw("compression bomb detected"); |
} |
n = fz_read(stm, buf->data + buf->len, buf->cap - buf->len); |
if (n < 0) |
{ |
fz_drop_buffer(buf); |
return fz_rethrow(n, "read error"); |
} |
if (n == 0) |
break; |
buf->len += n; |
} |
*bufp = buf; |
return fz_okay; |
} |
void |
fz_read_line(fz_stream *stm, char *mem, int n) |
{ |
char *s = mem; |
int c = EOF; |
while (n > 1) |
{ |
c = fz_read_byte(stm); |
if (c == EOF) |
break; |
if (c == '\r') { |
c = fz_peek_byte(stm); |
if (c == '\n') |
fz_read_byte(stm); |
break; |
} |
if (c == '\n') |
break; |
*s++ = c; |
n--; |
} |
if (n) |
*s = '\0'; |
} |
int |
fz_tell(fz_stream *stm) |
{ |
return stm->pos - (stm->wp - stm->rp); |
} |
void |
fz_seek(fz_stream *stm, int offset, int whence) |
{ |
if (stm->seek) |
{ |
if (whence == 1) |
{ |
offset = fz_tell(stm) + offset; |
whence = 0; |
} |
if (whence == 0) |
{ |
unsigned char *p = stm->wp - (stm->pos - offset); |
if (p >= stm->bp && p <= stm->wp) |
{ |
stm->rp = p; |
stm->eof = 0; |
return; |
} |
} |
stm->seek(stm, offset, whence); |
stm->eof = 0; |
} |
else if (whence != 2) |
{ |
if (whence == 0) |
offset -= fz_tell(stm); |
if (offset < 0) |
fz_warn("cannot seek backwards"); |
/* dog slow, but rare enough */ |
while (offset-- > 0) |
fz_read_byte(stm); |
} |
else |
fz_warn("cannot seek"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/strtoll.c |
---|
0,0 → 1,30 |
#include <ctype.h> |
#include <stdlib.h> |
#include <limits.h> |
#include <errno.h> |
#include <inttypes.h> |
long long int strtoll(const char *nptr, char **endptr, int base) |
{ |
int neg=0; |
unsigned long long int v; |
const char*orig=nptr; |
while(isspace(*nptr)) nptr++; |
if (*nptr == '-' && isalnum(nptr[1])) { neg=-1; nptr++; } |
v=strtoull(nptr,endptr,base); |
if (endptr && *endptr==nptr) *endptr=(char *)orig; |
if (v>LLONG_MAX) { |
if (v==0x8000000000000000ull && neg) { |
errno=0; |
return v; |
} |
errno=ERANGE; |
return (neg?LLONG_MIN:LLONG_MAX); |
} |
return (neg?-v:v); |
} |
intmax_t strtoimax(const char *nptr, char **endptr, int base) |
__attribute__((alias("strtoll"))); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/fitz/strtoull.c |
---|
0,0 → 1,68 |
#include <ctype.h> |
#include <stdlib.h> |
#include <errno.h> |
#include <limits.h> |
#include <inttypes.h> |
#define __expect(foo,bar) (foo) |
#define __likely(foo) __expect((foo),1) |
#define __unlikely(foo) __expect((foo),0) |
unsigned long long int strtoull(const char *ptr, char **endptr, int base) |
{ |
int neg = 0, overflow = 0; |
long long int v=0; |
const char* orig; |
const char* nptr=ptr; |
while(isspace(*nptr)) ++nptr; |
if (*nptr == '-') { neg=1; nptr++; } |
else if (*nptr == '+') ++nptr; |
orig=nptr; |
if (base==16 && nptr[0]=='0') goto skip0x; |
if (base) { |
register unsigned int b=base-2; |
if (__unlikely(b>34)) { errno=EINVAL; return 0; } |
} else { |
if (*nptr=='0') { |
base=8; |
skip0x: |
if (((*(nptr+1)=='x')||(*(nptr+1)=='X')) && isxdigit(nptr[2])) { |
nptr+=2; |
base=16; |
} |
} else |
base=10; |
} |
while(__likely(*nptr)) { |
register unsigned char c=*nptr; |
c=(c>='a'?c-'a'+10:c>='A'?c-'A'+10:c<='9'?c-'0':0xff); |
if (__unlikely(c>=base)) break; /* out of base */ |
{ |
register unsigned long x=(v&0xff)*base+c; |
register unsigned long long w=(v>>8)*base+(x>>8); |
if (w>(ULLONG_MAX>>8)) overflow=1; |
v=(w<<8)+(x&0xff); |
} |
++nptr; |
} |
if (__unlikely(nptr==orig)) { /* no conversion done */ |
nptr=ptr; |
errno=EINVAL; |
v=0; |
} |
if (endptr) *endptr=(char *)nptr; |
if (overflow) { |
errno=ERANGE; |
return ULLONG_MAX; |
} |
return (neg?-v:v); |
} |
/* die, BSD, die!!! */ |
unsigned long long int strtouq(const char *nptr, char **endptr, int base) |
__attribute__((alias("strtoull"))); |
uintmax_t strtoumax(const char *nptr, char **endptr, int base) |
__attribute__((alias("strtoull"))); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/cmap_cns.h |
---|
0,0 → 1,681 |
/* This is an automatically generated file. Do not edit. */ |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_0_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_0_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_0 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_0_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_0_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_1_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_1_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_1 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_1_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_1_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_3_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_3_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_3 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_3_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_3_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_4_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_4_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_4 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_4_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_4_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_5_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_5_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_5 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_5_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_5_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_6_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_6_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_6 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_6_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_6_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_CNS1_UCS2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_CNS1_UCS2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_CNS1_UCS2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_CNS1_UCS2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_CNS1_UCS2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_B5_H_ranges, |
0, 0, (unsigned short*) cmap_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_B5pc_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_B5pc_H_table[] = { 0 }; |
static pdf_cmap cmap_B5pc_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_B5pc_H_ranges, |
0, 0, (unsigned short*) cmap_B5pc_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_B5pc_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_B5pc_V_table[] = { 0 }; |
static pdf_cmap cmap_B5pc_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_B5pc_V_ranges, |
0, 0, (unsigned short*) cmap_B5pc_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_B5_V_ranges, |
0, 0, (unsigned short*) cmap_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS1_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS1_H_table[] = { 0 }; |
static pdf_cmap cmap_CNS1_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS1_H_ranges, |
0, 0, (unsigned short*) cmap_CNS1_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS1_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS1_V_table[] = { 0 }; |
static pdf_cmap cmap_CNS1_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS1_V_ranges, |
0, 0, (unsigned short*) cmap_CNS1_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS2_H_table[] = { 0 }; |
static pdf_cmap cmap_CNS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS2_H_ranges, |
0, 0, (unsigned short*) cmap_CNS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS2_V_table[] = { 0 }; |
static pdf_cmap cmap_CNS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS2_V_ranges, |
0, 0, (unsigned short*) cmap_CNS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_CNS_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_CNS_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_CNS_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_CNS_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_CNS_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_CNS_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_CNS_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETen_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETen_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_ETen_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETen_B5_H_ranges, |
0, 0, (unsigned short*) cmap_ETen_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETen_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETen_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_ETen_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETen_B5_V_ranges, |
0, 0, (unsigned short*) cmap_ETen_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETenms_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETenms_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_ETenms_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETenms_B5_H_ranges, |
0, 0, (unsigned short*) cmap_ETenms_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETenms_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETenms_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_ETenms_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETenms_B5_V_ranges, |
0, 0, (unsigned short*) cmap_ETenms_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETHK_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETHK_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_ETHK_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETHK_B5_H_ranges, |
0, 0, (unsigned short*) cmap_ETHK_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_ETHK_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_ETHK_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_ETHK_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_ETHK_B5_V_ranges, |
0, 0, (unsigned short*) cmap_ETHK_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKdla_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKdla_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKdla_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKdla_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKdla_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKdla_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKdla_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKdla_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKdla_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKdla_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKdlb_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKdlb_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKdlb_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKdlb_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKdlb_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKdlb_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKdlb_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKdlb_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKdlb_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKdlb_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKgccs_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKgccs_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKgccs_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKgccs_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKgccs_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKgccs_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKgccs_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKgccs_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKgccs_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKgccs_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKm314_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKm314_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKm314_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKm314_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKm314_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKm314_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKm314_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKm314_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKm314_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKm314_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKm471_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKm471_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKm471_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKm471_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKm471_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKm471_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKm471_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKm471_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKm471_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKm471_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKscs_B5_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKscs_B5_H_table[] = { 0 }; |
static pdf_cmap cmap_HKscs_B5_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKscs_B5_H_ranges, |
0, 0, (unsigned short*) cmap_HKscs_B5_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_HKscs_B5_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_HKscs_B5_V_table[] = { 0 }; |
static pdf_cmap cmap_HKscs_B5_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_HKscs_B5_V_ranges, |
0, 0, (unsigned short*) cmap_HKscs_B5_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniCNS_UCS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniCNS_UCS2_H_table[] = { 0 }; |
static pdf_cmap cmap_UniCNS_UCS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniCNS_UCS2_H_ranges, |
0, 0, (unsigned short*) cmap_UniCNS_UCS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniCNS_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniCNS_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniCNS_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniCNS_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniCNS_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniCNS_UTF16_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniCNS_UTF16_H_table[] = { 0 }; |
static pdf_cmap cmap_UniCNS_UTF16_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniCNS_UTF16_H_ranges, |
0, 0, (unsigned short*) cmap_UniCNS_UTF16_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniCNS_UTF16_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniCNS_UTF16_V_table[] = { 0 }; |
static pdf_cmap cmap_UniCNS_UTF16_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniCNS_UTF16_V_ranges, |
0, 0, (unsigned short*) cmap_UniCNS_UTF16_V_table, |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/cmap_gb.h |
---|
0,0 → 1,494 |
/* This is an automatically generated file. Do not edit. */ |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_0_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_0_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_0 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_0_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_0_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_1_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_1_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_1 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_1_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_1_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_3_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_3_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_3 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_3_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_3_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_4_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_4_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_4 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_4_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_4_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_5_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_5_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_5 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_5_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_5_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_GB1_UCS2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_GB1_UCS2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_GB1_UCS2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_GB1_UCS2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_GB1_UCS2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GB_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GB_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GB_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GB_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GB_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GB_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GB_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GB_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GB_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GB_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GB_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GB_H_table[] = { 0 }; |
static pdf_cmap cmap_GB_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GB_H_ranges, |
0, 0, (unsigned short*) cmap_GB_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBK2K_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBK2K_H_table[] = { 0 }; |
static pdf_cmap cmap_GBK2K_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBK2K_H_ranges, |
0, 0, (unsigned short*) cmap_GBK2K_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBK2K_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBK2K_V_table[] = { 0 }; |
static pdf_cmap cmap_GBK2K_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBK2K_V_ranges, |
0, 0, (unsigned short*) cmap_GBK2K_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBK_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBK_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GBK_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBK_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GBK_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBK_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBK_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GBK_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBK_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GBK_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBKp_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBKp_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GBKp_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBKp_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GBKp_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBKp_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBKp_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GBKp_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBKp_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GBKp_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBpc_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBpc_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GBpc_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBpc_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GBpc_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBpc_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBpc_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GBpc_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBpc_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GBpc_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBT_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBT_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GBT_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBT_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GBT_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBT_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBT_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GBT_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBT_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GBT_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBT_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBT_H_table[] = { 0 }; |
static pdf_cmap cmap_GBT_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBT_H_ranges, |
0, 0, (unsigned short*) cmap_GBT_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBTpc_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBTpc_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_GBTpc_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBTpc_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_GBTpc_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBTpc_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBTpc_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_GBTpc_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBTpc_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_GBTpc_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GBT_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GBT_V_table[] = { 0 }; |
static pdf_cmap cmap_GBT_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GBT_V_ranges, |
0, 0, (unsigned short*) cmap_GBT_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_GB_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_GB_V_table[] = { 0 }; |
static pdf_cmap cmap_GB_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_GB_V_ranges, |
0, 0, (unsigned short*) cmap_GB_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniGB_UCS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniGB_UCS2_H_table[] = { 0 }; |
static pdf_cmap cmap_UniGB_UCS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniGB_UCS2_H_ranges, |
0, 0, (unsigned short*) cmap_UniGB_UCS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniGB_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniGB_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniGB_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniGB_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniGB_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniGB_UTF16_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniGB_UTF16_H_table[] = { 0 }; |
static pdf_cmap cmap_UniGB_UTF16_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniGB_UTF16_H_ranges, |
0, 0, (unsigned short*) cmap_UniGB_UTF16_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniGB_UTF16_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniGB_UTF16_V_table[] = { 0 }; |
static pdf_cmap cmap_UniGB_UTF16_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniGB_UTF16_V_ranges, |
0, 0, (unsigned short*) cmap_UniGB_UTF16_V_table, |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/cmap_japan.h |
---|
0,0 → 1,1038 |
/* This is an automatically generated file. Do not edit. */ |
/* B5-V */ |
static const pdf_range cmap_78_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_78_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_78_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_78_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_78_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_H_table[] = { 0 }; |
static pdf_cmap cmap_78_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_H_ranges, |
0, 0, (unsigned short*) cmap_78_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78ms_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78ms_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_78ms_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78ms_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_78ms_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78ms_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78ms_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_78ms_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78ms_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_78ms_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_78_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_78_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_78_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_78_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_78_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_78_V_table[] = { 0 }; |
static pdf_cmap cmap_78_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_78_V_ranges, |
0, 0, (unsigned short*) cmap_78_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_83pv_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_83pv_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_83pv_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_83pv_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_83pv_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90msp_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90msp_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_90msp_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90msp_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_90msp_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90msp_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90msp_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_90msp_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90msp_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_90msp_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90ms_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90ms_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_90ms_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90ms_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_90ms_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90ms_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90ms_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_90ms_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90ms_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_90ms_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90pv_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90pv_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_90pv_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90pv_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_90pv_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_90pv_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_90pv_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_90pv_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_90pv_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_90pv_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Add_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Add_H_table[] = { 0 }; |
static pdf_cmap cmap_Add_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Add_H_ranges, |
0, 0, (unsigned short*) cmap_Add_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Add_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Add_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_Add_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Add_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_Add_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Add_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Add_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_Add_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Add_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_Add_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Add_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Add_V_table[] = { 0 }; |
static pdf_cmap cmap_Add_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Add_V_ranges, |
0, 0, (unsigned short*) cmap_Add_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_0_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_0_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_0 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_0_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_0_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_1_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_1_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_1 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_1_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_1_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_3_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_3_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_3 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_3_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_3_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_4_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_4_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_4 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_4_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_4_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_5_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_5_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_5 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_5_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_5_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_6_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_6_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_6 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_6_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_6_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan1_UCS2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan1_UCS2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan1_UCS2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan1_UCS2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan1_UCS2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Japan2_0_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Japan2_0_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Japan2_0 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Japan2_0_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Japan2_0_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Ext_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Ext_H_table[] = { 0 }; |
static pdf_cmap cmap_Ext_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Ext_H_ranges, |
0, 0, (unsigned short*) cmap_Ext_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Ext_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Ext_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_Ext_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Ext_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_Ext_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Ext_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Ext_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_Ext_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Ext_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_Ext_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Ext_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Ext_V_table[] = { 0 }; |
static pdf_cmap cmap_Ext_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Ext_V_ranges, |
0, 0, (unsigned short*) cmap_Ext_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_H_table[] = { 0 }; |
static pdf_cmap cmap_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_H_ranges, |
0, 0, (unsigned short*) cmap_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hankaku_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hankaku_table[] = { 0 }; |
static pdf_cmap cmap_Hankaku = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hankaku_ranges, |
0, 0, (unsigned short*) cmap_Hankaku_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hiragana_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hiragana_table[] = { 0 }; |
static pdf_cmap cmap_Hiragana = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hiragana_ranges, |
0, 0, (unsigned short*) cmap_Hiragana_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hojo_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hojo_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_Hojo_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hojo_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_Hojo_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hojo_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hojo_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_Hojo_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hojo_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_Hojo_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hojo_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hojo_H_table[] = { 0 }; |
static pdf_cmap cmap_Hojo_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hojo_H_ranges, |
0, 0, (unsigned short*) cmap_Hojo_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Hojo_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Hojo_V_table[] = { 0 }; |
static pdf_cmap cmap_Hojo_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Hojo_V_ranges, |
0, 0, (unsigned short*) cmap_Hojo_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Katakana_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Katakana_table[] = { 0 }; |
static pdf_cmap cmap_Katakana = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Katakana_ranges, |
0, 0, (unsigned short*) cmap_Katakana_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_NWP_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_NWP_H_table[] = { 0 }; |
static pdf_cmap cmap_NWP_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_NWP_H_ranges, |
0, 0, (unsigned short*) cmap_NWP_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_NWP_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_NWP_V_table[] = { 0 }; |
static pdf_cmap cmap_NWP_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_NWP_V_ranges, |
0, 0, (unsigned short*) cmap_NWP_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_RKSJ_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_RKSJ_H_table[] = { 0 }; |
static pdf_cmap cmap_RKSJ_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_RKSJ_H_ranges, |
0, 0, (unsigned short*) cmap_RKSJ_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_RKSJ_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_RKSJ_V_table[] = { 0 }; |
static pdf_cmap cmap_RKSJ_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_RKSJ_V_ranges, |
0, 0, (unsigned short*) cmap_RKSJ_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Roman_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Roman_table[] = { 0 }; |
static pdf_cmap cmap_Roman = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Roman_ranges, |
0, 0, (unsigned short*) cmap_Roman_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniHojo_UCS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniHojo_UCS2_H_table[] = { 0 }; |
static pdf_cmap cmap_UniHojo_UCS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniHojo_UCS2_H_ranges, |
0, 0, (unsigned short*) cmap_UniHojo_UCS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniHojo_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniHojo_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniHojo_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniHojo_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniHojo_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniHojo_UTF16_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniHojo_UTF16_H_table[] = { 0 }; |
static pdf_cmap cmap_UniHojo_UTF16_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniHojo_UTF16_H_ranges, |
0, 0, (unsigned short*) cmap_UniHojo_UTF16_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniHojo_UTF16_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniHojo_UTF16_V_table[] = { 0 }; |
static pdf_cmap cmap_UniHojo_UTF16_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniHojo_UTF16_V_ranges, |
0, 0, (unsigned short*) cmap_UniHojo_UTF16_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJISPro_UCS2_HW_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJISPro_UCS2_HW_V_table[] = { 0 }; |
static pdf_cmap cmap_UniJISPro_UCS2_HW_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJISPro_UCS2_HW_V_ranges, |
0, 0, (unsigned short*) cmap_UniJISPro_UCS2_HW_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJISPro_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJISPro_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniJISPro_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJISPro_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniJISPro_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UCS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UCS2_H_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UCS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UCS2_H_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UCS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UCS2_HW_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UCS2_HW_H_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UCS2_HW_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UCS2_HW_H_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UCS2_HW_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UCS2_HW_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UCS2_HW_V_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UCS2_HW_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UCS2_HW_V_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UCS2_HW_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UTF16_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UTF16_H_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UTF16_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UTF16_H_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UTF16_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniJIS_UTF16_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniJIS_UTF16_V_table[] = { 0 }; |
static pdf_cmap cmap_UniJIS_UTF16_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniJIS_UTF16_V_ranges, |
0, 0, (unsigned short*) cmap_UniJIS_UTF16_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_V_table[] = { 0 }; |
static pdf_cmap cmap_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_V_ranges, |
0, 0, (unsigned short*) cmap_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_WP_Symbol_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_WP_Symbol_table[] = { 0 }; |
static pdf_cmap cmap_WP_Symbol = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_WP_Symbol_ranges, |
0, 0, (unsigned short*) cmap_WP_Symbol_table, |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/cmap_korea.h |
---|
0,0 → 1,341 |
/* This is an automatically generated file. Do not edit. */ |
/* B5-V */ |
static const pdf_range cmap_Adobe_Korea1_0_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Korea1_0_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Korea1_0 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Korea1_0_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Korea1_0_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Korea1_1_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Korea1_1_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Korea1_1 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Korea1_1_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Korea1_1_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Korea1_2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Korea1_2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Korea1_2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Korea1_2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Korea1_2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_Adobe_Korea1_UCS2_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_Adobe_Korea1_UCS2_table[] = { 0 }; |
static pdf_cmap cmap_Adobe_Korea1_UCS2 = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_Adobe_Korea1_UCS2_ranges, |
0, 0, (unsigned short*) cmap_Adobe_Korea1_UCS2_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_KSC_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_KSC_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_KSC_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_KSC_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_H_table[] = { 0 }; |
static pdf_cmap cmap_KSC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_H_ranges, |
0, 0, (unsigned short*) cmap_KSC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_Johab_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_Johab_H_table[] = { 0 }; |
static pdf_cmap cmap_KSC_Johab_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_Johab_H_ranges, |
0, 0, (unsigned short*) cmap_KSC_Johab_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_Johab_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_Johab_V_table[] = { 0 }; |
static pdf_cmap cmap_KSC_Johab_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_Johab_V_ranges, |
0, 0, (unsigned short*) cmap_KSC_Johab_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCms_UHC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCms_UHC_H_table[] = { 0 }; |
static pdf_cmap cmap_KSCms_UHC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCms_UHC_H_ranges, |
0, 0, (unsigned short*) cmap_KSCms_UHC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCms_UHC_HW_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCms_UHC_HW_H_table[] = { 0 }; |
static pdf_cmap cmap_KSCms_UHC_HW_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCms_UHC_HW_H_ranges, |
0, 0, (unsigned short*) cmap_KSCms_UHC_HW_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCms_UHC_HW_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCms_UHC_HW_V_table[] = { 0 }; |
static pdf_cmap cmap_KSCms_UHC_HW_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCms_UHC_HW_V_ranges, |
0, 0, (unsigned short*) cmap_KSCms_UHC_HW_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCms_UHC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCms_UHC_V_table[] = { 0 }; |
static pdf_cmap cmap_KSCms_UHC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCms_UHC_V_ranges, |
0, 0, (unsigned short*) cmap_KSCms_UHC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCpc_EUC_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCpc_EUC_H_table[] = { 0 }; |
static pdf_cmap cmap_KSCpc_EUC_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCpc_EUC_H_ranges, |
0, 0, (unsigned short*) cmap_KSCpc_EUC_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSCpc_EUC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSCpc_EUC_V_table[] = { 0 }; |
static pdf_cmap cmap_KSCpc_EUC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSCpc_EUC_V_ranges, |
0, 0, (unsigned short*) cmap_KSCpc_EUC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_KSC_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_KSC_V_table[] = { 0 }; |
static pdf_cmap cmap_KSC_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_KSC_V_ranges, |
0, 0, (unsigned short*) cmap_KSC_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniKS_UCS2_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniKS_UCS2_H_table[] = { 0 }; |
static pdf_cmap cmap_UniKS_UCS2_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniKS_UCS2_H_ranges, |
0, 0, (unsigned short*) cmap_UniKS_UCS2_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniKS_UCS2_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniKS_UCS2_V_table[] = { 0 }; |
static pdf_cmap cmap_UniKS_UCS2_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniKS_UCS2_V_ranges, |
0, 0, (unsigned short*) cmap_UniKS_UCS2_V_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniKS_UTF16_H_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniKS_UTF16_H_table[] = { 0 }; |
static pdf_cmap cmap_UniKS_UTF16_H = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniKS_UTF16_H_ranges, |
0, 0, (unsigned short*) cmap_UniKS_UTF16_H_table, |
}; |
/* B5-V */ |
static const pdf_range cmap_UniKS_UTF16_V_ranges[] = { |
{41291,0,13646},{41306,0,13743},{41308,0,13745},{41309,5,130}, |
{41313,5,134},{41317,5,138},{41321,5,142},{41325,5,146}, |
{41329,5,150},{41333,5,154},{41337,5,158},{41443,0,13647}, |
}; |
static const unsigned short cmap_UniKS_UTF16_V_table[] = { 0 }; |
static pdf_cmap cmap_UniKS_UTF16_V = { |
-1, "B5-V", "B5-H", 0, 1, 0, |
{ {0,0,0}, }, |
12, 12, (pdf_range*) cmap_UniKS_UTF16_V_ranges, |
0, 0, (unsigned short*) cmap_UniKS_UTF16_V_table, |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/font_base14.h |
---|
0,0 → 1,10561 |
#ifndef __STRICT_ANSI__ |
#if defined(__linux__) || defined(__FreeBSD__) |
#define HAVE_INCBIN |
#endif |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_Dingbats[15788]; |
asm(".globl pdf_font_Dingbats"); |
asm(".balign 8"); |
asm("pdf_font_Dingbats:"); |
asm(".incbin \"fonts/Dingbats.cff\""); |
#else |
static const unsigned char pdf_font_Dingbats[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusMonL_Bold[15788]; |
asm(".globl pdf_font_NimbusMonL_Bold"); |
asm(".balign 8"); |
asm("pdf_font_NimbusMonL_Bold:"); |
asm(".incbin \"fonts/NimbusMonL-Bold.cff\""); |
#else |
static const unsigned char pdf_font_NimbusMonL_Bold[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusMonL_BoldObli[15788]; |
asm(".globl pdf_font_NimbusMonL_BoldObli"); |
asm(".balign 8"); |
asm("pdf_font_NimbusMonL_BoldObli:"); |
asm(".incbin \"fonts/NimbusMonL-BoldObli.cff\""); |
#else |
static const unsigned char pdf_font_NimbusMonL_BoldObli[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusMonL_Regu[15788]; |
asm(".globl pdf_font_NimbusMonL_Regu"); |
asm(".balign 8"); |
asm("pdf_font_NimbusMonL_Regu:"); |
asm(".incbin \"fonts/NimbusMonL-Regu.cff\""); |
#else |
static const unsigned char pdf_font_NimbusMonL_Regu[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusMonL_ReguObli[15788]; |
asm(".globl pdf_font_NimbusMonL_ReguObli"); |
asm(".balign 8"); |
asm("pdf_font_NimbusMonL_ReguObli:"); |
asm(".incbin \"fonts/NimbusMonL-ReguObli.cff\""); |
#else |
static const unsigned char pdf_font_NimbusMonL_ReguObli[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusRomNo9L_Medi[15788]; |
asm(".globl pdf_font_NimbusRomNo9L_Medi"); |
asm(".balign 8"); |
asm("pdf_font_NimbusRomNo9L_Medi:"); |
asm(".incbin \"fonts/NimbusRomNo9L-Medi.cff\""); |
#else |
static const unsigned char pdf_font_NimbusRomNo9L_Medi[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusRomNo9L_MediItal[15788]; |
asm(".globl pdf_font_NimbusRomNo9L_MediItal"); |
asm(".balign 8"); |
asm("pdf_font_NimbusRomNo9L_MediItal:"); |
asm(".incbin \"fonts/NimbusRomNo9L-MediItal.cff\""); |
#else |
static const unsigned char pdf_font_NimbusRomNo9L_MediItal[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusRomNo9L_Regu[15788]; |
asm(".globl pdf_font_NimbusRomNo9L_Regu"); |
asm(".balign 8"); |
asm("pdf_font_NimbusRomNo9L_Regu:"); |
asm(".incbin \"fonts/NimbusRomNo9L-Regu.cff\""); |
#else |
static const unsigned char pdf_font_NimbusRomNo9L_Regu[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusRomNo9L_ReguItal[15788]; |
asm(".globl pdf_font_NimbusRomNo9L_ReguItal"); |
asm(".balign 8"); |
asm("pdf_font_NimbusRomNo9L_ReguItal:"); |
asm(".incbin \"fonts/NimbusRomNo9L-ReguItal.cff\""); |
#else |
static const unsigned char pdf_font_NimbusRomNo9L_ReguItal[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusSanL_Bold[15788]; |
asm(".globl pdf_font_NimbusSanL_Bold"); |
asm(".balign 8"); |
asm("pdf_font_NimbusSanL_Bold:"); |
asm(".incbin \"fonts/NimbusSanL-Bold.cff\""); |
#else |
static const unsigned char pdf_font_NimbusSanL_Bold[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusSanL_BoldItal[15788]; |
asm(".globl pdf_font_NimbusSanL_BoldItal"); |
asm(".balign 8"); |
asm("pdf_font_NimbusSanL_BoldItal:"); |
asm(".incbin \"fonts/NimbusSanL-BoldItal.cff\""); |
#else |
static const unsigned char pdf_font_NimbusSanL_BoldItal[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusSanL_Regu[15788]; |
asm(".globl pdf_font_NimbusSanL_Regu"); |
asm(".balign 8"); |
asm("pdf_font_NimbusSanL_Regu:"); |
asm(".incbin \"fonts/NimbusSanL-Regu.cff\""); |
#else |
static const unsigned char pdf_font_NimbusSanL_Regu[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_NimbusSanL_ReguItal[15788]; |
asm(".globl pdf_font_NimbusSanL_ReguItal"); |
asm(".balign 8"); |
asm("pdf_font_NimbusSanL_ReguItal:"); |
asm(".incbin \"fonts/NimbusSanL-ReguItal.cff\""); |
#else |
static const unsigned char pdf_font_NimbusSanL_ReguItal[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_StandardSymL[15788]; |
asm(".globl pdf_font_StandardSymL"); |
asm(".balign 8"); |
asm("pdf_font_StandardSymL:"); |
asm(".incbin \"fonts/StandardSymL.cff\""); |
#else |
static const unsigned char pdf_font_StandardSymL[15788] = { |
1,0,4,4,0,1,1,1,16,78,105,109,98,117,115,83,97,110,76,45,82,101,103,117,0, |
1,2,0,1,0,48,248,31,0,248,32,1,248,33,2,248,34,3,248,24,4,251,43,12,3,251, |
66,251,112,250,125,250,77,5,28,0,229,15,28,0,0,16,28,2,182,17,28,0,50,28, |
55,74,18,0,8,2,0,1,0,5,0,11,0,20,0,27,0,31,0,95,0,116,0,129,69,117,114,111, |
109,105,100,100,111,116,115,102,116,104,121,112,104,101,110,110,98,115,112, |
97,99,101,49,46,48,53,67,111,112,121,114,105,103,104,116,32,40,85,82,87,41, |
43,43,44,67,111,112,121,114,105,103,104,116,32,49,57,57,57,32,98,121,32,40, |
85,82,87,41,43,43,32,68,101,115,105,103,110,32,38,32,68,101,118,101,108,111, |
112,109,101,110,116,78,105,109,98,117,115,32,83,97,110,115,32,76,32,82,101, |
103,117,108,97,114,78,105,109,98,117,115,32,83,97,110,115,32,76,0,0,0,0,1, |
0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0, |
18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32, |
0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47, |
0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62, |
0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77, |
0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92, |
0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,105,0, |
106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118, |
0,119,0,120,0,121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0, |
131,0,132,0,133,0,134,0,135,0,136,0,137,0,138,0,139,0,140,0,141,0,142,0,143, |
0,144,0,145,0,146,0,147,0,148,0,149,0,173,0,171,0,174,0,172,0,176,0,175,0, |
177,0,154,0,180,0,178,0,181,0,179,0,184,0,182,0,185,0,183,0,186,0,189,0,187, |
0,190,0,188,0,191,0,192,0,195,0,193,0,196,0,194,0,197,0,199,0,157,0,198,0, |
202,0,200,0,203,0,201,0,205,0,204,0,206,0,209,0,207,0,210,0,208,0,213,0,211, |
0,214,0,212,0,215,0,218,0,216,0,219,0,217,0,220,0,221,0,224,0,222,0,225,0, |
223,0,226,0,228,0,167,0,162,0,227,1,135,0,150,0,164,0,169,1,136,1,137,0,161, |
0,166,0,168,0,159,0,153,0,156,0,155,0,158,0,163,0,170,0,165,1,138,0,151,0, |
160,0,152,0,233,2,0,1,0,3,0,5,0,47,0,64,0,163,1,64,1,195,2,101,2,116,2,170, |
2,224,3,12,3,32,3,42,3,59,3,75,3,99,3,183,3,215,4,60,4,187,4,246,5,83,5,195, |
5,241,6,115,6,225,6,252,7,23,7,54,7,74,7,106,7,200,8,162,8,187,9,72,9,175, |
9,237,10,3,10,39,10,152,10,200,10,221,11,26,11,80,11,104,11,161,11,206,11, |
232,12,45,12,156,13,4,13,26,13,56,13,121,13,154,13,207,14,6,14,26,14,42,14, |
71,14,92,14,121,14,150,14,166,14,182,14,208,15,39,15,119,15,210,15,232,15, |
253,16,143,16,208,16,243,17,44,17,94,17,115,17,209,17,252,18,21,18,116,18, |
205,19,9,19,31,19,89,19,120,19,153,19,200,19,251,20,12,20,28,20,115,20,134, |
20,220,21,46,21,87,21,179,22,98,22,111,22,198,23,55,24,2,24,122,24,146,24, |
169,24,182,24,190,24,199,24,244,25,28,25,44,25,78,25,129,25,152,25,206,25, |
230,26,6,26,25,26,46,26,60,26,100,26,215,27,55,27,68,27,81,27,94,27,156,27, |
173,27,219,27,238,28,10,28,34,28,108,28,124,28,185,28,198,28,216,29,29,29, |
183,29,231,30,101,30,235,31,51,31,247,32,12,32,53,32,173,33,51,33,173,33, |
222,33,253,34,28,34,59,34,141,34,186,35,99,35,179,35,224,35,253,36,26,36, |
68,36,114,36,141,36,168,36,195,37,52,37,101,37,133,37,165,37,197,38,34,38, |
63,38,107,38,172,38,201,38,230,39,26,39,49,39,116,39,161,40,53,40,88,40,124, |
40,160,40,231,41,19,41,170,41,217,41,249,42,33,42,65,42,115,42,145,42,175, |
42,205,43,48,43,94,43,128,43,162,43,196,44,34,44,65,44,127,44,168,44,209, |
44,250,45,21,45,47,45,174,46,2,46,44,46,186,46,199,47,33,47,60,47,83,47,100, |
47,156,47,174,47,221,48,1,48,75,48,100,48,217,49,22,49,97,49,200,50,53,50, |
55,50,79,50,108,50,190,124,14,124,14,124,139,243,248,241,159,18,247,16,223, |
56,222,19,208,247,100,249,109,21,56,251,230,6,161,251,115,178,139,161,247, |
115,5,19,224,251,179,4,55,35,223,6,14,201,191,232,206,232,3,191,249,89,21, |
32,10,206,22,32,10,14,119,159,247,83,207,247,66,207,1,248,121,249,77,21,62, |
139,104,251,88,251,17,139,175,247,88,63,139,103,251,88,251,13,139,139,71, |
247,0,139,108,251,66,251,6,139,139,71,240,139,101,251,103,215,139,5,178,247, |
103,247,16,139,101,251,103,215,139,178,247,103,247,9,139,139,207,34,139,170, |
247,66,245,139,139,207,46,139,5,50,71,21,108,251,66,251,17,139,171,247,66, |
5,14,185,220,247,8,198,247,26,221,3,247,135,249,150,21,85,7,251,20,123,70, |
69,139,251,6,139,76,163,90,186,105,165,120,166,128,212,117,8,251,164,7,94, |
145,101,159,116,170,124,162,135,156,133,204,8,60,6,132,251,31,215,56,247, |
33,130,8,36,198,242,7,193,143,176,150,172,159,197,175,173,208,139,217,139, |
210,112,189,81,172,113,154,126,144,47,167,8,247,141,7,206,136,186,88,140, |
66,8,218,6,139,247,6,66,213,251,13,148,8,193,7,80,252,1,21,60,160,102,178, |
139,200,139,205,181,182,213,149,8,198,251,228,21,241,109,171,109,139,73,139, |
100,124,104,112,113,115,116,114,130,96,134,8,14,248,232,119,159,120,209,247, |
93,209,160,209,247,94,209,18,168,208,247,95,208,247,40,208,247,95,208,19, |
191,128,247,91,249,65,21,46,62,62,45,45,216,62,233,232,216,216,231,31,236, |
64,215,43,30,69,4,196,184,94,82,84,93,94,84,83,93,185,194,195,185,184,194, |
31,248,46,233,21,252,31,253,109,205,139,248,31,249,109,5,152,252,23,21,46, |
62,62,46,31,19,103,128,45,216,62,233,231,217,216,231,235,64,215,43,30,69, |
4,196,184,94,82,85,93,94,84,83,93,184,195,194,185,184,194,31,14,248,10,116, |
217,84,159,248,255,209,18,191,223,136,221,247,65,218,19,172,248,129,247,226, |
21,140,103,127,91,119,104,8,251,25,247,55,5,243,198,173,182,139,211,8,231, |
71,204,44,44,63,70,51,30,139,92,158,101,201,61,8,19,176,251,16,67,101,89, |
139,48,139,251,12,221,60,247,15,139,188,139,186,152,175,162,160,152,157,154, |
177,176,8,19,108,201,61,247,1,139,251,14,247,43,5,176,196,160,205,139,199, |
8,251,180,236,21,78,209,130,156,139,174,8,191,173,173,191,189,176,103,90, |
30,139,94,114,110,61,90,8,19,144,247,25,251,186,21,83,80,96,116,87,139,67, |
139,80,197,139,209,139,195,170,179,230,197,8,14,68,249,5,243,1,204,232,3, |
204,249,109,21,33,10,14,179,249,89,159,1,212,220,3,247,128,249,109,21,39, |
251,23,76,251,74,139,251,49,139,251,50,202,251,74,239,251,23,8,194,6,51,247, |
35,90,247,60,139,247,52,139,247,51,188,247,61,227,247,34,8,14,179,249,89, |
159,1,247,67,220,3,232,251,104,21,239,247,23,202,247,74,139,247,49,139,247, |
50,76,247,74,39,247,23,8,84,6,227,251,35,188,251,60,139,251,52,139,251,51, |
90,251,61,51,251,34,8,14,235,249,89,159,1,247,52,249,109,21,144,251,4,33, |
177,120,80,247,0,109,70,50,189,103,202,232,201,46,190,175,69,228,247,0,169, |
120,198,33,101,144,247,4,5,14,247,183,129,159,247,79,209,1,247,149,209,3, |
248,170,247,159,21,34,10,14,124,139,243,1,226,243,21,35,10,14,179,247,132, |
211,1,247,176,247,204,21,251,130,67,247,130,6,14,124,139,243,1,226,243,3, |
247,83,243,21,35,35,243,6,14,124,119,159,249,89,159,1,247,121,249,109,21, |
251,129,253,129,194,139,247,129,249,129,5,14,116,212,248,217,217,1,182,229, |
247,176,229,3,247,167,249,89,21,73,139,79,110,102,90,93,77,116,44,139,251, |
23,8,251,131,219,251,19,247,44,247,42,221,247,19,247,125,30,139,247,30,117, |
231,92,203,102,189,80,167,72,139,8,61,4,234,186,43,251,82,251,93,93,45,41, |
46,92,237,247,86,247,86,186,234,234,31,14,139,249,89,1,247,151,227,3,247, |
151,248,141,21,252,141,227,249,89,81,7,108,251,1,119,124,251,28,122,8,76, |
7,14,139,226,248,181,216,1,248,57,229,3,248,142,226,21,252,9,6,148,197,171, |
176,226,190,8,239,193,5,238,193,190,212,139,226,139,198,115,194,97,177,97, |
177,87,157,72,139,49,139,72,107,100,79,114,101,128,95,137,67,8,227,6,142, |
187,145,168,151,162,162,182,185,165,192,139,219,139,199,82,139,63,139,83, |
106,91,76,103,8,47,87,5,251,40,55,96,72,131,251,48,8,248,108,6,14,116,217, |
248,213,216,18,248,31,229,70,229,19,208,247,113,247,217,21,150,139,176,140, |
5,236,189,95,54,50,84,86,47,31,43,139,92,187,133,242,8,51,6,143,82,149,102, |
156,107,175,71,209,104,236,139,247,38,139,233,226,139,247,26,139,229,104, |
189,54,168,8,19,224,205,165,172,189,139,210,139,247,14,58,212,251,27,139, |
251,35,139,63,61,136,251,43,8,227,6,140,182,143,163,150,161,159,178,183,163, |
194,139,217,139,186,93,139,64,139,89,121,109,100,123,115,129,108,135,77,138, |
8,14,139,249,89,252,175,218,18,247,219,227,19,96,247,219,247,62,21,19,160, |
251,62,227,7,19,96,247,62,244,218,34,7,19,160,248,96,74,7,251,214,252,82, |
5,19,96,46,7,247,191,218,21,251,114,139,247,114,247,202,5,14,116,217,247, |
226,217,247,47,226,1,248,59,229,3,248,112,249,89,21,252,2,139,86,252,22,220, |
139,5,180,188,173,156,194,139,8,234,199,74,34,37,80,77,43,31,62,139,92,178, |
118,219,8,51,6,151,81,149,111,160,113,179,85,211,108,219,139,8,247,35,239, |
243,247,42,247,32,46,235,251,28,31,89,139,99,126,98,109,8,167,247,90,247, |
187,139,5,14,116,217,247,200,217,202,159,246,217,1,182,234,247,177,229,3, |
248,134,248,160,21,122,247,8,63,208,251,0,139,61,139,69,101,97,76,95,70,119, |
52,139,251,21,139,251,11,157,63,181,76,177,82,201,108,217,139,8,247,27,236, |
239,247,31,247,24,49,232,251,19,31,69,139,84,112,101,87,140,247,65,195,235, |
240,139,201,139,182,100,153,71,8,251,17,251,53,21,224,192,80,44,50,79,74, |
58,57,77,207,230,227,199,200,226,31,14,139,249,89,52,226,18,19,64,248,156, |
249,89,21,252,110,52,248,19,6,19,128,251,61,251,133,70,251,40,86,251,125, |
8,233,6,178,247,119,228,247,87,247,52,247,105,8,14,116,217,247,171,213,247, |
115,217,18,176,229,74,229,247,138,229,74,229,19,236,248,27,248,9,21,212,183, |
163,175,139,206,8,247,3,52,217,251,18,251,17,51,61,251,3,30,139,73,163,103, |
211,94,8,19,242,58,100,99,80,139,61,8,251,22,237,49,247,32,247,32,237,229, |
247,21,30,139,218,99,198,57,178,8,19,236,251,8,247,150,21,214,187,95,70,73, |
90,95,65,65,90,183,206,31,207,188,183,213,30,19,242,251,189,4,227,199,83, |
56,55,79,83,49,53,79,196,222,31,222,199,195,227,30,14,116,217,247,82,217, |
247,201,216,1,177,229,247,177,235,3,192,247,54,21,156,251,8,215,70,247,0, |
139,217,139,210,177,180,202,184,208,159,226,139,247,21,139,247,11,121,215, |
97,202,100,196,77,170,61,139,8,251,27,42,39,251,31,251,24,229,46,247,20,31, |
206,139,188,163,185,194,138,251,65,83,43,38,139,77,139,96,178,125,207,8,247, |
20,248,106,21,221,201,71,47,52,78,77,53,54,86,198,234,229,199,204,220,31, |
14,124,139,243,247,208,243,1,247,2,243,3,247,106,243,21,35,35,243,6,248,160, |
4,35,35,243,6,14,124,139,243,247,208,243,1,247,3,243,3,247,107,248,160,21, |
35,35,243,6,34,251,208,21,35,10,14,247,183,130,159,1,184,247,90,21,248,125, |
251,99,139,218,252,30,247,56,248,30,247,53,139,218,252,125,251,99,5,14,247, |
183,247,3,209,241,209,1,248,170,247,245,21,36,10,37,4,36,10,14,247,183,130, |
159,1,248,175,247,159,21,252,125,247,99,139,60,248,30,251,56,252,30,251,53, |
139,60,248,125,247,99,5,14,139,243,248,195,217,1,247,132,229,228,229,3,247, |
222,247,91,21,186,7,139,183,150,156,207,202,214,207,164,184,139,205,8,247, |
9,56,214,251,22,251,36,64,59,251,46,30,224,6,139,185,144,167,151,163,158, |
176,179,160,192,139,216,139,190,93,139,71,139,93,117,100,86,92,80,86,139, |
139,122,116,118,111,132,116,139,103,8,84,7,229,44,21,49,35,229,6,14,249,102, |
251,34,216,247,14,209,74,203,247,224,203,247,34,216,18,173,224,247,37,229, |
248,146,226,19,55,249,45,248,137,21,117,73,5,114,196,97,169,84,139,8,251, |
26,251,15,251,24,251,37,35,209,60,232,31,192,139,182,161,185,189,8,19,223, |
148,88,177,113,202,139,213,139,200,168,190,199,194,203,170,220,139,217,139, |
247,95,251,85,247,61,251,125,139,251,11,139,251,18,90,51,59,41,50,79,251, |
26,139,251,23,8,251,114,247,94,251,70,247,145,30,213,139,219,154,211,166, |
8,111,206,5,57,116,82,130,85,139,8,251,104,251,55,247,39,247,83,247,102,247, |
74,247,73,247,103,247,83,247,53,251,32,251,59,251,9,56,251,5,54,112,116,159, |
163,31,139,148,143,157,147,162,8,229,247,172,5,251,125,96,21,195,139,180, |
97,136,85,137,89,112,55,114,102,8,19,55,111,98,102,115,102,139,8,84,95,191, |
205,247,4,216,241,223,31,14,248,10,139,159,247,91,217,248,48,159,1,248,110, |
247,111,21,37,10,247,147,217,21,38,10,14,248,10,139,221,247,143,221,247,124, |
221,18,218,232,247,218,232,78,232,19,244,218,22,247,221,6,208,139,190,158, |
178,181,175,177,159,191,139,196,139,227,99,192,46,175,8,19,248,205,170,174, |
193,139,213,139,192,119,186,101,173,101,174,89,155,69,139,8,251,188,6,232, |
251,206,21,247,124,247,72,7,191,139,168,132,164,120,165,119,153,109,139,99, |
139,100,125,108,113,119,114,120,110,132,87,139,8,251,72,251,225,21,247,143, |
247,119,7,184,139,169,128,161,115,8,19,244,161,116,151,107,139,103,139,104, |
127,107,117,116,117,115,109,128,94,139,8,14,248,65,116,221,248,236,221,1, |
187,232,3,249,42,248,139,21,110,247,52,47,217,251,52,139,41,139,60,108,85, |
79,73,67,103,35,139,251,10,139,251,12,176,36,208,68,195,81,211,112,234,139, |
247,70,139,239,235,161,247,85,8,43,6,131,89,129,105,124,110,109,79,77,105, |
61,139,8,251,37,47,247,8,247,74,247,79,227,247,7,247,33,31,198,139,194,121, |
169,111,166,114,154,108,150,85,8,14,248,65,139,221,248,201,221,1,228,232, |
248,28,232,3,228,22,247,173,6,247,76,247,5,247,30,247,119,247,118,251,4,247, |
30,251,77,31,251,173,6,232,253,27,21,248,201,247,64,7,247,36,215,42,251,78, |
251,76,63,41,251,36,31,14,248,10,139,221,247,142,221,247,125,221,1,229,232, |
3,247,75,247,224,21,39,10,14,247,210,139,159,247,204,221,247,125,221,1,229, |
232,3,247,75,247,224,21,247,240,221,251,240,247,125,248,32,221,252,125,253, |
109,232,6,14,248,121,116,221,247,136,221,247,166,221,1,183,232,248,126,221, |
3,249,89,248,21,21,251,196,57,247,114,119,6,251,22,43,45,251,25,30,65,139, |
72,166,96,186,91,191,110,226,139,229,139,247,71,241,247,10,247,46,139,247, |
3,139,219,82,159,45,8,234,6,113,247,40,251,4,224,251,59,139,50,139,67,116, |
82,92,55,69,91,251,5,139,251,23,139,251,116,247,29,251,48,247,89,139,238, |
139,218,176,210,218,8,162,42,198,139,5,14,248,65,139,159,247,204,221,247, |
187,159,18,222,232,46,233,248,10,232,19,244,248,187,247,224,21,251,224,232, |
249,109,46,251,207,252,11,247,207,7,19,236,46,253,109,233,247,224,6,14,124, |
139,159,249,69,159,1,239,233,3,247,86,249,109,21,45,253,109,233,6,14,247, |
99,116,217,249,34,159,1,156,234,247,113,232,3,247,225,249,109,21,252,149, |
7,139,81,133,106,122,114,121,111,105,122,102,139,8,69,100,186,224,31,186, |
44,75,7,251,10,217,64,247,17,247,19,218,218,247,18,30,248,183,7,14,248,10, |
139,159,249,69,159,1,218,232,3,247,64,247,147,21,247,11,247,11,247,149,252, |
10,247,2,139,251,192,248,68,247,189,247,189,251,12,139,251,255,252,5,139, |
248,5,46,139,139,253,109,232,139,5,14,139,221,249,7,159,1,219,232,3,247,65, |
249,109,21,46,253,109,248,89,221,251,252,6,14,248,176,139,159,249,69,159, |
1,214,227,248,146,227,3,248,104,22,247,97,248,247,139,252,247,227,139,139, |
249,109,251,21,139,251,104,253,15,251,108,249,15,251,21,139,139,253,109,227, |
139,139,248,247,247,99,252,247,5,14,248,65,139,159,249,69,159,1,215,227,248, |
30,227,3,249,26,249,109,21,51,252,232,6,252,17,248,232,38,139,139,253,109, |
227,139,139,248,227,248,13,252,227,244,139,5,14,248,121,116,221,248,236,221, |
1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10,14,248,10,139, |
159,247,181,221,247,148,221,1,230,232,247,228,236,3,247,76,247,201,21,247, |
121,6,196,139,184,156,178,174,183,179,158,186,139,206,8,247,29,58,216,251, |
36,30,251,193,253,109,232,6,248,27,4,247,148,247,86,7,228,192,91,59,59,86, |
91,50,31,14,248,121,116,221,248,236,221,1,177,232,248,154,232,3,249,113,138, |
21,45,216,5,208,215,173,233,139,247,7,8,247,118,251,34,247,46,251,102,251, |
102,251,34,251,46,251,120,251,120,247,34,251,46,247,102,30,211,139,199,155, |
198,174,8,244,52,5,251,97,247,156,21,93,83,213,77,5,96,119,106,131,95,139, |
8,251,47,36,247,12,247,72,247,72,243,247,12,247,47,247,47,243,251,12,251, |
71,31,139,45,114,66,85,78,8,14,248,65,139,159,247,186,221,247,143,221,1,232, |
232,248,4,236,3,247,78,247,206,21,247,132,6,222,176,99,49,31,138,74,5,139, |
94,147,95,152,109,8,247,5,162,6,104,163,132,165,137,236,138,247,12,120,175, |
60,173,221,179,172,190,139,222,8,247,18,60,208,251,35,30,251,228,253,109, |
232,6,248,32,4,247,143,247,117,7,191,139,169,131,162,119,164,118,152,106, |
139,95,8,53,95,100,40,30,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,14,247,210,139,159,249,7,221,1,247,153,232,3,247, |
246,249,27,21,247,131,221,252,208,57,247,132,253,27,232,6,14,248,65,116,221, |
249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68,79,251, |
9,30,85,139,95,152,104,164,103,167,122,176,139,194,8,248,148,46,252,148,7, |
251,40,245,47,247,65,247,63,247,2,233,247,38,30,248,148,7,14,248,10,139,159, |
249,69,159,1,248,28,22,247,145,249,109,40,139,251,94,252,253,251,106,248, |
253,39,139,247,154,253,109,5,14,249,31,139,159,249,69,159,1,249,124,22,247, |
77,249,109,35,139,251,26,252,228,251,58,248,228,39,139,251,54,252,228,251, |
29,248,228,35,139,247,79,253,109,241,139,247,55,248,235,247,60,252,235,5, |
14,248,10,139,159,249,69,159,1,248,27,248,10,21,247,138,247,247,251,3,139, |
251,80,251,178,251,79,247,178,251,5,139,247,134,251,247,251,150,252,10,247, |
5,139,247,92,247,196,247,91,251,196,247,7,139,5,14,248,10,139,159,249,69, |
159,1,247,186,232,3,248,23,247,178,21,43,10,14,247,210,139,221,248,201,221, |
1,248,217,249,109,21,44,10,14,124,251,104,211,249,177,211,1,203,222,3,247, |
142,249,109,21,251,78,254,65,247,78,211,36,249,177,242,6,14,124,119,159,249, |
89,159,1,186,249,109,21,84,139,247,129,253,129,194,139,5,14,124,251,104,211, |
249,177,211,1,247,18,222,3,162,251,104,21,247,78,250,65,251,78,67,242,253, |
177,36,6,14,247,68,247,89,249,89,21,251,45,252,16,208,139,247,13,247,192, |
247,14,251,192,208,139,251,47,248,16,5,14,251,68,189,1,248,214,251,18,21, |
252,236,89,248,236,6,14,68,248,113,243,1,204,232,3,247,50,248,113,21,45,10, |
14,116,212,248,48,216,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38, |
247,71,21,47,10,14,116,217,84,159,248,77,217,247,62,159,18,193,222,247,191, |
226,19,92,193,249,109,21,253,109,214,206,7,19,188,179,78,192,110,212,139, |
8,247,30,229,247,5,247,66,247,62,53,244,251,30,31,67,139,88,112,100,80,8, |
247,168,7,247,38,251,160,21,232,199,58,251,17,251,11,77,58,48,51,81,219,247, |
15,247,15,197,219,227,31,14,247,99,116,216,248,44,216,1,170,226,3,248,107, |
247,240,21,135,190,128,172,119,168,103,188,76,168,66,139,8,251,33,47,251, |
4,251,66,251,61,229,32,247,34,31,247,17,139,218,214,149,247,20,8,55,6,125, |
55,96,97,68,139,8,47,84,214,247,16,247,23,193,217,230,31,209,139,183,98,149, |
66,8,14,116,217,84,159,248,77,217,247,62,159,18,165,226,247,191,222,19,188, |
248,131,249,109,21,56,251,163,6,104,192,83,167,69,139,8,251,28,50,251,1,251, |
59,251,69,226,251,1,247,33,31,211,139,189,166,184,204,8,19,124,70,213,7,251, |
122,248,97,21,229,196,59,251,17,31,19,172,251,13,81,59,51,47,78,220,247,14, |
247,14,200,220,230,30,14,116,216,247,72,207,247,52,216,1,248,149,247,126, |
21,48,10,141,207,21,49,10,14,124,139,159,248,72,207,247,27,212,1,227,222, |
3,247,150,248,160,21,50,10,14,251,110,209,247,17,216,248,44,216,104,159,18, |
168,226,247,188,216,19,28,248,48,248,160,21,63,7,19,236,97,201,88,168,72, |
139,251,25,139,49,251,8,139,251,62,139,53,162,69,182,89,178,95,195,113,194, |
139,205,139,185,167,186,205,8,112,7,139,68,130,96,118,110,117,108,96,121, |
88,139,101,139,105,149,116,157,120,154,131,153,134,170,8,54,6,148,40,216, |
80,247,15,139,217,139,206,164,173,181,179,187,154,205,139,247,15,8,19,28, |
248,74,7,19,108,251,120,77,21,229,192,63,251,23,251,17,85,63,51,48,84,216, |
247,19,31,247,18,195,217,228,30,14,139,159,248,82,212,247,62,159,1,209,222, |
247,142,222,3,209,249,109,21,253,109,222,247,181,7,246,195,209,225,30,166, |
139,166,130,159,124,163,122,149,114,139,102,8,251,255,222,248,32,7,227,76, |
194,37,30,65,139,94,116,90,75,8,247,169,7,14,68,139,159,248,120,159,239,244, |
18,205,223,56,222,19,232,247,42,248,160,21,56,252,160,222,6,19,240,249,109, |
4,55,34,223,6,14,68,251,110,212,249,29,159,239,244,1,209,222,3,209,248,160, |
21,252,236,7,87,122,122,88,30,136,139,139,139,122,140,8,68,7,149,137,144, |
138,152,139,8,233,188,177,210,31,249,13,7,247,97,4,56,34,222,6,14,247,99, |
139,159,248,120,159,247,77,159,1,197,222,3,247,33,249,109,21,56,253,109,222, |
247,96,6,220,219,247,69,251,176,242,139,251,106,247,235,247,74,247,73,32, |
139,251,114,251,114,5,14,68,139,159,249,69,159,1,207,223,3,247,44,249,109, |
21,55,253,109,223,6,14,248,176,139,159,248,82,212,104,159,18,209,216,62,223, |
247,112,223,247,112,223,19,174,209,248,160,21,252,160,223,247,221,7,19,206, |
215,194,200,207,201,174,101,72,30,251,253,223,247,221,7,215,194,200,207,200, |
175,100,73,30,251,253,223,248,29,7,233,85,191,41,30,69,139,97,118,90,80,108, |
195,97,163,71,139,8,19,48,69,139,93,113,94,76,8,213,7,14,139,159,248,82,212, |
104,159,18,209,216,62,223,247,142,222,19,172,209,248,160,21,252,160,223,247, |
181,7,19,204,51,10,19,48,61,139,89,109,93,66,8,227,7,14,116,216,248,44,216, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,14,251,110, |
159,247,67,217,248,42,217,104,159,18,193,216,62,223,247,190,226,19,230,193, |
251,110,21,223,247,165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59, |
247,68,53,247,2,251,31,31,19,152,68,139,82,107,100,77,8,218,7,19,150,62,6, |
19,102,247,122,76,21,231,199,58,251,17,251,11,78,58,48,51,81,219,247,15,31, |
247,15,197,219,227,30,14,251,110,159,247,67,217,248,42,217,104,159,18,165, |
226,247,191,222,19,156,248,131,251,110,21,249,122,65,69,7,19,236,100,194, |
80,169,70,139,8,251,30,49,251,5,251,66,251,62,225,34,247,30,31,212,139,189, |
165,178,196,8,251,170,7,251,38,249,59,21,228,196,59,251,18,251,12,81,59,51, |
47,78,220,247,14,247,13,200,221,231,31,14,179,139,159,248,120,159,134,159, |
18,208,216,62,223,19,200,208,248,160,21,252,160,223,247,164,7,139,214,158, |
188,179,168,165,158,164,145,197,140,8,224,7,19,48,125,141,132,140,128,139, |
85,139,98,107,91,61,8,19,80,234,7,14,247,99,116,216,248,44,216,1,186,226, |
247,130,226,3,248,74,248,14,21,54,10,14,124,116,212,248,42,207,1,224,222, |
3,247,146,248,160,21,53,247,36,56,251,36,68,71,210,252,32,6,86,175,109,204, |
30,159,139,159,141,167,144,8,209,7,128,136,126,138,123,139,8,103,129,149, |
176,31,247,251,225,7,14,116,212,89,159,248,120,159,18,204,222,247,143,222, |
64,214,19,120,248,118,22,55,10,19,184,56,10,19,68,57,10,14,247,99,139,159, |
248,120,159,1,247,177,22,247,93,248,160,45,139,251,40,252,61,251,32,248,61, |
45,139,247,76,252,160,5,14,248,65,139,159,248,120,159,1,248,190,22,247,46, |
248,160,45,139,35,252,44,36,248,44,37,139,39,252,44,32,248,44,47,139,247, |
44,252,160,233,139,240,248,47,245,252,47,5,14,247,99,139,159,248,120,159, |
1,247,184,247,163,21,247,68,247,145,45,139,251,18,251,82,251,18,247,82,44, |
139,247,67,251,149,251,77,251,159,234,139,247,25,247,93,247,23,251,93,236, |
139,5,14,247,99,251,110,221,249,20,159,1,248,24,248,160,21,58,10,14,247,99, |
139,212,248,14,212,1,248,79,248,160,21,59,10,14,180,251,104,204,249,191,204, |
1,247,13,216,3,247,168,249,109,21,93,6,70,99,91,56,31,251,59,7,139,46,120, |
106,80,127,8,70,7,198,127,158,105,139,47,8,251,59,7,56,179,91,208,30,185, |
204,124,6,90,125,154,191,31,247,73,7,139,222,113,188,83,165,200,163,160,180, |
139,231,8,247,73,7,191,153,154,188,30,154,6,14,106,249,89,159,1,239,199,3, |
239,249,109,21,254,65,199,250,65,7,14,180,251,104,204,249,191,204,1,247,1, |
216,3,168,251,104,21,186,6,209,179,187,222,31,247,59,7,139,231,158,173,196, |
151,8,208,7,82,151,120,173,139,231,8,247,59,7,222,99,187,69,30,92,74,155, |
6,189,153,124,87,31,251,73,7,139,57,165,89,195,113,83,114,113,90,139,56,8, |
251,73,7,87,125,124,89,30,123,6,14,247,183,247,160,207,174,206,1,248,91,248, |
47,21,140,86,124,117,102,139,125,139,123,144,119,151,8,251,9,208,5,122,149, |
120,145,121,139,74,139,101,88,134,45,8,192,6,141,162,141,149,143,149,149, |
161,156,152,157,139,149,139,162,131,149,133,8,237,76,5,165,123,169,129,164, |
139,8,203,180,189,216,31,155,7,14,179,248,56,243,18,247,13,223,56,222,19, |
160,247,14,251,97,21,222,247,230,6,117,247,115,100,139,117,251,115,5,19,192, |
138,247,179,21,223,243,55,6,14,191,226,247,23,181,3,247,204,248,98,21,200, |
134,179,97,146,72,8,223,6,133,247,6,70,208,251,9,147,8,228,97,49,7,251,27, |
125,56,251,0,139,251,55,139,251,51,222,35,247,27,127,8,41,181,236,7,247,8, |
145,214,216,146,247,12,8,55,6,127,60,101,98,75,132,8,97,141,21,56,152,91, |
211,139,247,5,139,247,13,184,210,225,155,8,14,116,231,93,216,247,113,194, |
247,167,217,18,193,232,152,224,19,124,248,2,248,12,21,251,52,6,133,151,132, |
152,136,142,102,204,133,156,139,176,139,216,195,190,224,139,226,139,185,88, |
142,36,8,227,6,138,200,131,178,120,172,103,201,68,176,54,139,251,26,139,35, |
46,139,251,13,139,95,146,120,185,63,8,58,84,247,2,6,154,114,148,111,139,114, |
139,78,106,88,47,60,8,187,73,5,177,164,175,151,174,139,160,139,163,135,160, |
132,8,19,140,222,110,165,133,176,139,191,139,178,156,179,178,8,97,205,5,110, |
119,111,129,113,139,121,139,119,143,98,151,8,19,108,101,151,121,142,113,139, |
96,139,99,126,100,113,229,230,167,185,139,191,139,158,134,162,129,168,8,247, |
28,6,14,251,18,119,159,1,247,170,249,89,21,60,10,14,139,249,89,252,170,190, |
216,190,18,247,129,227,19,48,248,131,247,246,21,251,43,139,5,19,144,247,93, |
247,247,54,139,251,71,251,214,251,77,247,214,54,139,5,19,112,247,97,251,247, |
251,43,139,139,88,247,64,139,139,62,251,64,139,139,88,247,64,139,5,19,144, |
251,67,227,7,19,112,247,67,247,62,190,251,62,216,247,62,7,14,251,104,217, |
248,162,209,247,88,219,1,248,103,248,98,21,251,5,139,151,209,5,154,221,171, |
183,186,139,154,139,151,135,164,125,8,169,218,5,109,152,116,145,113,139,99, |
139,96,121,107,109,109,110,119,100,128,83,8,117,35,251,17,139,139,69,247, |
5,139,61,252,49,5,124,62,109,103,88,139,119,139,125,144,122,150,8,122,55, |
5,152,132,157,136,163,139,189,139,190,161,173,174,171,172,159,186,152,209, |
8,214,248,33,247,18,139,5,14,251,105,216,249,20,159,247,20,216,18,182,218, |
121,229,247,58,229,69,223,102,218,19,234,248,100,248,160,21,139,147,139,159, |
5,245,68,210,35,35,58,66,47,30,139,101,152,111,170,103,8,19,244,65,100,108, |
94,139,73,139,74,166,92,204,94,8,247,62,251,9,5,178,112,155,113,139,104,139, |
88,100,104,82,139,103,139,110,154,120,168,125,158,135,159,139,178,8,54,6, |
139,92,141,127,148,112,163,69,206,96,223,139,246,139,219,211,139,235,139, |
182,126,169,99,184,8,19,233,211,166,176,192,139,215,139,211,111,182,58,191, |
8,251,38,233,5,97,167,124,159,139,168,8,188,177,175,190,30,19,242,198,177, |
99,77,31,139,122,139,130,5,251,84,251,187,21,86,178,126,159,139,179,139,179, |
158,166,191,173,8,247,53,251,1,5,19,225,188,105,163,102,139,98,139,99,113, |
102,92,114,8,14,247,51,216,247,101,216,1,228,218,247,105,218,3,248,121,247, |
82,21,85,193,5,158,170,149,171,139,173,139,171,129,175,123,164,8,194,194, |
82,197,80,86,5,113,157,104,149,102,139,103,139,107,130,110,122,8,84,194,83, |
86,193,84,5,119,111,127,101,139,103,139,103,151,100,159,112,8,91,90,195,82, |
190,190,5,165,123,174,130,172,139,178,139,173,149,166,159,8,192,86,5,251, |
45,247,201,21,199,186,92,80,83,90,92,82,80,91,186,196,197,187,186,197,31, |
14,37,187,233,3,187,249,89,21,139,251,3,166,251,26,179,139,166,247,26,139, |
247,3,5,14,179,248,113,243,1,187,232,204,232,3,247,33,248,113,21,45,10,247, |
143,22,45,10,14,237,247,119,21,61,10,247,97,50,21,61,10,14,179,230,247,119, |
21,61,10,14,179,247,131,247,209,21,62,10,14,247,99,139,159,248,72,207,239, |
244,69,212,18,221,222,247,80,222,19,220,247,144,248,160,21,50,10,247,76,207, |
21,56,252,160,222,6,19,44,249,109,4,56,34,222,6,14,247,99,139,159,248,72, |
207,247,27,212,116,159,18,226,222,247,69,222,19,236,247,149,248,160,21,50, |
10,19,156,247,65,247,165,21,56,253,109,222,6,14,247,132,211,1,248,197,247, |
204,21,252,202,67,248,202,6,14,248,56,221,1,247,123,227,3,248,149,248,138, |
21,251,86,247,99,51,251,99,251,85,57,247,85,252,233,227,248,233,247,86,6, |
14,170,221,247,199,221,1,247,123,227,3,248,149,248,138,21,251,86,247,99,51, |
251,99,251,85,57,247,85,251,199,251,85,57,247,85,251,100,227,247,100,247, |
86,6,221,251,86,247,199,247,86,7,14,124,247,194,247,17,1,226,247,16,3,247, |
103,248,63,21,251,16,251,17,247,16,6,14,247,136,249,45,203,1,247,147,203, |
221,203,3,248,158,249,109,21,251,142,6,251,18,41,34,251,27,31,139,65,169, |
70,191,96,174,110,174,127,194,136,8,252,72,203,249,222,221,253,222,203,249, |
222,196,7,14,196,247,67,248,106,21,70,83,83,70,70,195,83,208,207,196,195, |
206,210,84,195,69,31,14,68,139,243,1,204,232,3,204,243,21,35,187,7,141,81, |
124,112,103,134,8,101,7,200,144,172,185,139,219,8,240,7,14,179,139,243,1, |
186,232,206,232,3,186,243,21,33,10,206,22,33,10,14,179,248,241,243,1,188, |
232,206,232,3,188,249,89,21,33,10,206,22,33,10,14,247,144,247,209,21,62,10, |
247,91,228,21,62,10,14,249,87,139,243,1,247,7,243,247,121,243,247,121,243, |
3,247,111,243,21,35,35,243,6,247,225,243,21,35,35,243,6,247,225,243,21,35, |
35,243,6,14,249,87,117,199,247,73,199,247,40,199,247,73,199,129,159,18,148, |
198,247,73,198,165,198,247,73,198,200,198,247,73,198,19,55,224,247,50,249, |
108,21,57,72,71,57,56,206,71,222,220,207,207,220,31,224,73,206,55,30,79,4, |
190,179,99,88,90,98,98,90,89,98,180,189,188,180,180,188,31,19,207,224,247, |
226,209,21,252,31,253,138,205,139,248,31,249,138,5,64,252,95,21,63,10,79, |
4,64,10,247,252,199,21,63,10,79,4,64,10,14,247,210,251,109,217,248,195,243, |
1,234,229,229,229,3,247,167,247,217,21,92,7,139,94,129,123,69,76,64,71,114, |
95,139,72,8,251,9,222,64,247,23,247,36,214,219,247,46,30,54,6,139,93,134, |
111,127,115,120,102,99,118,86,139,62,139,87,185,139,207,139,185,161,178,192, |
186,198,192,139,139,157,162,160,167,146,162,139,175,8,194,7,49,234,21,229, |
243,49,6,14,179,249,100,159,1,247,27,249,120,21,65,10,14,179,249,100,159, |
1,247,80,249,120,21,66,10,14,179,249,101,159,1,247,8,249,121,21,67,10,14, |
179,248,249,207,109,205,18,19,128,247,153,249,97,21,131,114,127,128,122,139, |
127,139,113,146,114,149,8,19,64,98,156,131,141,118,139,94,139,109,103,128, |
72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,128,68,10, |
14,179,249,11,209,1,247,194,249,81,21,251,166,69,247,166,6,14,179,248,233, |
208,185,159,1,154,249,112,21,140,100,145,120,153,119,166,102,184,119,195, |
139,232,139,191,185,146,228,8,80,6,135,97,106,115,85,139,82,139,109,161,134, |
183,8,14,179,248,248,243,1,247,7,243,3,247,111,249,96,21,35,35,243,6,14,179, |
248,248,242,1,169,243,197,243,3,247,26,249,95,21,35,36,243,6,247,54,242,21, |
35,36,243,6,14,179,248,215,183,226,183,1,218,183,227,183,3,247,59,249,134, |
21,69,10,95,4,70,10,14,179,251,106,180,221,230,1,247,104,214,3,247,57,22, |
97,47,151,132,5,151,145,146,141,151,139,8,168,156,125,116,113,116,120,108, |
31,113,139,122,145,93,162,8,130,143,118,99,5,201,112,163,132,178,139,8,215, |
186,175,196,182,110,163,89,31,131,139,132,139,126,137,8,162,195,5,14,179, |
249,100,159,1,200,249,120,21,71,10,200,22,71,10,14,179,251,97,184,247,52, |
159,1,196,212,3,247,46,22,78,117,103,98,139,91,139,100,160,113,181,123,161, |
131,164,134,161,139,158,139,172,144,163,144,8,184,7,121,132,118,136,115,139, |
92,139,114,158,139,174,139,181,160,162,212,180,8,14,179,249,101,159,1,247, |
102,248,227,21,72,10,14,249,87,247,132,211,1,250,125,247,204,21,254,134,67, |
250,134,6,14,249,87,139,221,247,24,221,175,221,247,125,221,1,248,104,232, |
3,248,104,247,106,21,251,106,248,118,221,252,25,247,142,247,244,221,251,244, |
247,125,248,7,221,253,2,7,251,191,253,109,242,139,224,247,106,5,247,161,221, |
21,251,130,139,247,30,247,243,239,139,5,14,216,247,195,190,184,186,92,191, |
247,131,191,18,176,197,247,40,196,19,220,247,212,247,246,21,251,169,88,247, |
169,6,152,247,38,21,135,137,136,138,136,139,8,124,131,147,154,31,247,71,7, |
202,98,170,58,30,57,139,94,102,137,68,8,198,6,146,182,155,152,184,139,8,182, |
163,123,111,31,126,7,139,117,128,131,101,136,97,136,98,131,122,132,102,123, |
119,110,139,97,8,19,44,80,179,102,203,30,178,139,172,153,172,168,8,19,76, |
145,108,155,127,172,139,151,139,146,140,152,144,8,19,44,49,247,4,21,104,97, |
108,90,103,118,156,169,30,139,171,159,154,191,146,188,147,152,141,153,145, |
8,14,139,221,249,7,159,1,219,232,3,247,65,248,42,21,247,215,46,252,9,7,59, |
83,139,62,219,196,139,251,172,248,108,139,139,221,252,15,139,139,247,139, |
247,63,247,14,139,215,5,14,248,121,116,221,248,236,221,1,174,232,248,154, |
232,3,169,158,21,178,103,216,223,5,205,78,217,110,236,139,247,102,139,247, |
34,247,46,139,247,119,139,241,109,233,85,207,8,228,236,99,175,52,44,5,77, |
193,62,166,48,139,251,102,139,251,34,251,46,139,251,119,139,42,165,54,189, |
69,8,202,207,21,109,191,123,202,139,208,139,247,71,243,247,12,247,47,139, |
204,139,197,117,187,97,8,174,98,21,174,85,157,72,139,64,139,251,71,35,251, |
12,251,47,139,68,139,78,164,90,188,8,14,249,87,119,221,77,221,247,137,221, |
247,130,221,69,221,18,182,232,248,25,232,19,54,248,254,247,219,21,247,220, |
221,251,220,247,130,247,228,221,252,65,63,6,19,142,97,199,80,167,57,139,66, |
139,65,110,90,90,71,72,104,35,139,251,28,139,251,16,167,47,198,71,191,79, |
213,107,224,139,220,139,196,168,185,204,8,19,102,65,248,70,221,251,233,7, |
19,142,46,239,21,99,58,79,100,55,139,73,139,86,166,104,190,103,193,124,204, |
139,240,139,241,154,204,175,193,174,190,192,166,206,139,223,139,198,100,179, |
58,8,14,211,247,195,190,184,191,247,131,191,1,179,197,247,60,197,3,247,206, |
247,246,21,251,155,88,247,155,6,251,24,248,75,21,49,87,76,251,0,251,1,191, |
76,229,228,192,202,245,247,4,88,201,48,31,87,4,192,170,94,63,66,107,94,87, |
87,107,184,214,213,171,184,191,31,14,248,232,116,212,66,216,247,72,207,247, |
52,216,18,173,226,19,120,249,131,247,51,21,115,70,92,103,72,139,86,139,94, |
163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133,187,124,178,105, |
224,59,192,42,139,67,139,74,108,103,88,108,193,80,167,54,139,65,139,76,117, |
104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,216,139,8,216,180, |
112,88,31,117,7,139,100,120,125,71,133,55,132,88,129,107,125,77,113,108,93, |
139,71,8,19,136,45,205,78,241,30,217,139,202,171,214,217,146,127,143,132, |
144,131,8,19,72,174,87,205,108,216,139,247,10,139,223,207,160,247,6,8,19, |
184,252,90,137,21,139,120,120,112,109,116,106,114,101,126,99,139,77,139,101, |
171,139,191,139,194,175,166,229,152,228,152,156,143,167,151,8,219,183,21, |
73,10,14,124,139,159,248,120,159,1,233,223,3,247,70,248,160,21,55,252,160, |
223,6,14,68,139,159,249,69,159,1,202,222,3,247,38,248,57,21,247,200,56,251, |
244,7,76,89,139,75,202,189,139,251,205,222,139,139,247,249,205,190,139,203, |
5,14,247,210,116,216,248,44,216,1,175,226,247,192,226,3,248,165,248,147,21, |
107,167,81,74,5,94,184,87,159,70,139,251,40,139,50,34,139,251,68,139,61,154, |
80,172,90,8,73,65,171,111,200,208,5,179,98,195,118,206,139,247,40,139,227, |
244,139,247,68,139,215,125,195,109,189,8,78,70,21,151,108,145,101,139,95, |
139,251,18,82,61,46,139,97,139,104,155,110,171,8,116,178,21,125,172,132,176, |
139,186,139,247,18,196,217,232,139,183,139,179,120,165,106,8,14,249,31,116, |
216,247,72,207,247,52,216,1,179,226,3,249,184,247,51,21,116,70,92,103,72, |
139,86,139,94,163,111,183,119,169,132,169,138,191,8,248,22,6,139,219,133, |
187,124,178,105,225,59,191,41,139,58,139,68,100,98,72,99,209,72,175,50,139, |
8,251,43,53,38,251,71,251,72,225,37,247,43,31,227,139,203,173,181,208,179, |
73,208,102,224,139,247,11,139,222,207,160,247,6,8,252,247,247,195,21,233, |
195,62,251,21,251,17,81,62,47,46,82,216,247,20,247,18,196,216,232,31,247, |
130,251,52,21,73,10,14,247,210,119,159,139,159,249,11,217,18,247,18,222,247, |
131,226,83,226,19,228,247,194,247,241,21,197,139,141,138,165,134,196,126, |
173,90,139,71,8,50,80,77,53,30,111,139,131,139,139,61,5,156,136,149,138,156, |
139,247,29,139,226,231,139,247,39,139,232,96,195,42,172,8,19,248,213,166, |
174,185,139,210,139,247,2,59,213,251,10,139,78,139,82,119,98,104,103,107, |
123,98,139,76,8,252,174,222,248,174,7,208,187,183,212,208,188,94,75,74,82, |
93,59,30,130,6,14,248,10,139,159,247,91,217,248,48,159,221,242,1,247,94,243, |
197,243,3,248,110,247,111,21,37,10,247,147,217,21,38,10,109,247,177,21,35, |
36,243,6,247,54,242,21,35,36,243,6,14,248,10,139,159,247,91,217,248,48,159, |
1,248,110,247,111,21,37,10,247,147,217,21,38,10,173,247,202,21,66,10,14,248, |
10,139,159,247,91,217,248,48,159,1,248,110,247,111,21,37,10,247,147,217,21, |
38,10,106,247,202,21,74,10,14,248,10,139,159,247,91,217,248,48,159,1,248, |
110,247,111,21,37,10,247,147,217,21,38,10,91,247,203,21,75,10,14,248,10,139, |
159,247,91,217,248,48,159,222,206,110,205,18,19,240,248,110,247,111,21,37, |
10,247,147,217,21,38,10,237,247,179,21,131,114,128,127,121,139,127,139,112, |
146,115,150,8,19,8,97,156,132,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,151,153,154,139,150,139,153,135,163,130,8,19,16,68,10,14,248,10,139,159, |
247,91,217,248,48,159,188,183,226,183,1,247,139,183,227,183,3,248,110,247, |
111,21,37,10,247,147,217,21,38,10,138,247,216,21,69,10,95,4,70,10,14,248, |
65,251,106,180,221,247,41,248,237,221,1,187,232,247,149,214,3,248,15,116, |
21,247,68,139,239,237,161,247,83,8,43,6,131,89,129,105,124,109,109,79,77, |
105,61,139,8,251,37,47,247,8,247,75,247,79,227,247,7,247,34,31,197,139,194, |
121,169,111,166,114,154,108,150,85,8,234,6,110,247,52,47,217,251,52,139,41, |
139,60,108,85,79,73,67,103,34,139,251,9,139,251,34,192,251,12,230,74,182, |
109,169,128,215,128,8,108,70,150,132,5,151,145,146,141,151,139,8,168,156, |
125,116,113,116,120,108,31,114,139,120,145,94,162,8,130,143,118,99,5,200, |
112,165,132,177,139,8,215,186,175,196,182,110,163,89,31,131,139,132,139,126, |
137,8,14,248,65,139,221,247,149,206,247,133,221,1,228,232,248,28,232,3,228, |
247,231,21,251,231,247,174,7,247,76,247,4,247,30,247,119,247,118,251,4,247, |
30,251,76,31,251,174,251,215,70,72,6,247,54,22,247,63,206,251,63,247,133, |
247,65,6,247,35,215,42,251,77,251,78,63,42,251,35,31,251,65,6,14,248,10,139, |
221,247,142,221,247,125,221,221,242,1,229,232,167,243,197,243,3,247,75,247, |
224,21,39,10,247,24,249,212,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248, |
10,139,221,247,142,221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247, |
76,249,237,21,76,10,14,248,10,139,221,247,142,221,247,125,221,1,229,232,3, |
247,75,247,224,21,39,10,247,29,249,237,21,65,10,14,248,10,139,221,247,142, |
221,247,125,221,1,229,232,3,247,75,247,224,21,39,10,247,6,249,238,21,43,251, |
42,204,139,218,235,219,43,202,139,43,247,42,5,14,124,139,159,249,69,159,214, |
242,18,148,243,126,232,117,243,19,232,247,85,249,109,21,46,253,109,232,6, |
19,244,59,250,31,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159, |
249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232,6,113,250,63,21,66, |
10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109,21,46,253,109,232, |
6,60,250,63,21,65,10,14,124,139,159,249,69,159,1,239,232,3,247,85,249,109, |
21,46,253,109,232,6,41,250,64,21,67,10,14,248,65,139,159,249,69,159,222,206, |
110,205,18,215,227,248,30,227,19,236,249,26,249,109,21,51,252,232,6,252,17, |
248,232,38,139,139,253,109,227,139,139,248,227,248,12,252,227,245,139,5,251, |
71,250,40,21,131,114,127,127,122,139,126,139,113,146,115,150,8,19,28,97,156, |
131,141,119,139,95,139,108,102,128,73,8,196,6,146,162,151,153,153,139,150, |
139,154,135,162,130,8,19,44,194,118,151,135,157,139,189,139,169,174,149,208, |
8,14,248,121,116,221,248,236,221,209,242,1,177,232,247,18,243,197,243,247, |
18,232,3,248,25,249,121,21,40,10,57,4,41,10,111,247,147,21,35,36,243,6,247, |
54,242,21,35,36,243,6,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,169,247,172,21,76,10,14,248,121,116, |
221,248,236,221,1,177,232,248,154,232,3,248,25,249,121,21,40,10,57,4,41,10, |
108,247,172,21,74,10,14,248,121,116,221,248,236,221,1,177,232,248,154,232, |
3,248,25,249,121,21,40,10,57,4,41,10,93,247,173,21,75,10,14,248,121,116,221, |
248,236,221,210,206,110,205,18,177,232,248,154,232,19,236,248,25,249,121, |
21,40,10,57,4,41,10,243,247,149,21,131,114,127,127,121,139,127,139,112,146, |
115,150,8,19,28,98,156,131,141,118,139,95,139,108,102,128,73,8,197,6,145, |
162,152,153,153,139,150,139,153,135,163,130,8,19,44,193,118,152,135,157,139, |
188,139,170,174,148,208,8,14,248,10,116,221,248,240,217,1,209,232,248,1,232, |
3,248,232,248,151,21,42,10,251,20,247,167,21,77,10,14,248,65,116,221,249, |
30,159,221,242,1,224,232,193,243,197,243,193,232,3,248,188,249,109,21,78, |
10,251,201,247,77,21,35,36,243,6,247,54,242,21,35,36,243,6,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,252,148,7,41,68, |
79,251,8,251,8,68,199,237,30,248,148,46,252,148,7,251,38,247,2,45,247,62, |
247,63,247,1,233,247,38,30,248,148,7,251,150,247,102,21,66,10,14,248,65,116, |
221,249,30,159,1,224,232,248,10,232,3,248,188,249,109,21,78,10,251,204,247, |
102,21,74,10,14,248,65,116,221,249,30,159,1,224,232,248,10,232,3,248,188, |
249,109,21,78,10,251,219,247,103,21,75,10,14,248,10,139,159,249,69,159,1, |
247,186,232,3,248,23,247,178,21,247,166,248,79,251,3,139,251,100,251,247, |
251,105,247,247,251,7,139,247,172,252,79,139,251,178,232,139,5,118,250,63, |
21,66,10,14,247,210,139,221,248,201,221,1,248,217,249,109,21,44,10,251,107, |
247,37,21,77,10,14,248,10,139,159,247,61,221,247,148,221,239,159,1,231,232, |
247,224,239,3,247,77,247,81,21,247,121,6,247,11,223,225,247,14,247,24,54, |
219,251,31,31,251,100,247,12,46,253,109,232,6,247,163,4,247,148,247,86,7, |
226,190,91,59,59,88,91,52,31,14,248,10,139,159,249,69,159,221,242,18,247, |
100,243,121,232,122,243,19,232,248,23,247,178,21,43,10,19,244,64,250,38,21, |
35,36,243,6,247,54,242,21,35,36,243,6,14,116,212,248,48,216,212,242,18,181, |
226,150,243,197,243,122,222,19,226,248,171,188,21,130,137,135,139,134,139, |
8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139,76,117,104,100, |
115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214,181,111,89,31, |
117,7,19,244,139,104,118,124,73,131,251,10,124,121,135,107,126,78,114,108, |
92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165,115,193, |
139,8,156,139,152,141,166,146,8,19,250,251,38,247,71,21,47,10,251,37,248, |
92,21,35,36,243,6,19,228,247,54,242,21,35,36,243,6,14,116,212,248,48,216, |
247,73,159,1,181,226,247,152,222,3,248,171,188,21,46,10,251,38,247,71,21, |
47,10,54,248,117,21,76,10,14,116,212,248,48,216,247,73,159,1,181,226,247, |
152,222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,31,248,117,21,65, |
10,14,116,212,248,48,216,247,74,159,1,181,226,247,152,222,3,248,171,188,21, |
46,10,251,38,247,71,21,47,10,251,53,248,118,21,75,10,14,116,212,248,48,216, |
213,207,109,205,18,181,226,247,152,222,19,236,248,171,188,21,46,10,251,38, |
247,71,21,47,10,125,248,94,21,79,10,19,28,99,156,130,141,118,139,95,139,108, |
103,128,72,8,197,6,145,162,151,153,154,139,150,139,153,135,163,130,8,19,44, |
80,10,14,116,212,248,48,216,179,183,226,183,1,181,226,197,183,227,183,165, |
222,3,248,171,188,21,46,10,251,38,247,71,21,47,10,251,6,248,131,21,69,10, |
95,4,70,10,14,247,99,251,106,180,221,247,36,248,45,216,1,170,226,247,57,214, |
3,247,156,116,21,247,15,139,222,217,146,247,17,8,55,6,125,55,96,96,68,139, |
8,47,84,214,247,16,247,24,193,217,230,31,209,139,183,98,149,66,8,223,6,135, |
190,128,172,119,168,103,188,76,168,66,139,251,33,139,47,251,4,139,251,66, |
139,34,175,53,204,93,166,119,162,130,182,131,8,108,68,151,132,5,151,145,146, |
141,151,139,8,168,156,125,116,113,116,120,108,31,114,139,119,145,95,162,8, |
130,143,118,98,5,203,112,161,133,178,139,8,215,186,175,196,181,110,164,89, |
31,131,139,133,139,125,137,8,14,116,216,247,72,207,247,52,216,212,242,1,247, |
45,243,197,243,3,248,149,247,126,21,48,10,141,207,21,49,10,251,58,248,49, |
21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,216,247,72,207,247,52,216, |
247,73,159,1,248,149,247,126,21,48,10,141,207,21,49,10,251,7,248,74,21,66, |
10,14,116,216,247,72,207,247,52,216,247,73,159,1,248,149,247,126,21,48,10, |
141,207,21,49,10,251,64,248,74,21,251,4,139,247,41,251,40,199,139,5,14,116, |
216,247,72,207,247,52,216,247,74,159,1,248,149,247,126,21,48,10,141,207,21, |
49,10,251,76,248,75,21,67,10,14,124,139,249,89,251,97,159,221,242,18,142, |
243,126,222,127,243,19,72,247,69,248,160,21,56,6,19,136,252,160,222,7,19, |
116,69,249,89,21,35,36,243,6,247,54,242,21,35,36,243,6,14,124,139,159,248, |
120,159,247,88,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,123,249, |
120,21,66,10,14,124,139,159,248,120,159,247,88,159,1,233,222,3,247,69,248, |
160,21,56,252,160,222,6,70,249,120,21,65,10,14,124,139,159,248,120,159,247, |
89,159,1,233,222,3,247,69,248,160,21,56,252,160,222,6,51,249,121,21,67,10, |
14,139,159,248,82,212,104,159,228,207,109,205,18,209,216,62,223,247,142,222, |
19,163,209,248,160,21,252,160,223,247,181,7,19,195,51,10,19,52,61,139,89, |
109,93,66,8,227,7,247,123,247,85,21,79,10,19,12,99,156,131,141,117,139,95, |
139,109,103,128,72,8,196,6,146,162,151,153,153,139,150,139,153,135,163,130, |
8,19,20,193,118,152,135,157,139,189,139,168,174,150,208,8,14,116,216,248, |
44,216,212,242,1,175,226,156,243,197,243,156,226,3,247,164,248,175,21,52, |
10,140,62,21,53,10,110,247,145,21,35,36,243,6,247,54,242,21,35,36,243,6,14, |
116,216,248,44,216,247,73,159,1,175,226,247,192,226,3,247,164,248,175,21, |
52,10,140,62,21,53,10,164,247,170,21,66,10,14,116,216,248,44,216,247,73,159, |
1,175,226,247,192,226,3,247,164,248,175,21,52,10,140,62,21,53,10,111,247, |
170,21,65,10,14,116,216,248,44,216,247,74,159,1,175,226,247,192,226,3,247, |
164,248,175,21,52,10,140,62,21,53,10,92,247,171,21,75,10,14,116,216,248,44, |
216,213,207,109,205,18,175,226,247,192,226,19,236,247,164,248,175,21,251, |
39,50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,31,247,73,52,243, |
251,43,30,140,62,21,53,10,242,247,147,21,79,10,19,28,99,156,131,141,117,139, |
95,139,108,103,128,72,8,197,6,145,162,152,153,153,139,150,139,153,135,163, |
130,8,19,44,80,10,14,247,99,116,216,248,44,216,247,74,159,1,186,226,247,130, |
226,3,248,74,248,14,21,54,10,83,247,105,21,72,10,14,116,212,89,159,248,120, |
159,227,242,18,204,222,132,243,197,243,131,222,64,214,19,105,0,248,118,22, |
55,10,19,169,0,56,10,19,80,128,57,10,19,85,0,251,54,249,95,21,35,36,243,6, |
19,82,0,247,54,242,21,35,36,243,6,14,116,212,89,159,248,120,159,247,88,159, |
18,204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82, |
57,10,251,3,249,120,21,66,10,14,116,212,89,159,248,120,159,247,88,159,18, |
204,222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57, |
10,251,56,249,120,21,65,10,14,116,212,89,159,248,120,159,247,89,159,18,204, |
222,247,143,222,64,214,19,108,248,118,22,55,10,19,172,56,10,19,82,57,10,251, |
72,249,121,21,67,10,14,247,99,251,110,221,249,20,159,247,88,159,1,248,24, |
248,160,21,58,10,251,99,247,108,21,66,10,14,247,99,139,212,248,14,212,247, |
89,159,1,248,79,248,160,21,59,10,251,37,247,33,21,77,10,14,116,216,248,44, |
214,247,78,159,1,175,226,247,192,226,3,247,111,248,249,21,191,95,150,129, |
174,104,109,149,125,142,120,139,99,139,99,127,105,116,70,95,104,56,139,251, |
9,8,251,71,225,37,247,43,247,43,225,241,247,72,30,139,231,118,207,88,217, |
101,196,102,177,67,194,8,229,180,99,176,42,94,5,72,182,126,146,108,152,8, |
95,95,5,182,115,152,131,165,119,8,54,99,175,100,5,247,43,33,21,233,195,62, |
251,22,251,15,81,61,47,46,82,217,247,18,247,18,196,217,232,31,14,251,110, |
159,247,67,217,248,42,217,1,194,222,247,190,226,3,194,251,110,21,222,247, |
165,6,183,85,188,115,207,139,8,247,27,228,247,1,247,59,247,66,51,247,4,251, |
28,31,72,139,81,110,103,88,8,247,147,56,7,247,121,251,145,21,231,199,58,251, |
17,251,11,78,58,48,51,81,219,247,15,247,15,197,219,227,31,14,247,99,251,110, |
221,249,20,159,227,242,1,247,5,243,197,243,3,248,24,248,160,21,58,10,251, |
153,247,83,21,35,36,243,6,247,54,242,21,35,36,243,6,14,116,217,247,91,198, |
205,198,247,87,215,1,218,227,3,218,247,205,21,84,139,117,80,222,139,5,151, |
71,159,82,169,90,178,75,214,100,223,139,199,139,194,155,190,170,8,232,7,58, |
91,103,125,90,139,52,139,82,206,114,247,24,8,247,106,139,163,198,251,138, |
139,5,138,154,139,147,139,146,139,150,139,148,141,155,8,247,162,139,162,198, |
251,176,139,5,167,247,25,191,201,225,139,192,139,180,122,212,85,8,171,219, |
5,73,186,82,159,70,139,53,139,74,106,92,71,105,89,117,83,129,75,8,76,139, |
117,80,218,139,5,137,120,139,129,139,127,8,14,179,247,46,201,3,247,46,248, |
216,21,81,10,14,179,247,176,197,247,206,192,1,247,147,202,3,247,207,247,234, |
21,251,121,6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192, |
139,213,79,191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152, |
153,163,167,154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8, |
81,108,5,43,88,113,100,134,42,8,247,196,6,14,179,247,162,192,247,225,192, |
18,247,130,202,90,202,19,208,247,20,248,112,21,82,10,19,224,83,10,14,124, |
247,194,247,17,1,226,247,16,3,247,103,248,63,21,251,16,251,17,247,16,6,14, |
179,247,132,211,1,247,176,247,204,21,251,130,67,247,130,6,14,246,248,19,196, |
247,81,196,1,187,196,247,81,196,3,247,92,249,66,21,55,71,71,56,56,207,70, |
221,224,207,206,224,222,71,207,56,31,82,4,191,181,97,87,86,97,97,85,89,96, |
182,191,190,182,182,191,31,14,247,183,247,89,209,1,248,180,247,159,21,252, |
140,69,248,140,6,14,247,183,248,74,248,63,21,251,39,251,38,251,38,247,37, |
90,90,247,38,251,38,251,39,251,39,189,90,247,38,247,38,247,39,251,39,189, |
189,251,39,247,39,247,38,247,38,5,14,247,183,139,243,236,209,236,243,1,247, |
132,243,3,248,170,247,163,21,36,10,251,82,42,21,35,35,243,6,248,108,4,35, |
35,243,6,14,249,87,249,54,194,1,247,109,207,247,97,206,247,206,206,3,247, |
177,249,54,21,247,45,194,252,11,84,247,46,252,18,207,6,248,99,22,247,15,247, |
233,139,251,233,206,139,139,248,73,48,139,251,23,251,254,251,24,247,254,45, |
139,139,252,73,206,139,139,247,233,247,13,251,233,5,14,247,183,128,209,247, |
179,209,1,247,149,209,3,248,170,248,52,21,34,10,251,179,4,36,10,14,248,177, |
119,159,139,197,81,249,89,251,229,192,18,247,27,201,248,195,202,19,172,247, |
27,248,216,21,81,10,248,194,247,21,21,60,10,19,92,247,56,253,31,21,251,121, |
6,151,177,157,158,182,162,8,202,171,5,202,170,172,184,139,192,139,213,79, |
191,53,139,40,139,90,90,136,36,8,201,6,141,170,142,155,147,152,153,163,167, |
154,171,139,187,139,176,107,139,96,139,108,119,112,100,118,8,81,108,5,19, |
44,43,88,113,100,134,42,8,247,196,6,14,248,177,119,159,139,249,89,252,245, |
192,18,247,26,201,248,134,201,19,216,247,26,248,216,21,81,10,248,218,247, |
21,21,60,10,19,56,158,252,245,21,19,88,39,201,7,19,56,84,10,247,80,192,21, |
251,21,139,247,21,247,62,5,14,248,177,119,159,139,249,89,252,245,192,247, |
9,192,247,225,192,18,247,121,202,90,202,248,34,201,19,26,247,11,248,112,21, |
82,10,19,29,83,10,19,197,248,154,247,74,21,60,10,19,37,148,252,245,21,19, |
69,39,201,7,19,37,84,10,247,80,192,21,251,21,139,247,21,247,62,5,14,248,80, |
117,201,225,201,247,234,201,227,201,1,126,207,247,18,208,248,69,207,3,248, |
180,248,73,21,115,245,86,188,50,139,8,251,10,60,44,251,32,251,28,218,44,247, |
7,31,196,139,185,162,172,186,158,167,149,167,151,199,8,68,6,126,58,102,96, |
83,139,107,139,103,157,118,167,116,168,126,183,139,190,139,244,188,206,215, |
139,192,139,167,112,156,73,8,35,247,197,21,85,10,77,4,86,10,14,248,80,117, |
201,247,177,202,247,26,202,234,201,1,126,207,247,39,209,247,96,212,247,26, |
207,3,247,164,247,217,21,247,26,6,184,158,119,91,31,138,99,5,139,111,145, |
111,148,118,8,218,164,6,121,152,135,151,138,197,138,210,132,156,102,163,180, |
169,152,162,139,185,8,224,93,180,44,30,251,98,252,81,209,6,247,140,4,247, |
26,247,21,7,192,161,119,92,93,116,118,87,31,107,247,246,21,85,10,77,4,86, |
10,14,124,14,247,183,247,197,209,1,248,110,209,3,179,248,11,21,69,248,70, |
251,111,209,247,181,7,14,106,249,89,159,1,239,199,3,239,249,109,21,252,37, |
199,248,37,7,79,252,176,21,252,37,199,248,37,7,14,251,112,159,247,69,212, |
248,90,159,1,204,222,247,142,222,3,248,180,188,21,129,137,135,139,135,139, |
8,110,123,153,166,31,248,72,56,251,189,7,32,83,69,52,74,97,179,202,30,248, |
7,56,253,124,222,247,115,7,164,121,168,131,175,139,207,139,195,167,178,194, |
141,82,166,113,196,139,157,139,152,141,165,146,8,14,248,192,20,247,185,21, |
116,162,248,160,154,247,82,151,84,162,6,30,10,3,150,37,255,12,9,139,12,10, |
217,10,208,144,143,144,12,12,224,11,217,146,148,12,13,139,12,14,28,0,50,19, |
0,55,2,0,1,0,17,0,39,0,60,0,82,0,89,0,112,0,121,0,142,0,184,0,214,1,75,1, |
104,1,130,1,152,1,248,2,24,2,82,2,102,2,143,2,164,2,190,2,212,3,53,3,60,3, |
81,3,91,3,148,3,174,3,186,3,204,3,224,3,242,4,4,4,15,4,26,4,42,4,56,4,74, |
4,92,4,103,4,119,4,132,4,143,4,159,4,170,4,186,4,225,4,239,4,253,5,17,5,61, |
5,105,5,121,5,155,5,189,139,251,3,166,251,26,178,139,166,247,26,139,247,3, |
5,11,35,187,7,140,81,125,112,104,134,8,101,7,199,144,172,185,139,219,8,240, |
7,11,251,99,247,99,69,251,99,251,99,69,247,99,251,99,209,247,99,247,99,6, |
11,35,199,121,7,139,70,126,119,92,137,8,101,7,209,174,184,225,31,247,12,7, |
11,252,120,69,248,120,6,11,214,251,111,243,139,251,148,249,109,251,12,139, |
251,152,253,109,238,139,216,247,111,5,11,251,124,139,247,12,247,224,5,11, |
248,33,221,252,33,247,125,248,48,221,252,141,253,109,248,159,221,252,66,6, |
11,251,101,251,34,251,46,251,120,251,120,247,34,251,46,247,102,31,227,139, |
218,166,198,189,218,206,186,247,5,139,247,11,8,247,127,251,31,247,45,251, |
106,30,11,247,50,241,251,12,251,76,251,68,34,251,12,251,46,251,47,35,247, |
12,247,72,247,72,243,247,12,247,46,31,11,138,247,35,41,222,251,60,139,251, |
52,139,40,57,139,251,24,139,50,186,83,235,114,8,247,73,91,5,231,115,181,102, |
139,82,139,100,118,99,108,117,110,119,93,128,80,139,60,139,85,158,104,181, |
112,171,127,174,140,184,8,51,6,140,72,152,95,168,99,189,71,223,103,247,3, |
139,226,139,210,159,186,175,188,178,170,204,139,202,139,229,83,205,40,166, |
8,251,75,188,5,51,163,107,167,139,195,139,213,204,188,237,139,247,8,139,204, |
86,140,44,8,11,247,166,248,79,251,3,139,251,100,251,247,251,106,247,247,251, |
7,139,247,173,252,79,139,251,178,232,139,5,11,252,161,57,248,46,6,252,74, |
252,201,139,57,248,191,139,139,221,252,74,139,248,72,248,199,5,11,243,91, |
7,138,196,154,167,173,144,8,177,7,79,134,106,92,139,60,8,38,7,11,130,137, |
135,139,134,139,8,110,123,154,165,31,247,200,7,232,71,189,251,21,30,63,139, |
76,117,104,100,115,112,129,109,137,87,8,223,6,146,203,177,168,217,139,8,214, |
181,111,89,31,117,7,139,104,118,124,73,131,251,10,124,121,135,107,126,78, |
114,108,92,139,71,139,44,205,79,245,139,205,139,192,162,198,193,145,86,165, |
115,193,139,8,156,139,152,141,166,146,8,11,139,111,131,122,114,116,105,108, |
98,123,90,139,74,139,101,170,139,192,139,194,176,167,228,152,227,151,157, |
143,167,152,8,11,139,219,133,187,124,178,105,225,59,191,41,139,8,251,38,45, |
251,4,251,64,251,64,230,33,247,39,31,247,12,139,222,207,160,247,6,8,55,6, |
116,70,92,103,72,139,86,139,94,163,111,183,119,169,132,169,138,191,8,11,146, |
236,198,202,223,139,221,139,202,71,139,53,139,137,139,137,138,137,8,11,52, |
221,6,174,159,157,177,30,146,139,142,139,158,138,8,208,7,120,143,128,140, |
122,139,8,62,93,95,64,31,50,69,71,209,252,92,222,248,92,226,7,11,246,195, |
209,225,205,181,99,76,30,251,255,222,248,32,7,226,74,195,38,30,11,251,39, |
50,34,251,68,251,68,227,34,247,41,247,39,229,244,247,64,247,73,52,243,251, |
43,31,11,233,195,62,251,22,251,15,81,61,47,46,82,216,247,19,247,18,196,217, |
232,31,11,138,242,71,197,251,13,139,251,14,139,60,76,139,42,139,57,181,100, |
247,16,109,8,217,120,5,197,125,162,118,139,101,139,90,90,106,66,139,94,139, |
101,152,118,161,126,154,133,154,134,176,8,51,6,143,251,13,207,81,247,29,139, |
247,24,139,223,204,139,240,139,217,95,182,35,164,8,59,158,5,71,155,110,161, |
139,176,139,187,182,170,207,139,206,139,175,110,141,84,8,11,248,160,56,251, |
189,7,11,32,83,69,52,73,97,179,202,30,248,7,56,252,40,7,52,204,83,241,30, |
11,216,139,188,166,188,208,8,66,7,11,251,37,252,44,251,26,248,44,50,139,247, |
69,252,162,107,56,5,126,102,120,125,104,139,127,139,125,141,121,143,8,64, |
7,156,130,156,135,161,139,166,139,168,148,161,155,165,158,154,161,155,181, |
8,247,125,249,14,5,11,252,27,66,247,184,6,251,205,252,12,139,64,248,62,139, |
139,212,251,217,139,247,203,248,13,5,11,252,88,253,109,197,139,248,88,249, |
109,5,11,247,44,251,13,139,222,33,222,245,222,139,222,251,44,251,14,5,11, |
251,46,247,13,139,56,247,0,56,251,0,56,139,56,247,46,247,14,5,11,57,72,71, |
57,56,206,71,222,220,207,207,220,224,73,206,55,31,11,190,179,99,88,90,98, |
98,89,90,98,180,189,188,180,180,188,31,11,251,5,139,247,41,251,40,199,139, |
5,11,43,251,40,199,139,247,41,247,40,5,11,43,251,42,203,139,218,235,220,43, |
202,139,43,247,42,5,11,193,118,151,135,158,139,188,139,169,174,149,208,8, |
11,91,99,99,92,91,179,99,187,187,179,178,187,188,100,178,90,31,11,164,158, |
120,114,116,119,119,115,115,119,159,163,162,159,159,163,31,11,43,251,42,199, |
139,247,41,247,42,5,11,235,247,42,75,139,60,43,58,235,76,139,235,251,42,5, |
11,146,236,198,202,223,139,8,224,198,74,44,31,11,251,4,139,247,40,251,40, |
200,139,5,11,43,251,42,203,139,218,235,219,43,203,139,42,247,42,5,11,42,251, |
40,199,139,247,41,247,40,5,11,235,247,42,75,139,60,43,59,235,75,139,236,251, |
42,5,11,252,148,7,41,68,79,251,8,251,8,68,199,237,30,248,148,46,252,148,7, |
251,38,247,2,45,247,62,247,62,247,2,233,247,38,30,248,148,7,11,130,114,128, |
128,121,139,127,139,113,146,114,149,8,11,193,118,152,135,157,139,188,139, |
169,174,149,208,8,11,251,188,201,248,61,96,7,122,75,125,128,67,132,8,124, |
138,139,93,5,11,174,139,155,139,154,137,174,133,162,111,139,103,139,88,105, |
109,83,139,79,139,111,166,136,201,8,77,6,49,194,87,235,233,200,192,220,30, |
139,190,116,172,91,155,8,11,176,156,159,168,139,178,139,213,86,185,53,139, |
46,139,90,91,137,45,8,202,6,139,167,141,152,146,152,151,161,166,152,172,139, |
8,186,168,113,97,92,115,125,53,31,11,239,206,192,72,247,164,93,7,251,96,251, |
158,139,80,5,11,251,103,251,63,251,63,251,103,251,100,247,64,251,66,247,97, |
247,108,247,63,247,61,247,106,247,102,251,63,247,63,251,103,31,11,247,65, |
247,33,251,36,251,67,251,71,251,32,251,34,251,70,251,61,251,33,247,38,247, |
66,247,68,247,33,247,36,247,65,31,11,0,}; |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/font_cjk.h |
---|
0,0 → 1,5631 |
#ifndef __STRICT_ANSI__ |
#if defined(__linux__) || defined(__FreeBSD__) |
#define HAVE_INCBIN |
#endif |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_DroidSansFallback[139280]; |
asm(".globl pdf_font_DroidSansFallback"); |
asm(".balign 8"); |
asm("pdf_font_DroidSansFallback:"); |
asm(".incbin \"fonts/droid/DroidSansFallback.ttf\""); |
#else |
static const unsigned char pdf_font_DroidSansFallback[139280] = { |
0,1,0,0,0,19,1,0,0,4,0,48,70,70,84,77,75,29,224,116,0,2,31,244,0,0,0,28,71, |
68,69,70,2,201,0,4,0,2,14,208,0,0,0,32,71,80,79,83,236,144,228,222,0,2,15, |
64,0,0,16,180,71,83,85,66,147,60,130,75,0,2,14,240,0,0,0,80,79,83,47,50,247, |
26,134,136,0,0,1,184,0,0,0,96,99,109,97,112,29,150,101,90,0,0,12,136,0,0, |
6,242,99,118,116,32,65,244,67,234,0,0,29,92,0,0,2,20,102,112,103,109,115, |
211,35,176,0,0,19,124,0,0,7,5,103,97,115,112,0,24,0,9,0,2,14,192,0,0,0,16, |
103,108,121,102,155,28,79,66,0,0,36,172,0,1,184,160,104,101,97,100,248,253, |
254,54,0,0,1,60,0,0,0,54,104,104,101,97,14,75,8,159,0,0,1,116,0,0,0,36,104, |
109,116,120,38,164,8,117,0,0,2,24,0,0,10,112,107,101,114,110,174,170,185, |
111,0,1,221,76,0,0,21,90,108,111,99,97,120,114,13,144,0,0,31,112,0,0,5,58, |
109,97,120,112,7,1,7,208,0,0,1,152,0,0,0,32,110,97,109,101,35,87,171,194, |
0,1,242,168,0,0,7,251,112,111,115,116,26,213,54,16,0,1,250,164,0,0,20,25, |
112,114,101,112,122,200,94,246,0,0,26,132,0,0,2,213,0,1,0,0,0,1,5,30,235, |
107,75,224,95,15,60,245,0,31,8,0,0,0,0,0,201,129,215,160,0,0,0,0,201,129, |
215,160,254,96,253,147,8,103,7,72,0,0,0,8,0,2,0,0,0,0,0,0,0,1,0,0,7,62,254, |
78,0,67,8,192,254,96,254,244,8,103,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,156, |
0,1,0,0,2,156,1,82,0,84,0,140,0,5,0,2,0,16,0,47,0,90,0,0,3,158,5,192,0,3, |
0,1,0,3,4,185,1,144,0,5,0,8,5,154,5,51,0,0,1,27,5,154,5,51,0,0,3,209,0,102, |
2,18,8,5,2,11,6,4,2,2,2,2,2,4,160,0,2,175,80,0,120,251,0,0,0,0,0,0,0,0,49, |
65,83,67,0,64,0,33,251,2,5,211,254,81,1,51,7,62,1,178,96,0,0,159,223,215, |
0,0,4,58,5,129,0,0,0,32,0,2,2,236,0,68,0,0,0,0,2,170,0,0,2,57,0,0,2,57,0, |
185,2,215,0,87,4,115,0,9,4,115,0,22,7,29,0,73,5,86,0,72,1,135,0,104,2,170, |
0,127,2,170,0,12,3,29,0,33,4,172,0,100,2,57,0,184,2,170,0,91,2,57,0,187,2, |
57,0,0,4,115,0,80,4,115,0,156,4,115,0,103,4,115,0,78,4,115,0,47,4,115,0,82, |
4,115,0,104,4,115,0,105,4,115,0,89,4,115,0,96,2,57,0,187,2,57,0,184,4,172, |
0,101,4,172,0,100,4,172,0,101,4,115,0,84,8,31,0,161,5,86,0,4,5,86,0,168,5, |
199,0,104,5,199,0,168,5,86,0,168,4,227,0,168,6,57,0,103,5,199,0,168,2,57, |
0,189,4,0,0,32,5,86,0,168,4,115,0,168,6,170,0,168,5,199,0,168,6,57,0,97,5, |
86,0,168,6,57,0,97,5,199,0,168,5,86,0,93,4,227,0,46,5,199,0,158,5,86,0,9, |
7,141,0,9,5,86,0,46,5,86,0,45,4,227,0,65,2,57,0,146,2,57,0,0,2,57,0,16,3, |
193,0,10,4,115,255,225,2,170,0,106,4,115,0,87,4,115,0,132,4,0,0,87,4,115, |
0,86,4,115,0,87,2,57,0,29,4,115,0,86,4,115,0,142,1,199,0,137,1,199,255,206, |
4,0,0,138,1,199,0,138,6,170,0,136,4,115,0,136,4,115,0,86,4,115,0,132,4,115, |
0,86,2,170,0,136,4,0,0,57,2,57,0,31,4,115,0,133,4,0,0,7,5,199,255,253,4,0, |
0,23,4,0,0,5,4,0,0,49,2,172,0,34,2,20,0,183,2,172,0,34,4,172,0,92,2,170,0, |
242,4,115,0,135,4,115,0,58,4,115,0,113,4,115,255,254,2,20,0,183,4,115,0,115, |
2,170,0,45,5,229,0,31,2,246,0,26,4,115,0,83,4,172,0,100,5,229,0,31,4,107, |
255,239,3,51,0,122,4,100,0,65,2,170,0,41,2,170,0,27,2,170,0,72,4,156,0,140, |
4,76,0,80,2,57,0,187,2,170,0,119,2,170,0,80,2,236,0,27,4,115,0,83,6,172,0, |
56,6,172,0,56,6,172,0,73,4,227,0,131,5,86,0,4,5,86,0,4,5,86,0,4,5,86,0,4, |
5,86,0,4,5,86,0,4,8,0,0,24,5,199,0,104,5,86,0,168,5,86,0,168,5,86,0,168,5, |
86,0,168,2,57,0,9,2,57,0,142,2,57,255,210,2,57,0,7,5,199,0,14,5,199,0,168, |
6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,4,172,0,142,6,57,0,71,5, |
199,0,158,5,199,0,158,5,199,0,158,5,199,0,158,5,86,0,45,5,86,0,168,4,227, |
0,142,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,7, |
29,0,66,4,0,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,2,57,0,10,2, |
57,0,135,2,57,255,211,2,57,0,8,4,115,0,86,4,115,0,140,4,115,0,86,4,115,0, |
86,4,115,0,86,4,115,0,86,4,115,0,86,4,100,0,65,4,227,0,44,4,115,0,139,4,115, |
0,139,4,115,0,139,4,115,0,139,4,0,0,5,4,115,0,138,4,0,0,5,5,86,0,4,4,115, |
0,87,5,86,0,4,4,115,0,87,5,86,0,4,4,115,0,87,5,199,0,104,4,0,0,87,5,199,0, |
104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,168,4,235, |
0,86,5,199,0,14,4,115,0,86,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5, |
86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,6,57,0,103, |
4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0, |
86,5,199,0,168,4,115,0,142,5,199,0,14,4,115,0,10,2,57,255,184,2,57,255,184, |
2,57,0,12,2,57,0,12,2,57,255,210,2,57,255,210,2,57,0,92,1,199,0,31,2,57,0, |
189,2,57,0,194,5,225,0,170,3,141,0,137,4,0,0,32,1,199,255,153,5,86,0,168, |
4,0,0,138,4,0,0,138,4,115,0,168,1,199,0,91,4,115,0,168,1,199,0,126,4,115, |
0,168,2,85,0,138,4,115,0,168,2,172,0,138,4,115,0,20,1,199,0,16,5,199,0,168, |
4,115,0,140,5,199,0,168,4,115,0,140,5,199,0,168,4,115,0,140,4,213,255,254, |
5,201,0,165,4,115,0,140,6,57,0,97,4,115,0,86,6,57,0,97,4,115,0,86,6,57,0, |
97,4,115,0,86,8,0,0,97,7,141,0,86,5,199,0,168,2,170,0,136,5,199,0,168,2,170, |
0,129,5,199,0,168,2,170,0,56,5,86,0,93,4,0,0,57,5,86,0,93,4,0,0,57,5,86,0, |
93,4,0,0,57,5,86,0,93,4,0,0,57,4,227,0,46,2,57,0,31,4,227,0,46,3,0,0,31,4, |
227,0,46,2,57,0,31,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199, |
0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0, |
158,4,115,0,133,7,141,0,9,5,199,255,253,5,86,0,45,4,0,0,5,5,86,0,45,4,227, |
0,65,4,0,0,49,4,227,0,65,4,0,0,49,4,227,0,65,4,0,0,49,1,199,0,138,4,115,0, |
192,5,86,0,4,4,115,0,87,8,0,0,24,7,29,0,66,6,57,0,71,4,227,0,44,2,170,0,0, |
2,170,0,0,2,170,0,51,2,170,255,221,2,170,0,156,2,170,0,51,2,170,0,80,2,170, |
255,233,2,170,0,22,2,170,0,205,2,170,0,29,5,87,0,4,2,57,0,187,6,70,255,245, |
6,180,255,242,3,18,255,232,6,50,255,187,6,216,0,65,6,5,255,187,1,199,255, |
176,5,86,0,4,5,86,0,168,4,104,0,168,5,88,0,61,5,86,0,168,4,227,0,65,5,199, |
0,168,6,57,0,97,2,57,0,189,5,86,0,168,5,88,0,10,6,170,0,168,5,199,0,168,5, |
51,0,90,6,57,0,97,5,199,0,168,5,86,0,168,4,242,0,108,4,227,0,46,5,86,0,45, |
6,98,0,117,5,86,0,46,6,175,0,145,5,251,0,87,2,57,0,7,5,86,0,45,4,160,0,86, |
3,145,0,70,4,115,0,106,1,199,0,137,4,96,0,133,4,160,0,86,4,154,0,142,4,0, |
0,7,4,116,0,86,3,145,0,70,3,135,0,86,4,115,0,106,4,115,0,106,1,199,0,137, |
4,0,0,138,4,0,0,14,4,156,0,138,4,0,0,0,3,149,0,86,4,115,0,86,5,133,0,79,4, |
141,0,132,3,219,0,86,4,240,0,86,3,41,0,29,4,96,0,133,5,48,0,85,4,51,0,21, |
5,180,0,135,6,63,0,83,1,199,255,205,4,96,0,133,4,115,0,86,4,96,0,133,6,63, |
0,83,5,87,0,168,6,235,0,46,4,85,0,168,5,192,0,104,5,86,0,93,2,57,0,189,2, |
57,0,7,4,0,0,32,8,117,0,18,8,21,0,168,6,213,0,46,4,169,0,168,5,21,0,55,5, |
192,0,168,5,86,0,4,5,64,0,168,5,86,0,168,4,85,0,168,5,107,0,15,5,86,0,168, |
7,99,0,28,4,213,0,67,5,192,0,168,5,192,0,168,4,169,0,168,5,64,0,18,6,170, |
0,168,5,199,0,168,6,57,0,97,5,192,0,166,5,86,0,168,5,199,0,104,4,227,0,46, |
5,21,0,55,6,21,0,118,5,86,0,46,5,235,0,168,5,85,0,160,7,85,0,168,7,128,0, |
168,6,85,0,46,7,21,0,168,5,64,0,168,5,192,0,105,8,21,0,168,5,199,0,96,4,115, |
0,87,4,149,0,120,4,64,0,142,2,235,0,142,4,171,0,20,4,115,0,87,5,90,0,7,3, |
171,0,49,4,120,0,142,4,120,0,142,3,128,0,138,4,171,0,11,5,128,0,142,4,107, |
0,142,4,115,0,86,4,85,0,142,4,115,0,132,4,0,0,87,3,170,0,35,4,0,0,5,6,149, |
0,86,4,0,0,23,4,149,0,142,4,43,0,122,6,107,0,142,6,149,0,142,5,0,0,45,5,192, |
0,142,4,43,0,142,4,21,0,55,6,0,0,142,4,85,0,17,4,115,0,87,4,115,0,10,2,235, |
0,142,4,21,0,87,4,0,0,57,1,199,0,137,2,57,255,248,1,199,255,206,7,64,0,11, |
6,128,0,142,4,115,0,10,3,128,0,138,4,0,0,5,4,107,0,142,3,233,0,168,3,74,0, |
142,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253, |
5,86,0,45,4,0,0,5,4,115,0,0,8,0,0,0,8,0,0,0,4,107,255,225,1,199,0,127,1,199, |
0,127,1,199,0,127,1,199,0,126,2,170,0,75,2,170,0,75,2,170,0,75,4,115,0,138, |
4,115,0,136,2,205,0,81,8,0,1,22,8,0,0,55,1,128,0,85,2,213,0,85,2,170,0,88, |
2,170,0,89,4,0,0,185,2,170,255,192,1,86,254,96,2,235,0,101,4,115,0,4,4,115, |
0,58,8,192,0,158,4,115,0,16,7,21,0,69,2,150,0,19,8,149,0,188,8,0,0,188,6, |
37,0,108,4,205,0,88,6,172,0,80,6,172,0,61,6,172,0,93,6,172,0,145,8,0,1,162, |
4,0,1,16,8,0,1,162,4,0,1,16,8,0,1,162,4,0,1,16,4,0,1,16,3,244,0,56,4,229, |
0,4,6,150,0,235,5,180,0,154,4,172,0,101,4,100,0,51,5,180,0,87,7,213,1,152, |
5,192,1,22,2,49,255,158,4,100,0,56,4,100,0,65,4,171,0,100,4,100,0,63,4,100, |
0,65,4,213,0,157,4,172,0,100,4,213,2,34,4,213,1,5,5,171,255,246,5,0,1,216, |
5,171,2,141,5,171,255,246,5,171,2,141,5,171,255,246,5,171,2,141,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,1,217,5, |
171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255,246, |
5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171, |
255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,0,0,5,171, |
0,0,5,171,0,0,5,171,0,0,5,171,2,213,5,171,0,103,5,171,0,0,5,213,0,0,4,213, |
0,123,4,213,0,6,2,214,0,109,2,214,0,109,8,0,0,0,7,235,1,158,7,235,1,145,7, |
235,1,158,7,235,1,145,3,244,0,8,4,213,0,167,4,213,0,178,4,213,0,41,4,213, |
0,41,2,214,0,115,8,43,1,177,8,107,1,209,7,85,1,70,6,0,1,218,6,0,1,81,4,64, |
0,59,5,64,0,60,4,192,0,102,4,21,0,66,4,0,0,196,6,0,1,16,4,0,0,29,4,0,0,29, |
2,170,0,119,2,170,0,243,2,170,0,127,2,170,0,14,2,170,0,53,2,170,0,43,2,170, |
0,45,2,170,255,229,1,199,0,124,1,199,0,130,2,90,0,106,2,90,0,72,2,152,0,0, |
2,152,0,0,2,135,0,45,2,160,255,233,3,47,0,32,2,72,255,232,0,0,0,3,0,0,0,3, |
0,0,0,28,0,1,0,0,0,0,4,232,0,3,0,1,0,0,0,28,0,4,4,204,0,0,0,190,0,128,0,6, |
0,62,0,126,1,127,1,146,1,255,2,199,2,201,2,221,3,126,3,138,3,140,3,161,3, |
206,4,12,4,79,4,92,4,95,4,145,30,133,30,243,32,21,32,30,32,34,32,38,32,48, |
32,51,32,58,32,60,32,62,32,68,32,127,32,164,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,94,33,149,33,168,34,2,34,6,34,15,34,18,34,21,34,26,34, |
31,34,41,34,43,34,72,34,97,34,101,35,2,35,16,35,33,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,108,37,128,37,132,37,136,37, |
140,37,147,37,161,37,172,37,178,37,186,37,188,37,196,37,203,37,207,37,217, |
37,230,38,60,38,64,38,66,38,96,38,99,38,102,38,107,240,2,240,5,251,2,255, |
255,0,0,0,32,0,160,1,146,1,250,2,198,2,201,2,216,3,126,3,132,3,140,3,142, |
3,163,4,1,4,14,4,81,4,94,4,144,30,128,30,242,32,19,32,23,32,32,32,38,32,48, |
32,50,32,57,32,60,32,62,32,68,32,127,32,163,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,91,33,144,33,168,34,2,34,6,34,15,34,17,34,21,34,25,34, |
30,34,41,34,43,34,72,34,96,34,100,35,2,35,16,35,32,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,80,37,128,37,132,37,136,37,140, |
37,144,37,160,37,170,37,178,37,186,37,188,37,196,37,202,37,207,37,216,37, |
230,38,58,38,64,38,66,38,96,38,99,38,101,38,106,240,1,240,5,251,1,255,255, |
255,227,0,0,255,174,255,71,254,129,254,128,254,114,252,160,253,204,253,203, |
253,202,253,201,253,151,253,150,253,149,253,148,253,100,227,118,227,10,225, |
235,225,234,225,233,225,230,225,221,225,220,225,215,225,214,225,213,225,208, |
225,150,225,115,225,113,225,109,225,21,225,8,225,6,224,251,224,248,224,241, |
224,197,224,148,224,130,224,41,224,38,224,30,224,29,223,255,0,0,224,19,224, |
10,224,9,223,237,223,214,223,212,223,56,223,43,223,28,221,62,221,61,221,52, |
221,49,221,46,221,43,221,40,221,33,221,26,221,19,221,12,220,249,220,230,220, |
227,220,224,220,221,220,218,220,206,220,198,220,193,220,186,220,185,220,178, |
220,173,220,170,220,162,220,150,220,67,220,64,220,63,220,34,220,32,220,31, |
220,28,18,135,18,133,7,135,0,1,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
2,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,98,0,99,0,100,0,101,0, |
102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,16,0,110,0,111,0,112,0,113, |
0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0, |
126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138, |
0,139,0,140,0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,148,0,149,0,150,0, |
151,0,152,0,153,0,154,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,163, |
0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,173,0,174,0,175,0, |
176,0,177,0,178,0,179,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188, |
0,189,0,190,0,191,0,192,0,193,0,194,0,195,0,196,0,197,0,198,0,199,0,200,0, |
201,0,202,0,203,0,204,0,205,0,206,0,207,0,208,0,209,0,210,0,211,0,212,0,213, |
0,214,0,215,0,216,0,217,0,218,0,219,0,220,0,221,0,222,0,223,0,224,0,225,0, |
226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0,238, |
0,239,0,240,0,241,0,242,0,243,0,244,0,245,0,246,0,247,0,248,0,249,0,250,0, |
251,0,252,0,253,0,254,0,255,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10, |
1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25, |
1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40, |
1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,0,119,2,48,0,6,2,10,0,0,0,0,1,0,0, |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,0,4,0,5,0,6,0,7,0, |
8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0, |
23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37, |
0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52, |
0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67, |
0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82, |
0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97, |
0,0,0,132,0,133,0,135,0,137,0,145,0,150,0,156,0,161,0,160,0,162,0,164,0,163, |
0,165,0,167,0,169,0,168,0,170,0,171,0,173,0,172,0,174,0,175,0,177,0,179,0, |
178,0,180,0,182,0,181,0,186,0,185,0,187,0,188,2,9,0,112,0,99,0,100,0,104, |
2,11,0,118,0,159,0,110,0,106,2,29,0,116,0,105,2,54,0,134,0,152,2,49,0,113, |
2,56,2,57,0,102,0,117,2,43,2,46,2,45,1,137,2,52,0,107,0,122,1,114,0,166,0, |
184,0,127,0,98,0,109,2,48,1,64,2,53,2,44,0,108,0,123,2,12,0,3,0,128,0,131, |
0,149,1,18,1,19,1,254,1,255,2,6,2,7,2,2,2,3,0,183,2,119,0,191,1,56,2,20,2, |
25,2,16,2,17,2,136,2,137,2,10,0,119,2,4,2,8,2,13,0,130,0,138,0,129,0,139, |
0,136,0,141,0,142,0,143,0,140,0,147,0,148,0,0,0,146,0,154,0,155,0,153,0,241, |
1,71,1,78,0,111,1,74,1,75,1,76,0,120,1,79,1,77,1,72,0,0,64,69,89,88,85,84, |
83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59, |
58,57,56,55,54,53,49,48,47,46,45,44,40,39,38,37,36,35,34,33,31,24,20,17,16, |
15,14,13,11,10,9,8,7,6,5,4,3,2,1,0,44,69,35,70,96,32,176,38,96,176,4,38,35, |
72,72,45,44,69,35,70,35,97,32,176,38,97,176,4,38,35,72,72,45,44,69,35,70, |
96,176,32,97,32,176,70,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,32,96, |
32,176,38,97,176,32,97,176,4,38,35,72,72,45,44,69,35,70,96,176,64,97,32,176, |
102,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,64,96,32,176,38,97,176, |
64,97,176,4,38,35,72,72,45,44,1,16,32,60,0,60,45,44,32,69,35,32,176,205,68, |
35,32,184,1,90,81,88,35,32,176,141,68,35,89,32,176,237,81,88,35,32,176,77, |
68,35,89,32,176,4,38,81,88,35,32,176,13,68,35,89,33,33,45,44,32,32,69,24, |
104,68,32,176,1,96,32,69,176,70,118,104,138,69,96,68,45,44,1,177,11,10,67, |
35,67,101,10,45,44,0,177,10,11,67,35,67,11,45,44,0,176,40,35,112,177,1,40, |
62,1,176,40,35,112,177,2,40,69,58,177,2,0,8,13,45,44,32,69,176,3,37,69,97, |
100,176,80,81,88,69,68,27,33,33,89,45,44,73,176,14,35,68,45,44,32,69,176, |
0,67,96,68,45,44,1,176,6,67,176,7,67,101,10,45,44,32,105,176,64,97,176,0, |
139,32,177,44,192,138,140,184,16,0,98,96,43,12,100,35,100,97,92,88,176,3, |
97,89,45,44,138,3,69,138,138,135,176,17,43,176,41,35,68,176,41,122,228,24, |
45,44,69,101,176,44,35,68,69,176,43,35,68,45,44,75,82,88,69,68,27,33,33,89, |
45,44,75,81,88,69,68,27,33,33,89,45,44,1,176,5,37,16,35,32,138,245,0,176, |
1,96,35,237,236,45,44,1,176,5,37,16,35,32,138,245,0,176,1,97,35,237,236,45, |
44,1,176,6,37,16,245,0,237,236,45,44,70,35,70,96,138,138,70,35,32,70,138, |
96,138,97,184,255,128,98,35,32,16,35,138,177,12,12,138,112,69,96,32,176,0, |
80,88,176,1,97,184,255,186,139,27,176,70,140,89,176,16,96,104,1,58,45,44, |
32,69,176,3,37,70,82,75,176,19,81,91,88,176,2,37,70,32,104,97,176,3,37,176, |
3,37,63,35,33,56,27,33,17,89,45,44,32,69,176,3,37,70,80,88,176,2,37,70,32, |
104,97,176,3,37,176,3,37,63,35,33,56,27,33,17,89,45,44,0,176,7,67,176,6,67, |
11,45,44,33,33,12,100,35,100,139,184,64,0,98,45,44,33,176,128,81,88,12,100, |
35,100,139,184,32,0,98,27,178,0,64,47,43,89,176,2,96,45,44,33,176,192,81, |
88,12,100,35,100,139,184,21,85,98,27,178,0,128,47,43,89,176,2,96,45,44,12, |
100,35,100,139,184,64,0,98,96,35,33,45,44,75,83,88,138,176,4,37,73,100,35, |
69,105,176,64,139,97,176,128,98,176,32,97,106,176,14,35,68,35,16,176,14,246, |
27,33,35,138,18,17,32,57,47,89,45,44,75,83,88,32,176,3,37,73,100,105,32,176, |
5,38,176,6,37,73,100,35,97,176,128,98,176,32,97,106,176,14,35,68,176,4,38, |
16,176,14,246,138,16,176,14,35,68,176,14,246,176,14,35,68,176,14,237,27,138, |
176,4,38,17,18,32,57,35,32,57,47,47,89,45,44,69,35,69,96,35,69,96,35,69,96, |
35,118,104,24,176,128,98,32,45,44,176,72,43,45,44,32,69,176,0,84,88,176,64, |
68,32,69,176,64,97,68,27,33,33,89,45,44,69,177,48,47,69,35,69,97,96,176,1, |
96,105,68,45,44,75,81,88,176,47,35,112,176,20,35,66,27,33,33,89,45,44,75, |
81,88,32,176,3,37,69,105,83,88,68,27,33,33,89,27,33,33,89,45,44,69,176,20, |
67,176,0,96,99,176,1,96,105,68,45,44,176,47,69,68,45,44,69,35,32,69,138,96, |
68,45,44,69,35,69,96,68,45,44,75,35,81,88,185,0,51,255,224,177,52,32,27,179, |
51,0,52,0,89,68,68,45,44,176,22,67,88,176,3,38,69,138,88,100,102,176,31,96, |
27,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,89,35,88,101,89,176,41, |
35,68,35,16,176,41,224,27,33,33,33,33,33,89,45,44,176,2,67,84,88,75,83,35, |
75,81,90,88,56,27,33,33,89,27,33,33,33,33,89,45,44,176,22,67,88,176,4,37, |
69,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,35,88,27,101,89,176,41, |
35,68,176,5,37,176,8,37,8,32,88,2,27,3,89,176,4,37,16,176,5,37,32,70,176, |
4,37,35,66,60,176,4,37,176,7,37,8,176,7,37,16,176,6,37,32,70,176,4,37,176, |
1,96,35,66,60,32,88,1,27,0,89,176,4,37,16,176,5,37,176,41,224,176,41,32,69, |
101,68,176,7,37,16,176,6,37,176,41,224,176,5,37,176,8,37,8,32,88,2,27,3,89, |
176,5,37,176,3,37,67,72,176,4,37,176,7,37,8,176,6,37,176,3,37,176,1,96,67, |
72,27,33,89,33,33,33,33,33,33,33,45,44,2,176,4,37,32,32,70,176,4,37,35,66, |
176,5,37,8,176,3,37,69,72,33,33,33,33,45,44,2,176,3,37,32,176,4,37,8,176, |
2,37,67,72,33,33,33,45,44,69,35,32,69,24,32,176,0,80,32,88,35,101,35,89,35, |
104,32,176,64,80,88,33,176,64,89,35,88,101,89,138,96,68,45,44,75,83,35,75, |
81,90,88,32,69,138,96,68,27,33,33,89,45,44,75,84,88,32,69,138,96,68,27,33, |
33,89,45,44,75,83,35,75,81,90,88,56,27,33,33,89,45,44,176,0,33,75,84,88,56, |
27,33,33,89,45,44,176,2,67,84,88,176,70,43,27,33,33,33,33,89,45,44,176,2, |
67,84,88,176,71,43,27,33,33,33,89,45,44,176,2,67,84,88,176,72,43,27,33,33, |
33,33,89,45,44,176,2,67,84,88,176,73,43,27,33,33,33,89,45,44,32,138,8,35, |
75,83,138,75,81,90,88,35,56,27,33,33,89,45,44,0,176,2,37,73,176,0,83,88,32, |
176,64,56,17,27,33,89,45,44,1,70,35,70,96,35,70,97,35,32,16,32,70,138,97, |
184,255,128,98,138,177,64,64,138,112,69,96,104,58,45,44,32,138,35,73,100, |
138,35,83,88,60,27,33,89,45,44,75,82,88,125,27,122,89,45,44,176,18,0,75,1, |
75,84,66,45,44,177,2,0,66,177,35,1,136,81,177,64,1,136,83,90,88,185,16,0, |
0,32,136,84,88,178,2,1,2,67,96,66,89,177,36,1,136,81,88,185,32,0,0,64,136, |
84,88,178,2,2,2,67,96,66,177,36,1,136,84,88,178,2,32,2,67,96,66,0,75,1,75, |
82,88,178,2,8,2,67,96,66,89,27,185,64,0,0,128,136,84,88,178,2,4,2,67,96,66, |
89,185,64,0,0,128,99,184,1,0,136,84,88,178,2,8,2,67,96,66,89,185,64,0,1,0, |
99,184,2,0,136,84,88,178,2,16,2,67,96,66,89,185,64,0,2,0,99,184,4,0,136,84, |
88,178,2,64,2,67,96,66,89,89,89,89,89,45,44,69,24,104,35,75,81,88,35,32,69, |
32,100,176,64,80,88,124,89,104,138,96,89,68,45,44,176,0,22,176,2,37,176,2, |
37,1,176,1,35,62,0,176,2,35,62,177,1,2,6,12,176,10,35,101,66,176,11,35,66, |
1,176,1,35,63,0,176,2,35,63,177,1,2,6,12,176,6,35,101,66,176,7,35,66,176, |
1,22,1,45,44,122,138,16,69,35,245,24,45,0,0,0,177,9,64,190,1,7,0,1,0,31,1, |
7,0,1,0,159,1,4,64,142,1,192,253,1,175,253,1,0,253,1,10,79,251,1,32,251,1, |
245,80,40,31,242,70,40,31,241,70,42,31,240,70,43,31,95,239,127,239,2,15,239, |
79,239,95,239,143,239,175,239,5,11,229,228,30,31,227,226,70,31,15,226,1,64, |
226,70,22,31,225,224,70,31,207,224,223,224,239,224,3,64,224,51,54,70,224, |
70,24,31,221,61,223,85,222,61,3,85,223,1,3,85,220,3,255,31,15,213,31,213, |
2,15,213,31,213,2,64,202,24,27,70,207,194,1,189,192,60,31,193,80,38,31,188, |
190,40,31,255,185,1,80,184,112,184,128,184,3,184,255,192,64,255,184,18,50, |
70,31,183,63,183,79,183,111,183,127,183,159,183,175,183,7,112,178,160,178, |
176,178,3,15,178,1,144,181,1,176,181,1,15,181,1,8,15,179,63,179,239,179,3, |
128,176,144,176,2,176,176,192,176,208,176,3,47,175,63,175,2,160,173,176,173, |
2,192,173,208,173,2,47,172,63,172,2,159,171,1,192,170,208,170,2,79,169,143, |
169,2,47,169,111,169,191,169,255,169,4,156,155,36,31,80,155,1,111,150,1,191, |
150,1,150,70,29,31,149,148,23,31,127,148,143,148,255,148,3,48,145,64,145, |
2,128,145,1,112,143,128,143,2,144,143,1,192,143,208,143,2,79,140,95,140,111, |
140,3,134,70,255,31,159,133,1,132,131,49,31,116,115,63,31,115,80,38,31,111, |
110,60,31,110,70,53,31,26,1,24,85,25,51,24,85,7,51,3,85,6,3,255,31,96,80, |
38,31,95,80,38,31,92,70,49,31,91,90,72,31,90,70,49,31,19,50,18,85,5,1,3,85, |
4,50,3,85,111,3,1,15,3,63,3,2,239,81,255,81,2,64,81,53,56,70,64,81,37,40, |
70,207,64,84,80,1,73,70,32,31,72,70,53,31,71,70,53,31,175,70,1,223,70,239, |
70,2,128,70,1,22,50,21,85,17,1,15,85,16,50,15,85,2,1,0,85,1,0,1,31,31,15, |
63,15,95,15,127,15,4,15,15,47,15,79,15,111,15,143,15,223,15,255,15,7,63,15, |
127,15,239,15,3,111,0,1,128,22,1,5,1,184,1,144,177,84,83,43,43,75,184,7,255, |
82,75,176,7,80,91,176,1,136,176,37,83,176,1,136,176,64,81,90,176,6,136,176, |
0,85,90,91,88,177,1,1,142,89,133,141,141,0,66,29,75,176,50,83,88,176,96,29, |
89,75,176,100,83,88,176,64,29,89,75,176,128,83,88,176,16,29,177,22,0,66,89, |
116,115,116,117,43,43,43,43,43,1,115,116,117,43,43,43,0,116,43,43,115,115, |
117,43,43,43,1,43,43,43,0,43,43,43,43,43,43,1,43,43,0,43,43,1,43,115,43,0, |
116,115,116,117,115,116,115,43,1,43,116,117,0,115,43,115,116,1,115,115,116, |
0,115,116,116,115,116,115,1,94,115,115,116,115,115,0,115,43,115,115,1,43, |
0,43,1,43,0,115,43,116,117,43,43,43,43,1,43,43,116,43,43,94,115,43,0,43,94, |
115,116,1,43,43,43,0,43,115,115,94,115,115,115,1,115,115,115,24,94,0,0,0, |
5,204,5,204,0,125,5,129,0,21,0,121,5,129,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
4,58,0,20,0,119,0,0,255,236,0,0,0,0,255,236,0,0,0,0,255,236,0,0,254,87,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,180,0,189,0,175,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0, |
126,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,191,0,195,0,171,0,0,0,0,0,155,0,141, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,170,0,0,0,0,0, |
0,0,148,0,153,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, |
0,131,0,141,0,164,0,180,0,0,0,0,0,0,0,0,0,0,0,96,0,106,0,121,0,152,0,172, |
0,184,0,167,0,0,1,34,1,51,0,195,0,107,0,0,0,0,0,0,0,219,0,201,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,225,1,201,0,146,0,168,0,107,0,146,0,183, |
0,107,0,155,0,0,2,123,2,242,0,146,2,82,0,110,2,215,3,129,0,130,0,137,0,160, |
0,159,1,105,0,143,0,0,1,96,0,164,1,91,0,94,0,130,0,0,0,0,0,0,0,94,0,101,0, |
111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,144,0,165,0,122,0,128,0,0,0,0,0,0, |
0,0,0,0,5,129,255,243,0,13,252,167,0,131,0,137,0,143,0,150,0,105,0,113,0, |
0,0,0,0,0,0,0,0,0,0,168,1,249,0,0,0,0,3,31,0,167,0,174,0,181,0,0,0,0,0,129, |
0,0,0,0,0,0,0,0,7,72,3,106,2,182,2,2,253,147,0,0,0,145,0,103,0,145,0,97,1, |
217,0,0,2,141,3,65,0,68,5,17,0,0,0,44,0,44,0,44,0,44,1,22,1,96,2,4,3,4,3, |
230,4,240,5,14,5,84,5,158,5,246,6,50,6,114,6,144,6,178,6,218,7,80,7,150,8, |
32,8,222,9,68,9,226,10,140,10,206,11,158,12,80,12,126,12,200,13,18,13,74, |
13,146,14,20,15,100,16,22,16,172,17,64,17,160,17,222,18,40,18,202,19,22,19, |
96,19,194,20,44,20,88,21,184,22,64,22,182,23,26,23,192,24,94,25,40,26,38, |
26,146,27,42,29,162,30,254,32,64,32,148,32,190,32,242,33,28,34,172,34,202, |
34,244,35,160,36,54,36,172,37,54,37,166,38,32,38,238,39,88,39,166,40,102, |
41,0,41,68,42,246,43,100,43,212,44,112,45,20,45,98,46,16,46,114,46,230,48, |
52,50,86,51,226,53,124,54,24,54,136,55,126,55,240,56,112,57,142,58,18,58, |
196,59,100,59,234,60,238,62,28,62,144,63,134,64,72,64,168,64,210,65,178,65, |
200,66,36,66,110,66,232,67,126,67,170,68,42,68,106,68,138,68,244,69,48,69, |
166,70,14,70,48,70,90,70,124,71,8,71,32,71,56,71,80,71,104,71,130,71,154, |
72,14,72,34,72,58,72,82,72,106,72,132,72,156,72,178,72,200,72,224,73,80,73, |
104,73,128,73,152,73,176,73,200,73,226,74,68,74,252,75,20,75,44,75,68,75, |
94,75,118,75,212,76,154,76,178,76,202,76,226,76,250,77,20,77,46,78,38,78, |
58,78,82,78,106,78,130,78,156,78,180,78,202,78,224,78,248,79,172,79,196,79, |
220,79,244,80,12,80,36,80,62,80,126,81,26,81,50,81,74,81,98,81,124,81,148, |
82,24,82,50,82,74,82,98,82,122,82,146,82,166,82,186,82,210,82,234,83,2,83, |
26,83,50,83,70,83,94,83,118,83,142,83,164,83,172,84,74,84,98,84,122,84,146, |
84,170,84,194,84,214,84,234,84,254,85,22,85,46,85,70,85,94,85,118,85,142, |
85,166,85,186,85,206,85,230,85,254,86,22,86,142,87,20,87,42,87,64,87,88,87, |
110,87,132,87,154,87,172,87,192,87,216,88,170,88,182,88,210,88,234,89,228, |
89,248,90,12,90,124,90,148,90,170,90,190,90,210,90,232,91,22,91,42,91,62, |
91,150,91,224,91,248,92,16,92,36,92,56,92,80,92,104,92,116,93,20,93,164,93, |
188,93,212,93,236,94,4,94,30,94,56,94,216,95,154,95,178,95,202,95,222,95, |
242,96,10,96,34,96,58,96,82,96,106,96,130,96,150,96,170,96,194,96,218,96, |
238,98,112,98,136,98,158,98,238,99,96,99,120,99,144,99,168,99,192,99,216, |
99,240,100,10,100,36,100,62,100,88,100,122,100,142,100,166,100,190,100,214, |
100,238,101,8,101,32,101,56,101,80,101,100,101,124,101,148,101,244,102,108, |
103,104,103,140,103,164,103,188,103,212,103,236,104,34,104,88,104,142,104, |
214,104,238,105,86,105,162,106,244,107,70,107,118,107,188,107,248,109,10, |
109,50,109,112,109,172,109,206,112,188,112,236,114,22,114,30,114,38,114,82, |
114,208,114,216,114,224,114,232,115,138,115,146,115,154,116,34,116,42,116, |
50,116,116,116,124,116,182,116,190,117,56,117,64,117,72,117,234,117,242,118, |
140,119,78,119,102,120,194,120,218,120,242,121,10,121,36,121,64,122,30,122, |
212,123,118,124,16,124,186,125,114,125,218,126,124,127,28,127,136,128,94, |
128,208,130,6,130,234,130,242,131,112,131,246,132,174,133,52,133,156,134, |
4,134,138,135,74,135,188,136,108,136,134,136,160,136,184,136,208,136,232, |
137,66,137,198,137,222,138,142,138,150,138,158,138,182,138,190,139,116,139, |
224,140,78,140,102,140,126,140,198,140,206,141,66,141,74,141,82,141,224,141, |
232,142,210,143,168,144,10,144,34,144,152,145,30,145,38,145,46,145,54,145, |
108,145,116,145,124,145,132,146,12,146,156,146,164,146,226,147,78,147,158, |
147,250,148,88,148,206,149,44,149,214,150,112,151,26,151,34,151,198,152,86, |
152,130,152,254,153,6,153,250,154,160,155,34,155,58,155,200,156,80,157,2, |
157,96,157,104,157,178,157,186,157,194,157,250,158,2,158,250,159,2,159,72, |
159,160,159,242,160,86,160,184,161,28,161,134,162,24,162,150,163,6,163,32, |
163,192,163,216,164,106,164,114,164,232,165,2,165,10,165,228,166,90,166,222, |
166,246,167,14,167,100,167,148,167,194,167,218,167,242,168,10,168,34,168, |
60,168,86,168,110,168,134,168,168,168,202,168,236,168,248,169,40,169,90,169, |
140,169,188,170,18,170,114,170,208,171,12,171,102,171,172,171,238,174,134, |
174,168,174,186,174,246,175,46,175,70,175,90,175,126,175,232,176,60,176,252, |
178,100,179,50,180,4,180,178,181,136,182,32,182,224,183,78,183,128,183,178, |
183,228,184,14,184,60,184,106,184,152,184,198,185,14,185,86,185,166,186,118, |
187,22,187,70,187,184,187,214,188,72,188,226,188,250,189,52,190,108,191,92, |
191,212,192,8,192,96,192,184,192,230,193,0,193,54,193,116,193,140,193,166, |
193,200,193,234,194,12,194,46,194,84,194,122,194,160,194,198,194,248,195, |
30,195,72,195,118,195,166,195,224,196,14,196,62,196,120,196,166,196,214,197, |
16,197,62,197,110,197,168,197,220,198,18,198,86,198,138,198,194,199,8,199, |
62,199,114,199,184,199,238,200,34,200,106,200,178,200,252,201,88,201,112, |
201,136,201,160,201,184,201,208,203,232,205,196,207,132,207,146,207,178,207, |
206,207,246,208,4,208,18,208,32,208,46,208,60,208,106,208,188,208,238,209, |
32,209,114,209,180,210,100,210,228,211,148,212,14,212,166,213,6,213,140,213, |
224,214,26,214,102,214,220,215,70,215,164,215,246,216,8,216,68,216,164,217, |
34,217,88,218,12,218,74,218,114,218,160,218,200,218,242,219,40,219,94,219, |
130,219,208,220,20,220,80,0,0,0,2,0,68,0,0,2,100,5,85,0,3,0,7,0,46,177,1, |
0,47,60,178,7,4,8,237,50,177,6,5,220,60,178,3,2,8,237,50,0,177,3,0,47,60, |
178,5,4,8,237,50,178,7,6,9,252,60,178,1,2,8,237,50,51,17,33,17,37,33,17,33, |
68,2,32,254,36,1,152,254,104,5,85,250,171,68,4,205,0,0,0,2,0,185,0,0,1,127, |
5,129,0,3,0,7,1,172,64,158,3,91,2,2,150,7,166,7,2,7,150,57,4,73,4,89,4,3, |
4,64,23,27,72,6,4,1,11,4,38,9,1,201,9,217,9,2,118,9,166,9,2,25,9,41,9,2,6, |
9,1,215,73,9,1,38,9,1,217,9,1,118,9,1,41,9,1,6,9,1,121,9,1,86,9,1,9,9,1,163, |
169,9,1,130,9,1,84,9,100,9,116,9,3,137,9,1,98,9,114,9,2,68,9,84,9,2,34,9, |
50,9,2,20,9,1,2,9,1,242,9,1,212,9,228,9,2,178,9,194,9,2,148,9,164,9,2,114, |
9,130,9,2,84,9,100,9,2,66,9,1,20,9,36,9,52,9,3,2,9,1,110,9,184,255,128,64, |
17,102,109,72,73,9,1,9,64,94,98,72,45,9,61,9,2,9,184,1,0,64,153,85,88,72, |
9,128,81,84,72,125,9,141,9,157,9,3,95,9,111,9,2,9,128,71,75,72,9,192,67,70, |
72,9,128,63,66,72,125,9,1,91,9,107,9,2,61,9,77,9,2,25,9,41,9,2,11,9,1,55, |
235,9,251,9,2,205,9,221,9,2,171,9,187,9,2,9,64,45,48,72,59,9,75,9,91,9,3, |
29,9,45,9,2,1,203,9,219,9,235,9,3,159,9,175,9,191,9,3,27,9,43,9,59,9,107, |
9,123,9,5,15,9,1,2,127,9,143,9,159,9,191,9,207,9,5,64,9,96,9,2,15,9,31,9, |
2,7,112,1,1,95,1,1,1,5,156,4,2,3,0,63,47,253,206,93,93,1,94,93,93,93,95,113, |
113,113,113,95,114,114,43,114,114,114,94,93,93,93,93,93,43,43,43,113,113, |
43,43,114,43,114,43,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
114,114,114,94,93,93,93,113,113,113,113,114,114,94,93,93,93,93,113,47,94, |
93,43,93,237,113,51,47,237,49,48,1,35,3,51,3,53,51,21,1,103,148,24,196,198, |
194,1,141,3,244,250,127,201,201,0,0,2,0,87,3,198,2,128,5,129,0,3,0,7,0,104, |
64,33,48,3,1,128,3,1,3,16,2,32,2,96,2,112,2,128,2,5,96,2,112,2,2,80,2,96, |
2,176,2,192,2,4,2,184,255,192,179,37,40,72,2,184,255,192,64,32,25,28,72,2, |
48,7,1,128,7,1,7,111,6,127,6,143,6,3,47,6,63,6,2,6,5,32,0,1,0,6,2,3,0,63, |
51,205,93,50,1,47,113,114,205,93,113,220,43,43,93,113,114,205,93,113,49,48, |
1,35,3,51,1,35,3,51,2,106,142,20,184,254,121,141,21,184,3,198,1,187,254,69, |
1,187,0,0,0,2,0,9,0,0,4,105,5,121,0,27,0,31,0,214,64,134,90,25,1,90,21,1, |
68,14,1,68,19,1,54,19,1,68,30,1,38,30,54,30,2,68,23,1,38,23,54,23,2,3,16, |
1,8,29,28,21,20,9,20,20,11,14,15,18,19,10,9,19,12,16,4,10,4,1,0,25,24,5,24, |
24,27,3,3,7,30,31,22,23,6,23,5,6,4,7,8,11,4,12,13,1,14,29,30,4,13,0,15,28, |
31,4,16,17,18,21,22,25,4,17,16,13,1,208,13,1,79,17,143,17,159,17,3,63,17, |
79,17,2,13,17,13,17,5,20,23,24,3,19,3,6,9,10,3,5,0,47,23,51,63,23,51,18,57, |
57,47,47,93,113,93,113,17,23,51,16,205,23,50,17,23,51,16,205,23,50,1,47,51, |
51,135,192,192,192,192,1,23,51,16,135,192,192,192,192,1,47,23,51,135,192, |
192,192,192,1,51,16,135,192,192,192,192,49,48,1,93,93,93,93,93,93,93,93,93, |
93,1,3,33,21,33,3,35,19,33,3,35,19,35,53,51,19,35,53,33,19,51,3,33,19,51, |
3,51,21,33,3,33,19,3,128,78,1,4,254,229,88,110,86,254,149,84,110,84,201,225, |
78,252,1,18,89,110,88,1,107,88,110,88,211,253,64,80,1,106,78,3,117,254,143, |
108,254,104,1,152,254,104,1,152,108,1,113,108,1,152,254,104,1,152,254,104, |
108,254,143,1,113,0,3,0,22,255,114,4,82,5,236,0,48,0,59,0,70,1,46,64,92,154, |
14,1,154,13,1,150,68,1,133,39,1,138,57,154,57,2,137,53,153,53,2,132,37,1, |
118,6,134,6,150,6,3,70,63,86,63,134,63,3,52,38,100,38,116,38,3,37,2,1,25, |
27,1,24,34,55,3,47,9,21,65,3,32,48,1,48,48,16,49,30,111,29,41,111,0,49,32, |
49,2,0,49,32,49,48,49,80,49,112,49,5,8,3,49,184,255,192,179,29,35,72,49,184, |
255,192,64,117,17,22,72,49,4,111,3,64,16,24,72,3,60,111,16,33,66,115,207, |
54,1,157,54,1,5,136,54,1,120,10,216,10,2,199,34,215,34,2,182,34,1,135,34, |
167,34,2,215,65,1,166,65,1,119,65,1,60,16,65,34,10,54,41,49,8,0,125,30,141, |
30,2,26,30,1,30,24,22,64,19,23,72,22,15,21,47,21,63,21,95,21,4,21,55,9,115, |
47,148,4,164,4,2,112,4,128,4,2,5,4,21,4,85,4,101,4,4,46,4,0,0,47,50,50,93, |
93,93,205,237,50,47,93,205,43,51,51,93,93,18,23,57,93,93,93,93,93,93,93,93, |
95,93,93,237,50,1,47,237,214,43,237,47,43,43,95,94,93,113,253,212,237,17, |
18,57,47,114,23,51,205,23,50,49,48,93,0,93,93,93,93,93,93,1,93,93,93,0,93, |
1,93,37,46,1,39,55,30,3,23,17,39,46,3,53,52,62,2,55,53,51,21,30,3,23,7,46, |
1,39,17,30,5,21,20,14,2,7,21,35,1,52,46,2,39,17,62,3,1,20,30,2,23,17,14,3, |
2,6,217,245,34,170,11,46,78,113,78,20,77,148,116,71,64,115,158,95,124,100, |
145,102,66,20,174,20,122,117,59,114,103,88,64,36,56,114,175,119,124,1,160, |
47,81,106,58,65,108,77,42,253,92,40,70,95,55,72,100,61,27,20,9,185,165,37, |
53,87,64,39,5,1,240,5,18,50,83,128,98,84,124,83,44,4,131,131,5,45,80,115, |
75,33,94,105,11,254,67,14,30,41,56,79,109,72,77,131,100,62,6,162,2,24,63, |
80,51,32,15,254,44,4,31,56,81,2,197,54,74,50,33,14,1,165,4,33,52,68,0,0,0, |
0,5,0,73,255,244,6,212,5,141,0,19,0,23,0,43,0,63,0,83,0,212,64,11,118,20, |
134,20,2,121,22,137,22,2,42,184,255,232,64,14,8,12,72,37,24,8,12,72,32,24, |
8,12,72,26,184,255,232,179,8,12,72,17,184,255,232,179,8,12,72,13,184,255, |
232,64,18,8,12,72,7,24,8,12,72,3,24,8,12,72,22,23,20,21,21,184,255,240,64, |
84,23,16,23,21,23,21,0,39,54,180,10,178,0,180,0,44,16,44,32,44,3,0,44,64, |
44,2,0,44,16,44,32,44,80,44,96,44,112,44,224,44,240,44,8,44,64,180,29,178, |
74,180,15,39,1,239,39,255,39,2,39,64,10,13,72,39,79,182,34,184,69,182,24, |
4,22,3,21,18,49,182,15,184,59,182,5,19,0,63,237,244,237,63,63,63,237,244, |
237,1,47,43,113,114,237,244,237,47,93,113,114,253,244,237,17,18,57,57,47, |
47,56,56,17,51,17,51,49,48,0,43,43,43,43,43,43,43,43,1,93,93,1,20,14,2,35, |
34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2, |
53,52,62,2,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,6,212,51,87,116,66,66,115,85,49,48,86,117,68,66,115, |
85,50,251,59,155,3,154,157,251,223,64,114,86,49,50,85,116,66,67,116,85,49, |
49,86,118,4,250,22,43,63,40,42,64,44,22,23,43,63,41,39,63,44,24,251,240,22, |
42,62,40,43,65,44,22,23,43,64,42,38,62,44,24,1,178,125,171,105,45,45,104, |
171,126,133,174,103,41,41,103,174,253,201,5,129,12,41,102,172,131,126,172, |
107,46,46,106,172,127,131,172,102,41,252,37,99,131,78,32,33,78,131,98,95, |
128,79,34,34,79,128,2,124,98,130,78,32,33,78,130,97,95,130,79,34,34,79,130, |
0,0,3,0,72,255,236,5,54,5,137,0,57,0,73,0,89,1,20,64,73,137,1,1,140,36,1, |
123,42,139,42,2,98,82,114,82,130,82,3,102,71,1,127,78,1,91,78,1,73,43,89, |
43,105,43,3,54,48,134,48,2,37,40,1,44,35,124,35,140,35,3,28,5,44,5,60,5,92, |
5,4,10,10,26,10,42,10,3,10,2,26,2,42,2,3,31,184,255,232,64,56,9,13,72,10, |
25,26,25,42,25,3,48,41,38,69,4,54,66,73,23,33,73,58,45,44,140,74,1,74,77, |
18,3,23,3,58,44,80,23,1,3,44,1,23,58,44,44,58,23,3,13,15,54,1,175,54,1,54, |
184,255,192,64,61,9,12,72,54,80,72,63,13,79,13,2,13,143,3,1,141,77,1,98,69, |
114,69,2,54,69,70,69,2,3,74,48,41,77,44,38,18,69,9,8,63,81,144,28,1,192,28, |
1,15,28,63,28,2,28,85,81,8,22,51,80,0,22,0,63,237,63,237,47,93,93,113,237, |
18,23,57,93,93,93,93,1,47,93,237,47,43,93,113,18,23,57,47,47,47,0,93,1,93, |
17,18,57,17,23,57,93,16,205,16,237,16,237,17,23,57,49,48,93,43,0,93,93,93, |
93,1,93,93,93,0,93,93,93,93,1,93,0,93,93,5,34,38,39,14,3,35,34,46,2,53,52, |
62,2,55,46,3,53,52,62,2,51,50,30,2,21,20,14,2,7,30,1,23,62,1,55,23,14,1,7, |
30,1,51,50,54,55,21,14,1,1,52,46,2,35,34,6,21,20,22,23,62,3,3,46,1,39,14, |
1,21,20,30,2,51,50,62,2,4,169,96,144,58,30,76,93,109,64,117,171,110,53,51, |
91,126,75,18,29,22,12,40,85,133,93,73,123,90,50,66,112,148,83,62,146,85,61, |
81,29,145,35,107,70,53,106,49,32,59,26,28,75,254,150,27,48,69,42,96,100,37, |
28,65,116,86,50,74,89,164,66,113,123,35,72,109,73,44,79,68,55,12,66,61,26, |
48,38,23,60,105,143,83,79,129,105,83,33,34,77,78,78,35,66,115,85,49,38,72, |
106,68,75,117,92,75,33,114,201,97,90,199,121,43,139,227,103,54,44,7,9,135, |
11,11,4,121,37,60,43,23,103,91,59,129,56,26,55,65,79,252,158,105,230,122, |
48,148,105,55,95,71,41,19,30,38,0,0,1,0,104,3,198,1,32,5,129,0,3,0,33,64, |
19,48,3,1,128,3,1,3,16,2,32,2,2,2,32,0,1,0,2,3,0,63,205,93,1,47,93,205,93, |
113,49,48,1,35,3,51,1,10,141,21,184,3,198,1,187,0,1,0,127,254,88,2,158,5, |
204,0,22,0,66,64,45,135,13,1,135,9,1,88,20,1,88,2,1,17,24,14,17,72,5,24,14, |
17,72,16,6,16,16,6,128,6,2,6,11,242,0,0,16,0,32,0,3,0,16,27,5,0,0,63,63,1, |
47,93,237,204,93,56,50,49,48,43,43,93,93,93,93,19,52,62,2,55,51,14,3,21,20, |
30,2,23,35,46,3,53,127,42,90,140,97,174,94,137,88,43,43,88,137,94,174,97, |
140,90,42,2,20,139,254,234,220,105,105,221,235,254,139,139,254,236,220,105, |
105,220,234,253,140,0,0,0,1,0,12,254,88,2,43,5,204,0,22,0,72,64,13,136,13, |
1,136,9,1,87,20,1,87,2,1,17,184,255,232,179,14,17,72,5,184,255,232,180,14, |
17,72,16,6,184,255,240,64,16,31,6,143,6,2,6,0,242,143,11,1,11,16,0,5,27,0, |
63,63,1,47,93,253,204,93,56,50,49,48,43,43,93,93,93,93,1,20,14,2,7,35,62, |
3,53,52,46,2,39,51,30,3,21,2,43,42,90,140,97,174,94,137,88,43,43,88,137,94, |
174,97,140,90,42,2,16,140,253,234,220,105,105,220,236,254,139,139,254,235, |
221,105,105,220,234,254,139,0,0,0,0,1,0,33,2,178,2,253,5,129,0,14,0,107,64, |
75,77,5,93,5,109,5,3,75,4,91,4,107,4,3,66,8,82,8,2,67,7,83,7,2,0,6,12,3,13, |
95,4,1,15,4,1,4,3,32,2,48,2,2,2,14,47,10,63,10,2,10,9,8,191,13,207,13,2,16, |
13,32,13,2,13,240,5,1,223,5,1,0,5,1,5,14,3,0,63,204,93,93,93,1,47,93,93,204, |
51,204,93,221,204,93,51,204,113,114,18,23,57,49,48,93,93,93,93,1,37,23,5, |
23,7,11,1,39,55,37,55,5,3,51,1,200,1,8,45,254,230,185,119,150,156,119,189, |
254,232,45,1,11,12,136,4,90,103,132,73,250,72,1,2,255,0,72,248,73,134,107, |
1,41,0,0,0,1,0,100,0,180,4,71,4,158,0,11,0,71,64,46,211,11,1,133,11,1,220, |
4,1,138,4,1,9,1,170,6,16,2,32,2,2,2,217,2,1,56,2,136,2,2,2,0,4,173,9,214, |
7,1,55,7,135,7,2,7,5,179,0,63,51,93,93,51,237,50,50,93,93,1,47,93,51,237, |
50,49,48,93,93,93,93,1,17,35,17,33,53,33,17,51,17,33,21,2,159,147,254,88, |
1,168,147,1,168,2,96,254,84,1,172,146,1,172,254,84,146,0,0,1,0,184,254,250, |
1,129,0,219,0,12,0,78,185,0,4,255,224,183,11,17,72,10,151,0,150,7,184,255, |
192,64,22,9,17,72,7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2, |
12,184,255,192,64,14,38,41,72,12,64,13,16,72,12,7,168,0,155,11,0,47,253,228, |
1,47,43,43,93,113,114,51,43,253,237,49,48,43,37,21,20,14,2,7,35,62,1,53,35, |
53,1,129,9,20,29,20,123,45,49,88,219,168,53,87,75,66,32,65,132,65,219,0,0, |
0,0,1,0,91,1,208,2,79,2,112,0,3,0,33,64,20,0,2,64,2,112,2,3,2,0,0,187,159, |
1,207,1,2,47,1,1,1,0,47,93,113,237,1,47,47,93,49,48,19,53,33,21,91,1,244, |
1,208,160,160,0,0,0,1,0,187,0,0,1,126,0,219,0,3,0,46,64,32,3,150,0,0,144, |
0,2,64,0,80,0,176,0,224,0,240,0,5,144,0,160,0,2,0,64,13,16,72,0,1,155,0,0, |
47,237,1,47,43,93,113,114,237,49,48,51,53,51,21,187,195,219,219,0,1,0,0,255, |
236,2,57,5,204,0,3,0,51,64,26,121,0,137,0,2,1,24,13,17,72,41,2,1,2,16,0,2, |
16,2,32,2,128,2,4,2,0,184,255,240,180,0,1,0,0,19,0,63,63,1,47,56,205,93,56, |
49,48,93,43,93,21,1,51,1,1,155,158,254,105,20,5,224,250,32,0,0,2,0,80,255, |
236,4,35,5,150,0,19,0,39,0,112,64,80,89,37,105,37,2,70,33,86,33,102,33,3, |
86,27,102,27,2,89,23,105,23,2,4,18,1,118,17,134,17,2,121,13,137,13,2,11,12, |
1,11,8,1,121,7,137,7,2,118,3,134,3,2,4,2,1,7,0,110,64,144,20,160,20,2,20, |
41,128,30,110,63,10,1,10,25,115,15,7,35,115,5,25,0,63,237,63,237,1,47,93, |
237,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93,93,93,93,93,1,20, |
2,14,1,35,34,46,1,2,53,52,18,62,1,51,50,30,1,18,7,52,46,2,35,34,14,2,21,20, |
30,2,51,50,62,2,4,35,77,133,180,102,103,178,131,75,75,132,180,106,101,177, |
132,76,183,40,78,113,72,76,116,79,40,41,79,114,73,71,114,79,43,2,193,203, |
254,235,171,74,74,170,1,21,204,213,1,23,166,67,67,166,254,233,213,168,223, |
133,55,56,133,223,167,162,222,135,59,59,135,222,0,1,0,156,0,0,4,15,5,129, |
0,10,0,94,64,32,32,9,128,9,2,9,9,8,110,2,144,4,1,4,47,1,143,1,2,1,1,4,6,3, |
0,2,16,2,2,7,2,5,184,255,240,64,26,16,22,72,68,5,84,5,100,5,3,5,4,3,16,16, |
22,72,4,3,6,6,8,1,116,0,24,0,63,237,50,63,51,51,43,47,51,93,43,1,47,94,93, |
23,51,47,93,47,93,16,237,50,47,93,49,48,51,53,33,17,5,53,37,51,17,33,21,156, |
1,103,254,194,1,77,166,1,87,153,4,60,227,170,229,251,24,153,0,0,0,1,0,103, |
0,0,4,12,5,150,0,40,0,161,64,77,117,4,1,117,26,133,26,2,122,16,138,16,2,101, |
37,1,86,37,1,41,33,89,33,105,33,3,105,35,1,28,35,1,25,21,1,117,27,133,27, |
2,6,27,1,39,29,110,64,8,64,38,42,72,64,8,1,143,8,1,8,42,128,18,110,19,116, |
38,132,38,2,19,38,16,0,32,0,2,0,184,255,192,64,31,30,38,72,0,8,38,142,18, |
1,92,18,108,18,124,18,3,10,18,26,18,2,18,13,115,24,7,1,38,116,0,24,0,63,237, |
57,63,237,51,93,93,93,18,57,1,47,43,93,51,51,93,47,237,26,16,220,93,113,43, |
26,237,50,49,48,93,93,0,93,93,93,93,1,93,93,0,93,93,93,51,53,62,5,53,52,46, |
2,35,34,14,2,7,39,62,3,51,50,30,2,21,20,14,6,7,33,21,103,51,147,162,159,128, |
79,36,68,95,58,54,95,74,47,7,184,9,66,116,163,107,105,164,113,60,51,85,112, |
122,124,109,86,24,2,223,127,117,179,145,124,124,136,86,60,91,62,31,30,60, |
89,59,17,76,134,101,58,50,98,144,94,71,128,116,108,103,101,102,105,57,153, |
0,0,0,0,1,0,78,255,236,4,25,5,150,0,59,0,216,64,149,122,3,138,3,2,117,2,133, |
2,2,117,58,133,58,2,117,51,133,51,2,117,47,133,47,2,117,13,133,13,2,122,37, |
138,37,2,91,17,107,17,2,26,41,1,21,8,1,118,46,134,46,2,7,46,1,73,39,1,38, |
110,54,25,49,95,25,111,25,2,39,25,39,25,10,19,32,110,49,49,0,110,64,31,19, |
47,19,159,19,3,144,19,1,19,61,128,11,110,239,10,1,63,10,1,10,54,25,116,26, |
26,16,141,38,1,92,38,108,38,124,38,3,10,38,26,38,2,38,35,115,44,7,16,115, |
129,11,1,83,11,99,11,115,11,3,20,11,1,5,11,1,11,5,25,0,63,51,93,93,93,93, |
237,63,237,51,93,93,93,18,57,47,237,57,1,47,93,113,237,26,16,220,93,113,26, |
237,50,47,237,17,18,57,57,47,47,93,17,18,57,237,113,49,48,0,93,93,93,93,1, |
93,0,93,93,1,93,93,93,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,14, |
2,7,21,30,3,4,25,63,121,179,115,131,179,116,58,9,186,8,43,74,108,74,136,155, |
69,103,121,51,102,98,51,110,91,59,133,131,119,147,12,181,11,80,123,158,89, |
118,170,108,51,34,72,111,78,85,126,82,41,1,133,97,152,105,55,65,107,137,73, |
17,56,92,66,36,134,132,78,95,53,18,156,21,55,94,73,113,131,122,111,14,93, |
138,91,45,59,101,136,77,62,108,86,62,16,4,9,59,88,112,0,0,2,0,47,0,0,4,55, |
5,129,0,10,0,23,0,117,64,80,154,15,1,153,6,1,136,6,1,133,16,149,16,2,118, |
16,1,24,22,1,118,22,134,22,150,22,3,22,5,64,12,21,72,5,91,10,107,10,123,10, |
3,10,8,1,111,23,6,31,2,1,112,2,224,2,2,0,2,16,2,48,2,80,2,224,2,5,8,2,0,4, |
115,8,22,22,1,11,6,6,1,24,0,63,63,51,18,57,47,51,237,50,1,47,94,93,113,114, |
51,51,237,50,50,93,47,43,51,93,113,49,48,93,93,93,93,0,93,1,17,35,17,33,53, |
1,51,17,51,21,1,14,3,7,1,14,3,7,33,3,113,170,253,104,2,133,189,198,254,144, |
2,16,20,21,8,254,151,5,19,20,20,6,1,242,1,63,254,193,1,63,140,3,182,252,76, |
142,3,119,5,29,36,37,12,253,236,8,26,27,26,7,0,1,0,82,255,236,4,29,5,129, |
0,44,0,181,64,28,86,13,102,13,134,13,3,85,2,101,2,2,90,3,106,3,2,85,43,101, |
43,2,85,42,101,42,2,38,184,255,216,64,89,14,17,72,21,8,1,6,10,1,25,36,153, |
36,2,137,36,217,36,2,3,68,33,1,6,35,32,14,17,72,35,11,0,110,64,31,21,1,47, |
21,159,21,2,144,21,1,21,46,128,36,31,37,110,33,32,32,11,110,208,10,1,63,10, |
1,10,26,115,40,40,16,36,116,33,6,16,115,115,11,131,11,2,103,11,1,22,11,1, |
11,5,25,0,63,51,93,93,93,237,63,237,18,57,47,237,1,47,93,113,237,51,47,51, |
237,50,50,26,16,220,93,113,114,26,237,17,57,43,49,48,95,113,95,113,114,0, |
93,1,93,0,43,93,1,93,0,93,1,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50, |
62,2,53,52,46,2,35,34,14,2,7,35,19,33,21,33,3,62,1,51,50,30,2,4,29,64,126, |
187,123,111,165,114,67,14,182,11,40,69,101,72,70,114,81,44,42,78,113,72,45, |
76,65,53,23,176,47,3,33,253,131,27,48,144,99,105,168,118,64,1,203,106,176, |
127,70,52,91,122,70,21,40,75,59,35,43,84,122,79,65,109,79,44,16,28,37,20, |
2,246,153,254,65,37,53,64,117,162,0,0,0,0,2,0,104,255,236,4,25,5,150,0,36, |
0,56,0,175,64,48,140,21,1,122,22,138,22,2,89,7,105,7,2,90,3,106,3,122,3,3, |
84,2,100,2,2,84,35,100,35,116,35,3,84,34,100,34,116,34,3,53,30,69,30,2,133, |
50,1,50,184,255,240,64,45,10,13,72,132,26,1,37,26,53,26,69,26,117,26,4,22, |
26,1,21,111,20,20,0,110,64,47,37,159,37,2,144,37,1,37,58,128,47,29,110,16, |
10,32,10,2,10,184,255,192,64,24,30,38,72,10,29,42,117,32,32,52,24,115,25, |
21,153,21,2,21,15,7,52,115,5,25,0,63,237,63,51,93,237,18,57,47,237,50,1,47, |
43,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,93,93,43,93,0,93, |
93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,46,1,2,53,52,18,62,1,51,50,30,2, |
23,7,46,1,35,34,14,2,21,62,1,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,25,59,115,170,111,123,184,122,61,69,130,187,118,72,126,103,78,23, |
172,28,123,81,74,120,84,45,49,178,115,96,156,111,61,183,36,72,106,70,49,100, |
81,51,40,75,106,66,65,103,72,38,1,205,106,177,127,71,94,177,1,1,164,188,1, |
28,190,96,30,67,110,80,31,91,81,70,139,210,140,91,95,62,117,167,112,73,118, |
83,45,29,65,106,76,78,135,100,58,45,85,122,0,0,1,0,105,0,0,4,12,5,129,0,14, |
0,68,64,45,122,11,138,11,2,105,11,1,5,110,6,6,0,80,12,1,16,12,32,12,2,12, |
11,95,0,1,0,0,32,0,64,0,96,0,128,0,5,0,0,12,116,13,6,5,24,0,63,63,237,50, |
1,47,93,113,51,47,93,113,18,57,47,237,49,48,93,93,1,6,10,2,21,35,52,26,2, |
55,33,53,33,4,12,106,178,128,71,188,80,136,180,101,253,11,3,163,4,239,162, |
254,213,254,209,254,193,180,169,1,69,1,57,1,46,147,153,0,0,0,0,3,0,89,255, |
236,4,26,5,150,0,41,0,61,0,81,0,191,64,132,117,40,133,40,2,117,33,133,33, |
2,117,29,133,29,2,117,28,133,28,2,117,24,133,24,2,122,23,138,23,2,122,19, |
138,19,2,122,12,1,122,8,138,8,2,122,7,138,7,2,122,3,138,3,2,117,2,133,2,2, |
85,69,101,69,2,85,75,101,75,2,90,65,106,65,2,52,110,21,42,110,31,15,36,31, |
79,21,1,21,31,21,31,10,0,110,64,15,62,31,62,2,31,62,47,62,159,62,3,144,62, |
1,62,83,128,72,110,208,10,1,10,36,15,67,117,57,57,77,47,117,26,7,77,117,5, |
25,0,63,237,63,237,18,57,47,237,57,57,1,47,113,237,26,16,220,93,113,114,26, |
237,17,57,57,47,47,113,18,57,57,16,237,16,237,49,48,93,93,93,93,0,93,93,1, |
93,93,93,93,0,93,93,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3, |
53,52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,3,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,26,57,117,182, |
124,124,181,119,57,47,79,101,54,59,93,63,33,57,112,166,109,115,169,111,54, |
33,63,93,61,61,104,76,44,222,27,62,100,73,71,98,63,28,22,58,102,80,85,103, |
55,17,35,28,68,115,86,79,111,69,32,32,70,114,81,82,112,68,29,1,137,90,151, |
110,62,62,109,151,89,77,120,87,53,9,4,14,62,87,106,59,74,131,99,57,58,99, |
132,74,58,106,87,61,12,4,10,53,87,120,2,76,53,88,63,35,35,63,88,53,42,88, |
72,46,46,72,88,253,163,51,95,73,45,45,74,97,52,65,107,77,42,42,77,109,0,0, |
0,2,0,96,255,236,4,18,5,150,0,36,0,56,0,190,64,105,169,39,1,163,11,1,149, |
12,165,12,2,170,17,1,153,17,1,116,35,132,35,2,116,32,132,32,148,32,3,122, |
31,138,31,154,31,3,122,27,138,27,154,27,3,123,26,139,26,155,26,3,90,40,106, |
40,2,89,2,105,2,2,16,24,10,13,72,54,8,1,37,0,110,47,19,63,19,2,79,19,191, |
19,2,0,19,32,19,48,19,64,19,176,19,5,7,19,58,11,111,10,10,47,110,32,29,1, |
29,184,255,192,64,27,32,38,72,29,19,52,115,95,24,111,24,2,24,24,5,42,115, |
34,7,14,115,23,11,1,11,5,25,0,63,51,93,237,63,237,17,57,47,93,237,50,1,47, |
43,93,237,51,47,237,16,220,94,93,113,114,237,51,49,48,93,43,93,93,0,93,1, |
93,93,0,93,93,1,93,93,0,93,93,1,93,1,20,2,14,1,35,34,46,2,39,55,30,1,51,50, |
62,2,55,14,3,35,34,46,2,53,52,62,2,51,50,18,7,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,4,18,71,132,189,118,81,130,102,72,22,172,28,119,91,73,121,85, |
48,2,21,73,93,108,55,96,155,108,59,63,120,175,111,235,242,196,37,73,107,70, |
65,104,72,39,35,70,104,69,50,103,83,53,2,221,188,254,229,188,94,33,70,112, |
79,27,91,85,69,138,208,140,47,74,51,27,69,124,175,107,109,176,123,66,254, |
164,175,78,138,102,59,46,85,122,75,71,122,89,51,34,70,107,0,0,0,0,2,0,187, |
0,0,1,126,4,58,0,3,0,7,0,54,64,36,3,7,150,0,0,4,144,4,2,64,4,80,4,224,4,240, |
4,4,144,4,160,4,2,4,64,13,16,72,4,5,156,4,0,156,1,15,0,63,237,47,237,1,47, |
43,93,113,114,51,237,50,49,48,19,53,51,21,3,53,51,21,187,195,195,195,3,107, |
207,207,252,149,207,207,0,0,0,2,0,184,254,250,1,129,4,58,0,12,0,16,0,89,185, |
0,4,255,224,64,10,11,17,72,16,10,151,0,150,13,7,184,255,192,64,22,9,17,72, |
7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2,12,184,255,192,64, |
18,38,41,72,12,64,13,16,72,12,13,156,14,15,7,168,0,156,11,0,47,253,228,63, |
237,1,47,43,43,93,113,114,51,43,51,253,237,51,49,48,43,37,21,20,14,2,7,35, |
62,1,53,35,53,17,53,51,21,1,129,9,20,29,20,123,45,49,88,195,207,156,53,87, |
75,66,32,65,132,65,207,2,156,207,207,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106, |
185,0,5,255,216,64,17,18,22,72,3,40,18,22,72,0,40,18,22,72,137,0,1,1,184, |
255,216,64,51,18,22,72,134,1,1,6,0,2,32,2,80,2,112,2,4,2,32,0,1,0,63,6,127, |
6,143,6,3,6,48,2,112,2,128,2,3,2,1,0,15,4,63,4,111,4,159,4,207,4,5,4,0,25, |
47,93,51,51,205,93,205,93,1,24,47,93,47,93,51,49,48,0,93,43,93,43,43,43,19, |
53,1,21,9,1,21,101,3,227,252,166,3,90,2,59,205,1,162,154,254,146,254,145, |
153,0,0,0,0,2,0,100,1,88,4,71,3,236,0,3,0,7,0,70,64,49,7,64,2,96,2,2,0,2, |
32,2,112,2,208,2,4,2,4,223,0,1,32,0,1,0,4,173,31,5,47,5,95,5,111,5,223,5, |
5,5,0,173,80,1,208,1,2,15,1,1,1,0,47,93,93,237,222,93,237,1,47,93,93,51,47, |
93,113,51,49,48,19,53,33,21,1,53,33,21,100,3,227,252,29,3,227,3,88,148,148, |
254,0,148,148,0,0,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106,185,0,1,255,216, |
64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137,6,1,5,184,255,216,64,51,18, |
22,72,134,5,1,0,6,32,6,80,6,112,6,4,6,3,32,0,1,0,6,5,48,4,112,4,128,4,3,4, |
63,0,127,0,143,0,3,0,15,2,63,2,111,2,159,2,207,2,5,2,0,25,47,93,205,93,205, |
93,51,51,1,24,47,93,51,47,93,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21, |
101,3,90,252,166,3,227,154,153,1,111,1,110,154,254,94,205,0,2,0,84,0,0,4, |
39,5,150,0,37,0,41,0,137,64,68,117,36,133,36,2,117,35,133,35,2,90,26,106, |
26,2,90,21,1,90,14,122,14,138,14,3,90,13,122,13,138,13,3,58,6,74,6,2,9,72, |
10,10,176,41,192,41,2,41,150,38,38,19,27,70,28,0,70,0,19,32,19,64,19,144, |
19,176,19,5,19,184,255,192,64,23,38,44,72,19,19,33,95,10,143,10,2,10,39,156, |
38,76,27,1,27,24,95,33,4,0,63,237,51,93,47,253,198,93,17,57,1,47,43,93,237, |
47,237,18,57,47,237,113,51,47,237,49,48,0,93,1,93,93,0,93,93,93,1,93,1,20, |
14,6,7,35,62,7,53,52,46,2,35,34,6,7,39,62,3,51,50,30,2,1,53,51,21,4,39,37, |
62,79,82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184, |
11,67,121,179,122,114,178,123,64,253,143,195,4,8,71,108,85,67,60,58,68,83, |
55,69,104,80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103, |
148,251,157,201,201,0,0,0,0,2,0,161,254,229,7,110,5,204,0,93,0,114,1,101, |
64,255,122,17,138,17,2,117,15,133,15,2,117,27,133,27,2,121,47,137,47,2,116, |
38,132,38,2,102,38,1,99,70,1,86,69,102,69,2,123,26,139,26,2,73,26,1,74,56, |
90,56,106,56,3,59,102,1,82,63,1,54,63,70,63,2,82,64,1,38,64,54,64,70,64,3, |
131,3,1,37,3,53,3,69,3,3,37,2,53,2,69,2,133,2,4,25,8,57,8,2,11,8,1,11,8,27, |
8,2,8,32,12,17,72,22,92,102,92,134,92,3,80,58,96,58,2,5,58,21,58,53,58,69, |
58,4,137,57,1,93,57,1,10,57,26,57,2,9,7,1,125,52,141,52,2,11,52,75,52,2,10, |
22,26,22,42,22,3,104,212,24,37,41,211,10,112,34,132,72,1,72,10,49,80,24,1, |
80,24,1,24,10,24,10,82,0,210,64,95,49,111,49,2,143,49,159,49,2,49,116,128, |
61,210,0,82,16,82,32,82,3,82,44,213,5,5,107,214,19,99,214,29,36,29,47,19, |
63,19,79,19,3,32,29,48,29,64,29,3,19,29,19,29,77,54,214,89,0,149,71,1,71, |
66,214,77,0,47,237,51,93,63,237,18,57,57,47,47,93,93,17,51,16,237,16,237, |
51,47,237,1,47,93,237,26,16,220,93,113,26,237,18,57,57,47,47,93,114,17,18, |
57,93,50,50,16,237,50,16,237,49,48,93,93,93,93,0,93,93,93,1,93,93,93,43,93, |
0,93,93,1,93,93,93,0,93,93,1,93,93,0,93,93,1,93,93,0,93,93,1,93,93,93,0,93, |
1,93,0,93,1,20,14,2,35,34,46,2,53,52,54,55,35,14,3,35,34,46,2,53,52,62,2, |
51,50,30,2,23,51,55,51,3,14,1,21,20,22,51,50,62,2,53,52,46,2,35,34,14,4,21, |
20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,62,2,36,51,50,4,22,18, |
5,52,46,2,35,34,14,2,21,20,22,51,50,62,2,55,62,1,7,110,67,118,165,97,56,79, |
50,22,2,1,6,24,69,93,117,71,84,125,81,40,71,132,185,114,60,96,73,54,18,6, |
39,156,116,19,18,43,38,62,107,79,45,83,161,238,156,134,227,184,139,94,48, |
86,165,243,158,105,182,152,120,44,55,50,135,166,196,111,190,254,217,203,105, |
63,118,170,215,0,255,144,201,1,36,191,92,253,162,34,63,89,56,86,130,87,45, |
95,99,69,120,96,70,18,9,14,2,243,144,239,172,96,27,47,64,38,15,43,12,45,89, |
69,43,58,103,141,83,120,221,169,102,27,48,67,40,160,254,6,84,120,49,48,46, |
81,142,192,112,129,222,162,92,64,116,161,192,219,115,141,238,171,96,33,48, |
57,24,112,30,63,52,33,115,206,1,28,169,139,1,0,220,180,128,70,118,200,254, |
248,155,50,84,60,33,85,138,173,87,120,136,62,102,132,71,36,80,0,0,0,0,2,0, |
4,0,0,5,82,5,129,0,7,0,20,1,18,64,206,102,2,118,2,134,2,3,102,19,118,19,134, |
19,3,105,1,121,1,137,1,3,105,20,121,20,137,20,3,115,6,131,6,2,101,6,1,124, |
5,140,5,2,106,5,1,122,0,138,0,2,57,0,89,0,105,0,3,117,3,133,3,2,54,3,86,3, |
102,3,3,90,4,1,72,4,1,85,7,1,71,7,1,19,2,3,1,20,0,21,6,37,6,53,6,3,6,6,1, |
230,6,246,6,2,26,5,42,5,58,5,3,9,5,1,233,5,249,5,2,6,5,13,13,4,26,0,42,0, |
58,0,3,9,0,1,233,0,249,0,2,0,16,7,32,7,48,7,3,32,7,1,7,7,22,21,3,37,3,53, |
3,3,6,3,1,230,3,246,3,2,3,175,4,191,4,2,4,80,22,176,22,2,48,22,96,22,144, |
22,192,22,240,22,5,47,22,1,1,2,95,20,19,19,118,13,1,13,5,3,4,0,18,0,63,50, |
63,51,93,57,47,51,237,50,1,93,93,113,47,93,51,93,113,113,17,51,47,93,113, |
51,93,113,113,18,57,61,47,51,51,93,113,113,93,113,113,18,57,57,18,57,57,49, |
48,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,3,33,3,35,1,51,9,1, |
46,3,39,14,3,7,3,33,4,143,161,253,126,162,198,2,63,217,2,54,253,174,16,29, |
22,15,1,2,14,23,29,15,180,2,15,1,156,254,100,5,129,250,127,4,2,40,82,67,45, |
5,5,46,68,82,40,254,49,0,3,0,168,0,0,4,234,5,129,0,22,0,33,0,46,0,155,64, |
108,155,24,171,24,2,147,32,1,133,32,1,147,45,1,117,45,133,45,2,122,36,138, |
36,154,36,3,5,11,21,11,37,11,3,6,2,22,2,38,2,3,171,18,1,159,18,1,107,18,123, |
18,139,18,3,18,28,13,90,23,64,13,17,72,23,23,41,0,90,64,31,34,47,34,2,175, |
34,1,34,48,128,28,41,90,0,6,16,6,64,6,3,7,6,18,40,95,127,28,1,28,28,41,27, |
95,7,3,41,95,6,18,0,63,237,63,237,18,57,47,113,237,57,1,47,94,93,237,50,26, |
16,220,93,113,26,237,18,57,47,43,237,17,57,93,93,93,49,48,93,93,0,93,93,93, |
93,93,93,1,20,14,2,35,33,17,33,50,30,2,21,20,14,2,7,30,3,1,52,38,35,33,17, |
33,50,62,2,19,52,46,2,35,33,17,33,50,62,2,4,234,84,142,188,104,253,196,2, |
0,117,184,128,67,33,67,101,67,85,131,88,46,254,238,156,148,254,191,1,65,84, |
116,72,32,81,49,92,129,80,254,156,1,115,73,123,89,50,1,141,107,151,95,44, |
5,129,39,84,129,90,59,104,85,61,15,10,58,90,119,2,66,114,98,254,66,33,61, |
86,253,190,67,94,60,28,254,4,24,60,100,0,1,0,104,255,236,5,121,5,150,0,39, |
0,173,64,79,121,14,137,14,2,117,13,133,13,2,123,37,139,37,2,106,38,1,124, |
36,140,36,2,106,36,1,106,28,1,85,7,1,90,3,1,42,29,106,29,2,134,23,1,42,23, |
106,23,2,5,8,21,8,2,5,2,21,2,2,5,91,80,26,96,26,2,175,26,191,26,2,32,26,1, |
15,26,1,26,34,16,184,255,192,64,42,7,13,72,16,16,41,32,41,1,79,35,1,35,35, |
0,95,31,4,0,15,16,15,2,48,15,64,15,112,15,128,15,192,15,208,15,6,15,15,10, |
95,21,19,0,63,237,51,47,93,113,63,237,51,47,93,1,93,17,51,47,43,51,47,93, |
93,93,113,237,49,48,93,93,93,93,93,0,93,93,1,93,93,93,93,0,93,93,1,93,1,34, |
14,2,21,20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,120,185,125,64,69,129,187,117,82,135,109,86,33,156,38,112, |
151,191,118,171,254,255,173,86,91,175,1,0,164,225,1,46,71,181,20,68,102,137, |
4,250,80,148,208,127,127,211,152,84,43,78,107,65,78,79,136,100,57,109,195, |
1,12,159,165,1,10,187,101,176,173,60,50,91,70,42,0,2,0,168,0,0,5,101,5,129, |
0,12,0,25,0,100,64,70,169,24,1,123,24,1,172,23,1,27,23,43,23,59,23,123,23, |
4,169,16,1,27,16,43,16,59,16,123,16,4,123,15,1,153,3,1,121,2,1,0,90,64,47, |
13,1,13,27,128,64,27,1,20,90,0,6,16,6,64,6,3,7,6,19,95,7,3,20,95,6,18,0,63, |
237,63,237,1,47,94,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93, |
93,93,93,1,20,2,14,1,35,33,17,33,50,4,22,18,7,52,46,2,35,33,17,33,50,62,2, |
5,101,106,184,251,145,253,241,1,210,163,1,19,198,111,192,82,148,206,123,254, |
241,1,58,111,189,138,78,2,207,176,254,243,181,93,5,129,81,169,254,252,180, |
143,203,130,61,251,177,72,142,212,0,0,1,0,168,0,0,4,254,5,129,0,11,0,77,181, |
7,3,7,3,0,10,184,255,192,64,37,7,11,72,10,10,13,5,9,90,0,0,16,0,64,0,3,7, |
0,32,13,1,8,95,127,5,1,5,5,9,4,95,1,3,9,95,0,18,0,63,237,63,237,18,57,47, |
113,237,1,93,47,94,93,237,50,17,51,47,43,18,57,57,47,47,49,48,51,17,33,21, |
33,17,33,21,33,17,33,21,168,4,45,252,146,3,50,252,206,3,151,5,129,156,254, |
60,154,254,21,156,0,0,1,0,168,0,0,4,145,5,129,0,9,0,105,185,0,2,255,192,182, |
13,24,72,2,2,6,8,184,255,192,64,58,7,12,72,8,8,11,1,5,90,0,6,16,6,64,6,3, |
7,6,48,11,1,4,95,239,1,1,15,1,63,1,111,1,127,1,159,1,175,1,207,1,223,1,8, |
8,1,64,23,30,72,1,1,5,0,95,7,3,5,18,0,63,63,237,18,57,47,43,94,93,113,237, |
1,93,47,94,93,237,50,17,51,47,43,18,57,47,43,49,48,1,17,33,21,33,17,35,17, |
33,21,1,103,3,18,252,238,191,3,233,4,229,253,244,158,253,197,5,129,156,0, |
1,0,103,255,236,5,160,5,150,0,45,0,185,64,130,134,43,1,106,43,1,66,37,82, |
37,2,5,24,21,24,85,24,3,86,23,1,86,19,1,5,18,21,18,85,18,3,122,12,138,12, |
2,89,12,105,12,2,106,3,1,106,2,1,73,37,89,37,2,53,29,1,123,13,139,13,2,64, |
10,1,10,10,36,92,31,64,33,33,0,127,31,143,31,2,31,47,128,32,47,96,47,128, |
47,3,21,91,175,0,191,0,2,32,0,1,15,0,1,0,33,95,240,34,1,34,34,5,26,95,41, |
19,16,95,5,48,11,64,11,2,144,11,224,11,2,11,11,5,4,0,63,51,47,93,113,16,237, |
63,237,17,57,47,93,237,1,47,93,93,93,237,93,26,16,204,93,17,57,47,26,16,237, |
50,47,93,49,48,0,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,19,52,18,54, |
36,51,50,30,2,23,7,46,3,35,34,14,2,21,20,30,2,51,50,62,2,55,53,33,53,33,17, |
14,3,35,34,36,38,2,103,89,177,1,6,173,130,196,144,100,35,182,26,73,104,137, |
88,128,189,124,61,66,130,193,127,83,140,113,86,29,254,91,2,85,47,127,158, |
188,107,178,254,246,177,89,2,199,165,1,10,187,101,46,86,123,77,54,52,85,60, |
33,80,148,208,127,127,211,153,85,28,45,55,28,254,160,254,26,48,87,66,38,109, |
195,1,12,0,0,0,0,1,0,168,0,0,5,32,5,129,0,11,0,103,64,29,11,90,64,8,143,0, |
159,0,175,0,223,0,4,0,13,128,64,13,1,64,13,192,13,208,13,224,13,4,13,184, |
255,192,64,37,14,17,72,7,3,90,0,4,16,4,64,4,3,7,4,2,95,80,7,1,176,7,224,7, |
2,15,7,1,8,7,7,9,5,3,4,0,18,0,63,50,63,51,57,47,94,93,93,113,237,1,47,94, |
93,237,50,43,93,113,26,16,220,93,50,26,237,49,48,33,17,33,17,35,17,51,17, |
33,17,51,17,4,97,253,6,191,191,2,250,191,2,141,253,115,5,129,253,172,2,84, |
250,127,0,0,0,1,0,189,0,0,1,124,5,129,0,3,0,122,64,70,3,90,15,0,1,12,0,0, |
1,61,16,0,32,0,208,0,3,96,0,112,0,2,0,0,16,0,64,0,80,0,176,0,5,7,0,175,5, |
1,0,5,160,5,176,5,3,0,5,16,5,64,5,80,5,160,5,176,5,192,5,240,5,8,32,5,144, |
5,240,5,3,5,184,255,192,179,56,61,72,5,184,255,192,179,45,48,72,5,184,255, |
192,182,13,16,72,1,3,0,18,0,63,63,1,43,43,43,93,113,114,93,47,94,93,113,114, |
94,93,94,93,237,49,48,51,17,51,17,189,191,5,129,250,127,0,0,0,1,0,32,255, |
236,3,104,5,129,0,21,0,124,64,15,137,2,1,130,5,1,123,10,1,100,6,116,6,2,6, |
184,255,224,64,66,14,17,72,0,14,32,14,2,128,14,144,14,224,14,240,14,4,14, |
14,3,17,90,64,64,12,80,12,96,12,3,111,12,1,12,23,128,15,3,1,3,32,23,1,32, |
23,64,23,80,23,96,23,4,14,95,15,3,9,95,0,64,4,1,4,4,0,19,0,63,50,47,93,16, |
237,63,237,1,93,113,47,113,26,16,220,93,113,26,237,18,57,47,93,113,49,48, |
0,43,1,93,93,93,0,93,5,34,38,39,55,30,3,51,50,54,53,17,33,53,33,17,20,14, |
2,1,201,171,219,35,187,10,46,64,78,41,104,120,254,241,1,205,56,107,154,20, |
178,192,31,65,93,60,28,143,138,3,69,156,252,35,101,162,115,62,0,1,0,168,0, |
0,5,63,5,129,0,11,0,154,64,103,171,1,1,157,1,1,138,8,154,8,2,138,1,154,1, |
170,1,3,102,2,1,131,7,147,7,2,100,7,1,157,0,173,0,2,107,0,123,0,139,0,3,89, |
0,1,86,10,1,155,10,1,36,10,1,1,10,106,8,250,8,2,8,10,144,9,160,9,2,9,9,0, |
11,16,0,11,1,11,11,13,7,2,3,90,0,4,16,4,64,4,3,7,4,7,10,1,2,4,4,8,5,3,0,4, |
18,0,63,51,63,51,18,23,57,1,47,94,93,237,50,50,17,51,47,93,56,51,57,47,93, |
57,51,113,17,51,49,48,0,93,93,1,93,93,93,93,0,93,93,93,1,93,93,0,93,93,33, |
1,7,17,35,17,51,17,1,51,9,1,4,82,253,205,184,191,191,2,167,225,253,168,2, |
168,2,168,140,253,228,5,129,253,62,2,194,253,156,252,227,0,0,0,0,1,0,168, |
0,0,4,47,5,129,0,5,0,56,64,40,16,4,48,4,2,0,4,16,4,32,4,64,4,96,4,128,4,160, |
4,240,4,8,4,3,90,0,0,16,0,64,0,3,7,0,1,3,3,95,0,18,0,63,237,63,1,47,94,93, |
237,47,93,113,49,48,51,17,51,17,33,21,168,191,2,200,5,129,251,27,156,0,0, |
0,0,1,0,168,0,0,6,2,5,129,0,44,2,44,64,12,152,41,1,151,31,1,12,16,18,24,72, |
12,184,255,240,179,13,17,72,13,184,255,240,64,27,18,24,72,40,13,1,13,16,13, |
17,72,42,32,33,37,72,42,32,18,28,72,42,32,9,17,72,30,184,255,224,179,33,37, |
72,30,184,255,224,179,18,28,72,30,184,255,224,64,255,9,17,72,13,12,36,36, |
27,44,92,42,36,0,52,0,2,212,0,1,139,0,155,0,2,4,0,1,8,0,46,139,46,1,116,46, |
1,59,46,1,203,46,1,180,46,1,11,46,1,207,171,46,1,52,46,1,32,46,1,20,46,1, |
0,46,1,244,46,1,208,46,1,196,46,1,176,46,1,116,46,132,46,164,46,3,96,46,1, |
84,46,1,64,46,1,52,46,1,16,46,1,4,46,1,151,240,46,1,180,46,196,46,228,46, |
3,160,46,1,116,46,148,46,2,80,46,1,68,46,1,48,46,1,4,46,36,46,2,244,46,1, |
224,46,1,180,46,212,46,2,144,46,1,132,46,1,112,46,1,52,46,68,46,100,46,3, |
32,46,1,20,46,1,244,46,1,208,46,1,116,46,132,46,164,46,196,46,4,96,46,1,52, |
46,84,46,2,16,46,1,4,46,1,103,116,46,148,46,180,46,196,46,228,46,5,80,46, |
1,4,46,36,46,68,46,3,20,46,52,46,68,46,100,46,132,46,180,46,212,46,244,46, |
8,164,46,196,46,244,46,3,139,46,1,4,46,52,46,84,46,116,46,4,55,64,83,228, |
46,1,203,46,1,36,46,68,46,116,46,148,46,180,46,5,11,46,1,212,46,244,46,2, |
187,46,1,100,46,132,46,2,75,46,1,20,46,52,46,2,251,46,1,164,46,196,46,228, |
46,3,128,46,1,2,64,46,80,46,112,46,3,63,46,1,0,46,32,46,2,30,27,92,0,28,64, |
28,2,7,28,6,21,21,184,255,192,64,16,18,37,72,42,21,29,3,75,36,1,0,13,36,3, |
28,18,0,63,23,51,93,63,51,51,43,17,51,1,47,94,93,237,50,93,93,93,95,93,93, |
93,113,113,113,113,113,114,114,114,114,94,93,93,93,113,114,114,114,94,93, |
93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,94,93, |
93,93,113,113,113,16,220,94,93,93,93,113,50,237,18,57,61,47,51,51,49,48,43, |
43,43,43,43,43,43,93,43,43,43,93,93,33,17,52,54,55,54,55,6,7,14,1,7,1,35, |
1,46,3,39,38,39,22,23,30,1,21,17,35,17,51,1,30,3,23,62,3,55,1,51,17,5,86, |
2,2,2,3,14,15,13,31,15,254,148,134,254,143,6,13,15,15,7,17,16,1,2,2,2,170, |
251,1,119,7,20,18,15,3,3,16,21,20,8,1,112,245,3,172,51,106,44,51,48,51,50, |
43,97,39,252,64,3,192,15,40,45,47,23,53,57,56,55,47,103,39,252,84,5,129,252, |
47,20,63,66,59,16,16,60,66,62,20,3,209,250,127,0,0,0,0,1,0,168,0,0,5,32,5, |
129,0,19,0,196,185,0,10,255,224,64,39,12,43,72,54,10,70,10,2,0,32,12,43,72, |
41,0,57,0,73,0,3,11,16,29,33,72,11,32,18,28,72,150,11,166,11,2,41,11,1,1, |
184,255,240,179,29,33,72,1,184,255,224,64,53,18,28,72,154,1,170,1,2,3,38, |
1,1,19,92,0,68,16,84,16,148,16,3,224,16,1,2,0,16,48,16,64,16,112,16,192,16, |
208,16,6,16,64,21,1,64,21,192,21,208,21,224,21,4,21,184,255,192,64,16,14, |
17,72,10,7,92,0,8,16,8,64,8,3,7,8,1,184,255,192,64,16,29,43,72,17,1,9,3,11, |
64,29,43,72,11,0,8,18,0,63,51,51,43,63,51,51,43,1,47,94,93,237,50,43,93,113, |
47,93,95,93,113,51,237,49,48,0,93,95,93,43,43,93,93,43,43,1,93,43,93,43,33, |
1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,4,58,253,14,2,3,2,3, |
170,222,2,250,3,3,2,4,172,4,176,49,48,41,91,35,252,88,5,129,251,72,49,49, |
42,99,45,3,156,250,127,0,0,0,0,2,0,97,255,236,5,215,5,150,0,19,0,39,0,108, |
64,74,91,37,1,26,37,1,9,37,1,82,33,1,21,33,1,7,33,1,84,27,1,21,27,1,91,23, |
1,25,23,1,102,17,1,104,12,1,0,91,64,15,20,1,20,41,128,32,41,128,41,2,30,91, |
175,10,191,10,2,32,10,1,15,10,31,10,2,10,25,95,15,4,35,95,5,19,0,63,237,63, |
237,1,47,93,93,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,215,95,180,254,252,165,174,254,250, |
174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63,65, |
127,189,123,132,191,123,59,2,199,165,254,242,192,104,109,195,1,12,159,165, |
1,10,187,101,102,188,254,246,163,127,208,148,80,80,148,208,127,127,211,153, |
85,86,153,212,0,2,0,168,0,0,4,234,5,129,0,14,0,23,0,117,64,83,169,2,1,147, |
23,1,155,16,171,16,2,10,3,26,3,42,3,3,5,12,21,12,37,12,3,0,90,64,15,25,128, |
64,25,1,64,25,1,20,7,90,0,8,16,8,64,8,3,8,6,95,31,20,47,20,79,20,95,20,127, |
20,5,15,20,207,20,255,20,3,7,20,64,9,17,72,20,20,7,19,95,9,3,7,18,0,63,63, |
237,18,57,47,43,94,93,113,237,1,47,93,237,50,93,113,26,16,220,26,237,49,48, |
0,93,93,93,93,93,1,20,14,2,35,33,17,35,17,33,50,30,2,7,52,38,35,33,17,33, |
50,54,4,234,61,121,182,121,254,98,191,2,81,125,186,124,62,192,164,164,254, |
133,1,131,165,155,3,217,92,159,117,68,253,219,5,129,61,111,157,97,134,139, |
253,212,146,0,0,0,2,0,97,254,125,5,215,5,150,0,36,0,56,0,162,64,113,108,20, |
124,20,140,20,3,104,24,1,104,29,1,101,34,1,87,6,1,85,49,1,90,39,1,90,45,1, |
108,19,124,19,140,19,3,26,19,90,19,2,26,40,90,40,2,21,44,85,44,2,26,54,90, |
54,2,8,54,1,21,50,85,50,2,7,50,1,13,13,22,5,27,0,91,64,15,37,1,37,58,128, |
47,91,175,27,191,27,2,32,27,1,15,27,31,27,2,27,32,58,128,58,2,42,95,32,4, |
52,95,5,22,19,10,95,17,0,47,237,63,51,237,63,237,1,93,47,93,93,93,237,26, |
16,220,113,26,237,17,57,57,50,47,49,48,93,93,93,93,93,93,0,93,93,93,93,93, |
1,93,93,93,0,93,93,1,20,14,2,7,30,3,51,50,54,55,21,14,1,35,34,46,2,39,46, |
2,2,53,52,18,54,36,51,50,4,22,18,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62, |
2,5,215,77,145,211,134,21,53,68,83,51,28,64,23,38,91,49,86,128,97,70,27,158, |
239,159,80,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63, |
65,127,189,123,132,191,123,59,2,199,149,247,186,117,18,64,90,57,27,8,5,134, |
9,13,51,95,138,87,8,115,193,1,3,152,165,1,10,187,101,102,188,254,246,163, |
127,208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,0,0,2,0,168,0,0, |
5,104,5,129,0,17,0,30,0,210,64,62,169,13,1,138,20,154,20,170,20,3,148,29, |
1,117,29,133,29,2,174,0,1,157,0,1,124,0,140,0,2,74,0,90,0,106,0,3,3,160,1, |
1,114,1,130,1,146,1,3,2,99,1,1,64,1,1,51,1,1,37,1,1,3,16,184,255,112,64,87, |
17,73,112,16,128,16,144,16,3,84,16,100,16,2,66,16,1,2,35,16,51,16,2,1,16, |
16,25,18,90,11,11,0,0,17,48,17,64,17,96,17,144,17,160,17,6,17,64,32,144,32, |
160,32,3,25,3,90,0,4,16,4,64,4,3,7,4,16,2,95,47,25,95,25,111,25,143,25,4, |
25,25,0,24,95,5,3,4,0,18,0,63,50,63,237,18,57,47,93,237,50,1,47,94,93,237, |
50,93,47,93,51,57,47,237,18,57,17,51,49,48,93,95,93,93,93,43,95,93,93,93, |
93,95,93,93,95,93,93,93,93,0,93,93,93,93,33,1,33,17,35,17,33,50,30,2,21,20, |
14,2,7,1,3,52,46,2,35,33,17,33,50,62,2,4,140,254,146,254,73,191,2,151,120, |
185,126,66,39,84,130,91,1,144,248,44,84,120,76,254,59,1,205,82,120,77,37, |
2,73,253,183,5,129,55,104,150,94,67,130,108,78,16,253,161,3,236,64,94,63, |
31,253,248,41,72,98,0,0,0,0,1,0,93,255,236,4,248,5,150,0,63,0,226,64,110, |
150,62,1,68,62,1,166,59,1,134,54,1,132,49,1,151,40,1,169,33,1,11,33,27,33, |
43,33,155,33,4,89,29,169,29,2,139,17,1,139,7,1,150,2,1,4,2,20,2,2,132,58, |
1,96,54,1,105,21,1,118,17,1,42,90,41,41,0,90,64,176,19,1,19,65,128,9,90,8, |
64,16,19,72,8,8,52,90,0,31,16,31,64,31,3,7,31,19,16,19,22,72,120,19,136,19, |
152,19,3,59,19,1,52,184,255,240,64,47,19,22,72,119,52,135,52,151,52,3,58, |
52,1,19,52,5,47,95,111,42,1,89,42,1,75,42,1,6,42,1,42,36,4,14,95,96,9,1,82, |
9,1,68,9,1,9,5,19,0,63,51,93,93,93,237,63,51,93,93,93,93,237,18,57,57,93, |
93,43,93,93,43,1,47,94,93,237,51,47,43,237,26,16,220,93,26,237,50,47,237, |
49,48,0,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,20,14,2,35, |
32,36,39,55,30,3,51,50,62,2,53,52,46,2,39,46,5,53,52,62,2,51,50,30,2,23,7, |
46,3,35,34,14,2,21,20,30,2,23,30,5,4,248,69,144,219,150,254,249,254,218,40, |
185,14,58,99,146,102,85,142,102,57,63,114,158,96,59,119,109,96,70,40,81,144, |
196,114,131,186,128,77,23,188,14,53,86,123,83,98,133,81,35,63,108,142,80, |
65,129,118,103,76,43,1,133,89,150,109,61,184,174,37,55,90,65,36,29,60,95, |
66,69,86,56,38,22,13,31,43,58,81,107,70,100,143,92,42,41,82,121,80,33,51, |
80,54,28,35,60,81,47,63,81,54,36,18,15,31,43,58,84,114,0,0,0,1,0,46,0,0,4, |
180,5,129,0,7,1,212,64,255,9,9,1,201,9,217,9,249,9,3,187,9,1,73,9,89,9,121, |
9,137,9,4,59,9,1,9,9,25,9,2,246,9,1,153,9,201,9,2,139,9,1,9,9,25,9,73,9,105, |
9,4,199,217,9,233,9,2,203,9,1,182,9,1,41,9,89,9,105,9,137,9,153,9,5,27,9, |
1,6,9,1,25,9,41,9,89,9,121,9,153,9,169,9,217,9,7,233,9,249,9,2,219,9,1,169, |
9,1,150,9,1,57,9,105,9,2,45,9,1,1,11,9,1,151,107,9,123,9,139,9,171,9,187, |
9,235,9,251,9,7,84,9,1,11,9,43,9,59,9,3,187,9,251,9,2,164,9,1,59,9,75,9,123, |
9,3,36,9,1,139,9,155,9,187,9,203,9,251,9,5,127,9,1,2,79,9,95,9,2,48,9,1,15, |
9,1,103,207,9,223,9,2,176,9,1,15,9,79,9,95,9,143,9,4,240,9,1,159,9,175,9, |
207,9,223,9,4,112,9,1,95,9,1,64,9,1,31,9,1,31,9,63,9,95,9,111,9,159,9,223, |
9,239,9,7,0,9,1,55,239,9,1,128,64,93,9,144,9,208,9,3,111,9,1,80,9,1,47,9, |
1,0,9,1,208,9,1,175,9,1,144,9,1,111,9,127,9,2,16,9,32,9,64,9,80,9,4,255,9, |
1,224,9,1,191,9,1,64,9,96,9,144,9,160,9,4,63,9,1,32,9,1,15,9,1,7,3,5,4,14, |
1,90,2,64,2,7,14,112,7,160,7,176,7,3,32,7,128,7,2,7,184,255,192,64,15,23, |
28,72,7,32,2,1,2,0,4,95,5,3,1,18,0,63,63,237,50,1,47,93,204,43,93,113,43, |
1,26,24,16,77,253,228,50,95,94,93,93,93,93,93,93,93,113,113,113,113,113,114, |
114,114,114,114,114,94,93,93,113,113,113,113,113,113,114,114,114,94,93,93, |
93,95,93,93,113,113,113,113,114,114,114,94,93,95,93,93,93,93,93,93,113,114, |
114,114,114,114,114,94,93,93,93,93,113,113,113,113,113,114,49,48,1,17,35, |
17,33,53,33,21,2,208,190,254,28,4,134,4,229,251,27,4,229,156,156,0,0,0,0, |
1,0,158,255,236,5,41,5,129,0,25,0,136,64,61,89,23,105,23,2,89,3,105,3,2,89, |
2,105,2,2,69,16,1,69,10,1,21,90,64,64,18,80,18,160,18,3,48,18,144,18,240, |
18,3,143,18,159,18,175,18,3,18,27,128,64,27,1,64,27,192,27,208,27,224,27, |
4,27,184,255,192,64,36,14,17,72,8,90,79,5,95,5,111,5,3,143,5,159,5,2,207, |
5,1,0,5,16,5,64,5,3,7,5,19,6,3,13,95,0,19,0,63,237,63,51,1,47,94,93,93,113, |
114,237,43,93,113,26,16,220,93,113,114,26,237,49,48,0,93,93,93,93,93,5,34, |
46,2,53,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,14,2,2,219,116,208,157, |
92,191,57,102,139,83,82,146,110,63,190,93,160,215,20,62,131,201,138,3,129, |
252,143,107,149,94,43,44,96,155,111,3,100,252,145,141,207,136,66,0,1,0,9, |
0,0,5,77,5,129,0,16,0,235,64,181,74,14,90,14,106,14,3,69,4,85,4,101,4,3,140, |
15,1,58,15,90,15,106,15,122,15,4,131,3,1,53,3,85,3,101,3,117,3,4,116,0,132, |
0,2,9,0,1,140,1,1,123,1,1,6,1,1,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0, |
37,0,53,0,3,6,0,1,230,0,246,0,2,1,0,9,9,2,26,15,42,15,58,15,3,3,8,15,1,232, |
15,248,15,2,15,52,16,84,16,2,32,16,1,2,16,16,1,48,16,96,16,144,16,192,16, |
240,16,5,16,21,3,37,3,53,3,3,6,3,1,230,3,246,3,2,3,175,2,191,2,2,2,32,18, |
80,18,2,48,18,96,18,144,18,192,18,240,18,5,47,18,1,15,2,3,121,9,1,9,1,18, |
0,63,51,93,63,51,1,93,93,113,47,93,51,93,113,113,47,93,113,95,113,113,51, |
93,113,95,113,18,57,61,47,51,51,93,113,113,93,113,113,49,48,93,93,93,93,93, |
93,93,93,93,93,93,33,35,1,51,1,30,1,23,22,23,54,55,62,1,55,1,51,3,14,198, |
253,193,201,1,134,15,30,12,14,13,12,14,12,29,17,1,132,201,5,129,252,32,45, |
89,35,41,39,37,41,35,88,48,3,224,0,0,1,0,9,0,0,7,134,5,129,0,46,4,87,64,73, |
121,44,1,117,17,1,123,2,139,2,2,73,2,1,116,12,132,12,2,70,12,1,122,30,138, |
30,2,73,30,89,30,105,30,3,117,31,133,31,2,71,31,87,31,103,31,3,142,45,1,91, |
45,107,45,123,45,3,129,16,1,100,16,116,16,2,85,16,1,1,32,13,17,72,13,184, |
255,224,64,255,13,17,72,131,0,1,117,0,1,68,0,84,0,100,0,3,54,0,1,140,14,1, |
122,14,1,75,14,91,14,107,14,3,14,16,9,12,72,26,14,42,14,58,14,3,9,14,1,233, |
14,249,14,2,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,14,13,22,26,30,42, |
30,58,30,3,9,30,1,233,30,249,30,2,21,31,37,31,53,31,3,6,31,1,230,31,246,31, |
2,31,30,7,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0,37,0,53,0,3,6,0,1,230, |
0,246,0,2,1,0,39,123,39,1,116,22,132,22,2,22,7,39,39,7,22,3,15,26,45,42,45, |
58,45,3,3,8,45,1,232,45,248,45,2,45,219,46,1,207,46,1,187,46,1,175,46,1,155, |
46,1,143,46,1,123,46,1,111,46,1,91,46,1,79,46,1,2,79,46,143,46,175,46,3,46, |
64,25,28,72,32,46,48,46,2,15,46,1,9,46,5,16,1,229,16,245,16,2,182,16,198, |
16,214,16,3,3,16,8,15,56,15,120,15,136,15,152,15,184,15,6,12,15,64,64,255, |
25,38,72,15,119,48,151,48,215,48,3,54,48,70,48,86,48,3,23,48,39,48,2,6,48, |
1,55,48,103,48,119,48,167,48,183,48,199,48,231,48,247,48,8,38,48,1,7,48,23, |
48,2,201,199,48,215,48,231,48,3,120,48,152,48,168,48,184,48,4,105,48,1,40, |
48,56,48,88,48,3,25,48,1,7,48,1,232,48,1,217,48,1,168,48,200,48,2,153,48, |
1,138,48,1,88,48,104,48,2,73,48,1,55,48,1,8,48,24,48,2,231,48,1,200,48,1, |
167,48,1,8,48,24,48,40,48,72,48,136,48,5,153,199,48,1,88,48,104,48,136,48, |
152,48,168,48,5,73,48,1,40,48,1,9,48,25,48,2,216,48,232,48,2,203,48,1,154, |
48,170,48,186,48,3,139,48,1,48,192,124,127,72,57,48,1,42,48,1,25,48,1,10, |
48,1,249,48,1,234,48,1,217,48,1,202,48,1,184,48,1,137,48,153,48,169,48,3, |
120,48,1,105,48,1,58,48,74,48,90,48,3,41,48,1,26,48,1,12,48,1,104,253,48, |
1,236,48,1,221,48,1,204,48,1,64,255,189,48,1,171,48,1,156,48,1,139,48,1,124, |
48,1,107,48,1,92,48,1,75,48,1,60,48,1,43,48,1,28,48,1,11,48,1,252,48,1,235, |
48,1,220,48,1,203,48,1,188,48,1,171,48,1,156,48,1,0,141,48,1,127,48,1,109, |
48,1,95,48,1,77,48,1,47,48,63,48,2,29,48,1,15,48,1,253,48,1,239,48,1,221, |
48,1,207,48,1,189,48,1,175,48,1,157,48,1,143,48,1,109,48,125,48,2,91,48,1, |
77,48,1,59,48,1,45,48,1,27,48,1,13,48,1,56,251,48,1,237,48,1,219,48,1,205, |
48,1,187,48,1,173,48,1,155,48,1,141,48,1,123,48,1,109,48,1,75,48,91,48,2, |
57,48,1,43,48,1,25,48,1,11,48,1,249,48,1,235,48,1,221,48,1,203,48,1,189,48, |
1,171,48,1,157,48,1,139,48,1,125,48,1,107,48,1,93,48,1,75,48,1,61,48,1,1, |
43,48,1,31,48,1,2,95,48,127,48,159,48,191,48,223,48,255,48,6,0,48,1,8,68, |
7,84,7,2,7,30,45,3,15,3,39,64,15,22,123,22,139,22,2,22,32,9,14,72,22,1,14, |
18,0,63,51,51,43,93,17,51,63,23,51,93,1,94,93,93,95,113,113,95,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,113, |
113,113,113,113,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,93,93,93,113,113,113,113,43,113,113,113,113,114,114,114,114,114,94,93, |
93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93, |
93,93,113,113,113,113,47,43,94,93,51,95,93,93,113,47,94,93,93,43,93,95,113, |
113,113,113,113,113,113,113,113,113,51,93,113,95,113,18,23,57,61,47,47,47, |
93,93,17,51,51,93,113,113,93,113,113,17,51,51,93,113,113,93,113,113,17,51, |
51,93,113,113,93,113,113,49,48,43,93,93,93,93,93,93,93,43,43,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,33,35,3,46,1,39,38,39,6,7,14,1,7,3,35,1, |
51,19,30,1,23,22,23,54,55,62,3,55,19,51,19,30,3,23,22,23,50,62,2,55,19,51, |
5,231,228,244,11,25,10,12,12,13,12,11,24,11,246,228,254,97,199,253,17,31, |
11,13,11,15,16,7,14,15,15,6,245,183,245,6,15,15,14,7,16,15,1,16,24,29,15, |
249,199,3,127,38,104,47,55,57,58,55,48,102,38,252,129,5,129,252,129,63,124, |
49,58,52,69,67,28,62,60,55,23,3,109,252,147,23,55,59,62,28,67,70,69,104,121, |
52,3,127,0,0,1,0,46,0,0,5,43,5,129,0,11,2,119,64,255,92,4,1,73,4,1,59,4,1, |
38,11,1,75,0,91,0,2,41,0,57,0,2,68,2,84,2,2,38,2,54,2,2,9,3,25,3,41,3,3,81, |
10,1,69,10,1,51,10,1,6,10,22,10,2,93,8,1,76,8,1,43,8,59,8,2,9,8,25,8,2,82, |
6,1,67,6,1,3,38,6,54,6,2,7,6,23,6,2,12,219,13,1,196,13,1,171,13,1,144,13, |
1,132,13,1,96,13,1,84,13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13, |
1,160,13,1,148,13,1,112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,204, |
224,13,1,212,13,1,176,13,1,164,13,1,128,13,1,116,13,1,80,13,1,68,13,1,32, |
13,1,20,13,1,36,13,84,13,132,13,180,13,228,13,5,4,13,52,13,100,13,148,13, |
196,13,244,13,6,156,52,13,100,13,148,13,196,13,244,13,5,11,13,1,27,13,75, |
13,123,13,171,13,219,13,5,139,13,187,13,235,13,3,4,13,20,13,52,13,68,13,4, |
106,84,13,100,13,132,13,148,64,156,13,180,13,196,13,228,13,244,13,8,59,13, |
1,36,13,1,11,13,1,244,13,1,219,13,1,196,13,1,171,13,1,148,13,1,123,13,1,100, |
13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13,1,160,13,1,148,13,1, |
112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,57,224,13,1,212,13,1,176, |
13,1,164,13,1,128,13,1,20,13,68,13,116,13,3,36,13,84,13,132,13,180,13,228, |
13,5,84,13,100,13,148,13,244,13,4,64,13,1,2,0,13,48,13,2,6,8,10,7,1,4,4,9, |
5,9,5,9,3,0,11,16,192,11,240,11,2,11,184,255,192,64,16,26,30,72,175,11,1, |
144,11,1,127,11,1,0,11,1,11,184,255,192,181,11,15,72,11,2,3,184,255,240,64, |
41,16,3,32,3,2,224,3,240,3,2,31,3,175,3,191,3,207,3,4,3,114,7,1,52,7,68,7, |
84,7,3,4,7,10,1,4,8,5,3,3,0,18,0,63,50,63,51,23,57,93,93,1,47,93,93,113,56, |
51,47,43,93,93,93,93,43,93,56,51,18,57,57,47,47,18,23,57,50,51,93,95,93,93, |
113,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113, |
113,113,113,113,113,113,113,114,114,114,114,94,93,93,113,114,114,94,93,113, |
114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,49,48,94,93,93,95,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,9,1,35,9,1,51,9,1,51,9,1, |
4,88,254,89,254,80,211,2,24,254,17,211,1,136,1,125,211,254,30,2,11,2,104, |
253,152,2,220,2,165,253,215,2,41,253,98,253,29,0,0,0,1,0,45,0,0,5,41,5,129, |
0,8,2,83,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5,1,3,5,1,16,3,5,184,255,232, |
64,255,12,15,72,5,4,14,2,1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8, |
6,1,90,38,2,86,2,150,2,3,118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,10,169, |
10,201,10,3,86,10,1,9,10,57,10,2,25,10,89,10,137,10,249,10,4,6,10,1,202,249, |
10,1,230,10,1,9,10,25,10,185,10,201,10,4,198,10,1,89,10,121,10,169,10,3,54, |
10,1,41,10,57,10,185,10,233,10,4,11,10,1,153,249,10,1,198,10,214,10,2,178, |
10,1,164,10,1,150,10,1,130,10,1,116,10,1,86,10,102,10,2,66,10,1,36,10,52, |
10,2,18,10,1,4,10,1,244,10,1,230,10,1,196,10,212,10,2,166,10,182,10,2,146, |
10,1,132,10,1,118,10,1,98,10,1,84,10,1,54,10,70,10,2,36,10,1,22,10,1,4,10, |
1,242,10,1,1,208,10,224,10,2,196,10,1,160,10,176,10,2,148,10,1,112,10,1,100, |
10,1,64,10,1,20,10,36,10,52,10,3,0,10,1,105,228,10,244,10,2,208,10,64,182, |
1,164,10,180,10,196,10,3,128,10,144,10,2,116,10,1,80,10,96,10,2,68,10,1,32, |
10,1,4,10,20,10,2,244,10,1,224,10,1,196,10,212,10,2,176,10,1,84,10,100,10, |
116,10,148,10,164,10,5,48,10,64,10,2,36,10,1,0,10,1,196,10,244,10,2,144,10, |
1,4,10,20,10,36,10,68,10,84,10,116,10,132,10,7,57,224,10,1,132,10,164,10, |
212,10,3,112,10,1,4,10,36,10,52,10,84,10,100,10,5,228,10,244,10,2,192,10, |
1,180,10,1,144,10,1,4,10,20,10,52,10,84,10,132,10,5,212,10,228,10,2,187,10, |
1,164,10,1,112,10,1,2,48,10,96,10,2,15,10,47,10,2,0,3,59,3,75,3,123,3,3,3, |
1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,1,93,93,95,93,93,93,93,113,113,113, |
113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113,113,114,114, |
114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,95,93,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,113,113,113,114,114,114,94,93,93,113,113,113,47,94,93, |
93,93,113,253,57,206,94,93,93,50,43,1,24,16,77,230,50,49,48,43,95,94,93,93, |
43,93,93,1,17,35,17,1,51,9,1,51,3,9,190,253,226,210,1,173,1,171,210,2,72, |
253,184,2,72,3,57,253,97,2,159,0,0,0,0,1,0,65,0,0,4,163,5,129,0,9,0,122,64, |
35,100,4,116,4,132,4,3,109,3,125,3,141,3,3,91,3,1,41,3,57,3,73,3,3,114,8, |
130,8,2,84,8,100,8,2,8,184,255,240,64,9,10,13,72,9,3,16,7,1,7,184,255,192, |
64,18,12,17,72,7,8,4,15,2,31,2,2,2,64,12,15,72,2,11,184,255,192,64,14,13, |
17,72,7,3,4,95,5,3,2,8,95,1,18,0,63,237,50,63,237,50,50,1,43,47,43,93,51, |
51,47,43,93,51,51,49,48,43,93,93,93,93,93,93,41,1,53,1,33,53,33,21,1,33,4, |
163,251,158,3,90,252,239,3,234,252,166,3,137,143,4,86,156,139,251,166,0,0, |
1,0,146,254,87,2,41,5,204,0,7,0,49,64,30,7,48,2,1,224,2,1,2,4,241,63,1,1, |
143,1,191,1,2,32,1,1,1,4,245,1,0,5,245,0,27,0,63,237,63,237,1,47,93,93,113, |
237,205,93,113,50,49,48,19,17,33,21,35,17,51,21,146,1,151,233,233,254,87, |
7,117,129,249,141,129,0,1,0,0,255,236,2,57,5,204,0,3,0,71,64,40,120,1,136, |
1,2,0,24,13,17,72,9,3,25,3,73,3,3,70,2,1,10,2,26,2,42,2,3,3,16,0,3,16,3,32, |
3,128,3,4,3,1,184,255,240,183,143,1,1,1,1,0,0,19,0,63,63,1,47,93,56,205,93, |
56,49,48,93,93,93,43,93,5,1,51,1,1,151,254,105,158,1,155,20,5,224,250,32, |
0,0,0,0,1,0,16,254,87,1,167,5,204,0,7,0,49,64,31,4,63,0,1,239,0,1,0,7,241, |
64,2,80,2,2,192,2,208,2,224,2,3,2,4,245,5,0,1,245,0,27,0,63,237,63,237,1, |
47,93,113,253,205,93,113,50,49,48,19,53,51,17,35,53,33,17,16,233,233,1,151, |
254,87,129,6,115,129,248,139,0,1,0,10,2,161,3,183,5,129,0,6,2,243,181,0,24, |
18,22,72,2,184,255,232,179,18,22,72,5,184,255,232,64,47,18,22,72,118,5,134, |
5,2,4,24,18,22,72,121,4,137,4,2,3,54,6,70,6,2,102,6,118,6,134,6,230,6,4,6, |
6,22,6,38,6,70,6,86,6,102,6,6,6,184,255,192,179,48,65,72,6,184,255,192,64, |
57,18,22,72,6,5,4,57,3,73,3,2,105,3,121,3,137,3,3,9,3,25,3,41,3,89,3,105, |
3,5,9,3,64,18,22,72,3,6,1,22,1,134,1,3,57,38,1,54,1,70,1,246,1,4,230,1,1, |
1,184,255,192,182,60,63,72,153,1,1,1,184,255,224,64,255,30,33,72,56,1,72, |
1,2,39,1,1,22,1,1,183,1,199,1,2,6,1,70,1,86,1,102,1,150,1,166,1,6,9,1,6,8, |
1,246,8,1,164,8,1,121,8,1,6,8,1,246,8,1,201,8,217,8,2,187,8,1,9,8,25,8,41, |
8,169,8,4,201,201,8,217,8,2,54,8,118,8,134,8,150,8,4,153,8,233,8,2,102,8, |
118,8,2,9,8,25,8,57,8,3,198,8,1,139,8,1,57,8,73,8,121,8,3,43,8,1,4,8,1,152, |
228,8,244,8,2,208,8,1,162,8,178,8,194,8,3,132,8,148,8,2,82,8,98,8,114,8,3, |
64,8,1,50,8,1,36,8,1,2,8,18,8,2,228,8,244,8,2,214,8,1,196,8,1,146,8,162,8, |
178,8,3,116,8,132,8,2,102,8,1,50,8,66,8,82,8,3,20,8,36,8,2,6,8,1,242,8,1, |
212,8,228,8,2,166,8,182,8,2,130,8,146,8,2,100,8,116,8,2,86,8,1,52,8,68,8, |
2,32,8,1,4,8,20,8,2,104,230,8,246,8,2,192,8,1,146,8,162,8,64,24,178,8,3,116, |
8,132,8,2,82,8,98,8,2,52,8,68,8,2,22,8,38,8,2,8,184,255,128,64,24,85,88,72, |
182,8,198,8,2,132,8,148,8,164,8,3,102,8,118,8,2,68,8,1,8,184,255,192,182, |
72,75,72,228,8,1,8,184,255,192,64,12,66,69,72,148,8,1,114,8,130,8,2,8,184, |
255,128,64,120,59,62,72,18,8,34,8,2,1,0,8,1,56,240,8,1,212,8,228,8,2,176, |
8,1,100,8,132,8,148,8,164,8,4,64,8,80,8,2,36,8,52,8,2,228,8,244,8,2,171,8, |
187,8,2,116,8,132,8,148,8,3,75,8,1,52,8,1,11,8,1,235,8,251,8,2,208,8,1,196, |
8,1,176,8,1,132,8,148,8,164,8,3,96,8,112,8,2,2,0,8,16,8,64,8,80,8,4,8,34, |
1,1,3,1,19,1,2,1,4,3,3,3,0,0,47,50,47,63,51,93,93,1,94,93,95,93,93,93,93, |
93,93,113,113,113,113,113,113,114,114,114,114,114,114,94,93,95,93,43,93,93, |
43,93,43,113,113,113,113,43,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,94,93,93,93,93,93,113,113,113,114,114,94,93,93,93,93,113,113,113, |
113,114,25,47,94,93,93,113,113,113,43,113,43,113,114,94,93,205,43,94,93,113, |
114,51,51,205,43,43,93,113,114,49,48,95,93,43,93,43,43,43,9,2,35,1,51,1,3, |
19,254,203,254,206,162,1,112,203,1,114,2,161,2,121,253,135,2,224,253,32,0, |
0,0,0,1,255,225,254,105,4,138,254,235,0,3,0,35,64,23,16,2,96,2,128,2,160, |
2,208,2,5,96,2,128,2,240,2,3,2,0,0,186,1,0,47,237,1,47,47,93,113,49,48,3, |
53,33,21,31,4,169,254,105,130,130,0,1,0,106,4,177,2,18,5,228,0,5,0,47,64, |
31,117,3,133,3,2,64,4,128,4,2,4,64,16,1,1,1,2,149,128,15,0,47,0,63,0,127, |
0,239,0,5,0,0,47,93,26,237,1,47,93,26,205,93,49,48,93,9,1,53,51,19,21,1,180, |
254,182,207,217,4,177,1,22,29,254,225,20,0,0,0,0,2,0,87,255,236,4,115,4,78, |
0,50,0,65,0,161,64,50,121,61,137,61,2,121,12,137,12,2,2,40,9,13,72,10,5,26, |
5,2,43,24,9,17,72,5,28,21,28,2,37,37,30,70,64,46,9,111,56,127,56,143,56,3, |
56,67,128,20,71,21,184,255,192,64,20,21,28,72,21,21,63,71,31,3,1,3,48,67, |
192,67,2,160,67,1,67,184,255,192,64,32,30,35,72,33,81,40,22,57,81,9,9,26, |
51,95,20,1,47,20,143,20,2,20,20,15,80,26,16,46,51,80,0,22,0,63,237,50,63, |
237,51,47,93,113,17,18,57,47,237,63,237,1,43,93,113,47,93,237,51,47,43,237, |
26,16,220,93,50,50,26,237,50,47,49,48,93,43,93,43,0,93,93,5,34,38,53,52,62, |
2,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,21,17,20,22,51,50,54,55,21, |
14,1,35,34,46,2,39,35,14,3,39,50,62,2,61,1,7,14,3,21,20,22,1,158,163,164, |
81,131,168,87,243,28,58,87,59,52,84,62,38,6,188,10,56,103,155,110,204,206, |
42,59,15,30,14,34,67,38,51,73,46,24,3,6,29,69,92,117,35,86,129,85,42,197, |
66,119,90,53,95,20,172,150,107,137,78,30,2,4,59,67,94,58,27,15,39,67,51,17, |
64,107,78,43,187,177,254,46,80,81,4,3,112,8,8,27,55,81,54,52,84,59,32,135, |
63,98,116,53,89,4,1,17,50,90,73,88,96,0,0,2,0,132,255,236,4,29,5,204,0,31, |
0,51,0,146,64,9,105,49,121,49,2,121,35,1,31,184,255,224,64,24,7,10,72,134, |
30,150,30,2,73,27,89,27,2,73,4,89,4,2,134,1,150,1,2,1,184,255,224,64,63,7, |
10,72,0,71,64,160,32,1,32,53,128,42,5,19,70,0,18,16,18,48,18,240,18,4,8,18, |
176,53,1,63,53,1,112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,37,80, |
29,16,18,0,12,21,5,47,80,2,22,0,63,237,50,63,63,63,237,50,1,93,93,113,113, |
114,114,47,94,93,237,50,50,26,16,220,93,26,237,49,48,43,93,93,93,93,43,93, |
93,1,16,33,34,38,39,35,20,14,2,7,35,62,3,53,17,51,17,20,6,7,6,7,51,62,1,51, |
50,18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,29,254,114,123,163,51, |
2,3,3,3,1,174,1,2,2,1,180,1,1,1,1,4,50,165,122,205,193,189,28,62,96,69,71, |
109,73,38,38,73,108,70,66,96,64,31,2,34,253,202,89,99,26,56,48,34,4,9,43, |
60,72,39,4,237,254,89,30,55,21,25,22,104,90,254,236,254,226,112,160,103,48, |
46,102,166,120,116,158,99,43,46,102,163,0,0,0,1,0,87,255,236,3,202,4,78,0, |
39,0,117,64,81,121,16,1,121,23,1,99,37,1,99,3,1,32,70,31,31,8,70,160,9,1, |
9,9,41,0,71,31,19,1,19,35,80,26,31,32,127,32,143,32,223,32,4,32,32,26,16, |
32,8,112,8,128,8,208,8,224,8,5,0,8,16,8,96,8,112,8,128,8,192,8,208,8,7,8, |
8,5,80,14,22,31,41,1,93,0,63,237,51,47,93,113,63,51,47,93,16,237,1,47,93, |
237,17,51,125,47,113,24,237,51,47,237,49,48,93,93,93,93,1,20,30,2,51,50,54, |
55,23,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,7,46,1,35,34,14,2,1,19,27, |
64,105,77,96,129,15,182,9,60,103,148,97,127,178,111,50,36,65,88,103,114,58, |
91,142,103,64,13,185,14,114,105,77,103,64,27,2,34,93,156,113,62,104,108,12, |
67,124,94,57,86,151,205,120,109,167,125,85,51,23,50,87,118,68,14,90,106,51, |
103,156,0,0,0,0,2,0,86,255,236,3,239,5,204,0,31,0,51,0,123,64,87,85,34,101, |
34,2,90,50,106,50,2,57,1,73,1,2,54,10,70,10,2,9,4,25,4,121,4,137,4,4,6,7, |
22,7,118,7,134,7,4,19,70,64,42,0,143,18,239,18,2,18,53,128,32,71,31,6,1,6, |
112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,21,18,0,11,47,80,8,16, |
0,37,80,3,22,0,63,237,50,63,237,50,63,63,1,93,93,113,113,47,93,237,26,16, |
220,93,50,50,26,237,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17,16,33,50, |
22,23,51,52,46,1,52,53,17,51,17,20,30,2,23,35,46,3,53,1,20,30,2,51,50,62, |
2,53,52,46,2,35,34,14,2,3,53,50,165,122,205,193,1,142,123,164,50,2,1,1,180, |
1,2,2,1,172,2,3,3,2,253,218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64, |
31,174,104,90,1,20,1,24,2,54,90,98,10,43,47,42,9,1,163,251,19,39,72,60,43, |
9,10,37,48,53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102, |
163,0,0,0,2,0,87,255,236,4,24,4,78,0,28,0,37,0,107,64,46,90,35,106,35,2,90, |
30,106,30,2,85,3,101,3,2,8,73,9,9,27,71,64,31,29,1,144,29,1,29,39,128,37, |
0,71,31,17,1,17,48,39,192,39,208,39,3,39,184,255,192,64,19,30,35,72,8,8,5, |
0,80,37,37,5,32,80,22,16,5,80,14,22,0,63,237,63,237,18,57,47,237,17,57,47, |
1,43,113,47,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,0,93,93, |
1,20,30,2,51,50,54,55,23,14,3,35,34,2,17,52,62,2,51,50,30,2,29,1,39,46,1, |
35,34,14,2,7,1,20,35,73,114,80,117,141,25,158,17,61,102,153,108,240,251,76, |
132,176,100,136,183,111,47,186,15,144,135,45,99,84,58,4,1,247,85,143,103, |
57,94,72,45,45,91,73,47,1,30,1,26,152,211,132,59,88,155,210,122,24,138,171, |
157,29,74,127,98,0,0,0,1,0,29,0,0,2,60,5,202,0,27,0,161,64,11,3,10,19,10, |
51,10,67,10,4,13,10,184,255,224,64,106,8,12,72,26,15,16,1,14,16,25,16,1,70, |
5,0,2,1,18,2,31,29,47,29,79,29,95,29,127,29,143,29,159,29,7,15,29,63,29,127, |
29,175,29,191,29,223,29,239,29,7,59,95,29,191,29,2,127,29,143,29,159,29,3, |
29,64,86,100,72,29,64,39,44,72,32,29,48,29,96,29,3,175,29,223,29,239,29,3, |
64,29,1,15,29,47,29,2,19,80,12,0,0,3,80,25,6,15,1,21,0,63,63,51,237,50,63, |
237,1,93,93,93,113,43,43,113,114,94,93,113,47,94,93,51,237,50,50,47,94,93, |
51,49,48,0,43,94,93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35, |
34,14,2,29,1,51,21,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51, |
29,11,211,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41,60,39, |
97,131,0,2,0,86,254,87,3,239,4,75,0,49,0,69,0,217,64,72,122,49,138,49,2,118, |
7,134,7,2,101,62,1,85,12,101,12,2,90,58,106,58,2,38,3,54,3,2,38,18,1,41,33, |
1,9,23,25,23,121,23,137,23,4,6,29,22,29,118,29,134,29,4,9,47,70,64,50,34, |
48,14,1,127,14,223,14,2,14,71,128,6,70,5,184,255,192,64,81,23,28,72,5,5,60, |
71,15,26,1,10,26,32,71,64,71,2,207,71,1,0,71,32,71,144,71,176,71,4,80,223, |
71,1,192,71,1,79,71,1,128,71,160,71,2,15,71,47,71,2,208,71,240,71,2,15,71, |
1,8,41,15,34,55,80,31,16,15,65,80,21,22,9,80,53,6,1,38,6,1,6,0,27,0,63,50, |
93,93,237,63,237,50,63,237,50,63,1,94,93,93,113,113,114,114,114,94,93,93, |
113,47,94,93,237,51,47,43,237,26,16,220,93,113,50,50,26,237,49,48,0,94,93, |
93,93,93,93,93,93,93,93,93,1,34,46,2,39,55,30,1,51,50,62,2,61,1,35,14,3,35, |
34,46,2,53,52,62,2,51,50,22,23,51,52,62,2,55,51,14,3,21,17,20,6,19,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,2,36,93,144,102,64,14,181,18,123,100,61, |
100,70,38,2,20,59,85,112,72,103,147,93,43,43,97,155,111,115,169,46,2,3,3, |
4,2,171,1,2,2,1,223,44,49,80,103,54,69,99,65,31,31,64,98,68,54,103,82,50, |
254,87,38,71,98,60,26,75,81,34,75,120,86,174,41,75,58,35,69,138,205,135,130, |
208,145,77,105,97,25,62,55,40,3,9,43,60,73,39,252,197,227,229,3,198,113,161, |
102,48,48,103,161,112,117,159,98,42,46,100,158,0,0,0,0,1,0,142,0,0,3,238, |
5,204,0,33,0,109,185,0,8,255,192,64,36,7,11,72,11,70,64,80,12,1,159,12,255, |
12,2,12,35,128,0,35,192,35,208,35,224,35,4,192,35,1,15,35,1,128,35,1,35,184, |
255,192,64,32,19,23,72,28,24,70,192,25,1,0,25,16,25,48,25,224,25,240,25,5, |
8,25,26,0,25,11,21,0,18,80,5,16,0,63,237,50,63,51,63,1,47,94,93,113,237,50, |
43,93,113,113,114,26,16,220,93,113,26,237,49,48,43,1,62,3,51,50,30,2,21,17, |
35,17,52,46,2,35,34,14,2,21,17,35,17,51,17,20,14,2,7,1,61,30,70,84,100,62, |
104,133,77,29,181,17,48,88,70,64,103,73,40,180,180,2,3,2,1,3,129,55,77,50, |
23,56,101,140,84,253,47,2,174,69,104,69,35,46,84,120,75,253,130,5,204,254, |
126,33,66,56,39,7,0,0,0,2,0,137,0,0,1,61,5,204,0,3,0,7,0,115,64,13,3,7,70, |
0,0,4,16,4,48,4,3,8,4,184,255,192,64,42,21,24,72,4,4,8,9,255,9,1,224,9,1, |
223,9,1,176,9,192,9,2,159,9,1,112,9,128,9,2,31,9,1,0,9,1,240,9,1,223,9,1, |
9,184,255,192,64,17,34,37,72,79,9,1,31,9,1,5,15,4,21,0,83,1,0,0,63,237,63, |
63,1,93,113,43,113,113,114,114,114,114,114,114,114,114,17,18,57,47,43,94, |
93,51,237,50,49,48,19,53,51,21,3,17,51,17,137,180,180,180,5,32,172,172,250, |
224,4,58,251,198,0,0,0,0,2,255,206,254,87,1,61,5,204,0,3,0,23,1,51,64,151, |
7,24,12,16,72,7,40,8,11,72,3,4,70,21,12,12,0,0,21,16,21,32,21,64,21,4,7,21, |
21,24,25,144,25,1,63,25,1,0,25,16,25,2,219,25,64,210,213,72,208,25,224,25, |
2,143,25,1,64,25,80,25,2,15,25,31,25,95,25,111,25,255,25,5,144,25,160,25, |
224,25,240,25,4,79,25,1,0,25,1,160,63,25,175,25,191,25,207,25,4,239,25,1, |
176,25,192,25,208,25,3,63,25,79,25,95,25,3,32,25,1,143,25,191,25,207,25,3, |
0,25,1,111,239,25,1,208,25,1,63,25,143,25,2,111,25,143,25,159,25,175,25,255, |
25,5,25,184,255,192,64,84,79,82,72,223,25,1,144,25,160,25,176,25,3,47,25, |
63,25,79,25,3,0,25,1,61,25,64,53,56,72,112,25,128,25,144,25,176,25,4,15,25, |
31,25,2,255,25,1,25,64,35,38,72,144,25,1,79,25,1,255,25,1,112,25,128,25,192, |
25,208,25,224,25,5,31,25,1,22,15,16,80,9,27,0,83,1,0,0,63,237,63,237,63,1, |
93,93,93,113,113,43,113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93, |
93,113,113,113,113,114,94,93,93,93,113,114,114,114,43,94,93,93,93,17,18,57, |
47,94,93,51,51,47,16,237,50,49,48,0,43,43,19,53,51,21,17,20,14,2,35,34,38, |
39,53,30,1,51,50,62,2,53,17,51,137,180,21,54,93,72,34,65,28,13,36,13,38,49, |
28,10,180,5,32,172,172,250,90,62,106,78,45,4,5,139,2,4,20,43,67,46,4,165, |
0,0,1,0,138,0,0,4,3,5,204,0,11,0,251,64,84,124,2,1,122,8,1,118,7,1,86,9,102, |
9,134,9,150,9,4,139,0,155,0,2,89,0,105,0,121,0,3,116,10,132,10,148,10,3,68, |
10,1,1,10,10,11,42,8,1,3,8,9,16,116,9,1,9,9,0,11,16,84,11,116,11,148,11,3, |
116,11,148,11,180,11,212,11,228,11,244,11,6,48,11,1,2,11,184,255,192,64,105, |
7,10,72,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,31,13,63,13,2,31,13,63,13,95, |
13,255,13,4,15,13,31,13,63,13,95,13,127,13,5,57,13,64,83,86,72,96,13,128, |
13,160,13,192,13,208,13,5,223,13,1,0,13,96,13,128,13,160,13,4,0,13,16,13, |
48,13,64,13,128,13,160,13,192,13,224,13,240,13,9,7,2,1,7,10,4,8,15,5,0,4, |
21,0,21,0,63,63,63,63,23,57,1,94,93,113,113,114,43,94,93,113,114,47,94,93, |
237,50,47,43,95,93,93,113,56,51,51,47,93,56,51,95,114,17,57,17,51,49,48,93, |
93,93,93,93,0,93,1,93,0,93,33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132, |
180,180,1,219,211,254,73,1,206,1,238,109,254,127,5,204,252,97,2,13,254,47, |
253,151,0,0,0,1,0,138,0,0,1,62,5,204,0,3,0,111,64,52,3,70,192,0,1,208,0,1, |
0,0,16,0,48,0,240,0,4,8,0,224,5,240,5,2,223,5,1,176,5,192,5,2,159,5,1,112, |
5,128,5,2,15,5,31,5,2,240,5,1,223,5,1,5,184,255,192,64,27,34,37,72,79,5,1, |
255,5,1,112,5,128,5,192,5,208,5,224,5,5,31,5,1,1,0,0,21,0,63,63,1,93,93,93, |
113,43,113,113,114,114,114,114,114,114,47,94,93,113,114,237,49,48,51,17,51, |
17,138,180,5,204,250,52,0,0,1,0,136,0,0,6,35,4,78,0,59,2,194,185,0,42,255, |
224,179,8,11,72,32,184,255,224,64,255,8,11,72,34,59,70,0,0,13,46,70,217,47, |
249,47,2,182,47,1,41,47,89,47,137,47,3,6,47,1,166,47,182,47,214,47,230,47, |
4,137,47,1,118,47,1,89,47,1,6,47,22,47,70,47,3,7,47,25,12,70,198,13,1,6,13, |
22,13,54,13,230,13,246,13,5,8,13,251,61,1,201,61,217,61,233,61,3,187,61,1, |
153,61,1,139,61,1,105,61,121,61,2,91,61,1,73,61,1,43,61,59,61,2,249,61,1, |
235,61,1,217,61,1,203,61,1,189,61,1,153,61,1,139,61,1,105,61,1,91,61,1,41, |
61,57,61,2,27,61,1,9,61,1,202,235,61,251,61,2,105,61,137,61,153,61,185,61, |
201,61,5,91,61,1,77,61,1,41,61,57,61,2,27,61,1,249,61,1,235,61,1,201,61,217, |
61,2,187,61,1,153,61,1,139,61,1,125,61,1,1,43,61,75,61,91,61,107,61,4,31, |
61,1,4,61,1,203,61,235,61,2,175,61,191,61,2,139,61,1,127,61,1,43,61,75,61, |
91,61,107,61,4,31,61,1,11,61,1,154,255,61,1,235,61,64,255,1,223,61,1,187, |
61,1,175,61,1,139,61,155,61,2,127,61,1,91,61,107,61,2,79,61,1,59,61,1,36, |
61,1,11,61,1,235,61,1,223,61,1,187,61,1,175,61,1,155,61,1,127,61,143,61,2, |
100,61,1,75,61,1,63,61,1,43,61,1,15,61,31,61,2,235,61,1,223,61,1,123,61,139, |
61,171,61,187,61,4,111,61,1,59,61,1,31,61,1,11,61,1,106,187,61,203,61,235, |
61,3,175,61,1,139,61,1,127,61,1,91,61,1,79,61,1,27,61,1,251,61,1,223,61,239, |
61,2,187,61,203,61,2,175,61,1,100,61,148,61,2,27,61,43,61,75,61,3,4,61,1, |
244,61,1,139,61,171,61,219,61,3,127,61,1,107,61,1,52,61,1,27,61,1,15,61,1, |
57,187,61,219,61,251,61,3,160,61,1,116,61,148,61,2,43,61,75,61,91,61,3,31, |
61,1,11,61,1,203,61,235,61,251,61,3,164,61,1,27,61,75,61,91,61,123,61,4,244, |
61,1,208,61,1,2,96,61,144,61,160,61,192,61,4,79,61,1,48,61,1,47,61,1,0,64, |
19,61,1,8,34,53,80,40,16,25,6,80,31,16,19,15,47,13,0,21,0,63,50,50,63,63, |
237,50,63,237,50,1,94,93,93,93,93,93,95,93,93,113,113,113,114,114,114,114, |
114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,47, |
94,93,113,237,50,47,94,93,93,93,93,93,113,113,113,113,237,18,57,47,237,57, |
49,48,0,43,43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21, |
51,62,3,51,50,22,23,51,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,3,0,20,47,76,55,57,92,65,35,179,1,2,2,1,170,1,2,3,2,3,24,56,75,97,64,123, |
143,28,3,24,60,80,100,64,82,119,76,36,178,20,47,76,55,57,92,65,35,2,174,79, |
106,65,27,45,85,125,81,253,141,3,83,34,75,67,48,7,5,44,57,59,20,47,76,53, |
29,98,107,47,76,53,29,44,92,145,100,253,47,2,174,79,106,65,27,43,84,126,83, |
253,141,0,1,0,136,0,0,3,238,4,78,0,37,0,109,185,0,34,255,224,64,36,7,11,72, |
37,70,64,80,0,1,159,0,255,0,2,0,39,128,0,39,192,39,208,39,224,39,4,192,39, |
1,15,39,1,128,39,1,39,184,255,192,64,32,19,23,72,25,12,70,192,13,1,0,13,16, |
13,48,13,224,13,240,13,5,8,13,25,6,80,31,16,19,15,13,0,21,0,63,50,63,63,237, |
50,1,47,94,93,113,237,50,43,93,113,113,114,26,16,220,93,113,26,237,49,48, |
43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51, |
50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26, |
62,82,106,70,90,130,84,39,2,174,79,106,65,27,45,85,125,81,253,141,3,83,34, |
75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,253,47,0,0,0,0,2,0,86, |
255,236,4,29,4,78,0,14,0,34,0,116,64,59,121,32,137,32,2,116,28,132,28,2,118, |
22,134,22,2,121,18,137,18,2,150,12,166,12,2,4,12,20,12,2,11,9,27,9,2,11,5, |
27,5,2,4,2,20,2,2,7,0,71,64,144,15,1,15,36,128,48,36,1,36,184,255,192,64, |
20,30,35,72,223,36,1,25,71,31,8,1,8,20,80,10,16,30,80,3,22,0,63,237,63,237, |
1,47,93,237,93,43,113,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93, |
93,1,16,2,35,34,46,2,53,16,33,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,29,250,238,113,178,123,65,1,229,126,183,117,56,189,39,75,108,68, |
69,111,78,41,44,77,105,62,69,112,78,42,2,30,254,228,254,234,68,140,211,143, |
2,48,70,140,210,140,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0, |
0,2,0,132,254,87,4,29,4,77,0,38,0,58,0,148,64,16,105,56,121,56,2,105,42,121, |
42,2,134,36,150,36,2,36,184,255,224,64,19,7,10,72,73,31,89,31,2,73,7,89,7, |
2,134,3,150,3,2,3,184,255,224,64,63,7,10,72,0,71,64,160,39,1,39,60,128,49, |
28,15,70,0,16,16,16,48,16,240,16,4,8,16,176,60,1,63,60,1,112,60,144,60,2, |
31,60,1,255,60,1,192,60,224,60,2,28,44,80,34,16,22,15,15,27,8,54,80,5,22, |
0,63,237,50,63,63,63,237,50,1,93,93,113,113,114,114,47,94,93,237,50,50,26, |
16,220,93,26,237,49,48,43,93,93,93,43,93,93,93,1,20,14,2,35,34,38,39,35,30, |
3,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51,50,30,2,7,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,4,29,40,93,153,112,116,174,46,5,1,1,1,1,180,1,2,2, |
1,174,1,3,3,3,4,25,64,82,101,63,112,153,93,40,189,24,59,98,74,60,106,79,46, |
38,73,108,70,75,99,59,24,2,34,123,208,150,85,88,100,2,32,48,59,29,254,89, |
5,6,39,72,59,42,9,3,36,51,58,26,52,73,47,21,80,145,205,129,100,156,108,56, |
34,96,169,135,115,159,98,43,58,110,159,0,0,2,0,86,254,87,3,240,4,78,0,34, |
0,54,0,165,64,119,85,47,101,47,2,90,43,106,43,2,57,32,73,32,2,54,9,70,9,2, |
9,1,25,1,121,1,137,1,4,6,5,22,5,118,5,134,5,4,9,22,70,64,35,11,127,23,223, |
23,2,23,56,128,45,71,15,3,1,10,3,32,56,64,56,2,207,56,1,0,56,32,56,144,56, |
176,56,4,80,223,56,1,192,56,1,79,56,1,128,56,160,56,2,15,56,47,56,2,208,56, |
240,56,2,15,56,1,8,22,27,17,16,11,40,80,6,16,29,50,80,0,22,0,63,237,50,63, |
237,50,63,63,1,94,93,93,113,113,114,114,114,94,93,93,113,47,94,93,237,26, |
16,220,93,50,50,26,237,49,48,0,94,93,93,93,93,93,93,5,34,2,17,16,18,51,50, |
30,2,23,51,52,62,2,55,51,14,1,21,17,35,17,52,54,55,54,55,35,14,3,1,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,1,228,206,192,197,201,67,103,81,61,25, |
2,3,3,4,2,173,2,5,180,1,1,1,1,2,26,63,82,103,1,16,41,75,107,66,69,98,61,29, |
27,61,97,70,60,106,79,46,20,1,22,1,22,1,26,1,28,24,47,70,47,25,61,54,39,3, |
17,144,134,251,54,1,183,26,56,25,28,29,51,75,49,23,2,62,118,160,96,41,51, |
105,161,110,108,160,104,51,37,97,169,0,0,0,1,0,136,0,0,2,136,4,78,0,31,0, |
62,64,40,16,21,48,21,2,21,21,33,12,31,70,192,0,1,0,0,16,0,48,0,224,0,240, |
0,5,8,0,25,40,19,22,72,25,12,18,16,7,15,0,21,0,63,63,63,51,205,43,1,47,94, |
93,113,237,50,17,51,47,93,49,48,51,17,52,46,2,39,51,30,3,21,51,62,3,51,50, |
22,23,21,46,1,35,34,14,2,21,17,142,1,2,2,1,170,1,3,3,1,4,19,43,58,80,57,22, |
40,11,18,48,30,62,87,55,26,3,62,34,71,66,58,23,23,59,62,57,20,62,91,59,29, |
7,3,165,5,5,56,99,137,81,253,204,0,0,1,0,57,255,236,3,182,4,75,0,55,0,189, |
64,85,116,46,132,46,2,111,21,127,21,143,21,3,107,22,1,37,54,1,42,27,1,21, |
52,1,5,2,21,2,2,11,30,27,30,2,36,73,35,35,0,72,64,32,19,48,19,2,144,19,160, |
19,176,19,3,19,57,128,11,73,10,64,25,30,72,10,10,44,72,79,29,95,29,2,32,29, |
1,29,96,57,192,57,2,128,57,1,57,184,255,192,64,42,39,42,72,63,57,1,16,57, |
1,19,44,5,41,80,32,0,36,1,144,36,240,36,2,36,36,32,16,14,80,5,96,11,112,11, |
2,128,11,1,11,11,5,22,0,63,51,47,93,113,16,237,63,51,47,93,113,16,237,18, |
57,57,1,93,93,43,93,113,47,93,113,237,51,47,43,237,26,16,220,93,113,26,237, |
50,47,237,49,48,93,93,0,93,1,93,93,0,93,93,93,1,20,14,2,35,34,46,2,39,55, |
30,1,51,50,62,2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,6,21, |
20,30,2,23,30,5,3,182,59,112,163,105,94,151,114,77,18,159,23,144,128,58,97, |
70,39,46,82,117,70,65,128,103,64,211,202,179,211,28,162,9,48,68,85,46,122, |
116,43,77,108,65,43,90,85,75,56,33,1,43,76,119,81,43,29,64,105,76,31,87,81, |
16,39,65,48,49,63,42,31,19,17,42,69,102,77,148,155,126,139,20,42,57,35,15, |
74,75,44,57,39,29,16,11,25,35,47,66,88,0,0,0,0,1,0,31,255,240,2,42,5,44,0, |
22,0,123,64,87,40,14,1,105,14,121,14,137,14,3,40,13,1,105,13,121,13,137,13, |
3,139,4,1,4,32,9,13,72,108,4,124,4,156,4,172,4,4,4,32,9,12,72,111,22,127, |
22,2,22,12,13,22,3,16,70,9,8,143,5,1,0,5,16,5,32,5,64,5,4,7,5,128,24,1,15, |
6,80,12,63,10,1,10,9,15,19,80,3,22,0,63,237,63,205,93,51,237,50,1,93,47,94, |
93,113,51,51,237,23,50,47,93,49,48,0,43,93,1,43,93,93,113,93,113,37,14,1, |
35,34,53,17,35,53,51,55,51,21,51,21,35,17,20,22,51,50,54,55,2,42,41,85,56, |
216,125,132,53,120,200,200,51,63,26,49,29,8,11,13,245,2,210,131,242,242,131, |
253,85,78,63,8,6,0,0,0,0,1,0,133,255,236,3,235,4,58,0,37,0,121,64,69,150, |
3,1,26,33,42,33,58,33,3,25,14,70,64,47,11,143,11,2,191,11,1,143,11,159,11, |
255,11,3,11,39,128,1,70,223,36,239,36,2,0,36,16,36,48,36,240,36,4,8,36,176, |
39,192,39,208,39,3,176,39,240,39,2,255,39,1,112,39,1,39,184,255,192,64,13, |
19,23,72,25,6,80,31,22,19,21,12,0,15,0,63,50,63,63,237,50,1,43,93,93,113, |
114,47,94,93,113,237,26,16,220,93,113,114,26,237,51,49,48,0,93,93,1,17,20, |
30,2,51,50,62,2,53,17,51,17,20,30,2,23,35,46,3,53,35,14,3,35,34,46,2,53,17, |
1,58,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90, |
130,84,39,4,58,253,82,79,106,65,27,45,85,125,81,2,115,252,173,34,75,67,48, |
7,5,44,57,59,20,47,76,53,29,44,92,144,101,2,209,0,0,1,0,7,0,0,3,249,4,58, |
0,16,2,91,64,55,57,1,73,1,2,153,1,1,54,0,70,0,2,134,0,150,0,2,58,15,74,15, |
2,154,15,1,105,15,121,15,137,15,3,53,3,69,3,2,149,3,1,3,103,3,119,3,135,3, |
3,14,16,13,17,72,4,184,255,240,64,62,13,17,72,1,0,9,9,2,15,16,16,43,16,123, |
16,2,4,16,20,16,2,4,16,20,16,68,16,84,16,132,16,148,16,196,16,212,16,8,219, |
16,1,68,16,84,16,132,16,148,16,196,16,5,27,16,1,4,16,1,8,16,3,2,184,255,240, |
64,255,11,2,91,2,2,42,2,11,18,27,18,2,11,18,27,18,75,18,91,18,139,18,155, |
18,203,18,219,18,8,255,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18, |
1,68,18,84,18,2,32,18,1,4,18,20,18,2,199,224,18,1,196,18,212,18,2,160,18, |
1,4,18,20,18,68,18,84,18,132,18,148,18,6,68,18,84,18,132,18,148,18,196,18, |
212,18,6,27,18,1,4,18,1,219,18,1,196,18,1,155,18,1,132,18,1,91,18,1,68,18, |
1,27,18,1,4,18,1,151,11,18,27,18,75,18,91,18,139,18,155,18,203,18,219,18, |
8,155,18,203,18,219,18,3,132,18,1,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18, |
2,224,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,4,18,20,18,68, |
18,84,18,4,103,4,18,20,18,68,18,84,18,132,18,148,18,196,18,212,18,8,219,18, |
1,196,18,1,155,18,1,132,18,1,91,18,1,68,18,1,27,18,1,4,18,1,219,18,1,196, |
18,1,11,18,27,18,75,18,64,99,91,18,139,18,155,18,6,55,75,18,91,18,139,18, |
155,18,203,18,219,18,6,63,18,1,32,18,1,4,18,20,18,2,224,18,1,196,18,212,18, |
2,160,18,1,132,18,148,18,2,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18,2,196, |
18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,2,80,18,1,47,18,1,0,18,16,18, |
2,7,15,2,15,9,1,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93,93,113,113,113, |
113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113, |
113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114,94,93,93,93,93,93, |
93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93,93,93,93,113,114,47, |
94,93,56,51,47,94,93,93,93,93,113,114,114,56,51,18,57,61,47,51,51,49,48,43, |
43,93,95,93,113,93,93,113,93,113,93,113,33,35,1,51,19,30,3,23,62,3,55,19, |
51,2,101,213,254,119,192,238,7,19,20,17,6,6,19,20,21,8,246,191,4,58,253,64, |
22,63,68,63,21,21,63,66,63,22,2,194,0,0,0,0,1,255,253,0,0,5,204,4,58,0,42, |
3,177,64,36,229,23,1,58,41,74,41,2,122,41,138,41,154,41,3,53,16,69,16,2,117, |
16,133,16,149,16,3,54,29,70,29,2,54,29,1,29,184,255,240,64,22,13,17,72,57, |
28,73,28,2,57,28,1,28,16,13,17,72,54,0,70,0,2,0,184,255,240,64,9,11,17,72, |
54,13,70,13,2,13,184,255,240,64,51,11,17,72,57,1,73,1,2,1,16,11,17,72,57, |
14,73,14,2,3,14,16,9,17,72,14,13,22,29,28,7,1,0,35,40,35,1,88,35,1,22,7,35, |
35,7,22,3,15,41,42,16,42,184,255,192,64,73,47,50,72,73,42,1,52,42,1,38,42, |
1,249,42,1,198,42,230,42,2,164,42,1,150,42,1,121,42,1,54,42,70,42,102,42, |
3,25,42,1,244,42,1,182,42,230,42,2,132,42,148,42,2,102,42,118,42,2,57,42, |
1,38,42,1,20,42,1,6,42,1,8,42,16,15,184,255,240,64,255,9,15,89,15,105,15, |
121,15,4,10,15,198,44,230,44,246,44,3,164,44,1,150,44,1,121,44,1,102,44,1, |
84,44,1,54,44,70,44,2,25,44,1,244,44,1,230,44,1,196,44,1,182,44,1,153,44, |
1,134,44,1,116,44,1,102,44,1,57,44,1,20,44,36,44,2,6,44,1,202,249,44,1,150, |
44,182,44,198,44,230,44,4,105,44,1,54,44,70,44,2,9,44,25,44,2,230,44,1,185, |
44,1,86,44,102,44,134,44,3,57,44,1,43,44,1,20,44,1,6,44,1,228,44,1,214,44, |
1,196,44,1,182,44,1,162,44,1,148,44,1,134,44,1,114,44,1,100,44,1,86,44,1, |
52,44,68,44,2,34,44,1,20,44,1,6,44,1,153,246,44,1,194,44,210,44,2,180,44, |
1,166,44,1,132,44,1,118,44,1,84,44,100,44,2,66,44,1,52,44,1,22,44,38,44,2, |
4,44,1,226,44,242,44,2,212,44,1,198,44,1,164,44,1,146,44,1,132,44,1,102,44, |
118,44,2,84,44,1,54,44,70,44,2,36,44,1,22,44,1,4,44,1,244,44,64,213,1,230, |
44,1,196,44,1,178,44,1,164,44,1,102,44,134,44,150,44,3,68,44,84,44,2,54,44, |
1,20,44,1,6,44,1,105,246,44,1,226,44,1,212,44,1,150,44,182,44,198,44,3,116, |
44,132,44,2,54,44,70,44,102,44,3,36,44,1,6,44,22,44,2,244,44,1,182,44,230, |
44,2,148,44,164,44,2,134,44,1,105,44,1,86,44,1,68,44,1,6,44,54,44,2,228,44, |
1,214,44,1,196,44,1,166,44,182,44,2,137,44,1,114,44,1,1,96,44,1,4,44,36,44, |
84,44,3,56,164,44,196,44,212,44,244,44,4,128,44,1,116,44,1,75,44,1,48,44, |
1,20,44,36,44,2,251,44,1,196,44,1,160,44,1,148,44,1,123,44,1,52,44,68,44, |
100,44,3,27,44,1,240,44,1,228,44,1,203,44,1,100,44,132,44,148,44,180,44,4, |
63,44,1,2,0,44,16,44,2,8,7,184,255,224,64,40,14,17,72,66,7,1,52,7,1,34,7, |
1,7,28,41,3,15,15,35,40,12,17,72,45,35,1,22,40,12,17,72,45,22,1,1,22,35,3, |
14,21,0,63,23,51,93,43,93,43,63,23,51,93,93,93,43,1,94,93,95,93,93,93,93, |
93,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93,93,95,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,47,94,93, |
56,51,47,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114, |
43,56,51,18,23,57,61,47,47,47,113,114,17,51,51,17,51,51,17,51,51,49,48,43, |
95,113,43,113,43,113,43,113,43,93,113,43,93,113,93,113,93,113,113,33,35,3, |
46,1,39,38,39,6,7,14,1,7,3,35,1,51,19,30,1,23,22,23,54,55,62,1,55,19,51,19, |
30,1,23,22,23,54,55,62,1,55,19,51,4,150,209,173,8,17,8,10,9,9,10,8,19,8,178, |
208,254,209,178,183,7,14,7,7,8,8,9,8,16,6,196,193,189,7,16,7,8,8,8,8,7,15, |
7,191,176,2,186,27,80,38,44,47,45,44,38,82,31,253,74,4,58,253,33,23,67,32, |
37,39,38,36,31,64,21,2,231,253,25,26,66,29,34,35,38,36,31,67,26,2,223,0,0, |
1,0,23,0,0,3,234,4,58,0,11,2,214,64,72,148,2,1,134,2,1,141,8,157,8,2,121, |
8,1,130,6,146,6,2,118,6,1,141,0,157,0,2,121,0,1,55,10,119,10,2,28,10,1,122, |
4,1,19,4,1,3,24,1,120,1,136,1,152,1,4,23,7,135,7,151,7,3,6,8,10,1,7,4,4,9, |
9,16,5,184,255,240,64,59,5,9,5,9,3,0,11,16,41,11,57,11,2,4,11,20,11,2,214, |
11,230,11,246,11,3,196,11,1,150,11,166,11,182,11,3,132,11,1,6,11,38,11,70, |
11,102,11,134,11,150,11,166,11,198,11,230,11,9,8,11,184,255,192,181,24,31, |
72,11,2,3,184,255,240,64,11,9,3,1,9,3,57,3,2,10,3,13,184,255,128,64,116,223, |
233,72,118,13,1,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,230, |
13,246,13,2,210,13,1,192,13,1,178,13,1,132,13,148,13,164,13,3,118,13,1,100, |
13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,199,246,13,1,228,13,1, |
214,13,1,196,13,1,182,13,1,164,13,1,6,13,70,13,86,13,134,13,150,13,166,13, |
198,13,214,13,230,13,9,150,13,198,13,2,13,184,255,192,64,187,183,192,72,132, |
13,1,86,13,102,13,118,13,3,68,13,1,38,13,54,13,2,4,13,1,151,38,13,54,13,102, |
13,118,13,166,13,182,13,198,13,230,13,246,13,9,230,13,1,132,13,1,118,13,1, |
68,13,84,13,100,13,3,54,13,1,36,13,1,22,13,1,4,13,1,246,13,1,228,13,1,214, |
13,1,196,13,1,182,13,1,164,13,1,118,13,134,13,150,13,3,100,13,1,6,13,22,13, |
38,13,70,13,86,13,5,103,6,13,70,13,86,13,134,13,150,13,198,13,214,13,230, |
13,8,153,13,217,13,2,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13, |
1,214,13,230,13,246,13,3,196,13,1,6,13,38,13,54,13,70,13,4,55,102,13,166, |
13,182,13,230,13,246,13,5,13,184,255,192,64,54,61,66,72,57,13,1,34,13,1,1, |
0,13,16,13,2,244,13,1,192,13,208,13,224,13,3,180,13,1,128,13,144,13,160,13, |
3,116,13,1,96,13,1,84,13,1,64,13,1,52,13,1,32,13,1,13,184,255,192,64,34,18, |
24,72,160,13,1,2,0,13,16,13,80,13,112,13,128,13,144,13,6,7,10,4,4,7,1,3,2, |
8,6,15,0,2,21,0,63,51,63,51,18,23,57,17,1,51,94,93,95,93,43,113,113,113,113, |
113,113,113,113,113,113,114,95,114,114,43,114,94,93,93,93,113,113,113,113, |
113,113,113,113,114,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
113,113,114,94,93,93,93,93,93,43,93,113,114,114,114,114,114,114,94,93,93, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,43,47,94, |
93,114,56,51,47,43,94,93,113,113,113,113,114,114,56,51,18,57,57,47,47,56, |
56,18,23,57,50,51,49,48,0,93,93,1,95,93,93,93,93,93,93,93,93,93,93,93,93, |
33,9,1,35,9,1,51,9,1,51,9,1,3,33,254,221,254,219,194,1,129,254,145,199,1, |
14,1,12,201,254,145,1,134,1,188,254,68,2,44,2,14,254,91,1,165,253,244,253, |
210,0,0,0,0,1,0,5,254,87,3,252,4,58,0,31,2,207,64,59,147,3,1,147,2,1,153, |
16,1,150,0,1,141,16,157,16,2,141,0,157,0,2,122,29,138,29,154,29,3,105,29, |
1,157,30,1,30,16,13,16,72,146,19,1,134,19,1,114,19,1,86,19,102,19,2,146,18, |
1,3,18,184,255,240,64,36,13,16,72,16,0,24,8,24,8,24,17,30,31,16,153,31,1, |
134,31,1,89,31,1,70,31,1,25,31,1,6,31,1,8,31,18,17,184,255,240,64,36,17,6, |
33,1,6,33,38,33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230, |
33,246,33,12,199,230,33,246,33,2,33,184,255,192,64,255,217,233,72,196,33, |
1,166,33,182,33,2,132,33,1,6,33,38,33,54,33,70,33,102,33,118,33,6,6,33,38, |
33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230,33,246,33,12, |
6,33,22,33,38,33,70,33,86,33,102,33,134,33,166,33,198,33,230,33,246,33,11, |
151,244,33,1,224,33,1,194,33,210,33,2,180,33,1,160,33,1,130,33,146,33,2,116, |
33,1,96,33,1,66,33,82,33,2,52,33,1,32,33,1,2,33,18,33,2,228,33,244,33,2,194, |
33,210,33,2,164,33,180,33,2,130,33,146,33,2,100,33,116,33,2,66,33,82,33,2, |
36,33,52,33,2,2,33,18,33,2,228,33,244,33,2,194,33,210,33,2,164,33,180,33, |
2,130,33,146,33,2,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2, |
33,1,103,228,33,244,33,2,214,33,1,194,33,1,164,33,180,33,2,150,33,1,130,33, |
1,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2,33,1,228,33,244, |
33,2,214,33,1,64,166,194,33,1,1,160,33,176,33,2,132,33,148,33,2,96,33,112, |
33,2,68,33,84,33,2,32,33,48,33,2,4,33,20,33,2,224,33,240,33,2,196,33,212, |
33,2,160,33,176,33,2,132,33,148,33,2,96,33,112,33,2,68,33,84,33,2,32,33,48, |
33,2,4,33,20,33,2,55,224,33,1,196,33,212,33,2,160,33,1,132,33,148,33,2,96, |
33,1,68,33,84,33,2,32,33,1,4,33,20,33,2,224,33,1,196,33,212,33,2,160,33,1, |
132,33,148,33,2,96,33,1,2,0,33,32,33,48,33,80,33,4,80,33,128,33,144,33,192, |
33,4,47,33,1,0,33,16,33,2,7,16,0,24,0,32,30,17,15,12,80,5,27,0,63,237,63, |
51,17,51,51,17,51,1,94,93,93,93,113,95,113,113,113,113,113,114,114,114,114, |
114,114,114,114,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,95,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,114,114,114,94,93,113,114,114,114,114,43,114,94,93,113,47,56,51,47, |
94,93,93,93,93,93,93,56,51,18,57,57,61,47,24,47,17,51,51,49,48,43,95,93,93, |
93,93,93,43,93,93,93,0,93,93,1,93,93,93,93,33,14,3,35,34,38,39,53,30,1,51, |
50,54,63,1,1,51,19,30,3,23,62,3,55,19,51,2,92,38,79,98,120,78,34,58,32,19, |
48,17,79,136,51,17,254,83,192,228,10,31,31,24,2,3,23,29,30,10,212,190,98, |
157,111,59,4,7,135,3,3,118,129,43,4,53,253,170,27,90,90,72,9,11,65,80,82, |
30,2,106,0,1,0,49,0,0,3,182,4,58,0,9,1,11,64,78,157,2,173,2,2,139,2,1,89, |
2,105,2,2,146,7,162,7,2,116,7,132,7,2,70,7,86,7,102,7,3,40,8,1,3,8,2,123, |
6,1,4,6,20,6,36,6,164,6,180,6,212,6,228,6,7,7,6,7,3,11,1,59,1,91,1,3,10,1, |
64,39,55,72,1,64,17,20,72,1,11,184,255,192,64,40,92,100,72,192,11,1,180,11, |
1,160,11,1,148,11,1,128,11,1,116,11,1,96,11,1,84,11,1,64,11,1,52,11,68,11, |
100,11,132,11,4,11,184,255,192,64,32,73,82,72,32,11,1,20,11,1,0,11,1,63,68, |
11,100,11,132,11,164,11,4,4,11,36,11,68,11,100,11,4,11,184,255,192,179,51, |
62,72,11,184,255,192,64,18,31,39,72,224,11,1,2,0,11,32,11,80,11,112,11,4, |
7,11,184,255,192,64,13,16,20,72,6,3,80,4,15,1,7,80,0,21,0,63,237,50,63,237, |
50,1,43,94,93,95,93,43,43,113,114,94,93,93,93,43,93,113,113,113,113,113,113, |
113,113,113,43,47,43,43,94,93,51,51,47,94,93,113,51,51,95,113,49,48,93,93, |
93,93,93,93,51,53,1,33,53,33,21,1,33,21,49,2,149,253,147,3,56,253,106,2,187, |
137,3,38,139,137,252,218,139,0,0,0,1,0,34,254,87,2,136,5,204,0,45,0,96,64, |
65,3,32,9,12,72,19,32,9,13,72,23,45,33,28,40,240,17,11,31,5,63,5,2,143,5, |
1,64,5,1,5,33,11,245,47,12,111,12,2,15,12,79,12,223,12,239,12,4,47,12,79, |
12,111,12,3,12,12,0,24,245,21,0,43,245,0,27,0,63,237,63,237,18,57,47,93,113, |
114,237,57,1,47,93,93,113,51,51,237,50,50,205,50,49,48,43,43,1,34,46,2,53, |
17,52,46,2,39,53,62,3,53,17,52,54,59,1,21,35,34,6,21,17,20,14,2,7,21,30,3, |
21,17,20,22,59,1,21,2,1,65,99,66,34,29,55,80,51,51,80,55,29,133,131,135,63, |
91,77,30,52,71,41,43,71,51,29,77,91,63,254,87,41,76,108,68,1,105,63,88,56, |
28,2,127,2,28,56,88,62,1,106,141,152,129,107,108,254,156,50,84,64,44,10,2, |
10,44,65,84,51,254,155,106,109,129,0,1,0,183,254,78,1,93,5,204,0,3,1,207, |
64,21,3,171,6,0,1,11,0,0,4,5,214,5,230,5,246,5,3,194,5,1,5,184,255,128,179, |
226,229,72,5,184,255,192,64,10,222,225,72,2,5,18,5,2,218,5,184,255,128,179, |
214,217,72,5,184,255,192,64,20,210,213,72,180,5,196,5,2,162,5,1,1,112,5,128, |
5,144,5,3,5,184,255,192,64,20,199,202,72,0,5,1,240,5,1,212,5,228,5,2,176, |
5,192,5,2,5,184,255,192,64,43,187,190,72,48,5,64,5,80,5,3,4,5,20,5,36,5,3, |
240,5,1,196,5,212,5,228,5,3,128,5,144,5,160,5,3,4,5,20,5,36,5,3,164,5,184, |
255,192,179,168,171,72,5,184,255,128,179,160,163,72,5,184,255,192,64,14,156, |
159,72,112,5,128,5,144,5,3,228,5,1,5,184,255,192,64,11,145,148,72,176,5,192, |
5,208,5,3,5,184,255,192,64,15,133,136,72,48,5,1,20,5,36,5,2,0,5,1,5,184,255, |
192,64,15,122,125,72,128,5,1,4,5,20,5,36,5,3,110,5,184,255,192,64,10,114, |
117,72,192,5,1,84,5,1,5,184,255,192,182,102,105,72,16,5,1,5,184,255,192,64, |
9,91,94,72,80,5,96,5,2,5,184,255,192,64,15,79,82,72,203,5,219,5,2,160,5,176, |
5,2,2,5,184,255,192,64,10,68,71,72,15,5,31,5,2,62,5,184,255,192,64,29,56, |
61,72,207,5,1,96,5,112,5,160,5,176,5,4,31,5,1,0,5,1,160,5,224,5,240,5,3,5, |
184,255,192,64,28,25,28,72,5,64,17,21,72,64,5,112,5,128,5,144,5,4,15,5,31, |
5,47,5,3,7,1,0,0,0,47,63,1,94,93,93,43,43,113,114,114,114,114,43,94,93,43, |
95,93,93,43,113,43,114,43,114,114,43,94,93,93,43,113,113,113,43,113,43,113, |
114,43,43,43,94,93,93,93,93,113,113,43,113,113,113,114,43,114,95,114,114, |
43,43,94,93,43,43,93,93,17,18,57,47,94,93,237,49,48,19,17,51,17,183,166,254, |
78,7,126,248,130,0,0,0,0,1,0,34,254,87,2,135,5,204,0,45,0,98,185,0,40,255, |
224,179,9,12,72,24,184,255,224,64,55,9,13,72,20,44,32,26,38,240,15,9,48,3, |
1,192,3,208,3,2,3,9,32,245,47,31,111,31,2,15,31,79,31,223,31,239,31,4,47, |
31,79,31,111,31,3,31,31,21,45,245,44,27,20,245,21,0,0,63,237,63,237,18,57, |
47,93,113,114,237,57,1,47,93,113,51,51,253,50,50,205,50,49,48,43,43,19,50, |
54,53,17,52,62,2,55,53,46,3,53,17,52,38,43,1,53,51,50,22,21,17,20,30,2,23, |
21,14,3,21,17,20,14,2,43,1,53,94,91,79,28,51,71,43,42,70,52,29,79,91,60,132, |
131,133,29,55,81,52,52,81,55,29,34,66,99,65,132,254,216,109,106,1,101,51, |
84,65,44,10,2,10,44,64,84,50,1,100,108,107,129,152,141,254,150,62,88,56,28, |
2,127,2,28,56,88,63,254,151,68,108,76,41,129,0,0,0,0,1,0,92,2,41,4,80,3,39, |
0,32,0,154,64,26,90,3,138,3,2,25,2,41,2,57,2,3,30,48,10,16,72,13,31,1,25, |
48,9,12,72,13,184,255,208,179,9,13,72,7,184,255,208,64,19,9,13,72,0,27,32, |
27,112,27,3,27,32,10,1,10,24,173,64,10,184,255,192,180,38,60,72,10,0,184, |
255,192,179,23,28,72,0,184,255,192,64,41,14,20,72,0,128,27,64,41,60,72,27, |
5,173,31,14,79,14,159,14,3,111,14,127,14,159,14,175,14,207,14,239,14,255, |
14,7,14,64,9,13,72,14,0,47,43,93,113,237,196,43,26,221,43,43,196,43,26,237, |
1,47,93,47,93,49,48,0,43,43,43,93,43,93,93,1,34,38,39,38,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,76,69,145,73,129,88,38,65,60, |
56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68,2,41, |
44,26,45,12,23,32,21,143,38,46,13,20,26,13,8,15,14,8,50,42,149,23,30,19,8, |
0,0,0,2,0,242,254,185,1,184,4,58,0,3,0,7,2,19,64,133,2,91,3,3,166,5,182,5, |
2,5,150,105,6,185,6,2,70,6,86,6,2,57,6,1,6,64,23,27,72,182,6,198,6,2,73,6, |
89,6,105,6,3,22,6,54,6,2,9,6,1,10,6,121,9,137,9,153,9,201,9,4,70,9,1,9,9, |
57,9,2,249,9,1,182,9,1,105,9,121,9,169,9,3,38,9,1,9,9,1,204,217,9,233,9,2, |
150,9,1,73,9,89,9,121,9,3,6,9,1,185,9,201,9,2,134,9,1,116,9,1,86,9,102,9, |
2,68,9,1,22,9,38,9,54,9,3,9,184,255,192,64,14,168,171,72,180,9,1,134,9,150, |
9,166,9,3,9,184,255,192,64,22,159,162,72,36,9,1,6,9,22,9,2,156,182,9,198, |
9,214,9,246,9,4,9,184,255,64,64,14,147,150,72,102,9,1,150,9,166,9,182,9,3, |
9,184,255,192,64,24,137,144,72,98,9,114,9,130,9,3,64,9,80,9,2,34,9,50,9,2, |
16,9,1,9,184,255,64,182,117,124,72,128,9,1,9,184,255,64,64,10,110,115,72, |
4,9,20,9,2,108,9,184,255,64,64,62,101,107,72,180,9,196,9,212,9,3,150,9,166, |
9,2,132,9,1,118,9,1,82,9,98,9,2,36,9,52,9,68,9,3,6,9,22,9,2,246,9,1,194,9, |
210,9,2,1,144,9,160,9,176,9,3,100,9,116,9,132,9,3,9,184,255,128,64,16,71, |
75,72,212,9,228,9,244,9,3,160,9,176,9,2,9,184,255,192,64,61,59,64,72,16,9, |
32,9,2,4,9,1,55,180,9,228,9,244,9,3,128,9,144,9,2,84,9,100,9,116,9,3,27,9, |
1,0,9,1,240,9,1,196,9,212,9,228,9,3,84,9,100,9,164,9,212,9,228,9,244,9,6, |
9,184,255,192,64,20,26,31,72,64,9,1,2,15,9,1,7,0,6,156,7,15,0,3,1,3,0,47, |
93,63,253,206,1,94,93,95,93,43,93,113,113,114,114,114,114,114,94,93,93,43, |
93,93,43,113,113,95,113,113,114,114,114,114,114,114,114,43,94,93,43,93,43, |
113,113,113,113,43,113,114,43,114,94,93,93,43,93,93,43,113,113,113,113,113, |
113,114,114,114,114,94,93,93,93,93,93,113,113,113,47,94,93,93,93,93,43,113, |
113,113,237,113,51,47,237,49,48,1,51,19,35,19,21,35,53,1,10,148,24,196,198, |
194,2,173,252,12,5,129,201,201,0,0,0,1,0,135,255,225,3,250,5,129,0,43,0,137, |
64,31,88,14,104,14,2,87,20,103,20,2,26,28,1,21,6,1,6,3,1,25,10,22,0,11,1, |
11,11,3,39,71,17,184,255,192,64,56,8,11,72,17,31,70,30,30,3,70,4,34,80,217, |
31,1,124,31,140,31,2,25,31,1,31,22,96,25,112,25,2,160,25,1,25,23,3,12,213, |
3,1,112,3,128,3,2,21,3,101,3,2,3,0,80,9,10,0,47,221,237,51,93,93,93,51,63, |
221,93,113,50,50,93,93,93,237,1,47,237,51,47,237,47,43,237,18,57,47,113,51, |
205,50,49,48,0,93,93,93,93,93,1,50,54,55,23,14,3,7,21,35,53,46,3,53,52,62, |
2,55,53,51,21,30,3,23,7,46,1,35,34,14,2,21,20,30,2,2,84,96,129,15,182,8,51, |
88,126,83,124,111,154,95,43,66,111,146,80,124,78,120,86,54,12,185,14,114, |
105,77,103,64,27,27,64,105,1,21,104,108,12,62,116,92,62,8,168,168,10,93,149, |
195,113,150,206,131,63,7,155,155,8,55,85,109,63,14,90,106,51,103,156,105, |
93,156,113,62,0,0,1,0,58,0,0,4,80,5,150,0,50,0,210,64,83,70,23,1,54,2,70, |
2,2,21,18,37,18,53,18,3,36,0,39,13,6,26,111,25,25,39,0,44,110,6,35,39,110, |
14,95,10,1,10,10,0,79,6,95,6,111,6,3,6,50,111,0,0,32,0,2,0,0,32,0,48,0,80, |
0,112,0,144,0,176,0,208,0,8,0,0,16,0,48,0,192,0,224,0,5,0,184,255,192,64, |
64,14,18,72,0,38,11,81,35,15,14,31,14,175,14,3,15,14,63,14,111,14,127,14, |
159,14,175,14,207,14,223,14,8,8,14,64,37,42,72,14,64,27,32,72,14,14,44,31, |
115,26,20,7,7,44,116,22,50,118,50,134,50,3,50,6,24,0,63,51,93,237,50,63,51, |
237,18,57,47,43,43,94,93,113,51,237,50,1,47,43,93,113,114,237,47,93,18,57, |
47,113,51,237,50,16,237,17,18,57,47,237,17,51,17,18,57,49,48,0,93,1,93,0, |
93,1,14,3,35,33,53,62,1,61,1,35,53,51,17,52,62,2,51,50,30,2,23,7,46,3,35, |
34,6,21,17,33,21,33,21,20,14,2,7,33,50,62,2,55,4,80,9,57,89,115,67,253,70, |
89,86,186,186,48,99,152,103,70,123,99,71,18,174,10,39,53,65,36,114,112,1, |
152,254,104,22,44,63,40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160, |
121,144,129,1,24,92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,254,224, |
129,126,56,106,92,71,21,19,42,67,48,0,0,0,2,0,113,0,225,4,2,4,115,0,35,0, |
55,0,153,64,119,74,29,90,29,106,29,3,44,29,60,29,2,74,25,90,25,106,25,3,44, |
25,60,25,2,69,11,85,11,101,11,3,35,11,51,11,2,69,7,85,7,101,7,3,35,7,51,7, |
2,74,34,90,34,106,34,3,45,34,61,34,2,69,20,85,20,101,20,3,35,20,51,20,2,69, |
16,85,16,101,16,3,35,16,51,16,2,74,2,90,2,106,2,3,45,2,61,2,2,46,176,18,36, |
176,207,0,223,0,2,0,0,1,0,47,57,1,41,176,27,51,176,9,0,47,237,220,237,1,93, |
47,93,93,237,220,237,49,48,93,93,93,93,93,93,93,93,0,93,93,93,93,93,93,93, |
93,19,52,54,55,39,55,23,62,1,51,50,22,23,55,23,7,30,1,21,20,6,7,23,7,39,14, |
1,35,34,38,39,7,39,55,46,1,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,137, |
41,37,100,104,99,54,127,73,71,126,54,97,104,96,37,43,44,38,100,102,101,54, |
126,71,72,128,52,105,102,102,37,41,154,44,77,102,58,57,102,77,44,44,77,102, |
57,58,102,77,44,2,172,71,127,54,100,103,101,39,43,42,38,97,105,96,54,127, |
71,71,128,53,100,105,101,37,41,42,38,105,105,102,54,127,73,58,102,76,44,44, |
76,102,58,58,102,76,45,45,76,102,0,1,255,254,0,0,4,118,5,129,0,22,0,185,64, |
134,151,0,167,0,2,152,17,168,17,2,73,22,1,70,18,1,155,21,171,21,2,74,21,106, |
21,122,21,138,21,4,148,19,164,19,2,69,19,101,19,117,19,133,19,4,19,15,18, |
31,18,79,18,143,18,4,18,9,21,0,22,16,22,64,22,128,22,4,22,20,4,0,8,92,17, |
13,0,9,16,9,64,9,128,9,4,7,9,3,15,81,16,7,11,81,4,47,12,159,12,175,12,3,12, |
64,41,45,72,0,12,16,12,32,12,160,12,4,12,20,0,0,16,1,15,16,175,16,2,8,16, |
16,8,21,18,3,8,18,0,63,63,51,18,57,47,94,93,113,51,51,222,93,43,113,50,237, |
50,16,237,50,1,47,94,93,51,51,253,50,50,57,204,93,50,16,204,93,50,49,48,93, |
93,93,93,93,93,93,93,1,33,21,33,21,33,21,33,17,35,17,33,53,33,55,33,53,33, |
1,51,9,1,51,2,208,1,65,254,129,1,127,254,129,178,254,131,1,125,2,254,129, |
1,64,254,91,199,1,115,1,119,199,2,197,125,154,127,254,209,1,47,127,154,125, |
2,188,253,121,2,135,0,2,0,183,254,78,1,93,5,204,0,3,0,7,1,221,64,23,3,7,171, |
0,6,4,1,11,4,4,8,9,214,9,230,9,246,9,3,194,9,1,9,184,255,128,179,226,229, |
72,9,184,255,192,64,10,222,225,72,2,9,18,9,2,218,9,184,255,128,179,214,217, |
72,9,184,255,192,64,20,210,213,72,180,9,196,9,2,162,9,1,1,112,9,128,9,144, |
9,3,9,184,255,192,64,20,199,202,72,0,9,1,240,9,1,212,9,228,9,2,176,9,192, |
9,2,9,184,255,192,64,43,187,190,72,48,9,64,9,80,9,3,4,9,20,9,36,9,3,240,9, |
1,196,9,212,9,228,9,3,128,9,144,9,160,9,3,4,9,20,9,36,9,3,164,9,184,255,192, |
179,168,171,72,9,184,255,128,179,160,163,72,9,184,255,192,64,14,156,159,72, |
112,9,128,9,144,9,3,228,9,1,9,184,255,192,64,11,145,148,72,176,9,192,9,208, |
9,3,9,184,255,192,64,15,133,136,72,48,9,1,20,9,36,9,2,0,9,1,9,184,255,192, |
64,15,122,125,72,128,9,1,4,9,20,9,36,9,3,110,9,184,255,192,64,10,114,117, |
72,192,9,1,84,9,1,9,184,255,192,182,102,105,72,16,9,1,9,184,255,192,64,9, |
91,94,72,80,9,96,9,2,9,184,255,192,64,15,79,82,72,203,9,219,9,2,160,9,176, |
9,2,2,9,184,255,192,64,10,68,71,72,15,9,31,9,2,62,9,184,255,192,64,29,56, |
61,72,207,9,1,96,9,112,9,160,9,176,9,4,31,9,1,0,9,1,160,9,224,9,240,9,3,9, |
184,255,192,64,33,25,28,72,9,64,17,21,72,64,9,112,9,128,9,144,9,4,15,9,31, |
9,47,9,3,7,5,0,5,0,1,4,1,0,0,63,47,18,57,57,47,47,1,94,93,93,43,43,113,114, |
114,114,114,43,94,93,43,95,93,93,43,113,43,114,43,114,114,43,94,93,93,43, |
113,113,113,43,113,43,113,114,43,43,43,94,93,93,93,93,113,113,43,113,113, |
113,114,43,114,95,114,114,43,43,94,93,43,43,93,93,17,18,57,47,94,93,51,237, |
50,49,48,19,17,51,17,3,17,51,17,183,166,166,166,2,194,3,10,252,246,251,140, |
3,11,252,245,0,0,0,0,2,0,115,255,84,4,0,5,204,0,77,0,97,1,79,64,144,117,47, |
133,47,2,122,8,138,8,2,100,85,1,43,85,107,85,2,45,81,109,81,2,45,57,109,57, |
125,57,141,57,4,85,96,117,96,133,96,3,83,62,115,62,131,62,3,83,90,115,90, |
131,90,3,121,80,137,80,2,111,80,1,90,80,1,45,80,1,116,16,132,16,2,54,16,70, |
16,2,42,73,1,37,42,1,37,45,1,43,3,1,25,3,1,5,31,21,31,2,5,36,21,36,2,11,76, |
27,76,2,14,73,75,34,73,55,144,75,1,75,55,75,55,78,70,29,65,24,6,73,5,5,24, |
73,160,78,1,0,78,32,78,64,78,144,78,4,78,184,255,192,179,29,33,72,78,184, |
255,192,64,18,21,26,72,78,45,73,44,44,88,73,0,65,32,65,176,65,3,65,184,255, |
192,64,68,34,38,72,65,217,55,1,203,55,1,188,55,1,152,55,1,245,3,1,230,3,1, |
149,3,1,121,83,1,106,83,1,218,83,1,155,83,1,228,14,244,14,2,166,14,1,119, |
14,135,14,2,104,14,1,14,83,93,55,4,0,50,81,45,39,11,81,6,0,0,0,63,50,237, |
47,51,237,18,23,57,93,93,93,93,93,93,113,113,93,93,93,93,93,93,93,1,47,43, |
93,237,51,47,237,47,43,43,93,113,237,50,16,237,17,18,57,57,17,57,57,47,47, |
114,16,237,16,237,49,48,93,93,93,93,93,0,93,93,1,93,0,93,93,93,93,93,93,93, |
93,93,93,93,93,1,93,93,93,1,50,30,2,23,7,46,3,35,34,6,21,20,30,2,23,30,3, |
21,20,14,2,7,30,3,21,20,14,2,35,34,46,2,39,55,30,3,51,50,62,2,53,52,46,2, |
39,46,3,53,52,62,2,55,46,3,53,52,54,1,52,46,2,39,14,3,21,20,30,2,23,62,3, |
2,76,79,138,108,73,15,161,8,46,68,84,46,125,129,50,83,109,59,68,139,112,70, |
28,55,82,54,49,79,55,30,58,112,164,107,93,154,117,79,19,161,12,54,78,100, |
57,58,102,76,45,57,95,123,65,65,131,104,65,32,59,84,53,42,75,57,33,211,1, |
225,53,88,113,61,58,89,60,31,49,82,108,60,54,93,68,39,5,204,30,63,98,69,20, |
45,58,34,13,79,71,45,64,46,32,14,16,46,73,106,76,45,87,73,55,13,21,51,64, |
81,51,73,117,83,44,27,64,104,77,31,55,67,37,13,18,40,65,47,54,72,51,36,16, |
15,46,73,105,74,45,83,71,53,15,14,46,64,80,48,139,155,252,203,48,69,51,35, |
14,3,33,52,69,39,46,66,48,34,15,1,24,47,70,0,0,0,0,2,0,45,4,195,2,90,5,123, |
0,3,0,7,0,193,178,3,133,0,184,255,192,179,19,22,72,0,184,255,192,64,131,13, |
16,72,0,7,133,4,64,19,22,72,4,64,14,17,72,4,1,5,145,0,59,4,1,45,4,1,11,4, |
27,4,2,57,253,4,1,235,4,1,219,4,1,201,4,1,171,4,187,4,2,153,4,1,141,4,1,1, |
4,128,44,48,72,27,4,43,4,2,15,4,1,235,4,251,4,2,191,4,207,4,223,4,3,171,4, |
1,159,4,1,123,4,139,4,2,111,4,1,91,4,1,79,4,1,59,4,1,31,4,47,4,2,2,15,4,63, |
4,175,4,191,4,4,4,64,22,25,72,4,64,14,17,72,4,0,47,43,43,93,95,113,113,113, |
113,113,113,113,113,113,113,114,114,43,95,114,114,114,114,114,114,114,94, |
93,93,93,51,237,50,1,47,43,43,237,220,43,43,237,49,48,1,53,51,21,33,53,51, |
21,1,183,163,253,211,165,4,195,184,184,184,184,0,0,0,0,3,0,31,255,240,5,197, |
5,150,0,25,0,49,0,91,0,245,64,111,138,81,1,10,73,26,73,42,73,3,10,69,26,69, |
42,69,3,76,60,1,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,138, |
90,154,90,2,53,81,69,81,2,58,61,1,133,52,149,52,2,54,46,70,46,2,54,41,70, |
41,2,57,35,73,35,2,57,30,73,30,2,50,196,81,61,95,71,111,71,2,71,61,71,61, |
14,0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,68, |
15,23,72,26,38,195,111,14,127,14,2,14,60,55,201,66,87,201,76,82,76,15,66, |
127,66,2,15,66,31,66,127,66,143,66,159,66,255,66,6,0,76,1,0,76,16,76,112, |
76,128,76,144,76,240,76,6,66,76,66,76,7,33,200,21,4,43,200,7,19,0,63,237, |
63,237,18,57,57,47,47,93,113,93,113,17,51,16,237,16,237,51,1,47,113,237,47, |
43,93,113,237,17,57,57,47,47,93,17,51,237,49,48,0,93,93,93,93,93,93,93,93, |
1,93,93,93,93,113,93,93,113,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18, |
7,52,46,4,35,34,14,2,21,20,30,2,51,50,62,4,37,20,30,2,51,50,62,2,55,23,14, |
3,35,34,46,2,53,52,62,2,51,50,30,2,23,7,46,3,35,34,14,2,5,197,52,94,131,161, |
185,100,99,185,160,133,94,52,52,94,132,161,184,100,150,1,7,197,113,92,45, |
82,116,140,161,87,130,228,171,99,99,171,228,130,87,161,140,116,82,45,252, |
137,33,67,100,67,49,75,56,39,14,115,22,58,82,111,75,101,149,98,48,48,97,146, |
98,75,112,80,55,18,114,12,38,55,72,47,69,99,64,30,2,195,100,185,161,131,94, |
52,52,94,131,161,185,100,100,184,161,132,94,52,114,196,254,249,150,86,161, |
139,115,82,45,99,171,228,130,131,229,171,98,45,81,115,140,161,89,72,120,86, |
48,27,45,55,29,35,43,81,63,38,64,114,158,94,97,157,111,59,36,59,75,39,33, |
26,50,38,23,46,83,118,0,2,0,26,2,139,2,253,5,152,0,50,0,65,0,203,64,21,45, |
40,10,17,72,46,40,10,17,72,3,40,11,17,72,7,24,11,14,72,29,184,255,216,64, |
16,9,17,72,23,51,1,39,39,32,226,47,11,212,56,1,56,184,255,192,64,18,19,22, |
72,144,56,1,100,56,116,56,132,56,3,80,56,1,2,56,184,255,192,64,20,10,13,72, |
56,20,227,21,21,63,227,5,64,22,38,72,5,192,67,1,67,184,255,192,64,51,13,18, |
72,26,57,1,11,57,1,57,228,152,20,1,20,8,10,13,72,20,16,11,1,2,11,1,11,11, |
26,35,7,51,1,51,228,0,42,42,0,0,32,0,80,0,3,0,0,17,228,26,222,0,63,237,51, |
47,93,51,47,16,237,93,50,17,57,47,93,93,51,43,93,237,93,93,1,43,93,47,43, |
237,51,47,237,47,43,95,93,93,93,43,113,51,51,237,50,47,0,93,49,48,1,43,43, |
43,43,43,1,34,46,2,53,52,62,2,63,1,53,52,46,2,35,34,6,7,39,62,3,51,50,30, |
2,21,17,20,22,51,50,54,55,21,14,1,35,34,46,2,39,35,14,1,39,50,62,2,61,1,7, |
14,3,21,20,22,1,4,53,86,62,33,51,86,113,62,178,21,39,56,35,67,81,9,149,7, |
43,75,108,71,68,109,77,42,28,35,12,22,9,19,42,22,41,57,38,20,2,4,38,132,51, |
48,80,57,32,138,41,74,55,32,58,2,139,29,56,82,52,69,92,56,24,1,4,60,46,60, |
35,14,59,76,10,47,82,62,35,29,60,95,66,254,204,58,50,5,3,104,5,8,22,39,51, |
29,77,70,111,34,55,71,37,65,4,2,11,29,52,43,56,65,0,0,2,0,83,0,141,4,32,3, |
172,0,8,0,17,0,113,64,84,106,12,122,12,138,12,3,106,9,122,9,138,9,3,106,3, |
122,3,138,3,3,106,0,122,0,138,0,3,17,236,15,235,14,236,95,10,127,10,143,10, |
3,64,10,96,10,2,31,10,1,10,7,236,6,235,5,236,176,1,1,95,1,1,32,1,96,1,128, |
1,3,1,9,0,239,12,15,3,47,3,111,3,127,3,4,3,0,47,93,51,228,50,1,47,93,113, |
113,237,237,237,47,93,93,113,237,237,237,49,48,93,93,93,93,37,1,53,1,51,21, |
9,1,21,33,1,53,1,51,21,9,1,21,3,118,254,174,1,82,168,254,174,1,84,253,131, |
254,176,1,80,167,254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,1, |
109,63,1,115,31,254,140,254,145,29,0,1,0,100,0,180,4,71,2,242,0,5,0,51,64, |
19,223,2,1,32,2,1,2,5,170,224,0,1,159,0,1,80,0,1,0,184,255,192,64,9,9,12, |
72,0,2,173,0,3,179,0,63,204,237,1,47,43,93,93,93,237,47,93,93,49,48,37,17, |
33,53,33,17,3,182,252,174,3,227,180,1,172,146,253,194,0,0,4,0,31,255,240, |
5,197,5,150,0,25,0,49,0,63,0,72,0,240,183,4,61,20,61,36,61,3,58,184,255,224, |
64,94,11,16,72,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,61, |
32,9,13,72,54,46,70,46,2,54,41,70,41,2,57,35,73,35,2,57,30,73,30,2,6,69,22, |
69,2,51,62,62,69,63,69,53,196,54,64,196,59,59,50,63,63,16,54,63,54,63,14, |
0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,60,15, |
23,72,26,38,195,111,14,127,14,2,14,50,50,54,62,52,201,69,9,68,25,68,2,68, |
201,55,15,54,31,54,127,54,3,223,55,1,0,55,16,55,112,55,3,54,69,55,55,69,54, |
3,7,33,200,21,4,43,200,7,19,0,63,237,63,237,18,23,57,47,47,47,93,113,93,16, |
237,93,16,237,50,17,51,47,1,47,113,237,47,43,93,113,237,17,57,57,47,47,56, |
17,51,51,47,237,16,237,50,17,18,57,17,51,0,93,49,48,93,93,93,93,43,1,93,93, |
93,93,43,93,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18,7,52,46,4,35,34, |
14,2,21,20,30,2,51,50,62,4,1,3,35,17,35,17,33,50,22,21,20,6,7,19,3,52,38, |
43,1,17,51,50,54,5,197,52,94,131,161,185,100,99,185,160,133,94,52,52,94,132, |
161,184,100,150,1,7,197,113,92,45,82,116,140,161,87,130,228,171,99,99,171, |
228,130,87,161,140,116,82,45,254,82,199,161,127,1,51,142,151,104,85,221,159, |
95,81,170,182,80,84,2,195,100,185,161,131,94,52,52,94,131,161,185,100,100, |
184,161,132,94,52,114,196,254,249,150,86,161,139,115,82,45,99,171,228,130, |
131,229,171,98,45,81,115,140,161,254,181,1,80,254,176,3,63,126,111,102,123, |
19,254,162,2,80,69,72,254,211,85,0,0,1,255,239,5,172,4,124,6,10,0,3,0,14, |
180,1,0,2,140,1,0,47,237,1,47,47,49,48,1,33,53,33,4,124,251,115,4,141,5,172, |
94,0,0,0,0,2,0,122,3,92,2,184,5,150,0,19,0,39,0,66,185,0,17,255,232,179,9, |
12,72,13,184,255,232,64,33,9,12,72,7,24,9,12,72,3,24,9,12,72,20,172,0,30, |
172,0,10,16,10,32,10,3,10,35,175,5,25,175,15,4,0,63,237,220,237,1,47,93,237, |
220,237,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7, |
52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,184,45,78,105,59,59,104,78,46, |
46,78,104,59,59,105,78,45,109,27,48,65,38,37,65,48,28,28,48,65,37,38,65,48, |
27,4,121,59,104,77,45,45,77,104,59,60,104,77,44,44,77,104,60,37,66,49,28, |
28,49,66,37,37,65,49,29,29,49,65,0,0,0,2,0,65,0,0,4,36,4,195,0,11,0,15,0, |
85,64,53,13,222,4,1,140,4,1,4,2,14,209,11,1,131,11,1,11,9,1,170,6,32,2,1, |
2,13,173,12,151,2,1,2,0,4,173,9,152,7,1,7,239,5,1,80,5,128,5,160,5,208,5, |
4,5,0,47,93,93,51,93,51,237,50,50,93,47,237,1,47,93,51,253,50,222,93,93,196, |
16,222,93,93,196,49,48,1,17,35,17,33,53,33,17,51,17,33,21,1,53,33,21,2,124, |
147,254,88,1,168,147,1,168,252,29,3,227,2,168,254,117,1,139,145,1,138,254, |
118,145,253,88,145,145,0,0,1,0,41,2,51,2,131,5,141,0,34,0,142,64,56,6,18, |
1,6,17,1,6,12,1,106,31,122,31,138,31,3,89,15,105,15,2,106,14,1,73,14,89,14, |
2,10,3,26,3,2,10,2,26,2,58,2,74,2,4,58,17,90,17,106,17,3,6,23,22,23,2,23, |
184,255,224,64,40,9,15,72,33,25,225,32,8,1,32,8,96,8,160,8,224,8,4,8,14,224, |
15,15,32,191,0,1,0,8,32,14,11,228,20,222,1,32,229,0,223,0,63,237,50,63,237, |
51,18,57,1,47,93,51,51,47,237,47,93,113,237,50,49,48,43,0,93,93,1,93,93,0, |
93,93,93,93,1,113,113,113,19,39,62,5,53,52,38,35,34,6,7,39,62,3,51,50,30, |
2,21,20,14,4,7,33,21,43,2,27,88,100,103,82,52,71,74,68,88,8,133,6,46,76,107, |
68,65,103,71,37,54,83,102,95,78,18,1,187,2,51,103,61,96,81,72,73,80,49,62, |
75,73,68,8,51,87,64,37,33,60,86,54,62,100,86,75,73,74,42,113,0,0,1,0,27,2, |
39,2,130,5,141,0,53,0,150,64,17,102,6,1,102,8,1,86,9,102,9,2,89,34,105,34, |
2,42,184,255,232,64,80,11,15,72,2,32,9,13,72,48,45,21,21,15,8,28,225,45,45, |
0,225,32,15,96,15,2,32,15,96,15,160,15,224,15,4,15,34,225,8,35,1,35,35,9, |
225,191,8,1,8,64,24,37,72,8,49,21,228,22,22,12,105,34,1,72,34,88,34,2,34, |
31,228,40,222,12,228,71,9,1,9,3,221,0,63,51,93,237,63,237,51,93,93,18,57, |
47,237,57,1,47,43,93,237,51,47,113,237,47,93,113,237,50,47,237,17,18,57,47, |
18,57,49,48,0,43,43,93,93,93,93,1,20,6,35,34,46,2,39,55,30,1,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,6, |
7,21,30,3,2,130,155,142,87,116,73,36,6,136,9,88,85,77,83,37,56,67,29,61,57, |
29,61,50,32,74,71,68,84,6,135,7,50,79,102,59,69,104,70,35,86,90,52,75,48, |
22,3,27,116,128,39,64,81,43,13,67,69,72,76,45,54,29,9,109,13,31,53,40,60, |
69,70,65,12,58,86,57,28,33,59,79,46,75,110,20,2,5,37,54,69,0,0,1,0,72,4,177, |
1,240,5,228,0,5,0,55,64,37,70,4,1,122,2,138,2,2,128,3,1,3,64,143,0,1,0,64, |
9,13,72,0,2,149,128,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,26,237,1,47,43, |
93,26,205,93,49,48,93,93,19,53,19,51,21,1,72,217,207,254,182,4,177,20,1,31, |
29,254,234,0,1,0,140,254,87,4,109,4,58,0,39,0,136,64,74,29,32,9,17,72,138, |
37,154,37,2,108,37,124,37,2,37,24,14,17,72,22,22,13,70,64,31,79,12,1,127, |
12,143,12,159,12,3,12,64,32,35,72,12,64,20,23,72,0,12,1,12,41,128,39,2,70, |
0,1,16,1,48,1,224,1,240,1,5,8,1,96,41,128,41,2,41,184,255,192,64,17,20,23, |
72,31,8,80,35,22,19,80,26,22,12,1,15,0,27,0,63,63,51,63,237,63,237,50,1,43, |
93,47,94,93,237,50,26,16,220,93,43,43,93,113,50,26,237,50,47,49,48,43,0,93, |
93,1,43,19,17,51,17,20,30,2,51,50,54,53,17,51,17,20,30,2,51,50,54,55,21,14, |
1,35,34,46,2,39,35,14,1,35,34,38,39,17,140,181,32,58,84,52,128,146,180,11, |
20,29,18,11,32,11,26,51,36,54,71,44,20,2,3,52,147,100,67,109,31,254,87,5, |
227,253,82,78,106,65,28,174,162,2,115,252,208,44,56,32,13,5,3,129,8,12,30, |
52,71,41,95,99,41,38,254,28,0,0,0,0,1,0,80,254,248,3,245,5,129,0,19,0,61, |
64,39,12,1,15,2,191,2,207,2,3,2,5,95,6,111,6,127,6,175,6,191,6,5,0,6,16,6, |
48,6,3,6,7,7,1,0,4,17,3,6,1,0,47,51,63,205,50,18,57,47,1,47,93,93,205,220, |
93,205,47,49,48,1,17,35,17,35,17,35,17,34,46,2,53,52,62,2,51,33,21,3,116, |
112,217,113,80,133,96,53,50,95,138,87,2,51,5,27,249,221,6,35,249,221,3,190, |
45,88,133,89,84,133,93,50,102,0,0,1,0,187,1,190,1,126,2,154,0,3,0,38,64,24, |
3,150,0,0,16,0,176,0,3,7,0,0,155,15,1,31,1,2,1,64,15,38,72,1,0,47,43,93,237, |
1,47,94,93,237,49,48,19,53,51,21,187,195,1,190,220,220,0,0,0,1,0,119,254, |
78,1,227,0,0,0,27,0,126,64,16,24,32,20,23,72,25,32,20,23,72,70,26,86,26,2, |
2,184,255,232,179,9,17,72,27,184,255,224,64,62,9,17,72,24,16,25,32,25,48, |
25,3,25,131,23,22,22,8,16,131,47,0,1,31,0,1,15,0,111,0,2,8,0,239,8,1,8,19, |
25,64,9,13,72,25,25,5,23,11,140,32,5,80,5,96,5,112,5,176,5,192,5,6,5,0,47, |
93,237,47,18,57,47,43,205,1,47,93,221,94,93,113,114,237,18,57,47,51,237,93, |
50,49,48,43,43,93,43,43,5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35, |
42,1,7,55,51,7,30,1,1,227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14, |
29,14,65,107,39,94,94,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,182,100, |
3,81,0,0,1,0,80,2,51,2,125,5,129,0,10,0,75,64,44,32,5,48,5,2,96,9,1,9,9,8, |
224,2,32,4,48,4,2,4,111,0,1,0,0,4,6,3,32,2,144,2,2,2,5,4,4,3,6,220,8,1,228, |
0,223,0,63,237,50,63,51,51,47,51,1,47,93,23,51,47,93,47,0,93,1,16,237,50, |
47,93,49,48,0,93,19,53,51,17,7,53,55,51,17,51,21,80,211,202,210,123,215,2, |
51,107,2,108,138,120,137,253,29,107,0,0,0,0,2,0,27,2,139,2,211,5,152,0,15, |
0,35,0,130,185,0,13,255,232,179,7,12,72,9,184,255,224,64,43,7,12,72,4,32, |
7,12,72,2,32,7,12,72,0,227,4,16,36,16,52,16,100,16,4,148,16,180,16,196,16, |
212,16,244,16,5,128,16,1,2,0,16,1,16,184,255,192,64,38,12,16,72,16,26,227, |
6,64,22,33,72,6,239,37,1,112,37,128,37,2,47,37,1,31,228,0,3,32,3,80,3,3,3, |
3,21,228,11,222,0,63,237,51,47,93,237,1,93,93,93,47,43,237,47,43,93,95,93, |
93,113,237,49,48,0,43,43,43,43,1,20,6,35,34,38,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,211,176,175,168,177,43,87,131,88, |
93,131,84,39,149,25,50,72,48,48,75,51,26,28,51,70,43,49,75,52,27,4,18,188, |
203,201,190,91,145,101,53,53,100,145,92,83,110,65,27,27,66,110,82,84,110, |
66,26,26,66,110,0,2,0,83,0,141,4,32,3,172,0,8,0,17,0,133,64,100,101,15,117, |
15,133,15,3,101,9,117,9,133,9,3,101,6,117,6,133,6,3,101,0,117,0,133,0,3,13, |
236,10,236,17,235,15,12,1,239,12,1,112,12,128,12,2,208,12,1,63,12,111,12, |
127,12,3,0,12,1,12,4,236,1,236,8,235,112,3,128,3,176,3,3,176,3,208,3,2,63, |
3,1,0,3,32,3,2,3,10,0,239,14,15,5,47,5,111,5,127,5,4,5,0,47,93,51,228,50, |
1,47,93,93,93,113,253,237,237,47,93,93,93,113,113,114,253,237,237,49,48,93, |
93,93,93,37,35,53,9,1,53,51,1,21,1,35,53,9,1,53,51,1,21,2,206,168,1,82,254, |
176,166,1,82,252,221,170,1,82,254,176,168,1,79,141,29,1,111,1,116,31,254, |
141,63,254,147,29,1,111,1,116,31,254,141,63,255,255,0,56,0,0,6,78,5,129,16, |
38,0,121,232,0,16,39,2,20,2,249,0,0,17,7,2,141,3,184,253,207,0,31,64,18,1, |
191,12,1,112,12,1,96,12,1,16,12,1,12,3,2,17,24,0,63,53,53,1,17,93,93,93,93, |
53,0,0,0,255,255,0,56,0,0,6,117,5,129,16,38,0,121,232,0,16,39,2,20,2,249, |
0,0,17,7,0,114,3,242,253,207,0,47,64,30,2,111,15,1,47,15,1,15,1,191,12,1, |
112,12,1,96,12,1,16,12,1,12,51,64,11,11,72,2,15,24,0,63,53,1,43,17,93,93, |
93,93,53,17,93,93,53,0,0,0,255,255,0,73,0,0,6,78,5,141,16,39,2,20,3,13,0, |
0,16,39,2,141,3,184,253,207,17,6,0,115,46,0,0,33,64,20,0,112,0,1,96,0,1,16, |
0,1,0,83,64,11,11,72,1,2,6,24,0,63,53,53,1,43,17,93,93,93,53,0,0,2,0,131, |
254,164,4,86,4,58,0,37,0,41,0,159,64,112,121,4,137,4,2,122,35,138,35,2,122, |
36,138,36,2,84,26,100,26,2,58,6,74,6,122,6,138,6,4,10,72,9,9,176,39,192,39, |
2,39,150,40,40,0,28,70,95,27,127,27,2,27,64,29,60,72,27,64,23,27,72,32,27, |
1,27,19,70,0,64,29,60,72,0,64,23,27,72,0,64,13,17,72,32,0,1,0,32,43,1,19, |
33,9,40,156,41,15,67,27,1,27,24,95,47,33,63,33,2,111,33,207,33,2,33,0,47, |
93,113,237,51,93,63,253,206,17,57,1,93,47,93,43,43,43,237,47,93,43,43,93, |
237,18,57,47,237,113,51,47,237,49,48,93,0,93,1,93,0,93,1,93,55,52,62,6,55, |
51,14,7,21,20,30,2,51,50,54,55,23,14,3,35,34,46,2,1,21,35,53,131,37,62,79, |
82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184,11,67, |
121,179,122,114,178,123,64,2,113,195,50,71,108,85,67,60,58,68,83,55,69,104, |
80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103,147,4,100, |
201,201,0,0,0,255,255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,148,1,78,0, |
0,0,21,180,2,21,5,38,2,184,255,225,180,22,25,4,7,37,1,43,53,0,43,53,0,255, |
255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,149,1,219,0,0,0,19,64,11,2,21, |
5,38,2,76,21,24,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,6,254,18, |
38,0,36,0,0,17,7,2,150,1,96,0,0,0,19,64,11,2,22,5,38,2,0,27,21,4,7,37,1,43, |
53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,7,6,18,38,0,36,0,0,17,7,2,153,1,94, |
0,0,0,19,64,11,2,21,5,38,2,2,30,44,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0, |
4,0,0,5,82,6,178,18,38,0,36,0,0,17,7,2,152,1,108,0,0,0,23,64,13,3,2,21,5, |
38,3,2,4,25,23,4,7,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,4,0,0,5,82,6, |
251,18,38,0,36,0,0,17,7,1,76,1,137,0,136,0,22,64,12,3,2,56,3,3,2,3,31,21, |
4,7,37,1,43,53,53,0,63,53,53,0,2,0,24,0,0,7,168,5,129,0,15,0,26,0,136,64, |
86,116,25,1,114,2,1,86,2,102,2,2,115,3,131,3,2,85,3,101,3,2,127,5,143,5,2, |
109,5,1,92,5,1,25,5,41,5,2,0,7,1,11,7,11,7,0,16,14,32,14,2,14,2,25,3,17,3, |
4,17,9,13,90,26,5,0,2,95,25,25,5,4,12,95,9,9,13,16,8,95,5,3,4,18,13,95,0, |
18,0,63,237,63,63,237,50,18,57,47,237,17,18,57,47,237,1,47,51,51,237,50,51, |
47,51,17,18,57,57,47,93,18,57,57,47,47,113,49,48,93,93,93,93,93,93,93,93, |
93,33,17,33,3,35,1,33,21,33,17,33,21,33,17,33,21,1,35,14,5,7,3,33,3,201,253, |
220,198,199,2,174,4,185,253,9,2,187,253,69,3,32,252,33,151,1,16,22,27,24, |
18,2,217,1,222,1,156,254,100,5,129,156,254,60,154,254,21,156,4,238,3,35,50, |
58,51,38,5,254,51,0,0,255,255,0,104,254,78,5,121,5,150,18,38,0,38,0,0,17, |
7,0,120,1,254,0,0,0,11,182,1,58,48,40,26,16,37,1,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,240,18,38,0,40,0,0,17,7,2,148,1,63,0,0,0,21,180,1,12,5,38,1,184, |
255,170,180,13,16,0,10,37,1,43,53,0,43,53,0,255,255,0,168,0,0,4,254,6,240, |
18,38,0,40,0,0,17,7,2,149,1,223,0,0,0,19,64,11,1,12,5,38,1,40,12,15,0,10, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40,0,0,17, |
7,2,150,1,119,0,0,0,21,180,1,13,5,38,1,184,255,239,180,18,12,0,10,37,1,43, |
53,0,43,53,0,255,255,0,168,0,0,4,254,6,178,18,38,0,40,0,0,17,7,2,152,1,121, |
0,0,0,25,182,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10,37,1,43,53,53,0,43, |
53,53,0,255,255,0,9,0,0,1,177,6,240,18,38,0,44,0,0,17,6,2,148,159,0,0,21, |
180,1,4,5,38,1,184,255,193,180,5,8,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0, |
142,0,0,2,54,6,240,18,38,0,44,0,0,17,6,2,149,70,0,0,19,64,11,1,4,5,38,1,69, |
4,7,0,2,37,1,43,53,0,43,53,0,255,255,255,210,0,0,2,104,6,254,18,38,0,44,0, |
0,17,6,2,150,210,0,0,19,64,11,1,5,5,38,1,0,10,4,0,2,37,1,43,53,0,43,53,0, |
255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218,0,0,23,64,13,2,1, |
4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,2,0,14,0,0,5,101,5,129, |
0,16,0,33,0,112,64,69,117,10,1,91,32,139,32,2,91,31,139,31,2,90,20,138,20, |
2,91,19,1,10,31,26,31,2,10,20,26,20,2,26,26,28,8,90,64,15,17,1,17,35,128, |
24,28,90,14,16,16,1,14,27,16,95,24,127,0,1,0,0,2,28,95,14,18,23,95,2,3,0, |
63,237,63,237,17,57,47,113,51,237,50,1,47,51,51,47,16,237,50,26,16,220,113, |
26,237,18,57,47,49,48,93,93,93,0,93,1,93,93,0,93,19,51,17,33,50,4,22,18,21, |
20,2,14,1,35,33,17,35,37,52,46,2,35,33,17,33,21,33,17,33,50,62,2,14,154,1, |
210,163,1,19,198,111,106,184,251,145,253,241,154,4,151,82,148,206,123,254, |
241,1,150,254,106,1,58,111,189,138,78,3,33,2,96,81,169,254,252,180,176,254, |
243,181,93,2,135,72,143,203,130,61,254,57,154,254,18,72,142,212,0,255,255, |
0,168,0,0,5,32,7,6,18,38,0,49,0,0,17,7,2,153,1,161,0,0,0,19,64,11,1,20,5, |
38,1,12,29,43,8,18,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
240,18,38,0,50,0,0,17,7,2,148,1,182,0,0,0,21,180,2,40,5,38,2,184,255,216, |
180,41,44,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255,236,5,215,6,240,18,38, |
0,50,0,0,17,7,2,149,2,37,0,0,0,19,64,11,2,40,5,38,2,37,40,43,10,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6,254,18,38,0,50,0,0,17,7,2,150, |
1,213,0,0,0,19,64,11,2,41,5,38,2,4,46,40,10,0,37,1,43,53,0,43,53,0,0,0,255, |
255,0,97,255,236,5,215,7,6,18,38,0,50,0,0,17,7,2,153,1,193,0,0,0,21,180,2, |
40,5,38,2,184,255,245,180,49,63,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255, |
236,5,215,6,178,18,38,0,50,0,0,17,7,2,152,1,215,0,0,0,25,182,3,2,40,5,38, |
3,2,184,255,255,180,44,42,10,0,37,1,43,53,53,0,43,53,53,0,0,1,0,142,0,225, |
4,31,4,115,0,11,0,129,185,0,5,255,232,179,18,22,72,3,184,255,232,64,14,18, |
22,72,11,24,18,22,72,9,24,18,22,72,8,184,255,232,179,18,22,72,6,184,255,232, |
64,14,18,22,72,2,24,18,22,72,0,24,18,22,72,7,184,255,232,64,14,18,22,72,1, |
24,18,22,72,10,24,18,22,72,4,184,255,232,64,23,18,22,72,212,4,228,4,2,180, |
4,196,4,212,4,3,32,4,1,4,0,7,1,7,0,25,47,113,1,47,93,93,113,49,48,0,43,43, |
1,43,43,43,43,43,43,0,43,43,43,43,19,9,1,55,9,1,23,9,1,7,9,1,142,1,98,254, |
160,104,1,94,1,94,105,254,162,1,96,102,254,159,254,156,1,74,1,98,1,96,103, |
254,159,1,95,105,254,164,254,160,105,1,97,254,157,0,3,0,71,255,203,5,244, |
5,186,0,27,0,39,0,51,0,196,64,141,89,44,1,8,37,1,84,33,1,5,26,21,26,101,26, |
3,139,23,1,123,22,139,22,2,108,22,1,90,22,1,105,16,1,10,12,26,12,2,132,9, |
1,116,8,132,8,2,99,8,1,85,8,1,27,50,91,50,2,114,43,130,43,2,84,43,1,20,38, |
84,38,2,85,37,1,140,31,1,74,31,90,31,122,31,3,4,21,20,21,100,21,3,11,7,27, |
7,107,7,3,32,44,40,0,91,64,15,28,1,28,53,128,32,53,1,40,91,175,14,191,14, |
2,32,14,1,15,14,31,14,2,14,43,31,35,47,95,23,19,4,35,95,9,5,19,0,63,51,237, |
63,51,237,17,57,57,1,47,93,93,93,237,93,26,16,220,113,26,237,18,57,57,49, |
48,0,93,93,93,93,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,1,20,2,6,4,35,34,38,39,7,35,55,38,2,53,52,18,54,36,51,50,22,23,55,51,7, |
22,18,7,52,38,39,1,30,1,51,50,62,2,37,20,22,23,1,46,1,35,34,14,2,5,215,95, |
180,254,252,165,127,206,81,120,190,200,88,86,92,178,1,5,169,125,207,82,121, |
192,201,85,87,195,49,49,253,59,59,150,93,132,191,123,59,252,15,50,51,2,195, |
59,151,92,126,190,127,63,2,199,165,254,242,192,104,58,54,145,241,97,1,10, |
160,165,1,10,187,101,56,54,146,242,94,254,253,160,112,184,72,252,171,44,47, |
86,153,212,125,113,190,75,3,85,42,46,80,148,208,0,0,255,255,0,158,255,236, |
5,41,6,240,18,38,0,56,0,0,17,7,2,148,1,141,0,0,0,21,180,1,26,5,38,1,184,255, |
232,180,27,30,5,20,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,6,240, |
18,38,0,56,0,0,17,7,2,149,1,237,0,0,0,19,64,11,1,26,5,38,1,37,26,29,5,20, |
37,1,43,53,0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,254,18,38,0,56,0,0, |
17,7,2,150,1,152,0,0,0,19,64,11,1,27,5,38,1,0,32,26,5,20,37,1,43,53,0,43, |
53,0,0,0,255,255,0,158,255,236,5,41,6,178,18,38,0,56,0,0,17,7,2,152,1,158, |
0,0,0,25,182,2,1,26,5,38,2,1,184,255,254,180,30,28,5,20,37,1,43,53,53,0,43, |
53,53,0,255,255,0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,149,1,208,0,0,0, |
19,64,11,1,9,5,38,1,65,9,12,4,8,37,1,43,53,0,43,53,0,0,0,0,2,0,168,0,0,4, |
234,5,129,0,16,0,27,0,95,64,63,150,15,1,116,26,132,26,2,123,18,139,18,2,0, |
90,16,17,48,17,144,17,3,255,17,1,0,17,16,17,32,17,64,17,4,17,22,11,7,90,0, |
8,16,8,64,8,3,7,8,22,95,6,21,95,11,6,11,6,11,7,9,3,7,18,0,63,63,18,57,57, |
47,47,16,237,16,237,1,47,94,93,237,50,50,47,93,93,113,237,49,48,0,93,93,93, |
1,20,14,2,35,33,17,35,17,51,21,33,50,30,2,7,52,38,35,33,17,33,50,62,2,4,234, |
59,121,182,123,254,98,191,191,1,146,125,186,124,62,192,164,164,254,133,1, |
131,82,121,79,38,2,223,88,159,120,71,254,215,5,129,252,60,111,156,99,134, |
149,253,192,44,79,107,0,0,0,0,1,0,142,255,236,4,143,5,204,0,67,0,214,64,150, |
149,51,1,133,63,149,63,2,133,47,149,47,2,133,46,149,46,2,118,65,1,118,56, |
1,83,26,131,26,147,26,3,92,39,108,39,124,39,3,107,22,1,58,22,1,145,52,1,21, |
52,37,52,2,22,66,38,66,118,66,3,26,3,42,3,2,61,72,24,54,72,31,32,24,1,31, |
31,1,9,24,31,31,24,9,3,43,0,72,64,48,17,160,17,2,160,17,176,17,2,17,69,128, |
42,70,0,43,16,43,48,43,3,8,43,112,69,1,63,69,79,69,2,212,31,1,197,31,1,182, |
31,1,219,17,1,202,17,1,185,17,1,31,17,5,36,80,49,0,43,21,14,80,5,22,0,63, |
237,63,63,237,18,57,57,93,93,93,93,93,93,1,93,93,47,94,93,237,26,16,220,93, |
113,26,237,18,23,57,47,47,47,93,93,16,237,16,237,49,48,0,93,1,93,93,93,93, |
93,0,93,93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,38,47,1,30,3,51,50,54,53, |
52,46,4,53,52,62,4,53,52,46,2,35,34,14,2,21,17,35,17,52,62,2,51,50,30,2,21, |
20,14,4,21,20,30,4,4,143,41,87,136,94,80,148,55,2,25,67,74,78,37,92,98,54, |
81,95,81,54,33,49,58,49,33,33,63,90,57,68,107,73,39,180,63,120,174,110,102, |
155,105,53,33,51,58,51,33,55,82,95,82,55,1,39,66,115,85,49,25,24,164,14,25, |
19,11,86,79,56,77,62,57,73,98,73,51,73,58,48,52,63,43,37,62,45,26,35,77,122, |
88,252,3,4,3,118,173,112,54,46,80,109,62,61,90,69,53,47,48,28,38,59,57,64, |
85,114,0,0,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,67,0, |
188,0,0,0,21,180,2,66,17,38,2,184,255,149,180,67,70,3,36,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,116,1,84,0,0, |
0,19,64,11,2,66,17,38,2,11,66,69,3,36,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,115,5,211,18,38,0,68,0,0,17,7,1,71,0,218,0,0,0,21,180,2,67,17, |
38,2,184,255,192,180,72,66,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236, |
4,115,5,189,18,38,0,68,0,0,17,7,1,78,0,245,0,0,0,21,180,2,66,17,38,2,184, |
255,224,180,75,89,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,115,5, |
123,18,38,0,68,0,0,17,7,0,105,0,235,0,0,0,25,182,3,2,66,17,38,3,2,184,255, |
202,180,70,68,3,36,37,1,43,53,53,0,43,53,53,0,255,255,0,87,255,236,4,115, |
6,115,18,38,0,68,0,0,17,7,1,76,1,8,0,0,0,25,182,3,2,71,17,38,3,2,184,255, |
200,180,76,66,3,36,37,1,43,53,53,0,43,53,53,0,0,3,0,66,255,236,6,194,4,78, |
0,62,0,79,0,88,0,251,64,96,134,54,1,122,36,1,123,58,1,117,8,133,8,2,101,68, |
117,68,133,68,3,124,86,1,106,86,1,126,81,1,106,81,1,101,4,117,4,2,41,47,1, |
41,44,1,24,40,9,13,72,10,28,26,28,2,17,53,88,1,70,33,31,79,79,79,95,79,127, |
79,4,79,79,80,25,9,73,10,10,61,71,64,31,80,47,80,63,80,3,144,80,1,80,90,128, |
44,71,45,184,255,192,64,19,21,28,72,45,45,71,71,25,64,12,15,72,25,62,80,80, |
80,6,53,184,255,184,64,43,17,73,53,83,80,56,16,63,81,33,33,74,50,143,44,1, |
43,44,1,44,44,39,80,50,16,17,74,80,22,22,6,80,15,239,9,1,128,9,1,9,9,15,22, |
0,63,51,47,93,93,16,237,63,237,50,63,237,51,47,93,93,17,18,57,47,237,63,237, |
50,43,18,57,47,237,1,47,43,237,51,47,43,237,26,16,220,93,113,26,237,50,47, |
237,17,18,57,47,93,51,237,50,57,57,49,48,93,43,0,93,93,1,93,0,93,93,93,93, |
1,93,0,93,1,93,0,93,93,1,21,30,3,51,50,54,55,23,14,3,35,32,3,14,3,35,34,38, |
53,52,62,4,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,23,62,1,51,50,30, |
2,29,1,37,7,14,5,21,20,22,51,50,62,2,53,37,46,1,35,34,14,2,7,3,200,1,34,70, |
109,78,117,141,25,158,17,61,102,153,108,254,191,102,29,74,102,137,93,167, |
169,38,67,91,107,117,60,240,26,57,88,61,54,88,64,39,7,188,10,58,105,159,112, |
128,172,49,63,177,106,136,183,111,47,252,80,195,40,81,76,66,49,28,100,93, |
90,129,83,40,2,246,15,144,135,45,96,81,54,4,1,247,17,82,136,98,55,94,72,45, |
45,91,73,47,1,1,51,93,71,42,172,150,71,108,78,51,32,13,1,4,59,67,94,58,27, |
15,39,67,51,17,64,107,78,43,70,69,74,65,88,155,210,122,24,31,4,1,6,18,31, |
51,73,51,87,97,63,98,116,53,196,171,157,29,74,127,98,255,255,0,87,254,78, |
3,202,4,78,18,38,0,70,0,0,17,7,0,120,1,12,0,0,0,11,182,1,40,48,40,19,9,37, |
1,43,53,0,0,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,67,0, |
221,0,0,0,21,180,2,38,17,38,2,184,255,228,180,39,42,17,27,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,116,1,112,0,0, |
0,19,64,11,2,38,17,38,2,84,38,41,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,24,5,211,18,38,0,72,0,0,17,7,1,71,0,245,0,0,0,19,64,11,2,39, |
17,38,2,8,44,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,24, |
5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3,2,4,42, |
40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,10,0,0,1,178,5,228,18,38, |
0,241,0,0,17,6,0,67,160,0,0,21,180,1,4,17,38,1,184,255,194,180,5,8,0,2,37, |
1,43,53,0,43,53,0,0,0,255,255,0,135,0,0,2,47,5,228,18,38,0,241,0,0,17,6,0, |
116,63,0,0,19,64,11,1,4,17,38,1,63,4,7,0,2,37,1,43,53,0,43,53,0,255,255,255, |
211,0,0,2,105,5,211,18,38,0,241,0,0,17,6,1,71,211,0,0,19,64,11,1,5,17,38, |
1,2,10,4,0,2,37,1,43,53,0,43,53,0,255,255,0,8,0,0,2,53,5,123,18,38,0,241, |
0,0,17,6,0,105,219,0,0,23,64,13,2,1,4,17,38,2,1,2,8,6,0,2,37,1,43,53,53,0, |
43,53,53,0,0,2,0,86,255,236,4,39,5,234,0,39,0,57,0,190,64,94,100,51,1,100, |
56,1,107,42,1,107,48,1,10,14,26,14,2,37,17,53,17,69,17,3,6,8,22,8,2,23,26, |
29,3,50,15,28,31,28,2,28,28,50,35,71,40,64,19,16,13,3,40,17,64,14,19,72,22, |
5,17,17,5,144,40,1,144,40,160,40,2,40,59,128,50,71,31,5,1,5,26,19,29,16,4, |
17,27,27,22,45,80,13,80,10,1,10,184,255,192,64,28,7,10,72,82,17,1,36,17,52, |
17,68,17,3,2,17,18,17,2,10,17,10,17,22,0,53,80,0,22,0,63,237,63,57,57,47, |
47,93,93,93,43,93,51,237,17,51,47,18,23,57,1,47,93,237,26,16,204,93,113,17, |
57,47,18,57,43,18,23,57,26,16,237,17,57,47,93,18,23,57,49,48,0,93,93,1,93, |
0,93,93,93,93,5,34,46,2,53,52,62,2,51,50,22,23,46,1,39,5,53,55,46,1,39,51, |
30,1,23,37,15,1,30,3,29,1,20,14,2,19,52,46,2,35,34,14,2,21,20,22,51,50,62, |
2,2,54,125,181,118,56,52,116,186,133,71,117,43,43,115,76,254,211,218,56,120, |
66,209,45,83,42,1,50,1,211,81,129,88,47,57,120,188,176,33,71,113,80,81,115, |
73,33,144,145,81,118,75,36,20,73,132,185,111,107,182,134,75,32,27,86,176, |
69,133,114,94,45,78,35,20,51,31,132,112,92,74,176,200,223,121,6,122,196,138, |
74,1,245,94,137,90,44,45,92,137,91,190,178,44,90,139,0,255,255,0,140,0,0, |
3,242,5,189,18,38,0,81,4,0,17,7,1,78,0,245,0,0,0,19,64,11,1,38,17,38,1,5, |
47,61,19,36,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,228,18,38, |
0,82,0,0,17,7,0,67,0,223,0,0,0,21,180,2,35,17,38,2,184,255,228,180,36,39, |
8,0,37,1,43,53,0,43,53,0,255,255,0,86,255,236,4,29,5,228,18,38,0,82,0,0,17, |
7,0,116,1,103,0,0,0,19,64,11,2,35,17,38,2,73,35,38,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,86,255,236,4,29,5,211,18,38,0,82,0,0,17,7,1,71,0,240,0,0, |
0,19,64,11,2,36,17,38,2,1,41,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86, |
255,236,4,29,5,189,18,38,0,82,0,0,17,7,1,78,0,247,0,0,0,19,64,11,2,35,17, |
38,2,13,44,58,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,123, |
18,38,0,82,0,0,17,7,0,105,0,250,0,0,0,23,64,13,3,2,35,17,38,3,2,4,39,37,8, |
0,37,1,43,53,53,0,43,53,53,0,0,0,0,3,0,65,0,223,4,36,4,117,0,3,0,7,0,11,0, |
75,64,48,3,11,171,0,8,8,4,128,6,160,6,2,95,6,1,32,6,1,6,63,4,95,4,111,4,3, |
4,9,174,64,8,144,8,2,8,4,173,5,0,174,79,1,159,1,2,1,5,179,0,63,222,93,237, |
16,253,222,93,237,1,47,93,47,93,93,93,18,57,47,51,237,50,49,48,1,53,51,21, |
1,53,33,21,1,53,51,21,1,222,168,253,187,3,227,253,186,168,3,190,183,183,254, |
162,146,146,254,127,183,183,0,0,3,0,44,255,218,4,180,4,92,0,22,0,34,0,45, |
0,161,64,93,117,33,133,33,2,117,27,133,27,2,122,38,138,38,2,122,44,138,44, |
2,150,16,1,66,16,1,77,5,1,68,21,1,75,10,1,27,38,35,0,71,64,15,23,207,23,2, |
159,23,175,23,255,23,3,23,47,128,35,71,0,12,1,0,12,16,12,32,12,64,12,240, |
12,5,7,12,144,47,160,47,240,47,3,224,47,1,223,47,1,0,47,32,47,2,47,184,255, |
192,64,16,13,21,72,37,26,30,41,80,18,14,16,30,80,7,3,22,0,63,51,237,63,51, |
237,17,57,57,1,43,93,93,93,113,47,94,93,113,237,26,16,220,93,113,26,237,18, |
57,57,49,48,93,93,0,93,93,93,93,1,93,93,0,93,1,16,2,35,34,38,39,7,35,55,46, |
1,53,16,33,50,22,23,55,51,7,30,1,7,52,38,39,1,30,1,51,50,62,2,37,20,23,1, |
46,1,35,34,14,2,4,88,250,238,97,156,60,100,167,184,41,42,1,229,103,156,57, |
91,167,173,42,39,189,12,11,254,29,38,105,62,69,112,78,42,253,179,24,1,226, |
37,104,66,69,111,78,41,2,30,254,228,254,234,48,50,116,214,68,182,116,2,48, |
46,45,105,201,69,185,119,68,109,44,253,206,49,39,39,98,166,126,130,85,2,49, |
45,36,41,99,164,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0, |
67,0,236,0,0,0,21,180,1,38,17,38,1,184,255,236,180,39,42,36,19,37,1,43,53, |
0,43,53,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0,116,1,87, |
0,0,0,19,64,11,1,38,17,38,1,53,38,41,36,19,37,1,43,53,0,43,53,0,0,0,255,255, |
0,139,255,236,3,241,5,211,18,38,0,88,6,0,17,7,1,71,0,239,0,0,0,21,180,1,39, |
17,38,1,184,255,252,180,44,38,36,19,37,1,43,53,0,43,53,0,255,255,0,139,255, |
236,3,241,5,123,18,38,0,88,6,0,17,7,0,105,0,237,0,0,0,25,182,2,1,38,17,38, |
2,1,184,255,243,180,42,40,36,19,37,1,43,53,53,0,43,53,53,0,255,255,0,5,254, |
87,3,252,5,228,18,38,0,92,0,0,17,7,0,116,1,27,0,0,0,19,64,11,1,32,17,38,1, |
54,32,35,17,31,37,1,43,53,0,43,53,0,0,0,0,2,0,138,254,87,4,29,5,204,0,34, |
0,54,0,109,64,76,102,52,118,52,2,105,38,121,38,2,73,25,89,25,2,70,10,86,10, |
2,25,21,41,21,137,21,153,21,4,22,15,38,15,134,15,150,15,4,18,71,64,160,35, |
1,35,56,128,45,7,33,70,0,34,16,34,48,34,240,34,4,8,34,33,27,26,50,80,23,22, |
7,40,80,13,16,0,0,0,63,63,237,50,63,237,50,63,1,47,94,93,237,50,50,26,16, |
220,93,26,237,49,48,0,93,93,93,93,93,93,19,51,17,20,6,7,6,7,51,62,3,51,50, |
30,2,21,20,14,2,35,34,38,39,35,30,3,21,17,35,1,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,138,180,1,1,1,1,6,25,64,82,101,63,112,153,93,40,40,93,153,112, |
116,174,46,5,1,1,1,1,180,2,214,24,59,98,74,60,106,79,46,38,73,108,70,75,99, |
59,24,5,204,254,89,30,55,21,25,22,52,73,47,21,80,145,205,125,123,208,150, |
85,88,100,2,32,48,59,29,254,89,3,199,100,156,108,56,34,96,169,135,115,159, |
98,43,58,110,159,255,255,0,5,254,87,3,252,5,123,18,38,0,92,0,0,17,7,0,105, |
0,187,0,0,0,25,182,2,1,32,17,38,2,1,184,255,254,180,36,34,17,31,37,1,43,53, |
53,0,43,53,53,0,255,255,0,4,0,0,5,82,6,161,18,38,0,36,0,0,17,7,1,73,1,104, |
1,78,0,19,64,11,2,21,5,38,2,2,22,21,4,7,37,1,43,53,0,43,53,0,0,0,255,255, |
0,87,255,236,4,115,5,83,18,38,0,68,0,0,17,7,1,73,0,233,0,0,0,21,180,2,66, |
17,38,2,184,255,202,180,67,66,3,36,37,1,43,53,0,43,53,0,255,255,0,4,0,0,5, |
82,6,243,18,38,0,36,0,0,17,7,2,155,1,121,0,0,0,19,64,11,2,21,5,38,2,3,26, |
34,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,115,5,230,18,38,0, |
68,0,0,17,7,1,74,1,7,0,0,0,21,180,2,66,17,38,2,184,255,204,180,71,83,3,36, |
37,1,43,53,0,43,53,0,255,255,0,4,254,96,5,99,5,129,18,38,0,36,0,0,17,7,1, |
77,3,181,0,11,0,13,185,0,2,255,207,180,33,33,7,7,37,43,53,0,255,255,0,87, |
254,85,4,115,4,78,18,38,0,68,0,0,17,7,1,77,2,197,0,0,0,13,185,0,2,255,194, |
180,78,78,36,36,37,43,53,0,255,255,0,104,255,236,5,121,6,240,18,38,0,38,0, |
0,17,7,2,149,2,83,0,0,0,19,64,11,1,40,5,38,1,126,40,43,26,16,37,1,43,53,0, |
43,53,0,0,0,255,255,0,87,255,236,3,202,5,228,18,38,0,70,0,0,17,7,0,116,1, |
103,0,0,0,19,64,11,1,40,17,38,1,114,40,43,19,9,37,1,43,53,0,43,53,0,0,0,255, |
255,0,104,255,236,5,121,6,254,18,38,0,38,0,0,17,7,2,150,1,204,0,0,0,19,64, |
11,1,41,5,38,1,38,46,40,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236, |
3,202,5,211,18,38,0,70,0,0,17,7,1,71,0,208,0,0,0,19,64,11,1,41,17,38,1,10, |
46,40,19,9,37,1,43,53,0,43,53,0,0,0,255,255,0,104,255,236,5,121,6,241,18, |
38,0,38,0,0,17,7,1,75,2,34,1,37,0,19,64,11,1,40,5,38,1,39,40,42,26,16,37, |
1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,204,18,38,0,70,0,0,17, |
7,1,75,1,44,0,0,0,11,182,1,17,40,42,19,9,37,1,43,53,0,0,0,255,255,0,104,255, |
236,5,121,6,254,18,38,0,38,0,0,17,7,2,151,1,204,0,0,0,19,64,11,1,40,5,38, |
1,38,42,48,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,211, |
18,38,0,70,0,0,17,7,1,72,0,214,0,0,0,19,64,11,1,40,17,38,1,16,42,48,19,9, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,5,101,6,254,18,38,0,39,0,0,17, |
7,2,151,1,102,0,0,0,21,180,2,26,5,38,2,184,255,171,180,28,34,6,0,37,1,43, |
53,0,43,53,0,255,255,0,86,255,236,4,255,5,204,16,38,0,71,0,0,17,7,2,146,3, |
186,0,75,0,18,64,10,2,61,0,2,83,61,61,19,19,37,1,43,53,0,63,53,255,255,0, |
14,0,0,5,101,5,129,18,6,0,144,0,0,0,2,0,86,255,236,4,109,5,204,0,39,0,59, |
0,146,64,86,85,42,101,42,2,90,58,106,58,2,57,1,73,1,2,54,10,70,10,2,9,4,25, |
4,121,4,137,4,4,6,7,22,7,118,7,134,7,4,25,27,70,64,20,6,0,21,50,3,18,61,128, |
40,71,31,6,1,6,63,61,1,143,61,1,33,21,27,19,81,24,15,20,1,239,20,255,20,2, |
20,20,8,22,0,11,55,80,8,184,255,192,64,10,9,13,72,8,16,0,45,80,3,22,0,63, |
237,50,63,43,237,50,63,18,57,47,93,113,51,237,50,63,1,93,114,47,93,237,26, |
16,220,23,50,17,57,26,237,50,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17, |
16,33,50,22,23,51,52,46,1,52,61,1,33,53,33,53,51,21,51,21,35,17,20,30,2,23, |
35,46,3,53,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,3,53,50,165,122,205, |
193,1,142,123,164,50,2,1,1,254,212,1,44,180,132,132,1,2,2,1,172,2,3,3,2,253, |
218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64,31,174,104,90,1,20,1,24, |
2,54,90,98,10,43,47,42,9,141,131,147,147,131,252,41,39,72,60,43,9,10,37,48, |
53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102,163,0,0,255, |
255,0,168,0,0,4,254,6,161,18,38,0,40,0,0,17,7,1,73,1,122,1,78,0,21,180,1, |
12,5,38,1,184,255,237,180,13,12,0,10,37,1,43,53,0,43,53,0,255,255,0,87,255, |
236,4,24,5,83,18,38,0,72,0,0,17,7,1,73,0,245,0,0,0,19,64,11,2,38,17,38,2, |
3,39,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,243,18,38, |
0,40,0,0,17,7,2,155,1,137,0,0,0,21,180,1,12,5,38,1,184,255,235,180,17,25, |
0,10,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,230,18,38,0,72,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,38,17,38,2,2,43,55,17,27,37,1,43,53,0,43, |
53,0,0,0,255,255,0,168,0,0,4,254,6,241,18,38,0,40,0,0,17,7,1,75,1,201,1,37, |
0,21,180,1,12,5,38,1,184,255,236,180,12,14,0,10,37,1,43,53,0,43,53,0,255, |
255,0,87,255,236,4,24,5,204,18,38,0,72,0,0,17,7,1,75,1,68,0,0,0,12,182,2, |
2,38,40,17,27,37,1,43,53,0,0,0,255,255,0,168,254,85,4,254,5,129,18,38,0,40, |
0,0,17,7,1,77,3,80,0,0,0,13,185,0,1,255,194,180,24,24,11,11,37,43,53,0,255, |
255,0,87,254,85,4,24,4,78,18,38,0,72,0,0,17,7,1,77,1,125,0,0,0,13,185,0,2, |
254,242,180,50,50,9,9,37,43,53,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40, |
0,0,17,7,2,151,1,111,0,0,0,21,180,1,12,5,38,1,184,255,231,180,14,20,0,10, |
37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,211,18,38,0,72,0,0,17,7, |
1,72,0,234,0,0,0,21,180,2,38,17,38,2,184,255,254,180,40,46,17,27,37,1,43, |
53,0,43,53,0,255,255,0,103,255,236,5,160,6,254,18,38,0,42,0,0,17,7,2,150, |
1,219,0,0,0,19,64,11,1,47,5,38,1,34,52,46,0,35,37,1,43,53,0,43,53,0,0,0,255, |
255,0,86,254,87,3,239,5,211,18,38,0,74,0,0,17,7,1,71,0,216,0,0,0,19,64,11, |
2,71,17,38,2,0,76,70,26,41,37,1,43,53,0,43,53,0,0,0,255,255,0,103,255,236, |
5,160,6,243,18,38,0,42,0,0,17,7,2,155,1,246,0,0,0,19,64,11,1,46,5,38,1,39, |
51,59,0,35,37,1,43,53,0,43,53,0,0,0,255,255,0,86,254,87,3,239,5,230,18,38, |
0,74,0,0,17,7,1,74,0,249,0,0,0,19,64,11,2,70,17,38,2,0,75,87,26,41,37,1,43, |
53,0,43,53,0,0,0,255,255,0,103,255,236,5,160,6,241,18,38,0,42,0,0,17,7,1, |
75,2,53,1,37,0,19,64,11,1,46,5,38,1,39,46,48,0,35,37,1,43,53,0,43,53,0,0, |
0,255,255,0,86,254,87,3,239,5,204,18,38,0,74,0,0,17,7,1,75,1,45,0,0,0,11, |
182,2,0,70,72,26,41,37,1,43,53,0,0,0,255,255,0,103,254,78,5,160,5,150,18, |
38,0,42,0,0,17,7,2,140,2,78,0,0,0,11,182,1,46,50,46,0,35,37,1,43,53,0,0,0, |
255,255,0,86,254,87,3,239,6,32,16,38,0,74,0,0,17,7,2,147,1,56,0,0,0,21,180, |
2,79,17,38,2,184,255,252,180,70,74,26,41,37,1,43,53,0,43,53,0,255,255,0,168, |
0,0,5,32,6,254,18,38,0,43,0,0,17,7,2,150,1,153,0,0,0,19,64,11,1,13,5,38,1, |
0,18,12,4,10,37,1,43,53,0,43,53,0,0,0,255,255,0,142,0,0,3,238,7,62,18,38, |
0,75,0,0,17,7,2,150,0,242,0,64,0,21,180,1,35,2,38,1,184,255,255,180,40,34, |
25,10,37,1,43,53,0,43,53,0,0,2,0,14,0,0,5,185,5,129,0,19,0,23,0,166,64,72, |
23,11,3,90,8,7,4,4,20,4,2,7,4,16,15,19,90,20,12,59,0,1,4,0,1,56,164,0,1,155, |
0,1,68,0,1,244,0,1,235,0,1,68,0,148,0,2,224,0,1,2,0,0,48,0,112,0,208,0,4, |
7,0,32,25,1,160,25,176,25,192,25,3,25,184,255,192,64,36,14,17,72,47,25,1, |
22,18,6,95,15,11,80,7,96,7,2,7,2,95,64,23,1,160,23,208,23,2,23,23,13,9,3, |
4,0,18,0,63,50,63,51,57,47,93,113,237,220,93,50,50,237,50,50,1,93,43,93,113, |
47,94,93,95,93,113,113,113,114,114,114,94,93,93,51,51,237,50,50,47,94,93, |
51,51,237,50,50,49,48,33,17,33,17,35,17,35,53,51,53,51,21,33,53,51,21,51, |
21,35,17,3,53,33,21,4,102,253,1,191,154,154,191,2,255,186,153,153,186,253, |
1,2,141,253,115,4,1,154,230,230,230,230,154,251,255,3,45,212,212,0,1,0,10, |
0,0,3,238,5,204,0,41,0,150,185,0,7,255,232,64,66,9,13,72,0,7,16,7,2,7,33, |
24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,32,36,24,70,29,28,192,25,1, |
0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240,43, |
2,255,43,1,112,43,1,43,184,255,192,64,19,19,23,72,35,27,81,32,28,28,5,30, |
0,25,11,21,0,18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63, |
18,57,47,51,237,50,1,43,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16, |
220,93,113,26,237,18,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52, |
46,2,35,34,14,2,21,17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61, |
30,70,84,100,62,104,133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180, |
1,44,254,212,2,3,2,1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69, |
35,46,84,120,75,253,170,4,182,131,147,147,131,148,33,66,56,39,7,255,255,255, |
184,0,0,2,133,7,6,18,38,0,44,0,0,17,6,2,153,207,0,0,19,64,11,1,4,5,38,1,2, |
13,27,0,2,37,1,43,53,0,43,53,0,255,255,255,184,0,0,2,133,5,189,18,38,0,241, |
0,0,17,6,1,78,207,0,0,19,64,11,1,4,17,38,1,2,13,27,0,2,37,1,43,53,0,43,53, |
0,255,255,0,12,0,0,2,49,6,161,18,38,0,44,0,0,17,7,1,73,255,217,1,78,0,19, |
64,11,1,4,5,38,1,2,5,4,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0,12,0,0,2,49, |
5,83,18,38,0,241,0,0,17,6,1,73,217,0,0,19,64,11,1,4,17,38,1,2,5,4,0,2,37, |
1,43,53,0,43,53,0,255,255,255,210,0,0,2,108,6,243,18,38,0,44,0,0,17,6,2,155, |
234,0,0,19,64,11,1,4,5,38,1,2,9,17,0,2,37,1,43,53,0,43,53,0,255,255,255,210, |
0,0,2,108,5,230,18,38,0,241,0,0,17,6,1,74,245,0,0,19,64,11,1,4,17,38,1,3, |
9,21,0,2,37,1,43,53,0,43,53,0,255,255,0,92,254,85,1,186,5,129,18,38,0,44, |
0,0,17,6,1,77,12,0,0,10,182,1,0,16,16,3,3,37,43,53,0,0,255,255,0,31,254,85, |
1,125,5,204,18,38,0,76,0,0,17,6,1,77,207,0,0,15,64,10,23,22,1,2,0,20,20,7, |
7,37,43,53,93,0,255,255,0,189,0,0,1,124,6,241,18,38,0,44,0,0,17,7,1,75,0, |
39,1,37,0,19,64,11,1,4,5,38,1,0,4,6,0,2,37,1,43,53,0,43,53,0,0,0,0,1,0,194, |
0,0,1,118,4,58,0,3,1,137,64,24,3,70,4,0,36,0,2,9,0,0,4,5,52,5,1,0,5,16,5, |
32,5,3,229,5,184,255,192,64,55,225,228,72,240,5,1,228,5,1,176,5,192,5,208, |
5,3,132,5,148,5,164,5,3,64,5,1,52,5,1,0,5,16,5,32,5,3,212,5,228,5,244,5,3, |
144,5,1,116,5,132,5,2,96,5,1,5,184,255,192,64,22,193,196,72,224,5,1,196,5, |
212,5,2,176,5,1,20,5,36,5,52,5,3,5,184,255,192,183,182,185,72,0,5,1,175,5, |
184,255,192,179,171,174,72,5,184,255,192,182,161,167,72,128,5,1,5,184,255, |
192,64,38,150,156,72,208,5,1,100,5,116,5,164,5,180,5,196,5,5,32,5,1,4,5,20, |
5,2,4,5,20,5,180,5,196,5,244,5,5,117,5,184,255,192,179,121,124,72,5,184,255, |
192,179,110,113,72,5,184,255,192,64,24,99,102,72,224,5,1,180,5,196,5,212, |
5,3,48,5,1,4,5,20,5,36,5,3,5,184,255,192,183,67,70,72,11,5,1,62,5,184,255, |
192,64,9,56,59,72,203,5,219,5,2,5,184,255,192,64,42,45,48,72,27,5,43,5,2, |
196,5,212,5,228,5,3,107,5,123,5,2,64,5,1,2,16,5,32,5,48,5,3,191,5,207,5,2, |
32,5,64,5,2,5,184,255,192,64,13,13,16,72,15,5,31,5,2,7,1,15,0,21,0,63,63, |
1,94,93,43,93,93,113,95,113,113,113,114,43,114,43,94,93,43,113,113,113,113, |
43,43,43,94,93,113,113,113,113,43,114,43,43,94,93,43,93,93,93,93,43,113,113, |
113,113,114,114,114,114,114,114,114,43,94,93,93,17,18,57,47,94,93,237,49, |
48,51,17,51,17,194,180,4,58,251,198,0,0,0,255,255,0,170,255,236,5,73,5,129, |
16,38,0,44,237,0,16,7,0,45,1,225,0,0,255,255,0,137,254,87,3,3,5,204,16,38, |
0,76,0,0,17,7,0,77,1,198,0,0,0,30,64,18,3,2,111,8,1,48,8,1,16,8,1,8,1,0,16, |
0,1,0,17,93,53,53,17,93,93,93,53,53,255,255,0,32,255,236,3,205,6,254,18,38, |
0,45,0,0,17,7,2,150,1,55,0,0,0,19,64,11,1,23,5,38,1,190,28,22,3,16,37,1,43, |
53,0,43,53,0,0,0,0,2,255,153,254,87,2,47,5,211,0,19,0,29,1,148,64,25,150, |
29,166,29,2,152,28,168,28,2,3,18,24,12,16,72,18,40,8,11,72,164,21,1,21,184, |
255,192,64,49,11,15,72,21,251,26,1,59,26,1,26,64,12,15,72,36,26,1,26,15,70, |
12,3,3,4,12,20,12,36,12,68,12,4,7,12,12,31,30,144,31,1,2,0,31,16,31,2,219, |
31,184,255,192,64,9,223,227,72,31,64,210,213,72,31,184,255,192,64,51,205, |
209,72,143,31,1,64,31,80,31,2,95,31,111,31,239,31,255,31,4,32,31,48,31,64, |
31,3,144,31,160,31,224,31,240,31,4,79,31,1,0,31,1,160,175,31,191,31,207,31, |
3,31,184,255,192,64,57,147,150,72,239,31,1,176,31,192,31,208,31,3,95,31,1, |
32,31,1,31,31,47,31,63,31,143,31,191,31,207,31,6,0,31,1,111,239,31,1,208, |
31,1,63,31,1,111,31,143,31,159,31,175,31,255,31,5,31,184,255,192,64,101,79, |
82,72,223,31,1,144,31,160,31,176,31,3,47,31,63,31,79,31,3,0,31,1,61,31,64, |
53,56,72,112,31,128,31,144,31,176,31,4,15,31,31,31,2,255,31,1,31,64,35,38, |
72,144,31,1,79,31,1,255,31,1,112,31,128,31,192,31,208,31,224,31,5,31,31,1, |
24,142,64,28,148,26,128,22,22,15,26,47,26,63,26,127,26,239,26,5,26,13,15, |
7,80,0,27,0,63,237,63,47,93,51,47,26,16,253,26,237,1,93,93,93,113,113,43, |
113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93,93,113,113,113,113, |
43,114,94,93,93,93,113,113,114,114,43,43,43,94,93,95,93,17,18,57,47,94,93, |
51,47,16,237,47,93,43,93,113,204,43,93,49,48,0,43,43,1,95,93,93,19,34,38, |
39,53,30,1,51,50,62,2,53,17,51,17,20,14,2,1,21,35,39,35,7,35,53,19,51,77, |
34,65,28,13,36,13,38,49,28,10,180,21,54,93,1,154,105,219,2,232,104,234,204, |
254,87,4,5,139,2,4,20,43,67,46,4,165,251,64,62,106,78,45,6,110,20,169,169, |
20,1,14,0,255,255,0,168,254,78,5,63,5,129,18,38,0,46,0,0,17,7,2,140,1,221, |
0,0,0,14,185,0,1,255,205,180,16,12,4,11,37,1,43,53,255,255,0,138,254,78,4, |
3,5,204,18,38,0,78,0,0,17,7,2,140,1,78,0,0,0,14,185,0,1,255,235,180,16,12, |
4,11,37,1,43,53,0,1,0,138,0,0,4,3,4,58,0,11,0,166,64,72,123,1,1,116,7,1,86, |
9,102,9,2,123,0,139,0,155,0,3,89,0,105,0,2,67,10,1,58,2,1,42,9,1,155,8,1, |
122,8,138,8,2,44,8,1,1,10,8,10,9,16,112,9,128,9,144,9,3,9,9,0,11,16,80,11, |
1,144,11,208,11,240,11,3,11,184,255,192,64,40,7,11,72,11,7,3,70,0,4,16,4, |
48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2,1,7,10,4,8,8,5,15,4,0,21, |
0,63,50,63,51,17,23,57,1,93,93,47,94,93,237,50,47,43,93,113,56,51,57,47,93, |
56,57,51,17,51,49,48,93,93,93,93,0,93,1,93,93,93,93,0,93,1,93,33,1,7,17,35, |
17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73,1,206,1,238,108, |
254,126,4,58,253,243,2,13,254,47,253,151,0,0,0,255,255,0,168,0,0,4,47,6,240, |
18,38,0,47,0,0,17,7,2,149,0,173,0,0,0,21,180,1,6,5,38,1,184,255,94,180,6, |
9,0,4,37,1,43,53,0,43,53,0,255,255,0,91,0,0,2,3,7,62,18,38,0,79,0,0,17,6, |
2,149,19,78,0,19,64,11,1,4,2,38,1,75,4,7,0,2,37,1,43,53,0,43,53,0,255,255, |
0,168,254,78,4,47,5,129,18,38,0,47,0,0,17,7,2,140,1,133,0,0,0,14,185,0,1, |
255,253,180,10,6,0,4,37,1,43,53,255,255,0,126,254,78,1,71,5,204,18,38,0,79, |
0,0,17,6,2,140,255,0,0,14,185,0,1,255,255,180,8,4,0,2,37,1,43,53,0,0,255, |
255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,2,146,2,21,0,0,0,18,64,10,1, |
15,3,1,138,10,6,0,4,37,1,43,53,0,63,53,255,255,0,138,0,0,2,105,5,204,16,38, |
0,79,0,0,17,7,2,146,1,36,0,75,0,65,64,16,16,64,29,29,72,16,64,22,22,72,16, |
64,18,18,72,16,184,255,192,179,17,17,72,16,184,255,192,64,12,16,16,72,16, |
64,11,11,72,1,13,0,1,184,1,32,180,8,4,0,2,37,1,43,53,0,63,53,1,43,43,43,43, |
43,43,0,255,255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,1,75,1,213,253,143, |
0,11,182,1,95,6,8,0,4,37,1,43,53,0,0,0,255,255,0,138,0,0,2,146,5,204,16,38, |
0,79,0,0,17,7,1,75,1,66,253,143,0,14,185,0,1,1,84,180,4,6,0,2,37,1,43,53, |
0,1,0,20,0,0,4,47,5,129,0,13,0,119,64,49,121,0,137,0,2,100,8,116,8,132,8, |
3,86,8,1,134,8,1,86,7,1,134,7,1,12,2,90,9,5,16,3,1,0,3,32,3,64,3,96,3,128, |
3,208,3,240,3,7,3,12,184,255,224,179,19,22,72,9,184,255,224,64,24,19,22,72, |
6,1,9,12,4,16,7,1,7,0,13,1,13,13,5,10,3,2,95,5,18,0,63,237,63,18,57,47,93, |
205,93,23,57,43,43,1,47,93,113,47,51,237,50,49,48,113,114,113,114,0,93,93, |
1,5,17,33,21,33,17,7,53,55,17,51,17,37,2,104,254,255,2,200,252,121,148,148, |
191,1,1,3,29,149,254,20,156,2,26,85,158,85,2,201,253,165,148,0,1,0,16,0,0, |
1,186,5,204,0,11,0,102,64,42,39,3,1,39,2,1,8,7,11,70,4,2,0,0,16,0,32,0,64, |
0,4,7,0,0,12,13,255,13,1,112,13,128,13,192,13,208,13,4,31,13,1,4,184,255, |
224,64,23,18,22,72,10,32,18,22,72,1,10,4,7,4,2,79,8,1,8,8,5,0,0,21,0,63,63, |
57,47,93,205,23,57,43,43,1,93,93,93,17,18,57,47,94,93,51,51,237,50,50,49, |
48,113,113,51,17,7,53,55,17,51,17,55,21,7,17,138,122,122,180,124,124,2,30, |
68,158,68,3,16,253,88,72,159,71,253,122,255,255,0,168,0,0,5,32,6,240,18,38, |
0,49,0,0,17,7,2,149,2,17,0,0,0,19,64,11,1,20,5,38,1,73,20,23,8,18,37,1,43, |
53,0,43,53,0,0,0,255,255,0,140,0,0,3,242,5,228,18,38,0,81,4,0,17,7,0,116, |
1,132,0,0,0,19,64,11,1,38,17,38,1,97,38,41,19,36,37,1,43,53,0,43,53,0,0,0, |
255,255,0,168,254,78,5,32,5,129,18,38,0,49,0,0,17,7,2,140,1,252,0,0,0,14, |
185,0,1,255,252,180,24,20,8,18,37,1,43,53,255,255,0,140,254,78,3,242,4,78, |
18,38,0,81,4,0,17,7,2,140,1,91,0,0,0,11,182,1,0,42,38,19,36,37,1,43,53,0, |
0,0,255,255,0,168,0,0,5,32,6,254,18,38,0,49,0,0,17,7,2,151,1,147,0,0,0,21, |
180,1,20,5,38,1,184,255,250,180,22,28,8,18,37,1,43,53,0,43,53,0,255,255,0, |
140,0,0,3,242,5,211,18,38,0,81,4,0,17,7,1,72,0,242,0,0,0,21,180,1,38,17,38, |
1,184,255,254,180,40,46,19,36,37,1,43,53,0,43,53,0,255,255,255,254,0,0,4, |
80,5,129,16,38,0,81,98,0,16,7,2,3,255,127,0,0,0,1,0,165,255,236,5,52,5,149, |
0,55,0,162,64,16,154,53,1,149,7,165,7,2,131,41,147,41,163,41,3,48,184,255, |
232,179,12,15,72,47,184,255,216,64,91,12,15,72,42,54,58,54,154,54,170,54, |
4,6,143,5,159,5,175,5,3,5,5,51,39,26,90,0,27,16,27,64,27,3,27,51,90,0,14, |
64,14,80,14,112,14,160,14,176,14,6,48,14,80,14,144,14,240,14,4,224,14,1,143, |
14,159,14,175,14,3,0,14,48,14,2,7,14,39,20,95,45,4,33,3,26,18,9,95,0,6,6, |
0,19,0,63,50,47,16,237,63,63,63,237,50,1,47,94,93,93,93,113,114,237,47,93, |
237,50,17,57,47,93,51,49,48,0,93,43,1,43,0,93,93,93,5,34,46,2,39,55,30,1, |
51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,173,56,96,79,63,24,127,37,100,59,64,78,41, |
13,39,81,127,87,94,163,121,70,191,1,1,1,1,184,1,3,2,1,4,34,103,130,153,86, |
124,177,112,53,30,86,152,20,24,40,54,30,115,45,65,58,107,153,95,1,66,108, |
154,98,46,62,105,139,77,252,133,4,68,37,92,90,76,22,22,63,69,69,28,61,101, |
70,39,64,133,204,139,254,165,130,208,146,78,0,0,0,0,1,0,140,254,87,3,242, |
4,78,0,53,0,135,64,18,121,52,137,52,2,90,52,106,52,2,43,52,59,52,75,52,3, |
46,184,255,232,64,74,9,12,72,3,46,19,46,2,3,3,24,49,70,64,160,12,1,96,12, |
208,12,2,31,12,1,175,12,1,12,55,128,37,24,70,160,25,176,25,2,0,25,192,25, |
208,25,3,0,25,16,25,32,25,64,25,224,25,240,25,6,7,25,37,18,80,43,16,31,15, |
24,21,7,80,0,27,0,63,237,63,63,63,237,50,1,47,94,93,113,114,237,50,26,16, |
220,93,113,113,114,26,237,17,57,47,49,48,93,43,0,93,93,93,1,34,38,39,53,30, |
1,51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,1,34,65,28,13,36,13,38,49,28,10,23,52,85, |
63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90,130,84,39,22, |
54,93,254,87,4,5,139,2,4,20,43,67,46,3,25,79,106,65,27,45,85,125,81,253,141, |
3,83,34,75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,252,169,62,106, |
78,45,0,0,0,255,255,0,97,255,236,5,215,6,161,18,38,0,50,0,0,17,7,1,73,1,214, |
1,78,0,19,64,11,2,40,5,38,2,0,41,40,10,0,37,1,43,53,0,43,53,0,0,0,255,255, |
0,86,255,236,4,29,5,83,18,38,0,82,0,0,17,7,1,73,0,244,0,0,0,19,64,11,2,35, |
17,38,2,0,36,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
243,18,38,0,50,0,0,17,7,2,155,1,231,0,0,0,19,64,11,2,40,5,38,2,0,45,53,10, |
0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,230,18,38,0,82,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,35,17,38,2,0,40,52,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,97,255,236,5,215,6,241,18,38,0,50,0,0,17,7,2,154,1,226,0, |
0,0,23,64,13,3,2,40,5,38,3,2,93,40,49,10,0,37,1,43,53,53,0,43,53,53,0,0,0, |
255,255,0,86,255,236,4,34,5,228,18,38,0,82,0,0,17,7,1,79,1,9,0,0,0,23,64, |
13,3,2,35,17,38,3,2,103,35,44,8,0,37,1,43,53,53,0,43,53,53,0,0,0,0,2,0,97, |
255,246,7,166,5,140,0,30,0,49,0,170,64,119,137,13,1,102,13,1,105,12,1,86, |
48,1,89,42,1,84,8,132,8,2,4,47,20,47,84,47,3,11,43,27,43,91,43,3,0,20,24, |
28,90,34,0,26,32,26,48,26,3,26,22,26,22,29,15,34,47,34,79,34,3,63,34,95,34, |
127,34,159,34,207,34,239,34,6,34,64,31,38,72,34,16,29,32,29,2,29,45,91,32, |
10,1,15,10,31,10,2,10,127,51,1,27,95,24,24,21,29,95,30,18,22,95,21,3,40,95, |
15,4,31,95,5,19,0,63,237,63,237,63,237,63,237,17,57,47,237,1,93,47,93,93, |
237,47,93,47,43,93,113,18,57,57,47,47,93,16,237,50,57,57,49,48,0,93,93,93, |
93,93,1,93,0,93,93,33,14,3,35,34,36,38,2,53,52,18,54,36,51,50,30,2,23,33, |
21,33,17,33,21,33,17,33,21,37,50,54,55,17,46,2,34,35,34,14,2,21,20,30,2,3, |
231,20,51,57,57,25,169,254,253,175,89,94,178,1,2,164,26,58,57,52,19,3,146, |
252,221,2,231,253,25,3,76,251,111,32,76,26,11,32,37,37,15,125,187,125,63, |
64,126,186,3,3,3,1,106,191,1,9,159,165,1,7,183,98,2,3,4,2,156,254,60,154, |
254,21,156,145,2,2,4,87,1,2,1,74,142,206,131,129,209,148,80,0,3,0,86,255, |
236,7,50,4,78,0,39,0,59,0,68,0,190,64,131,132,7,1,102,7,118,7,2,97,2,1,85, |
2,1,90,66,106,66,2,108,61,1,90,61,1,69,58,85,58,101,58,3,69,52,85,52,101, |
52,3,74,48,90,48,106,48,3,74,42,90,42,106,42,3,8,73,9,9,38,71,64,31,60,47, |
60,63,60,3,144,60,1,60,70,128,17,30,68,0,71,144,40,1,32,40,1,40,50,71,25, |
0,80,68,68,5,63,80,33,16,116,30,132,30,2,123,17,139,17,2,30,17,20,45,80,28, |
16,55,80,20,22,5,80,14,239,8,1,128,8,1,8,8,14,22,0,63,51,47,93,93,16,237, |
63,237,63,237,18,57,57,93,93,63,237,18,57,47,237,1,47,237,47,93,114,237,50, |
57,57,26,16,220,93,113,26,237,50,47,237,49,48,0,93,93,93,93,93,93,93,93,93, |
93,93,1,20,30,2,51,50,54,55,23,14,3,35,34,38,39,14,1,35,34,46,2,53,16,18, |
51,32,23,62,1,51,50,30,2,29,1,37,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2, |
37,46,1,35,34,14,2,7,4,46,35,73,114,80,117,141,25,158,17,61,102,153,108,137, |
198,61,63,201,137,113,181,127,68,253,242,1,25,117,67,200,119,136,183,111, |
47,252,63,42,77,110,68,69,114,81,45,47,81,108,62,69,114,81,44,3,7,15,144, |
135,45,99,84,58,4,1,247,85,143,103,57,94,72,45,45,91,73,47,91,92,93,90,68, |
140,211,143,1,23,1,25,177,94,83,88,155,210,122,24,39,126,164,98,39,41,99, |
164,123,126,165,98,40,39,98,166,225,171,157,29,74,127,98,255,255,0,168,0, |
0,5,104,6,240,18,38,0,53,0,0,17,7,2,149,1,225,0,0,0,21,180,2,31,5,38,2,184, |
255,245,180,31,34,4,17,37,1,43,53,0,43,53,0,255,255,0,136,0,0,2,166,5,228, |
18,38,0,85,0,0,17,7,0,116,0,182,0,0,0,19,64,11,1,32,17,38,1,74,32,35,6,21, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,254,78,5,104,5,129,18,38,0,53,0,0, |
17,7,2,140,2,5,0,0,0,14,185,0,2,255,225,180,35,31,4,17,37,1,43,53,255,255, |
0,129,254,78,2,136,4,78,18,38,0,85,0,0,17,6,2,140,2,0,0,14,185,0,1,255,94, |
180,36,32,6,21,37,1,43,53,0,0,255,255,0,168,0,0,5,104,6,254,18,38,0,53,0, |
0,17,7,2,151,1,102,0,0,0,21,180,2,31,5,38,2,184,255,169,180,33,39,4,17,37, |
1,43,53,0,43,53,0,255,255,0,56,0,0,2,206,5,211,18,38,0,85,0,0,17,6,1,72,56, |
0,0,21,180,1,32,17,38,1,184,255,251,180,34,40,6,21,37,1,43,53,0,43,53,0,0, |
0,255,255,0,93,255,236,4,248,7,45,18,38,0,54,0,0,17,7,0,116,1,234,1,73,0, |
19,64,11,1,64,5,38,1,91,64,67,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,228,18,38,0,86,0,0,17,7,0,116,1,57,0,0,0,19,64,11,1,56,17,38, |
1,93,56,59,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,93,255,236,4,248,7,26, |
18,38,0,54,0,0,17,7,1,71,1,114,1,71,0,19,64,11,1,65,5,38,1,18,70,64,8,0,37, |
1,43,53,0,43,53,0,0,0,255,255,0,57,255,236,3,182,5,211,18,38,0,86,0,0,17, |
7,1,71,0,172,0,0,0,19,64,11,1,57,17,38,1,0,62,56,10,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,93,254,78,4,248,5,150,18,38,0,54,0,0,17,7,0,120,1,166,0,0, |
0,11,182,1,40,72,64,8,0,37,1,43,53,0,0,0,255,255,0,57,254,78,3,182,4,75,18, |
38,0,86,0,0,17,7,0,120,0,218,0,0,0,11,182,1,15,64,56,10,0,37,1,43,53,0,0, |
0,255,255,0,93,255,236,4,248,6,254,18,38,0,54,0,0,17,7,2,151,1,115,0,0,0, |
19,64,11,1,64,5,38,1,19,66,72,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,211,18,38,0,86,0,0,17,7,1,72,0,173,0,0,0,19,64,11,1,56,17,38, |
1,0,58,64,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,46,254,78,4,180,5,129,18, |
38,0,55,0,0,17,7,2,140,1,139,0,0,0,14,185,0,1,255,254,180,12,8,4,6,37,1,43, |
53,255,255,0,31,254,78,2,42,5,44,16,38,0,87,0,0,17,6,2,140,115,0,2,233,64, |
255,35,64,232,232,72,35,64,231,231,72,35,64,228,228,72,35,64,227,227,72,35, |
64,226,226,72,35,64,221,221,72,35,64,217,217,72,35,64,216,216,72,35,64,215, |
215,72,35,64,214,214,72,35,64,213,213,72,35,64,210,210,72,35,64,206,206,72, |
35,64,205,205,72,35,64,203,203,72,35,64,202,202,72,35,64,199,199,72,35,64, |
196,196,72,35,64,195,195,72,35,64,194,194,72,35,64,192,192,72,35,64,191,191, |
72,35,64,190,190,72,35,64,185,185,72,35,64,184,184,72,35,64,181,181,72,35, |
64,180,180,72,35,64,179,179,72,35,64,178,178,72,35,64,174,174,72,35,64,173, |
173,72,35,64,170,170,72,35,64,169,169,72,35,64,168,168,72,35,64,167,167,72, |
35,64,163,163,72,35,64,162,162,72,35,64,160,160,72,35,64,159,159,72,35,64, |
158,158,72,35,64,157,157,72,35,64,156,156,72,35,64,152,152,72,35,64,149,149, |
72,35,64,148,148,72,35,64,147,147,72,35,64,146,146,72,35,64,145,145,72,35, |
64,144,144,72,35,64,142,142,72,35,64,141,141,72,64,221,35,64,138,138,72,35, |
64,137,137,72,35,64,136,136,72,35,64,134,134,72,35,64,133,133,72,35,64,131, |
131,72,35,64,130,130,72,35,64,127,127,72,35,64,126,126,72,35,64,125,125,72, |
35,64,124,124,72,35,64,123,123,72,35,64,122,122,72,35,64,121,121,72,35,64, |
120,120,72,35,64,116,116,72,35,64,115,115,72,35,64,113,113,72,35,64,112,112, |
72,35,64,111,111,72,35,64,110,110,72,35,64,109,109,72,35,64,106,106,72,35, |
64,105,105,72,35,64,104,104,72,35,64,102,102,72,35,64,101,101,72,35,64,100, |
100,72,35,64,99,99,72,35,64,98,98,72,35,64,95,95,72,35,64,94,94,72,35,64, |
93,93,72,35,64,91,91,72,35,64,90,90,72,35,64,89,89,72,35,128,88,88,72,35, |
64,87,87,72,35,64,84,84,72,35,64,83,83,72,35,64,80,80,72,35,64,79,79,72,35, |
64,78,78,72,35,64,77,77,72,35,184,255,192,179,74,74,72,35,184,255,192,179, |
71,71,72,35,184,255,192,179,63,63,72,35,184,255,192,64,9,60,60,72,35,64,52, |
52,72,35,184,255,192,179,50,50,72,35,184,255,192,179,49,49,72,35,184,255, |
192,64,9,45,45,72,35,64,41,41,72,35,184,255,192,179,39,39,72,35,184,255,192, |
64,9,38,38,72,35,64,30,30,72,35,184,255,192,179,28,28,72,35,184,255,192,64, |
9,27,27,72,35,64,19,19,72,35,184,255,192,179,17,17,72,35,184,255,192,179, |
13,13,72,35,184,255,192,64,15,9,9,72,35,64,8,8,72,1,50,27,23,7,0,37,1,43, |
53,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0,0,255,255,0,46,0,0,4,180, |
6,254,18,38,0,55,0,0,17,7,2,151,1,33,0,0,0,21,180,1,8,5,38,1,184,255,251, |
180,10,16,4,6,37,1,43,53,0,43,53,0,255,255,0,31,255,240,3,17,5,204,16,38, |
0,87,0,0,17,7,2,146,1,204,0,75,0,17,177,1,1,184,1,136,180,27,23,7,0,37,1, |
43,53,0,53,0,0,1,0,46,0,0,4,180,5,129,0,15,0,101,64,62,0,17,16,17,32,17,3, |
9,3,2,5,15,14,6,12,5,14,9,6,127,12,175,12,191,12,3,47,12,143,12,2,12,64,23, |
28,72,12,1,5,90,10,16,6,32,6,2,6,0,12,95,13,4,8,95,1,9,9,5,13,3,5,18,0,63, |
63,18,57,47,51,237,50,16,237,50,1,47,93,51,253,50,204,43,93,113,17,57,43, |
1,24,16,77,228,17,57,95,94,93,49,48,1,17,33,21,33,17,35,17,33,53,33,17,33, |
53,33,21,2,208,1,25,254,231,190,254,233,1,23,254,28,4,134,4,229,254,60,154, |
253,121,2,135,154,1,196,156,156,0,1,0,31,255,240,2,42,5,44,0,30,0,140,64, |
91,40,30,1,40,29,1,40,26,1,40,25,1,12,32,9,15,72,156,12,172,12,2,12,40,9, |
14,72,20,15,15,13,29,25,111,7,127,7,2,7,24,28,7,3,1,70,21,17,143,13,1,0,13, |
16,13,32,13,3,7,13,128,32,1,47,32,1,27,19,80,20,0,15,80,28,127,16,191,16, |
207,16,3,16,16,4,24,22,20,15,4,80,11,22,0,63,237,63,206,51,18,57,47,93,51, |
237,50,16,237,50,1,93,93,47,94,93,113,51,51,237,23,50,47,93,51,51,17,51,17, |
51,49,48,0,43,93,1,43,113,113,113,113,1,21,20,22,51,50,54,55,21,14,1,35,34, |
53,17,35,53,51,17,35,53,51,55,51,21,51,21,35,17,51,21,1,80,51,63,26,49,29, |
41,85,56,216,125,125,125,132,53,120,200,200,200,2,4,248,78,63,8,6,133,11, |
13,245,1,31,131,1,48,131,242,242,131,254,208,131,255,255,0,158,255,236,5, |
41,7,6,18,38,0,56,0,0,17,7,2,153,1,148,0,0,0,19,64,11,1,26,5,38,1,0,35,49, |
5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5,189,18,38,0,88, |
0,0,17,7,1,78,0,246,0,0,0,19,64,11,1,38,17,38,1,13,47,61,36,19,37,1,43,53, |
0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,156,18,38,0,56,0,0,17,7,1,73,1, |
159,1,73,0,19,64,11,1,26,5,38,1,1,27,26,5,20,37,1,43,53,0,43,53,0,0,0,255, |
255,0,133,255,236,3,235,5,83,18,38,0,88,0,0,17,7,1,73,0,240,0,0,0,21,180, |
1,38,17,38,1,184,255,254,180,39,38,36,19,37,1,43,53,0,43,53,0,255,255,0,158, |
255,236,5,41,6,243,18,38,0,56,0,0,17,7,2,155,1,174,0,0,0,19,64,11,1,26,5, |
38,1,0,31,39,5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5, |
230,18,38,0,88,0,0,17,7,1,74,1,11,0,0,0,21,180,1,38,17,38,1,184,255,253,180, |
43,55,36,19,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,7,62,18,38,0, |
56,0,0,17,7,1,76,1,191,0,203,0,23,64,13,2,1,31,5,38,2,1,0,36,26,5,20,37,1, |
43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,235,6,115,18,38,0,88,0, |
0,17,7,1,76,1,20,0,0,0,23,64,13,2,1,43,17,38,2,1,1,48,38,36,19,37,1,43,53, |
53,0,43,53,53,0,0,0,255,255,0,158,255,236,5,41,6,241,18,38,0,56,0,0,17,7, |
2,154,1,157,0,0,0,23,64,13,2,1,26,5,38,2,1,81,26,35,5,20,37,1,43,53,53,0, |
43,53,53,0,0,0,255,255,0,133,255,236,4,30,5,228,18,38,0,88,0,0,17,7,1,79, |
1,5,0,0,0,23,64,13,2,1,38,17,38,2,1,100,38,47,36,19,37,1,43,53,53,0,43,53, |
53,0,0,0,255,255,0,158,254,85,5,41,5,129,16,38,0,56,0,0,17,7,1,77,2,32,0, |
0,0,40,185,0,1,254,103,181,39,39,21,21,37,51,184,255,192,179,21,21,72,51, |
184,255,192,179,20,20,72,51,184,255,192,178,19,19,72,43,43,43,43,53,0,0,255, |
255,0,133,254,85,4,5,4,58,18,38,0,88,0,0,17,7,1,77,2,87,0,0,0,13,185,0,1, |
255,226,180,50,50,14,14,37,43,53,0,255,255,0,9,0,0,7,134,6,254,18,38,0,58, |
0,0,17,7,2,150,2,121,0,0,0,21,180,1,48,5,38,1,184,255,253,180,53,47,15,46, |
37,1,43,53,0,43,53,0,255,255,255,253,0,0,5,204,5,211,18,38,0,90,0,0,17,7, |
1,71,1,148,0,0,0,21,180,1,44,17,38,1,184,255,251,180,49,43,15,42,37,1,43, |
53,0,43,53,0,255,255,0,45,0,0,5,41,6,254,18,38,0,60,0,0,17,7,2,150,1,91,0, |
0,0,21,180,1,10,5,38,1,184,255,251,180,15,9,4,8,37,1,43,53,0,43,53,0,255, |
255,0,5,254,87,3,252,5,211,18,38,0,92,0,0,17,7,1,71,0,182,0,0,0,19,64,11, |
1,33,17,38,1,0,38,32,17,31,37,1,43,53,0,43,53,0,0,0,255,255,0,45,0,0,5,41, |
6,178,18,38,0,60,0,0,17,7,2,152,1,104,0,0,0,23,64,13,2,1,9,5,38,2,1,0,13, |
11,4,8,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,65,0,0,4,163,6,240,18,38, |
0,61,0,0,17,7,2,149,1,160,0,0,0,19,64,11,1,10,5,38,1,74,10,13,1,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,228,18,38,0,93,0,0,17,7,0,116,1, |
53,0,0,0,19,64,11,1,10,17,38,1,93,10,13,0,8,37,1,43,53,0,43,53,0,0,0,255, |
255,0,65,0,0,4,163,6,241,18,38,0,61,0,0,17,7,1,75,1,124,1,37,0,19,64,11,1, |
10,5,38,1,0,10,12,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,204, |
18,38,0,93,0,0,17,7,1,75,0,253,0,0,0,12,182,1,0,10,12,0,8,37,1,43,53,0,0, |
0,255,255,0,65,0,0,4,163,6,254,18,38,0,61,0,0,17,7,2,151,1,56,0,0,0,19,64, |
11,1,10,5,38,1,17,12,18,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182, |
5,211,18,38,0,93,0,0,17,7,1,72,0,156,0,0,0,21,180,1,10,17,38,1,184,255,244, |
180,12,18,0,8,37,1,43,53,0,43,53,0,0,1,0,138,0,0,2,17,5,202,0,19,0,125,185, |
0,5,255,216,179,13,17,72,5,184,255,224,64,56,8,12,72,111,10,1,10,10,0,70, |
0,1,16,1,48,1,240,1,4,8,1,255,21,1,224,21,1,223,21,1,176,21,192,21,2,159, |
21,1,112,21,128,21,2,31,21,1,0,21,1,240,21,1,223,21,1,21,184,255,192,64,18, |
34,37,72,79,21,1,112,21,1,31,21,1,14,80,7,0,0,21,0,63,63,237,1,93,93,113, |
43,113,113,114,114,114,114,114,114,114,114,47,94,93,237,50,47,93,49,48,0, |
43,43,33,35,17,52,62,2,51,50,22,23,21,46,1,35,34,14,2,21,1,62,180,22,59,102, |
81,32,69,26,17,45,18,40,51,29,11,4,180,59,101,75,43,6,6,137,3,5,22,41,60, |
39,0,0,0,0,1,0,192,254,78,3,195,5,174,0,27,0,148,64,107,133,6,1,122,18,138, |
18,2,139,15,1,89,15,105,15,121,15,3,131,13,1,85,13,101,13,117,13,3,54,13, |
1,38,7,1,38,8,1,34,22,50,22,114,22,130,22,4,21,17,37,17,53,17,3,27,212,8, |
228,8,244,8,3,80,8,144,8,2,38,8,54,8,70,8,3,8,10,27,3,13,13,17,19,3,8,95, |
14,159,14,2,14,12,16,80,9,17,17,13,3,81,15,24,127,24,175,24,3,24,13,0,47, |
47,93,237,18,57,47,51,237,50,1,47,113,51,23,51,17,23,51,113,113,113,47,49, |
48,93,0,93,1,93,93,93,93,93,93,93,93,93,1,46,1,35,34,14,2,15,1,51,7,35,3, |
35,19,35,55,51,55,62,3,51,50,22,23,3,164,17,62,31,31,46,33,24,9,26,211,25, |
213,254,180,254,152,27,151,29,12,40,71,109,81,32,82,35,5,32,5,10,19,40,64, |
45,137,131,250,211,5,45,131,152,59,102,76,43,10,10,0,0,0,4,0,4,0,0,5,82,7, |
62,0,26,0,39,0,61,0,67,1,36,64,18,122,64,138,64,2,102,5,118,5,134,5,3,86, |
6,102,6,2,25,184,255,232,64,183,9,17,72,19,24,9,17,72,12,16,14,17,72,10,12, |
1,12,38,9,10,32,8,39,32,7,32,40,130,0,68,66,132,66,2,66,62,50,130,17,175, |
62,191,62,207,62,3,15,17,47,17,2,144,17,1,0,0,32,0,2,15,0,159,0,2,0,62,17, |
17,62,0,3,6,11,5,32,32,10,7,139,7,1,90,7,106,7,122,7,3,7,16,6,32,6,48,6,3, |
32,6,1,6,6,69,80,69,176,69,2,48,69,96,69,144,69,192,69,240,69,5,47,69,1,132, |
10,1,85,10,101,10,117,10,3,10,11,62,62,45,141,112,22,128,22,2,22,22,57,127, |
64,159,64,175,64,191,64,4,64,64,9,13,72,64,8,9,39,38,38,10,5,12,32,3,128, |
57,1,63,57,1,0,57,1,57,7,7,10,0,47,51,47,47,93,93,93,23,51,18,57,47,51,205, |
50,47,43,93,18,57,47,93,237,51,47,1,47,51,93,93,93,93,113,17,51,47,93,113, |
51,93,93,17,18,57,17,51,17,18,23,57,47,47,47,93,113,93,113,93,16,237,16,205, |
93,16,237,16,135,192,192,135,192,192,1,51,49,48,93,43,43,43,93,93,93,1,20, |
6,7,6,7,1,35,3,33,3,35,1,38,39,46,1,53,52,62,2,51,50,30,2,3,46,3,39,14,3, |
7,3,33,3,52,46,2,35,34,14,2,21,20,30,1,23,22,23,51,50,62,2,3,53,55,51,21, |
5,3,158,38,33,16,18,2,29,195,161,253,126,162,198,2,36,21,18,33,38,38,66,88, |
50,50,88,66,38,158,16,29,22,15,1,2,14,23,29,15,180,2,15,131,21,36,49,28,29, |
49,36,21,21,36,24,21,24,9,28,49,36,21,247,217,207,254,202,5,112,45,79,30, |
15,11,251,68,1,115,254,141,4,185,12,17,30,79,45,45,79,59,34,34,59,79,253, |
254,36,74,60,41,4,4,41,62,73,36,254,95,3,119,25,44,33,19,19,33,44,25,26,44, |
35,10,8,1,19,35,44,1,35,16,181,23,174,0,255,255,0,87,255,236,4,115,7,62,18, |
38,0,68,0,0,16,39,1,76,1,20,255,85,17,7,0,116,1,99,1,90,0,35,64,14,3,2,101, |
16,38,4,26,106,109,3,36,37,3,2,184,255,212,180,76,66,3,36,37,1,43,53,53,43, |
53,0,43,53,53,0,0,0,255,255,0,24,0,0,7,168,6,240,18,38,0,134,0,0,17,7,2,149, |
3,228,0,0,0,21,180,2,27,5,38,2,184,1,32,180,27,30,4,14,37,1,43,53,0,43,53, |
0,255,255,0,66,255,236,6,194,5,228,18,38,0,166,0,0,17,7,0,116,2,175,0,0,0, |
19,64,11,3,89,17,38,3,73,89,92,25,61,37,1,43,53,0,43,53,0,0,0,255,255,0,71, |
255,203,5,244,6,240,18,38,0,152,0,0,17,7,2,149,2,75,0,0,0,19,64,11,3,52,5, |
38,3,73,52,55,10,24,37,1,43,53,0,43,53,0,0,0,255,255,0,44,255,218,4,180,5, |
228,18,38,0,184,0,0,17,7,0,116,1,178,0,0,0,19,64,11,3,46,17,38,3,94,46,49, |
8,19,37,1,43,53,0,43,53,0,0,0,0,1,0,0,4,177,2,150,5,211,0,9,0,66,64,14,118, |
9,134,9,2,120,8,136,8,2,128,0,1,0,184,255,192,64,27,11,15,72,0,191,6,1,6, |
4,142,64,8,148,128,6,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93,51,26,253,26, |
237,1,47,93,204,43,93,49,48,93,93,1,21,35,39,35,7,35,53,19,51,2,150,105,219, |
2,232,104,234,204,4,197,20,169,169,20,1,14,0,0,1,0,0,4,177,2,150,5,211,0, |
9,0,66,64,14,118,0,134,0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,27,11,15, |
72,8,64,191,2,1,2,7,3,148,128,6,142,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93, |
237,26,237,50,1,47,93,26,204,43,93,49,48,93,93,1,35,3,53,51,23,51,55,51,21, |
1,182,204,234,104,232,2,219,105,4,177,1,14,20,169,169,20,0,0,1,0,51,4,212, |
2,88,5,83,0,3,0,81,64,59,4,1,1,228,1,244,1,2,1,164,0,1,91,0,107,0,2,52,0, |
68,0,2,0,2,32,18,25,72,2,142,1,64,28,33,72,47,1,1,2,15,1,63,1,175,1,191,1, |
4,1,64,22,26,72,1,64,14,17,72,1,0,47,43,43,93,95,113,43,237,43,1,47,93,93, |
93,47,93,113,49,48,1,33,53,33,2,88,253,219,2,37,4,212,127,0,1,255,221,4,177, |
2,119,5,230,0,21,0,73,64,51,133,14,1,133,8,1,31,17,79,17,127,17,175,17,223, |
17,5,239,17,1,17,64,5,64,29,60,72,5,16,80,5,96,5,2,5,149,128,11,143,15,0, |
47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,237,113,50,1,47,43,26,204,93,113, |
49,48,0,93,93,1,34,46,2,39,51,30,3,51,50,62,2,55,51,14,3,1,41,74,116,84,50, |
8,117,8,39,56,72,42,42,71,56,38,8,117,9,50,83,116,4,177,51,85,112,61,43,59, |
36,15,16,36,59,42,61,112,85,51,0,1,0,156,5,32,1,80,5,204,0,3,0,23,64,12,3, |
134,0,64,14,17,72,0,0,83,1,0,0,63,237,1,47,43,237,49,48,19,53,51,21,156,180, |
5,32,172,172,0,0,2,0,51,4,144,2,23,6,115,0,19,0,39,0,89,185,0,18,255,232, |
64,14,9,14,72,12,24,9,14,72,8,24,9,14,72,2,184,255,232,64,42,9,14,72,20,130, |
64,0,192,30,130,95,10,1,10,25,141,15,15,31,15,2,15,35,141,15,5,47,5,63,5, |
79,5,127,5,159,5,191,5,239,5,8,5,0,47,93,237,220,93,237,1,47,93,237,26,220, |
26,237,49,48,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,23,38,66,88,50,50,88,66,38,38,66, |
88,50,50,88,66,38,108,21,36,49,28,29,49,36,21,21,36,49,29,28,49,36,21,5,130, |
50,88,66,38,38,66,88,50,50,88,65,38,38,65,88,50,28,49,36,21,21,36,49,28,29, |
49,38,21,21,38,49,0,0,0,0,1,0,80,254,85,1,174,0,0,0,23,0,76,64,55,14,24,9, |
13,72,9,24,9,13,72,5,32,9,17,72,12,17,132,15,0,31,0,2,95,0,191,0,2,0,6,11, |
64,7,10,72,11,20,141,16,3,1,32,3,80,3,96,3,112,3,176,3,192,3,6,3,0,47,93, |
113,237,47,43,1,47,205,93,113,237,50,49,48,43,43,43,1,14,1,35,34,38,53,52, |
62,2,55,51,14,3,21,20,22,51,50,54,55,1,174,28,71,40,105,106,34,48,53,20,133, |
25,52,43,27,49,45,29,58,28,254,112,12,15,102,85,47,79,61,42,11,14,45,59,70, |
39,42,48,13,11,0,1,255,233,4,177,2,182,5,189,0,27,2,77,185,0,26,255,232,64, |
182,9,17,72,12,24,9,17,72,41,29,1,25,29,41,29,57,29,89,29,105,29,5,29,64, |
229,232,72,29,64,217,220,72,11,29,1,208,169,29,185,29,201,29,3,155,29,1,9, |
29,57,29,2,185,29,201,29,217,29,3,29,64,195,198,72,155,29,171,29,2,137,29, |
1,123,29,1,73,29,1,137,29,185,29,2,29,64,171,175,72,6,29,54,29,2,158,153, |
29,1,125,29,141,29,2,111,29,1,45,29,61,29,77,29,3,27,29,1,13,29,1,237,29, |
253,29,2,29,128,136,139,72,137,29,153,29,2,91,29,107,29,123,29,3,29,192,127, |
130,72,9,29,1,249,29,1,235,29,1,201,29,217,29,2,171,29,187,29,2,153,29,1, |
22,29,38,29,102,29,118,29,134,29,5,4,29,1,110,29,184,255,64,64,96,101,109, |
72,148,29,1,112,29,128,29,2,82,29,98,29,2,64,29,1,18,29,34,29,50,29,3,4,29, |
1,228,29,244,29,2,214,29,1,196,29,1,176,29,1,162,29,1,128,29,144,29,2,82, |
29,98,29,114,29,3,36,29,52,29,68,29,3,6,29,22,29,2,246,29,1,210,29,226,29, |
2,192,29,1,146,29,162,29,178,29,3,100,29,116,29,132,29,3,29,184,255,192,64, |
9,60,64,72,2,29,1,59,1,29,184,255,128,64,57,53,58,72,164,29,180,29,2,144, |
29,1,100,29,116,29,132,29,3,48,29,64,29,80,29,3,4,29,20,29,36,29,3,208,29, |
224,29,2,164,29,180,29,196,29,3,112,29,128,29,2,148,29,164,29,228,29,3,29, |
184,255,192,64,19,26,31,72,128,29,1,84,29,100,29,116,29,3,29,64,7,10,72,23, |
184,255,128,64,9,36,39,72,148,23,164,23,2,23,184,255,128,64,23,30,33,72,68, |
23,1,48,23,1,2,0,23,16,23,32,23,3,208,23,224,23,2,23,184,255,192,64,43,13, |
19,72,15,23,1,23,9,22,22,5,143,64,15,14,31,14,2,255,14,1,14,64,16,19,72,14, |
128,19,143,8,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,50,237,26,221,43,93,113, |
26,237,51,47,1,47,204,93,43,93,113,95,113,113,43,113,43,43,93,93,43,93,113, |
113,113,114,114,114,114,114,43,95,94,93,43,93,93,93,93,93,113,113,113,113, |
113,113,113,113,113,114,114,114,114,114,114,43,94,93,93,93,93,93,93,93,113, |
43,113,113,43,113,114,114,114,114,114,114,94,93,43,93,113,113,113,113,43, |
113,114,114,114,94,93,43,43,93,113,49,48,43,43,1,34,46,2,35,34,6,7,35,62, |
3,51,50,30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45, |
74,59,44,84,78,69,30,54,55,8,92,5,20,43,74,4,177,37,45,37,62,57,45,95,78, |
50,37,45,37,63,56,44,95,78,51,0,0,0,2,0,22,4,177,3,25,5,228,0,5,0,11,0,111, |
64,82,164,10,1,102,10,1,154,8,170,8,2,98,4,162,4,2,98,3,1,154,2,170,2,2,10, |
159,6,1,15,6,31,6,127,6,223,6,4,7,6,4,64,63,0,79,0,143,0,175,0,191,0,207, |
0,6,0,64,30,41,72,0,64,23,26,72,0,8,2,149,128,6,15,0,47,0,63,0,127,0,239, |
0,5,0,0,47,93,50,26,237,50,1,47,43,43,93,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,93,19,53,19,51,21,1,51,53,19,51,21,1,22,217,207,254,182,253,217, |
207,254,182,4,177,20,1,31,29,254,234,20,1,31,29,254,234,0,0,1,0,205,4,194, |
1,225,6,7,0,5,0,64,64,43,2,16,12,17,72,41,2,1,10,5,26,5,42,5,3,3,43,3,1,3, |
64,0,2,128,132,0,148,0,2,112,0,1,2,16,0,32,0,64,0,96,0,4,0,0,47,93,95,93, |
93,26,205,1,47,26,205,93,49,48,95,93,93,43,19,53,19,51,21,3,205,69,207,201, |
4,194,33,1,36,37,254,224,0,3,0,29,4,176,2,139,6,65,0,5,0,9,0,13,0,83,64,53, |
2,16,11,17,72,10,5,26,5,42,5,3,47,4,1,4,47,1,1,1,1,6,192,13,208,13,2,13,10, |
192,9,208,9,2,9,6,11,7,144,6,2,0,0,10,192,6,1,15,6,63,6,2,6,0,47,93,93,51, |
51,47,205,16,237,50,1,47,205,93,47,205,93,18,57,47,113,205,93,49,48,93,43, |
19,53,19,51,21,3,37,53,51,21,33,53,51,21,250,69,187,181,254,216,150,1,66, |
150,4,176,33,1,112,37,254,148,31,172,172,172,172,0,0,255,255,0,4,0,0,5,82, |
5,131,16,38,0,36,0,0,17,7,1,80,255,108,255,124,0,94,179,2,0,24,1,184,255, |
10,181,24,24,5,5,37,28,184,255,192,179,36,36,72,28,184,255,192,179,30,30, |
72,28,184,255,192,179,24,24,72,28,184,255,192,179,21,21,72,28,184,255,192, |
179,18,18,72,28,184,255,192,179,15,15,72,28,184,255,192,64,11,12,12,72,28, |
64,11,11,72,2,23,3,0,63,53,1,43,43,43,43,43,43,43,43,43,93,53,0,1,0,187,1, |
190,1,126,2,154,0,3,2,10,179,3,134,0,5,184,255,128,64,12,229,233,72,6,5,22, |
5,2,246,5,1,5,184,255,128,64,33,222,225,72,150,5,166,5,2,116,5,132,5,2,86, |
5,102,5,2,68,5,1,38,5,54,5,2,2,5,18,5,2,211,5,184,255,128,64,22,207,210,72, |
198,5,214,5,2,180,5,1,150,5,166,5,2,116,5,132,5,2,5,184,255,192,64,36,195, |
199,72,4,5,20,5,2,214,5,230,5,246,5,3,194,5,1,148,5,164,5,180,5,3,118,5,134, |
5,2,84,5,100,5,2,5,184,255,192,64,34,174,181,72,164,5,180,5,196,5,3,70,5, |
86,5,118,5,134,5,150,5,5,52,5,1,38,5,1,4,5,20,5,2,161,5,184,255,192,179,157, |
160,72,5,184,255,192,64,37,152,155,72,100,5,116,5,2,54,5,70,5,86,5,3,36,5, |
1,6,5,22,5,2,244,5,1,214,5,230,5,2,178,5,194,5,2,5,184,255,128,64,28,135, |
138,72,86,5,102,5,2,36,5,52,5,68,5,3,2,5,18,5,2,212,5,228,5,244,5,3,5,184, |
255,192,64,23,119,124,72,82,5,98,5,2,1,32,5,48,5,64,5,3,4,5,20,5,2,112,5, |
184,255,128,64,9,103,111,72,68,5,84,5,2,5,184,255,192,179,99,102,72,5,184, |
255,128,179,92,95,72,5,184,255,192,179,87,91,72,5,184,255,128,64,21,81,86, |
72,36,5,52,5,68,5,3,228,5,1,176,5,192,5,208,5,3,5,184,255,192,64,16,67,70, |
72,48,5,1,36,5,1,0,5,16,5,2,60,5,184,255,192,64,12,56,59,72,187,5,1,128,5, |
144,5,2,5,184,255,192,64,41,45,48,72,11,5,1,208,5,224,5,2,164,5,180,5,196, |
5,3,32,5,48,5,2,2,0,5,16,5,2,240,5,1,159,5,175,5,2,0,5,1,5,184,255,192,181, |
13,17,72,0,155,1,0,47,237,1,43,93,93,93,113,95,113,113,113,114,43,114,114, |
43,94,93,93,93,43,93,93,113,43,43,43,43,114,43,94,93,93,95,93,43,93,113,113, |
113,43,113,113,113,114,114,114,114,43,43,94,93,93,93,93,93,43,113,113,113, |
113,113,114,43,114,114,114,114,43,94,93,93,93,93,93,93,43,93,113,43,47,237, |
49,48,19,53,51,21,187,195,1,190,220,220,0,0,255,255,255,245,0,0,5,238,5,131, |
16,39,0,40,0,240,0,0,17,7,1,80,255,40,255,124,0,49,64,10,1,14,3,1,16,15,1, |
0,15,1,184,255,113,64,19,15,15,1,1,37,0,208,0,1,191,0,1,47,0,1,47,0,1,0,16, |
93,93,93,93,53,43,93,93,53,0,63,53,0,0,0,255,255,255,242,0,0,6,13,5,131,16, |
39,0,43,0,237,0,0,17,7,1,80,255,37,255,124,0,95,185,0,19,255,192,179,21,21, |
72,19,184,255,192,179,20,20,72,19,184,255,192,179,19,19,72,19,184,255,192, |
179,17,17,72,19,184,255,192,64,13,14,14,72,1,14,3,1,16,15,1,0,15,1,184,255, |
113,64,19,15,15,5,5,37,0,207,0,1,191,0,1,111,0,1,47,0,1,0,16,93,93,93,93, |
53,43,93,93,53,0,63,53,1,43,43,43,43,43,0,255,255,255,232,0,0,2,85,5,131, |
16,39,0,44,0,217,0,0,17,7,1,80,255,27,255,124,0,92,185,0,11,255,192,179,17, |
17,72,11,184,255,192,64,23,12,12,72,11,64,11,11,72,11,64,9,9,72,1,6,3,1,16, |
7,1,0,7,1,184,255,102,64,28,7,7,1,1,37,0,128,0,1,127,0,1,111,0,1,95,0,1,79, |
0,1,47,0,1,47,0,1,0,16,93,93,93,93,93,93,93,53,43,93,93,53,0,63,53,1,43,43, |
43,43,255,255,255,187,255,236,5,211,5,150,16,38,0,50,252,0,17,7,1,80,254, |
238,255,124,0,39,64,10,2,42,3,2,192,40,1,0,40,1,184,255,94,64,11,40,40,10, |
10,37,1,0,47,0,1,0,16,93,53,53,43,93,93,53,0,63,53,0,0,0,255,255,0,65,0,0, |
6,171,5,131,16,39,0,60,1,130,0,0,17,7,1,80,255,116,255,124,5,192,64,21,16, |
64,233,233,72,16,64,229,229,72,16,64,227,227,72,16,64,226,226,72,16,184,255, |
192,179,224,224,72,16,184,255,192,64,19,222,222,72,16,64,220,220,72,16,64, |
219,219,72,16,64,216,216,72,16,184,255,192,179,215,215,72,16,184,255,192, |
64,19,211,211,72,16,64,207,207,72,16,64,206,206,72,16,64,205,205,72,16,184, |
255,192,179,204,204,72,16,184,255,192,64,19,202,202,72,16,64,199,199,72,16, |
64,186,186,72,16,64,184,184,72,16,184,255,192,179,183,183,72,16,184,255,192, |
64,14,182,182,72,16,64,179,179,72,16,64,177,177,72,16,184,255,192,64,19,172, |
172,72,16,64,166,166,72,16,64,164,164,72,16,64,163,163,72,16,184,255,192, |
64,24,161,161,72,16,64,156,156,72,16,128,153,153,72,16,64,152,152,72,16,64, |
151,151,72,16,184,255,192,179,149,149,72,16,184,255,128,179,148,148,72,16, |
184,255,128,179,147,147,72,16,184,255,192,179,146,146,72,16,184,255,128,179, |
145,145,72,16,184,255,192,179,144,144,72,16,184,255,128,179,141,141,72,16, |
184,255,128,179,140,140,72,16,184,255,192,179,139,139,72,16,184,255,128,179, |
138,138,72,16,184,255,192,179,137,137,72,16,184,255,192,179,136,136,72,16, |
184,255,192,179,135,135,72,16,184,255,128,179,134,134,72,16,184,255,192,179, |
133,133,72,16,184,255,128,179,131,131,72,16,184,255,192,179,130,130,72,16, |
184,255,0,179,129,129,72,16,184,255,0,179,128,128,72,16,184,254,192,179,127, |
127,72,16,184,255,0,179,126,126,72,16,184,255,0,179,125,125,72,16,184,255, |
64,179,124,124,72,16,184,255,64,179,123,123,72,16,184,255,64,179,122,122, |
72,16,184,255,0,179,121,121,72,16,184,254,192,179,120,120,72,16,184,255,0, |
179,119,119,72,16,184,255,0,179,118,118,72,16,184,255,64,179,117,117,72,16, |
184,255,0,179,116,116,72,16,184,255,64,179,115,115,72,16,184,255,0,179,114, |
114,72,16,184,255,64,179,113,113,72,16,184,255,64,179,112,112,72,16,184,255, |
64,179,111,111,72,16,184,255,128,179,110,110,72,16,184,255,64,179,109,109, |
72,16,184,255,128,179,108,108,72,16,184,255,0,179,107,107,72,16,184,255,64, |
179,106,106,72,16,184,255,0,179,105,105,72,16,184,255,64,179,104,104,72,16, |
184,255,64,179,103,103,72,16,184,255,64,179,102,102,72,16,184,255,128,179, |
101,101,72,16,184,255,64,179,100,100,72,16,184,255,64,179,99,99,72,16,184, |
255,0,179,98,98,72,16,184,255,64,179,97,97,72,16,184,255,64,179,96,96,72, |
16,184,255,64,179,95,95,72,16,184,255,64,179,94,94,72,16,184,255,64,179,93, |
93,72,16,184,255,128,179,92,92,72,16,184,255,64,179,91,91,72,16,184,255,128, |
179,90,90,72,16,184,255,64,179,89,89,72,16,184,255,128,179,88,88,72,16,184, |
255,64,179,87,87,72,16,184,255,64,179,86,86,72,16,184,255,64,179,85,85,72, |
16,184,255,64,179,84,84,72,16,184,255,64,179,83,83,72,16,184,255,128,179, |
82,82,72,16,184,255,192,179,81,81,72,16,184,255,128,179,80,80,72,16,184,255, |
128,179,79,79,72,16,184,255,64,179,78,78,72,16,184,255,64,179,77,77,72,16, |
184,255,64,179,76,76,72,16,184,255,128,179,75,75,72,16,184,255,128,179,74, |
74,72,16,184,255,128,179,73,73,72,16,184,255,64,179,72,72,72,16,184,255,128, |
179,71,71,72,16,184,255,192,179,70,70,72,16,184,255,128,179,69,69,72,16,184, |
255,192,179,68,68,72,16,184,255,192,179,67,67,72,16,184,255,128,179,66,66, |
72,16,184,255,64,179,65,65,72,16,184,255,128,179,64,64,72,16,184,255,128, |
179,63,63,72,16,184,255,128,179,62,62,72,16,184,255,192,179,61,61,72,16,184, |
255,192,179,60,60,72,16,184,255,192,179,59,59,72,16,184,255,128,179,58,58, |
72,16,184,255,128,179,57,57,72,16,184,255,128,179,56,56,72,16,184,255,128, |
179,55,55,72,16,184,255,128,179,54,54,72,16,184,255,192,179,53,53,72,16,184, |
255,192,179,52,52,72,16,184,255,128,179,51,51,72,16,184,255,192,179,50,50, |
72,16,184,255,128,179,49,49,72,16,184,255,128,179,48,48,72,16,184,255,128, |
179,47,47,72,16,184,255,192,179,46,46,72,16,184,255,128,179,45,45,72,16,184, |
255,128,179,44,44,72,16,184,255,128,179,43,43,72,16,184,255,192,179,42,42, |
72,16,184,255,192,179,41,41,72,16,184,255,192,179,40,40,72,16,184,255,192, |
179,39,39,72,16,184,255,128,179,38,38,72,16,184,255,128,179,37,37,72,16,184, |
255,128,179,36,36,72,16,184,255,192,179,35,35,72,16,184,255,128,179,34,34, |
72,16,184,255,192,179,33,33,72,16,184,255,192,179,32,32,72,16,184,255,192, |
179,31,31,72,16,184,255,192,179,30,30,72,16,184,255,192,179,29,29,72,16,184, |
255,192,179,28,28,72,16,184,255,192,179,27,27,72,16,184,255,192,179,26,26, |
72,16,184,255,192,179,25,25,72,16,184,255,192,179,24,24,72,16,184,255,128, |
179,23,23,72,16,184,255,192,179,22,22,72,16,184,255,192,179,21,21,72,16,184, |
255,192,179,17,17,72,16,184,255,128,179,16,16,72,16,184,255,192,179,15,15, |
72,16,184,255,192,179,14,14,72,16,184,255,192,64,30,12,12,72,16,64,11,11, |
72,1,11,3,1,128,12,1,112,12,1,96,12,1,64,12,1,16,12,1,0,12,1,184,255,166, |
64,13,12,12,4,4,37,0,176,0,1,0,0,1,0,16,93,93,53,43,93,93,93,93,93,93,53, |
0,63,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,187,0,0, |
5,173,5,150,16,38,1,114,10,0,17,7,1,80,254,238,255,124,0,68,64,15,65,64,19, |
19,72,1,60,3,1,144,58,1,16,58,1,184,255,62,64,28,58,58,53,53,37,0,159,0,1, |
95,0,1,31,0,1,223,0,1,175,0,1,159,0,1,31,0,1,0,16,93,93,93,93,113,113,113, |
53,43,93,93,53,0,63,53,1,43,0,0,255,255,255,176,0,0,2,30,6,65,16,38,1,130, |
0,0,17,6,1,81,147,0,2,60,64,11,29,64,227,227,72,29,64,226,226,72,29,184,255, |
192,179,223,223,72,29,184,255,192,179,220,220,72,29,184,255,192,64,19,219, |
219,72,29,64,213,213,72,29,64,212,212,72,29,64,211,211,72,29,184,255,192, |
179,207,207,72,29,184,255,192,179,206,206,72,29,184,255,192,64,19,205,205, |
72,29,64,200,200,72,29,64,199,199,72,29,64,198,198,72,29,184,255,192,64,14, |
192,192,72,29,64,182,182,72,29,64,177,177,72,29,184,255,192,179,175,175,72, |
29,184,255,192,64,19,174,174,72,29,64,168,168,72,29,64,167,167,72,29,64,164, |
164,72,29,184,255,192,179,161,161,72,29,184,255,192,64,19,160,160,72,29,64, |
155,155,72,29,64,154,154,72,29,64,153,153,72,29,184,255,192,179,152,152,72, |
29,184,255,192,64,19,151,151,72,29,64,141,141,72,29,64,132,132,72,29,64,131, |
131,72,29,184,255,192,64,9,129,129,72,29,64,119,119,72,29,184,255,192,64, |
14,115,115,72,29,64,110,110,72,29,64,109,109,72,29,184,255,192,64,19,106, |
106,72,29,64,101,101,72,29,64,100,100,72,29,64,96,96,72,29,184,255,192,179, |
94,94,72,29,184,255,192,64,19,93,93,72,29,64,87,87,72,29,64,86,86,72,29,64, |
85,85,72,29,184,255,192,179,84,84,72,29,184,255,192,64,9,79,79,72,29,64,74, |
74,72,29,184,255,192,64,24,61,61,72,29,64,56,56,72,29,64,55,55,72,29,64,54, |
54,72,29,64,51,51,72,29,184,255,192,179,50,50,72,29,184,255,192,179,49,49, |
72,29,184,255,192,64,19,48,48,72,29,64,42,42,72,29,64,41,41,72,29,64,40,40, |
72,29,184,255,192,179,36,36,72,29,184,255,192,179,35,35,72,29,184,255,192, |
64,19,34,34,72,29,64,29,29,72,29,64,24,24,72,29,64,23,23,72,29,184,255,192, |
179,21,21,72,29,184,255,192,179,17,17,72,29,184,255,192,64,14,16,16,72,29, |
64,9,9,72,29,64,8,8,72,29,184,255,192,64,12,7,7,72,3,2,1,14,17,38,3,2,1,184, |
255,220,180,20,26,5,13,37,1,43,53,53,53,0,43,53,53,53,1,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,0,4,0,0,5,82,5,129, |
18,6,0,36,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,0,1,0,168,0,1,4, |
47,5,130,0,5,0,56,64,40,3,90,0,4,16,4,64,4,3,4,16,0,48,0,80,0,3,0,0,16,0, |
32,0,64,0,96,0,128,0,160,0,7,7,0,2,95,5,3,3,18,0,63,63,237,1,47,94,93,113, |
47,93,237,49,48,1,21,33,17,35,17,4,47,253,56,191,5,130,156,251,27,5,129,0, |
2,0,61,0,0,5,26,5,129,0,5,0,18,0,176,64,26,106,7,122,7,138,7,3,101,17,117, |
17,133,17,3,89,8,1,86,16,1,6,24,13,17,72,18,184,255,232,64,64,13,17,72,132, |
2,1,70,2,102,2,118,2,3,139,1,1,73,1,105,1,121,1,3,2,1,12,12,0,6,95,3,1,16, |
3,1,15,3,1,175,3,207,3,223,3,255,3,4,79,3,127,3,2,48,3,1,31,3,1,3,18,128, |
0,1,0,184,255,192,64,29,21,30,72,0,48,20,1,47,20,1,0,3,6,3,18,95,5,18,12, |
32,19,22,72,153,12,1,12,1,3,0,63,51,93,43,63,237,23,50,1,93,93,47,43,93,51, |
47,93,93,93,93,113,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93,43,43,93, |
93,93,93,49,48,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,62,2,5,217,1,254,251, |
35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12,141, |
156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,255,255,0,168,0,0,4,254,5,129, |
18,6,0,40,0,0,255,255,0,65,0,0,4,163,5,129,18,6,0,61,0,0,255,255,0,168,0, |
0,5,32,5,129,18,6,0,43,0,0,0,3,0,97,255,236,5,215,5,150,0,19,0,39,0,43,0, |
179,64,130,105,12,1,102,17,1,89,22,1,86,32,1,86,28,1,26,23,90,23,2,21,27, |
85,27,2,9,42,1,6,43,1,10,37,26,37,90,37,3,5,33,21,33,85,33,3,9,43,42,30,0, |
91,15,20,1,59,207,20,239,20,2,0,20,1,239,20,255,20,2,176,20,1,111,20,1,48, |
20,1,31,20,1,0,20,16,20,32,20,64,20,80,20,160,20,6,7,20,30,91,175,10,191, |
10,2,32,10,1,15,10,31,10,2,10,43,95,40,40,35,25,95,15,4,35,95,5,19,128,45, |
1,32,45,1,93,93,0,63,237,63,237,18,57,47,237,1,47,93,93,93,237,47,94,93,113, |
113,113,113,113,114,114,94,93,237,18,57,57,49,48,94,93,93,93,93,93,93,93, |
93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,37,33,21,33,5,215,95,180,254,252,165,174, |
254,250,174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127, |
63,65,127,189,123,132,191,123,59,252,226,2,75,253,181,2,199,165,254,242,192, |
104,109,195,1,12,159,165,1,10,187,101,102,188,254,246,163,127,208,148,80, |
80,148,208,127,127,211,153,85,86,153,212,208,160,0,0,0,255,255,0,189,0,0, |
1,124,5,129,18,6,0,44,0,0,255,255,0,168,0,0,5,63,5,129,18,6,0,46,0,0,0,1, |
0,10,0,1,5,78,5,130,0,16,0,202,64,11,116,16,132,16,2,123,15,139,15,2,13,184, |
255,232,182,14,17,72,54,13,1,12,184,255,240,64,127,13,17,72,2,16,13,17,72, |
1,24,14,17,72,57,1,1,111,18,1,48,18,1,47,18,1,0,18,1,21,16,37,16,53,16,3, |
6,16,1,230,16,246,16,2,16,26,15,42,15,58,15,3,9,15,1,233,15,249,15,2,15,7, |
7,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,13,175,14,191,14,2,14,26,1,42, |
1,58,1,3,9,1,1,233,1,249,1,2,1,16,0,32,0,48,0,3,111,0,1,0,0,48,0,2,0,118, |
7,134,7,2,7,15,3,14,0,18,0,63,50,63,51,93,1,47,93,93,113,50,93,113,113,47, |
93,51,93,113,113,57,61,47,51,93,113,113,51,93,113,113,93,93,93,93,49,48,93, |
43,43,43,93,43,93,93,37,35,1,46,1,39,38,39,6,7,14,1,7,1,35,1,51,5,78,201, |
254,124,17,29,12,14,12,13,14,12,30,15,254,122,201,2,63,198,1,3,224,47,89, |
35,41,37,39,41,35,89,45,252,32,5,129,0,255,255,0,168,0,0,6,2,5,129,18,6,0, |
48,0,0,255,255,0,168,0,0,5,32,5,129,18,6,0,49,0,0,0,3,0,90,0,0,4,217,5,129, |
0,3,0,7,0,11,0,75,64,49,82,3,1,10,9,5,3,95,6,1,15,6,31,6,175,6,191,6,4,6, |
2,16,5,48,5,2,32,5,64,5,112,5,160,5,4,5,10,95,11,11,0,7,95,6,18,3,95,0,3, |
0,63,237,63,237,17,57,47,237,1,47,93,113,51,47,93,113,51,18,57,57,49,48,113, |
19,33,21,33,1,21,33,53,1,21,33,53,125,4,57,251,199,4,92,251,129,3,228,252, |
183,5,129,156,251,183,156,156,2,133,154,154,0,0,0,255,255,0,97,255,236,5, |
215,5,150,18,6,0,50,0,0,0,1,0,168,0,0,5,32,5,129,0,7,0,79,64,40,3,90,0,4, |
16,4,64,4,3,7,4,7,90,64,111,0,127,0,143,0,191,0,4,0,0,9,128,32,9,1,32,9,160, |
9,176,9,192,9,4,9,184,255,192,64,10,14,17,72,2,95,5,3,4,0,18,0,63,50,63,237, |
1,43,93,113,26,16,204,47,93,26,237,47,94,93,237,49,48,33,17,33,17,35,17,33, |
17,4,97,253,6,191,4,120,4,224,251,32,5,129,250,127,255,255,0,168,0,0,4,234, |
5,129,18,6,0,51,0,0,0,1,0,108,0,0,4,161,5,129,0,12,0,188,64,135,169,3,1,105, |
9,1,116,9,132,9,164,9,3,148,8,164,8,2,87,8,103,8,2,145,7,1,84,7,100,7,2,146, |
10,162,10,2,116,10,132,10,2,70,10,86,10,102,10,3,57,3,185,3,2,249,3,1,103, |
3,1,168,8,1,103,8,1,8,100,2,1,39,2,1,175,6,1,2,6,2,6,1,208,11,1,0,11,16,11, |
48,11,80,11,96,11,128,11,6,7,11,70,7,1,11,7,1,7,3,3,10,175,1,191,1,2,32,1, |
1,15,1,1,1,3,7,95,9,2,8,3,0,4,3,1,10,95,0,18,0,63,237,50,63,18,23,57,237, |
50,1,47,93,93,93,51,51,47,51,113,113,47,94,93,93,18,57,57,47,47,93,113,113, |
51,113,113,113,113,114,49,48,93,93,93,93,93,93,93,93,113,93,51,53,9,1,53, |
33,21,33,1,21,1,33,21,108,2,26,253,247,3,231,252,240,1,202,254,22,3,109,162, |
2,67,1,251,161,156,254,67,124,253,240,156,0,255,255,0,46,0,0,4,180,5,129, |
18,6,0,55,0,0,255,255,0,45,0,0,5,41,5,129,18,6,0,60,0,0,0,3,0,117,255,245, |
5,238,5,139,0,29,0,40,0,51,0,180,185,0,28,255,240,179,12,15,72,17,184,255, |
240,179,12,15,72,27,184,255,240,179,12,15,72,18,184,255,240,64,72,12,15,72, |
41,90,11,15,123,15,171,15,3,15,8,30,90,4,0,116,0,164,0,3,0,35,24,7,90,47, |
21,4,8,1,20,8,36,8,68,8,116,8,164,8,244,8,6,8,20,53,68,53,2,0,53,1,132,53, |
164,53,196,53,244,53,4,112,53,1,2,96,53,1,53,184,255,192,64,24,10,13,72,35, |
46,96,10,6,10,34,49,96,20,24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57, |
47,47,17,51,16,237,50,17,51,16,237,50,1,43,93,95,93,93,113,113,47,93,113, |
51,51,253,50,50,220,93,237,16,220,93,237,49,48,0,43,43,43,43,1,20,14,2,43, |
1,21,35,53,35,34,46,2,53,52,62,2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17, |
51,50,62,2,37,20,30,2,59,1,17,35,34,6,5,238,64,131,197,133,83,185,83,133, |
197,131,64,67,133,201,135,72,185,71,135,202,133,67,192,185,183,48,56,92,136, |
89,43,252,7,43,89,136,92,56,52,182,182,2,224,105,188,143,84,227,227,84,143, |
188,105,113,185,131,72,182,182,72,131,185,117,187,180,253,22,53,98,140,88, |
88,140,98,53,2,234,180,255,255,0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,145, |
0,0,6,30,5,129,0,35,0,203,64,127,90,31,106,31,2,85,30,101,30,2,90,4,106,4, |
2,90,5,106,5,2,74,22,1,69,13,1,3,25,90,100,28,1,132,28,148,28,2,28,19,35, |
90,0,10,90,107,7,1,139,7,155,7,2,7,16,219,0,1,4,0,100,0,132,0,3,219,0,1,4, |
0,52,0,68,0,100,0,132,0,148,0,180,0,196,0,8,7,0,4,37,36,37,52,37,68,37,132, |
37,196,37,212,37,7,228,37,244,37,2,160,37,1,132,37,148,37,2,96,37,112,37, |
2,84,37,1,64,37,1,2,37,184,255,192,64,18,9,12,72,34,2,96,19,239,15,1,15,15, |
26,17,8,3,0,18,0,63,63,51,51,57,47,93,51,237,50,1,43,95,93,93,93,93,93,93, |
113,47,94,93,93,113,113,51,220,93,113,237,16,253,50,220,93,113,237,49,48, |
95,93,93,93,0,93,1,93,0,93,33,17,35,34,46,2,53,17,51,17,20,30,2,59,1,17,51, |
17,51,50,62,2,53,17,51,17,20,14,2,43,1,17,2,251,83,133,201,134,67,191,47, |
93,139,92,56,185,56,95,140,91,45,191,68,134,201,132,83,1,171,84,142,189,104, |
1,207,254,45,80,137,100,57,3,73,252,183,57,100,137,80,1,211,254,49,104,189, |
142,84,254,85,0,0,0,1,0,87,0,0,5,163,5,150,0,57,0,225,64,91,101,36,1,101, |
22,1,157,49,1,143,49,1,49,16,11,15,72,157,9,1,143,9,1,9,16,11,15,72,116,3, |
132,3,2,54,3,1,54,2,118,2,2,54,56,118,56,2,116,55,132,55,2,54,55,1,42,26, |
1,42,32,1,41,53,48,40,10,18,96,40,112,40,144,40,3,111,18,127,18,159,18,3, |
40,18,40,18,24,34,91,80,53,1,53,184,255,192,64,69,27,30,72,191,53,207,53, |
2,48,53,1,53,17,5,91,31,24,79,24,2,224,24,1,15,24,31,24,95,24,207,24,223, |
24,5,160,24,1,111,24,159,24,2,0,24,32,24,48,24,3,8,24,95,59,1,10,15,19,39, |
48,5,42,95,18,41,18,29,95,0,4,0,63,237,63,51,237,23,50,1,93,47,94,93,93,93, |
113,113,114,253,196,47,93,93,43,114,237,17,57,57,47,47,93,93,17,51,17,51, |
16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,1,50,30,2, |
21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46,2,35,34,14,2,21,20,30, |
2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,2,253,151,241,168,90,59,109, |
157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116,169,108,109,170,116, |
61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109,59,90,168,241,5,150, |
86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51,126,143,159,85,116,181, |
124,65,65,124,181,116,85,159,143,126,51,224,156,4,2,3,2,54,138,167,191,106, |
147,234,162,86,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218, |
0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,3,0,45, |
0,0,5,41,6,178,0,8,0,12,0,16,2,114,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5, |
1,3,5,1,16,3,5,184,255,232,64,255,12,15,72,12,133,9,16,133,64,13,5,4,14,2, |
1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8,6,1,90,38,2,86,2,150,2,3, |
118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,18,169,18,201,18,3,86,18,1,9,18, |
57,18,2,25,18,89,18,137,18,249,18,4,6,18,1,202,249,18,1,230,18,1,9,18,25, |
18,185,18,201,18,4,198,18,1,89,18,121,18,169,18,3,54,18,1,41,18,57,18,185, |
18,233,18,4,11,18,1,153,249,18,1,198,18,214,18,2,178,18,1,164,18,1,150,18, |
1,130,18,1,116,18,1,86,18,102,18,2,66,18,1,36,18,52,18,2,18,18,1,4,18,1,244, |
18,1,230,18,1,196,18,212,18,2,166,18,182,18,2,146,18,1,132,18,1,118,18,1, |
98,18,1,84,18,1,54,18,70,18,2,36,18,1,22,18,1,4,18,1,242,18,1,1,208,18,224, |
18,2,196,18,1,160,18,176,18,2,148,18,1,112,18,1,100,18,1,64,18,1,20,18,36, |
18,52,18,3,0,18,1,105,64,202,228,18,244,18,2,208,18,1,164,18,180,18,196,18, |
3,128,18,144,18,2,116,18,1,80,18,96,18,2,68,18,1,32,18,1,4,18,20,18,2,244, |
18,1,224,18,1,196,18,212,18,2,176,18,1,84,18,100,18,116,18,148,18,164,18, |
5,48,18,64,18,2,36,18,1,0,18,1,196,18,244,18,2,144,18,1,4,18,20,18,36,18, |
68,18,84,18,116,18,132,18,7,57,224,18,1,132,18,164,18,212,18,3,112,18,1,4, |
18,36,18,52,18,84,18,100,18,5,228,18,244,18,2,192,18,1,180,18,1,144,18,1, |
4,18,20,18,52,18,84,18,132,18,5,212,18,228,18,2,187,18,1,164,18,1,112,18, |
1,2,48,18,96,18,2,15,18,47,18,2,10,14,145,9,95,13,1,13,64,9,12,72,13,0,3, |
59,3,75,3,123,3,3,3,1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,47,43,93,51,237, |
50,1,93,93,95,93,93,93,93,113,113,113,113,113,114,114,114,114,94,93,93,93, |
113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,95,93,113,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,113,113, |
113,114,114,114,94,93,93,113,113,113,47,94,93,93,93,113,253,57,206,94,93, |
93,50,43,1,24,16,77,230,50,47,26,237,220,237,49,48,43,95,94,93,93,43,93,93, |
1,17,35,19,1,51,9,1,51,37,53,51,21,33,53,51,21,3,9,190,2,253,224,205,1,178, |
1,176,205,253,249,163,253,211,165,2,72,253,184,2,72,3,57,253,97,2,159,121, |
184,184,184,184,255,255,0,86,255,236,4,101,6,7,18,38,1,122,0,0,17,7,1,80, |
1,33,0,0,0,19,64,11,2,60,17,38,2,26,60,63,8,23,37,1,43,53,0,43,53,0,0,0,255, |
255,0,70,255,236,3,106,6,7,18,38,1,126,0,0,17,7,1,80,0,202,0,0,0,19,64,11, |
1,58,17,38,1,73,58,61,16,6,37,1,43,53,0,43,53,0,0,0,255,255,0,106,254,88, |
3,238,6,7,18,38,1,128,0,0,17,7,1,80,1,57,0,0,0,19,64,11,1,36,17,38,1,100, |
36,39,17,34,37,1,43,53,0,43,53,0,0,0,255,255,0,137,0,0,1,178,6,7,18,38,1, |
130,0,0,17,6,1,80,209,0,0,27,64,17,1,14,17,38,1,16,14,1,0,14,1,29,14,17,5, |
13,37,1,43,93,93,53,0,43,53,0,255,255,0,133,255,236,3,254,6,65,18,38,1,142, |
0,0,17,7,1,81,0,222,0,0,0,30,64,9,3,2,1,32,17,38,3,2,1,184,255,241,180,38, |
44,10,0,37,1,43,53,53,53,0,43,53,53,53,0,2,0,86,255,236,4,101,4,78,0,39,0, |
59,1,15,64,196,122,48,138,48,2,121,52,137,52,2,101,43,1,90,58,106,58,2,54, |
14,70,14,2,29,31,45,31,2,29,38,45,38,2,47,37,1,29,37,1,75,36,107,36,2,47, |
36,63,36,2,29,36,1,139,35,1,47,35,1,29,35,1,47,34,1,29,34,1,47,22,1,27,22, |
1,47,21,1,27,21,1,75,20,107,20,2,47,20,1,27,20,1,45,19,1,27,19,1,121,6,137, |
6,2,11,6,27,6,2,34,48,18,22,72,34,33,22,48,18,22,72,22,23,26,33,42,33,2,73, |
23,1,26,23,42,23,2,33,23,159,28,175,28,191,28,3,28,64,29,33,72,28,64,0,16, |
22,34,4,144,50,160,50,176,50,3,127,50,1,32,50,64,50,2,50,61,128,40,71,8,16, |
61,1,0,50,28,16,4,23,33,21,23,15,55,80,11,16,45,80,5,22,0,63,237,63,237,63, |
63,18,23,57,1,93,47,237,26,16,220,93,93,93,23,50,26,205,43,93,50,50,93,93, |
93,17,51,43,17,51,43,49,48,0,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,0,93,1,93,0,93,1,93,37,14,3,35,34,2,17,16,18, |
51,50,30,2,23,51,62,3,55,51,14,3,7,30,3,23,35,46,3,39,1,20,30,2,51,50,62, |
2,55,46,3,35,34,14,2,3,75,26,65,87,111,70,205,193,217,209,69,112,86,63,20, |
2,4,14,19,23,13,188,22,46,39,30,5,3,23,31,36,18,183,11,21,16,13,3,253,196, |
28,59,93,66,54,100,82,61,14,12,45,71,102,70,66,96,64,31,237,56,94,69,38,1, |
20,1,24,1,28,1,26,39,69,93,54,21,56,63,65,30,47,128,139,139,58,103,175,144, |
110,39,28,66,65,58,20,1,49,112,160,103,48,52,107,160,108,86,154,115,68,46, |
102,163,0,2,0,142,254,87,4,73,5,204,0,32,0,62,0,185,64,68,149,20,1,154,16, |
1,123,7,139,7,2,122,60,138,60,2,106,3,122,3,138,3,3,102,31,118,31,2,74,50, |
90,50,106,50,3,21,2,37,2,101,2,117,2,133,2,5,147,21,1,21,21,37,21,2,28,48, |
23,72,52,48,48,64,48,2,96,48,1,48,184,255,192,64,58,20,23,72,48,52,48,52, |
14,0,72,64,48,43,64,43,160,43,3,160,43,176,43,192,43,3,43,64,128,33,13,70, |
0,14,16,14,48,14,3,8,14,28,48,80,49,49,38,57,80,18,0,13,27,33,38,80,9,5,22, |
0,63,51,237,50,63,63,237,18,57,47,237,57,1,47,94,93,237,50,26,16,220,93,113, |
26,237,18,57,57,47,47,43,93,113,16,237,17,57,49,48,93,93,93,93,93,0,93,93, |
93,1,93,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35,17,52,54,51,50,30,2,21, |
20,14,2,7,30,3,1,30,3,51,50,62,2,53,52,46,2,35,53,62,1,53,52,46,2,35,34,14, |
2,21,4,73,53,111,173,120,102,160,56,6,3,3,180,228,226,99,152,102,53,35,61, |
81,46,57,114,91,56,252,249,28,71,81,87,43,72,110,73,38,38,81,128,89,127,113, |
27,57,87,60,70,104,68,34,1,149,89,154,116,66,55,39,57,92,53,254,215,5,172, |
237,220,47,90,130,82,73,111,82,56,18,11,55,93,137,254,218,19,34,25,14,41, |
76,106,66,65,110,81,45,142,27,139,122,44,77,57,32,35,77,122,88,0,0,0,0,1, |
0,7,254,88,3,249,4,58,0,24,0,237,64,59,59,22,75,22,2,41,22,1,59,21,75,21, |
2,26,21,42,21,2,9,21,1,42,12,58,12,74,12,3,25,12,1,77,13,1,13,16,13,16,72, |
66,2,1,54,2,1,34,2,1,6,2,22,2,2,13,2,1,1,17,1,184,255,240,64,76,13,16,72, |
24,15,7,7,13,14,16,15,14,47,14,2,57,31,14,63,14,95,14,127,14,159,14,191,14, |
223,14,255,14,8,63,14,127,14,159,14,191,14,223,14,255,14,6,0,14,32,14,2,224, |
14,1,191,14,1,160,14,1,95,14,159,14,2,0,14,16,14,64,14,3,8,14,1,0,184,255, |
240,64,17,127,0,1,0,64,26,1,0,26,48,26,96,26,144,26,4,26,184,255,192,64,14, |
21,26,72,7,15,24,3,25,20,27,13,13,0,15,0,63,50,47,63,17,23,51,1,43,93,113, |
47,93,56,50,47,94,93,93,93,93,93,113,113,114,94,93,56,51,57,61,47,51,51,49, |
48,43,94,93,94,93,93,93,93,43,93,93,93,93,93,93,93,93,19,51,19,30,3,23,62, |
3,55,19,51,1,14,3,7,35,62,1,55,7,192,245,7,21,20,17,4,5,18,21,22,8,239,191, |
254,122,17,31,27,23,7,191,17,48,24,4,58,253,93,22,63,67,63,22,21,62,67,63, |
22,2,165,251,251,45,111,124,132,65,131,213,91,0,0,0,2,0,86,255,236,4,29,5, |
204,0,19,0,50,0,156,64,81,115,28,131,28,2,106,28,1,118,46,134,46,2,106,46, |
1,90,2,106,2,2,90,17,106,17,2,85,13,101,13,2,114,26,130,26,2,38,26,1,128, |
25,1,114,25,1,51,25,67,25,2,50,50,31,71,0,64,25,46,5,47,47,41,31,0,1,144, |
0,1,0,52,128,10,71,31,41,1,41,47,20,80,5,184,255,224,64,22,23,28,72,5,24, |
18,22,72,111,5,1,90,5,1,5,46,48,0,15,80,36,22,0,63,237,63,57,57,93,93,43, |
43,237,50,1,47,93,237,26,16,204,93,113,17,57,47,57,57,51,26,16,237,50,47, |
49,48,93,93,93,93,93,93,93,93,93,93,93,93,1,52,46,2,39,14,3,21,20,30,2,51, |
50,62,2,1,34,46,2,39,1,30,3,21,20,14,2,35,34,46,2,53,52,62,2,55,1,53,33,21, |
3,96,49,69,76,26,73,134,102,60,35,73,111,77,81,112,69,31,254,255,13,42,45, |
41,13,1,60,54,102,79,49,64,123,180,115,114,180,125,66,73,127,169,96,254,193, |
2,221,1,215,85,145,115,86,27,26,81,114,146,91,76,131,96,55,54,95,131,3,191, |
2,3,2,1,254,188,55,116,134,159,97,110,182,131,72,68,127,183,115,112,176,135, |
97,33,1,83,119,132,0,1,0,70,255,236,3,106,4,78,0,57,0,179,64,49,140,37,1, |
133,3,1,53,36,69,36,2,55,34,1,42,8,1,37,5,1,14,24,9,12,72,10,29,26,29,42, |
29,3,42,70,21,48,27,48,27,48,16,35,35,6,64,37,48,72,6,184,255,192,179,14, |
17,72,6,184,255,192,64,66,8,11,72,6,59,53,71,31,16,63,16,79,16,95,16,4,16, |
64,37,43,72,16,128,59,1,31,59,95,59,2,21,48,80,15,47,31,47,79,47,95,47,175, |
47,223,47,239,47,7,191,47,207,47,2,47,47,0,39,80,36,32,16,0,80,5,11,22,0, |
63,51,237,63,51,237,18,57,47,93,113,237,57,1,93,113,47,43,93,237,16,198,43, |
43,43,50,47,17,57,57,47,47,18,57,237,49,48,93,43,0,93,1,93,0,93,93,93,93, |
37,50,62,2,55,23,14,3,35,34,46,2,53,52,62,2,55,53,46,3,53,52,62,2,51,50,22, |
23,7,46,1,35,34,6,21,20,30,2,51,21,34,14,2,21,20,30,2,1,200,54,96,79,63,21, |
105,32,84,106,130,78,96,141,92,45,42,72,96,54,51,85,61,34,50,95,136,87,118, |
191,67,128,47,125,75,91,96,55,97,131,75,72,139,109,66,29,52,74,114,31,48, |
56,26,100,39,71,53,32,46,84,116,69,58,95,69,42,5,2,6,40,64,86,51,62,106,77, |
44,86,99,88,71,68,85,74,57,70,37,12,135,11,40,80,69,45,69,46,24,0,0,0,1,0, |
86,254,159,3,96,5,204,0,56,0,209,64,117,169,38,1,156,29,172,29,2,149,55,165, |
55,2,173,39,1,124,39,140,39,156,39,3,117,8,1,115,2,1,100,36,132,36,148,36, |
164,36,4,139,24,155,24,171,24,3,57,24,1,44,31,156,31,172,31,3,44,30,60,30, |
76,30,3,100,54,132,54,164,54,3,38,54,86,54,2,240,47,1,47,47,21,0,71,33,40, |
50,50,10,31,21,79,21,2,191,21,1,21,64,29,33,72,0,21,16,21,32,21,64,21,4,7, |
21,50,47,80,5,26,0,184,255,240,64,31,19,22,72,135,0,151,0,2,218,33,1,169, |
33,185,33,201,33,3,136,33,152,33,2,26,33,0,3,15,48,0,15,0,47,63,18,23,57, |
93,93,93,93,43,17,51,237,50,1,47,94,93,43,93,113,205,50,47,51,47,237,18,57, |
47,113,49,48,93,93,93,93,0,93,93,1,93,0,93,93,1,93,93,93,0,93,1,93,1,20,30, |
2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,55,53,14,3,35, |
33,53,33,21,14,5,1,21,43,74,100,57,54,111,90,58,18,26,29,10,126,9,19,16,11, |
36,66,94,57,42,89,82,73,54,31,49,85,113,127,135,64,12,34,36,34,11,254,167, |
2,130,62,131,123,108,81,47,1,123,64,79,49,31,15,15,34,57,88,68,34,68,62,51, |
17,56,12,33,38,39,19,34,45,33,25,13,10,23,36,50,74,100,67,83,176,176,175, |
166,155,68,4,1,1,1,1,131,127,70,157,166,172,171,166,0,0,0,0,1,0,106,254,88, |
3,238,4,78,0,35,0,100,185,0,32,255,232,64,46,9,12,72,35,70,64,80,0,1,159, |
0,255,0,2,0,37,128,23,12,70,192,13,1,0,13,16,13,48,13,224,13,240,13,5,8,13, |
240,37,1,255,37,1,112,37,1,37,184,255,192,64,14,19,23,72,35,27,23,6,80,29, |
16,17,15,12,21,0,63,63,63,237,50,63,1,43,93,93,113,47,94,93,113,237,50,26, |
16,220,93,113,26,237,49,48,43,1,17,52,46,2,35,34,14,2,21,17,35,17,52,38,39, |
51,30,3,21,51,62,3,51,50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,22, |
14,170,9,14,10,5,3,26,62,82,106,70,90,130,84,39,254,88,4,86,79,106,65,27, |
45,85,125,81,253,141,3,83,68,121,42,21,48,49,47,20,47,76,53,29,44,92,145, |
100,251,135,0,0,0,0,3,0,106,255,236,4,9,5,203,0,15,0,26,0,37,0,194,64,108, |
153,19,169,19,2,150,24,166,24,2,138,2,1,133,5,1,138,14,1,133,10,1,124,36, |
140,36,2,115,29,131,29,2,85,29,101,29,2,124,18,140,18,2,74,18,90,18,106,18, |
3,115,25,131,25,2,69,25,85,25,101,25,3,6,13,22,13,2,6,10,1,9,5,1,9,2,1,7, |
33,0,71,64,15,21,31,21,127,21,143,21,239,21,255,21,6,21,64,45,48,72,21,39, |
128,32,22,71,32,8,1,8,184,255,192,183,29,35,72,8,48,39,1,39,184,255,192,64, |
19,30,35,72,223,39,1,22,80,32,32,16,27,80,11,0,16,80,3,22,0,63,237,63,237, |
18,57,47,237,1,93,43,113,47,43,93,237,50,26,16,220,43,113,26,237,51,49,48, |
0,94,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,16,2,35,34,46, |
1,2,53,16,18,51,50,30,1,18,1,50,62,2,55,33,30,3,19,34,14,2,7,33,46,3,4,9, |
240,228,108,171,118,62,233,232,121,175,112,54,254,42,62,100,73,42,3,253,221, |
3,44,71,94,66,62,99,72,42,3,2,35,3,40,69,97,2,221,254,131,254,140,92,186, |
1,27,192,1,117,1,121,93,188,254,231,252,216,52,128,216,164,164,215,129,52, |
4,217,51,126,212,161,161,212,126,51,0,0,0,1,0,137,0,0,1,141,4,58,0,13,1,13, |
64,210,13,8,70,207,5,223,5,2,0,5,32,5,208,5,3,9,5,5,14,15,95,15,111,15,2, |
32,15,1,224,15,240,15,2,111,15,127,15,143,15,3,0,15,16,15,32,15,3,205,207, |
15,223,15,239,15,3,96,15,1,127,15,207,15,2,64,15,80,15,2,175,15,223,15,239, |
15,3,96,15,112,15,2,15,15,31,15,2,154,255,15,1,208,15,224,15,2,63,15,1,159, |
15,175,15,2,112,15,1,223,15,1,144,15,1,63,15,79,15,2,0,15,1,106,159,15,223, |
15,239,15,3,96,15,112,15,2,15,15,1,239,15,255,15,2,128,15,208,15,2,63,15, |
1,96,15,1,15,15,31,15,2,55,207,15,255,15,2,144,15,160,15,176,15,3,31,15,47, |
15,63,15,3,176,15,192,15,208,15,3,15,15,31,15,111,15,3,144,15,160,15,224, |
15,3,31,15,63,15,2,0,15,1,7,6,15,0,21,0,63,63,1,94,93,93,93,113,113,114,114, |
114,94,93,93,113,113,113,114,114,114,94,93,93,93,93,113,113,114,114,114,94, |
93,93,93,113,113,114,114,94,93,93,93,113,113,17,18,57,47,94,93,113,237,50, |
49,48,51,46,3,53,17,51,17,20,30,2,23,199,15,24,15,8,180,11,21,30,18,16,53, |
64,70,33,3,78,252,169,32,64,60,52,19,0,0,0,1,0,138,0,0,4,3,4,58,0,11,0,158, |
64,114,148,9,164,9,2,102,9,118,9,134,9,3,172,0,1,139,0,155,0,2,105,0,121, |
0,2,86,10,150,10,166,10,3,151,10,167,10,2,84,10,1,70,7,134,7,2,1,10,247,8, |
1,8,10,9,16,9,9,0,11,16,0,11,160,11,2,0,11,16,11,32,11,64,11,160,11,224,11, |
6,7,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2, |
1,7,10,4,8,5,15,4,0,21,0,63,50,63,51,23,57,1,93,93,47,94,93,237,50,47,94, |
93,113,56,51,57,47,56,57,51,113,17,51,49,48,0,93,93,93,1,93,93,93,93,93,93, |
33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73, |
1,206,1,238,109,254,127,4,58,253,243,2,13,254,47,253,151,0,0,0,0,1,0,14,0, |
0,3,238,5,204,0,33,1,60,64,101,149,15,1,157,23,1,138,2,1,137,1,1,137,25,153, |
25,2,140,21,156,21,2,115,0,131,0,147,0,3,140,20,156,20,2,106,20,122,20,2, |
146,32,1,132,32,1,101,32,117,32,2,3,102,26,118,26,150,26,3,141,26,157,26, |
2,2,126,26,1,108,26,1,3,84,18,1,148,31,1,101,31,117,31,133,31,3,86,31,1,146, |
29,1,2,128,29,1,84,29,1,144,28,1,28,184,255,224,64,59,13,16,72,146,27,1,84, |
27,100,27,116,27,3,93,0,109,0,2,149,17,1,73,17,1,150,18,1,138,18,1,101,18, |
117,18,2,38,18,86,18,2,42,3,58,3,74,3,122,3,138,3,5,26,0,20,10,10,19,32,33, |
184,255,240,64,69,33,20,19,16,31,19,63,19,2,31,19,63,19,95,19,127,19,159, |
19,191,19,223,19,255,19,8,223,19,255,19,2,192,19,1,95,19,159,19,2,0,19,16, |
19,64,19,3,8,19,0,35,48,35,96,35,160,35,176,35,5,26,0,13,33,19,21,6,80,13, |
0,0,63,237,63,51,18,57,57,1,93,47,94,93,93,93,93,113,114,56,51,47,56,51,18, |
57,47,18,57,57,49,48,93,93,93,93,93,93,93,0,93,1,93,93,43,93,93,93,95,93, |
93,93,93,0,93,95,93,93,95,93,1,93,95,93,93,93,93,93,93,93,93,93,93,93,0,93, |
1,39,46,3,35,34,6,7,39,62,1,51,50,30,2,23,1,35,3,46,3,39,14,3,7,1,35,1,207, |
36,27,42,45,57,40,11,32,6,35,25,72,32,55,87,73,67,36,1,171,190,207,8,18,18, |
16,5,7,22,25,24,8,254,255,187,3,197,99,73,105,67,31,7,3,130,9,15,36,81,131, |
95,251,139,2,65,22,56,59,56,21,21,60,62,55,18,253,193,0,0,0,1,0,138,254,119, |
4,6,4,58,0,41,0,108,64,55,13,40,14,17,72,90,8,106,8,2,35,70,5,15,34,95,34, |
2,159,34,175,34,255,34,3,0,34,16,34,32,34,3,7,34,43,23,19,70,0,20,16,20,48, |
20,240,20,4,8,20,96,43,128,43,2,43,184,255,192,64,15,20,23,72,41,21,34,21, |
15,19,5,28,80,14,11,22,0,63,51,237,50,47,63,51,63,1,43,93,47,94,93,237,50, |
16,220,94,93,93,113,50,237,49,48,0,93,1,43,33,46,3,53,35,14,3,35,34,38,39, |
35,30,1,21,17,35,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,30,2,23,3,94, |
1,3,3,3,4,26,56,69,86,57,82,120,32,4,3,1,182,182,25,59,98,74,67,100,67,33, |
181,1,2,2,1,6,46,59,59,20,51,79,53,27,64,58,32,63,27,254,139,5,195,253,124, |
69,116,85,47,52,91,126,75,2,105,252,175,34,76,67,49,7,0,0,1,0,0,0,0,3,178, |
4,58,0,18,2,35,64,79,130,17,146,17,162,17,3,153,6,169,6,2,131,8,147,8,163, |
8,3,3,87,8,103,8,119,8,3,6,5,9,32,14,17,72,9,9,7,15,16,16,0,70,64,91,12,107, |
12,123,12,3,91,12,219,12,235,12,3,180,12,196,12,2,11,12,27,12,59,12,91,12, |
107,12,5,7,12,20,128,8,7,184,255,240,64,255,7,11,20,27,20,2,11,20,27,20,75, |
20,91,20,139,20,155,20,203,20,219,20,8,255,20,1,196,20,212,20,2,160,20,1, |
132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4,20,20,20,2,199,224,20,1,196, |
20,212,20,2,160,20,1,4,20,20,20,68,20,84,20,132,20,148,20,6,68,20,84,20,132, |
20,148,20,196,20,212,20,6,27,20,1,4,20,1,219,20,1,196,20,1,155,20,1,132,20, |
1,91,20,1,68,20,1,27,20,1,4,20,1,151,11,20,27,20,75,20,91,20,139,20,155,20, |
203,20,219,20,8,155,20,203,20,219,20,3,132,20,1,96,20,1,68,20,84,20,2,32, |
20,1,4,20,20,20,2,224,20,1,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20, |
1,4,20,20,20,68,20,84,20,4,103,4,20,20,20,68,20,84,20,132,20,148,20,196,20, |
212,20,8,219,20,1,196,20,1,155,20,1,132,20,1,91,20,1,68,20,1,27,20,1,4,20, |
1,219,20,1,196,20,1,11,20,27,20,75,20,91,20,139,20,155,20,64,93,6,55,75,20, |
91,20,139,20,155,20,203,20,219,20,6,63,20,1,32,20,1,4,20,20,20,2,224,20,1, |
196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4, |
20,20,20,2,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,2,80,20,1,47, |
20,1,0,20,16,20,2,7,15,7,15,9,6,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93, |
93,113,113,113,113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113, |
113,113,113,113,113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114, |
94,93,93,93,93,93,93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93, |
93,93,93,113,114,47,56,51,26,16,220,94,93,93,113,114,26,237,50,17,51,17,57, |
61,47,43,51,51,49,48,93,95,93,93,93,1,20,14,2,7,35,1,51,1,54,18,53,52,38, |
39,51,30,1,3,178,63,106,140,77,170,254,122,189,1,55,142,124,29,20,177,24, |
28,3,78,99,218,221,214,94,4,58,252,96,185,1,86,156,81,119,45,45,113,0,0,0, |
1,0,86,254,159,3,106,5,204,0,74,1,0,64,125,122,71,138,71,2,101,33,117,33, |
133,33,3,105,39,1,85,50,1,83,44,1,57,2,1,110,66,126,66,142,66,3,26,66,42, |
66,2,12,29,28,29,44,29,3,13,40,9,12,72,12,73,28,73,44,73,108,73,124,73,140, |
73,6,5,11,95,37,1,79,37,1,112,37,128,37,2,37,17,95,26,1,111,26,1,26,37,26, |
52,63,31,70,11,32,11,1,23,11,23,11,0,31,63,63,63,79,63,111,63,127,63,143, |
63,175,63,191,63,207,63,9,159,63,175,63,255,63,3,63,184,255,192,64,17,7,11, |
72,63,42,71,31,0,1,0,5,37,80,31,11,24,42,184,255,240,64,32,19,22,72,151,42, |
1,0,16,19,22,72,152,0,1,52,0,42,3,57,32,36,1,36,36,24,57,26,17,23,80,24,0, |
0,63,237,50,50,47,18,57,47,93,18,23,57,93,43,93,43,18,57,57,237,57,1,47,93, |
237,47,43,93,113,18,57,57,47,47,93,16,237,16,205,50,50,47,93,114,51,47,93, |
113,114,18,57,49,48,93,43,93,0,93,93,1,93,0,93,93,93,1,93,0,93,19,52,62,2, |
55,53,46,3,53,52,62,2,55,53,14,3,43,1,53,33,21,14,3,21,20,30,2,23,21,14,3, |
21,20,30,2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,86,51,110,175, |
125,68,118,87,51,50,79,97,47,12,68,80,76,18,74,2,122,77,144,112,68,60,99, |
130,69,100,175,131,76,43,74,100,57,54,114,94,61,18,26,29,10,126,9,19,16,11, |
39,70,97,57,42,89,82,73,54,31,1,98,76,147,124,90,19,2,5,39,68,96,62,64,93, |
64,40,10,8,1,2,3,2,131,125,9,34,59,90,67,63,81,49,24,6,131,13,54,89,127,84, |
64,79,49,31,15,15,34,57,88,68,34,68,62,51,17,56,12,33,38,39,19,34,45,33,25, |
13,10,23,36,50,74,100,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
79,255,236,5,43,4,58,0,48,0,115,64,35,53,12,117,12,133,12,3,3,40,7,17,72, |
3,40,7,17,72,46,80,32,96,32,2,46,32,35,70,64,111,5,1,80,5,1,5,184,255,192, |
64,38,8,11,72,5,50,128,15,50,47,50,2,13,7,72,79,25,95,25,111,25,207,25,4, |
25,14,20,34,7,20,80,31,15,14,21,40,80,0,22,0,63,237,63,63,237,50,50,1,47, |
50,50,93,237,50,93,26,16,220,43,93,113,26,237,50,50,93,47,49,48,43,0,43,1, |
93,5,34,46,2,53,17,33,21,20,14,2,7,35,62,3,61,1,34,14,2,7,53,62,3,51,33,21, |
35,17,20,30,2,51,50,62,2,55,21,14,1,4,102,59,82,52,24,254,110,16,27,36,19, |
188,19,39,32,20,39,79,69,53,12,12,43,51,54,23,4,37,234,13,24,35,22,7,23,25, |
23,8,31,69,20,28,59,94,66,2,212,72,131,251,228,195,74,76,197,226,247,125, |
80,7,10,13,7,139,6,11,8,4,131,253,83,44,56,32,13,2,2,3,1,129,8,12,0,2,0,132, |
254,87,4,59,4,79,0,26,0,47,0,129,64,64,122,25,1,101,20,117,20,2,106,19,122, |
19,2,106,45,122,45,2,75,8,91,8,107,8,3,125,30,1,107,30,1,74,30,90,30,2,0, |
71,64,160,27,1,27,49,128,38,15,70,223,16,1,0,16,16,16,48,16,3,8,16,48,49, |
1,49,184,255,192,64,21,30,35,72,223,49,1,96,49,128,49,2,32,80,22,16,15,27, |
43,80,5,22,0,63,237,63,63,237,1,93,93,43,113,47,94,93,113,237,50,26,16,220, |
93,26,237,49,48,93,93,93,0,93,1,93,93,0,93,1,93,1,20,14,2,35,34,46,2,39,35, |
30,1,21,17,35,17,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,17,30,3,51,50, |
62,2,4,59,63,115,161,98,62,98,80,66,28,4,2,2,180,60,116,169,110,103,181,134, |
78,193,44,83,116,72,69,100,64,30,28,72,80,87,44,67,100,67,33,2,4,118,197, |
142,79,20,37,53,33,30,61,32,254,87,3,238,119,193,136,74,79,150,219,131,104, |
166,115,61,53,101,146,93,254,195,35,55,37,20,58,107,152,0,0,1,0,86,254,159, |
3,156,4,78,0,57,0,209,64,38,137,55,1,139,54,1,143,53,1,123,53,1,106,50,1, |
96,2,1,52,15,68,15,84,15,3,82,10,98,10,130,10,3,51,10,67,10,2,3,184,255,224, |
64,52,12,17,72,3,24,11,14,72,26,31,106,31,122,31,138,31,4,139,30,1,10,37, |
26,37,2,7,71,31,40,1,40,52,17,79,28,1,143,28,159,28,223,28,3,28,64,24,27, |
72,96,28,1,28,184,255,192,183,7,12,72,28,48,59,1,59,184,255,192,64,19,30, |
35,72,223,59,1,12,33,40,16,19,22,72,136,40,152,40,2,7,184,255,240,64,19,19, |
22,72,135,7,151,7,2,33,7,40,3,22,53,0,80,47,16,22,0,47,63,237,51,18,23,57, |
93,43,93,43,17,51,1,93,43,113,47,43,93,43,93,113,205,50,47,93,237,49,48,93, |
93,0,93,43,1,43,0,93,93,93,1,93,0,93,1,93,93,0,93,93,1,34,14,4,21,20,30,2, |
23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,51,50,30,2,23, |
7,46,3,2,70,54,88,67,49,32,15,32,76,124,92,53,114,95,61,18,26,29,10,126,9, |
19,16,11,35,68,97,63,66,113,94,72,50,26,20,46,75,110,148,97,68,99,73,54,22, |
116,18,42,49,57,3,193,49,80,104,108,106,42,68,96,72,57,30,17,37,59,89,68, |
34,68,62,51,17,56,12,33,38,39,19,30,44,36,31,17,18,40,51,68,93,122,81,47, |
130,140,136,108,66,21,34,44,23,119,19,36,28,17,0,2,0,86,255,236,4,209,4,58, |
0,28,0,47,0,132,64,94,133,12,1,122,13,138,13,2,131,46,1,101,46,117,46,2,100, |
42,116,42,132,42,3,124,33,140,33,2,90,33,106,33,2,143,38,1,108,38,124,38, |
2,74,38,90,38,2,15,17,31,17,111,17,127,17,4,7,17,0,71,64,15,29,143,29,191, |
29,3,0,29,32,29,64,29,3,29,49,128,40,71,31,10,143,10,2,10,23,35,80,15,15, |
43,80,5,22,0,63,237,63,237,50,1,47,93,237,26,16,220,93,113,26,237,196,94, |
93,49,48,0,93,93,93,1,93,93,93,0,93,93,93,1,93,1,20,14,2,35,34,46,2,53,52, |
62,2,51,33,21,35,34,46,2,39,21,30,3,7,52,46,2,39,35,34,14,2,21,20,22,51,50, |
62,2,4,48,61,123,183,123,123,186,124,63,86,153,213,126,2,57,165,9,35,43,44, |
17,28,55,43,26,189,20,34,45,25,89,83,143,107,61,151,147,78,117,76,38,1,235, |
112,188,135,76,74,139,202,129,144,210,138,66,131,1,2,2,1,4,42,99,115,131, |
78,74,132,116,99,42,50,105,160,110,207,206,52,97,139,0,1,0,29,255,236,3,24, |
4,58,0,35,0,99,64,50,35,13,131,13,2,31,32,12,17,72,13,31,29,31,45,31,3,26, |
13,26,127,5,143,5,2,5,15,70,0,34,32,34,2,34,34,36,37,79,37,1,208,37,1,159, |
37,1,16,37,1,37,184,255,192,64,12,14,17,72,20,80,29,22,14,35,80,11,15,0,63, |
237,50,63,237,1,43,93,93,93,113,17,18,57,47,93,253,204,93,51,51,47,49,48, |
0,93,43,1,93,1,34,14,2,7,53,62,3,51,33,21,33,17,20,30,2,51,50,62,2,55,21, |
14,1,35,34,46,2,53,17,1,25,39,79,69,53,12,12,43,51,54,23,2,68,254,208,13, |
24,35,22,7,23,25,23,8,31,69,43,59,82,52,24,3,183,7,10,13,7,139,6,11,8,4,131, |
253,83,44,56,32,13,2,2,3,1,129,8,12,28,59,94,66,2,212,0,0,0,1,0,133,255,236, |
3,254,4,58,0,31,0,113,64,62,134,3,1,133,15,149,15,2,106,18,122,18,2,86,28, |
1,25,8,41,8,2,27,0,71,64,15,21,1,47,21,159,21,2,160,21,1,21,33,128,13,70, |
0,10,16,10,48,10,240,10,4,8,10,240,33,1,255,33,1,112,33,1,33,184,255,192, |
64,13,20,23,72,31,33,1,26,11,15,16,80,5,22,0,63,237,63,51,1,93,43,93,93,113, |
47,94,93,237,26,16,220,93,113,114,26,237,50,49,48,93,93,93,93,93,1,20,14, |
2,35,34,46,2,53,17,51,17,20,22,51,50,62,2,53,52,46,2,39,51,30,3,3,254,53, |
113,176,123,109,160,104,51,181,117,134,73,104,65,30,20,33,40,21,188,18,40, |
32,21,2,59,137,218,154,82,50,107,166,116,2,151,253,99,146,148,50,108,170, |
120,68,147,139,120,41,40,113,134,149,0,2,0,85,254,87,4,218,4,82,0,35,0,45, |
0,130,64,21,101,34,1,101,33,117,33,133,33,3,74,21,90,21,2,69,21,85,21,2,45, |
184,255,192,179,11,14,72,25,184,255,224,64,54,11,14,72,11,29,27,29,2,64,19, |
80,19,2,19,19,24,71,13,7,36,71,224,0,1,0,43,6,72,27,0,7,64,7,2,7,64,47,1, |
19,80,18,18,39,80,31,16,43,27,80,5,8,22,6,27,0,63,63,51,237,50,63,237,51, |
47,237,1,113,47,93,51,253,50,220,113,237,16,220,237,50,47,93,49,48,93,0,43, |
43,1,93,0,93,1,93,93,1,20,14,2,7,17,35,17,46,3,53,52,62,2,55,23,14,3,21,20, |
22,23,17,52,54,51,50,30,2,7,52,38,35,34,6,21,17,62,1,4,218,74,132,184,110, |
170,114,181,125,67,49,103,159,109,21,69,96,60,27,147,151,154,158,84,133,92, |
49,189,87,80,68,76,162,149,2,53,151,215,140,71,6,254,105,1,151,5,72,138,207, |
141,102,188,150,103,18,136,15,77,114,143,80,213,201,8,2,68,193,212,76,141, |
199,121,193,211,129,140,253,185,7,218,0,0,0,1,0,21,254,88,4,27,4,80,0,27, |
1,26,64,51,169,25,1,153,3,1,138,6,154,6,2,174,23,1,123,23,139,23,155,23,3, |
84,21,1,173,27,1,140,27,156,27,2,123,27,1,90,27,106,27,2,41,27,57,27,2,26, |
16,9,17,72,2,184,255,240,64,99,9,17,72,162,1,1,131,1,147,1,2,116,1,1,69,1, |
85,1,101,1,3,38,1,54,1,2,166,25,1,153,25,1,39,25,55,25,71,25,3,3,101,19,117, |
19,2,86,19,1,39,19,55,19,2,25,22,0,3,4,2,26,23,24,24,27,26,16,27,26,59,26, |
91,26,123,26,155,26,187,26,219,26,7,219,26,251,26,2,4,26,20,26,68,26,3,7, |
26,13,13,1,2,184,255,240,183,2,36,29,1,11,29,1,22,184,255,208,64,41,14,17, |
72,70,22,1,53,22,1,139,0,1,125,0,1,2,75,0,91,0,107,0,3,63,0,1,0,25,3,22,4, |
1,23,15,9,80,16,16,27,1,27,0,63,51,63,237,63,18,23,57,93,93,95,93,93,93,93, |
43,1,93,93,47,56,51,51,47,47,94,93,93,113,56,51,51,47,51,17,18,23,57,49,48, |
93,93,93,95,93,93,93,93,93,93,93,93,43,43,93,93,93,93,93,93,93,93,93,93,0, |
93,37,1,35,1,3,46,3,35,34,6,7,39,62,1,51,50,30,2,23,19,1,51,9,1,35,2,30,254, |
179,188,1,184,170,27,44,40,42,25,11,32,7,34,24,62,32,48,70,60,59,36,142,1, |
8,187,254,144,1,150,190,239,253,105,3,57,1,87,54,82,55,28,7,3,131,9,11,27, |
62,102,75,254,217,2,27,253,71,252,215,0,0,1,0,135,254,87,5,44,5,60,0,31,0, |
128,64,90,121,18,1,18,16,7,10,72,121,19,137,19,153,19,3,121,11,1,11,16,7, |
10,72,121,10,137,10,153,10,3,24,70,21,15,5,70,8,0,14,72,29,0,15,16,15,160, |
15,208,15,4,8,15,128,33,176,33,224,33,3,111,33,1,32,33,1,255,33,1,80,33,128, |
33,144,33,192,33,4,30,30,6,22,15,0,29,80,13,16,22,14,27,0,63,63,51,237,50, |
63,51,51,47,1,93,93,113,113,113,47,94,93,51,253,50,220,237,16,220,237,49, |
48,0,93,43,93,93,43,93,37,62,3,53,17,51,17,20,14,2,7,17,35,17,46,3,53,17, |
51,17,20,30,2,23,17,51,3,46,87,124,80,37,182,59,124,193,134,170,134,192,124, |
59,181,38,79,124,87,170,119,1,31,73,121,91,2,134,253,124,122,172,110,53,1, |
254,107,1,149,1,53,110,172,122,2,132,253,122,90,121,73,32,1,4,197,0,0,0,0, |
1,0,83,255,236,5,235,4,79,0,63,0,176,64,83,153,33,169,33,2,153,26,169,26, |
2,119,16,1,122,58,138,58,2,10,37,26,37,42,37,154,37,170,37,5,10,22,26,22, |
42,22,154,22,170,22,5,29,0,73,61,61,40,8,46,13,46,13,51,19,71,64,128,8,176, |
8,2,15,8,1,7,8,65,128,51,71,63,40,1,40,0,65,1,48,65,1,240,65,1,65,184,255, |
192,64,32,30,35,72,175,65,223,65,2,0,65,32,65,64,65,3,30,35,62,62,14,3,56, |
80,24,35,22,46,13,80,45,14,16,0,63,51,237,50,63,51,237,50,17,57,47,18,57, |
1,93,93,43,93,113,114,47,93,237,26,16,220,94,93,93,26,237,18,57,57,47,47, |
17,18,57,47,237,57,49,48,0,93,93,1,93,93,0,93,93,1,20,22,51,50,62,2,53,52, |
46,2,39,55,30,3,21,20,14,2,35,34,46,2,39,35,14,3,35,34,46,2,53,52,62,2,55, |
23,14,3,21,20,30,2,51,50,62,2,61,1,51,3,115,114,102,65,87,53,22,29,61,97, |
67,23,109,159,103,49,53,101,148,95,68,104,77,52,16,4,16,52,77,105,67,95,148, |
101,53,49,103,159,109,23,68,96,62,28,22,52,86,65,51,82,57,30,166,1,193,157, |
173,56,102,145,90,82,150,121,84,15,139,18,112,161,194,101,128,200,137,72, |
36,68,99,64,64,99,68,36,72,137,200,128,101,194,161,112,18,139,15,84,121,150, |
82,90,145,102,56,45,84,123,78,252,0,0,0,255,255,255,205,0,0,1,250,5,123,18, |
38,1,130,0,0,17,6,0,105,160,0,0,25,182,2,1,14,17,38,2,1,184,255,217,180,18, |
16,5,13,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,254,5,123, |
18,38,1,142,0,0,17,7,0,105,0,242,0,0,0,25,182,2,1,32,17,38,2,1,184,255,244, |
180,36,34,10,0,37,1,43,53,53,0,43,53,53,0,255,255,0,86,255,236,4,29,6,7,18, |
38,0,82,0,0,17,7,1,80,1,41,0,0,0,19,64,11,2,35,17,38,2,70,35,38,8,0,37,1, |
43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,254,6,7,18,38,1,142,0,0,17,7, |
1,80,0,252,0,0,0,19,64,11,1,32,17,38,1,17,32,35,10,0,37,1,43,53,0,43,53,0, |
0,0,255,255,0,83,255,236,5,235,6,7,18,38,1,146,0,0,17,7,1,80,1,255,0,0,0, |
19,64,11,1,64,17,38,1,55,64,67,40,19,37,1,43,53,0,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,178,16,38,0,40,0,0,17,7,2,152,1,121,0,0,0,153,185,0,21,255,192, |
179,233,233,72,21,184,255,192,179,230,230,72,21,184,255,192,179,227,227,72, |
21,184,255,192,179,224,224,72,21,184,255,192,179,221,221,72,21,184,255,192, |
179,218,218,72,21,184,255,192,179,215,215,72,21,184,255,192,179,212,212,72, |
21,184,255,192,179,209,209,72,21,184,255,192,179,206,206,72,21,184,255,192, |
179,203,203,72,21,184,255,192,179,200,200,72,21,184,255,192,179,197,197,72, |
21,184,255,192,64,10,11,11,72,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10, |
37,1,43,53,53,0,43,53,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0, |
1,0,46,255,236,6,79,5,129,0,45,0,133,64,13,155,31,171,31,2,101,37,117,37, |
133,37,3,2,184,255,224,64,71,13,17,72,18,16,12,15,72,42,13,58,13,2,36,7,52, |
7,2,20,20,10,42,1,39,90,45,175,40,1,0,40,1,40,10,90,0,29,16,29,176,29,224, |
29,4,7,29,0,42,95,43,38,33,95,1,6,6,40,43,3,40,18,26,95,15,63,21,1,21,21, |
15,19,0,63,51,47,93,16,237,63,63,18,57,47,51,237,50,16,237,50,1,47,94,93, |
237,47,93,93,204,253,50,204,18,57,47,49,48,0,93,93,43,43,93,93,1,17,62,3, |
51,50,22,29,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,61,1,52,38,35,34,14, |
2,7,17,35,17,33,53,33,21,2,208,33,109,127,130,53,226,217,41,86,133,92,53, |
88,75,64,29,111,18,41,48,56,33,84,80,129,144,51,123,120,105,33,190,254,28, |
4,134,4,229,254,160,7,20,19,13,187,188,214,93,145,100,53,17,32,46,28,123, |
16,33,26,17,101,111,219,119,122,10,15,17,8,253,12,4,229,156,156,0,255,255, |
0,168,0,1,4,47,6,240,16,38,1,93,0,0,17,7,2,149,1,113,0,0,0,19,64,11,1,6,5, |
38,1,33,6,9,4,0,37,1,43,53,0,43,53,0,0,0,0,1,0,104,255,236,5,121,5,150,0, |
42,0,218,64,156,156,17,172,17,2,156,15,172,15,2,156,39,172,39,2,138,39,1, |
156,41,172,41,2,138,41,1,137,31,1,117,11,1,117,10,165,10,2,166,26,1,73,26, |
137,26,2,70,32,134,32,2,37,10,53,10,2,42,3,58,3,2,3,68,44,1,7,7,19,5,8,91, |
116,29,132,29,2,203,29,219,29,2,68,29,1,43,29,1,29,37,235,19,1,100,19,116, |
19,164,19,212,19,4,64,19,1,2,0,19,48,19,2,7,19,8,95,127,5,175,5,2,5,5,13, |
34,79,38,1,38,38,0,95,34,4,13,95,24,16,18,32,18,2,48,18,64,18,112,18,128, |
18,192,18,208,18,6,18,18,24,19,0,63,51,47,93,113,16,237,63,237,51,47,93,17, |
18,57,47,113,237,1,47,94,93,95,93,93,113,51,47,93,93,93,113,237,50,17,57, |
47,93,49,48,0,95,93,93,93,93,93,1,93,0,93,1,93,93,93,93,93,93,93,1,34,14, |
2,7,33,21,33,30,3,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,111,173,124,73,10,2,142,253,114,9,77,128,176,109,90,141, |
108,79,27,156,40,108,148,191,123,171,254,255,173,86,91,175,1,0,164,225,1, |
46,71,181,20,68,102,137,4,250,68,126,178,110,154,112,185,132,72,50,82,105, |
55,77,79,136,100,57,109,195,1,12,159,165,1,10,187,101,176,173,60,50,91,70, |
42,0,0,255,255,0,93,255,236,4,248,5,150,18,6,0,54,0,0,255,255,0,189,0,0,1, |
124,5,129,18,6,0,44,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2, |
152,218,0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0, |
255,255,0,32,255,236,3,104,5,129,18,6,0,45,0,0,0,2,0,18,255,240,8,11,5,129, |
0,38,0,47,0,215,64,98,57,29,1,166,8,1,167,11,1,162,10,1,133,10,149,10,2,58, |
10,1,154,15,170,15,2,141,13,157,13,173,13,3,121,13,1,116,47,132,47,148,47, |
3,123,40,139,40,155,40,3,101,11,1,141,14,157,14,173,14,3,14,32,10,14,72,43, |
30,123,30,139,30,155,30,4,42,31,122,31,2,0,90,48,39,1,0,39,16,39,2,7,39,20, |
13,36,13,52,13,3,13,184,255,248,64,14,22,25,72,73,8,1,20,8,36,8,52,8,3,8, |
184,255,248,64,39,22,25,72,9,31,73,31,2,8,13,31,3,175,20,191,20,2,20,33,44, |
90,6,43,95,33,33,6,8,95,31,3,23,95,16,19,44,95,6,18,0,63,237,63,237,63,237, |
18,57,47,237,1,47,237,50,47,93,23,51,113,43,113,113,43,113,47,94,93,113,237, |
49,48,93,93,0,43,93,1,93,0,93,93,93,93,93,1,93,93,93,93,93,93,1,20,14,2,35, |
33,17,33,3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,33,50,30,2, |
7,52,38,35,33,17,33,50,54,8,11,61,121,182,121,253,183,254,96,49,22,43,49, |
60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,3,2,1,126,125,186, |
124,62,192,164,164,254,153,1,111,164,156,1,157,87,150,112,64,4,225,254,144, |
172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161,1,254,253,172, |
58,105,147,92,121,129,254,2,136,0,0,0,2,0,168,0,0,7,171,5,129,0,22,0,31,0, |
110,64,25,116,31,132,31,148,31,3,123,24,139,24,155,24,3,38,20,54,20,2,0,90, |
176,23,1,23,184,255,192,64,43,7,11,72,23,13,9,90,0,10,16,10,64,10,3,7,10, |
17,28,90,14,0,6,1,8,6,27,95,17,17,8,95,13,13,10,15,11,3,10,18,28,95,6,18, |
0,63,237,63,63,51,18,57,47,237,51,47,237,1,47,94,93,51,237,50,47,94,93,237, |
50,47,43,93,237,49,48,0,93,93,93,1,20,14,2,35,33,17,33,17,35,17,51,17,33, |
17,51,17,33,50,30,2,7,52,38,35,33,17,33,50,54,7,171,61,121,182,121,253,223, |
253,194,191,191,2,62,191,1,86,125,186,124,62,192,164,164,254,193,1,71,164, |
156,1,157,87,150,112,64,2,141,253,115,5,129,253,172,2,84,253,172,58,105,147, |
92,121,129,254,2,136,0,0,0,0,1,0,46,0,0,6,47,5,129,0,27,0,131,64,13,155,2, |
171,2,2,101,8,117,8,133,8,3,19,184,255,224,64,76,13,17,72,37,24,53,24,69, |
24,3,18,13,10,90,16,175,11,1,0,11,48,11,2,11,27,90,0,0,48,0,192,0,208,0,4, |
7,0,176,29,192,29,208,29,3,176,29,240,29,2,255,29,1,16,29,112,29,160,29,176, |
29,4,9,4,95,18,23,23,0,17,13,95,14,3,11,0,18,0,63,50,63,237,50,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,237,47,93,93,204,253,204,51,49,48,0,93,43, |
93,93,33,17,52,38,35,34,14,2,7,17,35,17,33,53,33,21,33,17,62,3,51,50,22,21, |
17,5,113,128,133,53,116,110,98,35,190,254,28,4,179,253,239,36,98,112,118, |
56,229,214,2,63,122,109,10,15,18,7,253,12,4,229,156,156,254,160,8,20,18,13, |
187,178,253,173,0,0,0,255,255,0,168,0,0,4,157,6,240,18,38,1,176,0,0,17,7, |
2,149,1,172,0,0,0,19,64,11,1,23,5,38,1,37,23,26,0,13,37,1,43,53,0,43,53,0, |
0,0,255,255,0,55,255,236,5,31,7,58,18,38,1,185,0,0,17,7,2,145,1,94,1,74,0, |
19,64,11,1,26,5,38,1,7,31,39,21,25,37,1,43,53,0,43,53,0,0,0,0,1,0,168,254, |
104,5,24,5,129,0,11,0,94,64,64,11,92,0,0,2,9,90,127,6,1,0,6,48,6,64,6,3,143, |
6,159,6,207,6,3,0,6,64,6,2,6,5,90,0,2,16,2,64,2,3,7,2,16,13,1,32,13,128,13, |
224,13,3,15,13,1,7,7,3,3,10,5,95,2,18,0,0,47,63,237,51,63,51,47,1,93,93,113, |
47,94,93,237,47,93,93,113,113,237,18,57,47,237,49,48,1,17,33,17,51,17,33, |
17,51,17,33,17,2,134,254,34,191,2,247,186,254,34,254,104,1,152,5,129,251, |
31,4,225,250,127,254,104,255,255,0,4,0,0,5,82,5,129,18,6,0,36,0,0,0,2,0,168, |
0,0,4,214,5,129,0,16,0,25,0,142,64,70,116,25,132,25,148,25,3,123,18,139,18, |
155,18,3,153,14,1,38,14,1,9,9,0,90,223,17,1,80,17,128,17,2,31,17,1,255,17, |
1,192,17,1,159,17,1,0,17,16,17,32,17,64,17,4,17,11,22,90,0,6,16,6,64,6,3, |
7,6,48,27,1,27,184,255,192,64,27,30,35,72,223,27,1,21,95,64,11,1,160,11,208, |
11,2,11,11,6,10,95,7,3,22,95,6,18,0,63,237,63,237,18,57,47,93,113,237,1,93, |
43,113,47,94,93,237,50,47,93,93,93,93,113,113,113,237,50,47,49,48,0,93,93, |
93,93,1,20,14,2,35,33,17,33,21,33,17,33,50,30,2,7,52,38,35,33,17,33,50,54, |
4,214,61,121,182,121,253,183,3,158,253,33,1,126,125,186,124,62,192,164,164, |
254,153,1,111,164,156,1,157,87,150,112,64,5,129,156,254,72,58,105,147,92, |
121,129,254,2,136,0,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,255,255, |
0,168,0,1,4,47,5,130,16,6,1,93,0,0,0,2,0,15,254,104,5,69,5,129,0,16,0,25, |
0,194,64,95,150,10,1,150,20,1,150,15,1,144,19,1,134,19,1,115,22,131,22,2, |
3,147,24,1,2,128,24,1,114,24,1,102,24,1,85,11,101,11,2,90,14,106,14,2,97, |
23,145,23,2,83,23,1,53,23,69,23,2,2,92,3,3,0,90,191,17,207,17,2,160,17,1, |
31,17,95,17,127,17,143,17,159,17,5,0,17,1,8,17,20,25,36,25,52,25,3,25,184, |
255,248,64,11,22,25,72,20,19,36,19,52,19,3,19,184,255,248,64,28,22,25,72, |
9,15,19,25,4,6,92,7,15,27,47,27,2,19,95,15,3,8,0,25,95,5,18,7,2,0,47,51,63, |
237,50,50,63,237,1,93,47,237,23,51,43,113,43,113,47,94,93,93,93,93,237,50, |
47,237,49,48,93,93,93,93,93,93,93,93,95,93,95,93,93,93,93,93,93,37,51,17, |
35,17,33,17,35,17,51,62,3,55,19,33,3,17,33,3,14,3,7,4,150,175,180,252,50, |
180,144,41,66,55,44,18,67,2,212,186,254,137,49,18,40,46,54,32,160,253,200, |
1,152,254,104,2,56,51,138,181,228,141,1,254,251,31,4,65,254,144,134,221,178, |
137,51,255,255,0,168,0,0,4,254,5,129,18,6,0,40,0,0,0,1,0,28,0,0,7,71,5,129, |
0,41,1,72,64,41,133,8,1,117,31,133,31,2,117,14,1,99,24,1,108,25,124,25,140, |
25,3,108,26,124,26,140,26,3,101,13,117,13,133,13,3,33,40,14,17,72,6,184,255, |
216,64,35,14,17,72,58,24,74,24,2,41,24,1,53,15,69,15,117,15,3,3,39,15,1,27, |
48,14,17,72,40,27,56,27,72,27,3,12,184,255,208,64,11,14,17,72,39,12,55,12, |
71,12,3,31,184,255,224,179,14,17,72,31,184,255,240,64,73,10,13,72,8,32,14, |
17,72,8,16,10,13,72,34,31,27,31,28,28,32,21,40,90,41,5,8,12,8,41,11,11,7, |
18,52,41,1,116,41,196,41,228,41,3,41,33,32,16,32,64,29,32,72,228,32,1,155, |
32,171,32,2,68,32,116,32,2,11,32,43,32,2,32,6,7,184,255,240,64,51,171,7,187, |
7,2,7,68,43,116,43,132,43,228,43,4,47,43,1,2,15,43,1,31,8,34,5,8,5,39,0,96, |
21,127,18,175,18,2,47,18,1,18,18,6,27,19,11,3,41,33,6,18,0,63,51,51,63,51, |
51,18,57,47,93,113,51,237,50,57,57,17,51,17,51,1,93,95,93,93,47,93,56,51, |
47,93,93,93,93,43,56,51,47,93,113,51,18,57,47,18,57,51,17,51,16,237,50,17, |
57,47,57,51,17,51,49,48,43,43,43,43,93,43,93,43,93,95,93,93,93,43,43,93,93, |
93,0,93,1,93,0,93,93,1,34,46,2,39,1,35,1,38,39,1,51,19,30,3,51,17,51,17,50, |
62,2,55,19,51,1,6,7,1,35,1,14,3,35,17,35,3,82,17,45,48,46,17,254,85,222,1, |
253,48,131,254,229,200,205,66,90,76,81,57,191,57,81,76,90,66,205,200,254, |
229,131,48,1,253,222,254,85,17,46,48,45,17,191,2,133,6,11,13,8,253,85,3,7, |
35,189,1,154,254,207,99,123,68,24,2,107,253,149,24,68,123,99,1,49,254,102, |
189,35,252,249,2,171,8,13,11,6,253,123,0,1,0,67,255,236,4,112,5,149,0,60, |
1,7,64,51,138,33,1,134,7,1,124,28,140,28,2,3,112,21,1,112,20,1,2,96,20,1, |
101,8,117,8,133,8,3,132,34,1,101,34,117,34,2,124,13,1,90,13,106,13,2,59,23, |
75,23,2,33,184,255,232,64,122,11,16,72,5,43,1,3,51,20,25,90,46,64,25,37,72, |
46,46,56,90,16,139,36,155,36,171,36,3,127,20,1,2,95,20,111,20,2,36,20,36, |
20,5,112,16,1,79,16,111,16,2,255,16,1,160,16,1,127,16,1,0,16,16,16,48,16, |
3,16,175,5,191,5,2,5,64,32,45,72,5,64,13,16,72,5,51,20,95,127,21,175,21,2, |
21,21,11,41,35,64,13,16,72,35,35,30,95,41,4,11,95,0,32,6,48,6,112,6,128,6, |
4,208,6,1,6,184,255,192,182,13,17,72,6,6,0,19,0,63,50,47,43,93,113,16,237, |
63,237,51,47,43,17,18,57,47,113,237,57,1,47,43,43,93,47,93,93,93,93,113,113, |
18,57,57,47,47,93,95,93,113,16,237,50,47,43,237,18,57,49,48,0,95,93,1,43, |
93,93,93,93,93,93,93,95,93,93,95,93,93,0,93,5,34,46,2,39,55,30,3,51,50,62, |
2,53,52,38,43,1,53,51,50,54,53,52,46,2,35,34,14,2,7,39,62,3,51,50,30,2,21, |
20,14,2,7,30,3,21,20,14,2,2,109,118,176,130,94,36,165,24,66,91,121,80,77, |
122,85,45,192,202,71,71,181,173,39,72,104,65,77,114,83,56,19,178,33,96,132, |
168,105,108,172,120,64,40,73,104,63,67,117,87,51,69,132,192,20,50,91,128, |
79,77,55,98,75,44,37,69,100,64,133,118,148,119,123,55,86,59,30,40,68,90,49, |
61,82,127,87,45,53,96,136,83,68,107,80,55,15,10,50,82,115,73,95,156,113,62, |
0,1,0,168,0,0,5,24,5,129,0,19,0,123,64,17,172,18,1,138,18,154,18,2,147,8, |
163,8,2,133,8,1,19,184,255,232,64,65,9,17,72,9,24,9,17,72,11,92,41,9,1,9, |
64,12,80,12,144,12,3,224,12,1,143,12,159,12,175,12,3,0,12,48,12,2,12,166, |
19,1,19,2,92,0,1,16,1,2,7,1,15,21,47,21,2,9,18,9,1,3,12,12,8,0,18,0,63,50, |
50,47,63,51,51,47,1,93,47,94,93,237,50,113,47,93,93,93,113,51,113,237,49, |
48,43,43,0,93,93,93,93,51,17,51,17,20,6,7,6,7,1,51,17,35,17,52,54,55,54,55, |
1,168,172,2,2,2,2,2,238,222,170,1,2,1,2,253,26,5,129,252,100,51,98,39,46, |
40,4,174,250,127,3,168,39,89,38,44,44,251,90,0,255,255,0,168,0,0,5,24,7,58, |
18,38,1,174,0,0,17,7,2,145,1,146,1,74,0,19,64,11,1,20,5,38,1,6,25,33,0,10, |
37,1,43,53,0,43,53,0,0,0,0,1,0,168,0,0,4,157,5,129,0,22,0,151,64,104,84,12, |
116,12,132,12,3,84,15,1,139,8,1,122,8,1,89,8,105,8,2,140,14,1,14,24,13,16, |
72,58,5,1,100,12,116,12,132,12,3,80,12,1,53,12,69,12,2,15,12,8,12,9,16,32, |
9,96,9,128,9,3,9,9,13,2,21,90,32,22,1,22,14,13,16,15,13,127,13,207,13,239, |
13,4,47,13,1,13,47,24,1,15,12,20,96,47,2,1,2,2,22,13,18,8,0,3,0,63,50,63, |
51,57,47,93,237,50,57,1,93,47,93,113,56,51,47,93,237,50,17,57,47,93,56,57, |
51,17,51,49,48,93,93,93,93,43,93,93,93,93,93,0,93,19,51,17,50,62,2,55,19, |
51,1,6,7,1,35,1,14,3,35,17,35,168,191,57,81,76,90,66,205,200,254,229,131, |
48,1,253,222,254,85,17,46,48,45,17,191,5,129,253,149,24,68,123,99,1,49,254, |
102,189,35,252,249,2,171,8,13,11,6,253,123,0,0,0,0,1,0,18,255,240,4,153,5, |
129,0,27,0,176,64,35,150,1,1,147,3,1,117,3,133,3,2,85,4,149,4,2,145,7,1,115, |
7,131,7,2,85,7,101,7,2,129,6,145,6,2,6,184,255,216,64,46,12,15,72,37,6,53, |
6,2,26,2,1,26,23,106,23,122,23,138,23,4,26,90,32,27,64,27,2,224,27,1,95,27, |
1,0,27,1,8,27,20,6,36,6,52,6,3,6,184,255,248,64,14,22,25,72,73,1,1,20,1,36, |
1,52,1,3,1,184,255,248,64,26,22,25,72,9,24,73,24,2,1,6,24,3,12,128,29,1,27, |
18,1,95,24,3,16,95,9,19,0,63,237,63,237,63,1,93,47,23,51,113,43,113,113,43, |
113,47,94,93,93,93,113,237,49,48,93,93,93,43,93,93,93,93,93,93,93,93,1,33, |
3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,35,3,223,254,94,49, |
22,43,49,60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,2,255,186, |
4,225,254,144,172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161, |
1,254,250,127,255,255,0,168,0,0,6,2,5,129,18,6,0,48,0,0,255,255,0,168,0,0, |
5,32,5,129,18,6,0,43,0,0,255,255,0,97,255,236,5,215,5,150,18,6,0,50,0,0,255, |
255,0,166,0,0,5,30,5,129,17,6,1,106,254,0,0,88,185,0,9,255,192,179,27,27, |
72,9,184,255,192,179,21,21,72,9,184,255,192,179,20,20,72,9,184,255,192,179, |
19,19,72,9,184,255,192,179,17,17,72,9,184,255,192,179,16,16,72,9,184,255, |
192,179,15,15,72,9,184,255,192,179,14,14,72,9,184,255,192,183,11,11,72,9, |
64,9,9,72,43,43,43,43,43,43,43,43,43,43,0,0,255,255,0,168,0,0,4,234,5,129, |
18,6,0,51,0,0,255,255,0,104,255,236,5,121,5,150,18,6,0,38,0,0,255,255,0,46, |
0,0,4,180,5,129,18,6,0,55,0,0,0,1,0,55,255,236,5,31,5,129,0,25,0,181,64,111, |
217,24,1,139,24,1,90,24,106,24,122,24,3,41,24,1,85,23,101,23,133,23,3,70, |
23,1,214,22,1,131,22,1,100,22,116,22,2,86,22,1,121,18,1,128,2,1,5,2,21,2, |
2,132,1,1,131,0,1,84,0,100,0,2,70,0,1,198,23,214,23,2,113,23,129,23,2,86, |
23,102,23,2,143,3,1,58,3,74,3,2,20,23,24,32,25,144,25,2,25,16,25,22,10,63, |
21,79,21,111,21,127,21,4,21,184,255,240,64,14,21,23,20,21,5,24,24,21,3,11, |
14,95,5,19,0,63,237,50,63,51,47,17,18,57,57,1,47,56,93,50,50,47,56,93,51, |
57,57,49,48,0,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,1,14,3,35,34,46,2,39,55,30,1,51,50,62,2,63,1,1,51,9,1,51,2,222,47, |
81,90,109,75,32,66,64,58,23,81,35,83,48,37,58,53,57,38,49,253,195,218,1,193, |
1,128,205,1,62,88,128,82,40,10,18,26,16,144,22,37,21,52,90,68,89,3,186,252, |
240,3,16,0,0,3,0,118,255,245,5,159,5,139,0,29,0,40,0,51,0,143,64,92,70,28, |
86,28,102,28,3,73,17,89,17,105,17,3,59,51,1,59,31,1,53,43,1,38,43,1,53,39, |
1,38,39,1,41,90,15,8,30,90,0,35,24,7,90,46,21,224,8,1,79,8,1,32,8,1,8,32, |
53,1,112,53,208,53,224,53,3,79,53,1,16,53,1,36,47,96,10,6,10,34,49,96,20, |
24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57,47,47,17,51,16,237,50,17,51, |
16,237,50,1,93,93,93,113,47,93,93,93,51,51,253,50,50,220,237,16,220,237,49, |
48,0,93,93,93,93,93,93,1,93,93,1,20,14,2,43,1,21,35,53,35,34,46,2,53,52,62, |
2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17,51,50,62,2,37,20,30,2,59,1,17, |
35,34,6,5,159,64,131,197,133,40,191,40,133,197,131,64,67,133,201,135,29,191, |
28,135,202,133,67,192,185,183,5,13,92,136,89,43,252,87,43,89,136,92,13,9, |
182,182,2,224,105,188,143,84,227,227,84,143,188,105,113,185,131,72,182,182, |
72,131,185,117,187,180,253,22,53,98,140,88,88,140,98,53,2,234,180,0,255,255, |
0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,168,254,104,5,197,5,129,0,11,0,74, |
64,47,1,92,2,2,11,90,0,8,1,175,8,1,0,8,64,8,112,8,3,8,7,90,0,4,16,4,64,4, |
3,7,4,32,13,224,13,2,9,9,5,3,11,11,7,95,4,18,2,0,47,63,237,50,47,63,51,47, |
1,93,47,94,93,237,47,93,93,113,237,50,47,237,49,48,37,17,35,17,33,17,51,17, |
33,17,51,17,5,197,180,251,151,191,2,245,186,160,253,200,1,152,5,129,251,31, |
4,225,251,31,0,0,0,1,0,160,0,0,4,174,5,129,0,25,0,134,64,70,164,14,1,20,40, |
13,17,72,1,32,13,17,72,42,7,58,7,74,7,3,23,90,25,144,22,1,143,22,1,48,22, |
64,22,2,207,22,1,112,22,1,111,22,1,16,22,64,22,2,22,12,90,207,11,1,0,11,16, |
11,64,11,3,7,11,32,27,1,32,27,1,27,184,255,192,64,19,14,17,72,0,5,95,21,47, |
16,1,16,16,11,24,18,22,22,11,3,0,63,51,47,63,18,57,47,93,51,237,50,1,43,93, |
113,47,94,93,93,237,47,93,93,93,93,113,113,113,51,237,49,48,0,93,43,43,93, |
1,14,3,35,34,46,2,53,17,51,17,20,22,51,50,62,2,55,17,51,17,35,3,240,36,94, |
107,115,56,114,166,108,52,190,130,134,53,110,104,92,35,190,190,1,252,8,20, |
18,12,47,92,137,89,2,82,253,194,123,108,10,15,17,7,2,244,250,127,0,0,1,0, |
168,0,0,6,173,5,129,0,11,0,114,64,76,7,90,4,4,0,11,90,36,8,1,11,8,1,228,8, |
1,219,8,1,148,8,1,123,8,1,4,8,20,8,100,8,3,8,3,90,4,0,68,0,228,0,3,7,0,235, |
13,1,196,13,1,187,13,1,132,13,1,112,13,1,2,64,13,1,15,13,1,9,5,1,3,7,7,3, |
95,0,18,0,63,237,50,47,63,51,51,1,93,93,95,93,93,93,93,93,47,94,93,237,47, |
93,93,93,93,93,113,113,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,168,191,1,233,186,1,233,186,5,129,251,31,4,225,251,31,4,225,250, |
127,0,1,0,168,254,104,7,47,5,129,0,15,0,125,64,84,132,17,148,17,180,17,3, |
123,17,1,84,17,1,1,92,2,2,15,90,12,11,90,8,8,4,11,12,59,12,75,12,91,12,123, |
12,139,12,155,12,203,12,8,219,12,251,12,2,207,12,1,2,159,12,1,128,12,1,111, |
12,1,0,12,1,8,12,7,90,32,4,1,4,13,9,5,3,15,15,11,11,7,95,4,18,2,0,47,63,237, |
50,47,50,47,63,51,51,1,47,93,237,47,94,93,93,93,93,95,93,93,113,18,57,47, |
237,16,237,50,47,237,93,93,93,49,48,37,17,35,17,33,17,51,17,33,17,51,17,33, |
17,51,17,7,47,180,250,45,191,1,211,186,1,210,186,160,253,200,1,152,5,129, |
251,31,4,225,251,31,4,225,251,31,0,2,0,46,0,0,5,235,5,129,0,16,0,25,0,100, |
64,68,116,25,132,25,148,25,3,123,18,139,18,155,18,3,153,3,1,38,3,1,64,27, |
1,6,90,47,17,127,17,2,176,17,1,159,17,1,0,17,16,17,32,17,64,17,4,7,17,14, |
0,22,90,32,12,1,12,21,95,0,0,12,14,95,15,3,22,95,12,18,0,63,237,63,237,18, |
57,47,237,1,47,93,253,50,204,47,94,93,93,93,113,237,93,49,48,0,93,93,93,93, |
1,33,50,30,2,21,20,14,2,35,33,17,33,53,33,1,52,38,35,33,17,33,50,54,2,184, |
1,66,125,186,124,62,61,121,182,121,253,243,254,53,2,138,2,115,164,164,254, |
213,1,51,164,156,3,45,58,105,147,90,87,150,112,64,4,229,156,252,26,121,129, |
254,2,136,0,3,0,168,0,0,6,109,5,129,0,14,0,23,0,27,0,140,64,76,116,23,132, |
23,148,23,3,123,16,139,16,155,16,3,153,12,1,38,12,1,27,90,159,24,207,24,223, |
24,3,16,24,64,24,80,24,112,24,4,24,0,90,0,15,1,224,15,1,159,15,1,0,15,16, |
15,32,15,64,15,4,15,9,20,90,0,6,16,6,64,6,3,7,6,128,29,1,29,184,255,192,64, |
19,11,14,72,19,95,9,9,6,7,25,25,7,3,24,24,20,95,6,18,0,63,237,51,47,63,51, |
47,17,18,57,47,237,1,43,93,47,94,93,237,50,47,93,93,93,113,237,47,93,93,237, |
49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50,30,2,7,52,38,35,33,17, |
33,50,54,1,17,51,17,4,214,61,121,182,121,253,183,191,1,126,125,186,124,62, |
192,164,164,254,153,1,111,164,156,1,152,191,1,157,87,150,112,64,5,129,253, |
172,58,105,147,92,121,129,254,2,136,254,225,5,129,250,127,0,2,0,168,0,0,4, |
214,5,129,0,14,0,23,0,107,64,76,116,23,132,23,148,23,3,123,16,139,16,155, |
16,3,153,12,1,38,12,1,0,90,31,15,1,160,15,176,15,2,159,15,1,0,15,16,15,32, |
15,64,15,96,15,5,15,9,20,90,0,6,16,6,2,7,6,175,25,1,64,25,128,25,144,25,3, |
19,95,9,9,6,7,3,20,95,6,18,0,63,237,63,18,57,47,237,1,93,93,47,94,93,237, |
50,47,93,93,93,113,237,49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50, |
30,2,7,52,38,35,33,17,33,50,54,4,214,61,121,182,121,253,183,191,1,126,125, |
186,124,62,192,164,164,254,153,1,111,165,155,1,157,87,150,112,64,5,129,253, |
172,58,105,147,96,121,131,254,4,131,0,1,0,105,255,236,5,121,5,150,0,42,0, |
206,64,81,115,26,131,26,2,115,28,131,28,2,101,28,1,115,4,131,4,2,101,4,1, |
115,2,131,2,2,101,2,1,101,12,1,101,11,1,135,17,1,106,17,1,90,33,138,33,2, |
10,32,26,32,90,32,3,10,40,26,40,2,36,36,24,38,14,91,32,35,112,35,2,144,35, |
176,35,2,127,35,1,64,35,1,35,184,255,192,64,63,7,10,72,35,6,80,24,96,24,2, |
175,24,191,24,2,32,24,1,24,35,95,127,38,175,38,2,38,38,9,30,95,19,16,25,32, |
25,2,48,25,64,25,112,25,128,25,192,25,208,25,6,25,25,19,19,79,5,1,5,5,0,95, |
9,4,0,63,237,51,47,93,63,51,47,93,113,16,237,17,57,47,113,237,1,47,93,93, |
113,51,47,43,93,93,93,113,237,51,18,57,47,49,48,0,93,1,93,93,0,93,93,93,1, |
93,93,93,93,93,93,93,93,1,34,14,2,7,39,54,36,51,50,4,22,18,21,20,2,6,4,35, |
34,46,2,39,55,30,3,51,50,62,2,55,33,53,33,46,3,2,201,88,137,102,69,19,181, |
71,1,46,225,164,1,0,175,91,86,172,254,255,171,118,189,149,113,41,156,27,81, |
109,140,87,109,176,128,77,9,253,114,2,142,10,73,124,173,4,250,42,70,91,50, |
60,173,176,101,187,254,246,165,159,254,244,195,109,54,99,136,83,78,55,105, |
83,50,72,132,185,112,154,110,178,126,68,0,0,2,0,168,255,236,7,179,5,150,0, |
26,0,46,0,168,64,63,165,7,1,133,24,1,138,20,1,121,29,1,118,35,1,118,39,1, |
74,19,138,19,2,58,30,122,30,2,53,34,117,34,2,42,44,58,44,122,44,3,37,40,53, |
40,117,40,3,160,48,1,0,91,144,27,160,27,2,160,27,176,27,2,27,184,255,192, |
64,54,7,11,72,27,16,12,90,0,13,16,13,64,13,3,7,13,37,91,17,48,10,112,10,2, |
10,32,95,22,4,11,95,80,16,1,176,16,224,16,2,15,16,1,8,16,16,13,14,3,13,18, |
42,95,5,19,0,63,237,63,63,18,57,47,94,93,93,113,237,63,237,1,47,93,51,237, |
47,94,93,237,50,47,43,93,113,237,93,49,48,93,93,93,93,93,93,93,93,93,93,93, |
1,20,2,14,1,35,34,46,2,39,33,17,35,17,51,17,33,62,3,51,50,30,1,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,7,179,90,170,245,155,156,239,165,90,7, |
254,217,191,191,1,42,13,99,166,232,146,159,245,167,87,195,60,117,173,113, |
116,175,117,58,60,117,173,114,121,176,114,54,2,199,165,254,242,192,104,99, |
179,247,148,253,115,5,129,253,172,142,229,160,86,102,188,254,246,163,127, |
208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,2,0,96,0,0,5,32,5,129, |
0,17,0,30,0,239,64,22,156,29,172,29,2,138,29,1,147,20,1,117,20,133,20,2,67, |
17,83,17,2,17,184,255,216,64,25,33,36,72,130,17,146,17,162,17,3,100,17,116, |
17,2,86,17,1,67,16,83,16,2,3,16,184,255,216,64,117,33,36,72,172,16,1,155, |
16,1,125,16,141,16,2,2,94,16,110,16,2,73,16,1,44,16,60,16,2,3,175,1,1,2,1, |
104,14,16,72,94,1,110,1,2,73,1,1,44,1,60,1,2,16,1,1,6,24,24,14,18,90,6,6, |
0,13,90,224,14,1,143,14,159,14,175,14,207,14,4,0,14,64,14,2,7,14,17,32,0, |
1,15,0,31,0,2,0,1,15,95,47,24,95,24,111,24,143,24,4,24,24,0,26,95,11,3,14, |
14,0,18,0,63,50,47,63,237,18,57,47,93,237,50,1,47,93,93,51,47,94,93,93,93, |
237,18,57,47,237,17,51,17,18,57,17,51,49,48,93,93,93,43,95,93,95,93,93,93, |
95,93,93,93,43,95,113,93,93,93,43,113,0,93,93,93,93,51,1,46,3,53,52,62,2, |
51,33,17,35,17,33,1,19,20,30,2,51,33,17,33,34,14,2,96,1,144,91,130,84,39, |
66,126,185,120,2,151,191,254,73,254,146,28,37,77,119,83,1,205,254,59,76,120, |
84,44,2,95,16,78,108,130,67,94,150,104,55,250,127,2,73,253,183,3,236,57,98, |
72,41,2,8,31,63,94,255,255,0,87,255,236,4,115,4,78,18,6,0,68,0,0,0,2,0,120, |
255,236,4,63,5,222,0,19,0,56,0,158,64,69,137,44,1,122,45,138,45,2,102,21, |
118,21,134,21,3,84,18,1,84,12,1,91,2,1,90,35,122,35,138,35,3,90,47,106,47, |
138,47,3,123,46,139,46,2,73,46,105,46,2,42,42,23,71,64,208,0,1,144,0,1,0, |
58,128,48,58,1,128,58,1,58,184,255,192,64,12,30,35,72,52,10,71,0,31,32,31, |
2,31,184,255,192,64,23,26,35,72,31,52,5,80,20,20,42,48,41,1,64,41,240,41, |
2,41,15,80,26,22,0,63,237,47,93,113,51,57,47,237,50,1,47,43,93,237,57,43, |
93,113,26,16,220,93,113,26,237,50,47,49,48,0,93,93,93,93,93,93,93,93,93,93, |
1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,3,50,18,17,16,2,35,34,46,2,53, |
52,18,62,1,55,62,3,55,21,14,1,7,14,5,7,62,3,3,130,39,73,104,65,69,114,81, |
44,44,77,105,62,69,112,78,42,243,222,210,250,238,113,178,123,65,58,128,206, |
147,57,100,91,86,43,86,161,91,78,124,94,67,44,23,2,19,67,97,126,1,246,114, |
151,91,37,39,92,150,112,114,150,89,36,36,88,151,2,127,254,251,254,250,254, |
247,254,253,70,156,250,180,192,1,22,193,115,28,11,17,14,12,6,161,11,23,17, |
14,33,50,73,108,149,101,55,97,72,41,0,0,0,0,3,0,142,0,0,3,231,4,58,0,23,0, |
36,0,47,0,149,64,12,42,19,1,37,2,1,26,18,42,18,2,3,184,255,232,64,33,9,12, |
72,139,10,155,10,2,10,38,44,71,5,5,24,16,71,64,47,30,159,30,2,160,30,1,30, |
49,128,64,49,1,49,184,255,192,64,50,30,35,72,31,49,63,49,239,49,3,38,24,70, |
192,22,1,0,22,16,22,48,22,224,22,240,22,5,8,22,10,36,81,143,38,159,38,175, |
38,3,38,38,24,37,80,23,15,24,80,22,21,0,63,237,63,237,18,57,47,113,237,57, |
1,47,94,93,113,237,50,93,43,113,26,16,220,93,113,26,237,17,57,47,237,18,57, |
93,49,48,0,43,93,93,93,1,50,30,2,21,20,14,2,7,21,30,3,21,20,14,2,35,33,17, |
19,51,50,62,2,53,52,46,2,43,1,25,1,51,50,62,2,53,52,38,35,2,52,76,144,112, |
68,35,60,82,46,54,95,69,40,61,109,151,91,254,67,180,236,69,95,59,27,28,63, |
100,71,224,216,68,91,55,23,102,121,4,58,24,62,104,81,53,81,58,37,9,7,7,35, |
61,90,61,78,117,78,39,4,58,252,75,20,44,67,47,50,70,44,20,1,194,254,192,19, |
39,61,43,82,76,0,1,0,142,0,0,2,175,4,58,0,5,0,54,64,35,0,64,18,39,72,48,0, |
1,0,0,7,3,70,192,4,1,0,4,16,4,48,4,224,4,240,4,5,8,4,2,80,5,15,3,21,0,63, |
63,237,1,47,94,93,113,237,17,51,47,93,43,49,48,1,21,33,17,35,17,2,175,254, |
147,180,4,58,131,252,73,4,58,0,0,0,2,0,20,254,104,4,136,4,58,0,7,0,23,0,159, |
64,65,134,3,1,32,3,1,102,1,1,34,5,114,5,130,5,3,34,20,1,34,17,1,137,18,1, |
34,18,1,25,19,121,19,2,102,2,118,2,2,34,2,1,25,2,1,34,16,1,4,16,1,98,4,1, |
4,4,36,4,68,4,84,4,4,8,73,9,184,255,192,64,42,18,25,72,9,9,22,70,64,111,7, |
127,7,143,7,3,32,7,64,7,2,7,25,128,20,15,12,73,6,1,13,1,80,20,15,22,6,14, |
80,11,21,13,8,0,47,51,63,237,50,50,63,237,1,47,51,51,237,51,51,26,16,220, |
93,93,26,237,50,47,43,237,49,48,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,1,33,6,2,14,1,7,33,1,35,17,33,17,35,17,51,62,2,18,55,33,17,51,3,66, |
254,206,24,49,48,48,22,1,241,1,70,163,252,210,163,119,30,58,58,57,28,2,132, |
146,3,183,177,254,249,194,136,50,253,229,1,152,254,104,2,27,50,143,220,1, |
59,223,252,73,255,255,0,87,255,236,4,24,4,78,18,6,0,72,0,0,0,1,0,7,0,0,5, |
83,4,58,0,39,1,97,64,88,165,23,1,165,14,1,171,34,1,164,3,1,172,24,1,154,24, |
1,163,13,1,149,13,1,90,6,106,6,122,6,3,85,31,101,31,117,31,3,74,33,154,33, |
170,33,3,69,4,149,4,165,4,3,42,28,58,28,2,37,9,53,9,2,34,31,170,26,1,26,31, |
27,16,27,27,32,20,38,70,39,165,11,1,11,10,3,6,6,39,10,184,255,240,64,49,10, |
10,17,39,39,5,33,32,16,15,32,1,255,32,1,160,32,1,159,32,1,80,32,1,63,32,1, |
32,32,1,207,32,1,128,32,144,32,2,95,32,1,32,32,48,32,2,32,4,5,184,255,240, |
64,64,31,5,47,5,2,127,5,159,5,2,63,5,159,5,223,5,255,5,4,5,15,41,1,255,41, |
1,160,41,1,111,41,159,41,2,80,41,1,63,41,1,32,41,1,207,41,1,128,41,144,41, |
2,79,41,95,41,2,48,41,1,31,6,34,3,6,184,255,240,64,37,11,17,72,6,3,37,0,80, |
20,15,17,31,17,79,17,95,17,4,15,17,31,17,79,17,3,7,17,17,4,26,18,10,15,39, |
33,4,21,0,63,51,51,63,51,51,18,57,47,94,93,113,51,237,50,57,57,43,17,51,17, |
51,1,93,93,93,93,113,113,113,113,113,113,114,47,93,113,114,56,51,47,93,93, |
93,93,113,113,113,113,113,113,114,56,51,18,57,47,51,57,47,56,18,57,17,51, |
17,51,93,16,237,50,17,57,47,56,57,51,93,17,51,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,0,93,93,1,34,38,39,1,35,1,46,1,39,3,51,23,30,3,51,17,51,17, |
50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,2,83,26,65,19,254,234,200,1, |
97,17,66,45,216,188,148,48,65,52,48,30,180,30,48,52,65,48,148,188,216,45, |
66,17,1,97,200,254,234,19,65,26,180,1,221,12,8,254,15,2,80,14,85,66,1,69, |
239,77,92,50,16,1,218,254,38,16,50,92,77,239,254,187,66,85,14,253,176,1,241, |
8,12,254,35,0,0,0,1,0,49,255,236,3,94,4,78,0,55,0,175,64,28,5,53,21,53,2, |
5,38,21,38,37,38,3,131,45,1,45,15,21,70,40,40,51,71,10,29,73,64,30,184,255, |
192,64,86,30,36,72,143,15,1,30,15,30,15,3,144,10,1,144,10,160,10,2,31,10, |
1,10,57,128,16,57,1,4,73,3,64,12,20,72,3,45,15,80,143,16,159,16,175,16,3, |
16,16,35,7,0,29,1,144,29,224,29,240,29,3,29,29,24,80,35,16,7,80,0,96,4,112, |
4,128,4,3,239,4,1,32,4,1,4,4,0,22,0,63,50,47,93,93,113,16,237,63,237,51,47, |
93,113,17,18,57,47,113,237,57,1,47,43,237,93,26,16,204,93,93,113,17,57,57, |
47,47,93,43,26,237,16,237,50,47,237,18,57,113,49,48,93,93,5,34,38,39,55,30, |
1,51,50,54,53,52,46,2,35,53,50,62,2,53,52,38,35,34,14,2,7,39,62,3,51,50,30, |
2,21,20,14,2,7,21,30,3,21,20,14,2,1,202,167,197,45,159,25,126,103,96,113, |
55,92,120,64,64,114,86,49,99,93,35,70,60,42,7,162,12,62,97,128,78,85,138, |
98,53,44,71,88,45,56,100,75,43,49,101,152,20,125,129,44,78,86,94,91,59,78, |
45,18,137,15,38,67,52,74,86,14,33,55,42,20,68,98,63,29,42,76,104,63,57,88, |
61,36,4,2,6,41,67,93,58,69,119,87,49,0,0,0,0,1,0,142,0,0,3,234,4,58,0,19, |
0,186,64,25,9,17,1,233,17,249,17,2,4,15,1,228,15,244,15,2,11,5,1,235,5,251, |
5,2,16,184,255,192,64,107,29,60,72,153,16,1,6,64,29,60,72,119,6,151,6,2,6, |
7,1,230,7,246,7,2,156,7,1,105,7,137,7,2,31,17,47,17,79,17,3,9,72,64,7,64, |
10,1,80,10,1,159,10,255,10,2,10,21,128,0,21,192,21,208,21,224,21,4,192,21, |
1,128,21,144,21,176,21,192,21,208,21,5,17,1,72,192,18,1,0,18,16,18,48,18, |
224,18,240,18,5,8,18,16,7,19,15,10,6,18,21,0,63,51,51,63,51,51,1,47,94,93, |
113,237,50,93,113,114,26,16,220,93,113,114,50,26,237,49,48,0,93,1,93,93,113, |
114,0,93,43,93,43,113,114,113,114,1,113,114,1,17,20,14,2,7,1,51,17,35,17, |
52,62,2,55,1,35,17,1,60,3,3,3,1,1,243,197,172,2,3,3,2,254,6,192,4,58,253, |
176,23,77,82,74,21,3,101,251,198,2,148,19,57,60,57,20,252,151,4,58,0,255, |
255,0,142,0,0,3,234,5,240,18,38,1,206,0,0,17,7,2,145,0,234,0,0,0,19,64,11, |
1,20,17,38,1,2,25,33,18,8,37,1,43,53,0,43,53,0,0,0,0,1,0,138,0,0,3,138,4, |
58,0,21,0,202,64,17,117,16,133,16,149,16,3,57,15,121,15,137,15,153,15,4,13, |
184,255,208,64,123,12,17,72,133,11,149,11,2,120,5,1,133,13,149,13,2,47,23, |
79,23,2,73,16,1,56,16,1,16,13,121,8,137,8,153,8,3,8,71,13,1,54,13,1,13,9, |
16,9,9,14,2,20,70,0,21,16,21,48,21,240,21,4,21,57,15,73,15,2,15,32,14,1,32, |
14,144,14,2,144,14,1,79,14,1,48,14,1,47,14,1,16,14,1,14,16,14,13,19,80,15, |
2,63,2,79,2,3,15,2,63,2,255,2,3,8,2,2,14,21,21,14,21,8,8,0,15,0,63,50,47, |
63,51,47,17,57,47,94,93,113,237,50,1,47,56,93,93,93,93,93,113,114,51,113, |
47,93,237,50,17,57,47,56,57,113,113,51,93,17,51,113,113,93,49,48,0,93,1,93, |
93,43,93,93,19,51,17,50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,138,180, |
30,48,52,65,48,148,188,216,45,66,17,1,97,200,254,234,19,65,26,180,4,58,254, |
38,16,50,92,77,239,254,187,66,85,14,253,176,1,241,8,12,254,35,0,0,0,0,1,0, |
11,255,236,4,29,4,58,0,25,0,186,64,42,26,21,1,130,7,1,116,7,1,85,7,101,7, |
2,130,6,1,117,6,1,22,6,38,6,102,6,3,114,5,130,5,2,100,5,1,86,5,1,134,4,1, |
4,184,255,240,64,61,12,15,72,26,3,1,116,2,1,7,24,12,17,72,25,70,64,127,0, |
143,0,239,0,3,0,27,128,176,27,192,27,208,27,3,176,27,240,27,2,64,27,96,27, |
112,27,160,27,176,27,192,27,6,131,23,1,23,54,6,1,6,2,184,255,240,64,26,24, |
28,72,215,2,231,2,2,128,2,1,2,143,12,1,12,2,80,23,15,16,80,9,22,0,21,0,63, |
63,237,63,237,1,47,93,51,93,93,43,51,113,51,93,93,113,114,26,16,220,93,26, |
237,49,48,0,43,1,93,93,43,93,93,93,93,93,93,93,93,93,93,93,33,17,33,6,2,14, |
3,35,34,38,39,53,30,1,51,50,62,3,18,55,33,17,3,104,254,137,25,42,44,51,71, |
94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2,206,3,183,184,254,225,216, |
149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,251,198,0,0,1,0,142,0,0,4,243, |
4,58,0,28,1,3,64,21,137,18,153,18,2,134,12,150,12,2,107,17,123,17,2,100,13, |
116,13,2,1,184,255,224,64,122,29,60,72,138,1,154,1,2,57,1,1,0,32,29,60,72, |
133,0,149,0,2,54,0,86,0,2,143,19,159,19,2,93,19,109,19,125,19,3,59,19,75, |
19,2,25,19,41,19,2,128,11,144,11,2,82,11,98,11,114,11,3,52,11,68,11,2,22, |
11,38,11,2,1,0,15,15,8,21,72,64,19,80,22,1,159,22,255,22,2,22,30,128,144, |
30,192,30,208,30,3,79,30,1,11,8,72,192,9,1,0,9,16,9,48,9,224,9,240,9,5,8, |
9,28,2,2,184,255,192,64,22,29,60,72,2,32,19,22,72,84,2,1,19,2,10,15,22,15, |
64,29,60,72,15,184,255,224,64,18,19,22,72,47,15,63,15,79,15,127,15,143,15, |
5,15,1,9,21,0,63,51,51,93,43,43,51,63,51,51,93,43,43,17,51,1,47,94,93,113, |
237,50,93,93,26,16,220,93,113,50,26,237,18,57,61,47,51,51,49,48,93,93,93, |
93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,33,35,1,30,3,21,17,35,17,33, |
19,30,1,23,62,1,55,19,33,17,35,17,52,62,2,55,3,19,153,254,188,1,3,1,1,174, |
1,24,220,23,37,8,10,35,23,220,1,13,173,1,3,2,2,3,183,26,60,61,57,23,253,44, |
4,58,253,107,63,151,72,72,151,63,2,149,251,198,2,212,22,60,64,60,23,0,1,0, |
142,0,0,3,221,4,58,0,11,0,139,64,48,5,70,64,2,15,6,79,6,2,57,47,6,111,6,143, |
6,255,6,4,191,6,1,143,6,159,6,255,6,3,6,13,128,0,13,192,13,208,13,224,13, |
4,192,13,1,128,13,1,13,184,255,192,64,49,19,23,72,1,9,70,192,10,1,0,10,16, |
10,48,10,224,10,240,10,5,10,8,80,176,1,192,1,2,159,1,175,1,191,1,3,15,1,63, |
1,2,8,1,1,10,5,21,3,0,15,0,63,50,63,51,57,47,94,93,113,114,237,1,47,93,113, |
237,50,43,93,113,114,26,16,220,93,113,114,94,93,50,26,237,49,48,1,17,33,17, |
51,17,35,17,33,17,35,17,1,66,1,231,180,180,254,25,180,4,58,254,54,1,202,251, |
198,1,237,254,19,4,58,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
142,0,0,3,199,4,58,0,7,0,109,64,80,1,70,64,15,2,79,2,2,57,47,2,111,2,143, |
2,255,2,4,191,2,1,143,2,159,2,255,2,3,2,9,128,0,9,192,9,208,9,224,9,4,192, |
9,1,128,9,176,9,192,9,208,9,4,47,9,1,5,70,192,6,1,0,6,16,6,48,6,224,6,240, |
6,5,8,6,4,80,7,15,6,1,21,0,63,51,63,237,1,47,94,93,113,237,93,93,113,114, |
26,16,220,93,113,114,94,93,26,237,49,48,1,17,35,17,33,17,35,17,3,199,180, |
254,47,180,4,58,251,198,3,183,252,73,4,58,0,255,255,0,132,254,87,4,29,4,77, |
18,6,0,83,0,0,255,255,0,87,255,236,3,202,4,78,18,6,0,70,0,0,0,1,0,35,0,0, |
3,135,4,58,0,7,0,72,64,43,7,14,4,2,5,14,223,2,1,2,4,70,0,5,16,5,2,8,5,5,8, |
9,160,9,1,95,9,1,48,9,64,9,2,47,9,1,4,21,3,7,80,0,15,0,63,237,50,63,1,93, |
93,93,93,17,18,57,47,94,93,237,204,93,43,1,24,16,77,228,49,48,19,33,21,33, |
17,35,17,33,35,3,100,254,168,180,254,168,4,58,131,252,73,3,183,0,0,0,255, |
255,0,5,254,87,3,252,4,58,18,6,0,92,0,0,0,3,0,86,254,87,6,62,5,204,0,53,0, |
74,0,95,0,229,64,13,141,93,157,93,173,93,3,78,24,14,17,72,72,184,255,232, |
179,14,17,72,57,184,255,232,182,14,17,72,109,82,1,51,184,255,224,64,75,7, |
10,72,15,26,31,26,47,26,3,24,32,7,10,72,0,3,16,3,32,3,3,7,4,54,71,64,25,14, |
13,0,14,14,75,71,36,0,68,0,148,0,164,0,4,0,85,39,13,72,65,38,4,14,1,4,14, |
36,14,68,14,100,14,132,14,180,14,228,14,7,7,14,52,97,1,97,184,255,192,64, |
52,30,35,72,219,97,1,84,97,100,97,132,97,148,97,4,64,97,1,2,32,97,48,97,2, |
31,97,1,0,97,1,38,0,31,45,80,3,70,80,49,28,16,8,18,91,3,59,80,5,22,22,13, |
27,0,63,63,51,237,23,50,63,51,237,23,50,63,1,93,93,93,95,93,93,93,43,113, |
47,94,93,113,51,51,237,50,50,220,93,237,43,1,24,16,77,244,26,237,49,48,95, |
94,93,43,93,0,43,93,1,43,43,43,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35, |
17,52,54,55,35,14,1,35,34,2,17,16,18,51,50,22,23,51,52,46,2,53,17,51,17,20, |
14,2,21,51,62,1,51,50,30,2,5,20,30,2,51,50,62,2,55,53,52,46,2,35,34,14,2, |
5,52,46,2,35,34,14,2,29,1,30,3,51,50,62,2,6,62,38,86,140,101,105,158,42,6, |
2,3,170,2,3,5,46,149,111,186,179,185,180,112,149,45,5,2,2,1,170,1,1,1,5,46, |
144,114,101,140,86,38,250,213,26,56,85,60,60,94,65,34,2,34,64,94,61,57,86, |
57,29,4,110,23,52,88,64,53,92,70,40,1,35,65,92,60,65,88,53,23,2,34,123,208, |
150,85,88,100,35,77,58,254,89,1,167,54,82,40,104,90,1,19,1,25,1,28,1,26,90, |
98,10,41,46,42,12,1,163,254,92,11,43,47,43,12,104,89,80,145,205,129,112,160, |
103,48,43,98,157,113,24,115,159,98,43,46,102,163,116,100,156,108,56,34,96, |
169,135,23,108,150,93,41,58,110,159,0,0,0,255,255,0,23,0,0,3,234,4,58,18, |
6,0,91,0,0,0,1,0,142,254,104,4,102,4,58,0,11,0,91,178,7,73,8,184,255,192, |
64,54,18,21,72,8,8,5,70,64,223,2,1,207,2,223,2,2,2,64,25,28,72,0,2,48,2,2, |
2,13,128,111,13,1,1,70,0,10,16,10,48,10,240,10,4,8,10,5,1,80,10,21,8,3,0, |
15,0,63,50,47,63,237,50,1,47,94,93,237,93,26,16,220,93,43,93,113,26,237,50, |
47,43,237,49,48,1,17,33,17,51,17,51,17,35,17,33,17,1,66,1,221,180,147,163, |
252,203,4,58,252,73,3,183,252,73,253,229,1,152,4,58,0,1,0,122,0,0,3,156,4, |
58,0,25,0,92,64,37,108,15,124,15,140,15,3,22,32,7,10,72,21,24,7,12,72,12, |
70,64,9,175,13,1,127,13,143,13,239,13,3,13,27,128,1,70,24,184,255,192,64, |
20,9,12,72,24,14,19,80,9,15,6,31,6,2,6,6,12,21,10,0,15,0,63,50,63,57,47,93, |
51,237,50,1,47,43,237,26,16,220,93,113,50,26,237,49,48,43,43,0,93,1,17,20, |
30,2,51,50,54,55,17,51,17,35,17,14,3,35,34,46,2,53,17,1,46,16,39,64,47,70, |
132,74,180,180,38,81,87,93,51,66,101,69,36,4,58,254,110,34,59,44,25,26,21, |
2,5,251,198,1,205,15,31,24,16,41,76,110,69,1,155,0,0,0,1,0,142,0,0,5,221, |
4,58,0,11,0,116,64,52,7,70,4,4,0,11,70,64,4,8,52,8,2,36,8,132,8,212,8,228, |
8,4,11,8,1,139,8,251,8,2,8,13,128,251,13,1,180,13,212,13,2,128,13,1,2,112, |
13,1,95,13,1,13,184,255,192,64,23,9,12,72,3,70,0,0,16,0,48,0,3,8,0,9,5,1, |
15,7,3,80,0,21,0,63,237,50,63,51,51,1,47,94,93,237,43,93,93,95,93,93,93,26, |
16,220,93,113,113,114,26,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,142,180,1,154,180,1,153,180,4,58,252,73,3,183,252,73,3,183,251,198, |
0,0,0,1,0,142,254,104,6,102,4,58,0,15,0,141,64,96,13,73,244,14,1,14,14,11, |
70,8,7,70,64,4,4,0,107,8,1,4,8,1,84,8,228,8,2,59,8,1,107,8,123,8,139,8,251, |
8,4,84,8,1,8,17,128,251,17,1,212,17,1,128,17,176,17,2,2,96,17,112,17,2,95, |
17,1,32,17,48,17,64,17,3,3,70,0,0,16,0,48,0,240,0,4,8,0,14,9,5,1,15,11,7, |
3,80,0,21,0,63,237,50,50,63,51,51,47,1,47,94,93,237,93,93,93,95,93,93,93, |
26,16,204,93,93,113,113,114,114,17,57,47,26,237,16,237,50,47,93,237,49,48, |
51,17,51,17,33,17,51,17,33,17,51,17,51,17,35,17,142,180,1,149,180,1,148,180, |
147,163,4,58,252,73,3,183,252,73,3,183,252,73,253,229,1,152,0,0,0,0,2,0,45, |
0,0,4,172,4,58,0,14,0,25,0,113,185,0,5,255,224,179,7,10,72,2,184,255,224, |
64,16,7,11,72,3,71,64,176,21,1,21,27,128,80,27,1,27,184,255,192,64,45,30, |
35,72,255,27,1,14,11,15,70,32,9,1,32,9,1,9,25,81,175,14,191,14,207,14,3,15, |
14,31,14,79,14,3,7,14,14,9,11,80,12,15,15,81,9,21,0,63,237,63,237,18,57,47, |
94,93,113,237,1,47,93,113,253,204,51,93,43,113,26,16,220,93,26,237,49,48, |
43,43,1,50,22,21,20,14,2,35,33,17,33,53,33,25,1,51,50,62,2,53,52,38,43,1, |
3,13,205,210,52,104,155,103,254,103,254,184,1,252,202,69,96,59,26,116,133, |
203,2,112,147,159,74,118,82,44,3,183,131,254,54,254,15,25,49,71,46,94,87, |
0,3,0,142,0,0,5,50,4,58,0,12,0,23,0,27,0,105,185,0,5,255,224,179,7,10,72, |
2,184,255,224,64,58,7,10,72,3,71,19,19,9,27,70,64,159,24,175,24,2,24,29,128, |
12,13,70,16,9,32,9,64,9,3,9,23,81,175,12,191,12,207,12,3,15,12,31,12,79,12, |
3,7,12,12,9,25,10,15,24,13,81,9,21,0,63,237,51,63,51,18,57,47,94,93,113,237, |
1,47,93,237,50,26,16,220,93,26,237,18,57,47,237,49,48,43,43,1,50,22,21,20, |
14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,1,17,51,17,2,38,205,210,52, |
104,155,103,254,103,180,202,69,96,59,26,116,133,203,3,60,180,2,112,147,159, |
74,118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,254,13,4,58,251,198,0,0, |
0,0,2,0,142,0,0,3,215,4,58,0,12,0,23,0,132,185,0,5,255,224,179,7,10,72,2, |
184,255,224,64,86,7,10,72,3,71,64,176,19,1,19,25,128,47,25,1,47,25,175,25, |
2,63,25,95,25,127,25,159,25,191,25,207,25,223,25,255,25,8,25,64,35,39,72, |
12,13,70,0,9,208,9,2,16,9,32,9,64,9,240,9,4,9,23,81,175,12,191,12,207,12, |
3,15,12,31,12,79,12,3,7,12,12,9,10,15,13,81,9,21,0,63,237,63,18,57,47,94, |
93,113,237,1,47,93,113,237,50,43,93,113,114,26,16,220,93,26,237,49,48,43, |
43,1,50,22,21,20,14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,2,56,205, |
210,52,104,155,103,254,85,180,220,69,96,59,26,116,133,221,2,112,147,159,74, |
118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,0,0,0,0,1,0,55,255,236,3,190, |
4,78,0,40,0,170,64,87,118,34,1,22,29,1,118,28,1,107,15,1,107,6,1,16,10,32, |
10,2,10,10,0,31,71,64,12,31,9,1,144,9,1,9,42,128,20,70,21,21,1,70,31,0,1, |
223,0,1,0,64,12,18,72,0,10,80,143,11,159,11,175,11,3,11,11,26,4,80,36,0,1, |
16,1,32,1,96,1,112,1,128,1,192,1,208,1,8,1,184,255,192,64,29,27,34,72,1,1, |
36,22,31,20,47,20,127,20,143,20,223,20,5,20,64,29,32,72,20,20,17,80,26,16, |
0,63,237,51,47,43,93,63,51,47,43,93,16,237,17,57,47,113,237,1,47,43,113,114, |
237,51,47,237,26,16,220,93,113,50,26,237,18,57,47,93,49,48,93,93,93,93,93, |
19,55,30,1,51,50,62,2,55,33,53,33,46,3,35,34,6,7,39,62,3,51,50,30,2,21,20, |
14,2,35,34,46,2,55,182,16,133,100,73,103,68,34,5,254,99,1,157,4,34,67,103, |
73,109,118,15,185,13,66,105,145,93,90,170,134,81,51,114,182,130,99,151,106, |
61,1,59,12,108,104,53,97,135,82,131,90,133,88,44,105,91,14,68,116,84,48,53, |
128,216,163,120,205,151,86,54,92,122,0,0,0,0,2,0,142,255,236,5,170,4,78,0, |
19,0,39,0,128,64,85,121,37,137,37,2,116,33,132,33,2,118,27,134,27,2,121,23, |
137,23,2,150,18,166,18,2,30,71,15,15,8,31,8,2,7,8,8,11,0,71,64,160,20,1,20, |
41,128,14,10,70,192,11,1,0,11,16,11,48,11,224,11,240,11,5,8,11,25,80,17,16, |
9,80,47,14,1,14,14,11,12,15,11,21,35,80,3,22,0,63,237,63,63,18,57,47,93,237, |
63,237,1,47,94,93,113,237,50,26,16,220,93,26,237,18,57,47,94,93,51,237,49, |
48,0,93,1,93,93,93,93,1,16,2,35,34,46,2,39,35,17,35,17,51,17,51,18,33,50, |
18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,170,235,223,102,161,115,65, |
5,222,180,180,223,33,1,164,237,215,189,35,67,97,61,63,99,70,37,39,70,94,56, |
62,100,70,38,2,30,254,228,254,234,62,128,192,131,254,19,4,58,254,54,1,222, |
254,232,254,232,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0,0,2, |
0,17,0,0,3,199,4,58,0,13,0,22,0,143,64,68,117,1,133,1,2,3,32,11,17,72,0,32, |
40,43,72,223,0,239,0,2,0,32,29,37,72,52,0,1,43,0,1,41,4,1,4,48,7,10,72,7, |
32,7,11,72,18,71,0,3,3,12,6,6,2,22,11,70,64,175,12,1,239,12,1,12,24,128,1, |
2,184,255,240,64,22,91,2,107,2,2,2,3,0,81,47,21,1,21,21,1,15,81,9,15,12,1, |
21,0,63,51,63,237,18,57,47,93,237,50,1,47,93,56,51,26,16,220,93,113,26,237, |
51,18,57,47,18,57,17,51,237,49,48,43,0,43,93,1,93,113,43,113,43,43,93,9,1, |
35,1,46,1,53,52,54,51,33,17,35,25,1,35,34,6,21,20,22,59,1,2,23,254,197,203, |
1,88,131,118,216,207,1,176,180,234,130,120,107,124,253,1,202,254,54,1,215, |
27,163,122,149,150,251,198,1,202,1,241,92,93,94,93,0,255,255,0,87,255,236, |
4,24,5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3, |
2,4,42,40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,0,1,0,10,254,87,3,238,5,204, |
0,57,0,162,64,9,170,49,1,31,32,9,15,72,24,184,255,232,64,86,9,13,72,0,24, |
16,24,2,7,36,36,57,28,70,64,80,45,1,159,45,1,45,59,128,10,7,57,70,4,3,192, |
0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176,59,192,59,208,59,3,176,59,240,59, |
2,255,59,1,112,59,160,59,176,59,3,57,21,40,80,33,27,15,51,80,22,10,2,81,7, |
3,3,5,22,184,255,192,182,7,13,72,22,15,5,0,0,63,63,43,18,57,47,51,237,50, |
16,237,50,63,237,63,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220, |
93,113,26,237,17,57,47,49,48,0,94,93,43,43,1,93,51,17,35,53,51,53,51,21,33, |
21,33,21,20,14,2,7,51,62,3,51,50,30,2,21,17,20,14,2,35,34,38,39,53,30,1,51, |
50,62,2,53,17,52,46,2,35,34,14,2,21,17,142,132,132,180,1,44,254,212,2,3,2, |
1,3,30,70,84,100,62,104,133,77,29,21,54,93,72,34,65,28,13,36,13,38,49,27, |
10,17,48,88,70,64,103,73,40,4,182,131,147,147,131,148,33,66,56,39,7,55,77, |
50,23,56,101,140,84,252,209,62,106,78,45,4,5,139,2,4,20,43,67,46,2,241,69, |
104,69,35,46,84,120,75,253,170,0,0,0,255,255,0,142,0,0,2,200,5,228,18,38, |
1,201,0,0,17,7,0,116,0,216,0,0,0,19,64,11,1,6,17,38,1,85,6,9,4,0,37,1,43, |
53,0,43,53,0,0,0,0,1,0,87,255,236,3,222,4,78,0,40,0,171,64,113,116,30,1,116, |
21,1,137,8,1,137,2,1,47,42,1,63,26,1,26,26,27,36,16,70,15,15,35,70,0,36,32, |
36,2,0,36,64,36,96,36,128,36,160,36,192,36,224,36,7,8,36,24,27,71,31,5,1, |
5,27,80,143,24,159,24,175,24,3,24,24,32,19,80,10,31,16,47,16,127,16,143,16, |
223,16,5,16,64,29,32,72,16,16,10,16,32,80,0,0,35,16,35,32,35,96,35,112,35, |
128,35,192,35,208,35,8,35,184,255,192,182,27,34,72,35,35,0,22,0,63,50,47, |
43,93,16,237,63,51,47,43,93,16,237,18,57,47,113,237,1,47,93,237,50,47,94, |
93,113,237,51,47,237,17,18,57,47,93,93,49,48,93,93,93,93,5,34,46,2,53,52, |
62,2,51,50,30,2,23,7,46,1,35,34,14,2,7,33,21,33,30,3,51,50,54,55,23,14,3, |
2,52,130,182,114,51,81,134,170,90,93,145,105,66,13,185,15,118,109,73,103, |
67,34,4,1,156,254,99,4,35,68,103,74,100,133,16,182,9,61,106,151,20,86,151, |
205,120,163,216,128,53,48,84,116,68,14,91,105,44,88,133,90,131,82,135,97, |
53,103,109,12,67,122,92,54,0,255,255,0,57,255,236,3,182,4,75,18,6,0,86,0, |
0,255,255,0,137,0,0,1,61,5,204,16,38,0,241,199,0,17,6,1,75,237,0,0,212,181, |
9,64,56,56,72,9,184,255,192,64,9,55,55,72,9,64,54,54,72,9,184,255,192,179, |
53,53,72,9,184,255,192,64,9,52,52,72,9,64,50,50,72,9,184,255,192,179,49,49, |
72,9,184,255,192,64,9,48,48,72,9,64,42,42,72,9,184,255,192,179,41,41,72,9, |
184,255,192,64,9,40,40,72,9,64,38,38,72,9,184,255,192,179,37,37,72,9,184, |
255,192,179,36,36,72,9,184,255,192,179,35,35,72,9,184,255,192,64,16,34,34, |
72,9,64,29,29,72,9,64,10,10,72,1,0,0,184,255,192,179,49,49,72,0,184,255,192, |
64,9,40,41,72,0,64,25,27,72,0,184,255,192,182,18,18,72,128,0,1,0,184,255, |
192,64,11,8,8,72,0,1,0,4,7,1,2,37,1,43,53,17,43,93,43,43,43,43,53,53,1,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,248,0,0,2, |
37,5,123,18,38,0,241,0,0,17,6,0,105,203,0,0,25,182,2,1,4,17,38,2,1,184,255, |
243,180,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,0,255,255,255,206,254,87,1,61, |
5,204,18,6,0,77,0,0,0,2,0,11,255,236,6,236,4,58,0,34,0,45,1,42,64,82,163, |
16,1,148,16,1,117,16,133,16,2,106,14,1,57,14,1,14,16,18,22,72,131,14,147, |
14,163,14,3,117,14,1,106,13,1,57,13,1,13,16,18,22,72,163,13,1,87,13,103,13, |
119,13,3,16,24,12,17,72,109,15,1,15,32,18,22,72,162,15,1,117,15,133,15,149, |
15,3,54,15,70,15,2,5,184,255,224,179,7,10,72,2,184,255,224,64,18,7,11,72, |
34,35,70,64,9,1,9,9,22,3,71,176,41,1,41,184,255,192,64,9,8,11,72,41,47,80, |
47,1,47,184,255,192,64,93,30,35,72,255,47,1,48,47,1,109,11,1,31,11,63,11, |
2,255,11,1,233,11,1,187,11,203,11,219,11,3,163,11,1,149,11,1,31,32,63,32, |
2,255,32,1,106,32,1,41,32,1,163,32,1,53,32,1,11,15,32,3,22,45,81,175,34,191, |
34,207,34,3,15,34,31,34,79,34,3,7,34,34,9,11,80,32,15,25,80,18,22,35,81,9, |
21,0,63,237,63,237,63,237,18,57,47,94,93,113,237,1,47,23,51,93,93,113,113, |
93,113,93,93,93,93,93,113,113,93,93,43,113,16,220,43,93,237,18,57,47,93,237, |
50,49,48,43,43,93,93,93,43,113,0,43,1,93,93,43,113,113,93,93,43,113,113,93, |
93,93,1,50,22,21,20,14,2,35,33,17,33,6,2,14,3,35,34,38,39,53,30,1,51,50,62, |
3,18,55,33,25,1,51,50,62,2,53,52,38,43,1,5,77,205,210,52,104,155,103,254, |
62,254,101,25,42,44,51,71,94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2, |
242,242,69,96,59,26,116,133,243,2,112,147,159,74,118,82,44,3,183,184,254, |
225,216,149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,254,54,254,15,25,49, |
71,46,94,87,0,0,2,0,142,0,0,6,44,4,58,0,20,0,31,0,133,185,0,7,255,224,179, |
7,10,72,4,184,255,224,64,23,7,11,72,1,21,70,19,11,11,15,5,71,64,176,27,1, |
27,33,128,80,33,1,33,184,255,192,64,50,30,35,72,255,33,1,18,14,70,16,15,32, |
15,64,15,3,15,31,81,1,1,13,80,175,18,191,18,207,18,3,15,18,31,18,79,18,3, |
7,18,18,0,15,21,21,81,11,21,16,0,15,0,63,50,63,237,63,18,57,47,94,93,113, |
237,51,47,237,1,47,93,237,50,93,43,113,26,16,220,93,26,237,18,57,47,51,237, |
50,49,48,43,43,1,17,51,50,22,21,20,14,2,35,33,17,33,17,35,17,51,17,33,17, |
19,51,50,62,2,53,52,38,43,1,3,169,228,205,210,52,104,155,103,254,102,254, |
78,180,180,1,178,181,202,69,96,59,26,116,133,203,4,58,254,54,147,159,74,118, |
82,44,1,237,254,19,4,58,254,54,1,202,252,69,25,49,71,46,94,87,0,0,0,0,1,0, |
10,0,0,3,238,5,204,0,41,0,144,185,0,7,255,232,64,85,9,13,72,0,7,16,7,2,7, |
33,24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,35,32,24,70,29,28,192,25, |
1,0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240, |
43,2,255,43,1,112,43,160,43,176,43,3,35,27,81,32,28,28,5,30,0,25,11,21,0, |
18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220,93,113,26,237, |
17,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61,30,70,84,100,62,104, |
133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180,1,44,254,212,2,3,2, |
1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69,35,46,84,120,75,253, |
170,4,182,131,147,147,131,148,33,66,56,39,7,0,0,255,255,0,138,0,0,3,138,5, |
228,18,38,1,208,0,0,17,7,0,116,1,63,0,0,0,19,64,11,1,22,17,38,1,81,22,25, |
0,14,37,1,43,53,0,43,53,0,0,0,255,255,0,5,254,87,3,252,5,240,18,38,0,92,0, |
0,17,7,2,145,0,183,0,0,0,19,64,11,1,32,17,38,1,10,37,45,17,31,37,1,43,53, |
0,43,53,0,0,0,0,1,0,142,254,104,3,221,4,58,0,11,0,125,64,89,9,73,15,10,79, |
10,2,38,10,10,0,7,70,64,15,4,79,4,2,57,47,4,111,4,143,4,255,4,4,191,4,1,143, |
4,159,4,255,4,3,4,13,128,3,70,192,0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176, |
13,192,13,208,13,3,176,13,240,13,2,112,13,160,13,176,13,192,13,4,9,5,1,15, |
8,3,80,0,0,47,237,51,63,51,47,1,93,113,114,47,94,93,113,237,26,16,220,93, |
113,114,94,93,26,237,18,57,47,94,93,237,49,48,51,17,51,17,33,17,51,17,33, |
17,35,17,142,180,1,231,180,254,170,163,4,58,252,73,3,183,251,198,254,104, |
1,152,0,0,1,0,168,0,1,3,186,7,28,0,7,0,55,64,37,5,90,0,6,16,6,64,6,3,6,3, |
70,255,0,1,0,0,16,0,64,0,128,0,176,0,208,0,6,7,0,4,95,1,7,3,5,18,0,63,63, |
51,237,1,47,94,93,93,237,47,93,237,49,48,1,17,51,17,33,17,35,17,3,6,180,253, |
173,191,5,129,1,155,253,201,251,28,5,128,0,0,0,0,1,0,142,0,0,3,10,5,204,0, |
7,0,56,64,36,6,73,16,3,48,3,2,3,3,9,0,70,192,1,1,0,1,16,1,48,1,224,1,240, |
1,5,8,1,4,0,7,80,2,15,0,21,0,63,63,237,63,1,47,94,93,113,237,17,51,47,93, |
237,49,48,33,35,17,33,17,51,17,33,1,66,180,1,217,163,254,56,4,58,1,146,253, |
235,255,255,0,9,0,0,7,134,6,240,18,38,0,58,0,0,17,7,2,148,2,65,0,0,0,21,180, |
1,47,5,38,1,184,255,184,180,48,51,15,46,37,1,43,53,0,43,53,0,255,255,255, |
253,0,0,5,204,5,228,18,38,0,90,0,0,17,7,0,67,1,72,0,0,0,21,180,1,43,17,38, |
1,184,255,162,180,44,47,15,42,37,1,43,53,0,43,53,0,255,255,0,9,0,0,7,134, |
6,240,18,38,0,58,0,0,17,7,2,149,2,247,0,0,0,19,64,11,1,47,5,38,1,75,47,50, |
15,46,37,1,43,53,0,43,53,0,0,0,255,255,255,253,0,0,5,204,5,228,18,38,0,90, |
0,0,17,7,0,116,2,38,0,0,0,19,64,11,1,43,17,38,1,93,43,46,15,42,37,1,43,53, |
0,43,53,0,0,0,255,255,0,9,0,0,7,134,6,178,18,38,0,58,0,0,17,7,2,152,2,134, |
0,0,0,23,64,13,2,1,47,5,38,2,1,2,51,49,15,46,37,1,43,53,53,0,43,53,53,0,0, |
0,255,255,255,253,0,0,5,204,5,123,18,38,0,90,0,0,17,7,0,105,1,161,0,0,0,23, |
64,13,2,1,43,17,38,2,1,0,47,45,15,42,37,1,43,53,53,0,43,53,53,0,0,0,255,255, |
0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,148,1,34,0,0,0,21,180,1,9,5,38, |
1,184,255,181,180,10,13,4,8,37,1,43,53,0,43,53,0,255,255,0,5,254,87,3,252, |
5,228,18,38,0,92,0,0,17,6,0,67,105,0,0,21,180,1,32,17,38,1,184,255,167,180, |
33,36,17,31,37,1,43,53,0,43,53,0,0,0,0,1,0,0,1,195,4,114,2,76,0,3,0,43,64, |
30,2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38, |
43,72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,4,114,1,195,137,137, |
0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30,2,0,0,186,15,1,31,1,63,1,79,1,4,47, |
1,63,1,111,1,175,1,223,1,5,1,64,38,43,72,1,0,47,43,93,113,237,1,47,47,49, |
48,17,53,33,21,8,0,1,195,137,137,0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30, |
2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38,43, |
72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,8,0,1,195,137,137,0,255, |
255,255,225,254,78,4,138,255,169,16,38,0,66,0,229,16,7,0,66,0,0,0,190,0,1, |
0,127,3,184,1,72,5,129,0,12,0,47,64,16,4,32,11,17,72,7,64,11,17,72,7,12,150, |
10,151,0,184,255,192,64,10,8,11,72,0,10,156,0,169,7,3,0,63,244,237,1,47,43, |
237,237,50,43,49,48,43,19,53,52,62,2,55,51,14,1,21,51,21,127,10,20,30,20, |
121,45,50,89,3,184,146,52,86,75,66,32,65,132,65,195,0,0,0,1,0,127,3,184,1, |
72,5,129,0,12,0,52,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255,192, |
180,11,17,72,6,11,184,255,192,64,10,8,11,72,11,10,156,5,169,11,3,0,63,228, |
237,1,47,43,51,43,253,237,49,48,43,1,20,14,2,7,35,62,1,53,35,53,51,1,72,9, |
20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,63,197,0,1,0,127,254, |
250,1,72,0,195,0,12,0,51,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255, |
192,180,11,17,72,6,11,184,255,192,64,9,8,11,72,11,5,169,11,156,10,0,47,253, |
228,1,47,43,51,43,253,237,49,48,43,37,20,14,2,7,35,62,1,53,35,53,51,1,72, |
9,20,29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,0,0,0,1,0,126, |
3,184,1,71,5,129,0,12,0,47,64,16,8,32,11,17,72,5,64,11,17,72,5,1,150,2,151, |
11,184,255,192,64,10,8,11,72,11,5,169,2,156,12,3,0,63,237,228,1,47,43,237, |
237,50,43,49,48,43,1,21,35,20,22,23,35,46,3,61,1,1,65,88,49,45,123,20,29, |
20,9,5,129,197,63,132,65,32,66,75,86,53,145,0,0,0,2,0,75,3,184,2,95,5,129, |
0,12,0,25,0,89,64,58,17,32,11,17,72,4,32,11,17,72,20,64,11,17,72,20,25,150, |
13,7,64,11,17,72,7,12,150,10,151,128,0,1,15,0,31,0,2,8,0,23,151,13,159,27, |
175,27,2,10,23,156,13,0,0,13,169,6,20,3,0,63,51,228,50,47,16,237,50,1,93, |
47,237,220,94,93,93,237,237,50,43,16,237,50,43,49,48,43,43,1,53,52,62,2,55, |
51,14,1,21,51,21,33,53,52,62,2,55,51,14,1,21,51,21,1,151,10,19,29,20,122, |
45,49,88,253,242,10,20,30,20,121,45,50,89,3,184,146,52,86,75,66,32,65,132, |
65,195,146,52,86,75,66,32,65,132,65,195,0,0,2,0,75,3,184,2,95,5,129,0,12, |
0,25,0,107,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22, |
151,13,150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31, |
11,2,8,11,19,184,255,192,64,24,11,17,72,19,63,24,1,24,159,27,175,27,2,10, |
23,156,24,5,5,18,169,11,24,3,0,63,51,228,50,47,16,237,50,1,93,47,93,51,43, |
220,94,93,93,50,43,253,237,16,253,237,49,48,43,43,1,20,14,2,7,35,62,1,53, |
35,53,51,5,20,14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194, |
254,181,9,20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,65,195,145, |
53,86,75,66,32,65,132,65,195,0,0,0,2,0,75,254,250,2,95,0,195,0,12,0,25,0, |
104,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22,151,13, |
150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31,11,2, |
8,11,19,184,255,192,64,21,11,17,72,19,24,159,27,175,27,2,5,5,18,169,24,11, |
11,24,156,10,23,0,47,51,237,50,47,16,228,50,47,1,93,47,51,43,220,94,93,93, |
50,43,253,237,16,253,237,49,48,43,43,37,20,14,2,7,35,62,1,53,35,53,51,5,20, |
14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194,254,181,9,20, |
29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,144,53,87,75,66,32, |
65,132,65,195,0,0,0,1,0,138,255,118,3,234,5,204,0,11,0,64,64,37,11,192,0, |
8,9,8,0,188,3,7,7,6,4,192,47,3,111,3,175,3,3,32,3,1,3,11,193,10,194,7,4,193, |
5,194,7,0,1,0,47,63,246,237,16,244,237,1,47,93,113,237,51,51,47,16,237,50, |
50,47,16,237,49,48,1,3,35,3,5,53,5,3,51,3,37,21,2,137,22,115,22,254,160,1, |
96,28,215,28,1,97,3,232,251,142,4,114,27,164,29,1,120,254,136,29,164,0,0, |
1,0,136,255,115,3,233,5,204,0,21,0,86,64,50,12,8,189,9,15,5,6,11,14,15,5, |
9,190,19,1,189,0,20,17,0,16,3,4,16,3,32,0,1,0,19,193,18,194,15,12,193,13, |
194,15,8,193,7,194,4,1,193,2,194,4,0,0,63,246,237,16,244,237,47,246,237,16, |
244,237,1,47,93,23,51,47,17,51,51,16,237,50,237,23,50,47,16,237,50,49,48, |
1,5,53,5,3,51,3,37,21,37,3,19,37,21,37,19,35,19,5,53,5,19,1,241,254,152,1, |
104,16,175,16,1,105,254,151,26,26,1,104,254,152,16,175,16,254,151,1,105,26, |
3,232,27,164,29,1,120,254,136,29,164,27,254,182,254,185,27,164,29,254,136, |
1,120,29,164,27,1,71,0,0,0,0,1,0,81,1,145,2,124,3,188,0,19,0,73,185,0,17, |
255,232,179,9,12,72,13,184,255,232,64,39,9,12,72,7,24,9,12,72,3,24,9,12,72, |
128,0,1,15,0,63,0,2,0,191,10,1,10,143,5,1,0,5,48,5,2,5,15,15,1,15,0,47,93, |
205,93,93,1,47,93,205,93,93,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52, |
62,2,51,50,30,2,2,124,45,76,102,58,57,99,75,43,43,75,99,57,58,102,76,45,2, |
170,58,102,77,44,44,77,102,58,57,100,74,43,43,74,100,0,0,0,3,1,22,0,0,6,234, |
0,219,0,3,0,7,0,11,0,86,64,61,7,150,4,4,0,11,150,0,8,48,8,96,8,128,8,144, |
8,160,8,208,8,240,8,8,0,8,48,8,64,8,96,8,144,8,192,8,208,8,240,8,8,8,8,3, |
150,47,0,191,0,2,16,0,1,0,5,1,9,155,4,0,8,0,47,51,51,237,50,50,1,47,93,93, |
237,47,94,93,113,237,18,57,47,237,49,48,33,53,51,21,33,53,51,21,33,53,51, |
21,6,40,194,252,183,192,252,181,195,219,219,219,219,219,219,0,0,7,0,55,255, |
245,7,200,5,141,0,3,0,23,0,43,0,63,0,83,0,103,0,123,3,217,64,12,118,0,134, |
0,2,121,2,137,2,2,3,102,184,255,224,64,14,8,12,72,96,24,8,12,72,92,24,8,12, |
72,86,184,255,224,179,8,12,72,62,184,255,232,64,14,8,12,72,56,24,8,12,72, |
52,24,8,12,72,46,184,255,224,179,8,12,72,22,184,255,224,64,14,8,12,72,16, |
24,8,12,72,12,24,8,12,72,6,184,255,224,64,13,8,12,72,74,180,59,181,49,0,1, |
2,3,1,184,255,240,64,131,3,16,118,3,1,9,1,25,1,121,1,3,9,1,3,1,3,19,49,180, |
102,64,1,38,64,182,64,198,64,214,64,4,64,64,19,114,180,99,181,89,180,105, |
104,1,22,104,38,104,2,201,104,249,104,2,139,104,1,118,104,1,89,104,1,70,104, |
1,41,104,1,27,104,1,233,104,1,150,104,198,104,2,121,104,1,107,104,1,86,104, |
1,57,104,1,6,104,22,104,38,104,3,10,104,24,180,9,181,34,180,9,19,25,19,41, |
19,73,19,89,19,121,19,137,19,153,19,8,34,19,64,45,49,72,19,184,255,192,64, |
255,19,23,72,19,217,125,1,198,125,1,169,125,1,155,125,1,121,125,1,107,125, |
1,93,125,1,73,125,1,59,125,1,45,125,1,9,125,25,125,2,251,125,1,237,125,1, |
217,125,1,203,125,1,189,125,1,155,125,1,125,125,141,125,2,105,125,1,91,125, |
1,77,125,1,54,125,1,41,125,1,11,125,27,125,2,204,233,125,249,125,2,214,125, |
1,187,125,1,173,125,1,137,125,153,125,2,123,125,1,102,125,1,75,125,1,61,125, |
1,9,125,1,219,125,251,125,2,205,125,1,153,125,169,125,2,107,125,139,125,2, |
93,125,1,57,125,1,43,125,1,29,125,1,9,125,1,237,125,253,125,2,185,125,201, |
125,217,125,3,123,125,171,125,2,89,125,1,11,125,59,125,75,125,3,155,249,125, |
1,235,125,1,214,125,1,187,125,1,153,125,1,123,125,139,125,2,102,125,1,59, |
125,75,125,2,9,125,25,125,2,246,125,1,217,125,1,205,125,1,169,125,185,125, |
2,155,125,1,105,125,121,125,2,93,125,1,57,125,73,125,2,43,125,1,22,125,1, |
249,125,1,237,125,1,201,125,64,249,1,187,125,1,153,125,1,123,125,1,102,125, |
1,73,125,1,54,125,1,9,125,25,125,2,105,249,125,1,235,125,1,221,125,1,169, |
125,1,150,125,1,121,125,1,107,125,1,73,125,1,59,125,1,25,125,1,11,125,1,253, |
125,1,217,125,1,203,125,1,169,125,1,155,125,1,141,125,1,121,125,1,91,125, |
107,125,2,57,125,1,27,125,43,125,2,249,125,1,235,125,1,169,125,201,125,2, |
150,125,1,121,125,1,107,125,1,57,125,1,38,125,1,9,125,1,56,249,125,1,230, |
125,1,201,125,1,182,125,1,153,125,1,139,125,1,89,125,1,70,125,1,41,125,1, |
27,125,1,249,125,1,235,125,1,201,125,1,187,125,1,173,125,1,1,148,125,1,123, |
125,1,100,125,1,75,125,1,63,125,1,27,125,1,15,125,1,228,125,1,203,125,1,176, |
125,1,2,160,125,1,143,125,1,112,125,1,95,125,1,64,125,1,31,125,1,0,125,1, |
8,109,182,84,183,119,182,94,19,69,182,44,183,79,182,54,19,39,182,14,183,29, |
182,4,4,2,3,0,18,0,63,63,63,237,244,237,63,237,244,237,63,237,244,237,1,94, |
93,93,93,93,93,93,93,95,93,93,93,113,113,113,113,113,113,113,95,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113, |
113,113,113,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,113,113, |
113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,47,43,43,94,93,237,244,237,47,94,93,93,93,93,93,93,93,113,113,113,113, |
113,113,113,114,114,253,244,237,18,57,47,93,113,237,17,57,57,47,47,94,93, |
93,56,56,17,51,17,51,16,244,237,49,48,0,43,43,43,43,43,43,43,43,43,43,43, |
43,1,95,93,93,33,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2,53,52,62,2,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2,35,34,46,2,53, |
52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2, |
35,34,46,2,53,52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,48,155, |
3,154,157,252,152,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19, |
37,55,35,38,58,39,19,20,39,56,37,34,54,39,21,2,30,60,107,80,46,46,81,108, |
62,63,108,80,46,46,81,110,210,19,37,55,35,38,58,39,19,20,39,56,37,34,54,39, |
21,1,253,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19,37,55,35, |
38,58,39,19,20,39,56,37,34,54,39,21,5,129,12,33,83,139,106,102,140,86,38, |
37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71,97,59,26,26, |
59,97,254,239,33,83,139,106,102,140,86,38,37,86,140,103,106,139,83,33,254, |
151,73,98,58,24,24,59,97,73,71,97,59,26,26,59,97,1,176,33,83,139,106,102, |
140,86,38,37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71, |
97,59,26,26,59,97,0,0,0,0,1,0,85,3,122,1,89,5,129,0,3,0,40,64,25,3,16,10, |
13,72,1,16,10,13,72,1,150,31,2,47,2,2,2,48,0,1,0,0,1,3,0,63,205,1,47,93,221, |
93,237,49,48,43,43,27,1,51,3,85,64,196,158,3,122,2,7,253,249,255,255,0,85, |
3,122,2,175,5,129,16,38,2,14,0,0,17,7,2,14,1,86,0,0,0,9,180,1,96,4,1,4,17, |
93,53,0,0,1,0,88,0,141,2,81,3,172,0,8,0,72,64,55,106,3,122,3,138,3,3,106, |
0,122,0,138,0,3,7,236,6,235,5,236,31,1,79,1,95,1,127,1,143,1,5,48,1,64,1, |
96,1,112,1,160,1,5,1,0,239,15,3,47,3,111,3,127,3,4,3,0,47,93,228,1,47,93, |
113,237,237,237,49,48,93,93,37,1,53,1,51,21,9,1,21,1,168,254,176,1,80,167, |
254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,0,0,0,1,0,89,0,141, |
2,82,3,172,0,8,0,66,64,48,101,6,117,6,133,6,3,101,0,117,0,133,0,3,4,236,1, |
236,8,235,112,3,128,3,176,3,3,208,3,1,111,3,127,3,2,3,0,239,15,6,47,6,111, |
6,127,6,4,6,0,47,93,228,1,47,93,93,113,253,237,237,49,48,93,93,37,35,53,9, |
1,53,51,1,21,1,1,168,1,82,254,176,166,1,81,141,29,1,111,1,116,31,254,141, |
63,0,0,0,255,255,0,185,0,0,3,71,5,129,16,38,0,4,0,0,17,7,0,4,1,200,0,0,0, |
22,64,12,3,2,47,8,1,8,1,0,47,0,1,0,17,93,53,53,17,93,53,53,0,1,255,192,5, |
223,2,235,6,84,0,3,0,13,179,1,0,2,1,0,47,205,1,47,47,49,48,1,33,53,33,2,235, |
252,213,3,43,5,223,117,0,1,254,96,0,0,2,98,5,129,0,3,0,45,182,3,16,111,3, |
1,3,1,184,255,240,64,18,239,1,1,1,64,13,18,72,1,64,8,11,72,1,2,3,0,18,0,63, |
63,1,47,43,43,93,56,47,93,56,49,48,33,35,1,51,254,244,148,3,113,145,5,129, |
0,0,1,0,101,2,7,2,131,4,157,0,33,0,111,185,0,30,255,216,64,30,9,17,72,23, |
10,224,36,11,1,11,33,224,36,0,212,0,228,0,3,0,23,6,228,11,139,0,251,0,2,0, |
184,255,192,64,38,10,13,72,4,0,1,0,29,17,17,75,29,91,29,2,29,64,21,25,72, |
29,64,16,19,72,47,29,63,29,2,27,29,1,15,29,1,2,29,0,47,95,93,93,93,43,43, |
93,51,47,16,204,93,43,93,50,237,50,1,47,93,237,47,93,237,50,49,48,0,43,1, |
17,52,46,2,35,34,6,21,17,35,17,52,46,2,53,51,20,30,2,21,51,62,3,51,50,22, |
21,17,2,2,13,29,47,35,72,85,128,1,1,2,119,2,2,2,2,15,38,49,64,42,110,97,2, |
7,1,142,46,61,37,16,100,94,254,148,1,255,20,46,40,29,4,3,27,34,35,12,28,46, |
32,17,108,121,254,79,0,0,0,1,0,4,0,0,4,46,5,129,0,17,0,106,64,69,7,3,7,3, |
10,0,16,32,16,2,16,16,48,16,80,16,112,16,144,16,224,16,6,16,5,1,9,92,14,12, |
10,8,12,81,5,31,13,1,0,13,1,13,4,95,15,1,31,1,63,1,79,1,4,63,1,1,15,1,1,8, |
1,1,9,0,95,15,3,9,18,0,63,63,237,18,57,47,94,93,93,113,237,220,93,113,50, |
237,50,1,47,51,51,237,50,50,47,93,113,18,57,57,47,47,49,48,1,17,33,21,33, |
21,33,21,33,17,35,17,35,53,51,17,33,21,1,103,2,175,253,81,1,146,254,110,180, |
175,175,3,123,4,230,254,36,157,213,129,254,233,1,23,129,3,233,155,0,1,0,58, |
0,0,4,80,5,150,0,58,0,221,64,81,133,58,149,58,2,21,22,37,22,53,22,3,40,44, |
0,48,17,13,6,30,111,29,29,0,52,110,6,43,39,48,110,18,14,10,10,0,79,6,95,6, |
111,6,3,6,58,111,0,0,32,0,2,0,0,32,0,48,0,80,0,112,0,144,0,176,0,208,0,8, |
0,0,16,0,48,0,192,0,224,0,5,8,0,184,255,192,64,70,14,18,72,0,42,16,81,17, |
46,12,81,43,175,13,1,13,64,42,45,72,0,13,16,13,32,13,3,13,39,111,17,1,47, |
17,95,17,111,17,143,17,159,17,223,17,239,17,7,17,17,52,35,115,41,30,1,30, |
24,7,7,52,116,37,58,1,23,58,1,58,6,24,0,63,51,93,93,237,50,63,51,93,237,18, |
57,47,93,113,51,222,93,43,93,50,237,50,16,237,50,1,47,43,94,93,113,114,237, |
47,93,18,57,47,51,51,237,50,50,16,237,17,57,47,237,17,51,51,17,18,57,57,49, |
48,0,93,93,1,14,3,35,33,53,62,1,61,1,35,53,51,53,35,53,51,53,52,62,2,51,50, |
30,2,23,7,46,3,35,34,6,29,1,33,21,33,21,33,21,33,21,20,14,2,7,33,50,62,2, |
55,4,80,9,57,89,115,67,253,70,89,86,186,186,186,186,48,99,152,103,70,123, |
99,71,18,174,10,39,53,65,36,114,112,1,152,254,104,1,152,254,104,22,44,63, |
40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160,121,25,129,140,129,130, |
92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,138,129,140,129,7,56,106, |
92,71,21,19,42,67,48,0,0,0,0,4,0,158,255,236,8,103,5,129,0,14,0,23,0,47,0, |
98,1,193,64,71,134,2,1,117,91,133,91,2,91,73,107,73,139,73,3,143,68,1,109, |
68,1,91,68,1,105,82,1,105,80,1,125,22,1,91,22,107,22,2,125,17,141,17,2,91, |
17,107,17,2,84,57,100,57,2,54,57,70,57,2,37,97,53,97,69,97,3,76,32,9,14,72, |
49,184,255,224,64,94,9,14,72,29,32,12,17,72,13,29,29,29,45,29,3,82,73,81, |
81,48,72,65,0,70,15,24,39,75,37,41,72,30,34,32,30,57,73,15,56,1,102,56,1, |
56,56,89,72,75,95,15,1,63,75,95,75,239,75,3,75,64,27,39,72,239,30,1,31,30, |
95,30,127,30,3,15,30,75,75,30,15,3,8,64,65,80,65,96,65,3,127,65,143,65,2, |
65,184,255,192,64,16,7,12,72,65,20,7,70,0,8,16,8,32,8,3,8,100,184,255,192, |
179,91,95,72,100,184,255,192,179,80,88,72,100,184,255,192,179,70,74,72,100, |
184,255,192,179,59,62,72,100,184,255,192,179,48,53,72,100,184,255,192,64, |
11,27,31,72,79,100,95,100,111,100,3,100,184,255,192,179,7,10,72,89,184,255, |
248,64,71,19,22,72,65,8,19,22,72,89,65,78,60,80,57,51,22,44,80,27,22,6,95, |
20,87,80,121,82,1,72,82,88,82,104,82,3,82,78,40,32,80,33,78,37,33,35,35,33, |
127,33,143,33,2,175,20,1,20,64,9,17,72,20,33,20,33,8,19,95,9,3,8,18,0,63, |
63,237,18,57,57,47,47,43,93,93,17,51,47,17,51,51,16,237,50,47,51,93,93,237, |
16,237,63,237,63,51,237,18,57,57,43,43,1,43,93,43,43,43,43,43,43,47,93,237, |
50,47,43,93,113,18,23,57,47,47,47,93,113,43,93,93,16,237,51,47,93,113,237, |
17,51,51,16,237,50,17,57,57,16,237,16,237,50,47,237,49,48,93,43,43,43,93, |
0,93,93,1,93,93,93,93,0,93,93,93,93,93,1,93,0,93,1,93,1,20,14,2,43,1,17,35, |
17,33,50,30,2,7,52,38,43,1,17,51,50,54,1,14,1,35,34,38,53,17,35,53,51,55, |
51,21,51,21,35,17,20,22,51,50,54,55,37,20,6,35,34,46,2,39,55,30,1,51,50,62, |
2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,21,20,30,2,23,30,3, |
3,186,61,121,182,121,130,181,1,43,125,186,124,62,182,164,164,105,113,165, |
155,2,123,35,74,48,105,93,104,111,53,110,157,157,41,55,23,40,26,2,232,183, |
170,75,121,92,61,15,159,17,99,88,40,68,49,27,34,62,87,52,49,96,77,47,168, |
161,141,165,22,161,6,31,45,54,30,155,32,57,80,48,48,100,82,52,3,217,92,159, |
117,68,253,219,5,129,61,111,157,97,134,139,253,212,146,252,186,11,13,123, |
122,1,197,131,242,242,131,254,98,78,73,8,6,98,120,129,24,54,88,64,26,61,58, |
10,25,40,30,30,41,29,23,13,12,32,53,79,59,112,119,105,116,17,28,38,24,10, |
85,25,36,28,22,11,11,31,54,87,0,1,0,16,255,236,4,86,5,150,0,61,0,232,185, |
0,2,255,235,64,68,15,73,106,38,1,58,43,74,43,122,43,138,43,4,36,59,52,59, |
68,59,116,59,132,59,5,46,55,55,4,57,45,51,110,20,24,15,14,26,15,3,20,37,110, |
36,36,3,110,64,4,96,4,128,4,160,4,176,4,5,0,4,144,4,176,4,208,4,4,4,184,255, |
192,64,94,24,27,72,4,48,24,81,25,57,15,81,54,15,16,31,16,127,16,143,16,159, |
16,5,16,64,39,47,72,0,16,16,16,128,16,3,16,45,47,25,63,25,127,25,3,47,25, |
63,25,175,25,207,25,4,47,25,175,25,2,25,25,0,40,115,216,37,1,124,37,140,37, |
2,26,37,42,37,2,37,31,7,0,115,115,3,131,3,2,21,3,37,3,2,3,9,25,0,63,51,93, |
93,237,63,51,93,93,93,237,18,57,47,93,113,114,51,220,93,43,113,50,237,50, |
16,237,50,1,47,43,93,113,237,51,47,237,47,23,51,47,196,16,237,50,50,17,57, |
47,196,49,48,0,93,93,93,43,37,50,54,55,23,14,3,35,34,46,2,39,35,55,51,46, |
1,53,52,54,55,35,55,51,62,3,51,50,30,2,23,7,46,1,35,34,14,2,7,33,7,33,14, |
1,21,20,22,23,33,7,33,30,3,2,179,100,120,14,185,13,63,103,147,97,120,177, |
121,69,13,171,40,120,1,2,2,1,160,40,129,15,73,123,173,115,97,147,103,63,13, |
185,14,121,106,68,106,79,50,11,1,190,40,254,99,2,1,2,2,1,196,40,254,108,9, |
42,77,114,126,100,91,14,68,118,87,50,77,139,192,114,129,8,46,24,27,53,6,127, |
122,189,130,67,50,87,118,68,14,91,100,39,87,137,99,127,16,47,23,22,37,19, |
129,81,138,100,57,0,0,0,0,4,0,69,255,244,6,208,5,140,0,19,0,23,0,43,0,79, |
0,192,64,14,118,20,134,20,2,121,22,137,22,2,133,47,1,66,184,255,232,64,9, |
8,11,72,60,24,8,11,72,17,184,255,232,179,8,11,72,13,184,255,232,64,29,8,11, |
72,7,24,8,11,72,3,24,8,11,72,22,23,20,21,74,180,73,73,52,180,53,178,63,23, |
16,21,184,255,240,64,62,21,23,21,23,0,44,180,63,64,10,14,72,63,34,180,10, |
178,0,180,0,24,16,24,32,24,80,24,96,24,208,24,224,24,240,24,8,24,38,52,1, |
52,49,182,58,184,77,182,74,68,4,23,3,20,18,29,182,15,184,39,182,5,19,0,63, |
237,244,237,63,63,63,51,237,244,237,51,93,1,47,93,253,244,237,47,43,237,18, |
57,57,47,47,56,56,16,244,237,51,47,237,17,51,17,51,49,48,0,43,43,43,43,43, |
43,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,20,30,2,51,50,54,55,23,14,3,35,34, |
46,2,53,52,62,2,51,50,30,2,23,7,46,1,35,34,6,6,208,51,87,116,66,66,115,85, |
49,48,86,117,68,66,115,85,50,251,59,155,3,154,157,149,22,43,63,40,42,64,44, |
22,23,43,63,41,39,63,44,24,250,155,20,47,75,54,69,94,11,141,6,45,77,111,72, |
94,132,82,38,59,97,124,65,68,106,76,48,9,143,10,83,75,108,87,1,178,125,171, |
105,45,45,104,171,126,133,174,103,41,41,103,174,253,201,5,129,252,49,99,131, |
78,32,33,78,131,98,95,128,79,34,34,79,128,2,124,75,124,90,50,82,87,9,54,99, |
76,45,69,121,164,96,130,173,103,42,40,70,94,55,11,72,85,164,0,2,0,19,255, |
236,2,126,5,149,0,39,0,55,0,185,64,9,138,32,1,53,40,14,17,72,26,184,255,232, |
179,8,16,72,22,184,255,232,64,67,8,16,72,8,32,8,16,72,6,32,11,16,72,5,27, |
21,27,2,5,21,21,21,2,3,4,4,29,16,40,32,40,2,96,40,112,40,128,40,192,40,4, |
15,40,1,40,40,4,51,20,51,2,8,51,159,35,1,35,18,14,192,10,208,10,224,10,3, |
10,184,255,192,179,34,38,72,10,184,255,192,64,26,7,11,72,10,79,57,1,18,51, |
45,15,11,34,24,14,14,7,45,24,3,3,7,24,7,0,7,0,47,205,63,18,57,47,16,205,17, |
57,47,18,57,57,205,17,57,57,1,93,47,43,43,93,198,51,205,93,50,0,94,93,1,51, |
47,93,93,113,205,50,47,51,49,48,0,93,93,43,43,43,43,1,43,93,37,50,54,55,51, |
14,1,35,34,38,61,1,14,1,7,53,62,1,55,17,52,62,2,51,50,30,2,21,20,14,2,7,21, |
20,30,2,19,52,46,2,35,34,14,2,21,17,62,3,1,177,51,68,17,69,20,120,109,111, |
127,32,66,34,35,66,31,25,59,98,72,52,79,53,27,44,79,110,66,19,32,42,115,14, |
27,40,26,32,39,22,8,49,77,54,28,78,104,109,154,157,159,155,175,17,28,13,73, |
14,29,16,2,75,59,108,83,49,42,78,111,69,99,180,152,118,38,244,57,83,54,26, |
4,20,52,85,61,33,36,61,81,46,254,5,33,104,131,151,0,0,0,0,4,0,188,0,0,8,46, |
5,129,0,19,0,35,0,55,0,59,0,244,64,124,141,0,1,0,24,13,16,72,61,0,1,25,0, |
1,132,10,1,114,10,1,69,10,85,10,101,10,3,22,10,38,10,2,5,33,21,33,37,33,3, |
4,29,20,29,2,11,24,27,24,2,11,22,27,22,2,47,61,1,58,20,73,36,19,73,16,0,16, |
57,46,73,26,144,16,160,16,192,16,3,31,26,1,16,26,16,26,8,144,36,160,36,176, |
36,3,47,36,1,0,36,1,36,10,1,7,73,48,8,64,8,80,8,3,0,8,16,8,32,8,144,8,4,8, |
41,31,15,1,184,255,192,179,29,36,72,1,184,255,192,64,15,18,21,72,1,17,9,3, |
51,23,192,57,208,57,2,57,184,255,192,64,21,35,44,72,57,56,11,64,29,36,72, |
11,64,18,21,72,0,11,56,3,8,18,0,63,23,51,43,43,47,221,43,93,222,205,63,51, |
51,43,43,63,205,1,47,93,113,237,50,50,47,93,93,93,18,57,57,47,47,93,93,16, |
237,51,17,51,16,237,16,237,50,93,49,48,0,93,93,93,93,1,93,93,93,93,93,93, |
43,93,33,1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,1,20,6,35,34, |
38,53,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,53, |
33,21,4,38,253,48,1,2,1,2,160,202,2,216,2,2,2,2,162,3,54,176,175,168,177, |
43,87,131,88,93,131,84,39,159,24,47,69,45,46,71,48,25,26,48,67,41,46,72,50, |
25,254,16,2,123,4,166,44,44,38,89,39,252,88,5,129,251,82,40,46,39,98,51,3, |
156,250,127,2,178,188,203,201,190,91,145,101,53,53,100,145,92,81,107,64,26, |
27,64,107,80,82,108,63,26,26,63,108,253,160,146,146,0,0,0,0,2,0,188,2,122, |
7,25,5,129,0,39,0,47,0,148,64,9,9,24,19,23,72,136,9,1,8,184,255,232,64,16, |
19,23,72,89,8,105,8,121,8,3,37,24,13,17,72,24,184,255,240,64,73,12,17,72, |
44,41,196,42,24,21,196,64,22,224,22,2,22,22,0,64,47,1,47,0,42,16,42,64,42, |
80,42,4,42,39,196,37,111,0,175,0,207,0,223,0,239,0,5,0,40,44,202,0,9,22,29, |
4,0,42,32,42,80,42,128,42,4,42,2,15,23,37,15,3,45,3,0,63,23,51,17,51,204, |
93,23,50,237,50,1,47,93,51,237,47,93,204,93,18,57,47,93,237,50,16,253,204, |
49,48,43,43,93,43,93,43,1,17,53,6,7,14,1,7,3,35,3,46,1,39,38,39,6,21,6,20, |
21,17,35,17,51,19,30,1,31,1,54,55,62,3,53,19,51,17,1,17,35,17,35,53,33,21, |
6,155,5,4,4,5,2,230,108,163,2,24,14,17,20,1,1,128,190,223,2,5,2,6,20,16,7, |
13,11,7,168,184,251,40,134,255,2,138,2,122,1,169,194,11,11,9,18,5,253,203, |
1,157,5,64,38,44,55,10,10,8,18,6,253,201,3,7,253,205,4,13,7,18,51,41,18,34, |
28,18,2,1,157,252,249,2,152,253,104,2,152,111,111,0,0,0,0,1,0,108,0,0,5,184, |
5,150,0,57,0,221,64,95,101,36,1,101,22,1,157,49,1,143,49,1,49,16,11,15,72, |
157,9,1,143,9,1,9,16,11,15,72,116,3,132,3,2,54,3,1,54,2,118,2,2,54,56,118, |
56,2,116,55,132,55,2,54,55,1,42,26,1,42,32,1,41,53,48,40,10,18,32,40,96,40, |
112,40,144,40,4,47,18,111,18,127,18,159,18,4,40,18,40,18,24,34,91,16,53,1, |
53,184,255,192,64,65,23,29,72,191,53,207,53,2,0,53,48,53,2,53,17,5,91,31, |
24,63,24,79,24,143,24,191,24,207,24,223,24,7,111,24,127,24,159,24,239,24, |
255,24,5,0,24,48,24,2,8,24,10,15,19,39,48,5,42,95,18,41,18,29,95,0,4,0,63, |
237,63,51,237,23,50,1,47,94,93,93,113,253,196,47,93,93,43,114,237,17,57,57, |
47,47,93,93,17,51,17,51,16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43, |
93,93,93,93,1,50,30,2,21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46, |
2,35,34,14,2,21,20,30,2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,3,18, |
151,241,168,90,59,109,157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116, |
169,108,109,170,116,61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109, |
59,90,168,241,5,150,86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51, |
126,143,159,85,116,181,124,65,65,124,181,116,85,159,143,126,51,224,156,4, |
2,3,2,54,138,167,191,106,147,234,162,86,0,0,0,2,0,88,255,222,4,124,4,72,0, |
32,0,45,0,82,64,50,90,13,1,28,15,64,160,33,176,33,2,95,33,1,80,33,96,33,112, |
33,3,33,47,128,32,47,1,45,208,17,1,17,5,16,45,45,22,39,10,16,22,21,27,1,6, |
27,1,27,0,22,0,63,50,93,93,205,63,205,18,57,47,205,1,47,205,93,50,93,26,16, |
220,93,113,113,26,205,50,49,48,93,5,34,46,2,53,52,62,2,51,50,30,2,21,33,17, |
30,3,51,50,62,2,55,23,14,3,19,17,46,3,35,34,14,2,7,17,2,107,130,198,134,69, |
95,152,189,95,112,194,142,81,252,197,22,64,78,88,46,75,116,93,76,35,72,36, |
84,109,143,203,19,59,77,92,53,51,87,74,60,24,34,93,157,204,111,147,213,139, |
66,79,146,210,130,254,156,24,45,35,20,31,60,87,56,42,57,100,76,44,2,138,1, |
21,20,42,34,22,19,32,42,24,254,234,0,0,0,255,255,0,80,255,246,6,78,5,129, |
16,38,0,121,0,0,16,39,2,20,2,249,0,0,17,7,2,144,3,204,253,206,0,63,64,40, |
4,3,2,111,15,1,47,15,1,15,1,191,12,1,128,12,1,112,12,1,96,12,1,64,12,1,16, |
12,1,12,98,64,11,11,72,4,3,2,60,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93, |
53,17,93,93,53,53,53,0,0,0,255,255,0,61,255,246,6,78,5,141,16,39,2,20,2,249, |
0,0,16,39,2,144,3,204,253,206,17,6,0,115,34,0,0,63,64,40,1,3,2,111,49,1,47, |
49,1,49,0,191,1,1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,141,64,11,11,72, |
1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53, |
0,0,0,255,255,0,93,255,246,6,78,5,129,16,39,2,20,2,249,0,0,16,39,2,144,3, |
204,253,206,17,6,2,142,40,0,0,63,64,40,1,3,2,111,49,1,47,49,1,49,0,191,1, |
1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,126,64,11,11,72,1,3,2,49,24,0,63, |
53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53,0,0,0,255,255,0,145, |
255,246,6,78,5,129,16,39,2,20,2,189,0,0,16,39,2,144,3,204,253,206,17,6,2, |
143,102,0,0,47,64,28,1,3,2,111,49,1,47,49,1,49,0,191,1,1,128,1,1,1,102,64, |
11,11,72,1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,53,17,93,93,53,53,53,0,0, |
0,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3,128,16,7,17,16,0,47, |
205,1,47,205,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51,14, |
1,7,33,21,2,129,29,59,31,72,58,130,82,82,130,58,72,31,59,29,3,221,1,41,34, |
98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1,16,255,195,2,240,4,127, |
0,17,0,26,64,10,15,64,0,0,15,12,3,17,128,7,0,47,26,205,204,50,57,57,1,47, |
26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,35,1,213,34,98, |
65,68,112,42,36,42,112,68,65,98,34,86,3,160,29,59,31,72,58,130,82,82,130, |
58,72,31,59,29,252,35,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3, |
128,7,17,16,17,0,47,205,1,47,221,26,204,50,57,57,49,48,1,46,1,39,51,30,1, |
23,21,14,1,7,35,62,1,55,33,53,5,127,29,59,31,72,58,130,82,82,130,58,72,31, |
59,29,252,35,1,127,34,98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1, |
16,255,195,2,240,4,127,0,17,0,26,64,10,17,64,16,15,0,3,12,128,8,16,0,47,221, |
26,204,50,57,57,1,47,26,205,49,48,37,62,1,55,21,14,1,7,35,46,1,39,53,30,1, |
23,17,51,2,43,34,98,65,68,112,42,36,42,112,68,65,98,34,86,162,29,59,31,72, |
58,130,82,82,130,58,72,31,59,29,3,221,0,0,1,1,162,0,100,6,94,2,68,0,31,0, |
36,64,15,16,31,28,19,128,23,64,15,0,3,12,128,8,0,15,0,47,205,1,47,26,204, |
50,57,57,26,221,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51, |
14,1,7,33,46,1,39,51,30,1,23,21,14,1,7,35,62,1,55,2,129,29,59,31,72,58,130, |
82,82,130,58,72,31,59,29,2,254,29,59,31,72,58,130,82,82,130,58,72,31,59,29, |
1,41,34,98,65,68,112,42,36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112, |
68,65,98,34,0,0,0,1,1,16,255,195,2,240,4,127,0,31,0,38,64,16,15,64,0,31,16, |
19,28,128,24,64,0,15,12,3,128,7,0,47,26,204,50,57,57,26,221,26,204,50,57, |
57,1,47,26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,213,34,98,65,68,112,42,36,42,112,68,65, |
98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,3,160,29,59,31,72,58,130,82, |
82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82,130,58,72,31,59,29,0, |
2,1,16,255,72,2,240,4,127,0,3,0,35,0,40,64,17,1,19,0,4,35,20,23,32,28,3,0, |
28,4,19,16,7,11,0,47,204,50,57,57,221,222,205,16,204,50,57,57,1,47,51,205, |
50,49,48,5,33,21,33,19,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,16,1,224,254,32,197,34,98,65,68,112,42, |
36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,104,80,4,88, |
29,59,31,72,58,130,82,82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82, |
130,58,72,31,59,29,0,0,2,0,56,255,229,3,186,5,197,0,47,0,69,0,222,64,93,156, |
19,172,19,2,154,6,170,6,2,122,33,138,33,2,68,24,14,17,72,85,20,101,20,149, |
20,165,20,4,140,7,1,74,7,90,7,122,7,3,74,56,90,56,2,67,56,11,15,72,58,67, |
1,42,12,58,12,74,12,3,37,45,53,45,149,45,165,45,4,32,39,48,39,2,39,39,15, |
169,48,249,48,2,40,48,1,48,28,0,70,64,96,31,1,31,184,255,192,64,64,18,21, |
72,15,31,1,31,64,12,17,72,31,71,128,60,71,63,15,1,15,64,12,17,72,15,79,71, |
1,39,34,80,43,53,81,27,0,22,64,22,128,22,192,22,4,7,22,22,47,43,111,43,223, |
43,3,15,43,191,43,2,43,65,80,10,22,0,63,237,47,93,113,57,47,94,93,51,237, |
16,237,50,1,93,47,43,93,237,26,16,220,43,93,43,113,26,237,51,51,113,113,18, |
57,47,93,49,48,0,93,1,93,93,43,0,93,1,93,93,0,93,1,43,93,93,93,1,20,14,2, |
7,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,51,62,1,53,52,38,35,34,14,2,7, |
55,62,1,51,50,30,2,3,46,3,35,34,14,4,21,20,30,2,51,50,62,2,3,186,7,13,18, |
11,31,96,130,162,97,93,127,78,35,22,47,73,102,132,83,42,77,64,50,16,4,1,3, |
130,129,28,59,58,55,22,36,42,116,67,113,154,94,41,211,8,36,51,64,36,53,86, |
67,49,32,15,21,42,65,44,66,108,83,56,3,170,46,104,106,106,48,128,206,144, |
77,63,107,138,75,60,143,144,134,104,63,26,48,67,42,25,58,34,196,209,11,19, |
28,17,147,23,39,88,149,195,254,147,42,74,55,32,51,84,110,116,116,48,53,91, |
67,38,99,161,205,0,0,0,2,0,4,0,0,4,225,5,129,0,5,0,18,0,244,64,27,74,7,90, |
7,106,7,3,69,17,85,17,101,17,3,3,56,8,1,55,16,1,6,24,14,17,72,18,184,255, |
232,64,157,14,17,72,102,2,1,39,2,71,2,87,2,3,105,1,1,40,1,72,1,88,1,3,2,1, |
12,12,0,6,59,3,1,20,3,1,244,3,1,107,3,155,3,187,3,235,3,4,52,3,84,3,2,0,3, |
1,11,2,3,18,15,0,31,0,47,0,3,18,0,15,20,47,20,127,20,3,175,20,191,20,223, |
20,255,20,4,32,20,112,20,144,20,3,15,20,63,20,143,20,3,58,175,20,207,20,223, |
20,255,20,4,64,20,96,20,144,20,3,15,20,95,20,2,143,20,159,20,191,20,223,20, |
4,0,20,32,20,80,20,112,20,4,0,3,6,3,18,95,5,18,12,32,19,22,72,153,12,1,12, |
1,3,0,63,51,93,43,63,237,23,50,1,93,93,113,114,114,94,93,113,113,114,47,94, |
93,51,47,95,94,93,93,93,93,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93, |
43,43,93,93,95,93,93,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,5,2,5,217,1,254, |
251,35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12, |
141,156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,0,1,0,235,254,78,5,172,5, |
129,0,7,0,54,64,36,3,90,79,4,175,4,191,4,207,4,4,4,7,90,32,0,1,15,0,1,0,0, |
32,0,192,0,208,0,4,0,2,95,5,3,4,0,0,47,50,63,237,1,47,93,113,113,237,47,93, |
237,49,48,1,17,33,17,35,17,33,17,4,244,252,182,191,4,193,254,78,6,145,249, |
111,7,51,248,205,0,0,0,0,1,0,154,254,78,5,48,5,129,0,11,0,170,64,9,134,8, |
150,8,2,163,9,1,9,184,255,192,64,26,13,16,72,163,7,1,2,144,7,1,114,7,130, |
7,2,100,7,1,53,7,69,7,85,7,3,3,184,255,240,64,74,9,17,72,41,1,57,1,2,1,16, |
12,17,72,8,143,6,159,6,175,6,3,2,72,17,73,15,2,127,2,2,2,6,2,6,0,207,10,1, |
0,10,64,10,2,10,7,3,9,3,9,207,0,1,0,0,64,0,2,7,0,32,13,1,3,7,95,2,8,0,4,3, |
1,9,95,0,0,47,237,57,63,18,57,57,237,57,1,93,47,94,93,93,51,51,47,47,51,47, |
93,93,18,57,57,47,47,93,43,93,51,49,48,0,43,93,43,1,93,93,93,93,95,93,43, |
93,93,19,53,9,1,53,33,21,33,9,1,33,21,154,2,123,253,149,4,66,252,178,2,72, |
253,168,3,162,254,78,109,3,48,3,44,106,152,253,4,252,249,152,0,0,0,0,1,0, |
101,2,96,4,72,2,242,0,3,0,32,64,20,0,2,32,2,80,2,112,2,4,2,16,0,32,0,2,0, |
0,173,1,179,0,63,237,1,47,93,47,93,49,48,19,53,33,21,101,3,227,2,96,146,146, |
0,0,0,0,1,0,51,255,242,4,98,6,84,0,8,0,185,185,0,0,255,232,64,135,14,17,72, |
9,1,57,1,73,1,3,9,1,0,4,6,1,6,6,8,16,111,8,143,8,175,8,207,8,239,8,5,15,8, |
47,8,79,8,111,8,143,8,5,8,95,2,1,2,2,15,3,47,3,79,3,111,3,4,11,3,175,10,1, |
48,10,80,10,112,10,144,10,4,111,10,143,10,2,16,10,48,10,2,240,10,1,15,10, |
47,10,79,10,3,57,239,10,1,176,10,208,10,2,143,10,175,10,207,10,239,10,4,112, |
10,1,47,10,79,10,111,10,143,10,175,10,5,2,175,31,5,1,5,5,1,7,179,6,1,0,47, |
51,63,18,57,47,93,237,1,93,113,113,114,114,94,93,93,113,113,114,114,47,94, |
93,51,47,93,47,93,113,56,57,61,47,93,51,51,49,48,94,93,43,5,35,1,35,53,33, |
19,1,51,2,110,106,254,229,182,1,14,242,1,174,129,14,3,24,117,253,78,5,135, |
0,3,0,87,0,203,5,93,3,215,0,35,0,51,0,67,0,114,64,75,137,50,1,53,67,69,67, |
2,10,15,1,10,3,1,5,33,1,5,21,1,39,26,8,52,4,18,0,0,47,32,47,64,47,112,47, |
4,47,60,18,36,224,55,1,55,23,42,239,65,1,65,8,39,52,26,4,5,63,13,1,13,64, |
18,21,72,0,13,80,13,2,13,31,15,23,1,23,0,47,93,51,220,93,43,113,50,23,57, |
205,93,50,16,205,93,50,1,47,205,47,93,205,17,23,57,49,48,0,93,93,93,93,93, |
1,93,1,20,14,2,35,34,38,39,14,3,35,34,46,2,53,52,62,2,51,50,22,23,62,3,51, |
50,30,2,37,34,6,7,30,1,51,50,62,2,53,52,46,2,5,46,1,35,34,14,2,21,20,30,2, |
51,50,54,5,93,44,82,115,70,97,168,70,32,75,84,90,46,69,115,83,46,44,82,116, |
71,94,168,67,31,75,84,94,51,69,114,81,45,254,179,70,119,56,51,119,77,43,71, |
51,27,29,51,71,254,93,51,119,78,43,70,49,27,25,48,71,47,70,120,2,78,78,141, |
106,62,133,149,63,102,72,39,55,100,143,89,81,142,104,60,135,148,62,102,73, |
40,55,101,143,168,126,130,128,128,40,70,94,54,54,92,69,39,250,128,128,40, |
70,94,54,51,93,69,41,126,0,0,0,1,1,152,0,0,6,96,4,199,0,5,0,13,179,2,5,2, |
5,0,47,205,1,47,205,49,48,1,51,17,33,21,33,1,152,94,4,106,251,56,4,199,251, |
151,94,0,0,0,0,1,1,22,255,254,4,170,4,8,0,25,0,35,64,18,75,22,91,22,2,75, |
16,91,16,2,25,0,12,13,13,0,19,6,0,47,205,47,51,1,47,205,47,205,49,48,0,93, |
93,5,17,52,62,2,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21,17,1,22,68,122, |
167,98,99,169,123,70,103,53,95,130,78,78,130,94,52,2,2,0,116,192,138,76,76, |
138,192,116,254,0,2,2,98,155,108,57,56,108,156,100,254,0,0,0,1,255,158,254, |
78,2,148,5,227,0,35,2,3,64,30,10,34,26,34,42,34,3,5,16,21,16,37,16,3,9,3, |
218,37,1,201,37,1,154,37,170,37,186,37,3,37,184,1,0,64,162,225,228,72,76, |
37,1,0,47,37,63,37,2,9,37,1,220,37,64,211,217,72,37,64,205,209,72,134,37, |
1,25,37,41,37,57,37,3,11,37,1,251,37,1,233,37,1,37,64,188,191,72,107,37,123, |
37,139,37,3,93,37,1,75,37,1,41,37,57,37,2,27,37,1,9,37,1,249,37,1,37,128, |
170,177,72,109,37,1,37,128,164,168,72,9,37,1,163,37,128,156,162,72,189,37, |
1,121,37,153,37,169,37,3,75,37,91,37,107,37,3,37,192,140,147,72,155,37,171, |
37,187,37,3,125,37,141,37,2,107,37,1,93,37,1,38,37,54,37,70,37,3,228,37,1, |
214,37,1,180,37,196,37,2,6,37,1,112,37,184,255,192,64,110,119,122,72,37,64, |
101,107,72,219,37,1,118,37,166,37,2,9,37,25,37,41,37,3,233,37,1,37,64,79, |
82,72,37,128,74,78,72,25,37,41,37,2,11,37,1,251,37,1,217,37,233,37,2,171, |
37,187,37,203,37,3,153,37,1,37,128,60,63,72,41,37,57,37,73,37,3,11,37,27, |
37,2,55,233,37,249,37,2,187,37,203,37,219,37,3,141,37,157,37,173,37,3,123, |
37,1,109,37,1,1,95,37,1,37,184,255,128,179,39,43,72,37,184,255,192,64,13, |
34,38,72,144,37,160,37,2,2,16,37,1,37,184,255,192,64,46,28,31,72,223,37,1, |
96,37,112,37,160,37,176,37,192,37,5,15,37,31,37,47,37,3,7,32,22,144,22,2, |
22,22,31,70,12,47,4,159,4,2,4,4,32,12,1,12,184,255,192,64,15,16,19,72,12, |
25,80,64,18,128,18,2,18,7,80,0,0,47,237,47,93,237,1,47,43,93,51,47,93,16, |
237,50,47,93,94,93,93,93,43,113,95,113,43,43,114,95,114,114,114,114,114,94, |
93,93,43,93,93,93,93,113,113,43,43,113,114,114,114,43,43,94,93,93,93,93,113, |
113,113,113,113,43,114,114,114,43,94,93,43,93,43,93,113,113,113,113,113,113, |
43,113,113,114,114,114,43,43,94,93,93,95,93,43,93,93,93,49,48,0,95,94,93, |
93,19,34,38,39,53,30,1,51,50,62,2,53,3,52,62,2,51,50,22,23,21,46,1,35,34, |
14,2,21,17,20,14,2,36,36,75,23,20,62,35,51,66,39,16,2,50,90,125,75,34,75, |
22,18,61,36,51,66,39,16,50,89,124,254,78,11,8,147,8,16,37,64,84,48,4,188, |
94,134,86,40,9,9,148,10,17,40,65,84,44,251,66,94,134,86,41,0,0,0,2,0,56,1, |
80,4,44,3,244,0,33,0,67,1,31,64,26,36,16,12,16,72,2,16,12,16,72,65,24,11, |
17,72,66,48,9,17,72,61,48,9,17,72,42,184,255,208,179,9,17,72,48,184,255,208, |
64,19,9,17,72,31,24,9,17,72,32,48,9,17,72,26,48,9,17,72,13,184,255,232,179, |
13,17,72,14,184,255,208,179,9,13,72,8,184,255,208,179,14,17,72,8,184,255, |
208,64,41,9,12,72,63,16,28,48,28,80,28,3,0,28,16,28,64,28,96,28,128,28,160, |
28,240,28,7,28,45,11,64,12,17,72,11,47,69,1,59,173,64,45,184,255,192,180, |
35,60,72,45,34,184,255,192,179,23,28,72,34,184,255,192,64,27,16,20,72,34, |
128,62,64,41,60,72,62,40,173,143,49,1,32,49,48,49,2,49,15,25,173,64,11,184, |
255,192,180,39,60,72,11,0,184,255,192,179,23,28,72,0,184,255,192,64,29,16, |
20,72,0,128,28,64,41,60,72,28,6,173,15,15,207,15,2,15,64,23,28,72,15,64,11, |
19,72,15,0,47,43,43,93,237,196,43,26,221,43,43,196,43,26,237,16,220,93,93, |
237,196,43,26,221,43,43,196,43,26,237,1,93,47,43,51,47,93,113,51,49,48,0, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,1,34,38,39,46,1,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,34,38,39,46,1,35,34,14,2,7, |
53,62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,40,69,145,73,65,107,45,38, |
65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68, |
40,69,145,73,65,107,45,38,65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51, |
23,69,123,52,32,59,61,68,2,246,43,26,22,23,12,22,33,21,144,37,47,13,21,27, |
13,8,15,14,8,51,43,149,23,30,19,8,254,90,44,26,23,24,12,23,32,21,141,38,46, |
13,20,26,13,8,15,14,8,50,42,147,23,32,19,8,0,1,0,65,0,55,4,36,5,16,0,19,0, |
162,64,108,53,2,1,58,11,1,60,12,1,42,12,1,3,3,6,7,10,11,2,11,0,17,16,13,12, |
1,12,12,11,1,2,4,9,19,100,14,116,14,2,80,14,1,2,48,14,1,0,14,16,14,32,14, |
96,14,4,14,4,111,9,127,9,2,95,9,111,9,2,9,16,7,8,173,9,0,1,2,3,4,4,173,17, |
6,31,5,47,5,95,5,111,5,223,5,5,5,10,11,12,13,4,80,9,208,9,2,15,9,1,9,0,47, |
93,93,23,51,222,93,50,50,237,23,50,16,237,50,50,1,47,93,113,51,47,93,113, |
95,113,113,51,18,23,57,16,135,192,192,192,192,16,135,192,192,192,192,49,48, |
1,95,93,93,93,93,1,3,35,19,35,53,33,19,33,53,33,19,51,3,33,21,33,3,33,21, |
1,192,152,145,151,237,1,55,190,254,11,2,61,154,143,152,1,21,254,162,191,2, |
29,1,88,254,223,1,33,148,1,108,148,1,36,254,220,148,254,148,148,0,0,0,0,3, |
0,100,0,244,4,71,4,80,0,3,0,7,0,11,0,49,64,27,11,7,2,8,4,0,8,173,9,9,1,5, |
173,63,4,1,4,0,173,15,1,31,1,63,1,3,1,0,47,93,237,47,93,237,17,57,47,237, |
1,47,51,51,47,51,51,49,48,19,53,33,21,1,53,33,21,1,53,33,21,100,3,227,252, |
29,3,227,252,29,3,227,3,188,148,148,253,56,148,148,1,100,148,148,0,0,0,2, |
0,63,0,0,4,36,4,207,0,6,0,10,0,123,185,0,5,255,216,64,17,18,22,72,3,40,18, |
22,72,0,40,18,22,72,137,0,1,1,184,255,216,64,63,18,22,72,134,1,1,10,48,2, |
80,2,2,0,2,16,2,32,2,64,2,96,2,128,2,160,2,7,2,7,7,0,64,12,15,72,0,8,173, |
7,79,6,95,6,143,6,3,6,64,2,80,2,128,2,3,2,1,0,80,4,128,4,2,4,0,25,47,93,51, |
51,205,93,205,93,24,47,237,1,47,43,51,47,47,93,113,51,49,48,0,93,43,93,43, |
43,43,19,53,1,21,9,1,21,5,53,33,21,65,3,227,252,166,3,90,252,27,3,227,2,119, |
205,1,139,154,254,168,254,168,153,236,145,145,0,0,2,0,65,0,0,4,36,4,207,0, |
6,0,10,0,121,185,0,1,255,216,64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137, |
6,1,5,184,255,216,64,62,18,22,72,134,5,1,9,48,6,80,6,2,0,6,16,6,32,6,64,6, |
96,6,128,6,160,6,7,6,7,0,64,12,15,72,0,8,173,7,6,5,64,4,80,4,128,4,3,4,79, |
0,95,0,143,0,3,0,80,2,128,2,2,2,0,25,47,93,205,93,205,93,51,51,24,47,237, |
1,47,43,51,47,93,113,51,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21,1,53, |
33,21,65,3,90,252,166,3,227,252,29,3,227,236,153,1,88,1,88,154,254,117,205, |
253,137,145,145,0,0,0,0,2,0,157,0,0,4,55,4,129,0,4,0,9,0,35,64,18,105,9,121, |
9,2,105,7,121,7,2,6,4,5,0,2,8,5,0,0,47,205,47,205,1,47,205,221,205,49,48, |
0,93,93,51,17,9,1,17,37,33,17,9,1,157,1,205,1,205,252,182,2,250,254,131,254, |
131,2,123,2,6,253,250,253,133,82,2,6,1,170,254,86,0,0,0,0,1,0,100,0,180,4, |
71,2,242,0,5,0,19,183,5,170,0,2,0,4,173,1,0,47,237,47,1,47,47,237,49,48,55, |
17,33,21,33,17,100,3,227,252,174,180,2,62,146,254,84,0,0,0,1,2,34,253,154, |
3,210,6,170,0,23,0,29,182,4,32,8,11,72,9,0,184,1,0,180,1,19,12,6,1,0,47,47, |
205,205,1,47,237,204,49,48,43,1,35,17,52,55,54,51,50,22,21,20,6,35,34,39, |
46,1,39,38,35,34,7,6,21,2,181,147,84,82,128,63,75,51,37,30,13,8,26,20,33, |
16,36,9,6,253,154,7,86,196,123,123,63,48,40,52,10,4,24,22,39,39,35,105,0, |
0,0,1,1,5,253,154,2,181,6,170,0,28,0,32,185,0,4,255,224,180,8,11,72,12,2, |
184,1,0,180,28,24,17,7,0,0,47,47,205,205,1,47,253,204,49,48,43,1,51,17,20, |
7,14,1,35,34,46,2,53,52,62,2,51,50,23,30,1,23,22,51,50,55,54,53,2,34,147, |
90,40,103,62,30,50,37,20,14,23,31,18,33,26,5,21,15,31,16,37,8,7,6,170,248, |
168,205,125,56,54,16,29,39,24,20,34,24,14,16,2,23,20,37,41,31,106,0,0,0,1, |
255,246,2,37,5,181,2,182,0,3,0,22,180,3,5,0,4,0,184,1,2,177,1,252,0,63,237, |
17,1,51,17,51,49,48,3,53,33,21,10,5,191,2,37,145,145,0,0,1,1,216,253,147, |
2,105,7,72,0,3,0,24,187,0,2,1,0,0,3,1,6,180,4,3,254,0,250,0,63,63,1,16,246, |
237,49,48,1,51,17,35,1,216,145,145,7,72,246,75,0,0,0,1,2,141,253,147,5,181, |
2,182,0,5,0,34,178,2,7,3,186,1,0,0,0,1,6,179,6,5,254,3,184,1,2,177,0,252, |
0,63,237,63,1,16,246,237,17,51,49,48,1,33,21,33,17,35,2,141,3,40,253,105, |
145,2,182,145,251,110,0,0,0,1,255,246,253,147,3,30,2,182,0,5,0,34,187,0,2, |
1,0,0,5,1,6,181,6,0,6,4,254,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16,246, |
237,49,48,3,53,33,17,35,17,10,3,40,145,2,37,145,250,221,4,146,0,0,0,0,1,2, |
141,2,37,5,181,7,72,0,5,0,34,178,4,7,2,189,1,0,0,5,1,6,0,6,0,5,1,2,179,2, |
252,0,250,0,63,63,237,1,16,246,237,17,51,49,48,1,51,17,33,21,33,2,141,145, |
2,151,252,216,7,72,251,110,145,0,0,0,1,255,246,2,37,3,30,7,72,0,5,0,34,187, |
0,5,1,0,0,2,1,6,181,6,0,6,3,250,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16, |
244,237,49,48,3,53,33,17,51,17,10,2,151,145,2,37,145,4,146,250,221,0,0,0, |
0,1,2,141,253,147,5,181,7,72,0,7,0,39,179,4,9,5,1,186,1,0,0,0,1,6,179,8,7, |
254,5,184,1,2,179,2,252,0,250,0,63,63,237,63,1,16,246,237,50,17,51,49,48, |
1,51,17,33,21,33,17,35,2,141,145,2,151,253,105,145,7,72,251,110,145,251,110, |
0,1,255,246,253,147,3,30,7,72,0,7,0,39,177,7,4,186,1,0,0,2,1,6,183,8,0,8, |
6,254,3,250,7,184,1,2,177,2,252,0,63,237,63,63,17,1,51,16,244,237,51,49,48, |
3,53,33,17,51,17,35,17,10,2,151,145,145,2,37,145,4,146,246,75,4,146,0,0,1, |
255,246,253,147,5,181,2,182,0,7,0,40,178,3,9,4,186,1,0,0,7,1,6,182,8,0,8, |
6,254,4,0,184,1,2,177,1,252,0,63,237,50,63,17,1,51,16,246,237,17,51,49,48, |
3,53,33,21,33,17,35,17,10,5,191,253,105,145,2,37,145,145,251,110,4,146,0, |
1,255,246,2,37,5,181,7,72,0,7,0,40,178,7,9,5,186,1,0,0,2,1,6,182,8,0,8,3, |
250,5,0,184,1,2,177,1,252,0,63,237,51,63,17,1,51,16,244,237,17,51,49,48,3, |
53,33,17,51,17,33,21,10,2,151,145,2,151,2,37,145,4,146,251,110,145,0,1,255, |
246,253,147,5,181,7,72,0,11,0,51,179,7,13,5,8,187,1,0,0,2,0,11,1,6,64,9,12, |
0,12,10,254,3,250,8,11,184,1,2,178,5,2,252,0,63,51,237,50,63,63,17,1,51,16, |
246,50,237,50,17,51,49,48,3,53,33,17,51,17,33,21,33,17,35,17,10,2,151,145, |
2,151,253,105,145,2,37,145,4,146,251,110,145,251,110,4,146,0,0,0,2,255,246, |
1,113,5,181,3,106,0,3,0,7,0,37,183,3,7,7,9,0,4,8,4,184,1,2,178,5,253,0,184, |
1,2,177,1,251,0,63,237,63,237,17,1,51,50,17,51,17,51,49,48,3,53,33,21,1,53, |
33,21,10,5,191,250,65,5,191,2,217,145,145,254,152,145,145,0,2,1,217,253,147, |
3,210,7,72,0,3,0,7,0,42,65,9,0,5,1,0,0,4,1,7,0,8,0,1,1,0,0,0,1,4,182,8,7, |
3,254,4,0,250,0,63,50,63,51,1,16,246,237,16,244,237,49,48,1,51,17,35,1,51, |
17,35,1,217,145,145,1,104,145,145,7,72,246,75,9,181,246,75,0,0,0,1,2,141, |
253,147,5,181,3,106,0,9,0,49,181,2,6,6,11,7,3,186,1,0,0,0,1,6,179,10,9,254, |
7,184,1,2,178,4,253,3,184,1,2,177,0,251,0,63,237,63,237,63,1,16,246,237,50, |
17,51,17,51,49,48,1,33,21,33,21,33,21,33,17,35,2,141,3,40,253,105,2,151,253, |
105,145,3,106,145,215,145,252,34,0,0,1,1,217,253,147,5,181,2,182,0,9,0,51, |
178,1,11,6,191,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,178,10,2,6,184,1,2,180,9, |
252,4,8,254,0,63,51,63,237,50,1,16,244,237,16,246,237,17,51,49,48,1,21,33, |
17,35,17,35,17,35,17,5,181,254,29,145,215,145,2,182,145,251,110,4,146,251, |
110,5,35,0,0,0,0,2,1,217,253,147,5,181,3,106,0,5,0,11,0,63,180,2,8,8,13,9, |
65,11,1,0,0,6,1,7,0,12,0,3,1,0,0,0,1,4,0,12,0,9,1,2,181,6,253,11,5,254,3, |
184,1,2,177,0,251,0,63,237,63,51,63,237,1,16,246,237,16,244,237,17,51,17, |
51,49,48,1,33,21,33,17,35,1,33,21,33,17,35,1,217,3,220,252,181,145,1,104, |
2,116,254,29,145,3,106,145,250,186,4,111,145,252,34,0,0,1,255,246,253,147, |
3,30,3,106,0,9,0,49,177,9,6,186,1,0,0,3,1,6,183,10,4,0,0,10,8,254,3,184,1, |
2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63,17,1,51,17,51,16,244,237, |
51,49,48,3,53,33,53,33,53,33,17,35,17,10,2,151,253,105,3,40,145,1,113,145, |
215,145,250,41,3,222,0,0,0,1,255,246,253,147,3,210,2,182,0,9,0,52,65,9,0, |
6,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,183,10,0,10,4,8,254,6,0,184,1,2,177,1, |
252,0,63,237,50,63,51,17,1,51,16,244,237,16,246,237,49,48,3,53,33,17,35,17, |
35,17,35,17,10,3,220,145,215,145,2,37,145,250,221,4,146,251,110,4,146,0,0, |
0,0,2,255,246,253,147,3,210,3,106,0,5,0,11,0,63,180,4,9,9,12,11,65,11,1,0, |
0,8,1,4,0,12,0,0,1,0,0,3,1,7,0,12,0,9,1,2,181,10,253,2,7,254,4,184,1,2,177, |
5,251,0,63,237,63,51,63,237,1,16,244,237,16,246,237,17,51,17,51,49,48,1,17, |
35,17,33,53,1,35,17,33,53,33,3,210,145,252,181,2,116,145,254,29,2,116,3,106, |
250,41,5,70,145,250,41,3,222,145,0,0,1,2,141,1,113,5,181,7,72,0,9,0,49,181, |
4,8,8,11,2,6,189,1,0,0,9,1,6,0,10,0,9,1,2,178,6,253,5,184,1,2,179,2,251,0, |
250,0,63,63,237,63,237,1,16,246,237,50,17,51,17,51,49,48,1,51,17,33,21,33, |
21,33,21,33,2,141,145,2,151,253,105,2,151,252,216,7,72,252,34,145,215,145, |
0,0,1,1,217,2,37,5,181,7,72,0,9,0,52,178,4,11,2,65,11,1,0,0,9,1,7,0,10,0, |
8,1,0,0,5,1,4,0,10,0,5,1,2,181,2,8,252,0,6,250,0,63,51,63,51,237,1,16,246, |
237,16,244,237,17,51,49,48,1,51,17,33,21,33,17,51,17,51,3,65,145,1,227,252, |
36,145,215,7,72,251,110,145,5,35,251,110,0,0,0,2,1,217,1,113,5,181,7,72,0, |
5,0,11,0,63,180,10,4,4,13,8,65,11,1,0,0,11,1,7,0,12,0,2,1,0,0,5,1,4,0,12, |
0,11,1,2,178,8,251,5,184,1,2,180,2,253,6,0,250,0,63,50,63,237,63,237,1,16, |
246,237,16,244,237,17,51,17,51,49,48,1,51,17,33,21,33,1,51,17,33,21,33,1, |
217,145,3,75,252,36,1,104,145,1,227,253,140,7,72,250,186,145,5,215,252,34, |
145,0,0,1,255,246,1,113,3,30,7,72,0,9,0,50,188,0,9,1,0,0,6,0,2,1,6,183,10, |
4,0,0,10,7,250,3,184,1,2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63, |
17,1,51,17,51,16,244,50,237,49,48,3,53,33,53,33,53,33,17,51,17,10,2,151,253, |
105,2,151,145,1,113,145,215,145,3,222,250,41,0,0,1,255,246,2,37,3,210,7,72, |
0,9,0,52,65,9,0,0,1,0,0,7,1,7,0,10,0,6,1,0,0,3,1,4,183,10,1,10,8,4,250,6, |
1,184,1,2,177,2,252,0,63,237,51,63,51,17,1,51,16,244,237,16,244,237,49,48, |
1,33,53,33,17,51,17,51,17,51,3,210,252,36,1,227,145,215,145,2,37,145,4,146, |
251,110,4,146,0,0,0,2,255,246,1,113,3,210,7,72,0,5,0,11,0,63,65,9,0,8,1,0, |
0,11,1,4,0,12,0,0,1,0,0,3,1,7,181,12,9,1,1,12,9,184,1,2,181,10,251,4,6,250, |
1,184,1,2,177,2,253,0,63,237,63,51,63,237,17,1,51,17,51,16,244,237,16,244, |
237,49,48,1,33,53,33,17,51,33,51,17,33,53,33,3,210,252,36,3,75,145,254,7, |
145,253,140,1,227,1,113,145,5,70,251,145,145,0,0,0,0,1,2,141,253,147,5,181, |
7,72,0,11,0,54,182,4,8,8,13,6,2,10,186,1,0,0,11,1,6,179,12,11,254,9,184,1, |
2,178,6,253,5,184,1,2,179,2,251,0,250,0,63,63,237,63,237,63,1,16,246,237, |
50,50,17,51,17,51,49,48,1,51,17,33,21,33,21,33,21,33,17,35,2,141,145,2,151, |
253,105,2,151,253,105,145,7,72,252,34,145,215,145,252,34,0,0,0,0,2,1,217, |
253,147,5,181,7,72,0,7,0,11,0,56,178,4,13,10,186,1,0,0,11,1,4,178,12,2,6, |
186,1,0,0,7,1,7,183,12,7,11,254,0,8,250,5,184,1,2,177,2,252,0,63,237,63,51, |
63,51,1,16,244,237,50,16,246,237,17,51,49,48,1,51,17,33,21,33,17,35,1,51, |
17,35,3,65,145,1,227,254,29,145,254,152,145,145,7,72,251,110,145,251,110, |
9,181,246,75,0,0,3,1,217,253,147,5,181,7,72,0,3,0,9,0,15,0,73,181,14,6,6, |
17,12,8,65,12,1,0,0,15,0,9,1,7,0,16,0,0,1,0,0,1,1,4,0,16,0,15,1,2,178,12, |
251,7,184,1,2,183,4,253,10,2,250,9,1,254,0,63,51,63,51,63,237,63,237,1,16, |
246,237,16,244,50,237,50,17,51,17,51,49,48,1,35,17,51,19,33,21,33,17,35,17, |
51,17,33,21,33,2,106,145,145,215,2,116,254,29,145,145,1,227,253,140,253,147, |
9,181,250,186,145,252,34,9,181,252,34,145,0,1,255,246,253,147,3,30,7,72,0, |
11,0,56,185,0,9,1,0,178,6,2,10,184,1,6,64,10,12,4,0,0,12,10,254,7,250,3,184, |
1,2,178,6,251,11,184,1,2,177,2,253,0,63,237,63,237,63,63,17,1,51,17,51,16, |
246,50,50,237,49,48,3,53,33,53,33,53,33,17,51,17,35,17,10,2,151,253,105,2, |
151,145,145,1,113,145,215,145,3,222,246,75,3,222,0,0,0,2,255,246,253,147, |
3,210,7,72,0,7,0,11,0,59,65,10,0,10,1,0,0,11,1,7,0,12,0,5,1,0,0,2,0,6,1,4, |
64,10,12,0,12,11,6,254,8,3,250,7,184,1,2,177,2,252,0,63,237,63,51,63,51,17, |
1,51,16,246,50,237,16,244,237,49,48,3,53,33,17,51,17,35,17,1,51,17,35,10, |
1,227,145,145,1,104,145,145,2,37,145,4,146,246,75,4,146,5,35,246,75,0,0,0, |
0,3,255,246,253,147,3,210,7,72,0,3,0,9,0,15,0,73,181,7,13,13,16,6,10,65,12, |
1,0,0,9,0,11,1,4,0,16,0,2,1,0,0,3,1,7,0,16,0,12,1,2,181,15,253,3,11,254,6, |
184,1,2,180,9,251,0,4,250,0,63,51,63,237,63,51,63,237,1,16,244,237,16,246, |
50,237,50,17,51,17,51,49,48,1,51,17,35,1,51,17,33,53,33,19,35,17,33,53,33, |
3,65,145,145,254,152,145,253,140,1,227,145,145,254,29,2,116,7,72,246,75,9, |
181,251,145,145,250,41,3,222,145,0,0,0,2,255,246,253,147,5,181,3,106,0,7, |
0,11,0,57,180,11,3,3,13,4,186,1,0,0,7,1,6,181,12,8,0,0,12,8,184,1,2,181,9, |
251,6,254,4,0,184,1,2,177,1,253,0,63,237,50,63,63,237,17,1,51,17,51,16,246, |
237,17,51,17,51,49,48,3,53,33,21,33,17,35,17,1,53,33,21,10,5,191,253,105, |
145,253,105,5,191,1,113,145,145,252,34,3,222,1,104,145,145,0,0,1,255,246, |
253,147,5,181,2,182,0,11,0,58,178,3,13,8,191,1,0,0,11,1,4,0,12,0,4,1,0,0, |
7,1,7,64,9,12,0,12,6,10,254,8,4,0,184,1,2,177,1,252,0,63,237,50,50,63,51, |
17,1,51,16,244,237,16,246,237,17,51,49,48,3,53,33,21,33,17,35,17,35,17,35, |
17,10,5,191,254,29,145,215,145,2,37,145,145,251,110,4,146,251,110,4,146,0, |
3,255,246,253,147,5,181,3,106,0,5,0,11,0,15,0,74,180,13,8,8,17,9,186,1,0, |
0,6,1,7,181,16,14,3,3,16,5,189,1,0,0,2,1,4,0,16,0,14,1,2,179,15,251,9,3,184, |
1,2,181,6,4,253,11,1,254,0,63,51,63,51,237,50,63,237,1,16,246,237,17,51,17, |
51,16,244,237,17,51,17,51,49,48,1,35,17,33,53,33,51,33,21,33,17,35,1,21,33, |
53,2,106,145,254,29,2,116,215,2,116,254,29,145,2,116,250,65,253,147,3,222, |
145,145,252,34,5,215,145,145,0,0,0,0,2,255,246,1,113,5,181,7,72,0,7,0,11, |
0,58,64,9,7,11,11,13,0,8,8,12,5,189,1,0,0,2,1,6,0,12,0,8,1,2,181,9,253,3, |
250,5,0,184,1,2,177,1,251,0,63,237,51,63,63,237,1,16,244,237,17,51,17,51, |
17,51,17,51,49,48,3,53,33,17,51,17,33,21,1,53,33,21,10,2,151,145,2,151,250, |
65,5,191,2,217,145,3,222,252,34,145,254,152,145,145,0,1,255,246,2,37,5,181, |
7,72,0,11,0,58,178,11,13,9,191,1,0,0,6,1,7,0,12,0,5,1,0,0,2,1,4,64,9,12,0, |
12,7,3,250,9,5,0,184,1,2,177,1,252,0,63,237,51,51,63,51,17,1,51,16,244,237, |
16,244,237,17,51,49,48,3,53,33,17,51,17,51,17,51,17,33,21,10,1,227,145,215, |
145,1,227,2,37,145,4,146,251,110,4,146,251,110,145,0,3,255,246,1,113,5,181, |
7,72,0,5,0,11,0,15,0,76,64,9,4,15,15,17,9,12,12,16,8,65,11,1,0,0,11,1,4,0, |
16,0,2,1,0,0,5,1,7,0,16,0,12,1,2,179,13,253,5,9,184,1,2,181,2,10,251,0,6, |
250,0,63,51,63,51,237,50,63,237,1,16,244,237,16,244,237,17,51,17,51,17,51, |
17,51,49,48,1,51,17,33,21,33,1,51,17,33,53,33,1,53,33,21,3,65,145,1,227,253, |
140,254,152,145,253,140,1,227,254,29,5,191,7,72,252,34,145,4,111,251,145, |
145,254,7,145,145,0,0,0,1,255,246,253,147,5,181,7,72,0,19,0,76,182,11,15, |
15,21,13,9,16,184,1,0,178,6,2,19,184,1,6,64,11,20,4,0,0,20,18,254,7,250,12, |
4,184,1,2,180,9,5,251,16,0,184,1,2,178,13,1,253,0,63,51,237,50,63,51,237, |
50,63,63,17,1,51,17,51,16,246,50,50,237,50,50,17,51,17,51,49,48,3,53,33,53, |
33,53,33,17,51,17,33,21,33,21,33,21,33,17,35,17,10,2,151,253,105,2,151,145, |
2,151,253,105,2,151,253,105,145,1,113,145,215,145,3,222,252,34,145,215,145, |
252,34,3,222,0,0,1,255,246,253,147,5,181,7,72,0,19,0,77,179,4,21,18,9,187, |
1,0,0,15,0,12,1,4,178,20,2,5,187,1,0,0,19,0,8,1,7,64,9,20,13,20,0,16,250, |
9,5,13,184,1,2,182,18,2,14,252,7,11,254,0,63,51,63,51,51,237,50,50,63,51, |
17,1,51,16,244,50,237,50,16,246,50,237,50,17,51,49,48,1,51,17,33,21,33,17, |
35,17,35,17,35,17,33,53,33,17,51,17,51,3,65,145,1,227,254,29,145,215,145, |
254,29,1,227,145,215,7,72,251,110,145,251,110,4,146,251,110,4,146,145,4,146, |
251,110,0,0,0,0,4,255,246,253,147,5,181,7,72,0,5,0,11,0,17,0,23,0,93,181, |
4,14,14,25,2,15,187,1,0,0,5,0,12,1,7,182,24,21,9,9,24,20,11,187,1,0,0,23, |
0,8,1,4,178,24,5,21,184,1,2,183,2,22,251,0,18,250,15,9,184,1,2,181,12,10, |
253,17,7,254,0,63,51,63,51,237,50,63,51,63,51,237,50,1,16,246,50,237,50,17, |
51,17,51,16,244,50,237,50,17,51,17,51,49,48,1,51,17,33,21,33,3,35,17,33,53, |
33,51,33,21,33,17,35,1,51,17,33,53,33,3,65,145,1,227,253,140,215,145,254, |
29,2,116,215,2,116,254,29,145,254,152,145,253,140,1,227,7,72,252,34,145,250, |
186,3,222,145,145,252,34,9,181,251,145,145,0,0,0,0,1,0,0,2,109,5,171,7,72, |
0,3,0,18,182,0,5,1,4,2,250,1,0,47,63,17,1,51,17,51,49,48,1,33,17,33,5,171, |
250,85,5,171,2,109,4,219,0,0,0,1,0,0,253,147,5,171,2,109,0,3,0,18,182,0,5, |
1,4,2,1,254,0,63,47,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253, |
147,4,218,0,0,0,1,0,0,253,147,5,171,7,72,0,3,0,19,183,0,5,1,4,2,250,1,254, |
0,63,63,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253,147,9,181,0, |
0,1,0,0,253,147,2,214,7,72,0,3,0,17,182,1,4,0,2,250,1,254,0,63,63,1,47,17, |
51,49,48,1,33,17,33,2,214,253,42,2,214,253,147,9,181,0,0,0,0,1,2,213,253, |
147,5,171,7,72,0,3,0,17,182,0,5,1,2,250,1,254,0,63,63,1,47,17,51,49,48,1, |
33,17,33,5,171,253,42,2,214,253,147,9,181,0,0,0,0,42,0,103,253,245,5,171, |
6,163,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55, |
0,59,0,63,0,67,0,71,0,75,0,79,0,83,0,87,0,91,0,95,0,99,0,103,0,107,0,111, |
0,115,0,119,0,123,0,127,0,131,0,135,0,139,0,143,0,147,0,151,0,155,0,159,0, |
163,0,167,2,49,181,161,157,153,149,145,165,184,1,1,182,164,109,85,69,45,13, |
121,184,1,1,64,13,120,108,84,68,44,12,120,101,77,53,29,5,137,184,1,1,64,13, |
136,100,76,52,28,4,136,113,89,65,41,17,125,184,1,1,64,13,124,112,88,64,40, |
16,124,97,81,57,25,9,141,184,1,1,64,13,140,96,80,56,24,8,140,117,93,61,37, |
21,129,184,1,1,64,33,128,116,92,60,36,20,128,120,136,124,140,128,128,140, |
124,136,120,5,132,160,156,152,148,144,164,164,169,105,73,49,33,1,133,184, |
1,1,64,15,104,72,48,32,0,10,132,1,8,3,132,167,143,139,135,184,1,3,180,132, |
163,103,99,107,184,1,3,183,104,160,100,96,104,95,91,87,184,1,3,183,84,92, |
88,84,159,83,79,75,184,1,3,183,72,156,80,76,72,67,63,71,184,1,3,183,68,64, |
60,68,155,59,55,51,184,1,3,183,48,152,56,52,48,43,39,47,184,1,3,183,44,40, |
36,44,151,31,27,35,184,1,3,183,32,148,28,24,32,23,19,15,184,1,3,183,12,20, |
16,12,147,11,7,3,184,1,3,183,0,144,8,4,0,131,127,123,184,1,3,64,60,120,128, |
124,120,22,84,1,27,72,1,25,68,1,27,48,1,27,44,1,20,32,1,104,84,72,68,48,44, |
32,12,0,120,120,0,12,32,44,48,68,72,84,104,10,108,164,140,136,27,132,59,132, |
2,15,132,1,2,132,119,115,111,184,1,3,178,116,112,108,0,47,51,51,237,50,50, |
47,95,93,93,51,51,51,18,23,57,47,47,47,47,47,47,47,47,47,47,93,93,93,93,93, |
93,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50, |
50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,16,237,50,50,50,1,47,95,94,93,51,51,51,51,51, |
237,50,50,50,50,50,17,51,47,51,51,51,51,51,18,23,57,47,47,47,47,47,17,51, |
51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50,50,50, |
17,51,51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50, |
50,50,17,51,51,51,51,51,16,237,50,50,50,50,50,16,237,50,50,50,50,50,49,48, |
19,51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7, |
51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51, |
21,35,37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,7,51,21, |
35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51,21,35, |
37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,37, |
51,21,35,37,51,21,35,1,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,17,51, |
21,35,17,51,21,35,17,51,21,35,17,51,21,35,17,51,21,35,103,104,104,1,158,104, |
104,1,160,103,103,253,145,104,104,1,159,104,104,1,159,104,104,207,103,103, |
254,96,104,104,254,98,104,104,4,13,104,104,254,97,104,104,254,97,104,104, |
207,104,104,1,158,104,104,1,160,103,103,207,104,104,254,97,104,104,254,97, |
104,104,207,104,104,1,158,104,104,1,160,103,103,253,145,104,104,1,159,104, |
104,1,159,104,104,207,103,103,254,96,104,104,254,98,104,104,207,104,104,1, |
159,104,104,1,159,104,104,252,194,104,104,1,159,104,104,1,159,104,104,251, |
243,104,104,1,158,104,104,1,160,103,103,1,158,104,104,104,104,104,104,104, |
104,104,104,104,104,5,34,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96, |
96,99,96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,97,97,97,97,97, |
98,94,94,94,94,94,98,97,97,97,97,97,96,96,96,96,96,96,7,237,98,98,98,98,98, |
1,35,96,96,96,96,96,254,223,98,254,223,96,254,221,96,254,221,97,254,222,97, |
7,238,96,0,0,0,0,84,0,0,253,245,5,171,6,163,0,3,0,7,0,11,0,15,0,19,0,23,0, |
27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,83, |
0,87,0,91,0,95,0,99,0,103,0,107,0,111,0,115,0,119,0,123,0,127,0,131,0,135, |
0,139,0,143,0,147,0,151,0,155,0,159,0,163,0,167,0,171,0,175,0,179,0,183,0, |
187,0,191,0,195,0,199,0,203,0,207,0,211,0,215,0,219,0,223,0,227,0,231,0,235, |
0,239,0,243,0,247,0,251,0,255,1,3,1,7,1,11,1,15,1,19,1,23,1,27,1,31,1,35, |
1,39,1,43,1,47,1,51,1,55,1,59,1,63,1,67,1,71,1,75,1,79,0,0,19,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,37,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,37,51,21,35,5,51,21,35,39,51,21,35,39,51,21, |
35,39,51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,23,51,21,35,39,51,21,35,39,51,21,35,39, |
51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,19,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23, |
51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,17,51,21, |
35,19,51,21,35,103,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,1,158,103,103,207,104,104,208,104,104,208,103, |
103,252,194,103,103,3,165,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104, |
104,208,103,103,103,104,104,207,104,104,208,104,104,208,104,104,207,104,104, |
207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,251,243,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,103,104,104,103,103,103,103,104,104,103,103, |
103,103,104,104,103,103,103,103,104,104,103,103,103,103,103,103,104,104,5, |
34,98,98,98,98,98,98,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,97,97, |
97,97,97,97,97,97,97,97,97,98,94,94,94,94,94,94,94,94,94,94,94,98,97,97,97, |
97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,96,96,96,7,237,98,98,98, |
98,98,98,98,98,98,98,98,1,35,96,96,96,96,96,96,96,96,96,96,96,254,223,98, |
97,96,96,96,99,96,96,96,99,96,96,97,98,94,98,97,96,96,7,237,98,1,35,96,0, |
0,67,0,0,253,147,5,213,6,163,0,73,0,77,0,81,0,85,0,89,0,93,0,97,0,101,0,105, |
0,109,0,113,0,117,0,121,0,125,0,129,0,133,0,137,0,141,0,145,0,149,0,153,0, |
157,0,161,0,165,0,169,0,173,0,177,0,181,0,185,0,189,0,193,0,197,0,201,0,205, |
0,209,0,213,0,217,0,221,0,225,0,229,0,233,0,237,0,241,0,245,0,249,0,253,1, |
1,1,5,1,9,1,13,1,17,1,21,1,25,1,29,1,33,1,37,1,41,1,45,1,49,1,53,1,57,1,61, |
1,65,1,69,1,73,1,77,1,81,0,0,1,33,17,51,53,35,17,51,53,35,17,51,53,35,17, |
51,53,35,17,51,53,35,17,51,53,51,21,51,53,51,21,51,53,51,21,51,53,51,21,51, |
53,51,21,51,53,51,21,51,53,51,21,35,21,51,17,35,21,51,17,35,21,51,17,35,21, |
51,17,35,21,51,17,35,21,51,1,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53, |
23,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,7,21,51,53,51,21,51,53,51, |
21,51,53,51,21,51,53,5,35,21,51,55,21,51,53,51,21,51,53,51,21,51,53,5,21, |
51,53,33,21,51,53,7,53,35,21,37,21,51,53,19,53,35,21,35,53,35,21,35,53,35, |
21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53,19,53,35,21, |
35,53,35,21,35,53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51, |
21,51,53,19,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,1,35,21,51,39,35, |
21,51,39,35,21,51,39,35,21,51,1,21,51,53,51,21,51,53,23,35,21,51,39,35,21, |
51,7,21,51,53,51,21,51,53,7,35,21,51,55,21,51,53,5,21,51,53,23,53,35,21,23, |
53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,19,53,35,21,35,53,35,21,7,21, |
51,53,51,21,51,53,19,35,21,51,39,35,21,51,19,35,21,51,39,35,21,51,5,213,250, |
43,106,106,106,106,106,106,106,106,106,106,106,107,106,107,106,107,107,107, |
107,107,106,107,106,107,107,107,107,107,107,107,107,107,107,107,107,107,250, |
149,107,106,107,106,107,107,107,107,107,107,214,107,107,214,106,106,213,106, |
106,213,107,106,107,106,107,107,107,253,234,106,106,107,106,107,107,107,107, |
252,170,107,1,63,107,213,107,1,171,107,107,107,107,107,107,106,107,106,107, |
107,106,107,106,107,107,107,107,107,107,107,107,106,107,106,107,107,106,107, |
106,107,107,107,107,107,107,214,107,107,214,106,106,213,106,106,2,22,107, |
107,214,107,107,213,107,107,213,107,107,2,235,107,106,107,106,106,106,213, |
106,106,213,107,106,107,107,106,106,107,106,254,86,107,213,107,213,106,107, |
106,107,107,106,107,106,106,107,106,107,107,106,107,106,106,106,213,106,106, |
107,107,107,213,107,107,253,147,1,34,97,1,34,97,1,35,96,1,33,98,1,33,98,1, |
33,96,96,96,96,96,96,96,96,96,96,96,96,96,193,98,254,223,96,254,221,96,254, |
221,96,254,221,94,254,221,96,6,106,96,96,96,96,96,96,96,96,192,98,98,98,98, |
98,98,98,97,96,96,96,96,96,96,96,96,192,96,96,96,96,96,96,96,96,195,96,96, |
96,96,96,96,96,96,96,96,254,223,97,97,97,97,97,97,97,97,98,94,94,94,94,94, |
94,94,94,254,223,97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,6,205, |
98,98,98,98,98,98,98,1,34,98,98,98,98,98,98,98,254,223,96,96,96,96,192,98, |
98,98,97,96,96,96,96,192,96,96,96,96,195,96,96,96,96,96,193,97,97,97,97,98, |
94,94,94,94,254,223,97,97,97,97,96,96,96,96,96,6,205,98,98,98,1,34,98,98, |
98,0,0,0,0,1,0,123,0,117,4,90,4,84,0,3,0,0,19,33,17,33,123,3,223,252,33,4, |
84,252,33,0,0,2,0,6,0,0,4,207,4,201,0,3,0,7,0,21,183,7,1,4,0,4,0,5,3,0,47, |
205,221,205,1,47,205,221,205,49,48,19,33,17,33,19,17,33,17,6,4,201,251,55, |
76,4,49,4,201,251,55,4,125,251,207,4,49,0,0,1,0,109,1,127,2,105,3,123,0,3, |
0,26,64,13,3,48,2,1,15,2,31,2,2,8,2,1,2,0,47,205,1,47,94,93,93,205,49,48, |
1,33,17,33,2,105,254,4,1,252,1,127,1,252,0,0,0,2,0,109,1,127,2,105,3,123, |
0,3,0,7,0,34,64,17,5,3,6,48,2,1,15,2,31,2,2,8,2,7,1,6,2,0,47,205,221,205, |
1,47,94,93,93,205,221,205,49,48,1,33,17,33,3,17,33,17,2,105,254,4,1,252,76, |
254,156,1,127,1,252,254,80,1,98,254,158,0,0,0,0,1,0,0,0,0,8,0,2,104,0,3,0, |
0,17,33,17,33,8,0,248,0,2,104,253,152,0,0,0,1,1,158,0,0,6,76,4,174,0,2,0, |
0,33,9,1,1,158,2,88,2,86,4,174,251,82,0,0,1,1,145,255,229,6,90,4,172,0,2, |
0,0,9,2,1,145,4,201,251,55,4,172,253,158,253,155,0,1,1,158,255,229,6,76,4, |
147,0,2,0,0,9,2,6,76,253,170,253,168,4,147,251,82,4,174,0,1,1,145,255,229, |
6,90,4,172,0,2,0,0,1,17,1,6,90,251,55,4,172,251,57,2,101,0,0,2,0,8,0,0,3, |
238,5,160,0,5,0,9,0,37,64,20,134,7,1,9,0,5,16,5,2,5,7,31,2,1,2,6,3,4,8,1, |
0,47,51,63,51,1,47,93,51,47,93,51,49,48,93,33,35,9,1,51,9,4,2,35,82,254,55, |
1,201,82,1,203,254,14,254,158,1,98,1,96,2,207,2,209,253,49,2,53,253,203,253, |
194,2,62,0,2,0,167,0,162,4,46,4,41,0,19,0,39,0,46,64,28,68,37,84,37,2,75, |
33,91,33,2,75,27,91,27,2,68,23,84,23,2,30,10,20,0,25,15,35,5,0,47,205,220, |
205,1,47,205,220,205,49,48,93,93,93,93,19,52,62,2,51,50,30,2,21,20,14,2,35, |
34,46,2,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,167,70,122,164,94,94, |
165,123,71,71,123,165,94,94,164,122,70,86,57,98,133,76,76,134,99,58,58,99, |
134,76,76,133,98,57,2,100,94,165,123,71,71,123,165,94,94,164,122,70,70,122, |
164,94,76,132,99,57,57,99,132,76,76,134,99,58,58,99,134,0,0,0,0,1,0,178,0, |
137,4,35,3,250,0,23,0,17,182,8,16,12,15,0,1,0,0,47,93,205,1,47,205,49,48, |
1,50,23,30,1,23,30,1,21,20,7,6,35,34,39,38,53,52,54,55,62,1,55,54,2,106,110, |
107,53,82,29,29,31,129,129,183,182,129,129,30,29,29,83,52,108,3,250,57,28, |
82,52,54,110,57,183,129,129,129,129,183,58,109,54,52,82,28,57,0,0,0,2,0,41, |
0,0,4,172,4,131,0,3,0,23,0,21,183,14,2,4,1,19,1,9,0,0,47,205,221,205,1,47, |
205,221,205,49,48,51,17,33,17,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2, |
41,4,131,252,4,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69,4, |
131,251,125,2,65,91,160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0, |
3,0,41,0,0,4,172,4,131,0,3,0,23,0,43,0,34,64,14,4,24,1,14,34,2,1,19,29,0, |
9,39,1,0,0,47,221,221,206,16,221,206,1,47,221,221,206,16,221,206,49,48,51, |
17,33,17,1,52,62,2,51,50,30,2,21,20,14,2,35,34,46,2,39,20,30,2,51,50,62,2, |
53,52,46,2,35,34,14,2,41,4,131,252,81,58,99,133,75,75,133,99,58,58,99,133, |
75,75,133,99,58,77,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69, |
4,131,251,125,2,65,75,133,99,58,58,99,133,75,75,133,99,58,58,99,133,75,91, |
160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0,2,0,115,1,133,2,99, |
3,117,0,18,0,34,0,21,183,19,0,27,11,31,6,23,15,0,47,205,220,205,1,47,205, |
220,205,49,48,1,20,6,7,14,1,35,34,39,46,1,53,52,55,54,51,50,23,22,7,52,39, |
38,35,34,7,6,21,20,23,22,51,50,55,54,2,99,37,37,37,86,51,101,75,35,37,72, |
74,102,103,71,74,76,51,51,70,70,51,51,51,49,72,72,49,51,2,125,53,86,37,35, |
37,72,37,86,53,102,72,74,74,71,103,70,51,51,51,51,70,69,54,49,49,54,0,0,0, |
5,1,177,255,229,6,121,4,172,0,17,0,33,0,45,0,57,0,68,0,147,64,93,20,32,36, |
32,116,32,3,20,28,36,28,116,28,3,27,24,43,24,123,24,3,27,20,43,20,123,20, |
3,68,34,40,63,52,46,40,46,40,46,8,18,31,0,1,0,26,8,49,37,43,55,43,62,58,104, |
58,1,89,58,1,71,58,1,25,58,1,58,60,65,15,43,95,43,111,43,3,8,65,64,9,14,72, |
43,65,43,65,4,22,15,13,1,13,30,4,0,47,205,220,93,205,18,57,57,47,47,43,94, |
93,16,205,51,93,93,93,93,17,51,17,51,16,205,50,1,47,205,220,93,205,18,57, |
57,47,47,16,205,51,16,205,51,49,48,0,93,93,93,93,1,20,7,6,35,34,39,38,53, |
52,54,55,54,51,50,23,30,1,7,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54,1, |
20,6,35,34,38,53,52,54,51,50,22,5,20,6,35,34,38,53,52,54,51,50,22,1,22,51, |
50,55,23,6,35,34,38,39,6,121,180,179,253,253,179,180,90,90,178,254,254,178, |
90,90,90,153,151,218,218,151,153,153,152,217,217,152,153,253,90,46,32,32, |
45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,234,76,147,145,76,62,98, |
185,94,141,48,2,72,254,178,179,179,178,254,128,215,91,178,178,91,215,128, |
217,153,154,154,153,217,216,153,154,154,153,1,87,32,46,46,32,32,45,45,32, |
32,46,46,32,32,45,45,254,191,137,137,35,186,95,91,0,0,4,1,209,255,229,6,153, |
4,172,0,17,0,29,0,41,0,52,0,96,64,55,42,18,24,47,36,30,24,30,24,30,0,8,39, |
27,21,33,21,48,52,104,52,1,89,52,1,75,52,1,61,52,1,52,50,45,15,21,31,21,95, |
21,111,21,4,8,79,45,95,45,2,21,45,21,45,13,4,0,47,204,57,57,47,47,93,94,93, |
16,206,51,93,93,93,93,17,51,17,51,16,206,50,1,47,205,57,57,47,47,16,206,51, |
16,206,51,49,48,1,20,7,6,35,34,39,38,53,52,54,55,54,51,50,23,30,1,5,52,38, |
35,34,6,21,20,22,51,50,54,37,52,38,35,34,6,21,20,22,51,50,54,1,30,1,51,50, |
55,39,6,35,34,39,6,153,180,179,253,253,179,180,90,90,178,254,254,178,90,90, |
253,0,46,32,32,45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,174,48,141, |
94,185,98,62,76,145,147,76,2,72,254,178,179,179,178,254,128,215,91,178,178, |
91,215,1,32,45,45,32,32,46,46,32,32,45,45,32,32,46,46,254,220,91,95,186,35, |
137,137,0,2,1,70,255,115,6,14,4,59,0,51,0,70,0,139,185,0,47,255,240,64,13, |
11,14,72,52,46,1,52,36,1,119,35,1,35,184,255,240,64,77,11,14,72,21,16,11, |
14,72,59,20,1,59,9,1,8,16,11,14,72,59,47,1,52,35,1,52,21,1,59,8,1,66,143, |
13,223,13,2,112,13,1,63,13,1,32,13,1,13,57,43,62,128,31,208,31,224,31,3,127, |
31,1,48,31,1,47,31,1,31,52,15,51,63,51,79,51,3,8,51,0,47,94,93,205,220,93, |
93,93,93,205,1,47,205,220,93,93,93,93,205,49,48,0,93,93,93,93,1,43,93,93, |
43,43,93,93,93,43,1,51,21,30,3,23,55,23,7,30,1,23,51,21,35,14,1,7,23,7,39, |
14,1,7,14,1,7,21,35,53,46,1,39,7,39,55,46,1,39,35,53,51,54,55,39,55,23,62, |
1,55,23,34,6,7,6,21,20,23,30,1,51,50,55,54,53,52,39,46,1,3,137,66,32,57,54, |
53,29,186,45,184,45,44,3,215,215,8,44,40,184,49,182,31,55,23,24,58,34,66, |
63,110,48,188,43,182,40,46,8,215,215,12,80,180,40,189,57,112,54,31,69,117, |
48,98,98,48,117,69,139,96,99,99,49,117,4,59,217,3,12,21,32,22,182,45,184, |
59,113,57,62,60,110,51,188,43,182,23,32,11,9,12,5,217,217,9,46,35,180,45, |
184,51,111,63,62,128,95,184,49,182,40,44,6,61,50,48,100,136,137,98,50,47, |
97,97,138,137,99,48,50,0,0,0,2,1,218,0,80,4,38,4,129,0,28,0,47,0,98,64,62, |
22,18,25,0,0,5,15,43,1,239,43,255,43,2,43,15,14,1,14,0,34,1,224,34,240,34, |
2,34,5,22,25,19,0,28,16,28,80,28,3,28,0,39,1,240,39,1,39,18,0,0,128,0,2,8, |
0,29,64,37,40,72,29,10,0,47,205,43,220,94,93,50,205,113,114,47,93,51,205, |
50,1,47,205,113,114,220,93,205,113,114,17,57,47,51,205,50,49,48,1,46,1,39, |
38,53,52,55,62,1,51,50,23,22,21,20,7,6,7,21,33,21,33,17,35,17,33,53,33,19, |
34,7,14,1,21,20,22,23,22,51,50,55,54,53,52,38,39,38,2,220,55,90,35,71,83, |
44,101,60,118,83,86,72,72,106,1,0,255,0,74,254,254,1,2,35,83,62,29,31,31, |
29,62,83,87,59,61,30,29,62,2,66,8,46,42,80,108,122,83,43,43,86,83,122,109, |
81,82,12,166,70,254,250,1,6,70,2,145,59,31,71,44,43,71,31,62,62,61,84,44, |
71,31,59,0,2,1,81,0,250,4,175,4,129,0,65,0,81,0,70,64,40,49,65,59,15,78,1, |
78,63,32,1,32,15,51,1,51,0,70,1,70,59,65,49,63,74,0,55,128,55,2,55,66,144, |
20,1,20,15,63,1,8,63,0,47,94,93,204,93,205,220,93,205,18,57,57,1,47,205,114, |
220,93,204,93,205,114,18,57,57,49,48,1,46,1,39,46,1,39,46,1,53,52,55,62,1, |
51,50,22,23,30,1,51,50,54,55,54,51,50,21,20,7,14,1,21,20,22,23,30,1,21,20, |
6,7,6,35,34,39,46,1,39,7,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,7, |
34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,3,255,17,54,37,28,40,14,5,3,6, |
3,6,5,5,15,13,32,63,32,46,64,19,36,13,16,6,9,7,4,8,2,2,2,2,9,5,21,20,22,31, |
11,237,84,86,87,118,118,87,84,84,85,122,71,83,154,90,62,61,61,64,88,89,60, |
62,62,60,4,0,5,18,14,11,24,14,3,10,5,8,9,2,2,2,2,8,9,7,6,12,14,9,18,34,79, |
45,31,64,34,11,16,5,5,7,3,6,39,42,82,42,238,81,109,125,86,88,84,84,117,117, |
87,86,43,32,62,61,88,91,61,61,61,62,90,87,62,62,0,0,1,0,59,0,0,4,5,4,207, |
0,47,0,40,64,25,38,32,10,48,10,96,10,112,10,4,10,14,34,64,8,11,72,34,23,79, |
0,95,0,2,0,0,47,93,47,47,43,51,1,47,93,47,49,48,1,30,1,23,30,1,23,22,23,22, |
21,20,7,6,35,34,39,22,23,30,1,31,1,33,55,50,55,62,3,39,14,1,35,34,39,38,53, |
52,55,62,1,55,62,1,55,54,2,32,14,40,26,28,95,69,141,35,37,63,66,88,157,99, |
3,36,38,163,137,8,252,232,6,125,86,43,66,44,20,1,45,132,83,90,66,63,30,23, |
78,57,69,110,38,56,4,207,54,95,44,43,105,63,126,66,67,70,95,63,66,191,147, |
87,86,99,9,37,37,49,25,69,91,119,75,96,95,66,63,91,74,59,42,85,47,59,113, |
57,83,0,0,0,0,1,0,60,0,0,5,4,4,199,0,75,0,47,64,24,57,77,63,23,1,23,52,61, |
67,13,47,30,4,18,31,18,1,27,18,27,18,1,41,1,0,47,47,18,57,57,47,47,93,18, |
23,57,50,51,1,47,93,16,206,49,48,41,1,55,62,1,55,62,1,55,54,53,52,38,53,6, |
7,14,1,35,34,38,39,38,53,52,55,54,51,50,22,23,46,1,39,46,1,53,52,55,62,1, |
51,50,23,22,21,20,7,54,55,62,1,51,50,22,23,22,21,20,7,6,35,34,38,39,46,1, |
39,30,1,23,30,1,23,22,23,4,70,252,182,8,84,108,27,41,64,26,52,2,58,90,43, |
88,45,59,97,41,79,73,73,93,31,80,51,20,27,8,5,6,78,40,97,60,116,80,80,69, |
84,16,14,30,17,51,86,36,73,80,80,112,62,132,50,17,43,26,3,23,23,22,67,46, |
61,159,35,17,33,17,25,75,50,100,109,8,22,17,121,59,28,30,42,38,83,116,115, |
79,80,25,26,34,52,19,17,38,20,115,78,38,40,80,78,109,86,98,40,3,5,3,37,41, |
76,116,118,83,80,60,51,19,61,45,81,125,46,45,76,31,39,30,0,1,0,102,255,233, |
4,90,4,121,0,39,0,38,64,23,18,2,1,4,2,1,8,29,41,16,12,64,12,80,12,112,12, |
128,12,5,12,16,0,0,47,47,1,47,93,16,206,49,48,94,93,93,5,46,1,39,46,1,39, |
46,1,39,46,1,53,52,55,54,51,50,23,30,1,23,62,1,51,50,22,23,22,21,20,7,14, |
1,7,14,1,7,14,1,2,98,14,42,26,28,103,76,56,69,14,43,37,68,70,102,98,78,28, |
47,17,34,142,88,50,85,35,70,41,20,78,60,75,108,32,31,44,23,56,101,48,50,147, |
102,76,93,22,65,106,56,103,71,70,72,28,80,54,119,117,36,34,70,94,86,88,45, |
119,75,96,152,55,54,110,0,0,0,0,1,0,66,255,231,3,210,4,199,0,26,0,18,183, |
48,12,1,12,75,21,1,21,0,25,47,93,1,47,93,49,48,1,30,1,23,30,1,23,14,1,7,14, |
1,7,46,1,39,46,1,39,46,1,39,62,1,55,62,1,2,7,45,113,69,69,116,47,39,120,83, |
69,106,40,13,35,22,38,98,60,14,94,81,50,128,80,59,96,4,199,78,165,93,93,141, |
53,40,150,111,93,159,72,25,58,32,57,135,80,20,119,99,59,160,107,77,148,0, |
0,1,0,196,0,29,3,59,4,129,0,33,0,48,64,25,2,19,33,13,64,79,6,95,6,111,6,3, |
6,128,27,33,18,10,10,47,0,1,0,31,24,0,47,205,204,93,57,47,57,1,47,205,26, |
220,93,26,205,16,205,50,49,48,1,51,21,23,30,1,21,20,6,7,35,62,1,53,52,38, |
39,38,39,17,20,6,7,6,35,34,38,53,52,55,54,51,50,23,1,233,76,153,51,58,48, |
46,47,29,28,28,29,57,64,37,37,72,108,57,58,60,63,80,44,46,4,129,100,193,69, |
163,85,78,134,59,65,124,59,60,99,40,81,9,254,6,63,98,38,75,54,46,73,60,60, |
19,0,2,1,16,255,213,4,239,4,135,0,34,0,38,0,108,64,61,35,32,64,18,26,128, |
36,15,64,111,0,1,0,128,15,9,1,9,9,0,26,1,26,17,35,86,35,1,67,35,1,35,16,36, |
54,36,1,37,36,1,20,36,1,3,36,1,8,36,34,38,33,88,33,1,33,37,34,30,23,13,6, |
0,47,205,47,205,47,51,51,93,17,51,17,51,94,93,93,93,93,17,51,51,93,93,17, |
51,1,47,93,51,47,93,26,221,93,26,205,50,26,16,221,26,205,51,49,48,1,20,6, |
7,14,1,35,34,38,53,52,55,54,51,50,23,17,5,17,20,6,7,6,35,34,38,53,52,55,54, |
51,50,23,17,37,1,37,53,5,4,239,36,38,37,88,51,57,57,57,62,81,48,42,253,218, |
37,35,74,106,57,58,59,60,84,45,45,2,186,253,144,2,38,253,218,1,68,63,101, |
35,37,39,54,47,76,57,59,18,1,192,149,254,118,62,98,38,74,53,45,76,57,60,19, |
2,240,178,254,103,149,117,152,0,0,0,3,0,29,0,0,3,118,5,204,0,27,0,31,0,35, |
0,100,179,67,10,1,10,184,255,224,64,59,8,12,72,31,35,70,28,47,32,143,32,207, |
32,3,31,32,79,32,111,32,143,32,4,32,79,16,95,16,2,16,16,1,70,144,2,1,111, |
2,1,2,34,15,31,83,30,0,19,80,12,0,0,4,80,25,5,15,32,1,21,0,63,51,63,51,237, |
50,63,237,63,237,63,1,47,93,93,237,50,47,93,47,93,113,51,237,50,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,53,51,21,3,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18, |
40,51,29,11,211,134,180,180,180,3,183,252,73,3,183,131,122,59,101,75,43,6, |
6,137,3,5,22,41,60,39,97,131,1,105,172,172,250,224,4,58,251,198,0,0,0,0,2, |
0,29,0,0,3,119,5,204,0,27,0,31,0,90,179,67,10,1,10,184,255,224,64,53,8,12, |
72,31,70,47,28,143,28,207,28,3,31,28,79,28,111,28,143,28,4,28,79,16,95,16, |
2,16,16,1,70,144,2,1,111,2,1,2,30,0,19,80,12,0,0,4,80,25,5,15,28,1,21,0,63, |
51,63,51,237,50,63,237,63,1,47,93,93,237,50,47,93,47,93,113,237,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51,29, |
11,211,135,180,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41, |
60,39,97,131,252,73,5,204,250,52,0,0,1,0,119,254,78,1,227,255,170,0,28,0, |
75,185,0,2,255,232,179,9,17,72,27,184,255,224,64,40,9,17,72,22,22,8,16,131, |
15,0,1,95,0,1,0,8,19,140,63,23,79,23,2,23,11,140,0,5,16,5,32,5,80,5,96,5, |
112,5,6,5,0,47,93,237,47,93,237,1,47,221,93,113,237,18,57,47,49,48,43,43, |
5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35,42,1,7,55,51,50,30,2,1, |
227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14,29,14,31,62,52,84,60, |
32,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,96,18,41,63,0,0,0,255,255, |
0,243,1,190,1,182,2,154,17,6,0,119,56,0,0,18,64,11,0,127,0,1,111,0,1,95,0, |
1,0,17,93,93,93,53,0,1,0,127,254,78,1,72,255,158,0,10,0,75,185,0,5,255,192, |
179,9,17,72,2,184,255,192,64,28,9,17,72,7,151,0,150,4,9,8,146,16,3,32,3,2, |
0,3,96,3,160,3,176,3,192,3,5,3,184,255,192,64,10,30,33,72,3,0,9,16,9,2,9, |
0,47,93,204,43,93,113,237,1,47,51,253,237,49,48,43,43,5,20,6,7,35,62,1,53, |
35,53,51,1,72,44,40,117,45,49,88,195,193,87,107,47,48,86,46,156,0,0,0,0,2, |
0,14,2,51,2,150,5,129,0,10,0,23,0,108,64,74,86,10,1,86,9,1,121,6,137,6,2, |
17,175,5,191,5,2,5,64,29,60,72,5,64,24,27,72,5,8,1,224,18,6,16,2,1,48,2,1, |
64,2,144,2,2,2,0,4,229,8,5,95,17,111,17,127,17,3,15,17,31,17,127,17,143,17, |
4,17,17,1,11,6,220,1,223,0,63,63,51,18,57,47,93,113,51,51,237,50,1,47,93, |
113,114,51,51,237,50,47,43,43,93,51,49,48,93,114,114,1,21,35,53,33,53,1,51, |
17,51,21,3,14,3,7,3,33,17,60,2,54,2,39,131,254,106,1,130,151,111,240,7,22, |
24,22,7,199,1,23,1,2,229,178,178,111,2,45,253,213,113,2,23,13,37,39,35,11, |
254,225,1,33,14,38,38,34,0,0,0,0,1,0,53,2,40,2,124,5,129,0,38,0,134,64,37, |
37,36,53,36,69,36,3,3,24,9,13,72,19,34,1,4,34,1,3,31,30,25,224,139,27,1,6, |
27,10,192,26,208,26,224,26,3,26,184,255,192,64,53,16,19,72,26,29,0,225,32, |
19,96,19,2,32,19,96,19,160,19,224,19,4,19,22,228,34,34,16,30,229,27,220,68, |
11,84,11,100,11,3,53,11,1,6,11,22,11,38,11,3,11,16,228,5,221,0,63,237,50, |
93,93,93,63,237,18,57,47,237,1,47,93,113,237,50,47,43,93,51,51,95,113,237, |
50,50,0,95,93,93,49,48,43,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,38,35,34,6,7,35,19,33,21,33,7,62,1,51,50,30,2,2,124,38,73,108,70,66,101, |
74,44,9,133,5,24,39,54,36,71,86,81,75,51,77,23,129,33,1,250,254,114,19,29, |
91,54,67,103,69,36,3,67,65,104,74,40,33,59,81,48,15,27,47,36,21,85,93,81, |
85,37,23,1,212,113,245,26,33,39,71,102,0,0,0,1,0,43,2,52,2,120,5,129,0,14, |
0,54,64,33,5,224,6,6,0,175,12,191,12,2,12,11,96,0,1,191,0,207,0,255,0,3,96, |
0,1,0,0,12,229,13,220,5,223,0,63,63,237,50,1,47,93,93,113,51,47,93,17,57, |
47,237,49,48,1,14,3,21,35,52,62,2,55,33,53,33,2,120,64,106,77,43,133,47,80, |
107,60,254,52,2,77,5,28,97,176,176,187,108,102,188,179,175,88,113,0,3,0,45, |
2,40,2,130,5,142,0,19,0,39,0,81,0,138,185,0,68,255,232,179,11,15,72,64,184, |
255,232,64,82,11,15,72,47,24,9,13,72,43,24,9,13,72,5,15,21,15,2,76,55,71, |
10,226,72,61,1,61,61,30,226,224,50,1,191,50,1,50,0,226,70,71,1,71,71,40,226, |
32,20,96,20,2,32,20,96,20,160,20,224,20,4,20,76,56,25,228,15,15,35,26,5,1, |
11,5,1,5,228,66,222,35,228,45,221,0,63,237,63,237,93,93,18,57,47,237,57,57, |
1,47,93,113,237,50,47,113,237,47,93,93,237,51,47,113,237,18,57,57,0,93,49, |
48,43,43,43,43,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,19,52,46,2,35,34, |
14,2,21,20,30,2,51,50,62,2,55,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3,53, |
52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,1,223,12,31,53,41,39,53,31,13,9,29, |
54,45,48,54,27,7,21,13,35,61,49,45,59,36,15,15,36,61,46,46,61,34,14,142,35, |
73,113,77,77,113,74,35,29,47,61,32,36,55,38,20,35,70,104,68,72,105,69,33, |
20,38,56,36,36,63,46,26,4,169,28,48,34,19,19,34,48,28,23,47,39,25,25,39,48, |
254,155,28,52,40,24,24,41,53,28,35,59,42,23,23,42,60,22,54,91,66,37,37,66, |
90,54,46,72,52,32,5,3,8,37,52,64,35,45,79,59,34,35,60,79,44,35,63,52,37,7, |
3,6,31,52,72,0,1,255,229,4,176,2,195,5,240,0,17,0,62,64,41,117,11,133,11, |
2,117,7,133,7,2,12,73,15,13,191,13,239,13,3,13,6,73,64,5,12,5,128,9,142,15, |
0,47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,205,50,1,47,26,237,220,93,237, |
49,48,0,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,84,111,141,81,32, |
2,164,6,104,93,93,104,6,164,2,32,81,141,4,176,57,91,115,57,103,96,96,103, |
57,115,91,57,0,1,0,124,4,28,1,69,5,129,0,10,0,36,64,21,7,151,0,150,4,9,8, |
146,80,3,96,3,2,160,3,176,3,2,3,9,3,0,63,204,93,113,237,1,47,51,253,237,49, |
48,1,20,6,7,35,62,1,53,35,53,51,1,69,44,40,117,45,49,88,195,5,23,87,117,47, |
48,96,46,167,0,0,1,0,130,4,187,1,75,6,32,0,10,0,47,64,30,4,9,150,7,151,10, |
7,146,95,3,111,3,2,175,3,191,3,2,3,80,10,1,15,10,63,10,127,10,3,10,0,47,93, |
113,205,93,113,237,1,47,237,237,50,49,48,19,52,54,55,51,14,1,21,51,21,35, |
130,44,40,117,45,49,88,195,5,37,87,117,47,48,96,46,167,0,0,0,0,1,0,106,5, |
250,2,18,6,240,0,5,0,48,64,30,117,3,133,3,2,128,4,1,64,4,1,4,64,1,2,64,16, |
20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43,1,47,26,205,93,93, |
49,48,93,1,37,53,51,23,21,1,160,254,202,207,217,5,250,217,29,226,20,0,1,0, |
72,5,250,1,240,6,240,0,5,0,52,64,34,122,2,138,2,2,64,3,128,3,2,3,64,79,0, |
143,0,2,0,2,64,16,20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43, |
1,47,93,26,205,93,49,48,93,19,53,55,51,21,5,72,217,207,254,202,5,250,20,226, |
29,217,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,9,134,9,2,120,8,136, |
8,2,128,0,1,0,184,255,192,64,25,11,15,72,0,6,4,142,64,8,64,16,19,72,8,128, |
6,95,1,1,1,64,9,12,72,1,0,47,43,93,51,26,221,43,26,237,1,47,204,43,93,49, |
48,93,93,1,21,35,39,35,7,35,53,55,51,2,150,105,219,2,232,104,234,204,6,14, |
20,139,139,20,240,0,0,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,0,134, |
0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,25,11,15,72,8,64,2,7,3,64,16,19, |
72,3,128,6,142,95,1,1,1,64,9,12,72,1,0,47,43,93,237,26,205,43,50,1,47,26, |
204,43,93,49,48,93,93,1,35,39,53,51,23,51,55,51,21,1,182,204,234,104,232, |
2,219,105,5,250,239,21,139,139,21,0,0,0,0,2,0,45,5,250,2,90,6,178,0,3,0,7, |
0,35,64,19,3,133,0,7,133,4,1,5,145,0,95,4,1,4,64,9,12,72,4,0,47,43,93,51, |
237,50,1,47,237,220,237,49,48,1,53,51,21,33,53,51,21,1,183,163,253,211,165, |
5,250,184,184,184,184,0,0,1,255,233,5,250,2,182,7,6,0,27,0,68,181,89,2,105, |
2,2,26,184,255,232,64,34,9,15,72,12,24,9,15,72,64,23,1,15,23,1,23,9,22,5, |
143,64,14,128,19,143,8,95,0,1,0,64,9,12,72,0,0,47,43,93,50,237,26,221,26, |
237,51,1,47,204,93,93,49,48,43,43,0,93,1,34,46,2,35,34,6,7,35,62,3,51,50, |
30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45,74,59,44, |
84,78,69,30,54,55,8,92,5,20,43,74,5,250,37,45,37,62,57,45,95,78,50,37,45, |
37,63,56,44,95,78,51,0,0,0,0,2,0,32,5,250,3,15,6,241,0,5,0,11,0,88,64,60, |
154,8,170,8,2,154,2,170,2,2,102,10,1,98,4,1,98,3,1,10,159,7,1,15,7,31,7,127, |
7,223,7,4,7,7,4,64,0,64,9,31,72,0,8,2,64,16,20,72,2,128,6,95,0,1,0,64,9,12, |
72,0,0,47,43,93,50,26,205,43,50,1,47,43,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,19,53,55,51,21,5,51,53,55,51,21,5,32,197,207,254,202,253,197, |
207,254,202,5,250,20,227,29,218,20,227,29,218,0,1,255,232,5,250,2,130,6,243, |
0,17,0,55,64,32,4,11,1,4,7,1,17,15,19,1,100,13,64,5,12,5,64,16,20,72,5,128, |
9,95,0,1,0,64,9,12,72,0,0,47,43,93,205,26,205,43,50,1,47,26,204,94,93,49, |
48,0,94,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,52,74,116,84,50, |
8,117,17,109,91,91,107,17,117,9,50,83,116,5,250,41,69,90,49,53,60,61,52,49, |
90,69,41,0,0,0,0,0,0,1,0,0,21,86,0,1,3,140,12,0,0,9,9,72,0,3,0,36,255,143, |
0,3,0,55,255,219,0,3,0,60,255,219,0,3,1,82,255,143,0,3,1,91,255,143,0,3,1, |
94,255,143,0,3,1,101,255,143,0,3,1,109,255,219,0,3,1,110,255,219,0,3,1,116, |
255,219,0,20,0,20,255,104,0,36,0,3,255,143,0,36,0,55,255,104,0,36,0,57,255, |
104,0,36,0,58,255,180,0,36,0,60,255,104,0,36,0,89,255,219,0,36,0,90,255,219, |
0,36,0,92,255,219,0,36,2,3,255,104,0,41,0,15,255,29,0,41,0,17,255,29,0,41, |
0,36,255,143,0,47,0,3,255,180,0,47,0,55,255,104,0,47,0,57,255,104,0,47,0, |
58,255,104,0,47,0,60,255,104,0,47,0,92,255,180,0,47,2,3,255,143,0,51,0,3, |
255,219,0,51,0,15,254,248,0,51,0,17,254,248,0,51,0,36,255,104,0,53,0,55,255, |
219,0,53,0,57,255,219,0,53,0,58,255,219,0,53,0,60,255,219,0,55,0,3,255,219, |
0,55,0,15,255,29,0,55,0,16,255,143,0,55,0,17,255,29,0,55,0,29,255,29,0,55, |
0,30,255,29,0,55,0,36,255,104,0,55,0,50,255,219,0,55,0,68,255,29,0,55,0,70, |
255,29,0,55,0,72,255,29,0,55,0,76,255,180,0,55,0,82,255,29,0,55,0,85,255, |
180,0,55,0,86,255,29,0,55,0,88,255,180,0,55,0,90,255,143,0,55,0,92,255,143, |
0,57,0,15,255,68,0,57,0,16,255,143,0,57,0,17,255,68,0,57,0,29,255,180,0,57, |
0,30,255,180,0,57,0,36,255,104,0,57,0,68,255,104,0,57,0,72,255,143,0,57,0, |
76,255,219,0,57,0,82,255,143,0,57,0,85,255,180,0,57,0,88,255,180,0,57,0,92, |
255,180,0,58,0,15,255,143,0,58,0,16,255,219,0,58,0,17,255,143,0,58,0,29,255, |
219,0,58,0,30,255,219,0,58,0,36,255,180,0,58,0,68,255,180,0,58,0,72,255,219, |
0,58,0,82,255,219,0,58,0,85,255,219,0,58,0,88,255,219,0,58,0,92,255,238,0, |
60,0,3,255,219,0,60,0,15,254,248,0,60,0,16,255,68,0,60,0,17,254,248,0,60, |
0,29,255,143,0,60,0,30,255,123,0,60,0,36,255,104,0,60,0,68,255,104,0,60,0, |
72,255,68,0,60,0,76,255,180,0,60,0,82,255,68,0,60,0,83,255,104,0,60,0,84, |
255,68,0,60,0,88,255,143,0,60,0,89,255,143,0,73,0,73,255,219,0,73,2,3,0,37, |
0,85,0,15,255,143,0,85,0,17,255,143,0,85,2,3,0,76,0,89,0,15,255,104,0,89, |
0,17,255,104,0,90,0,15,255,143,0,90,0,17,255,143,0,92,0,15,255,104,0,92,0, |
17,255,104,1,82,1,98,255,213,1,82,1,105,255,213,1,82,1,109,255,104,1,82,1, |
110,255,104,1,82,1,111,255,197,1,82,1,116,255,104,1,82,1,124,255,219,1,82, |
1,134,255,219,1,82,1,144,255,219,1,87,1,110,255,190,1,88,1,90,0,170,1,88, |
1,91,255,104,1,88,1,94,255,104,1,88,1,98,255,141,1,88,1,101,255,104,1,88, |
1,105,255,141,1,88,1,111,255,141,1,88,1,114,255,158,1,88,1,119,255,104,1, |
88,1,120,255,180,1,88,1,122,255,70,1,88,1,128,255,104,1,88,1,130,255,180, |
1,88,1,131,255,104,1,88,1,133,255,104,1,88,1,136,255,70,1,88,1,140,255,70, |
1,88,1,143,255,70,1,88,1,147,0,98,1,88,1,149,255,70,1,89,1,110,255,209,1, |
89,1,116,255,209,1,91,0,3,255,143,1,91,1,98,255,213,1,91,1,105,255,213,1, |
91,1,109,255,104,1,91,1,110,255,104,1,91,1,111,255,197,1,91,1,116,255,104, |
1,91,1,124,255,219,1,91,1,134,255,219,1,91,1,144,255,219,1,91,2,3,255,104, |
1,93,0,15,255,31,1,93,0,17,255,31,1,93,1,90,0,164,1,93,1,91,255,68,1,93,1, |
94,255,68,1,93,1,101,255,68,1,93,1,130,255,168,1,93,1,147,0,88,1,94,0,3,255, |
143,1,94,1,98,255,213,1,94,1,105,255,213,1,94,1,109,255,137,1,94,1,110,255, |
104,1,94,1,116,255,104,1,98,1,91,255,219,1,98,1,94,255,219,1,98,1,101,255, |
219,1,98,1,110,255,190,1,98,1,116,255,190,1,100,1,98,255,193,1,100,1,105, |
255,193,1,100,1,111,255,143,1,100,1,117,255,231,1,100,1,122,255,231,1,100, |
1,125,255,231,1,100,1,127,255,231,1,100,1,129,255,231,1,100,1,135,255,231, |
1,100,1,136,255,231,1,100,1,140,255,231,1,100,1,143,255,231,1,100,1,146,255, |
231,1,100,1,149,255,231,1,100,1,151,255,231,1,101,0,3,255,143,1,101,1,98, |
255,213,1,101,1,105,255,213,1,101,1,109,255,104,1,101,1,110,255,104,1,101, |
1,116,255,104,1,105,1,91,255,219,1,105,1,94,255,213,1,105,1,101,255,219,1, |
105,1,110,255,190,1,105,1,116,255,190,1,107,0,3,255,219,1,107,0,15,254,250, |
1,107,0,17,254,250,1,107,1,91,255,104,1,107,1,94,255,104,1,107,1,101,255, |
104,1,108,1,137,255,158,1,108,1,141,255,158,1,109,0,3,255,219,1,109,0,15, |
255,31,1,109,0,17,255,31,1,109,0,29,255,31,1,109,0,30,255,31,1,109,1,90,0, |
188,1,109,1,91,255,104,1,109,1,94,255,104,1,109,1,98,255,219,1,109,1,101, |
255,104,1,109,1,105,255,219,1,109,1,111,255,219,1,109,1,114,255,219,1,109, |
1,117,255,31,1,109,1,118,255,31,1,109,1,121,255,78,1,109,1,122,255,31,1,109, |
1,124,255,78,1,109,1,126,255,31,1,109,1,128,255,106,1,109,1,130,255,180,1, |
109,1,133,255,106,1,109,1,134,255,143,1,109,1,136,255,31,1,109,1,140,255, |
31,1,109,1,142,255,80,1,109,1,143,255,31,1,109,1,144,255,143,1,109,1,145, |
255,106,1,109,1,147,0,188,1,109,1,148,255,78,1,109,1,149,255,31,1,109,1,150, |
255,78,1,110,0,3,255,219,1,110,0,15,254,250,1,110,0,16,255,70,1,110,0,17, |
254,250,1,110,0,29,255,143,1,110,0,30,255,143,1,110,1,90,0,188,1,110,1,91, |
255,104,1,110,1,94,255,104,1,110,1,98,255,141,1,110,1,101,255,104,1,110,1, |
105,255,141,1,110,1,111,255,141,1,110,1,114,255,158,1,110,1,119,255,104,1, |
110,1,120,255,180,1,110,1,122,255,70,1,110,1,124,255,158,1,110,1,128,255, |
104,1,110,1,130,255,180,1,110,1,131,255,104,1,110,1,133,255,104,1,110,1,136, |
255,70,1,110,1,140,255,70,1,110,1,143,255,70,1,110,1,147,0,121,1,110,1,149, |
255,70,1,111,1,91,255,197,1,111,1,110,255,190,1,111,1,116,255,190,1,113,1, |
117,255,178,1,113,1,122,255,178,1,113,1,125,255,178,1,113,1,129,255,217,1, |
113,1,136,255,178,1,113,1,140,255,178,1,113,1,143,255,178,1,113,1,146,255, |
178,1,113,1,149,255,178,1,113,1,151,255,178,1,114,1,110,255,209,1,114,1,116, |
255,209,1,116,0,3,255,219,1,116,1,90,0,170,1,116,1,91,255,104,1,116,1,94, |
255,104,1,116,1,98,255,141,1,116,1,101,255,104,1,116,1,105,255,141,1,116, |
1,111,255,141,1,116,1,114,255,158,1,116,1,119,255,104,1,116,1,120,255,180, |
1,116,1,122,255,70,1,116,1,128,255,104,1,116,1,130,255,180,1,116,1,131,255, |
104,1,116,1,133,255,104,1,116,1,136,255,70,1,116,1,140,255,70,1,116,1,143, |
255,70,1,116,1,147,0,98,1,116,1,149,255,70,1,125,1,132,255,217,1,125,1,137, |
255,227,1,125,1,141,255,227,1,125,1,144,255,201,1,127,1,117,255,119,1,127, |
1,119,255,219,1,127,1,122,255,119,1,127,1,124,255,170,1,127,1,125,255,180, |
1,127,1,128,255,219,1,127,1,129,255,158,1,127,1,130,255,219,1,127,1,131,255, |
219,1,127,1,134,255,170,1,127,1,136,255,119,1,127,1,137,255,170,1,127,1,140, |
255,119,1,127,1,141,255,170,1,127,1,143,255,119,1,127,1,146,255,119,1,127, |
1,149,255,119,1,127,1,151,255,119,1,129,1,132,255,217,1,131,1,117,255,231, |
1,131,1,122,255,231,1,131,1,125,255,231,1,131,1,127,255,231,1,131,1,129,255, |
231,1,131,1,135,255,231,1,131,1,136,255,231,1,131,1,139,255,231,1,131,1,140, |
255,231,1,131,1,143,255,231,1,131,1,146,255,231,1,131,1,149,255,231,1,131, |
1,151,255,231,1,132,1,117,255,225,1,132,1,122,255,225,1,132,1,125,255,225, |
1,132,1,135,255,225,1,132,1,136,255,225,1,132,1,139,255,209,1,132,1,140,255, |
225,1,132,1,142,255,207,1,132,1,143,255,219,1,132,1,146,255,225,1,132,1,149, |
255,225,1,132,1,150,255,207,1,132,1,151,255,225,1,135,1,117,255,201,1,135, |
1,122,255,201,1,135,1,125,255,201,1,135,1,127,255,201,1,135,1,135,255,201, |
1,135,1,136,255,201,1,135,1,139,255,201,1,135,1,140,255,201,1,135,1,143,255, |
201,1,135,1,149,255,201,1,136,1,132,255,217,1,136,1,137,255,227,1,136,1,141, |
255,227,1,136,1,144,255,201,1,137,1,117,255,227,1,137,1,122,255,227,1,137, |
1,127,255,227,1,137,1,136,255,227,1,137,1,139,255,227,1,137,1,140,255,227, |
1,137,1,143,255,227,1,137,1,146,255,227,1,137,1,151,255,227,1,138,1,132,255, |
217,1,138,1,137,255,227,1,138,1,141,255,227,1,141,1,117,255,227,1,141,1,122, |
255,227,1,141,1,125,255,227,1,141,1,127,255,227,1,141,1,136,255,227,1,141, |
1,139,255,227,1,141,1,140,255,227,1,141,1,143,255,227,1,141,1,146,255,227, |
1,141,1,151,255,227,1,143,1,132,255,217,1,143,1,137,255,227,1,143,1,141,255, |
227,1,143,1,144,255,201,1,144,1,117,255,201,1,144,1,122,255,201,1,144,1,125, |
255,201,1,144,1,127,255,201,1,144,1,136,255,201,1,144,1,139,255,201,1,144, |
1,140,255,201,1,144,1,143,255,201,1,144,1,146,255,201,1,144,1,149,255,201, |
1,144,1,151,255,201,1,146,1,132,255,217,1,146,1,137,255,227,1,146,1,141,255, |
227,1,146,1,144,255,201,1,149,1,132,255,217,1,149,1,137,255,227,1,149,1,141, |
255,227,1,149,1,144,255,201,1,151,1,132,255,217,1,151,1,137,255,227,1,151, |
1,141,255,227,1,151,1,144,255,201,1,154,0,15,255,6,1,154,0,17,255,6,1,154, |
0,108,255,119,1,154,0,123,255,119,1,154,1,255,255,211,1,160,2,3,255,96,1, |
161,2,3,255,119,1,166,1,170,0,68,1,166,1,173,255,233,1,166,1,177,0,45,1,166, |
1,180,255,211,1,166,1,181,255,233,1,166,1,183,255,211,1,166,1,184,255,96, |
1,166,1,185,255,166,1,166,1,186,255,188,1,166,1,189,255,96,1,166,1,195,255, |
211,1,166,1,198,0,23,1,166,1,216,255,211,1,166,1,217,255,233,1,166,1,218, |
0,23,1,166,1,227,0,45,1,166,2,3,255,141,1,167,1,166,255,211,1,167,1,173,255, |
233,1,167,1,180,255,233,1,167,1,183,255,233,1,167,1,184,255,164,1,167,1,185, |
255,209,1,167,1,186,255,233,1,167,1,187,255,211,1,167,1,189,255,164,1,167, |
1,192,255,188,1,167,1,195,255,233,1,167,1,197,255,233,1,167,1,209,255,233, |
1,167,1,217,255,211,1,168,1,166,255,188,1,168,1,170,255,211,1,168,1,172,255, |
211,1,168,1,173,255,188,1,168,1,177,255,233,1,168,1,180,255,188,1,168,1,183, |
255,188,1,168,1,184,255,119,1,168,1,185,255,188,1,168,1,186,255,188,1,168, |
1,187,255,166,1,168,1,189,255,164,1,168,1,192,255,141,1,168,1,197,255,188, |
1,168,1,202,255,233,1,168,1,210,255,233,1,168,1,216,255,188,1,168,1,217,255, |
233,1,168,1,219,255,233,1,168,1,221,255,188,1,168,1,229,255,233,1,169,0,15, |
255,6,1,169,0,17,255,6,1,169,0,108,255,119,1,169,0,123,255,119,1,169,1,166, |
255,119,1,169,1,170,255,119,1,169,1,173,255,211,1,169,1,177,255,141,1,169, |
1,178,255,209,1,169,1,180,255,141,1,169,1,183,255,164,1,169,1,197,255,188, |
1,169,1,198,255,141,1,169,1,200,255,141,1,169,1,202,255,119,1,169,1,203,255, |
119,1,169,1,206,255,141,1,169,1,209,255,141,1,169,1,210,255,141,1,169,1,211, |
255,141,1,169,1,212,255,119,1,169,1,214,255,141,1,169,1,217,255,119,1,169, |
1,225,255,141,1,169,1,226,255,141,1,169,1,228,255,141,1,169,1,229,255,119, |
1,169,1,255,255,211,1,170,1,185,0,23,1,170,1,186,255,211,1,170,1,189,255, |
186,1,170,1,205,0,68,1,170,1,212,0,23,1,170,1,217,0,45,1,171,1,173,255,211, |
1,171,1,215,255,233,1,172,1,173,255,233,1,172,1,180,255,211,1,172,1,183,255, |
233,1,172,1,184,0,23,1,172,1,185,0,45,1,172,1,192,0,45,1,172,1,198,0,23,1, |
172,1,203,255,231,1,172,1,212,255,233,1,172,1,217,255,233,1,173,1,177,255, |
233,1,173,1,180,255,233,1,173,1,183,255,233,1,173,1,184,255,211,1,173,1,185, |
255,233,1,173,1,186,255,233,1,173,1,189,255,211,1,173,1,197,255,233,1,176, |
1,173,255,233,1,176,1,180,255,233,1,176,1,183,255,233,1,176,1,185,0,23,1, |
176,1,186,255,186,1,177,1,186,255,233,1,177,1,199,0,23,1,177,1,217,0,23,1, |
178,1,186,255,233,1,178,1,189,255,233,1,178,1,198,0,23,1,178,1,203,0,23,1, |
178,1,212,0,23,1,178,1,215,0,23,1,178,1,217,0,23,1,178,1,221,255,233,1,178, |
1,227,0,23,1,180,1,166,255,211,1,180,1,170,255,211,1,180,1,172,255,211,1, |
180,1,177,255,233,1,180,1,185,255,211,1,180,1,187,255,164,1,180,1,189,255, |
211,1,180,1,197,255,211,1,180,1,202,255,211,1,180,1,209,255,233,1,180,1,219, |
255,233,1,182,0,15,254,125,1,182,0,17,254,125,1,182,0,29,255,211,1,182,0, |
30,255,211,1,182,0,123,255,141,1,182,1,166,255,119,1,182,1,170,255,119,1, |
182,1,172,255,233,1,182,1,173,255,211,1,182,1,177,255,141,1,182,1,178,255, |
233,1,182,1,180,255,211,1,182,1,183,255,233,1,182,1,184,255,164,1,182,1,185, |
255,211,1,182,1,186,255,233,1,182,1,187,255,164,1,182,1,197,255,211,1,182, |
1,198,255,188,1,182,1,202,255,96,1,182,1,203,255,166,1,182,1,212,255,166, |
1,182,1,227,255,211,1,182,1,229,255,188,1,183,1,166,255,211,1,183,1,170,255, |
211,1,183,1,173,255,233,1,183,1,177,255,188,1,183,1,178,255,233,1,183,1,180, |
255,211,1,183,1,184,255,188,1,183,1,185,255,188,1,183,1,187,255,141,1,183, |
1,189,255,188,1,183,1,192,255,186,1,183,1,195,255,233,1,183,1,198,0,23,1, |
183,1,204,0,45,1,183,1,221,255,233,1,184,0,15,255,29,1,184,0,17,255,29,1, |
184,0,108,255,166,1,184,0,123,255,166,1,184,1,166,255,188,1,184,1,170,255, |
188,1,184,1,172,0,23,1,184,1,173,255,233,1,184,1,177,255,211,1,184,1,180, |
255,164,1,184,1,186,255,188,1,184,1,197,255,211,1,184,1,198,255,164,1,184, |
1,200,255,166,1,184,1,203,255,141,1,184,1,206,255,166,1,184,1,208,255,166, |
1,184,1,209,255,164,1,184,1,210,255,166,1,184,1,212,255,96,1,184,1,213,255, |
166,1,184,1,214,255,141,1,184,1,215,255,141,1,184,1,217,255,141,1,184,1,219, |
255,166,1,184,1,223,255,166,1,184,1,225,255,166,1,184,1,226,255,166,1,184, |
1,228,255,166,1,184,1,229,255,141,1,184,1,255,255,211,1,185,0,15,254,240, |
1,185,0,17,254,240,1,185,0,29,255,211,1,185,0,30,255,211,1,185,0,108,255, |
166,1,185,0,123,255,164,1,185,1,166,255,119,1,185,1,170,255,164,1,185,1,173, |
255,211,1,185,1,177,255,188,1,185,1,180,255,188,1,185,1,186,255,188,1,185, |
1,195,255,211,1,185,1,197,255,211,1,185,1,199,255,211,1,185,1,200,255,141, |
1,185,1,201,255,164,1,185,1,202,255,96,1,185,1,203,255,119,1,185,1,204,255, |
188,1,185,1,205,255,141,1,185,1,206,255,164,1,185,1,207,255,188,1,185,1,208, |
255,164,1,185,1,209,255,119,1,185,1,210,255,164,1,185,1,211,255,164,1,185, |
1,212,255,119,1,185,1,213,255,164,1,185,1,214,255,164,1,185,1,215,255,119, |
1,185,1,219,255,164,1,185,1,220,255,164,1,185,1,222,255,164,1,185,1,223,255, |
164,1,185,1,228,255,164,1,185,1,229,255,119,1,185,1,255,255,233,1,186,1,166, |
255,211,1,186,1,170,255,188,1,186,1,177,255,188,1,186,1,184,255,141,1,186, |
1,185,255,164,1,186,1,189,255,211,1,186,1,197,255,186,1,186,1,209,255,188, |
1,187,1,173,255,211,1,187,1,180,255,188,1,187,1,183,255,188,1,187,1,186,255, |
188,1,187,1,195,255,186,1,187,1,212,255,233,1,187,1,217,255,211,1,188,1,180, |
255,211,1,188,1,198,0,45,1,191,1,198,0,23,1,191,1,217,0,45,1,192,1,197,255, |
188,1,192,2,3,255,119,1,194,1,166,255,211,1,194,1,170,255,211,1,194,1,172, |
255,188,1,194,1,173,255,233,1,194,1,177,255,186,1,194,1,178,255,211,1,194, |
1,180,255,211,1,194,1,183,255,211,1,194,1,184,255,51,1,194,1,187,255,164, |
1,194,1,189,255,96,1,194,1,195,255,233,1,194,1,197,255,164,1,194,2,3,255, |
96,1,195,1,170,255,188,1,195,1,172,255,231,1,195,1,173,255,233,1,195,1,177, |
255,188,1,195,1,187,255,186,1,195,1,197,255,211,1,195,1,202,255,188,1,195, |
1,204,0,23,1,195,1,209,255,188,1,195,1,210,255,233,1,195,1,229,255,233,1, |
196,1,166,255,188,1,196,1,170,255,166,1,196,1,172,255,211,1,196,1,177,255, |
164,1,196,1,180,255,233,1,196,1,183,255,233,1,196,1,184,255,141,1,196,1,187, |
255,164,1,196,1,189,255,188,1,196,1,202,255,164,1,196,1,209,255,164,1,196, |
1,210,255,233,1,198,1,205,255,233,1,198,1,216,255,211,1,198,1,217,255,233, |
1,198,1,221,255,211,1,199,1,198,255,209,1,199,1,202,255,164,1,199,1,203,255, |
233,1,199,1,204,255,233,1,199,1,205,255,211,1,199,1,209,255,164,1,199,1,210, |
255,211,1,199,1,215,255,233,1,199,1,217,255,211,1,199,1,218,255,233,1,199, |
1,219,255,188,1,199,1,221,255,188,1,199,1,224,255,188,1,199,1,227,255,233, |
1,199,1,229,255,211,1,200,1,198,255,233,1,200,1,199,255,233,1,200,1,202,255, |
233,1,200,1,203,255,233,1,200,1,204,255,233,1,200,1,205,255,233,1,200,1,209, |
255,209,1,200,1,210,255,233,1,200,1,212,255,233,1,200,1,215,255,233,1,200, |
1,216,255,211,1,200,1,217,255,211,1,200,1,218,255,233,1,200,1,221,255,164, |
1,200,1,224,255,188,1,200,1,229,255,233,1,201,0,15,255,6,1,201,0,17,255,6, |
1,201,1,198,255,211,1,201,1,202,255,164,1,201,1,203,255,211,1,201,1,205,255, |
233,1,201,1,209,255,211,1,201,1,212,255,211,1,201,1,215,255,211,1,201,1,229, |
255,233,1,202,1,224,255,211,1,202,1,227,0,23,1,203,1,199,255,233,1,203,1, |
202,255,211,1,203,1,204,255,233,1,203,1,205,255,211,1,203,1,209,255,188,1, |
203,1,216,255,188,1,203,1,217,255,233,1,203,1,219,255,211,1,203,1,221,255, |
188,1,204,1,199,0,23,1,204,1,217,0,23,1,204,1,221,255,233,1,204,1,224,0,45, |
1,205,1,199,255,233,1,205,1,202,255,211,1,205,1,203,255,233,1,205,1,205,255, |
233,1,205,1,209,255,233,1,205,1,212,255,233,1,205,1,215,255,233,1,205,1,217, |
255,233,1,205,1,218,255,233,1,205,1,221,255,188,1,205,1,224,255,211,1,208, |
1,198,0,45,1,208,1,199,0,45,1,208,1,203,0,23,1,208,1,205,0,23,1,208,1,209, |
0,23,1,208,1,212,0,23,1,208,1,215,0,23,1,208,1,216,0,23,1,208,1,217,0,23, |
1,208,1,227,0,23,1,209,1,212,0,23,1,209,1,221,255,211,1,210,1,199,255,233, |
1,210,1,205,255,233,1,210,1,217,0,23,1,212,1,202,255,211,1,212,1,204,255, |
233,1,212,1,205,255,233,1,212,1,209,255,211,1,212,1,216,255,211,1,212,1,217, |
255,233,1,212,1,219,255,233,1,212,1,221,255,211,1,214,1,202,255,209,1,214, |
1,205,255,233,1,214,1,209,255,186,1,214,1,216,255,211,1,214,1,217,255,233, |
1,214,1,219,255,233,1,214,1,221,255,211,1,214,1,229,255,233,1,215,1,204,0, |
23,1,215,1,212,0,23,1,215,1,221,255,233,1,215,1,227,0,23,1,216,0,15,255,29, |
1,216,0,17,255,29,1,216,1,198,255,233,1,216,1,202,255,188,1,216,1,203,255, |
233,1,216,1,204,0,68,1,216,1,209,255,211,1,216,1,212,255,233,1,216,1,215, |
255,233,1,216,1,217,0,23,1,217,0,15,255,51,1,217,0,17,255,51,1,217,0,123, |
0,23,1,217,1,198,255,233,1,217,1,199,0,23,1,217,1,202,255,188,1,217,1,203, |
255,233,1,217,1,204,0,23,1,217,1,209,255,211,1,217,1,210,255,233,1,217,1, |
212,255,231,1,217,1,214,255,233,1,217,1,215,255,233,1,217,1,218,255,233,1, |
217,1,227,255,233,1,217,1,229,255,233,1,218,1,199,255,233,1,218,1,202,255, |
211,1,218,1,209,255,211,1,218,1,216,255,211,1,218,1,217,255,233,1,218,1,221, |
255,211,1,218,1,229,255,233,1,219,1,198,255,233,1,219,1,199,255,233,1,219, |
1,203,255,233,1,219,1,205,255,233,1,219,1,212,255,233,1,219,1,215,255,233, |
1,219,1,216,255,233,1,219,1,218,255,233,1,219,1,221,255,211,1,220,1,203,255, |
233,1,220,1,205,255,233,1,220,1,212,255,233,1,220,1,215,255,233,1,223,1,203, |
255,233,1,223,1,212,255,233,1,223,1,217,0,23,1,226,1,216,255,96,1,226,1,221, |
255,119,1,227,1,202,255,211,1,227,1,203,0,23,1,227,1,205,255,233,1,227,1, |
209,255,211,1,227,1,212,0,23,1,227,1,216,255,211,1,227,1,219,255,233,1,227, |
1,229,255,233,1,228,1,202,255,211,1,228,1,204,255,233,1,228,1,209,255,211, |
1,228,1,210,255,233,1,228,1,216,255,211,1,228,1,219,255,233,1,228,1,221,255, |
211,1,242,0,15,255,51,1,242,0,17,255,51,1,244,0,15,255,6,1,244,0,17,255,6, |
1,244,0,29,255,211,1,244,0,30,255,211,1,244,0,108,255,96,1,244,0,123,255, |
96,1,244,1,255,255,211,2,2,2,2,255,219,2,3,0,3,255,180,2,3,0,86,255,219,2, |
3,2,3,255,219,2,8,1,153,255,96,2,8,1,162,255,96,2,8,1,184,255,96,2,8,1,189, |
255,188,2,8,1,192,255,188,0,0,0,0,0,28,1,86,0,1,0,0,0,0,0,0,0,64,0,130,0, |
1,0,0,0,0,0,1,0,15,0,227,0,1,0,0,0,0,0,2,0,7,1,3,0,1,0,0,0,0,0,3,0,26,1,65, |
0,1,0,0,0,0,0,4,0,15,1,124,0,1,0,0,0,0,0,5,0,12,1,166,0,1,0,0,0,0,0,6,0,14, |
1,209,0,1,0,0,0,0,0,7,0,122,2,214,0,1,0,0,0,0,0,8,0,20,3,123,0,1,0,0,0,0, |
0,9,0,14,3,174,0,1,0,0,0,0,0,11,0,28,3,247,0,1,0,0,0,0,0,12,0,46,4,114,0, |
1,0,0,0,0,0,13,0,127,5,161,0,1,0,0,0,0,0,14,0,43,6,121,0,3,0,1,4,9,0,0,0, |
128,0,0,0,3,0,1,4,9,0,1,0,30,0,195,0,3,0,1,4,9,0,2,0,14,0,243,0,3,0,1,4,9, |
0,3,0,52,1,11,0,3,0,1,4,9,0,4,0,30,1,92,0,3,0,1,4,9,0,5,0,24,1,140,0,3,0, |
1,4,9,0,6,0,28,1,179,0,3,0,1,4,9,0,7,0,244,1,224,0,3,0,1,4,9,0,8,0,40,3,81, |
0,3,0,1,4,9,0,9,0,28,3,144,0,3,0,1,4,9,0,11,0,56,3,189,0,3,0,1,4,9,0,12,0, |
92,4,20,0,3,0,1,4,9,0,13,0,254,4,161,0,3,0,1,4,9,0,14,0,86,6,33,0,68,0,105, |
0,103,0,105,0,116,0,105,0,122,0,101,0,100,0,32,0,100,0,97,0,116,0,97,0,32, |
0,169,0,32,0,50,0,48,0,48,0,55,0,32,0,65,0,115,0,99,0,101,0,110,0,100,0,101, |
0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105,0,111,0,110, |
0,46,0,32,0,65,0,108,0,108,0,32,0,114,0,105,0,103,0,104,0,116,0,115,0,32, |
0,114,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,0,68,105,103,105,116, |
105,122,101,100,32,100,97,116,97,32,169,32,50,48,48,55,32,65,115,99,101,110, |
100,101,114,32,67,111,114,112,111,114,97,116,105,111,110,46,32,65,108,108, |
32,114,105,103,104,116,115,32,114,101,115,101,114,118,101,100,46,0,0,76,0, |
105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0, |
115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115,0,0,82,0,101, |
0,103,0,117,0,108,0,97,0,114,0,0,82,101,103,117,108,97,114,0,0,65,0,115,0, |
99,0,101,0,110,0,100,0,101,0,114,0,32,0,45,0,32,0,76,0,105,0,98,0,101,0,114, |
0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0,115,0,0,65,115,99,101, |
110,100,101,114,32,45,32,76,105,98,101,114,97,116,105,111,110,32,83,97,110, |
115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83, |
0,97,0,110,0,115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115, |
0,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49,0,46,0,48,0,50,0,0,86, |
101,114,115,105,111,110,32,49,46,48,50,0,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,83,0,97,0,110,0,115,0,0,76,105,98,101,114,97,116, |
105,111,110,83,97,110,115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105, |
0,111,0,110,0,32,0,105,0,115,0,32,0,97,0,32,0,116,0,114,0,97,0,100,0,101, |
0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,32,0,82,0,101,0,100,0,32,0,72,0, |
97,0,116,0,44,0,32,0,73,0,110,0,99,0,46,0,32,0,114,0,101,0,103,0,105,0,115, |
0,116,0,101,0,114,0,101,0,100,0,32,0,105,0,110,0,32,0,85,0,46,0,83,0,46,0, |
32,0,80,0,97,0,116,0,101,0,110,0,116,0,32,0,97,0,110,0,100,0,32,0,84,0,114, |
0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,79,0,102,0,102,0,105,0,99, |
0,101,0,32,0,97,0,110,0,100,0,32,0,99,0,101,0,114,0,116,0,97,0,105,0,110, |
0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,106,0,117,0,114,0,105,0,115,0,100, |
0,105,0,99,0,116,0,105,0,111,0,110,0,115,0,46,0,0,76,105,98,101,114,97,116, |
105,111,110,32,105,115,32,97,32,116,114,97,100,101,109,97,114,107,32,111, |
102,32,82,101,100,32,72,97,116,44,32,73,110,99,46,32,114,101,103,105,115, |
116,101,114,101,100,32,105,110,32,85,46,83,46,32,80,97,116,101,110,116,32, |
97,110,100,32,84,114,97,100,101,109,97,114,107,32,79,102,102,105,99,101,32, |
97,110,100,32,99,101,114,116,97,105,110,32,111,116,104,101,114,32,106,117, |
114,105,115,100,105,99,116,105,111,110,115,46,0,0,65,0,115,0,99,0,101,0,110, |
0,100,0,101,0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105, |
0,111,0,110,0,0,65,115,99,101,110,100,101,114,32,67,111,114,112,111,114,97, |
116,105,111,110,0,0,83,0,116,0,101,0,118,0,101,0,32,0,77,0,97,0,116,0,116, |
0,101,0,115,0,111,0,110,0,0,83,116,101,118,101,32,77,97,116,116,101,115,111, |
110,0,0,104,0,116,0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97, |
0,115,0,99,0,101,0,110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99, |
0,111,0,109,0,47,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,0,0,104,0,116,0,116,0,112, |
0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0,110,0,100,0, |
101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0,116,0,121,0, |
112,0,101,0,100,0,101,0,115,0,105,0,103,0,110,0,101,0,114,0,115,0,46,0,104, |
0,116,0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,116,121,112,101,100,101,115, |
105,103,110,101,114,115,46,104,116,109,108,0,0,85,0,115,0,101,0,32,0,111, |
0,102,0,32,0,116,0,104,0,105,0,115,0,32,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102, |
0,116,0,119,0,97,0,114,0,101,0,32,0,105,0,115,0,32,0,115,0,117,0,98,0,106, |
0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,108,0,105, |
0,99,0,101,0,110,0,115,0,101,0,32,0,97,0,103,0,114,0,101,0,101,0,109,0,101, |
0,110,0,116,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,119,0,104,0,105,0,99, |
0,104,0,32,0,121,0,111,0,117,0,32,0,97,0,99,0,99,0,101,0,112,0,116,0,101, |
0,100,0,32,0,116,0,104,0,101,0,32,0,76,0,105,0,98,0,101,0,114,0,97,0,116, |
0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102,0,116, |
0,119,0,97,0,114,0,101,0,46,0,0,85,115,101,32,111,102,32,116,104,105,115, |
32,76,105,98,101,114,97,116,105,111,110,32,102,111,110,116,32,115,111,102, |
116,119,97,114,101,32,105,115,32,115,117,98,106,101,99,116,32,116,111,32, |
116,104,101,32,108,105,99,101,110,115,101,32,97,103,114,101,101,109,101,110, |
116,32,117,110,100,101,114,32,119,104,105,99,104,32,121,111,117,32,97,99, |
99,101,112,116,101,100,32,116,104,101,32,76,105,98,101,114,97,116,105,111, |
110,32,102,111,110,116,32,115,111,102,116,119,97,114,101,46,0,0,104,0,116, |
0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0, |
110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0, |
108,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,46,0,104,0,116, |
0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101,110, |
100,101,114,99,111,114,112,46,99,111,109,47,108,105,98,101,114,97,116,105, |
111,110,46,104,116,109,108,0,0,0,2,0,0,0,0,0,0,255,39,0,150,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,2,156,0,0,0,1,0,2,1,2,0,4,0,5,0,6,0,7,0,8,0,9,0, |
10,0,11,0,12,0,13,0,14,0,15,1,3,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0, |
25,0,26,0,27,0,28,0,29,1,4,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0, |
40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54, |
0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69, |
0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84, |
0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,163,0, |
132,0,133,0,189,0,150,0,232,0,134,0,142,0,139,0,157,0,169,0,164,0,138,0,218, |
0,131,0,147,1,5,1,6,0,141,1,7,0,136,1,8,0,222,1,9,0,158,0,170,0,245,0,244, |
0,246,0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144,0,100,0,203,0,101,0,200, |
0,202,0,207,0,204,0,205,0,206,0,233,0,102,0,211,0,208,0,209,0,175,0,103,0, |
240,0,145,0,214,0,212,0,213,0,104,0,235,0,237,0,137,0,106,0,105,0,107,0,109, |
0,108,0,110,0,160,0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118,0,119,0, |
234,0,120,0,122,0,121,0,123,0,125,0,124,0,184,0,161,0,127,0,126,0,128,0,129, |
0,236,0,238,0,186,1,10,1,11,1,12,1,13,1,14,1,15,0,253,0,254,1,16,1,17,1,18, |
1,19,0,255,1,0,1,20,1,21,1,22,1,1,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30, |
1,31,1,32,1,33,1,34,0,248,0,249,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1, |
43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,0,250,0,215,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,0,226,0,227,1,66,1,67,1, |
68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,0,176,0,177, |
1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,0,251,0,252,0,228,0,229, |
1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104, |
1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,0,187,1,113,1,114,1,115,1, |
116,0,230,0,231,1,117,0,166,1,118,1,119,1,120,1,121,1,122,1,123,0,216,0,225, |
1,124,0,219,0,220,0,221,0,224,0,217,0,223,1,125,1,126,1,127,1,128,1,129,1, |
130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,0,168,1,139,1,140,1,141, |
1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1, |
154,1,155,1,156,1,157,0,159,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165, |
1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,0,151,1,176,1, |
177,1,178,0,155,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188, |
1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1, |
201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213, |
1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1, |
226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238, |
1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1, |
251,1,252,1,253,1,254,1,255,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10, |
2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, |
2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,0,178,0, |
179,2,39,2,40,0,182,0,183,0,196,2,41,0,180,0,181,0,197,0,130,0,194,0,135, |
0,171,0,198,2,42,2,43,0,190,0,191,2,44,2,45,2,46,2,47,0,247,2,48,2,49,2,50, |
2,51,2,52,2,53,0,140,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2, |
64,2,65,2,66,0,152,2,67,0,154,0,153,0,239,0,165,0,146,2,68,2,69,0,156,0,167, |
0,143,2,70,0,148,0,149,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80, |
2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95, |
2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108, |
2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2, |
121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,0,185,2,132, |
2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2, |
145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157, |
2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,7,117,110,105, |
48,48,65,48,7,117,110,105,48,48,65,68,7,117,110,105,48,51,55,69,7,117,110, |
105,48,48,66,50,7,117,110,105,48,48,66,51,7,117,110,105,48,48,66,53,7,117, |
110,105,50,50,49,57,7,117,110,105,48,48,66,57,7,65,109,97,99,114,111,110, |
7,97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97,98,114,101,118,101, |
7,65,111,103,111,110,101,107,7,97,111,103,111,110,101,107,11,67,99,105,114, |
99,117,109,102,108,101,120,11,99,99,105,114,99,117,109,102,108,101,120,10, |
67,100,111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99,101,110,116, |
6,68,99,97,114,111,110,6,100,99,97,114,111,110,6,68,99,114,111,97,116,7,69, |
109,97,99,114,111,110,7,101,109,97,99,114,111,110,6,69,98,114,101,118,101, |
6,101,98,114,101,118,101,10,69,100,111,116,97,99,99,101,110,116,10,101,100, |
111,116,97,99,99,101,110,116,7,69,111,103,111,110,101,107,7,101,111,103,111, |
110,101,107,6,69,99,97,114,111,110,6,101,99,97,114,111,110,11,71,99,105,114, |
99,117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108,101,120,10, |
71,100,111,116,97,99,99,101,110,116,10,103,100,111,116,97,99,99,101,110,116, |
12,71,99,111,109,109,97,97,99,99,101,110,116,12,103,99,111,109,109,97,97, |
99,99,101,110,116,11,72,99,105,114,99,117,109,102,108,101,120,11,104,99,105, |
114,99,117,109,102,108,101,120,4,72,98,97,114,4,104,98,97,114,6,73,116,105, |
108,100,101,6,105,116,105,108,100,101,7,73,109,97,99,114,111,110,7,105,109, |
97,99,114,111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101,7,73,111, |
103,111,110,101,107,7,105,111,103,111,110,101,107,2,73,74,2,105,106,11,74, |
99,105,114,99,117,109,102,108,101,120,11,106,99,105,114,99,117,109,102,108, |
101,120,12,75,99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109,109, |
97,97,99,99,101,110,116,12,107,103,114,101,101,110,108,97,110,100,105,99, |
6,76,97,99,117,116,101,6,108,97,99,117,116,101,12,76,99,111,109,109,97,97, |
99,99,101,110,116,12,108,99,111,109,109,97,97,99,99,101,110,116,6,76,99,97, |
114,111,110,6,108,99,97,114,111,110,4,76,100,111,116,4,108,100,111,116,6, |
78,97,99,117,116,101,6,110,97,99,117,116,101,12,78,99,111,109,109,97,97,99, |
99,101,110,116,12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99,97,114, |
111,110,6,110,99,97,114,111,110,11,110,97,112,111,115,116,114,111,112,104, |
101,3,69,110,103,3,101,110,103,7,79,109,97,99,114,111,110,7,111,109,97,99, |
114,111,110,6,79,98,114,101,118,101,6,111,98,114,101,118,101,13,79,104,117, |
110,103,97,114,117,109,108,97,117,116,13,111,104,117,110,103,97,114,117,109, |
108,97,117,116,6,82,97,99,117,116,101,6,114,97,99,117,116,101,12,82,99,111, |
109,109,97,97,99,99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110, |
116,6,82,99,97,114,111,110,6,114,99,97,114,111,110,6,83,97,99,117,116,101, |
6,115,97,99,117,116,101,11,83,99,105,114,99,117,109,102,108,101,120,11,115, |
99,105,114,99,117,109,102,108,101,120,12,84,99,111,109,109,97,97,99,99,101, |
110,116,12,116,99,111,109,109,97,97,99,99,101,110,116,6,84,99,97,114,111, |
110,6,116,99,97,114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116,105,108, |
100,101,6,117,116,105,108,100,101,7,85,109,97,99,114,111,110,7,117,109,97, |
99,114,111,110,6,85,98,114,101,118,101,6,117,98,114,101,118,101,5,85,114, |
105,110,103,5,117,114,105,110,103,13,85,104,117,110,103,97,114,117,109,108, |
97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117,116,7,85,111, |
103,111,110,101,107,7,117,111,103,111,110,101,107,11,87,99,105,114,99,117, |
109,102,108,101,120,11,119,99,105,114,99,117,109,102,108,101,120,11,89,99, |
105,114,99,117,109,102,108,101,120,11,121,99,105,114,99,117,109,102,108,101, |
120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10,90,100,111,116,97,99, |
99,101,110,116,10,122,100,111,116,97,99,99,101,110,116,5,108,111,110,103, |
115,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105,110,103,97,99,117, |
116,101,7,65,69,97,99,117,116,101,7,97,101,97,99,117,116,101,11,79,115,108, |
97,115,104,97,99,117,116,101,11,111,115,108,97,115,104,97,99,117,116,101, |
7,117,110,105,48,50,67,57,5,116,111,110,111,115,13,100,105,101,114,101,115, |
105,115,116,111,110,111,115,10,65,108,112,104,97,116,111,110,111,115,9,97, |
110,111,116,101,108,101,105,97,12,69,112,115,105,108,111,110,116,111,110, |
111,115,8,69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110,111,115, |
12,79,109,105,99,114,111,110,116,111,110,111,115,12,85,112,115,105,108,111, |
110,116,111,110,111,115,10,79,109,101,103,97,116,111,110,111,115,17,105,111, |
116,97,100,105,101,114,101,115,105,115,116,111,110,111,115,5,65,108,112,104, |
97,4,66,101,116,97,5,71,97,109,109,97,7,69,112,115,105,108,111,110,4,90,101, |
116,97,3,69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75,97,112,112,97, |
6,76,97,109,98,100,97,2,77,117,2,78,117,2,88,105,7,79,109,105,99,114,111, |
110,2,80,105,3,82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112,115,105, |
108,111,110,3,80,104,105,3,67,104,105,3,80,115,105,12,73,111,116,97,100,105, |
101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,10,97,108,112,104,97,116,111,110,111,115,12,101,112,115,105,108, |
111,110,116,111,110,111,115,8,101,116,97,116,111,110,111,115,9,105,111,116, |
97,116,111,110,111,115,20,117,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116,97,5,103, |
97,109,109,97,5,100,101,108,116,97,7,101,112,115,105,108,111,110,4,122,101, |
116,97,3,101,116,97,5,116,104,101,116,97,4,105,111,116,97,5,107,97,112,112, |
97,6,108,97,109,98,100,97,2,110,117,2,120,105,7,111,109,105,99,114,111,110, |
3,114,104,111,6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97,117,7, |
117,112,115,105,108,111,110,3,112,104,105,3,99,104,105,3,112,115,105,5,111, |
109,101,103,97,12,105,111,116,97,100,105,101,114,101,115,105,115,15,117,112, |
115,105,108,111,110,100,105,101,114,101,115,105,115,12,111,109,105,99,114, |
111,110,116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110,111, |
115,10,111,109,101,103,97,116,111,110,111,115,9,97,102,105,105,49,48,48,50, |
51,9,97,102,105,105,49,48,48,53,49,9,97,102,105,105,49,48,48,53,50,9,97,102, |
105,105,49,48,48,53,51,9,97,102,105,105,49,48,48,53,52,9,97,102,105,105,49, |
48,48,53,53,9,97,102,105,105,49,48,48,53,54,9,97,102,105,105,49,48,48,53, |
55,9,97,102,105,105,49,48,48,53,56,9,97,102,105,105,49,48,48,53,57,9,97,102, |
105,105,49,48,48,54,48,9,97,102,105,105,49,48,48,54,49,9,97,102,105,105,49, |
48,48,54,50,9,97,102,105,105,49,48,49,52,53,9,97,102,105,105,49,48,48,49, |
55,9,97,102,105,105,49,48,48,49,56,9,97,102,105,105,49,48,48,49,57,9,97,102, |
105,105,49,48,48,50,48,9,97,102,105,105,49,48,48,50,49,9,97,102,105,105,49, |
48,48,50,50,9,97,102,105,105,49,48,48,50,52,9,97,102,105,105,49,48,48,50, |
53,9,97,102,105,105,49,48,48,50,54,9,97,102,105,105,49,48,48,50,55,9,97,102, |
105,105,49,48,48,50,56,9,97,102,105,105,49,48,48,50,57,9,97,102,105,105,49, |
48,48,51,48,9,97,102,105,105,49,48,48,51,49,9,97,102,105,105,49,48,48,51, |
50,9,97,102,105,105,49,48,48,51,51,9,97,102,105,105,49,48,48,51,52,9,97,102, |
105,105,49,48,48,51,53,9,97,102,105,105,49,48,48,51,54,9,97,102,105,105,49, |
48,48,51,55,9,97,102,105,105,49,48,48,51,56,9,97,102,105,105,49,48,48,51, |
57,9,97,102,105,105,49,48,48,52,48,9,97,102,105,105,49,48,48,52,49,9,97,102, |
105,105,49,48,48,52,50,9,97,102,105,105,49,48,48,52,51,9,97,102,105,105,49, |
48,48,52,52,9,97,102,105,105,49,48,48,52,53,9,97,102,105,105,49,48,48,52, |
54,9,97,102,105,105,49,48,48,52,55,9,97,102,105,105,49,48,48,52,56,9,97,102, |
105,105,49,48,48,52,57,9,97,102,105,105,49,48,48,54,53,9,97,102,105,105,49, |
48,48,54,54,9,97,102,105,105,49,48,48,54,55,9,97,102,105,105,49,48,48,54, |
56,9,97,102,105,105,49,48,48,54,57,9,97,102,105,105,49,48,48,55,48,9,97,102, |
105,105,49,48,48,55,50,9,97,102,105,105,49,48,48,55,51,9,97,102,105,105,49, |
48,48,55,52,9,97,102,105,105,49,48,48,55,53,9,97,102,105,105,49,48,48,55, |
54,9,97,102,105,105,49,48,48,55,55,9,97,102,105,105,49,48,48,55,56,9,97,102, |
105,105,49,48,48,55,57,9,97,102,105,105,49,48,48,56,48,9,97,102,105,105,49, |
48,48,56,49,9,97,102,105,105,49,48,48,56,50,9,97,102,105,105,49,48,48,56, |
51,9,97,102,105,105,49,48,48,56,52,9,97,102,105,105,49,48,48,56,53,9,97,102, |
105,105,49,48,48,56,54,9,97,102,105,105,49,48,48,56,55,9,97,102,105,105,49, |
48,48,56,56,9,97,102,105,105,49,48,48,56,57,9,97,102,105,105,49,48,48,57, |
48,9,97,102,105,105,49,48,48,57,49,9,97,102,105,105,49,48,48,57,50,9,97,102, |
105,105,49,48,48,57,51,9,97,102,105,105,49,48,48,57,52,9,97,102,105,105,49, |
48,48,57,53,9,97,102,105,105,49,48,48,57,54,9,97,102,105,105,49,48,48,57, |
55,9,97,102,105,105,49,48,48,55,49,9,97,102,105,105,49,48,48,57,57,9,97,102, |
105,105,49,48,49,48,48,9,97,102,105,105,49,48,49,48,49,9,97,102,105,105,49, |
48,49,48,50,9,97,102,105,105,49,48,49,48,51,9,97,102,105,105,49,48,49,48, |
52,9,97,102,105,105,49,48,49,48,53,9,97,102,105,105,49,48,49,48,54,9,97,102, |
105,105,49,48,49,48,55,9,97,102,105,105,49,48,49,48,56,9,97,102,105,105,49, |
48,49,48,57,9,97,102,105,105,49,48,49,49,48,9,97,102,105,105,49,48,49,57, |
51,9,97,102,105,105,49,48,48,53,48,9,97,102,105,105,49,48,48,57,56,6,87,103, |
114,97,118,101,6,119,103,114,97,118,101,6,87,97,99,117,116,101,6,119,97,99, |
117,116,101,9,87,100,105,101,114,101,115,105,115,9,119,100,105,101,114,101, |
115,105,115,6,89,103,114,97,118,101,6,121,103,114,97,118,101,9,97,102,105, |
105,48,48,50,48,56,13,117,110,100,101,114,115,99,111,114,101,100,98,108,13, |
113,117,111,116,101,114,101,118,101,114,115,101,100,6,109,105,110,117,116, |
101,6,115,101,99,111,110,100,9,101,120,99,108,97,109,100,98,108,7,117,110, |
105,50,48,51,69,7,117,110,105,50,50,49,53,7,117,110,105,50,48,55,70,4,108, |
105,114,97,6,112,101,115,101,116,97,4,69,117,114,111,9,97,102,105,105,54, |
49,50,52,56,9,97,102,105,105,54,49,50,56,57,9,97,102,105,105,54,49,51,53, |
50,7,117,110,105,50,49,50,54,9,101,115,116,105,109,97,116,101,100,9,111,110, |
101,101,105,103,104,116,104,12,116,104,114,101,101,101,105,103,104,116,104, |
115,11,102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101,110, |
101,105,103,104,116,104,115,9,97,114,114,111,119,108,101,102,116,7,97,114, |
114,111,119,117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114,114, |
111,119,100,111,119,110,9,97,114,114,111,119,98,111,116,104,9,97,114,114, |
111,119,117,112,100,110,12,97,114,114,111,119,117,112,100,110,98,115,101, |
7,117,110,105,50,50,48,54,10,111,114,116,104,111,103,111,110,97,108,12,105, |
110,116,101,114,115,101,99,116,105,111,110,11,101,113,117,105,118,97,108, |
101,110,99,101,5,104,111,117,115,101,13,114,101,118,108,111,103,105,99,97, |
108,110,111,116,10,105,110,116,101,103,114,97,108,116,112,10,105,110,116, |
101,103,114,97,108,98,116,8,83,70,49,48,48,48,48,48,8,83,70,49,49,48,48,48, |
48,8,83,70,48,49,48,48,48,48,8,83,70,48,51,48,48,48,48,8,83,70,48,50,48,48, |
48,48,8,83,70,48,52,48,48,48,48,8,83,70,48,56,48,48,48,48,8,83,70,48,57,48, |
48,48,48,8,83,70,48,54,48,48,48,48,8,83,70,48,55,48,48,48,48,8,83,70,48,53, |
48,48,48,48,8,83,70,52,51,48,48,48,48,8,83,70,50,52,48,48,48,48,8,83,70,53, |
49,48,48,48,48,8,83,70,53,50,48,48,48,48,8,83,70,51,57,48,48,48,48,8,83,70, |
50,50,48,48,48,48,8,83,70,50,49,48,48,48,48,8,83,70,50,53,48,48,48,48,8,83, |
70,53,48,48,48,48,48,8,83,70,52,57,48,48,48,48,8,83,70,51,56,48,48,48,48, |
8,83,70,50,56,48,48,48,48,8,83,70,50,55,48,48,48,48,8,83,70,50,54,48,48,48, |
48,8,83,70,51,54,48,48,48,48,8,83,70,51,55,48,48,48,48,8,83,70,52,50,48,48, |
48,48,8,83,70,49,57,48,48,48,48,8,83,70,50,48,48,48,48,48,8,83,70,50,51,48, |
48,48,48,8,83,70,52,55,48,48,48,48,8,83,70,52,56,48,48,48,48,8,83,70,52,49, |
48,48,48,48,8,83,70,52,53,48,48,48,48,8,83,70,52,54,48,48,48,48,8,83,70,52, |
48,48,48,48,48,8,83,70,53,52,48,48,48,48,8,83,70,53,51,48,48,48,48,8,83,70, |
52,52,48,48,48,48,7,117,112,98,108,111,99,107,7,100,110,98,108,111,99,107, |
5,98,108,111,99,107,7,108,102,98,108,111,99,107,7,114,116,98,108,111,99,107, |
7,108,116,115,104,97,100,101,5,115,104,97,100,101,7,100,107,115,104,97,100, |
101,9,102,105,108,108,101,100,98,111,120,6,72,50,50,48,55,51,6,72,49,56,53, |
52,51,6,72,49,56,53,53,49,10,102,105,108,108,101,100,114,101,99,116,7,116, |
114,105,97,103,117,112,7,116,114,105,97,103,114,116,7,116,114,105,97,103, |
100,110,7,116,114,105,97,103,108,102,6,99,105,114,99,108,101,6,72,49,56,53, |
51,51,9,105,110,118,98,117,108,108,101,116,9,105,110,118,99,105,114,99,108, |
101,10,111,112,101,110,98,117,108,108,101,116,9,115,109,105,108,101,102,97, |
99,101,12,105,110,118,115,109,105,108,101,102,97,99,101,3,115,117,110,6,102, |
101,109,97,108,101,4,109,97,108,101,5,115,112,97,100,101,4,99,108,117,98, |
5,104,101,97,114,116,7,100,105,97,109,111,110,100,11,109,117,115,105,99,97, |
108,110,111,116,101,14,109,117,115,105,99,97,108,110,111,116,101,100,98,108, |
7,117,110,105,70,66,48,49,7,117,110,105,70,66,48,50,7,117,110,105,70,48,48, |
53,6,109,105,100,100,111,116,7,117,110,105,70,48,48,52,7,117,110,105,50,48, |
55,52,7,117,110,105,50,48,55,53,7,117,110,105,50,48,55,55,7,117,110,105,50, |
48,55,56,8,103,108,121,112,104,53,55,49,8,103,108,121,112,104,53,55,50,8, |
103,108,121,112,104,53,55,51,8,103,108,121,112,104,53,55,52,8,103,108,121, |
112,104,53,55,53,8,103,108,121,112,104,53,55,54,8,103,108,121,112,104,53, |
55,55,8,103,108,121,112,104,53,55,56,8,103,108,121,112,104,53,55,57,8,103, |
108,121,112,104,53,56,48,8,103,108,121,112,104,53,56,49,0,0,0,0,0,0,3,0,8, |
0,2,0,17,0,1,255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,0,0,0,0,2,0,1,0,1,2,155, |
0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,10,0,76,0,78,0,4,68,70,76,84,0,26,99,121,114, |
108,0,36,103,114,101,107,0,46,108,97,116,110,0,56,0,4,0,0,0,0,255,255,0,0, |
0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0, |
0,0,0,0,1,0,0,0,10,0,84,0,98,0,4,68,70,76,84,0,26,99,121,114,108,0,38,103, |
114,101,107,0,50,108,97,116,110,0,62,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0, |
0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0, |
0,0,1,107,101,114,110,0,8,0,0,0,1,0,0,0,1,0,4,0,2,0,0,0,1,0,8,0,1,15,112, |
0,4,0,0,0,105,0,220,1,6,1,12,1,50,1,64,1,94,1,112,1,130,1,204,2,2,2,52,2, |
114,2,124,2,138,2,148,2,138,2,158,2,196,2,202,3,28,3,38,3,84,3,118,3,144, |
3,166,3,228,3,254,4,20,4,46,4,56,4,190,5,44,5,58,3,28,5,100,5,186,5,204,6, |
22,6,28,6,82,6,136,5,186,6,178,6,216,6,230,5,186,7,16,5,186,5,186,5,186,7, |
62,7,84,7,90,7,96,7,166,7,224,8,54,8,168,8,194,8,204,8,246,9,24,9,46,9,60, |
9,98,9,144,9,242,10,48,10,174,11,72,11,106,11,136,11,146,11,156,11,166,11, |
224,12,14,12,64,12,82,12,144,12,210,12,252,13,6,13,44,13,62,13,108,13,150, |
13,160,13,174,13,208,13,242,14,4,14,46,14,112,14,142,14,180,14,198,14,212, |
14,222,15,0,15,30,15,40,15,70,15,76,15,90,0,10,0,36,255,143,0,55,255,219, |
0,60,255,219,1,82,255,143,1,91,255,143,1,94,255,143,1,101,255,143,1,109,255, |
219,1,110,255,219,1,116,255,219,0,1,0,20,255,104,0,9,0,3,255,143,0,55,255, |
104,0,57,255,104,0,58,255,180,0,60,255,104,0,89,255,219,0,90,255,219,0,92, |
255,219,2,3,255,104,0,3,0,15,255,29,0,17,255,29,0,36,255,143,0,7,0,3,255, |
180,0,55,255,104,0,57,255,104,0,58,255,104,0,60,255,104,0,92,255,180,2,3, |
255,143,0,4,0,3,255,219,0,15,254,248,0,17,254,248,0,36,255,104,0,4,0,55,255, |
219,0,57,255,219,0,58,255,219,0,60,255,219,0,18,0,3,255,219,0,15,255,29,0, |
16,255,143,0,17,255,29,0,29,255,29,0,30,255,29,0,36,255,104,0,50,255,219, |
0,68,255,29,0,70,255,29,0,72,255,29,0,76,255,180,0,82,255,29,0,85,255,180, |
0,86,255,29,0,88,255,180,0,90,255,143,0,92,255,143,0,13,0,15,255,68,0,16, |
255,143,0,17,255,68,0,29,255,180,0,30,255,180,0,36,255,104,0,68,255,104,0, |
72,255,143,0,76,255,219,0,82,255,143,0,85,255,180,0,88,255,180,0,92,255,180, |
0,12,0,15,255,143,0,16,255,219,0,17,255,143,0,29,255,219,0,30,255,219,0,36, |
255,180,0,68,255,180,0,72,255,219,0,82,255,219,0,85,255,219,0,88,255,219, |
0,92,255,238,0,15,0,3,255,219,0,15,254,248,0,16,255,68,0,17,254,248,0,29, |
255,143,0,30,255,123,0,36,255,104,0,68,255,104,0,72,255,68,0,76,255,180,0, |
82,255,68,0,83,255,104,0,84,255,68,0,88,255,143,0,89,255,143,0,2,0,73,255, |
219,2,3,0,37,0,3,0,15,255,143,0,17,255,143,2,3,0,76,0,2,0,15,255,104,0,17, |
255,104,0,2,0,15,255,143,0,17,255,143,0,9,1,98,255,213,1,105,255,213,1,109, |
255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124,255,219,1,134,255, |
219,1,144,255,219,0,1,1,110,255,190,0,20,1,90,0,170,1,91,255,104,1,94,255, |
104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255,158, |
1,119,255,104,1,120,255,180,1,122,255,70,1,128,255,104,1,130,255,180,1,131, |
255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1, |
149,255,70,0,2,1,110,255,209,1,116,255,209,0,11,0,3,255,143,1,98,255,213, |
1,105,255,213,1,109,255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124, |
255,219,1,134,255,219,1,144,255,219,2,3,255,104,0,8,0,15,255,31,0,17,255, |
31,1,90,0,164,1,91,255,68,1,94,255,68,1,101,255,68,1,130,255,168,1,147,0, |
88,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,137,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,219,1,101,255,219,1,110,255,190,1, |
116,255,190,0,15,1,98,255,193,1,105,255,193,1,111,255,143,1,117,255,231,1, |
122,255,231,1,125,255,231,1,127,255,231,1,129,255,231,1,135,255,231,1,136, |
255,231,1,140,255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255, |
231,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,104,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,213,1,101,255,219,1,110,255,190,1, |
116,255,190,0,6,0,3,255,219,0,15,254,250,0,17,254,250,1,91,255,104,1,94,255, |
104,1,101,255,104,0,2,1,137,255,158,1,141,255,158,0,33,0,3,255,219,0,15,255, |
31,0,17,255,31,0,29,255,31,0,30,255,31,1,90,0,188,1,91,255,104,1,94,255,104, |
1,98,255,219,1,101,255,104,1,105,255,219,1,111,255,219,1,114,255,219,1,117, |
255,31,1,118,255,31,1,121,255,78,1,122,255,31,1,124,255,78,1,126,255,31,1, |
128,255,106,1,130,255,180,1,133,255,106,1,134,255,143,1,136,255,31,1,140, |
255,31,1,142,255,80,1,143,255,31,1,144,255,143,1,145,255,106,1,147,0,188, |
1,148,255,78,1,149,255,31,1,150,255,78,0,27,0,3,255,219,0,15,254,250,0,16, |
255,70,0,17,254,250,0,29,255,143,0,30,255,143,1,90,0,188,1,91,255,104,1,94, |
255,104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255, |
158,1,119,255,104,1,120,255,180,1,122,255,70,1,124,255,158,1,128,255,104, |
1,130,255,180,1,131,255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143, |
255,70,1,147,0,121,1,149,255,70,0,3,1,91,255,197,1,110,255,190,1,116,255, |
190,0,10,1,117,255,178,1,122,255,178,1,125,255,178,1,129,255,217,1,136,255, |
178,1,140,255,178,1,143,255,178,1,146,255,178,1,149,255,178,1,151,255,178, |
0,21,0,3,255,219,1,90,0,170,1,91,255,104,1,94,255,104,1,98,255,141,1,101, |
255,104,1,105,255,141,1,111,255,141,1,114,255,158,1,119,255,104,1,120,255, |
180,1,122,255,70,1,128,255,104,1,130,255,180,1,131,255,104,1,133,255,104, |
1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1,149,255,70,0,4,1,132, |
255,217,1,137,255,227,1,141,255,227,1,144,255,201,0,18,1,117,255,119,1,119, |
255,219,1,122,255,119,1,124,255,170,1,125,255,180,1,128,255,219,1,129,255, |
158,1,130,255,219,1,131,255,219,1,134,255,170,1,136,255,119,1,137,255,170, |
1,140,255,119,1,141,255,170,1,143,255,119,1,146,255,119,1,149,255,119,1,151, |
255,119,0,1,1,132,255,217,0,13,1,117,255,231,1,122,255,231,1,125,255,231, |
1,127,255,231,1,129,255,231,1,135,255,231,1,136,255,231,1,139,255,231,1,140, |
255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255,231,0,13,1,117, |
255,225,1,122,255,225,1,125,255,225,1,135,255,225,1,136,255,225,1,139,255, |
209,1,140,255,225,1,142,255,207,1,143,255,219,1,146,255,225,1,149,255,225, |
1,150,255,207,1,151,255,225,0,10,1,117,255,201,1,122,255,201,1,125,255,201, |
1,127,255,201,1,135,255,201,1,136,255,201,1,139,255,201,1,140,255,201,1,143, |
255,201,1,149,255,201,0,9,1,117,255,227,1,122,255,227,1,127,255,227,1,136, |
255,227,1,139,255,227,1,140,255,227,1,143,255,227,1,146,255,227,1,151,255, |
227,0,3,1,132,255,217,1,137,255,227,1,141,255,227,0,10,1,117,255,227,1,122, |
255,227,1,125,255,227,1,127,255,227,1,136,255,227,1,139,255,227,1,140,255, |
227,1,143,255,227,1,146,255,227,1,151,255,227,0,11,1,117,255,201,1,122,255, |
201,1,125,255,201,1,127,255,201,1,136,255,201,1,139,255,201,1,140,255,201, |
1,143,255,201,1,146,255,201,1,149,255,201,1,151,255,201,0,5,0,15,255,6,0, |
17,255,6,0,108,255,119,0,123,255,119,1,255,255,211,0,1,2,3,255,96,0,1,2,3, |
255,119,0,17,1,170,0,68,1,173,255,233,1,177,0,45,1,180,255,211,1,181,255, |
233,1,183,255,211,1,184,255,96,1,185,255,166,1,186,255,188,1,189,255,96,1, |
195,255,211,1,198,0,23,1,216,255,211,1,217,255,233,1,218,0,23,1,227,0,45, |
2,3,255,141,0,14,1,166,255,211,1,173,255,233,1,180,255,233,1,183,255,233, |
1,184,255,164,1,185,255,209,1,186,255,233,1,187,255,211,1,189,255,164,1,192, |
255,188,1,195,255,233,1,197,255,233,1,209,255,233,1,217,255,211,0,21,1,166, |
255,188,1,170,255,211,1,172,255,211,1,173,255,188,1,177,255,233,1,180,255, |
188,1,183,255,188,1,184,255,119,1,185,255,188,1,186,255,188,1,187,255,166, |
1,189,255,164,1,192,255,141,1,197,255,188,1,202,255,233,1,210,255,233,1,216, |
255,188,1,217,255,233,1,219,255,233,1,221,255,188,1,229,255,233,0,28,0,15, |
255,6,0,17,255,6,0,108,255,119,0,123,255,119,1,166,255,119,1,170,255,119, |
1,173,255,211,1,177,255,141,1,178,255,209,1,180,255,141,1,183,255,164,1,197, |
255,188,1,198,255,141,1,200,255,141,1,202,255,119,1,203,255,119,1,206,255, |
141,1,209,255,141,1,210,255,141,1,211,255,141,1,212,255,119,1,214,255,141, |
1,217,255,119,1,225,255,141,1,226,255,141,1,228,255,141,1,229,255,119,1,255, |
255,211,0,6,1,185,0,23,1,186,255,211,1,189,255,186,1,205,0,68,1,212,0,23, |
1,217,0,45,0,2,1,173,255,211,1,215,255,233,0,10,1,173,255,233,1,180,255,211, |
1,183,255,233,1,184,0,23,1,185,0,45,1,192,0,45,1,198,0,23,1,203,255,231,1, |
212,255,233,1,217,255,233,0,8,1,177,255,233,1,180,255,233,1,183,255,233,1, |
184,255,211,1,185,255,233,1,186,255,233,1,189,255,211,1,197,255,233,0,5,1, |
173,255,233,1,180,255,233,1,183,255,233,1,185,0,23,1,186,255,186,0,3,1,186, |
255,233,1,199,0,23,1,217,0,23,0,9,1,186,255,233,1,189,255,233,1,198,0,23, |
1,203,0,23,1,212,0,23,1,215,0,23,1,217,0,23,1,221,255,233,1,227,0,23,0,11, |
1,166,255,211,1,170,255,211,1,172,255,211,1,177,255,233,1,185,255,211,1,187, |
255,164,1,189,255,211,1,197,255,211,1,202,255,211,1,209,255,233,1,219,255, |
233,0,24,0,15,254,125,0,17,254,125,0,29,255,211,0,30,255,211,0,123,255,141, |
1,166,255,119,1,170,255,119,1,172,255,233,1,173,255,211,1,177,255,141,1,178, |
255,233,1,180,255,211,1,183,255,233,1,184,255,164,1,185,255,211,1,186,255, |
233,1,187,255,164,1,197,255,211,1,198,255,188,1,202,255,96,1,203,255,166, |
1,212,255,166,1,227,255,211,1,229,255,188,0,15,1,166,255,211,1,170,255,211, |
1,173,255,233,1,177,255,188,1,178,255,233,1,180,255,211,1,184,255,188,1,185, |
255,188,1,187,255,141,1,189,255,188,1,192,255,186,1,195,255,233,1,198,0,23, |
1,204,0,45,1,221,255,233,0,31,0,15,255,29,0,17,255,29,0,108,255,166,0,123, |
255,166,1,166,255,188,1,170,255,188,1,172,0,23,1,173,255,233,1,177,255,211, |
1,180,255,164,1,186,255,188,1,197,255,211,1,198,255,164,1,200,255,166,1,203, |
255,141,1,206,255,166,1,208,255,166,1,209,255,164,1,210,255,166,1,212,255, |
96,1,213,255,166,1,214,255,141,1,215,255,141,1,217,255,141,1,219,255,166, |
1,223,255,166,1,225,255,166,1,226,255,166,1,228,255,166,1,229,255,141,1,255, |
255,211,0,38,0,15,254,240,0,17,254,240,0,29,255,211,0,30,255,211,0,108,255, |
166,0,123,255,164,1,166,255,119,1,170,255,164,1,173,255,211,1,177,255,188, |
1,180,255,188,1,186,255,188,1,195,255,211,1,197,255,211,1,199,255,211,1,200, |
255,141,1,201,255,164,1,202,255,96,1,203,255,119,1,204,255,188,1,205,255, |
141,1,206,255,164,1,207,255,188,1,208,255,164,1,209,255,119,1,210,255,164, |
1,211,255,164,1,212,255,119,1,213,255,164,1,214,255,164,1,215,255,119,1,219, |
255,164,1,220,255,164,1,222,255,164,1,223,255,164,1,228,255,164,1,229,255, |
119,1,255,255,233,0,8,1,166,255,211,1,170,255,188,1,177,255,188,1,184,255, |
141,1,185,255,164,1,189,255,211,1,197,255,186,1,209,255,188,0,7,1,173,255, |
211,1,180,255,188,1,183,255,188,1,186,255,188,1,195,255,186,1,212,255,233, |
1,217,255,211,0,2,1,180,255,211,1,198,0,45,0,2,1,198,0,23,1,217,0,45,0,2, |
1,197,255,188,2,3,255,119,0,14,1,166,255,211,1,170,255,211,1,172,255,188, |
1,173,255,233,1,177,255,186,1,178,255,211,1,180,255,211,1,183,255,211,1,184, |
255,51,1,187,255,164,1,189,255,96,1,195,255,233,1,197,255,164,2,3,255,96, |
0,11,1,170,255,188,1,172,255,231,1,173,255,233,1,177,255,188,1,187,255,186, |
1,197,255,211,1,202,255,188,1,204,0,23,1,209,255,188,1,210,255,233,1,229, |
255,233,0,12,1,166,255,188,1,170,255,166,1,172,255,211,1,177,255,164,1,180, |
255,233,1,183,255,233,1,184,255,141,1,187,255,164,1,189,255,188,1,202,255, |
164,1,209,255,164,1,210,255,233,0,4,1,205,255,233,1,216,255,211,1,217,255, |
233,1,221,255,211,0,15,1,198,255,209,1,202,255,164,1,203,255,233,1,204,255, |
233,1,205,255,211,1,209,255,164,1,210,255,211,1,215,255,233,1,217,255,211, |
1,218,255,233,1,219,255,188,1,221,255,188,1,224,255,188,1,227,255,233,1,229, |
255,211,0,16,1,198,255,233,1,199,255,233,1,202,255,233,1,203,255,233,1,204, |
255,233,1,205,255,233,1,209,255,209,1,210,255,233,1,212,255,233,1,215,255, |
233,1,216,255,211,1,217,255,211,1,218,255,233,1,221,255,164,1,224,255,188, |
1,229,255,233,0,10,0,15,255,6,0,17,255,6,1,198,255,211,1,202,255,164,1,203, |
255,211,1,205,255,233,1,209,255,211,1,212,255,211,1,215,255,211,1,229,255, |
233,0,2,1,224,255,211,1,227,0,23,0,9,1,199,255,233,1,202,255,211,1,204,255, |
233,1,205,255,211,1,209,255,188,1,216,255,188,1,217,255,233,1,219,255,211, |
1,221,255,188,0,4,1,199,0,23,1,217,0,23,1,221,255,233,1,224,0,45,0,11,1,199, |
255,233,1,202,255,211,1,203,255,233,1,205,255,233,1,209,255,233,1,212,255, |
233,1,215,255,233,1,217,255,233,1,218,255,233,1,221,255,188,1,224,255,211, |
0,10,1,198,0,45,1,199,0,45,1,203,0,23,1,205,0,23,1,209,0,23,1,212,0,23,1, |
215,0,23,1,216,0,23,1,217,0,23,1,227,0,23,0,2,1,212,0,23,1,221,255,211,0, |
3,1,199,255,233,1,205,255,233,1,217,0,23,0,8,1,202,255,211,1,204,255,233, |
1,205,255,233,1,209,255,211,1,216,255,211,1,217,255,233,1,219,255,233,1,221, |
255,211,0,8,1,202,255,209,1,205,255,233,1,209,255,186,1,216,255,211,1,217, |
255,233,1,219,255,233,1,221,255,211,1,229,255,233,0,4,1,204,0,23,1,212,0, |
23,1,221,255,233,1,227,0,23,0,10,0,15,255,29,0,17,255,29,1,198,255,233,1, |
202,255,188,1,203,255,233,1,204,0,68,1,209,255,211,1,212,255,233,1,215,255, |
233,1,217,0,23,0,16,0,15,255,51,0,17,255,51,0,123,0,23,1,198,255,233,1,199, |
0,23,1,202,255,188,1,203,255,233,1,204,0,23,1,209,255,211,1,210,255,233,1, |
212,255,231,1,214,255,233,1,215,255,233,1,218,255,233,1,227,255,233,1,229, |
255,233,0,7,1,199,255,233,1,202,255,211,1,209,255,211,1,216,255,211,1,217, |
255,233,1,221,255,211,1,229,255,233,0,9,1,198,255,233,1,199,255,233,1,203, |
255,233,1,205,255,233,1,212,255,233,1,215,255,233,1,216,255,233,1,218,255, |
233,1,221,255,211,0,4,1,203,255,233,1,205,255,233,1,212,255,233,1,215,255, |
233,0,3,1,203,255,233,1,212,255,233,1,217,0,23,0,2,1,216,255,96,1,221,255, |
119,0,8,1,202,255,211,1,203,0,23,1,205,255,233,1,209,255,211,1,212,0,23,1, |
216,255,211,1,219,255,233,1,229,255,233,0,7,1,202,255,211,1,204,255,233,1, |
209,255,211,1,210,255,233,1,216,255,211,1,219,255,233,1,221,255,211,0,2,0, |
15,255,51,0,17,255,51,0,7,0,15,255,6,0,17,255,6,0,29,255,211,0,30,255,211, |
0,108,255,96,0,123,255,96,1,255,255,211,0,1,2,2,255,219,0,3,0,3,255,180,0, |
86,255,219,2,3,255,219,0,5,1,153,255,96,1,162,255,96,1,184,255,96,1,189,255, |
188,1,192,255,188,0,1,0,105,0,3,0,20,0,36,0,41,0,47,0,51,0,53,0,55,0,57,0, |
58,0,60,0,73,0,85,0,89,0,90,0,92,1,82,1,87,1,88,1,89,1,91,1,93,1,94,1,98, |
1,100,1,101,1,105,1,107,1,108,1,109,1,110,1,111,1,113,1,114,1,116,1,125,1, |
127,1,129,1,131,1,132,1,135,1,136,1,137,1,138,1,141,1,143,1,144,1,146,1,149, |
1,151,1,154,1,160,1,161,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1, |
176,1,177,1,178,1,180,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,191,1,192, |
1,194,1,195,1,196,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,208,1, |
209,1,210,1,212,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,223,1,226,1,227, |
1,228,1,242,1,244,2,2,2,3,2,8,0,0,0,1,0,0,0,0,199,254,176,223,0,0,0,0,191, |
26,255,128,0,0,0,0,196,4,48,20,}; |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/generated/font_droid.h |
---|
0,0 → 1,11257 |
#ifndef __STRICT_ANSI__ |
#if defined(__linux__) || defined(__FreeBSD__) |
#define HAVE_INCBIN |
#endif |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_DroidSans[139280]; |
asm(".globl pdf_font_DroidSans"); |
asm(".balign 8"); |
asm("pdf_font_DroidSans:"); |
asm(".incbin \"fonts/droid/DroidSans.ttf\""); |
#else |
static const unsigned char pdf_font_DroidSans[139280] = { |
0,1,0,0,0,19,1,0,0,4,0,48,70,70,84,77,75,29,224,116,0,2,31,244,0,0,0,28,71, |
68,69,70,2,201,0,4,0,2,14,208,0,0,0,32,71,80,79,83,236,144,228,222,0,2,15, |
64,0,0,16,180,71,83,85,66,147,60,130,75,0,2,14,240,0,0,0,80,79,83,47,50,247, |
26,134,136,0,0,1,184,0,0,0,96,99,109,97,112,29,150,101,90,0,0,12,136,0,0, |
6,242,99,118,116,32,65,244,67,234,0,0,29,92,0,0,2,20,102,112,103,109,115, |
211,35,176,0,0,19,124,0,0,7,5,103,97,115,112,0,24,0,9,0,2,14,192,0,0,0,16, |
103,108,121,102,155,28,79,66,0,0,36,172,0,1,184,160,104,101,97,100,248,253, |
254,54,0,0,1,60,0,0,0,54,104,104,101,97,14,75,8,159,0,0,1,116,0,0,0,36,104, |
109,116,120,38,164,8,117,0,0,2,24,0,0,10,112,107,101,114,110,174,170,185, |
111,0,1,221,76,0,0,21,90,108,111,99,97,120,114,13,144,0,0,31,112,0,0,5,58, |
109,97,120,112,7,1,7,208,0,0,1,152,0,0,0,32,110,97,109,101,35,87,171,194, |
0,1,242,168,0,0,7,251,112,111,115,116,26,213,54,16,0,1,250,164,0,0,20,25, |
112,114,101,112,122,200,94,246,0,0,26,132,0,0,2,213,0,1,0,0,0,1,5,30,235, |
107,75,224,95,15,60,245,0,31,8,0,0,0,0,0,201,129,215,160,0,0,0,0,201,129, |
215,160,254,96,253,147,8,103,7,72,0,0,0,8,0,2,0,0,0,0,0,0,0,1,0,0,7,62,254, |
78,0,67,8,192,254,96,254,244,8,103,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,156, |
0,1,0,0,2,156,1,82,0,84,0,140,0,5,0,2,0,16,0,47,0,90,0,0,3,158,5,192,0,3, |
0,1,0,3,4,185,1,144,0,5,0,8,5,154,5,51,0,0,1,27,5,154,5,51,0,0,3,209,0,102, |
2,18,8,5,2,11,6,4,2,2,2,2,2,4,160,0,2,175,80,0,120,251,0,0,0,0,0,0,0,0,49, |
65,83,67,0,64,0,33,251,2,5,211,254,81,1,51,7,62,1,178,96,0,0,159,223,215, |
0,0,4,58,5,129,0,0,0,32,0,2,2,236,0,68,0,0,0,0,2,170,0,0,2,57,0,0,2,57,0, |
185,2,215,0,87,4,115,0,9,4,115,0,22,7,29,0,73,5,86,0,72,1,135,0,104,2,170, |
0,127,2,170,0,12,3,29,0,33,4,172,0,100,2,57,0,184,2,170,0,91,2,57,0,187,2, |
57,0,0,4,115,0,80,4,115,0,156,4,115,0,103,4,115,0,78,4,115,0,47,4,115,0,82, |
4,115,0,104,4,115,0,105,4,115,0,89,4,115,0,96,2,57,0,187,2,57,0,184,4,172, |
0,101,4,172,0,100,4,172,0,101,4,115,0,84,8,31,0,161,5,86,0,4,5,86,0,168,5, |
199,0,104,5,199,0,168,5,86,0,168,4,227,0,168,6,57,0,103,5,199,0,168,2,57, |
0,189,4,0,0,32,5,86,0,168,4,115,0,168,6,170,0,168,5,199,0,168,6,57,0,97,5, |
86,0,168,6,57,0,97,5,199,0,168,5,86,0,93,4,227,0,46,5,199,0,158,5,86,0,9, |
7,141,0,9,5,86,0,46,5,86,0,45,4,227,0,65,2,57,0,146,2,57,0,0,2,57,0,16,3, |
193,0,10,4,115,255,225,2,170,0,106,4,115,0,87,4,115,0,132,4,0,0,87,4,115, |
0,86,4,115,0,87,2,57,0,29,4,115,0,86,4,115,0,142,1,199,0,137,1,199,255,206, |
4,0,0,138,1,199,0,138,6,170,0,136,4,115,0,136,4,115,0,86,4,115,0,132,4,115, |
0,86,2,170,0,136,4,0,0,57,2,57,0,31,4,115,0,133,4,0,0,7,5,199,255,253,4,0, |
0,23,4,0,0,5,4,0,0,49,2,172,0,34,2,20,0,183,2,172,0,34,4,172,0,92,2,170,0, |
242,4,115,0,135,4,115,0,58,4,115,0,113,4,115,255,254,2,20,0,183,4,115,0,115, |
2,170,0,45,5,229,0,31,2,246,0,26,4,115,0,83,4,172,0,100,5,229,0,31,4,107, |
255,239,3,51,0,122,4,100,0,65,2,170,0,41,2,170,0,27,2,170,0,72,4,156,0,140, |
4,76,0,80,2,57,0,187,2,170,0,119,2,170,0,80,2,236,0,27,4,115,0,83,6,172,0, |
56,6,172,0,56,6,172,0,73,4,227,0,131,5,86,0,4,5,86,0,4,5,86,0,4,5,86,0,4, |
5,86,0,4,5,86,0,4,8,0,0,24,5,199,0,104,5,86,0,168,5,86,0,168,5,86,0,168,5, |
86,0,168,2,57,0,9,2,57,0,142,2,57,255,210,2,57,0,7,5,199,0,14,5,199,0,168, |
6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,4,172,0,142,6,57,0,71,5, |
199,0,158,5,199,0,158,5,199,0,158,5,199,0,158,5,86,0,45,5,86,0,168,4,227, |
0,142,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,7, |
29,0,66,4,0,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,2,57,0,10,2, |
57,0,135,2,57,255,211,2,57,0,8,4,115,0,86,4,115,0,140,4,115,0,86,4,115,0, |
86,4,115,0,86,4,115,0,86,4,115,0,86,4,100,0,65,4,227,0,44,4,115,0,139,4,115, |
0,139,4,115,0,139,4,115,0,139,4,0,0,5,4,115,0,138,4,0,0,5,5,86,0,4,4,115, |
0,87,5,86,0,4,4,115,0,87,5,86,0,4,4,115,0,87,5,199,0,104,4,0,0,87,5,199,0, |
104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,168,4,235, |
0,86,5,199,0,14,4,115,0,86,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5, |
86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,6,57,0,103, |
4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0, |
86,5,199,0,168,4,115,0,142,5,199,0,14,4,115,0,10,2,57,255,184,2,57,255,184, |
2,57,0,12,2,57,0,12,2,57,255,210,2,57,255,210,2,57,0,92,1,199,0,31,2,57,0, |
189,2,57,0,194,5,225,0,170,3,141,0,137,4,0,0,32,1,199,255,153,5,86,0,168, |
4,0,0,138,4,0,0,138,4,115,0,168,1,199,0,91,4,115,0,168,1,199,0,126,4,115, |
0,168,2,85,0,138,4,115,0,168,2,172,0,138,4,115,0,20,1,199,0,16,5,199,0,168, |
4,115,0,140,5,199,0,168,4,115,0,140,5,199,0,168,4,115,0,140,4,213,255,254, |
5,201,0,165,4,115,0,140,6,57,0,97,4,115,0,86,6,57,0,97,4,115,0,86,6,57,0, |
97,4,115,0,86,8,0,0,97,7,141,0,86,5,199,0,168,2,170,0,136,5,199,0,168,2,170, |
0,129,5,199,0,168,2,170,0,56,5,86,0,93,4,0,0,57,5,86,0,93,4,0,0,57,5,86,0, |
93,4,0,0,57,5,86,0,93,4,0,0,57,4,227,0,46,2,57,0,31,4,227,0,46,3,0,0,31,4, |
227,0,46,2,57,0,31,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199, |
0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0, |
158,4,115,0,133,7,141,0,9,5,199,255,253,5,86,0,45,4,0,0,5,5,86,0,45,4,227, |
0,65,4,0,0,49,4,227,0,65,4,0,0,49,4,227,0,65,4,0,0,49,1,199,0,138,4,115,0, |
192,5,86,0,4,4,115,0,87,8,0,0,24,7,29,0,66,6,57,0,71,4,227,0,44,2,170,0,0, |
2,170,0,0,2,170,0,51,2,170,255,221,2,170,0,156,2,170,0,51,2,170,0,80,2,170, |
255,233,2,170,0,22,2,170,0,205,2,170,0,29,5,87,0,4,2,57,0,187,6,70,255,245, |
6,180,255,242,3,18,255,232,6,50,255,187,6,216,0,65,6,5,255,187,1,199,255, |
176,5,86,0,4,5,86,0,168,4,104,0,168,5,88,0,61,5,86,0,168,4,227,0,65,5,199, |
0,168,6,57,0,97,2,57,0,189,5,86,0,168,5,88,0,10,6,170,0,168,5,199,0,168,5, |
51,0,90,6,57,0,97,5,199,0,168,5,86,0,168,4,242,0,108,4,227,0,46,5,86,0,45, |
6,98,0,117,5,86,0,46,6,175,0,145,5,251,0,87,2,57,0,7,5,86,0,45,4,160,0,86, |
3,145,0,70,4,115,0,106,1,199,0,137,4,96,0,133,4,160,0,86,4,154,0,142,4,0, |
0,7,4,116,0,86,3,145,0,70,3,135,0,86,4,115,0,106,4,115,0,106,1,199,0,137, |
4,0,0,138,4,0,0,14,4,156,0,138,4,0,0,0,3,149,0,86,4,115,0,86,5,133,0,79,4, |
141,0,132,3,219,0,86,4,240,0,86,3,41,0,29,4,96,0,133,5,48,0,85,4,51,0,21, |
5,180,0,135,6,63,0,83,1,199,255,205,4,96,0,133,4,115,0,86,4,96,0,133,6,63, |
0,83,5,87,0,168,6,235,0,46,4,85,0,168,5,192,0,104,5,86,0,93,2,57,0,189,2, |
57,0,7,4,0,0,32,8,117,0,18,8,21,0,168,6,213,0,46,4,169,0,168,5,21,0,55,5, |
192,0,168,5,86,0,4,5,64,0,168,5,86,0,168,4,85,0,168,5,107,0,15,5,86,0,168, |
7,99,0,28,4,213,0,67,5,192,0,168,5,192,0,168,4,169,0,168,5,64,0,18,6,170, |
0,168,5,199,0,168,6,57,0,97,5,192,0,166,5,86,0,168,5,199,0,104,4,227,0,46, |
5,21,0,55,6,21,0,118,5,86,0,46,5,235,0,168,5,85,0,160,7,85,0,168,7,128,0, |
168,6,85,0,46,7,21,0,168,5,64,0,168,5,192,0,105,8,21,0,168,5,199,0,96,4,115, |
0,87,4,149,0,120,4,64,0,142,2,235,0,142,4,171,0,20,4,115,0,87,5,90,0,7,3, |
171,0,49,4,120,0,142,4,120,0,142,3,128,0,138,4,171,0,11,5,128,0,142,4,107, |
0,142,4,115,0,86,4,85,0,142,4,115,0,132,4,0,0,87,3,170,0,35,4,0,0,5,6,149, |
0,86,4,0,0,23,4,149,0,142,4,43,0,122,6,107,0,142,6,149,0,142,5,0,0,45,5,192, |
0,142,4,43,0,142,4,21,0,55,6,0,0,142,4,85,0,17,4,115,0,87,4,115,0,10,2,235, |
0,142,4,21,0,87,4,0,0,57,1,199,0,137,2,57,255,248,1,199,255,206,7,64,0,11, |
6,128,0,142,4,115,0,10,3,128,0,138,4,0,0,5,4,107,0,142,3,233,0,168,3,74,0, |
142,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253, |
5,86,0,45,4,0,0,5,4,115,0,0,8,0,0,0,8,0,0,0,4,107,255,225,1,199,0,127,1,199, |
0,127,1,199,0,127,1,199,0,126,2,170,0,75,2,170,0,75,2,170,0,75,4,115,0,138, |
4,115,0,136,2,205,0,81,8,0,1,22,8,0,0,55,1,128,0,85,2,213,0,85,2,170,0,88, |
2,170,0,89,4,0,0,185,2,170,255,192,1,86,254,96,2,235,0,101,4,115,0,4,4,115, |
0,58,8,192,0,158,4,115,0,16,7,21,0,69,2,150,0,19,8,149,0,188,8,0,0,188,6, |
37,0,108,4,205,0,88,6,172,0,80,6,172,0,61,6,172,0,93,6,172,0,145,8,0,1,162, |
4,0,1,16,8,0,1,162,4,0,1,16,8,0,1,162,4,0,1,16,4,0,1,16,3,244,0,56,4,229, |
0,4,6,150,0,235,5,180,0,154,4,172,0,101,4,100,0,51,5,180,0,87,7,213,1,152, |
5,192,1,22,2,49,255,158,4,100,0,56,4,100,0,65,4,171,0,100,4,100,0,63,4,100, |
0,65,4,213,0,157,4,172,0,100,4,213,2,34,4,213,1,5,5,171,255,246,5,0,1,216, |
5,171,2,141,5,171,255,246,5,171,2,141,5,171,255,246,5,171,2,141,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,1,217,5, |
171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255,246, |
5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171, |
255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,0,0,5,171, |
0,0,5,171,0,0,5,171,0,0,5,171,2,213,5,171,0,103,5,171,0,0,5,213,0,0,4,213, |
0,123,4,213,0,6,2,214,0,109,2,214,0,109,8,0,0,0,7,235,1,158,7,235,1,145,7, |
235,1,158,7,235,1,145,3,244,0,8,4,213,0,167,4,213,0,178,4,213,0,41,4,213, |
0,41,2,214,0,115,8,43,1,177,8,107,1,209,7,85,1,70,6,0,1,218,6,0,1,81,4,64, |
0,59,5,64,0,60,4,192,0,102,4,21,0,66,4,0,0,196,6,0,1,16,4,0,0,29,4,0,0,29, |
2,170,0,119,2,170,0,243,2,170,0,127,2,170,0,14,2,170,0,53,2,170,0,43,2,170, |
0,45,2,170,255,229,1,199,0,124,1,199,0,130,2,90,0,106,2,90,0,72,2,152,0,0, |
2,152,0,0,2,135,0,45,2,160,255,233,3,47,0,32,2,72,255,232,0,0,0,3,0,0,0,3, |
0,0,0,28,0,1,0,0,0,0,4,232,0,3,0,1,0,0,0,28,0,4,4,204,0,0,0,190,0,128,0,6, |
0,62,0,126,1,127,1,146,1,255,2,199,2,201,2,221,3,126,3,138,3,140,3,161,3, |
206,4,12,4,79,4,92,4,95,4,145,30,133,30,243,32,21,32,30,32,34,32,38,32,48, |
32,51,32,58,32,60,32,62,32,68,32,127,32,164,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,94,33,149,33,168,34,2,34,6,34,15,34,18,34,21,34,26,34, |
31,34,41,34,43,34,72,34,97,34,101,35,2,35,16,35,33,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,108,37,128,37,132,37,136,37, |
140,37,147,37,161,37,172,37,178,37,186,37,188,37,196,37,203,37,207,37,217, |
37,230,38,60,38,64,38,66,38,96,38,99,38,102,38,107,240,2,240,5,251,2,255, |
255,0,0,0,32,0,160,1,146,1,250,2,198,2,201,2,216,3,126,3,132,3,140,3,142, |
3,163,4,1,4,14,4,81,4,94,4,144,30,128,30,242,32,19,32,23,32,32,32,38,32,48, |
32,50,32,57,32,60,32,62,32,68,32,127,32,163,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,91,33,144,33,168,34,2,34,6,34,15,34,17,34,21,34,25,34, |
30,34,41,34,43,34,72,34,96,34,100,35,2,35,16,35,32,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,80,37,128,37,132,37,136,37,140, |
37,144,37,160,37,170,37,178,37,186,37,188,37,196,37,202,37,207,37,216,37, |
230,38,58,38,64,38,66,38,96,38,99,38,101,38,106,240,1,240,5,251,1,255,255, |
255,227,0,0,255,174,255,71,254,129,254,128,254,114,252,160,253,204,253,203, |
253,202,253,201,253,151,253,150,253,149,253,148,253,100,227,118,227,10,225, |
235,225,234,225,233,225,230,225,221,225,220,225,215,225,214,225,213,225,208, |
225,150,225,115,225,113,225,109,225,21,225,8,225,6,224,251,224,248,224,241, |
224,197,224,148,224,130,224,41,224,38,224,30,224,29,223,255,0,0,224,19,224, |
10,224,9,223,237,223,214,223,212,223,56,223,43,223,28,221,62,221,61,221,52, |
221,49,221,46,221,43,221,40,221,33,221,26,221,19,221,12,220,249,220,230,220, |
227,220,224,220,221,220,218,220,206,220,198,220,193,220,186,220,185,220,178, |
220,173,220,170,220,162,220,150,220,67,220,64,220,63,220,34,220,32,220,31, |
220,28,18,135,18,133,7,135,0,1,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
2,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,98,0,99,0,100,0,101,0, |
102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,16,0,110,0,111,0,112,0,113, |
0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0, |
126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138, |
0,139,0,140,0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,148,0,149,0,150,0, |
151,0,152,0,153,0,154,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,163, |
0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,173,0,174,0,175,0, |
176,0,177,0,178,0,179,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188, |
0,189,0,190,0,191,0,192,0,193,0,194,0,195,0,196,0,197,0,198,0,199,0,200,0, |
201,0,202,0,203,0,204,0,205,0,206,0,207,0,208,0,209,0,210,0,211,0,212,0,213, |
0,214,0,215,0,216,0,217,0,218,0,219,0,220,0,221,0,222,0,223,0,224,0,225,0, |
226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0,238, |
0,239,0,240,0,241,0,242,0,243,0,244,0,245,0,246,0,247,0,248,0,249,0,250,0, |
251,0,252,0,253,0,254,0,255,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10, |
1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25, |
1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40, |
1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,0,119,2,48,0,6,2,10,0,0,0,0,1,0,0, |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,0,4,0,5,0,6,0,7,0, |
8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0, |
23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37, |
0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52, |
0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67, |
0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82, |
0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97, |
0,0,0,132,0,133,0,135,0,137,0,145,0,150,0,156,0,161,0,160,0,162,0,164,0,163, |
0,165,0,167,0,169,0,168,0,170,0,171,0,173,0,172,0,174,0,175,0,177,0,179,0, |
178,0,180,0,182,0,181,0,186,0,185,0,187,0,188,2,9,0,112,0,99,0,100,0,104, |
2,11,0,118,0,159,0,110,0,106,2,29,0,116,0,105,2,54,0,134,0,152,2,49,0,113, |
2,56,2,57,0,102,0,117,2,43,2,46,2,45,1,137,2,52,0,107,0,122,1,114,0,166,0, |
184,0,127,0,98,0,109,2,48,1,64,2,53,2,44,0,108,0,123,2,12,0,3,0,128,0,131, |
0,149,1,18,1,19,1,254,1,255,2,6,2,7,2,2,2,3,0,183,2,119,0,191,1,56,2,20,2, |
25,2,16,2,17,2,136,2,137,2,10,0,119,2,4,2,8,2,13,0,130,0,138,0,129,0,139, |
0,136,0,141,0,142,0,143,0,140,0,147,0,148,0,0,0,146,0,154,0,155,0,153,0,241, |
1,71,1,78,0,111,1,74,1,75,1,76,0,120,1,79,1,77,1,72,0,0,64,69,89,88,85,84, |
83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59, |
58,57,56,55,54,53,49,48,47,46,45,44,40,39,38,37,36,35,34,33,31,24,20,17,16, |
15,14,13,11,10,9,8,7,6,5,4,3,2,1,0,44,69,35,70,96,32,176,38,96,176,4,38,35, |
72,72,45,44,69,35,70,35,97,32,176,38,97,176,4,38,35,72,72,45,44,69,35,70, |
96,176,32,97,32,176,70,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,32,96, |
32,176,38,97,176,32,97,176,4,38,35,72,72,45,44,69,35,70,96,176,64,97,32,176, |
102,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,64,96,32,176,38,97,176, |
64,97,176,4,38,35,72,72,45,44,1,16,32,60,0,60,45,44,32,69,35,32,176,205,68, |
35,32,184,1,90,81,88,35,32,176,141,68,35,89,32,176,237,81,88,35,32,176,77, |
68,35,89,32,176,4,38,81,88,35,32,176,13,68,35,89,33,33,45,44,32,32,69,24, |
104,68,32,176,1,96,32,69,176,70,118,104,138,69,96,68,45,44,1,177,11,10,67, |
35,67,101,10,45,44,0,177,10,11,67,35,67,11,45,44,0,176,40,35,112,177,1,40, |
62,1,176,40,35,112,177,2,40,69,58,177,2,0,8,13,45,44,32,69,176,3,37,69,97, |
100,176,80,81,88,69,68,27,33,33,89,45,44,73,176,14,35,68,45,44,32,69,176, |
0,67,96,68,45,44,1,176,6,67,176,7,67,101,10,45,44,32,105,176,64,97,176,0, |
139,32,177,44,192,138,140,184,16,0,98,96,43,12,100,35,100,97,92,88,176,3, |
97,89,45,44,138,3,69,138,138,135,176,17,43,176,41,35,68,176,41,122,228,24, |
45,44,69,101,176,44,35,68,69,176,43,35,68,45,44,75,82,88,69,68,27,33,33,89, |
45,44,75,81,88,69,68,27,33,33,89,45,44,1,176,5,37,16,35,32,138,245,0,176, |
1,96,35,237,236,45,44,1,176,5,37,16,35,32,138,245,0,176,1,97,35,237,236,45, |
44,1,176,6,37,16,245,0,237,236,45,44,70,35,70,96,138,138,70,35,32,70,138, |
96,138,97,184,255,128,98,35,32,16,35,138,177,12,12,138,112,69,96,32,176,0, |
80,88,176,1,97,184,255,186,139,27,176,70,140,89,176,16,96,104,1,58,45,44, |
32,69,176,3,37,70,82,75,176,19,81,91,88,176,2,37,70,32,104,97,176,3,37,176, |
3,37,63,35,33,56,27,33,17,89,45,44,32,69,176,3,37,70,80,88,176,2,37,70,32, |
104,97,176,3,37,176,3,37,63,35,33,56,27,33,17,89,45,44,0,176,7,67,176,6,67, |
11,45,44,33,33,12,100,35,100,139,184,64,0,98,45,44,33,176,128,81,88,12,100, |
35,100,139,184,32,0,98,27,178,0,64,47,43,89,176,2,96,45,44,33,176,192,81, |
88,12,100,35,100,139,184,21,85,98,27,178,0,128,47,43,89,176,2,96,45,44,12, |
100,35,100,139,184,64,0,98,96,35,33,45,44,75,83,88,138,176,4,37,73,100,35, |
69,105,176,64,139,97,176,128,98,176,32,97,106,176,14,35,68,35,16,176,14,246, |
27,33,35,138,18,17,32,57,47,89,45,44,75,83,88,32,176,3,37,73,100,105,32,176, |
5,38,176,6,37,73,100,35,97,176,128,98,176,32,97,106,176,14,35,68,176,4,38, |
16,176,14,246,138,16,176,14,35,68,176,14,246,176,14,35,68,176,14,237,27,138, |
176,4,38,17,18,32,57,35,32,57,47,47,89,45,44,69,35,69,96,35,69,96,35,69,96, |
35,118,104,24,176,128,98,32,45,44,176,72,43,45,44,32,69,176,0,84,88,176,64, |
68,32,69,176,64,97,68,27,33,33,89,45,44,69,177,48,47,69,35,69,97,96,176,1, |
96,105,68,45,44,75,81,88,176,47,35,112,176,20,35,66,27,33,33,89,45,44,75, |
81,88,32,176,3,37,69,105,83,88,68,27,33,33,89,27,33,33,89,45,44,69,176,20, |
67,176,0,96,99,176,1,96,105,68,45,44,176,47,69,68,45,44,69,35,32,69,138,96, |
68,45,44,69,35,69,96,68,45,44,75,35,81,88,185,0,51,255,224,177,52,32,27,179, |
51,0,52,0,89,68,68,45,44,176,22,67,88,176,3,38,69,138,88,100,102,176,31,96, |
27,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,89,35,88,101,89,176,41, |
35,68,35,16,176,41,224,27,33,33,33,33,33,89,45,44,176,2,67,84,88,75,83,35, |
75,81,90,88,56,27,33,33,89,27,33,33,33,33,89,45,44,176,22,67,88,176,4,37, |
69,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,35,88,27,101,89,176,41, |
35,68,176,5,37,176,8,37,8,32,88,2,27,3,89,176,4,37,16,176,5,37,32,70,176, |
4,37,35,66,60,176,4,37,176,7,37,8,176,7,37,16,176,6,37,32,70,176,4,37,176, |
1,96,35,66,60,32,88,1,27,0,89,176,4,37,16,176,5,37,176,41,224,176,41,32,69, |
101,68,176,7,37,16,176,6,37,176,41,224,176,5,37,176,8,37,8,32,88,2,27,3,89, |
176,5,37,176,3,37,67,72,176,4,37,176,7,37,8,176,6,37,176,3,37,176,1,96,67, |
72,27,33,89,33,33,33,33,33,33,33,45,44,2,176,4,37,32,32,70,176,4,37,35,66, |
176,5,37,8,176,3,37,69,72,33,33,33,33,45,44,2,176,3,37,32,176,4,37,8,176, |
2,37,67,72,33,33,33,45,44,69,35,32,69,24,32,176,0,80,32,88,35,101,35,89,35, |
104,32,176,64,80,88,33,176,64,89,35,88,101,89,138,96,68,45,44,75,83,35,75, |
81,90,88,32,69,138,96,68,27,33,33,89,45,44,75,84,88,32,69,138,96,68,27,33, |
33,89,45,44,75,83,35,75,81,90,88,56,27,33,33,89,45,44,176,0,33,75,84,88,56, |
27,33,33,89,45,44,176,2,67,84,88,176,70,43,27,33,33,33,33,89,45,44,176,2, |
67,84,88,176,71,43,27,33,33,33,89,45,44,176,2,67,84,88,176,72,43,27,33,33, |
33,33,89,45,44,176,2,67,84,88,176,73,43,27,33,33,33,89,45,44,32,138,8,35, |
75,83,138,75,81,90,88,35,56,27,33,33,89,45,44,0,176,2,37,73,176,0,83,88,32, |
176,64,56,17,27,33,89,45,44,1,70,35,70,96,35,70,97,35,32,16,32,70,138,97, |
184,255,128,98,138,177,64,64,138,112,69,96,104,58,45,44,32,138,35,73,100, |
138,35,83,88,60,27,33,89,45,44,75,82,88,125,27,122,89,45,44,176,18,0,75,1, |
75,84,66,45,44,177,2,0,66,177,35,1,136,81,177,64,1,136,83,90,88,185,16,0, |
0,32,136,84,88,178,2,1,2,67,96,66,89,177,36,1,136,81,88,185,32,0,0,64,136, |
84,88,178,2,2,2,67,96,66,177,36,1,136,84,88,178,2,32,2,67,96,66,0,75,1,75, |
82,88,178,2,8,2,67,96,66,89,27,185,64,0,0,128,136,84,88,178,2,4,2,67,96,66, |
89,185,64,0,0,128,99,184,1,0,136,84,88,178,2,8,2,67,96,66,89,185,64,0,1,0, |
99,184,2,0,136,84,88,178,2,16,2,67,96,66,89,185,64,0,2,0,99,184,4,0,136,84, |
88,178,2,64,2,67,96,66,89,89,89,89,89,45,44,69,24,104,35,75,81,88,35,32,69, |
32,100,176,64,80,88,124,89,104,138,96,89,68,45,44,176,0,22,176,2,37,176,2, |
37,1,176,1,35,62,0,176,2,35,62,177,1,2,6,12,176,10,35,101,66,176,11,35,66, |
1,176,1,35,63,0,176,2,35,63,177,1,2,6,12,176,6,35,101,66,176,7,35,66,176, |
1,22,1,45,44,122,138,16,69,35,245,24,45,0,0,0,177,9,64,190,1,7,0,1,0,31,1, |
7,0,1,0,159,1,4,64,142,1,192,253,1,175,253,1,0,253,1,10,79,251,1,32,251,1, |
245,80,40,31,242,70,40,31,241,70,42,31,240,70,43,31,95,239,127,239,2,15,239, |
79,239,95,239,143,239,175,239,5,11,229,228,30,31,227,226,70,31,15,226,1,64, |
226,70,22,31,225,224,70,31,207,224,223,224,239,224,3,64,224,51,54,70,224, |
70,24,31,221,61,223,85,222,61,3,85,223,1,3,85,220,3,255,31,15,213,31,213, |
2,15,213,31,213,2,64,202,24,27,70,207,194,1,189,192,60,31,193,80,38,31,188, |
190,40,31,255,185,1,80,184,112,184,128,184,3,184,255,192,64,255,184,18,50, |
70,31,183,63,183,79,183,111,183,127,183,159,183,175,183,7,112,178,160,178, |
176,178,3,15,178,1,144,181,1,176,181,1,15,181,1,8,15,179,63,179,239,179,3, |
128,176,144,176,2,176,176,192,176,208,176,3,47,175,63,175,2,160,173,176,173, |
2,192,173,208,173,2,47,172,63,172,2,159,171,1,192,170,208,170,2,79,169,143, |
169,2,47,169,111,169,191,169,255,169,4,156,155,36,31,80,155,1,111,150,1,191, |
150,1,150,70,29,31,149,148,23,31,127,148,143,148,255,148,3,48,145,64,145, |
2,128,145,1,112,143,128,143,2,144,143,1,192,143,208,143,2,79,140,95,140,111, |
140,3,134,70,255,31,159,133,1,132,131,49,31,116,115,63,31,115,80,38,31,111, |
110,60,31,110,70,53,31,26,1,24,85,25,51,24,85,7,51,3,85,6,3,255,31,96,80, |
38,31,95,80,38,31,92,70,49,31,91,90,72,31,90,70,49,31,19,50,18,85,5,1,3,85, |
4,50,3,85,111,3,1,15,3,63,3,2,239,81,255,81,2,64,81,53,56,70,64,81,37,40, |
70,207,64,84,80,1,73,70,32,31,72,70,53,31,71,70,53,31,175,70,1,223,70,239, |
70,2,128,70,1,22,50,21,85,17,1,15,85,16,50,15,85,2,1,0,85,1,0,1,31,31,15, |
63,15,95,15,127,15,4,15,15,47,15,79,15,111,15,143,15,223,15,255,15,7,63,15, |
127,15,239,15,3,111,0,1,128,22,1,5,1,184,1,144,177,84,83,43,43,75,184,7,255, |
82,75,176,7,80,91,176,1,136,176,37,83,176,1,136,176,64,81,90,176,6,136,176, |
0,85,90,91,88,177,1,1,142,89,133,141,141,0,66,29,75,176,50,83,88,176,96,29, |
89,75,176,100,83,88,176,64,29,89,75,176,128,83,88,176,16,29,177,22,0,66,89, |
116,115,116,117,43,43,43,43,43,1,115,116,117,43,43,43,0,116,43,43,115,115, |
117,43,43,43,1,43,43,43,0,43,43,43,43,43,43,1,43,43,0,43,43,1,43,115,43,0, |
116,115,116,117,115,116,115,43,1,43,116,117,0,115,43,115,116,1,115,115,116, |
0,115,116,116,115,116,115,1,94,115,115,116,115,115,0,115,43,115,115,1,43, |
0,43,1,43,0,115,43,116,117,43,43,43,43,1,43,43,116,43,43,94,115,43,0,43,94, |
115,116,1,43,43,43,0,43,115,115,94,115,115,115,1,115,115,115,24,94,0,0,0, |
5,204,5,204,0,125,5,129,0,21,0,121,5,129,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
4,58,0,20,0,119,0,0,255,236,0,0,0,0,255,236,0,0,0,0,255,236,0,0,254,87,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,180,0,189,0,175,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0, |
126,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,191,0,195,0,171,0,0,0,0,0,155,0,141, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,170,0,0,0,0,0, |
0,0,148,0,153,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, |
0,131,0,141,0,164,0,180,0,0,0,0,0,0,0,0,0,0,0,96,0,106,0,121,0,152,0,172, |
0,184,0,167,0,0,1,34,1,51,0,195,0,107,0,0,0,0,0,0,0,219,0,201,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,225,1,201,0,146,0,168,0,107,0,146,0,183, |
0,107,0,155,0,0,2,123,2,242,0,146,2,82,0,110,2,215,3,129,0,130,0,137,0,160, |
0,159,1,105,0,143,0,0,1,96,0,164,1,91,0,94,0,130,0,0,0,0,0,0,0,94,0,101,0, |
111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,144,0,165,0,122,0,128,0,0,0,0,0,0, |
0,0,0,0,5,129,255,243,0,13,252,167,0,131,0,137,0,143,0,150,0,105,0,113,0, |
0,0,0,0,0,0,0,0,0,0,168,1,249,0,0,0,0,3,31,0,167,0,174,0,181,0,0,0,0,0,129, |
0,0,0,0,0,0,0,0,7,72,3,106,2,182,2,2,253,147,0,0,0,145,0,103,0,145,0,97,1, |
217,0,0,2,141,3,65,0,68,5,17,0,0,0,44,0,44,0,44,0,44,1,22,1,96,2,4,3,4,3, |
230,4,240,5,14,5,84,5,158,5,246,6,50,6,114,6,144,6,178,6,218,7,80,7,150,8, |
32,8,222,9,68,9,226,10,140,10,206,11,158,12,80,12,126,12,200,13,18,13,74, |
13,146,14,20,15,100,16,22,16,172,17,64,17,160,17,222,18,40,18,202,19,22,19, |
96,19,194,20,44,20,88,21,184,22,64,22,182,23,26,23,192,24,94,25,40,26,38, |
26,146,27,42,29,162,30,254,32,64,32,148,32,190,32,242,33,28,34,172,34,202, |
34,244,35,160,36,54,36,172,37,54,37,166,38,32,38,238,39,88,39,166,40,102, |
41,0,41,68,42,246,43,100,43,212,44,112,45,20,45,98,46,16,46,114,46,230,48, |
52,50,86,51,226,53,124,54,24,54,136,55,126,55,240,56,112,57,142,58,18,58, |
196,59,100,59,234,60,238,62,28,62,144,63,134,64,72,64,168,64,210,65,178,65, |
200,66,36,66,110,66,232,67,126,67,170,68,42,68,106,68,138,68,244,69,48,69, |
166,70,14,70,48,70,90,70,124,71,8,71,32,71,56,71,80,71,104,71,130,71,154, |
72,14,72,34,72,58,72,82,72,106,72,132,72,156,72,178,72,200,72,224,73,80,73, |
104,73,128,73,152,73,176,73,200,73,226,74,68,74,252,75,20,75,44,75,68,75, |
94,75,118,75,212,76,154,76,178,76,202,76,226,76,250,77,20,77,46,78,38,78, |
58,78,82,78,106,78,130,78,156,78,180,78,202,78,224,78,248,79,172,79,196,79, |
220,79,244,80,12,80,36,80,62,80,126,81,26,81,50,81,74,81,98,81,124,81,148, |
82,24,82,50,82,74,82,98,82,122,82,146,82,166,82,186,82,210,82,234,83,2,83, |
26,83,50,83,70,83,94,83,118,83,142,83,164,83,172,84,74,84,98,84,122,84,146, |
84,170,84,194,84,214,84,234,84,254,85,22,85,46,85,70,85,94,85,118,85,142, |
85,166,85,186,85,206,85,230,85,254,86,22,86,142,87,20,87,42,87,64,87,88,87, |
110,87,132,87,154,87,172,87,192,87,216,88,170,88,182,88,210,88,234,89,228, |
89,248,90,12,90,124,90,148,90,170,90,190,90,210,90,232,91,22,91,42,91,62, |
91,150,91,224,91,248,92,16,92,36,92,56,92,80,92,104,92,116,93,20,93,164,93, |
188,93,212,93,236,94,4,94,30,94,56,94,216,95,154,95,178,95,202,95,222,95, |
242,96,10,96,34,96,58,96,82,96,106,96,130,96,150,96,170,96,194,96,218,96, |
238,98,112,98,136,98,158,98,238,99,96,99,120,99,144,99,168,99,192,99,216, |
99,240,100,10,100,36,100,62,100,88,100,122,100,142,100,166,100,190,100,214, |
100,238,101,8,101,32,101,56,101,80,101,100,101,124,101,148,101,244,102,108, |
103,104,103,140,103,164,103,188,103,212,103,236,104,34,104,88,104,142,104, |
214,104,238,105,86,105,162,106,244,107,70,107,118,107,188,107,248,109,10, |
109,50,109,112,109,172,109,206,112,188,112,236,114,22,114,30,114,38,114,82, |
114,208,114,216,114,224,114,232,115,138,115,146,115,154,116,34,116,42,116, |
50,116,116,116,124,116,182,116,190,117,56,117,64,117,72,117,234,117,242,118, |
140,119,78,119,102,120,194,120,218,120,242,121,10,121,36,121,64,122,30,122, |
212,123,118,124,16,124,186,125,114,125,218,126,124,127,28,127,136,128,94, |
128,208,130,6,130,234,130,242,131,112,131,246,132,174,133,52,133,156,134, |
4,134,138,135,74,135,188,136,108,136,134,136,160,136,184,136,208,136,232, |
137,66,137,198,137,222,138,142,138,150,138,158,138,182,138,190,139,116,139, |
224,140,78,140,102,140,126,140,198,140,206,141,66,141,74,141,82,141,224,141, |
232,142,210,143,168,144,10,144,34,144,152,145,30,145,38,145,46,145,54,145, |
108,145,116,145,124,145,132,146,12,146,156,146,164,146,226,147,78,147,158, |
147,250,148,88,148,206,149,44,149,214,150,112,151,26,151,34,151,198,152,86, |
152,130,152,254,153,6,153,250,154,160,155,34,155,58,155,200,156,80,157,2, |
157,96,157,104,157,178,157,186,157,194,157,250,158,2,158,250,159,2,159,72, |
159,160,159,242,160,86,160,184,161,28,161,134,162,24,162,150,163,6,163,32, |
163,192,163,216,164,106,164,114,164,232,165,2,165,10,165,228,166,90,166,222, |
166,246,167,14,167,100,167,148,167,194,167,218,167,242,168,10,168,34,168, |
60,168,86,168,110,168,134,168,168,168,202,168,236,168,248,169,40,169,90,169, |
140,169,188,170,18,170,114,170,208,171,12,171,102,171,172,171,238,174,134, |
174,168,174,186,174,246,175,46,175,70,175,90,175,126,175,232,176,60,176,252, |
178,100,179,50,180,4,180,178,181,136,182,32,182,224,183,78,183,128,183,178, |
183,228,184,14,184,60,184,106,184,152,184,198,185,14,185,86,185,166,186,118, |
187,22,187,70,187,184,187,214,188,72,188,226,188,250,189,52,190,108,191,92, |
191,212,192,8,192,96,192,184,192,230,193,0,193,54,193,116,193,140,193,166, |
193,200,193,234,194,12,194,46,194,84,194,122,194,160,194,198,194,248,195, |
30,195,72,195,118,195,166,195,224,196,14,196,62,196,120,196,166,196,214,197, |
16,197,62,197,110,197,168,197,220,198,18,198,86,198,138,198,194,199,8,199, |
62,199,114,199,184,199,238,200,34,200,106,200,178,200,252,201,88,201,112, |
201,136,201,160,201,184,201,208,203,232,205,196,207,132,207,146,207,178,207, |
206,207,246,208,4,208,18,208,32,208,46,208,60,208,106,208,188,208,238,209, |
32,209,114,209,180,210,100,210,228,211,148,212,14,212,166,213,6,213,140,213, |
224,214,26,214,102,214,220,215,70,215,164,215,246,216,8,216,68,216,164,217, |
34,217,88,218,12,218,74,218,114,218,160,218,200,218,242,219,40,219,94,219, |
130,219,208,220,20,220,80,0,0,0,2,0,68,0,0,2,100,5,85,0,3,0,7,0,46,177,1, |
0,47,60,178,7,4,8,237,50,177,6,5,220,60,178,3,2,8,237,50,0,177,3,0,47,60, |
178,5,4,8,237,50,178,7,6,9,252,60,178,1,2,8,237,50,51,17,33,17,37,33,17,33, |
68,2,32,254,36,1,152,254,104,5,85,250,171,68,4,205,0,0,0,2,0,185,0,0,1,127, |
5,129,0,3,0,7,1,172,64,158,3,91,2,2,150,7,166,7,2,7,150,57,4,73,4,89,4,3, |
4,64,23,27,72,6,4,1,11,4,38,9,1,201,9,217,9,2,118,9,166,9,2,25,9,41,9,2,6, |
9,1,215,73,9,1,38,9,1,217,9,1,118,9,1,41,9,1,6,9,1,121,9,1,86,9,1,9,9,1,163, |
169,9,1,130,9,1,84,9,100,9,116,9,3,137,9,1,98,9,114,9,2,68,9,84,9,2,34,9, |
50,9,2,20,9,1,2,9,1,242,9,1,212,9,228,9,2,178,9,194,9,2,148,9,164,9,2,114, |
9,130,9,2,84,9,100,9,2,66,9,1,20,9,36,9,52,9,3,2,9,1,110,9,184,255,128,64, |
17,102,109,72,73,9,1,9,64,94,98,72,45,9,61,9,2,9,184,1,0,64,153,85,88,72, |
9,128,81,84,72,125,9,141,9,157,9,3,95,9,111,9,2,9,128,71,75,72,9,192,67,70, |
72,9,128,63,66,72,125,9,1,91,9,107,9,2,61,9,77,9,2,25,9,41,9,2,11,9,1,55, |
235,9,251,9,2,205,9,221,9,2,171,9,187,9,2,9,64,45,48,72,59,9,75,9,91,9,3, |
29,9,45,9,2,1,203,9,219,9,235,9,3,159,9,175,9,191,9,3,27,9,43,9,59,9,107, |
9,123,9,5,15,9,1,2,127,9,143,9,159,9,191,9,207,9,5,64,9,96,9,2,15,9,31,9, |
2,7,112,1,1,95,1,1,1,5,156,4,2,3,0,63,47,253,206,93,93,1,94,93,93,93,95,113, |
113,113,113,95,114,114,43,114,114,114,94,93,93,93,93,93,43,43,43,113,113, |
43,43,114,43,114,43,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
114,114,114,94,93,93,93,113,113,113,113,114,114,94,93,93,93,93,113,47,94, |
93,43,93,237,113,51,47,237,49,48,1,35,3,51,3,53,51,21,1,103,148,24,196,198, |
194,1,141,3,244,250,127,201,201,0,0,2,0,87,3,198,2,128,5,129,0,3,0,7,0,104, |
64,33,48,3,1,128,3,1,3,16,2,32,2,96,2,112,2,128,2,5,96,2,112,2,2,80,2,96, |
2,176,2,192,2,4,2,184,255,192,179,37,40,72,2,184,255,192,64,32,25,28,72,2, |
48,7,1,128,7,1,7,111,6,127,6,143,6,3,47,6,63,6,2,6,5,32,0,1,0,6,2,3,0,63, |
51,205,93,50,1,47,113,114,205,93,113,220,43,43,93,113,114,205,93,113,49,48, |
1,35,3,51,1,35,3,51,2,106,142,20,184,254,121,141,21,184,3,198,1,187,254,69, |
1,187,0,0,0,2,0,9,0,0,4,105,5,121,0,27,0,31,0,214,64,134,90,25,1,90,21,1, |
68,14,1,68,19,1,54,19,1,68,30,1,38,30,54,30,2,68,23,1,38,23,54,23,2,3,16, |
1,8,29,28,21,20,9,20,20,11,14,15,18,19,10,9,19,12,16,4,10,4,1,0,25,24,5,24, |
24,27,3,3,7,30,31,22,23,6,23,5,6,4,7,8,11,4,12,13,1,14,29,30,4,13,0,15,28, |
31,4,16,17,18,21,22,25,4,17,16,13,1,208,13,1,79,17,143,17,159,17,3,63,17, |
79,17,2,13,17,13,17,5,20,23,24,3,19,3,6,9,10,3,5,0,47,23,51,63,23,51,18,57, |
57,47,47,93,113,93,113,17,23,51,16,205,23,50,17,23,51,16,205,23,50,1,47,51, |
51,135,192,192,192,192,1,23,51,16,135,192,192,192,192,1,47,23,51,135,192, |
192,192,192,1,51,16,135,192,192,192,192,49,48,1,93,93,93,93,93,93,93,93,93, |
93,1,3,33,21,33,3,35,19,33,3,35,19,35,53,51,19,35,53,33,19,51,3,33,19,51, |
3,51,21,33,3,33,19,3,128,78,1,4,254,229,88,110,86,254,149,84,110,84,201,225, |
78,252,1,18,89,110,88,1,107,88,110,88,211,253,64,80,1,106,78,3,117,254,143, |
108,254,104,1,152,254,104,1,152,108,1,113,108,1,152,254,104,1,152,254,104, |
108,254,143,1,113,0,3,0,22,255,114,4,82,5,236,0,48,0,59,0,70,1,46,64,92,154, |
14,1,154,13,1,150,68,1,133,39,1,138,57,154,57,2,137,53,153,53,2,132,37,1, |
118,6,134,6,150,6,3,70,63,86,63,134,63,3,52,38,100,38,116,38,3,37,2,1,25, |
27,1,24,34,55,3,47,9,21,65,3,32,48,1,48,48,16,49,30,111,29,41,111,0,49,32, |
49,2,0,49,32,49,48,49,80,49,112,49,5,8,3,49,184,255,192,179,29,35,72,49,184, |
255,192,64,117,17,22,72,49,4,111,3,64,16,24,72,3,60,111,16,33,66,115,207, |
54,1,157,54,1,5,136,54,1,120,10,216,10,2,199,34,215,34,2,182,34,1,135,34, |
167,34,2,215,65,1,166,65,1,119,65,1,60,16,65,34,10,54,41,49,8,0,125,30,141, |
30,2,26,30,1,30,24,22,64,19,23,72,22,15,21,47,21,63,21,95,21,4,21,55,9,115, |
47,148,4,164,4,2,112,4,128,4,2,5,4,21,4,85,4,101,4,4,46,4,0,0,47,50,50,93, |
93,93,205,237,50,47,93,205,43,51,51,93,93,18,23,57,93,93,93,93,93,93,93,93, |
95,93,93,237,50,1,47,237,214,43,237,47,43,43,95,94,93,113,253,212,237,17, |
18,57,47,114,23,51,205,23,50,49,48,93,0,93,93,93,93,93,93,1,93,93,93,0,93, |
1,93,37,46,1,39,55,30,3,23,17,39,46,3,53,52,62,2,55,53,51,21,30,3,23,7,46, |
1,39,17,30,5,21,20,14,2,7,21,35,1,52,46,2,39,17,62,3,1,20,30,2,23,17,14,3, |
2,6,217,245,34,170,11,46,78,113,78,20,77,148,116,71,64,115,158,95,124,100, |
145,102,66,20,174,20,122,117,59,114,103,88,64,36,56,114,175,119,124,1,160, |
47,81,106,58,65,108,77,42,253,92,40,70,95,55,72,100,61,27,20,9,185,165,37, |
53,87,64,39,5,1,240,5,18,50,83,128,98,84,124,83,44,4,131,131,5,45,80,115, |
75,33,94,105,11,254,67,14,30,41,56,79,109,72,77,131,100,62,6,162,2,24,63, |
80,51,32,15,254,44,4,31,56,81,2,197,54,74,50,33,14,1,165,4,33,52,68,0,0,0, |
0,5,0,73,255,244,6,212,5,141,0,19,0,23,0,43,0,63,0,83,0,212,64,11,118,20, |
134,20,2,121,22,137,22,2,42,184,255,232,64,14,8,12,72,37,24,8,12,72,32,24, |
8,12,72,26,184,255,232,179,8,12,72,17,184,255,232,179,8,12,72,13,184,255, |
232,64,18,8,12,72,7,24,8,12,72,3,24,8,12,72,22,23,20,21,21,184,255,240,64, |
84,23,16,23,21,23,21,0,39,54,180,10,178,0,180,0,44,16,44,32,44,3,0,44,64, |
44,2,0,44,16,44,32,44,80,44,96,44,112,44,224,44,240,44,8,44,64,180,29,178, |
74,180,15,39,1,239,39,255,39,2,39,64,10,13,72,39,79,182,34,184,69,182,24, |
4,22,3,21,18,49,182,15,184,59,182,5,19,0,63,237,244,237,63,63,63,237,244, |
237,1,47,43,113,114,237,244,237,47,93,113,114,253,244,237,17,18,57,57,47, |
47,56,56,17,51,17,51,49,48,0,43,43,43,43,43,43,43,43,1,93,93,1,20,14,2,35, |
34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2, |
53,52,62,2,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,6,212,51,87,116,66,66,115,85,49,48,86,117,68,66,115, |
85,50,251,59,155,3,154,157,251,223,64,114,86,49,50,85,116,66,67,116,85,49, |
49,86,118,4,250,22,43,63,40,42,64,44,22,23,43,63,41,39,63,44,24,251,240,22, |
42,62,40,43,65,44,22,23,43,64,42,38,62,44,24,1,178,125,171,105,45,45,104, |
171,126,133,174,103,41,41,103,174,253,201,5,129,12,41,102,172,131,126,172, |
107,46,46,106,172,127,131,172,102,41,252,37,99,131,78,32,33,78,131,98,95, |
128,79,34,34,79,128,2,124,98,130,78,32,33,78,130,97,95,130,79,34,34,79,130, |
0,0,3,0,72,255,236,5,54,5,137,0,57,0,73,0,89,1,20,64,73,137,1,1,140,36,1, |
123,42,139,42,2,98,82,114,82,130,82,3,102,71,1,127,78,1,91,78,1,73,43,89, |
43,105,43,3,54,48,134,48,2,37,40,1,44,35,124,35,140,35,3,28,5,44,5,60,5,92, |
5,4,10,10,26,10,42,10,3,10,2,26,2,42,2,3,31,184,255,232,64,56,9,13,72,10, |
25,26,25,42,25,3,48,41,38,69,4,54,66,73,23,33,73,58,45,44,140,74,1,74,77, |
18,3,23,3,58,44,80,23,1,3,44,1,23,58,44,44,58,23,3,13,15,54,1,175,54,1,54, |
184,255,192,64,61,9,12,72,54,80,72,63,13,79,13,2,13,143,3,1,141,77,1,98,69, |
114,69,2,54,69,70,69,2,3,74,48,41,77,44,38,18,69,9,8,63,81,144,28,1,192,28, |
1,15,28,63,28,2,28,85,81,8,22,51,80,0,22,0,63,237,63,237,47,93,93,113,237, |
18,23,57,93,93,93,93,1,47,93,237,47,43,93,113,18,23,57,47,47,47,0,93,1,93, |
17,18,57,17,23,57,93,16,205,16,237,16,237,17,23,57,49,48,93,43,0,93,93,93, |
93,1,93,93,93,0,93,93,93,93,1,93,0,93,93,5,34,38,39,14,3,35,34,46,2,53,52, |
62,2,55,46,3,53,52,62,2,51,50,30,2,21,20,14,2,7,30,1,23,62,1,55,23,14,1,7, |
30,1,51,50,54,55,21,14,1,1,52,46,2,35,34,6,21,20,22,23,62,3,3,46,1,39,14, |
1,21,20,30,2,51,50,62,2,4,169,96,144,58,30,76,93,109,64,117,171,110,53,51, |
91,126,75,18,29,22,12,40,85,133,93,73,123,90,50,66,112,148,83,62,146,85,61, |
81,29,145,35,107,70,53,106,49,32,59,26,28,75,254,150,27,48,69,42,96,100,37, |
28,65,116,86,50,74,89,164,66,113,123,35,72,109,73,44,79,68,55,12,66,61,26, |
48,38,23,60,105,143,83,79,129,105,83,33,34,77,78,78,35,66,115,85,49,38,72, |
106,68,75,117,92,75,33,114,201,97,90,199,121,43,139,227,103,54,44,7,9,135, |
11,11,4,121,37,60,43,23,103,91,59,129,56,26,55,65,79,252,158,105,230,122, |
48,148,105,55,95,71,41,19,30,38,0,0,1,0,104,3,198,1,32,5,129,0,3,0,33,64, |
19,48,3,1,128,3,1,3,16,2,32,2,2,2,32,0,1,0,2,3,0,63,205,93,1,47,93,205,93, |
113,49,48,1,35,3,51,1,10,141,21,184,3,198,1,187,0,1,0,127,254,88,2,158,5, |
204,0,22,0,66,64,45,135,13,1,135,9,1,88,20,1,88,2,1,17,24,14,17,72,5,24,14, |
17,72,16,6,16,16,6,128,6,2,6,11,242,0,0,16,0,32,0,3,0,16,27,5,0,0,63,63,1, |
47,93,237,204,93,56,50,49,48,43,43,93,93,93,93,19,52,62,2,55,51,14,3,21,20, |
30,2,23,35,46,3,53,127,42,90,140,97,174,94,137,88,43,43,88,137,94,174,97, |
140,90,42,2,20,139,254,234,220,105,105,221,235,254,139,139,254,236,220,105, |
105,220,234,253,140,0,0,0,1,0,12,254,88,2,43,5,204,0,22,0,72,64,13,136,13, |
1,136,9,1,87,20,1,87,2,1,17,184,255,232,179,14,17,72,5,184,255,232,180,14, |
17,72,16,6,184,255,240,64,16,31,6,143,6,2,6,0,242,143,11,1,11,16,0,5,27,0, |
63,63,1,47,93,253,204,93,56,50,49,48,43,43,93,93,93,93,1,20,14,2,7,35,62, |
3,53,52,46,2,39,51,30,3,21,2,43,42,90,140,97,174,94,137,88,43,43,88,137,94, |
174,97,140,90,42,2,16,140,253,234,220,105,105,220,236,254,139,139,254,235, |
221,105,105,220,234,254,139,0,0,0,0,1,0,33,2,178,2,253,5,129,0,14,0,107,64, |
75,77,5,93,5,109,5,3,75,4,91,4,107,4,3,66,8,82,8,2,67,7,83,7,2,0,6,12,3,13, |
95,4,1,15,4,1,4,3,32,2,48,2,2,2,14,47,10,63,10,2,10,9,8,191,13,207,13,2,16, |
13,32,13,2,13,240,5,1,223,5,1,0,5,1,5,14,3,0,63,204,93,93,93,1,47,93,93,204, |
51,204,93,221,204,93,51,204,113,114,18,23,57,49,48,93,93,93,93,1,37,23,5, |
23,7,11,1,39,55,37,55,5,3,51,1,200,1,8,45,254,230,185,119,150,156,119,189, |
254,232,45,1,11,12,136,4,90,103,132,73,250,72,1,2,255,0,72,248,73,134,107, |
1,41,0,0,0,1,0,100,0,180,4,71,4,158,0,11,0,71,64,46,211,11,1,133,11,1,220, |
4,1,138,4,1,9,1,170,6,16,2,32,2,2,2,217,2,1,56,2,136,2,2,2,0,4,173,9,214, |
7,1,55,7,135,7,2,7,5,179,0,63,51,93,93,51,237,50,50,93,93,1,47,93,51,237, |
50,49,48,93,93,93,93,1,17,35,17,33,53,33,17,51,17,33,21,2,159,147,254,88, |
1,168,147,1,168,2,96,254,84,1,172,146,1,172,254,84,146,0,0,1,0,184,254,250, |
1,129,0,219,0,12,0,78,185,0,4,255,224,183,11,17,72,10,151,0,150,7,184,255, |
192,64,22,9,17,72,7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2, |
12,184,255,192,64,14,38,41,72,12,64,13,16,72,12,7,168,0,155,11,0,47,253,228, |
1,47,43,43,93,113,114,51,43,253,237,49,48,43,37,21,20,14,2,7,35,62,1,53,35, |
53,1,129,9,20,29,20,123,45,49,88,219,168,53,87,75,66,32,65,132,65,219,0,0, |
0,0,1,0,91,1,208,2,79,2,112,0,3,0,33,64,20,0,2,64,2,112,2,3,2,0,0,187,159, |
1,207,1,2,47,1,1,1,0,47,93,113,237,1,47,47,93,49,48,19,53,33,21,91,1,244, |
1,208,160,160,0,0,0,1,0,187,0,0,1,126,0,219,0,3,0,46,64,32,3,150,0,0,144, |
0,2,64,0,80,0,176,0,224,0,240,0,5,144,0,160,0,2,0,64,13,16,72,0,1,155,0,0, |
47,237,1,47,43,93,113,114,237,49,48,51,53,51,21,187,195,219,219,0,1,0,0,255, |
236,2,57,5,204,0,3,0,51,64,26,121,0,137,0,2,1,24,13,17,72,41,2,1,2,16,0,2, |
16,2,32,2,128,2,4,2,0,184,255,240,180,0,1,0,0,19,0,63,63,1,47,56,205,93,56, |
49,48,93,43,93,21,1,51,1,1,155,158,254,105,20,5,224,250,32,0,0,2,0,80,255, |
236,4,35,5,150,0,19,0,39,0,112,64,80,89,37,105,37,2,70,33,86,33,102,33,3, |
86,27,102,27,2,89,23,105,23,2,4,18,1,118,17,134,17,2,121,13,137,13,2,11,12, |
1,11,8,1,121,7,137,7,2,118,3,134,3,2,4,2,1,7,0,110,64,144,20,160,20,2,20, |
41,128,30,110,63,10,1,10,25,115,15,7,35,115,5,25,0,63,237,63,237,1,47,93, |
237,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93,93,93,93,93,1,20, |
2,14,1,35,34,46,1,2,53,52,18,62,1,51,50,30,1,18,7,52,46,2,35,34,14,2,21,20, |
30,2,51,50,62,2,4,35,77,133,180,102,103,178,131,75,75,132,180,106,101,177, |
132,76,183,40,78,113,72,76,116,79,40,41,79,114,73,71,114,79,43,2,193,203, |
254,235,171,74,74,170,1,21,204,213,1,23,166,67,67,166,254,233,213,168,223, |
133,55,56,133,223,167,162,222,135,59,59,135,222,0,1,0,156,0,0,4,15,5,129, |
0,10,0,94,64,32,32,9,128,9,2,9,9,8,110,2,144,4,1,4,47,1,143,1,2,1,1,4,6,3, |
0,2,16,2,2,7,2,5,184,255,240,64,26,16,22,72,68,5,84,5,100,5,3,5,4,3,16,16, |
22,72,4,3,6,6,8,1,116,0,24,0,63,237,50,63,51,51,43,47,51,93,43,1,47,94,93, |
23,51,47,93,47,93,16,237,50,47,93,49,48,51,53,33,17,5,53,37,51,17,33,21,156, |
1,103,254,194,1,77,166,1,87,153,4,60,227,170,229,251,24,153,0,0,0,1,0,103, |
0,0,4,12,5,150,0,40,0,161,64,77,117,4,1,117,26,133,26,2,122,16,138,16,2,101, |
37,1,86,37,1,41,33,89,33,105,33,3,105,35,1,28,35,1,25,21,1,117,27,133,27, |
2,6,27,1,39,29,110,64,8,64,38,42,72,64,8,1,143,8,1,8,42,128,18,110,19,116, |
38,132,38,2,19,38,16,0,32,0,2,0,184,255,192,64,31,30,38,72,0,8,38,142,18, |
1,92,18,108,18,124,18,3,10,18,26,18,2,18,13,115,24,7,1,38,116,0,24,0,63,237, |
57,63,237,51,93,93,93,18,57,1,47,43,93,51,51,93,47,237,26,16,220,93,113,43, |
26,237,50,49,48,93,93,0,93,93,93,93,1,93,93,0,93,93,93,51,53,62,5,53,52,46, |
2,35,34,14,2,7,39,62,3,51,50,30,2,21,20,14,6,7,33,21,103,51,147,162,159,128, |
79,36,68,95,58,54,95,74,47,7,184,9,66,116,163,107,105,164,113,60,51,85,112, |
122,124,109,86,24,2,223,127,117,179,145,124,124,136,86,60,91,62,31,30,60, |
89,59,17,76,134,101,58,50,98,144,94,71,128,116,108,103,101,102,105,57,153, |
0,0,0,0,1,0,78,255,236,4,25,5,150,0,59,0,216,64,149,122,3,138,3,2,117,2,133, |
2,2,117,58,133,58,2,117,51,133,51,2,117,47,133,47,2,117,13,133,13,2,122,37, |
138,37,2,91,17,107,17,2,26,41,1,21,8,1,118,46,134,46,2,7,46,1,73,39,1,38, |
110,54,25,49,95,25,111,25,2,39,25,39,25,10,19,32,110,49,49,0,110,64,31,19, |
47,19,159,19,3,144,19,1,19,61,128,11,110,239,10,1,63,10,1,10,54,25,116,26, |
26,16,141,38,1,92,38,108,38,124,38,3,10,38,26,38,2,38,35,115,44,7,16,115, |
129,11,1,83,11,99,11,115,11,3,20,11,1,5,11,1,11,5,25,0,63,51,93,93,93,93, |
237,63,237,51,93,93,93,18,57,47,237,57,1,47,93,113,237,26,16,220,93,113,26, |
237,50,47,237,17,18,57,57,47,47,93,17,18,57,237,113,49,48,0,93,93,93,93,1, |
93,0,93,93,1,93,93,93,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,14, |
2,7,21,30,3,4,25,63,121,179,115,131,179,116,58,9,186,8,43,74,108,74,136,155, |
69,103,121,51,102,98,51,110,91,59,133,131,119,147,12,181,11,80,123,158,89, |
118,170,108,51,34,72,111,78,85,126,82,41,1,133,97,152,105,55,65,107,137,73, |
17,56,92,66,36,134,132,78,95,53,18,156,21,55,94,73,113,131,122,111,14,93, |
138,91,45,59,101,136,77,62,108,86,62,16,4,9,59,88,112,0,0,2,0,47,0,0,4,55, |
5,129,0,10,0,23,0,117,64,80,154,15,1,153,6,1,136,6,1,133,16,149,16,2,118, |
16,1,24,22,1,118,22,134,22,150,22,3,22,5,64,12,21,72,5,91,10,107,10,123,10, |
3,10,8,1,111,23,6,31,2,1,112,2,224,2,2,0,2,16,2,48,2,80,2,224,2,5,8,2,0,4, |
115,8,22,22,1,11,6,6,1,24,0,63,63,51,18,57,47,51,237,50,1,47,94,93,113,114, |
51,51,237,50,50,93,47,43,51,93,113,49,48,93,93,93,93,0,93,1,17,35,17,33,53, |
1,51,17,51,21,1,14,3,7,1,14,3,7,33,3,113,170,253,104,2,133,189,198,254,144, |
2,16,20,21,8,254,151,5,19,20,20,6,1,242,1,63,254,193,1,63,140,3,182,252,76, |
142,3,119,5,29,36,37,12,253,236,8,26,27,26,7,0,1,0,82,255,236,4,29,5,129, |
0,44,0,181,64,28,86,13,102,13,134,13,3,85,2,101,2,2,90,3,106,3,2,85,43,101, |
43,2,85,42,101,42,2,38,184,255,216,64,89,14,17,72,21,8,1,6,10,1,25,36,153, |
36,2,137,36,217,36,2,3,68,33,1,6,35,32,14,17,72,35,11,0,110,64,31,21,1,47, |
21,159,21,2,144,21,1,21,46,128,36,31,37,110,33,32,32,11,110,208,10,1,63,10, |
1,10,26,115,40,40,16,36,116,33,6,16,115,115,11,131,11,2,103,11,1,22,11,1, |
11,5,25,0,63,51,93,93,93,237,63,237,18,57,47,237,1,47,93,113,237,51,47,51, |
237,50,50,26,16,220,93,113,114,26,237,17,57,43,49,48,95,113,95,113,114,0, |
93,1,93,0,43,93,1,93,0,93,1,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50, |
62,2,53,52,46,2,35,34,14,2,7,35,19,33,21,33,3,62,1,51,50,30,2,4,29,64,126, |
187,123,111,165,114,67,14,182,11,40,69,101,72,70,114,81,44,42,78,113,72,45, |
76,65,53,23,176,47,3,33,253,131,27,48,144,99,105,168,118,64,1,203,106,176, |
127,70,52,91,122,70,21,40,75,59,35,43,84,122,79,65,109,79,44,16,28,37,20, |
2,246,153,254,65,37,53,64,117,162,0,0,0,0,2,0,104,255,236,4,25,5,150,0,36, |
0,56,0,175,64,48,140,21,1,122,22,138,22,2,89,7,105,7,2,90,3,106,3,122,3,3, |
84,2,100,2,2,84,35,100,35,116,35,3,84,34,100,34,116,34,3,53,30,69,30,2,133, |
50,1,50,184,255,240,64,45,10,13,72,132,26,1,37,26,53,26,69,26,117,26,4,22, |
26,1,21,111,20,20,0,110,64,47,37,159,37,2,144,37,1,37,58,128,47,29,110,16, |
10,32,10,2,10,184,255,192,64,24,30,38,72,10,29,42,117,32,32,52,24,115,25, |
21,153,21,2,21,15,7,52,115,5,25,0,63,237,63,51,93,237,18,57,47,237,50,1,47, |
43,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,93,93,43,93,0,93, |
93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,46,1,2,53,52,18,62,1,51,50,30,2, |
23,7,46,1,35,34,14,2,21,62,1,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,25,59,115,170,111,123,184,122,61,69,130,187,118,72,126,103,78,23, |
172,28,123,81,74,120,84,45,49,178,115,96,156,111,61,183,36,72,106,70,49,100, |
81,51,40,75,106,66,65,103,72,38,1,205,106,177,127,71,94,177,1,1,164,188,1, |
28,190,96,30,67,110,80,31,91,81,70,139,210,140,91,95,62,117,167,112,73,118, |
83,45,29,65,106,76,78,135,100,58,45,85,122,0,0,1,0,105,0,0,4,12,5,129,0,14, |
0,68,64,45,122,11,138,11,2,105,11,1,5,110,6,6,0,80,12,1,16,12,32,12,2,12, |
11,95,0,1,0,0,32,0,64,0,96,0,128,0,5,0,0,12,116,13,6,5,24,0,63,63,237,50, |
1,47,93,113,51,47,93,113,18,57,47,237,49,48,93,93,1,6,10,2,21,35,52,26,2, |
55,33,53,33,4,12,106,178,128,71,188,80,136,180,101,253,11,3,163,4,239,162, |
254,213,254,209,254,193,180,169,1,69,1,57,1,46,147,153,0,0,0,0,3,0,89,255, |
236,4,26,5,150,0,41,0,61,0,81,0,191,64,132,117,40,133,40,2,117,33,133,33, |
2,117,29,133,29,2,117,28,133,28,2,117,24,133,24,2,122,23,138,23,2,122,19, |
138,19,2,122,12,1,122,8,138,8,2,122,7,138,7,2,122,3,138,3,2,117,2,133,2,2, |
85,69,101,69,2,85,75,101,75,2,90,65,106,65,2,52,110,21,42,110,31,15,36,31, |
79,21,1,21,31,21,31,10,0,110,64,15,62,31,62,2,31,62,47,62,159,62,3,144,62, |
1,62,83,128,72,110,208,10,1,10,36,15,67,117,57,57,77,47,117,26,7,77,117,5, |
25,0,63,237,63,237,18,57,47,237,57,57,1,47,113,237,26,16,220,93,113,114,26, |
237,17,57,57,47,47,113,18,57,57,16,237,16,237,49,48,93,93,93,93,0,93,93,1, |
93,93,93,93,0,93,93,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3, |
53,52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,3,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,26,57,117,182, |
124,124,181,119,57,47,79,101,54,59,93,63,33,57,112,166,109,115,169,111,54, |
33,63,93,61,61,104,76,44,222,27,62,100,73,71,98,63,28,22,58,102,80,85,103, |
55,17,35,28,68,115,86,79,111,69,32,32,70,114,81,82,112,68,29,1,137,90,151, |
110,62,62,109,151,89,77,120,87,53,9,4,14,62,87,106,59,74,131,99,57,58,99, |
132,74,58,106,87,61,12,4,10,53,87,120,2,76,53,88,63,35,35,63,88,53,42,88, |
72,46,46,72,88,253,163,51,95,73,45,45,74,97,52,65,107,77,42,42,77,109,0,0, |
0,2,0,96,255,236,4,18,5,150,0,36,0,56,0,190,64,105,169,39,1,163,11,1,149, |
12,165,12,2,170,17,1,153,17,1,116,35,132,35,2,116,32,132,32,148,32,3,122, |
31,138,31,154,31,3,122,27,138,27,154,27,3,123,26,139,26,155,26,3,90,40,106, |
40,2,89,2,105,2,2,16,24,10,13,72,54,8,1,37,0,110,47,19,63,19,2,79,19,191, |
19,2,0,19,32,19,48,19,64,19,176,19,5,7,19,58,11,111,10,10,47,110,32,29,1, |
29,184,255,192,64,27,32,38,72,29,19,52,115,95,24,111,24,2,24,24,5,42,115, |
34,7,14,115,23,11,1,11,5,25,0,63,51,93,237,63,237,17,57,47,93,237,50,1,47, |
43,93,237,51,47,237,16,220,94,93,113,114,237,51,49,48,93,43,93,93,0,93,1, |
93,93,0,93,93,1,93,93,0,93,93,1,93,1,20,2,14,1,35,34,46,2,39,55,30,1,51,50, |
62,2,55,14,3,35,34,46,2,53,52,62,2,51,50,18,7,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,4,18,71,132,189,118,81,130,102,72,22,172,28,119,91,73,121,85, |
48,2,21,73,93,108,55,96,155,108,59,63,120,175,111,235,242,196,37,73,107,70, |
65,104,72,39,35,70,104,69,50,103,83,53,2,221,188,254,229,188,94,33,70,112, |
79,27,91,85,69,138,208,140,47,74,51,27,69,124,175,107,109,176,123,66,254, |
164,175,78,138,102,59,46,85,122,75,71,122,89,51,34,70,107,0,0,0,0,2,0,187, |
0,0,1,126,4,58,0,3,0,7,0,54,64,36,3,7,150,0,0,4,144,4,2,64,4,80,4,224,4,240, |
4,4,144,4,160,4,2,4,64,13,16,72,4,5,156,4,0,156,1,15,0,63,237,47,237,1,47, |
43,93,113,114,51,237,50,49,48,19,53,51,21,3,53,51,21,187,195,195,195,3,107, |
207,207,252,149,207,207,0,0,0,2,0,184,254,250,1,129,4,58,0,12,0,16,0,89,185, |
0,4,255,224,64,10,11,17,72,16,10,151,0,150,13,7,184,255,192,64,22,9,17,72, |
7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2,12,184,255,192,64, |
18,38,41,72,12,64,13,16,72,12,13,156,14,15,7,168,0,156,11,0,47,253,228,63, |
237,1,47,43,43,93,113,114,51,43,51,253,237,51,49,48,43,37,21,20,14,2,7,35, |
62,1,53,35,53,17,53,51,21,1,129,9,20,29,20,123,45,49,88,195,207,156,53,87, |
75,66,32,65,132,65,207,2,156,207,207,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106, |
185,0,5,255,216,64,17,18,22,72,3,40,18,22,72,0,40,18,22,72,137,0,1,1,184, |
255,216,64,51,18,22,72,134,1,1,6,0,2,32,2,80,2,112,2,4,2,32,0,1,0,63,6,127, |
6,143,6,3,6,48,2,112,2,128,2,3,2,1,0,15,4,63,4,111,4,159,4,207,4,5,4,0,25, |
47,93,51,51,205,93,205,93,1,24,47,93,47,93,51,49,48,0,93,43,93,43,43,43,19, |
53,1,21,9,1,21,101,3,227,252,166,3,90,2,59,205,1,162,154,254,146,254,145, |
153,0,0,0,0,2,0,100,1,88,4,71,3,236,0,3,0,7,0,70,64,49,7,64,2,96,2,2,0,2, |
32,2,112,2,208,2,4,2,4,223,0,1,32,0,1,0,4,173,31,5,47,5,95,5,111,5,223,5, |
5,5,0,173,80,1,208,1,2,15,1,1,1,0,47,93,93,237,222,93,237,1,47,93,93,51,47, |
93,113,51,49,48,19,53,33,21,1,53,33,21,100,3,227,252,29,3,227,3,88,148,148, |
254,0,148,148,0,0,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106,185,0,1,255,216, |
64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137,6,1,5,184,255,216,64,51,18, |
22,72,134,5,1,0,6,32,6,80,6,112,6,4,6,3,32,0,1,0,6,5,48,4,112,4,128,4,3,4, |
63,0,127,0,143,0,3,0,15,2,63,2,111,2,159,2,207,2,5,2,0,25,47,93,205,93,205, |
93,51,51,1,24,47,93,51,47,93,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21, |
101,3,90,252,166,3,227,154,153,1,111,1,110,154,254,94,205,0,2,0,84,0,0,4, |
39,5,150,0,37,0,41,0,137,64,68,117,36,133,36,2,117,35,133,35,2,90,26,106, |
26,2,90,21,1,90,14,122,14,138,14,3,90,13,122,13,138,13,3,58,6,74,6,2,9,72, |
10,10,176,41,192,41,2,41,150,38,38,19,27,70,28,0,70,0,19,32,19,64,19,144, |
19,176,19,5,19,184,255,192,64,23,38,44,72,19,19,33,95,10,143,10,2,10,39,156, |
38,76,27,1,27,24,95,33,4,0,63,237,51,93,47,253,198,93,17,57,1,47,43,93,237, |
47,237,18,57,47,237,113,51,47,237,49,48,0,93,1,93,93,0,93,93,93,1,93,1,20, |
14,6,7,35,62,7,53,52,46,2,35,34,6,7,39,62,3,51,50,30,2,1,53,51,21,4,39,37, |
62,79,82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184, |
11,67,121,179,122,114,178,123,64,253,143,195,4,8,71,108,85,67,60,58,68,83, |
55,69,104,80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103, |
148,251,157,201,201,0,0,0,0,2,0,161,254,229,7,110,5,204,0,93,0,114,1,101, |
64,255,122,17,138,17,2,117,15,133,15,2,117,27,133,27,2,121,47,137,47,2,116, |
38,132,38,2,102,38,1,99,70,1,86,69,102,69,2,123,26,139,26,2,73,26,1,74,56, |
90,56,106,56,3,59,102,1,82,63,1,54,63,70,63,2,82,64,1,38,64,54,64,70,64,3, |
131,3,1,37,3,53,3,69,3,3,37,2,53,2,69,2,133,2,4,25,8,57,8,2,11,8,1,11,8,27, |
8,2,8,32,12,17,72,22,92,102,92,134,92,3,80,58,96,58,2,5,58,21,58,53,58,69, |
58,4,137,57,1,93,57,1,10,57,26,57,2,9,7,1,125,52,141,52,2,11,52,75,52,2,10, |
22,26,22,42,22,3,104,212,24,37,41,211,10,112,34,132,72,1,72,10,49,80,24,1, |
80,24,1,24,10,24,10,82,0,210,64,95,49,111,49,2,143,49,159,49,2,49,116,128, |
61,210,0,82,16,82,32,82,3,82,44,213,5,5,107,214,19,99,214,29,36,29,47,19, |
63,19,79,19,3,32,29,48,29,64,29,3,19,29,19,29,77,54,214,89,0,149,71,1,71, |
66,214,77,0,47,237,51,93,63,237,18,57,57,47,47,93,93,17,51,16,237,16,237, |
51,47,237,1,47,93,237,26,16,220,93,113,26,237,18,57,57,47,47,93,114,17,18, |
57,93,50,50,16,237,50,16,237,49,48,93,93,93,93,0,93,93,93,1,93,93,93,43,93, |
0,93,93,1,93,93,93,0,93,93,1,93,93,0,93,93,1,93,93,0,93,93,1,93,93,93,0,93, |
1,93,0,93,1,20,14,2,35,34,46,2,53,52,54,55,35,14,3,35,34,46,2,53,52,62,2, |
51,50,30,2,23,51,55,51,3,14,1,21,20,22,51,50,62,2,53,52,46,2,35,34,14,4,21, |
20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,62,2,36,51,50,4,22,18, |
5,52,46,2,35,34,14,2,21,20,22,51,50,62,2,55,62,1,7,110,67,118,165,97,56,79, |
50,22,2,1,6,24,69,93,117,71,84,125,81,40,71,132,185,114,60,96,73,54,18,6, |
39,156,116,19,18,43,38,62,107,79,45,83,161,238,156,134,227,184,139,94,48, |
86,165,243,158,105,182,152,120,44,55,50,135,166,196,111,190,254,217,203,105, |
63,118,170,215,0,255,144,201,1,36,191,92,253,162,34,63,89,56,86,130,87,45, |
95,99,69,120,96,70,18,9,14,2,243,144,239,172,96,27,47,64,38,15,43,12,45,89, |
69,43,58,103,141,83,120,221,169,102,27,48,67,40,160,254,6,84,120,49,48,46, |
81,142,192,112,129,222,162,92,64,116,161,192,219,115,141,238,171,96,33,48, |
57,24,112,30,63,52,33,115,206,1,28,169,139,1,0,220,180,128,70,118,200,254, |
248,155,50,84,60,33,85,138,173,87,120,136,62,102,132,71,36,80,0,0,0,0,2,0, |
4,0,0,5,82,5,129,0,7,0,20,1,18,64,206,102,2,118,2,134,2,3,102,19,118,19,134, |
19,3,105,1,121,1,137,1,3,105,20,121,20,137,20,3,115,6,131,6,2,101,6,1,124, |
5,140,5,2,106,5,1,122,0,138,0,2,57,0,89,0,105,0,3,117,3,133,3,2,54,3,86,3, |
102,3,3,90,4,1,72,4,1,85,7,1,71,7,1,19,2,3,1,20,0,21,6,37,6,53,6,3,6,6,1, |
230,6,246,6,2,26,5,42,5,58,5,3,9,5,1,233,5,249,5,2,6,5,13,13,4,26,0,42,0, |
58,0,3,9,0,1,233,0,249,0,2,0,16,7,32,7,48,7,3,32,7,1,7,7,22,21,3,37,3,53, |
3,3,6,3,1,230,3,246,3,2,3,175,4,191,4,2,4,80,22,176,22,2,48,22,96,22,144, |
22,192,22,240,22,5,47,22,1,1,2,95,20,19,19,118,13,1,13,5,3,4,0,18,0,63,50, |
63,51,93,57,47,51,237,50,1,93,93,113,47,93,51,93,113,113,17,51,47,93,113, |
51,93,113,113,18,57,61,47,51,51,93,113,113,93,113,113,18,57,57,18,57,57,49, |
48,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,3,33,3,35,1,51,9,1, |
46,3,39,14,3,7,3,33,4,143,161,253,126,162,198,2,63,217,2,54,253,174,16,29, |
22,15,1,2,14,23,29,15,180,2,15,1,156,254,100,5,129,250,127,4,2,40,82,67,45, |
5,5,46,68,82,40,254,49,0,3,0,168,0,0,4,234,5,129,0,22,0,33,0,46,0,155,64, |
108,155,24,171,24,2,147,32,1,133,32,1,147,45,1,117,45,133,45,2,122,36,138, |
36,154,36,3,5,11,21,11,37,11,3,6,2,22,2,38,2,3,171,18,1,159,18,1,107,18,123, |
18,139,18,3,18,28,13,90,23,64,13,17,72,23,23,41,0,90,64,31,34,47,34,2,175, |
34,1,34,48,128,28,41,90,0,6,16,6,64,6,3,7,6,18,40,95,127,28,1,28,28,41,27, |
95,7,3,41,95,6,18,0,63,237,63,237,18,57,47,113,237,57,1,47,94,93,237,50,26, |
16,220,93,113,26,237,18,57,47,43,237,17,57,93,93,93,49,48,93,93,0,93,93,93, |
93,93,93,1,20,14,2,35,33,17,33,50,30,2,21,20,14,2,7,30,3,1,52,38,35,33,17, |
33,50,62,2,19,52,46,2,35,33,17,33,50,62,2,4,234,84,142,188,104,253,196,2, |
0,117,184,128,67,33,67,101,67,85,131,88,46,254,238,156,148,254,191,1,65,84, |
116,72,32,81,49,92,129,80,254,156,1,115,73,123,89,50,1,141,107,151,95,44, |
5,129,39,84,129,90,59,104,85,61,15,10,58,90,119,2,66,114,98,254,66,33,61, |
86,253,190,67,94,60,28,254,4,24,60,100,0,1,0,104,255,236,5,121,5,150,0,39, |
0,173,64,79,121,14,137,14,2,117,13,133,13,2,123,37,139,37,2,106,38,1,124, |
36,140,36,2,106,36,1,106,28,1,85,7,1,90,3,1,42,29,106,29,2,134,23,1,42,23, |
106,23,2,5,8,21,8,2,5,2,21,2,2,5,91,80,26,96,26,2,175,26,191,26,2,32,26,1, |
15,26,1,26,34,16,184,255,192,64,42,7,13,72,16,16,41,32,41,1,79,35,1,35,35, |
0,95,31,4,0,15,16,15,2,48,15,64,15,112,15,128,15,192,15,208,15,6,15,15,10, |
95,21,19,0,63,237,51,47,93,113,63,237,51,47,93,1,93,17,51,47,43,51,47,93, |
93,93,113,237,49,48,93,93,93,93,93,0,93,93,1,93,93,93,93,0,93,93,1,93,1,34, |
14,2,21,20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,120,185,125,64,69,129,187,117,82,135,109,86,33,156,38,112, |
151,191,118,171,254,255,173,86,91,175,1,0,164,225,1,46,71,181,20,68,102,137, |
4,250,80,148,208,127,127,211,152,84,43,78,107,65,78,79,136,100,57,109,195, |
1,12,159,165,1,10,187,101,176,173,60,50,91,70,42,0,2,0,168,0,0,5,101,5,129, |
0,12,0,25,0,100,64,70,169,24,1,123,24,1,172,23,1,27,23,43,23,59,23,123,23, |
4,169,16,1,27,16,43,16,59,16,123,16,4,123,15,1,153,3,1,121,2,1,0,90,64,47, |
13,1,13,27,128,64,27,1,20,90,0,6,16,6,64,6,3,7,6,19,95,7,3,20,95,6,18,0,63, |
237,63,237,1,47,94,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93, |
93,93,93,1,20,2,14,1,35,33,17,33,50,4,22,18,7,52,46,2,35,33,17,33,50,62,2, |
5,101,106,184,251,145,253,241,1,210,163,1,19,198,111,192,82,148,206,123,254, |
241,1,58,111,189,138,78,2,207,176,254,243,181,93,5,129,81,169,254,252,180, |
143,203,130,61,251,177,72,142,212,0,0,1,0,168,0,0,4,254,5,129,0,11,0,77,181, |
7,3,7,3,0,10,184,255,192,64,37,7,11,72,10,10,13,5,9,90,0,0,16,0,64,0,3,7, |
0,32,13,1,8,95,127,5,1,5,5,9,4,95,1,3,9,95,0,18,0,63,237,63,237,18,57,47, |
113,237,1,93,47,94,93,237,50,17,51,47,43,18,57,57,47,47,49,48,51,17,33,21, |
33,17,33,21,33,17,33,21,168,4,45,252,146,3,50,252,206,3,151,5,129,156,254, |
60,154,254,21,156,0,0,1,0,168,0,0,4,145,5,129,0,9,0,105,185,0,2,255,192,182, |
13,24,72,2,2,6,8,184,255,192,64,58,7,12,72,8,8,11,1,5,90,0,6,16,6,64,6,3, |
7,6,48,11,1,4,95,239,1,1,15,1,63,1,111,1,127,1,159,1,175,1,207,1,223,1,8, |
8,1,64,23,30,72,1,1,5,0,95,7,3,5,18,0,63,63,237,18,57,47,43,94,93,113,237, |
1,93,47,94,93,237,50,17,51,47,43,18,57,47,43,49,48,1,17,33,21,33,17,35,17, |
33,21,1,103,3,18,252,238,191,3,233,4,229,253,244,158,253,197,5,129,156,0, |
1,0,103,255,236,5,160,5,150,0,45,0,185,64,130,134,43,1,106,43,1,66,37,82, |
37,2,5,24,21,24,85,24,3,86,23,1,86,19,1,5,18,21,18,85,18,3,122,12,138,12, |
2,89,12,105,12,2,106,3,1,106,2,1,73,37,89,37,2,53,29,1,123,13,139,13,2,64, |
10,1,10,10,36,92,31,64,33,33,0,127,31,143,31,2,31,47,128,32,47,96,47,128, |
47,3,21,91,175,0,191,0,2,32,0,1,15,0,1,0,33,95,240,34,1,34,34,5,26,95,41, |
19,16,95,5,48,11,64,11,2,144,11,224,11,2,11,11,5,4,0,63,51,47,93,113,16,237, |
63,237,17,57,47,93,237,1,47,93,93,93,237,93,26,16,204,93,17,57,47,26,16,237, |
50,47,93,49,48,0,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,19,52,18,54, |
36,51,50,30,2,23,7,46,3,35,34,14,2,21,20,30,2,51,50,62,2,55,53,33,53,33,17, |
14,3,35,34,36,38,2,103,89,177,1,6,173,130,196,144,100,35,182,26,73,104,137, |
88,128,189,124,61,66,130,193,127,83,140,113,86,29,254,91,2,85,47,127,158, |
188,107,178,254,246,177,89,2,199,165,1,10,187,101,46,86,123,77,54,52,85,60, |
33,80,148,208,127,127,211,153,85,28,45,55,28,254,160,254,26,48,87,66,38,109, |
195,1,12,0,0,0,0,1,0,168,0,0,5,32,5,129,0,11,0,103,64,29,11,90,64,8,143,0, |
159,0,175,0,223,0,4,0,13,128,64,13,1,64,13,192,13,208,13,224,13,4,13,184, |
255,192,64,37,14,17,72,7,3,90,0,4,16,4,64,4,3,7,4,2,95,80,7,1,176,7,224,7, |
2,15,7,1,8,7,7,9,5,3,4,0,18,0,63,50,63,51,57,47,94,93,93,113,237,1,47,94, |
93,237,50,43,93,113,26,16,220,93,50,26,237,49,48,33,17,33,17,35,17,51,17, |
33,17,51,17,4,97,253,6,191,191,2,250,191,2,141,253,115,5,129,253,172,2,84, |
250,127,0,0,0,1,0,189,0,0,1,124,5,129,0,3,0,122,64,70,3,90,15,0,1,12,0,0, |
1,61,16,0,32,0,208,0,3,96,0,112,0,2,0,0,16,0,64,0,80,0,176,0,5,7,0,175,5, |
1,0,5,160,5,176,5,3,0,5,16,5,64,5,80,5,160,5,176,5,192,5,240,5,8,32,5,144, |
5,240,5,3,5,184,255,192,179,56,61,72,5,184,255,192,179,45,48,72,5,184,255, |
192,182,13,16,72,1,3,0,18,0,63,63,1,43,43,43,93,113,114,93,47,94,93,113,114, |
94,93,94,93,237,49,48,51,17,51,17,189,191,5,129,250,127,0,0,0,1,0,32,255, |
236,3,104,5,129,0,21,0,124,64,15,137,2,1,130,5,1,123,10,1,100,6,116,6,2,6, |
184,255,224,64,66,14,17,72,0,14,32,14,2,128,14,144,14,224,14,240,14,4,14, |
14,3,17,90,64,64,12,80,12,96,12,3,111,12,1,12,23,128,15,3,1,3,32,23,1,32, |
23,64,23,80,23,96,23,4,14,95,15,3,9,95,0,64,4,1,4,4,0,19,0,63,50,47,93,16, |
237,63,237,1,93,113,47,113,26,16,220,93,113,26,237,18,57,47,93,113,49,48, |
0,43,1,93,93,93,0,93,5,34,38,39,55,30,3,51,50,54,53,17,33,53,33,17,20,14, |
2,1,201,171,219,35,187,10,46,64,78,41,104,120,254,241,1,205,56,107,154,20, |
178,192,31,65,93,60,28,143,138,3,69,156,252,35,101,162,115,62,0,1,0,168,0, |
0,5,63,5,129,0,11,0,154,64,103,171,1,1,157,1,1,138,8,154,8,2,138,1,154,1, |
170,1,3,102,2,1,131,7,147,7,2,100,7,1,157,0,173,0,2,107,0,123,0,139,0,3,89, |
0,1,86,10,1,155,10,1,36,10,1,1,10,106,8,250,8,2,8,10,144,9,160,9,2,9,9,0, |
11,16,0,11,1,11,11,13,7,2,3,90,0,4,16,4,64,4,3,7,4,7,10,1,2,4,4,8,5,3,0,4, |
18,0,63,51,63,51,18,23,57,1,47,94,93,237,50,50,17,51,47,93,56,51,57,47,93, |
57,51,113,17,51,49,48,0,93,93,1,93,93,93,93,0,93,93,93,1,93,93,0,93,93,33, |
1,7,17,35,17,51,17,1,51,9,1,4,82,253,205,184,191,191,2,167,225,253,168,2, |
168,2,168,140,253,228,5,129,253,62,2,194,253,156,252,227,0,0,0,0,1,0,168, |
0,0,4,47,5,129,0,5,0,56,64,40,16,4,48,4,2,0,4,16,4,32,4,64,4,96,4,128,4,160, |
4,240,4,8,4,3,90,0,0,16,0,64,0,3,7,0,1,3,3,95,0,18,0,63,237,63,1,47,94,93, |
237,47,93,113,49,48,51,17,51,17,33,21,168,191,2,200,5,129,251,27,156,0,0, |
0,0,1,0,168,0,0,6,2,5,129,0,44,2,44,64,12,152,41,1,151,31,1,12,16,18,24,72, |
12,184,255,240,179,13,17,72,13,184,255,240,64,27,18,24,72,40,13,1,13,16,13, |
17,72,42,32,33,37,72,42,32,18,28,72,42,32,9,17,72,30,184,255,224,179,33,37, |
72,30,184,255,224,179,18,28,72,30,184,255,224,64,255,9,17,72,13,12,36,36, |
27,44,92,42,36,0,52,0,2,212,0,1,139,0,155,0,2,4,0,1,8,0,46,139,46,1,116,46, |
1,59,46,1,203,46,1,180,46,1,11,46,1,207,171,46,1,52,46,1,32,46,1,20,46,1, |
0,46,1,244,46,1,208,46,1,196,46,1,176,46,1,116,46,132,46,164,46,3,96,46,1, |
84,46,1,64,46,1,52,46,1,16,46,1,4,46,1,151,240,46,1,180,46,196,46,228,46, |
3,160,46,1,116,46,148,46,2,80,46,1,68,46,1,48,46,1,4,46,36,46,2,244,46,1, |
224,46,1,180,46,212,46,2,144,46,1,132,46,1,112,46,1,52,46,68,46,100,46,3, |
32,46,1,20,46,1,244,46,1,208,46,1,116,46,132,46,164,46,196,46,4,96,46,1,52, |
46,84,46,2,16,46,1,4,46,1,103,116,46,148,46,180,46,196,46,228,46,5,80,46, |
1,4,46,36,46,68,46,3,20,46,52,46,68,46,100,46,132,46,180,46,212,46,244,46, |
8,164,46,196,46,244,46,3,139,46,1,4,46,52,46,84,46,116,46,4,55,64,83,228, |
46,1,203,46,1,36,46,68,46,116,46,148,46,180,46,5,11,46,1,212,46,244,46,2, |
187,46,1,100,46,132,46,2,75,46,1,20,46,52,46,2,251,46,1,164,46,196,46,228, |
46,3,128,46,1,2,64,46,80,46,112,46,3,63,46,1,0,46,32,46,2,30,27,92,0,28,64, |
28,2,7,28,6,21,21,184,255,192,64,16,18,37,72,42,21,29,3,75,36,1,0,13,36,3, |
28,18,0,63,23,51,93,63,51,51,43,17,51,1,47,94,93,237,50,93,93,93,95,93,93, |
93,113,113,113,113,113,114,114,114,114,94,93,93,93,113,114,114,114,94,93, |
93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,94,93, |
93,93,113,113,113,16,220,94,93,93,93,113,50,237,18,57,61,47,51,51,49,48,43, |
43,43,43,43,43,43,93,43,43,43,93,93,33,17,52,54,55,54,55,6,7,14,1,7,1,35, |
1,46,3,39,38,39,22,23,30,1,21,17,35,17,51,1,30,3,23,62,3,55,1,51,17,5,86, |
2,2,2,3,14,15,13,31,15,254,148,134,254,143,6,13,15,15,7,17,16,1,2,2,2,170, |
251,1,119,7,20,18,15,3,3,16,21,20,8,1,112,245,3,172,51,106,44,51,48,51,50, |
43,97,39,252,64,3,192,15,40,45,47,23,53,57,56,55,47,103,39,252,84,5,129,252, |
47,20,63,66,59,16,16,60,66,62,20,3,209,250,127,0,0,0,0,1,0,168,0,0,5,32,5, |
129,0,19,0,196,185,0,10,255,224,64,39,12,43,72,54,10,70,10,2,0,32,12,43,72, |
41,0,57,0,73,0,3,11,16,29,33,72,11,32,18,28,72,150,11,166,11,2,41,11,1,1, |
184,255,240,179,29,33,72,1,184,255,224,64,53,18,28,72,154,1,170,1,2,3,38, |
1,1,19,92,0,68,16,84,16,148,16,3,224,16,1,2,0,16,48,16,64,16,112,16,192,16, |
208,16,6,16,64,21,1,64,21,192,21,208,21,224,21,4,21,184,255,192,64,16,14, |
17,72,10,7,92,0,8,16,8,64,8,3,7,8,1,184,255,192,64,16,29,43,72,17,1,9,3,11, |
64,29,43,72,11,0,8,18,0,63,51,51,43,63,51,51,43,1,47,94,93,237,50,43,93,113, |
47,93,95,93,113,51,237,49,48,0,93,95,93,43,43,93,93,43,43,1,93,43,93,43,33, |
1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,4,58,253,14,2,3,2,3, |
170,222,2,250,3,3,2,4,172,4,176,49,48,41,91,35,252,88,5,129,251,72,49,49, |
42,99,45,3,156,250,127,0,0,0,0,2,0,97,255,236,5,215,5,150,0,19,0,39,0,108, |
64,74,91,37,1,26,37,1,9,37,1,82,33,1,21,33,1,7,33,1,84,27,1,21,27,1,91,23, |
1,25,23,1,102,17,1,104,12,1,0,91,64,15,20,1,20,41,128,32,41,128,41,2,30,91, |
175,10,191,10,2,32,10,1,15,10,31,10,2,10,25,95,15,4,35,95,5,19,0,63,237,63, |
237,1,47,93,93,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,215,95,180,254,252,165,174,254,250, |
174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63,65, |
127,189,123,132,191,123,59,2,199,165,254,242,192,104,109,195,1,12,159,165, |
1,10,187,101,102,188,254,246,163,127,208,148,80,80,148,208,127,127,211,153, |
85,86,153,212,0,2,0,168,0,0,4,234,5,129,0,14,0,23,0,117,64,83,169,2,1,147, |
23,1,155,16,171,16,2,10,3,26,3,42,3,3,5,12,21,12,37,12,3,0,90,64,15,25,128, |
64,25,1,64,25,1,20,7,90,0,8,16,8,64,8,3,8,6,95,31,20,47,20,79,20,95,20,127, |
20,5,15,20,207,20,255,20,3,7,20,64,9,17,72,20,20,7,19,95,9,3,7,18,0,63,63, |
237,18,57,47,43,94,93,113,237,1,47,93,237,50,93,113,26,16,220,26,237,49,48, |
0,93,93,93,93,93,1,20,14,2,35,33,17,35,17,33,50,30,2,7,52,38,35,33,17,33, |
50,54,4,234,61,121,182,121,254,98,191,2,81,125,186,124,62,192,164,164,254, |
133,1,131,165,155,3,217,92,159,117,68,253,219,5,129,61,111,157,97,134,139, |
253,212,146,0,0,0,2,0,97,254,125,5,215,5,150,0,36,0,56,0,162,64,113,108,20, |
124,20,140,20,3,104,24,1,104,29,1,101,34,1,87,6,1,85,49,1,90,39,1,90,45,1, |
108,19,124,19,140,19,3,26,19,90,19,2,26,40,90,40,2,21,44,85,44,2,26,54,90, |
54,2,8,54,1,21,50,85,50,2,7,50,1,13,13,22,5,27,0,91,64,15,37,1,37,58,128, |
47,91,175,27,191,27,2,32,27,1,15,27,31,27,2,27,32,58,128,58,2,42,95,32,4, |
52,95,5,22,19,10,95,17,0,47,237,63,51,237,63,237,1,93,47,93,93,93,237,26, |
16,220,113,26,237,17,57,57,50,47,49,48,93,93,93,93,93,93,0,93,93,93,93,93, |
1,93,93,93,0,93,93,1,20,14,2,7,30,3,51,50,54,55,21,14,1,35,34,46,2,39,46, |
2,2,53,52,18,54,36,51,50,4,22,18,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62, |
2,5,215,77,145,211,134,21,53,68,83,51,28,64,23,38,91,49,86,128,97,70,27,158, |
239,159,80,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63, |
65,127,189,123,132,191,123,59,2,199,149,247,186,117,18,64,90,57,27,8,5,134, |
9,13,51,95,138,87,8,115,193,1,3,152,165,1,10,187,101,102,188,254,246,163, |
127,208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,0,0,2,0,168,0,0, |
5,104,5,129,0,17,0,30,0,210,64,62,169,13,1,138,20,154,20,170,20,3,148,29, |
1,117,29,133,29,2,174,0,1,157,0,1,124,0,140,0,2,74,0,90,0,106,0,3,3,160,1, |
1,114,1,130,1,146,1,3,2,99,1,1,64,1,1,51,1,1,37,1,1,3,16,184,255,112,64,87, |
17,73,112,16,128,16,144,16,3,84,16,100,16,2,66,16,1,2,35,16,51,16,2,1,16, |
16,25,18,90,11,11,0,0,17,48,17,64,17,96,17,144,17,160,17,6,17,64,32,144,32, |
160,32,3,25,3,90,0,4,16,4,64,4,3,7,4,16,2,95,47,25,95,25,111,25,143,25,4, |
25,25,0,24,95,5,3,4,0,18,0,63,50,63,237,18,57,47,93,237,50,1,47,94,93,237, |
50,93,47,93,51,57,47,237,18,57,17,51,49,48,93,95,93,93,93,43,95,93,93,93, |
93,95,93,93,95,93,93,93,93,0,93,93,93,93,33,1,33,17,35,17,33,50,30,2,21,20, |
14,2,7,1,3,52,46,2,35,33,17,33,50,62,2,4,140,254,146,254,73,191,2,151,120, |
185,126,66,39,84,130,91,1,144,248,44,84,120,76,254,59,1,205,82,120,77,37, |
2,73,253,183,5,129,55,104,150,94,67,130,108,78,16,253,161,3,236,64,94,63, |
31,253,248,41,72,98,0,0,0,0,1,0,93,255,236,4,248,5,150,0,63,0,226,64,110, |
150,62,1,68,62,1,166,59,1,134,54,1,132,49,1,151,40,1,169,33,1,11,33,27,33, |
43,33,155,33,4,89,29,169,29,2,139,17,1,139,7,1,150,2,1,4,2,20,2,2,132,58, |
1,96,54,1,105,21,1,118,17,1,42,90,41,41,0,90,64,176,19,1,19,65,128,9,90,8, |
64,16,19,72,8,8,52,90,0,31,16,31,64,31,3,7,31,19,16,19,22,72,120,19,136,19, |
152,19,3,59,19,1,52,184,255,240,64,47,19,22,72,119,52,135,52,151,52,3,58, |
52,1,19,52,5,47,95,111,42,1,89,42,1,75,42,1,6,42,1,42,36,4,14,95,96,9,1,82, |
9,1,68,9,1,9,5,19,0,63,51,93,93,93,237,63,51,93,93,93,93,237,18,57,57,93, |
93,43,93,93,43,1,47,94,93,237,51,47,43,237,26,16,220,93,26,237,50,47,237, |
49,48,0,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,20,14,2,35, |
32,36,39,55,30,3,51,50,62,2,53,52,46,2,39,46,5,53,52,62,2,51,50,30,2,23,7, |
46,3,35,34,14,2,21,20,30,2,23,30,5,4,248,69,144,219,150,254,249,254,218,40, |
185,14,58,99,146,102,85,142,102,57,63,114,158,96,59,119,109,96,70,40,81,144, |
196,114,131,186,128,77,23,188,14,53,86,123,83,98,133,81,35,63,108,142,80, |
65,129,118,103,76,43,1,133,89,150,109,61,184,174,37,55,90,65,36,29,60,95, |
66,69,86,56,38,22,13,31,43,58,81,107,70,100,143,92,42,41,82,121,80,33,51, |
80,54,28,35,60,81,47,63,81,54,36,18,15,31,43,58,84,114,0,0,0,1,0,46,0,0,4, |
180,5,129,0,7,1,212,64,255,9,9,1,201,9,217,9,249,9,3,187,9,1,73,9,89,9,121, |
9,137,9,4,59,9,1,9,9,25,9,2,246,9,1,153,9,201,9,2,139,9,1,9,9,25,9,73,9,105, |
9,4,199,217,9,233,9,2,203,9,1,182,9,1,41,9,89,9,105,9,137,9,153,9,5,27,9, |
1,6,9,1,25,9,41,9,89,9,121,9,153,9,169,9,217,9,7,233,9,249,9,2,219,9,1,169, |
9,1,150,9,1,57,9,105,9,2,45,9,1,1,11,9,1,151,107,9,123,9,139,9,171,9,187, |
9,235,9,251,9,7,84,9,1,11,9,43,9,59,9,3,187,9,251,9,2,164,9,1,59,9,75,9,123, |
9,3,36,9,1,139,9,155,9,187,9,203,9,251,9,5,127,9,1,2,79,9,95,9,2,48,9,1,15, |
9,1,103,207,9,223,9,2,176,9,1,15,9,79,9,95,9,143,9,4,240,9,1,159,9,175,9, |
207,9,223,9,4,112,9,1,95,9,1,64,9,1,31,9,1,31,9,63,9,95,9,111,9,159,9,223, |
9,239,9,7,0,9,1,55,239,9,1,128,64,93,9,144,9,208,9,3,111,9,1,80,9,1,47,9, |
1,0,9,1,208,9,1,175,9,1,144,9,1,111,9,127,9,2,16,9,32,9,64,9,80,9,4,255,9, |
1,224,9,1,191,9,1,64,9,96,9,144,9,160,9,4,63,9,1,32,9,1,15,9,1,7,3,5,4,14, |
1,90,2,64,2,7,14,112,7,160,7,176,7,3,32,7,128,7,2,7,184,255,192,64,15,23, |
28,72,7,32,2,1,2,0,4,95,5,3,1,18,0,63,63,237,50,1,47,93,204,43,93,113,43, |
1,26,24,16,77,253,228,50,95,94,93,93,93,93,93,93,93,113,113,113,113,113,114, |
114,114,114,114,114,94,93,93,113,113,113,113,113,113,114,114,114,94,93,93, |
93,95,93,93,113,113,113,113,114,114,114,94,93,95,93,93,93,93,93,93,113,114, |
114,114,114,114,114,94,93,93,93,93,113,113,113,113,113,114,49,48,1,17,35, |
17,33,53,33,21,2,208,190,254,28,4,134,4,229,251,27,4,229,156,156,0,0,0,0, |
1,0,158,255,236,5,41,5,129,0,25,0,136,64,61,89,23,105,23,2,89,3,105,3,2,89, |
2,105,2,2,69,16,1,69,10,1,21,90,64,64,18,80,18,160,18,3,48,18,144,18,240, |
18,3,143,18,159,18,175,18,3,18,27,128,64,27,1,64,27,192,27,208,27,224,27, |
4,27,184,255,192,64,36,14,17,72,8,90,79,5,95,5,111,5,3,143,5,159,5,2,207, |
5,1,0,5,16,5,64,5,3,7,5,19,6,3,13,95,0,19,0,63,237,63,51,1,47,94,93,93,113, |
114,237,43,93,113,26,16,220,93,113,114,26,237,49,48,0,93,93,93,93,93,5,34, |
46,2,53,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,14,2,2,219,116,208,157, |
92,191,57,102,139,83,82,146,110,63,190,93,160,215,20,62,131,201,138,3,129, |
252,143,107,149,94,43,44,96,155,111,3,100,252,145,141,207,136,66,0,1,0,9, |
0,0,5,77,5,129,0,16,0,235,64,181,74,14,90,14,106,14,3,69,4,85,4,101,4,3,140, |
15,1,58,15,90,15,106,15,122,15,4,131,3,1,53,3,85,3,101,3,117,3,4,116,0,132, |
0,2,9,0,1,140,1,1,123,1,1,6,1,1,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0, |
37,0,53,0,3,6,0,1,230,0,246,0,2,1,0,9,9,2,26,15,42,15,58,15,3,3,8,15,1,232, |
15,248,15,2,15,52,16,84,16,2,32,16,1,2,16,16,1,48,16,96,16,144,16,192,16, |
240,16,5,16,21,3,37,3,53,3,3,6,3,1,230,3,246,3,2,3,175,2,191,2,2,2,32,18, |
80,18,2,48,18,96,18,144,18,192,18,240,18,5,47,18,1,15,2,3,121,9,1,9,1,18, |
0,63,51,93,63,51,1,93,93,113,47,93,51,93,113,113,47,93,113,95,113,113,51, |
93,113,95,113,18,57,61,47,51,51,93,113,113,93,113,113,49,48,93,93,93,93,93, |
93,93,93,93,93,93,33,35,1,51,1,30,1,23,22,23,54,55,62,1,55,1,51,3,14,198, |
253,193,201,1,134,15,30,12,14,13,12,14,12,29,17,1,132,201,5,129,252,32,45, |
89,35,41,39,37,41,35,88,48,3,224,0,0,1,0,9,0,0,7,134,5,129,0,46,4,87,64,73, |
121,44,1,117,17,1,123,2,139,2,2,73,2,1,116,12,132,12,2,70,12,1,122,30,138, |
30,2,73,30,89,30,105,30,3,117,31,133,31,2,71,31,87,31,103,31,3,142,45,1,91, |
45,107,45,123,45,3,129,16,1,100,16,116,16,2,85,16,1,1,32,13,17,72,13,184, |
255,224,64,255,13,17,72,131,0,1,117,0,1,68,0,84,0,100,0,3,54,0,1,140,14,1, |
122,14,1,75,14,91,14,107,14,3,14,16,9,12,72,26,14,42,14,58,14,3,9,14,1,233, |
14,249,14,2,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,14,13,22,26,30,42, |
30,58,30,3,9,30,1,233,30,249,30,2,21,31,37,31,53,31,3,6,31,1,230,31,246,31, |
2,31,30,7,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0,37,0,53,0,3,6,0,1,230, |
0,246,0,2,1,0,39,123,39,1,116,22,132,22,2,22,7,39,39,7,22,3,15,26,45,42,45, |
58,45,3,3,8,45,1,232,45,248,45,2,45,219,46,1,207,46,1,187,46,1,175,46,1,155, |
46,1,143,46,1,123,46,1,111,46,1,91,46,1,79,46,1,2,79,46,143,46,175,46,3,46, |
64,25,28,72,32,46,48,46,2,15,46,1,9,46,5,16,1,229,16,245,16,2,182,16,198, |
16,214,16,3,3,16,8,15,56,15,120,15,136,15,152,15,184,15,6,12,15,64,64,255, |
25,38,72,15,119,48,151,48,215,48,3,54,48,70,48,86,48,3,23,48,39,48,2,6,48, |
1,55,48,103,48,119,48,167,48,183,48,199,48,231,48,247,48,8,38,48,1,7,48,23, |
48,2,201,199,48,215,48,231,48,3,120,48,152,48,168,48,184,48,4,105,48,1,40, |
48,56,48,88,48,3,25,48,1,7,48,1,232,48,1,217,48,1,168,48,200,48,2,153,48, |
1,138,48,1,88,48,104,48,2,73,48,1,55,48,1,8,48,24,48,2,231,48,1,200,48,1, |
167,48,1,8,48,24,48,40,48,72,48,136,48,5,153,199,48,1,88,48,104,48,136,48, |
152,48,168,48,5,73,48,1,40,48,1,9,48,25,48,2,216,48,232,48,2,203,48,1,154, |
48,170,48,186,48,3,139,48,1,48,192,124,127,72,57,48,1,42,48,1,25,48,1,10, |
48,1,249,48,1,234,48,1,217,48,1,202,48,1,184,48,1,137,48,153,48,169,48,3, |
120,48,1,105,48,1,58,48,74,48,90,48,3,41,48,1,26,48,1,12,48,1,104,253,48, |
1,236,48,1,221,48,1,204,48,1,64,255,189,48,1,171,48,1,156,48,1,139,48,1,124, |
48,1,107,48,1,92,48,1,75,48,1,60,48,1,43,48,1,28,48,1,11,48,1,252,48,1,235, |
48,1,220,48,1,203,48,1,188,48,1,171,48,1,156,48,1,0,141,48,1,127,48,1,109, |
48,1,95,48,1,77,48,1,47,48,63,48,2,29,48,1,15,48,1,253,48,1,239,48,1,221, |
48,1,207,48,1,189,48,1,175,48,1,157,48,1,143,48,1,109,48,125,48,2,91,48,1, |
77,48,1,59,48,1,45,48,1,27,48,1,13,48,1,56,251,48,1,237,48,1,219,48,1,205, |
48,1,187,48,1,173,48,1,155,48,1,141,48,1,123,48,1,109,48,1,75,48,91,48,2, |
57,48,1,43,48,1,25,48,1,11,48,1,249,48,1,235,48,1,221,48,1,203,48,1,189,48, |
1,171,48,1,157,48,1,139,48,1,125,48,1,107,48,1,93,48,1,75,48,1,61,48,1,1, |
43,48,1,31,48,1,2,95,48,127,48,159,48,191,48,223,48,255,48,6,0,48,1,8,68, |
7,84,7,2,7,30,45,3,15,3,39,64,15,22,123,22,139,22,2,22,32,9,14,72,22,1,14, |
18,0,63,51,51,43,93,17,51,63,23,51,93,1,94,93,93,95,113,113,95,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,113, |
113,113,113,113,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,93,93,93,113,113,113,113,43,113,113,113,113,114,114,114,114,114,94,93, |
93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93, |
93,93,113,113,113,113,47,43,94,93,51,95,93,93,113,47,94,93,93,43,93,95,113, |
113,113,113,113,113,113,113,113,113,51,93,113,95,113,18,23,57,61,47,47,47, |
93,93,17,51,51,93,113,113,93,113,113,17,51,51,93,113,113,93,113,113,17,51, |
51,93,113,113,93,113,113,49,48,43,93,93,93,93,93,93,93,43,43,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,33,35,3,46,1,39,38,39,6,7,14,1,7,3,35,1, |
51,19,30,1,23,22,23,54,55,62,3,55,19,51,19,30,3,23,22,23,50,62,2,55,19,51, |
5,231,228,244,11,25,10,12,12,13,12,11,24,11,246,228,254,97,199,253,17,31, |
11,13,11,15,16,7,14,15,15,6,245,183,245,6,15,15,14,7,16,15,1,16,24,29,15, |
249,199,3,127,38,104,47,55,57,58,55,48,102,38,252,129,5,129,252,129,63,124, |
49,58,52,69,67,28,62,60,55,23,3,109,252,147,23,55,59,62,28,67,70,69,104,121, |
52,3,127,0,0,1,0,46,0,0,5,43,5,129,0,11,2,119,64,255,92,4,1,73,4,1,59,4,1, |
38,11,1,75,0,91,0,2,41,0,57,0,2,68,2,84,2,2,38,2,54,2,2,9,3,25,3,41,3,3,81, |
10,1,69,10,1,51,10,1,6,10,22,10,2,93,8,1,76,8,1,43,8,59,8,2,9,8,25,8,2,82, |
6,1,67,6,1,3,38,6,54,6,2,7,6,23,6,2,12,219,13,1,196,13,1,171,13,1,144,13, |
1,132,13,1,96,13,1,84,13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13, |
1,160,13,1,148,13,1,112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,204, |
224,13,1,212,13,1,176,13,1,164,13,1,128,13,1,116,13,1,80,13,1,68,13,1,32, |
13,1,20,13,1,36,13,84,13,132,13,180,13,228,13,5,4,13,52,13,100,13,148,13, |
196,13,244,13,6,156,52,13,100,13,148,13,196,13,244,13,5,11,13,1,27,13,75, |
13,123,13,171,13,219,13,5,139,13,187,13,235,13,3,4,13,20,13,52,13,68,13,4, |
106,84,13,100,13,132,13,148,64,156,13,180,13,196,13,228,13,244,13,8,59,13, |
1,36,13,1,11,13,1,244,13,1,219,13,1,196,13,1,171,13,1,148,13,1,123,13,1,100, |
13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13,1,160,13,1,148,13,1, |
112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,57,224,13,1,212,13,1,176, |
13,1,164,13,1,128,13,1,20,13,68,13,116,13,3,36,13,84,13,132,13,180,13,228, |
13,5,84,13,100,13,148,13,244,13,4,64,13,1,2,0,13,48,13,2,6,8,10,7,1,4,4,9, |
5,9,5,9,3,0,11,16,192,11,240,11,2,11,184,255,192,64,16,26,30,72,175,11,1, |
144,11,1,127,11,1,0,11,1,11,184,255,192,181,11,15,72,11,2,3,184,255,240,64, |
41,16,3,32,3,2,224,3,240,3,2,31,3,175,3,191,3,207,3,4,3,114,7,1,52,7,68,7, |
84,7,3,4,7,10,1,4,8,5,3,3,0,18,0,63,50,63,51,23,57,93,93,1,47,93,93,113,56, |
51,47,43,93,93,93,93,43,93,56,51,18,57,57,47,47,18,23,57,50,51,93,95,93,93, |
113,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113, |
113,113,113,113,113,113,113,114,114,114,114,94,93,93,113,114,114,94,93,113, |
114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,49,48,94,93,93,95,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,9,1,35,9,1,51,9,1,51,9,1, |
4,88,254,89,254,80,211,2,24,254,17,211,1,136,1,125,211,254,30,2,11,2,104, |
253,152,2,220,2,165,253,215,2,41,253,98,253,29,0,0,0,1,0,45,0,0,5,41,5,129, |
0,8,2,83,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5,1,3,5,1,16,3,5,184,255,232, |
64,255,12,15,72,5,4,14,2,1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8, |
6,1,90,38,2,86,2,150,2,3,118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,10,169, |
10,201,10,3,86,10,1,9,10,57,10,2,25,10,89,10,137,10,249,10,4,6,10,1,202,249, |
10,1,230,10,1,9,10,25,10,185,10,201,10,4,198,10,1,89,10,121,10,169,10,3,54, |
10,1,41,10,57,10,185,10,233,10,4,11,10,1,153,249,10,1,198,10,214,10,2,178, |
10,1,164,10,1,150,10,1,130,10,1,116,10,1,86,10,102,10,2,66,10,1,36,10,52, |
10,2,18,10,1,4,10,1,244,10,1,230,10,1,196,10,212,10,2,166,10,182,10,2,146, |
10,1,132,10,1,118,10,1,98,10,1,84,10,1,54,10,70,10,2,36,10,1,22,10,1,4,10, |
1,242,10,1,1,208,10,224,10,2,196,10,1,160,10,176,10,2,148,10,1,112,10,1,100, |
10,1,64,10,1,20,10,36,10,52,10,3,0,10,1,105,228,10,244,10,2,208,10,64,182, |
1,164,10,180,10,196,10,3,128,10,144,10,2,116,10,1,80,10,96,10,2,68,10,1,32, |
10,1,4,10,20,10,2,244,10,1,224,10,1,196,10,212,10,2,176,10,1,84,10,100,10, |
116,10,148,10,164,10,5,48,10,64,10,2,36,10,1,0,10,1,196,10,244,10,2,144,10, |
1,4,10,20,10,36,10,68,10,84,10,116,10,132,10,7,57,224,10,1,132,10,164,10, |
212,10,3,112,10,1,4,10,36,10,52,10,84,10,100,10,5,228,10,244,10,2,192,10, |
1,180,10,1,144,10,1,4,10,20,10,52,10,84,10,132,10,5,212,10,228,10,2,187,10, |
1,164,10,1,112,10,1,2,48,10,96,10,2,15,10,47,10,2,0,3,59,3,75,3,123,3,3,3, |
1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,1,93,93,95,93,93,93,93,113,113,113, |
113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113,113,114,114, |
114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,95,93,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,113,113,113,114,114,114,94,93,93,113,113,113,47,94,93, |
93,93,113,253,57,206,94,93,93,50,43,1,24,16,77,230,50,49,48,43,95,94,93,93, |
43,93,93,1,17,35,17,1,51,9,1,51,3,9,190,253,226,210,1,173,1,171,210,2,72, |
253,184,2,72,3,57,253,97,2,159,0,0,0,0,1,0,65,0,0,4,163,5,129,0,9,0,122,64, |
35,100,4,116,4,132,4,3,109,3,125,3,141,3,3,91,3,1,41,3,57,3,73,3,3,114,8, |
130,8,2,84,8,100,8,2,8,184,255,240,64,9,10,13,72,9,3,16,7,1,7,184,255,192, |
64,18,12,17,72,7,8,4,15,2,31,2,2,2,64,12,15,72,2,11,184,255,192,64,14,13, |
17,72,7,3,4,95,5,3,2,8,95,1,18,0,63,237,50,63,237,50,50,1,43,47,43,93,51, |
51,47,43,93,51,51,49,48,43,93,93,93,93,93,93,41,1,53,1,33,53,33,21,1,33,4, |
163,251,158,3,90,252,239,3,234,252,166,3,137,143,4,86,156,139,251,166,0,0, |
1,0,146,254,87,2,41,5,204,0,7,0,49,64,30,7,48,2,1,224,2,1,2,4,241,63,1,1, |
143,1,191,1,2,32,1,1,1,4,245,1,0,5,245,0,27,0,63,237,63,237,1,47,93,93,113, |
237,205,93,113,50,49,48,19,17,33,21,35,17,51,21,146,1,151,233,233,254,87, |
7,117,129,249,141,129,0,1,0,0,255,236,2,57,5,204,0,3,0,71,64,40,120,1,136, |
1,2,0,24,13,17,72,9,3,25,3,73,3,3,70,2,1,10,2,26,2,42,2,3,3,16,0,3,16,3,32, |
3,128,3,4,3,1,184,255,240,183,143,1,1,1,1,0,0,19,0,63,63,1,47,93,56,205,93, |
56,49,48,93,93,93,43,93,5,1,51,1,1,151,254,105,158,1,155,20,5,224,250,32, |
0,0,0,0,1,0,16,254,87,1,167,5,204,0,7,0,49,64,31,4,63,0,1,239,0,1,0,7,241, |
64,2,80,2,2,192,2,208,2,224,2,3,2,4,245,5,0,1,245,0,27,0,63,237,63,237,1, |
47,93,113,253,205,93,113,50,49,48,19,53,51,17,35,53,33,17,16,233,233,1,151, |
254,87,129,6,115,129,248,139,0,1,0,10,2,161,3,183,5,129,0,6,2,243,181,0,24, |
18,22,72,2,184,255,232,179,18,22,72,5,184,255,232,64,47,18,22,72,118,5,134, |
5,2,4,24,18,22,72,121,4,137,4,2,3,54,6,70,6,2,102,6,118,6,134,6,230,6,4,6, |
6,22,6,38,6,70,6,86,6,102,6,6,6,184,255,192,179,48,65,72,6,184,255,192,64, |
57,18,22,72,6,5,4,57,3,73,3,2,105,3,121,3,137,3,3,9,3,25,3,41,3,89,3,105, |
3,5,9,3,64,18,22,72,3,6,1,22,1,134,1,3,57,38,1,54,1,70,1,246,1,4,230,1,1, |
1,184,255,192,182,60,63,72,153,1,1,1,184,255,224,64,255,30,33,72,56,1,72, |
1,2,39,1,1,22,1,1,183,1,199,1,2,6,1,70,1,86,1,102,1,150,1,166,1,6,9,1,6,8, |
1,246,8,1,164,8,1,121,8,1,6,8,1,246,8,1,201,8,217,8,2,187,8,1,9,8,25,8,41, |
8,169,8,4,201,201,8,217,8,2,54,8,118,8,134,8,150,8,4,153,8,233,8,2,102,8, |
118,8,2,9,8,25,8,57,8,3,198,8,1,139,8,1,57,8,73,8,121,8,3,43,8,1,4,8,1,152, |
228,8,244,8,2,208,8,1,162,8,178,8,194,8,3,132,8,148,8,2,82,8,98,8,114,8,3, |
64,8,1,50,8,1,36,8,1,2,8,18,8,2,228,8,244,8,2,214,8,1,196,8,1,146,8,162,8, |
178,8,3,116,8,132,8,2,102,8,1,50,8,66,8,82,8,3,20,8,36,8,2,6,8,1,242,8,1, |
212,8,228,8,2,166,8,182,8,2,130,8,146,8,2,100,8,116,8,2,86,8,1,52,8,68,8, |
2,32,8,1,4,8,20,8,2,104,230,8,246,8,2,192,8,1,146,8,162,8,64,24,178,8,3,116, |
8,132,8,2,82,8,98,8,2,52,8,68,8,2,22,8,38,8,2,8,184,255,128,64,24,85,88,72, |
182,8,198,8,2,132,8,148,8,164,8,3,102,8,118,8,2,68,8,1,8,184,255,192,182, |
72,75,72,228,8,1,8,184,255,192,64,12,66,69,72,148,8,1,114,8,130,8,2,8,184, |
255,128,64,120,59,62,72,18,8,34,8,2,1,0,8,1,56,240,8,1,212,8,228,8,2,176, |
8,1,100,8,132,8,148,8,164,8,4,64,8,80,8,2,36,8,52,8,2,228,8,244,8,2,171,8, |
187,8,2,116,8,132,8,148,8,3,75,8,1,52,8,1,11,8,1,235,8,251,8,2,208,8,1,196, |
8,1,176,8,1,132,8,148,8,164,8,3,96,8,112,8,2,2,0,8,16,8,64,8,80,8,4,8,34, |
1,1,3,1,19,1,2,1,4,3,3,3,0,0,47,50,47,63,51,93,93,1,94,93,95,93,93,93,93, |
93,93,113,113,113,113,113,113,114,114,114,114,114,114,94,93,95,93,43,93,93, |
43,93,43,113,113,113,113,43,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,94,93,93,93,93,93,113,113,113,114,114,94,93,93,93,93,113,113,113, |
113,114,25,47,94,93,93,113,113,113,43,113,43,113,114,94,93,205,43,94,93,113, |
114,51,51,205,43,43,93,113,114,49,48,95,93,43,93,43,43,43,9,2,35,1,51,1,3, |
19,254,203,254,206,162,1,112,203,1,114,2,161,2,121,253,135,2,224,253,32,0, |
0,0,0,1,255,225,254,105,4,138,254,235,0,3,0,35,64,23,16,2,96,2,128,2,160, |
2,208,2,5,96,2,128,2,240,2,3,2,0,0,186,1,0,47,237,1,47,47,93,113,49,48,3, |
53,33,21,31,4,169,254,105,130,130,0,1,0,106,4,177,2,18,5,228,0,5,0,47,64, |
31,117,3,133,3,2,64,4,128,4,2,4,64,16,1,1,1,2,149,128,15,0,47,0,63,0,127, |
0,239,0,5,0,0,47,93,26,237,1,47,93,26,205,93,49,48,93,9,1,53,51,19,21,1,180, |
254,182,207,217,4,177,1,22,29,254,225,20,0,0,0,0,2,0,87,255,236,4,115,4,78, |
0,50,0,65,0,161,64,50,121,61,137,61,2,121,12,137,12,2,2,40,9,13,72,10,5,26, |
5,2,43,24,9,17,72,5,28,21,28,2,37,37,30,70,64,46,9,111,56,127,56,143,56,3, |
56,67,128,20,71,21,184,255,192,64,20,21,28,72,21,21,63,71,31,3,1,3,48,67, |
192,67,2,160,67,1,67,184,255,192,64,32,30,35,72,33,81,40,22,57,81,9,9,26, |
51,95,20,1,47,20,143,20,2,20,20,15,80,26,16,46,51,80,0,22,0,63,237,50,63, |
237,51,47,93,113,17,18,57,47,237,63,237,1,43,93,113,47,93,237,51,47,43,237, |
26,16,220,93,50,50,26,237,50,47,49,48,93,43,93,43,0,93,93,5,34,38,53,52,62, |
2,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,21,17,20,22,51,50,54,55,21, |
14,1,35,34,46,2,39,35,14,3,39,50,62,2,61,1,7,14,3,21,20,22,1,158,163,164, |
81,131,168,87,243,28,58,87,59,52,84,62,38,6,188,10,56,103,155,110,204,206, |
42,59,15,30,14,34,67,38,51,73,46,24,3,6,29,69,92,117,35,86,129,85,42,197, |
66,119,90,53,95,20,172,150,107,137,78,30,2,4,59,67,94,58,27,15,39,67,51,17, |
64,107,78,43,187,177,254,46,80,81,4,3,112,8,8,27,55,81,54,52,84,59,32,135, |
63,98,116,53,89,4,1,17,50,90,73,88,96,0,0,2,0,132,255,236,4,29,5,204,0,31, |
0,51,0,146,64,9,105,49,121,49,2,121,35,1,31,184,255,224,64,24,7,10,72,134, |
30,150,30,2,73,27,89,27,2,73,4,89,4,2,134,1,150,1,2,1,184,255,224,64,63,7, |
10,72,0,71,64,160,32,1,32,53,128,42,5,19,70,0,18,16,18,48,18,240,18,4,8,18, |
176,53,1,63,53,1,112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,37,80, |
29,16,18,0,12,21,5,47,80,2,22,0,63,237,50,63,63,63,237,50,1,93,93,113,113, |
114,114,47,94,93,237,50,50,26,16,220,93,26,237,49,48,43,93,93,93,93,43,93, |
93,1,16,33,34,38,39,35,20,14,2,7,35,62,3,53,17,51,17,20,6,7,6,7,51,62,1,51, |
50,18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,29,254,114,123,163,51, |
2,3,3,3,1,174,1,2,2,1,180,1,1,1,1,4,50,165,122,205,193,189,28,62,96,69,71, |
109,73,38,38,73,108,70,66,96,64,31,2,34,253,202,89,99,26,56,48,34,4,9,43, |
60,72,39,4,237,254,89,30,55,21,25,22,104,90,254,236,254,226,112,160,103,48, |
46,102,166,120,116,158,99,43,46,102,163,0,0,0,1,0,87,255,236,3,202,4,78,0, |
39,0,117,64,81,121,16,1,121,23,1,99,37,1,99,3,1,32,70,31,31,8,70,160,9,1, |
9,9,41,0,71,31,19,1,19,35,80,26,31,32,127,32,143,32,223,32,4,32,32,26,16, |
32,8,112,8,128,8,208,8,224,8,5,0,8,16,8,96,8,112,8,128,8,192,8,208,8,7,8, |
8,5,80,14,22,31,41,1,93,0,63,237,51,47,93,113,63,51,47,93,16,237,1,47,93, |
237,17,51,125,47,113,24,237,51,47,237,49,48,93,93,93,93,1,20,30,2,51,50,54, |
55,23,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,7,46,1,35,34,14,2,1,19,27, |
64,105,77,96,129,15,182,9,60,103,148,97,127,178,111,50,36,65,88,103,114,58, |
91,142,103,64,13,185,14,114,105,77,103,64,27,2,34,93,156,113,62,104,108,12, |
67,124,94,57,86,151,205,120,109,167,125,85,51,23,50,87,118,68,14,90,106,51, |
103,156,0,0,0,0,2,0,86,255,236,3,239,5,204,0,31,0,51,0,123,64,87,85,34,101, |
34,2,90,50,106,50,2,57,1,73,1,2,54,10,70,10,2,9,4,25,4,121,4,137,4,4,6,7, |
22,7,118,7,134,7,4,19,70,64,42,0,143,18,239,18,2,18,53,128,32,71,31,6,1,6, |
112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,21,18,0,11,47,80,8,16, |
0,37,80,3,22,0,63,237,50,63,237,50,63,63,1,93,93,113,113,47,93,237,26,16, |
220,93,50,50,26,237,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17,16,33,50, |
22,23,51,52,46,1,52,53,17,51,17,20,30,2,23,35,46,3,53,1,20,30,2,51,50,62, |
2,53,52,46,2,35,34,14,2,3,53,50,165,122,205,193,1,142,123,164,50,2,1,1,180, |
1,2,2,1,172,2,3,3,2,253,218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64, |
31,174,104,90,1,20,1,24,2,54,90,98,10,43,47,42,9,1,163,251,19,39,72,60,43, |
9,10,37,48,53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102, |
163,0,0,0,2,0,87,255,236,4,24,4,78,0,28,0,37,0,107,64,46,90,35,106,35,2,90, |
30,106,30,2,85,3,101,3,2,8,73,9,9,27,71,64,31,29,1,144,29,1,29,39,128,37, |
0,71,31,17,1,17,48,39,192,39,208,39,3,39,184,255,192,64,19,30,35,72,8,8,5, |
0,80,37,37,5,32,80,22,16,5,80,14,22,0,63,237,63,237,18,57,47,237,17,57,47, |
1,43,113,47,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,0,93,93, |
1,20,30,2,51,50,54,55,23,14,3,35,34,2,17,52,62,2,51,50,30,2,29,1,39,46,1, |
35,34,14,2,7,1,20,35,73,114,80,117,141,25,158,17,61,102,153,108,240,251,76, |
132,176,100,136,183,111,47,186,15,144,135,45,99,84,58,4,1,247,85,143,103, |
57,94,72,45,45,91,73,47,1,30,1,26,152,211,132,59,88,155,210,122,24,138,171, |
157,29,74,127,98,0,0,0,1,0,29,0,0,2,60,5,202,0,27,0,161,64,11,3,10,19,10, |
51,10,67,10,4,13,10,184,255,224,64,106,8,12,72,26,15,16,1,14,16,25,16,1,70, |
5,0,2,1,18,2,31,29,47,29,79,29,95,29,127,29,143,29,159,29,7,15,29,63,29,127, |
29,175,29,191,29,223,29,239,29,7,59,95,29,191,29,2,127,29,143,29,159,29,3, |
29,64,86,100,72,29,64,39,44,72,32,29,48,29,96,29,3,175,29,223,29,239,29,3, |
64,29,1,15,29,47,29,2,19,80,12,0,0,3,80,25,6,15,1,21,0,63,63,51,237,50,63, |
237,1,93,93,93,113,43,43,113,114,94,93,113,47,94,93,51,237,50,50,47,94,93, |
51,49,48,0,43,94,93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35, |
34,14,2,29,1,51,21,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51, |
29,11,211,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41,60,39, |
97,131,0,2,0,86,254,87,3,239,4,75,0,49,0,69,0,217,64,72,122,49,138,49,2,118, |
7,134,7,2,101,62,1,85,12,101,12,2,90,58,106,58,2,38,3,54,3,2,38,18,1,41,33, |
1,9,23,25,23,121,23,137,23,4,6,29,22,29,118,29,134,29,4,9,47,70,64,50,34, |
48,14,1,127,14,223,14,2,14,71,128,6,70,5,184,255,192,64,81,23,28,72,5,5,60, |
71,15,26,1,10,26,32,71,64,71,2,207,71,1,0,71,32,71,144,71,176,71,4,80,223, |
71,1,192,71,1,79,71,1,128,71,160,71,2,15,71,47,71,2,208,71,240,71,2,15,71, |
1,8,41,15,34,55,80,31,16,15,65,80,21,22,9,80,53,6,1,38,6,1,6,0,27,0,63,50, |
93,93,237,63,237,50,63,237,50,63,1,94,93,93,113,113,114,114,114,94,93,93, |
113,47,94,93,237,51,47,43,237,26,16,220,93,113,50,50,26,237,49,48,0,94,93, |
93,93,93,93,93,93,93,93,93,1,34,46,2,39,55,30,1,51,50,62,2,61,1,35,14,3,35, |
34,46,2,53,52,62,2,51,50,22,23,51,52,62,2,55,51,14,3,21,17,20,6,19,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,2,36,93,144,102,64,14,181,18,123,100,61, |
100,70,38,2,20,59,85,112,72,103,147,93,43,43,97,155,111,115,169,46,2,3,3, |
4,2,171,1,2,2,1,223,44,49,80,103,54,69,99,65,31,31,64,98,68,54,103,82,50, |
254,87,38,71,98,60,26,75,81,34,75,120,86,174,41,75,58,35,69,138,205,135,130, |
208,145,77,105,97,25,62,55,40,3,9,43,60,73,39,252,197,227,229,3,198,113,161, |
102,48,48,103,161,112,117,159,98,42,46,100,158,0,0,0,0,1,0,142,0,0,3,238, |
5,204,0,33,0,109,185,0,8,255,192,64,36,7,11,72,11,70,64,80,12,1,159,12,255, |
12,2,12,35,128,0,35,192,35,208,35,224,35,4,192,35,1,15,35,1,128,35,1,35,184, |
255,192,64,32,19,23,72,28,24,70,192,25,1,0,25,16,25,48,25,224,25,240,25,5, |
8,25,26,0,25,11,21,0,18,80,5,16,0,63,237,50,63,51,63,1,47,94,93,113,237,50, |
43,93,113,113,114,26,16,220,93,113,26,237,49,48,43,1,62,3,51,50,30,2,21,17, |
35,17,52,46,2,35,34,14,2,21,17,35,17,51,17,20,14,2,7,1,61,30,70,84,100,62, |
104,133,77,29,181,17,48,88,70,64,103,73,40,180,180,2,3,2,1,3,129,55,77,50, |
23,56,101,140,84,253,47,2,174,69,104,69,35,46,84,120,75,253,130,5,204,254, |
126,33,66,56,39,7,0,0,0,2,0,137,0,0,1,61,5,204,0,3,0,7,0,115,64,13,3,7,70, |
0,0,4,16,4,48,4,3,8,4,184,255,192,64,42,21,24,72,4,4,8,9,255,9,1,224,9,1, |
223,9,1,176,9,192,9,2,159,9,1,112,9,128,9,2,31,9,1,0,9,1,240,9,1,223,9,1, |
9,184,255,192,64,17,34,37,72,79,9,1,31,9,1,5,15,4,21,0,83,1,0,0,63,237,63, |
63,1,93,113,43,113,113,114,114,114,114,114,114,114,114,17,18,57,47,43,94, |
93,51,237,50,49,48,19,53,51,21,3,17,51,17,137,180,180,180,5,32,172,172,250, |
224,4,58,251,198,0,0,0,0,2,255,206,254,87,1,61,5,204,0,3,0,23,1,51,64,151, |
7,24,12,16,72,7,40,8,11,72,3,4,70,21,12,12,0,0,21,16,21,32,21,64,21,4,7,21, |
21,24,25,144,25,1,63,25,1,0,25,16,25,2,219,25,64,210,213,72,208,25,224,25, |
2,143,25,1,64,25,80,25,2,15,25,31,25,95,25,111,25,255,25,5,144,25,160,25, |
224,25,240,25,4,79,25,1,0,25,1,160,63,25,175,25,191,25,207,25,4,239,25,1, |
176,25,192,25,208,25,3,63,25,79,25,95,25,3,32,25,1,143,25,191,25,207,25,3, |
0,25,1,111,239,25,1,208,25,1,63,25,143,25,2,111,25,143,25,159,25,175,25,255, |
25,5,25,184,255,192,64,84,79,82,72,223,25,1,144,25,160,25,176,25,3,47,25, |
63,25,79,25,3,0,25,1,61,25,64,53,56,72,112,25,128,25,144,25,176,25,4,15,25, |
31,25,2,255,25,1,25,64,35,38,72,144,25,1,79,25,1,255,25,1,112,25,128,25,192, |
25,208,25,224,25,5,31,25,1,22,15,16,80,9,27,0,83,1,0,0,63,237,63,237,63,1, |
93,93,93,113,113,43,113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93, |
93,113,113,113,113,114,94,93,93,93,113,114,114,114,43,94,93,93,93,17,18,57, |
47,94,93,51,51,47,16,237,50,49,48,0,43,43,19,53,51,21,17,20,14,2,35,34,38, |
39,53,30,1,51,50,62,2,53,17,51,137,180,21,54,93,72,34,65,28,13,36,13,38,49, |
28,10,180,5,32,172,172,250,90,62,106,78,45,4,5,139,2,4,20,43,67,46,4,165, |
0,0,1,0,138,0,0,4,3,5,204,0,11,0,251,64,84,124,2,1,122,8,1,118,7,1,86,9,102, |
9,134,9,150,9,4,139,0,155,0,2,89,0,105,0,121,0,3,116,10,132,10,148,10,3,68, |
10,1,1,10,10,11,42,8,1,3,8,9,16,116,9,1,9,9,0,11,16,84,11,116,11,148,11,3, |
116,11,148,11,180,11,212,11,228,11,244,11,6,48,11,1,2,11,184,255,192,64,105, |
7,10,72,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,31,13,63,13,2,31,13,63,13,95, |
13,255,13,4,15,13,31,13,63,13,95,13,127,13,5,57,13,64,83,86,72,96,13,128, |
13,160,13,192,13,208,13,5,223,13,1,0,13,96,13,128,13,160,13,4,0,13,16,13, |
48,13,64,13,128,13,160,13,192,13,224,13,240,13,9,7,2,1,7,10,4,8,15,5,0,4, |
21,0,21,0,63,63,63,63,23,57,1,94,93,113,113,114,43,94,93,113,114,47,94,93, |
237,50,47,43,95,93,93,113,56,51,51,47,93,56,51,95,114,17,57,17,51,49,48,93, |
93,93,93,93,0,93,1,93,0,93,33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132, |
180,180,1,219,211,254,73,1,206,1,238,109,254,127,5,204,252,97,2,13,254,47, |
253,151,0,0,0,1,0,138,0,0,1,62,5,204,0,3,0,111,64,52,3,70,192,0,1,208,0,1, |
0,0,16,0,48,0,240,0,4,8,0,224,5,240,5,2,223,5,1,176,5,192,5,2,159,5,1,112, |
5,128,5,2,15,5,31,5,2,240,5,1,223,5,1,5,184,255,192,64,27,34,37,72,79,5,1, |
255,5,1,112,5,128,5,192,5,208,5,224,5,5,31,5,1,1,0,0,21,0,63,63,1,93,93,93, |
113,43,113,113,114,114,114,114,114,114,47,94,93,113,114,237,49,48,51,17,51, |
17,138,180,5,204,250,52,0,0,1,0,136,0,0,6,35,4,78,0,59,2,194,185,0,42,255, |
224,179,8,11,72,32,184,255,224,64,255,8,11,72,34,59,70,0,0,13,46,70,217,47, |
249,47,2,182,47,1,41,47,89,47,137,47,3,6,47,1,166,47,182,47,214,47,230,47, |
4,137,47,1,118,47,1,89,47,1,6,47,22,47,70,47,3,7,47,25,12,70,198,13,1,6,13, |
22,13,54,13,230,13,246,13,5,8,13,251,61,1,201,61,217,61,233,61,3,187,61,1, |
153,61,1,139,61,1,105,61,121,61,2,91,61,1,73,61,1,43,61,59,61,2,249,61,1, |
235,61,1,217,61,1,203,61,1,189,61,1,153,61,1,139,61,1,105,61,1,91,61,1,41, |
61,57,61,2,27,61,1,9,61,1,202,235,61,251,61,2,105,61,137,61,153,61,185,61, |
201,61,5,91,61,1,77,61,1,41,61,57,61,2,27,61,1,249,61,1,235,61,1,201,61,217, |
61,2,187,61,1,153,61,1,139,61,1,125,61,1,1,43,61,75,61,91,61,107,61,4,31, |
61,1,4,61,1,203,61,235,61,2,175,61,191,61,2,139,61,1,127,61,1,43,61,75,61, |
91,61,107,61,4,31,61,1,11,61,1,154,255,61,1,235,61,64,255,1,223,61,1,187, |
61,1,175,61,1,139,61,155,61,2,127,61,1,91,61,107,61,2,79,61,1,59,61,1,36, |
61,1,11,61,1,235,61,1,223,61,1,187,61,1,175,61,1,155,61,1,127,61,143,61,2, |
100,61,1,75,61,1,63,61,1,43,61,1,15,61,31,61,2,235,61,1,223,61,1,123,61,139, |
61,171,61,187,61,4,111,61,1,59,61,1,31,61,1,11,61,1,106,187,61,203,61,235, |
61,3,175,61,1,139,61,1,127,61,1,91,61,1,79,61,1,27,61,1,251,61,1,223,61,239, |
61,2,187,61,203,61,2,175,61,1,100,61,148,61,2,27,61,43,61,75,61,3,4,61,1, |
244,61,1,139,61,171,61,219,61,3,127,61,1,107,61,1,52,61,1,27,61,1,15,61,1, |
57,187,61,219,61,251,61,3,160,61,1,116,61,148,61,2,43,61,75,61,91,61,3,31, |
61,1,11,61,1,203,61,235,61,251,61,3,164,61,1,27,61,75,61,91,61,123,61,4,244, |
61,1,208,61,1,2,96,61,144,61,160,61,192,61,4,79,61,1,48,61,1,47,61,1,0,64, |
19,61,1,8,34,53,80,40,16,25,6,80,31,16,19,15,47,13,0,21,0,63,50,50,63,63, |
237,50,63,237,50,1,94,93,93,93,93,93,95,93,93,113,113,113,114,114,114,114, |
114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,47, |
94,93,113,237,50,47,94,93,93,93,93,93,113,113,113,113,237,18,57,47,237,57, |
49,48,0,43,43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21, |
51,62,3,51,50,22,23,51,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,3,0,20,47,76,55,57,92,65,35,179,1,2,2,1,170,1,2,3,2,3,24,56,75,97,64,123, |
143,28,3,24,60,80,100,64,82,119,76,36,178,20,47,76,55,57,92,65,35,2,174,79, |
106,65,27,45,85,125,81,253,141,3,83,34,75,67,48,7,5,44,57,59,20,47,76,53, |
29,98,107,47,76,53,29,44,92,145,100,253,47,2,174,79,106,65,27,43,84,126,83, |
253,141,0,1,0,136,0,0,3,238,4,78,0,37,0,109,185,0,34,255,224,64,36,7,11,72, |
37,70,64,80,0,1,159,0,255,0,2,0,39,128,0,39,192,39,208,39,224,39,4,192,39, |
1,15,39,1,128,39,1,39,184,255,192,64,32,19,23,72,25,12,70,192,13,1,0,13,16, |
13,48,13,224,13,240,13,5,8,13,25,6,80,31,16,19,15,13,0,21,0,63,50,63,63,237, |
50,1,47,94,93,113,237,50,43,93,113,113,114,26,16,220,93,113,26,237,49,48, |
43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51, |
50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26, |
62,82,106,70,90,130,84,39,2,174,79,106,65,27,45,85,125,81,253,141,3,83,34, |
75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,253,47,0,0,0,0,2,0,86, |
255,236,4,29,4,78,0,14,0,34,0,116,64,59,121,32,137,32,2,116,28,132,28,2,118, |
22,134,22,2,121,18,137,18,2,150,12,166,12,2,4,12,20,12,2,11,9,27,9,2,11,5, |
27,5,2,4,2,20,2,2,7,0,71,64,144,15,1,15,36,128,48,36,1,36,184,255,192,64, |
20,30,35,72,223,36,1,25,71,31,8,1,8,20,80,10,16,30,80,3,22,0,63,237,63,237, |
1,47,93,237,93,43,113,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93, |
93,1,16,2,35,34,46,2,53,16,33,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,29,250,238,113,178,123,65,1,229,126,183,117,56,189,39,75,108,68, |
69,111,78,41,44,77,105,62,69,112,78,42,2,30,254,228,254,234,68,140,211,143, |
2,48,70,140,210,140,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0, |
0,2,0,132,254,87,4,29,4,77,0,38,0,58,0,148,64,16,105,56,121,56,2,105,42,121, |
42,2,134,36,150,36,2,36,184,255,224,64,19,7,10,72,73,31,89,31,2,73,7,89,7, |
2,134,3,150,3,2,3,184,255,224,64,63,7,10,72,0,71,64,160,39,1,39,60,128,49, |
28,15,70,0,16,16,16,48,16,240,16,4,8,16,176,60,1,63,60,1,112,60,144,60,2, |
31,60,1,255,60,1,192,60,224,60,2,28,44,80,34,16,22,15,15,27,8,54,80,5,22, |
0,63,237,50,63,63,63,237,50,1,93,93,113,113,114,114,47,94,93,237,50,50,26, |
16,220,93,26,237,49,48,43,93,93,93,43,93,93,93,1,20,14,2,35,34,38,39,35,30, |
3,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51,50,30,2,7,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,4,29,40,93,153,112,116,174,46,5,1,1,1,1,180,1,2,2, |
1,174,1,3,3,3,4,25,64,82,101,63,112,153,93,40,189,24,59,98,74,60,106,79,46, |
38,73,108,70,75,99,59,24,2,34,123,208,150,85,88,100,2,32,48,59,29,254,89, |
5,6,39,72,59,42,9,3,36,51,58,26,52,73,47,21,80,145,205,129,100,156,108,56, |
34,96,169,135,115,159,98,43,58,110,159,0,0,2,0,86,254,87,3,240,4,78,0,34, |
0,54,0,165,64,119,85,47,101,47,2,90,43,106,43,2,57,32,73,32,2,54,9,70,9,2, |
9,1,25,1,121,1,137,1,4,6,5,22,5,118,5,134,5,4,9,22,70,64,35,11,127,23,223, |
23,2,23,56,128,45,71,15,3,1,10,3,32,56,64,56,2,207,56,1,0,56,32,56,144,56, |
176,56,4,80,223,56,1,192,56,1,79,56,1,128,56,160,56,2,15,56,47,56,2,208,56, |
240,56,2,15,56,1,8,22,27,17,16,11,40,80,6,16,29,50,80,0,22,0,63,237,50,63, |
237,50,63,63,1,94,93,93,113,113,114,114,114,94,93,93,113,47,94,93,237,26, |
16,220,93,50,50,26,237,49,48,0,94,93,93,93,93,93,93,5,34,2,17,16,18,51,50, |
30,2,23,51,52,62,2,55,51,14,1,21,17,35,17,52,54,55,54,55,35,14,3,1,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,1,228,206,192,197,201,67,103,81,61,25, |
2,3,3,4,2,173,2,5,180,1,1,1,1,2,26,63,82,103,1,16,41,75,107,66,69,98,61,29, |
27,61,97,70,60,106,79,46,20,1,22,1,22,1,26,1,28,24,47,70,47,25,61,54,39,3, |
17,144,134,251,54,1,183,26,56,25,28,29,51,75,49,23,2,62,118,160,96,41,51, |
105,161,110,108,160,104,51,37,97,169,0,0,0,1,0,136,0,0,2,136,4,78,0,31,0, |
62,64,40,16,21,48,21,2,21,21,33,12,31,70,192,0,1,0,0,16,0,48,0,224,0,240, |
0,5,8,0,25,40,19,22,72,25,12,18,16,7,15,0,21,0,63,63,63,51,205,43,1,47,94, |
93,113,237,50,17,51,47,93,49,48,51,17,52,46,2,39,51,30,3,21,51,62,3,51,50, |
22,23,21,46,1,35,34,14,2,21,17,142,1,2,2,1,170,1,3,3,1,4,19,43,58,80,57,22, |
40,11,18,48,30,62,87,55,26,3,62,34,71,66,58,23,23,59,62,57,20,62,91,59,29, |
7,3,165,5,5,56,99,137,81,253,204,0,0,1,0,57,255,236,3,182,4,75,0,55,0,189, |
64,85,116,46,132,46,2,111,21,127,21,143,21,3,107,22,1,37,54,1,42,27,1,21, |
52,1,5,2,21,2,2,11,30,27,30,2,36,73,35,35,0,72,64,32,19,48,19,2,144,19,160, |
19,176,19,3,19,57,128,11,73,10,64,25,30,72,10,10,44,72,79,29,95,29,2,32,29, |
1,29,96,57,192,57,2,128,57,1,57,184,255,192,64,42,39,42,72,63,57,1,16,57, |
1,19,44,5,41,80,32,0,36,1,144,36,240,36,2,36,36,32,16,14,80,5,96,11,112,11, |
2,128,11,1,11,11,5,22,0,63,51,47,93,113,16,237,63,51,47,93,113,16,237,18, |
57,57,1,93,93,43,93,113,47,93,113,237,51,47,43,237,26,16,220,93,113,26,237, |
50,47,237,49,48,93,93,0,93,1,93,93,0,93,93,93,1,20,14,2,35,34,46,2,39,55, |
30,1,51,50,62,2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,6,21, |
20,30,2,23,30,5,3,182,59,112,163,105,94,151,114,77,18,159,23,144,128,58,97, |
70,39,46,82,117,70,65,128,103,64,211,202,179,211,28,162,9,48,68,85,46,122, |
116,43,77,108,65,43,90,85,75,56,33,1,43,76,119,81,43,29,64,105,76,31,87,81, |
16,39,65,48,49,63,42,31,19,17,42,69,102,77,148,155,126,139,20,42,57,35,15, |
74,75,44,57,39,29,16,11,25,35,47,66,88,0,0,0,0,1,0,31,255,240,2,42,5,44,0, |
22,0,123,64,87,40,14,1,105,14,121,14,137,14,3,40,13,1,105,13,121,13,137,13, |
3,139,4,1,4,32,9,13,72,108,4,124,4,156,4,172,4,4,4,32,9,12,72,111,22,127, |
22,2,22,12,13,22,3,16,70,9,8,143,5,1,0,5,16,5,32,5,64,5,4,7,5,128,24,1,15, |
6,80,12,63,10,1,10,9,15,19,80,3,22,0,63,237,63,205,93,51,237,50,1,93,47,94, |
93,113,51,51,237,23,50,47,93,49,48,0,43,93,1,43,93,93,113,93,113,37,14,1, |
35,34,53,17,35,53,51,55,51,21,51,21,35,17,20,22,51,50,54,55,2,42,41,85,56, |
216,125,132,53,120,200,200,51,63,26,49,29,8,11,13,245,2,210,131,242,242,131, |
253,85,78,63,8,6,0,0,0,0,1,0,133,255,236,3,235,4,58,0,37,0,121,64,69,150, |
3,1,26,33,42,33,58,33,3,25,14,70,64,47,11,143,11,2,191,11,1,143,11,159,11, |
255,11,3,11,39,128,1,70,223,36,239,36,2,0,36,16,36,48,36,240,36,4,8,36,176, |
39,192,39,208,39,3,176,39,240,39,2,255,39,1,112,39,1,39,184,255,192,64,13, |
19,23,72,25,6,80,31,22,19,21,12,0,15,0,63,50,63,63,237,50,1,43,93,93,113, |
114,47,94,93,113,237,26,16,220,93,113,114,26,237,51,49,48,0,93,93,1,17,20, |
30,2,51,50,62,2,53,17,51,17,20,30,2,23,35,46,3,53,35,14,3,35,34,46,2,53,17, |
1,58,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90, |
130,84,39,4,58,253,82,79,106,65,27,45,85,125,81,2,115,252,173,34,75,67,48, |
7,5,44,57,59,20,47,76,53,29,44,92,144,101,2,209,0,0,1,0,7,0,0,3,249,4,58, |
0,16,2,91,64,55,57,1,73,1,2,153,1,1,54,0,70,0,2,134,0,150,0,2,58,15,74,15, |
2,154,15,1,105,15,121,15,137,15,3,53,3,69,3,2,149,3,1,3,103,3,119,3,135,3, |
3,14,16,13,17,72,4,184,255,240,64,62,13,17,72,1,0,9,9,2,15,16,16,43,16,123, |
16,2,4,16,20,16,2,4,16,20,16,68,16,84,16,132,16,148,16,196,16,212,16,8,219, |
16,1,68,16,84,16,132,16,148,16,196,16,5,27,16,1,4,16,1,8,16,3,2,184,255,240, |
64,255,11,2,91,2,2,42,2,11,18,27,18,2,11,18,27,18,75,18,91,18,139,18,155, |
18,203,18,219,18,8,255,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18, |
1,68,18,84,18,2,32,18,1,4,18,20,18,2,199,224,18,1,196,18,212,18,2,160,18, |
1,4,18,20,18,68,18,84,18,132,18,148,18,6,68,18,84,18,132,18,148,18,196,18, |
212,18,6,27,18,1,4,18,1,219,18,1,196,18,1,155,18,1,132,18,1,91,18,1,68,18, |
1,27,18,1,4,18,1,151,11,18,27,18,75,18,91,18,139,18,155,18,203,18,219,18, |
8,155,18,203,18,219,18,3,132,18,1,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18, |
2,224,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,4,18,20,18,68, |
18,84,18,4,103,4,18,20,18,68,18,84,18,132,18,148,18,196,18,212,18,8,219,18, |
1,196,18,1,155,18,1,132,18,1,91,18,1,68,18,1,27,18,1,4,18,1,219,18,1,196, |
18,1,11,18,27,18,75,18,64,99,91,18,139,18,155,18,6,55,75,18,91,18,139,18, |
155,18,203,18,219,18,6,63,18,1,32,18,1,4,18,20,18,2,224,18,1,196,18,212,18, |
2,160,18,1,132,18,148,18,2,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18,2,196, |
18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,2,80,18,1,47,18,1,0,18,16,18, |
2,7,15,2,15,9,1,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93,93,113,113,113, |
113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113, |
113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114,94,93,93,93,93,93, |
93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93,93,93,93,113,114,47, |
94,93,56,51,47,94,93,93,93,93,113,114,114,56,51,18,57,61,47,51,51,49,48,43, |
43,93,95,93,113,93,93,113,93,113,93,113,33,35,1,51,19,30,3,23,62,3,55,19, |
51,2,101,213,254,119,192,238,7,19,20,17,6,6,19,20,21,8,246,191,4,58,253,64, |
22,63,68,63,21,21,63,66,63,22,2,194,0,0,0,0,1,255,253,0,0,5,204,4,58,0,42, |
3,177,64,36,229,23,1,58,41,74,41,2,122,41,138,41,154,41,3,53,16,69,16,2,117, |
16,133,16,149,16,3,54,29,70,29,2,54,29,1,29,184,255,240,64,22,13,17,72,57, |
28,73,28,2,57,28,1,28,16,13,17,72,54,0,70,0,2,0,184,255,240,64,9,11,17,72, |
54,13,70,13,2,13,184,255,240,64,51,11,17,72,57,1,73,1,2,1,16,11,17,72,57, |
14,73,14,2,3,14,16,9,17,72,14,13,22,29,28,7,1,0,35,40,35,1,88,35,1,22,7,35, |
35,7,22,3,15,41,42,16,42,184,255,192,64,73,47,50,72,73,42,1,52,42,1,38,42, |
1,249,42,1,198,42,230,42,2,164,42,1,150,42,1,121,42,1,54,42,70,42,102,42, |
3,25,42,1,244,42,1,182,42,230,42,2,132,42,148,42,2,102,42,118,42,2,57,42, |
1,38,42,1,20,42,1,6,42,1,8,42,16,15,184,255,240,64,255,9,15,89,15,105,15, |
121,15,4,10,15,198,44,230,44,246,44,3,164,44,1,150,44,1,121,44,1,102,44,1, |
84,44,1,54,44,70,44,2,25,44,1,244,44,1,230,44,1,196,44,1,182,44,1,153,44, |
1,134,44,1,116,44,1,102,44,1,57,44,1,20,44,36,44,2,6,44,1,202,249,44,1,150, |
44,182,44,198,44,230,44,4,105,44,1,54,44,70,44,2,9,44,25,44,2,230,44,1,185, |
44,1,86,44,102,44,134,44,3,57,44,1,43,44,1,20,44,1,6,44,1,228,44,1,214,44, |
1,196,44,1,182,44,1,162,44,1,148,44,1,134,44,1,114,44,1,100,44,1,86,44,1, |
52,44,68,44,2,34,44,1,20,44,1,6,44,1,153,246,44,1,194,44,210,44,2,180,44, |
1,166,44,1,132,44,1,118,44,1,84,44,100,44,2,66,44,1,52,44,1,22,44,38,44,2, |
4,44,1,226,44,242,44,2,212,44,1,198,44,1,164,44,1,146,44,1,132,44,1,102,44, |
118,44,2,84,44,1,54,44,70,44,2,36,44,1,22,44,1,4,44,1,244,44,64,213,1,230, |
44,1,196,44,1,178,44,1,164,44,1,102,44,134,44,150,44,3,68,44,84,44,2,54,44, |
1,20,44,1,6,44,1,105,246,44,1,226,44,1,212,44,1,150,44,182,44,198,44,3,116, |
44,132,44,2,54,44,70,44,102,44,3,36,44,1,6,44,22,44,2,244,44,1,182,44,230, |
44,2,148,44,164,44,2,134,44,1,105,44,1,86,44,1,68,44,1,6,44,54,44,2,228,44, |
1,214,44,1,196,44,1,166,44,182,44,2,137,44,1,114,44,1,1,96,44,1,4,44,36,44, |
84,44,3,56,164,44,196,44,212,44,244,44,4,128,44,1,116,44,1,75,44,1,48,44, |
1,20,44,36,44,2,251,44,1,196,44,1,160,44,1,148,44,1,123,44,1,52,44,68,44, |
100,44,3,27,44,1,240,44,1,228,44,1,203,44,1,100,44,132,44,148,44,180,44,4, |
63,44,1,2,0,44,16,44,2,8,7,184,255,224,64,40,14,17,72,66,7,1,52,7,1,34,7, |
1,7,28,41,3,15,15,35,40,12,17,72,45,35,1,22,40,12,17,72,45,22,1,1,22,35,3, |
14,21,0,63,23,51,93,43,93,43,63,23,51,93,93,93,43,1,94,93,95,93,93,93,93, |
93,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93,93,95,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,47,94,93, |
56,51,47,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114, |
43,56,51,18,23,57,61,47,47,47,113,114,17,51,51,17,51,51,17,51,51,49,48,43, |
95,113,43,113,43,113,43,113,43,93,113,43,93,113,93,113,93,113,113,33,35,3, |
46,1,39,38,39,6,7,14,1,7,3,35,1,51,19,30,1,23,22,23,54,55,62,1,55,19,51,19, |
30,1,23,22,23,54,55,62,1,55,19,51,4,150,209,173,8,17,8,10,9,9,10,8,19,8,178, |
208,254,209,178,183,7,14,7,7,8,8,9,8,16,6,196,193,189,7,16,7,8,8,8,8,7,15, |
7,191,176,2,186,27,80,38,44,47,45,44,38,82,31,253,74,4,58,253,33,23,67,32, |
37,39,38,36,31,64,21,2,231,253,25,26,66,29,34,35,38,36,31,67,26,2,223,0,0, |
1,0,23,0,0,3,234,4,58,0,11,2,214,64,72,148,2,1,134,2,1,141,8,157,8,2,121, |
8,1,130,6,146,6,2,118,6,1,141,0,157,0,2,121,0,1,55,10,119,10,2,28,10,1,122, |
4,1,19,4,1,3,24,1,120,1,136,1,152,1,4,23,7,135,7,151,7,3,6,8,10,1,7,4,4,9, |
9,16,5,184,255,240,64,59,5,9,5,9,3,0,11,16,41,11,57,11,2,4,11,20,11,2,214, |
11,230,11,246,11,3,196,11,1,150,11,166,11,182,11,3,132,11,1,6,11,38,11,70, |
11,102,11,134,11,150,11,166,11,198,11,230,11,9,8,11,184,255,192,181,24,31, |
72,11,2,3,184,255,240,64,11,9,3,1,9,3,57,3,2,10,3,13,184,255,128,64,116,223, |
233,72,118,13,1,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,230, |
13,246,13,2,210,13,1,192,13,1,178,13,1,132,13,148,13,164,13,3,118,13,1,100, |
13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,199,246,13,1,228,13,1, |
214,13,1,196,13,1,182,13,1,164,13,1,6,13,70,13,86,13,134,13,150,13,166,13, |
198,13,214,13,230,13,9,150,13,198,13,2,13,184,255,192,64,187,183,192,72,132, |
13,1,86,13,102,13,118,13,3,68,13,1,38,13,54,13,2,4,13,1,151,38,13,54,13,102, |
13,118,13,166,13,182,13,198,13,230,13,246,13,9,230,13,1,132,13,1,118,13,1, |
68,13,84,13,100,13,3,54,13,1,36,13,1,22,13,1,4,13,1,246,13,1,228,13,1,214, |
13,1,196,13,1,182,13,1,164,13,1,118,13,134,13,150,13,3,100,13,1,6,13,22,13, |
38,13,70,13,86,13,5,103,6,13,70,13,86,13,134,13,150,13,198,13,214,13,230, |
13,8,153,13,217,13,2,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13, |
1,214,13,230,13,246,13,3,196,13,1,6,13,38,13,54,13,70,13,4,55,102,13,166, |
13,182,13,230,13,246,13,5,13,184,255,192,64,54,61,66,72,57,13,1,34,13,1,1, |
0,13,16,13,2,244,13,1,192,13,208,13,224,13,3,180,13,1,128,13,144,13,160,13, |
3,116,13,1,96,13,1,84,13,1,64,13,1,52,13,1,32,13,1,13,184,255,192,64,34,18, |
24,72,160,13,1,2,0,13,16,13,80,13,112,13,128,13,144,13,6,7,10,4,4,7,1,3,2, |
8,6,15,0,2,21,0,63,51,63,51,18,23,57,17,1,51,94,93,95,93,43,113,113,113,113, |
113,113,113,113,113,113,114,95,114,114,43,114,94,93,93,93,113,113,113,113, |
113,113,113,113,114,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
113,113,114,94,93,93,93,93,93,43,93,113,114,114,114,114,114,114,94,93,93, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,43,47,94, |
93,114,56,51,47,43,94,93,113,113,113,113,114,114,56,51,18,57,57,47,47,56, |
56,18,23,57,50,51,49,48,0,93,93,1,95,93,93,93,93,93,93,93,93,93,93,93,93, |
33,9,1,35,9,1,51,9,1,51,9,1,3,33,254,221,254,219,194,1,129,254,145,199,1, |
14,1,12,201,254,145,1,134,1,188,254,68,2,44,2,14,254,91,1,165,253,244,253, |
210,0,0,0,0,1,0,5,254,87,3,252,4,58,0,31,2,207,64,59,147,3,1,147,2,1,153, |
16,1,150,0,1,141,16,157,16,2,141,0,157,0,2,122,29,138,29,154,29,3,105,29, |
1,157,30,1,30,16,13,16,72,146,19,1,134,19,1,114,19,1,86,19,102,19,2,146,18, |
1,3,18,184,255,240,64,36,13,16,72,16,0,24,8,24,8,24,17,30,31,16,153,31,1, |
134,31,1,89,31,1,70,31,1,25,31,1,6,31,1,8,31,18,17,184,255,240,64,36,17,6, |
33,1,6,33,38,33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230, |
33,246,33,12,199,230,33,246,33,2,33,184,255,192,64,255,217,233,72,196,33, |
1,166,33,182,33,2,132,33,1,6,33,38,33,54,33,70,33,102,33,118,33,6,6,33,38, |
33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230,33,246,33,12, |
6,33,22,33,38,33,70,33,86,33,102,33,134,33,166,33,198,33,230,33,246,33,11, |
151,244,33,1,224,33,1,194,33,210,33,2,180,33,1,160,33,1,130,33,146,33,2,116, |
33,1,96,33,1,66,33,82,33,2,52,33,1,32,33,1,2,33,18,33,2,228,33,244,33,2,194, |
33,210,33,2,164,33,180,33,2,130,33,146,33,2,100,33,116,33,2,66,33,82,33,2, |
36,33,52,33,2,2,33,18,33,2,228,33,244,33,2,194,33,210,33,2,164,33,180,33, |
2,130,33,146,33,2,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2, |
33,1,103,228,33,244,33,2,214,33,1,194,33,1,164,33,180,33,2,150,33,1,130,33, |
1,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2,33,1,228,33,244, |
33,2,214,33,1,64,166,194,33,1,1,160,33,176,33,2,132,33,148,33,2,96,33,112, |
33,2,68,33,84,33,2,32,33,48,33,2,4,33,20,33,2,224,33,240,33,2,196,33,212, |
33,2,160,33,176,33,2,132,33,148,33,2,96,33,112,33,2,68,33,84,33,2,32,33,48, |
33,2,4,33,20,33,2,55,224,33,1,196,33,212,33,2,160,33,1,132,33,148,33,2,96, |
33,1,68,33,84,33,2,32,33,1,4,33,20,33,2,224,33,1,196,33,212,33,2,160,33,1, |
132,33,148,33,2,96,33,1,2,0,33,32,33,48,33,80,33,4,80,33,128,33,144,33,192, |
33,4,47,33,1,0,33,16,33,2,7,16,0,24,0,32,30,17,15,12,80,5,27,0,63,237,63, |
51,17,51,51,17,51,1,94,93,93,93,113,95,113,113,113,113,113,114,114,114,114, |
114,114,114,114,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,95,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,114,114,114,94,93,113,114,114,114,114,43,114,94,93,113,47,56,51,47, |
94,93,93,93,93,93,93,56,51,18,57,57,61,47,24,47,17,51,51,49,48,43,95,93,93, |
93,93,93,43,93,93,93,0,93,93,1,93,93,93,93,33,14,3,35,34,38,39,53,30,1,51, |
50,54,63,1,1,51,19,30,3,23,62,3,55,19,51,2,92,38,79,98,120,78,34,58,32,19, |
48,17,79,136,51,17,254,83,192,228,10,31,31,24,2,3,23,29,30,10,212,190,98, |
157,111,59,4,7,135,3,3,118,129,43,4,53,253,170,27,90,90,72,9,11,65,80,82, |
30,2,106,0,1,0,49,0,0,3,182,4,58,0,9,1,11,64,78,157,2,173,2,2,139,2,1,89, |
2,105,2,2,146,7,162,7,2,116,7,132,7,2,70,7,86,7,102,7,3,40,8,1,3,8,2,123, |
6,1,4,6,20,6,36,6,164,6,180,6,212,6,228,6,7,7,6,7,3,11,1,59,1,91,1,3,10,1, |
64,39,55,72,1,64,17,20,72,1,11,184,255,192,64,40,92,100,72,192,11,1,180,11, |
1,160,11,1,148,11,1,128,11,1,116,11,1,96,11,1,84,11,1,64,11,1,52,11,68,11, |
100,11,132,11,4,11,184,255,192,64,32,73,82,72,32,11,1,20,11,1,0,11,1,63,68, |
11,100,11,132,11,164,11,4,4,11,36,11,68,11,100,11,4,11,184,255,192,179,51, |
62,72,11,184,255,192,64,18,31,39,72,224,11,1,2,0,11,32,11,80,11,112,11,4, |
7,11,184,255,192,64,13,16,20,72,6,3,80,4,15,1,7,80,0,21,0,63,237,50,63,237, |
50,1,43,94,93,95,93,43,43,113,114,94,93,93,93,43,93,113,113,113,113,113,113, |
113,113,113,43,47,43,43,94,93,51,51,47,94,93,113,51,51,95,113,49,48,93,93, |
93,93,93,93,51,53,1,33,53,33,21,1,33,21,49,2,149,253,147,3,56,253,106,2,187, |
137,3,38,139,137,252,218,139,0,0,0,1,0,34,254,87,2,136,5,204,0,45,0,96,64, |
65,3,32,9,12,72,19,32,9,13,72,23,45,33,28,40,240,17,11,31,5,63,5,2,143,5, |
1,64,5,1,5,33,11,245,47,12,111,12,2,15,12,79,12,223,12,239,12,4,47,12,79, |
12,111,12,3,12,12,0,24,245,21,0,43,245,0,27,0,63,237,63,237,18,57,47,93,113, |
114,237,57,1,47,93,93,113,51,51,237,50,50,205,50,49,48,43,43,1,34,46,2,53, |
17,52,46,2,39,53,62,3,53,17,52,54,59,1,21,35,34,6,21,17,20,14,2,7,21,30,3, |
21,17,20,22,59,1,21,2,1,65,99,66,34,29,55,80,51,51,80,55,29,133,131,135,63, |
91,77,30,52,71,41,43,71,51,29,77,91,63,254,87,41,76,108,68,1,105,63,88,56, |
28,2,127,2,28,56,88,62,1,106,141,152,129,107,108,254,156,50,84,64,44,10,2, |
10,44,65,84,51,254,155,106,109,129,0,1,0,183,254,78,1,93,5,204,0,3,1,207, |
64,21,3,171,6,0,1,11,0,0,4,5,214,5,230,5,246,5,3,194,5,1,5,184,255,128,179, |
226,229,72,5,184,255,192,64,10,222,225,72,2,5,18,5,2,218,5,184,255,128,179, |
214,217,72,5,184,255,192,64,20,210,213,72,180,5,196,5,2,162,5,1,1,112,5,128, |
5,144,5,3,5,184,255,192,64,20,199,202,72,0,5,1,240,5,1,212,5,228,5,2,176, |
5,192,5,2,5,184,255,192,64,43,187,190,72,48,5,64,5,80,5,3,4,5,20,5,36,5,3, |
240,5,1,196,5,212,5,228,5,3,128,5,144,5,160,5,3,4,5,20,5,36,5,3,164,5,184, |
255,192,179,168,171,72,5,184,255,128,179,160,163,72,5,184,255,192,64,14,156, |
159,72,112,5,128,5,144,5,3,228,5,1,5,184,255,192,64,11,145,148,72,176,5,192, |
5,208,5,3,5,184,255,192,64,15,133,136,72,48,5,1,20,5,36,5,2,0,5,1,5,184,255, |
192,64,15,122,125,72,128,5,1,4,5,20,5,36,5,3,110,5,184,255,192,64,10,114, |
117,72,192,5,1,84,5,1,5,184,255,192,182,102,105,72,16,5,1,5,184,255,192,64, |
9,91,94,72,80,5,96,5,2,5,184,255,192,64,15,79,82,72,203,5,219,5,2,160,5,176, |
5,2,2,5,184,255,192,64,10,68,71,72,15,5,31,5,2,62,5,184,255,192,64,29,56, |
61,72,207,5,1,96,5,112,5,160,5,176,5,4,31,5,1,0,5,1,160,5,224,5,240,5,3,5, |
184,255,192,64,28,25,28,72,5,64,17,21,72,64,5,112,5,128,5,144,5,4,15,5,31, |
5,47,5,3,7,1,0,0,0,47,63,1,94,93,93,43,43,113,114,114,114,114,43,94,93,43, |
95,93,93,43,113,43,114,43,114,114,43,94,93,93,43,113,113,113,43,113,43,113, |
114,43,43,43,94,93,93,93,93,113,113,43,113,113,113,114,43,114,95,114,114, |
43,43,94,93,43,43,93,93,17,18,57,47,94,93,237,49,48,19,17,51,17,183,166,254, |
78,7,126,248,130,0,0,0,0,1,0,34,254,87,2,135,5,204,0,45,0,98,185,0,40,255, |
224,179,9,12,72,24,184,255,224,64,55,9,13,72,20,44,32,26,38,240,15,9,48,3, |
1,192,3,208,3,2,3,9,32,245,47,31,111,31,2,15,31,79,31,223,31,239,31,4,47, |
31,79,31,111,31,3,31,31,21,45,245,44,27,20,245,21,0,0,63,237,63,237,18,57, |
47,93,113,114,237,57,1,47,93,113,51,51,253,50,50,205,50,49,48,43,43,19,50, |
54,53,17,52,62,2,55,53,46,3,53,17,52,38,43,1,53,51,50,22,21,17,20,30,2,23, |
21,14,3,21,17,20,14,2,43,1,53,94,91,79,28,51,71,43,42,70,52,29,79,91,60,132, |
131,133,29,55,81,52,52,81,55,29,34,66,99,65,132,254,216,109,106,1,101,51, |
84,65,44,10,2,10,44,64,84,50,1,100,108,107,129,152,141,254,150,62,88,56,28, |
2,127,2,28,56,88,63,254,151,68,108,76,41,129,0,0,0,0,1,0,92,2,41,4,80,3,39, |
0,32,0,154,64,26,90,3,138,3,2,25,2,41,2,57,2,3,30,48,10,16,72,13,31,1,25, |
48,9,12,72,13,184,255,208,179,9,13,72,7,184,255,208,64,19,9,13,72,0,27,32, |
27,112,27,3,27,32,10,1,10,24,173,64,10,184,255,192,180,38,60,72,10,0,184, |
255,192,179,23,28,72,0,184,255,192,64,41,14,20,72,0,128,27,64,41,60,72,27, |
5,173,31,14,79,14,159,14,3,111,14,127,14,159,14,175,14,207,14,239,14,255, |
14,7,14,64,9,13,72,14,0,47,43,93,113,237,196,43,26,221,43,43,196,43,26,237, |
1,47,93,47,93,49,48,0,43,43,43,93,43,93,93,1,34,38,39,38,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,76,69,145,73,129,88,38,65,60, |
56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68,2,41, |
44,26,45,12,23,32,21,143,38,46,13,20,26,13,8,15,14,8,50,42,149,23,30,19,8, |
0,0,0,2,0,242,254,185,1,184,4,58,0,3,0,7,2,19,64,133,2,91,3,3,166,5,182,5, |
2,5,150,105,6,185,6,2,70,6,86,6,2,57,6,1,6,64,23,27,72,182,6,198,6,2,73,6, |
89,6,105,6,3,22,6,54,6,2,9,6,1,10,6,121,9,137,9,153,9,201,9,4,70,9,1,9,9, |
57,9,2,249,9,1,182,9,1,105,9,121,9,169,9,3,38,9,1,9,9,1,204,217,9,233,9,2, |
150,9,1,73,9,89,9,121,9,3,6,9,1,185,9,201,9,2,134,9,1,116,9,1,86,9,102,9, |
2,68,9,1,22,9,38,9,54,9,3,9,184,255,192,64,14,168,171,72,180,9,1,134,9,150, |
9,166,9,3,9,184,255,192,64,22,159,162,72,36,9,1,6,9,22,9,2,156,182,9,198, |
9,214,9,246,9,4,9,184,255,64,64,14,147,150,72,102,9,1,150,9,166,9,182,9,3, |
9,184,255,192,64,24,137,144,72,98,9,114,9,130,9,3,64,9,80,9,2,34,9,50,9,2, |
16,9,1,9,184,255,64,182,117,124,72,128,9,1,9,184,255,64,64,10,110,115,72, |
4,9,20,9,2,108,9,184,255,64,64,62,101,107,72,180,9,196,9,212,9,3,150,9,166, |
9,2,132,9,1,118,9,1,82,9,98,9,2,36,9,52,9,68,9,3,6,9,22,9,2,246,9,1,194,9, |
210,9,2,1,144,9,160,9,176,9,3,100,9,116,9,132,9,3,9,184,255,128,64,16,71, |
75,72,212,9,228,9,244,9,3,160,9,176,9,2,9,184,255,192,64,61,59,64,72,16,9, |
32,9,2,4,9,1,55,180,9,228,9,244,9,3,128,9,144,9,2,84,9,100,9,116,9,3,27,9, |
1,0,9,1,240,9,1,196,9,212,9,228,9,3,84,9,100,9,164,9,212,9,228,9,244,9,6, |
9,184,255,192,64,20,26,31,72,64,9,1,2,15,9,1,7,0,6,156,7,15,0,3,1,3,0,47, |
93,63,253,206,1,94,93,95,93,43,93,113,113,114,114,114,114,114,94,93,93,43, |
93,93,43,113,113,95,113,113,114,114,114,114,114,114,114,43,94,93,43,93,43, |
113,113,113,113,43,113,114,43,114,94,93,93,43,93,93,43,113,113,113,113,113, |
113,114,114,114,114,94,93,93,93,93,93,113,113,113,47,94,93,93,93,93,43,113, |
113,113,237,113,51,47,237,49,48,1,51,19,35,19,21,35,53,1,10,148,24,196,198, |
194,2,173,252,12,5,129,201,201,0,0,0,1,0,135,255,225,3,250,5,129,0,43,0,137, |
64,31,88,14,104,14,2,87,20,103,20,2,26,28,1,21,6,1,6,3,1,25,10,22,0,11,1, |
11,11,3,39,71,17,184,255,192,64,56,8,11,72,17,31,70,30,30,3,70,4,34,80,217, |
31,1,124,31,140,31,2,25,31,1,31,22,96,25,112,25,2,160,25,1,25,23,3,12,213, |
3,1,112,3,128,3,2,21,3,101,3,2,3,0,80,9,10,0,47,221,237,51,93,93,93,51,63, |
221,93,113,50,50,93,93,93,237,1,47,237,51,47,237,47,43,237,18,57,47,113,51, |
205,50,49,48,0,93,93,93,93,93,1,50,54,55,23,14,3,7,21,35,53,46,3,53,52,62, |
2,55,53,51,21,30,3,23,7,46,1,35,34,14,2,21,20,30,2,2,84,96,129,15,182,8,51, |
88,126,83,124,111,154,95,43,66,111,146,80,124,78,120,86,54,12,185,14,114, |
105,77,103,64,27,27,64,105,1,21,104,108,12,62,116,92,62,8,168,168,10,93,149, |
195,113,150,206,131,63,7,155,155,8,55,85,109,63,14,90,106,51,103,156,105, |
93,156,113,62,0,0,1,0,58,0,0,4,80,5,150,0,50,0,210,64,83,70,23,1,54,2,70, |
2,2,21,18,37,18,53,18,3,36,0,39,13,6,26,111,25,25,39,0,44,110,6,35,39,110, |
14,95,10,1,10,10,0,79,6,95,6,111,6,3,6,50,111,0,0,32,0,2,0,0,32,0,48,0,80, |
0,112,0,144,0,176,0,208,0,8,0,0,16,0,48,0,192,0,224,0,5,0,184,255,192,64, |
64,14,18,72,0,38,11,81,35,15,14,31,14,175,14,3,15,14,63,14,111,14,127,14, |
159,14,175,14,207,14,223,14,8,8,14,64,37,42,72,14,64,27,32,72,14,14,44,31, |
115,26,20,7,7,44,116,22,50,118,50,134,50,3,50,6,24,0,63,51,93,237,50,63,51, |
237,18,57,47,43,43,94,93,113,51,237,50,1,47,43,93,113,114,237,47,93,18,57, |
47,113,51,237,50,16,237,17,18,57,47,237,17,51,17,18,57,49,48,0,93,1,93,0, |
93,1,14,3,35,33,53,62,1,61,1,35,53,51,17,52,62,2,51,50,30,2,23,7,46,3,35, |
34,6,21,17,33,21,33,21,20,14,2,7,33,50,62,2,55,4,80,9,57,89,115,67,253,70, |
89,86,186,186,48,99,152,103,70,123,99,71,18,174,10,39,53,65,36,114,112,1, |
152,254,104,22,44,63,40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160, |
121,144,129,1,24,92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,254,224, |
129,126,56,106,92,71,21,19,42,67,48,0,0,0,2,0,113,0,225,4,2,4,115,0,35,0, |
55,0,153,64,119,74,29,90,29,106,29,3,44,29,60,29,2,74,25,90,25,106,25,3,44, |
25,60,25,2,69,11,85,11,101,11,3,35,11,51,11,2,69,7,85,7,101,7,3,35,7,51,7, |
2,74,34,90,34,106,34,3,45,34,61,34,2,69,20,85,20,101,20,3,35,20,51,20,2,69, |
16,85,16,101,16,3,35,16,51,16,2,74,2,90,2,106,2,3,45,2,61,2,2,46,176,18,36, |
176,207,0,223,0,2,0,0,1,0,47,57,1,41,176,27,51,176,9,0,47,237,220,237,1,93, |
47,93,93,237,220,237,49,48,93,93,93,93,93,93,93,93,0,93,93,93,93,93,93,93, |
93,19,52,54,55,39,55,23,62,1,51,50,22,23,55,23,7,30,1,21,20,6,7,23,7,39,14, |
1,35,34,38,39,7,39,55,46,1,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,137, |
41,37,100,104,99,54,127,73,71,126,54,97,104,96,37,43,44,38,100,102,101,54, |
126,71,72,128,52,105,102,102,37,41,154,44,77,102,58,57,102,77,44,44,77,102, |
57,58,102,77,44,2,172,71,127,54,100,103,101,39,43,42,38,97,105,96,54,127, |
71,71,128,53,100,105,101,37,41,42,38,105,105,102,54,127,73,58,102,76,44,44, |
76,102,58,58,102,76,45,45,76,102,0,1,255,254,0,0,4,118,5,129,0,22,0,185,64, |
134,151,0,167,0,2,152,17,168,17,2,73,22,1,70,18,1,155,21,171,21,2,74,21,106, |
21,122,21,138,21,4,148,19,164,19,2,69,19,101,19,117,19,133,19,4,19,15,18, |
31,18,79,18,143,18,4,18,9,21,0,22,16,22,64,22,128,22,4,22,20,4,0,8,92,17, |
13,0,9,16,9,64,9,128,9,4,7,9,3,15,81,16,7,11,81,4,47,12,159,12,175,12,3,12, |
64,41,45,72,0,12,16,12,32,12,160,12,4,12,20,0,0,16,1,15,16,175,16,2,8,16, |
16,8,21,18,3,8,18,0,63,63,51,18,57,47,94,93,113,51,51,222,93,43,113,50,237, |
50,16,237,50,1,47,94,93,51,51,253,50,50,57,204,93,50,16,204,93,50,49,48,93, |
93,93,93,93,93,93,93,1,33,21,33,21,33,21,33,17,35,17,33,53,33,55,33,53,33, |
1,51,9,1,51,2,208,1,65,254,129,1,127,254,129,178,254,131,1,125,2,254,129, |
1,64,254,91,199,1,115,1,119,199,2,197,125,154,127,254,209,1,47,127,154,125, |
2,188,253,121,2,135,0,2,0,183,254,78,1,93,5,204,0,3,0,7,1,221,64,23,3,7,171, |
0,6,4,1,11,4,4,8,9,214,9,230,9,246,9,3,194,9,1,9,184,255,128,179,226,229, |
72,9,184,255,192,64,10,222,225,72,2,9,18,9,2,218,9,184,255,128,179,214,217, |
72,9,184,255,192,64,20,210,213,72,180,9,196,9,2,162,9,1,1,112,9,128,9,144, |
9,3,9,184,255,192,64,20,199,202,72,0,9,1,240,9,1,212,9,228,9,2,176,9,192, |
9,2,9,184,255,192,64,43,187,190,72,48,9,64,9,80,9,3,4,9,20,9,36,9,3,240,9, |
1,196,9,212,9,228,9,3,128,9,144,9,160,9,3,4,9,20,9,36,9,3,164,9,184,255,192, |
179,168,171,72,9,184,255,128,179,160,163,72,9,184,255,192,64,14,156,159,72, |
112,9,128,9,144,9,3,228,9,1,9,184,255,192,64,11,145,148,72,176,9,192,9,208, |
9,3,9,184,255,192,64,15,133,136,72,48,9,1,20,9,36,9,2,0,9,1,9,184,255,192, |
64,15,122,125,72,128,9,1,4,9,20,9,36,9,3,110,9,184,255,192,64,10,114,117, |
72,192,9,1,84,9,1,9,184,255,192,182,102,105,72,16,9,1,9,184,255,192,64,9, |
91,94,72,80,9,96,9,2,9,184,255,192,64,15,79,82,72,203,9,219,9,2,160,9,176, |
9,2,2,9,184,255,192,64,10,68,71,72,15,9,31,9,2,62,9,184,255,192,64,29,56, |
61,72,207,9,1,96,9,112,9,160,9,176,9,4,31,9,1,0,9,1,160,9,224,9,240,9,3,9, |
184,255,192,64,33,25,28,72,9,64,17,21,72,64,9,112,9,128,9,144,9,4,15,9,31, |
9,47,9,3,7,5,0,5,0,1,4,1,0,0,63,47,18,57,57,47,47,1,94,93,93,43,43,113,114, |
114,114,114,43,94,93,43,95,93,93,43,113,43,114,43,114,114,43,94,93,93,43, |
113,113,113,43,113,43,113,114,43,43,43,94,93,93,93,93,113,113,43,113,113, |
113,114,43,114,95,114,114,43,43,94,93,43,43,93,93,17,18,57,47,94,93,51,237, |
50,49,48,19,17,51,17,3,17,51,17,183,166,166,166,2,194,3,10,252,246,251,140, |
3,11,252,245,0,0,0,0,2,0,115,255,84,4,0,5,204,0,77,0,97,1,79,64,144,117,47, |
133,47,2,122,8,138,8,2,100,85,1,43,85,107,85,2,45,81,109,81,2,45,57,109,57, |
125,57,141,57,4,85,96,117,96,133,96,3,83,62,115,62,131,62,3,83,90,115,90, |
131,90,3,121,80,137,80,2,111,80,1,90,80,1,45,80,1,116,16,132,16,2,54,16,70, |
16,2,42,73,1,37,42,1,37,45,1,43,3,1,25,3,1,5,31,21,31,2,5,36,21,36,2,11,76, |
27,76,2,14,73,75,34,73,55,144,75,1,75,55,75,55,78,70,29,65,24,6,73,5,5,24, |
73,160,78,1,0,78,32,78,64,78,144,78,4,78,184,255,192,179,29,33,72,78,184, |
255,192,64,18,21,26,72,78,45,73,44,44,88,73,0,65,32,65,176,65,3,65,184,255, |
192,64,68,34,38,72,65,217,55,1,203,55,1,188,55,1,152,55,1,245,3,1,230,3,1, |
149,3,1,121,83,1,106,83,1,218,83,1,155,83,1,228,14,244,14,2,166,14,1,119, |
14,135,14,2,104,14,1,14,83,93,55,4,0,50,81,45,39,11,81,6,0,0,0,63,50,237, |
47,51,237,18,23,57,93,93,93,93,93,93,113,113,93,93,93,93,93,93,93,1,47,43, |
93,237,51,47,237,47,43,43,93,113,237,50,16,237,17,18,57,57,17,57,57,47,47, |
114,16,237,16,237,49,48,93,93,93,93,93,0,93,93,1,93,0,93,93,93,93,93,93,93, |
93,93,93,93,93,1,93,93,93,1,50,30,2,23,7,46,3,35,34,6,21,20,30,2,23,30,3, |
21,20,14,2,7,30,3,21,20,14,2,35,34,46,2,39,55,30,3,51,50,62,2,53,52,46,2, |
39,46,3,53,52,62,2,55,46,3,53,52,54,1,52,46,2,39,14,3,21,20,30,2,23,62,3, |
2,76,79,138,108,73,15,161,8,46,68,84,46,125,129,50,83,109,59,68,139,112,70, |
28,55,82,54,49,79,55,30,58,112,164,107,93,154,117,79,19,161,12,54,78,100, |
57,58,102,76,45,57,95,123,65,65,131,104,65,32,59,84,53,42,75,57,33,211,1, |
225,53,88,113,61,58,89,60,31,49,82,108,60,54,93,68,39,5,204,30,63,98,69,20, |
45,58,34,13,79,71,45,64,46,32,14,16,46,73,106,76,45,87,73,55,13,21,51,64, |
81,51,73,117,83,44,27,64,104,77,31,55,67,37,13,18,40,65,47,54,72,51,36,16, |
15,46,73,105,74,45,83,71,53,15,14,46,64,80,48,139,155,252,203,48,69,51,35, |
14,3,33,52,69,39,46,66,48,34,15,1,24,47,70,0,0,0,0,2,0,45,4,195,2,90,5,123, |
0,3,0,7,0,193,178,3,133,0,184,255,192,179,19,22,72,0,184,255,192,64,131,13, |
16,72,0,7,133,4,64,19,22,72,4,64,14,17,72,4,1,5,145,0,59,4,1,45,4,1,11,4, |
27,4,2,57,253,4,1,235,4,1,219,4,1,201,4,1,171,4,187,4,2,153,4,1,141,4,1,1, |
4,128,44,48,72,27,4,43,4,2,15,4,1,235,4,251,4,2,191,4,207,4,223,4,3,171,4, |
1,159,4,1,123,4,139,4,2,111,4,1,91,4,1,79,4,1,59,4,1,31,4,47,4,2,2,15,4,63, |
4,175,4,191,4,4,4,64,22,25,72,4,64,14,17,72,4,0,47,43,43,93,95,113,113,113, |
113,113,113,113,113,113,113,114,114,43,95,114,114,114,114,114,114,114,94, |
93,93,93,51,237,50,1,47,43,43,237,220,43,43,237,49,48,1,53,51,21,33,53,51, |
21,1,183,163,253,211,165,4,195,184,184,184,184,0,0,0,0,3,0,31,255,240,5,197, |
5,150,0,25,0,49,0,91,0,245,64,111,138,81,1,10,73,26,73,42,73,3,10,69,26,69, |
42,69,3,76,60,1,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,138, |
90,154,90,2,53,81,69,81,2,58,61,1,133,52,149,52,2,54,46,70,46,2,54,41,70, |
41,2,57,35,73,35,2,57,30,73,30,2,50,196,81,61,95,71,111,71,2,71,61,71,61, |
14,0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,68, |
15,23,72,26,38,195,111,14,127,14,2,14,60,55,201,66,87,201,76,82,76,15,66, |
127,66,2,15,66,31,66,127,66,143,66,159,66,255,66,6,0,76,1,0,76,16,76,112, |
76,128,76,144,76,240,76,6,66,76,66,76,7,33,200,21,4,43,200,7,19,0,63,237, |
63,237,18,57,57,47,47,93,113,93,113,17,51,16,237,16,237,51,1,47,113,237,47, |
43,93,113,237,17,57,57,47,47,93,17,51,237,49,48,0,93,93,93,93,93,93,93,93, |
1,93,93,93,93,113,93,93,113,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18, |
7,52,46,4,35,34,14,2,21,20,30,2,51,50,62,4,37,20,30,2,51,50,62,2,55,23,14, |
3,35,34,46,2,53,52,62,2,51,50,30,2,23,7,46,3,35,34,14,2,5,197,52,94,131,161, |
185,100,99,185,160,133,94,52,52,94,132,161,184,100,150,1,7,197,113,92,45, |
82,116,140,161,87,130,228,171,99,99,171,228,130,87,161,140,116,82,45,252, |
137,33,67,100,67,49,75,56,39,14,115,22,58,82,111,75,101,149,98,48,48,97,146, |
98,75,112,80,55,18,114,12,38,55,72,47,69,99,64,30,2,195,100,185,161,131,94, |
52,52,94,131,161,185,100,100,184,161,132,94,52,114,196,254,249,150,86,161, |
139,115,82,45,99,171,228,130,131,229,171,98,45,81,115,140,161,89,72,120,86, |
48,27,45,55,29,35,43,81,63,38,64,114,158,94,97,157,111,59,36,59,75,39,33, |
26,50,38,23,46,83,118,0,2,0,26,2,139,2,253,5,152,0,50,0,65,0,203,64,21,45, |
40,10,17,72,46,40,10,17,72,3,40,11,17,72,7,24,11,14,72,29,184,255,216,64, |
16,9,17,72,23,51,1,39,39,32,226,47,11,212,56,1,56,184,255,192,64,18,19,22, |
72,144,56,1,100,56,116,56,132,56,3,80,56,1,2,56,184,255,192,64,20,10,13,72, |
56,20,227,21,21,63,227,5,64,22,38,72,5,192,67,1,67,184,255,192,64,51,13,18, |
72,26,57,1,11,57,1,57,228,152,20,1,20,8,10,13,72,20,16,11,1,2,11,1,11,11, |
26,35,7,51,1,51,228,0,42,42,0,0,32,0,80,0,3,0,0,17,228,26,222,0,63,237,51, |
47,93,51,47,16,237,93,50,17,57,47,93,93,51,43,93,237,93,93,1,43,93,47,43, |
237,51,47,237,47,43,95,93,93,93,43,113,51,51,237,50,47,0,93,49,48,1,43,43, |
43,43,43,1,34,46,2,53,52,62,2,63,1,53,52,46,2,35,34,6,7,39,62,3,51,50,30, |
2,21,17,20,22,51,50,54,55,21,14,1,35,34,46,2,39,35,14,1,39,50,62,2,61,1,7, |
14,3,21,20,22,1,4,53,86,62,33,51,86,113,62,178,21,39,56,35,67,81,9,149,7, |
43,75,108,71,68,109,77,42,28,35,12,22,9,19,42,22,41,57,38,20,2,4,38,132,51, |
48,80,57,32,138,41,74,55,32,58,2,139,29,56,82,52,69,92,56,24,1,4,60,46,60, |
35,14,59,76,10,47,82,62,35,29,60,95,66,254,204,58,50,5,3,104,5,8,22,39,51, |
29,77,70,111,34,55,71,37,65,4,2,11,29,52,43,56,65,0,0,2,0,83,0,141,4,32,3, |
172,0,8,0,17,0,113,64,84,106,12,122,12,138,12,3,106,9,122,9,138,9,3,106,3, |
122,3,138,3,3,106,0,122,0,138,0,3,17,236,15,235,14,236,95,10,127,10,143,10, |
3,64,10,96,10,2,31,10,1,10,7,236,6,235,5,236,176,1,1,95,1,1,32,1,96,1,128, |
1,3,1,9,0,239,12,15,3,47,3,111,3,127,3,4,3,0,47,93,51,228,50,1,47,93,113, |
113,237,237,237,47,93,93,113,237,237,237,49,48,93,93,93,93,37,1,53,1,51,21, |
9,1,21,33,1,53,1,51,21,9,1,21,3,118,254,174,1,82,168,254,174,1,84,253,131, |
254,176,1,80,167,254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,1, |
109,63,1,115,31,254,140,254,145,29,0,1,0,100,0,180,4,71,2,242,0,5,0,51,64, |
19,223,2,1,32,2,1,2,5,170,224,0,1,159,0,1,80,0,1,0,184,255,192,64,9,9,12, |
72,0,2,173,0,3,179,0,63,204,237,1,47,43,93,93,93,237,47,93,93,49,48,37,17, |
33,53,33,17,3,182,252,174,3,227,180,1,172,146,253,194,0,0,4,0,31,255,240, |
5,197,5,150,0,25,0,49,0,63,0,72,0,240,183,4,61,20,61,36,61,3,58,184,255,224, |
64,94,11,16,72,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,61, |
32,9,13,72,54,46,70,46,2,54,41,70,41,2,57,35,73,35,2,57,30,73,30,2,6,69,22, |
69,2,51,62,62,69,63,69,53,196,54,64,196,59,59,50,63,63,16,54,63,54,63,14, |
0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,60,15, |
23,72,26,38,195,111,14,127,14,2,14,50,50,54,62,52,201,69,9,68,25,68,2,68, |
201,55,15,54,31,54,127,54,3,223,55,1,0,55,16,55,112,55,3,54,69,55,55,69,54, |
3,7,33,200,21,4,43,200,7,19,0,63,237,63,237,18,23,57,47,47,47,93,113,93,16, |
237,93,16,237,50,17,51,47,1,47,113,237,47,43,93,113,237,17,57,57,47,47,56, |
17,51,51,47,237,16,237,50,17,18,57,17,51,0,93,49,48,93,93,93,93,43,1,93,93, |
93,93,43,93,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18,7,52,46,4,35,34, |
14,2,21,20,30,2,51,50,62,4,1,3,35,17,35,17,33,50,22,21,20,6,7,19,3,52,38, |
43,1,17,51,50,54,5,197,52,94,131,161,185,100,99,185,160,133,94,52,52,94,132, |
161,184,100,150,1,7,197,113,92,45,82,116,140,161,87,130,228,171,99,99,171, |
228,130,87,161,140,116,82,45,254,82,199,161,127,1,51,142,151,104,85,221,159, |
95,81,170,182,80,84,2,195,100,185,161,131,94,52,52,94,131,161,185,100,100, |
184,161,132,94,52,114,196,254,249,150,86,161,139,115,82,45,99,171,228,130, |
131,229,171,98,45,81,115,140,161,254,181,1,80,254,176,3,63,126,111,102,123, |
19,254,162,2,80,69,72,254,211,85,0,0,1,255,239,5,172,4,124,6,10,0,3,0,14, |
180,1,0,2,140,1,0,47,237,1,47,47,49,48,1,33,53,33,4,124,251,115,4,141,5,172, |
94,0,0,0,0,2,0,122,3,92,2,184,5,150,0,19,0,39,0,66,185,0,17,255,232,179,9, |
12,72,13,184,255,232,64,33,9,12,72,7,24,9,12,72,3,24,9,12,72,20,172,0,30, |
172,0,10,16,10,32,10,3,10,35,175,5,25,175,15,4,0,63,237,220,237,1,47,93,237, |
220,237,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7, |
52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,184,45,78,105,59,59,104,78,46, |
46,78,104,59,59,105,78,45,109,27,48,65,38,37,65,48,28,28,48,65,37,38,65,48, |
27,4,121,59,104,77,45,45,77,104,59,60,104,77,44,44,77,104,60,37,66,49,28, |
28,49,66,37,37,65,49,29,29,49,65,0,0,0,2,0,65,0,0,4,36,4,195,0,11,0,15,0, |
85,64,53,13,222,4,1,140,4,1,4,2,14,209,11,1,131,11,1,11,9,1,170,6,32,2,1, |
2,13,173,12,151,2,1,2,0,4,173,9,152,7,1,7,239,5,1,80,5,128,5,160,5,208,5, |
4,5,0,47,93,93,51,93,51,237,50,50,93,47,237,1,47,93,51,253,50,222,93,93,196, |
16,222,93,93,196,49,48,1,17,35,17,33,53,33,17,51,17,33,21,1,53,33,21,2,124, |
147,254,88,1,168,147,1,168,252,29,3,227,2,168,254,117,1,139,145,1,138,254, |
118,145,253,88,145,145,0,0,1,0,41,2,51,2,131,5,141,0,34,0,142,64,56,6,18, |
1,6,17,1,6,12,1,106,31,122,31,138,31,3,89,15,105,15,2,106,14,1,73,14,89,14, |
2,10,3,26,3,2,10,2,26,2,58,2,74,2,4,58,17,90,17,106,17,3,6,23,22,23,2,23, |
184,255,224,64,40,9,15,72,33,25,225,32,8,1,32,8,96,8,160,8,224,8,4,8,14,224, |
15,15,32,191,0,1,0,8,32,14,11,228,20,222,1,32,229,0,223,0,63,237,50,63,237, |
51,18,57,1,47,93,51,51,47,237,47,93,113,237,50,49,48,43,0,93,93,1,93,93,0, |
93,93,93,93,1,113,113,113,19,39,62,5,53,52,38,35,34,6,7,39,62,3,51,50,30, |
2,21,20,14,4,7,33,21,43,2,27,88,100,103,82,52,71,74,68,88,8,133,6,46,76,107, |
68,65,103,71,37,54,83,102,95,78,18,1,187,2,51,103,61,96,81,72,73,80,49,62, |
75,73,68,8,51,87,64,37,33,60,86,54,62,100,86,75,73,74,42,113,0,0,1,0,27,2, |
39,2,130,5,141,0,53,0,150,64,17,102,6,1,102,8,1,86,9,102,9,2,89,34,105,34, |
2,42,184,255,232,64,80,11,15,72,2,32,9,13,72,48,45,21,21,15,8,28,225,45,45, |
0,225,32,15,96,15,2,32,15,96,15,160,15,224,15,4,15,34,225,8,35,1,35,35,9, |
225,191,8,1,8,64,24,37,72,8,49,21,228,22,22,12,105,34,1,72,34,88,34,2,34, |
31,228,40,222,12,228,71,9,1,9,3,221,0,63,51,93,237,63,237,51,93,93,18,57, |
47,237,57,1,47,43,93,237,51,47,113,237,47,93,113,237,50,47,237,17,18,57,47, |
18,57,49,48,0,43,43,93,93,93,93,1,20,6,35,34,46,2,39,55,30,1,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,6, |
7,21,30,3,2,130,155,142,87,116,73,36,6,136,9,88,85,77,83,37,56,67,29,61,57, |
29,61,50,32,74,71,68,84,6,135,7,50,79,102,59,69,104,70,35,86,90,52,75,48, |
22,3,27,116,128,39,64,81,43,13,67,69,72,76,45,54,29,9,109,13,31,53,40,60, |
69,70,65,12,58,86,57,28,33,59,79,46,75,110,20,2,5,37,54,69,0,0,1,0,72,4,177, |
1,240,5,228,0,5,0,55,64,37,70,4,1,122,2,138,2,2,128,3,1,3,64,143,0,1,0,64, |
9,13,72,0,2,149,128,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,26,237,1,47,43, |
93,26,205,93,49,48,93,93,19,53,19,51,21,1,72,217,207,254,182,4,177,20,1,31, |
29,254,234,0,1,0,140,254,87,4,109,4,58,0,39,0,136,64,74,29,32,9,17,72,138, |
37,154,37,2,108,37,124,37,2,37,24,14,17,72,22,22,13,70,64,31,79,12,1,127, |
12,143,12,159,12,3,12,64,32,35,72,12,64,20,23,72,0,12,1,12,41,128,39,2,70, |
0,1,16,1,48,1,224,1,240,1,5,8,1,96,41,128,41,2,41,184,255,192,64,17,20,23, |
72,31,8,80,35,22,19,80,26,22,12,1,15,0,27,0,63,63,51,63,237,63,237,50,1,43, |
93,47,94,93,237,50,26,16,220,93,43,43,93,113,50,26,237,50,47,49,48,43,0,93, |
93,1,43,19,17,51,17,20,30,2,51,50,54,53,17,51,17,20,30,2,51,50,54,55,21,14, |
1,35,34,46,2,39,35,14,1,35,34,38,39,17,140,181,32,58,84,52,128,146,180,11, |
20,29,18,11,32,11,26,51,36,54,71,44,20,2,3,52,147,100,67,109,31,254,87,5, |
227,253,82,78,106,65,28,174,162,2,115,252,208,44,56,32,13,5,3,129,8,12,30, |
52,71,41,95,99,41,38,254,28,0,0,0,0,1,0,80,254,248,3,245,5,129,0,19,0,61, |
64,39,12,1,15,2,191,2,207,2,3,2,5,95,6,111,6,127,6,175,6,191,6,5,0,6,16,6, |
48,6,3,6,7,7,1,0,4,17,3,6,1,0,47,51,63,205,50,18,57,47,1,47,93,93,205,220, |
93,205,47,49,48,1,17,35,17,35,17,35,17,34,46,2,53,52,62,2,51,33,21,3,116, |
112,217,113,80,133,96,53,50,95,138,87,2,51,5,27,249,221,6,35,249,221,3,190, |
45,88,133,89,84,133,93,50,102,0,0,1,0,187,1,190,1,126,2,154,0,3,0,38,64,24, |
3,150,0,0,16,0,176,0,3,7,0,0,155,15,1,31,1,2,1,64,15,38,72,1,0,47,43,93,237, |
1,47,94,93,237,49,48,19,53,51,21,187,195,1,190,220,220,0,0,0,1,0,119,254, |
78,1,227,0,0,0,27,0,126,64,16,24,32,20,23,72,25,32,20,23,72,70,26,86,26,2, |
2,184,255,232,179,9,17,72,27,184,255,224,64,62,9,17,72,24,16,25,32,25,48, |
25,3,25,131,23,22,22,8,16,131,47,0,1,31,0,1,15,0,111,0,2,8,0,239,8,1,8,19, |
25,64,9,13,72,25,25,5,23,11,140,32,5,80,5,96,5,112,5,176,5,192,5,6,5,0,47, |
93,237,47,18,57,47,43,205,1,47,93,221,94,93,113,114,237,18,57,47,51,237,93, |
50,49,48,43,43,93,43,43,5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35, |
42,1,7,55,51,7,30,1,1,227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14, |
29,14,65,107,39,94,94,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,182,100, |
3,81,0,0,1,0,80,2,51,2,125,5,129,0,10,0,75,64,44,32,5,48,5,2,96,9,1,9,9,8, |
224,2,32,4,48,4,2,4,111,0,1,0,0,4,6,3,32,2,144,2,2,2,5,4,4,3,6,220,8,1,228, |
0,223,0,63,237,50,63,51,51,47,51,1,47,93,23,51,47,93,47,0,93,1,16,237,50, |
47,93,49,48,0,93,19,53,51,17,7,53,55,51,17,51,21,80,211,202,210,123,215,2, |
51,107,2,108,138,120,137,253,29,107,0,0,0,0,2,0,27,2,139,2,211,5,152,0,15, |
0,35,0,130,185,0,13,255,232,179,7,12,72,9,184,255,224,64,43,7,12,72,4,32, |
7,12,72,2,32,7,12,72,0,227,4,16,36,16,52,16,100,16,4,148,16,180,16,196,16, |
212,16,244,16,5,128,16,1,2,0,16,1,16,184,255,192,64,38,12,16,72,16,26,227, |
6,64,22,33,72,6,239,37,1,112,37,128,37,2,47,37,1,31,228,0,3,32,3,80,3,3,3, |
3,21,228,11,222,0,63,237,51,47,93,237,1,93,93,93,47,43,237,47,43,93,95,93, |
93,113,237,49,48,0,43,43,43,43,1,20,6,35,34,38,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,211,176,175,168,177,43,87,131,88, |
93,131,84,39,149,25,50,72,48,48,75,51,26,28,51,70,43,49,75,52,27,4,18,188, |
203,201,190,91,145,101,53,53,100,145,92,83,110,65,27,27,66,110,82,84,110, |
66,26,26,66,110,0,2,0,83,0,141,4,32,3,172,0,8,0,17,0,133,64,100,101,15,117, |
15,133,15,3,101,9,117,9,133,9,3,101,6,117,6,133,6,3,101,0,117,0,133,0,3,13, |
236,10,236,17,235,15,12,1,239,12,1,112,12,128,12,2,208,12,1,63,12,111,12, |
127,12,3,0,12,1,12,4,236,1,236,8,235,112,3,128,3,176,3,3,176,3,208,3,2,63, |
3,1,0,3,32,3,2,3,10,0,239,14,15,5,47,5,111,5,127,5,4,5,0,47,93,51,228,50, |
1,47,93,93,93,113,253,237,237,47,93,93,93,113,113,114,253,237,237,49,48,93, |
93,93,93,37,35,53,9,1,53,51,1,21,1,35,53,9,1,53,51,1,21,2,206,168,1,82,254, |
176,166,1,82,252,221,170,1,82,254,176,168,1,79,141,29,1,111,1,116,31,254, |
141,63,254,147,29,1,111,1,116,31,254,141,63,255,255,0,56,0,0,6,78,5,129,16, |
38,0,121,232,0,16,39,2,20,2,249,0,0,17,7,2,141,3,184,253,207,0,31,64,18,1, |
191,12,1,112,12,1,96,12,1,16,12,1,12,3,2,17,24,0,63,53,53,1,17,93,93,93,93, |
53,0,0,0,255,255,0,56,0,0,6,117,5,129,16,38,0,121,232,0,16,39,2,20,2,249, |
0,0,17,7,0,114,3,242,253,207,0,47,64,30,2,111,15,1,47,15,1,15,1,191,12,1, |
112,12,1,96,12,1,16,12,1,12,51,64,11,11,72,2,15,24,0,63,53,1,43,17,93,93, |
93,93,53,17,93,93,53,0,0,0,255,255,0,73,0,0,6,78,5,141,16,39,2,20,3,13,0, |
0,16,39,2,141,3,184,253,207,17,6,0,115,46,0,0,33,64,20,0,112,0,1,96,0,1,16, |
0,1,0,83,64,11,11,72,1,2,6,24,0,63,53,53,1,43,17,93,93,93,53,0,0,2,0,131, |
254,164,4,86,4,58,0,37,0,41,0,159,64,112,121,4,137,4,2,122,35,138,35,2,122, |
36,138,36,2,84,26,100,26,2,58,6,74,6,122,6,138,6,4,10,72,9,9,176,39,192,39, |
2,39,150,40,40,0,28,70,95,27,127,27,2,27,64,29,60,72,27,64,23,27,72,32,27, |
1,27,19,70,0,64,29,60,72,0,64,23,27,72,0,64,13,17,72,32,0,1,0,32,43,1,19, |
33,9,40,156,41,15,67,27,1,27,24,95,47,33,63,33,2,111,33,207,33,2,33,0,47, |
93,113,237,51,93,63,253,206,17,57,1,93,47,93,43,43,43,237,47,93,43,43,93, |
237,18,57,47,237,113,51,47,237,49,48,93,0,93,1,93,0,93,1,93,55,52,62,6,55, |
51,14,7,21,20,30,2,51,50,54,55,23,14,3,35,34,46,2,1,21,35,53,131,37,62,79, |
82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184,11,67, |
121,179,122,114,178,123,64,2,113,195,50,71,108,85,67,60,58,68,83,55,69,104, |
80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103,147,4,100, |
201,201,0,0,0,255,255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,148,1,78,0, |
0,0,21,180,2,21,5,38,2,184,255,225,180,22,25,4,7,37,1,43,53,0,43,53,0,255, |
255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,149,1,219,0,0,0,19,64,11,2,21, |
5,38,2,76,21,24,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,6,254,18, |
38,0,36,0,0,17,7,2,150,1,96,0,0,0,19,64,11,2,22,5,38,2,0,27,21,4,7,37,1,43, |
53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,7,6,18,38,0,36,0,0,17,7,2,153,1,94, |
0,0,0,19,64,11,2,21,5,38,2,2,30,44,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0, |
4,0,0,5,82,6,178,18,38,0,36,0,0,17,7,2,152,1,108,0,0,0,23,64,13,3,2,21,5, |
38,3,2,4,25,23,4,7,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,4,0,0,5,82,6, |
251,18,38,0,36,0,0,17,7,1,76,1,137,0,136,0,22,64,12,3,2,56,3,3,2,3,31,21, |
4,7,37,1,43,53,53,0,63,53,53,0,2,0,24,0,0,7,168,5,129,0,15,0,26,0,136,64, |
86,116,25,1,114,2,1,86,2,102,2,2,115,3,131,3,2,85,3,101,3,2,127,5,143,5,2, |
109,5,1,92,5,1,25,5,41,5,2,0,7,1,11,7,11,7,0,16,14,32,14,2,14,2,25,3,17,3, |
4,17,9,13,90,26,5,0,2,95,25,25,5,4,12,95,9,9,13,16,8,95,5,3,4,18,13,95,0, |
18,0,63,237,63,63,237,50,18,57,47,237,17,18,57,47,237,1,47,51,51,237,50,51, |
47,51,17,18,57,57,47,93,18,57,57,47,47,113,49,48,93,93,93,93,93,93,93,93, |
93,33,17,33,3,35,1,33,21,33,17,33,21,33,17,33,21,1,35,14,5,7,3,33,3,201,253, |
220,198,199,2,174,4,185,253,9,2,187,253,69,3,32,252,33,151,1,16,22,27,24, |
18,2,217,1,222,1,156,254,100,5,129,156,254,60,154,254,21,156,4,238,3,35,50, |
58,51,38,5,254,51,0,0,255,255,0,104,254,78,5,121,5,150,18,38,0,38,0,0,17, |
7,0,120,1,254,0,0,0,11,182,1,58,48,40,26,16,37,1,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,240,18,38,0,40,0,0,17,7,2,148,1,63,0,0,0,21,180,1,12,5,38,1,184, |
255,170,180,13,16,0,10,37,1,43,53,0,43,53,0,255,255,0,168,0,0,4,254,6,240, |
18,38,0,40,0,0,17,7,2,149,1,223,0,0,0,19,64,11,1,12,5,38,1,40,12,15,0,10, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40,0,0,17, |
7,2,150,1,119,0,0,0,21,180,1,13,5,38,1,184,255,239,180,18,12,0,10,37,1,43, |
53,0,43,53,0,255,255,0,168,0,0,4,254,6,178,18,38,0,40,0,0,17,7,2,152,1,121, |
0,0,0,25,182,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10,37,1,43,53,53,0,43, |
53,53,0,255,255,0,9,0,0,1,177,6,240,18,38,0,44,0,0,17,6,2,148,159,0,0,21, |
180,1,4,5,38,1,184,255,193,180,5,8,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0, |
142,0,0,2,54,6,240,18,38,0,44,0,0,17,6,2,149,70,0,0,19,64,11,1,4,5,38,1,69, |
4,7,0,2,37,1,43,53,0,43,53,0,255,255,255,210,0,0,2,104,6,254,18,38,0,44,0, |
0,17,6,2,150,210,0,0,19,64,11,1,5,5,38,1,0,10,4,0,2,37,1,43,53,0,43,53,0, |
255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218,0,0,23,64,13,2,1, |
4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,2,0,14,0,0,5,101,5,129, |
0,16,0,33,0,112,64,69,117,10,1,91,32,139,32,2,91,31,139,31,2,90,20,138,20, |
2,91,19,1,10,31,26,31,2,10,20,26,20,2,26,26,28,8,90,64,15,17,1,17,35,128, |
24,28,90,14,16,16,1,14,27,16,95,24,127,0,1,0,0,2,28,95,14,18,23,95,2,3,0, |
63,237,63,237,17,57,47,113,51,237,50,1,47,51,51,47,16,237,50,26,16,220,113, |
26,237,18,57,47,49,48,93,93,93,0,93,1,93,93,0,93,19,51,17,33,50,4,22,18,21, |
20,2,14,1,35,33,17,35,37,52,46,2,35,33,17,33,21,33,17,33,50,62,2,14,154,1, |
210,163,1,19,198,111,106,184,251,145,253,241,154,4,151,82,148,206,123,254, |
241,1,150,254,106,1,58,111,189,138,78,3,33,2,96,81,169,254,252,180,176,254, |
243,181,93,2,135,72,143,203,130,61,254,57,154,254,18,72,142,212,0,255,255, |
0,168,0,0,5,32,7,6,18,38,0,49,0,0,17,7,2,153,1,161,0,0,0,19,64,11,1,20,5, |
38,1,12,29,43,8,18,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
240,18,38,0,50,0,0,17,7,2,148,1,182,0,0,0,21,180,2,40,5,38,2,184,255,216, |
180,41,44,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255,236,5,215,6,240,18,38, |
0,50,0,0,17,7,2,149,2,37,0,0,0,19,64,11,2,40,5,38,2,37,40,43,10,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6,254,18,38,0,50,0,0,17,7,2,150, |
1,213,0,0,0,19,64,11,2,41,5,38,2,4,46,40,10,0,37,1,43,53,0,43,53,0,0,0,255, |
255,0,97,255,236,5,215,7,6,18,38,0,50,0,0,17,7,2,153,1,193,0,0,0,21,180,2, |
40,5,38,2,184,255,245,180,49,63,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255, |
236,5,215,6,178,18,38,0,50,0,0,17,7,2,152,1,215,0,0,0,25,182,3,2,40,5,38, |
3,2,184,255,255,180,44,42,10,0,37,1,43,53,53,0,43,53,53,0,0,1,0,142,0,225, |
4,31,4,115,0,11,0,129,185,0,5,255,232,179,18,22,72,3,184,255,232,64,14,18, |
22,72,11,24,18,22,72,9,24,18,22,72,8,184,255,232,179,18,22,72,6,184,255,232, |
64,14,18,22,72,2,24,18,22,72,0,24,18,22,72,7,184,255,232,64,14,18,22,72,1, |
24,18,22,72,10,24,18,22,72,4,184,255,232,64,23,18,22,72,212,4,228,4,2,180, |
4,196,4,212,4,3,32,4,1,4,0,7,1,7,0,25,47,113,1,47,93,93,113,49,48,0,43,43, |
1,43,43,43,43,43,43,0,43,43,43,43,19,9,1,55,9,1,23,9,1,7,9,1,142,1,98,254, |
160,104,1,94,1,94,105,254,162,1,96,102,254,159,254,156,1,74,1,98,1,96,103, |
254,159,1,95,105,254,164,254,160,105,1,97,254,157,0,3,0,71,255,203,5,244, |
5,186,0,27,0,39,0,51,0,196,64,141,89,44,1,8,37,1,84,33,1,5,26,21,26,101,26, |
3,139,23,1,123,22,139,22,2,108,22,1,90,22,1,105,16,1,10,12,26,12,2,132,9, |
1,116,8,132,8,2,99,8,1,85,8,1,27,50,91,50,2,114,43,130,43,2,84,43,1,20,38, |
84,38,2,85,37,1,140,31,1,74,31,90,31,122,31,3,4,21,20,21,100,21,3,11,7,27, |
7,107,7,3,32,44,40,0,91,64,15,28,1,28,53,128,32,53,1,40,91,175,14,191,14, |
2,32,14,1,15,14,31,14,2,14,43,31,35,47,95,23,19,4,35,95,9,5,19,0,63,51,237, |
63,51,237,17,57,57,1,47,93,93,93,237,93,26,16,220,113,26,237,18,57,57,49, |
48,0,93,93,93,93,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,1,20,2,6,4,35,34,38,39,7,35,55,38,2,53,52,18,54,36,51,50,22,23,55,51,7, |
22,18,7,52,38,39,1,30,1,51,50,62,2,37,20,22,23,1,46,1,35,34,14,2,5,215,95, |
180,254,252,165,127,206,81,120,190,200,88,86,92,178,1,5,169,125,207,82,121, |
192,201,85,87,195,49,49,253,59,59,150,93,132,191,123,59,252,15,50,51,2,195, |
59,151,92,126,190,127,63,2,199,165,254,242,192,104,58,54,145,241,97,1,10, |
160,165,1,10,187,101,56,54,146,242,94,254,253,160,112,184,72,252,171,44,47, |
86,153,212,125,113,190,75,3,85,42,46,80,148,208,0,0,255,255,0,158,255,236, |
5,41,6,240,18,38,0,56,0,0,17,7,2,148,1,141,0,0,0,21,180,1,26,5,38,1,184,255, |
232,180,27,30,5,20,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,6,240, |
18,38,0,56,0,0,17,7,2,149,1,237,0,0,0,19,64,11,1,26,5,38,1,37,26,29,5,20, |
37,1,43,53,0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,254,18,38,0,56,0,0, |
17,7,2,150,1,152,0,0,0,19,64,11,1,27,5,38,1,0,32,26,5,20,37,1,43,53,0,43, |
53,0,0,0,255,255,0,158,255,236,5,41,6,178,18,38,0,56,0,0,17,7,2,152,1,158, |
0,0,0,25,182,2,1,26,5,38,2,1,184,255,254,180,30,28,5,20,37,1,43,53,53,0,43, |
53,53,0,255,255,0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,149,1,208,0,0,0, |
19,64,11,1,9,5,38,1,65,9,12,4,8,37,1,43,53,0,43,53,0,0,0,0,2,0,168,0,0,4, |
234,5,129,0,16,0,27,0,95,64,63,150,15,1,116,26,132,26,2,123,18,139,18,2,0, |
90,16,17,48,17,144,17,3,255,17,1,0,17,16,17,32,17,64,17,4,17,22,11,7,90,0, |
8,16,8,64,8,3,7,8,22,95,6,21,95,11,6,11,6,11,7,9,3,7,18,0,63,63,18,57,57, |
47,47,16,237,16,237,1,47,94,93,237,50,50,47,93,93,113,237,49,48,0,93,93,93, |
1,20,14,2,35,33,17,35,17,51,21,33,50,30,2,7,52,38,35,33,17,33,50,62,2,4,234, |
59,121,182,123,254,98,191,191,1,146,125,186,124,62,192,164,164,254,133,1, |
131,82,121,79,38,2,223,88,159,120,71,254,215,5,129,252,60,111,156,99,134, |
149,253,192,44,79,107,0,0,0,0,1,0,142,255,236,4,143,5,204,0,67,0,214,64,150, |
149,51,1,133,63,149,63,2,133,47,149,47,2,133,46,149,46,2,118,65,1,118,56, |
1,83,26,131,26,147,26,3,92,39,108,39,124,39,3,107,22,1,58,22,1,145,52,1,21, |
52,37,52,2,22,66,38,66,118,66,3,26,3,42,3,2,61,72,24,54,72,31,32,24,1,31, |
31,1,9,24,31,31,24,9,3,43,0,72,64,48,17,160,17,2,160,17,176,17,2,17,69,128, |
42,70,0,43,16,43,48,43,3,8,43,112,69,1,63,69,79,69,2,212,31,1,197,31,1,182, |
31,1,219,17,1,202,17,1,185,17,1,31,17,5,36,80,49,0,43,21,14,80,5,22,0,63, |
237,63,63,237,18,57,57,93,93,93,93,93,93,1,93,93,47,94,93,237,26,16,220,93, |
113,26,237,18,23,57,47,47,47,93,93,16,237,16,237,49,48,0,93,1,93,93,93,93, |
93,0,93,93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,38,47,1,30,3,51,50,54,53, |
52,46,4,53,52,62,4,53,52,46,2,35,34,14,2,21,17,35,17,52,62,2,51,50,30,2,21, |
20,14,4,21,20,30,4,4,143,41,87,136,94,80,148,55,2,25,67,74,78,37,92,98,54, |
81,95,81,54,33,49,58,49,33,33,63,90,57,68,107,73,39,180,63,120,174,110,102, |
155,105,53,33,51,58,51,33,55,82,95,82,55,1,39,66,115,85,49,25,24,164,14,25, |
19,11,86,79,56,77,62,57,73,98,73,51,73,58,48,52,63,43,37,62,45,26,35,77,122, |
88,252,3,4,3,118,173,112,54,46,80,109,62,61,90,69,53,47,48,28,38,59,57,64, |
85,114,0,0,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,67,0, |
188,0,0,0,21,180,2,66,17,38,2,184,255,149,180,67,70,3,36,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,116,1,84,0,0, |
0,19,64,11,2,66,17,38,2,11,66,69,3,36,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,115,5,211,18,38,0,68,0,0,17,7,1,71,0,218,0,0,0,21,180,2,67,17, |
38,2,184,255,192,180,72,66,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236, |
4,115,5,189,18,38,0,68,0,0,17,7,1,78,0,245,0,0,0,21,180,2,66,17,38,2,184, |
255,224,180,75,89,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,115,5, |
123,18,38,0,68,0,0,17,7,0,105,0,235,0,0,0,25,182,3,2,66,17,38,3,2,184,255, |
202,180,70,68,3,36,37,1,43,53,53,0,43,53,53,0,255,255,0,87,255,236,4,115, |
6,115,18,38,0,68,0,0,17,7,1,76,1,8,0,0,0,25,182,3,2,71,17,38,3,2,184,255, |
200,180,76,66,3,36,37,1,43,53,53,0,43,53,53,0,0,3,0,66,255,236,6,194,4,78, |
0,62,0,79,0,88,0,251,64,96,134,54,1,122,36,1,123,58,1,117,8,133,8,2,101,68, |
117,68,133,68,3,124,86,1,106,86,1,126,81,1,106,81,1,101,4,117,4,2,41,47,1, |
41,44,1,24,40,9,13,72,10,28,26,28,2,17,53,88,1,70,33,31,79,79,79,95,79,127, |
79,4,79,79,80,25,9,73,10,10,61,71,64,31,80,47,80,63,80,3,144,80,1,80,90,128, |
44,71,45,184,255,192,64,19,21,28,72,45,45,71,71,25,64,12,15,72,25,62,80,80, |
80,6,53,184,255,184,64,43,17,73,53,83,80,56,16,63,81,33,33,74,50,143,44,1, |
43,44,1,44,44,39,80,50,16,17,74,80,22,22,6,80,15,239,9,1,128,9,1,9,9,15,22, |
0,63,51,47,93,93,16,237,63,237,50,63,237,51,47,93,93,17,18,57,47,237,63,237, |
50,43,18,57,47,237,1,47,43,237,51,47,43,237,26,16,220,93,113,26,237,50,47, |
237,17,18,57,47,93,51,237,50,57,57,49,48,93,43,0,93,93,1,93,0,93,93,93,93, |
1,93,0,93,1,93,0,93,93,1,21,30,3,51,50,54,55,23,14,3,35,32,3,14,3,35,34,38, |
53,52,62,4,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,23,62,1,51,50,30, |
2,29,1,37,7,14,5,21,20,22,51,50,62,2,53,37,46,1,35,34,14,2,7,3,200,1,34,70, |
109,78,117,141,25,158,17,61,102,153,108,254,191,102,29,74,102,137,93,167, |
169,38,67,91,107,117,60,240,26,57,88,61,54,88,64,39,7,188,10,58,105,159,112, |
128,172,49,63,177,106,136,183,111,47,252,80,195,40,81,76,66,49,28,100,93, |
90,129,83,40,2,246,15,144,135,45,96,81,54,4,1,247,17,82,136,98,55,94,72,45, |
45,91,73,47,1,1,51,93,71,42,172,150,71,108,78,51,32,13,1,4,59,67,94,58,27, |
15,39,67,51,17,64,107,78,43,70,69,74,65,88,155,210,122,24,31,4,1,6,18,31, |
51,73,51,87,97,63,98,116,53,196,171,157,29,74,127,98,255,255,0,87,254,78, |
3,202,4,78,18,38,0,70,0,0,17,7,0,120,1,12,0,0,0,11,182,1,40,48,40,19,9,37, |
1,43,53,0,0,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,67,0, |
221,0,0,0,21,180,2,38,17,38,2,184,255,228,180,39,42,17,27,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,116,1,112,0,0, |
0,19,64,11,2,38,17,38,2,84,38,41,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,24,5,211,18,38,0,72,0,0,17,7,1,71,0,245,0,0,0,19,64,11,2,39, |
17,38,2,8,44,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,24, |
5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3,2,4,42, |
40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,10,0,0,1,178,5,228,18,38, |
0,241,0,0,17,6,0,67,160,0,0,21,180,1,4,17,38,1,184,255,194,180,5,8,0,2,37, |
1,43,53,0,43,53,0,0,0,255,255,0,135,0,0,2,47,5,228,18,38,0,241,0,0,17,6,0, |
116,63,0,0,19,64,11,1,4,17,38,1,63,4,7,0,2,37,1,43,53,0,43,53,0,255,255,255, |
211,0,0,2,105,5,211,18,38,0,241,0,0,17,6,1,71,211,0,0,19,64,11,1,5,17,38, |
1,2,10,4,0,2,37,1,43,53,0,43,53,0,255,255,0,8,0,0,2,53,5,123,18,38,0,241, |
0,0,17,6,0,105,219,0,0,23,64,13,2,1,4,17,38,2,1,2,8,6,0,2,37,1,43,53,53,0, |
43,53,53,0,0,2,0,86,255,236,4,39,5,234,0,39,0,57,0,190,64,94,100,51,1,100, |
56,1,107,42,1,107,48,1,10,14,26,14,2,37,17,53,17,69,17,3,6,8,22,8,2,23,26, |
29,3,50,15,28,31,28,2,28,28,50,35,71,40,64,19,16,13,3,40,17,64,14,19,72,22, |
5,17,17,5,144,40,1,144,40,160,40,2,40,59,128,50,71,31,5,1,5,26,19,29,16,4, |
17,27,27,22,45,80,13,80,10,1,10,184,255,192,64,28,7,10,72,82,17,1,36,17,52, |
17,68,17,3,2,17,18,17,2,10,17,10,17,22,0,53,80,0,22,0,63,237,63,57,57,47, |
47,93,93,93,43,93,51,237,17,51,47,18,23,57,1,47,93,237,26,16,204,93,113,17, |
57,47,18,57,43,18,23,57,26,16,237,17,57,47,93,18,23,57,49,48,0,93,93,1,93, |
0,93,93,93,93,5,34,46,2,53,52,62,2,51,50,22,23,46,1,39,5,53,55,46,1,39,51, |
30,1,23,37,15,1,30,3,29,1,20,14,2,19,52,46,2,35,34,14,2,21,20,22,51,50,62, |
2,2,54,125,181,118,56,52,116,186,133,71,117,43,43,115,76,254,211,218,56,120, |
66,209,45,83,42,1,50,1,211,81,129,88,47,57,120,188,176,33,71,113,80,81,115, |
73,33,144,145,81,118,75,36,20,73,132,185,111,107,182,134,75,32,27,86,176, |
69,133,114,94,45,78,35,20,51,31,132,112,92,74,176,200,223,121,6,122,196,138, |
74,1,245,94,137,90,44,45,92,137,91,190,178,44,90,139,0,255,255,0,140,0,0, |
3,242,5,189,18,38,0,81,4,0,17,7,1,78,0,245,0,0,0,19,64,11,1,38,17,38,1,5, |
47,61,19,36,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,228,18,38, |
0,82,0,0,17,7,0,67,0,223,0,0,0,21,180,2,35,17,38,2,184,255,228,180,36,39, |
8,0,37,1,43,53,0,43,53,0,255,255,0,86,255,236,4,29,5,228,18,38,0,82,0,0,17, |
7,0,116,1,103,0,0,0,19,64,11,2,35,17,38,2,73,35,38,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,86,255,236,4,29,5,211,18,38,0,82,0,0,17,7,1,71,0,240,0,0, |
0,19,64,11,2,36,17,38,2,1,41,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86, |
255,236,4,29,5,189,18,38,0,82,0,0,17,7,1,78,0,247,0,0,0,19,64,11,2,35,17, |
38,2,13,44,58,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,123, |
18,38,0,82,0,0,17,7,0,105,0,250,0,0,0,23,64,13,3,2,35,17,38,3,2,4,39,37,8, |
0,37,1,43,53,53,0,43,53,53,0,0,0,0,3,0,65,0,223,4,36,4,117,0,3,0,7,0,11,0, |
75,64,48,3,11,171,0,8,8,4,128,6,160,6,2,95,6,1,32,6,1,6,63,4,95,4,111,4,3, |
4,9,174,64,8,144,8,2,8,4,173,5,0,174,79,1,159,1,2,1,5,179,0,63,222,93,237, |
16,253,222,93,237,1,47,93,47,93,93,93,18,57,47,51,237,50,49,48,1,53,51,21, |
1,53,33,21,1,53,51,21,1,222,168,253,187,3,227,253,186,168,3,190,183,183,254, |
162,146,146,254,127,183,183,0,0,3,0,44,255,218,4,180,4,92,0,22,0,34,0,45, |
0,161,64,93,117,33,133,33,2,117,27,133,27,2,122,38,138,38,2,122,44,138,44, |
2,150,16,1,66,16,1,77,5,1,68,21,1,75,10,1,27,38,35,0,71,64,15,23,207,23,2, |
159,23,175,23,255,23,3,23,47,128,35,71,0,12,1,0,12,16,12,32,12,64,12,240, |
12,5,7,12,144,47,160,47,240,47,3,224,47,1,223,47,1,0,47,32,47,2,47,184,255, |
192,64,16,13,21,72,37,26,30,41,80,18,14,16,30,80,7,3,22,0,63,51,237,63,51, |
237,17,57,57,1,43,93,93,93,113,47,94,93,113,237,26,16,220,93,113,26,237,18, |
57,57,49,48,93,93,0,93,93,93,93,1,93,93,0,93,1,16,2,35,34,38,39,7,35,55,46, |
1,53,16,33,50,22,23,55,51,7,30,1,7,52,38,39,1,30,1,51,50,62,2,37,20,23,1, |
46,1,35,34,14,2,4,88,250,238,97,156,60,100,167,184,41,42,1,229,103,156,57, |
91,167,173,42,39,189,12,11,254,29,38,105,62,69,112,78,42,253,179,24,1,226, |
37,104,66,69,111,78,41,2,30,254,228,254,234,48,50,116,214,68,182,116,2,48, |
46,45,105,201,69,185,119,68,109,44,253,206,49,39,39,98,166,126,130,85,2,49, |
45,36,41,99,164,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0, |
67,0,236,0,0,0,21,180,1,38,17,38,1,184,255,236,180,39,42,36,19,37,1,43,53, |
0,43,53,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0,116,1,87, |
0,0,0,19,64,11,1,38,17,38,1,53,38,41,36,19,37,1,43,53,0,43,53,0,0,0,255,255, |
0,139,255,236,3,241,5,211,18,38,0,88,6,0,17,7,1,71,0,239,0,0,0,21,180,1,39, |
17,38,1,184,255,252,180,44,38,36,19,37,1,43,53,0,43,53,0,255,255,0,139,255, |
236,3,241,5,123,18,38,0,88,6,0,17,7,0,105,0,237,0,0,0,25,182,2,1,38,17,38, |
2,1,184,255,243,180,42,40,36,19,37,1,43,53,53,0,43,53,53,0,255,255,0,5,254, |
87,3,252,5,228,18,38,0,92,0,0,17,7,0,116,1,27,0,0,0,19,64,11,1,32,17,38,1, |
54,32,35,17,31,37,1,43,53,0,43,53,0,0,0,0,2,0,138,254,87,4,29,5,204,0,34, |
0,54,0,109,64,76,102,52,118,52,2,105,38,121,38,2,73,25,89,25,2,70,10,86,10, |
2,25,21,41,21,137,21,153,21,4,22,15,38,15,134,15,150,15,4,18,71,64,160,35, |
1,35,56,128,45,7,33,70,0,34,16,34,48,34,240,34,4,8,34,33,27,26,50,80,23,22, |
7,40,80,13,16,0,0,0,63,63,237,50,63,237,50,63,1,47,94,93,237,50,50,26,16, |
220,93,26,237,49,48,0,93,93,93,93,93,93,19,51,17,20,6,7,6,7,51,62,3,51,50, |
30,2,21,20,14,2,35,34,38,39,35,30,3,21,17,35,1,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,138,180,1,1,1,1,6,25,64,82,101,63,112,153,93,40,40,93,153,112, |
116,174,46,5,1,1,1,1,180,2,214,24,59,98,74,60,106,79,46,38,73,108,70,75,99, |
59,24,5,204,254,89,30,55,21,25,22,52,73,47,21,80,145,205,125,123,208,150, |
85,88,100,2,32,48,59,29,254,89,3,199,100,156,108,56,34,96,169,135,115,159, |
98,43,58,110,159,255,255,0,5,254,87,3,252,5,123,18,38,0,92,0,0,17,7,0,105, |
0,187,0,0,0,25,182,2,1,32,17,38,2,1,184,255,254,180,36,34,17,31,37,1,43,53, |
53,0,43,53,53,0,255,255,0,4,0,0,5,82,6,161,18,38,0,36,0,0,17,7,1,73,1,104, |
1,78,0,19,64,11,2,21,5,38,2,2,22,21,4,7,37,1,43,53,0,43,53,0,0,0,255,255, |
0,87,255,236,4,115,5,83,18,38,0,68,0,0,17,7,1,73,0,233,0,0,0,21,180,2,66, |
17,38,2,184,255,202,180,67,66,3,36,37,1,43,53,0,43,53,0,255,255,0,4,0,0,5, |
82,6,243,18,38,0,36,0,0,17,7,2,155,1,121,0,0,0,19,64,11,2,21,5,38,2,3,26, |
34,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,115,5,230,18,38,0, |
68,0,0,17,7,1,74,1,7,0,0,0,21,180,2,66,17,38,2,184,255,204,180,71,83,3,36, |
37,1,43,53,0,43,53,0,255,255,0,4,254,96,5,99,5,129,18,38,0,36,0,0,17,7,1, |
77,3,181,0,11,0,13,185,0,2,255,207,180,33,33,7,7,37,43,53,0,255,255,0,87, |
254,85,4,115,4,78,18,38,0,68,0,0,17,7,1,77,2,197,0,0,0,13,185,0,2,255,194, |
180,78,78,36,36,37,43,53,0,255,255,0,104,255,236,5,121,6,240,18,38,0,38,0, |
0,17,7,2,149,2,83,0,0,0,19,64,11,1,40,5,38,1,126,40,43,26,16,37,1,43,53,0, |
43,53,0,0,0,255,255,0,87,255,236,3,202,5,228,18,38,0,70,0,0,17,7,0,116,1, |
103,0,0,0,19,64,11,1,40,17,38,1,114,40,43,19,9,37,1,43,53,0,43,53,0,0,0,255, |
255,0,104,255,236,5,121,6,254,18,38,0,38,0,0,17,7,2,150,1,204,0,0,0,19,64, |
11,1,41,5,38,1,38,46,40,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236, |
3,202,5,211,18,38,0,70,0,0,17,7,1,71,0,208,0,0,0,19,64,11,1,41,17,38,1,10, |
46,40,19,9,37,1,43,53,0,43,53,0,0,0,255,255,0,104,255,236,5,121,6,241,18, |
38,0,38,0,0,17,7,1,75,2,34,1,37,0,19,64,11,1,40,5,38,1,39,40,42,26,16,37, |
1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,204,18,38,0,70,0,0,17, |
7,1,75,1,44,0,0,0,11,182,1,17,40,42,19,9,37,1,43,53,0,0,0,255,255,0,104,255, |
236,5,121,6,254,18,38,0,38,0,0,17,7,2,151,1,204,0,0,0,19,64,11,1,40,5,38, |
1,38,42,48,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,211, |
18,38,0,70,0,0,17,7,1,72,0,214,0,0,0,19,64,11,1,40,17,38,1,16,42,48,19,9, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,5,101,6,254,18,38,0,39,0,0,17, |
7,2,151,1,102,0,0,0,21,180,2,26,5,38,2,184,255,171,180,28,34,6,0,37,1,43, |
53,0,43,53,0,255,255,0,86,255,236,4,255,5,204,16,38,0,71,0,0,17,7,2,146,3, |
186,0,75,0,18,64,10,2,61,0,2,83,61,61,19,19,37,1,43,53,0,63,53,255,255,0, |
14,0,0,5,101,5,129,18,6,0,144,0,0,0,2,0,86,255,236,4,109,5,204,0,39,0,59, |
0,146,64,86,85,42,101,42,2,90,58,106,58,2,57,1,73,1,2,54,10,70,10,2,9,4,25, |
4,121,4,137,4,4,6,7,22,7,118,7,134,7,4,25,27,70,64,20,6,0,21,50,3,18,61,128, |
40,71,31,6,1,6,63,61,1,143,61,1,33,21,27,19,81,24,15,20,1,239,20,255,20,2, |
20,20,8,22,0,11,55,80,8,184,255,192,64,10,9,13,72,8,16,0,45,80,3,22,0,63, |
237,50,63,43,237,50,63,18,57,47,93,113,51,237,50,63,1,93,114,47,93,237,26, |
16,220,23,50,17,57,26,237,50,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17, |
16,33,50,22,23,51,52,46,1,52,61,1,33,53,33,53,51,21,51,21,35,17,20,30,2,23, |
35,46,3,53,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,3,53,50,165,122,205, |
193,1,142,123,164,50,2,1,1,254,212,1,44,180,132,132,1,2,2,1,172,2,3,3,2,253, |
218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64,31,174,104,90,1,20,1,24, |
2,54,90,98,10,43,47,42,9,141,131,147,147,131,252,41,39,72,60,43,9,10,37,48, |
53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102,163,0,0,255, |
255,0,168,0,0,4,254,6,161,18,38,0,40,0,0,17,7,1,73,1,122,1,78,0,21,180,1, |
12,5,38,1,184,255,237,180,13,12,0,10,37,1,43,53,0,43,53,0,255,255,0,87,255, |
236,4,24,5,83,18,38,0,72,0,0,17,7,1,73,0,245,0,0,0,19,64,11,2,38,17,38,2, |
3,39,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,243,18,38, |
0,40,0,0,17,7,2,155,1,137,0,0,0,21,180,1,12,5,38,1,184,255,235,180,17,25, |
0,10,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,230,18,38,0,72,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,38,17,38,2,2,43,55,17,27,37,1,43,53,0,43, |
53,0,0,0,255,255,0,168,0,0,4,254,6,241,18,38,0,40,0,0,17,7,1,75,1,201,1,37, |
0,21,180,1,12,5,38,1,184,255,236,180,12,14,0,10,37,1,43,53,0,43,53,0,255, |
255,0,87,255,236,4,24,5,204,18,38,0,72,0,0,17,7,1,75,1,68,0,0,0,12,182,2, |
2,38,40,17,27,37,1,43,53,0,0,0,255,255,0,168,254,85,4,254,5,129,18,38,0,40, |
0,0,17,7,1,77,3,80,0,0,0,13,185,0,1,255,194,180,24,24,11,11,37,43,53,0,255, |
255,0,87,254,85,4,24,4,78,18,38,0,72,0,0,17,7,1,77,1,125,0,0,0,13,185,0,2, |
254,242,180,50,50,9,9,37,43,53,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40, |
0,0,17,7,2,151,1,111,0,0,0,21,180,1,12,5,38,1,184,255,231,180,14,20,0,10, |
37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,211,18,38,0,72,0,0,17,7, |
1,72,0,234,0,0,0,21,180,2,38,17,38,2,184,255,254,180,40,46,17,27,37,1,43, |
53,0,43,53,0,255,255,0,103,255,236,5,160,6,254,18,38,0,42,0,0,17,7,2,150, |
1,219,0,0,0,19,64,11,1,47,5,38,1,34,52,46,0,35,37,1,43,53,0,43,53,0,0,0,255, |
255,0,86,254,87,3,239,5,211,18,38,0,74,0,0,17,7,1,71,0,216,0,0,0,19,64,11, |
2,71,17,38,2,0,76,70,26,41,37,1,43,53,0,43,53,0,0,0,255,255,0,103,255,236, |
5,160,6,243,18,38,0,42,0,0,17,7,2,155,1,246,0,0,0,19,64,11,1,46,5,38,1,39, |
51,59,0,35,37,1,43,53,0,43,53,0,0,0,255,255,0,86,254,87,3,239,5,230,18,38, |
0,74,0,0,17,7,1,74,0,249,0,0,0,19,64,11,2,70,17,38,2,0,75,87,26,41,37,1,43, |
53,0,43,53,0,0,0,255,255,0,103,255,236,5,160,6,241,18,38,0,42,0,0,17,7,1, |
75,2,53,1,37,0,19,64,11,1,46,5,38,1,39,46,48,0,35,37,1,43,53,0,43,53,0,0, |
0,255,255,0,86,254,87,3,239,5,204,18,38,0,74,0,0,17,7,1,75,1,45,0,0,0,11, |
182,2,0,70,72,26,41,37,1,43,53,0,0,0,255,255,0,103,254,78,5,160,5,150,18, |
38,0,42,0,0,17,7,2,140,2,78,0,0,0,11,182,1,46,50,46,0,35,37,1,43,53,0,0,0, |
255,255,0,86,254,87,3,239,6,32,16,38,0,74,0,0,17,7,2,147,1,56,0,0,0,21,180, |
2,79,17,38,2,184,255,252,180,70,74,26,41,37,1,43,53,0,43,53,0,255,255,0,168, |
0,0,5,32,6,254,18,38,0,43,0,0,17,7,2,150,1,153,0,0,0,19,64,11,1,13,5,38,1, |
0,18,12,4,10,37,1,43,53,0,43,53,0,0,0,255,255,0,142,0,0,3,238,7,62,18,38, |
0,75,0,0,17,7,2,150,0,242,0,64,0,21,180,1,35,2,38,1,184,255,255,180,40,34, |
25,10,37,1,43,53,0,43,53,0,0,2,0,14,0,0,5,185,5,129,0,19,0,23,0,166,64,72, |
23,11,3,90,8,7,4,4,20,4,2,7,4,16,15,19,90,20,12,59,0,1,4,0,1,56,164,0,1,155, |
0,1,68,0,1,244,0,1,235,0,1,68,0,148,0,2,224,0,1,2,0,0,48,0,112,0,208,0,4, |
7,0,32,25,1,160,25,176,25,192,25,3,25,184,255,192,64,36,14,17,72,47,25,1, |
22,18,6,95,15,11,80,7,96,7,2,7,2,95,64,23,1,160,23,208,23,2,23,23,13,9,3, |
4,0,18,0,63,50,63,51,57,47,93,113,237,220,93,50,50,237,50,50,1,93,43,93,113, |
47,94,93,95,93,113,113,113,114,114,114,94,93,93,51,51,237,50,50,47,94,93, |
51,51,237,50,50,49,48,33,17,33,17,35,17,35,53,51,53,51,21,33,53,51,21,51, |
21,35,17,3,53,33,21,4,102,253,1,191,154,154,191,2,255,186,153,153,186,253, |
1,2,141,253,115,4,1,154,230,230,230,230,154,251,255,3,45,212,212,0,1,0,10, |
0,0,3,238,5,204,0,41,0,150,185,0,7,255,232,64,66,9,13,72,0,7,16,7,2,7,33, |
24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,32,36,24,70,29,28,192,25,1, |
0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240,43, |
2,255,43,1,112,43,1,43,184,255,192,64,19,19,23,72,35,27,81,32,28,28,5,30, |
0,25,11,21,0,18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63, |
18,57,47,51,237,50,1,43,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16, |
220,93,113,26,237,18,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52, |
46,2,35,34,14,2,21,17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61, |
30,70,84,100,62,104,133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180, |
1,44,254,212,2,3,2,1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69, |
35,46,84,120,75,253,170,4,182,131,147,147,131,148,33,66,56,39,7,255,255,255, |
184,0,0,2,133,7,6,18,38,0,44,0,0,17,6,2,153,207,0,0,19,64,11,1,4,5,38,1,2, |
13,27,0,2,37,1,43,53,0,43,53,0,255,255,255,184,0,0,2,133,5,189,18,38,0,241, |
0,0,17,6,1,78,207,0,0,19,64,11,1,4,17,38,1,2,13,27,0,2,37,1,43,53,0,43,53, |
0,255,255,0,12,0,0,2,49,6,161,18,38,0,44,0,0,17,7,1,73,255,217,1,78,0,19, |
64,11,1,4,5,38,1,2,5,4,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0,12,0,0,2,49, |
5,83,18,38,0,241,0,0,17,6,1,73,217,0,0,19,64,11,1,4,17,38,1,2,5,4,0,2,37, |
1,43,53,0,43,53,0,255,255,255,210,0,0,2,108,6,243,18,38,0,44,0,0,17,6,2,155, |
234,0,0,19,64,11,1,4,5,38,1,2,9,17,0,2,37,1,43,53,0,43,53,0,255,255,255,210, |
0,0,2,108,5,230,18,38,0,241,0,0,17,6,1,74,245,0,0,19,64,11,1,4,17,38,1,3, |
9,21,0,2,37,1,43,53,0,43,53,0,255,255,0,92,254,85,1,186,5,129,18,38,0,44, |
0,0,17,6,1,77,12,0,0,10,182,1,0,16,16,3,3,37,43,53,0,0,255,255,0,31,254,85, |
1,125,5,204,18,38,0,76,0,0,17,6,1,77,207,0,0,15,64,10,23,22,1,2,0,20,20,7, |
7,37,43,53,93,0,255,255,0,189,0,0,1,124,6,241,18,38,0,44,0,0,17,7,1,75,0, |
39,1,37,0,19,64,11,1,4,5,38,1,0,4,6,0,2,37,1,43,53,0,43,53,0,0,0,0,1,0,194, |
0,0,1,118,4,58,0,3,1,137,64,24,3,70,4,0,36,0,2,9,0,0,4,5,52,5,1,0,5,16,5, |
32,5,3,229,5,184,255,192,64,55,225,228,72,240,5,1,228,5,1,176,5,192,5,208, |
5,3,132,5,148,5,164,5,3,64,5,1,52,5,1,0,5,16,5,32,5,3,212,5,228,5,244,5,3, |
144,5,1,116,5,132,5,2,96,5,1,5,184,255,192,64,22,193,196,72,224,5,1,196,5, |
212,5,2,176,5,1,20,5,36,5,52,5,3,5,184,255,192,183,182,185,72,0,5,1,175,5, |
184,255,192,179,171,174,72,5,184,255,192,182,161,167,72,128,5,1,5,184,255, |
192,64,38,150,156,72,208,5,1,100,5,116,5,164,5,180,5,196,5,5,32,5,1,4,5,20, |
5,2,4,5,20,5,180,5,196,5,244,5,5,117,5,184,255,192,179,121,124,72,5,184,255, |
192,179,110,113,72,5,184,255,192,64,24,99,102,72,224,5,1,180,5,196,5,212, |
5,3,48,5,1,4,5,20,5,36,5,3,5,184,255,192,183,67,70,72,11,5,1,62,5,184,255, |
192,64,9,56,59,72,203,5,219,5,2,5,184,255,192,64,42,45,48,72,27,5,43,5,2, |
196,5,212,5,228,5,3,107,5,123,5,2,64,5,1,2,16,5,32,5,48,5,3,191,5,207,5,2, |
32,5,64,5,2,5,184,255,192,64,13,13,16,72,15,5,31,5,2,7,1,15,0,21,0,63,63, |
1,94,93,43,93,93,113,95,113,113,113,114,43,114,43,94,93,43,113,113,113,113, |
43,43,43,94,93,113,113,113,113,43,114,43,43,94,93,43,93,93,93,93,43,113,113, |
113,113,114,114,114,114,114,114,114,43,94,93,93,17,18,57,47,94,93,237,49, |
48,51,17,51,17,194,180,4,58,251,198,0,0,0,255,255,0,170,255,236,5,73,5,129, |
16,38,0,44,237,0,16,7,0,45,1,225,0,0,255,255,0,137,254,87,3,3,5,204,16,38, |
0,76,0,0,17,7,0,77,1,198,0,0,0,30,64,18,3,2,111,8,1,48,8,1,16,8,1,8,1,0,16, |
0,1,0,17,93,53,53,17,93,93,93,53,53,255,255,0,32,255,236,3,205,6,254,18,38, |
0,45,0,0,17,7,2,150,1,55,0,0,0,19,64,11,1,23,5,38,1,190,28,22,3,16,37,1,43, |
53,0,43,53,0,0,0,0,2,255,153,254,87,2,47,5,211,0,19,0,29,1,148,64,25,150, |
29,166,29,2,152,28,168,28,2,3,18,24,12,16,72,18,40,8,11,72,164,21,1,21,184, |
255,192,64,49,11,15,72,21,251,26,1,59,26,1,26,64,12,15,72,36,26,1,26,15,70, |
12,3,3,4,12,20,12,36,12,68,12,4,7,12,12,31,30,144,31,1,2,0,31,16,31,2,219, |
31,184,255,192,64,9,223,227,72,31,64,210,213,72,31,184,255,192,64,51,205, |
209,72,143,31,1,64,31,80,31,2,95,31,111,31,239,31,255,31,4,32,31,48,31,64, |
31,3,144,31,160,31,224,31,240,31,4,79,31,1,0,31,1,160,175,31,191,31,207,31, |
3,31,184,255,192,64,57,147,150,72,239,31,1,176,31,192,31,208,31,3,95,31,1, |
32,31,1,31,31,47,31,63,31,143,31,191,31,207,31,6,0,31,1,111,239,31,1,208, |
31,1,63,31,1,111,31,143,31,159,31,175,31,255,31,5,31,184,255,192,64,101,79, |
82,72,223,31,1,144,31,160,31,176,31,3,47,31,63,31,79,31,3,0,31,1,61,31,64, |
53,56,72,112,31,128,31,144,31,176,31,4,15,31,31,31,2,255,31,1,31,64,35,38, |
72,144,31,1,79,31,1,255,31,1,112,31,128,31,192,31,208,31,224,31,5,31,31,1, |
24,142,64,28,148,26,128,22,22,15,26,47,26,63,26,127,26,239,26,5,26,13,15, |
7,80,0,27,0,63,237,63,47,93,51,47,26,16,253,26,237,1,93,93,93,113,113,43, |
113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93,93,113,113,113,113, |
43,114,94,93,93,93,113,113,114,114,43,43,43,94,93,95,93,17,18,57,47,94,93, |
51,47,16,237,47,93,43,93,113,204,43,93,49,48,0,43,43,1,95,93,93,19,34,38, |
39,53,30,1,51,50,62,2,53,17,51,17,20,14,2,1,21,35,39,35,7,35,53,19,51,77, |
34,65,28,13,36,13,38,49,28,10,180,21,54,93,1,154,105,219,2,232,104,234,204, |
254,87,4,5,139,2,4,20,43,67,46,4,165,251,64,62,106,78,45,6,110,20,169,169, |
20,1,14,0,255,255,0,168,254,78,5,63,5,129,18,38,0,46,0,0,17,7,2,140,1,221, |
0,0,0,14,185,0,1,255,205,180,16,12,4,11,37,1,43,53,255,255,0,138,254,78,4, |
3,5,204,18,38,0,78,0,0,17,7,2,140,1,78,0,0,0,14,185,0,1,255,235,180,16,12, |
4,11,37,1,43,53,0,1,0,138,0,0,4,3,4,58,0,11,0,166,64,72,123,1,1,116,7,1,86, |
9,102,9,2,123,0,139,0,155,0,3,89,0,105,0,2,67,10,1,58,2,1,42,9,1,155,8,1, |
122,8,138,8,2,44,8,1,1,10,8,10,9,16,112,9,128,9,144,9,3,9,9,0,11,16,80,11, |
1,144,11,208,11,240,11,3,11,184,255,192,64,40,7,11,72,11,7,3,70,0,4,16,4, |
48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2,1,7,10,4,8,8,5,15,4,0,21, |
0,63,50,63,51,17,23,57,1,93,93,47,94,93,237,50,47,43,93,113,56,51,57,47,93, |
56,57,51,17,51,49,48,93,93,93,93,0,93,1,93,93,93,93,0,93,1,93,33,1,7,17,35, |
17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73,1,206,1,238,108, |
254,126,4,58,253,243,2,13,254,47,253,151,0,0,0,255,255,0,168,0,0,4,47,6,240, |
18,38,0,47,0,0,17,7,2,149,0,173,0,0,0,21,180,1,6,5,38,1,184,255,94,180,6, |
9,0,4,37,1,43,53,0,43,53,0,255,255,0,91,0,0,2,3,7,62,18,38,0,79,0,0,17,6, |
2,149,19,78,0,19,64,11,1,4,2,38,1,75,4,7,0,2,37,1,43,53,0,43,53,0,255,255, |
0,168,254,78,4,47,5,129,18,38,0,47,0,0,17,7,2,140,1,133,0,0,0,14,185,0,1, |
255,253,180,10,6,0,4,37,1,43,53,255,255,0,126,254,78,1,71,5,204,18,38,0,79, |
0,0,17,6,2,140,255,0,0,14,185,0,1,255,255,180,8,4,0,2,37,1,43,53,0,0,255, |
255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,2,146,2,21,0,0,0,18,64,10,1, |
15,3,1,138,10,6,0,4,37,1,43,53,0,63,53,255,255,0,138,0,0,2,105,5,204,16,38, |
0,79,0,0,17,7,2,146,1,36,0,75,0,65,64,16,16,64,29,29,72,16,64,22,22,72,16, |
64,18,18,72,16,184,255,192,179,17,17,72,16,184,255,192,64,12,16,16,72,16, |
64,11,11,72,1,13,0,1,184,1,32,180,8,4,0,2,37,1,43,53,0,63,53,1,43,43,43,43, |
43,43,0,255,255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,1,75,1,213,253,143, |
0,11,182,1,95,6,8,0,4,37,1,43,53,0,0,0,255,255,0,138,0,0,2,146,5,204,16,38, |
0,79,0,0,17,7,1,75,1,66,253,143,0,14,185,0,1,1,84,180,4,6,0,2,37,1,43,53, |
0,1,0,20,0,0,4,47,5,129,0,13,0,119,64,49,121,0,137,0,2,100,8,116,8,132,8, |
3,86,8,1,134,8,1,86,7,1,134,7,1,12,2,90,9,5,16,3,1,0,3,32,3,64,3,96,3,128, |
3,208,3,240,3,7,3,12,184,255,224,179,19,22,72,9,184,255,224,64,24,19,22,72, |
6,1,9,12,4,16,7,1,7,0,13,1,13,13,5,10,3,2,95,5,18,0,63,237,63,18,57,47,93, |
205,93,23,57,43,43,1,47,93,113,47,51,237,50,49,48,113,114,113,114,0,93,93, |
1,5,17,33,21,33,17,7,53,55,17,51,17,37,2,104,254,255,2,200,252,121,148,148, |
191,1,1,3,29,149,254,20,156,2,26,85,158,85,2,201,253,165,148,0,1,0,16,0,0, |
1,186,5,204,0,11,0,102,64,42,39,3,1,39,2,1,8,7,11,70,4,2,0,0,16,0,32,0,64, |
0,4,7,0,0,12,13,255,13,1,112,13,128,13,192,13,208,13,4,31,13,1,4,184,255, |
224,64,23,18,22,72,10,32,18,22,72,1,10,4,7,4,2,79,8,1,8,8,5,0,0,21,0,63,63, |
57,47,93,205,23,57,43,43,1,93,93,93,17,18,57,47,94,93,51,51,237,50,50,49, |
48,113,113,51,17,7,53,55,17,51,17,55,21,7,17,138,122,122,180,124,124,2,30, |
68,158,68,3,16,253,88,72,159,71,253,122,255,255,0,168,0,0,5,32,6,240,18,38, |
0,49,0,0,17,7,2,149,2,17,0,0,0,19,64,11,1,20,5,38,1,73,20,23,8,18,37,1,43, |
53,0,43,53,0,0,0,255,255,0,140,0,0,3,242,5,228,18,38,0,81,4,0,17,7,0,116, |
1,132,0,0,0,19,64,11,1,38,17,38,1,97,38,41,19,36,37,1,43,53,0,43,53,0,0,0, |
255,255,0,168,254,78,5,32,5,129,18,38,0,49,0,0,17,7,2,140,1,252,0,0,0,14, |
185,0,1,255,252,180,24,20,8,18,37,1,43,53,255,255,0,140,254,78,3,242,4,78, |
18,38,0,81,4,0,17,7,2,140,1,91,0,0,0,11,182,1,0,42,38,19,36,37,1,43,53,0, |
0,0,255,255,0,168,0,0,5,32,6,254,18,38,0,49,0,0,17,7,2,151,1,147,0,0,0,21, |
180,1,20,5,38,1,184,255,250,180,22,28,8,18,37,1,43,53,0,43,53,0,255,255,0, |
140,0,0,3,242,5,211,18,38,0,81,4,0,17,7,1,72,0,242,0,0,0,21,180,1,38,17,38, |
1,184,255,254,180,40,46,19,36,37,1,43,53,0,43,53,0,255,255,255,254,0,0,4, |
80,5,129,16,38,0,81,98,0,16,7,2,3,255,127,0,0,0,1,0,165,255,236,5,52,5,149, |
0,55,0,162,64,16,154,53,1,149,7,165,7,2,131,41,147,41,163,41,3,48,184,255, |
232,179,12,15,72,47,184,255,216,64,91,12,15,72,42,54,58,54,154,54,170,54, |
4,6,143,5,159,5,175,5,3,5,5,51,39,26,90,0,27,16,27,64,27,3,27,51,90,0,14, |
64,14,80,14,112,14,160,14,176,14,6,48,14,80,14,144,14,240,14,4,224,14,1,143, |
14,159,14,175,14,3,0,14,48,14,2,7,14,39,20,95,45,4,33,3,26,18,9,95,0,6,6, |
0,19,0,63,50,47,16,237,63,63,63,237,50,1,47,94,93,93,93,113,114,237,47,93, |
237,50,17,57,47,93,51,49,48,0,93,43,1,43,0,93,93,93,5,34,46,2,39,55,30,1, |
51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,173,56,96,79,63,24,127,37,100,59,64,78,41, |
13,39,81,127,87,94,163,121,70,191,1,1,1,1,184,1,3,2,1,4,34,103,130,153,86, |
124,177,112,53,30,86,152,20,24,40,54,30,115,45,65,58,107,153,95,1,66,108, |
154,98,46,62,105,139,77,252,133,4,68,37,92,90,76,22,22,63,69,69,28,61,101, |
70,39,64,133,204,139,254,165,130,208,146,78,0,0,0,0,1,0,140,254,87,3,242, |
4,78,0,53,0,135,64,18,121,52,137,52,2,90,52,106,52,2,43,52,59,52,75,52,3, |
46,184,255,232,64,74,9,12,72,3,46,19,46,2,3,3,24,49,70,64,160,12,1,96,12, |
208,12,2,31,12,1,175,12,1,12,55,128,37,24,70,160,25,176,25,2,0,25,192,25, |
208,25,3,0,25,16,25,32,25,64,25,224,25,240,25,6,7,25,37,18,80,43,16,31,15, |
24,21,7,80,0,27,0,63,237,63,63,63,237,50,1,47,94,93,113,114,237,50,26,16, |
220,93,113,113,114,26,237,17,57,47,49,48,93,43,0,93,93,93,1,34,38,39,53,30, |
1,51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,1,34,65,28,13,36,13,38,49,28,10,23,52,85, |
63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90,130,84,39,22, |
54,93,254,87,4,5,139,2,4,20,43,67,46,3,25,79,106,65,27,45,85,125,81,253,141, |
3,83,34,75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,252,169,62,106, |
78,45,0,0,0,255,255,0,97,255,236,5,215,6,161,18,38,0,50,0,0,17,7,1,73,1,214, |
1,78,0,19,64,11,2,40,5,38,2,0,41,40,10,0,37,1,43,53,0,43,53,0,0,0,255,255, |
0,86,255,236,4,29,5,83,18,38,0,82,0,0,17,7,1,73,0,244,0,0,0,19,64,11,2,35, |
17,38,2,0,36,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
243,18,38,0,50,0,0,17,7,2,155,1,231,0,0,0,19,64,11,2,40,5,38,2,0,45,53,10, |
0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,230,18,38,0,82,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,35,17,38,2,0,40,52,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,97,255,236,5,215,6,241,18,38,0,50,0,0,17,7,2,154,1,226,0, |
0,0,23,64,13,3,2,40,5,38,3,2,93,40,49,10,0,37,1,43,53,53,0,43,53,53,0,0,0, |
255,255,0,86,255,236,4,34,5,228,18,38,0,82,0,0,17,7,1,79,1,9,0,0,0,23,64, |
13,3,2,35,17,38,3,2,103,35,44,8,0,37,1,43,53,53,0,43,53,53,0,0,0,0,2,0,97, |
255,246,7,166,5,140,0,30,0,49,0,170,64,119,137,13,1,102,13,1,105,12,1,86, |
48,1,89,42,1,84,8,132,8,2,4,47,20,47,84,47,3,11,43,27,43,91,43,3,0,20,24, |
28,90,34,0,26,32,26,48,26,3,26,22,26,22,29,15,34,47,34,79,34,3,63,34,95,34, |
127,34,159,34,207,34,239,34,6,34,64,31,38,72,34,16,29,32,29,2,29,45,91,32, |
10,1,15,10,31,10,2,10,127,51,1,27,95,24,24,21,29,95,30,18,22,95,21,3,40,95, |
15,4,31,95,5,19,0,63,237,63,237,63,237,63,237,17,57,47,237,1,93,47,93,93, |
237,47,93,47,43,93,113,18,57,57,47,47,93,16,237,50,57,57,49,48,0,93,93,93, |
93,93,1,93,0,93,93,33,14,3,35,34,36,38,2,53,52,18,54,36,51,50,30,2,23,33, |
21,33,17,33,21,33,17,33,21,37,50,54,55,17,46,2,34,35,34,14,2,21,20,30,2,3, |
231,20,51,57,57,25,169,254,253,175,89,94,178,1,2,164,26,58,57,52,19,3,146, |
252,221,2,231,253,25,3,76,251,111,32,76,26,11,32,37,37,15,125,187,125,63, |
64,126,186,3,3,3,1,106,191,1,9,159,165,1,7,183,98,2,3,4,2,156,254,60,154, |
254,21,156,145,2,2,4,87,1,2,1,74,142,206,131,129,209,148,80,0,3,0,86,255, |
236,7,50,4,78,0,39,0,59,0,68,0,190,64,131,132,7,1,102,7,118,7,2,97,2,1,85, |
2,1,90,66,106,66,2,108,61,1,90,61,1,69,58,85,58,101,58,3,69,52,85,52,101, |
52,3,74,48,90,48,106,48,3,74,42,90,42,106,42,3,8,73,9,9,38,71,64,31,60,47, |
60,63,60,3,144,60,1,60,70,128,17,30,68,0,71,144,40,1,32,40,1,40,50,71,25, |
0,80,68,68,5,63,80,33,16,116,30,132,30,2,123,17,139,17,2,30,17,20,45,80,28, |
16,55,80,20,22,5,80,14,239,8,1,128,8,1,8,8,14,22,0,63,51,47,93,93,16,237, |
63,237,63,237,18,57,57,93,93,63,237,18,57,47,237,1,47,237,47,93,114,237,50, |
57,57,26,16,220,93,113,26,237,50,47,237,49,48,0,93,93,93,93,93,93,93,93,93, |
93,93,1,20,30,2,51,50,54,55,23,14,3,35,34,38,39,14,1,35,34,46,2,53,16,18, |
51,32,23,62,1,51,50,30,2,29,1,37,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2, |
37,46,1,35,34,14,2,7,4,46,35,73,114,80,117,141,25,158,17,61,102,153,108,137, |
198,61,63,201,137,113,181,127,68,253,242,1,25,117,67,200,119,136,183,111, |
47,252,63,42,77,110,68,69,114,81,45,47,81,108,62,69,114,81,44,3,7,15,144, |
135,45,99,84,58,4,1,247,85,143,103,57,94,72,45,45,91,73,47,91,92,93,90,68, |
140,211,143,1,23,1,25,177,94,83,88,155,210,122,24,39,126,164,98,39,41,99, |
164,123,126,165,98,40,39,98,166,225,171,157,29,74,127,98,255,255,0,168,0, |
0,5,104,6,240,18,38,0,53,0,0,17,7,2,149,1,225,0,0,0,21,180,2,31,5,38,2,184, |
255,245,180,31,34,4,17,37,1,43,53,0,43,53,0,255,255,0,136,0,0,2,166,5,228, |
18,38,0,85,0,0,17,7,0,116,0,182,0,0,0,19,64,11,1,32,17,38,1,74,32,35,6,21, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,254,78,5,104,5,129,18,38,0,53,0,0, |
17,7,2,140,2,5,0,0,0,14,185,0,2,255,225,180,35,31,4,17,37,1,43,53,255,255, |
0,129,254,78,2,136,4,78,18,38,0,85,0,0,17,6,2,140,2,0,0,14,185,0,1,255,94, |
180,36,32,6,21,37,1,43,53,0,0,255,255,0,168,0,0,5,104,6,254,18,38,0,53,0, |
0,17,7,2,151,1,102,0,0,0,21,180,2,31,5,38,2,184,255,169,180,33,39,4,17,37, |
1,43,53,0,43,53,0,255,255,0,56,0,0,2,206,5,211,18,38,0,85,0,0,17,6,1,72,56, |
0,0,21,180,1,32,17,38,1,184,255,251,180,34,40,6,21,37,1,43,53,0,43,53,0,0, |
0,255,255,0,93,255,236,4,248,7,45,18,38,0,54,0,0,17,7,0,116,1,234,1,73,0, |
19,64,11,1,64,5,38,1,91,64,67,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,228,18,38,0,86,0,0,17,7,0,116,1,57,0,0,0,19,64,11,1,56,17,38, |
1,93,56,59,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,93,255,236,4,248,7,26, |
18,38,0,54,0,0,17,7,1,71,1,114,1,71,0,19,64,11,1,65,5,38,1,18,70,64,8,0,37, |
1,43,53,0,43,53,0,0,0,255,255,0,57,255,236,3,182,5,211,18,38,0,86,0,0,17, |
7,1,71,0,172,0,0,0,19,64,11,1,57,17,38,1,0,62,56,10,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,93,254,78,4,248,5,150,18,38,0,54,0,0,17,7,0,120,1,166,0,0, |
0,11,182,1,40,72,64,8,0,37,1,43,53,0,0,0,255,255,0,57,254,78,3,182,4,75,18, |
38,0,86,0,0,17,7,0,120,0,218,0,0,0,11,182,1,15,64,56,10,0,37,1,43,53,0,0, |
0,255,255,0,93,255,236,4,248,6,254,18,38,0,54,0,0,17,7,2,151,1,115,0,0,0, |
19,64,11,1,64,5,38,1,19,66,72,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,211,18,38,0,86,0,0,17,7,1,72,0,173,0,0,0,19,64,11,1,56,17,38, |
1,0,58,64,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,46,254,78,4,180,5,129,18, |
38,0,55,0,0,17,7,2,140,1,139,0,0,0,14,185,0,1,255,254,180,12,8,4,6,37,1,43, |
53,255,255,0,31,254,78,2,42,5,44,16,38,0,87,0,0,17,6,2,140,115,0,2,233,64, |
255,35,64,232,232,72,35,64,231,231,72,35,64,228,228,72,35,64,227,227,72,35, |
64,226,226,72,35,64,221,221,72,35,64,217,217,72,35,64,216,216,72,35,64,215, |
215,72,35,64,214,214,72,35,64,213,213,72,35,64,210,210,72,35,64,206,206,72, |
35,64,205,205,72,35,64,203,203,72,35,64,202,202,72,35,64,199,199,72,35,64, |
196,196,72,35,64,195,195,72,35,64,194,194,72,35,64,192,192,72,35,64,191,191, |
72,35,64,190,190,72,35,64,185,185,72,35,64,184,184,72,35,64,181,181,72,35, |
64,180,180,72,35,64,179,179,72,35,64,178,178,72,35,64,174,174,72,35,64,173, |
173,72,35,64,170,170,72,35,64,169,169,72,35,64,168,168,72,35,64,167,167,72, |
35,64,163,163,72,35,64,162,162,72,35,64,160,160,72,35,64,159,159,72,35,64, |
158,158,72,35,64,157,157,72,35,64,156,156,72,35,64,152,152,72,35,64,149,149, |
72,35,64,148,148,72,35,64,147,147,72,35,64,146,146,72,35,64,145,145,72,35, |
64,144,144,72,35,64,142,142,72,35,64,141,141,72,64,221,35,64,138,138,72,35, |
64,137,137,72,35,64,136,136,72,35,64,134,134,72,35,64,133,133,72,35,64,131, |
131,72,35,64,130,130,72,35,64,127,127,72,35,64,126,126,72,35,64,125,125,72, |
35,64,124,124,72,35,64,123,123,72,35,64,122,122,72,35,64,121,121,72,35,64, |
120,120,72,35,64,116,116,72,35,64,115,115,72,35,64,113,113,72,35,64,112,112, |
72,35,64,111,111,72,35,64,110,110,72,35,64,109,109,72,35,64,106,106,72,35, |
64,105,105,72,35,64,104,104,72,35,64,102,102,72,35,64,101,101,72,35,64,100, |
100,72,35,64,99,99,72,35,64,98,98,72,35,64,95,95,72,35,64,94,94,72,35,64, |
93,93,72,35,64,91,91,72,35,64,90,90,72,35,64,89,89,72,35,128,88,88,72,35, |
64,87,87,72,35,64,84,84,72,35,64,83,83,72,35,64,80,80,72,35,64,79,79,72,35, |
64,78,78,72,35,64,77,77,72,35,184,255,192,179,74,74,72,35,184,255,192,179, |
71,71,72,35,184,255,192,179,63,63,72,35,184,255,192,64,9,60,60,72,35,64,52, |
52,72,35,184,255,192,179,50,50,72,35,184,255,192,179,49,49,72,35,184,255, |
192,64,9,45,45,72,35,64,41,41,72,35,184,255,192,179,39,39,72,35,184,255,192, |
64,9,38,38,72,35,64,30,30,72,35,184,255,192,179,28,28,72,35,184,255,192,64, |
9,27,27,72,35,64,19,19,72,35,184,255,192,179,17,17,72,35,184,255,192,179, |
13,13,72,35,184,255,192,64,15,9,9,72,35,64,8,8,72,1,50,27,23,7,0,37,1,43, |
53,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0,0,255,255,0,46,0,0,4,180, |
6,254,18,38,0,55,0,0,17,7,2,151,1,33,0,0,0,21,180,1,8,5,38,1,184,255,251, |
180,10,16,4,6,37,1,43,53,0,43,53,0,255,255,0,31,255,240,3,17,5,204,16,38, |
0,87,0,0,17,7,2,146,1,204,0,75,0,17,177,1,1,184,1,136,180,27,23,7,0,37,1, |
43,53,0,53,0,0,1,0,46,0,0,4,180,5,129,0,15,0,101,64,62,0,17,16,17,32,17,3, |
9,3,2,5,15,14,6,12,5,14,9,6,127,12,175,12,191,12,3,47,12,143,12,2,12,64,23, |
28,72,12,1,5,90,10,16,6,32,6,2,6,0,12,95,13,4,8,95,1,9,9,5,13,3,5,18,0,63, |
63,18,57,47,51,237,50,16,237,50,1,47,93,51,253,50,204,43,93,113,17,57,43, |
1,24,16,77,228,17,57,95,94,93,49,48,1,17,33,21,33,17,35,17,33,53,33,17,33, |
53,33,21,2,208,1,25,254,231,190,254,233,1,23,254,28,4,134,4,229,254,60,154, |
253,121,2,135,154,1,196,156,156,0,1,0,31,255,240,2,42,5,44,0,30,0,140,64, |
91,40,30,1,40,29,1,40,26,1,40,25,1,12,32,9,15,72,156,12,172,12,2,12,40,9, |
14,72,20,15,15,13,29,25,111,7,127,7,2,7,24,28,7,3,1,70,21,17,143,13,1,0,13, |
16,13,32,13,3,7,13,128,32,1,47,32,1,27,19,80,20,0,15,80,28,127,16,191,16, |
207,16,3,16,16,4,24,22,20,15,4,80,11,22,0,63,237,63,206,51,18,57,47,93,51, |
237,50,16,237,50,1,93,93,47,94,93,113,51,51,237,23,50,47,93,51,51,17,51,17, |
51,49,48,0,43,93,1,43,113,113,113,113,1,21,20,22,51,50,54,55,21,14,1,35,34, |
53,17,35,53,51,17,35,53,51,55,51,21,51,21,35,17,51,21,1,80,51,63,26,49,29, |
41,85,56,216,125,125,125,132,53,120,200,200,200,2,4,248,78,63,8,6,133,11, |
13,245,1,31,131,1,48,131,242,242,131,254,208,131,255,255,0,158,255,236,5, |
41,7,6,18,38,0,56,0,0,17,7,2,153,1,148,0,0,0,19,64,11,1,26,5,38,1,0,35,49, |
5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5,189,18,38,0,88, |
0,0,17,7,1,78,0,246,0,0,0,19,64,11,1,38,17,38,1,13,47,61,36,19,37,1,43,53, |
0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,156,18,38,0,56,0,0,17,7,1,73,1, |
159,1,73,0,19,64,11,1,26,5,38,1,1,27,26,5,20,37,1,43,53,0,43,53,0,0,0,255, |
255,0,133,255,236,3,235,5,83,18,38,0,88,0,0,17,7,1,73,0,240,0,0,0,21,180, |
1,38,17,38,1,184,255,254,180,39,38,36,19,37,1,43,53,0,43,53,0,255,255,0,158, |
255,236,5,41,6,243,18,38,0,56,0,0,17,7,2,155,1,174,0,0,0,19,64,11,1,26,5, |
38,1,0,31,39,5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5, |
230,18,38,0,88,0,0,17,7,1,74,1,11,0,0,0,21,180,1,38,17,38,1,184,255,253,180, |
43,55,36,19,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,7,62,18,38,0, |
56,0,0,17,7,1,76,1,191,0,203,0,23,64,13,2,1,31,5,38,2,1,0,36,26,5,20,37,1, |
43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,235,6,115,18,38,0,88,0, |
0,17,7,1,76,1,20,0,0,0,23,64,13,2,1,43,17,38,2,1,1,48,38,36,19,37,1,43,53, |
53,0,43,53,53,0,0,0,255,255,0,158,255,236,5,41,6,241,18,38,0,56,0,0,17,7, |
2,154,1,157,0,0,0,23,64,13,2,1,26,5,38,2,1,81,26,35,5,20,37,1,43,53,53,0, |
43,53,53,0,0,0,255,255,0,133,255,236,4,30,5,228,18,38,0,88,0,0,17,7,1,79, |
1,5,0,0,0,23,64,13,2,1,38,17,38,2,1,100,38,47,36,19,37,1,43,53,53,0,43,53, |
53,0,0,0,255,255,0,158,254,85,5,41,5,129,16,38,0,56,0,0,17,7,1,77,2,32,0, |
0,0,40,185,0,1,254,103,181,39,39,21,21,37,51,184,255,192,179,21,21,72,51, |
184,255,192,179,20,20,72,51,184,255,192,178,19,19,72,43,43,43,43,53,0,0,255, |
255,0,133,254,85,4,5,4,58,18,38,0,88,0,0,17,7,1,77,2,87,0,0,0,13,185,0,1, |
255,226,180,50,50,14,14,37,43,53,0,255,255,0,9,0,0,7,134,6,254,18,38,0,58, |
0,0,17,7,2,150,2,121,0,0,0,21,180,1,48,5,38,1,184,255,253,180,53,47,15,46, |
37,1,43,53,0,43,53,0,255,255,255,253,0,0,5,204,5,211,18,38,0,90,0,0,17,7, |
1,71,1,148,0,0,0,21,180,1,44,17,38,1,184,255,251,180,49,43,15,42,37,1,43, |
53,0,43,53,0,255,255,0,45,0,0,5,41,6,254,18,38,0,60,0,0,17,7,2,150,1,91,0, |
0,0,21,180,1,10,5,38,1,184,255,251,180,15,9,4,8,37,1,43,53,0,43,53,0,255, |
255,0,5,254,87,3,252,5,211,18,38,0,92,0,0,17,7,1,71,0,182,0,0,0,19,64,11, |
1,33,17,38,1,0,38,32,17,31,37,1,43,53,0,43,53,0,0,0,255,255,0,45,0,0,5,41, |
6,178,18,38,0,60,0,0,17,7,2,152,1,104,0,0,0,23,64,13,2,1,9,5,38,2,1,0,13, |
11,4,8,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,65,0,0,4,163,6,240,18,38, |
0,61,0,0,17,7,2,149,1,160,0,0,0,19,64,11,1,10,5,38,1,74,10,13,1,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,228,18,38,0,93,0,0,17,7,0,116,1, |
53,0,0,0,19,64,11,1,10,17,38,1,93,10,13,0,8,37,1,43,53,0,43,53,0,0,0,255, |
255,0,65,0,0,4,163,6,241,18,38,0,61,0,0,17,7,1,75,1,124,1,37,0,19,64,11,1, |
10,5,38,1,0,10,12,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,204, |
18,38,0,93,0,0,17,7,1,75,0,253,0,0,0,12,182,1,0,10,12,0,8,37,1,43,53,0,0, |
0,255,255,0,65,0,0,4,163,6,254,18,38,0,61,0,0,17,7,2,151,1,56,0,0,0,19,64, |
11,1,10,5,38,1,17,12,18,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182, |
5,211,18,38,0,93,0,0,17,7,1,72,0,156,0,0,0,21,180,1,10,17,38,1,184,255,244, |
180,12,18,0,8,37,1,43,53,0,43,53,0,0,1,0,138,0,0,2,17,5,202,0,19,0,125,185, |
0,5,255,216,179,13,17,72,5,184,255,224,64,56,8,12,72,111,10,1,10,10,0,70, |
0,1,16,1,48,1,240,1,4,8,1,255,21,1,224,21,1,223,21,1,176,21,192,21,2,159, |
21,1,112,21,128,21,2,31,21,1,0,21,1,240,21,1,223,21,1,21,184,255,192,64,18, |
34,37,72,79,21,1,112,21,1,31,21,1,14,80,7,0,0,21,0,63,63,237,1,93,93,113, |
43,113,113,114,114,114,114,114,114,114,114,47,94,93,237,50,47,93,49,48,0, |
43,43,33,35,17,52,62,2,51,50,22,23,21,46,1,35,34,14,2,21,1,62,180,22,59,102, |
81,32,69,26,17,45,18,40,51,29,11,4,180,59,101,75,43,6,6,137,3,5,22,41,60, |
39,0,0,0,0,1,0,192,254,78,3,195,5,174,0,27,0,148,64,107,133,6,1,122,18,138, |
18,2,139,15,1,89,15,105,15,121,15,3,131,13,1,85,13,101,13,117,13,3,54,13, |
1,38,7,1,38,8,1,34,22,50,22,114,22,130,22,4,21,17,37,17,53,17,3,27,212,8, |
228,8,244,8,3,80,8,144,8,2,38,8,54,8,70,8,3,8,10,27,3,13,13,17,19,3,8,95, |
14,159,14,2,14,12,16,80,9,17,17,13,3,81,15,24,127,24,175,24,3,24,13,0,47, |
47,93,237,18,57,47,51,237,50,1,47,113,51,23,51,17,23,51,113,113,113,47,49, |
48,93,0,93,1,93,93,93,93,93,93,93,93,93,1,46,1,35,34,14,2,15,1,51,7,35,3, |
35,19,35,55,51,55,62,3,51,50,22,23,3,164,17,62,31,31,46,33,24,9,26,211,25, |
213,254,180,254,152,27,151,29,12,40,71,109,81,32,82,35,5,32,5,10,19,40,64, |
45,137,131,250,211,5,45,131,152,59,102,76,43,10,10,0,0,0,4,0,4,0,0,5,82,7, |
62,0,26,0,39,0,61,0,67,1,36,64,18,122,64,138,64,2,102,5,118,5,134,5,3,86, |
6,102,6,2,25,184,255,232,64,183,9,17,72,19,24,9,17,72,12,16,14,17,72,10,12, |
1,12,38,9,10,32,8,39,32,7,32,40,130,0,68,66,132,66,2,66,62,50,130,17,175, |
62,191,62,207,62,3,15,17,47,17,2,144,17,1,0,0,32,0,2,15,0,159,0,2,0,62,17, |
17,62,0,3,6,11,5,32,32,10,7,139,7,1,90,7,106,7,122,7,3,7,16,6,32,6,48,6,3, |
32,6,1,6,6,69,80,69,176,69,2,48,69,96,69,144,69,192,69,240,69,5,47,69,1,132, |
10,1,85,10,101,10,117,10,3,10,11,62,62,45,141,112,22,128,22,2,22,22,57,127, |
64,159,64,175,64,191,64,4,64,64,9,13,72,64,8,9,39,38,38,10,5,12,32,3,128, |
57,1,63,57,1,0,57,1,57,7,7,10,0,47,51,47,47,93,93,93,23,51,18,57,47,51,205, |
50,47,43,93,18,57,47,93,237,51,47,1,47,51,93,93,93,93,113,17,51,47,93,113, |
51,93,93,17,18,57,17,51,17,18,23,57,47,47,47,93,113,93,113,93,16,237,16,205, |
93,16,237,16,135,192,192,135,192,192,1,51,49,48,93,43,43,43,93,93,93,1,20, |
6,7,6,7,1,35,3,33,3,35,1,38,39,46,1,53,52,62,2,51,50,30,2,3,46,3,39,14,3, |
7,3,33,3,52,46,2,35,34,14,2,21,20,30,1,23,22,23,51,50,62,2,3,53,55,51,21, |
5,3,158,38,33,16,18,2,29,195,161,253,126,162,198,2,36,21,18,33,38,38,66,88, |
50,50,88,66,38,158,16,29,22,15,1,2,14,23,29,15,180,2,15,131,21,36,49,28,29, |
49,36,21,21,36,24,21,24,9,28,49,36,21,247,217,207,254,202,5,112,45,79,30, |
15,11,251,68,1,115,254,141,4,185,12,17,30,79,45,45,79,59,34,34,59,79,253, |
254,36,74,60,41,4,4,41,62,73,36,254,95,3,119,25,44,33,19,19,33,44,25,26,44, |
35,10,8,1,19,35,44,1,35,16,181,23,174,0,255,255,0,87,255,236,4,115,7,62,18, |
38,0,68,0,0,16,39,1,76,1,20,255,85,17,7,0,116,1,99,1,90,0,35,64,14,3,2,101, |
16,38,4,26,106,109,3,36,37,3,2,184,255,212,180,76,66,3,36,37,1,43,53,53,43, |
53,0,43,53,53,0,0,0,255,255,0,24,0,0,7,168,6,240,18,38,0,134,0,0,17,7,2,149, |
3,228,0,0,0,21,180,2,27,5,38,2,184,1,32,180,27,30,4,14,37,1,43,53,0,43,53, |
0,255,255,0,66,255,236,6,194,5,228,18,38,0,166,0,0,17,7,0,116,2,175,0,0,0, |
19,64,11,3,89,17,38,3,73,89,92,25,61,37,1,43,53,0,43,53,0,0,0,255,255,0,71, |
255,203,5,244,6,240,18,38,0,152,0,0,17,7,2,149,2,75,0,0,0,19,64,11,3,52,5, |
38,3,73,52,55,10,24,37,1,43,53,0,43,53,0,0,0,255,255,0,44,255,218,4,180,5, |
228,18,38,0,184,0,0,17,7,0,116,1,178,0,0,0,19,64,11,3,46,17,38,3,94,46,49, |
8,19,37,1,43,53,0,43,53,0,0,0,0,1,0,0,4,177,2,150,5,211,0,9,0,66,64,14,118, |
9,134,9,2,120,8,136,8,2,128,0,1,0,184,255,192,64,27,11,15,72,0,191,6,1,6, |
4,142,64,8,148,128,6,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93,51,26,253,26, |
237,1,47,93,204,43,93,49,48,93,93,1,21,35,39,35,7,35,53,19,51,2,150,105,219, |
2,232,104,234,204,4,197,20,169,169,20,1,14,0,0,1,0,0,4,177,2,150,5,211,0, |
9,0,66,64,14,118,0,134,0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,27,11,15, |
72,8,64,191,2,1,2,7,3,148,128,6,142,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93, |
237,26,237,50,1,47,93,26,204,43,93,49,48,93,93,1,35,3,53,51,23,51,55,51,21, |
1,182,204,234,104,232,2,219,105,4,177,1,14,20,169,169,20,0,0,1,0,51,4,212, |
2,88,5,83,0,3,0,81,64,59,4,1,1,228,1,244,1,2,1,164,0,1,91,0,107,0,2,52,0, |
68,0,2,0,2,32,18,25,72,2,142,1,64,28,33,72,47,1,1,2,15,1,63,1,175,1,191,1, |
4,1,64,22,26,72,1,64,14,17,72,1,0,47,43,43,93,95,113,43,237,43,1,47,93,93, |
93,47,93,113,49,48,1,33,53,33,2,88,253,219,2,37,4,212,127,0,1,255,221,4,177, |
2,119,5,230,0,21,0,73,64,51,133,14,1,133,8,1,31,17,79,17,127,17,175,17,223, |
17,5,239,17,1,17,64,5,64,29,60,72,5,16,80,5,96,5,2,5,149,128,11,143,15,0, |
47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,237,113,50,1,47,43,26,204,93,113, |
49,48,0,93,93,1,34,46,2,39,51,30,3,51,50,62,2,55,51,14,3,1,41,74,116,84,50, |
8,117,8,39,56,72,42,42,71,56,38,8,117,9,50,83,116,4,177,51,85,112,61,43,59, |
36,15,16,36,59,42,61,112,85,51,0,1,0,156,5,32,1,80,5,204,0,3,0,23,64,12,3, |
134,0,64,14,17,72,0,0,83,1,0,0,63,237,1,47,43,237,49,48,19,53,51,21,156,180, |
5,32,172,172,0,0,2,0,51,4,144,2,23,6,115,0,19,0,39,0,89,185,0,18,255,232, |
64,14,9,14,72,12,24,9,14,72,8,24,9,14,72,2,184,255,232,64,42,9,14,72,20,130, |
64,0,192,30,130,95,10,1,10,25,141,15,15,31,15,2,15,35,141,15,5,47,5,63,5, |
79,5,127,5,159,5,191,5,239,5,8,5,0,47,93,237,220,93,237,1,47,93,237,26,220, |
26,237,49,48,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,23,38,66,88,50,50,88,66,38,38,66, |
88,50,50,88,66,38,108,21,36,49,28,29,49,36,21,21,36,49,29,28,49,36,21,5,130, |
50,88,66,38,38,66,88,50,50,88,65,38,38,65,88,50,28,49,36,21,21,36,49,28,29, |
49,38,21,21,38,49,0,0,0,0,1,0,80,254,85,1,174,0,0,0,23,0,76,64,55,14,24,9, |
13,72,9,24,9,13,72,5,32,9,17,72,12,17,132,15,0,31,0,2,95,0,191,0,2,0,6,11, |
64,7,10,72,11,20,141,16,3,1,32,3,80,3,96,3,112,3,176,3,192,3,6,3,0,47,93, |
113,237,47,43,1,47,205,93,113,237,50,49,48,43,43,43,1,14,1,35,34,38,53,52, |
62,2,55,51,14,3,21,20,22,51,50,54,55,1,174,28,71,40,105,106,34,48,53,20,133, |
25,52,43,27,49,45,29,58,28,254,112,12,15,102,85,47,79,61,42,11,14,45,59,70, |
39,42,48,13,11,0,1,255,233,4,177,2,182,5,189,0,27,2,77,185,0,26,255,232,64, |
182,9,17,72,12,24,9,17,72,41,29,1,25,29,41,29,57,29,89,29,105,29,5,29,64, |
229,232,72,29,64,217,220,72,11,29,1,208,169,29,185,29,201,29,3,155,29,1,9, |
29,57,29,2,185,29,201,29,217,29,3,29,64,195,198,72,155,29,171,29,2,137,29, |
1,123,29,1,73,29,1,137,29,185,29,2,29,64,171,175,72,6,29,54,29,2,158,153, |
29,1,125,29,141,29,2,111,29,1,45,29,61,29,77,29,3,27,29,1,13,29,1,237,29, |
253,29,2,29,128,136,139,72,137,29,153,29,2,91,29,107,29,123,29,3,29,192,127, |
130,72,9,29,1,249,29,1,235,29,1,201,29,217,29,2,171,29,187,29,2,153,29,1, |
22,29,38,29,102,29,118,29,134,29,5,4,29,1,110,29,184,255,64,64,96,101,109, |
72,148,29,1,112,29,128,29,2,82,29,98,29,2,64,29,1,18,29,34,29,50,29,3,4,29, |
1,228,29,244,29,2,214,29,1,196,29,1,176,29,1,162,29,1,128,29,144,29,2,82, |
29,98,29,114,29,3,36,29,52,29,68,29,3,6,29,22,29,2,246,29,1,210,29,226,29, |
2,192,29,1,146,29,162,29,178,29,3,100,29,116,29,132,29,3,29,184,255,192,64, |
9,60,64,72,2,29,1,59,1,29,184,255,128,64,57,53,58,72,164,29,180,29,2,144, |
29,1,100,29,116,29,132,29,3,48,29,64,29,80,29,3,4,29,20,29,36,29,3,208,29, |
224,29,2,164,29,180,29,196,29,3,112,29,128,29,2,148,29,164,29,228,29,3,29, |
184,255,192,64,19,26,31,72,128,29,1,84,29,100,29,116,29,3,29,64,7,10,72,23, |
184,255,128,64,9,36,39,72,148,23,164,23,2,23,184,255,128,64,23,30,33,72,68, |
23,1,48,23,1,2,0,23,16,23,32,23,3,208,23,224,23,2,23,184,255,192,64,43,13, |
19,72,15,23,1,23,9,22,22,5,143,64,15,14,31,14,2,255,14,1,14,64,16,19,72,14, |
128,19,143,8,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,50,237,26,221,43,93,113, |
26,237,51,47,1,47,204,93,43,93,113,95,113,113,43,113,43,43,93,93,43,93,113, |
113,113,114,114,114,114,114,43,95,94,93,43,93,93,93,93,93,113,113,113,113, |
113,113,113,113,113,114,114,114,114,114,114,43,94,93,93,93,93,93,93,93,113, |
43,113,113,43,113,114,114,114,114,114,114,94,93,43,93,113,113,113,113,43, |
113,114,114,114,94,93,43,43,93,113,49,48,43,43,1,34,46,2,35,34,6,7,35,62, |
3,51,50,30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45, |
74,59,44,84,78,69,30,54,55,8,92,5,20,43,74,4,177,37,45,37,62,57,45,95,78, |
50,37,45,37,63,56,44,95,78,51,0,0,0,2,0,22,4,177,3,25,5,228,0,5,0,11,0,111, |
64,82,164,10,1,102,10,1,154,8,170,8,2,98,4,162,4,2,98,3,1,154,2,170,2,2,10, |
159,6,1,15,6,31,6,127,6,223,6,4,7,6,4,64,63,0,79,0,143,0,175,0,191,0,207, |
0,6,0,64,30,41,72,0,64,23,26,72,0,8,2,149,128,6,15,0,47,0,63,0,127,0,239, |
0,5,0,0,47,93,50,26,237,50,1,47,43,43,93,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,93,19,53,19,51,21,1,51,53,19,51,21,1,22,217,207,254,182,253,217, |
207,254,182,4,177,20,1,31,29,254,234,20,1,31,29,254,234,0,0,1,0,205,4,194, |
1,225,6,7,0,5,0,64,64,43,2,16,12,17,72,41,2,1,10,5,26,5,42,5,3,3,43,3,1,3, |
64,0,2,128,132,0,148,0,2,112,0,1,2,16,0,32,0,64,0,96,0,4,0,0,47,93,95,93, |
93,26,205,1,47,26,205,93,49,48,95,93,93,43,19,53,19,51,21,3,205,69,207,201, |
4,194,33,1,36,37,254,224,0,3,0,29,4,176,2,139,6,65,0,5,0,9,0,13,0,83,64,53, |
2,16,11,17,72,10,5,26,5,42,5,3,47,4,1,4,47,1,1,1,1,6,192,13,208,13,2,13,10, |
192,9,208,9,2,9,6,11,7,144,6,2,0,0,10,192,6,1,15,6,63,6,2,6,0,47,93,93,51, |
51,47,205,16,237,50,1,47,205,93,47,205,93,18,57,47,113,205,93,49,48,93,43, |
19,53,19,51,21,3,37,53,51,21,33,53,51,21,250,69,187,181,254,216,150,1,66, |
150,4,176,33,1,112,37,254,148,31,172,172,172,172,0,0,255,255,0,4,0,0,5,82, |
5,131,16,38,0,36,0,0,17,7,1,80,255,108,255,124,0,94,179,2,0,24,1,184,255, |
10,181,24,24,5,5,37,28,184,255,192,179,36,36,72,28,184,255,192,179,30,30, |
72,28,184,255,192,179,24,24,72,28,184,255,192,179,21,21,72,28,184,255,192, |
179,18,18,72,28,184,255,192,179,15,15,72,28,184,255,192,64,11,12,12,72,28, |
64,11,11,72,2,23,3,0,63,53,1,43,43,43,43,43,43,43,43,43,93,53,0,1,0,187,1, |
190,1,126,2,154,0,3,2,10,179,3,134,0,5,184,255,128,64,12,229,233,72,6,5,22, |
5,2,246,5,1,5,184,255,128,64,33,222,225,72,150,5,166,5,2,116,5,132,5,2,86, |
5,102,5,2,68,5,1,38,5,54,5,2,2,5,18,5,2,211,5,184,255,128,64,22,207,210,72, |
198,5,214,5,2,180,5,1,150,5,166,5,2,116,5,132,5,2,5,184,255,192,64,36,195, |
199,72,4,5,20,5,2,214,5,230,5,246,5,3,194,5,1,148,5,164,5,180,5,3,118,5,134, |
5,2,84,5,100,5,2,5,184,255,192,64,34,174,181,72,164,5,180,5,196,5,3,70,5, |
86,5,118,5,134,5,150,5,5,52,5,1,38,5,1,4,5,20,5,2,161,5,184,255,192,179,157, |
160,72,5,184,255,192,64,37,152,155,72,100,5,116,5,2,54,5,70,5,86,5,3,36,5, |
1,6,5,22,5,2,244,5,1,214,5,230,5,2,178,5,194,5,2,5,184,255,128,64,28,135, |
138,72,86,5,102,5,2,36,5,52,5,68,5,3,2,5,18,5,2,212,5,228,5,244,5,3,5,184, |
255,192,64,23,119,124,72,82,5,98,5,2,1,32,5,48,5,64,5,3,4,5,20,5,2,112,5, |
184,255,128,64,9,103,111,72,68,5,84,5,2,5,184,255,192,179,99,102,72,5,184, |
255,128,179,92,95,72,5,184,255,192,179,87,91,72,5,184,255,128,64,21,81,86, |
72,36,5,52,5,68,5,3,228,5,1,176,5,192,5,208,5,3,5,184,255,192,64,16,67,70, |
72,48,5,1,36,5,1,0,5,16,5,2,60,5,184,255,192,64,12,56,59,72,187,5,1,128,5, |
144,5,2,5,184,255,192,64,41,45,48,72,11,5,1,208,5,224,5,2,164,5,180,5,196, |
5,3,32,5,48,5,2,2,0,5,16,5,2,240,5,1,159,5,175,5,2,0,5,1,5,184,255,192,181, |
13,17,72,0,155,1,0,47,237,1,43,93,93,93,113,95,113,113,113,114,43,114,114, |
43,94,93,93,93,43,93,93,113,43,43,43,43,114,43,94,93,93,95,93,43,93,113,113, |
113,43,113,113,113,114,114,114,114,43,43,94,93,93,93,93,93,43,113,113,113, |
113,113,114,43,114,114,114,114,43,94,93,93,93,93,93,93,43,93,113,43,47,237, |
49,48,19,53,51,21,187,195,1,190,220,220,0,0,255,255,255,245,0,0,5,238,5,131, |
16,39,0,40,0,240,0,0,17,7,1,80,255,40,255,124,0,49,64,10,1,14,3,1,16,15,1, |
0,15,1,184,255,113,64,19,15,15,1,1,37,0,208,0,1,191,0,1,47,0,1,47,0,1,0,16, |
93,93,93,93,53,43,93,93,53,0,63,53,0,0,0,255,255,255,242,0,0,6,13,5,131,16, |
39,0,43,0,237,0,0,17,7,1,80,255,37,255,124,0,95,185,0,19,255,192,179,21,21, |
72,19,184,255,192,179,20,20,72,19,184,255,192,179,19,19,72,19,184,255,192, |
179,17,17,72,19,184,255,192,64,13,14,14,72,1,14,3,1,16,15,1,0,15,1,184,255, |
113,64,19,15,15,5,5,37,0,207,0,1,191,0,1,111,0,1,47,0,1,0,16,93,93,93,93, |
53,43,93,93,53,0,63,53,1,43,43,43,43,43,0,255,255,255,232,0,0,2,85,5,131, |
16,39,0,44,0,217,0,0,17,7,1,80,255,27,255,124,0,92,185,0,11,255,192,179,17, |
17,72,11,184,255,192,64,23,12,12,72,11,64,11,11,72,11,64,9,9,72,1,6,3,1,16, |
7,1,0,7,1,184,255,102,64,28,7,7,1,1,37,0,128,0,1,127,0,1,111,0,1,95,0,1,79, |
0,1,47,0,1,47,0,1,0,16,93,93,93,93,93,93,93,53,43,93,93,53,0,63,53,1,43,43, |
43,43,255,255,255,187,255,236,5,211,5,150,16,38,0,50,252,0,17,7,1,80,254, |
238,255,124,0,39,64,10,2,42,3,2,192,40,1,0,40,1,184,255,94,64,11,40,40,10, |
10,37,1,0,47,0,1,0,16,93,53,53,43,93,93,53,0,63,53,0,0,0,255,255,0,65,0,0, |
6,171,5,131,16,39,0,60,1,130,0,0,17,7,1,80,255,116,255,124,5,192,64,21,16, |
64,233,233,72,16,64,229,229,72,16,64,227,227,72,16,64,226,226,72,16,184,255, |
192,179,224,224,72,16,184,255,192,64,19,222,222,72,16,64,220,220,72,16,64, |
219,219,72,16,64,216,216,72,16,184,255,192,179,215,215,72,16,184,255,192, |
64,19,211,211,72,16,64,207,207,72,16,64,206,206,72,16,64,205,205,72,16,184, |
255,192,179,204,204,72,16,184,255,192,64,19,202,202,72,16,64,199,199,72,16, |
64,186,186,72,16,64,184,184,72,16,184,255,192,179,183,183,72,16,184,255,192, |
64,14,182,182,72,16,64,179,179,72,16,64,177,177,72,16,184,255,192,64,19,172, |
172,72,16,64,166,166,72,16,64,164,164,72,16,64,163,163,72,16,184,255,192, |
64,24,161,161,72,16,64,156,156,72,16,128,153,153,72,16,64,152,152,72,16,64, |
151,151,72,16,184,255,192,179,149,149,72,16,184,255,128,179,148,148,72,16, |
184,255,128,179,147,147,72,16,184,255,192,179,146,146,72,16,184,255,128,179, |
145,145,72,16,184,255,192,179,144,144,72,16,184,255,128,179,141,141,72,16, |
184,255,128,179,140,140,72,16,184,255,192,179,139,139,72,16,184,255,128,179, |
138,138,72,16,184,255,192,179,137,137,72,16,184,255,192,179,136,136,72,16, |
184,255,192,179,135,135,72,16,184,255,128,179,134,134,72,16,184,255,192,179, |
133,133,72,16,184,255,128,179,131,131,72,16,184,255,192,179,130,130,72,16, |
184,255,0,179,129,129,72,16,184,255,0,179,128,128,72,16,184,254,192,179,127, |
127,72,16,184,255,0,179,126,126,72,16,184,255,0,179,125,125,72,16,184,255, |
64,179,124,124,72,16,184,255,64,179,123,123,72,16,184,255,64,179,122,122, |
72,16,184,255,0,179,121,121,72,16,184,254,192,179,120,120,72,16,184,255,0, |
179,119,119,72,16,184,255,0,179,118,118,72,16,184,255,64,179,117,117,72,16, |
184,255,0,179,116,116,72,16,184,255,64,179,115,115,72,16,184,255,0,179,114, |
114,72,16,184,255,64,179,113,113,72,16,184,255,64,179,112,112,72,16,184,255, |
64,179,111,111,72,16,184,255,128,179,110,110,72,16,184,255,64,179,109,109, |
72,16,184,255,128,179,108,108,72,16,184,255,0,179,107,107,72,16,184,255,64, |
179,106,106,72,16,184,255,0,179,105,105,72,16,184,255,64,179,104,104,72,16, |
184,255,64,179,103,103,72,16,184,255,64,179,102,102,72,16,184,255,128,179, |
101,101,72,16,184,255,64,179,100,100,72,16,184,255,64,179,99,99,72,16,184, |
255,0,179,98,98,72,16,184,255,64,179,97,97,72,16,184,255,64,179,96,96,72, |
16,184,255,64,179,95,95,72,16,184,255,64,179,94,94,72,16,184,255,64,179,93, |
93,72,16,184,255,128,179,92,92,72,16,184,255,64,179,91,91,72,16,184,255,128, |
179,90,90,72,16,184,255,64,179,89,89,72,16,184,255,128,179,88,88,72,16,184, |
255,64,179,87,87,72,16,184,255,64,179,86,86,72,16,184,255,64,179,85,85,72, |
16,184,255,64,179,84,84,72,16,184,255,64,179,83,83,72,16,184,255,128,179, |
82,82,72,16,184,255,192,179,81,81,72,16,184,255,128,179,80,80,72,16,184,255, |
128,179,79,79,72,16,184,255,64,179,78,78,72,16,184,255,64,179,77,77,72,16, |
184,255,64,179,76,76,72,16,184,255,128,179,75,75,72,16,184,255,128,179,74, |
74,72,16,184,255,128,179,73,73,72,16,184,255,64,179,72,72,72,16,184,255,128, |
179,71,71,72,16,184,255,192,179,70,70,72,16,184,255,128,179,69,69,72,16,184, |
255,192,179,68,68,72,16,184,255,192,179,67,67,72,16,184,255,128,179,66,66, |
72,16,184,255,64,179,65,65,72,16,184,255,128,179,64,64,72,16,184,255,128, |
179,63,63,72,16,184,255,128,179,62,62,72,16,184,255,192,179,61,61,72,16,184, |
255,192,179,60,60,72,16,184,255,192,179,59,59,72,16,184,255,128,179,58,58, |
72,16,184,255,128,179,57,57,72,16,184,255,128,179,56,56,72,16,184,255,128, |
179,55,55,72,16,184,255,128,179,54,54,72,16,184,255,192,179,53,53,72,16,184, |
255,192,179,52,52,72,16,184,255,128,179,51,51,72,16,184,255,192,179,50,50, |
72,16,184,255,128,179,49,49,72,16,184,255,128,179,48,48,72,16,184,255,128, |
179,47,47,72,16,184,255,192,179,46,46,72,16,184,255,128,179,45,45,72,16,184, |
255,128,179,44,44,72,16,184,255,128,179,43,43,72,16,184,255,192,179,42,42, |
72,16,184,255,192,179,41,41,72,16,184,255,192,179,40,40,72,16,184,255,192, |
179,39,39,72,16,184,255,128,179,38,38,72,16,184,255,128,179,37,37,72,16,184, |
255,128,179,36,36,72,16,184,255,192,179,35,35,72,16,184,255,128,179,34,34, |
72,16,184,255,192,179,33,33,72,16,184,255,192,179,32,32,72,16,184,255,192, |
179,31,31,72,16,184,255,192,179,30,30,72,16,184,255,192,179,29,29,72,16,184, |
255,192,179,28,28,72,16,184,255,192,179,27,27,72,16,184,255,192,179,26,26, |
72,16,184,255,192,179,25,25,72,16,184,255,192,179,24,24,72,16,184,255,128, |
179,23,23,72,16,184,255,192,179,22,22,72,16,184,255,192,179,21,21,72,16,184, |
255,192,179,17,17,72,16,184,255,128,179,16,16,72,16,184,255,192,179,15,15, |
72,16,184,255,192,179,14,14,72,16,184,255,192,64,30,12,12,72,16,64,11,11, |
72,1,11,3,1,128,12,1,112,12,1,96,12,1,64,12,1,16,12,1,0,12,1,184,255,166, |
64,13,12,12,4,4,37,0,176,0,1,0,0,1,0,16,93,93,53,43,93,93,93,93,93,93,53, |
0,63,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,187,0,0, |
5,173,5,150,16,38,1,114,10,0,17,7,1,80,254,238,255,124,0,68,64,15,65,64,19, |
19,72,1,60,3,1,144,58,1,16,58,1,184,255,62,64,28,58,58,53,53,37,0,159,0,1, |
95,0,1,31,0,1,223,0,1,175,0,1,159,0,1,31,0,1,0,16,93,93,93,93,113,113,113, |
53,43,93,93,53,0,63,53,1,43,0,0,255,255,255,176,0,0,2,30,6,65,16,38,1,130, |
0,0,17,6,1,81,147,0,2,60,64,11,29,64,227,227,72,29,64,226,226,72,29,184,255, |
192,179,223,223,72,29,184,255,192,179,220,220,72,29,184,255,192,64,19,219, |
219,72,29,64,213,213,72,29,64,212,212,72,29,64,211,211,72,29,184,255,192, |
179,207,207,72,29,184,255,192,179,206,206,72,29,184,255,192,64,19,205,205, |
72,29,64,200,200,72,29,64,199,199,72,29,64,198,198,72,29,184,255,192,64,14, |
192,192,72,29,64,182,182,72,29,64,177,177,72,29,184,255,192,179,175,175,72, |
29,184,255,192,64,19,174,174,72,29,64,168,168,72,29,64,167,167,72,29,64,164, |
164,72,29,184,255,192,179,161,161,72,29,184,255,192,64,19,160,160,72,29,64, |
155,155,72,29,64,154,154,72,29,64,153,153,72,29,184,255,192,179,152,152,72, |
29,184,255,192,64,19,151,151,72,29,64,141,141,72,29,64,132,132,72,29,64,131, |
131,72,29,184,255,192,64,9,129,129,72,29,64,119,119,72,29,184,255,192,64, |
14,115,115,72,29,64,110,110,72,29,64,109,109,72,29,184,255,192,64,19,106, |
106,72,29,64,101,101,72,29,64,100,100,72,29,64,96,96,72,29,184,255,192,179, |
94,94,72,29,184,255,192,64,19,93,93,72,29,64,87,87,72,29,64,86,86,72,29,64, |
85,85,72,29,184,255,192,179,84,84,72,29,184,255,192,64,9,79,79,72,29,64,74, |
74,72,29,184,255,192,64,24,61,61,72,29,64,56,56,72,29,64,55,55,72,29,64,54, |
54,72,29,64,51,51,72,29,184,255,192,179,50,50,72,29,184,255,192,179,49,49, |
72,29,184,255,192,64,19,48,48,72,29,64,42,42,72,29,64,41,41,72,29,64,40,40, |
72,29,184,255,192,179,36,36,72,29,184,255,192,179,35,35,72,29,184,255,192, |
64,19,34,34,72,29,64,29,29,72,29,64,24,24,72,29,64,23,23,72,29,184,255,192, |
179,21,21,72,29,184,255,192,179,17,17,72,29,184,255,192,64,14,16,16,72,29, |
64,9,9,72,29,64,8,8,72,29,184,255,192,64,12,7,7,72,3,2,1,14,17,38,3,2,1,184, |
255,220,180,20,26,5,13,37,1,43,53,53,53,0,43,53,53,53,1,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,0,4,0,0,5,82,5,129, |
18,6,0,36,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,0,1,0,168,0,1,4, |
47,5,130,0,5,0,56,64,40,3,90,0,4,16,4,64,4,3,4,16,0,48,0,80,0,3,0,0,16,0, |
32,0,64,0,96,0,128,0,160,0,7,7,0,2,95,5,3,3,18,0,63,63,237,1,47,94,93,113, |
47,93,237,49,48,1,21,33,17,35,17,4,47,253,56,191,5,130,156,251,27,5,129,0, |
2,0,61,0,0,5,26,5,129,0,5,0,18,0,176,64,26,106,7,122,7,138,7,3,101,17,117, |
17,133,17,3,89,8,1,86,16,1,6,24,13,17,72,18,184,255,232,64,64,13,17,72,132, |
2,1,70,2,102,2,118,2,3,139,1,1,73,1,105,1,121,1,3,2,1,12,12,0,6,95,3,1,16, |
3,1,15,3,1,175,3,207,3,223,3,255,3,4,79,3,127,3,2,48,3,1,31,3,1,3,18,128, |
0,1,0,184,255,192,64,29,21,30,72,0,48,20,1,47,20,1,0,3,6,3,18,95,5,18,12, |
32,19,22,72,153,12,1,12,1,3,0,63,51,93,43,63,237,23,50,1,93,93,47,43,93,51, |
47,93,93,93,93,113,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93,43,43,93, |
93,93,93,49,48,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,62,2,5,217,1,254,251, |
35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12,141, |
156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,255,255,0,168,0,0,4,254,5,129, |
18,6,0,40,0,0,255,255,0,65,0,0,4,163,5,129,18,6,0,61,0,0,255,255,0,168,0, |
0,5,32,5,129,18,6,0,43,0,0,0,3,0,97,255,236,5,215,5,150,0,19,0,39,0,43,0, |
179,64,130,105,12,1,102,17,1,89,22,1,86,32,1,86,28,1,26,23,90,23,2,21,27, |
85,27,2,9,42,1,6,43,1,10,37,26,37,90,37,3,5,33,21,33,85,33,3,9,43,42,30,0, |
91,15,20,1,59,207,20,239,20,2,0,20,1,239,20,255,20,2,176,20,1,111,20,1,48, |
20,1,31,20,1,0,20,16,20,32,20,64,20,80,20,160,20,6,7,20,30,91,175,10,191, |
10,2,32,10,1,15,10,31,10,2,10,43,95,40,40,35,25,95,15,4,35,95,5,19,128,45, |
1,32,45,1,93,93,0,63,237,63,237,18,57,47,237,1,47,93,93,93,237,47,94,93,113, |
113,113,113,113,114,114,94,93,237,18,57,57,49,48,94,93,93,93,93,93,93,93, |
93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,37,33,21,33,5,215,95,180,254,252,165,174, |
254,250,174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127, |
63,65,127,189,123,132,191,123,59,252,226,2,75,253,181,2,199,165,254,242,192, |
104,109,195,1,12,159,165,1,10,187,101,102,188,254,246,163,127,208,148,80, |
80,148,208,127,127,211,153,85,86,153,212,208,160,0,0,0,255,255,0,189,0,0, |
1,124,5,129,18,6,0,44,0,0,255,255,0,168,0,0,5,63,5,129,18,6,0,46,0,0,0,1, |
0,10,0,1,5,78,5,130,0,16,0,202,64,11,116,16,132,16,2,123,15,139,15,2,13,184, |
255,232,182,14,17,72,54,13,1,12,184,255,240,64,127,13,17,72,2,16,13,17,72, |
1,24,14,17,72,57,1,1,111,18,1,48,18,1,47,18,1,0,18,1,21,16,37,16,53,16,3, |
6,16,1,230,16,246,16,2,16,26,15,42,15,58,15,3,9,15,1,233,15,249,15,2,15,7, |
7,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,13,175,14,191,14,2,14,26,1,42, |
1,58,1,3,9,1,1,233,1,249,1,2,1,16,0,32,0,48,0,3,111,0,1,0,0,48,0,2,0,118, |
7,134,7,2,7,15,3,14,0,18,0,63,50,63,51,93,1,47,93,93,113,50,93,113,113,47, |
93,51,93,113,113,57,61,47,51,93,113,113,51,93,113,113,93,93,93,93,49,48,93, |
43,43,43,93,43,93,93,37,35,1,46,1,39,38,39,6,7,14,1,7,1,35,1,51,5,78,201, |
254,124,17,29,12,14,12,13,14,12,30,15,254,122,201,2,63,198,1,3,224,47,89, |
35,41,37,39,41,35,89,45,252,32,5,129,0,255,255,0,168,0,0,6,2,5,129,18,6,0, |
48,0,0,255,255,0,168,0,0,5,32,5,129,18,6,0,49,0,0,0,3,0,90,0,0,4,217,5,129, |
0,3,0,7,0,11,0,75,64,49,82,3,1,10,9,5,3,95,6,1,15,6,31,6,175,6,191,6,4,6, |
2,16,5,48,5,2,32,5,64,5,112,5,160,5,4,5,10,95,11,11,0,7,95,6,18,3,95,0,3, |
0,63,237,63,237,17,57,47,237,1,47,93,113,51,47,93,113,51,18,57,57,49,48,113, |
19,33,21,33,1,21,33,53,1,21,33,53,125,4,57,251,199,4,92,251,129,3,228,252, |
183,5,129,156,251,183,156,156,2,133,154,154,0,0,0,255,255,0,97,255,236,5, |
215,5,150,18,6,0,50,0,0,0,1,0,168,0,0,5,32,5,129,0,7,0,79,64,40,3,90,0,4, |
16,4,64,4,3,7,4,7,90,64,111,0,127,0,143,0,191,0,4,0,0,9,128,32,9,1,32,9,160, |
9,176,9,192,9,4,9,184,255,192,64,10,14,17,72,2,95,5,3,4,0,18,0,63,50,63,237, |
1,43,93,113,26,16,204,47,93,26,237,47,94,93,237,49,48,33,17,33,17,35,17,33, |
17,4,97,253,6,191,4,120,4,224,251,32,5,129,250,127,255,255,0,168,0,0,4,234, |
5,129,18,6,0,51,0,0,0,1,0,108,0,0,4,161,5,129,0,12,0,188,64,135,169,3,1,105, |
9,1,116,9,132,9,164,9,3,148,8,164,8,2,87,8,103,8,2,145,7,1,84,7,100,7,2,146, |
10,162,10,2,116,10,132,10,2,70,10,86,10,102,10,3,57,3,185,3,2,249,3,1,103, |
3,1,168,8,1,103,8,1,8,100,2,1,39,2,1,175,6,1,2,6,2,6,1,208,11,1,0,11,16,11, |
48,11,80,11,96,11,128,11,6,7,11,70,7,1,11,7,1,7,3,3,10,175,1,191,1,2,32,1, |
1,15,1,1,1,3,7,95,9,2,8,3,0,4,3,1,10,95,0,18,0,63,237,50,63,18,23,57,237, |
50,1,47,93,93,93,51,51,47,51,113,113,47,94,93,93,18,57,57,47,47,93,113,113, |
51,113,113,113,113,114,49,48,93,93,93,93,93,93,93,93,113,93,51,53,9,1,53, |
33,21,33,1,21,1,33,21,108,2,26,253,247,3,231,252,240,1,202,254,22,3,109,162, |
2,67,1,251,161,156,254,67,124,253,240,156,0,255,255,0,46,0,0,4,180,5,129, |
18,6,0,55,0,0,255,255,0,45,0,0,5,41,5,129,18,6,0,60,0,0,0,3,0,117,255,245, |
5,238,5,139,0,29,0,40,0,51,0,180,185,0,28,255,240,179,12,15,72,17,184,255, |
240,179,12,15,72,27,184,255,240,179,12,15,72,18,184,255,240,64,72,12,15,72, |
41,90,11,15,123,15,171,15,3,15,8,30,90,4,0,116,0,164,0,3,0,35,24,7,90,47, |
21,4,8,1,20,8,36,8,68,8,116,8,164,8,244,8,6,8,20,53,68,53,2,0,53,1,132,53, |
164,53,196,53,244,53,4,112,53,1,2,96,53,1,53,184,255,192,64,24,10,13,72,35, |
46,96,10,6,10,34,49,96,20,24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57, |
47,47,17,51,16,237,50,17,51,16,237,50,1,43,93,95,93,93,113,113,47,93,113, |
51,51,253,50,50,220,93,237,16,220,93,237,49,48,0,43,43,43,43,1,20,14,2,43, |
1,21,35,53,35,34,46,2,53,52,62,2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17, |
51,50,62,2,37,20,30,2,59,1,17,35,34,6,5,238,64,131,197,133,83,185,83,133, |
197,131,64,67,133,201,135,72,185,71,135,202,133,67,192,185,183,48,56,92,136, |
89,43,252,7,43,89,136,92,56,52,182,182,2,224,105,188,143,84,227,227,84,143, |
188,105,113,185,131,72,182,182,72,131,185,117,187,180,253,22,53,98,140,88, |
88,140,98,53,2,234,180,255,255,0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,145, |
0,0,6,30,5,129,0,35,0,203,64,127,90,31,106,31,2,85,30,101,30,2,90,4,106,4, |
2,90,5,106,5,2,74,22,1,69,13,1,3,25,90,100,28,1,132,28,148,28,2,28,19,35, |
90,0,10,90,107,7,1,139,7,155,7,2,7,16,219,0,1,4,0,100,0,132,0,3,219,0,1,4, |
0,52,0,68,0,100,0,132,0,148,0,180,0,196,0,8,7,0,4,37,36,37,52,37,68,37,132, |
37,196,37,212,37,7,228,37,244,37,2,160,37,1,132,37,148,37,2,96,37,112,37, |
2,84,37,1,64,37,1,2,37,184,255,192,64,18,9,12,72,34,2,96,19,239,15,1,15,15, |
26,17,8,3,0,18,0,63,63,51,51,57,47,93,51,237,50,1,43,95,93,93,93,93,93,93, |
113,47,94,93,93,113,113,51,220,93,113,237,16,253,50,220,93,113,237,49,48, |
95,93,93,93,0,93,1,93,0,93,33,17,35,34,46,2,53,17,51,17,20,30,2,59,1,17,51, |
17,51,50,62,2,53,17,51,17,20,14,2,43,1,17,2,251,83,133,201,134,67,191,47, |
93,139,92,56,185,56,95,140,91,45,191,68,134,201,132,83,1,171,84,142,189,104, |
1,207,254,45,80,137,100,57,3,73,252,183,57,100,137,80,1,211,254,49,104,189, |
142,84,254,85,0,0,0,1,0,87,0,0,5,163,5,150,0,57,0,225,64,91,101,36,1,101, |
22,1,157,49,1,143,49,1,49,16,11,15,72,157,9,1,143,9,1,9,16,11,15,72,116,3, |
132,3,2,54,3,1,54,2,118,2,2,54,56,118,56,2,116,55,132,55,2,54,55,1,42,26, |
1,42,32,1,41,53,48,40,10,18,96,40,112,40,144,40,3,111,18,127,18,159,18,3, |
40,18,40,18,24,34,91,80,53,1,53,184,255,192,64,69,27,30,72,191,53,207,53, |
2,48,53,1,53,17,5,91,31,24,79,24,2,224,24,1,15,24,31,24,95,24,207,24,223, |
24,5,160,24,1,111,24,159,24,2,0,24,32,24,48,24,3,8,24,95,59,1,10,15,19,39, |
48,5,42,95,18,41,18,29,95,0,4,0,63,237,63,51,237,23,50,1,93,47,94,93,93,93, |
113,113,114,253,196,47,93,93,43,114,237,17,57,57,47,47,93,93,17,51,17,51, |
16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,1,50,30,2, |
21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46,2,35,34,14,2,21,20,30, |
2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,2,253,151,241,168,90,59,109, |
157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116,169,108,109,170,116, |
61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109,59,90,168,241,5,150, |
86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51,126,143,159,85,116,181, |
124,65,65,124,181,116,85,159,143,126,51,224,156,4,2,3,2,54,138,167,191,106, |
147,234,162,86,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218, |
0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,3,0,45, |
0,0,5,41,6,178,0,8,0,12,0,16,2,114,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5, |
1,3,5,1,16,3,5,184,255,232,64,255,12,15,72,12,133,9,16,133,64,13,5,4,14,2, |
1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8,6,1,90,38,2,86,2,150,2,3, |
118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,18,169,18,201,18,3,86,18,1,9,18, |
57,18,2,25,18,89,18,137,18,249,18,4,6,18,1,202,249,18,1,230,18,1,9,18,25, |
18,185,18,201,18,4,198,18,1,89,18,121,18,169,18,3,54,18,1,41,18,57,18,185, |
18,233,18,4,11,18,1,153,249,18,1,198,18,214,18,2,178,18,1,164,18,1,150,18, |
1,130,18,1,116,18,1,86,18,102,18,2,66,18,1,36,18,52,18,2,18,18,1,4,18,1,244, |
18,1,230,18,1,196,18,212,18,2,166,18,182,18,2,146,18,1,132,18,1,118,18,1, |
98,18,1,84,18,1,54,18,70,18,2,36,18,1,22,18,1,4,18,1,242,18,1,1,208,18,224, |
18,2,196,18,1,160,18,176,18,2,148,18,1,112,18,1,100,18,1,64,18,1,20,18,36, |
18,52,18,3,0,18,1,105,64,202,228,18,244,18,2,208,18,1,164,18,180,18,196,18, |
3,128,18,144,18,2,116,18,1,80,18,96,18,2,68,18,1,32,18,1,4,18,20,18,2,244, |
18,1,224,18,1,196,18,212,18,2,176,18,1,84,18,100,18,116,18,148,18,164,18, |
5,48,18,64,18,2,36,18,1,0,18,1,196,18,244,18,2,144,18,1,4,18,20,18,36,18, |
68,18,84,18,116,18,132,18,7,57,224,18,1,132,18,164,18,212,18,3,112,18,1,4, |
18,36,18,52,18,84,18,100,18,5,228,18,244,18,2,192,18,1,180,18,1,144,18,1, |
4,18,20,18,52,18,84,18,132,18,5,212,18,228,18,2,187,18,1,164,18,1,112,18, |
1,2,48,18,96,18,2,15,18,47,18,2,10,14,145,9,95,13,1,13,64,9,12,72,13,0,3, |
59,3,75,3,123,3,3,3,1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,47,43,93,51,237, |
50,1,93,93,95,93,93,93,93,113,113,113,113,113,114,114,114,114,94,93,93,93, |
113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,95,93,113,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,113,113, |
113,114,114,114,94,93,93,113,113,113,47,94,93,93,93,113,253,57,206,94,93, |
93,50,43,1,24,16,77,230,50,47,26,237,220,237,49,48,43,95,94,93,93,43,93,93, |
1,17,35,19,1,51,9,1,51,37,53,51,21,33,53,51,21,3,9,190,2,253,224,205,1,178, |
1,176,205,253,249,163,253,211,165,2,72,253,184,2,72,3,57,253,97,2,159,121, |
184,184,184,184,255,255,0,86,255,236,4,101,6,7,18,38,1,122,0,0,17,7,1,80, |
1,33,0,0,0,19,64,11,2,60,17,38,2,26,60,63,8,23,37,1,43,53,0,43,53,0,0,0,255, |
255,0,70,255,236,3,106,6,7,18,38,1,126,0,0,17,7,1,80,0,202,0,0,0,19,64,11, |
1,58,17,38,1,73,58,61,16,6,37,1,43,53,0,43,53,0,0,0,255,255,0,106,254,88, |
3,238,6,7,18,38,1,128,0,0,17,7,1,80,1,57,0,0,0,19,64,11,1,36,17,38,1,100, |
36,39,17,34,37,1,43,53,0,43,53,0,0,0,255,255,0,137,0,0,1,178,6,7,18,38,1, |
130,0,0,17,6,1,80,209,0,0,27,64,17,1,14,17,38,1,16,14,1,0,14,1,29,14,17,5, |
13,37,1,43,93,93,53,0,43,53,0,255,255,0,133,255,236,3,254,6,65,18,38,1,142, |
0,0,17,7,1,81,0,222,0,0,0,30,64,9,3,2,1,32,17,38,3,2,1,184,255,241,180,38, |
44,10,0,37,1,43,53,53,53,0,43,53,53,53,0,2,0,86,255,236,4,101,4,78,0,39,0, |
59,1,15,64,196,122,48,138,48,2,121,52,137,52,2,101,43,1,90,58,106,58,2,54, |
14,70,14,2,29,31,45,31,2,29,38,45,38,2,47,37,1,29,37,1,75,36,107,36,2,47, |
36,63,36,2,29,36,1,139,35,1,47,35,1,29,35,1,47,34,1,29,34,1,47,22,1,27,22, |
1,47,21,1,27,21,1,75,20,107,20,2,47,20,1,27,20,1,45,19,1,27,19,1,121,6,137, |
6,2,11,6,27,6,2,34,48,18,22,72,34,33,22,48,18,22,72,22,23,26,33,42,33,2,73, |
23,1,26,23,42,23,2,33,23,159,28,175,28,191,28,3,28,64,29,33,72,28,64,0,16, |
22,34,4,144,50,160,50,176,50,3,127,50,1,32,50,64,50,2,50,61,128,40,71,8,16, |
61,1,0,50,28,16,4,23,33,21,23,15,55,80,11,16,45,80,5,22,0,63,237,63,237,63, |
63,18,23,57,1,93,47,237,26,16,220,93,93,93,23,50,26,205,43,93,50,50,93,93, |
93,17,51,43,17,51,43,49,48,0,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,0,93,1,93,0,93,1,93,37,14,3,35,34,2,17,16,18, |
51,50,30,2,23,51,62,3,55,51,14,3,7,30,3,23,35,46,3,39,1,20,30,2,51,50,62, |
2,55,46,3,35,34,14,2,3,75,26,65,87,111,70,205,193,217,209,69,112,86,63,20, |
2,4,14,19,23,13,188,22,46,39,30,5,3,23,31,36,18,183,11,21,16,13,3,253,196, |
28,59,93,66,54,100,82,61,14,12,45,71,102,70,66,96,64,31,237,56,94,69,38,1, |
20,1,24,1,28,1,26,39,69,93,54,21,56,63,65,30,47,128,139,139,58,103,175,144, |
110,39,28,66,65,58,20,1,49,112,160,103,48,52,107,160,108,86,154,115,68,46, |
102,163,0,2,0,142,254,87,4,73,5,204,0,32,0,62,0,185,64,68,149,20,1,154,16, |
1,123,7,139,7,2,122,60,138,60,2,106,3,122,3,138,3,3,102,31,118,31,2,74,50, |
90,50,106,50,3,21,2,37,2,101,2,117,2,133,2,5,147,21,1,21,21,37,21,2,28,48, |
23,72,52,48,48,64,48,2,96,48,1,48,184,255,192,64,58,20,23,72,48,52,48,52, |
14,0,72,64,48,43,64,43,160,43,3,160,43,176,43,192,43,3,43,64,128,33,13,70, |
0,14,16,14,48,14,3,8,14,28,48,80,49,49,38,57,80,18,0,13,27,33,38,80,9,5,22, |
0,63,51,237,50,63,63,237,18,57,47,237,57,1,47,94,93,237,50,26,16,220,93,113, |
26,237,18,57,57,47,47,43,93,113,16,237,17,57,49,48,93,93,93,93,93,0,93,93, |
93,1,93,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35,17,52,54,51,50,30,2,21, |
20,14,2,7,30,3,1,30,3,51,50,62,2,53,52,46,2,35,53,62,1,53,52,46,2,35,34,14, |
2,21,4,73,53,111,173,120,102,160,56,6,3,3,180,228,226,99,152,102,53,35,61, |
81,46,57,114,91,56,252,249,28,71,81,87,43,72,110,73,38,38,81,128,89,127,113, |
27,57,87,60,70,104,68,34,1,149,89,154,116,66,55,39,57,92,53,254,215,5,172, |
237,220,47,90,130,82,73,111,82,56,18,11,55,93,137,254,218,19,34,25,14,41, |
76,106,66,65,110,81,45,142,27,139,122,44,77,57,32,35,77,122,88,0,0,0,0,1, |
0,7,254,88,3,249,4,58,0,24,0,237,64,59,59,22,75,22,2,41,22,1,59,21,75,21, |
2,26,21,42,21,2,9,21,1,42,12,58,12,74,12,3,25,12,1,77,13,1,13,16,13,16,72, |
66,2,1,54,2,1,34,2,1,6,2,22,2,2,13,2,1,1,17,1,184,255,240,64,76,13,16,72, |
24,15,7,7,13,14,16,15,14,47,14,2,57,31,14,63,14,95,14,127,14,159,14,191,14, |
223,14,255,14,8,63,14,127,14,159,14,191,14,223,14,255,14,6,0,14,32,14,2,224, |
14,1,191,14,1,160,14,1,95,14,159,14,2,0,14,16,14,64,14,3,8,14,1,0,184,255, |
240,64,17,127,0,1,0,64,26,1,0,26,48,26,96,26,144,26,4,26,184,255,192,64,14, |
21,26,72,7,15,24,3,25,20,27,13,13,0,15,0,63,50,47,63,17,23,51,1,43,93,113, |
47,93,56,50,47,94,93,93,93,93,93,113,113,114,94,93,56,51,57,61,47,51,51,49, |
48,43,94,93,94,93,93,93,93,43,93,93,93,93,93,93,93,93,19,51,19,30,3,23,62, |
3,55,19,51,1,14,3,7,35,62,1,55,7,192,245,7,21,20,17,4,5,18,21,22,8,239,191, |
254,122,17,31,27,23,7,191,17,48,24,4,58,253,93,22,63,67,63,22,21,62,67,63, |
22,2,165,251,251,45,111,124,132,65,131,213,91,0,0,0,2,0,86,255,236,4,29,5, |
204,0,19,0,50,0,156,64,81,115,28,131,28,2,106,28,1,118,46,134,46,2,106,46, |
1,90,2,106,2,2,90,17,106,17,2,85,13,101,13,2,114,26,130,26,2,38,26,1,128, |
25,1,114,25,1,51,25,67,25,2,50,50,31,71,0,64,25,46,5,47,47,41,31,0,1,144, |
0,1,0,52,128,10,71,31,41,1,41,47,20,80,5,184,255,224,64,22,23,28,72,5,24, |
18,22,72,111,5,1,90,5,1,5,46,48,0,15,80,36,22,0,63,237,63,57,57,93,93,43, |
43,237,50,1,47,93,237,26,16,204,93,113,17,57,47,57,57,51,26,16,237,50,47, |
49,48,93,93,93,93,93,93,93,93,93,93,93,93,1,52,46,2,39,14,3,21,20,30,2,51, |
50,62,2,1,34,46,2,39,1,30,3,21,20,14,2,35,34,46,2,53,52,62,2,55,1,53,33,21, |
3,96,49,69,76,26,73,134,102,60,35,73,111,77,81,112,69,31,254,255,13,42,45, |
41,13,1,60,54,102,79,49,64,123,180,115,114,180,125,66,73,127,169,96,254,193, |
2,221,1,215,85,145,115,86,27,26,81,114,146,91,76,131,96,55,54,95,131,3,191, |
2,3,2,1,254,188,55,116,134,159,97,110,182,131,72,68,127,183,115,112,176,135, |
97,33,1,83,119,132,0,1,0,70,255,236,3,106,4,78,0,57,0,179,64,49,140,37,1, |
133,3,1,53,36,69,36,2,55,34,1,42,8,1,37,5,1,14,24,9,12,72,10,29,26,29,42, |
29,3,42,70,21,48,27,48,27,48,16,35,35,6,64,37,48,72,6,184,255,192,179,14, |
17,72,6,184,255,192,64,66,8,11,72,6,59,53,71,31,16,63,16,79,16,95,16,4,16, |
64,37,43,72,16,128,59,1,31,59,95,59,2,21,48,80,15,47,31,47,79,47,95,47,175, |
47,223,47,239,47,7,191,47,207,47,2,47,47,0,39,80,36,32,16,0,80,5,11,22,0, |
63,51,237,63,51,237,18,57,47,93,113,237,57,1,93,113,47,43,93,237,16,198,43, |
43,43,50,47,17,57,57,47,47,18,57,237,49,48,93,43,0,93,1,93,0,93,93,93,93, |
37,50,62,2,55,23,14,3,35,34,46,2,53,52,62,2,55,53,46,3,53,52,62,2,51,50,22, |
23,7,46,1,35,34,6,21,20,30,2,51,21,34,14,2,21,20,30,2,1,200,54,96,79,63,21, |
105,32,84,106,130,78,96,141,92,45,42,72,96,54,51,85,61,34,50,95,136,87,118, |
191,67,128,47,125,75,91,96,55,97,131,75,72,139,109,66,29,52,74,114,31,48, |
56,26,100,39,71,53,32,46,84,116,69,58,95,69,42,5,2,6,40,64,86,51,62,106,77, |
44,86,99,88,71,68,85,74,57,70,37,12,135,11,40,80,69,45,69,46,24,0,0,0,1,0, |
86,254,159,3,96,5,204,0,56,0,209,64,117,169,38,1,156,29,172,29,2,149,55,165, |
55,2,173,39,1,124,39,140,39,156,39,3,117,8,1,115,2,1,100,36,132,36,148,36, |
164,36,4,139,24,155,24,171,24,3,57,24,1,44,31,156,31,172,31,3,44,30,60,30, |
76,30,3,100,54,132,54,164,54,3,38,54,86,54,2,240,47,1,47,47,21,0,71,33,40, |
50,50,10,31,21,79,21,2,191,21,1,21,64,29,33,72,0,21,16,21,32,21,64,21,4,7, |
21,50,47,80,5,26,0,184,255,240,64,31,19,22,72,135,0,151,0,2,218,33,1,169, |
33,185,33,201,33,3,136,33,152,33,2,26,33,0,3,15,48,0,15,0,47,63,18,23,57, |
93,93,93,93,43,17,51,237,50,1,47,94,93,43,93,113,205,50,47,51,47,237,18,57, |
47,113,49,48,93,93,93,93,0,93,93,1,93,0,93,93,1,93,93,93,0,93,1,93,1,20,30, |
2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,55,53,14,3,35, |
33,53,33,21,14,5,1,21,43,74,100,57,54,111,90,58,18,26,29,10,126,9,19,16,11, |
36,66,94,57,42,89,82,73,54,31,49,85,113,127,135,64,12,34,36,34,11,254,167, |
2,130,62,131,123,108,81,47,1,123,64,79,49,31,15,15,34,57,88,68,34,68,62,51, |
17,56,12,33,38,39,19,34,45,33,25,13,10,23,36,50,74,100,67,83,176,176,175, |
166,155,68,4,1,1,1,1,131,127,70,157,166,172,171,166,0,0,0,0,1,0,106,254,88, |
3,238,4,78,0,35,0,100,185,0,32,255,232,64,46,9,12,72,35,70,64,80,0,1,159, |
0,255,0,2,0,37,128,23,12,70,192,13,1,0,13,16,13,48,13,224,13,240,13,5,8,13, |
240,37,1,255,37,1,112,37,1,37,184,255,192,64,14,19,23,72,35,27,23,6,80,29, |
16,17,15,12,21,0,63,63,63,237,50,63,1,43,93,93,113,47,94,93,113,237,50,26, |
16,220,93,113,26,237,49,48,43,1,17,52,46,2,35,34,14,2,21,17,35,17,52,38,39, |
51,30,3,21,51,62,3,51,50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,22, |
14,170,9,14,10,5,3,26,62,82,106,70,90,130,84,39,254,88,4,86,79,106,65,27, |
45,85,125,81,253,141,3,83,68,121,42,21,48,49,47,20,47,76,53,29,44,92,145, |
100,251,135,0,0,0,0,3,0,106,255,236,4,9,5,203,0,15,0,26,0,37,0,194,64,108, |
153,19,169,19,2,150,24,166,24,2,138,2,1,133,5,1,138,14,1,133,10,1,124,36, |
140,36,2,115,29,131,29,2,85,29,101,29,2,124,18,140,18,2,74,18,90,18,106,18, |
3,115,25,131,25,2,69,25,85,25,101,25,3,6,13,22,13,2,6,10,1,9,5,1,9,2,1,7, |
33,0,71,64,15,21,31,21,127,21,143,21,239,21,255,21,6,21,64,45,48,72,21,39, |
128,32,22,71,32,8,1,8,184,255,192,183,29,35,72,8,48,39,1,39,184,255,192,64, |
19,30,35,72,223,39,1,22,80,32,32,16,27,80,11,0,16,80,3,22,0,63,237,63,237, |
18,57,47,237,1,93,43,113,47,43,93,237,50,26,16,220,43,113,26,237,51,49,48, |
0,94,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,16,2,35,34,46, |
1,2,53,16,18,51,50,30,1,18,1,50,62,2,55,33,30,3,19,34,14,2,7,33,46,3,4,9, |
240,228,108,171,118,62,233,232,121,175,112,54,254,42,62,100,73,42,3,253,221, |
3,44,71,94,66,62,99,72,42,3,2,35,3,40,69,97,2,221,254,131,254,140,92,186, |
1,27,192,1,117,1,121,93,188,254,231,252,216,52,128,216,164,164,215,129,52, |
4,217,51,126,212,161,161,212,126,51,0,0,0,1,0,137,0,0,1,141,4,58,0,13,1,13, |
64,210,13,8,70,207,5,223,5,2,0,5,32,5,208,5,3,9,5,5,14,15,95,15,111,15,2, |
32,15,1,224,15,240,15,2,111,15,127,15,143,15,3,0,15,16,15,32,15,3,205,207, |
15,223,15,239,15,3,96,15,1,127,15,207,15,2,64,15,80,15,2,175,15,223,15,239, |
15,3,96,15,112,15,2,15,15,31,15,2,154,255,15,1,208,15,224,15,2,63,15,1,159, |
15,175,15,2,112,15,1,223,15,1,144,15,1,63,15,79,15,2,0,15,1,106,159,15,223, |
15,239,15,3,96,15,112,15,2,15,15,1,239,15,255,15,2,128,15,208,15,2,63,15, |
1,96,15,1,15,15,31,15,2,55,207,15,255,15,2,144,15,160,15,176,15,3,31,15,47, |
15,63,15,3,176,15,192,15,208,15,3,15,15,31,15,111,15,3,144,15,160,15,224, |
15,3,31,15,63,15,2,0,15,1,7,6,15,0,21,0,63,63,1,94,93,93,93,113,113,114,114, |
114,94,93,93,113,113,113,114,114,114,94,93,93,93,93,113,113,114,114,114,94, |
93,93,93,113,113,114,114,94,93,93,93,113,113,17,18,57,47,94,93,113,237,50, |
49,48,51,46,3,53,17,51,17,20,30,2,23,199,15,24,15,8,180,11,21,30,18,16,53, |
64,70,33,3,78,252,169,32,64,60,52,19,0,0,0,1,0,138,0,0,4,3,4,58,0,11,0,158, |
64,114,148,9,164,9,2,102,9,118,9,134,9,3,172,0,1,139,0,155,0,2,105,0,121, |
0,2,86,10,150,10,166,10,3,151,10,167,10,2,84,10,1,70,7,134,7,2,1,10,247,8, |
1,8,10,9,16,9,9,0,11,16,0,11,160,11,2,0,11,16,11,32,11,64,11,160,11,224,11, |
6,7,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2, |
1,7,10,4,8,5,15,4,0,21,0,63,50,63,51,23,57,1,93,93,47,94,93,237,50,47,94, |
93,113,56,51,57,47,56,57,51,113,17,51,49,48,0,93,93,93,1,93,93,93,93,93,93, |
33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73, |
1,206,1,238,109,254,127,4,58,253,243,2,13,254,47,253,151,0,0,0,0,1,0,14,0, |
0,3,238,5,204,0,33,1,60,64,101,149,15,1,157,23,1,138,2,1,137,1,1,137,25,153, |
25,2,140,21,156,21,2,115,0,131,0,147,0,3,140,20,156,20,2,106,20,122,20,2, |
146,32,1,132,32,1,101,32,117,32,2,3,102,26,118,26,150,26,3,141,26,157,26, |
2,2,126,26,1,108,26,1,3,84,18,1,148,31,1,101,31,117,31,133,31,3,86,31,1,146, |
29,1,2,128,29,1,84,29,1,144,28,1,28,184,255,224,64,59,13,16,72,146,27,1,84, |
27,100,27,116,27,3,93,0,109,0,2,149,17,1,73,17,1,150,18,1,138,18,1,101,18, |
117,18,2,38,18,86,18,2,42,3,58,3,74,3,122,3,138,3,5,26,0,20,10,10,19,32,33, |
184,255,240,64,69,33,20,19,16,31,19,63,19,2,31,19,63,19,95,19,127,19,159, |
19,191,19,223,19,255,19,8,223,19,255,19,2,192,19,1,95,19,159,19,2,0,19,16, |
19,64,19,3,8,19,0,35,48,35,96,35,160,35,176,35,5,26,0,13,33,19,21,6,80,13, |
0,0,63,237,63,51,18,57,57,1,93,47,94,93,93,93,93,113,114,56,51,47,56,51,18, |
57,47,18,57,57,49,48,93,93,93,93,93,93,93,0,93,1,93,93,43,93,93,93,95,93, |
93,93,93,0,93,95,93,93,95,93,1,93,95,93,93,93,93,93,93,93,93,93,93,93,0,93, |
1,39,46,3,35,34,6,7,39,62,1,51,50,30,2,23,1,35,3,46,3,39,14,3,7,1,35,1,207, |
36,27,42,45,57,40,11,32,6,35,25,72,32,55,87,73,67,36,1,171,190,207,8,18,18, |
16,5,7,22,25,24,8,254,255,187,3,197,99,73,105,67,31,7,3,130,9,15,36,81,131, |
95,251,139,2,65,22,56,59,56,21,21,60,62,55,18,253,193,0,0,0,1,0,138,254,119, |
4,6,4,58,0,41,0,108,64,55,13,40,14,17,72,90,8,106,8,2,35,70,5,15,34,95,34, |
2,159,34,175,34,255,34,3,0,34,16,34,32,34,3,7,34,43,23,19,70,0,20,16,20,48, |
20,240,20,4,8,20,96,43,128,43,2,43,184,255,192,64,15,20,23,72,41,21,34,21, |
15,19,5,28,80,14,11,22,0,63,51,237,50,47,63,51,63,1,43,93,47,94,93,237,50, |
16,220,94,93,93,113,50,237,49,48,0,93,1,43,33,46,3,53,35,14,3,35,34,38,39, |
35,30,1,21,17,35,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,30,2,23,3,94, |
1,3,3,3,4,26,56,69,86,57,82,120,32,4,3,1,182,182,25,59,98,74,67,100,67,33, |
181,1,2,2,1,6,46,59,59,20,51,79,53,27,64,58,32,63,27,254,139,5,195,253,124, |
69,116,85,47,52,91,126,75,2,105,252,175,34,76,67,49,7,0,0,1,0,0,0,0,3,178, |
4,58,0,18,2,35,64,79,130,17,146,17,162,17,3,153,6,169,6,2,131,8,147,8,163, |
8,3,3,87,8,103,8,119,8,3,6,5,9,32,14,17,72,9,9,7,15,16,16,0,70,64,91,12,107, |
12,123,12,3,91,12,219,12,235,12,3,180,12,196,12,2,11,12,27,12,59,12,91,12, |
107,12,5,7,12,20,128,8,7,184,255,240,64,255,7,11,20,27,20,2,11,20,27,20,75, |
20,91,20,139,20,155,20,203,20,219,20,8,255,20,1,196,20,212,20,2,160,20,1, |
132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4,20,20,20,2,199,224,20,1,196, |
20,212,20,2,160,20,1,4,20,20,20,68,20,84,20,132,20,148,20,6,68,20,84,20,132, |
20,148,20,196,20,212,20,6,27,20,1,4,20,1,219,20,1,196,20,1,155,20,1,132,20, |
1,91,20,1,68,20,1,27,20,1,4,20,1,151,11,20,27,20,75,20,91,20,139,20,155,20, |
203,20,219,20,8,155,20,203,20,219,20,3,132,20,1,96,20,1,68,20,84,20,2,32, |
20,1,4,20,20,20,2,224,20,1,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20, |
1,4,20,20,20,68,20,84,20,4,103,4,20,20,20,68,20,84,20,132,20,148,20,196,20, |
212,20,8,219,20,1,196,20,1,155,20,1,132,20,1,91,20,1,68,20,1,27,20,1,4,20, |
1,219,20,1,196,20,1,11,20,27,20,75,20,91,20,139,20,155,20,64,93,6,55,75,20, |
91,20,139,20,155,20,203,20,219,20,6,63,20,1,32,20,1,4,20,20,20,2,224,20,1, |
196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4, |
20,20,20,2,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,2,80,20,1,47, |
20,1,0,20,16,20,2,7,15,7,15,9,6,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93, |
93,113,113,113,113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113, |
113,113,113,113,113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114, |
94,93,93,93,93,93,93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93, |
93,93,93,113,114,47,56,51,26,16,220,94,93,93,113,114,26,237,50,17,51,17,57, |
61,47,43,51,51,49,48,93,95,93,93,93,1,20,14,2,7,35,1,51,1,54,18,53,52,38, |
39,51,30,1,3,178,63,106,140,77,170,254,122,189,1,55,142,124,29,20,177,24, |
28,3,78,99,218,221,214,94,4,58,252,96,185,1,86,156,81,119,45,45,113,0,0,0, |
1,0,86,254,159,3,106,5,204,0,74,1,0,64,125,122,71,138,71,2,101,33,117,33, |
133,33,3,105,39,1,85,50,1,83,44,1,57,2,1,110,66,126,66,142,66,3,26,66,42, |
66,2,12,29,28,29,44,29,3,13,40,9,12,72,12,73,28,73,44,73,108,73,124,73,140, |
73,6,5,11,95,37,1,79,37,1,112,37,128,37,2,37,17,95,26,1,111,26,1,26,37,26, |
52,63,31,70,11,32,11,1,23,11,23,11,0,31,63,63,63,79,63,111,63,127,63,143, |
63,175,63,191,63,207,63,9,159,63,175,63,255,63,3,63,184,255,192,64,17,7,11, |
72,63,42,71,31,0,1,0,5,37,80,31,11,24,42,184,255,240,64,32,19,22,72,151,42, |
1,0,16,19,22,72,152,0,1,52,0,42,3,57,32,36,1,36,36,24,57,26,17,23,80,24,0, |
0,63,237,50,50,47,18,57,47,93,18,23,57,93,43,93,43,18,57,57,237,57,1,47,93, |
237,47,43,93,113,18,57,57,47,47,93,16,237,16,205,50,50,47,93,114,51,47,93, |
113,114,18,57,49,48,93,43,93,0,93,93,1,93,0,93,93,93,1,93,0,93,19,52,62,2, |
55,53,46,3,53,52,62,2,55,53,14,3,43,1,53,33,21,14,3,21,20,30,2,23,21,14,3, |
21,20,30,2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,86,51,110,175, |
125,68,118,87,51,50,79,97,47,12,68,80,76,18,74,2,122,77,144,112,68,60,99, |
130,69,100,175,131,76,43,74,100,57,54,114,94,61,18,26,29,10,126,9,19,16,11, |
39,70,97,57,42,89,82,73,54,31,1,98,76,147,124,90,19,2,5,39,68,96,62,64,93, |
64,40,10,8,1,2,3,2,131,125,9,34,59,90,67,63,81,49,24,6,131,13,54,89,127,84, |
64,79,49,31,15,15,34,57,88,68,34,68,62,51,17,56,12,33,38,39,19,34,45,33,25, |
13,10,23,36,50,74,100,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
79,255,236,5,43,4,58,0,48,0,115,64,35,53,12,117,12,133,12,3,3,40,7,17,72, |
3,40,7,17,72,46,80,32,96,32,2,46,32,35,70,64,111,5,1,80,5,1,5,184,255,192, |
64,38,8,11,72,5,50,128,15,50,47,50,2,13,7,72,79,25,95,25,111,25,207,25,4, |
25,14,20,34,7,20,80,31,15,14,21,40,80,0,22,0,63,237,63,63,237,50,50,1,47, |
50,50,93,237,50,93,26,16,220,43,93,113,26,237,50,50,93,47,49,48,43,0,43,1, |
93,5,34,46,2,53,17,33,21,20,14,2,7,35,62,3,61,1,34,14,2,7,53,62,3,51,33,21, |
35,17,20,30,2,51,50,62,2,55,21,14,1,4,102,59,82,52,24,254,110,16,27,36,19, |
188,19,39,32,20,39,79,69,53,12,12,43,51,54,23,4,37,234,13,24,35,22,7,23,25, |
23,8,31,69,20,28,59,94,66,2,212,72,131,251,228,195,74,76,197,226,247,125, |
80,7,10,13,7,139,6,11,8,4,131,253,83,44,56,32,13,2,2,3,1,129,8,12,0,2,0,132, |
254,87,4,59,4,79,0,26,0,47,0,129,64,64,122,25,1,101,20,117,20,2,106,19,122, |
19,2,106,45,122,45,2,75,8,91,8,107,8,3,125,30,1,107,30,1,74,30,90,30,2,0, |
71,64,160,27,1,27,49,128,38,15,70,223,16,1,0,16,16,16,48,16,3,8,16,48,49, |
1,49,184,255,192,64,21,30,35,72,223,49,1,96,49,128,49,2,32,80,22,16,15,27, |
43,80,5,22,0,63,237,63,63,237,1,93,93,43,113,47,94,93,113,237,50,26,16,220, |
93,26,237,49,48,93,93,93,0,93,1,93,93,0,93,1,93,1,20,14,2,35,34,46,2,39,35, |
30,1,21,17,35,17,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,17,30,3,51,50, |
62,2,4,59,63,115,161,98,62,98,80,66,28,4,2,2,180,60,116,169,110,103,181,134, |
78,193,44,83,116,72,69,100,64,30,28,72,80,87,44,67,100,67,33,2,4,118,197, |
142,79,20,37,53,33,30,61,32,254,87,3,238,119,193,136,74,79,150,219,131,104, |
166,115,61,53,101,146,93,254,195,35,55,37,20,58,107,152,0,0,1,0,86,254,159, |
3,156,4,78,0,57,0,209,64,38,137,55,1,139,54,1,143,53,1,123,53,1,106,50,1, |
96,2,1,52,15,68,15,84,15,3,82,10,98,10,130,10,3,51,10,67,10,2,3,184,255,224, |
64,52,12,17,72,3,24,11,14,72,26,31,106,31,122,31,138,31,4,139,30,1,10,37, |
26,37,2,7,71,31,40,1,40,52,17,79,28,1,143,28,159,28,223,28,3,28,64,24,27, |
72,96,28,1,28,184,255,192,183,7,12,72,28,48,59,1,59,184,255,192,64,19,30, |
35,72,223,59,1,12,33,40,16,19,22,72,136,40,152,40,2,7,184,255,240,64,19,19, |
22,72,135,7,151,7,2,33,7,40,3,22,53,0,80,47,16,22,0,47,63,237,51,18,23,57, |
93,43,93,43,17,51,1,93,43,113,47,43,93,43,93,113,205,50,47,93,237,49,48,93, |
93,0,93,43,1,43,0,93,93,93,1,93,0,93,1,93,93,0,93,93,1,34,14,4,21,20,30,2, |
23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,51,50,30,2,23, |
7,46,3,2,70,54,88,67,49,32,15,32,76,124,92,53,114,95,61,18,26,29,10,126,9, |
19,16,11,35,68,97,63,66,113,94,72,50,26,20,46,75,110,148,97,68,99,73,54,22, |
116,18,42,49,57,3,193,49,80,104,108,106,42,68,96,72,57,30,17,37,59,89,68, |
34,68,62,51,17,56,12,33,38,39,19,30,44,36,31,17,18,40,51,68,93,122,81,47, |
130,140,136,108,66,21,34,44,23,119,19,36,28,17,0,2,0,86,255,236,4,209,4,58, |
0,28,0,47,0,132,64,94,133,12,1,122,13,138,13,2,131,46,1,101,46,117,46,2,100, |
42,116,42,132,42,3,124,33,140,33,2,90,33,106,33,2,143,38,1,108,38,124,38, |
2,74,38,90,38,2,15,17,31,17,111,17,127,17,4,7,17,0,71,64,15,29,143,29,191, |
29,3,0,29,32,29,64,29,3,29,49,128,40,71,31,10,143,10,2,10,23,35,80,15,15, |
43,80,5,22,0,63,237,63,237,50,1,47,93,237,26,16,220,93,113,26,237,196,94, |
93,49,48,0,93,93,93,1,93,93,93,0,93,93,93,1,93,1,20,14,2,35,34,46,2,53,52, |
62,2,51,33,21,35,34,46,2,39,21,30,3,7,52,46,2,39,35,34,14,2,21,20,22,51,50, |
62,2,4,48,61,123,183,123,123,186,124,63,86,153,213,126,2,57,165,9,35,43,44, |
17,28,55,43,26,189,20,34,45,25,89,83,143,107,61,151,147,78,117,76,38,1,235, |
112,188,135,76,74,139,202,129,144,210,138,66,131,1,2,2,1,4,42,99,115,131, |
78,74,132,116,99,42,50,105,160,110,207,206,52,97,139,0,1,0,29,255,236,3,24, |
4,58,0,35,0,99,64,50,35,13,131,13,2,31,32,12,17,72,13,31,29,31,45,31,3,26, |
13,26,127,5,143,5,2,5,15,70,0,34,32,34,2,34,34,36,37,79,37,1,208,37,1,159, |
37,1,16,37,1,37,184,255,192,64,12,14,17,72,20,80,29,22,14,35,80,11,15,0,63, |
237,50,63,237,1,43,93,93,93,113,17,18,57,47,93,253,204,93,51,51,47,49,48, |
0,93,43,1,93,1,34,14,2,7,53,62,3,51,33,21,33,17,20,30,2,51,50,62,2,55,21, |
14,1,35,34,46,2,53,17,1,25,39,79,69,53,12,12,43,51,54,23,2,68,254,208,13, |
24,35,22,7,23,25,23,8,31,69,43,59,82,52,24,3,183,7,10,13,7,139,6,11,8,4,131, |
253,83,44,56,32,13,2,2,3,1,129,8,12,28,59,94,66,2,212,0,0,0,1,0,133,255,236, |
3,254,4,58,0,31,0,113,64,62,134,3,1,133,15,149,15,2,106,18,122,18,2,86,28, |
1,25,8,41,8,2,27,0,71,64,15,21,1,47,21,159,21,2,160,21,1,21,33,128,13,70, |
0,10,16,10,48,10,240,10,4,8,10,240,33,1,255,33,1,112,33,1,33,184,255,192, |
64,13,20,23,72,31,33,1,26,11,15,16,80,5,22,0,63,237,63,51,1,93,43,93,93,113, |
47,94,93,237,26,16,220,93,113,114,26,237,50,49,48,93,93,93,93,93,1,20,14, |
2,35,34,46,2,53,17,51,17,20,22,51,50,62,2,53,52,46,2,39,51,30,3,3,254,53, |
113,176,123,109,160,104,51,181,117,134,73,104,65,30,20,33,40,21,188,18,40, |
32,21,2,59,137,218,154,82,50,107,166,116,2,151,253,99,146,148,50,108,170, |
120,68,147,139,120,41,40,113,134,149,0,2,0,85,254,87,4,218,4,82,0,35,0,45, |
0,130,64,21,101,34,1,101,33,117,33,133,33,3,74,21,90,21,2,69,21,85,21,2,45, |
184,255,192,179,11,14,72,25,184,255,224,64,54,11,14,72,11,29,27,29,2,64,19, |
80,19,2,19,19,24,71,13,7,36,71,224,0,1,0,43,6,72,27,0,7,64,7,2,7,64,47,1, |
19,80,18,18,39,80,31,16,43,27,80,5,8,22,6,27,0,63,63,51,237,50,63,237,51, |
47,237,1,113,47,93,51,253,50,220,113,237,16,220,237,50,47,93,49,48,93,0,43, |
43,1,93,0,93,1,93,93,1,20,14,2,7,17,35,17,46,3,53,52,62,2,55,23,14,3,21,20, |
22,23,17,52,54,51,50,30,2,7,52,38,35,34,6,21,17,62,1,4,218,74,132,184,110, |
170,114,181,125,67,49,103,159,109,21,69,96,60,27,147,151,154,158,84,133,92, |
49,189,87,80,68,76,162,149,2,53,151,215,140,71,6,254,105,1,151,5,72,138,207, |
141,102,188,150,103,18,136,15,77,114,143,80,213,201,8,2,68,193,212,76,141, |
199,121,193,211,129,140,253,185,7,218,0,0,0,1,0,21,254,88,4,27,4,80,0,27, |
1,26,64,51,169,25,1,153,3,1,138,6,154,6,2,174,23,1,123,23,139,23,155,23,3, |
84,21,1,173,27,1,140,27,156,27,2,123,27,1,90,27,106,27,2,41,27,57,27,2,26, |
16,9,17,72,2,184,255,240,64,99,9,17,72,162,1,1,131,1,147,1,2,116,1,1,69,1, |
85,1,101,1,3,38,1,54,1,2,166,25,1,153,25,1,39,25,55,25,71,25,3,3,101,19,117, |
19,2,86,19,1,39,19,55,19,2,25,22,0,3,4,2,26,23,24,24,27,26,16,27,26,59,26, |
91,26,123,26,155,26,187,26,219,26,7,219,26,251,26,2,4,26,20,26,68,26,3,7, |
26,13,13,1,2,184,255,240,183,2,36,29,1,11,29,1,22,184,255,208,64,41,14,17, |
72,70,22,1,53,22,1,139,0,1,125,0,1,2,75,0,91,0,107,0,3,63,0,1,0,25,3,22,4, |
1,23,15,9,80,16,16,27,1,27,0,63,51,63,237,63,18,23,57,93,93,95,93,93,93,93, |
43,1,93,93,47,56,51,51,47,47,94,93,93,113,56,51,51,47,51,17,18,23,57,49,48, |
93,93,93,95,93,93,93,93,93,93,93,93,43,43,93,93,93,93,93,93,93,93,93,93,0, |
93,37,1,35,1,3,46,3,35,34,6,7,39,62,1,51,50,30,2,23,19,1,51,9,1,35,2,30,254, |
179,188,1,184,170,27,44,40,42,25,11,32,7,34,24,62,32,48,70,60,59,36,142,1, |
8,187,254,144,1,150,190,239,253,105,3,57,1,87,54,82,55,28,7,3,131,9,11,27, |
62,102,75,254,217,2,27,253,71,252,215,0,0,1,0,135,254,87,5,44,5,60,0,31,0, |
128,64,90,121,18,1,18,16,7,10,72,121,19,137,19,153,19,3,121,11,1,11,16,7, |
10,72,121,10,137,10,153,10,3,24,70,21,15,5,70,8,0,14,72,29,0,15,16,15,160, |
15,208,15,4,8,15,128,33,176,33,224,33,3,111,33,1,32,33,1,255,33,1,80,33,128, |
33,144,33,192,33,4,30,30,6,22,15,0,29,80,13,16,22,14,27,0,63,63,51,237,50, |
63,51,51,47,1,93,93,113,113,113,47,94,93,51,253,50,220,237,16,220,237,49, |
48,0,93,43,93,93,43,93,37,62,3,53,17,51,17,20,14,2,7,17,35,17,46,3,53,17, |
51,17,20,30,2,23,17,51,3,46,87,124,80,37,182,59,124,193,134,170,134,192,124, |
59,181,38,79,124,87,170,119,1,31,73,121,91,2,134,253,124,122,172,110,53,1, |
254,107,1,149,1,53,110,172,122,2,132,253,122,90,121,73,32,1,4,197,0,0,0,0, |
1,0,83,255,236,5,235,4,79,0,63,0,176,64,83,153,33,169,33,2,153,26,169,26, |
2,119,16,1,122,58,138,58,2,10,37,26,37,42,37,154,37,170,37,5,10,22,26,22, |
42,22,154,22,170,22,5,29,0,73,61,61,40,8,46,13,46,13,51,19,71,64,128,8,176, |
8,2,15,8,1,7,8,65,128,51,71,63,40,1,40,0,65,1,48,65,1,240,65,1,65,184,255, |
192,64,32,30,35,72,175,65,223,65,2,0,65,32,65,64,65,3,30,35,62,62,14,3,56, |
80,24,35,22,46,13,80,45,14,16,0,63,51,237,50,63,51,237,50,17,57,47,18,57, |
1,93,93,43,93,113,114,47,93,237,26,16,220,94,93,93,26,237,18,57,57,47,47, |
17,18,57,47,237,57,49,48,0,93,93,1,93,93,0,93,93,1,20,22,51,50,62,2,53,52, |
46,2,39,55,30,3,21,20,14,2,35,34,46,2,39,35,14,3,35,34,46,2,53,52,62,2,55, |
23,14,3,21,20,30,2,51,50,62,2,61,1,51,3,115,114,102,65,87,53,22,29,61,97, |
67,23,109,159,103,49,53,101,148,95,68,104,77,52,16,4,16,52,77,105,67,95,148, |
101,53,49,103,159,109,23,68,96,62,28,22,52,86,65,51,82,57,30,166,1,193,157, |
173,56,102,145,90,82,150,121,84,15,139,18,112,161,194,101,128,200,137,72, |
36,68,99,64,64,99,68,36,72,137,200,128,101,194,161,112,18,139,15,84,121,150, |
82,90,145,102,56,45,84,123,78,252,0,0,0,255,255,255,205,0,0,1,250,5,123,18, |
38,1,130,0,0,17,6,0,105,160,0,0,25,182,2,1,14,17,38,2,1,184,255,217,180,18, |
16,5,13,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,254,5,123, |
18,38,1,142,0,0,17,7,0,105,0,242,0,0,0,25,182,2,1,32,17,38,2,1,184,255,244, |
180,36,34,10,0,37,1,43,53,53,0,43,53,53,0,255,255,0,86,255,236,4,29,6,7,18, |
38,0,82,0,0,17,7,1,80,1,41,0,0,0,19,64,11,2,35,17,38,2,70,35,38,8,0,37,1, |
43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,254,6,7,18,38,1,142,0,0,17,7, |
1,80,0,252,0,0,0,19,64,11,1,32,17,38,1,17,32,35,10,0,37,1,43,53,0,43,53,0, |
0,0,255,255,0,83,255,236,5,235,6,7,18,38,1,146,0,0,17,7,1,80,1,255,0,0,0, |
19,64,11,1,64,17,38,1,55,64,67,40,19,37,1,43,53,0,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,178,16,38,0,40,0,0,17,7,2,152,1,121,0,0,0,153,185,0,21,255,192, |
179,233,233,72,21,184,255,192,179,230,230,72,21,184,255,192,179,227,227,72, |
21,184,255,192,179,224,224,72,21,184,255,192,179,221,221,72,21,184,255,192, |
179,218,218,72,21,184,255,192,179,215,215,72,21,184,255,192,179,212,212,72, |
21,184,255,192,179,209,209,72,21,184,255,192,179,206,206,72,21,184,255,192, |
179,203,203,72,21,184,255,192,179,200,200,72,21,184,255,192,179,197,197,72, |
21,184,255,192,64,10,11,11,72,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10, |
37,1,43,53,53,0,43,53,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0, |
1,0,46,255,236,6,79,5,129,0,45,0,133,64,13,155,31,171,31,2,101,37,117,37, |
133,37,3,2,184,255,224,64,71,13,17,72,18,16,12,15,72,42,13,58,13,2,36,7,52, |
7,2,20,20,10,42,1,39,90,45,175,40,1,0,40,1,40,10,90,0,29,16,29,176,29,224, |
29,4,7,29,0,42,95,43,38,33,95,1,6,6,40,43,3,40,18,26,95,15,63,21,1,21,21, |
15,19,0,63,51,47,93,16,237,63,63,18,57,47,51,237,50,16,237,50,1,47,94,93, |
237,47,93,93,204,253,50,204,18,57,47,49,48,0,93,93,43,43,93,93,1,17,62,3, |
51,50,22,29,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,61,1,52,38,35,34,14, |
2,7,17,35,17,33,53,33,21,2,208,33,109,127,130,53,226,217,41,86,133,92,53, |
88,75,64,29,111,18,41,48,56,33,84,80,129,144,51,123,120,105,33,190,254,28, |
4,134,4,229,254,160,7,20,19,13,187,188,214,93,145,100,53,17,32,46,28,123, |
16,33,26,17,101,111,219,119,122,10,15,17,8,253,12,4,229,156,156,0,255,255, |
0,168,0,1,4,47,6,240,16,38,1,93,0,0,17,7,2,149,1,113,0,0,0,19,64,11,1,6,5, |
38,1,33,6,9,4,0,37,1,43,53,0,43,53,0,0,0,0,1,0,104,255,236,5,121,5,150,0, |
42,0,218,64,156,156,17,172,17,2,156,15,172,15,2,156,39,172,39,2,138,39,1, |
156,41,172,41,2,138,41,1,137,31,1,117,11,1,117,10,165,10,2,166,26,1,73,26, |
137,26,2,70,32,134,32,2,37,10,53,10,2,42,3,58,3,2,3,68,44,1,7,7,19,5,8,91, |
116,29,132,29,2,203,29,219,29,2,68,29,1,43,29,1,29,37,235,19,1,100,19,116, |
19,164,19,212,19,4,64,19,1,2,0,19,48,19,2,7,19,8,95,127,5,175,5,2,5,5,13, |
34,79,38,1,38,38,0,95,34,4,13,95,24,16,18,32,18,2,48,18,64,18,112,18,128, |
18,192,18,208,18,6,18,18,24,19,0,63,51,47,93,113,16,237,63,237,51,47,93,17, |
18,57,47,113,237,1,47,94,93,95,93,93,113,51,47,93,93,93,113,237,50,17,57, |
47,93,49,48,0,95,93,93,93,93,93,1,93,0,93,1,93,93,93,93,93,93,93,1,34,14, |
2,7,33,21,33,30,3,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,111,173,124,73,10,2,142,253,114,9,77,128,176,109,90,141, |
108,79,27,156,40,108,148,191,123,171,254,255,173,86,91,175,1,0,164,225,1, |
46,71,181,20,68,102,137,4,250,68,126,178,110,154,112,185,132,72,50,82,105, |
55,77,79,136,100,57,109,195,1,12,159,165,1,10,187,101,176,173,60,50,91,70, |
42,0,0,255,255,0,93,255,236,4,248,5,150,18,6,0,54,0,0,255,255,0,189,0,0,1, |
124,5,129,18,6,0,44,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2, |
152,218,0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0, |
255,255,0,32,255,236,3,104,5,129,18,6,0,45,0,0,0,2,0,18,255,240,8,11,5,129, |
0,38,0,47,0,215,64,98,57,29,1,166,8,1,167,11,1,162,10,1,133,10,149,10,2,58, |
10,1,154,15,170,15,2,141,13,157,13,173,13,3,121,13,1,116,47,132,47,148,47, |
3,123,40,139,40,155,40,3,101,11,1,141,14,157,14,173,14,3,14,32,10,14,72,43, |
30,123,30,139,30,155,30,4,42,31,122,31,2,0,90,48,39,1,0,39,16,39,2,7,39,20, |
13,36,13,52,13,3,13,184,255,248,64,14,22,25,72,73,8,1,20,8,36,8,52,8,3,8, |
184,255,248,64,39,22,25,72,9,31,73,31,2,8,13,31,3,175,20,191,20,2,20,33,44, |
90,6,43,95,33,33,6,8,95,31,3,23,95,16,19,44,95,6,18,0,63,237,63,237,63,237, |
18,57,47,237,1,47,237,50,47,93,23,51,113,43,113,113,43,113,47,94,93,113,237, |
49,48,93,93,0,43,93,1,93,0,93,93,93,93,93,1,93,93,93,93,93,93,1,20,14,2,35, |
33,17,33,3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,33,50,30,2, |
7,52,38,35,33,17,33,50,54,8,11,61,121,182,121,253,183,254,96,49,22,43,49, |
60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,3,2,1,126,125,186, |
124,62,192,164,164,254,153,1,111,164,156,1,157,87,150,112,64,4,225,254,144, |
172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161,1,254,253,172, |
58,105,147,92,121,129,254,2,136,0,0,0,2,0,168,0,0,7,171,5,129,0,22,0,31,0, |
110,64,25,116,31,132,31,148,31,3,123,24,139,24,155,24,3,38,20,54,20,2,0,90, |
176,23,1,23,184,255,192,64,43,7,11,72,23,13,9,90,0,10,16,10,64,10,3,7,10, |
17,28,90,14,0,6,1,8,6,27,95,17,17,8,95,13,13,10,15,11,3,10,18,28,95,6,18, |
0,63,237,63,63,51,18,57,47,237,51,47,237,1,47,94,93,51,237,50,47,94,93,237, |
50,47,43,93,237,49,48,0,93,93,93,1,20,14,2,35,33,17,33,17,35,17,51,17,33, |
17,51,17,33,50,30,2,7,52,38,35,33,17,33,50,54,7,171,61,121,182,121,253,223, |
253,194,191,191,2,62,191,1,86,125,186,124,62,192,164,164,254,193,1,71,164, |
156,1,157,87,150,112,64,2,141,253,115,5,129,253,172,2,84,253,172,58,105,147, |
92,121,129,254,2,136,0,0,0,0,1,0,46,0,0,6,47,5,129,0,27,0,131,64,13,155,2, |
171,2,2,101,8,117,8,133,8,3,19,184,255,224,64,76,13,17,72,37,24,53,24,69, |
24,3,18,13,10,90,16,175,11,1,0,11,48,11,2,11,27,90,0,0,48,0,192,0,208,0,4, |
7,0,176,29,192,29,208,29,3,176,29,240,29,2,255,29,1,16,29,112,29,160,29,176, |
29,4,9,4,95,18,23,23,0,17,13,95,14,3,11,0,18,0,63,50,63,237,50,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,237,47,93,93,204,253,204,51,49,48,0,93,43, |
93,93,33,17,52,38,35,34,14,2,7,17,35,17,33,53,33,21,33,17,62,3,51,50,22,21, |
17,5,113,128,133,53,116,110,98,35,190,254,28,4,179,253,239,36,98,112,118, |
56,229,214,2,63,122,109,10,15,18,7,253,12,4,229,156,156,254,160,8,20,18,13, |
187,178,253,173,0,0,0,255,255,0,168,0,0,4,157,6,240,18,38,1,176,0,0,17,7, |
2,149,1,172,0,0,0,19,64,11,1,23,5,38,1,37,23,26,0,13,37,1,43,53,0,43,53,0, |
0,0,255,255,0,55,255,236,5,31,7,58,18,38,1,185,0,0,17,7,2,145,1,94,1,74,0, |
19,64,11,1,26,5,38,1,7,31,39,21,25,37,1,43,53,0,43,53,0,0,0,0,1,0,168,254, |
104,5,24,5,129,0,11,0,94,64,64,11,92,0,0,2,9,90,127,6,1,0,6,48,6,64,6,3,143, |
6,159,6,207,6,3,0,6,64,6,2,6,5,90,0,2,16,2,64,2,3,7,2,16,13,1,32,13,128,13, |
224,13,3,15,13,1,7,7,3,3,10,5,95,2,18,0,0,47,63,237,51,63,51,47,1,93,93,113, |
47,94,93,237,47,93,93,113,113,237,18,57,47,237,49,48,1,17,33,17,51,17,33, |
17,51,17,33,17,2,134,254,34,191,2,247,186,254,34,254,104,1,152,5,129,251, |
31,4,225,250,127,254,104,255,255,0,4,0,0,5,82,5,129,18,6,0,36,0,0,0,2,0,168, |
0,0,4,214,5,129,0,16,0,25,0,142,64,70,116,25,132,25,148,25,3,123,18,139,18, |
155,18,3,153,14,1,38,14,1,9,9,0,90,223,17,1,80,17,128,17,2,31,17,1,255,17, |
1,192,17,1,159,17,1,0,17,16,17,32,17,64,17,4,17,11,22,90,0,6,16,6,64,6,3, |
7,6,48,27,1,27,184,255,192,64,27,30,35,72,223,27,1,21,95,64,11,1,160,11,208, |
11,2,11,11,6,10,95,7,3,22,95,6,18,0,63,237,63,237,18,57,47,93,113,237,1,93, |
43,113,47,94,93,237,50,47,93,93,93,93,113,113,113,237,50,47,49,48,0,93,93, |
93,93,1,20,14,2,35,33,17,33,21,33,17,33,50,30,2,7,52,38,35,33,17,33,50,54, |
4,214,61,121,182,121,253,183,3,158,253,33,1,126,125,186,124,62,192,164,164, |
254,153,1,111,164,156,1,157,87,150,112,64,5,129,156,254,72,58,105,147,92, |
121,129,254,2,136,0,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,255,255, |
0,168,0,1,4,47,5,130,16,6,1,93,0,0,0,2,0,15,254,104,5,69,5,129,0,16,0,25, |
0,194,64,95,150,10,1,150,20,1,150,15,1,144,19,1,134,19,1,115,22,131,22,2, |
3,147,24,1,2,128,24,1,114,24,1,102,24,1,85,11,101,11,2,90,14,106,14,2,97, |
23,145,23,2,83,23,1,53,23,69,23,2,2,92,3,3,0,90,191,17,207,17,2,160,17,1, |
31,17,95,17,127,17,143,17,159,17,5,0,17,1,8,17,20,25,36,25,52,25,3,25,184, |
255,248,64,11,22,25,72,20,19,36,19,52,19,3,19,184,255,248,64,28,22,25,72, |
9,15,19,25,4,6,92,7,15,27,47,27,2,19,95,15,3,8,0,25,95,5,18,7,2,0,47,51,63, |
237,50,50,63,237,1,93,47,237,23,51,43,113,43,113,47,94,93,93,93,93,237,50, |
47,237,49,48,93,93,93,93,93,93,93,93,95,93,95,93,93,93,93,93,93,37,51,17, |
35,17,33,17,35,17,51,62,3,55,19,33,3,17,33,3,14,3,7,4,150,175,180,252,50, |
180,144,41,66,55,44,18,67,2,212,186,254,137,49,18,40,46,54,32,160,253,200, |
1,152,254,104,2,56,51,138,181,228,141,1,254,251,31,4,65,254,144,134,221,178, |
137,51,255,255,0,168,0,0,4,254,5,129,18,6,0,40,0,0,0,1,0,28,0,0,7,71,5,129, |
0,41,1,72,64,41,133,8,1,117,31,133,31,2,117,14,1,99,24,1,108,25,124,25,140, |
25,3,108,26,124,26,140,26,3,101,13,117,13,133,13,3,33,40,14,17,72,6,184,255, |
216,64,35,14,17,72,58,24,74,24,2,41,24,1,53,15,69,15,117,15,3,3,39,15,1,27, |
48,14,17,72,40,27,56,27,72,27,3,12,184,255,208,64,11,14,17,72,39,12,55,12, |
71,12,3,31,184,255,224,179,14,17,72,31,184,255,240,64,73,10,13,72,8,32,14, |
17,72,8,16,10,13,72,34,31,27,31,28,28,32,21,40,90,41,5,8,12,8,41,11,11,7, |
18,52,41,1,116,41,196,41,228,41,3,41,33,32,16,32,64,29,32,72,228,32,1,155, |
32,171,32,2,68,32,116,32,2,11,32,43,32,2,32,6,7,184,255,240,64,51,171,7,187, |
7,2,7,68,43,116,43,132,43,228,43,4,47,43,1,2,15,43,1,31,8,34,5,8,5,39,0,96, |
21,127,18,175,18,2,47,18,1,18,18,6,27,19,11,3,41,33,6,18,0,63,51,51,63,51, |
51,18,57,47,93,113,51,237,50,57,57,17,51,17,51,1,93,95,93,93,47,93,56,51, |
47,93,93,93,93,43,56,51,47,93,113,51,18,57,47,18,57,51,17,51,16,237,50,17, |
57,47,57,51,17,51,49,48,43,43,43,43,93,43,93,43,93,95,93,93,93,43,43,93,93, |
93,0,93,1,93,0,93,93,1,34,46,2,39,1,35,1,38,39,1,51,19,30,3,51,17,51,17,50, |
62,2,55,19,51,1,6,7,1,35,1,14,3,35,17,35,3,82,17,45,48,46,17,254,85,222,1, |
253,48,131,254,229,200,205,66,90,76,81,57,191,57,81,76,90,66,205,200,254, |
229,131,48,1,253,222,254,85,17,46,48,45,17,191,2,133,6,11,13,8,253,85,3,7, |
35,189,1,154,254,207,99,123,68,24,2,107,253,149,24,68,123,99,1,49,254,102, |
189,35,252,249,2,171,8,13,11,6,253,123,0,1,0,67,255,236,4,112,5,149,0,60, |
1,7,64,51,138,33,1,134,7,1,124,28,140,28,2,3,112,21,1,112,20,1,2,96,20,1, |
101,8,117,8,133,8,3,132,34,1,101,34,117,34,2,124,13,1,90,13,106,13,2,59,23, |
75,23,2,33,184,255,232,64,122,11,16,72,5,43,1,3,51,20,25,90,46,64,25,37,72, |
46,46,56,90,16,139,36,155,36,171,36,3,127,20,1,2,95,20,111,20,2,36,20,36, |
20,5,112,16,1,79,16,111,16,2,255,16,1,160,16,1,127,16,1,0,16,16,16,48,16, |
3,16,175,5,191,5,2,5,64,32,45,72,5,64,13,16,72,5,51,20,95,127,21,175,21,2, |
21,21,11,41,35,64,13,16,72,35,35,30,95,41,4,11,95,0,32,6,48,6,112,6,128,6, |
4,208,6,1,6,184,255,192,182,13,17,72,6,6,0,19,0,63,50,47,43,93,113,16,237, |
63,237,51,47,43,17,18,57,47,113,237,57,1,47,43,43,93,47,93,93,93,93,113,113, |
18,57,57,47,47,93,95,93,113,16,237,50,47,43,237,18,57,49,48,0,95,93,1,43, |
93,93,93,93,93,93,93,95,93,93,95,93,93,0,93,5,34,46,2,39,55,30,3,51,50,62, |
2,53,52,38,43,1,53,51,50,54,53,52,46,2,35,34,14,2,7,39,62,3,51,50,30,2,21, |
20,14,2,7,30,3,21,20,14,2,2,109,118,176,130,94,36,165,24,66,91,121,80,77, |
122,85,45,192,202,71,71,181,173,39,72,104,65,77,114,83,56,19,178,33,96,132, |
168,105,108,172,120,64,40,73,104,63,67,117,87,51,69,132,192,20,50,91,128, |
79,77,55,98,75,44,37,69,100,64,133,118,148,119,123,55,86,59,30,40,68,90,49, |
61,82,127,87,45,53,96,136,83,68,107,80,55,15,10,50,82,115,73,95,156,113,62, |
0,1,0,168,0,0,5,24,5,129,0,19,0,123,64,17,172,18,1,138,18,154,18,2,147,8, |
163,8,2,133,8,1,19,184,255,232,64,65,9,17,72,9,24,9,17,72,11,92,41,9,1,9, |
64,12,80,12,144,12,3,224,12,1,143,12,159,12,175,12,3,0,12,48,12,2,12,166, |
19,1,19,2,92,0,1,16,1,2,7,1,15,21,47,21,2,9,18,9,1,3,12,12,8,0,18,0,63,50, |
50,47,63,51,51,47,1,93,47,94,93,237,50,113,47,93,93,93,113,51,113,237,49, |
48,43,43,0,93,93,93,93,51,17,51,17,20,6,7,6,7,1,51,17,35,17,52,54,55,54,55, |
1,168,172,2,2,2,2,2,238,222,170,1,2,1,2,253,26,5,129,252,100,51,98,39,46, |
40,4,174,250,127,3,168,39,89,38,44,44,251,90,0,255,255,0,168,0,0,5,24,7,58, |
18,38,1,174,0,0,17,7,2,145,1,146,1,74,0,19,64,11,1,20,5,38,1,6,25,33,0,10, |
37,1,43,53,0,43,53,0,0,0,0,1,0,168,0,0,4,157,5,129,0,22,0,151,64,104,84,12, |
116,12,132,12,3,84,15,1,139,8,1,122,8,1,89,8,105,8,2,140,14,1,14,24,13,16, |
72,58,5,1,100,12,116,12,132,12,3,80,12,1,53,12,69,12,2,15,12,8,12,9,16,32, |
9,96,9,128,9,3,9,9,13,2,21,90,32,22,1,22,14,13,16,15,13,127,13,207,13,239, |
13,4,47,13,1,13,47,24,1,15,12,20,96,47,2,1,2,2,22,13,18,8,0,3,0,63,50,63, |
51,57,47,93,237,50,57,1,93,47,93,113,56,51,47,93,237,50,17,57,47,93,56,57, |
51,17,51,49,48,93,93,93,93,43,93,93,93,93,93,0,93,19,51,17,50,62,2,55,19, |
51,1,6,7,1,35,1,14,3,35,17,35,168,191,57,81,76,90,66,205,200,254,229,131, |
48,1,253,222,254,85,17,46,48,45,17,191,5,129,253,149,24,68,123,99,1,49,254, |
102,189,35,252,249,2,171,8,13,11,6,253,123,0,0,0,0,1,0,18,255,240,4,153,5, |
129,0,27,0,176,64,35,150,1,1,147,3,1,117,3,133,3,2,85,4,149,4,2,145,7,1,115, |
7,131,7,2,85,7,101,7,2,129,6,145,6,2,6,184,255,216,64,46,12,15,72,37,6,53, |
6,2,26,2,1,26,23,106,23,122,23,138,23,4,26,90,32,27,64,27,2,224,27,1,95,27, |
1,0,27,1,8,27,20,6,36,6,52,6,3,6,184,255,248,64,14,22,25,72,73,1,1,20,1,36, |
1,52,1,3,1,184,255,248,64,26,22,25,72,9,24,73,24,2,1,6,24,3,12,128,29,1,27, |
18,1,95,24,3,16,95,9,19,0,63,237,63,237,63,1,93,47,23,51,113,43,113,113,43, |
113,47,94,93,93,93,113,237,49,48,93,93,93,43,93,93,93,93,93,93,93,93,1,33, |
3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,35,3,223,254,94,49, |
22,43,49,60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,2,255,186, |
4,225,254,144,172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161, |
1,254,250,127,255,255,0,168,0,0,6,2,5,129,18,6,0,48,0,0,255,255,0,168,0,0, |
5,32,5,129,18,6,0,43,0,0,255,255,0,97,255,236,5,215,5,150,18,6,0,50,0,0,255, |
255,0,166,0,0,5,30,5,129,17,6,1,106,254,0,0,88,185,0,9,255,192,179,27,27, |
72,9,184,255,192,179,21,21,72,9,184,255,192,179,20,20,72,9,184,255,192,179, |
19,19,72,9,184,255,192,179,17,17,72,9,184,255,192,179,16,16,72,9,184,255, |
192,179,15,15,72,9,184,255,192,179,14,14,72,9,184,255,192,183,11,11,72,9, |
64,9,9,72,43,43,43,43,43,43,43,43,43,43,0,0,255,255,0,168,0,0,4,234,5,129, |
18,6,0,51,0,0,255,255,0,104,255,236,5,121,5,150,18,6,0,38,0,0,255,255,0,46, |
0,0,4,180,5,129,18,6,0,55,0,0,0,1,0,55,255,236,5,31,5,129,0,25,0,181,64,111, |
217,24,1,139,24,1,90,24,106,24,122,24,3,41,24,1,85,23,101,23,133,23,3,70, |
23,1,214,22,1,131,22,1,100,22,116,22,2,86,22,1,121,18,1,128,2,1,5,2,21,2, |
2,132,1,1,131,0,1,84,0,100,0,2,70,0,1,198,23,214,23,2,113,23,129,23,2,86, |
23,102,23,2,143,3,1,58,3,74,3,2,20,23,24,32,25,144,25,2,25,16,25,22,10,63, |
21,79,21,111,21,127,21,4,21,184,255,240,64,14,21,23,20,21,5,24,24,21,3,11, |
14,95,5,19,0,63,237,50,63,51,47,17,18,57,57,1,47,56,93,50,50,47,56,93,51, |
57,57,49,48,0,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,1,14,3,35,34,46,2,39,55,30,1,51,50,62,2,63,1,1,51,9,1,51,2,222,47, |
81,90,109,75,32,66,64,58,23,81,35,83,48,37,58,53,57,38,49,253,195,218,1,193, |
1,128,205,1,62,88,128,82,40,10,18,26,16,144,22,37,21,52,90,68,89,3,186,252, |
240,3,16,0,0,3,0,118,255,245,5,159,5,139,0,29,0,40,0,51,0,143,64,92,70,28, |
86,28,102,28,3,73,17,89,17,105,17,3,59,51,1,59,31,1,53,43,1,38,43,1,53,39, |
1,38,39,1,41,90,15,8,30,90,0,35,24,7,90,46,21,224,8,1,79,8,1,32,8,1,8,32, |
53,1,112,53,208,53,224,53,3,79,53,1,16,53,1,36,47,96,10,6,10,34,49,96,20, |
24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57,47,47,17,51,16,237,50,17,51, |
16,237,50,1,93,93,93,113,47,93,93,93,51,51,253,50,50,220,237,16,220,237,49, |
48,0,93,93,93,93,93,93,1,93,93,1,20,14,2,43,1,21,35,53,35,34,46,2,53,52,62, |
2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17,51,50,62,2,37,20,30,2,59,1,17, |
35,34,6,5,159,64,131,197,133,40,191,40,133,197,131,64,67,133,201,135,29,191, |
28,135,202,133,67,192,185,183,5,13,92,136,89,43,252,87,43,89,136,92,13,9, |
182,182,2,224,105,188,143,84,227,227,84,143,188,105,113,185,131,72,182,182, |
72,131,185,117,187,180,253,22,53,98,140,88,88,140,98,53,2,234,180,0,255,255, |
0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,168,254,104,5,197,5,129,0,11,0,74, |
64,47,1,92,2,2,11,90,0,8,1,175,8,1,0,8,64,8,112,8,3,8,7,90,0,4,16,4,64,4, |
3,7,4,32,13,224,13,2,9,9,5,3,11,11,7,95,4,18,2,0,47,63,237,50,47,63,51,47, |
1,93,47,94,93,237,47,93,93,113,237,50,47,237,49,48,37,17,35,17,33,17,51,17, |
33,17,51,17,5,197,180,251,151,191,2,245,186,160,253,200,1,152,5,129,251,31, |
4,225,251,31,0,0,0,1,0,160,0,0,4,174,5,129,0,25,0,134,64,70,164,14,1,20,40, |
13,17,72,1,32,13,17,72,42,7,58,7,74,7,3,23,90,25,144,22,1,143,22,1,48,22, |
64,22,2,207,22,1,112,22,1,111,22,1,16,22,64,22,2,22,12,90,207,11,1,0,11,16, |
11,64,11,3,7,11,32,27,1,32,27,1,27,184,255,192,64,19,14,17,72,0,5,95,21,47, |
16,1,16,16,11,24,18,22,22,11,3,0,63,51,47,63,18,57,47,93,51,237,50,1,43,93, |
113,47,94,93,93,237,47,93,93,93,93,113,113,113,51,237,49,48,0,93,43,43,93, |
1,14,3,35,34,46,2,53,17,51,17,20,22,51,50,62,2,55,17,51,17,35,3,240,36,94, |
107,115,56,114,166,108,52,190,130,134,53,110,104,92,35,190,190,1,252,8,20, |
18,12,47,92,137,89,2,82,253,194,123,108,10,15,17,7,2,244,250,127,0,0,1,0, |
168,0,0,6,173,5,129,0,11,0,114,64,76,7,90,4,4,0,11,90,36,8,1,11,8,1,228,8, |
1,219,8,1,148,8,1,123,8,1,4,8,20,8,100,8,3,8,3,90,4,0,68,0,228,0,3,7,0,235, |
13,1,196,13,1,187,13,1,132,13,1,112,13,1,2,64,13,1,15,13,1,9,5,1,3,7,7,3, |
95,0,18,0,63,237,50,47,63,51,51,1,93,93,95,93,93,93,93,93,47,94,93,237,47, |
93,93,93,93,93,113,113,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,168,191,1,233,186,1,233,186,5,129,251,31,4,225,251,31,4,225,250, |
127,0,1,0,168,254,104,7,47,5,129,0,15,0,125,64,84,132,17,148,17,180,17,3, |
123,17,1,84,17,1,1,92,2,2,15,90,12,11,90,8,8,4,11,12,59,12,75,12,91,12,123, |
12,139,12,155,12,203,12,8,219,12,251,12,2,207,12,1,2,159,12,1,128,12,1,111, |
12,1,0,12,1,8,12,7,90,32,4,1,4,13,9,5,3,15,15,11,11,7,95,4,18,2,0,47,63,237, |
50,47,50,47,63,51,51,1,47,93,237,47,94,93,93,93,93,95,93,93,113,18,57,47, |
237,16,237,50,47,237,93,93,93,49,48,37,17,35,17,33,17,51,17,33,17,51,17,33, |
17,51,17,7,47,180,250,45,191,1,211,186,1,210,186,160,253,200,1,152,5,129, |
251,31,4,225,251,31,4,225,251,31,0,2,0,46,0,0,5,235,5,129,0,16,0,25,0,100, |
64,68,116,25,132,25,148,25,3,123,18,139,18,155,18,3,153,3,1,38,3,1,64,27, |
1,6,90,47,17,127,17,2,176,17,1,159,17,1,0,17,16,17,32,17,64,17,4,7,17,14, |
0,22,90,32,12,1,12,21,95,0,0,12,14,95,15,3,22,95,12,18,0,63,237,63,237,18, |
57,47,237,1,47,93,253,50,204,47,94,93,93,93,113,237,93,49,48,0,93,93,93,93, |
1,33,50,30,2,21,20,14,2,35,33,17,33,53,33,1,52,38,35,33,17,33,50,54,2,184, |
1,66,125,186,124,62,61,121,182,121,253,243,254,53,2,138,2,115,164,164,254, |
213,1,51,164,156,3,45,58,105,147,90,87,150,112,64,4,229,156,252,26,121,129, |
254,2,136,0,3,0,168,0,0,6,109,5,129,0,14,0,23,0,27,0,140,64,76,116,23,132, |
23,148,23,3,123,16,139,16,155,16,3,153,12,1,38,12,1,27,90,159,24,207,24,223, |
24,3,16,24,64,24,80,24,112,24,4,24,0,90,0,15,1,224,15,1,159,15,1,0,15,16, |
15,32,15,64,15,4,15,9,20,90,0,6,16,6,64,6,3,7,6,128,29,1,29,184,255,192,64, |
19,11,14,72,19,95,9,9,6,7,25,25,7,3,24,24,20,95,6,18,0,63,237,51,47,63,51, |
47,17,18,57,47,237,1,43,93,47,94,93,237,50,47,93,93,93,113,237,47,93,93,237, |
49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50,30,2,7,52,38,35,33,17, |
33,50,54,1,17,51,17,4,214,61,121,182,121,253,183,191,1,126,125,186,124,62, |
192,164,164,254,153,1,111,164,156,1,152,191,1,157,87,150,112,64,5,129,253, |
172,58,105,147,92,121,129,254,2,136,254,225,5,129,250,127,0,2,0,168,0,0,4, |
214,5,129,0,14,0,23,0,107,64,76,116,23,132,23,148,23,3,123,16,139,16,155, |
16,3,153,12,1,38,12,1,0,90,31,15,1,160,15,176,15,2,159,15,1,0,15,16,15,32, |
15,64,15,96,15,5,15,9,20,90,0,6,16,6,2,7,6,175,25,1,64,25,128,25,144,25,3, |
19,95,9,9,6,7,3,20,95,6,18,0,63,237,63,18,57,47,237,1,93,93,47,94,93,237, |
50,47,93,93,93,113,237,49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50, |
30,2,7,52,38,35,33,17,33,50,54,4,214,61,121,182,121,253,183,191,1,126,125, |
186,124,62,192,164,164,254,153,1,111,165,155,1,157,87,150,112,64,5,129,253, |
172,58,105,147,96,121,131,254,4,131,0,1,0,105,255,236,5,121,5,150,0,42,0, |
206,64,81,115,26,131,26,2,115,28,131,28,2,101,28,1,115,4,131,4,2,101,4,1, |
115,2,131,2,2,101,2,1,101,12,1,101,11,1,135,17,1,106,17,1,90,33,138,33,2, |
10,32,26,32,90,32,3,10,40,26,40,2,36,36,24,38,14,91,32,35,112,35,2,144,35, |
176,35,2,127,35,1,64,35,1,35,184,255,192,64,63,7,10,72,35,6,80,24,96,24,2, |
175,24,191,24,2,32,24,1,24,35,95,127,38,175,38,2,38,38,9,30,95,19,16,25,32, |
25,2,48,25,64,25,112,25,128,25,192,25,208,25,6,25,25,19,19,79,5,1,5,5,0,95, |
9,4,0,63,237,51,47,93,63,51,47,93,113,16,237,17,57,47,113,237,1,47,93,93, |
113,51,47,43,93,93,93,113,237,51,18,57,47,49,48,0,93,1,93,93,0,93,93,93,1, |
93,93,93,93,93,93,93,93,1,34,14,2,7,39,54,36,51,50,4,22,18,21,20,2,6,4,35, |
34,46,2,39,55,30,3,51,50,62,2,55,33,53,33,46,3,2,201,88,137,102,69,19,181, |
71,1,46,225,164,1,0,175,91,86,172,254,255,171,118,189,149,113,41,156,27,81, |
109,140,87,109,176,128,77,9,253,114,2,142,10,73,124,173,4,250,42,70,91,50, |
60,173,176,101,187,254,246,165,159,254,244,195,109,54,99,136,83,78,55,105, |
83,50,72,132,185,112,154,110,178,126,68,0,0,2,0,168,255,236,7,179,5,150,0, |
26,0,46,0,168,64,63,165,7,1,133,24,1,138,20,1,121,29,1,118,35,1,118,39,1, |
74,19,138,19,2,58,30,122,30,2,53,34,117,34,2,42,44,58,44,122,44,3,37,40,53, |
40,117,40,3,160,48,1,0,91,144,27,160,27,2,160,27,176,27,2,27,184,255,192, |
64,54,7,11,72,27,16,12,90,0,13,16,13,64,13,3,7,13,37,91,17,48,10,112,10,2, |
10,32,95,22,4,11,95,80,16,1,176,16,224,16,2,15,16,1,8,16,16,13,14,3,13,18, |
42,95,5,19,0,63,237,63,63,18,57,47,94,93,93,113,237,63,237,1,47,93,51,237, |
47,94,93,237,50,47,43,93,113,237,93,49,48,93,93,93,93,93,93,93,93,93,93,93, |
1,20,2,14,1,35,34,46,2,39,33,17,35,17,51,17,33,62,3,51,50,30,1,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,7,179,90,170,245,155,156,239,165,90,7, |
254,217,191,191,1,42,13,99,166,232,146,159,245,167,87,195,60,117,173,113, |
116,175,117,58,60,117,173,114,121,176,114,54,2,199,165,254,242,192,104,99, |
179,247,148,253,115,5,129,253,172,142,229,160,86,102,188,254,246,163,127, |
208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,2,0,96,0,0,5,32,5,129, |
0,17,0,30,0,239,64,22,156,29,172,29,2,138,29,1,147,20,1,117,20,133,20,2,67, |
17,83,17,2,17,184,255,216,64,25,33,36,72,130,17,146,17,162,17,3,100,17,116, |
17,2,86,17,1,67,16,83,16,2,3,16,184,255,216,64,117,33,36,72,172,16,1,155, |
16,1,125,16,141,16,2,2,94,16,110,16,2,73,16,1,44,16,60,16,2,3,175,1,1,2,1, |
104,14,16,72,94,1,110,1,2,73,1,1,44,1,60,1,2,16,1,1,6,24,24,14,18,90,6,6, |
0,13,90,224,14,1,143,14,159,14,175,14,207,14,4,0,14,64,14,2,7,14,17,32,0, |
1,15,0,31,0,2,0,1,15,95,47,24,95,24,111,24,143,24,4,24,24,0,26,95,11,3,14, |
14,0,18,0,63,50,47,63,237,18,57,47,93,237,50,1,47,93,93,51,47,94,93,93,93, |
237,18,57,47,237,17,51,17,18,57,17,51,49,48,93,93,93,43,95,93,95,93,93,93, |
95,93,93,93,43,95,113,93,93,93,43,113,0,93,93,93,93,51,1,46,3,53,52,62,2, |
51,33,17,35,17,33,1,19,20,30,2,51,33,17,33,34,14,2,96,1,144,91,130,84,39, |
66,126,185,120,2,151,191,254,73,254,146,28,37,77,119,83,1,205,254,59,76,120, |
84,44,2,95,16,78,108,130,67,94,150,104,55,250,127,2,73,253,183,3,236,57,98, |
72,41,2,8,31,63,94,255,255,0,87,255,236,4,115,4,78,18,6,0,68,0,0,0,2,0,120, |
255,236,4,63,5,222,0,19,0,56,0,158,64,69,137,44,1,122,45,138,45,2,102,21, |
118,21,134,21,3,84,18,1,84,12,1,91,2,1,90,35,122,35,138,35,3,90,47,106,47, |
138,47,3,123,46,139,46,2,73,46,105,46,2,42,42,23,71,64,208,0,1,144,0,1,0, |
58,128,48,58,1,128,58,1,58,184,255,192,64,12,30,35,72,52,10,71,0,31,32,31, |
2,31,184,255,192,64,23,26,35,72,31,52,5,80,20,20,42,48,41,1,64,41,240,41, |
2,41,15,80,26,22,0,63,237,47,93,113,51,57,47,237,50,1,47,43,93,237,57,43, |
93,113,26,16,220,93,113,26,237,50,47,49,48,0,93,93,93,93,93,93,93,93,93,93, |
1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,3,50,18,17,16,2,35,34,46,2,53, |
52,18,62,1,55,62,3,55,21,14,1,7,14,5,7,62,3,3,130,39,73,104,65,69,114,81, |
44,44,77,105,62,69,112,78,42,243,222,210,250,238,113,178,123,65,58,128,206, |
147,57,100,91,86,43,86,161,91,78,124,94,67,44,23,2,19,67,97,126,1,246,114, |
151,91,37,39,92,150,112,114,150,89,36,36,88,151,2,127,254,251,254,250,254, |
247,254,253,70,156,250,180,192,1,22,193,115,28,11,17,14,12,6,161,11,23,17, |
14,33,50,73,108,149,101,55,97,72,41,0,0,0,0,3,0,142,0,0,3,231,4,58,0,23,0, |
36,0,47,0,149,64,12,42,19,1,37,2,1,26,18,42,18,2,3,184,255,232,64,33,9,12, |
72,139,10,155,10,2,10,38,44,71,5,5,24,16,71,64,47,30,159,30,2,160,30,1,30, |
49,128,64,49,1,49,184,255,192,64,50,30,35,72,31,49,63,49,239,49,3,38,24,70, |
192,22,1,0,22,16,22,48,22,224,22,240,22,5,8,22,10,36,81,143,38,159,38,175, |
38,3,38,38,24,37,80,23,15,24,80,22,21,0,63,237,63,237,18,57,47,113,237,57, |
1,47,94,93,113,237,50,93,43,113,26,16,220,93,113,26,237,17,57,47,237,18,57, |
93,49,48,0,43,93,93,93,1,50,30,2,21,20,14,2,7,21,30,3,21,20,14,2,35,33,17, |
19,51,50,62,2,53,52,46,2,43,1,25,1,51,50,62,2,53,52,38,35,2,52,76,144,112, |
68,35,60,82,46,54,95,69,40,61,109,151,91,254,67,180,236,69,95,59,27,28,63, |
100,71,224,216,68,91,55,23,102,121,4,58,24,62,104,81,53,81,58,37,9,7,7,35, |
61,90,61,78,117,78,39,4,58,252,75,20,44,67,47,50,70,44,20,1,194,254,192,19, |
39,61,43,82,76,0,1,0,142,0,0,2,175,4,58,0,5,0,54,64,35,0,64,18,39,72,48,0, |
1,0,0,7,3,70,192,4,1,0,4,16,4,48,4,224,4,240,4,5,8,4,2,80,5,15,3,21,0,63, |
63,237,1,47,94,93,113,237,17,51,47,93,43,49,48,1,21,33,17,35,17,2,175,254, |
147,180,4,58,131,252,73,4,58,0,0,0,2,0,20,254,104,4,136,4,58,0,7,0,23,0,159, |
64,65,134,3,1,32,3,1,102,1,1,34,5,114,5,130,5,3,34,20,1,34,17,1,137,18,1, |
34,18,1,25,19,121,19,2,102,2,118,2,2,34,2,1,25,2,1,34,16,1,4,16,1,98,4,1, |
4,4,36,4,68,4,84,4,4,8,73,9,184,255,192,64,42,18,25,72,9,9,22,70,64,111,7, |
127,7,143,7,3,32,7,64,7,2,7,25,128,20,15,12,73,6,1,13,1,80,20,15,22,6,14, |
80,11,21,13,8,0,47,51,63,237,50,50,63,237,1,47,51,51,237,51,51,26,16,220, |
93,93,26,237,50,47,43,237,49,48,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,1,33,6,2,14,1,7,33,1,35,17,33,17,35,17,51,62,2,18,55,33,17,51,3,66, |
254,206,24,49,48,48,22,1,241,1,70,163,252,210,163,119,30,58,58,57,28,2,132, |
146,3,183,177,254,249,194,136,50,253,229,1,152,254,104,2,27,50,143,220,1, |
59,223,252,73,255,255,0,87,255,236,4,24,4,78,18,6,0,72,0,0,0,1,0,7,0,0,5, |
83,4,58,0,39,1,97,64,88,165,23,1,165,14,1,171,34,1,164,3,1,172,24,1,154,24, |
1,163,13,1,149,13,1,90,6,106,6,122,6,3,85,31,101,31,117,31,3,74,33,154,33, |
170,33,3,69,4,149,4,165,4,3,42,28,58,28,2,37,9,53,9,2,34,31,170,26,1,26,31, |
27,16,27,27,32,20,38,70,39,165,11,1,11,10,3,6,6,39,10,184,255,240,64,49,10, |
10,17,39,39,5,33,32,16,15,32,1,255,32,1,160,32,1,159,32,1,80,32,1,63,32,1, |
32,32,1,207,32,1,128,32,144,32,2,95,32,1,32,32,48,32,2,32,4,5,184,255,240, |
64,64,31,5,47,5,2,127,5,159,5,2,63,5,159,5,223,5,255,5,4,5,15,41,1,255,41, |
1,160,41,1,111,41,159,41,2,80,41,1,63,41,1,32,41,1,207,41,1,128,41,144,41, |
2,79,41,95,41,2,48,41,1,31,6,34,3,6,184,255,240,64,37,11,17,72,6,3,37,0,80, |
20,15,17,31,17,79,17,95,17,4,15,17,31,17,79,17,3,7,17,17,4,26,18,10,15,39, |
33,4,21,0,63,51,51,63,51,51,18,57,47,94,93,113,51,237,50,57,57,43,17,51,17, |
51,1,93,93,93,93,113,113,113,113,113,113,114,47,93,113,114,56,51,47,93,93, |
93,93,113,113,113,113,113,113,114,56,51,18,57,47,51,57,47,56,18,57,17,51, |
17,51,93,16,237,50,17,57,47,56,57,51,93,17,51,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,0,93,93,1,34,38,39,1,35,1,46,1,39,3,51,23,30,3,51,17,51,17, |
50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,2,83,26,65,19,254,234,200,1, |
97,17,66,45,216,188,148,48,65,52,48,30,180,30,48,52,65,48,148,188,216,45, |
66,17,1,97,200,254,234,19,65,26,180,1,221,12,8,254,15,2,80,14,85,66,1,69, |
239,77,92,50,16,1,218,254,38,16,50,92,77,239,254,187,66,85,14,253,176,1,241, |
8,12,254,35,0,0,0,1,0,49,255,236,3,94,4,78,0,55,0,175,64,28,5,53,21,53,2, |
5,38,21,38,37,38,3,131,45,1,45,15,21,70,40,40,51,71,10,29,73,64,30,184,255, |
192,64,86,30,36,72,143,15,1,30,15,30,15,3,144,10,1,144,10,160,10,2,31,10, |
1,10,57,128,16,57,1,4,73,3,64,12,20,72,3,45,15,80,143,16,159,16,175,16,3, |
16,16,35,7,0,29,1,144,29,224,29,240,29,3,29,29,24,80,35,16,7,80,0,96,4,112, |
4,128,4,3,239,4,1,32,4,1,4,4,0,22,0,63,50,47,93,93,113,16,237,63,237,51,47, |
93,113,17,18,57,47,113,237,57,1,47,43,237,93,26,16,204,93,93,113,17,57,57, |
47,47,93,43,26,237,16,237,50,47,237,18,57,113,49,48,93,93,5,34,38,39,55,30, |
1,51,50,54,53,52,46,2,35,53,50,62,2,53,52,38,35,34,14,2,7,39,62,3,51,50,30, |
2,21,20,14,2,7,21,30,3,21,20,14,2,1,202,167,197,45,159,25,126,103,96,113, |
55,92,120,64,64,114,86,49,99,93,35,70,60,42,7,162,12,62,97,128,78,85,138, |
98,53,44,71,88,45,56,100,75,43,49,101,152,20,125,129,44,78,86,94,91,59,78, |
45,18,137,15,38,67,52,74,86,14,33,55,42,20,68,98,63,29,42,76,104,63,57,88, |
61,36,4,2,6,41,67,93,58,69,119,87,49,0,0,0,0,1,0,142,0,0,3,234,4,58,0,19, |
0,186,64,25,9,17,1,233,17,249,17,2,4,15,1,228,15,244,15,2,11,5,1,235,5,251, |
5,2,16,184,255,192,64,107,29,60,72,153,16,1,6,64,29,60,72,119,6,151,6,2,6, |
7,1,230,7,246,7,2,156,7,1,105,7,137,7,2,31,17,47,17,79,17,3,9,72,64,7,64, |
10,1,80,10,1,159,10,255,10,2,10,21,128,0,21,192,21,208,21,224,21,4,192,21, |
1,128,21,144,21,176,21,192,21,208,21,5,17,1,72,192,18,1,0,18,16,18,48,18, |
224,18,240,18,5,8,18,16,7,19,15,10,6,18,21,0,63,51,51,63,51,51,1,47,94,93, |
113,237,50,93,113,114,26,16,220,93,113,114,50,26,237,49,48,0,93,1,93,93,113, |
114,0,93,43,93,43,113,114,113,114,1,113,114,1,17,20,14,2,7,1,51,17,35,17, |
52,62,2,55,1,35,17,1,60,3,3,3,1,1,243,197,172,2,3,3,2,254,6,192,4,58,253, |
176,23,77,82,74,21,3,101,251,198,2,148,19,57,60,57,20,252,151,4,58,0,255, |
255,0,142,0,0,3,234,5,240,18,38,1,206,0,0,17,7,2,145,0,234,0,0,0,19,64,11, |
1,20,17,38,1,2,25,33,18,8,37,1,43,53,0,43,53,0,0,0,0,1,0,138,0,0,3,138,4, |
58,0,21,0,202,64,17,117,16,133,16,149,16,3,57,15,121,15,137,15,153,15,4,13, |
184,255,208,64,123,12,17,72,133,11,149,11,2,120,5,1,133,13,149,13,2,47,23, |
79,23,2,73,16,1,56,16,1,16,13,121,8,137,8,153,8,3,8,71,13,1,54,13,1,13,9, |
16,9,9,14,2,20,70,0,21,16,21,48,21,240,21,4,21,57,15,73,15,2,15,32,14,1,32, |
14,144,14,2,144,14,1,79,14,1,48,14,1,47,14,1,16,14,1,14,16,14,13,19,80,15, |
2,63,2,79,2,3,15,2,63,2,255,2,3,8,2,2,14,21,21,14,21,8,8,0,15,0,63,50,47, |
63,51,47,17,57,47,94,93,113,237,50,1,47,56,93,93,93,93,93,113,114,51,113, |
47,93,237,50,17,57,47,56,57,113,113,51,93,17,51,113,113,93,49,48,0,93,1,93, |
93,43,93,93,19,51,17,50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,138,180, |
30,48,52,65,48,148,188,216,45,66,17,1,97,200,254,234,19,65,26,180,4,58,254, |
38,16,50,92,77,239,254,187,66,85,14,253,176,1,241,8,12,254,35,0,0,0,0,1,0, |
11,255,236,4,29,4,58,0,25,0,186,64,42,26,21,1,130,7,1,116,7,1,85,7,101,7, |
2,130,6,1,117,6,1,22,6,38,6,102,6,3,114,5,130,5,2,100,5,1,86,5,1,134,4,1, |
4,184,255,240,64,61,12,15,72,26,3,1,116,2,1,7,24,12,17,72,25,70,64,127,0, |
143,0,239,0,3,0,27,128,176,27,192,27,208,27,3,176,27,240,27,2,64,27,96,27, |
112,27,160,27,176,27,192,27,6,131,23,1,23,54,6,1,6,2,184,255,240,64,26,24, |
28,72,215,2,231,2,2,128,2,1,2,143,12,1,12,2,80,23,15,16,80,9,22,0,21,0,63, |
63,237,63,237,1,47,93,51,93,93,43,51,113,51,93,93,113,114,26,16,220,93,26, |
237,49,48,0,43,1,93,93,43,93,93,93,93,93,93,93,93,93,93,93,33,17,33,6,2,14, |
3,35,34,38,39,53,30,1,51,50,62,3,18,55,33,17,3,104,254,137,25,42,44,51,71, |
94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2,206,3,183,184,254,225,216, |
149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,251,198,0,0,1,0,142,0,0,4,243, |
4,58,0,28,1,3,64,21,137,18,153,18,2,134,12,150,12,2,107,17,123,17,2,100,13, |
116,13,2,1,184,255,224,64,122,29,60,72,138,1,154,1,2,57,1,1,0,32,29,60,72, |
133,0,149,0,2,54,0,86,0,2,143,19,159,19,2,93,19,109,19,125,19,3,59,19,75, |
19,2,25,19,41,19,2,128,11,144,11,2,82,11,98,11,114,11,3,52,11,68,11,2,22, |
11,38,11,2,1,0,15,15,8,21,72,64,19,80,22,1,159,22,255,22,2,22,30,128,144, |
30,192,30,208,30,3,79,30,1,11,8,72,192,9,1,0,9,16,9,48,9,224,9,240,9,5,8, |
9,28,2,2,184,255,192,64,22,29,60,72,2,32,19,22,72,84,2,1,19,2,10,15,22,15, |
64,29,60,72,15,184,255,224,64,18,19,22,72,47,15,63,15,79,15,127,15,143,15, |
5,15,1,9,21,0,63,51,51,93,43,43,51,63,51,51,93,43,43,17,51,1,47,94,93,113, |
237,50,93,93,26,16,220,93,113,50,26,237,18,57,61,47,51,51,49,48,93,93,93, |
93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,33,35,1,30,3,21,17,35,17,33, |
19,30,1,23,62,1,55,19,33,17,35,17,52,62,2,55,3,19,153,254,188,1,3,1,1,174, |
1,24,220,23,37,8,10,35,23,220,1,13,173,1,3,2,2,3,183,26,60,61,57,23,253,44, |
4,58,253,107,63,151,72,72,151,63,2,149,251,198,2,212,22,60,64,60,23,0,1,0, |
142,0,0,3,221,4,58,0,11,0,139,64,48,5,70,64,2,15,6,79,6,2,57,47,6,111,6,143, |
6,255,6,4,191,6,1,143,6,159,6,255,6,3,6,13,128,0,13,192,13,208,13,224,13, |
4,192,13,1,128,13,1,13,184,255,192,64,49,19,23,72,1,9,70,192,10,1,0,10,16, |
10,48,10,224,10,240,10,5,10,8,80,176,1,192,1,2,159,1,175,1,191,1,3,15,1,63, |
1,2,8,1,1,10,5,21,3,0,15,0,63,50,63,51,57,47,94,93,113,114,237,1,47,93,113, |
237,50,43,93,113,114,26,16,220,93,113,114,94,93,50,26,237,49,48,1,17,33,17, |
51,17,35,17,33,17,35,17,1,66,1,231,180,180,254,25,180,4,58,254,54,1,202,251, |
198,1,237,254,19,4,58,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
142,0,0,3,199,4,58,0,7,0,109,64,80,1,70,64,15,2,79,2,2,57,47,2,111,2,143, |
2,255,2,4,191,2,1,143,2,159,2,255,2,3,2,9,128,0,9,192,9,208,9,224,9,4,192, |
9,1,128,9,176,9,192,9,208,9,4,47,9,1,5,70,192,6,1,0,6,16,6,48,6,224,6,240, |
6,5,8,6,4,80,7,15,6,1,21,0,63,51,63,237,1,47,94,93,113,237,93,93,113,114, |
26,16,220,93,113,114,94,93,26,237,49,48,1,17,35,17,33,17,35,17,3,199,180, |
254,47,180,4,58,251,198,3,183,252,73,4,58,0,255,255,0,132,254,87,4,29,4,77, |
18,6,0,83,0,0,255,255,0,87,255,236,3,202,4,78,18,6,0,70,0,0,0,1,0,35,0,0, |
3,135,4,58,0,7,0,72,64,43,7,14,4,2,5,14,223,2,1,2,4,70,0,5,16,5,2,8,5,5,8, |
9,160,9,1,95,9,1,48,9,64,9,2,47,9,1,4,21,3,7,80,0,15,0,63,237,50,63,1,93, |
93,93,93,17,18,57,47,94,93,237,204,93,43,1,24,16,77,228,49,48,19,33,21,33, |
17,35,17,33,35,3,100,254,168,180,254,168,4,58,131,252,73,3,183,0,0,0,255, |
255,0,5,254,87,3,252,4,58,18,6,0,92,0,0,0,3,0,86,254,87,6,62,5,204,0,53,0, |
74,0,95,0,229,64,13,141,93,157,93,173,93,3,78,24,14,17,72,72,184,255,232, |
179,14,17,72,57,184,255,232,182,14,17,72,109,82,1,51,184,255,224,64,75,7, |
10,72,15,26,31,26,47,26,3,24,32,7,10,72,0,3,16,3,32,3,3,7,4,54,71,64,25,14, |
13,0,14,14,75,71,36,0,68,0,148,0,164,0,4,0,85,39,13,72,65,38,4,14,1,4,14, |
36,14,68,14,100,14,132,14,180,14,228,14,7,7,14,52,97,1,97,184,255,192,64, |
52,30,35,72,219,97,1,84,97,100,97,132,97,148,97,4,64,97,1,2,32,97,48,97,2, |
31,97,1,0,97,1,38,0,31,45,80,3,70,80,49,28,16,8,18,91,3,59,80,5,22,22,13, |
27,0,63,63,51,237,23,50,63,51,237,23,50,63,1,93,93,93,95,93,93,93,43,113, |
47,94,93,113,51,51,237,50,50,220,93,237,43,1,24,16,77,244,26,237,49,48,95, |
94,93,43,93,0,43,93,1,43,43,43,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35, |
17,52,54,55,35,14,1,35,34,2,17,16,18,51,50,22,23,51,52,46,2,53,17,51,17,20, |
14,2,21,51,62,1,51,50,30,2,5,20,30,2,51,50,62,2,55,53,52,46,2,35,34,14,2, |
5,52,46,2,35,34,14,2,29,1,30,3,51,50,62,2,6,62,38,86,140,101,105,158,42,6, |
2,3,170,2,3,5,46,149,111,186,179,185,180,112,149,45,5,2,2,1,170,1,1,1,5,46, |
144,114,101,140,86,38,250,213,26,56,85,60,60,94,65,34,2,34,64,94,61,57,86, |
57,29,4,110,23,52,88,64,53,92,70,40,1,35,65,92,60,65,88,53,23,2,34,123,208, |
150,85,88,100,35,77,58,254,89,1,167,54,82,40,104,90,1,19,1,25,1,28,1,26,90, |
98,10,41,46,42,12,1,163,254,92,11,43,47,43,12,104,89,80,145,205,129,112,160, |
103,48,43,98,157,113,24,115,159,98,43,46,102,163,116,100,156,108,56,34,96, |
169,135,23,108,150,93,41,58,110,159,0,0,0,255,255,0,23,0,0,3,234,4,58,18, |
6,0,91,0,0,0,1,0,142,254,104,4,102,4,58,0,11,0,91,178,7,73,8,184,255,192, |
64,54,18,21,72,8,8,5,70,64,223,2,1,207,2,223,2,2,2,64,25,28,72,0,2,48,2,2, |
2,13,128,111,13,1,1,70,0,10,16,10,48,10,240,10,4,8,10,5,1,80,10,21,8,3,0, |
15,0,63,50,47,63,237,50,1,47,94,93,237,93,26,16,220,93,43,93,113,26,237,50, |
47,43,237,49,48,1,17,33,17,51,17,51,17,35,17,33,17,1,66,1,221,180,147,163, |
252,203,4,58,252,73,3,183,252,73,253,229,1,152,4,58,0,1,0,122,0,0,3,156,4, |
58,0,25,0,92,64,37,108,15,124,15,140,15,3,22,32,7,10,72,21,24,7,12,72,12, |
70,64,9,175,13,1,127,13,143,13,239,13,3,13,27,128,1,70,24,184,255,192,64, |
20,9,12,72,24,14,19,80,9,15,6,31,6,2,6,6,12,21,10,0,15,0,63,50,63,57,47,93, |
51,237,50,1,47,43,237,26,16,220,93,113,50,26,237,49,48,43,43,0,93,1,17,20, |
30,2,51,50,54,55,17,51,17,35,17,14,3,35,34,46,2,53,17,1,46,16,39,64,47,70, |
132,74,180,180,38,81,87,93,51,66,101,69,36,4,58,254,110,34,59,44,25,26,21, |
2,5,251,198,1,205,15,31,24,16,41,76,110,69,1,155,0,0,0,1,0,142,0,0,5,221, |
4,58,0,11,0,116,64,52,7,70,4,4,0,11,70,64,4,8,52,8,2,36,8,132,8,212,8,228, |
8,4,11,8,1,139,8,251,8,2,8,13,128,251,13,1,180,13,212,13,2,128,13,1,2,112, |
13,1,95,13,1,13,184,255,192,64,23,9,12,72,3,70,0,0,16,0,48,0,3,8,0,9,5,1, |
15,7,3,80,0,21,0,63,237,50,63,51,51,1,47,94,93,237,43,93,93,95,93,93,93,26, |
16,220,93,113,113,114,26,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,142,180,1,154,180,1,153,180,4,58,252,73,3,183,252,73,3,183,251,198, |
0,0,0,1,0,142,254,104,6,102,4,58,0,15,0,141,64,96,13,73,244,14,1,14,14,11, |
70,8,7,70,64,4,4,0,107,8,1,4,8,1,84,8,228,8,2,59,8,1,107,8,123,8,139,8,251, |
8,4,84,8,1,8,17,128,251,17,1,212,17,1,128,17,176,17,2,2,96,17,112,17,2,95, |
17,1,32,17,48,17,64,17,3,3,70,0,0,16,0,48,0,240,0,4,8,0,14,9,5,1,15,11,7, |
3,80,0,21,0,63,237,50,50,63,51,51,47,1,47,94,93,237,93,93,93,95,93,93,93, |
26,16,204,93,93,113,113,114,114,17,57,47,26,237,16,237,50,47,93,237,49,48, |
51,17,51,17,33,17,51,17,33,17,51,17,51,17,35,17,142,180,1,149,180,1,148,180, |
147,163,4,58,252,73,3,183,252,73,3,183,252,73,253,229,1,152,0,0,0,0,2,0,45, |
0,0,4,172,4,58,0,14,0,25,0,113,185,0,5,255,224,179,7,10,72,2,184,255,224, |
64,16,7,11,72,3,71,64,176,21,1,21,27,128,80,27,1,27,184,255,192,64,45,30, |
35,72,255,27,1,14,11,15,70,32,9,1,32,9,1,9,25,81,175,14,191,14,207,14,3,15, |
14,31,14,79,14,3,7,14,14,9,11,80,12,15,15,81,9,21,0,63,237,63,237,18,57,47, |
94,93,113,237,1,47,93,113,253,204,51,93,43,113,26,16,220,93,26,237,49,48, |
43,43,1,50,22,21,20,14,2,35,33,17,33,53,33,25,1,51,50,62,2,53,52,38,43,1, |
3,13,205,210,52,104,155,103,254,103,254,184,1,252,202,69,96,59,26,116,133, |
203,2,112,147,159,74,118,82,44,3,183,131,254,54,254,15,25,49,71,46,94,87, |
0,3,0,142,0,0,5,50,4,58,0,12,0,23,0,27,0,105,185,0,5,255,224,179,7,10,72, |
2,184,255,224,64,58,7,10,72,3,71,19,19,9,27,70,64,159,24,175,24,2,24,29,128, |
12,13,70,16,9,32,9,64,9,3,9,23,81,175,12,191,12,207,12,3,15,12,31,12,79,12, |
3,7,12,12,9,25,10,15,24,13,81,9,21,0,63,237,51,63,51,18,57,47,94,93,113,237, |
1,47,93,237,50,26,16,220,93,26,237,18,57,47,237,49,48,43,43,1,50,22,21,20, |
14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,1,17,51,17,2,38,205,210,52, |
104,155,103,254,103,180,202,69,96,59,26,116,133,203,3,60,180,2,112,147,159, |
74,118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,254,13,4,58,251,198,0,0, |
0,0,2,0,142,0,0,3,215,4,58,0,12,0,23,0,132,185,0,5,255,224,179,7,10,72,2, |
184,255,224,64,86,7,10,72,3,71,64,176,19,1,19,25,128,47,25,1,47,25,175,25, |
2,63,25,95,25,127,25,159,25,191,25,207,25,223,25,255,25,8,25,64,35,39,72, |
12,13,70,0,9,208,9,2,16,9,32,9,64,9,240,9,4,9,23,81,175,12,191,12,207,12, |
3,15,12,31,12,79,12,3,7,12,12,9,10,15,13,81,9,21,0,63,237,63,18,57,47,94, |
93,113,237,1,47,93,113,237,50,43,93,113,114,26,16,220,93,26,237,49,48,43, |
43,1,50,22,21,20,14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,2,56,205, |
210,52,104,155,103,254,85,180,220,69,96,59,26,116,133,221,2,112,147,159,74, |
118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,0,0,0,0,1,0,55,255,236,3,190, |
4,78,0,40,0,170,64,87,118,34,1,22,29,1,118,28,1,107,15,1,107,6,1,16,10,32, |
10,2,10,10,0,31,71,64,12,31,9,1,144,9,1,9,42,128,20,70,21,21,1,70,31,0,1, |
223,0,1,0,64,12,18,72,0,10,80,143,11,159,11,175,11,3,11,11,26,4,80,36,0,1, |
16,1,32,1,96,1,112,1,128,1,192,1,208,1,8,1,184,255,192,64,29,27,34,72,1,1, |
36,22,31,20,47,20,127,20,143,20,223,20,5,20,64,29,32,72,20,20,17,80,26,16, |
0,63,237,51,47,43,93,63,51,47,43,93,16,237,17,57,47,113,237,1,47,43,113,114, |
237,51,47,237,26,16,220,93,113,50,26,237,18,57,47,93,49,48,93,93,93,93,93, |
19,55,30,1,51,50,62,2,55,33,53,33,46,3,35,34,6,7,39,62,3,51,50,30,2,21,20, |
14,2,35,34,46,2,55,182,16,133,100,73,103,68,34,5,254,99,1,157,4,34,67,103, |
73,109,118,15,185,13,66,105,145,93,90,170,134,81,51,114,182,130,99,151,106, |
61,1,59,12,108,104,53,97,135,82,131,90,133,88,44,105,91,14,68,116,84,48,53, |
128,216,163,120,205,151,86,54,92,122,0,0,0,0,2,0,142,255,236,5,170,4,78,0, |
19,0,39,0,128,64,85,121,37,137,37,2,116,33,132,33,2,118,27,134,27,2,121,23, |
137,23,2,150,18,166,18,2,30,71,15,15,8,31,8,2,7,8,8,11,0,71,64,160,20,1,20, |
41,128,14,10,70,192,11,1,0,11,16,11,48,11,224,11,240,11,5,8,11,25,80,17,16, |
9,80,47,14,1,14,14,11,12,15,11,21,35,80,3,22,0,63,237,63,63,18,57,47,93,237, |
63,237,1,47,94,93,113,237,50,26,16,220,93,26,237,18,57,47,94,93,51,237,49, |
48,0,93,1,93,93,93,93,1,16,2,35,34,46,2,39,35,17,35,17,51,17,51,18,33,50, |
18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,170,235,223,102,161,115,65, |
5,222,180,180,223,33,1,164,237,215,189,35,67,97,61,63,99,70,37,39,70,94,56, |
62,100,70,38,2,30,254,228,254,234,62,128,192,131,254,19,4,58,254,54,1,222, |
254,232,254,232,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0,0,2, |
0,17,0,0,3,199,4,58,0,13,0,22,0,143,64,68,117,1,133,1,2,3,32,11,17,72,0,32, |
40,43,72,223,0,239,0,2,0,32,29,37,72,52,0,1,43,0,1,41,4,1,4,48,7,10,72,7, |
32,7,11,72,18,71,0,3,3,12,6,6,2,22,11,70,64,175,12,1,239,12,1,12,24,128,1, |
2,184,255,240,64,22,91,2,107,2,2,2,3,0,81,47,21,1,21,21,1,15,81,9,15,12,1, |
21,0,63,51,63,237,18,57,47,93,237,50,1,47,93,56,51,26,16,220,93,113,26,237, |
51,18,57,47,18,57,17,51,237,49,48,43,0,43,93,1,93,113,43,113,43,43,93,9,1, |
35,1,46,1,53,52,54,51,33,17,35,25,1,35,34,6,21,20,22,59,1,2,23,254,197,203, |
1,88,131,118,216,207,1,176,180,234,130,120,107,124,253,1,202,254,54,1,215, |
27,163,122,149,150,251,198,1,202,1,241,92,93,94,93,0,255,255,0,87,255,236, |
4,24,5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3, |
2,4,42,40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,0,1,0,10,254,87,3,238,5,204, |
0,57,0,162,64,9,170,49,1,31,32,9,15,72,24,184,255,232,64,86,9,13,72,0,24, |
16,24,2,7,36,36,57,28,70,64,80,45,1,159,45,1,45,59,128,10,7,57,70,4,3,192, |
0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176,59,192,59,208,59,3,176,59,240,59, |
2,255,59,1,112,59,160,59,176,59,3,57,21,40,80,33,27,15,51,80,22,10,2,81,7, |
3,3,5,22,184,255,192,182,7,13,72,22,15,5,0,0,63,63,43,18,57,47,51,237,50, |
16,237,50,63,237,63,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220, |
93,113,26,237,17,57,47,49,48,0,94,93,43,43,1,93,51,17,35,53,51,53,51,21,33, |
21,33,21,20,14,2,7,51,62,3,51,50,30,2,21,17,20,14,2,35,34,38,39,53,30,1,51, |
50,62,2,53,17,52,46,2,35,34,14,2,21,17,142,132,132,180,1,44,254,212,2,3,2, |
1,3,30,70,84,100,62,104,133,77,29,21,54,93,72,34,65,28,13,36,13,38,49,27, |
10,17,48,88,70,64,103,73,40,4,182,131,147,147,131,148,33,66,56,39,7,55,77, |
50,23,56,101,140,84,252,209,62,106,78,45,4,5,139,2,4,20,43,67,46,2,241,69, |
104,69,35,46,84,120,75,253,170,0,0,0,255,255,0,142,0,0,2,200,5,228,18,38, |
1,201,0,0,17,7,0,116,0,216,0,0,0,19,64,11,1,6,17,38,1,85,6,9,4,0,37,1,43, |
53,0,43,53,0,0,0,0,1,0,87,255,236,3,222,4,78,0,40,0,171,64,113,116,30,1,116, |
21,1,137,8,1,137,2,1,47,42,1,63,26,1,26,26,27,36,16,70,15,15,35,70,0,36,32, |
36,2,0,36,64,36,96,36,128,36,160,36,192,36,224,36,7,8,36,24,27,71,31,5,1, |
5,27,80,143,24,159,24,175,24,3,24,24,32,19,80,10,31,16,47,16,127,16,143,16, |
223,16,5,16,64,29,32,72,16,16,10,16,32,80,0,0,35,16,35,32,35,96,35,112,35, |
128,35,192,35,208,35,8,35,184,255,192,182,27,34,72,35,35,0,22,0,63,50,47, |
43,93,16,237,63,51,47,43,93,16,237,18,57,47,113,237,1,47,93,237,50,47,94, |
93,113,237,51,47,237,17,18,57,47,93,93,49,48,93,93,93,93,5,34,46,2,53,52, |
62,2,51,50,30,2,23,7,46,1,35,34,14,2,7,33,21,33,30,3,51,50,54,55,23,14,3, |
2,52,130,182,114,51,81,134,170,90,93,145,105,66,13,185,15,118,109,73,103, |
67,34,4,1,156,254,99,4,35,68,103,74,100,133,16,182,9,61,106,151,20,86,151, |
205,120,163,216,128,53,48,84,116,68,14,91,105,44,88,133,90,131,82,135,97, |
53,103,109,12,67,122,92,54,0,255,255,0,57,255,236,3,182,4,75,18,6,0,86,0, |
0,255,255,0,137,0,0,1,61,5,204,16,38,0,241,199,0,17,6,1,75,237,0,0,212,181, |
9,64,56,56,72,9,184,255,192,64,9,55,55,72,9,64,54,54,72,9,184,255,192,179, |
53,53,72,9,184,255,192,64,9,52,52,72,9,64,50,50,72,9,184,255,192,179,49,49, |
72,9,184,255,192,64,9,48,48,72,9,64,42,42,72,9,184,255,192,179,41,41,72,9, |
184,255,192,64,9,40,40,72,9,64,38,38,72,9,184,255,192,179,37,37,72,9,184, |
255,192,179,36,36,72,9,184,255,192,179,35,35,72,9,184,255,192,64,16,34,34, |
72,9,64,29,29,72,9,64,10,10,72,1,0,0,184,255,192,179,49,49,72,0,184,255,192, |
64,9,40,41,72,0,64,25,27,72,0,184,255,192,182,18,18,72,128,0,1,0,184,255, |
192,64,11,8,8,72,0,1,0,4,7,1,2,37,1,43,53,17,43,93,43,43,43,43,53,53,1,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,248,0,0,2, |
37,5,123,18,38,0,241,0,0,17,6,0,105,203,0,0,25,182,2,1,4,17,38,2,1,184,255, |
243,180,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,0,255,255,255,206,254,87,1,61, |
5,204,18,6,0,77,0,0,0,2,0,11,255,236,6,236,4,58,0,34,0,45,1,42,64,82,163, |
16,1,148,16,1,117,16,133,16,2,106,14,1,57,14,1,14,16,18,22,72,131,14,147, |
14,163,14,3,117,14,1,106,13,1,57,13,1,13,16,18,22,72,163,13,1,87,13,103,13, |
119,13,3,16,24,12,17,72,109,15,1,15,32,18,22,72,162,15,1,117,15,133,15,149, |
15,3,54,15,70,15,2,5,184,255,224,179,7,10,72,2,184,255,224,64,18,7,11,72, |
34,35,70,64,9,1,9,9,22,3,71,176,41,1,41,184,255,192,64,9,8,11,72,41,47,80, |
47,1,47,184,255,192,64,93,30,35,72,255,47,1,48,47,1,109,11,1,31,11,63,11, |
2,255,11,1,233,11,1,187,11,203,11,219,11,3,163,11,1,149,11,1,31,32,63,32, |
2,255,32,1,106,32,1,41,32,1,163,32,1,53,32,1,11,15,32,3,22,45,81,175,34,191, |
34,207,34,3,15,34,31,34,79,34,3,7,34,34,9,11,80,32,15,25,80,18,22,35,81,9, |
21,0,63,237,63,237,63,237,18,57,47,94,93,113,237,1,47,23,51,93,93,113,113, |
93,113,93,93,93,93,93,113,113,93,93,43,113,16,220,43,93,237,18,57,47,93,237, |
50,49,48,43,43,93,93,93,43,113,0,43,1,93,93,43,113,113,93,93,43,113,113,93, |
93,93,1,50,22,21,20,14,2,35,33,17,33,6,2,14,3,35,34,38,39,53,30,1,51,50,62, |
3,18,55,33,25,1,51,50,62,2,53,52,38,43,1,5,77,205,210,52,104,155,103,254, |
62,254,101,25,42,44,51,71,94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2, |
242,242,69,96,59,26,116,133,243,2,112,147,159,74,118,82,44,3,183,184,254, |
225,216,149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,254,54,254,15,25,49, |
71,46,94,87,0,0,2,0,142,0,0,6,44,4,58,0,20,0,31,0,133,185,0,7,255,224,179, |
7,10,72,4,184,255,224,64,23,7,11,72,1,21,70,19,11,11,15,5,71,64,176,27,1, |
27,33,128,80,33,1,33,184,255,192,64,50,30,35,72,255,33,1,18,14,70,16,15,32, |
15,64,15,3,15,31,81,1,1,13,80,175,18,191,18,207,18,3,15,18,31,18,79,18,3, |
7,18,18,0,15,21,21,81,11,21,16,0,15,0,63,50,63,237,63,18,57,47,94,93,113, |
237,51,47,237,1,47,93,237,50,93,43,113,26,16,220,93,26,237,18,57,47,51,237, |
50,49,48,43,43,1,17,51,50,22,21,20,14,2,35,33,17,33,17,35,17,51,17,33,17, |
19,51,50,62,2,53,52,38,43,1,3,169,228,205,210,52,104,155,103,254,102,254, |
78,180,180,1,178,181,202,69,96,59,26,116,133,203,4,58,254,54,147,159,74,118, |
82,44,1,237,254,19,4,58,254,54,1,202,252,69,25,49,71,46,94,87,0,0,0,0,1,0, |
10,0,0,3,238,5,204,0,41,0,144,185,0,7,255,232,64,85,9,13,72,0,7,16,7,2,7, |
33,24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,35,32,24,70,29,28,192,25, |
1,0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240, |
43,2,255,43,1,112,43,160,43,176,43,3,35,27,81,32,28,28,5,30,0,25,11,21,0, |
18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220,93,113,26,237, |
17,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61,30,70,84,100,62,104, |
133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180,1,44,254,212,2,3,2, |
1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69,35,46,84,120,75,253, |
170,4,182,131,147,147,131,148,33,66,56,39,7,0,0,255,255,0,138,0,0,3,138,5, |
228,18,38,1,208,0,0,17,7,0,116,1,63,0,0,0,19,64,11,1,22,17,38,1,81,22,25, |
0,14,37,1,43,53,0,43,53,0,0,0,255,255,0,5,254,87,3,252,5,240,18,38,0,92,0, |
0,17,7,2,145,0,183,0,0,0,19,64,11,1,32,17,38,1,10,37,45,17,31,37,1,43,53, |
0,43,53,0,0,0,0,1,0,142,254,104,3,221,4,58,0,11,0,125,64,89,9,73,15,10,79, |
10,2,38,10,10,0,7,70,64,15,4,79,4,2,57,47,4,111,4,143,4,255,4,4,191,4,1,143, |
4,159,4,255,4,3,4,13,128,3,70,192,0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176, |
13,192,13,208,13,3,176,13,240,13,2,112,13,160,13,176,13,192,13,4,9,5,1,15, |
8,3,80,0,0,47,237,51,63,51,47,1,93,113,114,47,94,93,113,237,26,16,220,93, |
113,114,94,93,26,237,18,57,47,94,93,237,49,48,51,17,51,17,33,17,51,17,33, |
17,35,17,142,180,1,231,180,254,170,163,4,58,252,73,3,183,251,198,254,104, |
1,152,0,0,1,0,168,0,1,3,186,7,28,0,7,0,55,64,37,5,90,0,6,16,6,64,6,3,6,3, |
70,255,0,1,0,0,16,0,64,0,128,0,176,0,208,0,6,7,0,4,95,1,7,3,5,18,0,63,63, |
51,237,1,47,94,93,93,237,47,93,237,49,48,1,17,51,17,33,17,35,17,3,6,180,253, |
173,191,5,129,1,155,253,201,251,28,5,128,0,0,0,0,1,0,142,0,0,3,10,5,204,0, |
7,0,56,64,36,6,73,16,3,48,3,2,3,3,9,0,70,192,1,1,0,1,16,1,48,1,224,1,240, |
1,5,8,1,4,0,7,80,2,15,0,21,0,63,63,237,63,1,47,94,93,113,237,17,51,47,93, |
237,49,48,33,35,17,33,17,51,17,33,1,66,180,1,217,163,254,56,4,58,1,146,253, |
235,255,255,0,9,0,0,7,134,6,240,18,38,0,58,0,0,17,7,2,148,2,65,0,0,0,21,180, |
1,47,5,38,1,184,255,184,180,48,51,15,46,37,1,43,53,0,43,53,0,255,255,255, |
253,0,0,5,204,5,228,18,38,0,90,0,0,17,7,0,67,1,72,0,0,0,21,180,1,43,17,38, |
1,184,255,162,180,44,47,15,42,37,1,43,53,0,43,53,0,255,255,0,9,0,0,7,134, |
6,240,18,38,0,58,0,0,17,7,2,149,2,247,0,0,0,19,64,11,1,47,5,38,1,75,47,50, |
15,46,37,1,43,53,0,43,53,0,0,0,255,255,255,253,0,0,5,204,5,228,18,38,0,90, |
0,0,17,7,0,116,2,38,0,0,0,19,64,11,1,43,17,38,1,93,43,46,15,42,37,1,43,53, |
0,43,53,0,0,0,255,255,0,9,0,0,7,134,6,178,18,38,0,58,0,0,17,7,2,152,2,134, |
0,0,0,23,64,13,2,1,47,5,38,2,1,2,51,49,15,46,37,1,43,53,53,0,43,53,53,0,0, |
0,255,255,255,253,0,0,5,204,5,123,18,38,0,90,0,0,17,7,0,105,1,161,0,0,0,23, |
64,13,2,1,43,17,38,2,1,0,47,45,15,42,37,1,43,53,53,0,43,53,53,0,0,0,255,255, |
0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,148,1,34,0,0,0,21,180,1,9,5,38, |
1,184,255,181,180,10,13,4,8,37,1,43,53,0,43,53,0,255,255,0,5,254,87,3,252, |
5,228,18,38,0,92,0,0,17,6,0,67,105,0,0,21,180,1,32,17,38,1,184,255,167,180, |
33,36,17,31,37,1,43,53,0,43,53,0,0,0,0,1,0,0,1,195,4,114,2,76,0,3,0,43,64, |
30,2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38, |
43,72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,4,114,1,195,137,137, |
0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30,2,0,0,186,15,1,31,1,63,1,79,1,4,47, |
1,63,1,111,1,175,1,223,1,5,1,64,38,43,72,1,0,47,43,93,113,237,1,47,47,49, |
48,17,53,33,21,8,0,1,195,137,137,0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30, |
2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38,43, |
72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,8,0,1,195,137,137,0,255, |
255,255,225,254,78,4,138,255,169,16,38,0,66,0,229,16,7,0,66,0,0,0,190,0,1, |
0,127,3,184,1,72,5,129,0,12,0,47,64,16,4,32,11,17,72,7,64,11,17,72,7,12,150, |
10,151,0,184,255,192,64,10,8,11,72,0,10,156,0,169,7,3,0,63,244,237,1,47,43, |
237,237,50,43,49,48,43,19,53,52,62,2,55,51,14,1,21,51,21,127,10,20,30,20, |
121,45,50,89,3,184,146,52,86,75,66,32,65,132,65,195,0,0,0,1,0,127,3,184,1, |
72,5,129,0,12,0,52,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255,192, |
180,11,17,72,6,11,184,255,192,64,10,8,11,72,11,10,156,5,169,11,3,0,63,228, |
237,1,47,43,51,43,253,237,49,48,43,1,20,14,2,7,35,62,1,53,35,53,51,1,72,9, |
20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,63,197,0,1,0,127,254, |
250,1,72,0,195,0,12,0,51,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255, |
192,180,11,17,72,6,11,184,255,192,64,9,8,11,72,11,5,169,11,156,10,0,47,253, |
228,1,47,43,51,43,253,237,49,48,43,37,20,14,2,7,35,62,1,53,35,53,51,1,72, |
9,20,29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,0,0,0,1,0,126, |
3,184,1,71,5,129,0,12,0,47,64,16,8,32,11,17,72,5,64,11,17,72,5,1,150,2,151, |
11,184,255,192,64,10,8,11,72,11,5,169,2,156,12,3,0,63,237,228,1,47,43,237, |
237,50,43,49,48,43,1,21,35,20,22,23,35,46,3,61,1,1,65,88,49,45,123,20,29, |
20,9,5,129,197,63,132,65,32,66,75,86,53,145,0,0,0,2,0,75,3,184,2,95,5,129, |
0,12,0,25,0,89,64,58,17,32,11,17,72,4,32,11,17,72,20,64,11,17,72,20,25,150, |
13,7,64,11,17,72,7,12,150,10,151,128,0,1,15,0,31,0,2,8,0,23,151,13,159,27, |
175,27,2,10,23,156,13,0,0,13,169,6,20,3,0,63,51,228,50,47,16,237,50,1,93, |
47,237,220,94,93,93,237,237,50,43,16,237,50,43,49,48,43,43,1,53,52,62,2,55, |
51,14,1,21,51,21,33,53,52,62,2,55,51,14,1,21,51,21,1,151,10,19,29,20,122, |
45,49,88,253,242,10,20,30,20,121,45,50,89,3,184,146,52,86,75,66,32,65,132, |
65,195,146,52,86,75,66,32,65,132,65,195,0,0,2,0,75,3,184,2,95,5,129,0,12, |
0,25,0,107,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22, |
151,13,150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31, |
11,2,8,11,19,184,255,192,64,24,11,17,72,19,63,24,1,24,159,27,175,27,2,10, |
23,156,24,5,5,18,169,11,24,3,0,63,51,228,50,47,16,237,50,1,93,47,93,51,43, |
220,94,93,93,50,43,253,237,16,253,237,49,48,43,43,1,20,14,2,7,35,62,1,53, |
35,53,51,5,20,14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194, |
254,181,9,20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,65,195,145, |
53,86,75,66,32,65,132,65,195,0,0,0,2,0,75,254,250,2,95,0,195,0,12,0,25,0, |
104,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22,151,13, |
150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31,11,2, |
8,11,19,184,255,192,64,21,11,17,72,19,24,159,27,175,27,2,5,5,18,169,24,11, |
11,24,156,10,23,0,47,51,237,50,47,16,228,50,47,1,93,47,51,43,220,94,93,93, |
50,43,253,237,16,253,237,49,48,43,43,37,20,14,2,7,35,62,1,53,35,53,51,5,20, |
14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194,254,181,9,20, |
29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,144,53,87,75,66,32, |
65,132,65,195,0,0,0,1,0,138,255,118,3,234,5,204,0,11,0,64,64,37,11,192,0, |
8,9,8,0,188,3,7,7,6,4,192,47,3,111,3,175,3,3,32,3,1,3,11,193,10,194,7,4,193, |
5,194,7,0,1,0,47,63,246,237,16,244,237,1,47,93,113,237,51,51,47,16,237,50, |
50,47,16,237,49,48,1,3,35,3,5,53,5,3,51,3,37,21,2,137,22,115,22,254,160,1, |
96,28,215,28,1,97,3,232,251,142,4,114,27,164,29,1,120,254,136,29,164,0,0, |
1,0,136,255,115,3,233,5,204,0,21,0,86,64,50,12,8,189,9,15,5,6,11,14,15,5, |
9,190,19,1,189,0,20,17,0,16,3,4,16,3,32,0,1,0,19,193,18,194,15,12,193,13, |
194,15,8,193,7,194,4,1,193,2,194,4,0,0,63,246,237,16,244,237,47,246,237,16, |
244,237,1,47,93,23,51,47,17,51,51,16,237,50,237,23,50,47,16,237,50,49,48, |
1,5,53,5,3,51,3,37,21,37,3,19,37,21,37,19,35,19,5,53,5,19,1,241,254,152,1, |
104,16,175,16,1,105,254,151,26,26,1,104,254,152,16,175,16,254,151,1,105,26, |
3,232,27,164,29,1,120,254,136,29,164,27,254,182,254,185,27,164,29,254,136, |
1,120,29,164,27,1,71,0,0,0,0,1,0,81,1,145,2,124,3,188,0,19,0,73,185,0,17, |
255,232,179,9,12,72,13,184,255,232,64,39,9,12,72,7,24,9,12,72,3,24,9,12,72, |
128,0,1,15,0,63,0,2,0,191,10,1,10,143,5,1,0,5,48,5,2,5,15,15,1,15,0,47,93, |
205,93,93,1,47,93,205,93,93,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52, |
62,2,51,50,30,2,2,124,45,76,102,58,57,99,75,43,43,75,99,57,58,102,76,45,2, |
170,58,102,77,44,44,77,102,58,57,100,74,43,43,74,100,0,0,0,3,1,22,0,0,6,234, |
0,219,0,3,0,7,0,11,0,86,64,61,7,150,4,4,0,11,150,0,8,48,8,96,8,128,8,144, |
8,160,8,208,8,240,8,8,0,8,48,8,64,8,96,8,144,8,192,8,208,8,240,8,8,8,8,3, |
150,47,0,191,0,2,16,0,1,0,5,1,9,155,4,0,8,0,47,51,51,237,50,50,1,47,93,93, |
237,47,94,93,113,237,18,57,47,237,49,48,33,53,51,21,33,53,51,21,33,53,51, |
21,6,40,194,252,183,192,252,181,195,219,219,219,219,219,219,0,0,7,0,55,255, |
245,7,200,5,141,0,3,0,23,0,43,0,63,0,83,0,103,0,123,3,217,64,12,118,0,134, |
0,2,121,2,137,2,2,3,102,184,255,224,64,14,8,12,72,96,24,8,12,72,92,24,8,12, |
72,86,184,255,224,179,8,12,72,62,184,255,232,64,14,8,12,72,56,24,8,12,72, |
52,24,8,12,72,46,184,255,224,179,8,12,72,22,184,255,224,64,14,8,12,72,16, |
24,8,12,72,12,24,8,12,72,6,184,255,224,64,13,8,12,72,74,180,59,181,49,0,1, |
2,3,1,184,255,240,64,131,3,16,118,3,1,9,1,25,1,121,1,3,9,1,3,1,3,19,49,180, |
102,64,1,38,64,182,64,198,64,214,64,4,64,64,19,114,180,99,181,89,180,105, |
104,1,22,104,38,104,2,201,104,249,104,2,139,104,1,118,104,1,89,104,1,70,104, |
1,41,104,1,27,104,1,233,104,1,150,104,198,104,2,121,104,1,107,104,1,86,104, |
1,57,104,1,6,104,22,104,38,104,3,10,104,24,180,9,181,34,180,9,19,25,19,41, |
19,73,19,89,19,121,19,137,19,153,19,8,34,19,64,45,49,72,19,184,255,192,64, |
255,19,23,72,19,217,125,1,198,125,1,169,125,1,155,125,1,121,125,1,107,125, |
1,93,125,1,73,125,1,59,125,1,45,125,1,9,125,25,125,2,251,125,1,237,125,1, |
217,125,1,203,125,1,189,125,1,155,125,1,125,125,141,125,2,105,125,1,91,125, |
1,77,125,1,54,125,1,41,125,1,11,125,27,125,2,204,233,125,249,125,2,214,125, |
1,187,125,1,173,125,1,137,125,153,125,2,123,125,1,102,125,1,75,125,1,61,125, |
1,9,125,1,219,125,251,125,2,205,125,1,153,125,169,125,2,107,125,139,125,2, |
93,125,1,57,125,1,43,125,1,29,125,1,9,125,1,237,125,253,125,2,185,125,201, |
125,217,125,3,123,125,171,125,2,89,125,1,11,125,59,125,75,125,3,155,249,125, |
1,235,125,1,214,125,1,187,125,1,153,125,1,123,125,139,125,2,102,125,1,59, |
125,75,125,2,9,125,25,125,2,246,125,1,217,125,1,205,125,1,169,125,185,125, |
2,155,125,1,105,125,121,125,2,93,125,1,57,125,73,125,2,43,125,1,22,125,1, |
249,125,1,237,125,1,201,125,64,249,1,187,125,1,153,125,1,123,125,1,102,125, |
1,73,125,1,54,125,1,9,125,25,125,2,105,249,125,1,235,125,1,221,125,1,169, |
125,1,150,125,1,121,125,1,107,125,1,73,125,1,59,125,1,25,125,1,11,125,1,253, |
125,1,217,125,1,203,125,1,169,125,1,155,125,1,141,125,1,121,125,1,91,125, |
107,125,2,57,125,1,27,125,43,125,2,249,125,1,235,125,1,169,125,201,125,2, |
150,125,1,121,125,1,107,125,1,57,125,1,38,125,1,9,125,1,56,249,125,1,230, |
125,1,201,125,1,182,125,1,153,125,1,139,125,1,89,125,1,70,125,1,41,125,1, |
27,125,1,249,125,1,235,125,1,201,125,1,187,125,1,173,125,1,1,148,125,1,123, |
125,1,100,125,1,75,125,1,63,125,1,27,125,1,15,125,1,228,125,1,203,125,1,176, |
125,1,2,160,125,1,143,125,1,112,125,1,95,125,1,64,125,1,31,125,1,0,125,1, |
8,109,182,84,183,119,182,94,19,69,182,44,183,79,182,54,19,39,182,14,183,29, |
182,4,4,2,3,0,18,0,63,63,63,237,244,237,63,237,244,237,63,237,244,237,1,94, |
93,93,93,93,93,93,93,95,93,93,93,113,113,113,113,113,113,113,95,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113, |
113,113,113,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,113,113, |
113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,47,43,43,94,93,237,244,237,47,94,93,93,93,93,93,93,93,113,113,113,113, |
113,113,113,114,114,253,244,237,18,57,47,93,113,237,17,57,57,47,47,94,93, |
93,56,56,17,51,17,51,16,244,237,49,48,0,43,43,43,43,43,43,43,43,43,43,43, |
43,1,95,93,93,33,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2,53,52,62,2,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2,35,34,46,2,53, |
52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2, |
35,34,46,2,53,52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,48,155, |
3,154,157,252,152,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19, |
37,55,35,38,58,39,19,20,39,56,37,34,54,39,21,2,30,60,107,80,46,46,81,108, |
62,63,108,80,46,46,81,110,210,19,37,55,35,38,58,39,19,20,39,56,37,34,54,39, |
21,1,253,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19,37,55,35, |
38,58,39,19,20,39,56,37,34,54,39,21,5,129,12,33,83,139,106,102,140,86,38, |
37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71,97,59,26,26, |
59,97,254,239,33,83,139,106,102,140,86,38,37,86,140,103,106,139,83,33,254, |
151,73,98,58,24,24,59,97,73,71,97,59,26,26,59,97,1,176,33,83,139,106,102, |
140,86,38,37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71, |
97,59,26,26,59,97,0,0,0,0,1,0,85,3,122,1,89,5,129,0,3,0,40,64,25,3,16,10, |
13,72,1,16,10,13,72,1,150,31,2,47,2,2,2,48,0,1,0,0,1,3,0,63,205,1,47,93,221, |
93,237,49,48,43,43,27,1,51,3,85,64,196,158,3,122,2,7,253,249,255,255,0,85, |
3,122,2,175,5,129,16,38,2,14,0,0,17,7,2,14,1,86,0,0,0,9,180,1,96,4,1,4,17, |
93,53,0,0,1,0,88,0,141,2,81,3,172,0,8,0,72,64,55,106,3,122,3,138,3,3,106, |
0,122,0,138,0,3,7,236,6,235,5,236,31,1,79,1,95,1,127,1,143,1,5,48,1,64,1, |
96,1,112,1,160,1,5,1,0,239,15,3,47,3,111,3,127,3,4,3,0,47,93,228,1,47,93, |
113,237,237,237,49,48,93,93,37,1,53,1,51,21,9,1,21,1,168,254,176,1,80,167, |
254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,0,0,0,1,0,89,0,141, |
2,82,3,172,0,8,0,66,64,48,101,6,117,6,133,6,3,101,0,117,0,133,0,3,4,236,1, |
236,8,235,112,3,128,3,176,3,3,208,3,1,111,3,127,3,2,3,0,239,15,6,47,6,111, |
6,127,6,4,6,0,47,93,228,1,47,93,93,113,253,237,237,49,48,93,93,37,35,53,9, |
1,53,51,1,21,1,1,168,1,82,254,176,166,1,81,141,29,1,111,1,116,31,254,141, |
63,0,0,0,255,255,0,185,0,0,3,71,5,129,16,38,0,4,0,0,17,7,0,4,1,200,0,0,0, |
22,64,12,3,2,47,8,1,8,1,0,47,0,1,0,17,93,53,53,17,93,53,53,0,1,255,192,5, |
223,2,235,6,84,0,3,0,13,179,1,0,2,1,0,47,205,1,47,47,49,48,1,33,53,33,2,235, |
252,213,3,43,5,223,117,0,1,254,96,0,0,2,98,5,129,0,3,0,45,182,3,16,111,3, |
1,3,1,184,255,240,64,18,239,1,1,1,64,13,18,72,1,64,8,11,72,1,2,3,0,18,0,63, |
63,1,47,43,43,93,56,47,93,56,49,48,33,35,1,51,254,244,148,3,113,145,5,129, |
0,0,1,0,101,2,7,2,131,4,157,0,33,0,111,185,0,30,255,216,64,30,9,17,72,23, |
10,224,36,11,1,11,33,224,36,0,212,0,228,0,3,0,23,6,228,11,139,0,251,0,2,0, |
184,255,192,64,38,10,13,72,4,0,1,0,29,17,17,75,29,91,29,2,29,64,21,25,72, |
29,64,16,19,72,47,29,63,29,2,27,29,1,15,29,1,2,29,0,47,95,93,93,93,43,43, |
93,51,47,16,204,93,43,93,50,237,50,1,47,93,237,47,93,237,50,49,48,0,43,1, |
17,52,46,2,35,34,6,21,17,35,17,52,46,2,53,51,20,30,2,21,51,62,3,51,50,22, |
21,17,2,2,13,29,47,35,72,85,128,1,1,2,119,2,2,2,2,15,38,49,64,42,110,97,2, |
7,1,142,46,61,37,16,100,94,254,148,1,255,20,46,40,29,4,3,27,34,35,12,28,46, |
32,17,108,121,254,79,0,0,0,1,0,4,0,0,4,46,5,129,0,17,0,106,64,69,7,3,7,3, |
10,0,16,32,16,2,16,16,48,16,80,16,112,16,144,16,224,16,6,16,5,1,9,92,14,12, |
10,8,12,81,5,31,13,1,0,13,1,13,4,95,15,1,31,1,63,1,79,1,4,63,1,1,15,1,1,8, |
1,1,9,0,95,15,3,9,18,0,63,63,237,18,57,47,94,93,93,113,237,220,93,113,50, |
237,50,1,47,51,51,237,50,50,47,93,113,18,57,57,47,47,49,48,1,17,33,21,33, |
21,33,21,33,17,35,17,35,53,51,17,33,21,1,103,2,175,253,81,1,146,254,110,180, |
175,175,3,123,4,230,254,36,157,213,129,254,233,1,23,129,3,233,155,0,1,0,58, |
0,0,4,80,5,150,0,58,0,221,64,81,133,58,149,58,2,21,22,37,22,53,22,3,40,44, |
0,48,17,13,6,30,111,29,29,0,52,110,6,43,39,48,110,18,14,10,10,0,79,6,95,6, |
111,6,3,6,58,111,0,0,32,0,2,0,0,32,0,48,0,80,0,112,0,144,0,176,0,208,0,8, |
0,0,16,0,48,0,192,0,224,0,5,8,0,184,255,192,64,70,14,18,72,0,42,16,81,17, |
46,12,81,43,175,13,1,13,64,42,45,72,0,13,16,13,32,13,3,13,39,111,17,1,47, |
17,95,17,111,17,143,17,159,17,223,17,239,17,7,17,17,52,35,115,41,30,1,30, |
24,7,7,52,116,37,58,1,23,58,1,58,6,24,0,63,51,93,93,237,50,63,51,93,237,18, |
57,47,93,113,51,222,93,43,93,50,237,50,16,237,50,1,47,43,94,93,113,114,237, |
47,93,18,57,47,51,51,237,50,50,16,237,17,57,47,237,17,51,51,17,18,57,57,49, |
48,0,93,93,1,14,3,35,33,53,62,1,61,1,35,53,51,53,35,53,51,53,52,62,2,51,50, |
30,2,23,7,46,3,35,34,6,29,1,33,21,33,21,33,21,33,21,20,14,2,7,33,50,62,2, |
55,4,80,9,57,89,115,67,253,70,89,86,186,186,186,186,48,99,152,103,70,123, |
99,71,18,174,10,39,53,65,36,114,112,1,152,254,104,1,152,254,104,22,44,63, |
40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160,121,25,129,140,129,130, |
92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,138,129,140,129,7,56,106, |
92,71,21,19,42,67,48,0,0,0,0,4,0,158,255,236,8,103,5,129,0,14,0,23,0,47,0, |
98,1,193,64,71,134,2,1,117,91,133,91,2,91,73,107,73,139,73,3,143,68,1,109, |
68,1,91,68,1,105,82,1,105,80,1,125,22,1,91,22,107,22,2,125,17,141,17,2,91, |
17,107,17,2,84,57,100,57,2,54,57,70,57,2,37,97,53,97,69,97,3,76,32,9,14,72, |
49,184,255,224,64,94,9,14,72,29,32,12,17,72,13,29,29,29,45,29,3,82,73,81, |
81,48,72,65,0,70,15,24,39,75,37,41,72,30,34,32,30,57,73,15,56,1,102,56,1, |
56,56,89,72,75,95,15,1,63,75,95,75,239,75,3,75,64,27,39,72,239,30,1,31,30, |
95,30,127,30,3,15,30,75,75,30,15,3,8,64,65,80,65,96,65,3,127,65,143,65,2, |
65,184,255,192,64,16,7,12,72,65,20,7,70,0,8,16,8,32,8,3,8,100,184,255,192, |
179,91,95,72,100,184,255,192,179,80,88,72,100,184,255,192,179,70,74,72,100, |
184,255,192,179,59,62,72,100,184,255,192,179,48,53,72,100,184,255,192,64, |
11,27,31,72,79,100,95,100,111,100,3,100,184,255,192,179,7,10,72,89,184,255, |
248,64,71,19,22,72,65,8,19,22,72,89,65,78,60,80,57,51,22,44,80,27,22,6,95, |
20,87,80,121,82,1,72,82,88,82,104,82,3,82,78,40,32,80,33,78,37,33,35,35,33, |
127,33,143,33,2,175,20,1,20,64,9,17,72,20,33,20,33,8,19,95,9,3,8,18,0,63, |
63,237,18,57,57,47,47,43,93,93,17,51,47,17,51,51,16,237,50,47,51,93,93,237, |
16,237,63,237,63,51,237,18,57,57,43,43,1,43,93,43,43,43,43,43,43,47,93,237, |
50,47,43,93,113,18,23,57,47,47,47,93,113,43,93,93,16,237,51,47,93,113,237, |
17,51,51,16,237,50,17,57,57,16,237,16,237,50,47,237,49,48,93,43,43,43,93, |
0,93,93,1,93,93,93,93,0,93,93,93,93,93,1,93,0,93,1,93,1,20,14,2,43,1,17,35, |
17,33,50,30,2,7,52,38,43,1,17,51,50,54,1,14,1,35,34,38,53,17,35,53,51,55, |
51,21,51,21,35,17,20,22,51,50,54,55,37,20,6,35,34,46,2,39,55,30,1,51,50,62, |
2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,21,20,30,2,23,30,3, |
3,186,61,121,182,121,130,181,1,43,125,186,124,62,182,164,164,105,113,165, |
155,2,123,35,74,48,105,93,104,111,53,110,157,157,41,55,23,40,26,2,232,183, |
170,75,121,92,61,15,159,17,99,88,40,68,49,27,34,62,87,52,49,96,77,47,168, |
161,141,165,22,161,6,31,45,54,30,155,32,57,80,48,48,100,82,52,3,217,92,159, |
117,68,253,219,5,129,61,111,157,97,134,139,253,212,146,252,186,11,13,123, |
122,1,197,131,242,242,131,254,98,78,73,8,6,98,120,129,24,54,88,64,26,61,58, |
10,25,40,30,30,41,29,23,13,12,32,53,79,59,112,119,105,116,17,28,38,24,10, |
85,25,36,28,22,11,11,31,54,87,0,1,0,16,255,236,4,86,5,150,0,61,0,232,185, |
0,2,255,235,64,68,15,73,106,38,1,58,43,74,43,122,43,138,43,4,36,59,52,59, |
68,59,116,59,132,59,5,46,55,55,4,57,45,51,110,20,24,15,14,26,15,3,20,37,110, |
36,36,3,110,64,4,96,4,128,4,160,4,176,4,5,0,4,144,4,176,4,208,4,4,4,184,255, |
192,64,94,24,27,72,4,48,24,81,25,57,15,81,54,15,16,31,16,127,16,143,16,159, |
16,5,16,64,39,47,72,0,16,16,16,128,16,3,16,45,47,25,63,25,127,25,3,47,25, |
63,25,175,25,207,25,4,47,25,175,25,2,25,25,0,40,115,216,37,1,124,37,140,37, |
2,26,37,42,37,2,37,31,7,0,115,115,3,131,3,2,21,3,37,3,2,3,9,25,0,63,51,93, |
93,237,63,51,93,93,93,237,18,57,47,93,113,114,51,220,93,43,113,50,237,50, |
16,237,50,1,47,43,93,113,237,51,47,237,47,23,51,47,196,16,237,50,50,17,57, |
47,196,49,48,0,93,93,93,43,37,50,54,55,23,14,3,35,34,46,2,39,35,55,51,46, |
1,53,52,54,55,35,55,51,62,3,51,50,30,2,23,7,46,1,35,34,14,2,7,33,7,33,14, |
1,21,20,22,23,33,7,33,30,3,2,179,100,120,14,185,13,63,103,147,97,120,177, |
121,69,13,171,40,120,1,2,2,1,160,40,129,15,73,123,173,115,97,147,103,63,13, |
185,14,121,106,68,106,79,50,11,1,190,40,254,99,2,1,2,2,1,196,40,254,108,9, |
42,77,114,126,100,91,14,68,118,87,50,77,139,192,114,129,8,46,24,27,53,6,127, |
122,189,130,67,50,87,118,68,14,91,100,39,87,137,99,127,16,47,23,22,37,19, |
129,81,138,100,57,0,0,0,0,4,0,69,255,244,6,208,5,140,0,19,0,23,0,43,0,79, |
0,192,64,14,118,20,134,20,2,121,22,137,22,2,133,47,1,66,184,255,232,64,9, |
8,11,72,60,24,8,11,72,17,184,255,232,179,8,11,72,13,184,255,232,64,29,8,11, |
72,7,24,8,11,72,3,24,8,11,72,22,23,20,21,74,180,73,73,52,180,53,178,63,23, |
16,21,184,255,240,64,62,21,23,21,23,0,44,180,63,64,10,14,72,63,34,180,10, |
178,0,180,0,24,16,24,32,24,80,24,96,24,208,24,224,24,240,24,8,24,38,52,1, |
52,49,182,58,184,77,182,74,68,4,23,3,20,18,29,182,15,184,39,182,5,19,0,63, |
237,244,237,63,63,63,51,237,244,237,51,93,1,47,93,253,244,237,47,43,237,18, |
57,57,47,47,56,56,16,244,237,51,47,237,17,51,17,51,49,48,0,43,43,43,43,43, |
43,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,20,30,2,51,50,54,55,23,14,3,35,34, |
46,2,53,52,62,2,51,50,30,2,23,7,46,1,35,34,6,6,208,51,87,116,66,66,115,85, |
49,48,86,117,68,66,115,85,50,251,59,155,3,154,157,149,22,43,63,40,42,64,44, |
22,23,43,63,41,39,63,44,24,250,155,20,47,75,54,69,94,11,141,6,45,77,111,72, |
94,132,82,38,59,97,124,65,68,106,76,48,9,143,10,83,75,108,87,1,178,125,171, |
105,45,45,104,171,126,133,174,103,41,41,103,174,253,201,5,129,252,49,99,131, |
78,32,33,78,131,98,95,128,79,34,34,79,128,2,124,75,124,90,50,82,87,9,54,99, |
76,45,69,121,164,96,130,173,103,42,40,70,94,55,11,72,85,164,0,2,0,19,255, |
236,2,126,5,149,0,39,0,55,0,185,64,9,138,32,1,53,40,14,17,72,26,184,255,232, |
179,8,16,72,22,184,255,232,64,67,8,16,72,8,32,8,16,72,6,32,11,16,72,5,27, |
21,27,2,5,21,21,21,2,3,4,4,29,16,40,32,40,2,96,40,112,40,128,40,192,40,4, |
15,40,1,40,40,4,51,20,51,2,8,51,159,35,1,35,18,14,192,10,208,10,224,10,3, |
10,184,255,192,179,34,38,72,10,184,255,192,64,26,7,11,72,10,79,57,1,18,51, |
45,15,11,34,24,14,14,7,45,24,3,3,7,24,7,0,7,0,47,205,63,18,57,47,16,205,17, |
57,47,18,57,57,205,17,57,57,1,93,47,43,43,93,198,51,205,93,50,0,94,93,1,51, |
47,93,93,113,205,50,47,51,49,48,0,93,93,43,43,43,43,1,43,93,37,50,54,55,51, |
14,1,35,34,38,61,1,14,1,7,53,62,1,55,17,52,62,2,51,50,30,2,21,20,14,2,7,21, |
20,30,2,19,52,46,2,35,34,14,2,21,17,62,3,1,177,51,68,17,69,20,120,109,111, |
127,32,66,34,35,66,31,25,59,98,72,52,79,53,27,44,79,110,66,19,32,42,115,14, |
27,40,26,32,39,22,8,49,77,54,28,78,104,109,154,157,159,155,175,17,28,13,73, |
14,29,16,2,75,59,108,83,49,42,78,111,69,99,180,152,118,38,244,57,83,54,26, |
4,20,52,85,61,33,36,61,81,46,254,5,33,104,131,151,0,0,0,0,4,0,188,0,0,8,46, |
5,129,0,19,0,35,0,55,0,59,0,244,64,124,141,0,1,0,24,13,16,72,61,0,1,25,0, |
1,132,10,1,114,10,1,69,10,85,10,101,10,3,22,10,38,10,2,5,33,21,33,37,33,3, |
4,29,20,29,2,11,24,27,24,2,11,22,27,22,2,47,61,1,58,20,73,36,19,73,16,0,16, |
57,46,73,26,144,16,160,16,192,16,3,31,26,1,16,26,16,26,8,144,36,160,36,176, |
36,3,47,36,1,0,36,1,36,10,1,7,73,48,8,64,8,80,8,3,0,8,16,8,32,8,144,8,4,8, |
41,31,15,1,184,255,192,179,29,36,72,1,184,255,192,64,15,18,21,72,1,17,9,3, |
51,23,192,57,208,57,2,57,184,255,192,64,21,35,44,72,57,56,11,64,29,36,72, |
11,64,18,21,72,0,11,56,3,8,18,0,63,23,51,43,43,47,221,43,93,222,205,63,51, |
51,43,43,63,205,1,47,93,113,237,50,50,47,93,93,93,18,57,57,47,47,93,93,16, |
237,51,17,51,16,237,16,237,50,93,49,48,0,93,93,93,93,1,93,93,93,93,93,93, |
43,93,33,1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,1,20,6,35,34, |
38,53,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,53, |
33,21,4,38,253,48,1,2,1,2,160,202,2,216,2,2,2,2,162,3,54,176,175,168,177, |
43,87,131,88,93,131,84,39,159,24,47,69,45,46,71,48,25,26,48,67,41,46,72,50, |
25,254,16,2,123,4,166,44,44,38,89,39,252,88,5,129,251,82,40,46,39,98,51,3, |
156,250,127,2,178,188,203,201,190,91,145,101,53,53,100,145,92,81,107,64,26, |
27,64,107,80,82,108,63,26,26,63,108,253,160,146,146,0,0,0,0,2,0,188,2,122, |
7,25,5,129,0,39,0,47,0,148,64,9,9,24,19,23,72,136,9,1,8,184,255,232,64,16, |
19,23,72,89,8,105,8,121,8,3,37,24,13,17,72,24,184,255,240,64,73,12,17,72, |
44,41,196,42,24,21,196,64,22,224,22,2,22,22,0,64,47,1,47,0,42,16,42,64,42, |
80,42,4,42,39,196,37,111,0,175,0,207,0,223,0,239,0,5,0,40,44,202,0,9,22,29, |
4,0,42,32,42,80,42,128,42,4,42,2,15,23,37,15,3,45,3,0,63,23,51,17,51,204, |
93,23,50,237,50,1,47,93,51,237,47,93,204,93,18,57,47,93,237,50,16,253,204, |
49,48,43,43,93,43,93,43,1,17,53,6,7,14,1,7,3,35,3,46,1,39,38,39,6,21,6,20, |
21,17,35,17,51,19,30,1,31,1,54,55,62,3,53,19,51,17,1,17,35,17,35,53,33,21, |
6,155,5,4,4,5,2,230,108,163,2,24,14,17,20,1,1,128,190,223,2,5,2,6,20,16,7, |
13,11,7,168,184,251,40,134,255,2,138,2,122,1,169,194,11,11,9,18,5,253,203, |
1,157,5,64,38,44,55,10,10,8,18,6,253,201,3,7,253,205,4,13,7,18,51,41,18,34, |
28,18,2,1,157,252,249,2,152,253,104,2,152,111,111,0,0,0,0,1,0,108,0,0,5,184, |
5,150,0,57,0,221,64,95,101,36,1,101,22,1,157,49,1,143,49,1,49,16,11,15,72, |
157,9,1,143,9,1,9,16,11,15,72,116,3,132,3,2,54,3,1,54,2,118,2,2,54,56,118, |
56,2,116,55,132,55,2,54,55,1,42,26,1,42,32,1,41,53,48,40,10,18,32,40,96,40, |
112,40,144,40,4,47,18,111,18,127,18,159,18,4,40,18,40,18,24,34,91,16,53,1, |
53,184,255,192,64,65,23,29,72,191,53,207,53,2,0,53,48,53,2,53,17,5,91,31, |
24,63,24,79,24,143,24,191,24,207,24,223,24,7,111,24,127,24,159,24,239,24, |
255,24,5,0,24,48,24,2,8,24,10,15,19,39,48,5,42,95,18,41,18,29,95,0,4,0,63, |
237,63,51,237,23,50,1,47,94,93,93,113,253,196,47,93,93,43,114,237,17,57,57, |
47,47,93,93,17,51,17,51,16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43, |
93,93,93,93,1,50,30,2,21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46, |
2,35,34,14,2,21,20,30,2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,3,18, |
151,241,168,90,59,109,157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116, |
169,108,109,170,116,61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109, |
59,90,168,241,5,150,86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51, |
126,143,159,85,116,181,124,65,65,124,181,116,85,159,143,126,51,224,156,4, |
2,3,2,54,138,167,191,106,147,234,162,86,0,0,0,2,0,88,255,222,4,124,4,72,0, |
32,0,45,0,82,64,50,90,13,1,28,15,64,160,33,176,33,2,95,33,1,80,33,96,33,112, |
33,3,33,47,128,32,47,1,45,208,17,1,17,5,16,45,45,22,39,10,16,22,21,27,1,6, |
27,1,27,0,22,0,63,50,93,93,205,63,205,18,57,47,205,1,47,205,93,50,93,26,16, |
220,93,113,113,26,205,50,49,48,93,5,34,46,2,53,52,62,2,51,50,30,2,21,33,17, |
30,3,51,50,62,2,55,23,14,3,19,17,46,3,35,34,14,2,7,17,2,107,130,198,134,69, |
95,152,189,95,112,194,142,81,252,197,22,64,78,88,46,75,116,93,76,35,72,36, |
84,109,143,203,19,59,77,92,53,51,87,74,60,24,34,93,157,204,111,147,213,139, |
66,79,146,210,130,254,156,24,45,35,20,31,60,87,56,42,57,100,76,44,2,138,1, |
21,20,42,34,22,19,32,42,24,254,234,0,0,0,255,255,0,80,255,246,6,78,5,129, |
16,38,0,121,0,0,16,39,2,20,2,249,0,0,17,7,2,144,3,204,253,206,0,63,64,40, |
4,3,2,111,15,1,47,15,1,15,1,191,12,1,128,12,1,112,12,1,96,12,1,64,12,1,16, |
12,1,12,98,64,11,11,72,4,3,2,60,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93, |
53,17,93,93,53,53,53,0,0,0,255,255,0,61,255,246,6,78,5,141,16,39,2,20,2,249, |
0,0,16,39,2,144,3,204,253,206,17,6,0,115,34,0,0,63,64,40,1,3,2,111,49,1,47, |
49,1,49,0,191,1,1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,141,64,11,11,72, |
1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53, |
0,0,0,255,255,0,93,255,246,6,78,5,129,16,39,2,20,2,249,0,0,16,39,2,144,3, |
204,253,206,17,6,2,142,40,0,0,63,64,40,1,3,2,111,49,1,47,49,1,49,0,191,1, |
1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,126,64,11,11,72,1,3,2,49,24,0,63, |
53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53,0,0,0,255,255,0,145, |
255,246,6,78,5,129,16,39,2,20,2,189,0,0,16,39,2,144,3,204,253,206,17,6,2, |
143,102,0,0,47,64,28,1,3,2,111,49,1,47,49,1,49,0,191,1,1,128,1,1,1,102,64, |
11,11,72,1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,53,17,93,93,53,53,53,0,0, |
0,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3,128,16,7,17,16,0,47, |
205,1,47,205,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51,14, |
1,7,33,21,2,129,29,59,31,72,58,130,82,82,130,58,72,31,59,29,3,221,1,41,34, |
98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1,16,255,195,2,240,4,127, |
0,17,0,26,64,10,15,64,0,0,15,12,3,17,128,7,0,47,26,205,204,50,57,57,1,47, |
26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,35,1,213,34,98, |
65,68,112,42,36,42,112,68,65,98,34,86,3,160,29,59,31,72,58,130,82,82,130, |
58,72,31,59,29,252,35,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3, |
128,7,17,16,17,0,47,205,1,47,221,26,204,50,57,57,49,48,1,46,1,39,51,30,1, |
23,21,14,1,7,35,62,1,55,33,53,5,127,29,59,31,72,58,130,82,82,130,58,72,31, |
59,29,252,35,1,127,34,98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1, |
16,255,195,2,240,4,127,0,17,0,26,64,10,17,64,16,15,0,3,12,128,8,16,0,47,221, |
26,204,50,57,57,1,47,26,205,49,48,37,62,1,55,21,14,1,7,35,46,1,39,53,30,1, |
23,17,51,2,43,34,98,65,68,112,42,36,42,112,68,65,98,34,86,162,29,59,31,72, |
58,130,82,82,130,58,72,31,59,29,3,221,0,0,1,1,162,0,100,6,94,2,68,0,31,0, |
36,64,15,16,31,28,19,128,23,64,15,0,3,12,128,8,0,15,0,47,205,1,47,26,204, |
50,57,57,26,221,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51, |
14,1,7,33,46,1,39,51,30,1,23,21,14,1,7,35,62,1,55,2,129,29,59,31,72,58,130, |
82,82,130,58,72,31,59,29,2,254,29,59,31,72,58,130,82,82,130,58,72,31,59,29, |
1,41,34,98,65,68,112,42,36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112, |
68,65,98,34,0,0,0,1,1,16,255,195,2,240,4,127,0,31,0,38,64,16,15,64,0,31,16, |
19,28,128,24,64,0,15,12,3,128,7,0,47,26,204,50,57,57,26,221,26,204,50,57, |
57,1,47,26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,213,34,98,65,68,112,42,36,42,112,68,65, |
98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,3,160,29,59,31,72,58,130,82, |
82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82,130,58,72,31,59,29,0, |
2,1,16,255,72,2,240,4,127,0,3,0,35,0,40,64,17,1,19,0,4,35,20,23,32,28,3,0, |
28,4,19,16,7,11,0,47,204,50,57,57,221,222,205,16,204,50,57,57,1,47,51,205, |
50,49,48,5,33,21,33,19,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,16,1,224,254,32,197,34,98,65,68,112,42, |
36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,104,80,4,88, |
29,59,31,72,58,130,82,82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82, |
130,58,72,31,59,29,0,0,2,0,56,255,229,3,186,5,197,0,47,0,69,0,222,64,93,156, |
19,172,19,2,154,6,170,6,2,122,33,138,33,2,68,24,14,17,72,85,20,101,20,149, |
20,165,20,4,140,7,1,74,7,90,7,122,7,3,74,56,90,56,2,67,56,11,15,72,58,67, |
1,42,12,58,12,74,12,3,37,45,53,45,149,45,165,45,4,32,39,48,39,2,39,39,15, |
169,48,249,48,2,40,48,1,48,28,0,70,64,96,31,1,31,184,255,192,64,64,18,21, |
72,15,31,1,31,64,12,17,72,31,71,128,60,71,63,15,1,15,64,12,17,72,15,79,71, |
1,39,34,80,43,53,81,27,0,22,64,22,128,22,192,22,4,7,22,22,47,43,111,43,223, |
43,3,15,43,191,43,2,43,65,80,10,22,0,63,237,47,93,113,57,47,94,93,51,237, |
16,237,50,1,93,47,43,93,237,26,16,220,43,93,43,113,26,237,51,51,113,113,18, |
57,47,93,49,48,0,93,1,93,93,43,0,93,1,93,93,0,93,1,43,93,93,93,1,20,14,2, |
7,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,51,62,1,53,52,38,35,34,14,2,7, |
55,62,1,51,50,30,2,3,46,3,35,34,14,4,21,20,30,2,51,50,62,2,3,186,7,13,18, |
11,31,96,130,162,97,93,127,78,35,22,47,73,102,132,83,42,77,64,50,16,4,1,3, |
130,129,28,59,58,55,22,36,42,116,67,113,154,94,41,211,8,36,51,64,36,53,86, |
67,49,32,15,21,42,65,44,66,108,83,56,3,170,46,104,106,106,48,128,206,144, |
77,63,107,138,75,60,143,144,134,104,63,26,48,67,42,25,58,34,196,209,11,19, |
28,17,147,23,39,88,149,195,254,147,42,74,55,32,51,84,110,116,116,48,53,91, |
67,38,99,161,205,0,0,0,2,0,4,0,0,4,225,5,129,0,5,0,18,0,244,64,27,74,7,90, |
7,106,7,3,69,17,85,17,101,17,3,3,56,8,1,55,16,1,6,24,14,17,72,18,184,255, |
232,64,157,14,17,72,102,2,1,39,2,71,2,87,2,3,105,1,1,40,1,72,1,88,1,3,2,1, |
12,12,0,6,59,3,1,20,3,1,244,3,1,107,3,155,3,187,3,235,3,4,52,3,84,3,2,0,3, |
1,11,2,3,18,15,0,31,0,47,0,3,18,0,15,20,47,20,127,20,3,175,20,191,20,223, |
20,255,20,4,32,20,112,20,144,20,3,15,20,63,20,143,20,3,58,175,20,207,20,223, |
20,255,20,4,64,20,96,20,144,20,3,15,20,95,20,2,143,20,159,20,191,20,223,20, |
4,0,20,32,20,80,20,112,20,4,0,3,6,3,18,95,5,18,12,32,19,22,72,153,12,1,12, |
1,3,0,63,51,93,43,63,237,23,50,1,93,93,113,114,114,94,93,113,113,114,47,94, |
93,51,47,95,94,93,93,93,93,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93, |
43,43,93,93,95,93,93,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,5,2,5,217,1,254, |
251,35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12, |
141,156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,0,1,0,235,254,78,5,172,5, |
129,0,7,0,54,64,36,3,90,79,4,175,4,191,4,207,4,4,4,7,90,32,0,1,15,0,1,0,0, |
32,0,192,0,208,0,4,0,2,95,5,3,4,0,0,47,50,63,237,1,47,93,113,113,237,47,93, |
237,49,48,1,17,33,17,35,17,33,17,4,244,252,182,191,4,193,254,78,6,145,249, |
111,7,51,248,205,0,0,0,0,1,0,154,254,78,5,48,5,129,0,11,0,170,64,9,134,8, |
150,8,2,163,9,1,9,184,255,192,64,26,13,16,72,163,7,1,2,144,7,1,114,7,130, |
7,2,100,7,1,53,7,69,7,85,7,3,3,184,255,240,64,74,9,17,72,41,1,57,1,2,1,16, |
12,17,72,8,143,6,159,6,175,6,3,2,72,17,73,15,2,127,2,2,2,6,2,6,0,207,10,1, |
0,10,64,10,2,10,7,3,9,3,9,207,0,1,0,0,64,0,2,7,0,32,13,1,3,7,95,2,8,0,4,3, |
1,9,95,0,0,47,237,57,63,18,57,57,237,57,1,93,47,94,93,93,51,51,47,47,51,47, |
93,93,18,57,57,47,47,93,43,93,51,49,48,0,43,93,43,1,93,93,93,93,95,93,43, |
93,93,19,53,9,1,53,33,21,33,9,1,33,21,154,2,123,253,149,4,66,252,178,2,72, |
253,168,3,162,254,78,109,3,48,3,44,106,152,253,4,252,249,152,0,0,0,0,1,0, |
101,2,96,4,72,2,242,0,3,0,32,64,20,0,2,32,2,80,2,112,2,4,2,16,0,32,0,2,0, |
0,173,1,179,0,63,237,1,47,93,47,93,49,48,19,53,33,21,101,3,227,2,96,146,146, |
0,0,0,0,1,0,51,255,242,4,98,6,84,0,8,0,185,185,0,0,255,232,64,135,14,17,72, |
9,1,57,1,73,1,3,9,1,0,4,6,1,6,6,8,16,111,8,143,8,175,8,207,8,239,8,5,15,8, |
47,8,79,8,111,8,143,8,5,8,95,2,1,2,2,15,3,47,3,79,3,111,3,4,11,3,175,10,1, |
48,10,80,10,112,10,144,10,4,111,10,143,10,2,16,10,48,10,2,240,10,1,15,10, |
47,10,79,10,3,57,239,10,1,176,10,208,10,2,143,10,175,10,207,10,239,10,4,112, |
10,1,47,10,79,10,111,10,143,10,175,10,5,2,175,31,5,1,5,5,1,7,179,6,1,0,47, |
51,63,18,57,47,93,237,1,93,113,113,114,114,94,93,93,113,113,114,114,47,94, |
93,51,47,93,47,93,113,56,57,61,47,93,51,51,49,48,94,93,43,5,35,1,35,53,33, |
19,1,51,2,110,106,254,229,182,1,14,242,1,174,129,14,3,24,117,253,78,5,135, |
0,3,0,87,0,203,5,93,3,215,0,35,0,51,0,67,0,114,64,75,137,50,1,53,67,69,67, |
2,10,15,1,10,3,1,5,33,1,5,21,1,39,26,8,52,4,18,0,0,47,32,47,64,47,112,47, |
4,47,60,18,36,224,55,1,55,23,42,239,65,1,65,8,39,52,26,4,5,63,13,1,13,64, |
18,21,72,0,13,80,13,2,13,31,15,23,1,23,0,47,93,51,220,93,43,113,50,23,57, |
205,93,50,16,205,93,50,1,47,205,47,93,205,17,23,57,49,48,0,93,93,93,93,93, |
1,93,1,20,14,2,35,34,38,39,14,3,35,34,46,2,53,52,62,2,51,50,22,23,62,3,51, |
50,30,2,37,34,6,7,30,1,51,50,62,2,53,52,46,2,5,46,1,35,34,14,2,21,20,30,2, |
51,50,54,5,93,44,82,115,70,97,168,70,32,75,84,90,46,69,115,83,46,44,82,116, |
71,94,168,67,31,75,84,94,51,69,114,81,45,254,179,70,119,56,51,119,77,43,71, |
51,27,29,51,71,254,93,51,119,78,43,70,49,27,25,48,71,47,70,120,2,78,78,141, |
106,62,133,149,63,102,72,39,55,100,143,89,81,142,104,60,135,148,62,102,73, |
40,55,101,143,168,126,130,128,128,40,70,94,54,54,92,69,39,250,128,128,40, |
70,94,54,51,93,69,41,126,0,0,0,1,1,152,0,0,6,96,4,199,0,5,0,13,179,2,5,2, |
5,0,47,205,1,47,205,49,48,1,51,17,33,21,33,1,152,94,4,106,251,56,4,199,251, |
151,94,0,0,0,0,1,1,22,255,254,4,170,4,8,0,25,0,35,64,18,75,22,91,22,2,75, |
16,91,16,2,25,0,12,13,13,0,19,6,0,47,205,47,51,1,47,205,47,205,49,48,0,93, |
93,5,17,52,62,2,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21,17,1,22,68,122, |
167,98,99,169,123,70,103,53,95,130,78,78,130,94,52,2,2,0,116,192,138,76,76, |
138,192,116,254,0,2,2,98,155,108,57,56,108,156,100,254,0,0,0,1,255,158,254, |
78,2,148,5,227,0,35,2,3,64,30,10,34,26,34,42,34,3,5,16,21,16,37,16,3,9,3, |
218,37,1,201,37,1,154,37,170,37,186,37,3,37,184,1,0,64,162,225,228,72,76, |
37,1,0,47,37,63,37,2,9,37,1,220,37,64,211,217,72,37,64,205,209,72,134,37, |
1,25,37,41,37,57,37,3,11,37,1,251,37,1,233,37,1,37,64,188,191,72,107,37,123, |
37,139,37,3,93,37,1,75,37,1,41,37,57,37,2,27,37,1,9,37,1,249,37,1,37,128, |
170,177,72,109,37,1,37,128,164,168,72,9,37,1,163,37,128,156,162,72,189,37, |
1,121,37,153,37,169,37,3,75,37,91,37,107,37,3,37,192,140,147,72,155,37,171, |
37,187,37,3,125,37,141,37,2,107,37,1,93,37,1,38,37,54,37,70,37,3,228,37,1, |
214,37,1,180,37,196,37,2,6,37,1,112,37,184,255,192,64,110,119,122,72,37,64, |
101,107,72,219,37,1,118,37,166,37,2,9,37,25,37,41,37,3,233,37,1,37,64,79, |
82,72,37,128,74,78,72,25,37,41,37,2,11,37,1,251,37,1,217,37,233,37,2,171, |
37,187,37,203,37,3,153,37,1,37,128,60,63,72,41,37,57,37,73,37,3,11,37,27, |
37,2,55,233,37,249,37,2,187,37,203,37,219,37,3,141,37,157,37,173,37,3,123, |
37,1,109,37,1,1,95,37,1,37,184,255,128,179,39,43,72,37,184,255,192,64,13, |
34,38,72,144,37,160,37,2,2,16,37,1,37,184,255,192,64,46,28,31,72,223,37,1, |
96,37,112,37,160,37,176,37,192,37,5,15,37,31,37,47,37,3,7,32,22,144,22,2, |
22,22,31,70,12,47,4,159,4,2,4,4,32,12,1,12,184,255,192,64,15,16,19,72,12, |
25,80,64,18,128,18,2,18,7,80,0,0,47,237,47,93,237,1,47,43,93,51,47,93,16, |
237,50,47,93,94,93,93,93,43,113,95,113,43,43,114,95,114,114,114,114,114,94, |
93,93,43,93,93,93,93,113,113,43,43,113,114,114,114,43,43,94,93,93,93,93,113, |
113,113,113,113,43,114,114,114,43,94,93,43,93,43,93,113,113,113,113,113,113, |
43,113,113,114,114,114,43,43,94,93,93,95,93,43,93,93,93,49,48,0,95,94,93, |
93,19,34,38,39,53,30,1,51,50,62,2,53,3,52,62,2,51,50,22,23,21,46,1,35,34, |
14,2,21,17,20,14,2,36,36,75,23,20,62,35,51,66,39,16,2,50,90,125,75,34,75, |
22,18,61,36,51,66,39,16,50,89,124,254,78,11,8,147,8,16,37,64,84,48,4,188, |
94,134,86,40,9,9,148,10,17,40,65,84,44,251,66,94,134,86,41,0,0,0,2,0,56,1, |
80,4,44,3,244,0,33,0,67,1,31,64,26,36,16,12,16,72,2,16,12,16,72,65,24,11, |
17,72,66,48,9,17,72,61,48,9,17,72,42,184,255,208,179,9,17,72,48,184,255,208, |
64,19,9,17,72,31,24,9,17,72,32,48,9,17,72,26,48,9,17,72,13,184,255,232,179, |
13,17,72,14,184,255,208,179,9,13,72,8,184,255,208,179,14,17,72,8,184,255, |
208,64,41,9,12,72,63,16,28,48,28,80,28,3,0,28,16,28,64,28,96,28,128,28,160, |
28,240,28,7,28,45,11,64,12,17,72,11,47,69,1,59,173,64,45,184,255,192,180, |
35,60,72,45,34,184,255,192,179,23,28,72,34,184,255,192,64,27,16,20,72,34, |
128,62,64,41,60,72,62,40,173,143,49,1,32,49,48,49,2,49,15,25,173,64,11,184, |
255,192,180,39,60,72,11,0,184,255,192,179,23,28,72,0,184,255,192,64,29,16, |
20,72,0,128,28,64,41,60,72,28,6,173,15,15,207,15,2,15,64,23,28,72,15,64,11, |
19,72,15,0,47,43,43,93,237,196,43,26,221,43,43,196,43,26,237,16,220,93,93, |
237,196,43,26,221,43,43,196,43,26,237,1,93,47,43,51,47,93,113,51,49,48,0, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,1,34,38,39,46,1,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,34,38,39,46,1,35,34,14,2,7, |
53,62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,40,69,145,73,65,107,45,38, |
65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68, |
40,69,145,73,65,107,45,38,65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51, |
23,69,123,52,32,59,61,68,2,246,43,26,22,23,12,22,33,21,144,37,47,13,21,27, |
13,8,15,14,8,51,43,149,23,30,19,8,254,90,44,26,23,24,12,23,32,21,141,38,46, |
13,20,26,13,8,15,14,8,50,42,147,23,32,19,8,0,1,0,65,0,55,4,36,5,16,0,19,0, |
162,64,108,53,2,1,58,11,1,60,12,1,42,12,1,3,3,6,7,10,11,2,11,0,17,16,13,12, |
1,12,12,11,1,2,4,9,19,100,14,116,14,2,80,14,1,2,48,14,1,0,14,16,14,32,14, |
96,14,4,14,4,111,9,127,9,2,95,9,111,9,2,9,16,7,8,173,9,0,1,2,3,4,4,173,17, |
6,31,5,47,5,95,5,111,5,223,5,5,5,10,11,12,13,4,80,9,208,9,2,15,9,1,9,0,47, |
93,93,23,51,222,93,50,50,237,23,50,16,237,50,50,1,47,93,113,51,47,93,113, |
95,113,113,51,18,23,57,16,135,192,192,192,192,16,135,192,192,192,192,49,48, |
1,95,93,93,93,93,1,3,35,19,35,53,33,19,33,53,33,19,51,3,33,21,33,3,33,21, |
1,192,152,145,151,237,1,55,190,254,11,2,61,154,143,152,1,21,254,162,191,2, |
29,1,88,254,223,1,33,148,1,108,148,1,36,254,220,148,254,148,148,0,0,0,0,3, |
0,100,0,244,4,71,4,80,0,3,0,7,0,11,0,49,64,27,11,7,2,8,4,0,8,173,9,9,1,5, |
173,63,4,1,4,0,173,15,1,31,1,63,1,3,1,0,47,93,237,47,93,237,17,57,47,237, |
1,47,51,51,47,51,51,49,48,19,53,33,21,1,53,33,21,1,53,33,21,100,3,227,252, |
29,3,227,252,29,3,227,3,188,148,148,253,56,148,148,1,100,148,148,0,0,0,2, |
0,63,0,0,4,36,4,207,0,6,0,10,0,123,185,0,5,255,216,64,17,18,22,72,3,40,18, |
22,72,0,40,18,22,72,137,0,1,1,184,255,216,64,63,18,22,72,134,1,1,10,48,2, |
80,2,2,0,2,16,2,32,2,64,2,96,2,128,2,160,2,7,2,7,7,0,64,12,15,72,0,8,173, |
7,79,6,95,6,143,6,3,6,64,2,80,2,128,2,3,2,1,0,80,4,128,4,2,4,0,25,47,93,51, |
51,205,93,205,93,24,47,237,1,47,43,51,47,47,93,113,51,49,48,0,93,43,93,43, |
43,43,19,53,1,21,9,1,21,5,53,33,21,65,3,227,252,166,3,90,252,27,3,227,2,119, |
205,1,139,154,254,168,254,168,153,236,145,145,0,0,2,0,65,0,0,4,36,4,207,0, |
6,0,10,0,121,185,0,1,255,216,64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137, |
6,1,5,184,255,216,64,62,18,22,72,134,5,1,9,48,6,80,6,2,0,6,16,6,32,6,64,6, |
96,6,128,6,160,6,7,6,7,0,64,12,15,72,0,8,173,7,6,5,64,4,80,4,128,4,3,4,79, |
0,95,0,143,0,3,0,80,2,128,2,2,2,0,25,47,93,205,93,205,93,51,51,24,47,237, |
1,47,43,51,47,93,113,51,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21,1,53, |
33,21,65,3,90,252,166,3,227,252,29,3,227,236,153,1,88,1,88,154,254,117,205, |
253,137,145,145,0,0,0,0,2,0,157,0,0,4,55,4,129,0,4,0,9,0,35,64,18,105,9,121, |
9,2,105,7,121,7,2,6,4,5,0,2,8,5,0,0,47,205,47,205,1,47,205,221,205,49,48, |
0,93,93,51,17,9,1,17,37,33,17,9,1,157,1,205,1,205,252,182,2,250,254,131,254, |
131,2,123,2,6,253,250,253,133,82,2,6,1,170,254,86,0,0,0,0,1,0,100,0,180,4, |
71,2,242,0,5,0,19,183,5,170,0,2,0,4,173,1,0,47,237,47,1,47,47,237,49,48,55, |
17,33,21,33,17,100,3,227,252,174,180,2,62,146,254,84,0,0,0,1,2,34,253,154, |
3,210,6,170,0,23,0,29,182,4,32,8,11,72,9,0,184,1,0,180,1,19,12,6,1,0,47,47, |
205,205,1,47,237,204,49,48,43,1,35,17,52,55,54,51,50,22,21,20,6,35,34,39, |
46,1,39,38,35,34,7,6,21,2,181,147,84,82,128,63,75,51,37,30,13,8,26,20,33, |
16,36,9,6,253,154,7,86,196,123,123,63,48,40,52,10,4,24,22,39,39,35,105,0, |
0,0,1,1,5,253,154,2,181,6,170,0,28,0,32,185,0,4,255,224,180,8,11,72,12,2, |
184,1,0,180,28,24,17,7,0,0,47,47,205,205,1,47,253,204,49,48,43,1,51,17,20, |
7,14,1,35,34,46,2,53,52,62,2,51,50,23,30,1,23,22,51,50,55,54,53,2,34,147, |
90,40,103,62,30,50,37,20,14,23,31,18,33,26,5,21,15,31,16,37,8,7,6,170,248, |
168,205,125,56,54,16,29,39,24,20,34,24,14,16,2,23,20,37,41,31,106,0,0,0,1, |
255,246,2,37,5,181,2,182,0,3,0,22,180,3,5,0,4,0,184,1,2,177,1,252,0,63,237, |
17,1,51,17,51,49,48,3,53,33,21,10,5,191,2,37,145,145,0,0,1,1,216,253,147, |
2,105,7,72,0,3,0,24,187,0,2,1,0,0,3,1,6,180,4,3,254,0,250,0,63,63,1,16,246, |
237,49,48,1,51,17,35,1,216,145,145,7,72,246,75,0,0,0,1,2,141,253,147,5,181, |
2,182,0,5,0,34,178,2,7,3,186,1,0,0,0,1,6,179,6,5,254,3,184,1,2,177,0,252, |
0,63,237,63,1,16,246,237,17,51,49,48,1,33,21,33,17,35,2,141,3,40,253,105, |
145,2,182,145,251,110,0,0,0,1,255,246,253,147,3,30,2,182,0,5,0,34,187,0,2, |
1,0,0,5,1,6,181,6,0,6,4,254,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16,246, |
237,49,48,3,53,33,17,35,17,10,3,40,145,2,37,145,250,221,4,146,0,0,0,0,1,2, |
141,2,37,5,181,7,72,0,5,0,34,178,4,7,2,189,1,0,0,5,1,6,0,6,0,5,1,2,179,2, |
252,0,250,0,63,63,237,1,16,246,237,17,51,49,48,1,51,17,33,21,33,2,141,145, |
2,151,252,216,7,72,251,110,145,0,0,0,1,255,246,2,37,3,30,7,72,0,5,0,34,187, |
0,5,1,0,0,2,1,6,181,6,0,6,3,250,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16, |
244,237,49,48,3,53,33,17,51,17,10,2,151,145,2,37,145,4,146,250,221,0,0,0, |
0,1,2,141,253,147,5,181,7,72,0,7,0,39,179,4,9,5,1,186,1,0,0,0,1,6,179,8,7, |
254,5,184,1,2,179,2,252,0,250,0,63,63,237,63,1,16,246,237,50,17,51,49,48, |
1,51,17,33,21,33,17,35,2,141,145,2,151,253,105,145,7,72,251,110,145,251,110, |
0,1,255,246,253,147,3,30,7,72,0,7,0,39,177,7,4,186,1,0,0,2,1,6,183,8,0,8, |
6,254,3,250,7,184,1,2,177,2,252,0,63,237,63,63,17,1,51,16,244,237,51,49,48, |
3,53,33,17,51,17,35,17,10,2,151,145,145,2,37,145,4,146,246,75,4,146,0,0,1, |
255,246,253,147,5,181,2,182,0,7,0,40,178,3,9,4,186,1,0,0,7,1,6,182,8,0,8, |
6,254,4,0,184,1,2,177,1,252,0,63,237,50,63,17,1,51,16,246,237,17,51,49,48, |
3,53,33,21,33,17,35,17,10,5,191,253,105,145,2,37,145,145,251,110,4,146,0, |
1,255,246,2,37,5,181,7,72,0,7,0,40,178,7,9,5,186,1,0,0,2,1,6,182,8,0,8,3, |
250,5,0,184,1,2,177,1,252,0,63,237,51,63,17,1,51,16,244,237,17,51,49,48,3, |
53,33,17,51,17,33,21,10,2,151,145,2,151,2,37,145,4,146,251,110,145,0,1,255, |
246,253,147,5,181,7,72,0,11,0,51,179,7,13,5,8,187,1,0,0,2,0,11,1,6,64,9,12, |
0,12,10,254,3,250,8,11,184,1,2,178,5,2,252,0,63,51,237,50,63,63,17,1,51,16, |
246,50,237,50,17,51,49,48,3,53,33,17,51,17,33,21,33,17,35,17,10,2,151,145, |
2,151,253,105,145,2,37,145,4,146,251,110,145,251,110,4,146,0,0,0,2,255,246, |
1,113,5,181,3,106,0,3,0,7,0,37,183,3,7,7,9,0,4,8,4,184,1,2,178,5,253,0,184, |
1,2,177,1,251,0,63,237,63,237,17,1,51,50,17,51,17,51,49,48,3,53,33,21,1,53, |
33,21,10,5,191,250,65,5,191,2,217,145,145,254,152,145,145,0,2,1,217,253,147, |
3,210,7,72,0,3,0,7,0,42,65,9,0,5,1,0,0,4,1,7,0,8,0,1,1,0,0,0,1,4,182,8,7, |
3,254,4,0,250,0,63,50,63,51,1,16,246,237,16,244,237,49,48,1,51,17,35,1,51, |
17,35,1,217,145,145,1,104,145,145,7,72,246,75,9,181,246,75,0,0,0,1,2,141, |
253,147,5,181,3,106,0,9,0,49,181,2,6,6,11,7,3,186,1,0,0,0,1,6,179,10,9,254, |
7,184,1,2,178,4,253,3,184,1,2,177,0,251,0,63,237,63,237,63,1,16,246,237,50, |
17,51,17,51,49,48,1,33,21,33,21,33,21,33,17,35,2,141,3,40,253,105,2,151,253, |
105,145,3,106,145,215,145,252,34,0,0,1,1,217,253,147,5,181,2,182,0,9,0,51, |
178,1,11,6,191,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,178,10,2,6,184,1,2,180,9, |
252,4,8,254,0,63,51,63,237,50,1,16,244,237,16,246,237,17,51,49,48,1,21,33, |
17,35,17,35,17,35,17,5,181,254,29,145,215,145,2,182,145,251,110,4,146,251, |
110,5,35,0,0,0,0,2,1,217,253,147,5,181,3,106,0,5,0,11,0,63,180,2,8,8,13,9, |
65,11,1,0,0,6,1,7,0,12,0,3,1,0,0,0,1,4,0,12,0,9,1,2,181,6,253,11,5,254,3, |
184,1,2,177,0,251,0,63,237,63,51,63,237,1,16,246,237,16,244,237,17,51,17, |
51,49,48,1,33,21,33,17,35,1,33,21,33,17,35,1,217,3,220,252,181,145,1,104, |
2,116,254,29,145,3,106,145,250,186,4,111,145,252,34,0,0,1,255,246,253,147, |
3,30,3,106,0,9,0,49,177,9,6,186,1,0,0,3,1,6,183,10,4,0,0,10,8,254,3,184,1, |
2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63,17,1,51,17,51,16,244,237, |
51,49,48,3,53,33,53,33,53,33,17,35,17,10,2,151,253,105,3,40,145,1,113,145, |
215,145,250,41,3,222,0,0,0,1,255,246,253,147,3,210,2,182,0,9,0,52,65,9,0, |
6,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,183,10,0,10,4,8,254,6,0,184,1,2,177,1, |
252,0,63,237,50,63,51,17,1,51,16,244,237,16,246,237,49,48,3,53,33,17,35,17, |
35,17,35,17,10,3,220,145,215,145,2,37,145,250,221,4,146,251,110,4,146,0,0, |
0,0,2,255,246,253,147,3,210,3,106,0,5,0,11,0,63,180,4,9,9,12,11,65,11,1,0, |
0,8,1,4,0,12,0,0,1,0,0,3,1,7,0,12,0,9,1,2,181,10,253,2,7,254,4,184,1,2,177, |
5,251,0,63,237,63,51,63,237,1,16,244,237,16,246,237,17,51,17,51,49,48,1,17, |
35,17,33,53,1,35,17,33,53,33,3,210,145,252,181,2,116,145,254,29,2,116,3,106, |
250,41,5,70,145,250,41,3,222,145,0,0,1,2,141,1,113,5,181,7,72,0,9,0,49,181, |
4,8,8,11,2,6,189,1,0,0,9,1,6,0,10,0,9,1,2,178,6,253,5,184,1,2,179,2,251,0, |
250,0,63,63,237,63,237,1,16,246,237,50,17,51,17,51,49,48,1,51,17,33,21,33, |
21,33,21,33,2,141,145,2,151,253,105,2,151,252,216,7,72,252,34,145,215,145, |
0,0,1,1,217,2,37,5,181,7,72,0,9,0,52,178,4,11,2,65,11,1,0,0,9,1,7,0,10,0, |
8,1,0,0,5,1,4,0,10,0,5,1,2,181,2,8,252,0,6,250,0,63,51,63,51,237,1,16,246, |
237,16,244,237,17,51,49,48,1,51,17,33,21,33,17,51,17,51,3,65,145,1,227,252, |
36,145,215,7,72,251,110,145,5,35,251,110,0,0,0,2,1,217,1,113,5,181,7,72,0, |
5,0,11,0,63,180,10,4,4,13,8,65,11,1,0,0,11,1,7,0,12,0,2,1,0,0,5,1,4,0,12, |
0,11,1,2,178,8,251,5,184,1,2,180,2,253,6,0,250,0,63,50,63,237,63,237,1,16, |
246,237,16,244,237,17,51,17,51,49,48,1,51,17,33,21,33,1,51,17,33,21,33,1, |
217,145,3,75,252,36,1,104,145,1,227,253,140,7,72,250,186,145,5,215,252,34, |
145,0,0,1,255,246,1,113,3,30,7,72,0,9,0,50,188,0,9,1,0,0,6,0,2,1,6,183,10, |
4,0,0,10,7,250,3,184,1,2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63, |
17,1,51,17,51,16,244,50,237,49,48,3,53,33,53,33,53,33,17,51,17,10,2,151,253, |
105,2,151,145,1,113,145,215,145,3,222,250,41,0,0,1,255,246,2,37,3,210,7,72, |
0,9,0,52,65,9,0,0,1,0,0,7,1,7,0,10,0,6,1,0,0,3,1,4,183,10,1,10,8,4,250,6, |
1,184,1,2,177,2,252,0,63,237,51,63,51,17,1,51,16,244,237,16,244,237,49,48, |
1,33,53,33,17,51,17,51,17,51,3,210,252,36,1,227,145,215,145,2,37,145,4,146, |
251,110,4,146,0,0,0,2,255,246,1,113,3,210,7,72,0,5,0,11,0,63,65,9,0,8,1,0, |
0,11,1,4,0,12,0,0,1,0,0,3,1,7,181,12,9,1,1,12,9,184,1,2,181,10,251,4,6,250, |
1,184,1,2,177,2,253,0,63,237,63,51,63,237,17,1,51,17,51,16,244,237,16,244, |
237,49,48,1,33,53,33,17,51,33,51,17,33,53,33,3,210,252,36,3,75,145,254,7, |
145,253,140,1,227,1,113,145,5,70,251,145,145,0,0,0,0,1,2,141,253,147,5,181, |
7,72,0,11,0,54,182,4,8,8,13,6,2,10,186,1,0,0,11,1,6,179,12,11,254,9,184,1, |
2,178,6,253,5,184,1,2,179,2,251,0,250,0,63,63,237,63,237,63,1,16,246,237, |
50,50,17,51,17,51,49,48,1,51,17,33,21,33,21,33,21,33,17,35,2,141,145,2,151, |
253,105,2,151,253,105,145,7,72,252,34,145,215,145,252,34,0,0,0,0,2,1,217, |
253,147,5,181,7,72,0,7,0,11,0,56,178,4,13,10,186,1,0,0,11,1,4,178,12,2,6, |
186,1,0,0,7,1,7,183,12,7,11,254,0,8,250,5,184,1,2,177,2,252,0,63,237,63,51, |
63,51,1,16,244,237,50,16,246,237,17,51,49,48,1,51,17,33,21,33,17,35,1,51, |
17,35,3,65,145,1,227,254,29,145,254,152,145,145,7,72,251,110,145,251,110, |
9,181,246,75,0,0,3,1,217,253,147,5,181,7,72,0,3,0,9,0,15,0,73,181,14,6,6, |
17,12,8,65,12,1,0,0,15,0,9,1,7,0,16,0,0,1,0,0,1,1,4,0,16,0,15,1,2,178,12, |
251,7,184,1,2,183,4,253,10,2,250,9,1,254,0,63,51,63,51,63,237,63,237,1,16, |
246,237,16,244,50,237,50,17,51,17,51,49,48,1,35,17,51,19,33,21,33,17,35,17, |
51,17,33,21,33,2,106,145,145,215,2,116,254,29,145,145,1,227,253,140,253,147, |
9,181,250,186,145,252,34,9,181,252,34,145,0,1,255,246,253,147,3,30,7,72,0, |
11,0,56,185,0,9,1,0,178,6,2,10,184,1,6,64,10,12,4,0,0,12,10,254,7,250,3,184, |
1,2,178,6,251,11,184,1,2,177,2,253,0,63,237,63,237,63,63,17,1,51,17,51,16, |
246,50,50,237,49,48,3,53,33,53,33,53,33,17,51,17,35,17,10,2,151,253,105,2, |
151,145,145,1,113,145,215,145,3,222,246,75,3,222,0,0,0,2,255,246,253,147, |
3,210,7,72,0,7,0,11,0,59,65,10,0,10,1,0,0,11,1,7,0,12,0,5,1,0,0,2,0,6,1,4, |
64,10,12,0,12,11,6,254,8,3,250,7,184,1,2,177,2,252,0,63,237,63,51,63,51,17, |
1,51,16,246,50,237,16,244,237,49,48,3,53,33,17,51,17,35,17,1,51,17,35,10, |
1,227,145,145,1,104,145,145,2,37,145,4,146,246,75,4,146,5,35,246,75,0,0,0, |
0,3,255,246,253,147,3,210,7,72,0,3,0,9,0,15,0,73,181,7,13,13,16,6,10,65,12, |
1,0,0,9,0,11,1,4,0,16,0,2,1,0,0,3,1,7,0,16,0,12,1,2,181,15,253,3,11,254,6, |
184,1,2,180,9,251,0,4,250,0,63,51,63,237,63,51,63,237,1,16,244,237,16,246, |
50,237,50,17,51,17,51,49,48,1,51,17,35,1,51,17,33,53,33,19,35,17,33,53,33, |
3,65,145,145,254,152,145,253,140,1,227,145,145,254,29,2,116,7,72,246,75,9, |
181,251,145,145,250,41,3,222,145,0,0,0,2,255,246,253,147,5,181,3,106,0,7, |
0,11,0,57,180,11,3,3,13,4,186,1,0,0,7,1,6,181,12,8,0,0,12,8,184,1,2,181,9, |
251,6,254,4,0,184,1,2,177,1,253,0,63,237,50,63,63,237,17,1,51,17,51,16,246, |
237,17,51,17,51,49,48,3,53,33,21,33,17,35,17,1,53,33,21,10,5,191,253,105, |
145,253,105,5,191,1,113,145,145,252,34,3,222,1,104,145,145,0,0,1,255,246, |
253,147,5,181,2,182,0,11,0,58,178,3,13,8,191,1,0,0,11,1,4,0,12,0,4,1,0,0, |
7,1,7,64,9,12,0,12,6,10,254,8,4,0,184,1,2,177,1,252,0,63,237,50,50,63,51, |
17,1,51,16,244,237,16,246,237,17,51,49,48,3,53,33,21,33,17,35,17,35,17,35, |
17,10,5,191,254,29,145,215,145,2,37,145,145,251,110,4,146,251,110,4,146,0, |
3,255,246,253,147,5,181,3,106,0,5,0,11,0,15,0,74,180,13,8,8,17,9,186,1,0, |
0,6,1,7,181,16,14,3,3,16,5,189,1,0,0,2,1,4,0,16,0,14,1,2,179,15,251,9,3,184, |
1,2,181,6,4,253,11,1,254,0,63,51,63,51,237,50,63,237,1,16,246,237,17,51,17, |
51,16,244,237,17,51,17,51,49,48,1,35,17,33,53,33,51,33,21,33,17,35,1,21,33, |
53,2,106,145,254,29,2,116,215,2,116,254,29,145,2,116,250,65,253,147,3,222, |
145,145,252,34,5,215,145,145,0,0,0,0,2,255,246,1,113,5,181,7,72,0,7,0,11, |
0,58,64,9,7,11,11,13,0,8,8,12,5,189,1,0,0,2,1,6,0,12,0,8,1,2,181,9,253,3, |
250,5,0,184,1,2,177,1,251,0,63,237,51,63,63,237,1,16,244,237,17,51,17,51, |
17,51,17,51,49,48,3,53,33,17,51,17,33,21,1,53,33,21,10,2,151,145,2,151,250, |
65,5,191,2,217,145,3,222,252,34,145,254,152,145,145,0,1,255,246,2,37,5,181, |
7,72,0,11,0,58,178,11,13,9,191,1,0,0,6,1,7,0,12,0,5,1,0,0,2,1,4,64,9,12,0, |
12,7,3,250,9,5,0,184,1,2,177,1,252,0,63,237,51,51,63,51,17,1,51,16,244,237, |
16,244,237,17,51,49,48,3,53,33,17,51,17,51,17,51,17,33,21,10,1,227,145,215, |
145,1,227,2,37,145,4,146,251,110,4,146,251,110,145,0,3,255,246,1,113,5,181, |
7,72,0,5,0,11,0,15,0,76,64,9,4,15,15,17,9,12,12,16,8,65,11,1,0,0,11,1,4,0, |
16,0,2,1,0,0,5,1,7,0,16,0,12,1,2,179,13,253,5,9,184,1,2,181,2,10,251,0,6, |
250,0,63,51,63,51,237,50,63,237,1,16,244,237,16,244,237,17,51,17,51,17,51, |
17,51,49,48,1,51,17,33,21,33,1,51,17,33,53,33,1,53,33,21,3,65,145,1,227,253, |
140,254,152,145,253,140,1,227,254,29,5,191,7,72,252,34,145,4,111,251,145, |
145,254,7,145,145,0,0,0,1,255,246,253,147,5,181,7,72,0,19,0,76,182,11,15, |
15,21,13,9,16,184,1,0,178,6,2,19,184,1,6,64,11,20,4,0,0,20,18,254,7,250,12, |
4,184,1,2,180,9,5,251,16,0,184,1,2,178,13,1,253,0,63,51,237,50,63,51,237, |
50,63,63,17,1,51,17,51,16,246,50,50,237,50,50,17,51,17,51,49,48,3,53,33,53, |
33,53,33,17,51,17,33,21,33,21,33,21,33,17,35,17,10,2,151,253,105,2,151,145, |
2,151,253,105,2,151,253,105,145,1,113,145,215,145,3,222,252,34,145,215,145, |
252,34,3,222,0,0,1,255,246,253,147,5,181,7,72,0,19,0,77,179,4,21,18,9,187, |
1,0,0,15,0,12,1,4,178,20,2,5,187,1,0,0,19,0,8,1,7,64,9,20,13,20,0,16,250, |
9,5,13,184,1,2,182,18,2,14,252,7,11,254,0,63,51,63,51,51,237,50,50,63,51, |
17,1,51,16,244,50,237,50,16,246,50,237,50,17,51,49,48,1,51,17,33,21,33,17, |
35,17,35,17,35,17,33,53,33,17,51,17,51,3,65,145,1,227,254,29,145,215,145, |
254,29,1,227,145,215,7,72,251,110,145,251,110,4,146,251,110,4,146,145,4,146, |
251,110,0,0,0,0,4,255,246,253,147,5,181,7,72,0,5,0,11,0,17,0,23,0,93,181, |
4,14,14,25,2,15,187,1,0,0,5,0,12,1,7,182,24,21,9,9,24,20,11,187,1,0,0,23, |
0,8,1,4,178,24,5,21,184,1,2,183,2,22,251,0,18,250,15,9,184,1,2,181,12,10, |
253,17,7,254,0,63,51,63,51,237,50,63,51,63,51,237,50,1,16,246,50,237,50,17, |
51,17,51,16,244,50,237,50,17,51,17,51,49,48,1,51,17,33,21,33,3,35,17,33,53, |
33,51,33,21,33,17,35,1,51,17,33,53,33,3,65,145,1,227,253,140,215,145,254, |
29,2,116,215,2,116,254,29,145,254,152,145,253,140,1,227,7,72,252,34,145,250, |
186,3,222,145,145,252,34,9,181,251,145,145,0,0,0,0,1,0,0,2,109,5,171,7,72, |
0,3,0,18,182,0,5,1,4,2,250,1,0,47,63,17,1,51,17,51,49,48,1,33,17,33,5,171, |
250,85,5,171,2,109,4,219,0,0,0,1,0,0,253,147,5,171,2,109,0,3,0,18,182,0,5, |
1,4,2,1,254,0,63,47,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253, |
147,4,218,0,0,0,1,0,0,253,147,5,171,7,72,0,3,0,19,183,0,5,1,4,2,250,1,254, |
0,63,63,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253,147,9,181,0, |
0,1,0,0,253,147,2,214,7,72,0,3,0,17,182,1,4,0,2,250,1,254,0,63,63,1,47,17, |
51,49,48,1,33,17,33,2,214,253,42,2,214,253,147,9,181,0,0,0,0,1,2,213,253, |
147,5,171,7,72,0,3,0,17,182,0,5,1,2,250,1,254,0,63,63,1,47,17,51,49,48,1, |
33,17,33,5,171,253,42,2,214,253,147,9,181,0,0,0,0,42,0,103,253,245,5,171, |
6,163,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55, |
0,59,0,63,0,67,0,71,0,75,0,79,0,83,0,87,0,91,0,95,0,99,0,103,0,107,0,111, |
0,115,0,119,0,123,0,127,0,131,0,135,0,139,0,143,0,147,0,151,0,155,0,159,0, |
163,0,167,2,49,181,161,157,153,149,145,165,184,1,1,182,164,109,85,69,45,13, |
121,184,1,1,64,13,120,108,84,68,44,12,120,101,77,53,29,5,137,184,1,1,64,13, |
136,100,76,52,28,4,136,113,89,65,41,17,125,184,1,1,64,13,124,112,88,64,40, |
16,124,97,81,57,25,9,141,184,1,1,64,13,140,96,80,56,24,8,140,117,93,61,37, |
21,129,184,1,1,64,33,128,116,92,60,36,20,128,120,136,124,140,128,128,140, |
124,136,120,5,132,160,156,152,148,144,164,164,169,105,73,49,33,1,133,184, |
1,1,64,15,104,72,48,32,0,10,132,1,8,3,132,167,143,139,135,184,1,3,180,132, |
163,103,99,107,184,1,3,183,104,160,100,96,104,95,91,87,184,1,3,183,84,92, |
88,84,159,83,79,75,184,1,3,183,72,156,80,76,72,67,63,71,184,1,3,183,68,64, |
60,68,155,59,55,51,184,1,3,183,48,152,56,52,48,43,39,47,184,1,3,183,44,40, |
36,44,151,31,27,35,184,1,3,183,32,148,28,24,32,23,19,15,184,1,3,183,12,20, |
16,12,147,11,7,3,184,1,3,183,0,144,8,4,0,131,127,123,184,1,3,64,60,120,128, |
124,120,22,84,1,27,72,1,25,68,1,27,48,1,27,44,1,20,32,1,104,84,72,68,48,44, |
32,12,0,120,120,0,12,32,44,48,68,72,84,104,10,108,164,140,136,27,132,59,132, |
2,15,132,1,2,132,119,115,111,184,1,3,178,116,112,108,0,47,51,51,237,50,50, |
47,95,93,93,51,51,51,18,23,57,47,47,47,47,47,47,47,47,47,47,93,93,93,93,93, |
93,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50, |
50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,16,237,50,50,50,1,47,95,94,93,51,51,51,51,51, |
237,50,50,50,50,50,17,51,47,51,51,51,51,51,18,23,57,47,47,47,47,47,17,51, |
51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50,50,50, |
17,51,51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50, |
50,50,17,51,51,51,51,51,16,237,50,50,50,50,50,16,237,50,50,50,50,50,49,48, |
19,51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7, |
51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51, |
21,35,37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,7,51,21, |
35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51,21,35, |
37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,37, |
51,21,35,37,51,21,35,1,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,17,51, |
21,35,17,51,21,35,17,51,21,35,17,51,21,35,17,51,21,35,103,104,104,1,158,104, |
104,1,160,103,103,253,145,104,104,1,159,104,104,1,159,104,104,207,103,103, |
254,96,104,104,254,98,104,104,4,13,104,104,254,97,104,104,254,97,104,104, |
207,104,104,1,158,104,104,1,160,103,103,207,104,104,254,97,104,104,254,97, |
104,104,207,104,104,1,158,104,104,1,160,103,103,253,145,104,104,1,159,104, |
104,1,159,104,104,207,103,103,254,96,104,104,254,98,104,104,207,104,104,1, |
159,104,104,1,159,104,104,252,194,104,104,1,159,104,104,1,159,104,104,251, |
243,104,104,1,158,104,104,1,160,103,103,1,158,104,104,104,104,104,104,104, |
104,104,104,104,104,5,34,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96, |
96,99,96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,97,97,97,97,97, |
98,94,94,94,94,94,98,97,97,97,97,97,96,96,96,96,96,96,7,237,98,98,98,98,98, |
1,35,96,96,96,96,96,254,223,98,254,223,96,254,221,96,254,221,97,254,222,97, |
7,238,96,0,0,0,0,84,0,0,253,245,5,171,6,163,0,3,0,7,0,11,0,15,0,19,0,23,0, |
27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,83, |
0,87,0,91,0,95,0,99,0,103,0,107,0,111,0,115,0,119,0,123,0,127,0,131,0,135, |
0,139,0,143,0,147,0,151,0,155,0,159,0,163,0,167,0,171,0,175,0,179,0,183,0, |
187,0,191,0,195,0,199,0,203,0,207,0,211,0,215,0,219,0,223,0,227,0,231,0,235, |
0,239,0,243,0,247,0,251,0,255,1,3,1,7,1,11,1,15,1,19,1,23,1,27,1,31,1,35, |
1,39,1,43,1,47,1,51,1,55,1,59,1,63,1,67,1,71,1,75,1,79,0,0,19,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,37,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,37,51,21,35,5,51,21,35,39,51,21,35,39,51,21, |
35,39,51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,23,51,21,35,39,51,21,35,39,51,21,35,39, |
51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,19,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23, |
51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,17,51,21, |
35,19,51,21,35,103,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,1,158,103,103,207,104,104,208,104,104,208,103, |
103,252,194,103,103,3,165,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104, |
104,208,103,103,103,104,104,207,104,104,208,104,104,208,104,104,207,104,104, |
207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,251,243,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,103,104,104,103,103,103,103,104,104,103,103, |
103,103,104,104,103,103,103,103,104,104,103,103,103,103,103,103,104,104,5, |
34,98,98,98,98,98,98,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,97,97, |
97,97,97,97,97,97,97,97,97,98,94,94,94,94,94,94,94,94,94,94,94,98,97,97,97, |
97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,96,96,96,7,237,98,98,98, |
98,98,98,98,98,98,98,98,1,35,96,96,96,96,96,96,96,96,96,96,96,254,223,98, |
97,96,96,96,99,96,96,96,99,96,96,97,98,94,98,97,96,96,7,237,98,1,35,96,0, |
0,67,0,0,253,147,5,213,6,163,0,73,0,77,0,81,0,85,0,89,0,93,0,97,0,101,0,105, |
0,109,0,113,0,117,0,121,0,125,0,129,0,133,0,137,0,141,0,145,0,149,0,153,0, |
157,0,161,0,165,0,169,0,173,0,177,0,181,0,185,0,189,0,193,0,197,0,201,0,205, |
0,209,0,213,0,217,0,221,0,225,0,229,0,233,0,237,0,241,0,245,0,249,0,253,1, |
1,1,5,1,9,1,13,1,17,1,21,1,25,1,29,1,33,1,37,1,41,1,45,1,49,1,53,1,57,1,61, |
1,65,1,69,1,73,1,77,1,81,0,0,1,33,17,51,53,35,17,51,53,35,17,51,53,35,17, |
51,53,35,17,51,53,35,17,51,53,51,21,51,53,51,21,51,53,51,21,51,53,51,21,51, |
53,51,21,51,53,51,21,51,53,51,21,35,21,51,17,35,21,51,17,35,21,51,17,35,21, |
51,17,35,21,51,17,35,21,51,1,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53, |
23,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,7,21,51,53,51,21,51,53,51, |
21,51,53,51,21,51,53,5,35,21,51,55,21,51,53,51,21,51,53,51,21,51,53,5,21, |
51,53,33,21,51,53,7,53,35,21,37,21,51,53,19,53,35,21,35,53,35,21,35,53,35, |
21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53,19,53,35,21, |
35,53,35,21,35,53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51, |
21,51,53,19,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,1,35,21,51,39,35, |
21,51,39,35,21,51,39,35,21,51,1,21,51,53,51,21,51,53,23,35,21,51,39,35,21, |
51,7,21,51,53,51,21,51,53,7,35,21,51,55,21,51,53,5,21,51,53,23,53,35,21,23, |
53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,19,53,35,21,35,53,35,21,7,21, |
51,53,51,21,51,53,19,35,21,51,39,35,21,51,19,35,21,51,39,35,21,51,5,213,250, |
43,106,106,106,106,106,106,106,106,106,106,106,107,106,107,106,107,107,107, |
107,107,106,107,106,107,107,107,107,107,107,107,107,107,107,107,107,107,250, |
149,107,106,107,106,107,107,107,107,107,107,214,107,107,214,106,106,213,106, |
106,213,107,106,107,106,107,107,107,253,234,106,106,107,106,107,107,107,107, |
252,170,107,1,63,107,213,107,1,171,107,107,107,107,107,107,106,107,106,107, |
107,106,107,106,107,107,107,107,107,107,107,107,106,107,106,107,107,106,107, |
106,107,107,107,107,107,107,214,107,107,214,106,106,213,106,106,2,22,107, |
107,214,107,107,213,107,107,213,107,107,2,235,107,106,107,106,106,106,213, |
106,106,213,107,106,107,107,106,106,107,106,254,86,107,213,107,213,106,107, |
106,107,107,106,107,106,106,107,106,107,107,106,107,106,106,106,213,106,106, |
107,107,107,213,107,107,253,147,1,34,97,1,34,97,1,35,96,1,33,98,1,33,98,1, |
33,96,96,96,96,96,96,96,96,96,96,96,96,96,193,98,254,223,96,254,221,96,254, |
221,96,254,221,94,254,221,96,6,106,96,96,96,96,96,96,96,96,192,98,98,98,98, |
98,98,98,97,96,96,96,96,96,96,96,96,192,96,96,96,96,96,96,96,96,195,96,96, |
96,96,96,96,96,96,96,96,254,223,97,97,97,97,97,97,97,97,98,94,94,94,94,94, |
94,94,94,254,223,97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,6,205, |
98,98,98,98,98,98,98,1,34,98,98,98,98,98,98,98,254,223,96,96,96,96,192,98, |
98,98,97,96,96,96,96,192,96,96,96,96,195,96,96,96,96,96,193,97,97,97,97,98, |
94,94,94,94,254,223,97,97,97,97,96,96,96,96,96,6,205,98,98,98,1,34,98,98, |
98,0,0,0,0,1,0,123,0,117,4,90,4,84,0,3,0,0,19,33,17,33,123,3,223,252,33,4, |
84,252,33,0,0,2,0,6,0,0,4,207,4,201,0,3,0,7,0,21,183,7,1,4,0,4,0,5,3,0,47, |
205,221,205,1,47,205,221,205,49,48,19,33,17,33,19,17,33,17,6,4,201,251,55, |
76,4,49,4,201,251,55,4,125,251,207,4,49,0,0,1,0,109,1,127,2,105,3,123,0,3, |
0,26,64,13,3,48,2,1,15,2,31,2,2,8,2,1,2,0,47,205,1,47,94,93,93,205,49,48, |
1,33,17,33,2,105,254,4,1,252,1,127,1,252,0,0,0,2,0,109,1,127,2,105,3,123, |
0,3,0,7,0,34,64,17,5,3,6,48,2,1,15,2,31,2,2,8,2,7,1,6,2,0,47,205,221,205, |
1,47,94,93,93,205,221,205,49,48,1,33,17,33,3,17,33,17,2,105,254,4,1,252,76, |
254,156,1,127,1,252,254,80,1,98,254,158,0,0,0,0,1,0,0,0,0,8,0,2,104,0,3,0, |
0,17,33,17,33,8,0,248,0,2,104,253,152,0,0,0,1,1,158,0,0,6,76,4,174,0,2,0, |
0,33,9,1,1,158,2,88,2,86,4,174,251,82,0,0,1,1,145,255,229,6,90,4,172,0,2, |
0,0,9,2,1,145,4,201,251,55,4,172,253,158,253,155,0,1,1,158,255,229,6,76,4, |
147,0,2,0,0,9,2,6,76,253,170,253,168,4,147,251,82,4,174,0,1,1,145,255,229, |
6,90,4,172,0,2,0,0,1,17,1,6,90,251,55,4,172,251,57,2,101,0,0,2,0,8,0,0,3, |
238,5,160,0,5,0,9,0,37,64,20,134,7,1,9,0,5,16,5,2,5,7,31,2,1,2,6,3,4,8,1, |
0,47,51,63,51,1,47,93,51,47,93,51,49,48,93,33,35,9,1,51,9,4,2,35,82,254,55, |
1,201,82,1,203,254,14,254,158,1,98,1,96,2,207,2,209,253,49,2,53,253,203,253, |
194,2,62,0,2,0,167,0,162,4,46,4,41,0,19,0,39,0,46,64,28,68,37,84,37,2,75, |
33,91,33,2,75,27,91,27,2,68,23,84,23,2,30,10,20,0,25,15,35,5,0,47,205,220, |
205,1,47,205,220,205,49,48,93,93,93,93,19,52,62,2,51,50,30,2,21,20,14,2,35, |
34,46,2,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,167,70,122,164,94,94, |
165,123,71,71,123,165,94,94,164,122,70,86,57,98,133,76,76,134,99,58,58,99, |
134,76,76,133,98,57,2,100,94,165,123,71,71,123,165,94,94,164,122,70,70,122, |
164,94,76,132,99,57,57,99,132,76,76,134,99,58,58,99,134,0,0,0,0,1,0,178,0, |
137,4,35,3,250,0,23,0,17,182,8,16,12,15,0,1,0,0,47,93,205,1,47,205,49,48, |
1,50,23,30,1,23,30,1,21,20,7,6,35,34,39,38,53,52,54,55,62,1,55,54,2,106,110, |
107,53,82,29,29,31,129,129,183,182,129,129,30,29,29,83,52,108,3,250,57,28, |
82,52,54,110,57,183,129,129,129,129,183,58,109,54,52,82,28,57,0,0,0,2,0,41, |
0,0,4,172,4,131,0,3,0,23,0,21,183,14,2,4,1,19,1,9,0,0,47,205,221,205,1,47, |
205,221,205,49,48,51,17,33,17,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2, |
41,4,131,252,4,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69,4, |
131,251,125,2,65,91,160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0, |
3,0,41,0,0,4,172,4,131,0,3,0,23,0,43,0,34,64,14,4,24,1,14,34,2,1,19,29,0, |
9,39,1,0,0,47,221,221,206,16,221,206,1,47,221,221,206,16,221,206,49,48,51, |
17,33,17,1,52,62,2,51,50,30,2,21,20,14,2,35,34,46,2,39,20,30,2,51,50,62,2, |
53,52,46,2,35,34,14,2,41,4,131,252,81,58,99,133,75,75,133,99,58,58,99,133, |
75,75,133,99,58,77,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69, |
4,131,251,125,2,65,75,133,99,58,58,99,133,75,75,133,99,58,58,99,133,75,91, |
160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0,2,0,115,1,133,2,99, |
3,117,0,18,0,34,0,21,183,19,0,27,11,31,6,23,15,0,47,205,220,205,1,47,205, |
220,205,49,48,1,20,6,7,14,1,35,34,39,46,1,53,52,55,54,51,50,23,22,7,52,39, |
38,35,34,7,6,21,20,23,22,51,50,55,54,2,99,37,37,37,86,51,101,75,35,37,72, |
74,102,103,71,74,76,51,51,70,70,51,51,51,49,72,72,49,51,2,125,53,86,37,35, |
37,72,37,86,53,102,72,74,74,71,103,70,51,51,51,51,70,69,54,49,49,54,0,0,0, |
5,1,177,255,229,6,121,4,172,0,17,0,33,0,45,0,57,0,68,0,147,64,93,20,32,36, |
32,116,32,3,20,28,36,28,116,28,3,27,24,43,24,123,24,3,27,20,43,20,123,20, |
3,68,34,40,63,52,46,40,46,40,46,8,18,31,0,1,0,26,8,49,37,43,55,43,62,58,104, |
58,1,89,58,1,71,58,1,25,58,1,58,60,65,15,43,95,43,111,43,3,8,65,64,9,14,72, |
43,65,43,65,4,22,15,13,1,13,30,4,0,47,205,220,93,205,18,57,57,47,47,43,94, |
93,16,205,51,93,93,93,93,17,51,17,51,16,205,50,1,47,205,220,93,205,18,57, |
57,47,47,16,205,51,16,205,51,49,48,0,93,93,93,93,1,20,7,6,35,34,39,38,53, |
52,54,55,54,51,50,23,30,1,7,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54,1, |
20,6,35,34,38,53,52,54,51,50,22,5,20,6,35,34,38,53,52,54,51,50,22,1,22,51, |
50,55,23,6,35,34,38,39,6,121,180,179,253,253,179,180,90,90,178,254,254,178, |
90,90,90,153,151,218,218,151,153,153,152,217,217,152,153,253,90,46,32,32, |
45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,234,76,147,145,76,62,98, |
185,94,141,48,2,72,254,178,179,179,178,254,128,215,91,178,178,91,215,128, |
217,153,154,154,153,217,216,153,154,154,153,1,87,32,46,46,32,32,45,45,32, |
32,46,46,32,32,45,45,254,191,137,137,35,186,95,91,0,0,4,1,209,255,229,6,153, |
4,172,0,17,0,29,0,41,0,52,0,96,64,55,42,18,24,47,36,30,24,30,24,30,0,8,39, |
27,21,33,21,48,52,104,52,1,89,52,1,75,52,1,61,52,1,52,50,45,15,21,31,21,95, |
21,111,21,4,8,79,45,95,45,2,21,45,21,45,13,4,0,47,204,57,57,47,47,93,94,93, |
16,206,51,93,93,93,93,17,51,17,51,16,206,50,1,47,205,57,57,47,47,16,206,51, |
16,206,51,49,48,1,20,7,6,35,34,39,38,53,52,54,55,54,51,50,23,30,1,5,52,38, |
35,34,6,21,20,22,51,50,54,37,52,38,35,34,6,21,20,22,51,50,54,1,30,1,51,50, |
55,39,6,35,34,39,6,153,180,179,253,253,179,180,90,90,178,254,254,178,90,90, |
253,0,46,32,32,45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,174,48,141, |
94,185,98,62,76,145,147,76,2,72,254,178,179,179,178,254,128,215,91,178,178, |
91,215,1,32,45,45,32,32,46,46,32,32,45,45,32,32,46,46,254,220,91,95,186,35, |
137,137,0,2,1,70,255,115,6,14,4,59,0,51,0,70,0,139,185,0,47,255,240,64,13, |
11,14,72,52,46,1,52,36,1,119,35,1,35,184,255,240,64,77,11,14,72,21,16,11, |
14,72,59,20,1,59,9,1,8,16,11,14,72,59,47,1,52,35,1,52,21,1,59,8,1,66,143, |
13,223,13,2,112,13,1,63,13,1,32,13,1,13,57,43,62,128,31,208,31,224,31,3,127, |
31,1,48,31,1,47,31,1,31,52,15,51,63,51,79,51,3,8,51,0,47,94,93,205,220,93, |
93,93,93,205,1,47,205,220,93,93,93,93,205,49,48,0,93,93,93,93,1,43,93,93, |
43,43,93,93,93,43,1,51,21,30,3,23,55,23,7,30,1,23,51,21,35,14,1,7,23,7,39, |
14,1,7,14,1,7,21,35,53,46,1,39,7,39,55,46,1,39,35,53,51,54,55,39,55,23,62, |
1,55,23,34,6,7,6,21,20,23,30,1,51,50,55,54,53,52,39,46,1,3,137,66,32,57,54, |
53,29,186,45,184,45,44,3,215,215,8,44,40,184,49,182,31,55,23,24,58,34,66, |
63,110,48,188,43,182,40,46,8,215,215,12,80,180,40,189,57,112,54,31,69,117, |
48,98,98,48,117,69,139,96,99,99,49,117,4,59,217,3,12,21,32,22,182,45,184, |
59,113,57,62,60,110,51,188,43,182,23,32,11,9,12,5,217,217,9,46,35,180,45, |
184,51,111,63,62,128,95,184,49,182,40,44,6,61,50,48,100,136,137,98,50,47, |
97,97,138,137,99,48,50,0,0,0,2,1,218,0,80,4,38,4,129,0,28,0,47,0,98,64,62, |
22,18,25,0,0,5,15,43,1,239,43,255,43,2,43,15,14,1,14,0,34,1,224,34,240,34, |
2,34,5,22,25,19,0,28,16,28,80,28,3,28,0,39,1,240,39,1,39,18,0,0,128,0,2,8, |
0,29,64,37,40,72,29,10,0,47,205,43,220,94,93,50,205,113,114,47,93,51,205, |
50,1,47,205,113,114,220,93,205,113,114,17,57,47,51,205,50,49,48,1,46,1,39, |
38,53,52,55,62,1,51,50,23,22,21,20,7,6,7,21,33,21,33,17,35,17,33,53,33,19, |
34,7,14,1,21,20,22,23,22,51,50,55,54,53,52,38,39,38,2,220,55,90,35,71,83, |
44,101,60,118,83,86,72,72,106,1,0,255,0,74,254,254,1,2,35,83,62,29,31,31, |
29,62,83,87,59,61,30,29,62,2,66,8,46,42,80,108,122,83,43,43,86,83,122,109, |
81,82,12,166,70,254,250,1,6,70,2,145,59,31,71,44,43,71,31,62,62,61,84,44, |
71,31,59,0,2,1,81,0,250,4,175,4,129,0,65,0,81,0,70,64,40,49,65,59,15,78,1, |
78,63,32,1,32,15,51,1,51,0,70,1,70,59,65,49,63,74,0,55,128,55,2,55,66,144, |
20,1,20,15,63,1,8,63,0,47,94,93,204,93,205,220,93,205,18,57,57,1,47,205,114, |
220,93,204,93,205,114,18,57,57,49,48,1,46,1,39,46,1,39,46,1,53,52,55,62,1, |
51,50,22,23,30,1,51,50,54,55,54,51,50,21,20,7,14,1,21,20,22,23,30,1,21,20, |
6,7,6,35,34,39,46,1,39,7,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,7, |
34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,3,255,17,54,37,28,40,14,5,3,6, |
3,6,5,5,15,13,32,63,32,46,64,19,36,13,16,6,9,7,4,8,2,2,2,2,9,5,21,20,22,31, |
11,237,84,86,87,118,118,87,84,84,85,122,71,83,154,90,62,61,61,64,88,89,60, |
62,62,60,4,0,5,18,14,11,24,14,3,10,5,8,9,2,2,2,2,8,9,7,6,12,14,9,18,34,79, |
45,31,64,34,11,16,5,5,7,3,6,39,42,82,42,238,81,109,125,86,88,84,84,117,117, |
87,86,43,32,62,61,88,91,61,61,61,62,90,87,62,62,0,0,1,0,59,0,0,4,5,4,207, |
0,47,0,40,64,25,38,32,10,48,10,96,10,112,10,4,10,14,34,64,8,11,72,34,23,79, |
0,95,0,2,0,0,47,93,47,47,43,51,1,47,93,47,49,48,1,30,1,23,30,1,23,22,23,22, |
21,20,7,6,35,34,39,22,23,30,1,31,1,33,55,50,55,62,3,39,14,1,35,34,39,38,53, |
52,55,62,1,55,62,1,55,54,2,32,14,40,26,28,95,69,141,35,37,63,66,88,157,99, |
3,36,38,163,137,8,252,232,6,125,86,43,66,44,20,1,45,132,83,90,66,63,30,23, |
78,57,69,110,38,56,4,207,54,95,44,43,105,63,126,66,67,70,95,63,66,191,147, |
87,86,99,9,37,37,49,25,69,91,119,75,96,95,66,63,91,74,59,42,85,47,59,113, |
57,83,0,0,0,0,1,0,60,0,0,5,4,4,199,0,75,0,47,64,24,57,77,63,23,1,23,52,61, |
67,13,47,30,4,18,31,18,1,27,18,27,18,1,41,1,0,47,47,18,57,57,47,47,93,18, |
23,57,50,51,1,47,93,16,206,49,48,41,1,55,62,1,55,62,1,55,54,53,52,38,53,6, |
7,14,1,35,34,38,39,38,53,52,55,54,51,50,22,23,46,1,39,46,1,53,52,55,62,1, |
51,50,23,22,21,20,7,54,55,62,1,51,50,22,23,22,21,20,7,6,35,34,38,39,46,1, |
39,30,1,23,30,1,23,22,23,4,70,252,182,8,84,108,27,41,64,26,52,2,58,90,43, |
88,45,59,97,41,79,73,73,93,31,80,51,20,27,8,5,6,78,40,97,60,116,80,80,69, |
84,16,14,30,17,51,86,36,73,80,80,112,62,132,50,17,43,26,3,23,23,22,67,46, |
61,159,35,17,33,17,25,75,50,100,109,8,22,17,121,59,28,30,42,38,83,116,115, |
79,80,25,26,34,52,19,17,38,20,115,78,38,40,80,78,109,86,98,40,3,5,3,37,41, |
76,116,118,83,80,60,51,19,61,45,81,125,46,45,76,31,39,30,0,1,0,102,255,233, |
4,90,4,121,0,39,0,38,64,23,18,2,1,4,2,1,8,29,41,16,12,64,12,80,12,112,12, |
128,12,5,12,16,0,0,47,47,1,47,93,16,206,49,48,94,93,93,5,46,1,39,46,1,39, |
46,1,39,46,1,53,52,55,54,51,50,23,30,1,23,62,1,51,50,22,23,22,21,20,7,14, |
1,7,14,1,7,14,1,2,98,14,42,26,28,103,76,56,69,14,43,37,68,70,102,98,78,28, |
47,17,34,142,88,50,85,35,70,41,20,78,60,75,108,32,31,44,23,56,101,48,50,147, |
102,76,93,22,65,106,56,103,71,70,72,28,80,54,119,117,36,34,70,94,86,88,45, |
119,75,96,152,55,54,110,0,0,0,0,1,0,66,255,231,3,210,4,199,0,26,0,18,183, |
48,12,1,12,75,21,1,21,0,25,47,93,1,47,93,49,48,1,30,1,23,30,1,23,14,1,7,14, |
1,7,46,1,39,46,1,39,46,1,39,62,1,55,62,1,2,7,45,113,69,69,116,47,39,120,83, |
69,106,40,13,35,22,38,98,60,14,94,81,50,128,80,59,96,4,199,78,165,93,93,141, |
53,40,150,111,93,159,72,25,58,32,57,135,80,20,119,99,59,160,107,77,148,0, |
0,1,0,196,0,29,3,59,4,129,0,33,0,48,64,25,2,19,33,13,64,79,6,95,6,111,6,3, |
6,128,27,33,18,10,10,47,0,1,0,31,24,0,47,205,204,93,57,47,57,1,47,205,26, |
220,93,26,205,16,205,50,49,48,1,51,21,23,30,1,21,20,6,7,35,62,1,53,52,38, |
39,38,39,17,20,6,7,6,35,34,38,53,52,55,54,51,50,23,1,233,76,153,51,58,48, |
46,47,29,28,28,29,57,64,37,37,72,108,57,58,60,63,80,44,46,4,129,100,193,69, |
163,85,78,134,59,65,124,59,60,99,40,81,9,254,6,63,98,38,75,54,46,73,60,60, |
19,0,2,1,16,255,213,4,239,4,135,0,34,0,38,0,108,64,61,35,32,64,18,26,128, |
36,15,64,111,0,1,0,128,15,9,1,9,9,0,26,1,26,17,35,86,35,1,67,35,1,35,16,36, |
54,36,1,37,36,1,20,36,1,3,36,1,8,36,34,38,33,88,33,1,33,37,34,30,23,13,6, |
0,47,205,47,205,47,51,51,93,17,51,17,51,94,93,93,93,93,17,51,51,93,93,17, |
51,1,47,93,51,47,93,26,221,93,26,205,50,26,16,221,26,205,51,49,48,1,20,6, |
7,14,1,35,34,38,53,52,55,54,51,50,23,17,5,17,20,6,7,6,35,34,38,53,52,55,54, |
51,50,23,17,37,1,37,53,5,4,239,36,38,37,88,51,57,57,57,62,81,48,42,253,218, |
37,35,74,106,57,58,59,60,84,45,45,2,186,253,144,2,38,253,218,1,68,63,101, |
35,37,39,54,47,76,57,59,18,1,192,149,254,118,62,98,38,74,53,45,76,57,60,19, |
2,240,178,254,103,149,117,152,0,0,0,3,0,29,0,0,3,118,5,204,0,27,0,31,0,35, |
0,100,179,67,10,1,10,184,255,224,64,59,8,12,72,31,35,70,28,47,32,143,32,207, |
32,3,31,32,79,32,111,32,143,32,4,32,79,16,95,16,2,16,16,1,70,144,2,1,111, |
2,1,2,34,15,31,83,30,0,19,80,12,0,0,4,80,25,5,15,32,1,21,0,63,51,63,51,237, |
50,63,237,63,237,63,1,47,93,93,237,50,47,93,47,93,113,51,237,50,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,53,51,21,3,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18, |
40,51,29,11,211,134,180,180,180,3,183,252,73,3,183,131,122,59,101,75,43,6, |
6,137,3,5,22,41,60,39,97,131,1,105,172,172,250,224,4,58,251,198,0,0,0,0,2, |
0,29,0,0,3,119,5,204,0,27,0,31,0,90,179,67,10,1,10,184,255,224,64,53,8,12, |
72,31,70,47,28,143,28,207,28,3,31,28,79,28,111,28,143,28,4,28,79,16,95,16, |
2,16,16,1,70,144,2,1,111,2,1,2,30,0,19,80,12,0,0,4,80,25,5,15,28,1,21,0,63, |
51,63,51,237,50,63,237,63,1,47,93,93,237,50,47,93,47,93,113,237,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51,29, |
11,211,135,180,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41, |
60,39,97,131,252,73,5,204,250,52,0,0,1,0,119,254,78,1,227,255,170,0,28,0, |
75,185,0,2,255,232,179,9,17,72,27,184,255,224,64,40,9,17,72,22,22,8,16,131, |
15,0,1,95,0,1,0,8,19,140,63,23,79,23,2,23,11,140,0,5,16,5,32,5,80,5,96,5, |
112,5,6,5,0,47,93,237,47,93,237,1,47,221,93,113,237,18,57,47,49,48,43,43, |
5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35,42,1,7,55,51,50,30,2,1, |
227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14,29,14,31,62,52,84,60, |
32,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,96,18,41,63,0,0,0,255,255, |
0,243,1,190,1,182,2,154,17,6,0,119,56,0,0,18,64,11,0,127,0,1,111,0,1,95,0, |
1,0,17,93,93,93,53,0,1,0,127,254,78,1,72,255,158,0,10,0,75,185,0,5,255,192, |
179,9,17,72,2,184,255,192,64,28,9,17,72,7,151,0,150,4,9,8,146,16,3,32,3,2, |
0,3,96,3,160,3,176,3,192,3,5,3,184,255,192,64,10,30,33,72,3,0,9,16,9,2,9, |
0,47,93,204,43,93,113,237,1,47,51,253,237,49,48,43,43,5,20,6,7,35,62,1,53, |
35,53,51,1,72,44,40,117,45,49,88,195,193,87,107,47,48,86,46,156,0,0,0,0,2, |
0,14,2,51,2,150,5,129,0,10,0,23,0,108,64,74,86,10,1,86,9,1,121,6,137,6,2, |
17,175,5,191,5,2,5,64,29,60,72,5,64,24,27,72,5,8,1,224,18,6,16,2,1,48,2,1, |
64,2,144,2,2,2,0,4,229,8,5,95,17,111,17,127,17,3,15,17,31,17,127,17,143,17, |
4,17,17,1,11,6,220,1,223,0,63,63,51,18,57,47,93,113,51,51,237,50,1,47,93, |
113,114,51,51,237,50,47,43,43,93,51,49,48,93,114,114,1,21,35,53,33,53,1,51, |
17,51,21,3,14,3,7,3,33,17,60,2,54,2,39,131,254,106,1,130,151,111,240,7,22, |
24,22,7,199,1,23,1,2,229,178,178,111,2,45,253,213,113,2,23,13,37,39,35,11, |
254,225,1,33,14,38,38,34,0,0,0,0,1,0,53,2,40,2,124,5,129,0,38,0,134,64,37, |
37,36,53,36,69,36,3,3,24,9,13,72,19,34,1,4,34,1,3,31,30,25,224,139,27,1,6, |
27,10,192,26,208,26,224,26,3,26,184,255,192,64,53,16,19,72,26,29,0,225,32, |
19,96,19,2,32,19,96,19,160,19,224,19,4,19,22,228,34,34,16,30,229,27,220,68, |
11,84,11,100,11,3,53,11,1,6,11,22,11,38,11,3,11,16,228,5,221,0,63,237,50, |
93,93,93,63,237,18,57,47,237,1,47,93,113,237,50,47,43,93,51,51,95,113,237, |
50,50,0,95,93,93,49,48,43,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,38,35,34,6,7,35,19,33,21,33,7,62,1,51,50,30,2,2,124,38,73,108,70,66,101, |
74,44,9,133,5,24,39,54,36,71,86,81,75,51,77,23,129,33,1,250,254,114,19,29, |
91,54,67,103,69,36,3,67,65,104,74,40,33,59,81,48,15,27,47,36,21,85,93,81, |
85,37,23,1,212,113,245,26,33,39,71,102,0,0,0,1,0,43,2,52,2,120,5,129,0,14, |
0,54,64,33,5,224,6,6,0,175,12,191,12,2,12,11,96,0,1,191,0,207,0,255,0,3,96, |
0,1,0,0,12,229,13,220,5,223,0,63,63,237,50,1,47,93,93,113,51,47,93,17,57, |
47,237,49,48,1,14,3,21,35,52,62,2,55,33,53,33,2,120,64,106,77,43,133,47,80, |
107,60,254,52,2,77,5,28,97,176,176,187,108,102,188,179,175,88,113,0,3,0,45, |
2,40,2,130,5,142,0,19,0,39,0,81,0,138,185,0,68,255,232,179,11,15,72,64,184, |
255,232,64,82,11,15,72,47,24,9,13,72,43,24,9,13,72,5,15,21,15,2,76,55,71, |
10,226,72,61,1,61,61,30,226,224,50,1,191,50,1,50,0,226,70,71,1,71,71,40,226, |
32,20,96,20,2,32,20,96,20,160,20,224,20,4,20,76,56,25,228,15,15,35,26,5,1, |
11,5,1,5,228,66,222,35,228,45,221,0,63,237,63,237,93,93,18,57,47,237,57,57, |
1,47,93,113,237,50,47,113,237,47,93,93,237,51,47,113,237,18,57,57,0,93,49, |
48,43,43,43,43,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,19,52,46,2,35,34, |
14,2,21,20,30,2,51,50,62,2,55,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3,53, |
52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,1,223,12,31,53,41,39,53,31,13,9,29, |
54,45,48,54,27,7,21,13,35,61,49,45,59,36,15,15,36,61,46,46,61,34,14,142,35, |
73,113,77,77,113,74,35,29,47,61,32,36,55,38,20,35,70,104,68,72,105,69,33, |
20,38,56,36,36,63,46,26,4,169,28,48,34,19,19,34,48,28,23,47,39,25,25,39,48, |
254,155,28,52,40,24,24,41,53,28,35,59,42,23,23,42,60,22,54,91,66,37,37,66, |
90,54,46,72,52,32,5,3,8,37,52,64,35,45,79,59,34,35,60,79,44,35,63,52,37,7, |
3,6,31,52,72,0,1,255,229,4,176,2,195,5,240,0,17,0,62,64,41,117,11,133,11, |
2,117,7,133,7,2,12,73,15,13,191,13,239,13,3,13,6,73,64,5,12,5,128,9,142,15, |
0,47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,205,50,1,47,26,237,220,93,237, |
49,48,0,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,84,111,141,81,32, |
2,164,6,104,93,93,104,6,164,2,32,81,141,4,176,57,91,115,57,103,96,96,103, |
57,115,91,57,0,1,0,124,4,28,1,69,5,129,0,10,0,36,64,21,7,151,0,150,4,9,8, |
146,80,3,96,3,2,160,3,176,3,2,3,9,3,0,63,204,93,113,237,1,47,51,253,237,49, |
48,1,20,6,7,35,62,1,53,35,53,51,1,69,44,40,117,45,49,88,195,5,23,87,117,47, |
48,96,46,167,0,0,1,0,130,4,187,1,75,6,32,0,10,0,47,64,30,4,9,150,7,151,10, |
7,146,95,3,111,3,2,175,3,191,3,2,3,80,10,1,15,10,63,10,127,10,3,10,0,47,93, |
113,205,93,113,237,1,47,237,237,50,49,48,19,52,54,55,51,14,1,21,51,21,35, |
130,44,40,117,45,49,88,195,5,37,87,117,47,48,96,46,167,0,0,0,0,1,0,106,5, |
250,2,18,6,240,0,5,0,48,64,30,117,3,133,3,2,128,4,1,64,4,1,4,64,1,2,64,16, |
20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43,1,47,26,205,93,93, |
49,48,93,1,37,53,51,23,21,1,160,254,202,207,217,5,250,217,29,226,20,0,1,0, |
72,5,250,1,240,6,240,0,5,0,52,64,34,122,2,138,2,2,64,3,128,3,2,3,64,79,0, |
143,0,2,0,2,64,16,20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43, |
1,47,93,26,205,93,49,48,93,19,53,55,51,21,5,72,217,207,254,202,5,250,20,226, |
29,217,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,9,134,9,2,120,8,136, |
8,2,128,0,1,0,184,255,192,64,25,11,15,72,0,6,4,142,64,8,64,16,19,72,8,128, |
6,95,1,1,1,64,9,12,72,1,0,47,43,93,51,26,221,43,26,237,1,47,204,43,93,49, |
48,93,93,1,21,35,39,35,7,35,53,55,51,2,150,105,219,2,232,104,234,204,6,14, |
20,139,139,20,240,0,0,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,0,134, |
0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,25,11,15,72,8,64,2,7,3,64,16,19, |
72,3,128,6,142,95,1,1,1,64,9,12,72,1,0,47,43,93,237,26,205,43,50,1,47,26, |
204,43,93,49,48,93,93,1,35,39,53,51,23,51,55,51,21,1,182,204,234,104,232, |
2,219,105,5,250,239,21,139,139,21,0,0,0,0,2,0,45,5,250,2,90,6,178,0,3,0,7, |
0,35,64,19,3,133,0,7,133,4,1,5,145,0,95,4,1,4,64,9,12,72,4,0,47,43,93,51, |
237,50,1,47,237,220,237,49,48,1,53,51,21,33,53,51,21,1,183,163,253,211,165, |
5,250,184,184,184,184,0,0,1,255,233,5,250,2,182,7,6,0,27,0,68,181,89,2,105, |
2,2,26,184,255,232,64,34,9,15,72,12,24,9,15,72,64,23,1,15,23,1,23,9,22,5, |
143,64,14,128,19,143,8,95,0,1,0,64,9,12,72,0,0,47,43,93,50,237,26,221,26, |
237,51,1,47,204,93,93,49,48,43,43,0,93,1,34,46,2,35,34,6,7,35,62,3,51,50, |
30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45,74,59,44, |
84,78,69,30,54,55,8,92,5,20,43,74,5,250,37,45,37,62,57,45,95,78,50,37,45, |
37,63,56,44,95,78,51,0,0,0,0,2,0,32,5,250,3,15,6,241,0,5,0,11,0,88,64,60, |
154,8,170,8,2,154,2,170,2,2,102,10,1,98,4,1,98,3,1,10,159,7,1,15,7,31,7,127, |
7,223,7,4,7,7,4,64,0,64,9,31,72,0,8,2,64,16,20,72,2,128,6,95,0,1,0,64,9,12, |
72,0,0,47,43,93,50,26,205,43,50,1,47,43,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,19,53,55,51,21,5,51,53,55,51,21,5,32,197,207,254,202,253,197, |
207,254,202,5,250,20,227,29,218,20,227,29,218,0,1,255,232,5,250,2,130,6,243, |
0,17,0,55,64,32,4,11,1,4,7,1,17,15,19,1,100,13,64,5,12,5,64,16,20,72,5,128, |
9,95,0,1,0,64,9,12,72,0,0,47,43,93,205,26,205,43,50,1,47,26,204,94,93,49, |
48,0,94,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,52,74,116,84,50, |
8,117,17,109,91,91,107,17,117,9,50,83,116,5,250,41,69,90,49,53,60,61,52,49, |
90,69,41,0,0,0,0,0,0,1,0,0,21,86,0,1,3,140,12,0,0,9,9,72,0,3,0,36,255,143, |
0,3,0,55,255,219,0,3,0,60,255,219,0,3,1,82,255,143,0,3,1,91,255,143,0,3,1, |
94,255,143,0,3,1,101,255,143,0,3,1,109,255,219,0,3,1,110,255,219,0,3,1,116, |
255,219,0,20,0,20,255,104,0,36,0,3,255,143,0,36,0,55,255,104,0,36,0,57,255, |
104,0,36,0,58,255,180,0,36,0,60,255,104,0,36,0,89,255,219,0,36,0,90,255,219, |
0,36,0,92,255,219,0,36,2,3,255,104,0,41,0,15,255,29,0,41,0,17,255,29,0,41, |
0,36,255,143,0,47,0,3,255,180,0,47,0,55,255,104,0,47,0,57,255,104,0,47,0, |
58,255,104,0,47,0,60,255,104,0,47,0,92,255,180,0,47,2,3,255,143,0,51,0,3, |
255,219,0,51,0,15,254,248,0,51,0,17,254,248,0,51,0,36,255,104,0,53,0,55,255, |
219,0,53,0,57,255,219,0,53,0,58,255,219,0,53,0,60,255,219,0,55,0,3,255,219, |
0,55,0,15,255,29,0,55,0,16,255,143,0,55,0,17,255,29,0,55,0,29,255,29,0,55, |
0,30,255,29,0,55,0,36,255,104,0,55,0,50,255,219,0,55,0,68,255,29,0,55,0,70, |
255,29,0,55,0,72,255,29,0,55,0,76,255,180,0,55,0,82,255,29,0,55,0,85,255, |
180,0,55,0,86,255,29,0,55,0,88,255,180,0,55,0,90,255,143,0,55,0,92,255,143, |
0,57,0,15,255,68,0,57,0,16,255,143,0,57,0,17,255,68,0,57,0,29,255,180,0,57, |
0,30,255,180,0,57,0,36,255,104,0,57,0,68,255,104,0,57,0,72,255,143,0,57,0, |
76,255,219,0,57,0,82,255,143,0,57,0,85,255,180,0,57,0,88,255,180,0,57,0,92, |
255,180,0,58,0,15,255,143,0,58,0,16,255,219,0,58,0,17,255,143,0,58,0,29,255, |
219,0,58,0,30,255,219,0,58,0,36,255,180,0,58,0,68,255,180,0,58,0,72,255,219, |
0,58,0,82,255,219,0,58,0,85,255,219,0,58,0,88,255,219,0,58,0,92,255,238,0, |
60,0,3,255,219,0,60,0,15,254,248,0,60,0,16,255,68,0,60,0,17,254,248,0,60, |
0,29,255,143,0,60,0,30,255,123,0,60,0,36,255,104,0,60,0,68,255,104,0,60,0, |
72,255,68,0,60,0,76,255,180,0,60,0,82,255,68,0,60,0,83,255,104,0,60,0,84, |
255,68,0,60,0,88,255,143,0,60,0,89,255,143,0,73,0,73,255,219,0,73,2,3,0,37, |
0,85,0,15,255,143,0,85,0,17,255,143,0,85,2,3,0,76,0,89,0,15,255,104,0,89, |
0,17,255,104,0,90,0,15,255,143,0,90,0,17,255,143,0,92,0,15,255,104,0,92,0, |
17,255,104,1,82,1,98,255,213,1,82,1,105,255,213,1,82,1,109,255,104,1,82,1, |
110,255,104,1,82,1,111,255,197,1,82,1,116,255,104,1,82,1,124,255,219,1,82, |
1,134,255,219,1,82,1,144,255,219,1,87,1,110,255,190,1,88,1,90,0,170,1,88, |
1,91,255,104,1,88,1,94,255,104,1,88,1,98,255,141,1,88,1,101,255,104,1,88, |
1,105,255,141,1,88,1,111,255,141,1,88,1,114,255,158,1,88,1,119,255,104,1, |
88,1,120,255,180,1,88,1,122,255,70,1,88,1,128,255,104,1,88,1,130,255,180, |
1,88,1,131,255,104,1,88,1,133,255,104,1,88,1,136,255,70,1,88,1,140,255,70, |
1,88,1,143,255,70,1,88,1,147,0,98,1,88,1,149,255,70,1,89,1,110,255,209,1, |
89,1,116,255,209,1,91,0,3,255,143,1,91,1,98,255,213,1,91,1,105,255,213,1, |
91,1,109,255,104,1,91,1,110,255,104,1,91,1,111,255,197,1,91,1,116,255,104, |
1,91,1,124,255,219,1,91,1,134,255,219,1,91,1,144,255,219,1,91,2,3,255,104, |
1,93,0,15,255,31,1,93,0,17,255,31,1,93,1,90,0,164,1,93,1,91,255,68,1,93,1, |
94,255,68,1,93,1,101,255,68,1,93,1,130,255,168,1,93,1,147,0,88,1,94,0,3,255, |
143,1,94,1,98,255,213,1,94,1,105,255,213,1,94,1,109,255,137,1,94,1,110,255, |
104,1,94,1,116,255,104,1,98,1,91,255,219,1,98,1,94,255,219,1,98,1,101,255, |
219,1,98,1,110,255,190,1,98,1,116,255,190,1,100,1,98,255,193,1,100,1,105, |
255,193,1,100,1,111,255,143,1,100,1,117,255,231,1,100,1,122,255,231,1,100, |
1,125,255,231,1,100,1,127,255,231,1,100,1,129,255,231,1,100,1,135,255,231, |
1,100,1,136,255,231,1,100,1,140,255,231,1,100,1,143,255,231,1,100,1,146,255, |
231,1,100,1,149,255,231,1,100,1,151,255,231,1,101,0,3,255,143,1,101,1,98, |
255,213,1,101,1,105,255,213,1,101,1,109,255,104,1,101,1,110,255,104,1,101, |
1,116,255,104,1,105,1,91,255,219,1,105,1,94,255,213,1,105,1,101,255,219,1, |
105,1,110,255,190,1,105,1,116,255,190,1,107,0,3,255,219,1,107,0,15,254,250, |
1,107,0,17,254,250,1,107,1,91,255,104,1,107,1,94,255,104,1,107,1,101,255, |
104,1,108,1,137,255,158,1,108,1,141,255,158,1,109,0,3,255,219,1,109,0,15, |
255,31,1,109,0,17,255,31,1,109,0,29,255,31,1,109,0,30,255,31,1,109,1,90,0, |
188,1,109,1,91,255,104,1,109,1,94,255,104,1,109,1,98,255,219,1,109,1,101, |
255,104,1,109,1,105,255,219,1,109,1,111,255,219,1,109,1,114,255,219,1,109, |
1,117,255,31,1,109,1,118,255,31,1,109,1,121,255,78,1,109,1,122,255,31,1,109, |
1,124,255,78,1,109,1,126,255,31,1,109,1,128,255,106,1,109,1,130,255,180,1, |
109,1,133,255,106,1,109,1,134,255,143,1,109,1,136,255,31,1,109,1,140,255, |
31,1,109,1,142,255,80,1,109,1,143,255,31,1,109,1,144,255,143,1,109,1,145, |
255,106,1,109,1,147,0,188,1,109,1,148,255,78,1,109,1,149,255,31,1,109,1,150, |
255,78,1,110,0,3,255,219,1,110,0,15,254,250,1,110,0,16,255,70,1,110,0,17, |
254,250,1,110,0,29,255,143,1,110,0,30,255,143,1,110,1,90,0,188,1,110,1,91, |
255,104,1,110,1,94,255,104,1,110,1,98,255,141,1,110,1,101,255,104,1,110,1, |
105,255,141,1,110,1,111,255,141,1,110,1,114,255,158,1,110,1,119,255,104,1, |
110,1,120,255,180,1,110,1,122,255,70,1,110,1,124,255,158,1,110,1,128,255, |
104,1,110,1,130,255,180,1,110,1,131,255,104,1,110,1,133,255,104,1,110,1,136, |
255,70,1,110,1,140,255,70,1,110,1,143,255,70,1,110,1,147,0,121,1,110,1,149, |
255,70,1,111,1,91,255,197,1,111,1,110,255,190,1,111,1,116,255,190,1,113,1, |
117,255,178,1,113,1,122,255,178,1,113,1,125,255,178,1,113,1,129,255,217,1, |
113,1,136,255,178,1,113,1,140,255,178,1,113,1,143,255,178,1,113,1,146,255, |
178,1,113,1,149,255,178,1,113,1,151,255,178,1,114,1,110,255,209,1,114,1,116, |
255,209,1,116,0,3,255,219,1,116,1,90,0,170,1,116,1,91,255,104,1,116,1,94, |
255,104,1,116,1,98,255,141,1,116,1,101,255,104,1,116,1,105,255,141,1,116, |
1,111,255,141,1,116,1,114,255,158,1,116,1,119,255,104,1,116,1,120,255,180, |
1,116,1,122,255,70,1,116,1,128,255,104,1,116,1,130,255,180,1,116,1,131,255, |
104,1,116,1,133,255,104,1,116,1,136,255,70,1,116,1,140,255,70,1,116,1,143, |
255,70,1,116,1,147,0,98,1,116,1,149,255,70,1,125,1,132,255,217,1,125,1,137, |
255,227,1,125,1,141,255,227,1,125,1,144,255,201,1,127,1,117,255,119,1,127, |
1,119,255,219,1,127,1,122,255,119,1,127,1,124,255,170,1,127,1,125,255,180, |
1,127,1,128,255,219,1,127,1,129,255,158,1,127,1,130,255,219,1,127,1,131,255, |
219,1,127,1,134,255,170,1,127,1,136,255,119,1,127,1,137,255,170,1,127,1,140, |
255,119,1,127,1,141,255,170,1,127,1,143,255,119,1,127,1,146,255,119,1,127, |
1,149,255,119,1,127,1,151,255,119,1,129,1,132,255,217,1,131,1,117,255,231, |
1,131,1,122,255,231,1,131,1,125,255,231,1,131,1,127,255,231,1,131,1,129,255, |
231,1,131,1,135,255,231,1,131,1,136,255,231,1,131,1,139,255,231,1,131,1,140, |
255,231,1,131,1,143,255,231,1,131,1,146,255,231,1,131,1,149,255,231,1,131, |
1,151,255,231,1,132,1,117,255,225,1,132,1,122,255,225,1,132,1,125,255,225, |
1,132,1,135,255,225,1,132,1,136,255,225,1,132,1,139,255,209,1,132,1,140,255, |
225,1,132,1,142,255,207,1,132,1,143,255,219,1,132,1,146,255,225,1,132,1,149, |
255,225,1,132,1,150,255,207,1,132,1,151,255,225,1,135,1,117,255,201,1,135, |
1,122,255,201,1,135,1,125,255,201,1,135,1,127,255,201,1,135,1,135,255,201, |
1,135,1,136,255,201,1,135,1,139,255,201,1,135,1,140,255,201,1,135,1,143,255, |
201,1,135,1,149,255,201,1,136,1,132,255,217,1,136,1,137,255,227,1,136,1,141, |
255,227,1,136,1,144,255,201,1,137,1,117,255,227,1,137,1,122,255,227,1,137, |
1,127,255,227,1,137,1,136,255,227,1,137,1,139,255,227,1,137,1,140,255,227, |
1,137,1,143,255,227,1,137,1,146,255,227,1,137,1,151,255,227,1,138,1,132,255, |
217,1,138,1,137,255,227,1,138,1,141,255,227,1,141,1,117,255,227,1,141,1,122, |
255,227,1,141,1,125,255,227,1,141,1,127,255,227,1,141,1,136,255,227,1,141, |
1,139,255,227,1,141,1,140,255,227,1,141,1,143,255,227,1,141,1,146,255,227, |
1,141,1,151,255,227,1,143,1,132,255,217,1,143,1,137,255,227,1,143,1,141,255, |
227,1,143,1,144,255,201,1,144,1,117,255,201,1,144,1,122,255,201,1,144,1,125, |
255,201,1,144,1,127,255,201,1,144,1,136,255,201,1,144,1,139,255,201,1,144, |
1,140,255,201,1,144,1,143,255,201,1,144,1,146,255,201,1,144,1,149,255,201, |
1,144,1,151,255,201,1,146,1,132,255,217,1,146,1,137,255,227,1,146,1,141,255, |
227,1,146,1,144,255,201,1,149,1,132,255,217,1,149,1,137,255,227,1,149,1,141, |
255,227,1,149,1,144,255,201,1,151,1,132,255,217,1,151,1,137,255,227,1,151, |
1,141,255,227,1,151,1,144,255,201,1,154,0,15,255,6,1,154,0,17,255,6,1,154, |
0,108,255,119,1,154,0,123,255,119,1,154,1,255,255,211,1,160,2,3,255,96,1, |
161,2,3,255,119,1,166,1,170,0,68,1,166,1,173,255,233,1,166,1,177,0,45,1,166, |
1,180,255,211,1,166,1,181,255,233,1,166,1,183,255,211,1,166,1,184,255,96, |
1,166,1,185,255,166,1,166,1,186,255,188,1,166,1,189,255,96,1,166,1,195,255, |
211,1,166,1,198,0,23,1,166,1,216,255,211,1,166,1,217,255,233,1,166,1,218, |
0,23,1,166,1,227,0,45,1,166,2,3,255,141,1,167,1,166,255,211,1,167,1,173,255, |
233,1,167,1,180,255,233,1,167,1,183,255,233,1,167,1,184,255,164,1,167,1,185, |
255,209,1,167,1,186,255,233,1,167,1,187,255,211,1,167,1,189,255,164,1,167, |
1,192,255,188,1,167,1,195,255,233,1,167,1,197,255,233,1,167,1,209,255,233, |
1,167,1,217,255,211,1,168,1,166,255,188,1,168,1,170,255,211,1,168,1,172,255, |
211,1,168,1,173,255,188,1,168,1,177,255,233,1,168,1,180,255,188,1,168,1,183, |
255,188,1,168,1,184,255,119,1,168,1,185,255,188,1,168,1,186,255,188,1,168, |
1,187,255,166,1,168,1,189,255,164,1,168,1,192,255,141,1,168,1,197,255,188, |
1,168,1,202,255,233,1,168,1,210,255,233,1,168,1,216,255,188,1,168,1,217,255, |
233,1,168,1,219,255,233,1,168,1,221,255,188,1,168,1,229,255,233,1,169,0,15, |
255,6,1,169,0,17,255,6,1,169,0,108,255,119,1,169,0,123,255,119,1,169,1,166, |
255,119,1,169,1,170,255,119,1,169,1,173,255,211,1,169,1,177,255,141,1,169, |
1,178,255,209,1,169,1,180,255,141,1,169,1,183,255,164,1,169,1,197,255,188, |
1,169,1,198,255,141,1,169,1,200,255,141,1,169,1,202,255,119,1,169,1,203,255, |
119,1,169,1,206,255,141,1,169,1,209,255,141,1,169,1,210,255,141,1,169,1,211, |
255,141,1,169,1,212,255,119,1,169,1,214,255,141,1,169,1,217,255,119,1,169, |
1,225,255,141,1,169,1,226,255,141,1,169,1,228,255,141,1,169,1,229,255,119, |
1,169,1,255,255,211,1,170,1,185,0,23,1,170,1,186,255,211,1,170,1,189,255, |
186,1,170,1,205,0,68,1,170,1,212,0,23,1,170,1,217,0,45,1,171,1,173,255,211, |
1,171,1,215,255,233,1,172,1,173,255,233,1,172,1,180,255,211,1,172,1,183,255, |
233,1,172,1,184,0,23,1,172,1,185,0,45,1,172,1,192,0,45,1,172,1,198,0,23,1, |
172,1,203,255,231,1,172,1,212,255,233,1,172,1,217,255,233,1,173,1,177,255, |
233,1,173,1,180,255,233,1,173,1,183,255,233,1,173,1,184,255,211,1,173,1,185, |
255,233,1,173,1,186,255,233,1,173,1,189,255,211,1,173,1,197,255,233,1,176, |
1,173,255,233,1,176,1,180,255,233,1,176,1,183,255,233,1,176,1,185,0,23,1, |
176,1,186,255,186,1,177,1,186,255,233,1,177,1,199,0,23,1,177,1,217,0,23,1, |
178,1,186,255,233,1,178,1,189,255,233,1,178,1,198,0,23,1,178,1,203,0,23,1, |
178,1,212,0,23,1,178,1,215,0,23,1,178,1,217,0,23,1,178,1,221,255,233,1,178, |
1,227,0,23,1,180,1,166,255,211,1,180,1,170,255,211,1,180,1,172,255,211,1, |
180,1,177,255,233,1,180,1,185,255,211,1,180,1,187,255,164,1,180,1,189,255, |
211,1,180,1,197,255,211,1,180,1,202,255,211,1,180,1,209,255,233,1,180,1,219, |
255,233,1,182,0,15,254,125,1,182,0,17,254,125,1,182,0,29,255,211,1,182,0, |
30,255,211,1,182,0,123,255,141,1,182,1,166,255,119,1,182,1,170,255,119,1, |
182,1,172,255,233,1,182,1,173,255,211,1,182,1,177,255,141,1,182,1,178,255, |
233,1,182,1,180,255,211,1,182,1,183,255,233,1,182,1,184,255,164,1,182,1,185, |
255,211,1,182,1,186,255,233,1,182,1,187,255,164,1,182,1,197,255,211,1,182, |
1,198,255,188,1,182,1,202,255,96,1,182,1,203,255,166,1,182,1,212,255,166, |
1,182,1,227,255,211,1,182,1,229,255,188,1,183,1,166,255,211,1,183,1,170,255, |
211,1,183,1,173,255,233,1,183,1,177,255,188,1,183,1,178,255,233,1,183,1,180, |
255,211,1,183,1,184,255,188,1,183,1,185,255,188,1,183,1,187,255,141,1,183, |
1,189,255,188,1,183,1,192,255,186,1,183,1,195,255,233,1,183,1,198,0,23,1, |
183,1,204,0,45,1,183,1,221,255,233,1,184,0,15,255,29,1,184,0,17,255,29,1, |
184,0,108,255,166,1,184,0,123,255,166,1,184,1,166,255,188,1,184,1,170,255, |
188,1,184,1,172,0,23,1,184,1,173,255,233,1,184,1,177,255,211,1,184,1,180, |
255,164,1,184,1,186,255,188,1,184,1,197,255,211,1,184,1,198,255,164,1,184, |
1,200,255,166,1,184,1,203,255,141,1,184,1,206,255,166,1,184,1,208,255,166, |
1,184,1,209,255,164,1,184,1,210,255,166,1,184,1,212,255,96,1,184,1,213,255, |
166,1,184,1,214,255,141,1,184,1,215,255,141,1,184,1,217,255,141,1,184,1,219, |
255,166,1,184,1,223,255,166,1,184,1,225,255,166,1,184,1,226,255,166,1,184, |
1,228,255,166,1,184,1,229,255,141,1,184,1,255,255,211,1,185,0,15,254,240, |
1,185,0,17,254,240,1,185,0,29,255,211,1,185,0,30,255,211,1,185,0,108,255, |
166,1,185,0,123,255,164,1,185,1,166,255,119,1,185,1,170,255,164,1,185,1,173, |
255,211,1,185,1,177,255,188,1,185,1,180,255,188,1,185,1,186,255,188,1,185, |
1,195,255,211,1,185,1,197,255,211,1,185,1,199,255,211,1,185,1,200,255,141, |
1,185,1,201,255,164,1,185,1,202,255,96,1,185,1,203,255,119,1,185,1,204,255, |
188,1,185,1,205,255,141,1,185,1,206,255,164,1,185,1,207,255,188,1,185,1,208, |
255,164,1,185,1,209,255,119,1,185,1,210,255,164,1,185,1,211,255,164,1,185, |
1,212,255,119,1,185,1,213,255,164,1,185,1,214,255,164,1,185,1,215,255,119, |
1,185,1,219,255,164,1,185,1,220,255,164,1,185,1,222,255,164,1,185,1,223,255, |
164,1,185,1,228,255,164,1,185,1,229,255,119,1,185,1,255,255,233,1,186,1,166, |
255,211,1,186,1,170,255,188,1,186,1,177,255,188,1,186,1,184,255,141,1,186, |
1,185,255,164,1,186,1,189,255,211,1,186,1,197,255,186,1,186,1,209,255,188, |
1,187,1,173,255,211,1,187,1,180,255,188,1,187,1,183,255,188,1,187,1,186,255, |
188,1,187,1,195,255,186,1,187,1,212,255,233,1,187,1,217,255,211,1,188,1,180, |
255,211,1,188,1,198,0,45,1,191,1,198,0,23,1,191,1,217,0,45,1,192,1,197,255, |
188,1,192,2,3,255,119,1,194,1,166,255,211,1,194,1,170,255,211,1,194,1,172, |
255,188,1,194,1,173,255,233,1,194,1,177,255,186,1,194,1,178,255,211,1,194, |
1,180,255,211,1,194,1,183,255,211,1,194,1,184,255,51,1,194,1,187,255,164, |
1,194,1,189,255,96,1,194,1,195,255,233,1,194,1,197,255,164,1,194,2,3,255, |
96,1,195,1,170,255,188,1,195,1,172,255,231,1,195,1,173,255,233,1,195,1,177, |
255,188,1,195,1,187,255,186,1,195,1,197,255,211,1,195,1,202,255,188,1,195, |
1,204,0,23,1,195,1,209,255,188,1,195,1,210,255,233,1,195,1,229,255,233,1, |
196,1,166,255,188,1,196,1,170,255,166,1,196,1,172,255,211,1,196,1,177,255, |
164,1,196,1,180,255,233,1,196,1,183,255,233,1,196,1,184,255,141,1,196,1,187, |
255,164,1,196,1,189,255,188,1,196,1,202,255,164,1,196,1,209,255,164,1,196, |
1,210,255,233,1,198,1,205,255,233,1,198,1,216,255,211,1,198,1,217,255,233, |
1,198,1,221,255,211,1,199,1,198,255,209,1,199,1,202,255,164,1,199,1,203,255, |
233,1,199,1,204,255,233,1,199,1,205,255,211,1,199,1,209,255,164,1,199,1,210, |
255,211,1,199,1,215,255,233,1,199,1,217,255,211,1,199,1,218,255,233,1,199, |
1,219,255,188,1,199,1,221,255,188,1,199,1,224,255,188,1,199,1,227,255,233, |
1,199,1,229,255,211,1,200,1,198,255,233,1,200,1,199,255,233,1,200,1,202,255, |
233,1,200,1,203,255,233,1,200,1,204,255,233,1,200,1,205,255,233,1,200,1,209, |
255,209,1,200,1,210,255,233,1,200,1,212,255,233,1,200,1,215,255,233,1,200, |
1,216,255,211,1,200,1,217,255,211,1,200,1,218,255,233,1,200,1,221,255,164, |
1,200,1,224,255,188,1,200,1,229,255,233,1,201,0,15,255,6,1,201,0,17,255,6, |
1,201,1,198,255,211,1,201,1,202,255,164,1,201,1,203,255,211,1,201,1,205,255, |
233,1,201,1,209,255,211,1,201,1,212,255,211,1,201,1,215,255,211,1,201,1,229, |
255,233,1,202,1,224,255,211,1,202,1,227,0,23,1,203,1,199,255,233,1,203,1, |
202,255,211,1,203,1,204,255,233,1,203,1,205,255,211,1,203,1,209,255,188,1, |
203,1,216,255,188,1,203,1,217,255,233,1,203,1,219,255,211,1,203,1,221,255, |
188,1,204,1,199,0,23,1,204,1,217,0,23,1,204,1,221,255,233,1,204,1,224,0,45, |
1,205,1,199,255,233,1,205,1,202,255,211,1,205,1,203,255,233,1,205,1,205,255, |
233,1,205,1,209,255,233,1,205,1,212,255,233,1,205,1,215,255,233,1,205,1,217, |
255,233,1,205,1,218,255,233,1,205,1,221,255,188,1,205,1,224,255,211,1,208, |
1,198,0,45,1,208,1,199,0,45,1,208,1,203,0,23,1,208,1,205,0,23,1,208,1,209, |
0,23,1,208,1,212,0,23,1,208,1,215,0,23,1,208,1,216,0,23,1,208,1,217,0,23, |
1,208,1,227,0,23,1,209,1,212,0,23,1,209,1,221,255,211,1,210,1,199,255,233, |
1,210,1,205,255,233,1,210,1,217,0,23,1,212,1,202,255,211,1,212,1,204,255, |
233,1,212,1,205,255,233,1,212,1,209,255,211,1,212,1,216,255,211,1,212,1,217, |
255,233,1,212,1,219,255,233,1,212,1,221,255,211,1,214,1,202,255,209,1,214, |
1,205,255,233,1,214,1,209,255,186,1,214,1,216,255,211,1,214,1,217,255,233, |
1,214,1,219,255,233,1,214,1,221,255,211,1,214,1,229,255,233,1,215,1,204,0, |
23,1,215,1,212,0,23,1,215,1,221,255,233,1,215,1,227,0,23,1,216,0,15,255,29, |
1,216,0,17,255,29,1,216,1,198,255,233,1,216,1,202,255,188,1,216,1,203,255, |
233,1,216,1,204,0,68,1,216,1,209,255,211,1,216,1,212,255,233,1,216,1,215, |
255,233,1,216,1,217,0,23,1,217,0,15,255,51,1,217,0,17,255,51,1,217,0,123, |
0,23,1,217,1,198,255,233,1,217,1,199,0,23,1,217,1,202,255,188,1,217,1,203, |
255,233,1,217,1,204,0,23,1,217,1,209,255,211,1,217,1,210,255,233,1,217,1, |
212,255,231,1,217,1,214,255,233,1,217,1,215,255,233,1,217,1,218,255,233,1, |
217,1,227,255,233,1,217,1,229,255,233,1,218,1,199,255,233,1,218,1,202,255, |
211,1,218,1,209,255,211,1,218,1,216,255,211,1,218,1,217,255,233,1,218,1,221, |
255,211,1,218,1,229,255,233,1,219,1,198,255,233,1,219,1,199,255,233,1,219, |
1,203,255,233,1,219,1,205,255,233,1,219,1,212,255,233,1,219,1,215,255,233, |
1,219,1,216,255,233,1,219,1,218,255,233,1,219,1,221,255,211,1,220,1,203,255, |
233,1,220,1,205,255,233,1,220,1,212,255,233,1,220,1,215,255,233,1,223,1,203, |
255,233,1,223,1,212,255,233,1,223,1,217,0,23,1,226,1,216,255,96,1,226,1,221, |
255,119,1,227,1,202,255,211,1,227,1,203,0,23,1,227,1,205,255,233,1,227,1, |
209,255,211,1,227,1,212,0,23,1,227,1,216,255,211,1,227,1,219,255,233,1,227, |
1,229,255,233,1,228,1,202,255,211,1,228,1,204,255,233,1,228,1,209,255,211, |
1,228,1,210,255,233,1,228,1,216,255,211,1,228,1,219,255,233,1,228,1,221,255, |
211,1,242,0,15,255,51,1,242,0,17,255,51,1,244,0,15,255,6,1,244,0,17,255,6, |
1,244,0,29,255,211,1,244,0,30,255,211,1,244,0,108,255,96,1,244,0,123,255, |
96,1,244,1,255,255,211,2,2,2,2,255,219,2,3,0,3,255,180,2,3,0,86,255,219,2, |
3,2,3,255,219,2,8,1,153,255,96,2,8,1,162,255,96,2,8,1,184,255,96,2,8,1,189, |
255,188,2,8,1,192,255,188,0,0,0,0,0,28,1,86,0,1,0,0,0,0,0,0,0,64,0,130,0, |
1,0,0,0,0,0,1,0,15,0,227,0,1,0,0,0,0,0,2,0,7,1,3,0,1,0,0,0,0,0,3,0,26,1,65, |
0,1,0,0,0,0,0,4,0,15,1,124,0,1,0,0,0,0,0,5,0,12,1,166,0,1,0,0,0,0,0,6,0,14, |
1,209,0,1,0,0,0,0,0,7,0,122,2,214,0,1,0,0,0,0,0,8,0,20,3,123,0,1,0,0,0,0, |
0,9,0,14,3,174,0,1,0,0,0,0,0,11,0,28,3,247,0,1,0,0,0,0,0,12,0,46,4,114,0, |
1,0,0,0,0,0,13,0,127,5,161,0,1,0,0,0,0,0,14,0,43,6,121,0,3,0,1,4,9,0,0,0, |
128,0,0,0,3,0,1,4,9,0,1,0,30,0,195,0,3,0,1,4,9,0,2,0,14,0,243,0,3,0,1,4,9, |
0,3,0,52,1,11,0,3,0,1,4,9,0,4,0,30,1,92,0,3,0,1,4,9,0,5,0,24,1,140,0,3,0, |
1,4,9,0,6,0,28,1,179,0,3,0,1,4,9,0,7,0,244,1,224,0,3,0,1,4,9,0,8,0,40,3,81, |
0,3,0,1,4,9,0,9,0,28,3,144,0,3,0,1,4,9,0,11,0,56,3,189,0,3,0,1,4,9,0,12,0, |
92,4,20,0,3,0,1,4,9,0,13,0,254,4,161,0,3,0,1,4,9,0,14,0,86,6,33,0,68,0,105, |
0,103,0,105,0,116,0,105,0,122,0,101,0,100,0,32,0,100,0,97,0,116,0,97,0,32, |
0,169,0,32,0,50,0,48,0,48,0,55,0,32,0,65,0,115,0,99,0,101,0,110,0,100,0,101, |
0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105,0,111,0,110, |
0,46,0,32,0,65,0,108,0,108,0,32,0,114,0,105,0,103,0,104,0,116,0,115,0,32, |
0,114,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,0,68,105,103,105,116, |
105,122,101,100,32,100,97,116,97,32,169,32,50,48,48,55,32,65,115,99,101,110, |
100,101,114,32,67,111,114,112,111,114,97,116,105,111,110,46,32,65,108,108, |
32,114,105,103,104,116,115,32,114,101,115,101,114,118,101,100,46,0,0,76,0, |
105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0, |
115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115,0,0,82,0,101, |
0,103,0,117,0,108,0,97,0,114,0,0,82,101,103,117,108,97,114,0,0,65,0,115,0, |
99,0,101,0,110,0,100,0,101,0,114,0,32,0,45,0,32,0,76,0,105,0,98,0,101,0,114, |
0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0,115,0,0,65,115,99,101, |
110,100,101,114,32,45,32,76,105,98,101,114,97,116,105,111,110,32,83,97,110, |
115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83, |
0,97,0,110,0,115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115, |
0,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49,0,46,0,48,0,50,0,0,86, |
101,114,115,105,111,110,32,49,46,48,50,0,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,83,0,97,0,110,0,115,0,0,76,105,98,101,114,97,116, |
105,111,110,83,97,110,115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105, |
0,111,0,110,0,32,0,105,0,115,0,32,0,97,0,32,0,116,0,114,0,97,0,100,0,101, |
0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,32,0,82,0,101,0,100,0,32,0,72,0, |
97,0,116,0,44,0,32,0,73,0,110,0,99,0,46,0,32,0,114,0,101,0,103,0,105,0,115, |
0,116,0,101,0,114,0,101,0,100,0,32,0,105,0,110,0,32,0,85,0,46,0,83,0,46,0, |
32,0,80,0,97,0,116,0,101,0,110,0,116,0,32,0,97,0,110,0,100,0,32,0,84,0,114, |
0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,79,0,102,0,102,0,105,0,99, |
0,101,0,32,0,97,0,110,0,100,0,32,0,99,0,101,0,114,0,116,0,97,0,105,0,110, |
0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,106,0,117,0,114,0,105,0,115,0,100, |
0,105,0,99,0,116,0,105,0,111,0,110,0,115,0,46,0,0,76,105,98,101,114,97,116, |
105,111,110,32,105,115,32,97,32,116,114,97,100,101,109,97,114,107,32,111, |
102,32,82,101,100,32,72,97,116,44,32,73,110,99,46,32,114,101,103,105,115, |
116,101,114,101,100,32,105,110,32,85,46,83,46,32,80,97,116,101,110,116,32, |
97,110,100,32,84,114,97,100,101,109,97,114,107,32,79,102,102,105,99,101,32, |
97,110,100,32,99,101,114,116,97,105,110,32,111,116,104,101,114,32,106,117, |
114,105,115,100,105,99,116,105,111,110,115,46,0,0,65,0,115,0,99,0,101,0,110, |
0,100,0,101,0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105, |
0,111,0,110,0,0,65,115,99,101,110,100,101,114,32,67,111,114,112,111,114,97, |
116,105,111,110,0,0,83,0,116,0,101,0,118,0,101,0,32,0,77,0,97,0,116,0,116, |
0,101,0,115,0,111,0,110,0,0,83,116,101,118,101,32,77,97,116,116,101,115,111, |
110,0,0,104,0,116,0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97, |
0,115,0,99,0,101,0,110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99, |
0,111,0,109,0,47,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,0,0,104,0,116,0,116,0,112, |
0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0,110,0,100,0, |
101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0,116,0,121,0, |
112,0,101,0,100,0,101,0,115,0,105,0,103,0,110,0,101,0,114,0,115,0,46,0,104, |
0,116,0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,116,121,112,101,100,101,115, |
105,103,110,101,114,115,46,104,116,109,108,0,0,85,0,115,0,101,0,32,0,111, |
0,102,0,32,0,116,0,104,0,105,0,115,0,32,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102, |
0,116,0,119,0,97,0,114,0,101,0,32,0,105,0,115,0,32,0,115,0,117,0,98,0,106, |
0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,108,0,105, |
0,99,0,101,0,110,0,115,0,101,0,32,0,97,0,103,0,114,0,101,0,101,0,109,0,101, |
0,110,0,116,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,119,0,104,0,105,0,99, |
0,104,0,32,0,121,0,111,0,117,0,32,0,97,0,99,0,99,0,101,0,112,0,116,0,101, |
0,100,0,32,0,116,0,104,0,101,0,32,0,76,0,105,0,98,0,101,0,114,0,97,0,116, |
0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102,0,116, |
0,119,0,97,0,114,0,101,0,46,0,0,85,115,101,32,111,102,32,116,104,105,115, |
32,76,105,98,101,114,97,116,105,111,110,32,102,111,110,116,32,115,111,102, |
116,119,97,114,101,32,105,115,32,115,117,98,106,101,99,116,32,116,111,32, |
116,104,101,32,108,105,99,101,110,115,101,32,97,103,114,101,101,109,101,110, |
116,32,117,110,100,101,114,32,119,104,105,99,104,32,121,111,117,32,97,99, |
99,101,112,116,101,100,32,116,104,101,32,76,105,98,101,114,97,116,105,111, |
110,32,102,111,110,116,32,115,111,102,116,119,97,114,101,46,0,0,104,0,116, |
0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0, |
110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0, |
108,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,46,0,104,0,116, |
0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101,110, |
100,101,114,99,111,114,112,46,99,111,109,47,108,105,98,101,114,97,116,105, |
111,110,46,104,116,109,108,0,0,0,2,0,0,0,0,0,0,255,39,0,150,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,2,156,0,0,0,1,0,2,1,2,0,4,0,5,0,6,0,7,0,8,0,9,0, |
10,0,11,0,12,0,13,0,14,0,15,1,3,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0, |
25,0,26,0,27,0,28,0,29,1,4,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0, |
40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54, |
0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69, |
0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84, |
0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,163,0, |
132,0,133,0,189,0,150,0,232,0,134,0,142,0,139,0,157,0,169,0,164,0,138,0,218, |
0,131,0,147,1,5,1,6,0,141,1,7,0,136,1,8,0,222,1,9,0,158,0,170,0,245,0,244, |
0,246,0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144,0,100,0,203,0,101,0,200, |
0,202,0,207,0,204,0,205,0,206,0,233,0,102,0,211,0,208,0,209,0,175,0,103,0, |
240,0,145,0,214,0,212,0,213,0,104,0,235,0,237,0,137,0,106,0,105,0,107,0,109, |
0,108,0,110,0,160,0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118,0,119,0, |
234,0,120,0,122,0,121,0,123,0,125,0,124,0,184,0,161,0,127,0,126,0,128,0,129, |
0,236,0,238,0,186,1,10,1,11,1,12,1,13,1,14,1,15,0,253,0,254,1,16,1,17,1,18, |
1,19,0,255,1,0,1,20,1,21,1,22,1,1,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30, |
1,31,1,32,1,33,1,34,0,248,0,249,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1, |
43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,0,250,0,215,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,0,226,0,227,1,66,1,67,1, |
68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,0,176,0,177, |
1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,0,251,0,252,0,228,0,229, |
1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104, |
1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,0,187,1,113,1,114,1,115,1, |
116,0,230,0,231,1,117,0,166,1,118,1,119,1,120,1,121,1,122,1,123,0,216,0,225, |
1,124,0,219,0,220,0,221,0,224,0,217,0,223,1,125,1,126,1,127,1,128,1,129,1, |
130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,0,168,1,139,1,140,1,141, |
1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1, |
154,1,155,1,156,1,157,0,159,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165, |
1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,0,151,1,176,1, |
177,1,178,0,155,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188, |
1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1, |
201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213, |
1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1, |
226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238, |
1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1, |
251,1,252,1,253,1,254,1,255,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10, |
2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, |
2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,0,178,0, |
179,2,39,2,40,0,182,0,183,0,196,2,41,0,180,0,181,0,197,0,130,0,194,0,135, |
0,171,0,198,2,42,2,43,0,190,0,191,2,44,2,45,2,46,2,47,0,247,2,48,2,49,2,50, |
2,51,2,52,2,53,0,140,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2, |
64,2,65,2,66,0,152,2,67,0,154,0,153,0,239,0,165,0,146,2,68,2,69,0,156,0,167, |
0,143,2,70,0,148,0,149,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80, |
2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95, |
2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108, |
2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2, |
121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,0,185,2,132, |
2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2, |
145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157, |
2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,7,117,110,105, |
48,48,65,48,7,117,110,105,48,48,65,68,7,117,110,105,48,51,55,69,7,117,110, |
105,48,48,66,50,7,117,110,105,48,48,66,51,7,117,110,105,48,48,66,53,7,117, |
110,105,50,50,49,57,7,117,110,105,48,48,66,57,7,65,109,97,99,114,111,110, |
7,97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97,98,114,101,118,101, |
7,65,111,103,111,110,101,107,7,97,111,103,111,110,101,107,11,67,99,105,114, |
99,117,109,102,108,101,120,11,99,99,105,114,99,117,109,102,108,101,120,10, |
67,100,111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99,101,110,116, |
6,68,99,97,114,111,110,6,100,99,97,114,111,110,6,68,99,114,111,97,116,7,69, |
109,97,99,114,111,110,7,101,109,97,99,114,111,110,6,69,98,114,101,118,101, |
6,101,98,114,101,118,101,10,69,100,111,116,97,99,99,101,110,116,10,101,100, |
111,116,97,99,99,101,110,116,7,69,111,103,111,110,101,107,7,101,111,103,111, |
110,101,107,6,69,99,97,114,111,110,6,101,99,97,114,111,110,11,71,99,105,114, |
99,117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108,101,120,10, |
71,100,111,116,97,99,99,101,110,116,10,103,100,111,116,97,99,99,101,110,116, |
12,71,99,111,109,109,97,97,99,99,101,110,116,12,103,99,111,109,109,97,97, |
99,99,101,110,116,11,72,99,105,114,99,117,109,102,108,101,120,11,104,99,105, |
114,99,117,109,102,108,101,120,4,72,98,97,114,4,104,98,97,114,6,73,116,105, |
108,100,101,6,105,116,105,108,100,101,7,73,109,97,99,114,111,110,7,105,109, |
97,99,114,111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101,7,73,111, |
103,111,110,101,107,7,105,111,103,111,110,101,107,2,73,74,2,105,106,11,74, |
99,105,114,99,117,109,102,108,101,120,11,106,99,105,114,99,117,109,102,108, |
101,120,12,75,99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109,109, |
97,97,99,99,101,110,116,12,107,103,114,101,101,110,108,97,110,100,105,99, |
6,76,97,99,117,116,101,6,108,97,99,117,116,101,12,76,99,111,109,109,97,97, |
99,99,101,110,116,12,108,99,111,109,109,97,97,99,99,101,110,116,6,76,99,97, |
114,111,110,6,108,99,97,114,111,110,4,76,100,111,116,4,108,100,111,116,6, |
78,97,99,117,116,101,6,110,97,99,117,116,101,12,78,99,111,109,109,97,97,99, |
99,101,110,116,12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99,97,114, |
111,110,6,110,99,97,114,111,110,11,110,97,112,111,115,116,114,111,112,104, |
101,3,69,110,103,3,101,110,103,7,79,109,97,99,114,111,110,7,111,109,97,99, |
114,111,110,6,79,98,114,101,118,101,6,111,98,114,101,118,101,13,79,104,117, |
110,103,97,114,117,109,108,97,117,116,13,111,104,117,110,103,97,114,117,109, |
108,97,117,116,6,82,97,99,117,116,101,6,114,97,99,117,116,101,12,82,99,111, |
109,109,97,97,99,99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110, |
116,6,82,99,97,114,111,110,6,114,99,97,114,111,110,6,83,97,99,117,116,101, |
6,115,97,99,117,116,101,11,83,99,105,114,99,117,109,102,108,101,120,11,115, |
99,105,114,99,117,109,102,108,101,120,12,84,99,111,109,109,97,97,99,99,101, |
110,116,12,116,99,111,109,109,97,97,99,99,101,110,116,6,84,99,97,114,111, |
110,6,116,99,97,114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116,105,108, |
100,101,6,117,116,105,108,100,101,7,85,109,97,99,114,111,110,7,117,109,97, |
99,114,111,110,6,85,98,114,101,118,101,6,117,98,114,101,118,101,5,85,114, |
105,110,103,5,117,114,105,110,103,13,85,104,117,110,103,97,114,117,109,108, |
97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117,116,7,85,111, |
103,111,110,101,107,7,117,111,103,111,110,101,107,11,87,99,105,114,99,117, |
109,102,108,101,120,11,119,99,105,114,99,117,109,102,108,101,120,11,89,99, |
105,114,99,117,109,102,108,101,120,11,121,99,105,114,99,117,109,102,108,101, |
120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10,90,100,111,116,97,99, |
99,101,110,116,10,122,100,111,116,97,99,99,101,110,116,5,108,111,110,103, |
115,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105,110,103,97,99,117, |
116,101,7,65,69,97,99,117,116,101,7,97,101,97,99,117,116,101,11,79,115,108, |
97,115,104,97,99,117,116,101,11,111,115,108,97,115,104,97,99,117,116,101, |
7,117,110,105,48,50,67,57,5,116,111,110,111,115,13,100,105,101,114,101,115, |
105,115,116,111,110,111,115,10,65,108,112,104,97,116,111,110,111,115,9,97, |
110,111,116,101,108,101,105,97,12,69,112,115,105,108,111,110,116,111,110, |
111,115,8,69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110,111,115, |
12,79,109,105,99,114,111,110,116,111,110,111,115,12,85,112,115,105,108,111, |
110,116,111,110,111,115,10,79,109,101,103,97,116,111,110,111,115,17,105,111, |
116,97,100,105,101,114,101,115,105,115,116,111,110,111,115,5,65,108,112,104, |
97,4,66,101,116,97,5,71,97,109,109,97,7,69,112,115,105,108,111,110,4,90,101, |
116,97,3,69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75,97,112,112,97, |
6,76,97,109,98,100,97,2,77,117,2,78,117,2,88,105,7,79,109,105,99,114,111, |
110,2,80,105,3,82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112,115,105, |
108,111,110,3,80,104,105,3,67,104,105,3,80,115,105,12,73,111,116,97,100,105, |
101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,10,97,108,112,104,97,116,111,110,111,115,12,101,112,115,105,108, |
111,110,116,111,110,111,115,8,101,116,97,116,111,110,111,115,9,105,111,116, |
97,116,111,110,111,115,20,117,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116,97,5,103, |
97,109,109,97,5,100,101,108,116,97,7,101,112,115,105,108,111,110,4,122,101, |
116,97,3,101,116,97,5,116,104,101,116,97,4,105,111,116,97,5,107,97,112,112, |
97,6,108,97,109,98,100,97,2,110,117,2,120,105,7,111,109,105,99,114,111,110, |
3,114,104,111,6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97,117,7, |
117,112,115,105,108,111,110,3,112,104,105,3,99,104,105,3,112,115,105,5,111, |
109,101,103,97,12,105,111,116,97,100,105,101,114,101,115,105,115,15,117,112, |
115,105,108,111,110,100,105,101,114,101,115,105,115,12,111,109,105,99,114, |
111,110,116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110,111, |
115,10,111,109,101,103,97,116,111,110,111,115,9,97,102,105,105,49,48,48,50, |
51,9,97,102,105,105,49,48,48,53,49,9,97,102,105,105,49,48,48,53,50,9,97,102, |
105,105,49,48,48,53,51,9,97,102,105,105,49,48,48,53,52,9,97,102,105,105,49, |
48,48,53,53,9,97,102,105,105,49,48,48,53,54,9,97,102,105,105,49,48,48,53, |
55,9,97,102,105,105,49,48,48,53,56,9,97,102,105,105,49,48,48,53,57,9,97,102, |
105,105,49,48,48,54,48,9,97,102,105,105,49,48,48,54,49,9,97,102,105,105,49, |
48,48,54,50,9,97,102,105,105,49,48,49,52,53,9,97,102,105,105,49,48,48,49, |
55,9,97,102,105,105,49,48,48,49,56,9,97,102,105,105,49,48,48,49,57,9,97,102, |
105,105,49,48,48,50,48,9,97,102,105,105,49,48,48,50,49,9,97,102,105,105,49, |
48,48,50,50,9,97,102,105,105,49,48,48,50,52,9,97,102,105,105,49,48,48,50, |
53,9,97,102,105,105,49,48,48,50,54,9,97,102,105,105,49,48,48,50,55,9,97,102, |
105,105,49,48,48,50,56,9,97,102,105,105,49,48,48,50,57,9,97,102,105,105,49, |
48,48,51,48,9,97,102,105,105,49,48,48,51,49,9,97,102,105,105,49,48,48,51, |
50,9,97,102,105,105,49,48,48,51,51,9,97,102,105,105,49,48,48,51,52,9,97,102, |
105,105,49,48,48,51,53,9,97,102,105,105,49,48,48,51,54,9,97,102,105,105,49, |
48,48,51,55,9,97,102,105,105,49,48,48,51,56,9,97,102,105,105,49,48,48,51, |
57,9,97,102,105,105,49,48,48,52,48,9,97,102,105,105,49,48,48,52,49,9,97,102, |
105,105,49,48,48,52,50,9,97,102,105,105,49,48,48,52,51,9,97,102,105,105,49, |
48,48,52,52,9,97,102,105,105,49,48,48,52,53,9,97,102,105,105,49,48,48,52, |
54,9,97,102,105,105,49,48,48,52,55,9,97,102,105,105,49,48,48,52,56,9,97,102, |
105,105,49,48,48,52,57,9,97,102,105,105,49,48,48,54,53,9,97,102,105,105,49, |
48,48,54,54,9,97,102,105,105,49,48,48,54,55,9,97,102,105,105,49,48,48,54, |
56,9,97,102,105,105,49,48,48,54,57,9,97,102,105,105,49,48,48,55,48,9,97,102, |
105,105,49,48,48,55,50,9,97,102,105,105,49,48,48,55,51,9,97,102,105,105,49, |
48,48,55,52,9,97,102,105,105,49,48,48,55,53,9,97,102,105,105,49,48,48,55, |
54,9,97,102,105,105,49,48,48,55,55,9,97,102,105,105,49,48,48,55,56,9,97,102, |
105,105,49,48,48,55,57,9,97,102,105,105,49,48,48,56,48,9,97,102,105,105,49, |
48,48,56,49,9,97,102,105,105,49,48,48,56,50,9,97,102,105,105,49,48,48,56, |
51,9,97,102,105,105,49,48,48,56,52,9,97,102,105,105,49,48,48,56,53,9,97,102, |
105,105,49,48,48,56,54,9,97,102,105,105,49,48,48,56,55,9,97,102,105,105,49, |
48,48,56,56,9,97,102,105,105,49,48,48,56,57,9,97,102,105,105,49,48,48,57, |
48,9,97,102,105,105,49,48,48,57,49,9,97,102,105,105,49,48,48,57,50,9,97,102, |
105,105,49,48,48,57,51,9,97,102,105,105,49,48,48,57,52,9,97,102,105,105,49, |
48,48,57,53,9,97,102,105,105,49,48,48,57,54,9,97,102,105,105,49,48,48,57, |
55,9,97,102,105,105,49,48,48,55,49,9,97,102,105,105,49,48,48,57,57,9,97,102, |
105,105,49,48,49,48,48,9,97,102,105,105,49,48,49,48,49,9,97,102,105,105,49, |
48,49,48,50,9,97,102,105,105,49,48,49,48,51,9,97,102,105,105,49,48,49,48, |
52,9,97,102,105,105,49,48,49,48,53,9,97,102,105,105,49,48,49,48,54,9,97,102, |
105,105,49,48,49,48,55,9,97,102,105,105,49,48,49,48,56,9,97,102,105,105,49, |
48,49,48,57,9,97,102,105,105,49,48,49,49,48,9,97,102,105,105,49,48,49,57, |
51,9,97,102,105,105,49,48,48,53,48,9,97,102,105,105,49,48,48,57,56,6,87,103, |
114,97,118,101,6,119,103,114,97,118,101,6,87,97,99,117,116,101,6,119,97,99, |
117,116,101,9,87,100,105,101,114,101,115,105,115,9,119,100,105,101,114,101, |
115,105,115,6,89,103,114,97,118,101,6,121,103,114,97,118,101,9,97,102,105, |
105,48,48,50,48,56,13,117,110,100,101,114,115,99,111,114,101,100,98,108,13, |
113,117,111,116,101,114,101,118,101,114,115,101,100,6,109,105,110,117,116, |
101,6,115,101,99,111,110,100,9,101,120,99,108,97,109,100,98,108,7,117,110, |
105,50,48,51,69,7,117,110,105,50,50,49,53,7,117,110,105,50,48,55,70,4,108, |
105,114,97,6,112,101,115,101,116,97,4,69,117,114,111,9,97,102,105,105,54, |
49,50,52,56,9,97,102,105,105,54,49,50,56,57,9,97,102,105,105,54,49,51,53, |
50,7,117,110,105,50,49,50,54,9,101,115,116,105,109,97,116,101,100,9,111,110, |
101,101,105,103,104,116,104,12,116,104,114,101,101,101,105,103,104,116,104, |
115,11,102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101,110, |
101,105,103,104,116,104,115,9,97,114,114,111,119,108,101,102,116,7,97,114, |
114,111,119,117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114,114, |
111,119,100,111,119,110,9,97,114,114,111,119,98,111,116,104,9,97,114,114, |
111,119,117,112,100,110,12,97,114,114,111,119,117,112,100,110,98,115,101, |
7,117,110,105,50,50,48,54,10,111,114,116,104,111,103,111,110,97,108,12,105, |
110,116,101,114,115,101,99,116,105,111,110,11,101,113,117,105,118,97,108, |
101,110,99,101,5,104,111,117,115,101,13,114,101,118,108,111,103,105,99,97, |
108,110,111,116,10,105,110,116,101,103,114,97,108,116,112,10,105,110,116, |
101,103,114,97,108,98,116,8,83,70,49,48,48,48,48,48,8,83,70,49,49,48,48,48, |
48,8,83,70,48,49,48,48,48,48,8,83,70,48,51,48,48,48,48,8,83,70,48,50,48,48, |
48,48,8,83,70,48,52,48,48,48,48,8,83,70,48,56,48,48,48,48,8,83,70,48,57,48, |
48,48,48,8,83,70,48,54,48,48,48,48,8,83,70,48,55,48,48,48,48,8,83,70,48,53, |
48,48,48,48,8,83,70,52,51,48,48,48,48,8,83,70,50,52,48,48,48,48,8,83,70,53, |
49,48,48,48,48,8,83,70,53,50,48,48,48,48,8,83,70,51,57,48,48,48,48,8,83,70, |
50,50,48,48,48,48,8,83,70,50,49,48,48,48,48,8,83,70,50,53,48,48,48,48,8,83, |
70,53,48,48,48,48,48,8,83,70,52,57,48,48,48,48,8,83,70,51,56,48,48,48,48, |
8,83,70,50,56,48,48,48,48,8,83,70,50,55,48,48,48,48,8,83,70,50,54,48,48,48, |
48,8,83,70,51,54,48,48,48,48,8,83,70,51,55,48,48,48,48,8,83,70,52,50,48,48, |
48,48,8,83,70,49,57,48,48,48,48,8,83,70,50,48,48,48,48,48,8,83,70,50,51,48, |
48,48,48,8,83,70,52,55,48,48,48,48,8,83,70,52,56,48,48,48,48,8,83,70,52,49, |
48,48,48,48,8,83,70,52,53,48,48,48,48,8,83,70,52,54,48,48,48,48,8,83,70,52, |
48,48,48,48,48,8,83,70,53,52,48,48,48,48,8,83,70,53,51,48,48,48,48,8,83,70, |
52,52,48,48,48,48,7,117,112,98,108,111,99,107,7,100,110,98,108,111,99,107, |
5,98,108,111,99,107,7,108,102,98,108,111,99,107,7,114,116,98,108,111,99,107, |
7,108,116,115,104,97,100,101,5,115,104,97,100,101,7,100,107,115,104,97,100, |
101,9,102,105,108,108,101,100,98,111,120,6,72,50,50,48,55,51,6,72,49,56,53, |
52,51,6,72,49,56,53,53,49,10,102,105,108,108,101,100,114,101,99,116,7,116, |
114,105,97,103,117,112,7,116,114,105,97,103,114,116,7,116,114,105,97,103, |
100,110,7,116,114,105,97,103,108,102,6,99,105,114,99,108,101,6,72,49,56,53, |
51,51,9,105,110,118,98,117,108,108,101,116,9,105,110,118,99,105,114,99,108, |
101,10,111,112,101,110,98,117,108,108,101,116,9,115,109,105,108,101,102,97, |
99,101,12,105,110,118,115,109,105,108,101,102,97,99,101,3,115,117,110,6,102, |
101,109,97,108,101,4,109,97,108,101,5,115,112,97,100,101,4,99,108,117,98, |
5,104,101,97,114,116,7,100,105,97,109,111,110,100,11,109,117,115,105,99,97, |
108,110,111,116,101,14,109,117,115,105,99,97,108,110,111,116,101,100,98,108, |
7,117,110,105,70,66,48,49,7,117,110,105,70,66,48,50,7,117,110,105,70,48,48, |
53,6,109,105,100,100,111,116,7,117,110,105,70,48,48,52,7,117,110,105,50,48, |
55,52,7,117,110,105,50,48,55,53,7,117,110,105,50,48,55,55,7,117,110,105,50, |
48,55,56,8,103,108,121,112,104,53,55,49,8,103,108,121,112,104,53,55,50,8, |
103,108,121,112,104,53,55,51,8,103,108,121,112,104,53,55,52,8,103,108,121, |
112,104,53,55,53,8,103,108,121,112,104,53,55,54,8,103,108,121,112,104,53, |
55,55,8,103,108,121,112,104,53,55,56,8,103,108,121,112,104,53,55,57,8,103, |
108,121,112,104,53,56,48,8,103,108,121,112,104,53,56,49,0,0,0,0,0,0,3,0,8, |
0,2,0,17,0,1,255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,0,0,0,0,2,0,1,0,1,2,155, |
0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,10,0,76,0,78,0,4,68,70,76,84,0,26,99,121,114, |
108,0,36,103,114,101,107,0,46,108,97,116,110,0,56,0,4,0,0,0,0,255,255,0,0, |
0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0, |
0,0,0,0,1,0,0,0,10,0,84,0,98,0,4,68,70,76,84,0,26,99,121,114,108,0,38,103, |
114,101,107,0,50,108,97,116,110,0,62,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0, |
0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0, |
0,0,1,107,101,114,110,0,8,0,0,0,1,0,0,0,1,0,4,0,2,0,0,0,1,0,8,0,1,15,112, |
0,4,0,0,0,105,0,220,1,6,1,12,1,50,1,64,1,94,1,112,1,130,1,204,2,2,2,52,2, |
114,2,124,2,138,2,148,2,138,2,158,2,196,2,202,3,28,3,38,3,84,3,118,3,144, |
3,166,3,228,3,254,4,20,4,46,4,56,4,190,5,44,5,58,3,28,5,100,5,186,5,204,6, |
22,6,28,6,82,6,136,5,186,6,178,6,216,6,230,5,186,7,16,5,186,5,186,5,186,7, |
62,7,84,7,90,7,96,7,166,7,224,8,54,8,168,8,194,8,204,8,246,9,24,9,46,9,60, |
9,98,9,144,9,242,10,48,10,174,11,72,11,106,11,136,11,146,11,156,11,166,11, |
224,12,14,12,64,12,82,12,144,12,210,12,252,13,6,13,44,13,62,13,108,13,150, |
13,160,13,174,13,208,13,242,14,4,14,46,14,112,14,142,14,180,14,198,14,212, |
14,222,15,0,15,30,15,40,15,70,15,76,15,90,0,10,0,36,255,143,0,55,255,219, |
0,60,255,219,1,82,255,143,1,91,255,143,1,94,255,143,1,101,255,143,1,109,255, |
219,1,110,255,219,1,116,255,219,0,1,0,20,255,104,0,9,0,3,255,143,0,55,255, |
104,0,57,255,104,0,58,255,180,0,60,255,104,0,89,255,219,0,90,255,219,0,92, |
255,219,2,3,255,104,0,3,0,15,255,29,0,17,255,29,0,36,255,143,0,7,0,3,255, |
180,0,55,255,104,0,57,255,104,0,58,255,104,0,60,255,104,0,92,255,180,2,3, |
255,143,0,4,0,3,255,219,0,15,254,248,0,17,254,248,0,36,255,104,0,4,0,55,255, |
219,0,57,255,219,0,58,255,219,0,60,255,219,0,18,0,3,255,219,0,15,255,29,0, |
16,255,143,0,17,255,29,0,29,255,29,0,30,255,29,0,36,255,104,0,50,255,219, |
0,68,255,29,0,70,255,29,0,72,255,29,0,76,255,180,0,82,255,29,0,85,255,180, |
0,86,255,29,0,88,255,180,0,90,255,143,0,92,255,143,0,13,0,15,255,68,0,16, |
255,143,0,17,255,68,0,29,255,180,0,30,255,180,0,36,255,104,0,68,255,104,0, |
72,255,143,0,76,255,219,0,82,255,143,0,85,255,180,0,88,255,180,0,92,255,180, |
0,12,0,15,255,143,0,16,255,219,0,17,255,143,0,29,255,219,0,30,255,219,0,36, |
255,180,0,68,255,180,0,72,255,219,0,82,255,219,0,85,255,219,0,88,255,219, |
0,92,255,238,0,15,0,3,255,219,0,15,254,248,0,16,255,68,0,17,254,248,0,29, |
255,143,0,30,255,123,0,36,255,104,0,68,255,104,0,72,255,68,0,76,255,180,0, |
82,255,68,0,83,255,104,0,84,255,68,0,88,255,143,0,89,255,143,0,2,0,73,255, |
219,2,3,0,37,0,3,0,15,255,143,0,17,255,143,2,3,0,76,0,2,0,15,255,104,0,17, |
255,104,0,2,0,15,255,143,0,17,255,143,0,9,1,98,255,213,1,105,255,213,1,109, |
255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124,255,219,1,134,255, |
219,1,144,255,219,0,1,1,110,255,190,0,20,1,90,0,170,1,91,255,104,1,94,255, |
104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255,158, |
1,119,255,104,1,120,255,180,1,122,255,70,1,128,255,104,1,130,255,180,1,131, |
255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1, |
149,255,70,0,2,1,110,255,209,1,116,255,209,0,11,0,3,255,143,1,98,255,213, |
1,105,255,213,1,109,255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124, |
255,219,1,134,255,219,1,144,255,219,2,3,255,104,0,8,0,15,255,31,0,17,255, |
31,1,90,0,164,1,91,255,68,1,94,255,68,1,101,255,68,1,130,255,168,1,147,0, |
88,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,137,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,219,1,101,255,219,1,110,255,190,1, |
116,255,190,0,15,1,98,255,193,1,105,255,193,1,111,255,143,1,117,255,231,1, |
122,255,231,1,125,255,231,1,127,255,231,1,129,255,231,1,135,255,231,1,136, |
255,231,1,140,255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255, |
231,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,104,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,213,1,101,255,219,1,110,255,190,1, |
116,255,190,0,6,0,3,255,219,0,15,254,250,0,17,254,250,1,91,255,104,1,94,255, |
104,1,101,255,104,0,2,1,137,255,158,1,141,255,158,0,33,0,3,255,219,0,15,255, |
31,0,17,255,31,0,29,255,31,0,30,255,31,1,90,0,188,1,91,255,104,1,94,255,104, |
1,98,255,219,1,101,255,104,1,105,255,219,1,111,255,219,1,114,255,219,1,117, |
255,31,1,118,255,31,1,121,255,78,1,122,255,31,1,124,255,78,1,126,255,31,1, |
128,255,106,1,130,255,180,1,133,255,106,1,134,255,143,1,136,255,31,1,140, |
255,31,1,142,255,80,1,143,255,31,1,144,255,143,1,145,255,106,1,147,0,188, |
1,148,255,78,1,149,255,31,1,150,255,78,0,27,0,3,255,219,0,15,254,250,0,16, |
255,70,0,17,254,250,0,29,255,143,0,30,255,143,1,90,0,188,1,91,255,104,1,94, |
255,104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255, |
158,1,119,255,104,1,120,255,180,1,122,255,70,1,124,255,158,1,128,255,104, |
1,130,255,180,1,131,255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143, |
255,70,1,147,0,121,1,149,255,70,0,3,1,91,255,197,1,110,255,190,1,116,255, |
190,0,10,1,117,255,178,1,122,255,178,1,125,255,178,1,129,255,217,1,136,255, |
178,1,140,255,178,1,143,255,178,1,146,255,178,1,149,255,178,1,151,255,178, |
0,21,0,3,255,219,1,90,0,170,1,91,255,104,1,94,255,104,1,98,255,141,1,101, |
255,104,1,105,255,141,1,111,255,141,1,114,255,158,1,119,255,104,1,120,255, |
180,1,122,255,70,1,128,255,104,1,130,255,180,1,131,255,104,1,133,255,104, |
1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1,149,255,70,0,4,1,132, |
255,217,1,137,255,227,1,141,255,227,1,144,255,201,0,18,1,117,255,119,1,119, |
255,219,1,122,255,119,1,124,255,170,1,125,255,180,1,128,255,219,1,129,255, |
158,1,130,255,219,1,131,255,219,1,134,255,170,1,136,255,119,1,137,255,170, |
1,140,255,119,1,141,255,170,1,143,255,119,1,146,255,119,1,149,255,119,1,151, |
255,119,0,1,1,132,255,217,0,13,1,117,255,231,1,122,255,231,1,125,255,231, |
1,127,255,231,1,129,255,231,1,135,255,231,1,136,255,231,1,139,255,231,1,140, |
255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255,231,0,13,1,117, |
255,225,1,122,255,225,1,125,255,225,1,135,255,225,1,136,255,225,1,139,255, |
209,1,140,255,225,1,142,255,207,1,143,255,219,1,146,255,225,1,149,255,225, |
1,150,255,207,1,151,255,225,0,10,1,117,255,201,1,122,255,201,1,125,255,201, |
1,127,255,201,1,135,255,201,1,136,255,201,1,139,255,201,1,140,255,201,1,143, |
255,201,1,149,255,201,0,9,1,117,255,227,1,122,255,227,1,127,255,227,1,136, |
255,227,1,139,255,227,1,140,255,227,1,143,255,227,1,146,255,227,1,151,255, |
227,0,3,1,132,255,217,1,137,255,227,1,141,255,227,0,10,1,117,255,227,1,122, |
255,227,1,125,255,227,1,127,255,227,1,136,255,227,1,139,255,227,1,140,255, |
227,1,143,255,227,1,146,255,227,1,151,255,227,0,11,1,117,255,201,1,122,255, |
201,1,125,255,201,1,127,255,201,1,136,255,201,1,139,255,201,1,140,255,201, |
1,143,255,201,1,146,255,201,1,149,255,201,1,151,255,201,0,5,0,15,255,6,0, |
17,255,6,0,108,255,119,0,123,255,119,1,255,255,211,0,1,2,3,255,96,0,1,2,3, |
255,119,0,17,1,170,0,68,1,173,255,233,1,177,0,45,1,180,255,211,1,181,255, |
233,1,183,255,211,1,184,255,96,1,185,255,166,1,186,255,188,1,189,255,96,1, |
195,255,211,1,198,0,23,1,216,255,211,1,217,255,233,1,218,0,23,1,227,0,45, |
2,3,255,141,0,14,1,166,255,211,1,173,255,233,1,180,255,233,1,183,255,233, |
1,184,255,164,1,185,255,209,1,186,255,233,1,187,255,211,1,189,255,164,1,192, |
255,188,1,195,255,233,1,197,255,233,1,209,255,233,1,217,255,211,0,21,1,166, |
255,188,1,170,255,211,1,172,255,211,1,173,255,188,1,177,255,233,1,180,255, |
188,1,183,255,188,1,184,255,119,1,185,255,188,1,186,255,188,1,187,255,166, |
1,189,255,164,1,192,255,141,1,197,255,188,1,202,255,233,1,210,255,233,1,216, |
255,188,1,217,255,233,1,219,255,233,1,221,255,188,1,229,255,233,0,28,0,15, |
255,6,0,17,255,6,0,108,255,119,0,123,255,119,1,166,255,119,1,170,255,119, |
1,173,255,211,1,177,255,141,1,178,255,209,1,180,255,141,1,183,255,164,1,197, |
255,188,1,198,255,141,1,200,255,141,1,202,255,119,1,203,255,119,1,206,255, |
141,1,209,255,141,1,210,255,141,1,211,255,141,1,212,255,119,1,214,255,141, |
1,217,255,119,1,225,255,141,1,226,255,141,1,228,255,141,1,229,255,119,1,255, |
255,211,0,6,1,185,0,23,1,186,255,211,1,189,255,186,1,205,0,68,1,212,0,23, |
1,217,0,45,0,2,1,173,255,211,1,215,255,233,0,10,1,173,255,233,1,180,255,211, |
1,183,255,233,1,184,0,23,1,185,0,45,1,192,0,45,1,198,0,23,1,203,255,231,1, |
212,255,233,1,217,255,233,0,8,1,177,255,233,1,180,255,233,1,183,255,233,1, |
184,255,211,1,185,255,233,1,186,255,233,1,189,255,211,1,197,255,233,0,5,1, |
173,255,233,1,180,255,233,1,183,255,233,1,185,0,23,1,186,255,186,0,3,1,186, |
255,233,1,199,0,23,1,217,0,23,0,9,1,186,255,233,1,189,255,233,1,198,0,23, |
1,203,0,23,1,212,0,23,1,215,0,23,1,217,0,23,1,221,255,233,1,227,0,23,0,11, |
1,166,255,211,1,170,255,211,1,172,255,211,1,177,255,233,1,185,255,211,1,187, |
255,164,1,189,255,211,1,197,255,211,1,202,255,211,1,209,255,233,1,219,255, |
233,0,24,0,15,254,125,0,17,254,125,0,29,255,211,0,30,255,211,0,123,255,141, |
1,166,255,119,1,170,255,119,1,172,255,233,1,173,255,211,1,177,255,141,1,178, |
255,233,1,180,255,211,1,183,255,233,1,184,255,164,1,185,255,211,1,186,255, |
233,1,187,255,164,1,197,255,211,1,198,255,188,1,202,255,96,1,203,255,166, |
1,212,255,166,1,227,255,211,1,229,255,188,0,15,1,166,255,211,1,170,255,211, |
1,173,255,233,1,177,255,188,1,178,255,233,1,180,255,211,1,184,255,188,1,185, |
255,188,1,187,255,141,1,189,255,188,1,192,255,186,1,195,255,233,1,198,0,23, |
1,204,0,45,1,221,255,233,0,31,0,15,255,29,0,17,255,29,0,108,255,166,0,123, |
255,166,1,166,255,188,1,170,255,188,1,172,0,23,1,173,255,233,1,177,255,211, |
1,180,255,164,1,186,255,188,1,197,255,211,1,198,255,164,1,200,255,166,1,203, |
255,141,1,206,255,166,1,208,255,166,1,209,255,164,1,210,255,166,1,212,255, |
96,1,213,255,166,1,214,255,141,1,215,255,141,1,217,255,141,1,219,255,166, |
1,223,255,166,1,225,255,166,1,226,255,166,1,228,255,166,1,229,255,141,1,255, |
255,211,0,38,0,15,254,240,0,17,254,240,0,29,255,211,0,30,255,211,0,108,255, |
166,0,123,255,164,1,166,255,119,1,170,255,164,1,173,255,211,1,177,255,188, |
1,180,255,188,1,186,255,188,1,195,255,211,1,197,255,211,1,199,255,211,1,200, |
255,141,1,201,255,164,1,202,255,96,1,203,255,119,1,204,255,188,1,205,255, |
141,1,206,255,164,1,207,255,188,1,208,255,164,1,209,255,119,1,210,255,164, |
1,211,255,164,1,212,255,119,1,213,255,164,1,214,255,164,1,215,255,119,1,219, |
255,164,1,220,255,164,1,222,255,164,1,223,255,164,1,228,255,164,1,229,255, |
119,1,255,255,233,0,8,1,166,255,211,1,170,255,188,1,177,255,188,1,184,255, |
141,1,185,255,164,1,189,255,211,1,197,255,186,1,209,255,188,0,7,1,173,255, |
211,1,180,255,188,1,183,255,188,1,186,255,188,1,195,255,186,1,212,255,233, |
1,217,255,211,0,2,1,180,255,211,1,198,0,45,0,2,1,198,0,23,1,217,0,45,0,2, |
1,197,255,188,2,3,255,119,0,14,1,166,255,211,1,170,255,211,1,172,255,188, |
1,173,255,233,1,177,255,186,1,178,255,211,1,180,255,211,1,183,255,211,1,184, |
255,51,1,187,255,164,1,189,255,96,1,195,255,233,1,197,255,164,2,3,255,96, |
0,11,1,170,255,188,1,172,255,231,1,173,255,233,1,177,255,188,1,187,255,186, |
1,197,255,211,1,202,255,188,1,204,0,23,1,209,255,188,1,210,255,233,1,229, |
255,233,0,12,1,166,255,188,1,170,255,166,1,172,255,211,1,177,255,164,1,180, |
255,233,1,183,255,233,1,184,255,141,1,187,255,164,1,189,255,188,1,202,255, |
164,1,209,255,164,1,210,255,233,0,4,1,205,255,233,1,216,255,211,1,217,255, |
233,1,221,255,211,0,15,1,198,255,209,1,202,255,164,1,203,255,233,1,204,255, |
233,1,205,255,211,1,209,255,164,1,210,255,211,1,215,255,233,1,217,255,211, |
1,218,255,233,1,219,255,188,1,221,255,188,1,224,255,188,1,227,255,233,1,229, |
255,211,0,16,1,198,255,233,1,199,255,233,1,202,255,233,1,203,255,233,1,204, |
255,233,1,205,255,233,1,209,255,209,1,210,255,233,1,212,255,233,1,215,255, |
233,1,216,255,211,1,217,255,211,1,218,255,233,1,221,255,164,1,224,255,188, |
1,229,255,233,0,10,0,15,255,6,0,17,255,6,1,198,255,211,1,202,255,164,1,203, |
255,211,1,205,255,233,1,209,255,211,1,212,255,211,1,215,255,211,1,229,255, |
233,0,2,1,224,255,211,1,227,0,23,0,9,1,199,255,233,1,202,255,211,1,204,255, |
233,1,205,255,211,1,209,255,188,1,216,255,188,1,217,255,233,1,219,255,211, |
1,221,255,188,0,4,1,199,0,23,1,217,0,23,1,221,255,233,1,224,0,45,0,11,1,199, |
255,233,1,202,255,211,1,203,255,233,1,205,255,233,1,209,255,233,1,212,255, |
233,1,215,255,233,1,217,255,233,1,218,255,233,1,221,255,188,1,224,255,211, |
0,10,1,198,0,45,1,199,0,45,1,203,0,23,1,205,0,23,1,209,0,23,1,212,0,23,1, |
215,0,23,1,216,0,23,1,217,0,23,1,227,0,23,0,2,1,212,0,23,1,221,255,211,0, |
3,1,199,255,233,1,205,255,233,1,217,0,23,0,8,1,202,255,211,1,204,255,233, |
1,205,255,233,1,209,255,211,1,216,255,211,1,217,255,233,1,219,255,233,1,221, |
255,211,0,8,1,202,255,209,1,205,255,233,1,209,255,186,1,216,255,211,1,217, |
255,233,1,219,255,233,1,221,255,211,1,229,255,233,0,4,1,204,0,23,1,212,0, |
23,1,221,255,233,1,227,0,23,0,10,0,15,255,29,0,17,255,29,1,198,255,233,1, |
202,255,188,1,203,255,233,1,204,0,68,1,209,255,211,1,212,255,233,1,215,255, |
233,1,217,0,23,0,16,0,15,255,51,0,17,255,51,0,123,0,23,1,198,255,233,1,199, |
0,23,1,202,255,188,1,203,255,233,1,204,0,23,1,209,255,211,1,210,255,233,1, |
212,255,231,1,214,255,233,1,215,255,233,1,218,255,233,1,227,255,233,1,229, |
255,233,0,7,1,199,255,233,1,202,255,211,1,209,255,211,1,216,255,211,1,217, |
255,233,1,221,255,211,1,229,255,233,0,9,1,198,255,233,1,199,255,233,1,203, |
255,233,1,205,255,233,1,212,255,233,1,215,255,233,1,216,255,233,1,218,255, |
233,1,221,255,211,0,4,1,203,255,233,1,205,255,233,1,212,255,233,1,215,255, |
233,0,3,1,203,255,233,1,212,255,233,1,217,0,23,0,2,1,216,255,96,1,221,255, |
119,0,8,1,202,255,211,1,203,0,23,1,205,255,233,1,209,255,211,1,212,0,23,1, |
216,255,211,1,219,255,233,1,229,255,233,0,7,1,202,255,211,1,204,255,233,1, |
209,255,211,1,210,255,233,1,216,255,211,1,219,255,233,1,221,255,211,0,2,0, |
15,255,51,0,17,255,51,0,7,0,15,255,6,0,17,255,6,0,29,255,211,0,30,255,211, |
0,108,255,96,0,123,255,96,1,255,255,211,0,1,2,2,255,219,0,3,0,3,255,180,0, |
86,255,219,2,3,255,219,0,5,1,153,255,96,1,162,255,96,1,184,255,96,1,189,255, |
188,1,192,255,188,0,1,0,105,0,3,0,20,0,36,0,41,0,47,0,51,0,53,0,55,0,57,0, |
58,0,60,0,73,0,85,0,89,0,90,0,92,1,82,1,87,1,88,1,89,1,91,1,93,1,94,1,98, |
1,100,1,101,1,105,1,107,1,108,1,109,1,110,1,111,1,113,1,114,1,116,1,125,1, |
127,1,129,1,131,1,132,1,135,1,136,1,137,1,138,1,141,1,143,1,144,1,146,1,149, |
1,151,1,154,1,160,1,161,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1, |
176,1,177,1,178,1,180,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,191,1,192, |
1,194,1,195,1,196,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,208,1, |
209,1,210,1,212,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,223,1,226,1,227, |
1,228,1,242,1,244,2,2,2,3,2,8,0,0,0,1,0,0,0,0,199,254,176,223,0,0,0,0,191, |
26,255,128,0,0,0,0,196,4,48,20,}; |
#endif |
#ifdef HAVE_INCBIN |
extern const unsigned char pdf_font_DroidSansMono[139280]; |
asm(".globl pdf_font_DroidSansMono"); |
asm(".balign 8"); |
asm("pdf_font_DroidSansMono:"); |
asm(".incbin \"fonts/droid/DroidSansMono.ttf\""); |
#else |
static const unsigned char pdf_font_DroidSansMono[139280] = { |
0,1,0,0,0,19,1,0,0,4,0,48,70,70,84,77,75,29,224,116,0,2,31,244,0,0,0,28,71, |
68,69,70,2,201,0,4,0,2,14,208,0,0,0,32,71,80,79,83,236,144,228,222,0,2,15, |
64,0,0,16,180,71,83,85,66,147,60,130,75,0,2,14,240,0,0,0,80,79,83,47,50,247, |
26,134,136,0,0,1,184,0,0,0,96,99,109,97,112,29,150,101,90,0,0,12,136,0,0, |
6,242,99,118,116,32,65,244,67,234,0,0,29,92,0,0,2,20,102,112,103,109,115, |
211,35,176,0,0,19,124,0,0,7,5,103,97,115,112,0,24,0,9,0,2,14,192,0,0,0,16, |
103,108,121,102,155,28,79,66,0,0,36,172,0,1,184,160,104,101,97,100,248,253, |
254,54,0,0,1,60,0,0,0,54,104,104,101,97,14,75,8,159,0,0,1,116,0,0,0,36,104, |
109,116,120,38,164,8,117,0,0,2,24,0,0,10,112,107,101,114,110,174,170,185, |
111,0,1,221,76,0,0,21,90,108,111,99,97,120,114,13,144,0,0,31,112,0,0,5,58, |
109,97,120,112,7,1,7,208,0,0,1,152,0,0,0,32,110,97,109,101,35,87,171,194, |
0,1,242,168,0,0,7,251,112,111,115,116,26,213,54,16,0,1,250,164,0,0,20,25, |
112,114,101,112,122,200,94,246,0,0,26,132,0,0,2,213,0,1,0,0,0,1,5,30,235, |
107,75,224,95,15,60,245,0,31,8,0,0,0,0,0,201,129,215,160,0,0,0,0,201,129, |
215,160,254,96,253,147,8,103,7,72,0,0,0,8,0,2,0,0,0,0,0,0,0,1,0,0,7,62,254, |
78,0,67,8,192,254,96,254,244,8,103,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,156, |
0,1,0,0,2,156,1,82,0,84,0,140,0,5,0,2,0,16,0,47,0,90,0,0,3,158,5,192,0,3, |
0,1,0,3,4,185,1,144,0,5,0,8,5,154,5,51,0,0,1,27,5,154,5,51,0,0,3,209,0,102, |
2,18,8,5,2,11,6,4,2,2,2,2,2,4,160,0,2,175,80,0,120,251,0,0,0,0,0,0,0,0,49, |
65,83,67,0,64,0,33,251,2,5,211,254,81,1,51,7,62,1,178,96,0,0,159,223,215, |
0,0,4,58,5,129,0,0,0,32,0,2,2,236,0,68,0,0,0,0,2,170,0,0,2,57,0,0,2,57,0, |
185,2,215,0,87,4,115,0,9,4,115,0,22,7,29,0,73,5,86,0,72,1,135,0,104,2,170, |
0,127,2,170,0,12,3,29,0,33,4,172,0,100,2,57,0,184,2,170,0,91,2,57,0,187,2, |
57,0,0,4,115,0,80,4,115,0,156,4,115,0,103,4,115,0,78,4,115,0,47,4,115,0,82, |
4,115,0,104,4,115,0,105,4,115,0,89,4,115,0,96,2,57,0,187,2,57,0,184,4,172, |
0,101,4,172,0,100,4,172,0,101,4,115,0,84,8,31,0,161,5,86,0,4,5,86,0,168,5, |
199,0,104,5,199,0,168,5,86,0,168,4,227,0,168,6,57,0,103,5,199,0,168,2,57, |
0,189,4,0,0,32,5,86,0,168,4,115,0,168,6,170,0,168,5,199,0,168,6,57,0,97,5, |
86,0,168,6,57,0,97,5,199,0,168,5,86,0,93,4,227,0,46,5,199,0,158,5,86,0,9, |
7,141,0,9,5,86,0,46,5,86,0,45,4,227,0,65,2,57,0,146,2,57,0,0,2,57,0,16,3, |
193,0,10,4,115,255,225,2,170,0,106,4,115,0,87,4,115,0,132,4,0,0,87,4,115, |
0,86,4,115,0,87,2,57,0,29,4,115,0,86,4,115,0,142,1,199,0,137,1,199,255,206, |
4,0,0,138,1,199,0,138,6,170,0,136,4,115,0,136,4,115,0,86,4,115,0,132,4,115, |
0,86,2,170,0,136,4,0,0,57,2,57,0,31,4,115,0,133,4,0,0,7,5,199,255,253,4,0, |
0,23,4,0,0,5,4,0,0,49,2,172,0,34,2,20,0,183,2,172,0,34,4,172,0,92,2,170,0, |
242,4,115,0,135,4,115,0,58,4,115,0,113,4,115,255,254,2,20,0,183,4,115,0,115, |
2,170,0,45,5,229,0,31,2,246,0,26,4,115,0,83,4,172,0,100,5,229,0,31,4,107, |
255,239,3,51,0,122,4,100,0,65,2,170,0,41,2,170,0,27,2,170,0,72,4,156,0,140, |
4,76,0,80,2,57,0,187,2,170,0,119,2,170,0,80,2,236,0,27,4,115,0,83,6,172,0, |
56,6,172,0,56,6,172,0,73,4,227,0,131,5,86,0,4,5,86,0,4,5,86,0,4,5,86,0,4, |
5,86,0,4,5,86,0,4,8,0,0,24,5,199,0,104,5,86,0,168,5,86,0,168,5,86,0,168,5, |
86,0,168,2,57,0,9,2,57,0,142,2,57,255,210,2,57,0,7,5,199,0,14,5,199,0,168, |
6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,6,57,0,97,4,172,0,142,6,57,0,71,5, |
199,0,158,5,199,0,158,5,199,0,158,5,199,0,158,5,86,0,45,5,86,0,168,4,227, |
0,142,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,7, |
29,0,66,4,0,0,87,4,115,0,87,4,115,0,87,4,115,0,87,4,115,0,87,2,57,0,10,2, |
57,0,135,2,57,255,211,2,57,0,8,4,115,0,86,4,115,0,140,4,115,0,86,4,115,0, |
86,4,115,0,86,4,115,0,86,4,115,0,86,4,100,0,65,4,227,0,44,4,115,0,139,4,115, |
0,139,4,115,0,139,4,115,0,139,4,0,0,5,4,115,0,138,4,0,0,5,5,86,0,4,4,115, |
0,87,5,86,0,4,4,115,0,87,5,86,0,4,4,115,0,87,5,199,0,104,4,0,0,87,5,199,0, |
104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,104,4,0,0,87,5,199,0,168,4,235, |
0,86,5,199,0,14,4,115,0,86,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5, |
86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,5,86,0,168,4,115,0,87,6,57,0,103, |
4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0,86,6,57,0,103,4,115,0, |
86,5,199,0,168,4,115,0,142,5,199,0,14,4,115,0,10,2,57,255,184,2,57,255,184, |
2,57,0,12,2,57,0,12,2,57,255,210,2,57,255,210,2,57,0,92,1,199,0,31,2,57,0, |
189,2,57,0,194,5,225,0,170,3,141,0,137,4,0,0,32,1,199,255,153,5,86,0,168, |
4,0,0,138,4,0,0,138,4,115,0,168,1,199,0,91,4,115,0,168,1,199,0,126,4,115, |
0,168,2,85,0,138,4,115,0,168,2,172,0,138,4,115,0,20,1,199,0,16,5,199,0,168, |
4,115,0,140,5,199,0,168,4,115,0,140,5,199,0,168,4,115,0,140,4,213,255,254, |
5,201,0,165,4,115,0,140,6,57,0,97,4,115,0,86,6,57,0,97,4,115,0,86,6,57,0, |
97,4,115,0,86,8,0,0,97,7,141,0,86,5,199,0,168,2,170,0,136,5,199,0,168,2,170, |
0,129,5,199,0,168,2,170,0,56,5,86,0,93,4,0,0,57,5,86,0,93,4,0,0,57,5,86,0, |
93,4,0,0,57,5,86,0,93,4,0,0,57,4,227,0,46,2,57,0,31,4,227,0,46,3,0,0,31,4, |
227,0,46,2,57,0,31,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199, |
0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0,158,4,115,0,133,5,199,0, |
158,4,115,0,133,7,141,0,9,5,199,255,253,5,86,0,45,4,0,0,5,5,86,0,45,4,227, |
0,65,4,0,0,49,4,227,0,65,4,0,0,49,4,227,0,65,4,0,0,49,1,199,0,138,4,115,0, |
192,5,86,0,4,4,115,0,87,8,0,0,24,7,29,0,66,6,57,0,71,4,227,0,44,2,170,0,0, |
2,170,0,0,2,170,0,51,2,170,255,221,2,170,0,156,2,170,0,51,2,170,0,80,2,170, |
255,233,2,170,0,22,2,170,0,205,2,170,0,29,5,87,0,4,2,57,0,187,6,70,255,245, |
6,180,255,242,3,18,255,232,6,50,255,187,6,216,0,65,6,5,255,187,1,199,255, |
176,5,86,0,4,5,86,0,168,4,104,0,168,5,88,0,61,5,86,0,168,4,227,0,65,5,199, |
0,168,6,57,0,97,2,57,0,189,5,86,0,168,5,88,0,10,6,170,0,168,5,199,0,168,5, |
51,0,90,6,57,0,97,5,199,0,168,5,86,0,168,4,242,0,108,4,227,0,46,5,86,0,45, |
6,98,0,117,5,86,0,46,6,175,0,145,5,251,0,87,2,57,0,7,5,86,0,45,4,160,0,86, |
3,145,0,70,4,115,0,106,1,199,0,137,4,96,0,133,4,160,0,86,4,154,0,142,4,0, |
0,7,4,116,0,86,3,145,0,70,3,135,0,86,4,115,0,106,4,115,0,106,1,199,0,137, |
4,0,0,138,4,0,0,14,4,156,0,138,4,0,0,0,3,149,0,86,4,115,0,86,5,133,0,79,4, |
141,0,132,3,219,0,86,4,240,0,86,3,41,0,29,4,96,0,133,5,48,0,85,4,51,0,21, |
5,180,0,135,6,63,0,83,1,199,255,205,4,96,0,133,4,115,0,86,4,96,0,133,6,63, |
0,83,5,87,0,168,6,235,0,46,4,85,0,168,5,192,0,104,5,86,0,93,2,57,0,189,2, |
57,0,7,4,0,0,32,8,117,0,18,8,21,0,168,6,213,0,46,4,169,0,168,5,21,0,55,5, |
192,0,168,5,86,0,4,5,64,0,168,5,86,0,168,4,85,0,168,5,107,0,15,5,86,0,168, |
7,99,0,28,4,213,0,67,5,192,0,168,5,192,0,168,4,169,0,168,5,64,0,18,6,170, |
0,168,5,199,0,168,6,57,0,97,5,192,0,166,5,86,0,168,5,199,0,104,4,227,0,46, |
5,21,0,55,6,21,0,118,5,86,0,46,5,235,0,168,5,85,0,160,7,85,0,168,7,128,0, |
168,6,85,0,46,7,21,0,168,5,64,0,168,5,192,0,105,8,21,0,168,5,199,0,96,4,115, |
0,87,4,149,0,120,4,64,0,142,2,235,0,142,4,171,0,20,4,115,0,87,5,90,0,7,3, |
171,0,49,4,120,0,142,4,120,0,142,3,128,0,138,4,171,0,11,5,128,0,142,4,107, |
0,142,4,115,0,86,4,85,0,142,4,115,0,132,4,0,0,87,3,170,0,35,4,0,0,5,6,149, |
0,86,4,0,0,23,4,149,0,142,4,43,0,122,6,107,0,142,6,149,0,142,5,0,0,45,5,192, |
0,142,4,43,0,142,4,21,0,55,6,0,0,142,4,85,0,17,4,115,0,87,4,115,0,10,2,235, |
0,142,4,21,0,87,4,0,0,57,1,199,0,137,2,57,255,248,1,199,255,206,7,64,0,11, |
6,128,0,142,4,115,0,10,3,128,0,138,4,0,0,5,4,107,0,142,3,233,0,168,3,74,0, |
142,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253,7,141,0,9,5,199,255,253, |
5,86,0,45,4,0,0,5,4,115,0,0,8,0,0,0,8,0,0,0,4,107,255,225,1,199,0,127,1,199, |
0,127,1,199,0,127,1,199,0,126,2,170,0,75,2,170,0,75,2,170,0,75,4,115,0,138, |
4,115,0,136,2,205,0,81,8,0,1,22,8,0,0,55,1,128,0,85,2,213,0,85,2,170,0,88, |
2,170,0,89,4,0,0,185,2,170,255,192,1,86,254,96,2,235,0,101,4,115,0,4,4,115, |
0,58,8,192,0,158,4,115,0,16,7,21,0,69,2,150,0,19,8,149,0,188,8,0,0,188,6, |
37,0,108,4,205,0,88,6,172,0,80,6,172,0,61,6,172,0,93,6,172,0,145,8,0,1,162, |
4,0,1,16,8,0,1,162,4,0,1,16,8,0,1,162,4,0,1,16,4,0,1,16,3,244,0,56,4,229, |
0,4,6,150,0,235,5,180,0,154,4,172,0,101,4,100,0,51,5,180,0,87,7,213,1,152, |
5,192,1,22,2,49,255,158,4,100,0,56,4,100,0,65,4,171,0,100,4,100,0,63,4,100, |
0,65,4,213,0,157,4,172,0,100,4,213,2,34,4,213,1,5,5,171,255,246,5,0,1,216, |
5,171,2,141,5,171,255,246,5,171,2,141,5,171,255,246,5,171,2,141,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,1,217,5, |
171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255,246, |
5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,2,141,5,171,1,217,5,171,1,217,5,171,255,246,5,171,255,246,5,171, |
255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255, |
246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,255,246,5,171,0,0,5,171, |
0,0,5,171,0,0,5,171,0,0,5,171,2,213,5,171,0,103,5,171,0,0,5,213,0,0,4,213, |
0,123,4,213,0,6,2,214,0,109,2,214,0,109,8,0,0,0,7,235,1,158,7,235,1,145,7, |
235,1,158,7,235,1,145,3,244,0,8,4,213,0,167,4,213,0,178,4,213,0,41,4,213, |
0,41,2,214,0,115,8,43,1,177,8,107,1,209,7,85,1,70,6,0,1,218,6,0,1,81,4,64, |
0,59,5,64,0,60,4,192,0,102,4,21,0,66,4,0,0,196,6,0,1,16,4,0,0,29,4,0,0,29, |
2,170,0,119,2,170,0,243,2,170,0,127,2,170,0,14,2,170,0,53,2,170,0,43,2,170, |
0,45,2,170,255,229,1,199,0,124,1,199,0,130,2,90,0,106,2,90,0,72,2,152,0,0, |
2,152,0,0,2,135,0,45,2,160,255,233,3,47,0,32,2,72,255,232,0,0,0,3,0,0,0,3, |
0,0,0,28,0,1,0,0,0,0,4,232,0,3,0,1,0,0,0,28,0,4,4,204,0,0,0,190,0,128,0,6, |
0,62,0,126,1,127,1,146,1,255,2,199,2,201,2,221,3,126,3,138,3,140,3,161,3, |
206,4,12,4,79,4,92,4,95,4,145,30,133,30,243,32,21,32,30,32,34,32,38,32,48, |
32,51,32,58,32,60,32,62,32,68,32,127,32,164,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,94,33,149,33,168,34,2,34,6,34,15,34,18,34,21,34,26,34, |
31,34,41,34,43,34,72,34,97,34,101,35,2,35,16,35,33,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,108,37,128,37,132,37,136,37, |
140,37,147,37,161,37,172,37,178,37,186,37,188,37,196,37,203,37,207,37,217, |
37,230,38,60,38,64,38,66,38,96,38,99,38,102,38,107,240,2,240,5,251,2,255, |
255,0,0,0,32,0,160,1,146,1,250,2,198,2,201,2,216,3,126,3,132,3,140,3,142, |
3,163,4,1,4,14,4,81,4,94,4,144,30,128,30,242,32,19,32,23,32,32,32,38,32,48, |
32,50,32,57,32,60,32,62,32,68,32,127,32,163,32,167,32,172,33,5,33,19,33,22, |
33,34,33,38,33,46,33,91,33,144,33,168,34,2,34,6,34,15,34,17,34,21,34,25,34, |
30,34,41,34,43,34,72,34,96,34,100,35,2,35,16,35,32,37,0,37,2,37,12,37,16, |
37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,80,37,128,37,132,37,136,37,140, |
37,144,37,160,37,170,37,178,37,186,37,188,37,196,37,202,37,207,37,216,37, |
230,38,58,38,64,38,66,38,96,38,99,38,101,38,106,240,1,240,5,251,1,255,255, |
255,227,0,0,255,174,255,71,254,129,254,128,254,114,252,160,253,204,253,203, |
253,202,253,201,253,151,253,150,253,149,253,148,253,100,227,118,227,10,225, |
235,225,234,225,233,225,230,225,221,225,220,225,215,225,214,225,213,225,208, |
225,150,225,115,225,113,225,109,225,21,225,8,225,6,224,251,224,248,224,241, |
224,197,224,148,224,130,224,41,224,38,224,30,224,29,223,255,0,0,224,19,224, |
10,224,9,223,237,223,214,223,212,223,56,223,43,223,28,221,62,221,61,221,52, |
221,49,221,46,221,43,221,40,221,33,221,26,221,19,221,12,220,249,220,230,220, |
227,220,224,220,221,220,218,220,206,220,198,220,193,220,186,220,185,220,178, |
220,173,220,170,220,162,220,150,220,67,220,64,220,63,220,34,220,32,220,31, |
220,28,18,135,18,133,7,135,0,1,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
2,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,98,0,99,0,100,0,101,0, |
102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,16,0,110,0,111,0,112,0,113, |
0,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,124,0,125,0, |
126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,136,0,137,0,138, |
0,139,0,140,0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,148,0,149,0,150,0, |
151,0,152,0,153,0,154,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,163, |
0,164,0,165,0,166,0,167,0,168,0,169,0,170,0,171,0,172,0,173,0,174,0,175,0, |
176,0,177,0,178,0,179,0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188, |
0,189,0,190,0,191,0,192,0,193,0,194,0,195,0,196,0,197,0,198,0,199,0,200,0, |
201,0,202,0,203,0,204,0,205,0,206,0,207,0,208,0,209,0,210,0,211,0,212,0,213, |
0,214,0,215,0,216,0,217,0,218,0,219,0,220,0,221,0,222,0,223,0,224,0,225,0, |
226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0,238, |
0,239,0,240,0,241,0,242,0,243,0,244,0,245,0,246,0,247,0,248,0,249,0,250,0, |
251,0,252,0,253,0,254,0,255,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10, |
1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25, |
1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40, |
1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,0,119,2,48,0,6,2,10,0,0,0,0,1,0,0, |
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,0,4,0,5,0,6,0,7,0, |
8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0, |
23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37, |
0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52, |
0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67, |
0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82, |
0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97, |
0,0,0,132,0,133,0,135,0,137,0,145,0,150,0,156,0,161,0,160,0,162,0,164,0,163, |
0,165,0,167,0,169,0,168,0,170,0,171,0,173,0,172,0,174,0,175,0,177,0,179,0, |
178,0,180,0,182,0,181,0,186,0,185,0,187,0,188,2,9,0,112,0,99,0,100,0,104, |
2,11,0,118,0,159,0,110,0,106,2,29,0,116,0,105,2,54,0,134,0,152,2,49,0,113, |
2,56,2,57,0,102,0,117,2,43,2,46,2,45,1,137,2,52,0,107,0,122,1,114,0,166,0, |
184,0,127,0,98,0,109,2,48,1,64,2,53,2,44,0,108,0,123,2,12,0,3,0,128,0,131, |
0,149,1,18,1,19,1,254,1,255,2,6,2,7,2,2,2,3,0,183,2,119,0,191,1,56,2,20,2, |
25,2,16,2,17,2,136,2,137,2,10,0,119,2,4,2,8,2,13,0,130,0,138,0,129,0,139, |
0,136,0,141,0,142,0,143,0,140,0,147,0,148,0,0,0,146,0,154,0,155,0,153,0,241, |
1,71,1,78,0,111,1,74,1,75,1,76,0,120,1,79,1,77,1,72,0,0,64,69,89,88,85,84, |
83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59, |
58,57,56,55,54,53,49,48,47,46,45,44,40,39,38,37,36,35,34,33,31,24,20,17,16, |
15,14,13,11,10,9,8,7,6,5,4,3,2,1,0,44,69,35,70,96,32,176,38,96,176,4,38,35, |
72,72,45,44,69,35,70,35,97,32,176,38,97,176,4,38,35,72,72,45,44,69,35,70, |
96,176,32,97,32,176,70,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,32,96, |
32,176,38,97,176,32,97,176,4,38,35,72,72,45,44,69,35,70,96,176,64,97,32,176, |
102,96,176,4,38,35,72,72,45,44,69,35,70,35,97,176,64,96,32,176,38,97,176, |
64,97,176,4,38,35,72,72,45,44,1,16,32,60,0,60,45,44,32,69,35,32,176,205,68, |
35,32,184,1,90,81,88,35,32,176,141,68,35,89,32,176,237,81,88,35,32,176,77, |
68,35,89,32,176,4,38,81,88,35,32,176,13,68,35,89,33,33,45,44,32,32,69,24, |
104,68,32,176,1,96,32,69,176,70,118,104,138,69,96,68,45,44,1,177,11,10,67, |
35,67,101,10,45,44,0,177,10,11,67,35,67,11,45,44,0,176,40,35,112,177,1,40, |
62,1,176,40,35,112,177,2,40,69,58,177,2,0,8,13,45,44,32,69,176,3,37,69,97, |
100,176,80,81,88,69,68,27,33,33,89,45,44,73,176,14,35,68,45,44,32,69,176, |
0,67,96,68,45,44,1,176,6,67,176,7,67,101,10,45,44,32,105,176,64,97,176,0, |
139,32,177,44,192,138,140,184,16,0,98,96,43,12,100,35,100,97,92,88,176,3, |
97,89,45,44,138,3,69,138,138,135,176,17,43,176,41,35,68,176,41,122,228,24, |
45,44,69,101,176,44,35,68,69,176,43,35,68,45,44,75,82,88,69,68,27,33,33,89, |
45,44,75,81,88,69,68,27,33,33,89,45,44,1,176,5,37,16,35,32,138,245,0,176, |
1,96,35,237,236,45,44,1,176,5,37,16,35,32,138,245,0,176,1,97,35,237,236,45, |
44,1,176,6,37,16,245,0,237,236,45,44,70,35,70,96,138,138,70,35,32,70,138, |
96,138,97,184,255,128,98,35,32,16,35,138,177,12,12,138,112,69,96,32,176,0, |
80,88,176,1,97,184,255,186,139,27,176,70,140,89,176,16,96,104,1,58,45,44, |
32,69,176,3,37,70,82,75,176,19,81,91,88,176,2,37,70,32,104,97,176,3,37,176, |
3,37,63,35,33,56,27,33,17,89,45,44,32,69,176,3,37,70,80,88,176,2,37,70,32, |
104,97,176,3,37,176,3,37,63,35,33,56,27,33,17,89,45,44,0,176,7,67,176,6,67, |
11,45,44,33,33,12,100,35,100,139,184,64,0,98,45,44,33,176,128,81,88,12,100, |
35,100,139,184,32,0,98,27,178,0,64,47,43,89,176,2,96,45,44,33,176,192,81, |
88,12,100,35,100,139,184,21,85,98,27,178,0,128,47,43,89,176,2,96,45,44,12, |
100,35,100,139,184,64,0,98,96,35,33,45,44,75,83,88,138,176,4,37,73,100,35, |
69,105,176,64,139,97,176,128,98,176,32,97,106,176,14,35,68,35,16,176,14,246, |
27,33,35,138,18,17,32,57,47,89,45,44,75,83,88,32,176,3,37,73,100,105,32,176, |
5,38,176,6,37,73,100,35,97,176,128,98,176,32,97,106,176,14,35,68,176,4,38, |
16,176,14,246,138,16,176,14,35,68,176,14,246,176,14,35,68,176,14,237,27,138, |
176,4,38,17,18,32,57,35,32,57,47,47,89,45,44,69,35,69,96,35,69,96,35,69,96, |
35,118,104,24,176,128,98,32,45,44,176,72,43,45,44,32,69,176,0,84,88,176,64, |
68,32,69,176,64,97,68,27,33,33,89,45,44,69,177,48,47,69,35,69,97,96,176,1, |
96,105,68,45,44,75,81,88,176,47,35,112,176,20,35,66,27,33,33,89,45,44,75, |
81,88,32,176,3,37,69,105,83,88,68,27,33,33,89,27,33,33,89,45,44,69,176,20, |
67,176,0,96,99,176,1,96,105,68,45,44,176,47,69,68,45,44,69,35,32,69,138,96, |
68,45,44,69,35,69,96,68,45,44,75,35,81,88,185,0,51,255,224,177,52,32,27,179, |
51,0,52,0,89,68,68,45,44,176,22,67,88,176,3,38,69,138,88,100,102,176,31,96, |
27,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,89,35,88,101,89,176,41, |
35,68,35,16,176,41,224,27,33,33,33,33,33,89,45,44,176,2,67,84,88,75,83,35, |
75,81,90,88,56,27,33,33,89,27,33,33,33,33,89,45,44,176,22,67,88,176,4,37, |
69,100,176,32,96,102,32,88,27,33,176,64,89,176,1,97,35,88,27,101,89,176,41, |
35,68,176,5,37,176,8,37,8,32,88,2,27,3,89,176,4,37,16,176,5,37,32,70,176, |
4,37,35,66,60,176,4,37,176,7,37,8,176,7,37,16,176,6,37,32,70,176,4,37,176, |
1,96,35,66,60,32,88,1,27,0,89,176,4,37,16,176,5,37,176,41,224,176,41,32,69, |
101,68,176,7,37,16,176,6,37,176,41,224,176,5,37,176,8,37,8,32,88,2,27,3,89, |
176,5,37,176,3,37,67,72,176,4,37,176,7,37,8,176,6,37,176,3,37,176,1,96,67, |
72,27,33,89,33,33,33,33,33,33,33,45,44,2,176,4,37,32,32,70,176,4,37,35,66, |
176,5,37,8,176,3,37,69,72,33,33,33,33,45,44,2,176,3,37,32,176,4,37,8,176, |
2,37,67,72,33,33,33,45,44,69,35,32,69,24,32,176,0,80,32,88,35,101,35,89,35, |
104,32,176,64,80,88,33,176,64,89,35,88,101,89,138,96,68,45,44,75,83,35,75, |
81,90,88,32,69,138,96,68,27,33,33,89,45,44,75,84,88,32,69,138,96,68,27,33, |
33,89,45,44,75,83,35,75,81,90,88,56,27,33,33,89,45,44,176,0,33,75,84,88,56, |
27,33,33,89,45,44,176,2,67,84,88,176,70,43,27,33,33,33,33,89,45,44,176,2, |
67,84,88,176,71,43,27,33,33,33,89,45,44,176,2,67,84,88,176,72,43,27,33,33, |
33,33,89,45,44,176,2,67,84,88,176,73,43,27,33,33,33,89,45,44,32,138,8,35, |
75,83,138,75,81,90,88,35,56,27,33,33,89,45,44,0,176,2,37,73,176,0,83,88,32, |
176,64,56,17,27,33,89,45,44,1,70,35,70,96,35,70,97,35,32,16,32,70,138,97, |
184,255,128,98,138,177,64,64,138,112,69,96,104,58,45,44,32,138,35,73,100, |
138,35,83,88,60,27,33,89,45,44,75,82,88,125,27,122,89,45,44,176,18,0,75,1, |
75,84,66,45,44,177,2,0,66,177,35,1,136,81,177,64,1,136,83,90,88,185,16,0, |
0,32,136,84,88,178,2,1,2,67,96,66,89,177,36,1,136,81,88,185,32,0,0,64,136, |
84,88,178,2,2,2,67,96,66,177,36,1,136,84,88,178,2,32,2,67,96,66,0,75,1,75, |
82,88,178,2,8,2,67,96,66,89,27,185,64,0,0,128,136,84,88,178,2,4,2,67,96,66, |
89,185,64,0,0,128,99,184,1,0,136,84,88,178,2,8,2,67,96,66,89,185,64,0,1,0, |
99,184,2,0,136,84,88,178,2,16,2,67,96,66,89,185,64,0,2,0,99,184,4,0,136,84, |
88,178,2,64,2,67,96,66,89,89,89,89,89,45,44,69,24,104,35,75,81,88,35,32,69, |
32,100,176,64,80,88,124,89,104,138,96,89,68,45,44,176,0,22,176,2,37,176,2, |
37,1,176,1,35,62,0,176,2,35,62,177,1,2,6,12,176,10,35,101,66,176,11,35,66, |
1,176,1,35,63,0,176,2,35,63,177,1,2,6,12,176,6,35,101,66,176,7,35,66,176, |
1,22,1,45,44,122,138,16,69,35,245,24,45,0,0,0,177,9,64,190,1,7,0,1,0,31,1, |
7,0,1,0,159,1,4,64,142,1,192,253,1,175,253,1,0,253,1,10,79,251,1,32,251,1, |
245,80,40,31,242,70,40,31,241,70,42,31,240,70,43,31,95,239,127,239,2,15,239, |
79,239,95,239,143,239,175,239,5,11,229,228,30,31,227,226,70,31,15,226,1,64, |
226,70,22,31,225,224,70,31,207,224,223,224,239,224,3,64,224,51,54,70,224, |
70,24,31,221,61,223,85,222,61,3,85,223,1,3,85,220,3,255,31,15,213,31,213, |
2,15,213,31,213,2,64,202,24,27,70,207,194,1,189,192,60,31,193,80,38,31,188, |
190,40,31,255,185,1,80,184,112,184,128,184,3,184,255,192,64,255,184,18,50, |
70,31,183,63,183,79,183,111,183,127,183,159,183,175,183,7,112,178,160,178, |
176,178,3,15,178,1,144,181,1,176,181,1,15,181,1,8,15,179,63,179,239,179,3, |
128,176,144,176,2,176,176,192,176,208,176,3,47,175,63,175,2,160,173,176,173, |
2,192,173,208,173,2,47,172,63,172,2,159,171,1,192,170,208,170,2,79,169,143, |
169,2,47,169,111,169,191,169,255,169,4,156,155,36,31,80,155,1,111,150,1,191, |
150,1,150,70,29,31,149,148,23,31,127,148,143,148,255,148,3,48,145,64,145, |
2,128,145,1,112,143,128,143,2,144,143,1,192,143,208,143,2,79,140,95,140,111, |
140,3,134,70,255,31,159,133,1,132,131,49,31,116,115,63,31,115,80,38,31,111, |
110,60,31,110,70,53,31,26,1,24,85,25,51,24,85,7,51,3,85,6,3,255,31,96,80, |
38,31,95,80,38,31,92,70,49,31,91,90,72,31,90,70,49,31,19,50,18,85,5,1,3,85, |
4,50,3,85,111,3,1,15,3,63,3,2,239,81,255,81,2,64,81,53,56,70,64,81,37,40, |
70,207,64,84,80,1,73,70,32,31,72,70,53,31,71,70,53,31,175,70,1,223,70,239, |
70,2,128,70,1,22,50,21,85,17,1,15,85,16,50,15,85,2,1,0,85,1,0,1,31,31,15, |
63,15,95,15,127,15,4,15,15,47,15,79,15,111,15,143,15,223,15,255,15,7,63,15, |
127,15,239,15,3,111,0,1,128,22,1,5,1,184,1,144,177,84,83,43,43,75,184,7,255, |
82,75,176,7,80,91,176,1,136,176,37,83,176,1,136,176,64,81,90,176,6,136,176, |
0,85,90,91,88,177,1,1,142,89,133,141,141,0,66,29,75,176,50,83,88,176,96,29, |
89,75,176,100,83,88,176,64,29,89,75,176,128,83,88,176,16,29,177,22,0,66,89, |
116,115,116,117,43,43,43,43,43,1,115,116,117,43,43,43,0,116,43,43,115,115, |
117,43,43,43,1,43,43,43,0,43,43,43,43,43,43,1,43,43,0,43,43,1,43,115,43,0, |
116,115,116,117,115,116,115,43,1,43,116,117,0,115,43,115,116,1,115,115,116, |
0,115,116,116,115,116,115,1,94,115,115,116,115,115,0,115,43,115,115,1,43, |
0,43,1,43,0,115,43,116,117,43,43,43,43,1,43,43,116,43,43,94,115,43,0,43,94, |
115,116,1,43,43,43,0,43,115,115,94,115,115,115,1,115,115,115,24,94,0,0,0, |
5,204,5,204,0,125,5,129,0,21,0,121,5,129,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
4,58,0,20,0,119,0,0,255,236,0,0,0,0,255,236,0,0,0,0,255,236,0,0,254,87,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,180,0,189,0,175,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0, |
126,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,191,0,195,0,171,0,0,0,0,0,155,0,141, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,170,0,0,0,0,0, |
0,0,148,0,153,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, |
0,131,0,141,0,164,0,180,0,0,0,0,0,0,0,0,0,0,0,96,0,106,0,121,0,152,0,172, |
0,184,0,167,0,0,1,34,1,51,0,195,0,107,0,0,0,0,0,0,0,219,0,201,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,225,1,201,0,146,0,168,0,107,0,146,0,183, |
0,107,0,155,0,0,2,123,2,242,0,146,2,82,0,110,2,215,3,129,0,130,0,137,0,160, |
0,159,1,105,0,143,0,0,1,96,0,164,1,91,0,94,0,130,0,0,0,0,0,0,0,94,0,101,0, |
111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,144,0,165,0,122,0,128,0,0,0,0,0,0, |
0,0,0,0,5,129,255,243,0,13,252,167,0,131,0,137,0,143,0,150,0,105,0,113,0, |
0,0,0,0,0,0,0,0,0,0,168,1,249,0,0,0,0,3,31,0,167,0,174,0,181,0,0,0,0,0,129, |
0,0,0,0,0,0,0,0,7,72,3,106,2,182,2,2,253,147,0,0,0,145,0,103,0,145,0,97,1, |
217,0,0,2,141,3,65,0,68,5,17,0,0,0,44,0,44,0,44,0,44,1,22,1,96,2,4,3,4,3, |
230,4,240,5,14,5,84,5,158,5,246,6,50,6,114,6,144,6,178,6,218,7,80,7,150,8, |
32,8,222,9,68,9,226,10,140,10,206,11,158,12,80,12,126,12,200,13,18,13,74, |
13,146,14,20,15,100,16,22,16,172,17,64,17,160,17,222,18,40,18,202,19,22,19, |
96,19,194,20,44,20,88,21,184,22,64,22,182,23,26,23,192,24,94,25,40,26,38, |
26,146,27,42,29,162,30,254,32,64,32,148,32,190,32,242,33,28,34,172,34,202, |
34,244,35,160,36,54,36,172,37,54,37,166,38,32,38,238,39,88,39,166,40,102, |
41,0,41,68,42,246,43,100,43,212,44,112,45,20,45,98,46,16,46,114,46,230,48, |
52,50,86,51,226,53,124,54,24,54,136,55,126,55,240,56,112,57,142,58,18,58, |
196,59,100,59,234,60,238,62,28,62,144,63,134,64,72,64,168,64,210,65,178,65, |
200,66,36,66,110,66,232,67,126,67,170,68,42,68,106,68,138,68,244,69,48,69, |
166,70,14,70,48,70,90,70,124,71,8,71,32,71,56,71,80,71,104,71,130,71,154, |
72,14,72,34,72,58,72,82,72,106,72,132,72,156,72,178,72,200,72,224,73,80,73, |
104,73,128,73,152,73,176,73,200,73,226,74,68,74,252,75,20,75,44,75,68,75, |
94,75,118,75,212,76,154,76,178,76,202,76,226,76,250,77,20,77,46,78,38,78, |
58,78,82,78,106,78,130,78,156,78,180,78,202,78,224,78,248,79,172,79,196,79, |
220,79,244,80,12,80,36,80,62,80,126,81,26,81,50,81,74,81,98,81,124,81,148, |
82,24,82,50,82,74,82,98,82,122,82,146,82,166,82,186,82,210,82,234,83,2,83, |
26,83,50,83,70,83,94,83,118,83,142,83,164,83,172,84,74,84,98,84,122,84,146, |
84,170,84,194,84,214,84,234,84,254,85,22,85,46,85,70,85,94,85,118,85,142, |
85,166,85,186,85,206,85,230,85,254,86,22,86,142,87,20,87,42,87,64,87,88,87, |
110,87,132,87,154,87,172,87,192,87,216,88,170,88,182,88,210,88,234,89,228, |
89,248,90,12,90,124,90,148,90,170,90,190,90,210,90,232,91,22,91,42,91,62, |
91,150,91,224,91,248,92,16,92,36,92,56,92,80,92,104,92,116,93,20,93,164,93, |
188,93,212,93,236,94,4,94,30,94,56,94,216,95,154,95,178,95,202,95,222,95, |
242,96,10,96,34,96,58,96,82,96,106,96,130,96,150,96,170,96,194,96,218,96, |
238,98,112,98,136,98,158,98,238,99,96,99,120,99,144,99,168,99,192,99,216, |
99,240,100,10,100,36,100,62,100,88,100,122,100,142,100,166,100,190,100,214, |
100,238,101,8,101,32,101,56,101,80,101,100,101,124,101,148,101,244,102,108, |
103,104,103,140,103,164,103,188,103,212,103,236,104,34,104,88,104,142,104, |
214,104,238,105,86,105,162,106,244,107,70,107,118,107,188,107,248,109,10, |
109,50,109,112,109,172,109,206,112,188,112,236,114,22,114,30,114,38,114,82, |
114,208,114,216,114,224,114,232,115,138,115,146,115,154,116,34,116,42,116, |
50,116,116,116,124,116,182,116,190,117,56,117,64,117,72,117,234,117,242,118, |
140,119,78,119,102,120,194,120,218,120,242,121,10,121,36,121,64,122,30,122, |
212,123,118,124,16,124,186,125,114,125,218,126,124,127,28,127,136,128,94, |
128,208,130,6,130,234,130,242,131,112,131,246,132,174,133,52,133,156,134, |
4,134,138,135,74,135,188,136,108,136,134,136,160,136,184,136,208,136,232, |
137,66,137,198,137,222,138,142,138,150,138,158,138,182,138,190,139,116,139, |
224,140,78,140,102,140,126,140,198,140,206,141,66,141,74,141,82,141,224,141, |
232,142,210,143,168,144,10,144,34,144,152,145,30,145,38,145,46,145,54,145, |
108,145,116,145,124,145,132,146,12,146,156,146,164,146,226,147,78,147,158, |
147,250,148,88,148,206,149,44,149,214,150,112,151,26,151,34,151,198,152,86, |
152,130,152,254,153,6,153,250,154,160,155,34,155,58,155,200,156,80,157,2, |
157,96,157,104,157,178,157,186,157,194,157,250,158,2,158,250,159,2,159,72, |
159,160,159,242,160,86,160,184,161,28,161,134,162,24,162,150,163,6,163,32, |
163,192,163,216,164,106,164,114,164,232,165,2,165,10,165,228,166,90,166,222, |
166,246,167,14,167,100,167,148,167,194,167,218,167,242,168,10,168,34,168, |
60,168,86,168,110,168,134,168,168,168,202,168,236,168,248,169,40,169,90,169, |
140,169,188,170,18,170,114,170,208,171,12,171,102,171,172,171,238,174,134, |
174,168,174,186,174,246,175,46,175,70,175,90,175,126,175,232,176,60,176,252, |
178,100,179,50,180,4,180,178,181,136,182,32,182,224,183,78,183,128,183,178, |
183,228,184,14,184,60,184,106,184,152,184,198,185,14,185,86,185,166,186,118, |
187,22,187,70,187,184,187,214,188,72,188,226,188,250,189,52,190,108,191,92, |
191,212,192,8,192,96,192,184,192,230,193,0,193,54,193,116,193,140,193,166, |
193,200,193,234,194,12,194,46,194,84,194,122,194,160,194,198,194,248,195, |
30,195,72,195,118,195,166,195,224,196,14,196,62,196,120,196,166,196,214,197, |
16,197,62,197,110,197,168,197,220,198,18,198,86,198,138,198,194,199,8,199, |
62,199,114,199,184,199,238,200,34,200,106,200,178,200,252,201,88,201,112, |
201,136,201,160,201,184,201,208,203,232,205,196,207,132,207,146,207,178,207, |
206,207,246,208,4,208,18,208,32,208,46,208,60,208,106,208,188,208,238,209, |
32,209,114,209,180,210,100,210,228,211,148,212,14,212,166,213,6,213,140,213, |
224,214,26,214,102,214,220,215,70,215,164,215,246,216,8,216,68,216,164,217, |
34,217,88,218,12,218,74,218,114,218,160,218,200,218,242,219,40,219,94,219, |
130,219,208,220,20,220,80,0,0,0,2,0,68,0,0,2,100,5,85,0,3,0,7,0,46,177,1, |
0,47,60,178,7,4,8,237,50,177,6,5,220,60,178,3,2,8,237,50,0,177,3,0,47,60, |
178,5,4,8,237,50,178,7,6,9,252,60,178,1,2,8,237,50,51,17,33,17,37,33,17,33, |
68,2,32,254,36,1,152,254,104,5,85,250,171,68,4,205,0,0,0,2,0,185,0,0,1,127, |
5,129,0,3,0,7,1,172,64,158,3,91,2,2,150,7,166,7,2,7,150,57,4,73,4,89,4,3, |
4,64,23,27,72,6,4,1,11,4,38,9,1,201,9,217,9,2,118,9,166,9,2,25,9,41,9,2,6, |
9,1,215,73,9,1,38,9,1,217,9,1,118,9,1,41,9,1,6,9,1,121,9,1,86,9,1,9,9,1,163, |
169,9,1,130,9,1,84,9,100,9,116,9,3,137,9,1,98,9,114,9,2,68,9,84,9,2,34,9, |
50,9,2,20,9,1,2,9,1,242,9,1,212,9,228,9,2,178,9,194,9,2,148,9,164,9,2,114, |
9,130,9,2,84,9,100,9,2,66,9,1,20,9,36,9,52,9,3,2,9,1,110,9,184,255,128,64, |
17,102,109,72,73,9,1,9,64,94,98,72,45,9,61,9,2,9,184,1,0,64,153,85,88,72, |
9,128,81,84,72,125,9,141,9,157,9,3,95,9,111,9,2,9,128,71,75,72,9,192,67,70, |
72,9,128,63,66,72,125,9,1,91,9,107,9,2,61,9,77,9,2,25,9,41,9,2,11,9,1,55, |
235,9,251,9,2,205,9,221,9,2,171,9,187,9,2,9,64,45,48,72,59,9,75,9,91,9,3, |
29,9,45,9,2,1,203,9,219,9,235,9,3,159,9,175,9,191,9,3,27,9,43,9,59,9,107, |
9,123,9,5,15,9,1,2,127,9,143,9,159,9,191,9,207,9,5,64,9,96,9,2,15,9,31,9, |
2,7,112,1,1,95,1,1,1,5,156,4,2,3,0,63,47,253,206,93,93,1,94,93,93,93,95,113, |
113,113,113,95,114,114,43,114,114,114,94,93,93,93,93,93,43,43,43,113,113, |
43,43,114,43,114,43,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
114,114,114,94,93,93,93,113,113,113,113,114,114,94,93,93,93,93,113,47,94, |
93,43,93,237,113,51,47,237,49,48,1,35,3,51,3,53,51,21,1,103,148,24,196,198, |
194,1,141,3,244,250,127,201,201,0,0,2,0,87,3,198,2,128,5,129,0,3,0,7,0,104, |
64,33,48,3,1,128,3,1,3,16,2,32,2,96,2,112,2,128,2,5,96,2,112,2,2,80,2,96, |
2,176,2,192,2,4,2,184,255,192,179,37,40,72,2,184,255,192,64,32,25,28,72,2, |
48,7,1,128,7,1,7,111,6,127,6,143,6,3,47,6,63,6,2,6,5,32,0,1,0,6,2,3,0,63, |
51,205,93,50,1,47,113,114,205,93,113,220,43,43,93,113,114,205,93,113,49,48, |
1,35,3,51,1,35,3,51,2,106,142,20,184,254,121,141,21,184,3,198,1,187,254,69, |
1,187,0,0,0,2,0,9,0,0,4,105,5,121,0,27,0,31,0,214,64,134,90,25,1,90,21,1, |
68,14,1,68,19,1,54,19,1,68,30,1,38,30,54,30,2,68,23,1,38,23,54,23,2,3,16, |
1,8,29,28,21,20,9,20,20,11,14,15,18,19,10,9,19,12,16,4,10,4,1,0,25,24,5,24, |
24,27,3,3,7,30,31,22,23,6,23,5,6,4,7,8,11,4,12,13,1,14,29,30,4,13,0,15,28, |
31,4,16,17,18,21,22,25,4,17,16,13,1,208,13,1,79,17,143,17,159,17,3,63,17, |
79,17,2,13,17,13,17,5,20,23,24,3,19,3,6,9,10,3,5,0,47,23,51,63,23,51,18,57, |
57,47,47,93,113,93,113,17,23,51,16,205,23,50,17,23,51,16,205,23,50,1,47,51, |
51,135,192,192,192,192,1,23,51,16,135,192,192,192,192,1,47,23,51,135,192, |
192,192,192,1,51,16,135,192,192,192,192,49,48,1,93,93,93,93,93,93,93,93,93, |
93,1,3,33,21,33,3,35,19,33,3,35,19,35,53,51,19,35,53,33,19,51,3,33,19,51, |
3,51,21,33,3,33,19,3,128,78,1,4,254,229,88,110,86,254,149,84,110,84,201,225, |
78,252,1,18,89,110,88,1,107,88,110,88,211,253,64,80,1,106,78,3,117,254,143, |
108,254,104,1,152,254,104,1,152,108,1,113,108,1,152,254,104,1,152,254,104, |
108,254,143,1,113,0,3,0,22,255,114,4,82,5,236,0,48,0,59,0,70,1,46,64,92,154, |
14,1,154,13,1,150,68,1,133,39,1,138,57,154,57,2,137,53,153,53,2,132,37,1, |
118,6,134,6,150,6,3,70,63,86,63,134,63,3,52,38,100,38,116,38,3,37,2,1,25, |
27,1,24,34,55,3,47,9,21,65,3,32,48,1,48,48,16,49,30,111,29,41,111,0,49,32, |
49,2,0,49,32,49,48,49,80,49,112,49,5,8,3,49,184,255,192,179,29,35,72,49,184, |
255,192,64,117,17,22,72,49,4,111,3,64,16,24,72,3,60,111,16,33,66,115,207, |
54,1,157,54,1,5,136,54,1,120,10,216,10,2,199,34,215,34,2,182,34,1,135,34, |
167,34,2,215,65,1,166,65,1,119,65,1,60,16,65,34,10,54,41,49,8,0,125,30,141, |
30,2,26,30,1,30,24,22,64,19,23,72,22,15,21,47,21,63,21,95,21,4,21,55,9,115, |
47,148,4,164,4,2,112,4,128,4,2,5,4,21,4,85,4,101,4,4,46,4,0,0,47,50,50,93, |
93,93,205,237,50,47,93,205,43,51,51,93,93,18,23,57,93,93,93,93,93,93,93,93, |
95,93,93,237,50,1,47,237,214,43,237,47,43,43,95,94,93,113,253,212,237,17, |
18,57,47,114,23,51,205,23,50,49,48,93,0,93,93,93,93,93,93,1,93,93,93,0,93, |
1,93,37,46,1,39,55,30,3,23,17,39,46,3,53,52,62,2,55,53,51,21,30,3,23,7,46, |
1,39,17,30,5,21,20,14,2,7,21,35,1,52,46,2,39,17,62,3,1,20,30,2,23,17,14,3, |
2,6,217,245,34,170,11,46,78,113,78,20,77,148,116,71,64,115,158,95,124,100, |
145,102,66,20,174,20,122,117,59,114,103,88,64,36,56,114,175,119,124,1,160, |
47,81,106,58,65,108,77,42,253,92,40,70,95,55,72,100,61,27,20,9,185,165,37, |
53,87,64,39,5,1,240,5,18,50,83,128,98,84,124,83,44,4,131,131,5,45,80,115, |
75,33,94,105,11,254,67,14,30,41,56,79,109,72,77,131,100,62,6,162,2,24,63, |
80,51,32,15,254,44,4,31,56,81,2,197,54,74,50,33,14,1,165,4,33,52,68,0,0,0, |
0,5,0,73,255,244,6,212,5,141,0,19,0,23,0,43,0,63,0,83,0,212,64,11,118,20, |
134,20,2,121,22,137,22,2,42,184,255,232,64,14,8,12,72,37,24,8,12,72,32,24, |
8,12,72,26,184,255,232,179,8,12,72,17,184,255,232,179,8,12,72,13,184,255, |
232,64,18,8,12,72,7,24,8,12,72,3,24,8,12,72,22,23,20,21,21,184,255,240,64, |
84,23,16,23,21,23,21,0,39,54,180,10,178,0,180,0,44,16,44,32,44,3,0,44,64, |
44,2,0,44,16,44,32,44,80,44,96,44,112,44,224,44,240,44,8,44,64,180,29,178, |
74,180,15,39,1,239,39,255,39,2,39,64,10,13,72,39,79,182,34,184,69,182,24, |
4,22,3,21,18,49,182,15,184,59,182,5,19,0,63,237,244,237,63,63,63,237,244, |
237,1,47,43,113,114,237,244,237,47,93,113,114,253,244,237,17,18,57,57,47, |
47,56,56,17,51,17,51,49,48,0,43,43,43,43,43,43,43,43,1,93,93,1,20,14,2,35, |
34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2, |
53,52,62,2,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,6,212,51,87,116,66,66,115,85,49,48,86,117,68,66,115, |
85,50,251,59,155,3,154,157,251,223,64,114,86,49,50,85,116,66,67,116,85,49, |
49,86,118,4,250,22,43,63,40,42,64,44,22,23,43,63,41,39,63,44,24,251,240,22, |
42,62,40,43,65,44,22,23,43,64,42,38,62,44,24,1,178,125,171,105,45,45,104, |
171,126,133,174,103,41,41,103,174,253,201,5,129,12,41,102,172,131,126,172, |
107,46,46,106,172,127,131,172,102,41,252,37,99,131,78,32,33,78,131,98,95, |
128,79,34,34,79,128,2,124,98,130,78,32,33,78,130,97,95,130,79,34,34,79,130, |
0,0,3,0,72,255,236,5,54,5,137,0,57,0,73,0,89,1,20,64,73,137,1,1,140,36,1, |
123,42,139,42,2,98,82,114,82,130,82,3,102,71,1,127,78,1,91,78,1,73,43,89, |
43,105,43,3,54,48,134,48,2,37,40,1,44,35,124,35,140,35,3,28,5,44,5,60,5,92, |
5,4,10,10,26,10,42,10,3,10,2,26,2,42,2,3,31,184,255,232,64,56,9,13,72,10, |
25,26,25,42,25,3,48,41,38,69,4,54,66,73,23,33,73,58,45,44,140,74,1,74,77, |
18,3,23,3,58,44,80,23,1,3,44,1,23,58,44,44,58,23,3,13,15,54,1,175,54,1,54, |
184,255,192,64,61,9,12,72,54,80,72,63,13,79,13,2,13,143,3,1,141,77,1,98,69, |
114,69,2,54,69,70,69,2,3,74,48,41,77,44,38,18,69,9,8,63,81,144,28,1,192,28, |
1,15,28,63,28,2,28,85,81,8,22,51,80,0,22,0,63,237,63,237,47,93,93,113,237, |
18,23,57,93,93,93,93,1,47,93,237,47,43,93,113,18,23,57,47,47,47,0,93,1,93, |
17,18,57,17,23,57,93,16,205,16,237,16,237,17,23,57,49,48,93,43,0,93,93,93, |
93,1,93,93,93,0,93,93,93,93,1,93,0,93,93,5,34,38,39,14,3,35,34,46,2,53,52, |
62,2,55,46,3,53,52,62,2,51,50,30,2,21,20,14,2,7,30,1,23,62,1,55,23,14,1,7, |
30,1,51,50,54,55,21,14,1,1,52,46,2,35,34,6,21,20,22,23,62,3,3,46,1,39,14, |
1,21,20,30,2,51,50,62,2,4,169,96,144,58,30,76,93,109,64,117,171,110,53,51, |
91,126,75,18,29,22,12,40,85,133,93,73,123,90,50,66,112,148,83,62,146,85,61, |
81,29,145,35,107,70,53,106,49,32,59,26,28,75,254,150,27,48,69,42,96,100,37, |
28,65,116,86,50,74,89,164,66,113,123,35,72,109,73,44,79,68,55,12,66,61,26, |
48,38,23,60,105,143,83,79,129,105,83,33,34,77,78,78,35,66,115,85,49,38,72, |
106,68,75,117,92,75,33,114,201,97,90,199,121,43,139,227,103,54,44,7,9,135, |
11,11,4,121,37,60,43,23,103,91,59,129,56,26,55,65,79,252,158,105,230,122, |
48,148,105,55,95,71,41,19,30,38,0,0,1,0,104,3,198,1,32,5,129,0,3,0,33,64, |
19,48,3,1,128,3,1,3,16,2,32,2,2,2,32,0,1,0,2,3,0,63,205,93,1,47,93,205,93, |
113,49,48,1,35,3,51,1,10,141,21,184,3,198,1,187,0,1,0,127,254,88,2,158,5, |
204,0,22,0,66,64,45,135,13,1,135,9,1,88,20,1,88,2,1,17,24,14,17,72,5,24,14, |
17,72,16,6,16,16,6,128,6,2,6,11,242,0,0,16,0,32,0,3,0,16,27,5,0,0,63,63,1, |
47,93,237,204,93,56,50,49,48,43,43,93,93,93,93,19,52,62,2,55,51,14,3,21,20, |
30,2,23,35,46,3,53,127,42,90,140,97,174,94,137,88,43,43,88,137,94,174,97, |
140,90,42,2,20,139,254,234,220,105,105,221,235,254,139,139,254,236,220,105, |
105,220,234,253,140,0,0,0,1,0,12,254,88,2,43,5,204,0,22,0,72,64,13,136,13, |
1,136,9,1,87,20,1,87,2,1,17,184,255,232,179,14,17,72,5,184,255,232,180,14, |
17,72,16,6,184,255,240,64,16,31,6,143,6,2,6,0,242,143,11,1,11,16,0,5,27,0, |
63,63,1,47,93,253,204,93,56,50,49,48,43,43,93,93,93,93,1,20,14,2,7,35,62, |
3,53,52,46,2,39,51,30,3,21,2,43,42,90,140,97,174,94,137,88,43,43,88,137,94, |
174,97,140,90,42,2,16,140,253,234,220,105,105,220,236,254,139,139,254,235, |
221,105,105,220,234,254,139,0,0,0,0,1,0,33,2,178,2,253,5,129,0,14,0,107,64, |
75,77,5,93,5,109,5,3,75,4,91,4,107,4,3,66,8,82,8,2,67,7,83,7,2,0,6,12,3,13, |
95,4,1,15,4,1,4,3,32,2,48,2,2,2,14,47,10,63,10,2,10,9,8,191,13,207,13,2,16, |
13,32,13,2,13,240,5,1,223,5,1,0,5,1,5,14,3,0,63,204,93,93,93,1,47,93,93,204, |
51,204,93,221,204,93,51,204,113,114,18,23,57,49,48,93,93,93,93,1,37,23,5, |
23,7,11,1,39,55,37,55,5,3,51,1,200,1,8,45,254,230,185,119,150,156,119,189, |
254,232,45,1,11,12,136,4,90,103,132,73,250,72,1,2,255,0,72,248,73,134,107, |
1,41,0,0,0,1,0,100,0,180,4,71,4,158,0,11,0,71,64,46,211,11,1,133,11,1,220, |
4,1,138,4,1,9,1,170,6,16,2,32,2,2,2,217,2,1,56,2,136,2,2,2,0,4,173,9,214, |
7,1,55,7,135,7,2,7,5,179,0,63,51,93,93,51,237,50,50,93,93,1,47,93,51,237, |
50,49,48,93,93,93,93,1,17,35,17,33,53,33,17,51,17,33,21,2,159,147,254,88, |
1,168,147,1,168,2,96,254,84,1,172,146,1,172,254,84,146,0,0,1,0,184,254,250, |
1,129,0,219,0,12,0,78,185,0,4,255,224,183,11,17,72,10,151,0,150,7,184,255, |
192,64,22,9,17,72,7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2, |
12,184,255,192,64,14,38,41,72,12,64,13,16,72,12,7,168,0,155,11,0,47,253,228, |
1,47,43,43,93,113,114,51,43,253,237,49,48,43,37,21,20,14,2,7,35,62,1,53,35, |
53,1,129,9,20,29,20,123,45,49,88,219,168,53,87,75,66,32,65,132,65,219,0,0, |
0,0,1,0,91,1,208,2,79,2,112,0,3,0,33,64,20,0,2,64,2,112,2,3,2,0,0,187,159, |
1,207,1,2,47,1,1,1,0,47,93,113,237,1,47,47,93,49,48,19,53,33,21,91,1,244, |
1,208,160,160,0,0,0,1,0,187,0,0,1,126,0,219,0,3,0,46,64,32,3,150,0,0,144, |
0,2,64,0,80,0,176,0,224,0,240,0,5,144,0,160,0,2,0,64,13,16,72,0,1,155,0,0, |
47,237,1,47,43,93,113,114,237,49,48,51,53,51,21,187,195,219,219,0,1,0,0,255, |
236,2,57,5,204,0,3,0,51,64,26,121,0,137,0,2,1,24,13,17,72,41,2,1,2,16,0,2, |
16,2,32,2,128,2,4,2,0,184,255,240,180,0,1,0,0,19,0,63,63,1,47,56,205,93,56, |
49,48,93,43,93,21,1,51,1,1,155,158,254,105,20,5,224,250,32,0,0,2,0,80,255, |
236,4,35,5,150,0,19,0,39,0,112,64,80,89,37,105,37,2,70,33,86,33,102,33,3, |
86,27,102,27,2,89,23,105,23,2,4,18,1,118,17,134,17,2,121,13,137,13,2,11,12, |
1,11,8,1,121,7,137,7,2,118,3,134,3,2,4,2,1,7,0,110,64,144,20,160,20,2,20, |
41,128,30,110,63,10,1,10,25,115,15,7,35,115,5,25,0,63,237,63,237,1,47,93, |
237,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93,93,93,93,93,1,20, |
2,14,1,35,34,46,1,2,53,52,18,62,1,51,50,30,1,18,7,52,46,2,35,34,14,2,21,20, |
30,2,51,50,62,2,4,35,77,133,180,102,103,178,131,75,75,132,180,106,101,177, |
132,76,183,40,78,113,72,76,116,79,40,41,79,114,73,71,114,79,43,2,193,203, |
254,235,171,74,74,170,1,21,204,213,1,23,166,67,67,166,254,233,213,168,223, |
133,55,56,133,223,167,162,222,135,59,59,135,222,0,1,0,156,0,0,4,15,5,129, |
0,10,0,94,64,32,32,9,128,9,2,9,9,8,110,2,144,4,1,4,47,1,143,1,2,1,1,4,6,3, |
0,2,16,2,2,7,2,5,184,255,240,64,26,16,22,72,68,5,84,5,100,5,3,5,4,3,16,16, |
22,72,4,3,6,6,8,1,116,0,24,0,63,237,50,63,51,51,43,47,51,93,43,1,47,94,93, |
23,51,47,93,47,93,16,237,50,47,93,49,48,51,53,33,17,5,53,37,51,17,33,21,156, |
1,103,254,194,1,77,166,1,87,153,4,60,227,170,229,251,24,153,0,0,0,1,0,103, |
0,0,4,12,5,150,0,40,0,161,64,77,117,4,1,117,26,133,26,2,122,16,138,16,2,101, |
37,1,86,37,1,41,33,89,33,105,33,3,105,35,1,28,35,1,25,21,1,117,27,133,27, |
2,6,27,1,39,29,110,64,8,64,38,42,72,64,8,1,143,8,1,8,42,128,18,110,19,116, |
38,132,38,2,19,38,16,0,32,0,2,0,184,255,192,64,31,30,38,72,0,8,38,142,18, |
1,92,18,108,18,124,18,3,10,18,26,18,2,18,13,115,24,7,1,38,116,0,24,0,63,237, |
57,63,237,51,93,93,93,18,57,1,47,43,93,51,51,93,47,237,26,16,220,93,113,43, |
26,237,50,49,48,93,93,0,93,93,93,93,1,93,93,0,93,93,93,51,53,62,5,53,52,46, |
2,35,34,14,2,7,39,62,3,51,50,30,2,21,20,14,6,7,33,21,103,51,147,162,159,128, |
79,36,68,95,58,54,95,74,47,7,184,9,66,116,163,107,105,164,113,60,51,85,112, |
122,124,109,86,24,2,223,127,117,179,145,124,124,136,86,60,91,62,31,30,60, |
89,59,17,76,134,101,58,50,98,144,94,71,128,116,108,103,101,102,105,57,153, |
0,0,0,0,1,0,78,255,236,4,25,5,150,0,59,0,216,64,149,122,3,138,3,2,117,2,133, |
2,2,117,58,133,58,2,117,51,133,51,2,117,47,133,47,2,117,13,133,13,2,122,37, |
138,37,2,91,17,107,17,2,26,41,1,21,8,1,118,46,134,46,2,7,46,1,73,39,1,38, |
110,54,25,49,95,25,111,25,2,39,25,39,25,10,19,32,110,49,49,0,110,64,31,19, |
47,19,159,19,3,144,19,1,19,61,128,11,110,239,10,1,63,10,1,10,54,25,116,26, |
26,16,141,38,1,92,38,108,38,124,38,3,10,38,26,38,2,38,35,115,44,7,16,115, |
129,11,1,83,11,99,11,115,11,3,20,11,1,5,11,1,11,5,25,0,63,51,93,93,93,93, |
237,63,237,51,93,93,93,18,57,47,237,57,1,47,93,113,237,26,16,220,93,113,26, |
237,50,47,237,17,18,57,57,47,47,93,17,18,57,237,113,49,48,0,93,93,93,93,1, |
93,0,93,93,1,93,93,93,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,14, |
2,7,21,30,3,4,25,63,121,179,115,131,179,116,58,9,186,8,43,74,108,74,136,155, |
69,103,121,51,102,98,51,110,91,59,133,131,119,147,12,181,11,80,123,158,89, |
118,170,108,51,34,72,111,78,85,126,82,41,1,133,97,152,105,55,65,107,137,73, |
17,56,92,66,36,134,132,78,95,53,18,156,21,55,94,73,113,131,122,111,14,93, |
138,91,45,59,101,136,77,62,108,86,62,16,4,9,59,88,112,0,0,2,0,47,0,0,4,55, |
5,129,0,10,0,23,0,117,64,80,154,15,1,153,6,1,136,6,1,133,16,149,16,2,118, |
16,1,24,22,1,118,22,134,22,150,22,3,22,5,64,12,21,72,5,91,10,107,10,123,10, |
3,10,8,1,111,23,6,31,2,1,112,2,224,2,2,0,2,16,2,48,2,80,2,224,2,5,8,2,0,4, |
115,8,22,22,1,11,6,6,1,24,0,63,63,51,18,57,47,51,237,50,1,47,94,93,113,114, |
51,51,237,50,50,93,47,43,51,93,113,49,48,93,93,93,93,0,93,1,17,35,17,33,53, |
1,51,17,51,21,1,14,3,7,1,14,3,7,33,3,113,170,253,104,2,133,189,198,254,144, |
2,16,20,21,8,254,151,5,19,20,20,6,1,242,1,63,254,193,1,63,140,3,182,252,76, |
142,3,119,5,29,36,37,12,253,236,8,26,27,26,7,0,1,0,82,255,236,4,29,5,129, |
0,44,0,181,64,28,86,13,102,13,134,13,3,85,2,101,2,2,90,3,106,3,2,85,43,101, |
43,2,85,42,101,42,2,38,184,255,216,64,89,14,17,72,21,8,1,6,10,1,25,36,153, |
36,2,137,36,217,36,2,3,68,33,1,6,35,32,14,17,72,35,11,0,110,64,31,21,1,47, |
21,159,21,2,144,21,1,21,46,128,36,31,37,110,33,32,32,11,110,208,10,1,63,10, |
1,10,26,115,40,40,16,36,116,33,6,16,115,115,11,131,11,2,103,11,1,22,11,1, |
11,5,25,0,63,51,93,93,93,237,63,237,18,57,47,237,1,47,93,113,237,51,47,51, |
237,50,50,26,16,220,93,113,114,26,237,17,57,43,49,48,95,113,95,113,114,0, |
93,1,93,0,43,93,1,93,0,93,1,93,0,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50, |
62,2,53,52,46,2,35,34,14,2,7,35,19,33,21,33,3,62,1,51,50,30,2,4,29,64,126, |
187,123,111,165,114,67,14,182,11,40,69,101,72,70,114,81,44,42,78,113,72,45, |
76,65,53,23,176,47,3,33,253,131,27,48,144,99,105,168,118,64,1,203,106,176, |
127,70,52,91,122,70,21,40,75,59,35,43,84,122,79,65,109,79,44,16,28,37,20, |
2,246,153,254,65,37,53,64,117,162,0,0,0,0,2,0,104,255,236,4,25,5,150,0,36, |
0,56,0,175,64,48,140,21,1,122,22,138,22,2,89,7,105,7,2,90,3,106,3,122,3,3, |
84,2,100,2,2,84,35,100,35,116,35,3,84,34,100,34,116,34,3,53,30,69,30,2,133, |
50,1,50,184,255,240,64,45,10,13,72,132,26,1,37,26,53,26,69,26,117,26,4,22, |
26,1,21,111,20,20,0,110,64,47,37,159,37,2,144,37,1,37,58,128,47,29,110,16, |
10,32,10,2,10,184,255,192,64,24,30,38,72,10,29,42,117,32,32,52,24,115,25, |
21,153,21,2,21,15,7,52,115,5,25,0,63,237,63,51,93,237,18,57,47,237,50,1,47, |
43,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,93,93,43,93,0,93, |
93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,46,1,2,53,52,18,62,1,51,50,30,2, |
23,7,46,1,35,34,14,2,21,62,1,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,25,59,115,170,111,123,184,122,61,69,130,187,118,72,126,103,78,23, |
172,28,123,81,74,120,84,45,49,178,115,96,156,111,61,183,36,72,106,70,49,100, |
81,51,40,75,106,66,65,103,72,38,1,205,106,177,127,71,94,177,1,1,164,188,1, |
28,190,96,30,67,110,80,31,91,81,70,139,210,140,91,95,62,117,167,112,73,118, |
83,45,29,65,106,76,78,135,100,58,45,85,122,0,0,1,0,105,0,0,4,12,5,129,0,14, |
0,68,64,45,122,11,138,11,2,105,11,1,5,110,6,6,0,80,12,1,16,12,32,12,2,12, |
11,95,0,1,0,0,32,0,64,0,96,0,128,0,5,0,0,12,116,13,6,5,24,0,63,63,237,50, |
1,47,93,113,51,47,93,113,18,57,47,237,49,48,93,93,1,6,10,2,21,35,52,26,2, |
55,33,53,33,4,12,106,178,128,71,188,80,136,180,101,253,11,3,163,4,239,162, |
254,213,254,209,254,193,180,169,1,69,1,57,1,46,147,153,0,0,0,0,3,0,89,255, |
236,4,26,5,150,0,41,0,61,0,81,0,191,64,132,117,40,133,40,2,117,33,133,33, |
2,117,29,133,29,2,117,28,133,28,2,117,24,133,24,2,122,23,138,23,2,122,19, |
138,19,2,122,12,1,122,8,138,8,2,122,7,138,7,2,122,3,138,3,2,117,2,133,2,2, |
85,69,101,69,2,85,75,101,75,2,90,65,106,65,2,52,110,21,42,110,31,15,36,31, |
79,21,1,21,31,21,31,10,0,110,64,15,62,31,62,2,31,62,47,62,159,62,3,144,62, |
1,62,83,128,72,110,208,10,1,10,36,15,67,117,57,57,77,47,117,26,7,77,117,5, |
25,0,63,237,63,237,18,57,47,237,57,57,1,47,113,237,26,16,220,93,113,114,26, |
237,17,57,57,47,47,113,18,57,57,16,237,16,237,49,48,93,93,93,93,0,93,93,1, |
93,93,93,93,0,93,93,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3, |
53,52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,3,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,26,57,117,182, |
124,124,181,119,57,47,79,101,54,59,93,63,33,57,112,166,109,115,169,111,54, |
33,63,93,61,61,104,76,44,222,27,62,100,73,71,98,63,28,22,58,102,80,85,103, |
55,17,35,28,68,115,86,79,111,69,32,32,70,114,81,82,112,68,29,1,137,90,151, |
110,62,62,109,151,89,77,120,87,53,9,4,14,62,87,106,59,74,131,99,57,58,99, |
132,74,58,106,87,61,12,4,10,53,87,120,2,76,53,88,63,35,35,63,88,53,42,88, |
72,46,46,72,88,253,163,51,95,73,45,45,74,97,52,65,107,77,42,42,77,109,0,0, |
0,2,0,96,255,236,4,18,5,150,0,36,0,56,0,190,64,105,169,39,1,163,11,1,149, |
12,165,12,2,170,17,1,153,17,1,116,35,132,35,2,116,32,132,32,148,32,3,122, |
31,138,31,154,31,3,122,27,138,27,154,27,3,123,26,139,26,155,26,3,90,40,106, |
40,2,89,2,105,2,2,16,24,10,13,72,54,8,1,37,0,110,47,19,63,19,2,79,19,191, |
19,2,0,19,32,19,48,19,64,19,176,19,5,7,19,58,11,111,10,10,47,110,32,29,1, |
29,184,255,192,64,27,32,38,72,29,19,52,115,95,24,111,24,2,24,24,5,42,115, |
34,7,14,115,23,11,1,11,5,25,0,63,51,93,237,63,237,17,57,47,93,237,50,1,47, |
43,93,237,51,47,237,16,220,94,93,113,114,237,51,49,48,93,43,93,93,0,93,1, |
93,93,0,93,93,1,93,93,0,93,93,1,93,1,20,2,14,1,35,34,46,2,39,55,30,1,51,50, |
62,2,55,14,3,35,34,46,2,53,52,62,2,51,50,18,7,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,4,18,71,132,189,118,81,130,102,72,22,172,28,119,91,73,121,85, |
48,2,21,73,93,108,55,96,155,108,59,63,120,175,111,235,242,196,37,73,107,70, |
65,104,72,39,35,70,104,69,50,103,83,53,2,221,188,254,229,188,94,33,70,112, |
79,27,91,85,69,138,208,140,47,74,51,27,69,124,175,107,109,176,123,66,254, |
164,175,78,138,102,59,46,85,122,75,71,122,89,51,34,70,107,0,0,0,0,2,0,187, |
0,0,1,126,4,58,0,3,0,7,0,54,64,36,3,7,150,0,0,4,144,4,2,64,4,80,4,224,4,240, |
4,4,144,4,160,4,2,4,64,13,16,72,4,5,156,4,0,156,1,15,0,63,237,47,237,1,47, |
43,93,113,114,51,237,50,49,48,19,53,51,21,3,53,51,21,187,195,195,195,3,107, |
207,207,252,149,207,207,0,0,0,2,0,184,254,250,1,129,4,58,0,12,0,16,0,89,185, |
0,4,255,224,64,10,11,17,72,16,10,151,0,150,13,7,184,255,192,64,22,9,17,72, |
7,128,12,144,12,2,64,12,80,12,176,12,3,144,12,160,12,2,12,184,255,192,64, |
18,38,41,72,12,64,13,16,72,12,13,156,14,15,7,168,0,156,11,0,47,253,228,63, |
237,1,47,43,43,93,113,114,51,43,51,253,237,51,49,48,43,37,21,20,14,2,7,35, |
62,1,53,35,53,17,53,51,21,1,129,9,20,29,20,123,45,49,88,195,207,156,53,87, |
75,66,32,65,132,65,207,2,156,207,207,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106, |
185,0,5,255,216,64,17,18,22,72,3,40,18,22,72,0,40,18,22,72,137,0,1,1,184, |
255,216,64,51,18,22,72,134,1,1,6,0,2,32,2,80,2,112,2,4,2,32,0,1,0,63,6,127, |
6,143,6,3,6,48,2,112,2,128,2,3,2,1,0,15,4,63,4,111,4,159,4,207,4,5,4,0,25, |
47,93,51,51,205,93,205,93,1,24,47,93,47,93,51,49,48,0,93,43,93,43,43,43,19, |
53,1,21,9,1,21,101,3,227,252,166,3,90,2,59,205,1,162,154,254,146,254,145, |
153,0,0,0,0,2,0,100,1,88,4,71,3,236,0,3,0,7,0,70,64,49,7,64,2,96,2,2,0,2, |
32,2,112,2,208,2,4,2,4,223,0,1,32,0,1,0,4,173,31,5,47,5,95,5,111,5,223,5, |
5,5,0,173,80,1,208,1,2,15,1,1,1,0,47,93,93,237,222,93,237,1,47,93,93,51,47, |
93,113,51,49,48,19,53,33,21,1,53,33,21,100,3,227,252,29,3,227,3,88,148,148, |
254,0,148,148,0,0,0,0,1,0,101,0,154,4,72,4,170,0,6,0,106,185,0,1,255,216, |
64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137,6,1,5,184,255,216,64,51,18, |
22,72,134,5,1,0,6,32,6,80,6,112,6,4,6,3,32,0,1,0,6,5,48,4,112,4,128,4,3,4, |
63,0,127,0,143,0,3,0,15,2,63,2,111,2,159,2,207,2,5,2,0,25,47,93,205,93,205, |
93,51,51,1,24,47,93,51,47,93,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21, |
101,3,90,252,166,3,227,154,153,1,111,1,110,154,254,94,205,0,2,0,84,0,0,4, |
39,5,150,0,37,0,41,0,137,64,68,117,36,133,36,2,117,35,133,35,2,90,26,106, |
26,2,90,21,1,90,14,122,14,138,14,3,90,13,122,13,138,13,3,58,6,74,6,2,9,72, |
10,10,176,41,192,41,2,41,150,38,38,19,27,70,28,0,70,0,19,32,19,64,19,144, |
19,176,19,5,19,184,255,192,64,23,38,44,72,19,19,33,95,10,143,10,2,10,39,156, |
38,76,27,1,27,24,95,33,4,0,63,237,51,93,47,253,198,93,17,57,1,47,43,93,237, |
47,237,18,57,47,237,113,51,47,237,49,48,0,93,1,93,93,0,93,93,93,1,93,1,20, |
14,6,7,35,62,7,53,52,46,2,35,34,6,7,39,62,3,51,50,30,2,1,53,51,21,4,39,37, |
62,79,82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184, |
11,67,121,179,122,114,178,123,64,253,143,195,4,8,71,108,85,67,60,58,68,83, |
55,69,104,80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103, |
148,251,157,201,201,0,0,0,0,2,0,161,254,229,7,110,5,204,0,93,0,114,1,101, |
64,255,122,17,138,17,2,117,15,133,15,2,117,27,133,27,2,121,47,137,47,2,116, |
38,132,38,2,102,38,1,99,70,1,86,69,102,69,2,123,26,139,26,2,73,26,1,74,56, |
90,56,106,56,3,59,102,1,82,63,1,54,63,70,63,2,82,64,1,38,64,54,64,70,64,3, |
131,3,1,37,3,53,3,69,3,3,37,2,53,2,69,2,133,2,4,25,8,57,8,2,11,8,1,11,8,27, |
8,2,8,32,12,17,72,22,92,102,92,134,92,3,80,58,96,58,2,5,58,21,58,53,58,69, |
58,4,137,57,1,93,57,1,10,57,26,57,2,9,7,1,125,52,141,52,2,11,52,75,52,2,10, |
22,26,22,42,22,3,104,212,24,37,41,211,10,112,34,132,72,1,72,10,49,80,24,1, |
80,24,1,24,10,24,10,82,0,210,64,95,49,111,49,2,143,49,159,49,2,49,116,128, |
61,210,0,82,16,82,32,82,3,82,44,213,5,5,107,214,19,99,214,29,36,29,47,19, |
63,19,79,19,3,32,29,48,29,64,29,3,19,29,19,29,77,54,214,89,0,149,71,1,71, |
66,214,77,0,47,237,51,93,63,237,18,57,57,47,47,93,93,17,51,16,237,16,237, |
51,47,237,1,47,93,237,26,16,220,93,113,26,237,18,57,57,47,47,93,114,17,18, |
57,93,50,50,16,237,50,16,237,49,48,93,93,93,93,0,93,93,93,1,93,93,93,43,93, |
0,93,93,1,93,93,93,0,93,93,1,93,93,0,93,93,1,93,93,0,93,93,1,93,93,93,0,93, |
1,93,0,93,1,20,14,2,35,34,46,2,53,52,54,55,35,14,3,35,34,46,2,53,52,62,2, |
51,50,30,2,23,51,55,51,3,14,1,21,20,22,51,50,62,2,53,52,46,2,35,34,14,4,21, |
20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,62,2,36,51,50,4,22,18, |
5,52,46,2,35,34,14,2,21,20,22,51,50,62,2,55,62,1,7,110,67,118,165,97,56,79, |
50,22,2,1,6,24,69,93,117,71,84,125,81,40,71,132,185,114,60,96,73,54,18,6, |
39,156,116,19,18,43,38,62,107,79,45,83,161,238,156,134,227,184,139,94,48, |
86,165,243,158,105,182,152,120,44,55,50,135,166,196,111,190,254,217,203,105, |
63,118,170,215,0,255,144,201,1,36,191,92,253,162,34,63,89,56,86,130,87,45, |
95,99,69,120,96,70,18,9,14,2,243,144,239,172,96,27,47,64,38,15,43,12,45,89, |
69,43,58,103,141,83,120,221,169,102,27,48,67,40,160,254,6,84,120,49,48,46, |
81,142,192,112,129,222,162,92,64,116,161,192,219,115,141,238,171,96,33,48, |
57,24,112,30,63,52,33,115,206,1,28,169,139,1,0,220,180,128,70,118,200,254, |
248,155,50,84,60,33,85,138,173,87,120,136,62,102,132,71,36,80,0,0,0,0,2,0, |
4,0,0,5,82,5,129,0,7,0,20,1,18,64,206,102,2,118,2,134,2,3,102,19,118,19,134, |
19,3,105,1,121,1,137,1,3,105,20,121,20,137,20,3,115,6,131,6,2,101,6,1,124, |
5,140,5,2,106,5,1,122,0,138,0,2,57,0,89,0,105,0,3,117,3,133,3,2,54,3,86,3, |
102,3,3,90,4,1,72,4,1,85,7,1,71,7,1,19,2,3,1,20,0,21,6,37,6,53,6,3,6,6,1, |
230,6,246,6,2,26,5,42,5,58,5,3,9,5,1,233,5,249,5,2,6,5,13,13,4,26,0,42,0, |
58,0,3,9,0,1,233,0,249,0,2,0,16,7,32,7,48,7,3,32,7,1,7,7,22,21,3,37,3,53, |
3,3,6,3,1,230,3,246,3,2,3,175,4,191,4,2,4,80,22,176,22,2,48,22,96,22,144, |
22,192,22,240,22,5,47,22,1,1,2,95,20,19,19,118,13,1,13,5,3,4,0,18,0,63,50, |
63,51,93,57,47,51,237,50,1,93,93,113,47,93,51,93,113,113,17,51,47,93,113, |
51,93,113,113,18,57,61,47,51,51,93,113,113,93,113,113,18,57,57,18,57,57,49, |
48,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,3,33,3,35,1,51,9,1, |
46,3,39,14,3,7,3,33,4,143,161,253,126,162,198,2,63,217,2,54,253,174,16,29, |
22,15,1,2,14,23,29,15,180,2,15,1,156,254,100,5,129,250,127,4,2,40,82,67,45, |
5,5,46,68,82,40,254,49,0,3,0,168,0,0,4,234,5,129,0,22,0,33,0,46,0,155,64, |
108,155,24,171,24,2,147,32,1,133,32,1,147,45,1,117,45,133,45,2,122,36,138, |
36,154,36,3,5,11,21,11,37,11,3,6,2,22,2,38,2,3,171,18,1,159,18,1,107,18,123, |
18,139,18,3,18,28,13,90,23,64,13,17,72,23,23,41,0,90,64,31,34,47,34,2,175, |
34,1,34,48,128,28,41,90,0,6,16,6,64,6,3,7,6,18,40,95,127,28,1,28,28,41,27, |
95,7,3,41,95,6,18,0,63,237,63,237,18,57,47,113,237,57,1,47,94,93,237,50,26, |
16,220,93,113,26,237,18,57,47,43,237,17,57,93,93,93,49,48,93,93,0,93,93,93, |
93,93,93,1,20,14,2,35,33,17,33,50,30,2,21,20,14,2,7,30,3,1,52,38,35,33,17, |
33,50,62,2,19,52,46,2,35,33,17,33,50,62,2,4,234,84,142,188,104,253,196,2, |
0,117,184,128,67,33,67,101,67,85,131,88,46,254,238,156,148,254,191,1,65,84, |
116,72,32,81,49,92,129,80,254,156,1,115,73,123,89,50,1,141,107,151,95,44, |
5,129,39,84,129,90,59,104,85,61,15,10,58,90,119,2,66,114,98,254,66,33,61, |
86,253,190,67,94,60,28,254,4,24,60,100,0,1,0,104,255,236,5,121,5,150,0,39, |
0,173,64,79,121,14,137,14,2,117,13,133,13,2,123,37,139,37,2,106,38,1,124, |
36,140,36,2,106,36,1,106,28,1,85,7,1,90,3,1,42,29,106,29,2,134,23,1,42,23, |
106,23,2,5,8,21,8,2,5,2,21,2,2,5,91,80,26,96,26,2,175,26,191,26,2,32,26,1, |
15,26,1,26,34,16,184,255,192,64,42,7,13,72,16,16,41,32,41,1,79,35,1,35,35, |
0,95,31,4,0,15,16,15,2,48,15,64,15,112,15,128,15,192,15,208,15,6,15,15,10, |
95,21,19,0,63,237,51,47,93,113,63,237,51,47,93,1,93,17,51,47,43,51,47,93, |
93,93,113,237,49,48,93,93,93,93,93,0,93,93,1,93,93,93,93,0,93,93,1,93,1,34, |
14,2,21,20,30,2,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,120,185,125,64,69,129,187,117,82,135,109,86,33,156,38,112, |
151,191,118,171,254,255,173,86,91,175,1,0,164,225,1,46,71,181,20,68,102,137, |
4,250,80,148,208,127,127,211,152,84,43,78,107,65,78,79,136,100,57,109,195, |
1,12,159,165,1,10,187,101,176,173,60,50,91,70,42,0,2,0,168,0,0,5,101,5,129, |
0,12,0,25,0,100,64,70,169,24,1,123,24,1,172,23,1,27,23,43,23,59,23,123,23, |
4,169,16,1,27,16,43,16,59,16,123,16,4,123,15,1,153,3,1,121,2,1,0,90,64,47, |
13,1,13,27,128,64,27,1,20,90,0,6,16,6,64,6,3,7,6,19,95,7,3,20,95,6,18,0,63, |
237,63,237,1,47,94,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93, |
93,93,93,1,20,2,14,1,35,33,17,33,50,4,22,18,7,52,46,2,35,33,17,33,50,62,2, |
5,101,106,184,251,145,253,241,1,210,163,1,19,198,111,192,82,148,206,123,254, |
241,1,58,111,189,138,78,2,207,176,254,243,181,93,5,129,81,169,254,252,180, |
143,203,130,61,251,177,72,142,212,0,0,1,0,168,0,0,4,254,5,129,0,11,0,77,181, |
7,3,7,3,0,10,184,255,192,64,37,7,11,72,10,10,13,5,9,90,0,0,16,0,64,0,3,7, |
0,32,13,1,8,95,127,5,1,5,5,9,4,95,1,3,9,95,0,18,0,63,237,63,237,18,57,47, |
113,237,1,93,47,94,93,237,50,17,51,47,43,18,57,57,47,47,49,48,51,17,33,21, |
33,17,33,21,33,17,33,21,168,4,45,252,146,3,50,252,206,3,151,5,129,156,254, |
60,154,254,21,156,0,0,1,0,168,0,0,4,145,5,129,0,9,0,105,185,0,2,255,192,182, |
13,24,72,2,2,6,8,184,255,192,64,58,7,12,72,8,8,11,1,5,90,0,6,16,6,64,6,3, |
7,6,48,11,1,4,95,239,1,1,15,1,63,1,111,1,127,1,159,1,175,1,207,1,223,1,8, |
8,1,64,23,30,72,1,1,5,0,95,7,3,5,18,0,63,63,237,18,57,47,43,94,93,113,237, |
1,93,47,94,93,237,50,17,51,47,43,18,57,47,43,49,48,1,17,33,21,33,17,35,17, |
33,21,1,103,3,18,252,238,191,3,233,4,229,253,244,158,253,197,5,129,156,0, |
1,0,103,255,236,5,160,5,150,0,45,0,185,64,130,134,43,1,106,43,1,66,37,82, |
37,2,5,24,21,24,85,24,3,86,23,1,86,19,1,5,18,21,18,85,18,3,122,12,138,12, |
2,89,12,105,12,2,106,3,1,106,2,1,73,37,89,37,2,53,29,1,123,13,139,13,2,64, |
10,1,10,10,36,92,31,64,33,33,0,127,31,143,31,2,31,47,128,32,47,96,47,128, |
47,3,21,91,175,0,191,0,2,32,0,1,15,0,1,0,33,95,240,34,1,34,34,5,26,95,41, |
19,16,95,5,48,11,64,11,2,144,11,224,11,2,11,11,5,4,0,63,51,47,93,113,16,237, |
63,237,17,57,47,93,237,1,47,93,93,93,237,93,26,16,204,93,17,57,47,26,16,237, |
50,47,93,49,48,0,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,19,52,18,54, |
36,51,50,30,2,23,7,46,3,35,34,14,2,21,20,30,2,51,50,62,2,55,53,33,53,33,17, |
14,3,35,34,36,38,2,103,89,177,1,6,173,130,196,144,100,35,182,26,73,104,137, |
88,128,189,124,61,66,130,193,127,83,140,113,86,29,254,91,2,85,47,127,158, |
188,107,178,254,246,177,89,2,199,165,1,10,187,101,46,86,123,77,54,52,85,60, |
33,80,148,208,127,127,211,153,85,28,45,55,28,254,160,254,26,48,87,66,38,109, |
195,1,12,0,0,0,0,1,0,168,0,0,5,32,5,129,0,11,0,103,64,29,11,90,64,8,143,0, |
159,0,175,0,223,0,4,0,13,128,64,13,1,64,13,192,13,208,13,224,13,4,13,184, |
255,192,64,37,14,17,72,7,3,90,0,4,16,4,64,4,3,7,4,2,95,80,7,1,176,7,224,7, |
2,15,7,1,8,7,7,9,5,3,4,0,18,0,63,50,63,51,57,47,94,93,93,113,237,1,47,94, |
93,237,50,43,93,113,26,16,220,93,50,26,237,49,48,33,17,33,17,35,17,51,17, |
33,17,51,17,4,97,253,6,191,191,2,250,191,2,141,253,115,5,129,253,172,2,84, |
250,127,0,0,0,1,0,189,0,0,1,124,5,129,0,3,0,122,64,70,3,90,15,0,1,12,0,0, |
1,61,16,0,32,0,208,0,3,96,0,112,0,2,0,0,16,0,64,0,80,0,176,0,5,7,0,175,5, |
1,0,5,160,5,176,5,3,0,5,16,5,64,5,80,5,160,5,176,5,192,5,240,5,8,32,5,144, |
5,240,5,3,5,184,255,192,179,56,61,72,5,184,255,192,179,45,48,72,5,184,255, |
192,182,13,16,72,1,3,0,18,0,63,63,1,43,43,43,93,113,114,93,47,94,93,113,114, |
94,93,94,93,237,49,48,51,17,51,17,189,191,5,129,250,127,0,0,0,1,0,32,255, |
236,3,104,5,129,0,21,0,124,64,15,137,2,1,130,5,1,123,10,1,100,6,116,6,2,6, |
184,255,224,64,66,14,17,72,0,14,32,14,2,128,14,144,14,224,14,240,14,4,14, |
14,3,17,90,64,64,12,80,12,96,12,3,111,12,1,12,23,128,15,3,1,3,32,23,1,32, |
23,64,23,80,23,96,23,4,14,95,15,3,9,95,0,64,4,1,4,4,0,19,0,63,50,47,93,16, |
237,63,237,1,93,113,47,113,26,16,220,93,113,26,237,18,57,47,93,113,49,48, |
0,43,1,93,93,93,0,93,5,34,38,39,55,30,3,51,50,54,53,17,33,53,33,17,20,14, |
2,1,201,171,219,35,187,10,46,64,78,41,104,120,254,241,1,205,56,107,154,20, |
178,192,31,65,93,60,28,143,138,3,69,156,252,35,101,162,115,62,0,1,0,168,0, |
0,5,63,5,129,0,11,0,154,64,103,171,1,1,157,1,1,138,8,154,8,2,138,1,154,1, |
170,1,3,102,2,1,131,7,147,7,2,100,7,1,157,0,173,0,2,107,0,123,0,139,0,3,89, |
0,1,86,10,1,155,10,1,36,10,1,1,10,106,8,250,8,2,8,10,144,9,160,9,2,9,9,0, |
11,16,0,11,1,11,11,13,7,2,3,90,0,4,16,4,64,4,3,7,4,7,10,1,2,4,4,8,5,3,0,4, |
18,0,63,51,63,51,18,23,57,1,47,94,93,237,50,50,17,51,47,93,56,51,57,47,93, |
57,51,113,17,51,49,48,0,93,93,1,93,93,93,93,0,93,93,93,1,93,93,0,93,93,33, |
1,7,17,35,17,51,17,1,51,9,1,4,82,253,205,184,191,191,2,167,225,253,168,2, |
168,2,168,140,253,228,5,129,253,62,2,194,253,156,252,227,0,0,0,0,1,0,168, |
0,0,4,47,5,129,0,5,0,56,64,40,16,4,48,4,2,0,4,16,4,32,4,64,4,96,4,128,4,160, |
4,240,4,8,4,3,90,0,0,16,0,64,0,3,7,0,1,3,3,95,0,18,0,63,237,63,1,47,94,93, |
237,47,93,113,49,48,51,17,51,17,33,21,168,191,2,200,5,129,251,27,156,0,0, |
0,0,1,0,168,0,0,6,2,5,129,0,44,2,44,64,12,152,41,1,151,31,1,12,16,18,24,72, |
12,184,255,240,179,13,17,72,13,184,255,240,64,27,18,24,72,40,13,1,13,16,13, |
17,72,42,32,33,37,72,42,32,18,28,72,42,32,9,17,72,30,184,255,224,179,33,37, |
72,30,184,255,224,179,18,28,72,30,184,255,224,64,255,9,17,72,13,12,36,36, |
27,44,92,42,36,0,52,0,2,212,0,1,139,0,155,0,2,4,0,1,8,0,46,139,46,1,116,46, |
1,59,46,1,203,46,1,180,46,1,11,46,1,207,171,46,1,52,46,1,32,46,1,20,46,1, |
0,46,1,244,46,1,208,46,1,196,46,1,176,46,1,116,46,132,46,164,46,3,96,46,1, |
84,46,1,64,46,1,52,46,1,16,46,1,4,46,1,151,240,46,1,180,46,196,46,228,46, |
3,160,46,1,116,46,148,46,2,80,46,1,68,46,1,48,46,1,4,46,36,46,2,244,46,1, |
224,46,1,180,46,212,46,2,144,46,1,132,46,1,112,46,1,52,46,68,46,100,46,3, |
32,46,1,20,46,1,244,46,1,208,46,1,116,46,132,46,164,46,196,46,4,96,46,1,52, |
46,84,46,2,16,46,1,4,46,1,103,116,46,148,46,180,46,196,46,228,46,5,80,46, |
1,4,46,36,46,68,46,3,20,46,52,46,68,46,100,46,132,46,180,46,212,46,244,46, |
8,164,46,196,46,244,46,3,139,46,1,4,46,52,46,84,46,116,46,4,55,64,83,228, |
46,1,203,46,1,36,46,68,46,116,46,148,46,180,46,5,11,46,1,212,46,244,46,2, |
187,46,1,100,46,132,46,2,75,46,1,20,46,52,46,2,251,46,1,164,46,196,46,228, |
46,3,128,46,1,2,64,46,80,46,112,46,3,63,46,1,0,46,32,46,2,30,27,92,0,28,64, |
28,2,7,28,6,21,21,184,255,192,64,16,18,37,72,42,21,29,3,75,36,1,0,13,36,3, |
28,18,0,63,23,51,93,63,51,51,43,17,51,1,47,94,93,237,50,93,93,93,95,93,93, |
93,113,113,113,113,113,114,114,114,114,94,93,93,93,113,114,114,114,94,93, |
93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,94,93, |
93,93,113,113,113,16,220,94,93,93,93,113,50,237,18,57,61,47,51,51,49,48,43, |
43,43,43,43,43,43,93,43,43,43,93,93,33,17,52,54,55,54,55,6,7,14,1,7,1,35, |
1,46,3,39,38,39,22,23,30,1,21,17,35,17,51,1,30,3,23,62,3,55,1,51,17,5,86, |
2,2,2,3,14,15,13,31,15,254,148,134,254,143,6,13,15,15,7,17,16,1,2,2,2,170, |
251,1,119,7,20,18,15,3,3,16,21,20,8,1,112,245,3,172,51,106,44,51,48,51,50, |
43,97,39,252,64,3,192,15,40,45,47,23,53,57,56,55,47,103,39,252,84,5,129,252, |
47,20,63,66,59,16,16,60,66,62,20,3,209,250,127,0,0,0,0,1,0,168,0,0,5,32,5, |
129,0,19,0,196,185,0,10,255,224,64,39,12,43,72,54,10,70,10,2,0,32,12,43,72, |
41,0,57,0,73,0,3,11,16,29,33,72,11,32,18,28,72,150,11,166,11,2,41,11,1,1, |
184,255,240,179,29,33,72,1,184,255,224,64,53,18,28,72,154,1,170,1,2,3,38, |
1,1,19,92,0,68,16,84,16,148,16,3,224,16,1,2,0,16,48,16,64,16,112,16,192,16, |
208,16,6,16,64,21,1,64,21,192,21,208,21,224,21,4,21,184,255,192,64,16,14, |
17,72,10,7,92,0,8,16,8,64,8,3,7,8,1,184,255,192,64,16,29,43,72,17,1,9,3,11, |
64,29,43,72,11,0,8,18,0,63,51,51,43,63,51,51,43,1,47,94,93,237,50,43,93,113, |
47,93,95,93,113,51,237,49,48,0,93,95,93,43,43,93,93,43,43,1,93,43,93,43,33, |
1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,4,58,253,14,2,3,2,3, |
170,222,2,250,3,3,2,4,172,4,176,49,48,41,91,35,252,88,5,129,251,72,49,49, |
42,99,45,3,156,250,127,0,0,0,0,2,0,97,255,236,5,215,5,150,0,19,0,39,0,108, |
64,74,91,37,1,26,37,1,9,37,1,82,33,1,21,33,1,7,33,1,84,27,1,21,27,1,91,23, |
1,25,23,1,102,17,1,104,12,1,0,91,64,15,20,1,20,41,128,32,41,128,41,2,30,91, |
175,10,191,10,2,32,10,1,15,10,31,10,2,10,25,95,15,4,35,95,5,19,0,63,237,63, |
237,1,47,93,93,93,237,93,26,16,220,113,26,237,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,215,95,180,254,252,165,174,254,250, |
174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63,65, |
127,189,123,132,191,123,59,2,199,165,254,242,192,104,109,195,1,12,159,165, |
1,10,187,101,102,188,254,246,163,127,208,148,80,80,148,208,127,127,211,153, |
85,86,153,212,0,2,0,168,0,0,4,234,5,129,0,14,0,23,0,117,64,83,169,2,1,147, |
23,1,155,16,171,16,2,10,3,26,3,42,3,3,5,12,21,12,37,12,3,0,90,64,15,25,128, |
64,25,1,64,25,1,20,7,90,0,8,16,8,64,8,3,8,6,95,31,20,47,20,79,20,95,20,127, |
20,5,15,20,207,20,255,20,3,7,20,64,9,17,72,20,20,7,19,95,9,3,7,18,0,63,63, |
237,18,57,47,43,94,93,113,237,1,47,93,237,50,93,113,26,16,220,26,237,49,48, |
0,93,93,93,93,93,1,20,14,2,35,33,17,35,17,33,50,30,2,7,52,38,35,33,17,33, |
50,54,4,234,61,121,182,121,254,98,191,2,81,125,186,124,62,192,164,164,254, |
133,1,131,165,155,3,217,92,159,117,68,253,219,5,129,61,111,157,97,134,139, |
253,212,146,0,0,0,2,0,97,254,125,5,215,5,150,0,36,0,56,0,162,64,113,108,20, |
124,20,140,20,3,104,24,1,104,29,1,101,34,1,87,6,1,85,49,1,90,39,1,90,45,1, |
108,19,124,19,140,19,3,26,19,90,19,2,26,40,90,40,2,21,44,85,44,2,26,54,90, |
54,2,8,54,1,21,50,85,50,2,7,50,1,13,13,22,5,27,0,91,64,15,37,1,37,58,128, |
47,91,175,27,191,27,2,32,27,1,15,27,31,27,2,27,32,58,128,58,2,42,95,32,4, |
52,95,5,22,19,10,95,17,0,47,237,63,51,237,63,237,1,93,47,93,93,93,237,26, |
16,220,113,26,237,17,57,57,50,47,49,48,93,93,93,93,93,93,0,93,93,93,93,93, |
1,93,93,93,0,93,93,1,20,14,2,7,30,3,51,50,54,55,21,14,1,35,34,46,2,39,46, |
2,2,53,52,18,54,36,51,50,4,22,18,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62, |
2,5,215,77,145,211,134,21,53,68,83,51,28,64,23,38,91,49,86,128,97,70,27,158, |
239,159,80,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127,63, |
65,127,189,123,132,191,123,59,2,199,149,247,186,117,18,64,90,57,27,8,5,134, |
9,13,51,95,138,87,8,115,193,1,3,152,165,1,10,187,101,102,188,254,246,163, |
127,208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,0,0,2,0,168,0,0, |
5,104,5,129,0,17,0,30,0,210,64,62,169,13,1,138,20,154,20,170,20,3,148,29, |
1,117,29,133,29,2,174,0,1,157,0,1,124,0,140,0,2,74,0,90,0,106,0,3,3,160,1, |
1,114,1,130,1,146,1,3,2,99,1,1,64,1,1,51,1,1,37,1,1,3,16,184,255,112,64,87, |
17,73,112,16,128,16,144,16,3,84,16,100,16,2,66,16,1,2,35,16,51,16,2,1,16, |
16,25,18,90,11,11,0,0,17,48,17,64,17,96,17,144,17,160,17,6,17,64,32,144,32, |
160,32,3,25,3,90,0,4,16,4,64,4,3,7,4,16,2,95,47,25,95,25,111,25,143,25,4, |
25,25,0,24,95,5,3,4,0,18,0,63,50,63,237,18,57,47,93,237,50,1,47,94,93,237, |
50,93,47,93,51,57,47,237,18,57,17,51,49,48,93,95,93,93,93,43,95,93,93,93, |
93,95,93,93,95,93,93,93,93,0,93,93,93,93,33,1,33,17,35,17,33,50,30,2,21,20, |
14,2,7,1,3,52,46,2,35,33,17,33,50,62,2,4,140,254,146,254,73,191,2,151,120, |
185,126,66,39,84,130,91,1,144,248,44,84,120,76,254,59,1,205,82,120,77,37, |
2,73,253,183,5,129,55,104,150,94,67,130,108,78,16,253,161,3,236,64,94,63, |
31,253,248,41,72,98,0,0,0,0,1,0,93,255,236,4,248,5,150,0,63,0,226,64,110, |
150,62,1,68,62,1,166,59,1,134,54,1,132,49,1,151,40,1,169,33,1,11,33,27,33, |
43,33,155,33,4,89,29,169,29,2,139,17,1,139,7,1,150,2,1,4,2,20,2,2,132,58, |
1,96,54,1,105,21,1,118,17,1,42,90,41,41,0,90,64,176,19,1,19,65,128,9,90,8, |
64,16,19,72,8,8,52,90,0,31,16,31,64,31,3,7,31,19,16,19,22,72,120,19,136,19, |
152,19,3,59,19,1,52,184,255,240,64,47,19,22,72,119,52,135,52,151,52,3,58, |
52,1,19,52,5,47,95,111,42,1,89,42,1,75,42,1,6,42,1,42,36,4,14,95,96,9,1,82, |
9,1,68,9,1,9,5,19,0,63,51,93,93,93,237,63,51,93,93,93,93,237,18,57,57,93, |
93,43,93,93,43,1,47,94,93,237,51,47,43,237,26,16,220,93,26,237,50,47,237, |
49,48,0,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,20,14,2,35, |
32,36,39,55,30,3,51,50,62,2,53,52,46,2,39,46,5,53,52,62,2,51,50,30,2,23,7, |
46,3,35,34,14,2,21,20,30,2,23,30,5,4,248,69,144,219,150,254,249,254,218,40, |
185,14,58,99,146,102,85,142,102,57,63,114,158,96,59,119,109,96,70,40,81,144, |
196,114,131,186,128,77,23,188,14,53,86,123,83,98,133,81,35,63,108,142,80, |
65,129,118,103,76,43,1,133,89,150,109,61,184,174,37,55,90,65,36,29,60,95, |
66,69,86,56,38,22,13,31,43,58,81,107,70,100,143,92,42,41,82,121,80,33,51, |
80,54,28,35,60,81,47,63,81,54,36,18,15,31,43,58,84,114,0,0,0,1,0,46,0,0,4, |
180,5,129,0,7,1,212,64,255,9,9,1,201,9,217,9,249,9,3,187,9,1,73,9,89,9,121, |
9,137,9,4,59,9,1,9,9,25,9,2,246,9,1,153,9,201,9,2,139,9,1,9,9,25,9,73,9,105, |
9,4,199,217,9,233,9,2,203,9,1,182,9,1,41,9,89,9,105,9,137,9,153,9,5,27,9, |
1,6,9,1,25,9,41,9,89,9,121,9,153,9,169,9,217,9,7,233,9,249,9,2,219,9,1,169, |
9,1,150,9,1,57,9,105,9,2,45,9,1,1,11,9,1,151,107,9,123,9,139,9,171,9,187, |
9,235,9,251,9,7,84,9,1,11,9,43,9,59,9,3,187,9,251,9,2,164,9,1,59,9,75,9,123, |
9,3,36,9,1,139,9,155,9,187,9,203,9,251,9,5,127,9,1,2,79,9,95,9,2,48,9,1,15, |
9,1,103,207,9,223,9,2,176,9,1,15,9,79,9,95,9,143,9,4,240,9,1,159,9,175,9, |
207,9,223,9,4,112,9,1,95,9,1,64,9,1,31,9,1,31,9,63,9,95,9,111,9,159,9,223, |
9,239,9,7,0,9,1,55,239,9,1,128,64,93,9,144,9,208,9,3,111,9,1,80,9,1,47,9, |
1,0,9,1,208,9,1,175,9,1,144,9,1,111,9,127,9,2,16,9,32,9,64,9,80,9,4,255,9, |
1,224,9,1,191,9,1,64,9,96,9,144,9,160,9,4,63,9,1,32,9,1,15,9,1,7,3,5,4,14, |
1,90,2,64,2,7,14,112,7,160,7,176,7,3,32,7,128,7,2,7,184,255,192,64,15,23, |
28,72,7,32,2,1,2,0,4,95,5,3,1,18,0,63,63,237,50,1,47,93,204,43,93,113,43, |
1,26,24,16,77,253,228,50,95,94,93,93,93,93,93,93,93,113,113,113,113,113,114, |
114,114,114,114,114,94,93,93,113,113,113,113,113,113,114,114,114,94,93,93, |
93,95,93,93,113,113,113,113,114,114,114,94,93,95,93,93,93,93,93,93,113,114, |
114,114,114,114,114,94,93,93,93,93,113,113,113,113,113,114,49,48,1,17,35, |
17,33,53,33,21,2,208,190,254,28,4,134,4,229,251,27,4,229,156,156,0,0,0,0, |
1,0,158,255,236,5,41,5,129,0,25,0,136,64,61,89,23,105,23,2,89,3,105,3,2,89, |
2,105,2,2,69,16,1,69,10,1,21,90,64,64,18,80,18,160,18,3,48,18,144,18,240, |
18,3,143,18,159,18,175,18,3,18,27,128,64,27,1,64,27,192,27,208,27,224,27, |
4,27,184,255,192,64,36,14,17,72,8,90,79,5,95,5,111,5,3,143,5,159,5,2,207, |
5,1,0,5,16,5,64,5,3,7,5,19,6,3,13,95,0,19,0,63,237,63,51,1,47,94,93,93,113, |
114,237,43,93,113,26,16,220,93,113,114,26,237,49,48,0,93,93,93,93,93,5,34, |
46,2,53,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,14,2,2,219,116,208,157, |
92,191,57,102,139,83,82,146,110,63,190,93,160,215,20,62,131,201,138,3,129, |
252,143,107,149,94,43,44,96,155,111,3,100,252,145,141,207,136,66,0,1,0,9, |
0,0,5,77,5,129,0,16,0,235,64,181,74,14,90,14,106,14,3,69,4,85,4,101,4,3,140, |
15,1,58,15,90,15,106,15,122,15,4,131,3,1,53,3,85,3,101,3,117,3,4,116,0,132, |
0,2,9,0,1,140,1,1,123,1,1,6,1,1,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0, |
37,0,53,0,3,6,0,1,230,0,246,0,2,1,0,9,9,2,26,15,42,15,58,15,3,3,8,15,1,232, |
15,248,15,2,15,52,16,84,16,2,32,16,1,2,16,16,1,48,16,96,16,144,16,192,16, |
240,16,5,16,21,3,37,3,53,3,3,6,3,1,230,3,246,3,2,3,175,2,191,2,2,2,32,18, |
80,18,2,48,18,96,18,144,18,192,18,240,18,5,47,18,1,15,2,3,121,9,1,9,1,18, |
0,63,51,93,63,51,1,93,93,113,47,93,51,93,113,113,47,93,113,95,113,113,51, |
93,113,95,113,18,57,61,47,51,51,93,113,113,93,113,113,49,48,93,93,93,93,93, |
93,93,93,93,93,93,33,35,1,51,1,30,1,23,22,23,54,55,62,1,55,1,51,3,14,198, |
253,193,201,1,134,15,30,12,14,13,12,14,12,29,17,1,132,201,5,129,252,32,45, |
89,35,41,39,37,41,35,88,48,3,224,0,0,1,0,9,0,0,7,134,5,129,0,46,4,87,64,73, |
121,44,1,117,17,1,123,2,139,2,2,73,2,1,116,12,132,12,2,70,12,1,122,30,138, |
30,2,73,30,89,30,105,30,3,117,31,133,31,2,71,31,87,31,103,31,3,142,45,1,91, |
45,107,45,123,45,3,129,16,1,100,16,116,16,2,85,16,1,1,32,13,17,72,13,184, |
255,224,64,255,13,17,72,131,0,1,117,0,1,68,0,84,0,100,0,3,54,0,1,140,14,1, |
122,14,1,75,14,91,14,107,14,3,14,16,9,12,72,26,14,42,14,58,14,3,9,14,1,233, |
14,249,14,2,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,14,13,22,26,30,42, |
30,58,30,3,9,30,1,233,30,249,30,2,21,31,37,31,53,31,3,6,31,1,230,31,246,31, |
2,31,30,7,26,1,42,1,58,1,3,9,1,1,233,1,249,1,2,21,0,37,0,53,0,3,6,0,1,230, |
0,246,0,2,1,0,39,123,39,1,116,22,132,22,2,22,7,39,39,7,22,3,15,26,45,42,45, |
58,45,3,3,8,45,1,232,45,248,45,2,45,219,46,1,207,46,1,187,46,1,175,46,1,155, |
46,1,143,46,1,123,46,1,111,46,1,91,46,1,79,46,1,2,79,46,143,46,175,46,3,46, |
64,25,28,72,32,46,48,46,2,15,46,1,9,46,5,16,1,229,16,245,16,2,182,16,198, |
16,214,16,3,3,16,8,15,56,15,120,15,136,15,152,15,184,15,6,12,15,64,64,255, |
25,38,72,15,119,48,151,48,215,48,3,54,48,70,48,86,48,3,23,48,39,48,2,6,48, |
1,55,48,103,48,119,48,167,48,183,48,199,48,231,48,247,48,8,38,48,1,7,48,23, |
48,2,201,199,48,215,48,231,48,3,120,48,152,48,168,48,184,48,4,105,48,1,40, |
48,56,48,88,48,3,25,48,1,7,48,1,232,48,1,217,48,1,168,48,200,48,2,153,48, |
1,138,48,1,88,48,104,48,2,73,48,1,55,48,1,8,48,24,48,2,231,48,1,200,48,1, |
167,48,1,8,48,24,48,40,48,72,48,136,48,5,153,199,48,1,88,48,104,48,136,48, |
152,48,168,48,5,73,48,1,40,48,1,9,48,25,48,2,216,48,232,48,2,203,48,1,154, |
48,170,48,186,48,3,139,48,1,48,192,124,127,72,57,48,1,42,48,1,25,48,1,10, |
48,1,249,48,1,234,48,1,217,48,1,202,48,1,184,48,1,137,48,153,48,169,48,3, |
120,48,1,105,48,1,58,48,74,48,90,48,3,41,48,1,26,48,1,12,48,1,104,253,48, |
1,236,48,1,221,48,1,204,48,1,64,255,189,48,1,171,48,1,156,48,1,139,48,1,124, |
48,1,107,48,1,92,48,1,75,48,1,60,48,1,43,48,1,28,48,1,11,48,1,252,48,1,235, |
48,1,220,48,1,203,48,1,188,48,1,171,48,1,156,48,1,0,141,48,1,127,48,1,109, |
48,1,95,48,1,77,48,1,47,48,63,48,2,29,48,1,15,48,1,253,48,1,239,48,1,221, |
48,1,207,48,1,189,48,1,175,48,1,157,48,1,143,48,1,109,48,125,48,2,91,48,1, |
77,48,1,59,48,1,45,48,1,27,48,1,13,48,1,56,251,48,1,237,48,1,219,48,1,205, |
48,1,187,48,1,173,48,1,155,48,1,141,48,1,123,48,1,109,48,1,75,48,91,48,2, |
57,48,1,43,48,1,25,48,1,11,48,1,249,48,1,235,48,1,221,48,1,203,48,1,189,48, |
1,171,48,1,157,48,1,139,48,1,125,48,1,107,48,1,93,48,1,75,48,1,61,48,1,1, |
43,48,1,31,48,1,2,95,48,127,48,159,48,191,48,223,48,255,48,6,0,48,1,8,68, |
7,84,7,2,7,30,45,3,15,3,39,64,15,22,123,22,139,22,2,22,32,9,14,72,22,1,14, |
18,0,63,51,51,43,93,17,51,63,23,51,93,1,94,93,93,95,113,113,95,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,113, |
113,113,113,113,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,93,93,93,113,113,113,113,43,113,113,113,113,114,114,114,114,114,94,93, |
93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93, |
93,93,113,113,113,113,47,43,94,93,51,95,93,93,113,47,94,93,93,43,93,95,113, |
113,113,113,113,113,113,113,113,113,51,93,113,95,113,18,23,57,61,47,47,47, |
93,93,17,51,51,93,113,113,93,113,113,17,51,51,93,113,113,93,113,113,17,51, |
51,93,113,113,93,113,113,49,48,43,93,93,93,93,93,93,93,43,43,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,33,35,3,46,1,39,38,39,6,7,14,1,7,3,35,1, |
51,19,30,1,23,22,23,54,55,62,3,55,19,51,19,30,3,23,22,23,50,62,2,55,19,51, |
5,231,228,244,11,25,10,12,12,13,12,11,24,11,246,228,254,97,199,253,17,31, |
11,13,11,15,16,7,14,15,15,6,245,183,245,6,15,15,14,7,16,15,1,16,24,29,15, |
249,199,3,127,38,104,47,55,57,58,55,48,102,38,252,129,5,129,252,129,63,124, |
49,58,52,69,67,28,62,60,55,23,3,109,252,147,23,55,59,62,28,67,70,69,104,121, |
52,3,127,0,0,1,0,46,0,0,5,43,5,129,0,11,2,119,64,255,92,4,1,73,4,1,59,4,1, |
38,11,1,75,0,91,0,2,41,0,57,0,2,68,2,84,2,2,38,2,54,2,2,9,3,25,3,41,3,3,81, |
10,1,69,10,1,51,10,1,6,10,22,10,2,93,8,1,76,8,1,43,8,59,8,2,9,8,25,8,2,82, |
6,1,67,6,1,3,38,6,54,6,2,7,6,23,6,2,12,219,13,1,196,13,1,171,13,1,144,13, |
1,132,13,1,96,13,1,84,13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13, |
1,160,13,1,148,13,1,112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,204, |
224,13,1,212,13,1,176,13,1,164,13,1,128,13,1,116,13,1,80,13,1,68,13,1,32, |
13,1,20,13,1,36,13,84,13,132,13,180,13,228,13,5,4,13,52,13,100,13,148,13, |
196,13,244,13,6,156,52,13,100,13,148,13,196,13,244,13,5,11,13,1,27,13,75, |
13,123,13,171,13,219,13,5,139,13,187,13,235,13,3,4,13,20,13,52,13,68,13,4, |
106,84,13,100,13,132,13,148,64,156,13,180,13,196,13,228,13,244,13,8,59,13, |
1,36,13,1,11,13,1,244,13,1,219,13,1,196,13,1,171,13,1,148,13,1,123,13,1,100, |
13,1,48,13,1,36,13,1,0,13,1,244,13,1,208,13,1,196,13,1,160,13,1,148,13,1, |
112,13,1,100,13,1,64,13,1,52,13,1,16,13,1,4,13,1,57,224,13,1,212,13,1,176, |
13,1,164,13,1,128,13,1,20,13,68,13,116,13,3,36,13,84,13,132,13,180,13,228, |
13,5,84,13,100,13,148,13,244,13,4,64,13,1,2,0,13,48,13,2,6,8,10,7,1,4,4,9, |
5,9,5,9,3,0,11,16,192,11,240,11,2,11,184,255,192,64,16,26,30,72,175,11,1, |
144,11,1,127,11,1,0,11,1,11,184,255,192,181,11,15,72,11,2,3,184,255,240,64, |
41,16,3,32,3,2,224,3,240,3,2,31,3,175,3,191,3,207,3,4,3,114,7,1,52,7,68,7, |
84,7,3,4,7,10,1,4,8,5,3,3,0,18,0,63,50,63,51,23,57,93,93,1,47,93,93,113,56, |
51,47,43,93,93,93,93,43,93,56,51,18,57,57,47,47,18,23,57,50,51,93,95,93,93, |
113,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93,93,113,113,113, |
113,113,113,113,113,113,113,114,114,114,114,94,93,93,113,114,114,94,93,113, |
114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,49,48,94,93,93,95,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,33,9,1,35,9,1,51,9,1,51,9,1, |
4,88,254,89,254,80,211,2,24,254,17,211,1,136,1,125,211,254,30,2,11,2,104, |
253,152,2,220,2,165,253,215,2,41,253,98,253,29,0,0,0,1,0,45,0,0,5,41,5,129, |
0,8,2,83,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5,1,3,5,1,16,3,5,184,255,232, |
64,255,12,15,72,5,4,14,2,1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8, |
6,1,90,38,2,86,2,150,2,3,118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,10,169, |
10,201,10,3,86,10,1,9,10,57,10,2,25,10,89,10,137,10,249,10,4,6,10,1,202,249, |
10,1,230,10,1,9,10,25,10,185,10,201,10,4,198,10,1,89,10,121,10,169,10,3,54, |
10,1,41,10,57,10,185,10,233,10,4,11,10,1,153,249,10,1,198,10,214,10,2,178, |
10,1,164,10,1,150,10,1,130,10,1,116,10,1,86,10,102,10,2,66,10,1,36,10,52, |
10,2,18,10,1,4,10,1,244,10,1,230,10,1,196,10,212,10,2,166,10,182,10,2,146, |
10,1,132,10,1,118,10,1,98,10,1,84,10,1,54,10,70,10,2,36,10,1,22,10,1,4,10, |
1,242,10,1,1,208,10,224,10,2,196,10,1,160,10,176,10,2,148,10,1,112,10,1,100, |
10,1,64,10,1,20,10,36,10,52,10,3,0,10,1,105,228,10,244,10,2,208,10,64,182, |
1,164,10,180,10,196,10,3,128,10,144,10,2,116,10,1,80,10,96,10,2,68,10,1,32, |
10,1,4,10,20,10,2,244,10,1,224,10,1,196,10,212,10,2,176,10,1,84,10,100,10, |
116,10,148,10,164,10,5,48,10,64,10,2,36,10,1,0,10,1,196,10,244,10,2,144,10, |
1,4,10,20,10,36,10,68,10,84,10,116,10,132,10,7,57,224,10,1,132,10,164,10, |
212,10,3,112,10,1,4,10,36,10,52,10,84,10,100,10,5,228,10,244,10,2,192,10, |
1,180,10,1,144,10,1,4,10,20,10,52,10,84,10,132,10,5,212,10,228,10,2,187,10, |
1,164,10,1,112,10,1,2,48,10,96,10,2,15,10,47,10,2,0,3,59,3,75,3,123,3,3,3, |
1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,1,93,93,95,93,93,93,93,113,113,113, |
113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113,113,114,114, |
114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93,93,95,93,113,113,113, |
113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,113,113,113,114,114,114,94,93,93,113,113,113,47,94,93, |
93,93,113,253,57,206,94,93,93,50,43,1,24,16,77,230,50,49,48,43,95,94,93,93, |
43,93,93,1,17,35,17,1,51,9,1,51,3,9,190,253,226,210,1,173,1,171,210,2,72, |
253,184,2,72,3,57,253,97,2,159,0,0,0,0,1,0,65,0,0,4,163,5,129,0,9,0,122,64, |
35,100,4,116,4,132,4,3,109,3,125,3,141,3,3,91,3,1,41,3,57,3,73,3,3,114,8, |
130,8,2,84,8,100,8,2,8,184,255,240,64,9,10,13,72,9,3,16,7,1,7,184,255,192, |
64,18,12,17,72,7,8,4,15,2,31,2,2,2,64,12,15,72,2,11,184,255,192,64,14,13, |
17,72,7,3,4,95,5,3,2,8,95,1,18,0,63,237,50,63,237,50,50,1,43,47,43,93,51, |
51,47,43,93,51,51,49,48,43,93,93,93,93,93,93,41,1,53,1,33,53,33,21,1,33,4, |
163,251,158,3,90,252,239,3,234,252,166,3,137,143,4,86,156,139,251,166,0,0, |
1,0,146,254,87,2,41,5,204,0,7,0,49,64,30,7,48,2,1,224,2,1,2,4,241,63,1,1, |
143,1,191,1,2,32,1,1,1,4,245,1,0,5,245,0,27,0,63,237,63,237,1,47,93,93,113, |
237,205,93,113,50,49,48,19,17,33,21,35,17,51,21,146,1,151,233,233,254,87, |
7,117,129,249,141,129,0,1,0,0,255,236,2,57,5,204,0,3,0,71,64,40,120,1,136, |
1,2,0,24,13,17,72,9,3,25,3,73,3,3,70,2,1,10,2,26,2,42,2,3,3,16,0,3,16,3,32, |
3,128,3,4,3,1,184,255,240,183,143,1,1,1,1,0,0,19,0,63,63,1,47,93,56,205,93, |
56,49,48,93,93,93,43,93,5,1,51,1,1,151,254,105,158,1,155,20,5,224,250,32, |
0,0,0,0,1,0,16,254,87,1,167,5,204,0,7,0,49,64,31,4,63,0,1,239,0,1,0,7,241, |
64,2,80,2,2,192,2,208,2,224,2,3,2,4,245,5,0,1,245,0,27,0,63,237,63,237,1, |
47,93,113,253,205,93,113,50,49,48,19,53,51,17,35,53,33,17,16,233,233,1,151, |
254,87,129,6,115,129,248,139,0,1,0,10,2,161,3,183,5,129,0,6,2,243,181,0,24, |
18,22,72,2,184,255,232,179,18,22,72,5,184,255,232,64,47,18,22,72,118,5,134, |
5,2,4,24,18,22,72,121,4,137,4,2,3,54,6,70,6,2,102,6,118,6,134,6,230,6,4,6, |
6,22,6,38,6,70,6,86,6,102,6,6,6,184,255,192,179,48,65,72,6,184,255,192,64, |
57,18,22,72,6,5,4,57,3,73,3,2,105,3,121,3,137,3,3,9,3,25,3,41,3,89,3,105, |
3,5,9,3,64,18,22,72,3,6,1,22,1,134,1,3,57,38,1,54,1,70,1,246,1,4,230,1,1, |
1,184,255,192,182,60,63,72,153,1,1,1,184,255,224,64,255,30,33,72,56,1,72, |
1,2,39,1,1,22,1,1,183,1,199,1,2,6,1,70,1,86,1,102,1,150,1,166,1,6,9,1,6,8, |
1,246,8,1,164,8,1,121,8,1,6,8,1,246,8,1,201,8,217,8,2,187,8,1,9,8,25,8,41, |
8,169,8,4,201,201,8,217,8,2,54,8,118,8,134,8,150,8,4,153,8,233,8,2,102,8, |
118,8,2,9,8,25,8,57,8,3,198,8,1,139,8,1,57,8,73,8,121,8,3,43,8,1,4,8,1,152, |
228,8,244,8,2,208,8,1,162,8,178,8,194,8,3,132,8,148,8,2,82,8,98,8,114,8,3, |
64,8,1,50,8,1,36,8,1,2,8,18,8,2,228,8,244,8,2,214,8,1,196,8,1,146,8,162,8, |
178,8,3,116,8,132,8,2,102,8,1,50,8,66,8,82,8,3,20,8,36,8,2,6,8,1,242,8,1, |
212,8,228,8,2,166,8,182,8,2,130,8,146,8,2,100,8,116,8,2,86,8,1,52,8,68,8, |
2,32,8,1,4,8,20,8,2,104,230,8,246,8,2,192,8,1,146,8,162,8,64,24,178,8,3,116, |
8,132,8,2,82,8,98,8,2,52,8,68,8,2,22,8,38,8,2,8,184,255,128,64,24,85,88,72, |
182,8,198,8,2,132,8,148,8,164,8,3,102,8,118,8,2,68,8,1,8,184,255,192,182, |
72,75,72,228,8,1,8,184,255,192,64,12,66,69,72,148,8,1,114,8,130,8,2,8,184, |
255,128,64,120,59,62,72,18,8,34,8,2,1,0,8,1,56,240,8,1,212,8,228,8,2,176, |
8,1,100,8,132,8,148,8,164,8,4,64,8,80,8,2,36,8,52,8,2,228,8,244,8,2,171,8, |
187,8,2,116,8,132,8,148,8,3,75,8,1,52,8,1,11,8,1,235,8,251,8,2,208,8,1,196, |
8,1,176,8,1,132,8,148,8,164,8,3,96,8,112,8,2,2,0,8,16,8,64,8,80,8,4,8,34, |
1,1,3,1,19,1,2,1,4,3,3,3,0,0,47,50,47,63,51,93,93,1,94,93,95,93,93,93,93, |
93,93,113,113,113,113,113,113,114,114,114,114,114,114,94,93,95,93,43,93,93, |
43,93,43,113,113,113,113,43,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,94,93,93,93,93,93,113,113,113,114,114,94,93,93,93,93,113,113,113, |
113,114,25,47,94,93,93,113,113,113,43,113,43,113,114,94,93,205,43,94,93,113, |
114,51,51,205,43,43,93,113,114,49,48,95,93,43,93,43,43,43,9,2,35,1,51,1,3, |
19,254,203,254,206,162,1,112,203,1,114,2,161,2,121,253,135,2,224,253,32,0, |
0,0,0,1,255,225,254,105,4,138,254,235,0,3,0,35,64,23,16,2,96,2,128,2,160, |
2,208,2,5,96,2,128,2,240,2,3,2,0,0,186,1,0,47,237,1,47,47,93,113,49,48,3, |
53,33,21,31,4,169,254,105,130,130,0,1,0,106,4,177,2,18,5,228,0,5,0,47,64, |
31,117,3,133,3,2,64,4,128,4,2,4,64,16,1,1,1,2,149,128,15,0,47,0,63,0,127, |
0,239,0,5,0,0,47,93,26,237,1,47,93,26,205,93,49,48,93,9,1,53,51,19,21,1,180, |
254,182,207,217,4,177,1,22,29,254,225,20,0,0,0,0,2,0,87,255,236,4,115,4,78, |
0,50,0,65,0,161,64,50,121,61,137,61,2,121,12,137,12,2,2,40,9,13,72,10,5,26, |
5,2,43,24,9,17,72,5,28,21,28,2,37,37,30,70,64,46,9,111,56,127,56,143,56,3, |
56,67,128,20,71,21,184,255,192,64,20,21,28,72,21,21,63,71,31,3,1,3,48,67, |
192,67,2,160,67,1,67,184,255,192,64,32,30,35,72,33,81,40,22,57,81,9,9,26, |
51,95,20,1,47,20,143,20,2,20,20,15,80,26,16,46,51,80,0,22,0,63,237,50,63, |
237,51,47,93,113,17,18,57,47,237,63,237,1,43,93,113,47,93,237,51,47,43,237, |
26,16,220,93,50,50,26,237,50,47,49,48,93,43,93,43,0,93,93,5,34,38,53,52,62, |
2,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,21,17,20,22,51,50,54,55,21, |
14,1,35,34,46,2,39,35,14,3,39,50,62,2,61,1,7,14,3,21,20,22,1,158,163,164, |
81,131,168,87,243,28,58,87,59,52,84,62,38,6,188,10,56,103,155,110,204,206, |
42,59,15,30,14,34,67,38,51,73,46,24,3,6,29,69,92,117,35,86,129,85,42,197, |
66,119,90,53,95,20,172,150,107,137,78,30,2,4,59,67,94,58,27,15,39,67,51,17, |
64,107,78,43,187,177,254,46,80,81,4,3,112,8,8,27,55,81,54,52,84,59,32,135, |
63,98,116,53,89,4,1,17,50,90,73,88,96,0,0,2,0,132,255,236,4,29,5,204,0,31, |
0,51,0,146,64,9,105,49,121,49,2,121,35,1,31,184,255,224,64,24,7,10,72,134, |
30,150,30,2,73,27,89,27,2,73,4,89,4,2,134,1,150,1,2,1,184,255,224,64,63,7, |
10,72,0,71,64,160,32,1,32,53,128,42,5,19,70,0,18,16,18,48,18,240,18,4,8,18, |
176,53,1,63,53,1,112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,37,80, |
29,16,18,0,12,21,5,47,80,2,22,0,63,237,50,63,63,63,237,50,1,93,93,113,113, |
114,114,47,94,93,237,50,50,26,16,220,93,26,237,49,48,43,93,93,93,93,43,93, |
93,1,16,33,34,38,39,35,20,14,2,7,35,62,3,53,17,51,17,20,6,7,6,7,51,62,1,51, |
50,18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,4,29,254,114,123,163,51, |
2,3,3,3,1,174,1,2,2,1,180,1,1,1,1,4,50,165,122,205,193,189,28,62,96,69,71, |
109,73,38,38,73,108,70,66,96,64,31,2,34,253,202,89,99,26,56,48,34,4,9,43, |
60,72,39,4,237,254,89,30,55,21,25,22,104,90,254,236,254,226,112,160,103,48, |
46,102,166,120,116,158,99,43,46,102,163,0,0,0,1,0,87,255,236,3,202,4,78,0, |
39,0,117,64,81,121,16,1,121,23,1,99,37,1,99,3,1,32,70,31,31,8,70,160,9,1, |
9,9,41,0,71,31,19,1,19,35,80,26,31,32,127,32,143,32,223,32,4,32,32,26,16, |
32,8,112,8,128,8,208,8,224,8,5,0,8,16,8,96,8,112,8,128,8,192,8,208,8,7,8, |
8,5,80,14,22,31,41,1,93,0,63,237,51,47,93,113,63,51,47,93,16,237,1,47,93, |
237,17,51,125,47,113,24,237,51,47,237,49,48,93,93,93,93,1,20,30,2,51,50,54, |
55,23,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,7,46,1,35,34,14,2,1,19,27, |
64,105,77,96,129,15,182,9,60,103,148,97,127,178,111,50,36,65,88,103,114,58, |
91,142,103,64,13,185,14,114,105,77,103,64,27,2,34,93,156,113,62,104,108,12, |
67,124,94,57,86,151,205,120,109,167,125,85,51,23,50,87,118,68,14,90,106,51, |
103,156,0,0,0,0,2,0,86,255,236,3,239,5,204,0,31,0,51,0,123,64,87,85,34,101, |
34,2,90,50,106,50,2,57,1,73,1,2,54,10,70,10,2,9,4,25,4,121,4,137,4,4,6,7, |
22,7,118,7,134,7,4,19,70,64,42,0,143,18,239,18,2,18,53,128,32,71,31,6,1,6, |
112,53,144,53,2,31,53,1,255,53,1,192,53,224,53,2,25,21,18,0,11,47,80,8,16, |
0,37,80,3,22,0,63,237,50,63,237,50,63,63,1,93,93,113,113,47,93,237,26,16, |
220,93,50,50,26,237,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17,16,33,50, |
22,23,51,52,46,1,52,53,17,51,17,20,30,2,23,35,46,3,53,1,20,30,2,51,50,62, |
2,53,52,46,2,35,34,14,2,3,53,50,165,122,205,193,1,142,123,164,50,2,1,1,180, |
1,2,2,1,172,2,3,3,2,253,218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64, |
31,174,104,90,1,20,1,24,2,54,90,98,10,43,47,42,9,1,163,251,19,39,72,60,43, |
9,10,37,48,53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102, |
163,0,0,0,2,0,87,255,236,4,24,4,78,0,28,0,37,0,107,64,46,90,35,106,35,2,90, |
30,106,30,2,85,3,101,3,2,8,73,9,9,27,71,64,31,29,1,144,29,1,29,39,128,37, |
0,71,31,17,1,17,48,39,192,39,208,39,3,39,184,255,192,64,19,30,35,72,8,8,5, |
0,80,37,37,5,32,80,22,16,5,80,14,22,0,63,237,63,237,18,57,47,237,17,57,47, |
1,43,113,47,93,237,50,26,16,220,93,113,26,237,50,47,237,49,48,93,0,93,93, |
1,20,30,2,51,50,54,55,23,14,3,35,34,2,17,52,62,2,51,50,30,2,29,1,39,46,1, |
35,34,14,2,7,1,20,35,73,114,80,117,141,25,158,17,61,102,153,108,240,251,76, |
132,176,100,136,183,111,47,186,15,144,135,45,99,84,58,4,1,247,85,143,103, |
57,94,72,45,45,91,73,47,1,30,1,26,152,211,132,59,88,155,210,122,24,138,171, |
157,29,74,127,98,0,0,0,1,0,29,0,0,2,60,5,202,0,27,0,161,64,11,3,10,19,10, |
51,10,67,10,4,13,10,184,255,224,64,106,8,12,72,26,15,16,1,14,16,25,16,1,70, |
5,0,2,1,18,2,31,29,47,29,79,29,95,29,127,29,143,29,159,29,7,15,29,63,29,127, |
29,175,29,191,29,223,29,239,29,7,59,95,29,191,29,2,127,29,143,29,159,29,3, |
29,64,86,100,72,29,64,39,44,72,32,29,48,29,96,29,3,175,29,223,29,239,29,3, |
64,29,1,15,29,47,29,2,19,80,12,0,0,3,80,25,6,15,1,21,0,63,63,51,237,50,63, |
237,1,93,93,93,113,43,43,113,114,94,93,113,47,94,93,51,237,50,50,47,94,93, |
51,49,48,0,43,94,93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35, |
34,14,2,29,1,51,21,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51, |
29,11,211,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41,60,39, |
97,131,0,2,0,86,254,87,3,239,4,75,0,49,0,69,0,217,64,72,122,49,138,49,2,118, |
7,134,7,2,101,62,1,85,12,101,12,2,90,58,106,58,2,38,3,54,3,2,38,18,1,41,33, |
1,9,23,25,23,121,23,137,23,4,6,29,22,29,118,29,134,29,4,9,47,70,64,50,34, |
48,14,1,127,14,223,14,2,14,71,128,6,70,5,184,255,192,64,81,23,28,72,5,5,60, |
71,15,26,1,10,26,32,71,64,71,2,207,71,1,0,71,32,71,144,71,176,71,4,80,223, |
71,1,192,71,1,79,71,1,128,71,160,71,2,15,71,47,71,2,208,71,240,71,2,15,71, |
1,8,41,15,34,55,80,31,16,15,65,80,21,22,9,80,53,6,1,38,6,1,6,0,27,0,63,50, |
93,93,237,63,237,50,63,237,50,63,1,94,93,93,113,113,114,114,114,94,93,93, |
113,47,94,93,237,51,47,43,237,26,16,220,93,113,50,50,26,237,49,48,0,94,93, |
93,93,93,93,93,93,93,93,93,1,34,46,2,39,55,30,1,51,50,62,2,61,1,35,14,3,35, |
34,46,2,53,52,62,2,51,50,22,23,51,52,62,2,55,51,14,3,21,17,20,6,19,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,2,36,93,144,102,64,14,181,18,123,100,61, |
100,70,38,2,20,59,85,112,72,103,147,93,43,43,97,155,111,115,169,46,2,3,3, |
4,2,171,1,2,2,1,223,44,49,80,103,54,69,99,65,31,31,64,98,68,54,103,82,50, |
254,87,38,71,98,60,26,75,81,34,75,120,86,174,41,75,58,35,69,138,205,135,130, |
208,145,77,105,97,25,62,55,40,3,9,43,60,73,39,252,197,227,229,3,198,113,161, |
102,48,48,103,161,112,117,159,98,42,46,100,158,0,0,0,0,1,0,142,0,0,3,238, |
5,204,0,33,0,109,185,0,8,255,192,64,36,7,11,72,11,70,64,80,12,1,159,12,255, |
12,2,12,35,128,0,35,192,35,208,35,224,35,4,192,35,1,15,35,1,128,35,1,35,184, |
255,192,64,32,19,23,72,28,24,70,192,25,1,0,25,16,25,48,25,224,25,240,25,5, |
8,25,26,0,25,11,21,0,18,80,5,16,0,63,237,50,63,51,63,1,47,94,93,113,237,50, |
43,93,113,113,114,26,16,220,93,113,26,237,49,48,43,1,62,3,51,50,30,2,21,17, |
35,17,52,46,2,35,34,14,2,21,17,35,17,51,17,20,14,2,7,1,61,30,70,84,100,62, |
104,133,77,29,181,17,48,88,70,64,103,73,40,180,180,2,3,2,1,3,129,55,77,50, |
23,56,101,140,84,253,47,2,174,69,104,69,35,46,84,120,75,253,130,5,204,254, |
126,33,66,56,39,7,0,0,0,2,0,137,0,0,1,61,5,204,0,3,0,7,0,115,64,13,3,7,70, |
0,0,4,16,4,48,4,3,8,4,184,255,192,64,42,21,24,72,4,4,8,9,255,9,1,224,9,1, |
223,9,1,176,9,192,9,2,159,9,1,112,9,128,9,2,31,9,1,0,9,1,240,9,1,223,9,1, |
9,184,255,192,64,17,34,37,72,79,9,1,31,9,1,5,15,4,21,0,83,1,0,0,63,237,63, |
63,1,93,113,43,113,113,114,114,114,114,114,114,114,114,17,18,57,47,43,94, |
93,51,237,50,49,48,19,53,51,21,3,17,51,17,137,180,180,180,5,32,172,172,250, |
224,4,58,251,198,0,0,0,0,2,255,206,254,87,1,61,5,204,0,3,0,23,1,51,64,151, |
7,24,12,16,72,7,40,8,11,72,3,4,70,21,12,12,0,0,21,16,21,32,21,64,21,4,7,21, |
21,24,25,144,25,1,63,25,1,0,25,16,25,2,219,25,64,210,213,72,208,25,224,25, |
2,143,25,1,64,25,80,25,2,15,25,31,25,95,25,111,25,255,25,5,144,25,160,25, |
224,25,240,25,4,79,25,1,0,25,1,160,63,25,175,25,191,25,207,25,4,239,25,1, |
176,25,192,25,208,25,3,63,25,79,25,95,25,3,32,25,1,143,25,191,25,207,25,3, |
0,25,1,111,239,25,1,208,25,1,63,25,143,25,2,111,25,143,25,159,25,175,25,255, |
25,5,25,184,255,192,64,84,79,82,72,223,25,1,144,25,160,25,176,25,3,47,25, |
63,25,79,25,3,0,25,1,61,25,64,53,56,72,112,25,128,25,144,25,176,25,4,15,25, |
31,25,2,255,25,1,25,64,35,38,72,144,25,1,79,25,1,255,25,1,112,25,128,25,192, |
25,208,25,224,25,5,31,25,1,22,15,16,80,9,27,0,83,1,0,0,63,237,63,237,63,1, |
93,93,93,113,113,43,113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93, |
93,113,113,113,113,114,94,93,93,93,113,114,114,114,43,94,93,93,93,17,18,57, |
47,94,93,51,51,47,16,237,50,49,48,0,43,43,19,53,51,21,17,20,14,2,35,34,38, |
39,53,30,1,51,50,62,2,53,17,51,137,180,21,54,93,72,34,65,28,13,36,13,38,49, |
28,10,180,5,32,172,172,250,90,62,106,78,45,4,5,139,2,4,20,43,67,46,4,165, |
0,0,1,0,138,0,0,4,3,5,204,0,11,0,251,64,84,124,2,1,122,8,1,118,7,1,86,9,102, |
9,134,9,150,9,4,139,0,155,0,2,89,0,105,0,121,0,3,116,10,132,10,148,10,3,68, |
10,1,1,10,10,11,42,8,1,3,8,9,16,116,9,1,9,9,0,11,16,84,11,116,11,148,11,3, |
116,11,148,11,180,11,212,11,228,11,244,11,6,48,11,1,2,11,184,255,192,64,105, |
7,10,72,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,31,13,63,13,2,31,13,63,13,95, |
13,255,13,4,15,13,31,13,63,13,95,13,127,13,5,57,13,64,83,86,72,96,13,128, |
13,160,13,192,13,208,13,5,223,13,1,0,13,96,13,128,13,160,13,4,0,13,16,13, |
48,13,64,13,128,13,160,13,192,13,224,13,240,13,9,7,2,1,7,10,4,8,15,5,0,4, |
21,0,21,0,63,63,63,63,23,57,1,94,93,113,113,114,43,94,93,113,114,47,94,93, |
237,50,47,43,95,93,93,113,56,51,51,47,93,56,51,95,114,17,57,17,51,49,48,93, |
93,93,93,93,0,93,1,93,0,93,33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132, |
180,180,1,219,211,254,73,1,206,1,238,109,254,127,5,204,252,97,2,13,254,47, |
253,151,0,0,0,1,0,138,0,0,1,62,5,204,0,3,0,111,64,52,3,70,192,0,1,208,0,1, |
0,0,16,0,48,0,240,0,4,8,0,224,5,240,5,2,223,5,1,176,5,192,5,2,159,5,1,112, |
5,128,5,2,15,5,31,5,2,240,5,1,223,5,1,5,184,255,192,64,27,34,37,72,79,5,1, |
255,5,1,112,5,128,5,192,5,208,5,224,5,5,31,5,1,1,0,0,21,0,63,63,1,93,93,93, |
113,43,113,113,114,114,114,114,114,114,47,94,93,113,114,237,49,48,51,17,51, |
17,138,180,5,204,250,52,0,0,1,0,136,0,0,6,35,4,78,0,59,2,194,185,0,42,255, |
224,179,8,11,72,32,184,255,224,64,255,8,11,72,34,59,70,0,0,13,46,70,217,47, |
249,47,2,182,47,1,41,47,89,47,137,47,3,6,47,1,166,47,182,47,214,47,230,47, |
4,137,47,1,118,47,1,89,47,1,6,47,22,47,70,47,3,7,47,25,12,70,198,13,1,6,13, |
22,13,54,13,230,13,246,13,5,8,13,251,61,1,201,61,217,61,233,61,3,187,61,1, |
153,61,1,139,61,1,105,61,121,61,2,91,61,1,73,61,1,43,61,59,61,2,249,61,1, |
235,61,1,217,61,1,203,61,1,189,61,1,153,61,1,139,61,1,105,61,1,91,61,1,41, |
61,57,61,2,27,61,1,9,61,1,202,235,61,251,61,2,105,61,137,61,153,61,185,61, |
201,61,5,91,61,1,77,61,1,41,61,57,61,2,27,61,1,249,61,1,235,61,1,201,61,217, |
61,2,187,61,1,153,61,1,139,61,1,125,61,1,1,43,61,75,61,91,61,107,61,4,31, |
61,1,4,61,1,203,61,235,61,2,175,61,191,61,2,139,61,1,127,61,1,43,61,75,61, |
91,61,107,61,4,31,61,1,11,61,1,154,255,61,1,235,61,64,255,1,223,61,1,187, |
61,1,175,61,1,139,61,155,61,2,127,61,1,91,61,107,61,2,79,61,1,59,61,1,36, |
61,1,11,61,1,235,61,1,223,61,1,187,61,1,175,61,1,155,61,1,127,61,143,61,2, |
100,61,1,75,61,1,63,61,1,43,61,1,15,61,31,61,2,235,61,1,223,61,1,123,61,139, |
61,171,61,187,61,4,111,61,1,59,61,1,31,61,1,11,61,1,106,187,61,203,61,235, |
61,3,175,61,1,139,61,1,127,61,1,91,61,1,79,61,1,27,61,1,251,61,1,223,61,239, |
61,2,187,61,203,61,2,175,61,1,100,61,148,61,2,27,61,43,61,75,61,3,4,61,1, |
244,61,1,139,61,171,61,219,61,3,127,61,1,107,61,1,52,61,1,27,61,1,15,61,1, |
57,187,61,219,61,251,61,3,160,61,1,116,61,148,61,2,43,61,75,61,91,61,3,31, |
61,1,11,61,1,203,61,235,61,251,61,3,164,61,1,27,61,75,61,91,61,123,61,4,244, |
61,1,208,61,1,2,96,61,144,61,160,61,192,61,4,79,61,1,48,61,1,47,61,1,0,64, |
19,61,1,8,34,53,80,40,16,25,6,80,31,16,19,15,47,13,0,21,0,63,50,50,63,63, |
237,50,63,237,50,1,94,93,93,93,93,93,95,93,93,113,113,113,114,114,114,114, |
114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,113,113,113,95,113,113,113,113,113,113,113,114,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,47, |
94,93,113,237,50,47,94,93,93,93,93,93,113,113,113,113,237,18,57,47,237,57, |
49,48,0,43,43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21, |
51,62,3,51,50,22,23,51,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,3,0,20,47,76,55,57,92,65,35,179,1,2,2,1,170,1,2,3,2,3,24,56,75,97,64,123, |
143,28,3,24,60,80,100,64,82,119,76,36,178,20,47,76,55,57,92,65,35,2,174,79, |
106,65,27,45,85,125,81,253,141,3,83,34,75,67,48,7,5,44,57,59,20,47,76,53, |
29,98,107,47,76,53,29,44,92,145,100,253,47,2,174,79,106,65,27,43,84,126,83, |
253,141,0,1,0,136,0,0,3,238,4,78,0,37,0,109,185,0,34,255,224,64,36,7,11,72, |
37,70,64,80,0,1,159,0,255,0,2,0,39,128,0,39,192,39,208,39,224,39,4,192,39, |
1,15,39,1,128,39,1,39,184,255,192,64,32,19,23,72,25,12,70,192,13,1,0,13,16, |
13,48,13,224,13,240,13,5,8,13,25,6,80,31,16,19,15,13,0,21,0,63,50,63,63,237, |
50,1,47,94,93,113,237,50,43,93,113,113,114,26,16,220,93,113,26,237,49,48, |
43,33,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51, |
50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26, |
62,82,106,70,90,130,84,39,2,174,79,106,65,27,45,85,125,81,253,141,3,83,34, |
75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,253,47,0,0,0,0,2,0,86, |
255,236,4,29,4,78,0,14,0,34,0,116,64,59,121,32,137,32,2,116,28,132,28,2,118, |
22,134,22,2,121,18,137,18,2,150,12,166,12,2,4,12,20,12,2,11,9,27,9,2,11,5, |
27,5,2,4,2,20,2,2,7,0,71,64,144,15,1,15,36,128,48,36,1,36,184,255,192,64, |
20,30,35,72,223,36,1,25,71,31,8,1,8,20,80,10,16,30,80,3,22,0,63,237,63,237, |
1,47,93,237,93,43,113,26,16,220,93,26,237,49,48,94,93,93,93,93,93,93,93,93, |
93,1,16,2,35,34,46,2,53,16,33,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51, |
50,62,2,4,29,250,238,113,178,123,65,1,229,126,183,117,56,189,39,75,108,68, |
69,111,78,41,44,77,105,62,69,112,78,42,2,30,254,228,254,234,68,140,211,143, |
2,48,70,140,210,140,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0, |
0,2,0,132,254,87,4,29,4,77,0,38,0,58,0,148,64,16,105,56,121,56,2,105,42,121, |
42,2,134,36,150,36,2,36,184,255,224,64,19,7,10,72,73,31,89,31,2,73,7,89,7, |
2,134,3,150,3,2,3,184,255,224,64,63,7,10,72,0,71,64,160,39,1,39,60,128,49, |
28,15,70,0,16,16,16,48,16,240,16,4,8,16,176,60,1,63,60,1,112,60,144,60,2, |
31,60,1,255,60,1,192,60,224,60,2,28,44,80,34,16,22,15,15,27,8,54,80,5,22, |
0,63,237,50,63,63,63,237,50,1,93,93,113,113,114,114,47,94,93,237,50,50,26, |
16,220,93,26,237,49,48,43,93,93,93,43,93,93,93,1,20,14,2,35,34,38,39,35,30, |
3,21,17,35,17,52,46,2,39,51,30,3,21,51,62,3,51,50,30,2,7,52,46,2,35,34,14, |
2,21,20,30,2,51,50,62,2,4,29,40,93,153,112,116,174,46,5,1,1,1,1,180,1,2,2, |
1,174,1,3,3,3,4,25,64,82,101,63,112,153,93,40,189,24,59,98,74,60,106,79,46, |
38,73,108,70,75,99,59,24,2,34,123,208,150,85,88,100,2,32,48,59,29,254,89, |
5,6,39,72,59,42,9,3,36,51,58,26,52,73,47,21,80,145,205,129,100,156,108,56, |
34,96,169,135,115,159,98,43,58,110,159,0,0,2,0,86,254,87,3,240,4,78,0,34, |
0,54,0,165,64,119,85,47,101,47,2,90,43,106,43,2,57,32,73,32,2,54,9,70,9,2, |
9,1,25,1,121,1,137,1,4,6,5,22,5,118,5,134,5,4,9,22,70,64,35,11,127,23,223, |
23,2,23,56,128,45,71,15,3,1,10,3,32,56,64,56,2,207,56,1,0,56,32,56,144,56, |
176,56,4,80,223,56,1,192,56,1,79,56,1,128,56,160,56,2,15,56,47,56,2,208,56, |
240,56,2,15,56,1,8,22,27,17,16,11,40,80,6,16,29,50,80,0,22,0,63,237,50,63, |
237,50,63,63,1,94,93,93,113,113,114,114,114,94,93,93,113,47,94,93,237,26, |
16,220,93,50,50,26,237,49,48,0,94,93,93,93,93,93,93,5,34,2,17,16,18,51,50, |
30,2,23,51,52,62,2,55,51,14,1,21,17,35,17,52,54,55,54,55,35,14,3,1,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,1,228,206,192,197,201,67,103,81,61,25, |
2,3,3,4,2,173,2,5,180,1,1,1,1,2,26,63,82,103,1,16,41,75,107,66,69,98,61,29, |
27,61,97,70,60,106,79,46,20,1,22,1,22,1,26,1,28,24,47,70,47,25,61,54,39,3, |
17,144,134,251,54,1,183,26,56,25,28,29,51,75,49,23,2,62,118,160,96,41,51, |
105,161,110,108,160,104,51,37,97,169,0,0,0,1,0,136,0,0,2,136,4,78,0,31,0, |
62,64,40,16,21,48,21,2,21,21,33,12,31,70,192,0,1,0,0,16,0,48,0,224,0,240, |
0,5,8,0,25,40,19,22,72,25,12,18,16,7,15,0,21,0,63,63,63,51,205,43,1,47,94, |
93,113,237,50,17,51,47,93,49,48,51,17,52,46,2,39,51,30,3,21,51,62,3,51,50, |
22,23,21,46,1,35,34,14,2,21,17,142,1,2,2,1,170,1,3,3,1,4,19,43,58,80,57,22, |
40,11,18,48,30,62,87,55,26,3,62,34,71,66,58,23,23,59,62,57,20,62,91,59,29, |
7,3,165,5,5,56,99,137,81,253,204,0,0,1,0,57,255,236,3,182,4,75,0,55,0,189, |
64,85,116,46,132,46,2,111,21,127,21,143,21,3,107,22,1,37,54,1,42,27,1,21, |
52,1,5,2,21,2,2,11,30,27,30,2,36,73,35,35,0,72,64,32,19,48,19,2,144,19,160, |
19,176,19,3,19,57,128,11,73,10,64,25,30,72,10,10,44,72,79,29,95,29,2,32,29, |
1,29,96,57,192,57,2,128,57,1,57,184,255,192,64,42,39,42,72,63,57,1,16,57, |
1,19,44,5,41,80,32,0,36,1,144,36,240,36,2,36,36,32,16,14,80,5,96,11,112,11, |
2,128,11,1,11,11,5,22,0,63,51,47,93,113,16,237,63,51,47,93,113,16,237,18, |
57,57,1,93,93,43,93,113,47,93,113,237,51,47,43,237,26,16,220,93,113,26,237, |
50,47,237,49,48,93,93,0,93,1,93,93,0,93,93,93,1,20,14,2,35,34,46,2,39,55, |
30,1,51,50,62,2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,6,21, |
20,30,2,23,30,5,3,182,59,112,163,105,94,151,114,77,18,159,23,144,128,58,97, |
70,39,46,82,117,70,65,128,103,64,211,202,179,211,28,162,9,48,68,85,46,122, |
116,43,77,108,65,43,90,85,75,56,33,1,43,76,119,81,43,29,64,105,76,31,87,81, |
16,39,65,48,49,63,42,31,19,17,42,69,102,77,148,155,126,139,20,42,57,35,15, |
74,75,44,57,39,29,16,11,25,35,47,66,88,0,0,0,0,1,0,31,255,240,2,42,5,44,0, |
22,0,123,64,87,40,14,1,105,14,121,14,137,14,3,40,13,1,105,13,121,13,137,13, |
3,139,4,1,4,32,9,13,72,108,4,124,4,156,4,172,4,4,4,32,9,12,72,111,22,127, |
22,2,22,12,13,22,3,16,70,9,8,143,5,1,0,5,16,5,32,5,64,5,4,7,5,128,24,1,15, |
6,80,12,63,10,1,10,9,15,19,80,3,22,0,63,237,63,205,93,51,237,50,1,93,47,94, |
93,113,51,51,237,23,50,47,93,49,48,0,43,93,1,43,93,93,113,93,113,37,14,1, |
35,34,53,17,35,53,51,55,51,21,51,21,35,17,20,22,51,50,54,55,2,42,41,85,56, |
216,125,132,53,120,200,200,51,63,26,49,29,8,11,13,245,2,210,131,242,242,131, |
253,85,78,63,8,6,0,0,0,0,1,0,133,255,236,3,235,4,58,0,37,0,121,64,69,150, |
3,1,26,33,42,33,58,33,3,25,14,70,64,47,11,143,11,2,191,11,1,143,11,159,11, |
255,11,3,11,39,128,1,70,223,36,239,36,2,0,36,16,36,48,36,240,36,4,8,36,176, |
39,192,39,208,39,3,176,39,240,39,2,255,39,1,112,39,1,39,184,255,192,64,13, |
19,23,72,25,6,80,31,22,19,21,12,0,15,0,63,50,63,63,237,50,1,43,93,93,113, |
114,47,94,93,113,237,26,16,220,93,113,114,26,237,51,49,48,0,93,93,1,17,20, |
30,2,51,50,62,2,53,17,51,17,20,30,2,23,35,46,3,53,35,14,3,35,34,46,2,53,17, |
1,58,23,52,85,63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90, |
130,84,39,4,58,253,82,79,106,65,27,45,85,125,81,2,115,252,173,34,75,67,48, |
7,5,44,57,59,20,47,76,53,29,44,92,144,101,2,209,0,0,1,0,7,0,0,3,249,4,58, |
0,16,2,91,64,55,57,1,73,1,2,153,1,1,54,0,70,0,2,134,0,150,0,2,58,15,74,15, |
2,154,15,1,105,15,121,15,137,15,3,53,3,69,3,2,149,3,1,3,103,3,119,3,135,3, |
3,14,16,13,17,72,4,184,255,240,64,62,13,17,72,1,0,9,9,2,15,16,16,43,16,123, |
16,2,4,16,20,16,2,4,16,20,16,68,16,84,16,132,16,148,16,196,16,212,16,8,219, |
16,1,68,16,84,16,132,16,148,16,196,16,5,27,16,1,4,16,1,8,16,3,2,184,255,240, |
64,255,11,2,91,2,2,42,2,11,18,27,18,2,11,18,27,18,75,18,91,18,139,18,155, |
18,203,18,219,18,8,255,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18, |
1,68,18,84,18,2,32,18,1,4,18,20,18,2,199,224,18,1,196,18,212,18,2,160,18, |
1,4,18,20,18,68,18,84,18,132,18,148,18,6,68,18,84,18,132,18,148,18,196,18, |
212,18,6,27,18,1,4,18,1,219,18,1,196,18,1,155,18,1,132,18,1,91,18,1,68,18, |
1,27,18,1,4,18,1,151,11,18,27,18,75,18,91,18,139,18,155,18,203,18,219,18, |
8,155,18,203,18,219,18,3,132,18,1,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18, |
2,224,18,1,196,18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,4,18,20,18,68, |
18,84,18,4,103,4,18,20,18,68,18,84,18,132,18,148,18,196,18,212,18,8,219,18, |
1,196,18,1,155,18,1,132,18,1,91,18,1,68,18,1,27,18,1,4,18,1,219,18,1,196, |
18,1,11,18,27,18,75,18,64,99,91,18,139,18,155,18,6,55,75,18,91,18,139,18, |
155,18,203,18,219,18,6,63,18,1,32,18,1,4,18,20,18,2,224,18,1,196,18,212,18, |
2,160,18,1,132,18,148,18,2,96,18,1,68,18,84,18,2,32,18,1,4,18,20,18,2,196, |
18,212,18,2,160,18,1,132,18,148,18,2,96,18,1,2,80,18,1,47,18,1,0,18,16,18, |
2,7,15,2,15,9,1,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93,93,113,113,113, |
113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113,113,113,113,113, |
113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114,94,93,93,93,93,93, |
93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93,93,93,93,113,114,47, |
94,93,56,51,47,94,93,93,93,93,113,114,114,56,51,18,57,61,47,51,51,49,48,43, |
43,93,95,93,113,93,93,113,93,113,93,113,33,35,1,51,19,30,3,23,62,3,55,19, |
51,2,101,213,254,119,192,238,7,19,20,17,6,6,19,20,21,8,246,191,4,58,253,64, |
22,63,68,63,21,21,63,66,63,22,2,194,0,0,0,0,1,255,253,0,0,5,204,4,58,0,42, |
3,177,64,36,229,23,1,58,41,74,41,2,122,41,138,41,154,41,3,53,16,69,16,2,117, |
16,133,16,149,16,3,54,29,70,29,2,54,29,1,29,184,255,240,64,22,13,17,72,57, |
28,73,28,2,57,28,1,28,16,13,17,72,54,0,70,0,2,0,184,255,240,64,9,11,17,72, |
54,13,70,13,2,13,184,255,240,64,51,11,17,72,57,1,73,1,2,1,16,11,17,72,57, |
14,73,14,2,3,14,16,9,17,72,14,13,22,29,28,7,1,0,35,40,35,1,88,35,1,22,7,35, |
35,7,22,3,15,41,42,16,42,184,255,192,64,73,47,50,72,73,42,1,52,42,1,38,42, |
1,249,42,1,198,42,230,42,2,164,42,1,150,42,1,121,42,1,54,42,70,42,102,42, |
3,25,42,1,244,42,1,182,42,230,42,2,132,42,148,42,2,102,42,118,42,2,57,42, |
1,38,42,1,20,42,1,6,42,1,8,42,16,15,184,255,240,64,255,9,15,89,15,105,15, |
121,15,4,10,15,198,44,230,44,246,44,3,164,44,1,150,44,1,121,44,1,102,44,1, |
84,44,1,54,44,70,44,2,25,44,1,244,44,1,230,44,1,196,44,1,182,44,1,153,44, |
1,134,44,1,116,44,1,102,44,1,57,44,1,20,44,36,44,2,6,44,1,202,249,44,1,150, |
44,182,44,198,44,230,44,4,105,44,1,54,44,70,44,2,9,44,25,44,2,230,44,1,185, |
44,1,86,44,102,44,134,44,3,57,44,1,43,44,1,20,44,1,6,44,1,228,44,1,214,44, |
1,196,44,1,182,44,1,162,44,1,148,44,1,134,44,1,114,44,1,100,44,1,86,44,1, |
52,44,68,44,2,34,44,1,20,44,1,6,44,1,153,246,44,1,194,44,210,44,2,180,44, |
1,166,44,1,132,44,1,118,44,1,84,44,100,44,2,66,44,1,52,44,1,22,44,38,44,2, |
4,44,1,226,44,242,44,2,212,44,1,198,44,1,164,44,1,146,44,1,132,44,1,102,44, |
118,44,2,84,44,1,54,44,70,44,2,36,44,1,22,44,1,4,44,1,244,44,64,213,1,230, |
44,1,196,44,1,178,44,1,164,44,1,102,44,134,44,150,44,3,68,44,84,44,2,54,44, |
1,20,44,1,6,44,1,105,246,44,1,226,44,1,212,44,1,150,44,182,44,198,44,3,116, |
44,132,44,2,54,44,70,44,102,44,3,36,44,1,6,44,22,44,2,244,44,1,182,44,230, |
44,2,148,44,164,44,2,134,44,1,105,44,1,86,44,1,68,44,1,6,44,54,44,2,228,44, |
1,214,44,1,196,44,1,166,44,182,44,2,137,44,1,114,44,1,1,96,44,1,4,44,36,44, |
84,44,3,56,164,44,196,44,212,44,244,44,4,128,44,1,116,44,1,75,44,1,48,44, |
1,20,44,36,44,2,251,44,1,196,44,1,160,44,1,148,44,1,123,44,1,52,44,68,44, |
100,44,3,27,44,1,240,44,1,228,44,1,203,44,1,100,44,132,44,148,44,180,44,4, |
63,44,1,2,0,44,16,44,2,8,7,184,255,224,64,40,14,17,72,66,7,1,52,7,1,34,7, |
1,7,28,41,3,15,15,35,40,12,17,72,45,35,1,22,40,12,17,72,45,22,1,1,22,35,3, |
14,21,0,63,23,51,93,43,93,43,63,23,51,93,93,93,43,1,94,93,95,93,93,93,93, |
93,113,113,113,113,113,113,113,114,114,114,114,114,114,94,93,93,95,93,93, |
93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114,114,114,94, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,47,94,93, |
56,51,47,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,114,114,114, |
43,56,51,18,23,57,61,47,47,47,113,114,17,51,51,17,51,51,17,51,51,49,48,43, |
95,113,43,113,43,113,43,113,43,93,113,43,93,113,93,113,93,113,113,33,35,3, |
46,1,39,38,39,6,7,14,1,7,3,35,1,51,19,30,1,23,22,23,54,55,62,1,55,19,51,19, |
30,1,23,22,23,54,55,62,1,55,19,51,4,150,209,173,8,17,8,10,9,9,10,8,19,8,178, |
208,254,209,178,183,7,14,7,7,8,8,9,8,16,6,196,193,189,7,16,7,8,8,8,8,7,15, |
7,191,176,2,186,27,80,38,44,47,45,44,38,82,31,253,74,4,58,253,33,23,67,32, |
37,39,38,36,31,64,21,2,231,253,25,26,66,29,34,35,38,36,31,67,26,2,223,0,0, |
1,0,23,0,0,3,234,4,58,0,11,2,214,64,72,148,2,1,134,2,1,141,8,157,8,2,121, |
8,1,130,6,146,6,2,118,6,1,141,0,157,0,2,121,0,1,55,10,119,10,2,28,10,1,122, |
4,1,19,4,1,3,24,1,120,1,136,1,152,1,4,23,7,135,7,151,7,3,6,8,10,1,7,4,4,9, |
9,16,5,184,255,240,64,59,5,9,5,9,3,0,11,16,41,11,57,11,2,4,11,20,11,2,214, |
11,230,11,246,11,3,196,11,1,150,11,166,11,182,11,3,132,11,1,6,11,38,11,70, |
11,102,11,134,11,150,11,166,11,198,11,230,11,9,8,11,184,255,192,181,24,31, |
72,11,2,3,184,255,240,64,11,9,3,1,9,3,57,3,2,10,3,13,184,255,128,64,116,223, |
233,72,118,13,1,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,230, |
13,246,13,2,210,13,1,192,13,1,178,13,1,132,13,148,13,164,13,3,118,13,1,100, |
13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13,1,199,246,13,1,228,13,1, |
214,13,1,196,13,1,182,13,1,164,13,1,6,13,70,13,86,13,134,13,150,13,166,13, |
198,13,214,13,230,13,9,150,13,198,13,2,13,184,255,192,64,187,183,192,72,132, |
13,1,86,13,102,13,118,13,3,68,13,1,38,13,54,13,2,4,13,1,151,38,13,54,13,102, |
13,118,13,166,13,182,13,198,13,230,13,246,13,9,230,13,1,132,13,1,118,13,1, |
68,13,84,13,100,13,3,54,13,1,36,13,1,22,13,1,4,13,1,246,13,1,228,13,1,214, |
13,1,196,13,1,182,13,1,164,13,1,118,13,134,13,150,13,3,100,13,1,6,13,22,13, |
38,13,70,13,86,13,5,103,6,13,70,13,86,13,134,13,150,13,198,13,214,13,230, |
13,8,153,13,217,13,2,100,13,1,86,13,1,68,13,1,54,13,1,36,13,1,22,13,1,4,13, |
1,214,13,230,13,246,13,3,196,13,1,6,13,38,13,54,13,70,13,4,55,102,13,166, |
13,182,13,230,13,246,13,5,13,184,255,192,64,54,61,66,72,57,13,1,34,13,1,1, |
0,13,16,13,2,244,13,1,192,13,208,13,224,13,3,180,13,1,128,13,144,13,160,13, |
3,116,13,1,96,13,1,84,13,1,64,13,1,52,13,1,32,13,1,13,184,255,192,64,34,18, |
24,72,160,13,1,2,0,13,16,13,80,13,112,13,128,13,144,13,6,7,10,4,4,7,1,3,2, |
8,6,15,0,2,21,0,63,51,63,51,18,23,57,17,1,51,94,93,95,93,43,113,113,113,113, |
113,113,113,113,113,113,114,95,114,114,43,114,94,93,93,93,113,113,113,113, |
113,113,113,113,114,94,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113, |
113,113,114,94,93,93,93,93,93,43,93,113,114,114,114,114,114,114,94,93,93, |
93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,43,47,94, |
93,114,56,51,47,43,94,93,113,113,113,113,114,114,56,51,18,57,57,47,47,56, |
56,18,23,57,50,51,49,48,0,93,93,1,95,93,93,93,93,93,93,93,93,93,93,93,93, |
33,9,1,35,9,1,51,9,1,51,9,1,3,33,254,221,254,219,194,1,129,254,145,199,1, |
14,1,12,201,254,145,1,134,1,188,254,68,2,44,2,14,254,91,1,165,253,244,253, |
210,0,0,0,0,1,0,5,254,87,3,252,4,58,0,31,2,207,64,59,147,3,1,147,2,1,153, |
16,1,150,0,1,141,16,157,16,2,141,0,157,0,2,122,29,138,29,154,29,3,105,29, |
1,157,30,1,30,16,13,16,72,146,19,1,134,19,1,114,19,1,86,19,102,19,2,146,18, |
1,3,18,184,255,240,64,36,13,16,72,16,0,24,8,24,8,24,17,30,31,16,153,31,1, |
134,31,1,89,31,1,70,31,1,25,31,1,6,31,1,8,31,18,17,184,255,240,64,36,17,6, |
33,1,6,33,38,33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230, |
33,246,33,12,199,230,33,246,33,2,33,184,255,192,64,255,217,233,72,196,33, |
1,166,33,182,33,2,132,33,1,6,33,38,33,54,33,70,33,102,33,118,33,6,6,33,38, |
33,54,33,70,33,102,33,118,33,134,33,166,33,182,33,198,33,230,33,246,33,12, |
6,33,22,33,38,33,70,33,86,33,102,33,134,33,166,33,198,33,230,33,246,33,11, |
151,244,33,1,224,33,1,194,33,210,33,2,180,33,1,160,33,1,130,33,146,33,2,116, |
33,1,96,33,1,66,33,82,33,2,52,33,1,32,33,1,2,33,18,33,2,228,33,244,33,2,194, |
33,210,33,2,164,33,180,33,2,130,33,146,33,2,100,33,116,33,2,66,33,82,33,2, |
36,33,52,33,2,2,33,18,33,2,228,33,244,33,2,194,33,210,33,2,164,33,180,33, |
2,130,33,146,33,2,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2, |
33,1,103,228,33,244,33,2,214,33,1,194,33,1,164,33,180,33,2,150,33,1,130,33, |
1,100,33,116,33,2,86,33,1,66,33,1,36,33,52,33,2,22,33,1,2,33,1,228,33,244, |
33,2,214,33,1,64,166,194,33,1,1,160,33,176,33,2,132,33,148,33,2,96,33,112, |
33,2,68,33,84,33,2,32,33,48,33,2,4,33,20,33,2,224,33,240,33,2,196,33,212, |
33,2,160,33,176,33,2,132,33,148,33,2,96,33,112,33,2,68,33,84,33,2,32,33,48, |
33,2,4,33,20,33,2,55,224,33,1,196,33,212,33,2,160,33,1,132,33,148,33,2,96, |
33,1,68,33,84,33,2,32,33,1,4,33,20,33,2,224,33,1,196,33,212,33,2,160,33,1, |
132,33,148,33,2,96,33,1,2,0,33,32,33,48,33,80,33,4,80,33,128,33,144,33,192, |
33,4,47,33,1,0,33,16,33,2,7,16,0,24,0,32,30,17,15,12,80,5,27,0,63,237,63, |
51,17,51,51,17,51,1,94,93,93,93,113,95,113,113,113,113,113,114,114,114,114, |
114,114,114,114,94,93,93,93,93,93,93,93,93,113,113,113,113,113,113,95,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93, |
93,93,93,93,93,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114, |
114,114,114,114,114,94,93,113,114,114,114,114,43,114,94,93,113,47,56,51,47, |
94,93,93,93,93,93,93,56,51,18,57,57,61,47,24,47,17,51,51,49,48,43,95,93,93, |
93,93,93,43,93,93,93,0,93,93,1,93,93,93,93,33,14,3,35,34,38,39,53,30,1,51, |
50,54,63,1,1,51,19,30,3,23,62,3,55,19,51,2,92,38,79,98,120,78,34,58,32,19, |
48,17,79,136,51,17,254,83,192,228,10,31,31,24,2,3,23,29,30,10,212,190,98, |
157,111,59,4,7,135,3,3,118,129,43,4,53,253,170,27,90,90,72,9,11,65,80,82, |
30,2,106,0,1,0,49,0,0,3,182,4,58,0,9,1,11,64,78,157,2,173,2,2,139,2,1,89, |
2,105,2,2,146,7,162,7,2,116,7,132,7,2,70,7,86,7,102,7,3,40,8,1,3,8,2,123, |
6,1,4,6,20,6,36,6,164,6,180,6,212,6,228,6,7,7,6,7,3,11,1,59,1,91,1,3,10,1, |
64,39,55,72,1,64,17,20,72,1,11,184,255,192,64,40,92,100,72,192,11,1,180,11, |
1,160,11,1,148,11,1,128,11,1,116,11,1,96,11,1,84,11,1,64,11,1,52,11,68,11, |
100,11,132,11,4,11,184,255,192,64,32,73,82,72,32,11,1,20,11,1,0,11,1,63,68, |
11,100,11,132,11,164,11,4,4,11,36,11,68,11,100,11,4,11,184,255,192,179,51, |
62,72,11,184,255,192,64,18,31,39,72,224,11,1,2,0,11,32,11,80,11,112,11,4, |
7,11,184,255,192,64,13,16,20,72,6,3,80,4,15,1,7,80,0,21,0,63,237,50,63,237, |
50,1,43,94,93,95,93,43,43,113,114,94,93,93,93,43,93,113,113,113,113,113,113, |
113,113,113,43,47,43,43,94,93,51,51,47,94,93,113,51,51,95,113,49,48,93,93, |
93,93,93,93,51,53,1,33,53,33,21,1,33,21,49,2,149,253,147,3,56,253,106,2,187, |
137,3,38,139,137,252,218,139,0,0,0,1,0,34,254,87,2,136,5,204,0,45,0,96,64, |
65,3,32,9,12,72,19,32,9,13,72,23,45,33,28,40,240,17,11,31,5,63,5,2,143,5, |
1,64,5,1,5,33,11,245,47,12,111,12,2,15,12,79,12,223,12,239,12,4,47,12,79, |
12,111,12,3,12,12,0,24,245,21,0,43,245,0,27,0,63,237,63,237,18,57,47,93,113, |
114,237,57,1,47,93,93,113,51,51,237,50,50,205,50,49,48,43,43,1,34,46,2,53, |
17,52,46,2,39,53,62,3,53,17,52,54,59,1,21,35,34,6,21,17,20,14,2,7,21,30,3, |
21,17,20,22,59,1,21,2,1,65,99,66,34,29,55,80,51,51,80,55,29,133,131,135,63, |
91,77,30,52,71,41,43,71,51,29,77,91,63,254,87,41,76,108,68,1,105,63,88,56, |
28,2,127,2,28,56,88,62,1,106,141,152,129,107,108,254,156,50,84,64,44,10,2, |
10,44,65,84,51,254,155,106,109,129,0,1,0,183,254,78,1,93,5,204,0,3,1,207, |
64,21,3,171,6,0,1,11,0,0,4,5,214,5,230,5,246,5,3,194,5,1,5,184,255,128,179, |
226,229,72,5,184,255,192,64,10,222,225,72,2,5,18,5,2,218,5,184,255,128,179, |
214,217,72,5,184,255,192,64,20,210,213,72,180,5,196,5,2,162,5,1,1,112,5,128, |
5,144,5,3,5,184,255,192,64,20,199,202,72,0,5,1,240,5,1,212,5,228,5,2,176, |
5,192,5,2,5,184,255,192,64,43,187,190,72,48,5,64,5,80,5,3,4,5,20,5,36,5,3, |
240,5,1,196,5,212,5,228,5,3,128,5,144,5,160,5,3,4,5,20,5,36,5,3,164,5,184, |
255,192,179,168,171,72,5,184,255,128,179,160,163,72,5,184,255,192,64,14,156, |
159,72,112,5,128,5,144,5,3,228,5,1,5,184,255,192,64,11,145,148,72,176,5,192, |
5,208,5,3,5,184,255,192,64,15,133,136,72,48,5,1,20,5,36,5,2,0,5,1,5,184,255, |
192,64,15,122,125,72,128,5,1,4,5,20,5,36,5,3,110,5,184,255,192,64,10,114, |
117,72,192,5,1,84,5,1,5,184,255,192,182,102,105,72,16,5,1,5,184,255,192,64, |
9,91,94,72,80,5,96,5,2,5,184,255,192,64,15,79,82,72,203,5,219,5,2,160,5,176, |
5,2,2,5,184,255,192,64,10,68,71,72,15,5,31,5,2,62,5,184,255,192,64,29,56, |
61,72,207,5,1,96,5,112,5,160,5,176,5,4,31,5,1,0,5,1,160,5,224,5,240,5,3,5, |
184,255,192,64,28,25,28,72,5,64,17,21,72,64,5,112,5,128,5,144,5,4,15,5,31, |
5,47,5,3,7,1,0,0,0,47,63,1,94,93,93,43,43,113,114,114,114,114,43,94,93,43, |
95,93,93,43,113,43,114,43,114,114,43,94,93,93,43,113,113,113,43,113,43,113, |
114,43,43,43,94,93,93,93,93,113,113,43,113,113,113,114,43,114,95,114,114, |
43,43,94,93,43,43,93,93,17,18,57,47,94,93,237,49,48,19,17,51,17,183,166,254, |
78,7,126,248,130,0,0,0,0,1,0,34,254,87,2,135,5,204,0,45,0,98,185,0,40,255, |
224,179,9,12,72,24,184,255,224,64,55,9,13,72,20,44,32,26,38,240,15,9,48,3, |
1,192,3,208,3,2,3,9,32,245,47,31,111,31,2,15,31,79,31,223,31,239,31,4,47, |
31,79,31,111,31,3,31,31,21,45,245,44,27,20,245,21,0,0,63,237,63,237,18,57, |
47,93,113,114,237,57,1,47,93,113,51,51,253,50,50,205,50,49,48,43,43,19,50, |
54,53,17,52,62,2,55,53,46,3,53,17,52,38,43,1,53,51,50,22,21,17,20,30,2,23, |
21,14,3,21,17,20,14,2,43,1,53,94,91,79,28,51,71,43,42,70,52,29,79,91,60,132, |
131,133,29,55,81,52,52,81,55,29,34,66,99,65,132,254,216,109,106,1,101,51, |
84,65,44,10,2,10,44,64,84,50,1,100,108,107,129,152,141,254,150,62,88,56,28, |
2,127,2,28,56,88,63,254,151,68,108,76,41,129,0,0,0,0,1,0,92,2,41,4,80,3,39, |
0,32,0,154,64,26,90,3,138,3,2,25,2,41,2,57,2,3,30,48,10,16,72,13,31,1,25, |
48,9,12,72,13,184,255,208,179,9,13,72,7,184,255,208,64,19,9,13,72,0,27,32, |
27,112,27,3,27,32,10,1,10,24,173,64,10,184,255,192,180,38,60,72,10,0,184, |
255,192,179,23,28,72,0,184,255,192,64,41,14,20,72,0,128,27,64,41,60,72,27, |
5,173,31,14,79,14,159,14,3,111,14,127,14,159,14,175,14,207,14,239,14,255, |
14,7,14,64,9,13,72,14,0,47,43,93,113,237,196,43,26,221,43,43,196,43,26,237, |
1,47,93,47,93,49,48,0,43,43,43,93,43,93,93,1,34,38,39,38,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,76,69,145,73,129,88,38,65,60, |
56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68,2,41, |
44,26,45,12,23,32,21,143,38,46,13,20,26,13,8,15,14,8,50,42,149,23,30,19,8, |
0,0,0,2,0,242,254,185,1,184,4,58,0,3,0,7,2,19,64,133,2,91,3,3,166,5,182,5, |
2,5,150,105,6,185,6,2,70,6,86,6,2,57,6,1,6,64,23,27,72,182,6,198,6,2,73,6, |
89,6,105,6,3,22,6,54,6,2,9,6,1,10,6,121,9,137,9,153,9,201,9,4,70,9,1,9,9, |
57,9,2,249,9,1,182,9,1,105,9,121,9,169,9,3,38,9,1,9,9,1,204,217,9,233,9,2, |
150,9,1,73,9,89,9,121,9,3,6,9,1,185,9,201,9,2,134,9,1,116,9,1,86,9,102,9, |
2,68,9,1,22,9,38,9,54,9,3,9,184,255,192,64,14,168,171,72,180,9,1,134,9,150, |
9,166,9,3,9,184,255,192,64,22,159,162,72,36,9,1,6,9,22,9,2,156,182,9,198, |
9,214,9,246,9,4,9,184,255,64,64,14,147,150,72,102,9,1,150,9,166,9,182,9,3, |
9,184,255,192,64,24,137,144,72,98,9,114,9,130,9,3,64,9,80,9,2,34,9,50,9,2, |
16,9,1,9,184,255,64,182,117,124,72,128,9,1,9,184,255,64,64,10,110,115,72, |
4,9,20,9,2,108,9,184,255,64,64,62,101,107,72,180,9,196,9,212,9,3,150,9,166, |
9,2,132,9,1,118,9,1,82,9,98,9,2,36,9,52,9,68,9,3,6,9,22,9,2,246,9,1,194,9, |
210,9,2,1,144,9,160,9,176,9,3,100,9,116,9,132,9,3,9,184,255,128,64,16,71, |
75,72,212,9,228,9,244,9,3,160,9,176,9,2,9,184,255,192,64,61,59,64,72,16,9, |
32,9,2,4,9,1,55,180,9,228,9,244,9,3,128,9,144,9,2,84,9,100,9,116,9,3,27,9, |
1,0,9,1,240,9,1,196,9,212,9,228,9,3,84,9,100,9,164,9,212,9,228,9,244,9,6, |
9,184,255,192,64,20,26,31,72,64,9,1,2,15,9,1,7,0,6,156,7,15,0,3,1,3,0,47, |
93,63,253,206,1,94,93,95,93,43,93,113,113,114,114,114,114,114,94,93,93,43, |
93,93,43,113,113,95,113,113,114,114,114,114,114,114,114,43,94,93,43,93,43, |
113,113,113,113,43,113,114,43,114,94,93,93,43,93,93,43,113,113,113,113,113, |
113,114,114,114,114,94,93,93,93,93,93,113,113,113,47,94,93,93,93,93,43,113, |
113,113,237,113,51,47,237,49,48,1,51,19,35,19,21,35,53,1,10,148,24,196,198, |
194,2,173,252,12,5,129,201,201,0,0,0,1,0,135,255,225,3,250,5,129,0,43,0,137, |
64,31,88,14,104,14,2,87,20,103,20,2,26,28,1,21,6,1,6,3,1,25,10,22,0,11,1, |
11,11,3,39,71,17,184,255,192,64,56,8,11,72,17,31,70,30,30,3,70,4,34,80,217, |
31,1,124,31,140,31,2,25,31,1,31,22,96,25,112,25,2,160,25,1,25,23,3,12,213, |
3,1,112,3,128,3,2,21,3,101,3,2,3,0,80,9,10,0,47,221,237,51,93,93,93,51,63, |
221,93,113,50,50,93,93,93,237,1,47,237,51,47,237,47,43,237,18,57,47,113,51, |
205,50,49,48,0,93,93,93,93,93,1,50,54,55,23,14,3,7,21,35,53,46,3,53,52,62, |
2,55,53,51,21,30,3,23,7,46,1,35,34,14,2,21,20,30,2,2,84,96,129,15,182,8,51, |
88,126,83,124,111,154,95,43,66,111,146,80,124,78,120,86,54,12,185,14,114, |
105,77,103,64,27,27,64,105,1,21,104,108,12,62,116,92,62,8,168,168,10,93,149, |
195,113,150,206,131,63,7,155,155,8,55,85,109,63,14,90,106,51,103,156,105, |
93,156,113,62,0,0,1,0,58,0,0,4,80,5,150,0,50,0,210,64,83,70,23,1,54,2,70, |
2,2,21,18,37,18,53,18,3,36,0,39,13,6,26,111,25,25,39,0,44,110,6,35,39,110, |
14,95,10,1,10,10,0,79,6,95,6,111,6,3,6,50,111,0,0,32,0,2,0,0,32,0,48,0,80, |
0,112,0,144,0,176,0,208,0,8,0,0,16,0,48,0,192,0,224,0,5,0,184,255,192,64, |
64,14,18,72,0,38,11,81,35,15,14,31,14,175,14,3,15,14,63,14,111,14,127,14, |
159,14,175,14,207,14,223,14,8,8,14,64,37,42,72,14,64,27,32,72,14,14,44,31, |
115,26,20,7,7,44,116,22,50,118,50,134,50,3,50,6,24,0,63,51,93,237,50,63,51, |
237,18,57,47,43,43,94,93,113,51,237,50,1,47,43,93,113,114,237,47,93,18,57, |
47,113,51,237,50,16,237,17,18,57,47,237,17,51,17,18,57,49,48,0,93,1,93,0, |
93,1,14,3,35,33,53,62,1,61,1,35,53,51,17,52,62,2,51,50,30,2,23,7,46,3,35, |
34,6,21,17,33,21,33,21,20,14,2,7,33,50,62,2,55,4,80,9,57,89,115,67,253,70, |
89,86,186,186,48,99,152,103,70,123,99,71,18,174,10,39,53,65,36,114,112,1, |
152,254,104,22,44,63,40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160, |
121,144,129,1,24,92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,254,224, |
129,126,56,106,92,71,21,19,42,67,48,0,0,0,2,0,113,0,225,4,2,4,115,0,35,0, |
55,0,153,64,119,74,29,90,29,106,29,3,44,29,60,29,2,74,25,90,25,106,25,3,44, |
25,60,25,2,69,11,85,11,101,11,3,35,11,51,11,2,69,7,85,7,101,7,3,35,7,51,7, |
2,74,34,90,34,106,34,3,45,34,61,34,2,69,20,85,20,101,20,3,35,20,51,20,2,69, |
16,85,16,101,16,3,35,16,51,16,2,74,2,90,2,106,2,3,45,2,61,2,2,46,176,18,36, |
176,207,0,223,0,2,0,0,1,0,47,57,1,41,176,27,51,176,9,0,47,237,220,237,1,93, |
47,93,93,237,220,237,49,48,93,93,93,93,93,93,93,93,0,93,93,93,93,93,93,93, |
93,19,52,54,55,39,55,23,62,1,51,50,22,23,55,23,7,30,1,21,20,6,7,23,7,39,14, |
1,35,34,38,39,7,39,55,46,1,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,137, |
41,37,100,104,99,54,127,73,71,126,54,97,104,96,37,43,44,38,100,102,101,54, |
126,71,72,128,52,105,102,102,37,41,154,44,77,102,58,57,102,77,44,44,77,102, |
57,58,102,77,44,2,172,71,127,54,100,103,101,39,43,42,38,97,105,96,54,127, |
71,71,128,53,100,105,101,37,41,42,38,105,105,102,54,127,73,58,102,76,44,44, |
76,102,58,58,102,76,45,45,76,102,0,1,255,254,0,0,4,118,5,129,0,22,0,185,64, |
134,151,0,167,0,2,152,17,168,17,2,73,22,1,70,18,1,155,21,171,21,2,74,21,106, |
21,122,21,138,21,4,148,19,164,19,2,69,19,101,19,117,19,133,19,4,19,15,18, |
31,18,79,18,143,18,4,18,9,21,0,22,16,22,64,22,128,22,4,22,20,4,0,8,92,17, |
13,0,9,16,9,64,9,128,9,4,7,9,3,15,81,16,7,11,81,4,47,12,159,12,175,12,3,12, |
64,41,45,72,0,12,16,12,32,12,160,12,4,12,20,0,0,16,1,15,16,175,16,2,8,16, |
16,8,21,18,3,8,18,0,63,63,51,18,57,47,94,93,113,51,51,222,93,43,113,50,237, |
50,16,237,50,1,47,94,93,51,51,253,50,50,57,204,93,50,16,204,93,50,49,48,93, |
93,93,93,93,93,93,93,1,33,21,33,21,33,21,33,17,35,17,33,53,33,55,33,53,33, |
1,51,9,1,51,2,208,1,65,254,129,1,127,254,129,178,254,131,1,125,2,254,129, |
1,64,254,91,199,1,115,1,119,199,2,197,125,154,127,254,209,1,47,127,154,125, |
2,188,253,121,2,135,0,2,0,183,254,78,1,93,5,204,0,3,0,7,1,221,64,23,3,7,171, |
0,6,4,1,11,4,4,8,9,214,9,230,9,246,9,3,194,9,1,9,184,255,128,179,226,229, |
72,9,184,255,192,64,10,222,225,72,2,9,18,9,2,218,9,184,255,128,179,214,217, |
72,9,184,255,192,64,20,210,213,72,180,9,196,9,2,162,9,1,1,112,9,128,9,144, |
9,3,9,184,255,192,64,20,199,202,72,0,9,1,240,9,1,212,9,228,9,2,176,9,192, |
9,2,9,184,255,192,64,43,187,190,72,48,9,64,9,80,9,3,4,9,20,9,36,9,3,240,9, |
1,196,9,212,9,228,9,3,128,9,144,9,160,9,3,4,9,20,9,36,9,3,164,9,184,255,192, |
179,168,171,72,9,184,255,128,179,160,163,72,9,184,255,192,64,14,156,159,72, |
112,9,128,9,144,9,3,228,9,1,9,184,255,192,64,11,145,148,72,176,9,192,9,208, |
9,3,9,184,255,192,64,15,133,136,72,48,9,1,20,9,36,9,2,0,9,1,9,184,255,192, |
64,15,122,125,72,128,9,1,4,9,20,9,36,9,3,110,9,184,255,192,64,10,114,117, |
72,192,9,1,84,9,1,9,184,255,192,182,102,105,72,16,9,1,9,184,255,192,64,9, |
91,94,72,80,9,96,9,2,9,184,255,192,64,15,79,82,72,203,9,219,9,2,160,9,176, |
9,2,2,9,184,255,192,64,10,68,71,72,15,9,31,9,2,62,9,184,255,192,64,29,56, |
61,72,207,9,1,96,9,112,9,160,9,176,9,4,31,9,1,0,9,1,160,9,224,9,240,9,3,9, |
184,255,192,64,33,25,28,72,9,64,17,21,72,64,9,112,9,128,9,144,9,4,15,9,31, |
9,47,9,3,7,5,0,5,0,1,4,1,0,0,63,47,18,57,57,47,47,1,94,93,93,43,43,113,114, |
114,114,114,43,94,93,43,95,93,93,43,113,43,114,43,114,114,43,94,93,93,43, |
113,113,113,43,113,43,113,114,43,43,43,94,93,93,93,93,113,113,43,113,113, |
113,114,43,114,95,114,114,43,43,94,93,43,43,93,93,17,18,57,47,94,93,51,237, |
50,49,48,19,17,51,17,3,17,51,17,183,166,166,166,2,194,3,10,252,246,251,140, |
3,11,252,245,0,0,0,0,2,0,115,255,84,4,0,5,204,0,77,0,97,1,79,64,144,117,47, |
133,47,2,122,8,138,8,2,100,85,1,43,85,107,85,2,45,81,109,81,2,45,57,109,57, |
125,57,141,57,4,85,96,117,96,133,96,3,83,62,115,62,131,62,3,83,90,115,90, |
131,90,3,121,80,137,80,2,111,80,1,90,80,1,45,80,1,116,16,132,16,2,54,16,70, |
16,2,42,73,1,37,42,1,37,45,1,43,3,1,25,3,1,5,31,21,31,2,5,36,21,36,2,11,76, |
27,76,2,14,73,75,34,73,55,144,75,1,75,55,75,55,78,70,29,65,24,6,73,5,5,24, |
73,160,78,1,0,78,32,78,64,78,144,78,4,78,184,255,192,179,29,33,72,78,184, |
255,192,64,18,21,26,72,78,45,73,44,44,88,73,0,65,32,65,176,65,3,65,184,255, |
192,64,68,34,38,72,65,217,55,1,203,55,1,188,55,1,152,55,1,245,3,1,230,3,1, |
149,3,1,121,83,1,106,83,1,218,83,1,155,83,1,228,14,244,14,2,166,14,1,119, |
14,135,14,2,104,14,1,14,83,93,55,4,0,50,81,45,39,11,81,6,0,0,0,63,50,237, |
47,51,237,18,23,57,93,93,93,93,93,93,113,113,93,93,93,93,93,93,93,1,47,43, |
93,237,51,47,237,47,43,43,93,113,237,50,16,237,17,18,57,57,17,57,57,47,47, |
114,16,237,16,237,49,48,93,93,93,93,93,0,93,93,1,93,0,93,93,93,93,93,93,93, |
93,93,93,93,93,1,93,93,93,1,50,30,2,23,7,46,3,35,34,6,21,20,30,2,23,30,3, |
21,20,14,2,7,30,3,21,20,14,2,35,34,46,2,39,55,30,3,51,50,62,2,53,52,46,2, |
39,46,3,53,52,62,2,55,46,3,53,52,54,1,52,46,2,39,14,3,21,20,30,2,23,62,3, |
2,76,79,138,108,73,15,161,8,46,68,84,46,125,129,50,83,109,59,68,139,112,70, |
28,55,82,54,49,79,55,30,58,112,164,107,93,154,117,79,19,161,12,54,78,100, |
57,58,102,76,45,57,95,123,65,65,131,104,65,32,59,84,53,42,75,57,33,211,1, |
225,53,88,113,61,58,89,60,31,49,82,108,60,54,93,68,39,5,204,30,63,98,69,20, |
45,58,34,13,79,71,45,64,46,32,14,16,46,73,106,76,45,87,73,55,13,21,51,64, |
81,51,73,117,83,44,27,64,104,77,31,55,67,37,13,18,40,65,47,54,72,51,36,16, |
15,46,73,105,74,45,83,71,53,15,14,46,64,80,48,139,155,252,203,48,69,51,35, |
14,3,33,52,69,39,46,66,48,34,15,1,24,47,70,0,0,0,0,2,0,45,4,195,2,90,5,123, |
0,3,0,7,0,193,178,3,133,0,184,255,192,179,19,22,72,0,184,255,192,64,131,13, |
16,72,0,7,133,4,64,19,22,72,4,64,14,17,72,4,1,5,145,0,59,4,1,45,4,1,11,4, |
27,4,2,57,253,4,1,235,4,1,219,4,1,201,4,1,171,4,187,4,2,153,4,1,141,4,1,1, |
4,128,44,48,72,27,4,43,4,2,15,4,1,235,4,251,4,2,191,4,207,4,223,4,3,171,4, |
1,159,4,1,123,4,139,4,2,111,4,1,91,4,1,79,4,1,59,4,1,31,4,47,4,2,2,15,4,63, |
4,175,4,191,4,4,4,64,22,25,72,4,64,14,17,72,4,0,47,43,43,93,95,113,113,113, |
113,113,113,113,113,113,113,114,114,43,95,114,114,114,114,114,114,114,94, |
93,93,93,51,237,50,1,47,43,43,237,220,43,43,237,49,48,1,53,51,21,33,53,51, |
21,1,183,163,253,211,165,4,195,184,184,184,184,0,0,0,0,3,0,31,255,240,5,197, |
5,150,0,25,0,49,0,91,0,245,64,111,138,81,1,10,73,26,73,42,73,3,10,69,26,69, |
42,69,3,76,60,1,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,138, |
90,154,90,2,53,81,69,81,2,58,61,1,133,52,149,52,2,54,46,70,46,2,54,41,70, |
41,2,57,35,73,35,2,57,30,73,30,2,50,196,81,61,95,71,111,71,2,71,61,71,61, |
14,0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,68, |
15,23,72,26,38,195,111,14,127,14,2,14,60,55,201,66,87,201,76,82,76,15,66, |
127,66,2,15,66,31,66,127,66,143,66,159,66,255,66,6,0,76,1,0,76,16,76,112, |
76,128,76,144,76,240,76,6,66,76,66,76,7,33,200,21,4,43,200,7,19,0,63,237, |
63,237,18,57,57,47,47,93,113,93,113,17,51,16,237,16,237,51,1,47,113,237,47, |
43,93,113,237,17,57,57,47,47,93,17,51,237,49,48,0,93,93,93,93,93,93,93,93, |
1,93,93,93,93,113,93,93,113,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18, |
7,52,46,4,35,34,14,2,21,20,30,2,51,50,62,4,37,20,30,2,51,50,62,2,55,23,14, |
3,35,34,46,2,53,52,62,2,51,50,30,2,23,7,46,3,35,34,14,2,5,197,52,94,131,161, |
185,100,99,185,160,133,94,52,52,94,132,161,184,100,150,1,7,197,113,92,45, |
82,116,140,161,87,130,228,171,99,99,171,228,130,87,161,140,116,82,45,252, |
137,33,67,100,67,49,75,56,39,14,115,22,58,82,111,75,101,149,98,48,48,97,146, |
98,75,112,80,55,18,114,12,38,55,72,47,69,99,64,30,2,195,100,185,161,131,94, |
52,52,94,131,161,185,100,100,184,161,132,94,52,114,196,254,249,150,86,161, |
139,115,82,45,99,171,228,130,131,229,171,98,45,81,115,140,161,89,72,120,86, |
48,27,45,55,29,35,43,81,63,38,64,114,158,94,97,157,111,59,36,59,75,39,33, |
26,50,38,23,46,83,118,0,2,0,26,2,139,2,253,5,152,0,50,0,65,0,203,64,21,45, |
40,10,17,72,46,40,10,17,72,3,40,11,17,72,7,24,11,14,72,29,184,255,216,64, |
16,9,17,72,23,51,1,39,39,32,226,47,11,212,56,1,56,184,255,192,64,18,19,22, |
72,144,56,1,100,56,116,56,132,56,3,80,56,1,2,56,184,255,192,64,20,10,13,72, |
56,20,227,21,21,63,227,5,64,22,38,72,5,192,67,1,67,184,255,192,64,51,13,18, |
72,26,57,1,11,57,1,57,228,152,20,1,20,8,10,13,72,20,16,11,1,2,11,1,11,11, |
26,35,7,51,1,51,228,0,42,42,0,0,32,0,80,0,3,0,0,17,228,26,222,0,63,237,51, |
47,93,51,47,16,237,93,50,17,57,47,93,93,51,43,93,237,93,93,1,43,93,47,43, |
237,51,47,237,47,43,95,93,93,93,43,113,51,51,237,50,47,0,93,49,48,1,43,43, |
43,43,43,1,34,46,2,53,52,62,2,63,1,53,52,46,2,35,34,6,7,39,62,3,51,50,30, |
2,21,17,20,22,51,50,54,55,21,14,1,35,34,46,2,39,35,14,1,39,50,62,2,61,1,7, |
14,3,21,20,22,1,4,53,86,62,33,51,86,113,62,178,21,39,56,35,67,81,9,149,7, |
43,75,108,71,68,109,77,42,28,35,12,22,9,19,42,22,41,57,38,20,2,4,38,132,51, |
48,80,57,32,138,41,74,55,32,58,2,139,29,56,82,52,69,92,56,24,1,4,60,46,60, |
35,14,59,76,10,47,82,62,35,29,60,95,66,254,204,58,50,5,3,104,5,8,22,39,51, |
29,77,70,111,34,55,71,37,65,4,2,11,29,52,43,56,65,0,0,2,0,83,0,141,4,32,3, |
172,0,8,0,17,0,113,64,84,106,12,122,12,138,12,3,106,9,122,9,138,9,3,106,3, |
122,3,138,3,3,106,0,122,0,138,0,3,17,236,15,235,14,236,95,10,127,10,143,10, |
3,64,10,96,10,2,31,10,1,10,7,236,6,235,5,236,176,1,1,95,1,1,32,1,96,1,128, |
1,3,1,9,0,239,12,15,3,47,3,111,3,127,3,4,3,0,47,93,51,228,50,1,47,93,113, |
113,237,237,237,47,93,93,113,237,237,237,49,48,93,93,93,93,37,1,53,1,51,21, |
9,1,21,33,1,53,1,51,21,9,1,21,3,118,254,174,1,82,168,254,174,1,84,253,131, |
254,176,1,80,167,254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,1, |
109,63,1,115,31,254,140,254,145,29,0,1,0,100,0,180,4,71,2,242,0,5,0,51,64, |
19,223,2,1,32,2,1,2,5,170,224,0,1,159,0,1,80,0,1,0,184,255,192,64,9,9,12, |
72,0,2,173,0,3,179,0,63,204,237,1,47,43,93,93,93,237,47,93,93,49,48,37,17, |
33,53,33,17,3,182,252,174,3,227,180,1,172,146,253,194,0,0,4,0,31,255,240, |
5,197,5,150,0,25,0,49,0,63,0,72,0,240,183,4,61,20,61,36,61,3,58,184,255,224, |
64,94,11,16,72,57,47,73,47,2,54,40,70,40,2,54,36,70,36,2,57,29,73,29,2,61, |
32,9,13,72,54,46,70,46,2,54,41,70,41,2,57,35,73,35,2,57,30,73,30,2,6,69,22, |
69,2,51,62,62,69,63,69,53,196,54,64,196,59,59,50,63,63,16,54,63,54,63,14, |
0,195,0,26,16,26,48,26,64,26,4,16,26,32,26,64,26,3,26,184,255,192,64,60,15, |
23,72,26,38,195,111,14,127,14,2,14,50,50,54,62,52,201,69,9,68,25,68,2,68, |
201,55,15,54,31,54,127,54,3,223,55,1,0,55,16,55,112,55,3,54,69,55,55,69,54, |
3,7,33,200,21,4,43,200,7,19,0,63,237,63,237,18,23,57,47,47,47,93,113,93,16, |
237,93,16,237,50,17,51,47,1,47,113,237,47,43,93,113,237,17,57,57,47,47,56, |
17,51,51,47,237,16,237,50,17,18,57,17,51,0,93,49,48,93,93,93,93,43,1,93,93, |
93,93,43,93,1,20,14,4,35,34,46,4,53,52,62,4,51,50,4,22,18,7,52,46,4,35,34, |
14,2,21,20,30,2,51,50,62,4,1,3,35,17,35,17,33,50,22,21,20,6,7,19,3,52,38, |
43,1,17,51,50,54,5,197,52,94,131,161,185,100,99,185,160,133,94,52,52,94,132, |
161,184,100,150,1,7,197,113,92,45,82,116,140,161,87,130,228,171,99,99,171, |
228,130,87,161,140,116,82,45,254,82,199,161,127,1,51,142,151,104,85,221,159, |
95,81,170,182,80,84,2,195,100,185,161,131,94,52,52,94,131,161,185,100,100, |
184,161,132,94,52,114,196,254,249,150,86,161,139,115,82,45,99,171,228,130, |
131,229,171,98,45,81,115,140,161,254,181,1,80,254,176,3,63,126,111,102,123, |
19,254,162,2,80,69,72,254,211,85,0,0,1,255,239,5,172,4,124,6,10,0,3,0,14, |
180,1,0,2,140,1,0,47,237,1,47,47,49,48,1,33,53,33,4,124,251,115,4,141,5,172, |
94,0,0,0,0,2,0,122,3,92,2,184,5,150,0,19,0,39,0,66,185,0,17,255,232,179,9, |
12,72,13,184,255,232,64,33,9,12,72,7,24,9,12,72,3,24,9,12,72,20,172,0,30, |
172,0,10,16,10,32,10,3,10,35,175,5,25,175,15,4,0,63,237,220,237,1,47,93,237, |
220,237,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7, |
52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,184,45,78,105,59,59,104,78,46, |
46,78,104,59,59,105,78,45,109,27,48,65,38,37,65,48,28,28,48,65,37,38,65,48, |
27,4,121,59,104,77,45,45,77,104,59,60,104,77,44,44,77,104,60,37,66,49,28, |
28,49,66,37,37,65,49,29,29,49,65,0,0,0,2,0,65,0,0,4,36,4,195,0,11,0,15,0, |
85,64,53,13,222,4,1,140,4,1,4,2,14,209,11,1,131,11,1,11,9,1,170,6,32,2,1, |
2,13,173,12,151,2,1,2,0,4,173,9,152,7,1,7,239,5,1,80,5,128,5,160,5,208,5, |
4,5,0,47,93,93,51,93,51,237,50,50,93,47,237,1,47,93,51,253,50,222,93,93,196, |
16,222,93,93,196,49,48,1,17,35,17,33,53,33,17,51,17,33,21,1,53,33,21,2,124, |
147,254,88,1,168,147,1,168,252,29,3,227,2,168,254,117,1,139,145,1,138,254, |
118,145,253,88,145,145,0,0,1,0,41,2,51,2,131,5,141,0,34,0,142,64,56,6,18, |
1,6,17,1,6,12,1,106,31,122,31,138,31,3,89,15,105,15,2,106,14,1,73,14,89,14, |
2,10,3,26,3,2,10,2,26,2,58,2,74,2,4,58,17,90,17,106,17,3,6,23,22,23,2,23, |
184,255,224,64,40,9,15,72,33,25,225,32,8,1,32,8,96,8,160,8,224,8,4,8,14,224, |
15,15,32,191,0,1,0,8,32,14,11,228,20,222,1,32,229,0,223,0,63,237,50,63,237, |
51,18,57,1,47,93,51,51,47,237,47,93,113,237,50,49,48,43,0,93,93,1,93,93,0, |
93,93,93,93,1,113,113,113,19,39,62,5,53,52,38,35,34,6,7,39,62,3,51,50,30, |
2,21,20,14,4,7,33,21,43,2,27,88,100,103,82,52,71,74,68,88,8,133,6,46,76,107, |
68,65,103,71,37,54,83,102,95,78,18,1,187,2,51,103,61,96,81,72,73,80,49,62, |
75,73,68,8,51,87,64,37,33,60,86,54,62,100,86,75,73,74,42,113,0,0,1,0,27,2, |
39,2,130,5,141,0,53,0,150,64,17,102,6,1,102,8,1,86,9,102,9,2,89,34,105,34, |
2,42,184,255,232,64,80,11,15,72,2,32,9,13,72,48,45,21,21,15,8,28,225,45,45, |
0,225,32,15,96,15,2,32,15,96,15,160,15,224,15,4,15,34,225,8,35,1,35,35,9, |
225,191,8,1,8,64,24,37,72,8,49,21,228,22,22,12,105,34,1,72,34,88,34,2,34, |
31,228,40,222,12,228,71,9,1,9,3,221,0,63,51,93,237,63,237,51,93,93,18,57, |
47,237,57,1,47,43,93,237,51,47,113,237,47,93,113,237,50,47,237,17,18,57,47, |
18,57,49,48,0,43,43,93,93,93,93,1,20,6,35,34,46,2,39,55,30,1,51,50,54,53, |
52,46,2,43,1,53,51,50,62,2,53,52,38,35,34,6,7,39,62,3,51,50,30,2,21,20,6, |
7,21,30,3,2,130,155,142,87,116,73,36,6,136,9,88,85,77,83,37,56,67,29,61,57, |
29,61,50,32,74,71,68,84,6,135,7,50,79,102,59,69,104,70,35,86,90,52,75,48, |
22,3,27,116,128,39,64,81,43,13,67,69,72,76,45,54,29,9,109,13,31,53,40,60, |
69,70,65,12,58,86,57,28,33,59,79,46,75,110,20,2,5,37,54,69,0,0,1,0,72,4,177, |
1,240,5,228,0,5,0,55,64,37,70,4,1,122,2,138,2,2,128,3,1,3,64,143,0,1,0,64, |
9,13,72,0,2,149,128,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,26,237,1,47,43, |
93,26,205,93,49,48,93,93,19,53,19,51,21,1,72,217,207,254,182,4,177,20,1,31, |
29,254,234,0,1,0,140,254,87,4,109,4,58,0,39,0,136,64,74,29,32,9,17,72,138, |
37,154,37,2,108,37,124,37,2,37,24,14,17,72,22,22,13,70,64,31,79,12,1,127, |
12,143,12,159,12,3,12,64,32,35,72,12,64,20,23,72,0,12,1,12,41,128,39,2,70, |
0,1,16,1,48,1,224,1,240,1,5,8,1,96,41,128,41,2,41,184,255,192,64,17,20,23, |
72,31,8,80,35,22,19,80,26,22,12,1,15,0,27,0,63,63,51,63,237,63,237,50,1,43, |
93,47,94,93,237,50,26,16,220,93,43,43,93,113,50,26,237,50,47,49,48,43,0,93, |
93,1,43,19,17,51,17,20,30,2,51,50,54,53,17,51,17,20,30,2,51,50,54,55,21,14, |
1,35,34,46,2,39,35,14,1,35,34,38,39,17,140,181,32,58,84,52,128,146,180,11, |
20,29,18,11,32,11,26,51,36,54,71,44,20,2,3,52,147,100,67,109,31,254,87,5, |
227,253,82,78,106,65,28,174,162,2,115,252,208,44,56,32,13,5,3,129,8,12,30, |
52,71,41,95,99,41,38,254,28,0,0,0,0,1,0,80,254,248,3,245,5,129,0,19,0,61, |
64,39,12,1,15,2,191,2,207,2,3,2,5,95,6,111,6,127,6,175,6,191,6,5,0,6,16,6, |
48,6,3,6,7,7,1,0,4,17,3,6,1,0,47,51,63,205,50,18,57,47,1,47,93,93,205,220, |
93,205,47,49,48,1,17,35,17,35,17,35,17,34,46,2,53,52,62,2,51,33,21,3,116, |
112,217,113,80,133,96,53,50,95,138,87,2,51,5,27,249,221,6,35,249,221,3,190, |
45,88,133,89,84,133,93,50,102,0,0,1,0,187,1,190,1,126,2,154,0,3,0,38,64,24, |
3,150,0,0,16,0,176,0,3,7,0,0,155,15,1,31,1,2,1,64,15,38,72,1,0,47,43,93,237, |
1,47,94,93,237,49,48,19,53,51,21,187,195,1,190,220,220,0,0,0,1,0,119,254, |
78,1,227,0,0,0,27,0,126,64,16,24,32,20,23,72,25,32,20,23,72,70,26,86,26,2, |
2,184,255,232,179,9,17,72,27,184,255,224,64,62,9,17,72,24,16,25,32,25,48, |
25,3,25,131,23,22,22,8,16,131,47,0,1,31,0,1,15,0,111,0,2,8,0,239,8,1,8,19, |
25,64,9,13,72,25,25,5,23,11,140,32,5,80,5,96,5,112,5,176,5,192,5,6,5,0,47, |
93,237,47,18,57,47,43,205,1,47,93,221,94,93,113,114,237,18,57,47,51,237,93, |
50,49,48,43,43,93,43,43,5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35, |
42,1,7,55,51,7,30,1,1,227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14, |
29,14,65,107,39,94,94,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,182,100, |
3,81,0,0,1,0,80,2,51,2,125,5,129,0,10,0,75,64,44,32,5,48,5,2,96,9,1,9,9,8, |
224,2,32,4,48,4,2,4,111,0,1,0,0,4,6,3,32,2,144,2,2,2,5,4,4,3,6,220,8,1,228, |
0,223,0,63,237,50,63,51,51,47,51,1,47,93,23,51,47,93,47,0,93,1,16,237,50, |
47,93,49,48,0,93,19,53,51,17,7,53,55,51,17,51,21,80,211,202,210,123,215,2, |
51,107,2,108,138,120,137,253,29,107,0,0,0,0,2,0,27,2,139,2,211,5,152,0,15, |
0,35,0,130,185,0,13,255,232,179,7,12,72,9,184,255,224,64,43,7,12,72,4,32, |
7,12,72,2,32,7,12,72,0,227,4,16,36,16,52,16,100,16,4,148,16,180,16,196,16, |
212,16,244,16,5,128,16,1,2,0,16,1,16,184,255,192,64,38,12,16,72,16,26,227, |
6,64,22,33,72,6,239,37,1,112,37,128,37,2,47,37,1,31,228,0,3,32,3,80,3,3,3, |
3,21,228,11,222,0,63,237,51,47,93,237,1,93,93,93,47,43,237,47,43,93,95,93, |
93,113,237,49,48,0,43,43,43,43,1,20,6,35,34,38,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,211,176,175,168,177,43,87,131,88, |
93,131,84,39,149,25,50,72,48,48,75,51,26,28,51,70,43,49,75,52,27,4,18,188, |
203,201,190,91,145,101,53,53,100,145,92,83,110,65,27,27,66,110,82,84,110, |
66,26,26,66,110,0,2,0,83,0,141,4,32,3,172,0,8,0,17,0,133,64,100,101,15,117, |
15,133,15,3,101,9,117,9,133,9,3,101,6,117,6,133,6,3,101,0,117,0,133,0,3,13, |
236,10,236,17,235,15,12,1,239,12,1,112,12,128,12,2,208,12,1,63,12,111,12, |
127,12,3,0,12,1,12,4,236,1,236,8,235,112,3,128,3,176,3,3,176,3,208,3,2,63, |
3,1,0,3,32,3,2,3,10,0,239,14,15,5,47,5,111,5,127,5,4,5,0,47,93,51,228,50, |
1,47,93,93,93,113,253,237,237,47,93,93,93,113,113,114,253,237,237,49,48,93, |
93,93,93,37,35,53,9,1,53,51,1,21,1,35,53,9,1,53,51,1,21,2,206,168,1,82,254, |
176,166,1,82,252,221,170,1,82,254,176,168,1,79,141,29,1,111,1,116,31,254, |
141,63,254,147,29,1,111,1,116,31,254,141,63,255,255,0,56,0,0,6,78,5,129,16, |
38,0,121,232,0,16,39,2,20,2,249,0,0,17,7,2,141,3,184,253,207,0,31,64,18,1, |
191,12,1,112,12,1,96,12,1,16,12,1,12,3,2,17,24,0,63,53,53,1,17,93,93,93,93, |
53,0,0,0,255,255,0,56,0,0,6,117,5,129,16,38,0,121,232,0,16,39,2,20,2,249, |
0,0,17,7,0,114,3,242,253,207,0,47,64,30,2,111,15,1,47,15,1,15,1,191,12,1, |
112,12,1,96,12,1,16,12,1,12,51,64,11,11,72,2,15,24,0,63,53,1,43,17,93,93, |
93,93,53,17,93,93,53,0,0,0,255,255,0,73,0,0,6,78,5,141,16,39,2,20,3,13,0, |
0,16,39,2,141,3,184,253,207,17,6,0,115,46,0,0,33,64,20,0,112,0,1,96,0,1,16, |
0,1,0,83,64,11,11,72,1,2,6,24,0,63,53,53,1,43,17,93,93,93,53,0,0,2,0,131, |
254,164,4,86,4,58,0,37,0,41,0,159,64,112,121,4,137,4,2,122,35,138,35,2,122, |
36,138,36,2,84,26,100,26,2,58,6,74,6,122,6,138,6,4,10,72,9,9,176,39,192,39, |
2,39,150,40,40,0,28,70,95,27,127,27,2,27,64,29,60,72,27,64,23,27,72,32,27, |
1,27,19,70,0,64,29,60,72,0,64,23,27,72,0,64,13,17,72,32,0,1,0,32,43,1,19, |
33,9,40,156,41,15,67,27,1,27,24,95,47,33,63,33,2,111,33,207,33,2,33,0,47, |
93,113,237,51,93,63,253,206,17,57,1,93,47,93,43,43,43,237,47,93,43,43,93, |
237,18,57,47,237,113,51,47,237,49,48,93,0,93,1,93,0,93,1,93,55,52,62,6,55, |
51,14,7,21,20,30,2,51,50,54,55,23,14,3,35,34,46,2,1,21,35,53,131,37,62,79, |
82,79,63,39,1,175,2,39,62,78,80,77,60,37,42,77,109,67,140,164,14,184,11,67, |
121,179,122,114,178,123,64,2,113,195,50,71,108,85,67,60,58,68,83,55,69,104, |
80,63,57,57,70,88,59,59,92,63,32,140,122,12,84,149,112,65,56,103,147,4,100, |
201,201,0,0,0,255,255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,148,1,78,0, |
0,0,21,180,2,21,5,38,2,184,255,225,180,22,25,4,7,37,1,43,53,0,43,53,0,255, |
255,0,4,0,0,5,82,6,240,18,38,0,36,0,0,17,7,2,149,1,219,0,0,0,19,64,11,2,21, |
5,38,2,76,21,24,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,6,254,18, |
38,0,36,0,0,17,7,2,150,1,96,0,0,0,19,64,11,2,22,5,38,2,0,27,21,4,7,37,1,43, |
53,0,43,53,0,0,0,255,255,0,4,0,0,5,82,7,6,18,38,0,36,0,0,17,7,2,153,1,94, |
0,0,0,19,64,11,2,21,5,38,2,2,30,44,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0, |
4,0,0,5,82,6,178,18,38,0,36,0,0,17,7,2,152,1,108,0,0,0,23,64,13,3,2,21,5, |
38,3,2,4,25,23,4,7,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,4,0,0,5,82,6, |
251,18,38,0,36,0,0,17,7,1,76,1,137,0,136,0,22,64,12,3,2,56,3,3,2,3,31,21, |
4,7,37,1,43,53,53,0,63,53,53,0,2,0,24,0,0,7,168,5,129,0,15,0,26,0,136,64, |
86,116,25,1,114,2,1,86,2,102,2,2,115,3,131,3,2,85,3,101,3,2,127,5,143,5,2, |
109,5,1,92,5,1,25,5,41,5,2,0,7,1,11,7,11,7,0,16,14,32,14,2,14,2,25,3,17,3, |
4,17,9,13,90,26,5,0,2,95,25,25,5,4,12,95,9,9,13,16,8,95,5,3,4,18,13,95,0, |
18,0,63,237,63,63,237,50,18,57,47,237,17,18,57,47,237,1,47,51,51,237,50,51, |
47,51,17,18,57,57,47,93,18,57,57,47,47,113,49,48,93,93,93,93,93,93,93,93, |
93,33,17,33,3,35,1,33,21,33,17,33,21,33,17,33,21,1,35,14,5,7,3,33,3,201,253, |
220,198,199,2,174,4,185,253,9,2,187,253,69,3,32,252,33,151,1,16,22,27,24, |
18,2,217,1,222,1,156,254,100,5,129,156,254,60,154,254,21,156,4,238,3,35,50, |
58,51,38,5,254,51,0,0,255,255,0,104,254,78,5,121,5,150,18,38,0,38,0,0,17, |
7,0,120,1,254,0,0,0,11,182,1,58,48,40,26,16,37,1,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,240,18,38,0,40,0,0,17,7,2,148,1,63,0,0,0,21,180,1,12,5,38,1,184, |
255,170,180,13,16,0,10,37,1,43,53,0,43,53,0,255,255,0,168,0,0,4,254,6,240, |
18,38,0,40,0,0,17,7,2,149,1,223,0,0,0,19,64,11,1,12,5,38,1,40,12,15,0,10, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40,0,0,17, |
7,2,150,1,119,0,0,0,21,180,1,13,5,38,1,184,255,239,180,18,12,0,10,37,1,43, |
53,0,43,53,0,255,255,0,168,0,0,4,254,6,178,18,38,0,40,0,0,17,7,2,152,1,121, |
0,0,0,25,182,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10,37,1,43,53,53,0,43, |
53,53,0,255,255,0,9,0,0,1,177,6,240,18,38,0,44,0,0,17,6,2,148,159,0,0,21, |
180,1,4,5,38,1,184,255,193,180,5,8,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0, |
142,0,0,2,54,6,240,18,38,0,44,0,0,17,6,2,149,70,0,0,19,64,11,1,4,5,38,1,69, |
4,7,0,2,37,1,43,53,0,43,53,0,255,255,255,210,0,0,2,104,6,254,18,38,0,44,0, |
0,17,6,2,150,210,0,0,19,64,11,1,5,5,38,1,0,10,4,0,2,37,1,43,53,0,43,53,0, |
255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218,0,0,23,64,13,2,1, |
4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,2,0,14,0,0,5,101,5,129, |
0,16,0,33,0,112,64,69,117,10,1,91,32,139,32,2,91,31,139,31,2,90,20,138,20, |
2,91,19,1,10,31,26,31,2,10,20,26,20,2,26,26,28,8,90,64,15,17,1,17,35,128, |
24,28,90,14,16,16,1,14,27,16,95,24,127,0,1,0,0,2,28,95,14,18,23,95,2,3,0, |
63,237,63,237,17,57,47,113,51,237,50,1,47,51,51,47,16,237,50,26,16,220,113, |
26,237,18,57,47,49,48,93,93,93,0,93,1,93,93,0,93,19,51,17,33,50,4,22,18,21, |
20,2,14,1,35,33,17,35,37,52,46,2,35,33,17,33,21,33,17,33,50,62,2,14,154,1, |
210,163,1,19,198,111,106,184,251,145,253,241,154,4,151,82,148,206,123,254, |
241,1,150,254,106,1,58,111,189,138,78,3,33,2,96,81,169,254,252,180,176,254, |
243,181,93,2,135,72,143,203,130,61,254,57,154,254,18,72,142,212,0,255,255, |
0,168,0,0,5,32,7,6,18,38,0,49,0,0,17,7,2,153,1,161,0,0,0,19,64,11,1,20,5, |
38,1,12,29,43,8,18,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
240,18,38,0,50,0,0,17,7,2,148,1,182,0,0,0,21,180,2,40,5,38,2,184,255,216, |
180,41,44,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255,236,5,215,6,240,18,38, |
0,50,0,0,17,7,2,149,2,37,0,0,0,19,64,11,2,40,5,38,2,37,40,43,10,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6,254,18,38,0,50,0,0,17,7,2,150, |
1,213,0,0,0,19,64,11,2,41,5,38,2,4,46,40,10,0,37,1,43,53,0,43,53,0,0,0,255, |
255,0,97,255,236,5,215,7,6,18,38,0,50,0,0,17,7,2,153,1,193,0,0,0,21,180,2, |
40,5,38,2,184,255,245,180,49,63,10,0,37,1,43,53,0,43,53,0,255,255,0,97,255, |
236,5,215,6,178,18,38,0,50,0,0,17,7,2,152,1,215,0,0,0,25,182,3,2,40,5,38, |
3,2,184,255,255,180,44,42,10,0,37,1,43,53,53,0,43,53,53,0,0,1,0,142,0,225, |
4,31,4,115,0,11,0,129,185,0,5,255,232,179,18,22,72,3,184,255,232,64,14,18, |
22,72,11,24,18,22,72,9,24,18,22,72,8,184,255,232,179,18,22,72,6,184,255,232, |
64,14,18,22,72,2,24,18,22,72,0,24,18,22,72,7,184,255,232,64,14,18,22,72,1, |
24,18,22,72,10,24,18,22,72,4,184,255,232,64,23,18,22,72,212,4,228,4,2,180, |
4,196,4,212,4,3,32,4,1,4,0,7,1,7,0,25,47,113,1,47,93,93,113,49,48,0,43,43, |
1,43,43,43,43,43,43,0,43,43,43,43,19,9,1,55,9,1,23,9,1,7,9,1,142,1,98,254, |
160,104,1,94,1,94,105,254,162,1,96,102,254,159,254,156,1,74,1,98,1,96,103, |
254,159,1,95,105,254,164,254,160,105,1,97,254,157,0,3,0,71,255,203,5,244, |
5,186,0,27,0,39,0,51,0,196,64,141,89,44,1,8,37,1,84,33,1,5,26,21,26,101,26, |
3,139,23,1,123,22,139,22,2,108,22,1,90,22,1,105,16,1,10,12,26,12,2,132,9, |
1,116,8,132,8,2,99,8,1,85,8,1,27,50,91,50,2,114,43,130,43,2,84,43,1,20,38, |
84,38,2,85,37,1,140,31,1,74,31,90,31,122,31,3,4,21,20,21,100,21,3,11,7,27, |
7,107,7,3,32,44,40,0,91,64,15,28,1,28,53,128,32,53,1,40,91,175,14,191,14, |
2,32,14,1,15,14,31,14,2,14,43,31,35,47,95,23,19,4,35,95,9,5,19,0,63,51,237, |
63,51,237,17,57,57,1,47,93,93,93,237,93,26,16,220,113,26,237,18,57,57,49, |
48,0,93,93,93,93,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,1,20,2,6,4,35,34,38,39,7,35,55,38,2,53,52,18,54,36,51,50,22,23,55,51,7, |
22,18,7,52,38,39,1,30,1,51,50,62,2,37,20,22,23,1,46,1,35,34,14,2,5,215,95, |
180,254,252,165,127,206,81,120,190,200,88,86,92,178,1,5,169,125,207,82,121, |
192,201,85,87,195,49,49,253,59,59,150,93,132,191,123,59,252,15,50,51,2,195, |
59,151,92,126,190,127,63,2,199,165,254,242,192,104,58,54,145,241,97,1,10, |
160,165,1,10,187,101,56,54,146,242,94,254,253,160,112,184,72,252,171,44,47, |
86,153,212,125,113,190,75,3,85,42,46,80,148,208,0,0,255,255,0,158,255,236, |
5,41,6,240,18,38,0,56,0,0,17,7,2,148,1,141,0,0,0,21,180,1,26,5,38,1,184,255, |
232,180,27,30,5,20,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,6,240, |
18,38,0,56,0,0,17,7,2,149,1,237,0,0,0,19,64,11,1,26,5,38,1,37,26,29,5,20, |
37,1,43,53,0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,254,18,38,0,56,0,0, |
17,7,2,150,1,152,0,0,0,19,64,11,1,27,5,38,1,0,32,26,5,20,37,1,43,53,0,43, |
53,0,0,0,255,255,0,158,255,236,5,41,6,178,18,38,0,56,0,0,17,7,2,152,1,158, |
0,0,0,25,182,2,1,26,5,38,2,1,184,255,254,180,30,28,5,20,37,1,43,53,53,0,43, |
53,53,0,255,255,0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,149,1,208,0,0,0, |
19,64,11,1,9,5,38,1,65,9,12,4,8,37,1,43,53,0,43,53,0,0,0,0,2,0,168,0,0,4, |
234,5,129,0,16,0,27,0,95,64,63,150,15,1,116,26,132,26,2,123,18,139,18,2,0, |
90,16,17,48,17,144,17,3,255,17,1,0,17,16,17,32,17,64,17,4,17,22,11,7,90,0, |
8,16,8,64,8,3,7,8,22,95,6,21,95,11,6,11,6,11,7,9,3,7,18,0,63,63,18,57,57, |
47,47,16,237,16,237,1,47,94,93,237,50,50,47,93,93,113,237,49,48,0,93,93,93, |
1,20,14,2,35,33,17,35,17,51,21,33,50,30,2,7,52,38,35,33,17,33,50,62,2,4,234, |
59,121,182,123,254,98,191,191,1,146,125,186,124,62,192,164,164,254,133,1, |
131,82,121,79,38,2,223,88,159,120,71,254,215,5,129,252,60,111,156,99,134, |
149,253,192,44,79,107,0,0,0,0,1,0,142,255,236,4,143,5,204,0,67,0,214,64,150, |
149,51,1,133,63,149,63,2,133,47,149,47,2,133,46,149,46,2,118,65,1,118,56, |
1,83,26,131,26,147,26,3,92,39,108,39,124,39,3,107,22,1,58,22,1,145,52,1,21, |
52,37,52,2,22,66,38,66,118,66,3,26,3,42,3,2,61,72,24,54,72,31,32,24,1,31, |
31,1,9,24,31,31,24,9,3,43,0,72,64,48,17,160,17,2,160,17,176,17,2,17,69,128, |
42,70,0,43,16,43,48,43,3,8,43,112,69,1,63,69,79,69,2,212,31,1,197,31,1,182, |
31,1,219,17,1,202,17,1,185,17,1,31,17,5,36,80,49,0,43,21,14,80,5,22,0,63, |
237,63,63,237,18,57,57,93,93,93,93,93,93,1,93,93,47,94,93,237,26,16,220,93, |
113,26,237,18,23,57,47,47,47,93,93,16,237,16,237,49,48,0,93,1,93,93,93,93, |
93,0,93,93,1,93,93,0,93,93,93,93,1,20,14,2,35,34,38,47,1,30,3,51,50,54,53, |
52,46,4,53,52,62,4,53,52,46,2,35,34,14,2,21,17,35,17,52,62,2,51,50,30,2,21, |
20,14,4,21,20,30,4,4,143,41,87,136,94,80,148,55,2,25,67,74,78,37,92,98,54, |
81,95,81,54,33,49,58,49,33,33,63,90,57,68,107,73,39,180,63,120,174,110,102, |
155,105,53,33,51,58,51,33,55,82,95,82,55,1,39,66,115,85,49,25,24,164,14,25, |
19,11,86,79,56,77,62,57,73,98,73,51,73,58,48,52,63,43,37,62,45,26,35,77,122, |
88,252,3,4,3,118,173,112,54,46,80,109,62,61,90,69,53,47,48,28,38,59,57,64, |
85,114,0,0,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,67,0, |
188,0,0,0,21,180,2,66,17,38,2,184,255,149,180,67,70,3,36,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,115,5,228,18,38,0,68,0,0,17,7,0,116,1,84,0,0, |
0,19,64,11,2,66,17,38,2,11,66,69,3,36,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,115,5,211,18,38,0,68,0,0,17,7,1,71,0,218,0,0,0,21,180,2,67,17, |
38,2,184,255,192,180,72,66,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236, |
4,115,5,189,18,38,0,68,0,0,17,7,1,78,0,245,0,0,0,21,180,2,66,17,38,2,184, |
255,224,180,75,89,3,36,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,115,5, |
123,18,38,0,68,0,0,17,7,0,105,0,235,0,0,0,25,182,3,2,66,17,38,3,2,184,255, |
202,180,70,68,3,36,37,1,43,53,53,0,43,53,53,0,255,255,0,87,255,236,4,115, |
6,115,18,38,0,68,0,0,17,7,1,76,1,8,0,0,0,25,182,3,2,71,17,38,3,2,184,255, |
200,180,76,66,3,36,37,1,43,53,53,0,43,53,53,0,0,3,0,66,255,236,6,194,4,78, |
0,62,0,79,0,88,0,251,64,96,134,54,1,122,36,1,123,58,1,117,8,133,8,2,101,68, |
117,68,133,68,3,124,86,1,106,86,1,126,81,1,106,81,1,101,4,117,4,2,41,47,1, |
41,44,1,24,40,9,13,72,10,28,26,28,2,17,53,88,1,70,33,31,79,79,79,95,79,127, |
79,4,79,79,80,25,9,73,10,10,61,71,64,31,80,47,80,63,80,3,144,80,1,80,90,128, |
44,71,45,184,255,192,64,19,21,28,72,45,45,71,71,25,64,12,15,72,25,62,80,80, |
80,6,53,184,255,184,64,43,17,73,53,83,80,56,16,63,81,33,33,74,50,143,44,1, |
43,44,1,44,44,39,80,50,16,17,74,80,22,22,6,80,15,239,9,1,128,9,1,9,9,15,22, |
0,63,51,47,93,93,16,237,63,237,50,63,237,51,47,93,93,17,18,57,47,237,63,237, |
50,43,18,57,47,237,1,47,43,237,51,47,43,237,26,16,220,93,113,26,237,50,47, |
237,17,18,57,47,93,51,237,50,57,57,49,48,93,43,0,93,93,1,93,0,93,93,93,93, |
1,93,0,93,1,93,0,93,93,1,21,30,3,51,50,54,55,23,14,3,35,32,3,14,3,35,34,38, |
53,52,62,4,63,1,53,52,46,2,35,34,14,2,7,39,62,3,51,50,22,23,62,1,51,50,30, |
2,29,1,37,7,14,5,21,20,22,51,50,62,2,53,37,46,1,35,34,14,2,7,3,200,1,34,70, |
109,78,117,141,25,158,17,61,102,153,108,254,191,102,29,74,102,137,93,167, |
169,38,67,91,107,117,60,240,26,57,88,61,54,88,64,39,7,188,10,58,105,159,112, |
128,172,49,63,177,106,136,183,111,47,252,80,195,40,81,76,66,49,28,100,93, |
90,129,83,40,2,246,15,144,135,45,96,81,54,4,1,247,17,82,136,98,55,94,72,45, |
45,91,73,47,1,1,51,93,71,42,172,150,71,108,78,51,32,13,1,4,59,67,94,58,27, |
15,39,67,51,17,64,107,78,43,70,69,74,65,88,155,210,122,24,31,4,1,6,18,31, |
51,73,51,87,97,63,98,116,53,196,171,157,29,74,127,98,255,255,0,87,254,78, |
3,202,4,78,18,38,0,70,0,0,17,7,0,120,1,12,0,0,0,11,182,1,40,48,40,19,9,37, |
1,43,53,0,0,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,67,0, |
221,0,0,0,21,180,2,38,17,38,2,184,255,228,180,39,42,17,27,37,1,43,53,0,43, |
53,0,255,255,0,87,255,236,4,24,5,228,18,38,0,72,0,0,17,7,0,116,1,112,0,0, |
0,19,64,11,2,38,17,38,2,84,38,41,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0, |
87,255,236,4,24,5,211,18,38,0,72,0,0,17,7,1,71,0,245,0,0,0,19,64,11,2,39, |
17,38,2,8,44,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,24, |
5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3,2,4,42, |
40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,10,0,0,1,178,5,228,18,38, |
0,241,0,0,17,6,0,67,160,0,0,21,180,1,4,17,38,1,184,255,194,180,5,8,0,2,37, |
1,43,53,0,43,53,0,0,0,255,255,0,135,0,0,2,47,5,228,18,38,0,241,0,0,17,6,0, |
116,63,0,0,19,64,11,1,4,17,38,1,63,4,7,0,2,37,1,43,53,0,43,53,0,255,255,255, |
211,0,0,2,105,5,211,18,38,0,241,0,0,17,6,1,71,211,0,0,19,64,11,1,5,17,38, |
1,2,10,4,0,2,37,1,43,53,0,43,53,0,255,255,0,8,0,0,2,53,5,123,18,38,0,241, |
0,0,17,6,0,105,219,0,0,23,64,13,2,1,4,17,38,2,1,2,8,6,0,2,37,1,43,53,53,0, |
43,53,53,0,0,2,0,86,255,236,4,39,5,234,0,39,0,57,0,190,64,94,100,51,1,100, |
56,1,107,42,1,107,48,1,10,14,26,14,2,37,17,53,17,69,17,3,6,8,22,8,2,23,26, |
29,3,50,15,28,31,28,2,28,28,50,35,71,40,64,19,16,13,3,40,17,64,14,19,72,22, |
5,17,17,5,144,40,1,144,40,160,40,2,40,59,128,50,71,31,5,1,5,26,19,29,16,4, |
17,27,27,22,45,80,13,80,10,1,10,184,255,192,64,28,7,10,72,82,17,1,36,17,52, |
17,68,17,3,2,17,18,17,2,10,17,10,17,22,0,53,80,0,22,0,63,237,63,57,57,47, |
47,93,93,93,43,93,51,237,17,51,47,18,23,57,1,47,93,237,26,16,204,93,113,17, |
57,47,18,57,43,18,23,57,26,16,237,17,57,47,93,18,23,57,49,48,0,93,93,1,93, |
0,93,93,93,93,5,34,46,2,53,52,62,2,51,50,22,23,46,1,39,5,53,55,46,1,39,51, |
30,1,23,37,15,1,30,3,29,1,20,14,2,19,52,46,2,35,34,14,2,21,20,22,51,50,62, |
2,2,54,125,181,118,56,52,116,186,133,71,117,43,43,115,76,254,211,218,56,120, |
66,209,45,83,42,1,50,1,211,81,129,88,47,57,120,188,176,33,71,113,80,81,115, |
73,33,144,145,81,118,75,36,20,73,132,185,111,107,182,134,75,32,27,86,176, |
69,133,114,94,45,78,35,20,51,31,132,112,92,74,176,200,223,121,6,122,196,138, |
74,1,245,94,137,90,44,45,92,137,91,190,178,44,90,139,0,255,255,0,140,0,0, |
3,242,5,189,18,38,0,81,4,0,17,7,1,78,0,245,0,0,0,19,64,11,1,38,17,38,1,5, |
47,61,19,36,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,228,18,38, |
0,82,0,0,17,7,0,67,0,223,0,0,0,21,180,2,35,17,38,2,184,255,228,180,36,39, |
8,0,37,1,43,53,0,43,53,0,255,255,0,86,255,236,4,29,5,228,18,38,0,82,0,0,17, |
7,0,116,1,103,0,0,0,19,64,11,2,35,17,38,2,73,35,38,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,86,255,236,4,29,5,211,18,38,0,82,0,0,17,7,1,71,0,240,0,0, |
0,19,64,11,2,36,17,38,2,1,41,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86, |
255,236,4,29,5,189,18,38,0,82,0,0,17,7,1,78,0,247,0,0,0,19,64,11,2,35,17, |
38,2,13,44,58,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,123, |
18,38,0,82,0,0,17,7,0,105,0,250,0,0,0,23,64,13,3,2,35,17,38,3,2,4,39,37,8, |
0,37,1,43,53,53,0,43,53,53,0,0,0,0,3,0,65,0,223,4,36,4,117,0,3,0,7,0,11,0, |
75,64,48,3,11,171,0,8,8,4,128,6,160,6,2,95,6,1,32,6,1,6,63,4,95,4,111,4,3, |
4,9,174,64,8,144,8,2,8,4,173,5,0,174,79,1,159,1,2,1,5,179,0,63,222,93,237, |
16,253,222,93,237,1,47,93,47,93,93,93,18,57,47,51,237,50,49,48,1,53,51,21, |
1,53,33,21,1,53,51,21,1,222,168,253,187,3,227,253,186,168,3,190,183,183,254, |
162,146,146,254,127,183,183,0,0,3,0,44,255,218,4,180,4,92,0,22,0,34,0,45, |
0,161,64,93,117,33,133,33,2,117,27,133,27,2,122,38,138,38,2,122,44,138,44, |
2,150,16,1,66,16,1,77,5,1,68,21,1,75,10,1,27,38,35,0,71,64,15,23,207,23,2, |
159,23,175,23,255,23,3,23,47,128,35,71,0,12,1,0,12,16,12,32,12,64,12,240, |
12,5,7,12,144,47,160,47,240,47,3,224,47,1,223,47,1,0,47,32,47,2,47,184,255, |
192,64,16,13,21,72,37,26,30,41,80,18,14,16,30,80,7,3,22,0,63,51,237,63,51, |
237,17,57,57,1,43,93,93,93,113,47,94,93,113,237,26,16,220,93,113,26,237,18, |
57,57,49,48,93,93,0,93,93,93,93,1,93,93,0,93,1,16,2,35,34,38,39,7,35,55,46, |
1,53,16,33,50,22,23,55,51,7,30,1,7,52,38,39,1,30,1,51,50,62,2,37,20,23,1, |
46,1,35,34,14,2,4,88,250,238,97,156,60,100,167,184,41,42,1,229,103,156,57, |
91,167,173,42,39,189,12,11,254,29,38,105,62,69,112,78,42,253,179,24,1,226, |
37,104,66,69,111,78,41,2,30,254,228,254,234,48,50,116,214,68,182,116,2,48, |
46,45,105,201,69,185,119,68,109,44,253,206,49,39,39,98,166,126,130,85,2,49, |
45,36,41,99,164,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0, |
67,0,236,0,0,0,21,180,1,38,17,38,1,184,255,236,180,39,42,36,19,37,1,43,53, |
0,43,53,0,255,255,0,139,255,236,3,241,5,228,18,38,0,88,6,0,17,7,0,116,1,87, |
0,0,0,19,64,11,1,38,17,38,1,53,38,41,36,19,37,1,43,53,0,43,53,0,0,0,255,255, |
0,139,255,236,3,241,5,211,18,38,0,88,6,0,17,7,1,71,0,239,0,0,0,21,180,1,39, |
17,38,1,184,255,252,180,44,38,36,19,37,1,43,53,0,43,53,0,255,255,0,139,255, |
236,3,241,5,123,18,38,0,88,6,0,17,7,0,105,0,237,0,0,0,25,182,2,1,38,17,38, |
2,1,184,255,243,180,42,40,36,19,37,1,43,53,53,0,43,53,53,0,255,255,0,5,254, |
87,3,252,5,228,18,38,0,92,0,0,17,7,0,116,1,27,0,0,0,19,64,11,1,32,17,38,1, |
54,32,35,17,31,37,1,43,53,0,43,53,0,0,0,0,2,0,138,254,87,4,29,5,204,0,34, |
0,54,0,109,64,76,102,52,118,52,2,105,38,121,38,2,73,25,89,25,2,70,10,86,10, |
2,25,21,41,21,137,21,153,21,4,22,15,38,15,134,15,150,15,4,18,71,64,160,35, |
1,35,56,128,45,7,33,70,0,34,16,34,48,34,240,34,4,8,34,33,27,26,50,80,23,22, |
7,40,80,13,16,0,0,0,63,63,237,50,63,237,50,63,1,47,94,93,237,50,50,26,16, |
220,93,26,237,49,48,0,93,93,93,93,93,93,19,51,17,20,6,7,6,7,51,62,3,51,50, |
30,2,21,20,14,2,35,34,38,39,35,30,3,21,17,35,1,52,46,2,35,34,14,2,21,20,30, |
2,51,50,62,2,138,180,1,1,1,1,6,25,64,82,101,63,112,153,93,40,40,93,153,112, |
116,174,46,5,1,1,1,1,180,2,214,24,59,98,74,60,106,79,46,38,73,108,70,75,99, |
59,24,5,204,254,89,30,55,21,25,22,52,73,47,21,80,145,205,125,123,208,150, |
85,88,100,2,32,48,59,29,254,89,3,199,100,156,108,56,34,96,169,135,115,159, |
98,43,58,110,159,255,255,0,5,254,87,3,252,5,123,18,38,0,92,0,0,17,7,0,105, |
0,187,0,0,0,25,182,2,1,32,17,38,2,1,184,255,254,180,36,34,17,31,37,1,43,53, |
53,0,43,53,53,0,255,255,0,4,0,0,5,82,6,161,18,38,0,36,0,0,17,7,1,73,1,104, |
1,78,0,19,64,11,2,21,5,38,2,2,22,21,4,7,37,1,43,53,0,43,53,0,0,0,255,255, |
0,87,255,236,4,115,5,83,18,38,0,68,0,0,17,7,1,73,0,233,0,0,0,21,180,2,66, |
17,38,2,184,255,202,180,67,66,3,36,37,1,43,53,0,43,53,0,255,255,0,4,0,0,5, |
82,6,243,18,38,0,36,0,0,17,7,2,155,1,121,0,0,0,19,64,11,2,21,5,38,2,3,26, |
34,4,7,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,4,115,5,230,18,38,0, |
68,0,0,17,7,1,74,1,7,0,0,0,21,180,2,66,17,38,2,184,255,204,180,71,83,3,36, |
37,1,43,53,0,43,53,0,255,255,0,4,254,96,5,99,5,129,18,38,0,36,0,0,17,7,1, |
77,3,181,0,11,0,13,185,0,2,255,207,180,33,33,7,7,37,43,53,0,255,255,0,87, |
254,85,4,115,4,78,18,38,0,68,0,0,17,7,1,77,2,197,0,0,0,13,185,0,2,255,194, |
180,78,78,36,36,37,43,53,0,255,255,0,104,255,236,5,121,6,240,18,38,0,38,0, |
0,17,7,2,149,2,83,0,0,0,19,64,11,1,40,5,38,1,126,40,43,26,16,37,1,43,53,0, |
43,53,0,0,0,255,255,0,87,255,236,3,202,5,228,18,38,0,70,0,0,17,7,0,116,1, |
103,0,0,0,19,64,11,1,40,17,38,1,114,40,43,19,9,37,1,43,53,0,43,53,0,0,0,255, |
255,0,104,255,236,5,121,6,254,18,38,0,38,0,0,17,7,2,150,1,204,0,0,0,19,64, |
11,1,41,5,38,1,38,46,40,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236, |
3,202,5,211,18,38,0,70,0,0,17,7,1,71,0,208,0,0,0,19,64,11,1,41,17,38,1,10, |
46,40,19,9,37,1,43,53,0,43,53,0,0,0,255,255,0,104,255,236,5,121,6,241,18, |
38,0,38,0,0,17,7,1,75,2,34,1,37,0,19,64,11,1,40,5,38,1,39,40,42,26,16,37, |
1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,204,18,38,0,70,0,0,17, |
7,1,75,1,44,0,0,0,11,182,1,17,40,42,19,9,37,1,43,53,0,0,0,255,255,0,104,255, |
236,5,121,6,254,18,38,0,38,0,0,17,7,2,151,1,204,0,0,0,19,64,11,1,40,5,38, |
1,38,42,48,26,16,37,1,43,53,0,43,53,0,0,0,255,255,0,87,255,236,3,202,5,211, |
18,38,0,70,0,0,17,7,1,72,0,214,0,0,0,19,64,11,1,40,17,38,1,16,42,48,19,9, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,5,101,6,254,18,38,0,39,0,0,17, |
7,2,151,1,102,0,0,0,21,180,2,26,5,38,2,184,255,171,180,28,34,6,0,37,1,43, |
53,0,43,53,0,255,255,0,86,255,236,4,255,5,204,16,38,0,71,0,0,17,7,2,146,3, |
186,0,75,0,18,64,10,2,61,0,2,83,61,61,19,19,37,1,43,53,0,63,53,255,255,0, |
14,0,0,5,101,5,129,18,6,0,144,0,0,0,2,0,86,255,236,4,109,5,204,0,39,0,59, |
0,146,64,86,85,42,101,42,2,90,58,106,58,2,57,1,73,1,2,54,10,70,10,2,9,4,25, |
4,121,4,137,4,4,6,7,22,7,118,7,134,7,4,25,27,70,64,20,6,0,21,50,3,18,61,128, |
40,71,31,6,1,6,63,61,1,143,61,1,33,21,27,19,81,24,15,20,1,239,20,255,20,2, |
20,20,8,22,0,11,55,80,8,184,255,192,64,10,9,13,72,8,16,0,45,80,3,22,0,63, |
237,50,63,43,237,50,63,18,57,47,93,113,51,237,50,63,1,93,114,47,93,237,26, |
16,220,23,50,17,57,26,237,50,49,48,0,93,93,93,93,93,93,37,14,1,35,34,2,17, |
16,33,50,22,23,51,52,46,1,52,61,1,33,53,33,53,51,21,51,21,35,17,20,30,2,23, |
35,46,3,53,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,3,53,50,165,122,205, |
193,1,142,123,164,50,2,1,1,254,212,1,44,180,132,132,1,2,2,1,172,2,3,3,2,253, |
218,28,62,96,69,71,109,73,38,38,74,107,70,66,96,64,31,174,104,90,1,20,1,24, |
2,54,90,98,10,43,47,42,9,141,131,147,147,131,252,41,39,72,60,43,9,10,37,48, |
53,26,1,112,112,160,103,48,46,103,166,120,115,159,98,43,46,102,163,0,0,255, |
255,0,168,0,0,4,254,6,161,18,38,0,40,0,0,17,7,1,73,1,122,1,78,0,21,180,1, |
12,5,38,1,184,255,237,180,13,12,0,10,37,1,43,53,0,43,53,0,255,255,0,87,255, |
236,4,24,5,83,18,38,0,72,0,0,17,7,1,73,0,245,0,0,0,19,64,11,2,38,17,38,2, |
3,39,38,17,27,37,1,43,53,0,43,53,0,0,0,255,255,0,168,0,0,4,254,6,243,18,38, |
0,40,0,0,17,7,2,155,1,137,0,0,0,21,180,1,12,5,38,1,184,255,235,180,17,25, |
0,10,37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,230,18,38,0,72,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,38,17,38,2,2,43,55,17,27,37,1,43,53,0,43, |
53,0,0,0,255,255,0,168,0,0,4,254,6,241,18,38,0,40,0,0,17,7,1,75,1,201,1,37, |
0,21,180,1,12,5,38,1,184,255,236,180,12,14,0,10,37,1,43,53,0,43,53,0,255, |
255,0,87,255,236,4,24,5,204,18,38,0,72,0,0,17,7,1,75,1,68,0,0,0,12,182,2, |
2,38,40,17,27,37,1,43,53,0,0,0,255,255,0,168,254,85,4,254,5,129,18,38,0,40, |
0,0,17,7,1,77,3,80,0,0,0,13,185,0,1,255,194,180,24,24,11,11,37,43,53,0,255, |
255,0,87,254,85,4,24,4,78,18,38,0,72,0,0,17,7,1,77,1,125,0,0,0,13,185,0,2, |
254,242,180,50,50,9,9,37,43,53,0,255,255,0,168,0,0,4,254,6,254,18,38,0,40, |
0,0,17,7,2,151,1,111,0,0,0,21,180,1,12,5,38,1,184,255,231,180,14,20,0,10, |
37,1,43,53,0,43,53,0,255,255,0,87,255,236,4,24,5,211,18,38,0,72,0,0,17,7, |
1,72,0,234,0,0,0,21,180,2,38,17,38,2,184,255,254,180,40,46,17,27,37,1,43, |
53,0,43,53,0,255,255,0,103,255,236,5,160,6,254,18,38,0,42,0,0,17,7,2,150, |
1,219,0,0,0,19,64,11,1,47,5,38,1,34,52,46,0,35,37,1,43,53,0,43,53,0,0,0,255, |
255,0,86,254,87,3,239,5,211,18,38,0,74,0,0,17,7,1,71,0,216,0,0,0,19,64,11, |
2,71,17,38,2,0,76,70,26,41,37,1,43,53,0,43,53,0,0,0,255,255,0,103,255,236, |
5,160,6,243,18,38,0,42,0,0,17,7,2,155,1,246,0,0,0,19,64,11,1,46,5,38,1,39, |
51,59,0,35,37,1,43,53,0,43,53,0,0,0,255,255,0,86,254,87,3,239,5,230,18,38, |
0,74,0,0,17,7,1,74,0,249,0,0,0,19,64,11,2,70,17,38,2,0,75,87,26,41,37,1,43, |
53,0,43,53,0,0,0,255,255,0,103,255,236,5,160,6,241,18,38,0,42,0,0,17,7,1, |
75,2,53,1,37,0,19,64,11,1,46,5,38,1,39,46,48,0,35,37,1,43,53,0,43,53,0,0, |
0,255,255,0,86,254,87,3,239,5,204,18,38,0,74,0,0,17,7,1,75,1,45,0,0,0,11, |
182,2,0,70,72,26,41,37,1,43,53,0,0,0,255,255,0,103,254,78,5,160,5,150,18, |
38,0,42,0,0,17,7,2,140,2,78,0,0,0,11,182,1,46,50,46,0,35,37,1,43,53,0,0,0, |
255,255,0,86,254,87,3,239,6,32,16,38,0,74,0,0,17,7,2,147,1,56,0,0,0,21,180, |
2,79,17,38,2,184,255,252,180,70,74,26,41,37,1,43,53,0,43,53,0,255,255,0,168, |
0,0,5,32,6,254,18,38,0,43,0,0,17,7,2,150,1,153,0,0,0,19,64,11,1,13,5,38,1, |
0,18,12,4,10,37,1,43,53,0,43,53,0,0,0,255,255,0,142,0,0,3,238,7,62,18,38, |
0,75,0,0,17,7,2,150,0,242,0,64,0,21,180,1,35,2,38,1,184,255,255,180,40,34, |
25,10,37,1,43,53,0,43,53,0,0,2,0,14,0,0,5,185,5,129,0,19,0,23,0,166,64,72, |
23,11,3,90,8,7,4,4,20,4,2,7,4,16,15,19,90,20,12,59,0,1,4,0,1,56,164,0,1,155, |
0,1,68,0,1,244,0,1,235,0,1,68,0,148,0,2,224,0,1,2,0,0,48,0,112,0,208,0,4, |
7,0,32,25,1,160,25,176,25,192,25,3,25,184,255,192,64,36,14,17,72,47,25,1, |
22,18,6,95,15,11,80,7,96,7,2,7,2,95,64,23,1,160,23,208,23,2,23,23,13,9,3, |
4,0,18,0,63,50,63,51,57,47,93,113,237,220,93,50,50,237,50,50,1,93,43,93,113, |
47,94,93,95,93,113,113,113,114,114,114,94,93,93,51,51,237,50,50,47,94,93, |
51,51,237,50,50,49,48,33,17,33,17,35,17,35,53,51,53,51,21,33,53,51,21,51, |
21,35,17,3,53,33,21,4,102,253,1,191,154,154,191,2,255,186,153,153,186,253, |
1,2,141,253,115,4,1,154,230,230,230,230,154,251,255,3,45,212,212,0,1,0,10, |
0,0,3,238,5,204,0,41,0,150,185,0,7,255,232,64,66,9,13,72,0,7,16,7,2,7,33, |
24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,32,36,24,70,29,28,192,25,1, |
0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240,43, |
2,255,43,1,112,43,1,43,184,255,192,64,19,19,23,72,35,27,81,32,28,28,5,30, |
0,25,11,21,0,18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63, |
18,57,47,51,237,50,1,43,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16, |
220,93,113,26,237,18,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52, |
46,2,35,34,14,2,21,17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61, |
30,70,84,100,62,104,133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180, |
1,44,254,212,2,3,2,1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69, |
35,46,84,120,75,253,170,4,182,131,147,147,131,148,33,66,56,39,7,255,255,255, |
184,0,0,2,133,7,6,18,38,0,44,0,0,17,6,2,153,207,0,0,19,64,11,1,4,5,38,1,2, |
13,27,0,2,37,1,43,53,0,43,53,0,255,255,255,184,0,0,2,133,5,189,18,38,0,241, |
0,0,17,6,1,78,207,0,0,19,64,11,1,4,17,38,1,2,13,27,0,2,37,1,43,53,0,43,53, |
0,255,255,0,12,0,0,2,49,6,161,18,38,0,44,0,0,17,7,1,73,255,217,1,78,0,19, |
64,11,1,4,5,38,1,2,5,4,0,2,37,1,43,53,0,43,53,0,0,0,255,255,0,12,0,0,2,49, |
5,83,18,38,0,241,0,0,17,6,1,73,217,0,0,19,64,11,1,4,17,38,1,2,5,4,0,2,37, |
1,43,53,0,43,53,0,255,255,255,210,0,0,2,108,6,243,18,38,0,44,0,0,17,6,2,155, |
234,0,0,19,64,11,1,4,5,38,1,2,9,17,0,2,37,1,43,53,0,43,53,0,255,255,255,210, |
0,0,2,108,5,230,18,38,0,241,0,0,17,6,1,74,245,0,0,19,64,11,1,4,17,38,1,3, |
9,21,0,2,37,1,43,53,0,43,53,0,255,255,0,92,254,85,1,186,5,129,18,38,0,44, |
0,0,17,6,1,77,12,0,0,10,182,1,0,16,16,3,3,37,43,53,0,0,255,255,0,31,254,85, |
1,125,5,204,18,38,0,76,0,0,17,6,1,77,207,0,0,15,64,10,23,22,1,2,0,20,20,7, |
7,37,43,53,93,0,255,255,0,189,0,0,1,124,6,241,18,38,0,44,0,0,17,7,1,75,0, |
39,1,37,0,19,64,11,1,4,5,38,1,0,4,6,0,2,37,1,43,53,0,43,53,0,0,0,0,1,0,194, |
0,0,1,118,4,58,0,3,1,137,64,24,3,70,4,0,36,0,2,9,0,0,4,5,52,5,1,0,5,16,5, |
32,5,3,229,5,184,255,192,64,55,225,228,72,240,5,1,228,5,1,176,5,192,5,208, |
5,3,132,5,148,5,164,5,3,64,5,1,52,5,1,0,5,16,5,32,5,3,212,5,228,5,244,5,3, |
144,5,1,116,5,132,5,2,96,5,1,5,184,255,192,64,22,193,196,72,224,5,1,196,5, |
212,5,2,176,5,1,20,5,36,5,52,5,3,5,184,255,192,183,182,185,72,0,5,1,175,5, |
184,255,192,179,171,174,72,5,184,255,192,182,161,167,72,128,5,1,5,184,255, |
192,64,38,150,156,72,208,5,1,100,5,116,5,164,5,180,5,196,5,5,32,5,1,4,5,20, |
5,2,4,5,20,5,180,5,196,5,244,5,5,117,5,184,255,192,179,121,124,72,5,184,255, |
192,179,110,113,72,5,184,255,192,64,24,99,102,72,224,5,1,180,5,196,5,212, |
5,3,48,5,1,4,5,20,5,36,5,3,5,184,255,192,183,67,70,72,11,5,1,62,5,184,255, |
192,64,9,56,59,72,203,5,219,5,2,5,184,255,192,64,42,45,48,72,27,5,43,5,2, |
196,5,212,5,228,5,3,107,5,123,5,2,64,5,1,2,16,5,32,5,48,5,3,191,5,207,5,2, |
32,5,64,5,2,5,184,255,192,64,13,13,16,72,15,5,31,5,2,7,1,15,0,21,0,63,63, |
1,94,93,43,93,93,113,95,113,113,113,114,43,114,43,94,93,43,113,113,113,113, |
43,43,43,94,93,113,113,113,113,43,114,43,43,94,93,43,93,93,93,93,43,113,113, |
113,113,114,114,114,114,114,114,114,43,94,93,93,17,18,57,47,94,93,237,49, |
48,51,17,51,17,194,180,4,58,251,198,0,0,0,255,255,0,170,255,236,5,73,5,129, |
16,38,0,44,237,0,16,7,0,45,1,225,0,0,255,255,0,137,254,87,3,3,5,204,16,38, |
0,76,0,0,17,7,0,77,1,198,0,0,0,30,64,18,3,2,111,8,1,48,8,1,16,8,1,8,1,0,16, |
0,1,0,17,93,53,53,17,93,93,93,53,53,255,255,0,32,255,236,3,205,6,254,18,38, |
0,45,0,0,17,7,2,150,1,55,0,0,0,19,64,11,1,23,5,38,1,190,28,22,3,16,37,1,43, |
53,0,43,53,0,0,0,0,2,255,153,254,87,2,47,5,211,0,19,0,29,1,148,64,25,150, |
29,166,29,2,152,28,168,28,2,3,18,24,12,16,72,18,40,8,11,72,164,21,1,21,184, |
255,192,64,49,11,15,72,21,251,26,1,59,26,1,26,64,12,15,72,36,26,1,26,15,70, |
12,3,3,4,12,20,12,36,12,68,12,4,7,12,12,31,30,144,31,1,2,0,31,16,31,2,219, |
31,184,255,192,64,9,223,227,72,31,64,210,213,72,31,184,255,192,64,51,205, |
209,72,143,31,1,64,31,80,31,2,95,31,111,31,239,31,255,31,4,32,31,48,31,64, |
31,3,144,31,160,31,224,31,240,31,4,79,31,1,0,31,1,160,175,31,191,31,207,31, |
3,31,184,255,192,64,57,147,150,72,239,31,1,176,31,192,31,208,31,3,95,31,1, |
32,31,1,31,31,47,31,63,31,143,31,191,31,207,31,6,0,31,1,111,239,31,1,208, |
31,1,63,31,1,111,31,143,31,159,31,175,31,255,31,5,31,184,255,192,64,101,79, |
82,72,223,31,1,144,31,160,31,176,31,3,47,31,63,31,79,31,3,0,31,1,61,31,64, |
53,56,72,112,31,128,31,144,31,176,31,4,15,31,31,31,2,255,31,1,31,64,35,38, |
72,144,31,1,79,31,1,255,31,1,112,31,128,31,192,31,208,31,224,31,5,31,31,1, |
24,142,64,28,148,26,128,22,22,15,26,47,26,63,26,127,26,239,26,5,26,13,15, |
7,80,0,27,0,63,237,63,47,93,51,47,26,16,253,26,237,1,93,93,93,113,113,43, |
113,114,114,43,94,93,93,93,93,43,113,114,114,114,94,93,93,113,113,113,113, |
43,114,94,93,93,93,113,113,114,114,43,43,43,94,93,95,93,17,18,57,47,94,93, |
51,47,16,237,47,93,43,93,113,204,43,93,49,48,0,43,43,1,95,93,93,19,34,38, |
39,53,30,1,51,50,62,2,53,17,51,17,20,14,2,1,21,35,39,35,7,35,53,19,51,77, |
34,65,28,13,36,13,38,49,28,10,180,21,54,93,1,154,105,219,2,232,104,234,204, |
254,87,4,5,139,2,4,20,43,67,46,4,165,251,64,62,106,78,45,6,110,20,169,169, |
20,1,14,0,255,255,0,168,254,78,5,63,5,129,18,38,0,46,0,0,17,7,2,140,1,221, |
0,0,0,14,185,0,1,255,205,180,16,12,4,11,37,1,43,53,255,255,0,138,254,78,4, |
3,5,204,18,38,0,78,0,0,17,7,2,140,1,78,0,0,0,14,185,0,1,255,235,180,16,12, |
4,11,37,1,43,53,0,1,0,138,0,0,4,3,4,58,0,11,0,166,64,72,123,1,1,116,7,1,86, |
9,102,9,2,123,0,139,0,155,0,3,89,0,105,0,2,67,10,1,58,2,1,42,9,1,155,8,1, |
122,8,138,8,2,44,8,1,1,10,8,10,9,16,112,9,128,9,144,9,3,9,9,0,11,16,80,11, |
1,144,11,208,11,240,11,3,11,184,255,192,64,40,7,11,72,11,7,3,70,0,4,16,4, |
48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2,1,7,10,4,8,8,5,15,4,0,21, |
0,63,50,63,51,17,23,57,1,93,93,47,94,93,237,50,47,43,93,113,56,51,57,47,93, |
56,57,51,17,51,49,48,93,93,93,93,0,93,1,93,93,93,93,0,93,1,93,33,1,7,17,35, |
17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73,1,206,1,238,108, |
254,126,4,58,253,243,2,13,254,47,253,151,0,0,0,255,255,0,168,0,0,4,47,6,240, |
18,38,0,47,0,0,17,7,2,149,0,173,0,0,0,21,180,1,6,5,38,1,184,255,94,180,6, |
9,0,4,37,1,43,53,0,43,53,0,255,255,0,91,0,0,2,3,7,62,18,38,0,79,0,0,17,6, |
2,149,19,78,0,19,64,11,1,4,2,38,1,75,4,7,0,2,37,1,43,53,0,43,53,0,255,255, |
0,168,254,78,4,47,5,129,18,38,0,47,0,0,17,7,2,140,1,133,0,0,0,14,185,0,1, |
255,253,180,10,6,0,4,37,1,43,53,255,255,0,126,254,78,1,71,5,204,18,38,0,79, |
0,0,17,6,2,140,255,0,0,14,185,0,1,255,255,180,8,4,0,2,37,1,43,53,0,0,255, |
255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,2,146,2,21,0,0,0,18,64,10,1, |
15,3,1,138,10,6,0,4,37,1,43,53,0,63,53,255,255,0,138,0,0,2,105,5,204,16,38, |
0,79,0,0,17,7,2,146,1,36,0,75,0,65,64,16,16,64,29,29,72,16,64,22,22,72,16, |
64,18,18,72,16,184,255,192,179,17,17,72,16,184,255,192,64,12,16,16,72,16, |
64,11,11,72,1,13,0,1,184,1,32,180,8,4,0,2,37,1,43,53,0,63,53,1,43,43,43,43, |
43,43,0,255,255,0,168,0,0,4,47,5,129,18,38,0,47,0,0,17,7,1,75,1,213,253,143, |
0,11,182,1,95,6,8,0,4,37,1,43,53,0,0,0,255,255,0,138,0,0,2,146,5,204,16,38, |
0,79,0,0,17,7,1,75,1,66,253,143,0,14,185,0,1,1,84,180,4,6,0,2,37,1,43,53, |
0,1,0,20,0,0,4,47,5,129,0,13,0,119,64,49,121,0,137,0,2,100,8,116,8,132,8, |
3,86,8,1,134,8,1,86,7,1,134,7,1,12,2,90,9,5,16,3,1,0,3,32,3,64,3,96,3,128, |
3,208,3,240,3,7,3,12,184,255,224,179,19,22,72,9,184,255,224,64,24,19,22,72, |
6,1,9,12,4,16,7,1,7,0,13,1,13,13,5,10,3,2,95,5,18,0,63,237,63,18,57,47,93, |
205,93,23,57,43,43,1,47,93,113,47,51,237,50,49,48,113,114,113,114,0,93,93, |
1,5,17,33,21,33,17,7,53,55,17,51,17,37,2,104,254,255,2,200,252,121,148,148, |
191,1,1,3,29,149,254,20,156,2,26,85,158,85,2,201,253,165,148,0,1,0,16,0,0, |
1,186,5,204,0,11,0,102,64,42,39,3,1,39,2,1,8,7,11,70,4,2,0,0,16,0,32,0,64, |
0,4,7,0,0,12,13,255,13,1,112,13,128,13,192,13,208,13,4,31,13,1,4,184,255, |
224,64,23,18,22,72,10,32,18,22,72,1,10,4,7,4,2,79,8,1,8,8,5,0,0,21,0,63,63, |
57,47,93,205,23,57,43,43,1,93,93,93,17,18,57,47,94,93,51,51,237,50,50,49, |
48,113,113,51,17,7,53,55,17,51,17,55,21,7,17,138,122,122,180,124,124,2,30, |
68,158,68,3,16,253,88,72,159,71,253,122,255,255,0,168,0,0,5,32,6,240,18,38, |
0,49,0,0,17,7,2,149,2,17,0,0,0,19,64,11,1,20,5,38,1,73,20,23,8,18,37,1,43, |
53,0,43,53,0,0,0,255,255,0,140,0,0,3,242,5,228,18,38,0,81,4,0,17,7,0,116, |
1,132,0,0,0,19,64,11,1,38,17,38,1,97,38,41,19,36,37,1,43,53,0,43,53,0,0,0, |
255,255,0,168,254,78,5,32,5,129,18,38,0,49,0,0,17,7,2,140,1,252,0,0,0,14, |
185,0,1,255,252,180,24,20,8,18,37,1,43,53,255,255,0,140,254,78,3,242,4,78, |
18,38,0,81,4,0,17,7,2,140,1,91,0,0,0,11,182,1,0,42,38,19,36,37,1,43,53,0, |
0,0,255,255,0,168,0,0,5,32,6,254,18,38,0,49,0,0,17,7,2,151,1,147,0,0,0,21, |
180,1,20,5,38,1,184,255,250,180,22,28,8,18,37,1,43,53,0,43,53,0,255,255,0, |
140,0,0,3,242,5,211,18,38,0,81,4,0,17,7,1,72,0,242,0,0,0,21,180,1,38,17,38, |
1,184,255,254,180,40,46,19,36,37,1,43,53,0,43,53,0,255,255,255,254,0,0,4, |
80,5,129,16,38,0,81,98,0,16,7,2,3,255,127,0,0,0,1,0,165,255,236,5,52,5,149, |
0,55,0,162,64,16,154,53,1,149,7,165,7,2,131,41,147,41,163,41,3,48,184,255, |
232,179,12,15,72,47,184,255,216,64,91,12,15,72,42,54,58,54,154,54,170,54, |
4,6,143,5,159,5,175,5,3,5,5,51,39,26,90,0,27,16,27,64,27,3,27,51,90,0,14, |
64,14,80,14,112,14,160,14,176,14,6,48,14,80,14,144,14,240,14,4,224,14,1,143, |
14,159,14,175,14,3,0,14,48,14,2,7,14,39,20,95,45,4,33,3,26,18,9,95,0,6,6, |
0,19,0,63,50,47,16,237,63,63,63,237,50,1,47,94,93,93,93,113,114,237,47,93, |
237,50,17,57,47,93,51,49,48,0,93,43,1,43,0,93,93,93,5,34,46,2,39,55,30,1, |
51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,173,56,96,79,63,24,127,37,100,59,64,78,41, |
13,39,81,127,87,94,163,121,70,191,1,1,1,1,184,1,3,2,1,4,34,103,130,153,86, |
124,177,112,53,30,86,152,20,24,40,54,30,115,45,65,58,107,153,95,1,66,108, |
154,98,46,62,105,139,77,252,133,4,68,37,92,90,76,22,22,63,69,69,28,61,101, |
70,39,64,133,204,139,254,165,130,208,146,78,0,0,0,0,1,0,140,254,87,3,242, |
4,78,0,53,0,135,64,18,121,52,137,52,2,90,52,106,52,2,43,52,59,52,75,52,3, |
46,184,255,232,64,74,9,12,72,3,46,19,46,2,3,3,24,49,70,64,160,12,1,96,12, |
208,12,2,31,12,1,175,12,1,12,55,128,37,24,70,160,25,176,25,2,0,25,192,25, |
208,25,3,0,25,16,25,32,25,64,25,224,25,240,25,6,7,25,37,18,80,43,16,31,15, |
24,21,7,80,0,27,0,63,237,63,63,63,237,50,1,47,94,93,113,114,237,50,26,16, |
220,93,113,113,114,26,237,17,57,47,49,48,93,43,0,93,93,93,1,34,38,39,53,30, |
1,51,50,62,2,53,17,52,46,2,35,34,14,2,21,17,35,17,52,46,2,39,51,30,3,21,51, |
62,3,51,50,30,2,21,17,20,14,2,3,1,34,65,28,13,36,13,38,49,28,10,23,52,85, |
63,64,103,73,40,180,1,2,2,1,170,1,2,3,2,3,26,62,82,106,70,90,130,84,39,22, |
54,93,254,87,4,5,139,2,4,20,43,67,46,3,25,79,106,65,27,45,85,125,81,253,141, |
3,83,34,75,67,48,7,5,44,57,59,20,47,76,53,29,44,92,145,100,252,169,62,106, |
78,45,0,0,0,255,255,0,97,255,236,5,215,6,161,18,38,0,50,0,0,17,7,1,73,1,214, |
1,78,0,19,64,11,2,40,5,38,2,0,41,40,10,0,37,1,43,53,0,43,53,0,0,0,255,255, |
0,86,255,236,4,29,5,83,18,38,0,82,0,0,17,7,1,73,0,244,0,0,0,19,64,11,2,35, |
17,38,2,0,36,35,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,97,255,236,5,215,6, |
243,18,38,0,50,0,0,17,7,2,155,1,231,0,0,0,19,64,11,2,40,5,38,2,0,45,53,10, |
0,37,1,43,53,0,43,53,0,0,0,255,255,0,86,255,236,4,29,5,230,18,38,0,82,0,0, |
17,7,1,74,1,16,0,0,0,19,64,11,2,35,17,38,2,0,40,52,8,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,97,255,236,5,215,6,241,18,38,0,50,0,0,17,7,2,154,1,226,0, |
0,0,23,64,13,3,2,40,5,38,3,2,93,40,49,10,0,37,1,43,53,53,0,43,53,53,0,0,0, |
255,255,0,86,255,236,4,34,5,228,18,38,0,82,0,0,17,7,1,79,1,9,0,0,0,23,64, |
13,3,2,35,17,38,3,2,103,35,44,8,0,37,1,43,53,53,0,43,53,53,0,0,0,0,2,0,97, |
255,246,7,166,5,140,0,30,0,49,0,170,64,119,137,13,1,102,13,1,105,12,1,86, |
48,1,89,42,1,84,8,132,8,2,4,47,20,47,84,47,3,11,43,27,43,91,43,3,0,20,24, |
28,90,34,0,26,32,26,48,26,3,26,22,26,22,29,15,34,47,34,79,34,3,63,34,95,34, |
127,34,159,34,207,34,239,34,6,34,64,31,38,72,34,16,29,32,29,2,29,45,91,32, |
10,1,15,10,31,10,2,10,127,51,1,27,95,24,24,21,29,95,30,18,22,95,21,3,40,95, |
15,4,31,95,5,19,0,63,237,63,237,63,237,63,237,17,57,47,237,1,93,47,93,93, |
237,47,93,47,43,93,113,18,57,57,47,47,93,16,237,50,57,57,49,48,0,93,93,93, |
93,93,1,93,0,93,93,33,14,3,35,34,36,38,2,53,52,18,54,36,51,50,30,2,23,33, |
21,33,17,33,21,33,17,33,21,37,50,54,55,17,46,2,34,35,34,14,2,21,20,30,2,3, |
231,20,51,57,57,25,169,254,253,175,89,94,178,1,2,164,26,58,57,52,19,3,146, |
252,221,2,231,253,25,3,76,251,111,32,76,26,11,32,37,37,15,125,187,125,63, |
64,126,186,3,3,3,1,106,191,1,9,159,165,1,7,183,98,2,3,4,2,156,254,60,154, |
254,21,156,145,2,2,4,87,1,2,1,74,142,206,131,129,209,148,80,0,3,0,86,255, |
236,7,50,4,78,0,39,0,59,0,68,0,190,64,131,132,7,1,102,7,118,7,2,97,2,1,85, |
2,1,90,66,106,66,2,108,61,1,90,61,1,69,58,85,58,101,58,3,69,52,85,52,101, |
52,3,74,48,90,48,106,48,3,74,42,90,42,106,42,3,8,73,9,9,38,71,64,31,60,47, |
60,63,60,3,144,60,1,60,70,128,17,30,68,0,71,144,40,1,32,40,1,40,50,71,25, |
0,80,68,68,5,63,80,33,16,116,30,132,30,2,123,17,139,17,2,30,17,20,45,80,28, |
16,55,80,20,22,5,80,14,239,8,1,128,8,1,8,8,14,22,0,63,51,47,93,93,16,237, |
63,237,63,237,18,57,57,93,93,63,237,18,57,47,237,1,47,237,47,93,114,237,50, |
57,57,26,16,220,93,113,26,237,50,47,237,49,48,0,93,93,93,93,93,93,93,93,93, |
93,93,1,20,30,2,51,50,54,55,23,14,3,35,34,38,39,14,1,35,34,46,2,53,16,18, |
51,32,23,62,1,51,50,30,2,29,1,37,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2, |
37,46,1,35,34,14,2,7,4,46,35,73,114,80,117,141,25,158,17,61,102,153,108,137, |
198,61,63,201,137,113,181,127,68,253,242,1,25,117,67,200,119,136,183,111, |
47,252,63,42,77,110,68,69,114,81,45,47,81,108,62,69,114,81,44,3,7,15,144, |
135,45,99,84,58,4,1,247,85,143,103,57,94,72,45,45,91,73,47,91,92,93,90,68, |
140,211,143,1,23,1,25,177,94,83,88,155,210,122,24,39,126,164,98,39,41,99, |
164,123,126,165,98,40,39,98,166,225,171,157,29,74,127,98,255,255,0,168,0, |
0,5,104,6,240,18,38,0,53,0,0,17,7,2,149,1,225,0,0,0,21,180,2,31,5,38,2,184, |
255,245,180,31,34,4,17,37,1,43,53,0,43,53,0,255,255,0,136,0,0,2,166,5,228, |
18,38,0,85,0,0,17,7,0,116,0,182,0,0,0,19,64,11,1,32,17,38,1,74,32,35,6,21, |
37,1,43,53,0,43,53,0,0,0,255,255,0,168,254,78,5,104,5,129,18,38,0,53,0,0, |
17,7,2,140,2,5,0,0,0,14,185,0,2,255,225,180,35,31,4,17,37,1,43,53,255,255, |
0,129,254,78,2,136,4,78,18,38,0,85,0,0,17,6,2,140,2,0,0,14,185,0,1,255,94, |
180,36,32,6,21,37,1,43,53,0,0,255,255,0,168,0,0,5,104,6,254,18,38,0,53,0, |
0,17,7,2,151,1,102,0,0,0,21,180,2,31,5,38,2,184,255,169,180,33,39,4,17,37, |
1,43,53,0,43,53,0,255,255,0,56,0,0,2,206,5,211,18,38,0,85,0,0,17,6,1,72,56, |
0,0,21,180,1,32,17,38,1,184,255,251,180,34,40,6,21,37,1,43,53,0,43,53,0,0, |
0,255,255,0,93,255,236,4,248,7,45,18,38,0,54,0,0,17,7,0,116,1,234,1,73,0, |
19,64,11,1,64,5,38,1,91,64,67,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,228,18,38,0,86,0,0,17,7,0,116,1,57,0,0,0,19,64,11,1,56,17,38, |
1,93,56,59,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,93,255,236,4,248,7,26, |
18,38,0,54,0,0,17,7,1,71,1,114,1,71,0,19,64,11,1,65,5,38,1,18,70,64,8,0,37, |
1,43,53,0,43,53,0,0,0,255,255,0,57,255,236,3,182,5,211,18,38,0,86,0,0,17, |
7,1,71,0,172,0,0,0,19,64,11,1,57,17,38,1,0,62,56,10,0,37,1,43,53,0,43,53, |
0,0,0,255,255,0,93,254,78,4,248,5,150,18,38,0,54,0,0,17,7,0,120,1,166,0,0, |
0,11,182,1,40,72,64,8,0,37,1,43,53,0,0,0,255,255,0,57,254,78,3,182,4,75,18, |
38,0,86,0,0,17,7,0,120,0,218,0,0,0,11,182,1,15,64,56,10,0,37,1,43,53,0,0, |
0,255,255,0,93,255,236,4,248,6,254,18,38,0,54,0,0,17,7,2,151,1,115,0,0,0, |
19,64,11,1,64,5,38,1,19,66,72,8,0,37,1,43,53,0,43,53,0,0,0,255,255,0,57,255, |
236,3,182,5,211,18,38,0,86,0,0,17,7,1,72,0,173,0,0,0,19,64,11,1,56,17,38, |
1,0,58,64,10,0,37,1,43,53,0,43,53,0,0,0,255,255,0,46,254,78,4,180,5,129,18, |
38,0,55,0,0,17,7,2,140,1,139,0,0,0,14,185,0,1,255,254,180,12,8,4,6,37,1,43, |
53,255,255,0,31,254,78,2,42,5,44,16,38,0,87,0,0,17,6,2,140,115,0,2,233,64, |
255,35,64,232,232,72,35,64,231,231,72,35,64,228,228,72,35,64,227,227,72,35, |
64,226,226,72,35,64,221,221,72,35,64,217,217,72,35,64,216,216,72,35,64,215, |
215,72,35,64,214,214,72,35,64,213,213,72,35,64,210,210,72,35,64,206,206,72, |
35,64,205,205,72,35,64,203,203,72,35,64,202,202,72,35,64,199,199,72,35,64, |
196,196,72,35,64,195,195,72,35,64,194,194,72,35,64,192,192,72,35,64,191,191, |
72,35,64,190,190,72,35,64,185,185,72,35,64,184,184,72,35,64,181,181,72,35, |
64,180,180,72,35,64,179,179,72,35,64,178,178,72,35,64,174,174,72,35,64,173, |
173,72,35,64,170,170,72,35,64,169,169,72,35,64,168,168,72,35,64,167,167,72, |
35,64,163,163,72,35,64,162,162,72,35,64,160,160,72,35,64,159,159,72,35,64, |
158,158,72,35,64,157,157,72,35,64,156,156,72,35,64,152,152,72,35,64,149,149, |
72,35,64,148,148,72,35,64,147,147,72,35,64,146,146,72,35,64,145,145,72,35, |
64,144,144,72,35,64,142,142,72,35,64,141,141,72,64,221,35,64,138,138,72,35, |
64,137,137,72,35,64,136,136,72,35,64,134,134,72,35,64,133,133,72,35,64,131, |
131,72,35,64,130,130,72,35,64,127,127,72,35,64,126,126,72,35,64,125,125,72, |
35,64,124,124,72,35,64,123,123,72,35,64,122,122,72,35,64,121,121,72,35,64, |
120,120,72,35,64,116,116,72,35,64,115,115,72,35,64,113,113,72,35,64,112,112, |
72,35,64,111,111,72,35,64,110,110,72,35,64,109,109,72,35,64,106,106,72,35, |
64,105,105,72,35,64,104,104,72,35,64,102,102,72,35,64,101,101,72,35,64,100, |
100,72,35,64,99,99,72,35,64,98,98,72,35,64,95,95,72,35,64,94,94,72,35,64, |
93,93,72,35,64,91,91,72,35,64,90,90,72,35,64,89,89,72,35,128,88,88,72,35, |
64,87,87,72,35,64,84,84,72,35,64,83,83,72,35,64,80,80,72,35,64,79,79,72,35, |
64,78,78,72,35,64,77,77,72,35,184,255,192,179,74,74,72,35,184,255,192,179, |
71,71,72,35,184,255,192,179,63,63,72,35,184,255,192,64,9,60,60,72,35,64,52, |
52,72,35,184,255,192,179,50,50,72,35,184,255,192,179,49,49,72,35,184,255, |
192,64,9,45,45,72,35,64,41,41,72,35,184,255,192,179,39,39,72,35,184,255,192, |
64,9,38,38,72,35,64,30,30,72,35,184,255,192,179,28,28,72,35,184,255,192,64, |
9,27,27,72,35,64,19,19,72,35,184,255,192,179,17,17,72,35,184,255,192,179, |
13,13,72,35,184,255,192,64,15,9,9,72,35,64,8,8,72,1,50,27,23,7,0,37,1,43, |
53,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0,0,255,255,0,46,0,0,4,180, |
6,254,18,38,0,55,0,0,17,7,2,151,1,33,0,0,0,21,180,1,8,5,38,1,184,255,251, |
180,10,16,4,6,37,1,43,53,0,43,53,0,255,255,0,31,255,240,3,17,5,204,16,38, |
0,87,0,0,17,7,2,146,1,204,0,75,0,17,177,1,1,184,1,136,180,27,23,7,0,37,1, |
43,53,0,53,0,0,1,0,46,0,0,4,180,5,129,0,15,0,101,64,62,0,17,16,17,32,17,3, |
9,3,2,5,15,14,6,12,5,14,9,6,127,12,175,12,191,12,3,47,12,143,12,2,12,64,23, |
28,72,12,1,5,90,10,16,6,32,6,2,6,0,12,95,13,4,8,95,1,9,9,5,13,3,5,18,0,63, |
63,18,57,47,51,237,50,16,237,50,1,47,93,51,253,50,204,43,93,113,17,57,43, |
1,24,16,77,228,17,57,95,94,93,49,48,1,17,33,21,33,17,35,17,33,53,33,17,33, |
53,33,21,2,208,1,25,254,231,190,254,233,1,23,254,28,4,134,4,229,254,60,154, |
253,121,2,135,154,1,196,156,156,0,1,0,31,255,240,2,42,5,44,0,30,0,140,64, |
91,40,30,1,40,29,1,40,26,1,40,25,1,12,32,9,15,72,156,12,172,12,2,12,40,9, |
14,72,20,15,15,13,29,25,111,7,127,7,2,7,24,28,7,3,1,70,21,17,143,13,1,0,13, |
16,13,32,13,3,7,13,128,32,1,47,32,1,27,19,80,20,0,15,80,28,127,16,191,16, |
207,16,3,16,16,4,24,22,20,15,4,80,11,22,0,63,237,63,206,51,18,57,47,93,51, |
237,50,16,237,50,1,93,93,47,94,93,113,51,51,237,23,50,47,93,51,51,17,51,17, |
51,49,48,0,43,93,1,43,113,113,113,113,1,21,20,22,51,50,54,55,21,14,1,35,34, |
53,17,35,53,51,17,35,53,51,55,51,21,51,21,35,17,51,21,1,80,51,63,26,49,29, |
41,85,56,216,125,125,125,132,53,120,200,200,200,2,4,248,78,63,8,6,133,11, |
13,245,1,31,131,1,48,131,242,242,131,254,208,131,255,255,0,158,255,236,5, |
41,7,6,18,38,0,56,0,0,17,7,2,153,1,148,0,0,0,19,64,11,1,26,5,38,1,0,35,49, |
5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5,189,18,38,0,88, |
0,0,17,7,1,78,0,246,0,0,0,19,64,11,1,38,17,38,1,13,47,61,36,19,37,1,43,53, |
0,43,53,0,0,0,255,255,0,158,255,236,5,41,6,156,18,38,0,56,0,0,17,7,1,73,1, |
159,1,73,0,19,64,11,1,26,5,38,1,1,27,26,5,20,37,1,43,53,0,43,53,0,0,0,255, |
255,0,133,255,236,3,235,5,83,18,38,0,88,0,0,17,7,1,73,0,240,0,0,0,21,180, |
1,38,17,38,1,184,255,254,180,39,38,36,19,37,1,43,53,0,43,53,0,255,255,0,158, |
255,236,5,41,6,243,18,38,0,56,0,0,17,7,2,155,1,174,0,0,0,19,64,11,1,26,5, |
38,1,0,31,39,5,20,37,1,43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,235,5, |
230,18,38,0,88,0,0,17,7,1,74,1,11,0,0,0,21,180,1,38,17,38,1,184,255,253,180, |
43,55,36,19,37,1,43,53,0,43,53,0,255,255,0,158,255,236,5,41,7,62,18,38,0, |
56,0,0,17,7,1,76,1,191,0,203,0,23,64,13,2,1,31,5,38,2,1,0,36,26,5,20,37,1, |
43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,235,6,115,18,38,0,88,0, |
0,17,7,1,76,1,20,0,0,0,23,64,13,2,1,43,17,38,2,1,1,48,38,36,19,37,1,43,53, |
53,0,43,53,53,0,0,0,255,255,0,158,255,236,5,41,6,241,18,38,0,56,0,0,17,7, |
2,154,1,157,0,0,0,23,64,13,2,1,26,5,38,2,1,81,26,35,5,20,37,1,43,53,53,0, |
43,53,53,0,0,0,255,255,0,133,255,236,4,30,5,228,18,38,0,88,0,0,17,7,1,79, |
1,5,0,0,0,23,64,13,2,1,38,17,38,2,1,100,38,47,36,19,37,1,43,53,53,0,43,53, |
53,0,0,0,255,255,0,158,254,85,5,41,5,129,16,38,0,56,0,0,17,7,1,77,2,32,0, |
0,0,40,185,0,1,254,103,181,39,39,21,21,37,51,184,255,192,179,21,21,72,51, |
184,255,192,179,20,20,72,51,184,255,192,178,19,19,72,43,43,43,43,53,0,0,255, |
255,0,133,254,85,4,5,4,58,18,38,0,88,0,0,17,7,1,77,2,87,0,0,0,13,185,0,1, |
255,226,180,50,50,14,14,37,43,53,0,255,255,0,9,0,0,7,134,6,254,18,38,0,58, |
0,0,17,7,2,150,2,121,0,0,0,21,180,1,48,5,38,1,184,255,253,180,53,47,15,46, |
37,1,43,53,0,43,53,0,255,255,255,253,0,0,5,204,5,211,18,38,0,90,0,0,17,7, |
1,71,1,148,0,0,0,21,180,1,44,17,38,1,184,255,251,180,49,43,15,42,37,1,43, |
53,0,43,53,0,255,255,0,45,0,0,5,41,6,254,18,38,0,60,0,0,17,7,2,150,1,91,0, |
0,0,21,180,1,10,5,38,1,184,255,251,180,15,9,4,8,37,1,43,53,0,43,53,0,255, |
255,0,5,254,87,3,252,5,211,18,38,0,92,0,0,17,7,1,71,0,182,0,0,0,19,64,11, |
1,33,17,38,1,0,38,32,17,31,37,1,43,53,0,43,53,0,0,0,255,255,0,45,0,0,5,41, |
6,178,18,38,0,60,0,0,17,7,2,152,1,104,0,0,0,23,64,13,2,1,9,5,38,2,1,0,13, |
11,4,8,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,65,0,0,4,163,6,240,18,38, |
0,61,0,0,17,7,2,149,1,160,0,0,0,19,64,11,1,10,5,38,1,74,10,13,1,0,37,1,43, |
53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,228,18,38,0,93,0,0,17,7,0,116,1, |
53,0,0,0,19,64,11,1,10,17,38,1,93,10,13,0,8,37,1,43,53,0,43,53,0,0,0,255, |
255,0,65,0,0,4,163,6,241,18,38,0,61,0,0,17,7,1,75,1,124,1,37,0,19,64,11,1, |
10,5,38,1,0,10,12,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182,5,204, |
18,38,0,93,0,0,17,7,1,75,0,253,0,0,0,12,182,1,0,10,12,0,8,37,1,43,53,0,0, |
0,255,255,0,65,0,0,4,163,6,254,18,38,0,61,0,0,17,7,2,151,1,56,0,0,0,19,64, |
11,1,10,5,38,1,17,12,18,1,0,37,1,43,53,0,43,53,0,0,0,255,255,0,49,0,0,3,182, |
5,211,18,38,0,93,0,0,17,7,1,72,0,156,0,0,0,21,180,1,10,17,38,1,184,255,244, |
180,12,18,0,8,37,1,43,53,0,43,53,0,0,1,0,138,0,0,2,17,5,202,0,19,0,125,185, |
0,5,255,216,179,13,17,72,5,184,255,224,64,56,8,12,72,111,10,1,10,10,0,70, |
0,1,16,1,48,1,240,1,4,8,1,255,21,1,224,21,1,223,21,1,176,21,192,21,2,159, |
21,1,112,21,128,21,2,31,21,1,0,21,1,240,21,1,223,21,1,21,184,255,192,64,18, |
34,37,72,79,21,1,112,21,1,31,21,1,14,80,7,0,0,21,0,63,63,237,1,93,93,113, |
43,113,113,114,114,114,114,114,114,114,114,47,94,93,237,50,47,93,49,48,0, |
43,43,33,35,17,52,62,2,51,50,22,23,21,46,1,35,34,14,2,21,1,62,180,22,59,102, |
81,32,69,26,17,45,18,40,51,29,11,4,180,59,101,75,43,6,6,137,3,5,22,41,60, |
39,0,0,0,0,1,0,192,254,78,3,195,5,174,0,27,0,148,64,107,133,6,1,122,18,138, |
18,2,139,15,1,89,15,105,15,121,15,3,131,13,1,85,13,101,13,117,13,3,54,13, |
1,38,7,1,38,8,1,34,22,50,22,114,22,130,22,4,21,17,37,17,53,17,3,27,212,8, |
228,8,244,8,3,80,8,144,8,2,38,8,54,8,70,8,3,8,10,27,3,13,13,17,19,3,8,95, |
14,159,14,2,14,12,16,80,9,17,17,13,3,81,15,24,127,24,175,24,3,24,13,0,47, |
47,93,237,18,57,47,51,237,50,1,47,113,51,23,51,17,23,51,113,113,113,47,49, |
48,93,0,93,1,93,93,93,93,93,93,93,93,93,1,46,1,35,34,14,2,15,1,51,7,35,3, |
35,19,35,55,51,55,62,3,51,50,22,23,3,164,17,62,31,31,46,33,24,9,26,211,25, |
213,254,180,254,152,27,151,29,12,40,71,109,81,32,82,35,5,32,5,10,19,40,64, |
45,137,131,250,211,5,45,131,152,59,102,76,43,10,10,0,0,0,4,0,4,0,0,5,82,7, |
62,0,26,0,39,0,61,0,67,1,36,64,18,122,64,138,64,2,102,5,118,5,134,5,3,86, |
6,102,6,2,25,184,255,232,64,183,9,17,72,19,24,9,17,72,12,16,14,17,72,10,12, |
1,12,38,9,10,32,8,39,32,7,32,40,130,0,68,66,132,66,2,66,62,50,130,17,175, |
62,191,62,207,62,3,15,17,47,17,2,144,17,1,0,0,32,0,2,15,0,159,0,2,0,62,17, |
17,62,0,3,6,11,5,32,32,10,7,139,7,1,90,7,106,7,122,7,3,7,16,6,32,6,48,6,3, |
32,6,1,6,6,69,80,69,176,69,2,48,69,96,69,144,69,192,69,240,69,5,47,69,1,132, |
10,1,85,10,101,10,117,10,3,10,11,62,62,45,141,112,22,128,22,2,22,22,57,127, |
64,159,64,175,64,191,64,4,64,64,9,13,72,64,8,9,39,38,38,10,5,12,32,3,128, |
57,1,63,57,1,0,57,1,57,7,7,10,0,47,51,47,47,93,93,93,23,51,18,57,47,51,205, |
50,47,43,93,18,57,47,93,237,51,47,1,47,51,93,93,93,93,113,17,51,47,93,113, |
51,93,93,17,18,57,17,51,17,18,23,57,47,47,47,93,113,93,113,93,16,237,16,205, |
93,16,237,16,135,192,192,135,192,192,1,51,49,48,93,43,43,43,93,93,93,1,20, |
6,7,6,7,1,35,3,33,3,35,1,38,39,46,1,53,52,62,2,51,50,30,2,3,46,3,39,14,3, |
7,3,33,3,52,46,2,35,34,14,2,21,20,30,1,23,22,23,51,50,62,2,3,53,55,51,21, |
5,3,158,38,33,16,18,2,29,195,161,253,126,162,198,2,36,21,18,33,38,38,66,88, |
50,50,88,66,38,158,16,29,22,15,1,2,14,23,29,15,180,2,15,131,21,36,49,28,29, |
49,36,21,21,36,24,21,24,9,28,49,36,21,247,217,207,254,202,5,112,45,79,30, |
15,11,251,68,1,115,254,141,4,185,12,17,30,79,45,45,79,59,34,34,59,79,253, |
254,36,74,60,41,4,4,41,62,73,36,254,95,3,119,25,44,33,19,19,33,44,25,26,44, |
35,10,8,1,19,35,44,1,35,16,181,23,174,0,255,255,0,87,255,236,4,115,7,62,18, |
38,0,68,0,0,16,39,1,76,1,20,255,85,17,7,0,116,1,99,1,90,0,35,64,14,3,2,101, |
16,38,4,26,106,109,3,36,37,3,2,184,255,212,180,76,66,3,36,37,1,43,53,53,43, |
53,0,43,53,53,0,0,0,255,255,0,24,0,0,7,168,6,240,18,38,0,134,0,0,17,7,2,149, |
3,228,0,0,0,21,180,2,27,5,38,2,184,1,32,180,27,30,4,14,37,1,43,53,0,43,53, |
0,255,255,0,66,255,236,6,194,5,228,18,38,0,166,0,0,17,7,0,116,2,175,0,0,0, |
19,64,11,3,89,17,38,3,73,89,92,25,61,37,1,43,53,0,43,53,0,0,0,255,255,0,71, |
255,203,5,244,6,240,18,38,0,152,0,0,17,7,2,149,2,75,0,0,0,19,64,11,3,52,5, |
38,3,73,52,55,10,24,37,1,43,53,0,43,53,0,0,0,255,255,0,44,255,218,4,180,5, |
228,18,38,0,184,0,0,17,7,0,116,1,178,0,0,0,19,64,11,3,46,17,38,3,94,46,49, |
8,19,37,1,43,53,0,43,53,0,0,0,0,1,0,0,4,177,2,150,5,211,0,9,0,66,64,14,118, |
9,134,9,2,120,8,136,8,2,128,0,1,0,184,255,192,64,27,11,15,72,0,191,6,1,6, |
4,142,64,8,148,128,6,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93,51,26,253,26, |
237,1,47,93,204,43,93,49,48,93,93,1,21,35,39,35,7,35,53,19,51,2,150,105,219, |
2,232,104,234,204,4,197,20,169,169,20,1,14,0,0,1,0,0,4,177,2,150,5,211,0, |
9,0,66,64,14,118,0,134,0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,27,11,15, |
72,8,64,191,2,1,2,7,3,148,128,6,142,15,1,47,1,63,1,127,1,239,1,5,1,0,47,93, |
237,26,237,50,1,47,93,26,204,43,93,49,48,93,93,1,35,3,53,51,23,51,55,51,21, |
1,182,204,234,104,232,2,219,105,4,177,1,14,20,169,169,20,0,0,1,0,51,4,212, |
2,88,5,83,0,3,0,81,64,59,4,1,1,228,1,244,1,2,1,164,0,1,91,0,107,0,2,52,0, |
68,0,2,0,2,32,18,25,72,2,142,1,64,28,33,72,47,1,1,2,15,1,63,1,175,1,191,1, |
4,1,64,22,26,72,1,64,14,17,72,1,0,47,43,43,93,95,113,43,237,43,1,47,93,93, |
93,47,93,113,49,48,1,33,53,33,2,88,253,219,2,37,4,212,127,0,1,255,221,4,177, |
2,119,5,230,0,21,0,73,64,51,133,14,1,133,8,1,31,17,79,17,127,17,175,17,223, |
17,5,239,17,1,17,64,5,64,29,60,72,5,16,80,5,96,5,2,5,149,128,11,143,15,0, |
47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,237,113,50,1,47,43,26,204,93,113, |
49,48,0,93,93,1,34,46,2,39,51,30,3,51,50,62,2,55,51,14,3,1,41,74,116,84,50, |
8,117,8,39,56,72,42,42,71,56,38,8,117,9,50,83,116,4,177,51,85,112,61,43,59, |
36,15,16,36,59,42,61,112,85,51,0,1,0,156,5,32,1,80,5,204,0,3,0,23,64,12,3, |
134,0,64,14,17,72,0,0,83,1,0,0,63,237,1,47,43,237,49,48,19,53,51,21,156,180, |
5,32,172,172,0,0,2,0,51,4,144,2,23,6,115,0,19,0,39,0,89,185,0,18,255,232, |
64,14,9,14,72,12,24,9,14,72,8,24,9,14,72,2,184,255,232,64,42,9,14,72,20,130, |
64,0,192,30,130,95,10,1,10,25,141,15,15,31,15,2,15,35,141,15,5,47,5,63,5, |
79,5,127,5,159,5,191,5,239,5,8,5,0,47,93,237,220,93,237,1,47,93,237,26,220, |
26,237,49,48,43,43,43,43,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,7,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,2,23,38,66,88,50,50,88,66,38,38,66, |
88,50,50,88,66,38,108,21,36,49,28,29,49,36,21,21,36,49,29,28,49,36,21,5,130, |
50,88,66,38,38,66,88,50,50,88,65,38,38,65,88,50,28,49,36,21,21,36,49,28,29, |
49,38,21,21,38,49,0,0,0,0,1,0,80,254,85,1,174,0,0,0,23,0,76,64,55,14,24,9, |
13,72,9,24,9,13,72,5,32,9,17,72,12,17,132,15,0,31,0,2,95,0,191,0,2,0,6,11, |
64,7,10,72,11,20,141,16,3,1,32,3,80,3,96,3,112,3,176,3,192,3,6,3,0,47,93, |
113,237,47,43,1,47,205,93,113,237,50,49,48,43,43,43,1,14,1,35,34,38,53,52, |
62,2,55,51,14,3,21,20,22,51,50,54,55,1,174,28,71,40,105,106,34,48,53,20,133, |
25,52,43,27,49,45,29,58,28,254,112,12,15,102,85,47,79,61,42,11,14,45,59,70, |
39,42,48,13,11,0,1,255,233,4,177,2,182,5,189,0,27,2,77,185,0,26,255,232,64, |
182,9,17,72,12,24,9,17,72,41,29,1,25,29,41,29,57,29,89,29,105,29,5,29,64, |
229,232,72,29,64,217,220,72,11,29,1,208,169,29,185,29,201,29,3,155,29,1,9, |
29,57,29,2,185,29,201,29,217,29,3,29,64,195,198,72,155,29,171,29,2,137,29, |
1,123,29,1,73,29,1,137,29,185,29,2,29,64,171,175,72,6,29,54,29,2,158,153, |
29,1,125,29,141,29,2,111,29,1,45,29,61,29,77,29,3,27,29,1,13,29,1,237,29, |
253,29,2,29,128,136,139,72,137,29,153,29,2,91,29,107,29,123,29,3,29,192,127, |
130,72,9,29,1,249,29,1,235,29,1,201,29,217,29,2,171,29,187,29,2,153,29,1, |
22,29,38,29,102,29,118,29,134,29,5,4,29,1,110,29,184,255,64,64,96,101,109, |
72,148,29,1,112,29,128,29,2,82,29,98,29,2,64,29,1,18,29,34,29,50,29,3,4,29, |
1,228,29,244,29,2,214,29,1,196,29,1,176,29,1,162,29,1,128,29,144,29,2,82, |
29,98,29,114,29,3,36,29,52,29,68,29,3,6,29,22,29,2,246,29,1,210,29,226,29, |
2,192,29,1,146,29,162,29,178,29,3,100,29,116,29,132,29,3,29,184,255,192,64, |
9,60,64,72,2,29,1,59,1,29,184,255,128,64,57,53,58,72,164,29,180,29,2,144, |
29,1,100,29,116,29,132,29,3,48,29,64,29,80,29,3,4,29,20,29,36,29,3,208,29, |
224,29,2,164,29,180,29,196,29,3,112,29,128,29,2,148,29,164,29,228,29,3,29, |
184,255,192,64,19,26,31,72,128,29,1,84,29,100,29,116,29,3,29,64,7,10,72,23, |
184,255,128,64,9,36,39,72,148,23,164,23,2,23,184,255,128,64,23,30,33,72,68, |
23,1,48,23,1,2,0,23,16,23,32,23,3,208,23,224,23,2,23,184,255,192,64,43,13, |
19,72,15,23,1,23,9,22,22,5,143,64,15,14,31,14,2,255,14,1,14,64,16,19,72,14, |
128,19,143,8,15,0,47,0,63,0,127,0,239,0,5,0,0,47,93,50,237,26,221,43,93,113, |
26,237,51,47,1,47,204,93,43,93,113,95,113,113,43,113,43,43,93,93,43,93,113, |
113,113,114,114,114,114,114,43,95,94,93,43,93,93,93,93,93,113,113,113,113, |
113,113,113,113,113,114,114,114,114,114,114,43,94,93,93,93,93,93,93,93,113, |
43,113,113,43,113,114,114,114,114,114,114,94,93,43,93,113,113,113,113,43, |
113,114,114,114,94,93,43,43,93,113,49,48,43,43,1,34,46,2,35,34,6,7,35,62, |
3,51,50,30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45, |
74,59,44,84,78,69,30,54,55,8,92,5,20,43,74,4,177,37,45,37,62,57,45,95,78, |
50,37,45,37,63,56,44,95,78,51,0,0,0,2,0,22,4,177,3,25,5,228,0,5,0,11,0,111, |
64,82,164,10,1,102,10,1,154,8,170,8,2,98,4,162,4,2,98,3,1,154,2,170,2,2,10, |
159,6,1,15,6,31,6,127,6,223,6,4,7,6,4,64,63,0,79,0,143,0,175,0,191,0,207, |
0,6,0,64,30,41,72,0,64,23,26,72,0,8,2,149,128,6,15,0,47,0,63,0,127,0,239, |
0,5,0,0,47,93,50,26,237,50,1,47,43,43,93,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,93,19,53,19,51,21,1,51,53,19,51,21,1,22,217,207,254,182,253,217, |
207,254,182,4,177,20,1,31,29,254,234,20,1,31,29,254,234,0,0,1,0,205,4,194, |
1,225,6,7,0,5,0,64,64,43,2,16,12,17,72,41,2,1,10,5,26,5,42,5,3,3,43,3,1,3, |
64,0,2,128,132,0,148,0,2,112,0,1,2,16,0,32,0,64,0,96,0,4,0,0,47,93,95,93, |
93,26,205,1,47,26,205,93,49,48,95,93,93,43,19,53,19,51,21,3,205,69,207,201, |
4,194,33,1,36,37,254,224,0,3,0,29,4,176,2,139,6,65,0,5,0,9,0,13,0,83,64,53, |
2,16,11,17,72,10,5,26,5,42,5,3,47,4,1,4,47,1,1,1,1,6,192,13,208,13,2,13,10, |
192,9,208,9,2,9,6,11,7,144,6,2,0,0,10,192,6,1,15,6,63,6,2,6,0,47,93,93,51, |
51,47,205,16,237,50,1,47,205,93,47,205,93,18,57,47,113,205,93,49,48,93,43, |
19,53,19,51,21,3,37,53,51,21,33,53,51,21,250,69,187,181,254,216,150,1,66, |
150,4,176,33,1,112,37,254,148,31,172,172,172,172,0,0,255,255,0,4,0,0,5,82, |
5,131,16,38,0,36,0,0,17,7,1,80,255,108,255,124,0,94,179,2,0,24,1,184,255, |
10,181,24,24,5,5,37,28,184,255,192,179,36,36,72,28,184,255,192,179,30,30, |
72,28,184,255,192,179,24,24,72,28,184,255,192,179,21,21,72,28,184,255,192, |
179,18,18,72,28,184,255,192,179,15,15,72,28,184,255,192,64,11,12,12,72,28, |
64,11,11,72,2,23,3,0,63,53,1,43,43,43,43,43,43,43,43,43,93,53,0,1,0,187,1, |
190,1,126,2,154,0,3,2,10,179,3,134,0,5,184,255,128,64,12,229,233,72,6,5,22, |
5,2,246,5,1,5,184,255,128,64,33,222,225,72,150,5,166,5,2,116,5,132,5,2,86, |
5,102,5,2,68,5,1,38,5,54,5,2,2,5,18,5,2,211,5,184,255,128,64,22,207,210,72, |
198,5,214,5,2,180,5,1,150,5,166,5,2,116,5,132,5,2,5,184,255,192,64,36,195, |
199,72,4,5,20,5,2,214,5,230,5,246,5,3,194,5,1,148,5,164,5,180,5,3,118,5,134, |
5,2,84,5,100,5,2,5,184,255,192,64,34,174,181,72,164,5,180,5,196,5,3,70,5, |
86,5,118,5,134,5,150,5,5,52,5,1,38,5,1,4,5,20,5,2,161,5,184,255,192,179,157, |
160,72,5,184,255,192,64,37,152,155,72,100,5,116,5,2,54,5,70,5,86,5,3,36,5, |
1,6,5,22,5,2,244,5,1,214,5,230,5,2,178,5,194,5,2,5,184,255,128,64,28,135, |
138,72,86,5,102,5,2,36,5,52,5,68,5,3,2,5,18,5,2,212,5,228,5,244,5,3,5,184, |
255,192,64,23,119,124,72,82,5,98,5,2,1,32,5,48,5,64,5,3,4,5,20,5,2,112,5, |
184,255,128,64,9,103,111,72,68,5,84,5,2,5,184,255,192,179,99,102,72,5,184, |
255,128,179,92,95,72,5,184,255,192,179,87,91,72,5,184,255,128,64,21,81,86, |
72,36,5,52,5,68,5,3,228,5,1,176,5,192,5,208,5,3,5,184,255,192,64,16,67,70, |
72,48,5,1,36,5,1,0,5,16,5,2,60,5,184,255,192,64,12,56,59,72,187,5,1,128,5, |
144,5,2,5,184,255,192,64,41,45,48,72,11,5,1,208,5,224,5,2,164,5,180,5,196, |
5,3,32,5,48,5,2,2,0,5,16,5,2,240,5,1,159,5,175,5,2,0,5,1,5,184,255,192,181, |
13,17,72,0,155,1,0,47,237,1,43,93,93,93,113,95,113,113,113,114,43,114,114, |
43,94,93,93,93,43,93,93,113,43,43,43,43,114,43,94,93,93,95,93,43,93,113,113, |
113,43,113,113,113,114,114,114,114,43,43,94,93,93,93,93,93,43,113,113,113, |
113,113,114,43,114,114,114,114,43,94,93,93,93,93,93,93,43,93,113,43,47,237, |
49,48,19,53,51,21,187,195,1,190,220,220,0,0,255,255,255,245,0,0,5,238,5,131, |
16,39,0,40,0,240,0,0,17,7,1,80,255,40,255,124,0,49,64,10,1,14,3,1,16,15,1, |
0,15,1,184,255,113,64,19,15,15,1,1,37,0,208,0,1,191,0,1,47,0,1,47,0,1,0,16, |
93,93,93,93,53,43,93,93,53,0,63,53,0,0,0,255,255,255,242,0,0,6,13,5,131,16, |
39,0,43,0,237,0,0,17,7,1,80,255,37,255,124,0,95,185,0,19,255,192,179,21,21, |
72,19,184,255,192,179,20,20,72,19,184,255,192,179,19,19,72,19,184,255,192, |
179,17,17,72,19,184,255,192,64,13,14,14,72,1,14,3,1,16,15,1,0,15,1,184,255, |
113,64,19,15,15,5,5,37,0,207,0,1,191,0,1,111,0,1,47,0,1,0,16,93,93,93,93, |
53,43,93,93,53,0,63,53,1,43,43,43,43,43,0,255,255,255,232,0,0,2,85,5,131, |
16,39,0,44,0,217,0,0,17,7,1,80,255,27,255,124,0,92,185,0,11,255,192,179,17, |
17,72,11,184,255,192,64,23,12,12,72,11,64,11,11,72,11,64,9,9,72,1,6,3,1,16, |
7,1,0,7,1,184,255,102,64,28,7,7,1,1,37,0,128,0,1,127,0,1,111,0,1,95,0,1,79, |
0,1,47,0,1,47,0,1,0,16,93,93,93,93,93,93,93,53,43,93,93,53,0,63,53,1,43,43, |
43,43,255,255,255,187,255,236,5,211,5,150,16,38,0,50,252,0,17,7,1,80,254, |
238,255,124,0,39,64,10,2,42,3,2,192,40,1,0,40,1,184,255,94,64,11,40,40,10, |
10,37,1,0,47,0,1,0,16,93,53,53,43,93,93,53,0,63,53,0,0,0,255,255,0,65,0,0, |
6,171,5,131,16,39,0,60,1,130,0,0,17,7,1,80,255,116,255,124,5,192,64,21,16, |
64,233,233,72,16,64,229,229,72,16,64,227,227,72,16,64,226,226,72,16,184,255, |
192,179,224,224,72,16,184,255,192,64,19,222,222,72,16,64,220,220,72,16,64, |
219,219,72,16,64,216,216,72,16,184,255,192,179,215,215,72,16,184,255,192, |
64,19,211,211,72,16,64,207,207,72,16,64,206,206,72,16,64,205,205,72,16,184, |
255,192,179,204,204,72,16,184,255,192,64,19,202,202,72,16,64,199,199,72,16, |
64,186,186,72,16,64,184,184,72,16,184,255,192,179,183,183,72,16,184,255,192, |
64,14,182,182,72,16,64,179,179,72,16,64,177,177,72,16,184,255,192,64,19,172, |
172,72,16,64,166,166,72,16,64,164,164,72,16,64,163,163,72,16,184,255,192, |
64,24,161,161,72,16,64,156,156,72,16,128,153,153,72,16,64,152,152,72,16,64, |
151,151,72,16,184,255,192,179,149,149,72,16,184,255,128,179,148,148,72,16, |
184,255,128,179,147,147,72,16,184,255,192,179,146,146,72,16,184,255,128,179, |
145,145,72,16,184,255,192,179,144,144,72,16,184,255,128,179,141,141,72,16, |
184,255,128,179,140,140,72,16,184,255,192,179,139,139,72,16,184,255,128,179, |
138,138,72,16,184,255,192,179,137,137,72,16,184,255,192,179,136,136,72,16, |
184,255,192,179,135,135,72,16,184,255,128,179,134,134,72,16,184,255,192,179, |
133,133,72,16,184,255,128,179,131,131,72,16,184,255,192,179,130,130,72,16, |
184,255,0,179,129,129,72,16,184,255,0,179,128,128,72,16,184,254,192,179,127, |
127,72,16,184,255,0,179,126,126,72,16,184,255,0,179,125,125,72,16,184,255, |
64,179,124,124,72,16,184,255,64,179,123,123,72,16,184,255,64,179,122,122, |
72,16,184,255,0,179,121,121,72,16,184,254,192,179,120,120,72,16,184,255,0, |
179,119,119,72,16,184,255,0,179,118,118,72,16,184,255,64,179,117,117,72,16, |
184,255,0,179,116,116,72,16,184,255,64,179,115,115,72,16,184,255,0,179,114, |
114,72,16,184,255,64,179,113,113,72,16,184,255,64,179,112,112,72,16,184,255, |
64,179,111,111,72,16,184,255,128,179,110,110,72,16,184,255,64,179,109,109, |
72,16,184,255,128,179,108,108,72,16,184,255,0,179,107,107,72,16,184,255,64, |
179,106,106,72,16,184,255,0,179,105,105,72,16,184,255,64,179,104,104,72,16, |
184,255,64,179,103,103,72,16,184,255,64,179,102,102,72,16,184,255,128,179, |
101,101,72,16,184,255,64,179,100,100,72,16,184,255,64,179,99,99,72,16,184, |
255,0,179,98,98,72,16,184,255,64,179,97,97,72,16,184,255,64,179,96,96,72, |
16,184,255,64,179,95,95,72,16,184,255,64,179,94,94,72,16,184,255,64,179,93, |
93,72,16,184,255,128,179,92,92,72,16,184,255,64,179,91,91,72,16,184,255,128, |
179,90,90,72,16,184,255,64,179,89,89,72,16,184,255,128,179,88,88,72,16,184, |
255,64,179,87,87,72,16,184,255,64,179,86,86,72,16,184,255,64,179,85,85,72, |
16,184,255,64,179,84,84,72,16,184,255,64,179,83,83,72,16,184,255,128,179, |
82,82,72,16,184,255,192,179,81,81,72,16,184,255,128,179,80,80,72,16,184,255, |
128,179,79,79,72,16,184,255,64,179,78,78,72,16,184,255,64,179,77,77,72,16, |
184,255,64,179,76,76,72,16,184,255,128,179,75,75,72,16,184,255,128,179,74, |
74,72,16,184,255,128,179,73,73,72,16,184,255,64,179,72,72,72,16,184,255,128, |
179,71,71,72,16,184,255,192,179,70,70,72,16,184,255,128,179,69,69,72,16,184, |
255,192,179,68,68,72,16,184,255,192,179,67,67,72,16,184,255,128,179,66,66, |
72,16,184,255,64,179,65,65,72,16,184,255,128,179,64,64,72,16,184,255,128, |
179,63,63,72,16,184,255,128,179,62,62,72,16,184,255,192,179,61,61,72,16,184, |
255,192,179,60,60,72,16,184,255,192,179,59,59,72,16,184,255,128,179,58,58, |
72,16,184,255,128,179,57,57,72,16,184,255,128,179,56,56,72,16,184,255,128, |
179,55,55,72,16,184,255,128,179,54,54,72,16,184,255,192,179,53,53,72,16,184, |
255,192,179,52,52,72,16,184,255,128,179,51,51,72,16,184,255,192,179,50,50, |
72,16,184,255,128,179,49,49,72,16,184,255,128,179,48,48,72,16,184,255,128, |
179,47,47,72,16,184,255,192,179,46,46,72,16,184,255,128,179,45,45,72,16,184, |
255,128,179,44,44,72,16,184,255,128,179,43,43,72,16,184,255,192,179,42,42, |
72,16,184,255,192,179,41,41,72,16,184,255,192,179,40,40,72,16,184,255,192, |
179,39,39,72,16,184,255,128,179,38,38,72,16,184,255,128,179,37,37,72,16,184, |
255,128,179,36,36,72,16,184,255,192,179,35,35,72,16,184,255,128,179,34,34, |
72,16,184,255,192,179,33,33,72,16,184,255,192,179,32,32,72,16,184,255,192, |
179,31,31,72,16,184,255,192,179,30,30,72,16,184,255,192,179,29,29,72,16,184, |
255,192,179,28,28,72,16,184,255,192,179,27,27,72,16,184,255,192,179,26,26, |
72,16,184,255,192,179,25,25,72,16,184,255,192,179,24,24,72,16,184,255,128, |
179,23,23,72,16,184,255,192,179,22,22,72,16,184,255,192,179,21,21,72,16,184, |
255,192,179,17,17,72,16,184,255,128,179,16,16,72,16,184,255,192,179,15,15, |
72,16,184,255,192,179,14,14,72,16,184,255,192,64,30,12,12,72,16,64,11,11, |
72,1,11,3,1,128,12,1,112,12,1,96,12,1,64,12,1,16,12,1,0,12,1,184,255,166, |
64,13,12,12,4,4,37,0,176,0,1,0,0,1,0,16,93,93,53,43,93,93,93,93,93,93,53, |
0,63,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,187,0,0, |
5,173,5,150,16,38,1,114,10,0,17,7,1,80,254,238,255,124,0,68,64,15,65,64,19, |
19,72,1,60,3,1,144,58,1,16,58,1,184,255,62,64,28,58,58,53,53,37,0,159,0,1, |
95,0,1,31,0,1,223,0,1,175,0,1,159,0,1,31,0,1,0,16,93,93,93,93,113,113,113, |
53,43,93,93,53,0,63,53,1,43,0,0,255,255,255,176,0,0,2,30,6,65,16,38,1,130, |
0,0,17,6,1,81,147,0,2,60,64,11,29,64,227,227,72,29,64,226,226,72,29,184,255, |
192,179,223,223,72,29,184,255,192,179,220,220,72,29,184,255,192,64,19,219, |
219,72,29,64,213,213,72,29,64,212,212,72,29,64,211,211,72,29,184,255,192, |
179,207,207,72,29,184,255,192,179,206,206,72,29,184,255,192,64,19,205,205, |
72,29,64,200,200,72,29,64,199,199,72,29,64,198,198,72,29,184,255,192,64,14, |
192,192,72,29,64,182,182,72,29,64,177,177,72,29,184,255,192,179,175,175,72, |
29,184,255,192,64,19,174,174,72,29,64,168,168,72,29,64,167,167,72,29,64,164, |
164,72,29,184,255,192,179,161,161,72,29,184,255,192,64,19,160,160,72,29,64, |
155,155,72,29,64,154,154,72,29,64,153,153,72,29,184,255,192,179,152,152,72, |
29,184,255,192,64,19,151,151,72,29,64,141,141,72,29,64,132,132,72,29,64,131, |
131,72,29,184,255,192,64,9,129,129,72,29,64,119,119,72,29,184,255,192,64, |
14,115,115,72,29,64,110,110,72,29,64,109,109,72,29,184,255,192,64,19,106, |
106,72,29,64,101,101,72,29,64,100,100,72,29,64,96,96,72,29,184,255,192,179, |
94,94,72,29,184,255,192,64,19,93,93,72,29,64,87,87,72,29,64,86,86,72,29,64, |
85,85,72,29,184,255,192,179,84,84,72,29,184,255,192,64,9,79,79,72,29,64,74, |
74,72,29,184,255,192,64,24,61,61,72,29,64,56,56,72,29,64,55,55,72,29,64,54, |
54,72,29,64,51,51,72,29,184,255,192,179,50,50,72,29,184,255,192,179,49,49, |
72,29,184,255,192,64,19,48,48,72,29,64,42,42,72,29,64,41,41,72,29,64,40,40, |
72,29,184,255,192,179,36,36,72,29,184,255,192,179,35,35,72,29,184,255,192, |
64,19,34,34,72,29,64,29,29,72,29,64,24,24,72,29,64,23,23,72,29,184,255,192, |
179,21,21,72,29,184,255,192,179,17,17,72,29,184,255,192,64,14,16,16,72,29, |
64,9,9,72,29,64,8,8,72,29,184,255,192,64,12,7,7,72,3,2,1,14,17,38,3,2,1,184, |
255,220,180,20,26,5,13,37,1,43,53,53,53,0,43,53,53,53,1,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,0,4,0,0,5,82,5,129, |
18,6,0,36,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,0,1,0,168,0,1,4, |
47,5,130,0,5,0,56,64,40,3,90,0,4,16,4,64,4,3,4,16,0,48,0,80,0,3,0,0,16,0, |
32,0,64,0,96,0,128,0,160,0,7,7,0,2,95,5,3,3,18,0,63,63,237,1,47,94,93,113, |
47,93,237,49,48,1,21,33,17,35,17,4,47,253,56,191,5,130,156,251,27,5,129,0, |
2,0,61,0,0,5,26,5,129,0,5,0,18,0,176,64,26,106,7,122,7,138,7,3,101,17,117, |
17,133,17,3,89,8,1,86,16,1,6,24,13,17,72,18,184,255,232,64,64,13,17,72,132, |
2,1,70,2,102,2,118,2,3,139,1,1,73,1,105,1,121,1,3,2,1,12,12,0,6,95,3,1,16, |
3,1,15,3,1,175,3,207,3,223,3,255,3,4,79,3,127,3,2,48,3,1,31,3,1,3,18,128, |
0,1,0,184,255,192,64,29,21,30,72,0,48,20,1,47,20,1,0,3,6,3,18,95,5,18,12, |
32,19,22,72,153,12,1,12,1,3,0,63,51,93,43,63,237,23,50,1,93,93,47,43,93,51, |
47,93,93,93,93,113,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93,43,43,93, |
93,93,93,49,48,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,62,2,5,217,1,254,251, |
35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12,141, |
156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,255,255,0,168,0,0,4,254,5,129, |
18,6,0,40,0,0,255,255,0,65,0,0,4,163,5,129,18,6,0,61,0,0,255,255,0,168,0, |
0,5,32,5,129,18,6,0,43,0,0,0,3,0,97,255,236,5,215,5,150,0,19,0,39,0,43,0, |
179,64,130,105,12,1,102,17,1,89,22,1,86,32,1,86,28,1,26,23,90,23,2,21,27, |
85,27,2,9,42,1,6,43,1,10,37,26,37,90,37,3,5,33,21,33,85,33,3,9,43,42,30,0, |
91,15,20,1,59,207,20,239,20,2,0,20,1,239,20,255,20,2,176,20,1,111,20,1,48, |
20,1,31,20,1,0,20,16,20,32,20,64,20,80,20,160,20,6,7,20,30,91,175,10,191, |
10,2,32,10,1,15,10,31,10,2,10,43,95,40,40,35,25,95,15,4,35,95,5,19,128,45, |
1,32,45,1,93,93,0,63,237,63,237,18,57,47,237,1,47,93,93,93,237,47,94,93,113, |
113,113,113,113,114,114,94,93,237,18,57,57,49,48,94,93,93,93,93,93,93,93, |
93,93,93,93,1,20,2,6,4,35,34,36,38,2,53,52,18,54,36,51,50,4,22,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,37,33,21,33,5,215,95,180,254,252,165,174, |
254,250,174,88,92,178,1,5,169,168,1,5,177,92,195,65,127,188,123,126,190,127, |
63,65,127,189,123,132,191,123,59,252,226,2,75,253,181,2,199,165,254,242,192, |
104,109,195,1,12,159,165,1,10,187,101,102,188,254,246,163,127,208,148,80, |
80,148,208,127,127,211,153,85,86,153,212,208,160,0,0,0,255,255,0,189,0,0, |
1,124,5,129,18,6,0,44,0,0,255,255,0,168,0,0,5,63,5,129,18,6,0,46,0,0,0,1, |
0,10,0,1,5,78,5,130,0,16,0,202,64,11,116,16,132,16,2,123,15,139,15,2,13,184, |
255,232,182,14,17,72,54,13,1,12,184,255,240,64,127,13,17,72,2,16,13,17,72, |
1,24,14,17,72,57,1,1,111,18,1,48,18,1,47,18,1,0,18,1,21,16,37,16,53,16,3, |
6,16,1,230,16,246,16,2,16,26,15,42,15,58,15,3,9,15,1,233,15,249,15,2,15,7, |
7,21,13,37,13,53,13,3,6,13,1,230,13,246,13,2,13,175,14,191,14,2,14,26,1,42, |
1,58,1,3,9,1,1,233,1,249,1,2,1,16,0,32,0,48,0,3,111,0,1,0,0,48,0,2,0,118, |
7,134,7,2,7,15,3,14,0,18,0,63,50,63,51,93,1,47,93,93,113,50,93,113,113,47, |
93,51,93,113,113,57,61,47,51,93,113,113,51,93,113,113,93,93,93,93,49,48,93, |
43,43,43,93,43,93,93,37,35,1,46,1,39,38,39,6,7,14,1,7,1,35,1,51,5,78,201, |
254,124,17,29,12,14,12,13,14,12,30,15,254,122,201,2,63,198,1,3,224,47,89, |
35,41,37,39,41,35,89,45,252,32,5,129,0,255,255,0,168,0,0,6,2,5,129,18,6,0, |
48,0,0,255,255,0,168,0,0,5,32,5,129,18,6,0,49,0,0,0,3,0,90,0,0,4,217,5,129, |
0,3,0,7,0,11,0,75,64,49,82,3,1,10,9,5,3,95,6,1,15,6,31,6,175,6,191,6,4,6, |
2,16,5,48,5,2,32,5,64,5,112,5,160,5,4,5,10,95,11,11,0,7,95,6,18,3,95,0,3, |
0,63,237,63,237,17,57,47,237,1,47,93,113,51,47,93,113,51,18,57,57,49,48,113, |
19,33,21,33,1,21,33,53,1,21,33,53,125,4,57,251,199,4,92,251,129,3,228,252, |
183,5,129,156,251,183,156,156,2,133,154,154,0,0,0,255,255,0,97,255,236,5, |
215,5,150,18,6,0,50,0,0,0,1,0,168,0,0,5,32,5,129,0,7,0,79,64,40,3,90,0,4, |
16,4,64,4,3,7,4,7,90,64,111,0,127,0,143,0,191,0,4,0,0,9,128,32,9,1,32,9,160, |
9,176,9,192,9,4,9,184,255,192,64,10,14,17,72,2,95,5,3,4,0,18,0,63,50,63,237, |
1,43,93,113,26,16,204,47,93,26,237,47,94,93,237,49,48,33,17,33,17,35,17,33, |
17,4,97,253,6,191,4,120,4,224,251,32,5,129,250,127,255,255,0,168,0,0,4,234, |
5,129,18,6,0,51,0,0,0,1,0,108,0,0,4,161,5,129,0,12,0,188,64,135,169,3,1,105, |
9,1,116,9,132,9,164,9,3,148,8,164,8,2,87,8,103,8,2,145,7,1,84,7,100,7,2,146, |
10,162,10,2,116,10,132,10,2,70,10,86,10,102,10,3,57,3,185,3,2,249,3,1,103, |
3,1,168,8,1,103,8,1,8,100,2,1,39,2,1,175,6,1,2,6,2,6,1,208,11,1,0,11,16,11, |
48,11,80,11,96,11,128,11,6,7,11,70,7,1,11,7,1,7,3,3,10,175,1,191,1,2,32,1, |
1,15,1,1,1,3,7,95,9,2,8,3,0,4,3,1,10,95,0,18,0,63,237,50,63,18,23,57,237, |
50,1,47,93,93,93,51,51,47,51,113,113,47,94,93,93,18,57,57,47,47,93,113,113, |
51,113,113,113,113,114,49,48,93,93,93,93,93,93,93,93,113,93,51,53,9,1,53, |
33,21,33,1,21,1,33,21,108,2,26,253,247,3,231,252,240,1,202,254,22,3,109,162, |
2,67,1,251,161,156,254,67,124,253,240,156,0,255,255,0,46,0,0,4,180,5,129, |
18,6,0,55,0,0,255,255,0,45,0,0,5,41,5,129,18,6,0,60,0,0,0,3,0,117,255,245, |
5,238,5,139,0,29,0,40,0,51,0,180,185,0,28,255,240,179,12,15,72,17,184,255, |
240,179,12,15,72,27,184,255,240,179,12,15,72,18,184,255,240,64,72,12,15,72, |
41,90,11,15,123,15,171,15,3,15,8,30,90,4,0,116,0,164,0,3,0,35,24,7,90,47, |
21,4,8,1,20,8,36,8,68,8,116,8,164,8,244,8,6,8,20,53,68,53,2,0,53,1,132,53, |
164,53,196,53,244,53,4,112,53,1,2,96,53,1,53,184,255,192,64,24,10,13,72,35, |
46,96,10,6,10,34,49,96,20,24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57, |
47,47,17,51,16,237,50,17,51,16,237,50,1,43,93,95,93,93,113,113,47,93,113, |
51,51,253,50,50,220,93,237,16,220,93,237,49,48,0,43,43,43,43,1,20,14,2,43, |
1,21,35,53,35,34,46,2,53,52,62,2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17, |
51,50,62,2,37,20,30,2,59,1,17,35,34,6,5,238,64,131,197,133,83,185,83,133, |
197,131,64,67,133,201,135,72,185,71,135,202,133,67,192,185,183,48,56,92,136, |
89,43,252,7,43,89,136,92,56,52,182,182,2,224,105,188,143,84,227,227,84,143, |
188,105,113,185,131,72,182,182,72,131,185,117,187,180,253,22,53,98,140,88, |
88,140,98,53,2,234,180,255,255,0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,145, |
0,0,6,30,5,129,0,35,0,203,64,127,90,31,106,31,2,85,30,101,30,2,90,4,106,4, |
2,90,5,106,5,2,74,22,1,69,13,1,3,25,90,100,28,1,132,28,148,28,2,28,19,35, |
90,0,10,90,107,7,1,139,7,155,7,2,7,16,219,0,1,4,0,100,0,132,0,3,219,0,1,4, |
0,52,0,68,0,100,0,132,0,148,0,180,0,196,0,8,7,0,4,37,36,37,52,37,68,37,132, |
37,196,37,212,37,7,228,37,244,37,2,160,37,1,132,37,148,37,2,96,37,112,37, |
2,84,37,1,64,37,1,2,37,184,255,192,64,18,9,12,72,34,2,96,19,239,15,1,15,15, |
26,17,8,3,0,18,0,63,63,51,51,57,47,93,51,237,50,1,43,95,93,93,93,93,93,93, |
113,47,94,93,93,113,113,51,220,93,113,237,16,253,50,220,93,113,237,49,48, |
95,93,93,93,0,93,1,93,0,93,33,17,35,34,46,2,53,17,51,17,20,30,2,59,1,17,51, |
17,51,50,62,2,53,17,51,17,20,14,2,43,1,17,2,251,83,133,201,134,67,191,47, |
93,139,92,56,185,56,95,140,91,45,191,68,134,201,132,83,1,171,84,142,189,104, |
1,207,254,45,80,137,100,57,3,73,252,183,57,100,137,80,1,211,254,49,104,189, |
142,84,254,85,0,0,0,1,0,87,0,0,5,163,5,150,0,57,0,225,64,91,101,36,1,101, |
22,1,157,49,1,143,49,1,49,16,11,15,72,157,9,1,143,9,1,9,16,11,15,72,116,3, |
132,3,2,54,3,1,54,2,118,2,2,54,56,118,56,2,116,55,132,55,2,54,55,1,42,26, |
1,42,32,1,41,53,48,40,10,18,96,40,112,40,144,40,3,111,18,127,18,159,18,3, |
40,18,40,18,24,34,91,80,53,1,53,184,255,192,64,69,27,30,72,191,53,207,53, |
2,48,53,1,53,17,5,91,31,24,79,24,2,224,24,1,15,24,31,24,95,24,207,24,223, |
24,5,160,24,1,111,24,159,24,2,0,24,32,24,48,24,3,8,24,95,59,1,10,15,19,39, |
48,5,42,95,18,41,18,29,95,0,4,0,63,237,63,51,237,23,50,1,93,47,94,93,93,93, |
113,113,114,253,196,47,93,93,43,114,237,17,57,57,47,47,93,93,17,51,17,51, |
16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,1,50,30,2, |
21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46,2,35,34,14,2,21,20,30, |
2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,2,253,151,241,168,90,59,109, |
157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116,169,108,109,170,116, |
61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109,59,90,168,241,5,150, |
86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51,126,143,159,85,116,181, |
124,65,65,124,181,116,85,159,143,126,51,224,156,4,2,3,2,54,138,167,191,106, |
147,234,162,86,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2,152,218, |
0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,3,0,45, |
0,0,5,41,6,178,0,8,0,12,0,16,2,114,64,20,30,7,1,12,7,1,7,24,12,15,72,17,5, |
1,3,5,1,16,3,5,184,255,232,64,255,12,15,72,12,133,9,16,133,64,13,5,4,14,2, |
1,8,14,7,105,8,169,8,2,6,8,22,8,54,8,70,8,4,14,8,6,1,90,38,2,86,2,150,2,3, |
118,2,230,2,2,57,2,73,2,2,6,2,1,16,2,153,18,169,18,201,18,3,86,18,1,9,18, |
57,18,2,25,18,89,18,137,18,249,18,4,6,18,1,202,249,18,1,230,18,1,9,18,25, |
18,185,18,201,18,4,198,18,1,89,18,121,18,169,18,3,54,18,1,41,18,57,18,185, |
18,233,18,4,11,18,1,153,249,18,1,198,18,214,18,2,178,18,1,164,18,1,150,18, |
1,130,18,1,116,18,1,86,18,102,18,2,66,18,1,36,18,52,18,2,18,18,1,4,18,1,244, |
18,1,230,18,1,196,18,212,18,2,166,18,182,18,2,146,18,1,132,18,1,118,18,1, |
98,18,1,84,18,1,54,18,70,18,2,36,18,1,22,18,1,4,18,1,242,18,1,1,208,18,224, |
18,2,196,18,1,160,18,176,18,2,148,18,1,112,18,1,100,18,1,64,18,1,20,18,36, |
18,52,18,3,0,18,1,105,64,202,228,18,244,18,2,208,18,1,164,18,180,18,196,18, |
3,128,18,144,18,2,116,18,1,80,18,96,18,2,68,18,1,32,18,1,4,18,20,18,2,244, |
18,1,224,18,1,196,18,212,18,2,176,18,1,84,18,100,18,116,18,148,18,164,18, |
5,48,18,64,18,2,36,18,1,0,18,1,196,18,244,18,2,144,18,1,4,18,20,18,36,18, |
68,18,84,18,116,18,132,18,7,57,224,18,1,132,18,164,18,212,18,3,112,18,1,4, |
18,36,18,52,18,84,18,100,18,5,228,18,244,18,2,192,18,1,180,18,1,144,18,1, |
4,18,20,18,52,18,84,18,132,18,5,212,18,228,18,2,187,18,1,164,18,1,112,18, |
1,2,48,18,96,18,2,15,18,47,18,2,10,14,145,9,95,13,1,13,64,9,12,72,13,0,3, |
59,3,75,3,123,3,3,3,1,8,4,3,1,18,0,63,63,51,18,57,93,17,51,47,43,93,51,237, |
50,1,93,93,95,93,93,93,93,113,113,113,113,113,114,114,114,114,94,93,93,93, |
113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,95,93,113,113,113,113,113,113,113,113,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,114,114,94,93,93,113,113, |
113,114,114,114,94,93,93,113,113,113,47,94,93,93,93,113,253,57,206,94,93, |
93,50,43,1,24,16,77,230,50,47,26,237,220,237,49,48,43,95,94,93,93,43,93,93, |
1,17,35,19,1,51,9,1,51,37,53,51,21,33,53,51,21,3,9,190,2,253,224,205,1,178, |
1,176,205,253,249,163,253,211,165,2,72,253,184,2,72,3,57,253,97,2,159,121, |
184,184,184,184,255,255,0,86,255,236,4,101,6,7,18,38,1,122,0,0,17,7,1,80, |
1,33,0,0,0,19,64,11,2,60,17,38,2,26,60,63,8,23,37,1,43,53,0,43,53,0,0,0,255, |
255,0,70,255,236,3,106,6,7,18,38,1,126,0,0,17,7,1,80,0,202,0,0,0,19,64,11, |
1,58,17,38,1,73,58,61,16,6,37,1,43,53,0,43,53,0,0,0,255,255,0,106,254,88, |
3,238,6,7,18,38,1,128,0,0,17,7,1,80,1,57,0,0,0,19,64,11,1,36,17,38,1,100, |
36,39,17,34,37,1,43,53,0,43,53,0,0,0,255,255,0,137,0,0,1,178,6,7,18,38,1, |
130,0,0,17,6,1,80,209,0,0,27,64,17,1,14,17,38,1,16,14,1,0,14,1,29,14,17,5, |
13,37,1,43,93,93,53,0,43,53,0,255,255,0,133,255,236,3,254,6,65,18,38,1,142, |
0,0,17,7,1,81,0,222,0,0,0,30,64,9,3,2,1,32,17,38,3,2,1,184,255,241,180,38, |
44,10,0,37,1,43,53,53,53,0,43,53,53,53,0,2,0,86,255,236,4,101,4,78,0,39,0, |
59,1,15,64,196,122,48,138,48,2,121,52,137,52,2,101,43,1,90,58,106,58,2,54, |
14,70,14,2,29,31,45,31,2,29,38,45,38,2,47,37,1,29,37,1,75,36,107,36,2,47, |
36,63,36,2,29,36,1,139,35,1,47,35,1,29,35,1,47,34,1,29,34,1,47,22,1,27,22, |
1,47,21,1,27,21,1,75,20,107,20,2,47,20,1,27,20,1,45,19,1,27,19,1,121,6,137, |
6,2,11,6,27,6,2,34,48,18,22,72,34,33,22,48,18,22,72,22,23,26,33,42,33,2,73, |
23,1,26,23,42,23,2,33,23,159,28,175,28,191,28,3,28,64,29,33,72,28,64,0,16, |
22,34,4,144,50,160,50,176,50,3,127,50,1,32,50,64,50,2,50,61,128,40,71,8,16, |
61,1,0,50,28,16,4,23,33,21,23,15,55,80,11,16,45,80,5,22,0,63,237,63,237,63, |
63,18,23,57,1,93,47,237,26,16,220,93,93,93,23,50,26,205,43,93,50,50,93,93, |
93,17,51,43,17,51,43,49,48,0,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,93,93,93,93,93,93,93,0,93,1,93,0,93,1,93,37,14,3,35,34,2,17,16,18, |
51,50,30,2,23,51,62,3,55,51,14,3,7,30,3,23,35,46,3,39,1,20,30,2,51,50,62, |
2,55,46,3,35,34,14,2,3,75,26,65,87,111,70,205,193,217,209,69,112,86,63,20, |
2,4,14,19,23,13,188,22,46,39,30,5,3,23,31,36,18,183,11,21,16,13,3,253,196, |
28,59,93,66,54,100,82,61,14,12,45,71,102,70,66,96,64,31,237,56,94,69,38,1, |
20,1,24,1,28,1,26,39,69,93,54,21,56,63,65,30,47,128,139,139,58,103,175,144, |
110,39,28,66,65,58,20,1,49,112,160,103,48,52,107,160,108,86,154,115,68,46, |
102,163,0,2,0,142,254,87,4,73,5,204,0,32,0,62,0,185,64,68,149,20,1,154,16, |
1,123,7,139,7,2,122,60,138,60,2,106,3,122,3,138,3,3,102,31,118,31,2,74,50, |
90,50,106,50,3,21,2,37,2,101,2,117,2,133,2,5,147,21,1,21,21,37,21,2,28,48, |
23,72,52,48,48,64,48,2,96,48,1,48,184,255,192,64,58,20,23,72,48,52,48,52, |
14,0,72,64,48,43,64,43,160,43,3,160,43,176,43,192,43,3,43,64,128,33,13,70, |
0,14,16,14,48,14,3,8,14,28,48,80,49,49,38,57,80,18,0,13,27,33,38,80,9,5,22, |
0,63,51,237,50,63,63,237,18,57,47,237,57,1,47,94,93,237,50,26,16,220,93,113, |
26,237,18,57,57,47,47,43,93,113,16,237,17,57,49,48,93,93,93,93,93,0,93,93, |
93,1,93,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35,17,52,54,51,50,30,2,21, |
20,14,2,7,30,3,1,30,3,51,50,62,2,53,52,46,2,35,53,62,1,53,52,46,2,35,34,14, |
2,21,4,73,53,111,173,120,102,160,56,6,3,3,180,228,226,99,152,102,53,35,61, |
81,46,57,114,91,56,252,249,28,71,81,87,43,72,110,73,38,38,81,128,89,127,113, |
27,57,87,60,70,104,68,34,1,149,89,154,116,66,55,39,57,92,53,254,215,5,172, |
237,220,47,90,130,82,73,111,82,56,18,11,55,93,137,254,218,19,34,25,14,41, |
76,106,66,65,110,81,45,142,27,139,122,44,77,57,32,35,77,122,88,0,0,0,0,1, |
0,7,254,88,3,249,4,58,0,24,0,237,64,59,59,22,75,22,2,41,22,1,59,21,75,21, |
2,26,21,42,21,2,9,21,1,42,12,58,12,74,12,3,25,12,1,77,13,1,13,16,13,16,72, |
66,2,1,54,2,1,34,2,1,6,2,22,2,2,13,2,1,1,17,1,184,255,240,64,76,13,16,72, |
24,15,7,7,13,14,16,15,14,47,14,2,57,31,14,63,14,95,14,127,14,159,14,191,14, |
223,14,255,14,8,63,14,127,14,159,14,191,14,223,14,255,14,6,0,14,32,14,2,224, |
14,1,191,14,1,160,14,1,95,14,159,14,2,0,14,16,14,64,14,3,8,14,1,0,184,255, |
240,64,17,127,0,1,0,64,26,1,0,26,48,26,96,26,144,26,4,26,184,255,192,64,14, |
21,26,72,7,15,24,3,25,20,27,13,13,0,15,0,63,50,47,63,17,23,51,1,43,93,113, |
47,93,56,50,47,94,93,93,93,93,93,113,113,114,94,93,56,51,57,61,47,51,51,49, |
48,43,94,93,94,93,93,93,93,43,93,93,93,93,93,93,93,93,19,51,19,30,3,23,62, |
3,55,19,51,1,14,3,7,35,62,1,55,7,192,245,7,21,20,17,4,5,18,21,22,8,239,191, |
254,122,17,31,27,23,7,191,17,48,24,4,58,253,93,22,63,67,63,22,21,62,67,63, |
22,2,165,251,251,45,111,124,132,65,131,213,91,0,0,0,2,0,86,255,236,4,29,5, |
204,0,19,0,50,0,156,64,81,115,28,131,28,2,106,28,1,118,46,134,46,2,106,46, |
1,90,2,106,2,2,90,17,106,17,2,85,13,101,13,2,114,26,130,26,2,38,26,1,128, |
25,1,114,25,1,51,25,67,25,2,50,50,31,71,0,64,25,46,5,47,47,41,31,0,1,144, |
0,1,0,52,128,10,71,31,41,1,41,47,20,80,5,184,255,224,64,22,23,28,72,5,24, |
18,22,72,111,5,1,90,5,1,5,46,48,0,15,80,36,22,0,63,237,63,57,57,93,93,43, |
43,237,50,1,47,93,237,26,16,204,93,113,17,57,47,57,57,51,26,16,237,50,47, |
49,48,93,93,93,93,93,93,93,93,93,93,93,93,1,52,46,2,39,14,3,21,20,30,2,51, |
50,62,2,1,34,46,2,39,1,30,3,21,20,14,2,35,34,46,2,53,52,62,2,55,1,53,33,21, |
3,96,49,69,76,26,73,134,102,60,35,73,111,77,81,112,69,31,254,255,13,42,45, |
41,13,1,60,54,102,79,49,64,123,180,115,114,180,125,66,73,127,169,96,254,193, |
2,221,1,215,85,145,115,86,27,26,81,114,146,91,76,131,96,55,54,95,131,3,191, |
2,3,2,1,254,188,55,116,134,159,97,110,182,131,72,68,127,183,115,112,176,135, |
97,33,1,83,119,132,0,1,0,70,255,236,3,106,4,78,0,57,0,179,64,49,140,37,1, |
133,3,1,53,36,69,36,2,55,34,1,42,8,1,37,5,1,14,24,9,12,72,10,29,26,29,42, |
29,3,42,70,21,48,27,48,27,48,16,35,35,6,64,37,48,72,6,184,255,192,179,14, |
17,72,6,184,255,192,64,66,8,11,72,6,59,53,71,31,16,63,16,79,16,95,16,4,16, |
64,37,43,72,16,128,59,1,31,59,95,59,2,21,48,80,15,47,31,47,79,47,95,47,175, |
47,223,47,239,47,7,191,47,207,47,2,47,47,0,39,80,36,32,16,0,80,5,11,22,0, |
63,51,237,63,51,237,18,57,47,93,113,237,57,1,93,113,47,43,93,237,16,198,43, |
43,43,50,47,17,57,57,47,47,18,57,237,49,48,93,43,0,93,1,93,0,93,93,93,93, |
37,50,62,2,55,23,14,3,35,34,46,2,53,52,62,2,55,53,46,3,53,52,62,2,51,50,22, |
23,7,46,1,35,34,6,21,20,30,2,51,21,34,14,2,21,20,30,2,1,200,54,96,79,63,21, |
105,32,84,106,130,78,96,141,92,45,42,72,96,54,51,85,61,34,50,95,136,87,118, |
191,67,128,47,125,75,91,96,55,97,131,75,72,139,109,66,29,52,74,114,31,48, |
56,26,100,39,71,53,32,46,84,116,69,58,95,69,42,5,2,6,40,64,86,51,62,106,77, |
44,86,99,88,71,68,85,74,57,70,37,12,135,11,40,80,69,45,69,46,24,0,0,0,1,0, |
86,254,159,3,96,5,204,0,56,0,209,64,117,169,38,1,156,29,172,29,2,149,55,165, |
55,2,173,39,1,124,39,140,39,156,39,3,117,8,1,115,2,1,100,36,132,36,148,36, |
164,36,4,139,24,155,24,171,24,3,57,24,1,44,31,156,31,172,31,3,44,30,60,30, |
76,30,3,100,54,132,54,164,54,3,38,54,86,54,2,240,47,1,47,47,21,0,71,33,40, |
50,50,10,31,21,79,21,2,191,21,1,21,64,29,33,72,0,21,16,21,32,21,64,21,4,7, |
21,50,47,80,5,26,0,184,255,240,64,31,19,22,72,135,0,151,0,2,218,33,1,169, |
33,185,33,201,33,3,136,33,152,33,2,26,33,0,3,15,48,0,15,0,47,63,18,23,57, |
93,93,93,93,43,17,51,237,50,1,47,94,93,43,93,113,205,50,47,51,47,237,18,57, |
47,113,49,48,93,93,93,93,0,93,93,1,93,0,93,93,1,93,93,93,0,93,1,93,1,20,30, |
2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,55,53,14,3,35, |
33,53,33,21,14,5,1,21,43,74,100,57,54,111,90,58,18,26,29,10,126,9,19,16,11, |
36,66,94,57,42,89,82,73,54,31,49,85,113,127,135,64,12,34,36,34,11,254,167, |
2,130,62,131,123,108,81,47,1,123,64,79,49,31,15,15,34,57,88,68,34,68,62,51, |
17,56,12,33,38,39,19,34,45,33,25,13,10,23,36,50,74,100,67,83,176,176,175, |
166,155,68,4,1,1,1,1,131,127,70,157,166,172,171,166,0,0,0,0,1,0,106,254,88, |
3,238,4,78,0,35,0,100,185,0,32,255,232,64,46,9,12,72,35,70,64,80,0,1,159, |
0,255,0,2,0,37,128,23,12,70,192,13,1,0,13,16,13,48,13,224,13,240,13,5,8,13, |
240,37,1,255,37,1,112,37,1,37,184,255,192,64,14,19,23,72,35,27,23,6,80,29, |
16,17,15,12,21,0,63,63,63,237,50,63,1,43,93,93,113,47,94,93,113,237,50,26, |
16,220,93,113,26,237,49,48,43,1,17,52,46,2,35,34,14,2,21,17,35,17,52,38,39, |
51,30,3,21,51,62,3,51,50,30,2,21,17,3,57,23,52,85,63,64,103,73,40,180,22, |
14,170,9,14,10,5,3,26,62,82,106,70,90,130,84,39,254,88,4,86,79,106,65,27, |
45,85,125,81,253,141,3,83,68,121,42,21,48,49,47,20,47,76,53,29,44,92,145, |
100,251,135,0,0,0,0,3,0,106,255,236,4,9,5,203,0,15,0,26,0,37,0,194,64,108, |
153,19,169,19,2,150,24,166,24,2,138,2,1,133,5,1,138,14,1,133,10,1,124,36, |
140,36,2,115,29,131,29,2,85,29,101,29,2,124,18,140,18,2,74,18,90,18,106,18, |
3,115,25,131,25,2,69,25,85,25,101,25,3,6,13,22,13,2,6,10,1,9,5,1,9,2,1,7, |
33,0,71,64,15,21,31,21,127,21,143,21,239,21,255,21,6,21,64,45,48,72,21,39, |
128,32,22,71,32,8,1,8,184,255,192,183,29,35,72,8,48,39,1,39,184,255,192,64, |
19,30,35,72,223,39,1,22,80,32,32,16,27,80,11,0,16,80,3,22,0,63,237,63,237, |
18,57,47,237,1,93,43,113,47,43,93,237,50,26,16,220,43,113,26,237,51,49,48, |
0,94,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,1,16,2,35,34,46, |
1,2,53,16,18,51,50,30,1,18,1,50,62,2,55,33,30,3,19,34,14,2,7,33,46,3,4,9, |
240,228,108,171,118,62,233,232,121,175,112,54,254,42,62,100,73,42,3,253,221, |
3,44,71,94,66,62,99,72,42,3,2,35,3,40,69,97,2,221,254,131,254,140,92,186, |
1,27,192,1,117,1,121,93,188,254,231,252,216,52,128,216,164,164,215,129,52, |
4,217,51,126,212,161,161,212,126,51,0,0,0,1,0,137,0,0,1,141,4,58,0,13,1,13, |
64,210,13,8,70,207,5,223,5,2,0,5,32,5,208,5,3,9,5,5,14,15,95,15,111,15,2, |
32,15,1,224,15,240,15,2,111,15,127,15,143,15,3,0,15,16,15,32,15,3,205,207, |
15,223,15,239,15,3,96,15,1,127,15,207,15,2,64,15,80,15,2,175,15,223,15,239, |
15,3,96,15,112,15,2,15,15,31,15,2,154,255,15,1,208,15,224,15,2,63,15,1,159, |
15,175,15,2,112,15,1,223,15,1,144,15,1,63,15,79,15,2,0,15,1,106,159,15,223, |
15,239,15,3,96,15,112,15,2,15,15,1,239,15,255,15,2,128,15,208,15,2,63,15, |
1,96,15,1,15,15,31,15,2,55,207,15,255,15,2,144,15,160,15,176,15,3,31,15,47, |
15,63,15,3,176,15,192,15,208,15,3,15,15,31,15,111,15,3,144,15,160,15,224, |
15,3,31,15,63,15,2,0,15,1,7,6,15,0,21,0,63,63,1,94,93,93,93,113,113,114,114, |
114,94,93,93,113,113,113,114,114,114,94,93,93,93,93,113,113,114,114,114,94, |
93,93,93,113,113,114,114,94,93,93,93,113,113,17,18,57,47,94,93,113,237,50, |
49,48,51,46,3,53,17,51,17,20,30,2,23,199,15,24,15,8,180,11,21,30,18,16,53, |
64,70,33,3,78,252,169,32,64,60,52,19,0,0,0,1,0,138,0,0,4,3,4,58,0,11,0,158, |
64,114,148,9,164,9,2,102,9,118,9,134,9,3,172,0,1,139,0,155,0,2,105,0,121, |
0,2,86,10,150,10,166,10,3,151,10,167,10,2,84,10,1,70,7,134,7,2,1,10,247,8, |
1,8,10,9,16,9,9,0,11,16,0,11,160,11,2,0,11,16,11,32,11,64,11,160,11,224,11, |
6,7,11,7,3,70,0,4,16,4,48,4,240,4,4,8,4,128,13,192,13,224,13,3,63,13,1,2, |
1,7,10,4,8,5,15,4,0,21,0,63,50,63,51,23,57,1,93,93,47,94,93,237,50,47,94, |
93,113,56,51,57,47,56,57,51,113,17,51,49,48,0,93,93,93,1,93,93,93,93,93,93, |
33,1,7,17,35,17,51,17,1,51,9,1,3,48,254,146,132,180,180,1,219,211,254,73, |
1,206,1,238,109,254,127,4,58,253,243,2,13,254,47,253,151,0,0,0,0,1,0,14,0, |
0,3,238,5,204,0,33,1,60,64,101,149,15,1,157,23,1,138,2,1,137,1,1,137,25,153, |
25,2,140,21,156,21,2,115,0,131,0,147,0,3,140,20,156,20,2,106,20,122,20,2, |
146,32,1,132,32,1,101,32,117,32,2,3,102,26,118,26,150,26,3,141,26,157,26, |
2,2,126,26,1,108,26,1,3,84,18,1,148,31,1,101,31,117,31,133,31,3,86,31,1,146, |
29,1,2,128,29,1,84,29,1,144,28,1,28,184,255,224,64,59,13,16,72,146,27,1,84, |
27,100,27,116,27,3,93,0,109,0,2,149,17,1,73,17,1,150,18,1,138,18,1,101,18, |
117,18,2,38,18,86,18,2,42,3,58,3,74,3,122,3,138,3,5,26,0,20,10,10,19,32,33, |
184,255,240,64,69,33,20,19,16,31,19,63,19,2,31,19,63,19,95,19,127,19,159, |
19,191,19,223,19,255,19,8,223,19,255,19,2,192,19,1,95,19,159,19,2,0,19,16, |
19,64,19,3,8,19,0,35,48,35,96,35,160,35,176,35,5,26,0,13,33,19,21,6,80,13, |
0,0,63,237,63,51,18,57,57,1,93,47,94,93,93,93,93,113,114,56,51,47,56,51,18, |
57,47,18,57,57,49,48,93,93,93,93,93,93,93,0,93,1,93,93,43,93,93,93,95,93, |
93,93,93,0,93,95,93,93,95,93,1,93,95,93,93,93,93,93,93,93,93,93,93,93,0,93, |
1,39,46,3,35,34,6,7,39,62,1,51,50,30,2,23,1,35,3,46,3,39,14,3,7,1,35,1,207, |
36,27,42,45,57,40,11,32,6,35,25,72,32,55,87,73,67,36,1,171,190,207,8,18,18, |
16,5,7,22,25,24,8,254,255,187,3,197,99,73,105,67,31,7,3,130,9,15,36,81,131, |
95,251,139,2,65,22,56,59,56,21,21,60,62,55,18,253,193,0,0,0,1,0,138,254,119, |
4,6,4,58,0,41,0,108,64,55,13,40,14,17,72,90,8,106,8,2,35,70,5,15,34,95,34, |
2,159,34,175,34,255,34,3,0,34,16,34,32,34,3,7,34,43,23,19,70,0,20,16,20,48, |
20,240,20,4,8,20,96,43,128,43,2,43,184,255,192,64,15,20,23,72,41,21,34,21, |
15,19,5,28,80,14,11,22,0,63,51,237,50,47,63,51,63,1,43,93,47,94,93,237,50, |
16,220,94,93,93,113,50,237,49,48,0,93,1,43,33,46,3,53,35,14,3,35,34,38,39, |
35,30,1,21,17,35,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,30,2,23,3,94, |
1,3,3,3,4,26,56,69,86,57,82,120,32,4,3,1,182,182,25,59,98,74,67,100,67,33, |
181,1,2,2,1,6,46,59,59,20,51,79,53,27,64,58,32,63,27,254,139,5,195,253,124, |
69,116,85,47,52,91,126,75,2,105,252,175,34,76,67,49,7,0,0,1,0,0,0,0,3,178, |
4,58,0,18,2,35,64,79,130,17,146,17,162,17,3,153,6,169,6,2,131,8,147,8,163, |
8,3,3,87,8,103,8,119,8,3,6,5,9,32,14,17,72,9,9,7,15,16,16,0,70,64,91,12,107, |
12,123,12,3,91,12,219,12,235,12,3,180,12,196,12,2,11,12,27,12,59,12,91,12, |
107,12,5,7,12,20,128,8,7,184,255,240,64,255,7,11,20,27,20,2,11,20,27,20,75, |
20,91,20,139,20,155,20,203,20,219,20,8,255,20,1,196,20,212,20,2,160,20,1, |
132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4,20,20,20,2,199,224,20,1,196, |
20,212,20,2,160,20,1,4,20,20,20,68,20,84,20,132,20,148,20,6,68,20,84,20,132, |
20,148,20,196,20,212,20,6,27,20,1,4,20,1,219,20,1,196,20,1,155,20,1,132,20, |
1,91,20,1,68,20,1,27,20,1,4,20,1,151,11,20,27,20,75,20,91,20,139,20,155,20, |
203,20,219,20,8,155,20,203,20,219,20,3,132,20,1,96,20,1,68,20,84,20,2,32, |
20,1,4,20,20,20,2,224,20,1,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20, |
1,4,20,20,20,68,20,84,20,4,103,4,20,20,20,68,20,84,20,132,20,148,20,196,20, |
212,20,8,219,20,1,196,20,1,155,20,1,132,20,1,91,20,1,68,20,1,27,20,1,4,20, |
1,219,20,1,196,20,1,11,20,27,20,75,20,91,20,139,20,155,20,64,93,6,55,75,20, |
91,20,139,20,155,20,203,20,219,20,6,63,20,1,32,20,1,4,20,20,20,2,224,20,1, |
196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,68,20,84,20,2,32,20,1,4, |
20,20,20,2,196,20,212,20,2,160,20,1,132,20,148,20,2,96,20,1,2,80,20,1,47, |
20,1,0,20,16,20,2,7,15,7,15,9,6,21,0,63,51,63,51,1,94,93,93,93,95,93,93,93, |
93,113,113,113,113,113,113,113,113,114,114,114,114,94,93,93,93,113,113,113, |
113,113,113,113,113,114,94,93,93,93,93,93,93,113,113,113,113,113,113,114, |
94,93,93,93,93,93,93,93,93,113,113,113,114,114,114,114,94,93,93,93,93,93, |
93,93,93,113,114,47,56,51,26,16,220,94,93,93,113,114,26,237,50,17,51,17,57, |
61,47,43,51,51,49,48,93,95,93,93,93,1,20,14,2,7,35,1,51,1,54,18,53,52,38, |
39,51,30,1,3,178,63,106,140,77,170,254,122,189,1,55,142,124,29,20,177,24, |
28,3,78,99,218,221,214,94,4,58,252,96,185,1,86,156,81,119,45,45,113,0,0,0, |
1,0,86,254,159,3,106,5,204,0,74,1,0,64,125,122,71,138,71,2,101,33,117,33, |
133,33,3,105,39,1,85,50,1,83,44,1,57,2,1,110,66,126,66,142,66,3,26,66,42, |
66,2,12,29,28,29,44,29,3,13,40,9,12,72,12,73,28,73,44,73,108,73,124,73,140, |
73,6,5,11,95,37,1,79,37,1,112,37,128,37,2,37,17,95,26,1,111,26,1,26,37,26, |
52,63,31,70,11,32,11,1,23,11,23,11,0,31,63,63,63,79,63,111,63,127,63,143, |
63,175,63,191,63,207,63,9,159,63,175,63,255,63,3,63,184,255,192,64,17,7,11, |
72,63,42,71,31,0,1,0,5,37,80,31,11,24,42,184,255,240,64,32,19,22,72,151,42, |
1,0,16,19,22,72,152,0,1,52,0,42,3,57,32,36,1,36,36,24,57,26,17,23,80,24,0, |
0,63,237,50,50,47,18,57,47,93,18,23,57,93,43,93,43,18,57,57,237,57,1,47,93, |
237,47,43,93,113,18,57,57,47,47,93,16,237,16,205,50,50,47,93,114,51,47,93, |
113,114,18,57,49,48,93,43,93,0,93,93,1,93,0,93,93,93,1,93,0,93,19,52,62,2, |
55,53,46,3,53,52,62,2,55,53,14,3,43,1,53,33,21,14,3,21,20,30,2,23,21,14,3, |
21,20,30,2,23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,86,51,110,175, |
125,68,118,87,51,50,79,97,47,12,68,80,76,18,74,2,122,77,144,112,68,60,99, |
130,69,100,175,131,76,43,74,100,57,54,114,94,61,18,26,29,10,126,9,19,16,11, |
39,70,97,57,42,89,82,73,54,31,1,98,76,147,124,90,19,2,5,39,68,96,62,64,93, |
64,40,10,8,1,2,3,2,131,125,9,34,59,90,67,63,81,49,24,6,131,13,54,89,127,84, |
64,79,49,31,15,15,34,57,88,68,34,68,62,51,17,56,12,33,38,39,19,34,45,33,25, |
13,10,23,36,50,74,100,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
79,255,236,5,43,4,58,0,48,0,115,64,35,53,12,117,12,133,12,3,3,40,7,17,72, |
3,40,7,17,72,46,80,32,96,32,2,46,32,35,70,64,111,5,1,80,5,1,5,184,255,192, |
64,38,8,11,72,5,50,128,15,50,47,50,2,13,7,72,79,25,95,25,111,25,207,25,4, |
25,14,20,34,7,20,80,31,15,14,21,40,80,0,22,0,63,237,63,63,237,50,50,1,47, |
50,50,93,237,50,93,26,16,220,43,93,113,26,237,50,50,93,47,49,48,43,0,43,1, |
93,5,34,46,2,53,17,33,21,20,14,2,7,35,62,3,61,1,34,14,2,7,53,62,3,51,33,21, |
35,17,20,30,2,51,50,62,2,55,21,14,1,4,102,59,82,52,24,254,110,16,27,36,19, |
188,19,39,32,20,39,79,69,53,12,12,43,51,54,23,4,37,234,13,24,35,22,7,23,25, |
23,8,31,69,20,28,59,94,66,2,212,72,131,251,228,195,74,76,197,226,247,125, |
80,7,10,13,7,139,6,11,8,4,131,253,83,44,56,32,13,2,2,3,1,129,8,12,0,2,0,132, |
254,87,4,59,4,79,0,26,0,47,0,129,64,64,122,25,1,101,20,117,20,2,106,19,122, |
19,2,106,45,122,45,2,75,8,91,8,107,8,3,125,30,1,107,30,1,74,30,90,30,2,0, |
71,64,160,27,1,27,49,128,38,15,70,223,16,1,0,16,16,16,48,16,3,8,16,48,49, |
1,49,184,255,192,64,21,30,35,72,223,49,1,96,49,128,49,2,32,80,22,16,15,27, |
43,80,5,22,0,63,237,63,63,237,1,93,93,43,113,47,94,93,113,237,50,26,16,220, |
93,26,237,49,48,93,93,93,0,93,1,93,93,0,93,1,93,1,20,14,2,35,34,46,2,39,35, |
30,1,21,17,35,17,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,17,30,3,51,50, |
62,2,4,59,63,115,161,98,62,98,80,66,28,4,2,2,180,60,116,169,110,103,181,134, |
78,193,44,83,116,72,69,100,64,30,28,72,80,87,44,67,100,67,33,2,4,118,197, |
142,79,20,37,53,33,30,61,32,254,87,3,238,119,193,136,74,79,150,219,131,104, |
166,115,61,53,101,146,93,254,195,35,55,37,20,58,107,152,0,0,1,0,86,254,159, |
3,156,4,78,0,57,0,209,64,38,137,55,1,139,54,1,143,53,1,123,53,1,106,50,1, |
96,2,1,52,15,68,15,84,15,3,82,10,98,10,130,10,3,51,10,67,10,2,3,184,255,224, |
64,52,12,17,72,3,24,11,14,72,26,31,106,31,122,31,138,31,4,139,30,1,10,37, |
26,37,2,7,71,31,40,1,40,52,17,79,28,1,143,28,159,28,223,28,3,28,64,24,27, |
72,96,28,1,28,184,255,192,183,7,12,72,28,48,59,1,59,184,255,192,64,19,30, |
35,72,223,59,1,12,33,40,16,19,22,72,136,40,152,40,2,7,184,255,240,64,19,19, |
22,72,135,7,151,7,2,33,7,40,3,22,53,0,80,47,16,22,0,47,63,237,51,18,23,57, |
93,43,93,43,17,51,1,93,43,113,47,43,93,43,93,113,205,50,47,93,237,49,48,93, |
93,0,93,43,1,43,0,93,93,93,1,93,0,93,1,93,93,0,93,93,1,34,14,4,21,20,30,2, |
23,30,3,21,20,14,2,7,39,62,3,53,52,46,2,39,46,5,53,52,62,4,51,50,30,2,23, |
7,46,3,2,70,54,88,67,49,32,15,32,76,124,92,53,114,95,61,18,26,29,10,126,9, |
19,16,11,35,68,97,63,66,113,94,72,50,26,20,46,75,110,148,97,68,99,73,54,22, |
116,18,42,49,57,3,193,49,80,104,108,106,42,68,96,72,57,30,17,37,59,89,68, |
34,68,62,51,17,56,12,33,38,39,19,30,44,36,31,17,18,40,51,68,93,122,81,47, |
130,140,136,108,66,21,34,44,23,119,19,36,28,17,0,2,0,86,255,236,4,209,4,58, |
0,28,0,47,0,132,64,94,133,12,1,122,13,138,13,2,131,46,1,101,46,117,46,2,100, |
42,116,42,132,42,3,124,33,140,33,2,90,33,106,33,2,143,38,1,108,38,124,38, |
2,74,38,90,38,2,15,17,31,17,111,17,127,17,4,7,17,0,71,64,15,29,143,29,191, |
29,3,0,29,32,29,64,29,3,29,49,128,40,71,31,10,143,10,2,10,23,35,80,15,15, |
43,80,5,22,0,63,237,63,237,50,1,47,93,237,26,16,220,93,113,26,237,196,94, |
93,49,48,0,93,93,93,1,93,93,93,0,93,93,93,1,93,1,20,14,2,35,34,46,2,53,52, |
62,2,51,33,21,35,34,46,2,39,21,30,3,7,52,46,2,39,35,34,14,2,21,20,22,51,50, |
62,2,4,48,61,123,183,123,123,186,124,63,86,153,213,126,2,57,165,9,35,43,44, |
17,28,55,43,26,189,20,34,45,25,89,83,143,107,61,151,147,78,117,76,38,1,235, |
112,188,135,76,74,139,202,129,144,210,138,66,131,1,2,2,1,4,42,99,115,131, |
78,74,132,116,99,42,50,105,160,110,207,206,52,97,139,0,1,0,29,255,236,3,24, |
4,58,0,35,0,99,64,50,35,13,131,13,2,31,32,12,17,72,13,31,29,31,45,31,3,26, |
13,26,127,5,143,5,2,5,15,70,0,34,32,34,2,34,34,36,37,79,37,1,208,37,1,159, |
37,1,16,37,1,37,184,255,192,64,12,14,17,72,20,80,29,22,14,35,80,11,15,0,63, |
237,50,63,237,1,43,93,93,93,113,17,18,57,47,93,253,204,93,51,51,47,49,48, |
0,93,43,1,93,1,34,14,2,7,53,62,3,51,33,21,33,17,20,30,2,51,50,62,2,55,21, |
14,1,35,34,46,2,53,17,1,25,39,79,69,53,12,12,43,51,54,23,2,68,254,208,13, |
24,35,22,7,23,25,23,8,31,69,43,59,82,52,24,3,183,7,10,13,7,139,6,11,8,4,131, |
253,83,44,56,32,13,2,2,3,1,129,8,12,28,59,94,66,2,212,0,0,0,1,0,133,255,236, |
3,254,4,58,0,31,0,113,64,62,134,3,1,133,15,149,15,2,106,18,122,18,2,86,28, |
1,25,8,41,8,2,27,0,71,64,15,21,1,47,21,159,21,2,160,21,1,21,33,128,13,70, |
0,10,16,10,48,10,240,10,4,8,10,240,33,1,255,33,1,112,33,1,33,184,255,192, |
64,13,20,23,72,31,33,1,26,11,15,16,80,5,22,0,63,237,63,51,1,93,43,93,93,113, |
47,94,93,237,26,16,220,93,113,114,26,237,50,49,48,93,93,93,93,93,1,20,14, |
2,35,34,46,2,53,17,51,17,20,22,51,50,62,2,53,52,46,2,39,51,30,3,3,254,53, |
113,176,123,109,160,104,51,181,117,134,73,104,65,30,20,33,40,21,188,18,40, |
32,21,2,59,137,218,154,82,50,107,166,116,2,151,253,99,146,148,50,108,170, |
120,68,147,139,120,41,40,113,134,149,0,2,0,85,254,87,4,218,4,82,0,35,0,45, |
0,130,64,21,101,34,1,101,33,117,33,133,33,3,74,21,90,21,2,69,21,85,21,2,45, |
184,255,192,179,11,14,72,25,184,255,224,64,54,11,14,72,11,29,27,29,2,64,19, |
80,19,2,19,19,24,71,13,7,36,71,224,0,1,0,43,6,72,27,0,7,64,7,2,7,64,47,1, |
19,80,18,18,39,80,31,16,43,27,80,5,8,22,6,27,0,63,63,51,237,50,63,237,51, |
47,237,1,113,47,93,51,253,50,220,113,237,16,220,237,50,47,93,49,48,93,0,43, |
43,1,93,0,93,1,93,93,1,20,14,2,7,17,35,17,46,3,53,52,62,2,55,23,14,3,21,20, |
22,23,17,52,54,51,50,30,2,7,52,38,35,34,6,21,17,62,1,4,218,74,132,184,110, |
170,114,181,125,67,49,103,159,109,21,69,96,60,27,147,151,154,158,84,133,92, |
49,189,87,80,68,76,162,149,2,53,151,215,140,71,6,254,105,1,151,5,72,138,207, |
141,102,188,150,103,18,136,15,77,114,143,80,213,201,8,2,68,193,212,76,141, |
199,121,193,211,129,140,253,185,7,218,0,0,0,1,0,21,254,88,4,27,4,80,0,27, |
1,26,64,51,169,25,1,153,3,1,138,6,154,6,2,174,23,1,123,23,139,23,155,23,3, |
84,21,1,173,27,1,140,27,156,27,2,123,27,1,90,27,106,27,2,41,27,57,27,2,26, |
16,9,17,72,2,184,255,240,64,99,9,17,72,162,1,1,131,1,147,1,2,116,1,1,69,1, |
85,1,101,1,3,38,1,54,1,2,166,25,1,153,25,1,39,25,55,25,71,25,3,3,101,19,117, |
19,2,86,19,1,39,19,55,19,2,25,22,0,3,4,2,26,23,24,24,27,26,16,27,26,59,26, |
91,26,123,26,155,26,187,26,219,26,7,219,26,251,26,2,4,26,20,26,68,26,3,7, |
26,13,13,1,2,184,255,240,183,2,36,29,1,11,29,1,22,184,255,208,64,41,14,17, |
72,70,22,1,53,22,1,139,0,1,125,0,1,2,75,0,91,0,107,0,3,63,0,1,0,25,3,22,4, |
1,23,15,9,80,16,16,27,1,27,0,63,51,63,237,63,18,23,57,93,93,95,93,93,93,93, |
43,1,93,93,47,56,51,51,47,47,94,93,93,113,56,51,51,47,51,17,18,23,57,49,48, |
93,93,93,95,93,93,93,93,93,93,93,93,43,43,93,93,93,93,93,93,93,93,93,93,0, |
93,37,1,35,1,3,46,3,35,34,6,7,39,62,1,51,50,30,2,23,19,1,51,9,1,35,2,30,254, |
179,188,1,184,170,27,44,40,42,25,11,32,7,34,24,62,32,48,70,60,59,36,142,1, |
8,187,254,144,1,150,190,239,253,105,3,57,1,87,54,82,55,28,7,3,131,9,11,27, |
62,102,75,254,217,2,27,253,71,252,215,0,0,1,0,135,254,87,5,44,5,60,0,31,0, |
128,64,90,121,18,1,18,16,7,10,72,121,19,137,19,153,19,3,121,11,1,11,16,7, |
10,72,121,10,137,10,153,10,3,24,70,21,15,5,70,8,0,14,72,29,0,15,16,15,160, |
15,208,15,4,8,15,128,33,176,33,224,33,3,111,33,1,32,33,1,255,33,1,80,33,128, |
33,144,33,192,33,4,30,30,6,22,15,0,29,80,13,16,22,14,27,0,63,63,51,237,50, |
63,51,51,47,1,93,93,113,113,113,47,94,93,51,253,50,220,237,16,220,237,49, |
48,0,93,43,93,93,43,93,37,62,3,53,17,51,17,20,14,2,7,17,35,17,46,3,53,17, |
51,17,20,30,2,23,17,51,3,46,87,124,80,37,182,59,124,193,134,170,134,192,124, |
59,181,38,79,124,87,170,119,1,31,73,121,91,2,134,253,124,122,172,110,53,1, |
254,107,1,149,1,53,110,172,122,2,132,253,122,90,121,73,32,1,4,197,0,0,0,0, |
1,0,83,255,236,5,235,4,79,0,63,0,176,64,83,153,33,169,33,2,153,26,169,26, |
2,119,16,1,122,58,138,58,2,10,37,26,37,42,37,154,37,170,37,5,10,22,26,22, |
42,22,154,22,170,22,5,29,0,73,61,61,40,8,46,13,46,13,51,19,71,64,128,8,176, |
8,2,15,8,1,7,8,65,128,51,71,63,40,1,40,0,65,1,48,65,1,240,65,1,65,184,255, |
192,64,32,30,35,72,175,65,223,65,2,0,65,32,65,64,65,3,30,35,62,62,14,3,56, |
80,24,35,22,46,13,80,45,14,16,0,63,51,237,50,63,51,237,50,17,57,47,18,57, |
1,93,93,43,93,113,114,47,93,237,26,16,220,94,93,93,26,237,18,57,57,47,47, |
17,18,57,47,237,57,49,48,0,93,93,1,93,93,0,93,93,1,20,22,51,50,62,2,53,52, |
46,2,39,55,30,3,21,20,14,2,35,34,46,2,39,35,14,3,35,34,46,2,53,52,62,2,55, |
23,14,3,21,20,30,2,51,50,62,2,61,1,51,3,115,114,102,65,87,53,22,29,61,97, |
67,23,109,159,103,49,53,101,148,95,68,104,77,52,16,4,16,52,77,105,67,95,148, |
101,53,49,103,159,109,23,68,96,62,28,22,52,86,65,51,82,57,30,166,1,193,157, |
173,56,102,145,90,82,150,121,84,15,139,18,112,161,194,101,128,200,137,72, |
36,68,99,64,64,99,68,36,72,137,200,128,101,194,161,112,18,139,15,84,121,150, |
82,90,145,102,56,45,84,123,78,252,0,0,0,255,255,255,205,0,0,1,250,5,123,18, |
38,1,130,0,0,17,6,0,105,160,0,0,25,182,2,1,14,17,38,2,1,184,255,217,180,18, |
16,5,13,37,1,43,53,53,0,43,53,53,0,0,0,255,255,0,133,255,236,3,254,5,123, |
18,38,1,142,0,0,17,7,0,105,0,242,0,0,0,25,182,2,1,32,17,38,2,1,184,255,244, |
180,36,34,10,0,37,1,43,53,53,0,43,53,53,0,255,255,0,86,255,236,4,29,6,7,18, |
38,0,82,0,0,17,7,1,80,1,41,0,0,0,19,64,11,2,35,17,38,2,70,35,38,8,0,37,1, |
43,53,0,43,53,0,0,0,255,255,0,133,255,236,3,254,6,7,18,38,1,142,0,0,17,7, |
1,80,0,252,0,0,0,19,64,11,1,32,17,38,1,17,32,35,10,0,37,1,43,53,0,43,53,0, |
0,0,255,255,0,83,255,236,5,235,6,7,18,38,1,146,0,0,17,7,1,80,1,255,0,0,0, |
19,64,11,1,64,17,38,1,55,64,67,40,19,37,1,43,53,0,43,53,0,0,0,255,255,0,168, |
0,0,4,254,6,178,16,38,0,40,0,0,17,7,2,152,1,121,0,0,0,153,185,0,21,255,192, |
179,233,233,72,21,184,255,192,179,230,230,72,21,184,255,192,179,227,227,72, |
21,184,255,192,179,224,224,72,21,184,255,192,179,221,221,72,21,184,255,192, |
179,218,218,72,21,184,255,192,179,215,215,72,21,184,255,192,179,212,212,72, |
21,184,255,192,179,209,209,72,21,184,255,192,179,206,206,72,21,184,255,192, |
179,203,203,72,21,184,255,192,179,200,200,72,21,184,255,192,179,197,197,72, |
21,184,255,192,64,10,11,11,72,2,1,12,5,38,2,1,184,255,234,180,16,14,0,10, |
37,1,43,53,53,0,43,53,53,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0, |
1,0,46,255,236,6,79,5,129,0,45,0,133,64,13,155,31,171,31,2,101,37,117,37, |
133,37,3,2,184,255,224,64,71,13,17,72,18,16,12,15,72,42,13,58,13,2,36,7,52, |
7,2,20,20,10,42,1,39,90,45,175,40,1,0,40,1,40,10,90,0,29,16,29,176,29,224, |
29,4,7,29,0,42,95,43,38,33,95,1,6,6,40,43,3,40,18,26,95,15,63,21,1,21,21, |
15,19,0,63,51,47,93,16,237,63,63,18,57,47,51,237,50,16,237,50,1,47,94,93, |
237,47,93,93,204,253,50,204,18,57,47,49,48,0,93,93,43,43,93,93,1,17,62,3, |
51,50,22,29,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,61,1,52,38,35,34,14, |
2,7,17,35,17,33,53,33,21,2,208,33,109,127,130,53,226,217,41,86,133,92,53, |
88,75,64,29,111,18,41,48,56,33,84,80,129,144,51,123,120,105,33,190,254,28, |
4,134,4,229,254,160,7,20,19,13,187,188,214,93,145,100,53,17,32,46,28,123, |
16,33,26,17,101,111,219,119,122,10,15,17,8,253,12,4,229,156,156,0,255,255, |
0,168,0,1,4,47,6,240,16,38,1,93,0,0,17,7,2,149,1,113,0,0,0,19,64,11,1,6,5, |
38,1,33,6,9,4,0,37,1,43,53,0,43,53,0,0,0,0,1,0,104,255,236,5,121,5,150,0, |
42,0,218,64,156,156,17,172,17,2,156,15,172,15,2,156,39,172,39,2,138,39,1, |
156,41,172,41,2,138,41,1,137,31,1,117,11,1,117,10,165,10,2,166,26,1,73,26, |
137,26,2,70,32,134,32,2,37,10,53,10,2,42,3,58,3,2,3,68,44,1,7,7,19,5,8,91, |
116,29,132,29,2,203,29,219,29,2,68,29,1,43,29,1,29,37,235,19,1,100,19,116, |
19,164,19,212,19,4,64,19,1,2,0,19,48,19,2,7,19,8,95,127,5,175,5,2,5,5,13, |
34,79,38,1,38,38,0,95,34,4,13,95,24,16,18,32,18,2,48,18,64,18,112,18,128, |
18,192,18,208,18,6,18,18,24,19,0,63,51,47,93,113,16,237,63,237,51,47,93,17, |
18,57,47,113,237,1,47,94,93,95,93,93,113,51,47,93,93,93,113,237,50,17,57, |
47,93,49,48,0,95,93,93,93,93,93,1,93,0,93,1,93,93,93,93,93,93,93,1,34,14, |
2,7,33,21,33,30,3,51,50,62,2,55,23,14,3,35,34,36,38,2,53,52,18,54,36,51,50, |
4,23,7,46,3,3,24,111,173,124,73,10,2,142,253,114,9,77,128,176,109,90,141, |
108,79,27,156,40,108,148,191,123,171,254,255,173,86,91,175,1,0,164,225,1, |
46,71,181,20,68,102,137,4,250,68,126,178,110,154,112,185,132,72,50,82,105, |
55,77,79,136,100,57,109,195,1,12,159,165,1,10,187,101,176,173,60,50,91,70, |
42,0,0,255,255,0,93,255,236,4,248,5,150,18,6,0,54,0,0,255,255,0,189,0,0,1, |
124,5,129,18,6,0,44,0,0,255,255,0,7,0,0,2,52,6,178,18,38,0,44,0,0,17,6,2, |
152,218,0,0,23,64,13,2,1,4,5,38,2,1,1,8,6,0,2,37,1,43,53,53,0,43,53,53,0, |
255,255,0,32,255,236,3,104,5,129,18,6,0,45,0,0,0,2,0,18,255,240,8,11,5,129, |
0,38,0,47,0,215,64,98,57,29,1,166,8,1,167,11,1,162,10,1,133,10,149,10,2,58, |
10,1,154,15,170,15,2,141,13,157,13,173,13,3,121,13,1,116,47,132,47,148,47, |
3,123,40,139,40,155,40,3,101,11,1,141,14,157,14,173,14,3,14,32,10,14,72,43, |
30,123,30,139,30,155,30,4,42,31,122,31,2,0,90,48,39,1,0,39,16,39,2,7,39,20, |
13,36,13,52,13,3,13,184,255,248,64,14,22,25,72,73,8,1,20,8,36,8,52,8,3,8, |
184,255,248,64,39,22,25,72,9,31,73,31,2,8,13,31,3,175,20,191,20,2,20,33,44, |
90,6,43,95,33,33,6,8,95,31,3,23,95,16,19,44,95,6,18,0,63,237,63,237,63,237, |
18,57,47,237,1,47,237,50,47,93,23,51,113,43,113,113,43,113,47,94,93,113,237, |
49,48,93,93,0,43,93,1,93,0,93,93,93,93,93,1,93,93,93,93,93,93,1,20,14,2,35, |
33,17,33,3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,33,50,30,2, |
7,52,38,35,33,17,33,50,54,8,11,61,121,182,121,253,183,254,96,49,22,43,49, |
60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,3,2,1,126,125,186, |
124,62,192,164,164,254,153,1,111,164,156,1,157,87,150,112,64,4,225,254,144, |
172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161,1,254,253,172, |
58,105,147,92,121,129,254,2,136,0,0,0,2,0,168,0,0,7,171,5,129,0,22,0,31,0, |
110,64,25,116,31,132,31,148,31,3,123,24,139,24,155,24,3,38,20,54,20,2,0,90, |
176,23,1,23,184,255,192,64,43,7,11,72,23,13,9,90,0,10,16,10,64,10,3,7,10, |
17,28,90,14,0,6,1,8,6,27,95,17,17,8,95,13,13,10,15,11,3,10,18,28,95,6,18, |
0,63,237,63,63,51,18,57,47,237,51,47,237,1,47,94,93,51,237,50,47,94,93,237, |
50,47,43,93,237,49,48,0,93,93,93,1,20,14,2,35,33,17,33,17,35,17,51,17,33, |
17,51,17,33,50,30,2,7,52,38,35,33,17,33,50,54,7,171,61,121,182,121,253,223, |
253,194,191,191,2,62,191,1,86,125,186,124,62,192,164,164,254,193,1,71,164, |
156,1,157,87,150,112,64,2,141,253,115,5,129,253,172,2,84,253,172,58,105,147, |
92,121,129,254,2,136,0,0,0,0,1,0,46,0,0,6,47,5,129,0,27,0,131,64,13,155,2, |
171,2,2,101,8,117,8,133,8,3,19,184,255,224,64,76,13,17,72,37,24,53,24,69, |
24,3,18,13,10,90,16,175,11,1,0,11,48,11,2,11,27,90,0,0,48,0,192,0,208,0,4, |
7,0,176,29,192,29,208,29,3,176,29,240,29,2,255,29,1,16,29,112,29,160,29,176, |
29,4,9,4,95,18,23,23,0,17,13,95,14,3,11,0,18,0,63,50,63,237,50,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,237,47,93,93,204,253,204,51,49,48,0,93,43, |
93,93,33,17,52,38,35,34,14,2,7,17,35,17,33,53,33,21,33,17,62,3,51,50,22,21, |
17,5,113,128,133,53,116,110,98,35,190,254,28,4,179,253,239,36,98,112,118, |
56,229,214,2,63,122,109,10,15,18,7,253,12,4,229,156,156,254,160,8,20,18,13, |
187,178,253,173,0,0,0,255,255,0,168,0,0,4,157,6,240,18,38,1,176,0,0,17,7, |
2,149,1,172,0,0,0,19,64,11,1,23,5,38,1,37,23,26,0,13,37,1,43,53,0,43,53,0, |
0,0,255,255,0,55,255,236,5,31,7,58,18,38,1,185,0,0,17,7,2,145,1,94,1,74,0, |
19,64,11,1,26,5,38,1,7,31,39,21,25,37,1,43,53,0,43,53,0,0,0,0,1,0,168,254, |
104,5,24,5,129,0,11,0,94,64,64,11,92,0,0,2,9,90,127,6,1,0,6,48,6,64,6,3,143, |
6,159,6,207,6,3,0,6,64,6,2,6,5,90,0,2,16,2,64,2,3,7,2,16,13,1,32,13,128,13, |
224,13,3,15,13,1,7,7,3,3,10,5,95,2,18,0,0,47,63,237,51,63,51,47,1,93,93,113, |
47,94,93,237,47,93,93,113,113,237,18,57,47,237,49,48,1,17,33,17,51,17,33, |
17,51,17,33,17,2,134,254,34,191,2,247,186,254,34,254,104,1,152,5,129,251, |
31,4,225,250,127,254,104,255,255,0,4,0,0,5,82,5,129,18,6,0,36,0,0,0,2,0,168, |
0,0,4,214,5,129,0,16,0,25,0,142,64,70,116,25,132,25,148,25,3,123,18,139,18, |
155,18,3,153,14,1,38,14,1,9,9,0,90,223,17,1,80,17,128,17,2,31,17,1,255,17, |
1,192,17,1,159,17,1,0,17,16,17,32,17,64,17,4,17,11,22,90,0,6,16,6,64,6,3, |
7,6,48,27,1,27,184,255,192,64,27,30,35,72,223,27,1,21,95,64,11,1,160,11,208, |
11,2,11,11,6,10,95,7,3,22,95,6,18,0,63,237,63,237,18,57,47,93,113,237,1,93, |
43,113,47,94,93,237,50,47,93,93,93,93,113,113,113,237,50,47,49,48,0,93,93, |
93,93,1,20,14,2,35,33,17,33,21,33,17,33,50,30,2,7,52,38,35,33,17,33,50,54, |
4,214,61,121,182,121,253,183,3,158,253,33,1,126,125,186,124,62,192,164,164, |
254,153,1,111,164,156,1,157,87,150,112,64,5,129,156,254,72,58,105,147,92, |
121,129,254,2,136,0,0,0,255,255,0,168,0,0,4,234,5,129,18,6,0,37,0,0,255,255, |
0,168,0,1,4,47,5,130,16,6,1,93,0,0,0,2,0,15,254,104,5,69,5,129,0,16,0,25, |
0,194,64,95,150,10,1,150,20,1,150,15,1,144,19,1,134,19,1,115,22,131,22,2, |
3,147,24,1,2,128,24,1,114,24,1,102,24,1,85,11,101,11,2,90,14,106,14,2,97, |
23,145,23,2,83,23,1,53,23,69,23,2,2,92,3,3,0,90,191,17,207,17,2,160,17,1, |
31,17,95,17,127,17,143,17,159,17,5,0,17,1,8,17,20,25,36,25,52,25,3,25,184, |
255,248,64,11,22,25,72,20,19,36,19,52,19,3,19,184,255,248,64,28,22,25,72, |
9,15,19,25,4,6,92,7,15,27,47,27,2,19,95,15,3,8,0,25,95,5,18,7,2,0,47,51,63, |
237,50,50,63,237,1,93,47,237,23,51,43,113,43,113,47,94,93,93,93,93,237,50, |
47,237,49,48,93,93,93,93,93,93,93,93,95,93,95,93,93,93,93,93,93,37,51,17, |
35,17,33,17,35,17,51,62,3,55,19,33,3,17,33,3,14,3,7,4,150,175,180,252,50, |
180,144,41,66,55,44,18,67,2,212,186,254,137,49,18,40,46,54,32,160,253,200, |
1,152,254,104,2,56,51,138,181,228,141,1,254,251,31,4,65,254,144,134,221,178, |
137,51,255,255,0,168,0,0,4,254,5,129,18,6,0,40,0,0,0,1,0,28,0,0,7,71,5,129, |
0,41,1,72,64,41,133,8,1,117,31,133,31,2,117,14,1,99,24,1,108,25,124,25,140, |
25,3,108,26,124,26,140,26,3,101,13,117,13,133,13,3,33,40,14,17,72,6,184,255, |
216,64,35,14,17,72,58,24,74,24,2,41,24,1,53,15,69,15,117,15,3,3,39,15,1,27, |
48,14,17,72,40,27,56,27,72,27,3,12,184,255,208,64,11,14,17,72,39,12,55,12, |
71,12,3,31,184,255,224,179,14,17,72,31,184,255,240,64,73,10,13,72,8,32,14, |
17,72,8,16,10,13,72,34,31,27,31,28,28,32,21,40,90,41,5,8,12,8,41,11,11,7, |
18,52,41,1,116,41,196,41,228,41,3,41,33,32,16,32,64,29,32,72,228,32,1,155, |
32,171,32,2,68,32,116,32,2,11,32,43,32,2,32,6,7,184,255,240,64,51,171,7,187, |
7,2,7,68,43,116,43,132,43,228,43,4,47,43,1,2,15,43,1,31,8,34,5,8,5,39,0,96, |
21,127,18,175,18,2,47,18,1,18,18,6,27,19,11,3,41,33,6,18,0,63,51,51,63,51, |
51,18,57,47,93,113,51,237,50,57,57,17,51,17,51,1,93,95,93,93,47,93,56,51, |
47,93,93,93,93,43,56,51,47,93,113,51,18,57,47,18,57,51,17,51,16,237,50,17, |
57,47,57,51,17,51,49,48,43,43,43,43,93,43,93,43,93,95,93,93,93,43,43,93,93, |
93,0,93,1,93,0,93,93,1,34,46,2,39,1,35,1,38,39,1,51,19,30,3,51,17,51,17,50, |
62,2,55,19,51,1,6,7,1,35,1,14,3,35,17,35,3,82,17,45,48,46,17,254,85,222,1, |
253,48,131,254,229,200,205,66,90,76,81,57,191,57,81,76,90,66,205,200,254, |
229,131,48,1,253,222,254,85,17,46,48,45,17,191,2,133,6,11,13,8,253,85,3,7, |
35,189,1,154,254,207,99,123,68,24,2,107,253,149,24,68,123,99,1,49,254,102, |
189,35,252,249,2,171,8,13,11,6,253,123,0,1,0,67,255,236,4,112,5,149,0,60, |
1,7,64,51,138,33,1,134,7,1,124,28,140,28,2,3,112,21,1,112,20,1,2,96,20,1, |
101,8,117,8,133,8,3,132,34,1,101,34,117,34,2,124,13,1,90,13,106,13,2,59,23, |
75,23,2,33,184,255,232,64,122,11,16,72,5,43,1,3,51,20,25,90,46,64,25,37,72, |
46,46,56,90,16,139,36,155,36,171,36,3,127,20,1,2,95,20,111,20,2,36,20,36, |
20,5,112,16,1,79,16,111,16,2,255,16,1,160,16,1,127,16,1,0,16,16,16,48,16, |
3,16,175,5,191,5,2,5,64,32,45,72,5,64,13,16,72,5,51,20,95,127,21,175,21,2, |
21,21,11,41,35,64,13,16,72,35,35,30,95,41,4,11,95,0,32,6,48,6,112,6,128,6, |
4,208,6,1,6,184,255,192,182,13,17,72,6,6,0,19,0,63,50,47,43,93,113,16,237, |
63,237,51,47,43,17,18,57,47,113,237,57,1,47,43,43,93,47,93,93,93,93,113,113, |
18,57,57,47,47,93,95,93,113,16,237,50,47,43,237,18,57,49,48,0,95,93,1,43, |
93,93,93,93,93,93,93,95,93,93,95,93,93,0,93,5,34,46,2,39,55,30,3,51,50,62, |
2,53,52,38,43,1,53,51,50,54,53,52,46,2,35,34,14,2,7,39,62,3,51,50,30,2,21, |
20,14,2,7,30,3,21,20,14,2,2,109,118,176,130,94,36,165,24,66,91,121,80,77, |
122,85,45,192,202,71,71,181,173,39,72,104,65,77,114,83,56,19,178,33,96,132, |
168,105,108,172,120,64,40,73,104,63,67,117,87,51,69,132,192,20,50,91,128, |
79,77,55,98,75,44,37,69,100,64,133,118,148,119,123,55,86,59,30,40,68,90,49, |
61,82,127,87,45,53,96,136,83,68,107,80,55,15,10,50,82,115,73,95,156,113,62, |
0,1,0,168,0,0,5,24,5,129,0,19,0,123,64,17,172,18,1,138,18,154,18,2,147,8, |
163,8,2,133,8,1,19,184,255,232,64,65,9,17,72,9,24,9,17,72,11,92,41,9,1,9, |
64,12,80,12,144,12,3,224,12,1,143,12,159,12,175,12,3,0,12,48,12,2,12,166, |
19,1,19,2,92,0,1,16,1,2,7,1,15,21,47,21,2,9,18,9,1,3,12,12,8,0,18,0,63,50, |
50,47,63,51,51,47,1,93,47,94,93,237,50,113,47,93,93,93,113,51,113,237,49, |
48,43,43,0,93,93,93,93,51,17,51,17,20,6,7,6,7,1,51,17,35,17,52,54,55,54,55, |
1,168,172,2,2,2,2,2,238,222,170,1,2,1,2,253,26,5,129,252,100,51,98,39,46, |
40,4,174,250,127,3,168,39,89,38,44,44,251,90,0,255,255,0,168,0,0,5,24,7,58, |
18,38,1,174,0,0,17,7,2,145,1,146,1,74,0,19,64,11,1,20,5,38,1,6,25,33,0,10, |
37,1,43,53,0,43,53,0,0,0,0,1,0,168,0,0,4,157,5,129,0,22,0,151,64,104,84,12, |
116,12,132,12,3,84,15,1,139,8,1,122,8,1,89,8,105,8,2,140,14,1,14,24,13,16, |
72,58,5,1,100,12,116,12,132,12,3,80,12,1,53,12,69,12,2,15,12,8,12,9,16,32, |
9,96,9,128,9,3,9,9,13,2,21,90,32,22,1,22,14,13,16,15,13,127,13,207,13,239, |
13,4,47,13,1,13,47,24,1,15,12,20,96,47,2,1,2,2,22,13,18,8,0,3,0,63,50,63, |
51,57,47,93,237,50,57,1,93,47,93,113,56,51,47,93,237,50,17,57,47,93,56,57, |
51,17,51,49,48,93,93,93,93,43,93,93,93,93,93,0,93,19,51,17,50,62,2,55,19, |
51,1,6,7,1,35,1,14,3,35,17,35,168,191,57,81,76,90,66,205,200,254,229,131, |
48,1,253,222,254,85,17,46,48,45,17,191,5,129,253,149,24,68,123,99,1,49,254, |
102,189,35,252,249,2,171,8,13,11,6,253,123,0,0,0,0,1,0,18,255,240,4,153,5, |
129,0,27,0,176,64,35,150,1,1,147,3,1,117,3,133,3,2,85,4,149,4,2,145,7,1,115, |
7,131,7,2,85,7,101,7,2,129,6,145,6,2,6,184,255,216,64,46,12,15,72,37,6,53, |
6,2,26,2,1,26,23,106,23,122,23,138,23,4,26,90,32,27,64,27,2,224,27,1,95,27, |
1,0,27,1,8,27,20,6,36,6,52,6,3,6,184,255,248,64,14,22,25,72,73,1,1,20,1,36, |
1,52,1,3,1,184,255,248,64,26,22,25,72,9,24,73,24,2,1,6,24,3,12,128,29,1,27, |
18,1,95,24,3,16,95,9,19,0,63,237,63,237,63,1,93,47,23,51,113,43,113,113,43, |
113,47,94,93,93,93,113,237,49,48,93,93,93,43,93,93,93,93,93,93,93,93,1,33, |
3,6,2,14,3,35,34,38,39,53,30,1,51,50,62,4,55,19,33,17,35,3,223,254,94,49, |
22,43,49,60,78,102,66,25,47,14,11,35,10,30,52,45,42,39,40,21,67,2,255,186, |
4,225,254,144,172,254,245,199,137,85,37,5,5,152,4,3,23,62,107,169,238,161, |
1,254,250,127,255,255,0,168,0,0,6,2,5,129,18,6,0,48,0,0,255,255,0,168,0,0, |
5,32,5,129,18,6,0,43,0,0,255,255,0,97,255,236,5,215,5,150,18,6,0,50,0,0,255, |
255,0,166,0,0,5,30,5,129,17,6,1,106,254,0,0,88,185,0,9,255,192,179,27,27, |
72,9,184,255,192,179,21,21,72,9,184,255,192,179,20,20,72,9,184,255,192,179, |
19,19,72,9,184,255,192,179,17,17,72,9,184,255,192,179,16,16,72,9,184,255, |
192,179,15,15,72,9,184,255,192,179,14,14,72,9,184,255,192,183,11,11,72,9, |
64,9,9,72,43,43,43,43,43,43,43,43,43,43,0,0,255,255,0,168,0,0,4,234,5,129, |
18,6,0,51,0,0,255,255,0,104,255,236,5,121,5,150,18,6,0,38,0,0,255,255,0,46, |
0,0,4,180,5,129,18,6,0,55,0,0,0,1,0,55,255,236,5,31,5,129,0,25,0,181,64,111, |
217,24,1,139,24,1,90,24,106,24,122,24,3,41,24,1,85,23,101,23,133,23,3,70, |
23,1,214,22,1,131,22,1,100,22,116,22,2,86,22,1,121,18,1,128,2,1,5,2,21,2, |
2,132,1,1,131,0,1,84,0,100,0,2,70,0,1,198,23,214,23,2,113,23,129,23,2,86, |
23,102,23,2,143,3,1,58,3,74,3,2,20,23,24,32,25,144,25,2,25,16,25,22,10,63, |
21,79,21,111,21,127,21,4,21,184,255,240,64,14,21,23,20,21,5,24,24,21,3,11, |
14,95,5,19,0,63,237,50,63,51,47,17,18,57,57,1,47,56,93,50,50,47,56,93,51, |
57,57,49,48,0,93,93,93,93,93,1,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,93,1,14,3,35,34,46,2,39,55,30,1,51,50,62,2,63,1,1,51,9,1,51,2,222,47, |
81,90,109,75,32,66,64,58,23,81,35,83,48,37,58,53,57,38,49,253,195,218,1,193, |
1,128,205,1,62,88,128,82,40,10,18,26,16,144,22,37,21,52,90,68,89,3,186,252, |
240,3,16,0,0,3,0,118,255,245,5,159,5,139,0,29,0,40,0,51,0,143,64,92,70,28, |
86,28,102,28,3,73,17,89,17,105,17,3,59,51,1,59,31,1,53,43,1,38,43,1,53,39, |
1,38,39,1,41,90,15,8,30,90,0,35,24,7,90,46,21,224,8,1,79,8,1,32,8,1,8,32, |
53,1,112,53,208,53,224,53,3,79,53,1,16,53,1,36,47,96,10,6,10,34,49,96,20, |
24,20,10,20,10,20,7,22,3,7,18,0,63,63,18,57,57,47,47,17,51,16,237,50,17,51, |
16,237,50,1,93,93,93,113,47,93,93,93,51,51,253,50,50,220,237,16,220,237,49, |
48,0,93,93,93,93,93,93,1,93,93,1,20,14,2,43,1,21,35,53,35,34,46,2,53,52,62, |
2,59,1,53,51,21,51,50,30,2,7,52,38,43,1,17,51,50,62,2,37,20,30,2,59,1,17, |
35,34,6,5,159,64,131,197,133,40,191,40,133,197,131,64,67,133,201,135,29,191, |
28,135,202,133,67,192,185,183,5,13,92,136,89,43,252,87,43,89,136,92,13,9, |
182,182,2,224,105,188,143,84,227,227,84,143,188,105,113,185,131,72,182,182, |
72,131,185,117,187,180,253,22,53,98,140,88,88,140,98,53,2,234,180,0,255,255, |
0,46,0,0,5,43,5,129,18,6,0,59,0,0,0,1,0,168,254,104,5,197,5,129,0,11,0,74, |
64,47,1,92,2,2,11,90,0,8,1,175,8,1,0,8,64,8,112,8,3,8,7,90,0,4,16,4,64,4, |
3,7,4,32,13,224,13,2,9,9,5,3,11,11,7,95,4,18,2,0,47,63,237,50,47,63,51,47, |
1,93,47,94,93,237,47,93,93,113,237,50,47,237,49,48,37,17,35,17,33,17,51,17, |
33,17,51,17,5,197,180,251,151,191,2,245,186,160,253,200,1,152,5,129,251,31, |
4,225,251,31,0,0,0,1,0,160,0,0,4,174,5,129,0,25,0,134,64,70,164,14,1,20,40, |
13,17,72,1,32,13,17,72,42,7,58,7,74,7,3,23,90,25,144,22,1,143,22,1,48,22, |
64,22,2,207,22,1,112,22,1,111,22,1,16,22,64,22,2,22,12,90,207,11,1,0,11,16, |
11,64,11,3,7,11,32,27,1,32,27,1,27,184,255,192,64,19,14,17,72,0,5,95,21,47, |
16,1,16,16,11,24,18,22,22,11,3,0,63,51,47,63,18,57,47,93,51,237,50,1,43,93, |
113,47,94,93,93,237,47,93,93,93,93,113,113,113,51,237,49,48,0,93,43,43,93, |
1,14,3,35,34,46,2,53,17,51,17,20,22,51,50,62,2,55,17,51,17,35,3,240,36,94, |
107,115,56,114,166,108,52,190,130,134,53,110,104,92,35,190,190,1,252,8,20, |
18,12,47,92,137,89,2,82,253,194,123,108,10,15,17,7,2,244,250,127,0,0,1,0, |
168,0,0,6,173,5,129,0,11,0,114,64,76,7,90,4,4,0,11,90,36,8,1,11,8,1,228,8, |
1,219,8,1,148,8,1,123,8,1,4,8,20,8,100,8,3,8,3,90,4,0,68,0,228,0,3,7,0,235, |
13,1,196,13,1,187,13,1,132,13,1,112,13,1,2,64,13,1,15,13,1,9,5,1,3,7,7,3, |
95,0,18,0,63,237,50,47,63,51,51,1,93,93,95,93,93,93,93,93,47,94,93,237,47, |
93,93,93,93,93,113,113,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,168,191,1,233,186,1,233,186,5,129,251,31,4,225,251,31,4,225,250, |
127,0,1,0,168,254,104,7,47,5,129,0,15,0,125,64,84,132,17,148,17,180,17,3, |
123,17,1,84,17,1,1,92,2,2,15,90,12,11,90,8,8,4,11,12,59,12,75,12,91,12,123, |
12,139,12,155,12,203,12,8,219,12,251,12,2,207,12,1,2,159,12,1,128,12,1,111, |
12,1,0,12,1,8,12,7,90,32,4,1,4,13,9,5,3,15,15,11,11,7,95,4,18,2,0,47,63,237, |
50,47,50,47,63,51,51,1,47,93,237,47,94,93,93,93,93,95,93,93,113,18,57,47, |
237,16,237,50,47,237,93,93,93,49,48,37,17,35,17,33,17,51,17,33,17,51,17,33, |
17,51,17,7,47,180,250,45,191,1,211,186,1,210,186,160,253,200,1,152,5,129, |
251,31,4,225,251,31,4,225,251,31,0,2,0,46,0,0,5,235,5,129,0,16,0,25,0,100, |
64,68,116,25,132,25,148,25,3,123,18,139,18,155,18,3,153,3,1,38,3,1,64,27, |
1,6,90,47,17,127,17,2,176,17,1,159,17,1,0,17,16,17,32,17,64,17,4,7,17,14, |
0,22,90,32,12,1,12,21,95,0,0,12,14,95,15,3,22,95,12,18,0,63,237,63,237,18, |
57,47,237,1,47,93,253,50,204,47,94,93,93,93,113,237,93,49,48,0,93,93,93,93, |
1,33,50,30,2,21,20,14,2,35,33,17,33,53,33,1,52,38,35,33,17,33,50,54,2,184, |
1,66,125,186,124,62,61,121,182,121,253,243,254,53,2,138,2,115,164,164,254, |
213,1,51,164,156,3,45,58,105,147,90,87,150,112,64,4,229,156,252,26,121,129, |
254,2,136,0,3,0,168,0,0,6,109,5,129,0,14,0,23,0,27,0,140,64,76,116,23,132, |
23,148,23,3,123,16,139,16,155,16,3,153,12,1,38,12,1,27,90,159,24,207,24,223, |
24,3,16,24,64,24,80,24,112,24,4,24,0,90,0,15,1,224,15,1,159,15,1,0,15,16, |
15,32,15,64,15,4,15,9,20,90,0,6,16,6,64,6,3,7,6,128,29,1,29,184,255,192,64, |
19,11,14,72,19,95,9,9,6,7,25,25,7,3,24,24,20,95,6,18,0,63,237,51,47,63,51, |
47,17,18,57,47,237,1,43,93,47,94,93,237,50,47,93,93,93,113,237,47,93,93,237, |
49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50,30,2,7,52,38,35,33,17, |
33,50,54,1,17,51,17,4,214,61,121,182,121,253,183,191,1,126,125,186,124,62, |
192,164,164,254,153,1,111,164,156,1,152,191,1,157,87,150,112,64,5,129,253, |
172,58,105,147,92,121,129,254,2,136,254,225,5,129,250,127,0,2,0,168,0,0,4, |
214,5,129,0,14,0,23,0,107,64,76,116,23,132,23,148,23,3,123,16,139,16,155, |
16,3,153,12,1,38,12,1,0,90,31,15,1,160,15,176,15,2,159,15,1,0,15,16,15,32, |
15,64,15,96,15,5,15,9,20,90,0,6,16,6,2,7,6,175,25,1,64,25,128,25,144,25,3, |
19,95,9,9,6,7,3,20,95,6,18,0,63,237,63,18,57,47,237,1,93,93,47,94,93,237, |
50,47,93,93,93,113,237,49,48,0,93,93,93,93,1,20,14,2,35,33,17,51,17,33,50, |
30,2,7,52,38,35,33,17,33,50,54,4,214,61,121,182,121,253,183,191,1,126,125, |
186,124,62,192,164,164,254,153,1,111,165,155,1,157,87,150,112,64,5,129,253, |
172,58,105,147,96,121,131,254,4,131,0,1,0,105,255,236,5,121,5,150,0,42,0, |
206,64,81,115,26,131,26,2,115,28,131,28,2,101,28,1,115,4,131,4,2,101,4,1, |
115,2,131,2,2,101,2,1,101,12,1,101,11,1,135,17,1,106,17,1,90,33,138,33,2, |
10,32,26,32,90,32,3,10,40,26,40,2,36,36,24,38,14,91,32,35,112,35,2,144,35, |
176,35,2,127,35,1,64,35,1,35,184,255,192,64,63,7,10,72,35,6,80,24,96,24,2, |
175,24,191,24,2,32,24,1,24,35,95,127,38,175,38,2,38,38,9,30,95,19,16,25,32, |
25,2,48,25,64,25,112,25,128,25,192,25,208,25,6,25,25,19,19,79,5,1,5,5,0,95, |
9,4,0,63,237,51,47,93,63,51,47,93,113,16,237,17,57,47,113,237,1,47,93,93, |
113,51,47,43,93,93,93,113,237,51,18,57,47,49,48,0,93,1,93,93,0,93,93,93,1, |
93,93,93,93,93,93,93,93,1,34,14,2,7,39,54,36,51,50,4,22,18,21,20,2,6,4,35, |
34,46,2,39,55,30,3,51,50,62,2,55,33,53,33,46,3,2,201,88,137,102,69,19,181, |
71,1,46,225,164,1,0,175,91,86,172,254,255,171,118,189,149,113,41,156,27,81, |
109,140,87,109,176,128,77,9,253,114,2,142,10,73,124,173,4,250,42,70,91,50, |
60,173,176,101,187,254,246,165,159,254,244,195,109,54,99,136,83,78,55,105, |
83,50,72,132,185,112,154,110,178,126,68,0,0,2,0,168,255,236,7,179,5,150,0, |
26,0,46,0,168,64,63,165,7,1,133,24,1,138,20,1,121,29,1,118,35,1,118,39,1, |
74,19,138,19,2,58,30,122,30,2,53,34,117,34,2,42,44,58,44,122,44,3,37,40,53, |
40,117,40,3,160,48,1,0,91,144,27,160,27,2,160,27,176,27,2,27,184,255,192, |
64,54,7,11,72,27,16,12,90,0,13,16,13,64,13,3,7,13,37,91,17,48,10,112,10,2, |
10,32,95,22,4,11,95,80,16,1,176,16,224,16,2,15,16,1,8,16,16,13,14,3,13,18, |
42,95,5,19,0,63,237,63,63,18,57,47,94,93,93,113,237,63,237,1,47,93,51,237, |
47,94,93,237,50,47,43,93,113,237,93,49,48,93,93,93,93,93,93,93,93,93,93,93, |
1,20,2,14,1,35,34,46,2,39,33,17,35,17,51,17,33,62,3,51,50,30,1,18,7,52,46, |
2,35,34,14,2,21,20,30,2,51,50,62,2,7,179,90,170,245,155,156,239,165,90,7, |
254,217,191,191,1,42,13,99,166,232,146,159,245,167,87,195,60,117,173,113, |
116,175,117,58,60,117,173,114,121,176,114,54,2,199,165,254,242,192,104,99, |
179,247,148,253,115,5,129,253,172,142,229,160,86,102,188,254,246,163,127, |
208,148,80,80,148,208,127,127,211,153,85,86,153,212,0,2,0,96,0,0,5,32,5,129, |
0,17,0,30,0,239,64,22,156,29,172,29,2,138,29,1,147,20,1,117,20,133,20,2,67, |
17,83,17,2,17,184,255,216,64,25,33,36,72,130,17,146,17,162,17,3,100,17,116, |
17,2,86,17,1,67,16,83,16,2,3,16,184,255,216,64,117,33,36,72,172,16,1,155, |
16,1,125,16,141,16,2,2,94,16,110,16,2,73,16,1,44,16,60,16,2,3,175,1,1,2,1, |
104,14,16,72,94,1,110,1,2,73,1,1,44,1,60,1,2,16,1,1,6,24,24,14,18,90,6,6, |
0,13,90,224,14,1,143,14,159,14,175,14,207,14,4,0,14,64,14,2,7,14,17,32,0, |
1,15,0,31,0,2,0,1,15,95,47,24,95,24,111,24,143,24,4,24,24,0,26,95,11,3,14, |
14,0,18,0,63,50,47,63,237,18,57,47,93,237,50,1,47,93,93,51,47,94,93,93,93, |
237,18,57,47,237,17,51,17,18,57,17,51,49,48,93,93,93,43,95,93,95,93,93,93, |
95,93,93,93,43,95,113,93,93,93,43,113,0,93,93,93,93,51,1,46,3,53,52,62,2, |
51,33,17,35,17,33,1,19,20,30,2,51,33,17,33,34,14,2,96,1,144,91,130,84,39, |
66,126,185,120,2,151,191,254,73,254,146,28,37,77,119,83,1,205,254,59,76,120, |
84,44,2,95,16,78,108,130,67,94,150,104,55,250,127,2,73,253,183,3,236,57,98, |
72,41,2,8,31,63,94,255,255,0,87,255,236,4,115,4,78,18,6,0,68,0,0,0,2,0,120, |
255,236,4,63,5,222,0,19,0,56,0,158,64,69,137,44,1,122,45,138,45,2,102,21, |
118,21,134,21,3,84,18,1,84,12,1,91,2,1,90,35,122,35,138,35,3,90,47,106,47, |
138,47,3,123,46,139,46,2,73,46,105,46,2,42,42,23,71,64,208,0,1,144,0,1,0, |
58,128,48,58,1,128,58,1,58,184,255,192,64,12,30,35,72,52,10,71,0,31,32,31, |
2,31,184,255,192,64,23,26,35,72,31,52,5,80,20,20,42,48,41,1,64,41,240,41, |
2,41,15,80,26,22,0,63,237,47,93,113,51,57,47,237,50,1,47,43,93,237,57,43, |
93,113,26,16,220,93,113,26,237,50,47,49,48,0,93,93,93,93,93,93,93,93,93,93, |
1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,3,50,18,17,16,2,35,34,46,2,53, |
52,18,62,1,55,62,3,55,21,14,1,7,14,5,7,62,3,3,130,39,73,104,65,69,114,81, |
44,44,77,105,62,69,112,78,42,243,222,210,250,238,113,178,123,65,58,128,206, |
147,57,100,91,86,43,86,161,91,78,124,94,67,44,23,2,19,67,97,126,1,246,114, |
151,91,37,39,92,150,112,114,150,89,36,36,88,151,2,127,254,251,254,250,254, |
247,254,253,70,156,250,180,192,1,22,193,115,28,11,17,14,12,6,161,11,23,17, |
14,33,50,73,108,149,101,55,97,72,41,0,0,0,0,3,0,142,0,0,3,231,4,58,0,23,0, |
36,0,47,0,149,64,12,42,19,1,37,2,1,26,18,42,18,2,3,184,255,232,64,33,9,12, |
72,139,10,155,10,2,10,38,44,71,5,5,24,16,71,64,47,30,159,30,2,160,30,1,30, |
49,128,64,49,1,49,184,255,192,64,50,30,35,72,31,49,63,49,239,49,3,38,24,70, |
192,22,1,0,22,16,22,48,22,224,22,240,22,5,8,22,10,36,81,143,38,159,38,175, |
38,3,38,38,24,37,80,23,15,24,80,22,21,0,63,237,63,237,18,57,47,113,237,57, |
1,47,94,93,113,237,50,93,43,113,26,16,220,93,113,26,237,17,57,47,237,18,57, |
93,49,48,0,43,93,93,93,1,50,30,2,21,20,14,2,7,21,30,3,21,20,14,2,35,33,17, |
19,51,50,62,2,53,52,46,2,43,1,25,1,51,50,62,2,53,52,38,35,2,52,76,144,112, |
68,35,60,82,46,54,95,69,40,61,109,151,91,254,67,180,236,69,95,59,27,28,63, |
100,71,224,216,68,91,55,23,102,121,4,58,24,62,104,81,53,81,58,37,9,7,7,35, |
61,90,61,78,117,78,39,4,58,252,75,20,44,67,47,50,70,44,20,1,194,254,192,19, |
39,61,43,82,76,0,1,0,142,0,0,2,175,4,58,0,5,0,54,64,35,0,64,18,39,72,48,0, |
1,0,0,7,3,70,192,4,1,0,4,16,4,48,4,224,4,240,4,5,8,4,2,80,5,15,3,21,0,63, |
63,237,1,47,94,93,113,237,17,51,47,93,43,49,48,1,21,33,17,35,17,2,175,254, |
147,180,4,58,131,252,73,4,58,0,0,0,2,0,20,254,104,4,136,4,58,0,7,0,23,0,159, |
64,65,134,3,1,32,3,1,102,1,1,34,5,114,5,130,5,3,34,20,1,34,17,1,137,18,1, |
34,18,1,25,19,121,19,2,102,2,118,2,2,34,2,1,25,2,1,34,16,1,4,16,1,98,4,1, |
4,4,36,4,68,4,84,4,4,8,73,9,184,255,192,64,42,18,25,72,9,9,22,70,64,111,7, |
127,7,143,7,3,32,7,64,7,2,7,25,128,20,15,12,73,6,1,13,1,80,20,15,22,6,14, |
80,11,21,13,8,0,47,51,63,237,50,50,63,237,1,47,51,51,237,51,51,26,16,220, |
93,93,26,237,50,47,43,237,49,48,93,93,93,93,93,93,93,93,93,93,93,93,93,93, |
93,93,1,33,6,2,14,1,7,33,1,35,17,33,17,35,17,51,62,2,18,55,33,17,51,3,66, |
254,206,24,49,48,48,22,1,241,1,70,163,252,210,163,119,30,58,58,57,28,2,132, |
146,3,183,177,254,249,194,136,50,253,229,1,152,254,104,2,27,50,143,220,1, |
59,223,252,73,255,255,0,87,255,236,4,24,4,78,18,6,0,72,0,0,0,1,0,7,0,0,5, |
83,4,58,0,39,1,97,64,88,165,23,1,165,14,1,171,34,1,164,3,1,172,24,1,154,24, |
1,163,13,1,149,13,1,90,6,106,6,122,6,3,85,31,101,31,117,31,3,74,33,154,33, |
170,33,3,69,4,149,4,165,4,3,42,28,58,28,2,37,9,53,9,2,34,31,170,26,1,26,31, |
27,16,27,27,32,20,38,70,39,165,11,1,11,10,3,6,6,39,10,184,255,240,64,49,10, |
10,17,39,39,5,33,32,16,15,32,1,255,32,1,160,32,1,159,32,1,80,32,1,63,32,1, |
32,32,1,207,32,1,128,32,144,32,2,95,32,1,32,32,48,32,2,32,4,5,184,255,240, |
64,64,31,5,47,5,2,127,5,159,5,2,63,5,159,5,223,5,255,5,4,5,15,41,1,255,41, |
1,160,41,1,111,41,159,41,2,80,41,1,63,41,1,32,41,1,207,41,1,128,41,144,41, |
2,79,41,95,41,2,48,41,1,31,6,34,3,6,184,255,240,64,37,11,17,72,6,3,37,0,80, |
20,15,17,31,17,79,17,95,17,4,15,17,31,17,79,17,3,7,17,17,4,26,18,10,15,39, |
33,4,21,0,63,51,51,63,51,51,18,57,47,94,93,113,51,237,50,57,57,43,17,51,17, |
51,1,93,93,93,93,113,113,113,113,113,113,114,47,93,113,114,56,51,47,93,93, |
93,93,113,113,113,113,113,113,114,56,51,18,57,47,51,57,47,56,18,57,17,51, |
17,51,93,16,237,50,17,57,47,56,57,51,93,17,51,49,48,93,93,93,93,93,93,93, |
93,93,93,93,93,0,93,93,1,34,38,39,1,35,1,46,1,39,3,51,23,30,3,51,17,51,17, |
50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,2,83,26,65,19,254,234,200,1, |
97,17,66,45,216,188,148,48,65,52,48,30,180,30,48,52,65,48,148,188,216,45, |
66,17,1,97,200,254,234,19,65,26,180,1,221,12,8,254,15,2,80,14,85,66,1,69, |
239,77,92,50,16,1,218,254,38,16,50,92,77,239,254,187,66,85,14,253,176,1,241, |
8,12,254,35,0,0,0,1,0,49,255,236,3,94,4,78,0,55,0,175,64,28,5,53,21,53,2, |
5,38,21,38,37,38,3,131,45,1,45,15,21,70,40,40,51,71,10,29,73,64,30,184,255, |
192,64,86,30,36,72,143,15,1,30,15,30,15,3,144,10,1,144,10,160,10,2,31,10, |
1,10,57,128,16,57,1,4,73,3,64,12,20,72,3,45,15,80,143,16,159,16,175,16,3, |
16,16,35,7,0,29,1,144,29,224,29,240,29,3,29,29,24,80,35,16,7,80,0,96,4,112, |
4,128,4,3,239,4,1,32,4,1,4,4,0,22,0,63,50,47,93,93,113,16,237,63,237,51,47, |
93,113,17,18,57,47,113,237,57,1,47,43,237,93,26,16,204,93,93,113,17,57,57, |
47,47,93,43,26,237,16,237,50,47,237,18,57,113,49,48,93,93,5,34,38,39,55,30, |
1,51,50,54,53,52,46,2,35,53,50,62,2,53,52,38,35,34,14,2,7,39,62,3,51,50,30, |
2,21,20,14,2,7,21,30,3,21,20,14,2,1,202,167,197,45,159,25,126,103,96,113, |
55,92,120,64,64,114,86,49,99,93,35,70,60,42,7,162,12,62,97,128,78,85,138, |
98,53,44,71,88,45,56,100,75,43,49,101,152,20,125,129,44,78,86,94,91,59,78, |
45,18,137,15,38,67,52,74,86,14,33,55,42,20,68,98,63,29,42,76,104,63,57,88, |
61,36,4,2,6,41,67,93,58,69,119,87,49,0,0,0,0,1,0,142,0,0,3,234,4,58,0,19, |
0,186,64,25,9,17,1,233,17,249,17,2,4,15,1,228,15,244,15,2,11,5,1,235,5,251, |
5,2,16,184,255,192,64,107,29,60,72,153,16,1,6,64,29,60,72,119,6,151,6,2,6, |
7,1,230,7,246,7,2,156,7,1,105,7,137,7,2,31,17,47,17,79,17,3,9,72,64,7,64, |
10,1,80,10,1,159,10,255,10,2,10,21,128,0,21,192,21,208,21,224,21,4,192,21, |
1,128,21,144,21,176,21,192,21,208,21,5,17,1,72,192,18,1,0,18,16,18,48,18, |
224,18,240,18,5,8,18,16,7,19,15,10,6,18,21,0,63,51,51,63,51,51,1,47,94,93, |
113,237,50,93,113,114,26,16,220,93,113,114,50,26,237,49,48,0,93,1,93,93,113, |
114,0,93,43,93,43,113,114,113,114,1,113,114,1,17,20,14,2,7,1,51,17,35,17, |
52,62,2,55,1,35,17,1,60,3,3,3,1,1,243,197,172,2,3,3,2,254,6,192,4,58,253, |
176,23,77,82,74,21,3,101,251,198,2,148,19,57,60,57,20,252,151,4,58,0,255, |
255,0,142,0,0,3,234,5,240,18,38,1,206,0,0,17,7,2,145,0,234,0,0,0,19,64,11, |
1,20,17,38,1,2,25,33,18,8,37,1,43,53,0,43,53,0,0,0,0,1,0,138,0,0,3,138,4, |
58,0,21,0,202,64,17,117,16,133,16,149,16,3,57,15,121,15,137,15,153,15,4,13, |
184,255,208,64,123,12,17,72,133,11,149,11,2,120,5,1,133,13,149,13,2,47,23, |
79,23,2,73,16,1,56,16,1,16,13,121,8,137,8,153,8,3,8,71,13,1,54,13,1,13,9, |
16,9,9,14,2,20,70,0,21,16,21,48,21,240,21,4,21,57,15,73,15,2,15,32,14,1,32, |
14,144,14,2,144,14,1,79,14,1,48,14,1,47,14,1,16,14,1,14,16,14,13,19,80,15, |
2,63,2,79,2,3,15,2,63,2,255,2,3,8,2,2,14,21,21,14,21,8,8,0,15,0,63,50,47, |
63,51,47,17,57,47,94,93,113,237,50,1,47,56,93,93,93,93,93,113,114,51,113, |
47,93,237,50,17,57,47,56,57,113,113,51,93,17,51,113,113,93,49,48,0,93,1,93, |
93,43,93,93,19,51,17,50,62,2,63,1,51,3,14,1,7,1,35,1,14,1,35,17,35,138,180, |
30,48,52,65,48,148,188,216,45,66,17,1,97,200,254,234,19,65,26,180,4,58,254, |
38,16,50,92,77,239,254,187,66,85,14,253,176,1,241,8,12,254,35,0,0,0,0,1,0, |
11,255,236,4,29,4,58,0,25,0,186,64,42,26,21,1,130,7,1,116,7,1,85,7,101,7, |
2,130,6,1,117,6,1,22,6,38,6,102,6,3,114,5,130,5,2,100,5,1,86,5,1,134,4,1, |
4,184,255,240,64,61,12,15,72,26,3,1,116,2,1,7,24,12,17,72,25,70,64,127,0, |
143,0,239,0,3,0,27,128,176,27,192,27,208,27,3,176,27,240,27,2,64,27,96,27, |
112,27,160,27,176,27,192,27,6,131,23,1,23,54,6,1,6,2,184,255,240,64,26,24, |
28,72,215,2,231,2,2,128,2,1,2,143,12,1,12,2,80,23,15,16,80,9,22,0,21,0,63, |
63,237,63,237,1,47,93,51,93,93,43,51,113,51,93,93,113,114,26,16,220,93,26, |
237,49,48,0,43,1,93,93,43,93,93,93,93,93,93,93,93,93,93,93,33,17,33,6,2,14, |
3,35,34,38,39,53,30,1,51,50,62,3,18,55,33,17,3,104,254,137,25,42,44,51,71, |
94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2,206,3,183,184,254,225,216, |
149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,251,198,0,0,1,0,142,0,0,4,243, |
4,58,0,28,1,3,64,21,137,18,153,18,2,134,12,150,12,2,107,17,123,17,2,100,13, |
116,13,2,1,184,255,224,64,122,29,60,72,138,1,154,1,2,57,1,1,0,32,29,60,72, |
133,0,149,0,2,54,0,86,0,2,143,19,159,19,2,93,19,109,19,125,19,3,59,19,75, |
19,2,25,19,41,19,2,128,11,144,11,2,82,11,98,11,114,11,3,52,11,68,11,2,22, |
11,38,11,2,1,0,15,15,8,21,72,64,19,80,22,1,159,22,255,22,2,22,30,128,144, |
30,192,30,208,30,3,79,30,1,11,8,72,192,9,1,0,9,16,9,48,9,224,9,240,9,5,8, |
9,28,2,2,184,255,192,64,22,29,60,72,2,32,19,22,72,84,2,1,19,2,10,15,22,15, |
64,29,60,72,15,184,255,224,64,18,19,22,72,47,15,63,15,79,15,127,15,143,15, |
5,15,1,9,21,0,63,51,51,93,43,43,51,63,51,51,93,43,43,17,51,1,47,94,93,113, |
237,50,93,93,26,16,220,93,113,50,26,237,18,57,61,47,51,51,49,48,93,93,93, |
93,93,93,93,93,93,93,43,93,93,43,93,93,93,93,33,35,1,30,3,21,17,35,17,33, |
19,30,1,23,62,1,55,19,33,17,35,17,52,62,2,55,3,19,153,254,188,1,3,1,1,174, |
1,24,220,23,37,8,10,35,23,220,1,13,173,1,3,2,2,3,183,26,60,61,57,23,253,44, |
4,58,253,107,63,151,72,72,151,63,2,149,251,198,2,212,22,60,64,60,23,0,1,0, |
142,0,0,3,221,4,58,0,11,0,139,64,48,5,70,64,2,15,6,79,6,2,57,47,6,111,6,143, |
6,255,6,4,191,6,1,143,6,159,6,255,6,3,6,13,128,0,13,192,13,208,13,224,13, |
4,192,13,1,128,13,1,13,184,255,192,64,49,19,23,72,1,9,70,192,10,1,0,10,16, |
10,48,10,224,10,240,10,5,10,8,80,176,1,192,1,2,159,1,175,1,191,1,3,15,1,63, |
1,2,8,1,1,10,5,21,3,0,15,0,63,50,63,51,57,47,94,93,113,114,237,1,47,93,113, |
237,50,43,93,113,114,26,16,220,93,113,114,94,93,50,26,237,49,48,1,17,33,17, |
51,17,35,17,33,17,35,17,1,66,1,231,180,180,254,25,180,4,58,254,54,1,202,251, |
198,1,237,254,19,4,58,255,255,0,86,255,236,4,29,4,78,18,6,0,82,0,0,0,1,0, |
142,0,0,3,199,4,58,0,7,0,109,64,80,1,70,64,15,2,79,2,2,57,47,2,111,2,143, |
2,255,2,4,191,2,1,143,2,159,2,255,2,3,2,9,128,0,9,192,9,208,9,224,9,4,192, |
9,1,128,9,176,9,192,9,208,9,4,47,9,1,5,70,192,6,1,0,6,16,6,48,6,224,6,240, |
6,5,8,6,4,80,7,15,6,1,21,0,63,51,63,237,1,47,94,93,113,237,93,93,113,114, |
26,16,220,93,113,114,94,93,26,237,49,48,1,17,35,17,33,17,35,17,3,199,180, |
254,47,180,4,58,251,198,3,183,252,73,4,58,0,255,255,0,132,254,87,4,29,4,77, |
18,6,0,83,0,0,255,255,0,87,255,236,3,202,4,78,18,6,0,70,0,0,0,1,0,35,0,0, |
3,135,4,58,0,7,0,72,64,43,7,14,4,2,5,14,223,2,1,2,4,70,0,5,16,5,2,8,5,5,8, |
9,160,9,1,95,9,1,48,9,64,9,2,47,9,1,4,21,3,7,80,0,15,0,63,237,50,63,1,93, |
93,93,93,17,18,57,47,94,93,237,204,93,43,1,24,16,77,228,49,48,19,33,21,33, |
17,35,17,33,35,3,100,254,168,180,254,168,4,58,131,252,73,3,183,0,0,0,255, |
255,0,5,254,87,3,252,4,58,18,6,0,92,0,0,0,3,0,86,254,87,6,62,5,204,0,53,0, |
74,0,95,0,229,64,13,141,93,157,93,173,93,3,78,24,14,17,72,72,184,255,232, |
179,14,17,72,57,184,255,232,182,14,17,72,109,82,1,51,184,255,224,64,75,7, |
10,72,15,26,31,26,47,26,3,24,32,7,10,72,0,3,16,3,32,3,3,7,4,54,71,64,25,14, |
13,0,14,14,75,71,36,0,68,0,148,0,164,0,4,0,85,39,13,72,65,38,4,14,1,4,14, |
36,14,68,14,100,14,132,14,180,14,228,14,7,7,14,52,97,1,97,184,255,192,64, |
52,30,35,72,219,97,1,84,97,100,97,132,97,148,97,4,64,97,1,2,32,97,48,97,2, |
31,97,1,0,97,1,38,0,31,45,80,3,70,80,49,28,16,8,18,91,3,59,80,5,22,22,13, |
27,0,63,63,51,237,23,50,63,51,237,23,50,63,1,93,93,93,95,93,93,93,43,113, |
47,94,93,113,51,51,237,50,50,220,93,237,43,1,24,16,77,244,26,237,49,48,95, |
94,93,43,93,0,43,93,1,43,43,43,93,1,20,14,2,35,34,38,39,35,30,1,21,17,35, |
17,52,54,55,35,14,1,35,34,2,17,16,18,51,50,22,23,51,52,46,2,53,17,51,17,20, |
14,2,21,51,62,1,51,50,30,2,5,20,30,2,51,50,62,2,55,53,52,46,2,35,34,14,2, |
5,52,46,2,35,34,14,2,29,1,30,3,51,50,62,2,6,62,38,86,140,101,105,158,42,6, |
2,3,170,2,3,5,46,149,111,186,179,185,180,112,149,45,5,2,2,1,170,1,1,1,5,46, |
144,114,101,140,86,38,250,213,26,56,85,60,60,94,65,34,2,34,64,94,61,57,86, |
57,29,4,110,23,52,88,64,53,92,70,40,1,35,65,92,60,65,88,53,23,2,34,123,208, |
150,85,88,100,35,77,58,254,89,1,167,54,82,40,104,90,1,19,1,25,1,28,1,26,90, |
98,10,41,46,42,12,1,163,254,92,11,43,47,43,12,104,89,80,145,205,129,112,160, |
103,48,43,98,157,113,24,115,159,98,43,46,102,163,116,100,156,108,56,34,96, |
169,135,23,108,150,93,41,58,110,159,0,0,0,255,255,0,23,0,0,3,234,4,58,18, |
6,0,91,0,0,0,1,0,142,254,104,4,102,4,58,0,11,0,91,178,7,73,8,184,255,192, |
64,54,18,21,72,8,8,5,70,64,223,2,1,207,2,223,2,2,2,64,25,28,72,0,2,48,2,2, |
2,13,128,111,13,1,1,70,0,10,16,10,48,10,240,10,4,8,10,5,1,80,10,21,8,3,0, |
15,0,63,50,47,63,237,50,1,47,94,93,237,93,26,16,220,93,43,93,113,26,237,50, |
47,43,237,49,48,1,17,33,17,51,17,51,17,35,17,33,17,1,66,1,221,180,147,163, |
252,203,4,58,252,73,3,183,252,73,253,229,1,152,4,58,0,1,0,122,0,0,3,156,4, |
58,0,25,0,92,64,37,108,15,124,15,140,15,3,22,32,7,10,72,21,24,7,12,72,12, |
70,64,9,175,13,1,127,13,143,13,239,13,3,13,27,128,1,70,24,184,255,192,64, |
20,9,12,72,24,14,19,80,9,15,6,31,6,2,6,6,12,21,10,0,15,0,63,50,63,57,47,93, |
51,237,50,1,47,43,237,26,16,220,93,113,50,26,237,49,48,43,43,0,93,1,17,20, |
30,2,51,50,54,55,17,51,17,35,17,14,3,35,34,46,2,53,17,1,46,16,39,64,47,70, |
132,74,180,180,38,81,87,93,51,66,101,69,36,4,58,254,110,34,59,44,25,26,21, |
2,5,251,198,1,205,15,31,24,16,41,76,110,69,1,155,0,0,0,1,0,142,0,0,5,221, |
4,58,0,11,0,116,64,52,7,70,4,4,0,11,70,64,4,8,52,8,2,36,8,132,8,212,8,228, |
8,4,11,8,1,139,8,251,8,2,8,13,128,251,13,1,180,13,212,13,2,128,13,1,2,112, |
13,1,95,13,1,13,184,255,192,64,23,9,12,72,3,70,0,0,16,0,48,0,3,8,0,9,5,1, |
15,7,3,80,0,21,0,63,237,50,63,51,51,1,47,94,93,237,43,93,93,95,93,93,93,26, |
16,220,93,113,113,114,26,237,18,57,47,237,49,48,51,17,51,17,33,17,51,17,33, |
17,51,17,142,180,1,154,180,1,153,180,4,58,252,73,3,183,252,73,3,183,251,198, |
0,0,0,1,0,142,254,104,6,102,4,58,0,15,0,141,64,96,13,73,244,14,1,14,14,11, |
70,8,7,70,64,4,4,0,107,8,1,4,8,1,84,8,228,8,2,59,8,1,107,8,123,8,139,8,251, |
8,4,84,8,1,8,17,128,251,17,1,212,17,1,128,17,176,17,2,2,96,17,112,17,2,95, |
17,1,32,17,48,17,64,17,3,3,70,0,0,16,0,48,0,240,0,4,8,0,14,9,5,1,15,11,7, |
3,80,0,21,0,63,237,50,50,63,51,51,47,1,47,94,93,237,93,93,93,95,93,93,93, |
26,16,204,93,93,113,113,114,114,17,57,47,26,237,16,237,50,47,93,237,49,48, |
51,17,51,17,33,17,51,17,33,17,51,17,51,17,35,17,142,180,1,149,180,1,148,180, |
147,163,4,58,252,73,3,183,252,73,3,183,252,73,253,229,1,152,0,0,0,0,2,0,45, |
0,0,4,172,4,58,0,14,0,25,0,113,185,0,5,255,224,179,7,10,72,2,184,255,224, |
64,16,7,11,72,3,71,64,176,21,1,21,27,128,80,27,1,27,184,255,192,64,45,30, |
35,72,255,27,1,14,11,15,70,32,9,1,32,9,1,9,25,81,175,14,191,14,207,14,3,15, |
14,31,14,79,14,3,7,14,14,9,11,80,12,15,15,81,9,21,0,63,237,63,237,18,57,47, |
94,93,113,237,1,47,93,113,253,204,51,93,43,113,26,16,220,93,26,237,49,48, |
43,43,1,50,22,21,20,14,2,35,33,17,33,53,33,25,1,51,50,62,2,53,52,38,43,1, |
3,13,205,210,52,104,155,103,254,103,254,184,1,252,202,69,96,59,26,116,133, |
203,2,112,147,159,74,118,82,44,3,183,131,254,54,254,15,25,49,71,46,94,87, |
0,3,0,142,0,0,5,50,4,58,0,12,0,23,0,27,0,105,185,0,5,255,224,179,7,10,72, |
2,184,255,224,64,58,7,10,72,3,71,19,19,9,27,70,64,159,24,175,24,2,24,29,128, |
12,13,70,16,9,32,9,64,9,3,9,23,81,175,12,191,12,207,12,3,15,12,31,12,79,12, |
3,7,12,12,9,25,10,15,24,13,81,9,21,0,63,237,51,63,51,18,57,47,94,93,113,237, |
1,47,93,237,50,26,16,220,93,26,237,18,57,47,237,49,48,43,43,1,50,22,21,20, |
14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,1,17,51,17,2,38,205,210,52, |
104,155,103,254,103,180,202,69,96,59,26,116,133,203,3,60,180,2,112,147,159, |
74,118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,254,13,4,58,251,198,0,0, |
0,0,2,0,142,0,0,3,215,4,58,0,12,0,23,0,132,185,0,5,255,224,179,7,10,72,2, |
184,255,224,64,86,7,10,72,3,71,64,176,19,1,19,25,128,47,25,1,47,25,175,25, |
2,63,25,95,25,127,25,159,25,191,25,207,25,223,25,255,25,8,25,64,35,39,72, |
12,13,70,0,9,208,9,2,16,9,32,9,64,9,240,9,4,9,23,81,175,12,191,12,207,12, |
3,15,12,31,12,79,12,3,7,12,12,9,10,15,13,81,9,21,0,63,237,63,18,57,47,94, |
93,113,237,1,47,93,113,237,50,43,93,113,114,26,16,220,93,26,237,49,48,43, |
43,1,50,22,21,20,14,2,35,33,17,51,25,1,51,50,62,2,53,52,38,43,1,2,56,205, |
210,52,104,155,103,254,85,180,220,69,96,59,26,116,133,221,2,112,147,159,74, |
118,82,44,4,58,254,54,254,15,25,49,71,46,94,87,0,0,0,0,1,0,55,255,236,3,190, |
4,78,0,40,0,170,64,87,118,34,1,22,29,1,118,28,1,107,15,1,107,6,1,16,10,32, |
10,2,10,10,0,31,71,64,12,31,9,1,144,9,1,9,42,128,20,70,21,21,1,70,31,0,1, |
223,0,1,0,64,12,18,72,0,10,80,143,11,159,11,175,11,3,11,11,26,4,80,36,0,1, |
16,1,32,1,96,1,112,1,128,1,192,1,208,1,8,1,184,255,192,64,29,27,34,72,1,1, |
36,22,31,20,47,20,127,20,143,20,223,20,5,20,64,29,32,72,20,20,17,80,26,16, |
0,63,237,51,47,43,93,63,51,47,43,93,16,237,17,57,47,113,237,1,47,43,113,114, |
237,51,47,237,26,16,220,93,113,50,26,237,18,57,47,93,49,48,93,93,93,93,93, |
19,55,30,1,51,50,62,2,55,33,53,33,46,3,35,34,6,7,39,62,3,51,50,30,2,21,20, |
14,2,35,34,46,2,55,182,16,133,100,73,103,68,34,5,254,99,1,157,4,34,67,103, |
73,109,118,15,185,13,66,105,145,93,90,170,134,81,51,114,182,130,99,151,106, |
61,1,59,12,108,104,53,97,135,82,131,90,133,88,44,105,91,14,68,116,84,48,53, |
128,216,163,120,205,151,86,54,92,122,0,0,0,0,2,0,142,255,236,5,170,4,78,0, |
19,0,39,0,128,64,85,121,37,137,37,2,116,33,132,33,2,118,27,134,27,2,121,23, |
137,23,2,150,18,166,18,2,30,71,15,15,8,31,8,2,7,8,8,11,0,71,64,160,20,1,20, |
41,128,14,10,70,192,11,1,0,11,16,11,48,11,224,11,240,11,5,8,11,25,80,17,16, |
9,80,47,14,1,14,14,11,12,15,11,21,35,80,3,22,0,63,237,63,63,18,57,47,93,237, |
63,237,1,47,94,93,113,237,50,26,16,220,93,26,237,18,57,47,94,93,51,237,49, |
48,0,93,1,93,93,93,93,1,16,2,35,34,46,2,39,35,17,35,17,51,17,51,18,33,50, |
18,3,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,5,170,235,223,102,161,115,65, |
5,222,180,180,223,33,1,164,237,215,189,35,67,97,61,63,99,70,37,39,70,94,56, |
62,100,70,38,2,30,254,228,254,234,62,128,192,131,254,19,4,58,254,54,1,222, |
254,232,254,232,126,164,98,39,41,99,164,123,126,165,98,40,39,98,166,0,0,2, |
0,17,0,0,3,199,4,58,0,13,0,22,0,143,64,68,117,1,133,1,2,3,32,11,17,72,0,32, |
40,43,72,223,0,239,0,2,0,32,29,37,72,52,0,1,43,0,1,41,4,1,4,48,7,10,72,7, |
32,7,11,72,18,71,0,3,3,12,6,6,2,22,11,70,64,175,12,1,239,12,1,12,24,128,1, |
2,184,255,240,64,22,91,2,107,2,2,2,3,0,81,47,21,1,21,21,1,15,81,9,15,12,1, |
21,0,63,51,63,237,18,57,47,93,237,50,1,47,93,56,51,26,16,220,93,113,26,237, |
51,18,57,47,18,57,17,51,237,49,48,43,0,43,93,1,93,113,43,113,43,43,93,9,1, |
35,1,46,1,53,52,54,51,33,17,35,25,1,35,34,6,21,20,22,59,1,2,23,254,197,203, |
1,88,131,118,216,207,1,176,180,234,130,120,107,124,253,1,202,254,54,1,215, |
27,163,122,149,150,251,198,1,202,1,241,92,93,94,93,0,255,255,0,87,255,236, |
4,24,5,123,18,38,0,72,0,0,17,7,0,105,0,248,0,0,0,23,64,13,3,2,38,17,38,3, |
2,4,42,40,17,27,37,1,43,53,53,0,43,53,53,0,0,0,0,1,0,10,254,87,3,238,5,204, |
0,57,0,162,64,9,170,49,1,31,32,9,15,72,24,184,255,232,64,86,9,13,72,0,24, |
16,24,2,7,36,36,57,28,70,64,80,45,1,159,45,1,45,59,128,10,7,57,70,4,3,192, |
0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176,59,192,59,208,59,3,176,59,240,59, |
2,255,59,1,112,59,160,59,176,59,3,57,21,40,80,33,27,15,51,80,22,10,2,81,7, |
3,3,5,22,184,255,192,182,7,13,72,22,15,5,0,0,63,63,43,18,57,47,51,237,50, |
16,237,50,63,237,63,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220, |
93,113,26,237,17,57,47,49,48,0,94,93,43,43,1,93,51,17,35,53,51,53,51,21,33, |
21,33,21,20,14,2,7,51,62,3,51,50,30,2,21,17,20,14,2,35,34,38,39,53,30,1,51, |
50,62,2,53,17,52,46,2,35,34,14,2,21,17,142,132,132,180,1,44,254,212,2,3,2, |
1,3,30,70,84,100,62,104,133,77,29,21,54,93,72,34,65,28,13,36,13,38,49,27, |
10,17,48,88,70,64,103,73,40,4,182,131,147,147,131,148,33,66,56,39,7,55,77, |
50,23,56,101,140,84,252,209,62,106,78,45,4,5,139,2,4,20,43,67,46,2,241,69, |
104,69,35,46,84,120,75,253,170,0,0,0,255,255,0,142,0,0,2,200,5,228,18,38, |
1,201,0,0,17,7,0,116,0,216,0,0,0,19,64,11,1,6,17,38,1,85,6,9,4,0,37,1,43, |
53,0,43,53,0,0,0,0,1,0,87,255,236,3,222,4,78,0,40,0,171,64,113,116,30,1,116, |
21,1,137,8,1,137,2,1,47,42,1,63,26,1,26,26,27,36,16,70,15,15,35,70,0,36,32, |
36,2,0,36,64,36,96,36,128,36,160,36,192,36,224,36,7,8,36,24,27,71,31,5,1, |
5,27,80,143,24,159,24,175,24,3,24,24,32,19,80,10,31,16,47,16,127,16,143,16, |
223,16,5,16,64,29,32,72,16,16,10,16,32,80,0,0,35,16,35,32,35,96,35,112,35, |
128,35,192,35,208,35,8,35,184,255,192,182,27,34,72,35,35,0,22,0,63,50,47, |
43,93,16,237,63,51,47,43,93,16,237,18,57,47,113,237,1,47,93,237,50,47,94, |
93,113,237,51,47,237,17,18,57,47,93,93,49,48,93,93,93,93,5,34,46,2,53,52, |
62,2,51,50,30,2,23,7,46,1,35,34,14,2,7,33,21,33,30,3,51,50,54,55,23,14,3, |
2,52,130,182,114,51,81,134,170,90,93,145,105,66,13,185,15,118,109,73,103, |
67,34,4,1,156,254,99,4,35,68,103,74,100,133,16,182,9,61,106,151,20,86,151, |
205,120,163,216,128,53,48,84,116,68,14,91,105,44,88,133,90,131,82,135,97, |
53,103,109,12,67,122,92,54,0,255,255,0,57,255,236,3,182,4,75,18,6,0,86,0, |
0,255,255,0,137,0,0,1,61,5,204,16,38,0,241,199,0,17,6,1,75,237,0,0,212,181, |
9,64,56,56,72,9,184,255,192,64,9,55,55,72,9,64,54,54,72,9,184,255,192,179, |
53,53,72,9,184,255,192,64,9,52,52,72,9,64,50,50,72,9,184,255,192,179,49,49, |
72,9,184,255,192,64,9,48,48,72,9,64,42,42,72,9,184,255,192,179,41,41,72,9, |
184,255,192,64,9,40,40,72,9,64,38,38,72,9,184,255,192,179,37,37,72,9,184, |
255,192,179,36,36,72,9,184,255,192,179,35,35,72,9,184,255,192,64,16,34,34, |
72,9,64,29,29,72,9,64,10,10,72,1,0,0,184,255,192,179,49,49,72,0,184,255,192, |
64,9,40,41,72,0,64,25,27,72,0,184,255,192,182,18,18,72,128,0,1,0,184,255, |
192,64,11,8,8,72,0,1,0,4,7,1,2,37,1,43,53,17,43,93,43,43,43,43,53,53,1,43, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,255,255,255,248,0,0,2, |
37,5,123,18,38,0,241,0,0,17,6,0,105,203,0,0,25,182,2,1,4,17,38,2,1,184,255, |
243,180,8,6,0,2,37,1,43,53,53,0,43,53,53,0,0,0,255,255,255,206,254,87,1,61, |
5,204,18,6,0,77,0,0,0,2,0,11,255,236,6,236,4,58,0,34,0,45,1,42,64,82,163, |
16,1,148,16,1,117,16,133,16,2,106,14,1,57,14,1,14,16,18,22,72,131,14,147, |
14,163,14,3,117,14,1,106,13,1,57,13,1,13,16,18,22,72,163,13,1,87,13,103,13, |
119,13,3,16,24,12,17,72,109,15,1,15,32,18,22,72,162,15,1,117,15,133,15,149, |
15,3,54,15,70,15,2,5,184,255,224,179,7,10,72,2,184,255,224,64,18,7,11,72, |
34,35,70,64,9,1,9,9,22,3,71,176,41,1,41,184,255,192,64,9,8,11,72,41,47,80, |
47,1,47,184,255,192,64,93,30,35,72,255,47,1,48,47,1,109,11,1,31,11,63,11, |
2,255,11,1,233,11,1,187,11,203,11,219,11,3,163,11,1,149,11,1,31,32,63,32, |
2,255,32,1,106,32,1,41,32,1,163,32,1,53,32,1,11,15,32,3,22,45,81,175,34,191, |
34,207,34,3,15,34,31,34,79,34,3,7,34,34,9,11,80,32,15,25,80,18,22,35,81,9, |
21,0,63,237,63,237,63,237,18,57,47,94,93,113,237,1,47,23,51,93,93,113,113, |
93,113,93,93,93,93,93,113,113,93,93,43,113,16,220,43,93,237,18,57,47,93,237, |
50,49,48,43,43,93,93,93,43,113,0,43,1,93,93,43,113,113,93,93,43,113,113,93, |
93,93,1,50,22,21,20,14,2,35,33,17,33,6,2,14,3,35,34,38,39,53,30,1,51,50,62, |
3,18,55,33,25,1,51,50,62,2,53,52,38,43,1,5,77,205,210,52,104,155,103,254, |
62,254,101,25,42,44,51,71,94,65,29,48,17,11,38,19,35,51,40,33,34,38,25,2, |
242,242,69,96,59,26,116,133,243,2,112,147,159,74,118,82,44,3,183,184,254, |
225,216,149,93,42,8,5,129,4,5,42,94,149,216,1,29,183,254,54,254,15,25,49, |
71,46,94,87,0,0,2,0,142,0,0,6,44,4,58,0,20,0,31,0,133,185,0,7,255,224,179, |
7,10,72,4,184,255,224,64,23,7,11,72,1,21,70,19,11,11,15,5,71,64,176,27,1, |
27,33,128,80,33,1,33,184,255,192,64,50,30,35,72,255,33,1,18,14,70,16,15,32, |
15,64,15,3,15,31,81,1,1,13,80,175,18,191,18,207,18,3,15,18,31,18,79,18,3, |
7,18,18,0,15,21,21,81,11,21,16,0,15,0,63,50,63,237,63,18,57,47,94,93,113, |
237,51,47,237,1,47,93,237,50,93,43,113,26,16,220,93,26,237,18,57,47,51,237, |
50,49,48,43,43,1,17,51,50,22,21,20,14,2,35,33,17,33,17,35,17,51,17,33,17, |
19,51,50,62,2,53,52,38,43,1,3,169,228,205,210,52,104,155,103,254,102,254, |
78,180,180,1,178,181,202,69,96,59,26,116,133,203,4,58,254,54,147,159,74,118, |
82,44,1,237,254,19,4,58,254,54,1,202,252,69,25,49,71,46,94,87,0,0,0,0,1,0, |
10,0,0,3,238,5,204,0,41,0,144,185,0,7,255,232,64,85,9,13,72,0,7,16,7,2,7, |
33,24,11,70,64,80,12,1,159,12,255,12,2,12,43,128,35,32,24,70,29,28,192,25, |
1,0,25,16,25,48,25,224,25,240,25,5,8,25,176,43,192,43,208,43,3,176,43,240, |
43,2,255,43,1,112,43,160,43,176,43,3,35,27,81,32,28,28,5,30,0,25,11,21,0, |
18,80,5,184,255,192,180,9,13,72,5,15,0,63,43,237,50,63,51,63,18,57,47,51, |
237,50,1,93,93,113,114,47,94,93,113,51,51,237,50,50,26,16,220,93,113,26,237, |
17,57,49,48,0,94,93,43,1,62,3,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21, |
17,35,17,35,53,51,53,51,21,33,21,33,21,20,14,2,7,1,61,30,70,84,100,62,104, |
133,77,29,181,17,48,88,70,64,103,73,40,180,132,132,180,1,44,254,212,2,3,2, |
1,3,89,55,77,50,23,56,101,140,84,253,87,2,134,69,104,69,35,46,84,120,75,253, |
170,4,182,131,147,147,131,148,33,66,56,39,7,0,0,255,255,0,138,0,0,3,138,5, |
228,18,38,1,208,0,0,17,7,0,116,1,63,0,0,0,19,64,11,1,22,17,38,1,81,22,25, |
0,14,37,1,43,53,0,43,53,0,0,0,255,255,0,5,254,87,3,252,5,240,18,38,0,92,0, |
0,17,7,2,145,0,183,0,0,0,19,64,11,1,32,17,38,1,10,37,45,17,31,37,1,43,53, |
0,43,53,0,0,0,0,1,0,142,254,104,3,221,4,58,0,11,0,125,64,89,9,73,15,10,79, |
10,2,38,10,10,0,7,70,64,15,4,79,4,2,57,47,4,111,4,143,4,255,4,4,191,4,1,143, |
4,159,4,255,4,3,4,13,128,3,70,192,0,1,0,0,16,0,48,0,224,0,240,0,5,8,0,176, |
13,192,13,208,13,3,176,13,240,13,2,112,13,160,13,176,13,192,13,4,9,5,1,15, |
8,3,80,0,0,47,237,51,63,51,47,1,93,113,114,47,94,93,113,237,26,16,220,93, |
113,114,94,93,26,237,18,57,47,94,93,237,49,48,51,17,51,17,33,17,51,17,33, |
17,35,17,142,180,1,231,180,254,170,163,4,58,252,73,3,183,251,198,254,104, |
1,152,0,0,1,0,168,0,1,3,186,7,28,0,7,0,55,64,37,5,90,0,6,16,6,64,6,3,6,3, |
70,255,0,1,0,0,16,0,64,0,128,0,176,0,208,0,6,7,0,4,95,1,7,3,5,18,0,63,63, |
51,237,1,47,94,93,93,237,47,93,237,49,48,1,17,51,17,33,17,35,17,3,6,180,253, |
173,191,5,129,1,155,253,201,251,28,5,128,0,0,0,0,1,0,142,0,0,3,10,5,204,0, |
7,0,56,64,36,6,73,16,3,48,3,2,3,3,9,0,70,192,1,1,0,1,16,1,48,1,224,1,240, |
1,5,8,1,4,0,7,80,2,15,0,21,0,63,63,237,63,1,47,94,93,113,237,17,51,47,93, |
237,49,48,33,35,17,33,17,51,17,33,1,66,180,1,217,163,254,56,4,58,1,146,253, |
235,255,255,0,9,0,0,7,134,6,240,18,38,0,58,0,0,17,7,2,148,2,65,0,0,0,21,180, |
1,47,5,38,1,184,255,184,180,48,51,15,46,37,1,43,53,0,43,53,0,255,255,255, |
253,0,0,5,204,5,228,18,38,0,90,0,0,17,7,0,67,1,72,0,0,0,21,180,1,43,17,38, |
1,184,255,162,180,44,47,15,42,37,1,43,53,0,43,53,0,255,255,0,9,0,0,7,134, |
6,240,18,38,0,58,0,0,17,7,2,149,2,247,0,0,0,19,64,11,1,47,5,38,1,75,47,50, |
15,46,37,1,43,53,0,43,53,0,0,0,255,255,255,253,0,0,5,204,5,228,18,38,0,90, |
0,0,17,7,0,116,2,38,0,0,0,19,64,11,1,43,17,38,1,93,43,46,15,42,37,1,43,53, |
0,43,53,0,0,0,255,255,0,9,0,0,7,134,6,178,18,38,0,58,0,0,17,7,2,152,2,134, |
0,0,0,23,64,13,2,1,47,5,38,2,1,2,51,49,15,46,37,1,43,53,53,0,43,53,53,0,0, |
0,255,255,255,253,0,0,5,204,5,123,18,38,0,90,0,0,17,7,0,105,1,161,0,0,0,23, |
64,13,2,1,43,17,38,2,1,0,47,45,15,42,37,1,43,53,53,0,43,53,53,0,0,0,255,255, |
0,45,0,0,5,41,6,240,18,38,0,60,0,0,17,7,2,148,1,34,0,0,0,21,180,1,9,5,38, |
1,184,255,181,180,10,13,4,8,37,1,43,53,0,43,53,0,255,255,0,5,254,87,3,252, |
5,228,18,38,0,92,0,0,17,6,0,67,105,0,0,21,180,1,32,17,38,1,184,255,167,180, |
33,36,17,31,37,1,43,53,0,43,53,0,0,0,0,1,0,0,1,195,4,114,2,76,0,3,0,43,64, |
30,2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38, |
43,72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,4,114,1,195,137,137, |
0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30,2,0,0,186,15,1,31,1,63,1,79,1,4,47, |
1,63,1,111,1,175,1,223,1,5,1,64,38,43,72,1,0,47,43,93,113,237,1,47,47,49, |
48,17,53,33,21,8,0,1,195,137,137,0,0,1,0,0,1,195,8,0,2,76,0,3,0,43,64,30, |
2,0,0,186,15,1,31,1,63,1,79,1,4,47,1,63,1,111,1,175,1,223,1,5,1,64,38,43, |
72,1,0,47,43,93,113,237,1,47,47,49,48,17,53,33,21,8,0,1,195,137,137,0,255, |
255,255,225,254,78,4,138,255,169,16,38,0,66,0,229,16,7,0,66,0,0,0,190,0,1, |
0,127,3,184,1,72,5,129,0,12,0,47,64,16,4,32,11,17,72,7,64,11,17,72,7,12,150, |
10,151,0,184,255,192,64,10,8,11,72,0,10,156,0,169,7,3,0,63,244,237,1,47,43, |
237,237,50,43,49,48,43,19,53,52,62,2,55,51,14,1,21,51,21,127,10,20,30,20, |
121,45,50,89,3,184,146,52,86,75,66,32,65,132,65,195,0,0,0,1,0,127,3,184,1, |
72,5,129,0,12,0,52,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255,192, |
180,11,17,72,6,11,184,255,192,64,10,8,11,72,11,10,156,5,169,11,3,0,63,228, |
237,1,47,43,51,43,253,237,49,48,43,1,20,14,2,7,35,62,1,53,35,53,51,1,72,9, |
20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,63,197,0,1,0,127,254, |
250,1,72,0,195,0,12,0,51,185,0,3,255,224,183,11,17,72,9,151,0,150,6,184,255, |
192,180,11,17,72,6,11,184,255,192,64,9,8,11,72,11,5,169,11,156,10,0,47,253, |
228,1,47,43,51,43,253,237,49,48,43,37,20,14,2,7,35,62,1,53,35,53,51,1,72, |
9,20,29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,0,0,0,1,0,126, |
3,184,1,71,5,129,0,12,0,47,64,16,8,32,11,17,72,5,64,11,17,72,5,1,150,2,151, |
11,184,255,192,64,10,8,11,72,11,5,169,2,156,12,3,0,63,237,228,1,47,43,237, |
237,50,43,49,48,43,1,21,35,20,22,23,35,46,3,61,1,1,65,88,49,45,123,20,29, |
20,9,5,129,197,63,132,65,32,66,75,86,53,145,0,0,0,2,0,75,3,184,2,95,5,129, |
0,12,0,25,0,89,64,58,17,32,11,17,72,4,32,11,17,72,20,64,11,17,72,20,25,150, |
13,7,64,11,17,72,7,12,150,10,151,128,0,1,15,0,31,0,2,8,0,23,151,13,159,27, |
175,27,2,10,23,156,13,0,0,13,169,6,20,3,0,63,51,228,50,47,16,237,50,1,93, |
47,237,220,94,93,93,237,237,50,43,16,237,50,43,49,48,43,43,1,53,52,62,2,55, |
51,14,1,21,51,21,33,53,52,62,2,55,51,14,1,21,51,21,1,151,10,19,29,20,122, |
45,49,88,253,242,10,20,30,20,121,45,50,89,3,184,146,52,86,75,66,32,65,132, |
65,195,146,52,86,75,66,32,65,132,65,195,0,0,2,0,75,3,184,2,95,5,129,0,12, |
0,25,0,107,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22, |
151,13,150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31, |
11,2,8,11,19,184,255,192,64,24,11,17,72,19,63,24,1,24,159,27,175,27,2,10, |
23,156,24,5,5,18,169,11,24,3,0,63,51,228,50,47,16,237,50,1,93,47,93,51,43, |
220,94,93,93,50,43,253,237,16,253,237,49,48,43,43,1,20,14,2,7,35,62,1,53, |
35,53,51,5,20,14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194, |
254,181,9,20,29,20,123,45,49,88,195,4,240,53,86,75,66,32,65,132,65,195,145, |
53,86,75,66,32,65,132,65,195,0,0,0,2,0,75,254,250,2,95,0,195,0,12,0,25,0, |
104,185,0,16,255,224,179,11,17,72,3,184,255,224,64,13,11,17,72,22,151,13, |
150,24,9,151,0,150,6,184,255,192,64,15,11,17,72,6,128,11,1,15,11,31,11,2, |
8,11,19,184,255,192,64,21,11,17,72,19,24,159,27,175,27,2,5,5,18,169,24,11, |
11,24,156,10,23,0,47,51,237,50,47,16,228,50,47,1,93,47,51,43,220,94,93,93, |
50,43,253,237,16,253,237,49,48,43,43,37,20,14,2,7,35,62,1,53,35,53,51,5,20, |
14,2,7,35,62,1,53,35,53,51,2,95,10,19,30,20,121,45,49,88,194,254,181,9,20, |
29,20,123,45,49,88,195,51,53,87,75,66,32,65,132,65,195,144,53,87,75,66,32, |
65,132,65,195,0,0,0,1,0,138,255,118,3,234,5,204,0,11,0,64,64,37,11,192,0, |
8,9,8,0,188,3,7,7,6,4,192,47,3,111,3,175,3,3,32,3,1,3,11,193,10,194,7,4,193, |
5,194,7,0,1,0,47,63,246,237,16,244,237,1,47,93,113,237,51,51,47,16,237,50, |
50,47,16,237,49,48,1,3,35,3,5,53,5,3,51,3,37,21,2,137,22,115,22,254,160,1, |
96,28,215,28,1,97,3,232,251,142,4,114,27,164,29,1,120,254,136,29,164,0,0, |
1,0,136,255,115,3,233,5,204,0,21,0,86,64,50,12,8,189,9,15,5,6,11,14,15,5, |
9,190,19,1,189,0,20,17,0,16,3,4,16,3,32,0,1,0,19,193,18,194,15,12,193,13, |
194,15,8,193,7,194,4,1,193,2,194,4,0,0,63,246,237,16,244,237,47,246,237,16, |
244,237,1,47,93,23,51,47,17,51,51,16,237,50,237,23,50,47,16,237,50,49,48, |
1,5,53,5,3,51,3,37,21,37,3,19,37,21,37,19,35,19,5,53,5,19,1,241,254,152,1, |
104,16,175,16,1,105,254,151,26,26,1,104,254,152,16,175,16,254,151,1,105,26, |
3,232,27,164,29,1,120,254,136,29,164,27,254,182,254,185,27,164,29,254,136, |
1,120,29,164,27,1,71,0,0,0,0,1,0,81,1,145,2,124,3,188,0,19,0,73,185,0,17, |
255,232,179,9,12,72,13,184,255,232,64,39,9,12,72,7,24,9,12,72,3,24,9,12,72, |
128,0,1,15,0,63,0,2,0,191,10,1,10,143,5,1,0,5,48,5,2,5,15,15,1,15,0,47,93, |
205,93,93,1,47,93,205,93,93,49,48,0,43,43,43,43,1,20,14,2,35,34,46,2,53,52, |
62,2,51,50,30,2,2,124,45,76,102,58,57,99,75,43,43,75,99,57,58,102,76,45,2, |
170,58,102,77,44,44,77,102,58,57,100,74,43,43,74,100,0,0,0,3,1,22,0,0,6,234, |
0,219,0,3,0,7,0,11,0,86,64,61,7,150,4,4,0,11,150,0,8,48,8,96,8,128,8,144, |
8,160,8,208,8,240,8,8,0,8,48,8,64,8,96,8,144,8,192,8,208,8,240,8,8,8,8,3, |
150,47,0,191,0,2,16,0,1,0,5,1,9,155,4,0,8,0,47,51,51,237,50,50,1,47,93,93, |
237,47,94,93,113,237,18,57,47,237,49,48,33,53,51,21,33,53,51,21,33,53,51, |
21,6,40,194,252,183,192,252,181,195,219,219,219,219,219,219,0,0,7,0,55,255, |
245,7,200,5,141,0,3,0,23,0,43,0,63,0,83,0,103,0,123,3,217,64,12,118,0,134, |
0,2,121,2,137,2,2,3,102,184,255,224,64,14,8,12,72,96,24,8,12,72,92,24,8,12, |
72,86,184,255,224,179,8,12,72,62,184,255,232,64,14,8,12,72,56,24,8,12,72, |
52,24,8,12,72,46,184,255,224,179,8,12,72,22,184,255,224,64,14,8,12,72,16, |
24,8,12,72,12,24,8,12,72,6,184,255,224,64,13,8,12,72,74,180,59,181,49,0,1, |
2,3,1,184,255,240,64,131,3,16,118,3,1,9,1,25,1,121,1,3,9,1,3,1,3,19,49,180, |
102,64,1,38,64,182,64,198,64,214,64,4,64,64,19,114,180,99,181,89,180,105, |
104,1,22,104,38,104,2,201,104,249,104,2,139,104,1,118,104,1,89,104,1,70,104, |
1,41,104,1,27,104,1,233,104,1,150,104,198,104,2,121,104,1,107,104,1,86,104, |
1,57,104,1,6,104,22,104,38,104,3,10,104,24,180,9,181,34,180,9,19,25,19,41, |
19,73,19,89,19,121,19,137,19,153,19,8,34,19,64,45,49,72,19,184,255,192,64, |
255,19,23,72,19,217,125,1,198,125,1,169,125,1,155,125,1,121,125,1,107,125, |
1,93,125,1,73,125,1,59,125,1,45,125,1,9,125,25,125,2,251,125,1,237,125,1, |
217,125,1,203,125,1,189,125,1,155,125,1,125,125,141,125,2,105,125,1,91,125, |
1,77,125,1,54,125,1,41,125,1,11,125,27,125,2,204,233,125,249,125,2,214,125, |
1,187,125,1,173,125,1,137,125,153,125,2,123,125,1,102,125,1,75,125,1,61,125, |
1,9,125,1,219,125,251,125,2,205,125,1,153,125,169,125,2,107,125,139,125,2, |
93,125,1,57,125,1,43,125,1,29,125,1,9,125,1,237,125,253,125,2,185,125,201, |
125,217,125,3,123,125,171,125,2,89,125,1,11,125,59,125,75,125,3,155,249,125, |
1,235,125,1,214,125,1,187,125,1,153,125,1,123,125,139,125,2,102,125,1,59, |
125,75,125,2,9,125,25,125,2,246,125,1,217,125,1,205,125,1,169,125,185,125, |
2,155,125,1,105,125,121,125,2,93,125,1,57,125,73,125,2,43,125,1,22,125,1, |
249,125,1,237,125,1,201,125,64,249,1,187,125,1,153,125,1,123,125,1,102,125, |
1,73,125,1,54,125,1,9,125,25,125,2,105,249,125,1,235,125,1,221,125,1,169, |
125,1,150,125,1,121,125,1,107,125,1,73,125,1,59,125,1,25,125,1,11,125,1,253, |
125,1,217,125,1,203,125,1,169,125,1,155,125,1,141,125,1,121,125,1,91,125, |
107,125,2,57,125,1,27,125,43,125,2,249,125,1,235,125,1,169,125,201,125,2, |
150,125,1,121,125,1,107,125,1,57,125,1,38,125,1,9,125,1,56,249,125,1,230, |
125,1,201,125,1,182,125,1,153,125,1,139,125,1,89,125,1,70,125,1,41,125,1, |
27,125,1,249,125,1,235,125,1,201,125,1,187,125,1,173,125,1,1,148,125,1,123, |
125,1,100,125,1,75,125,1,63,125,1,27,125,1,15,125,1,228,125,1,203,125,1,176, |
125,1,2,160,125,1,143,125,1,112,125,1,95,125,1,64,125,1,31,125,1,0,125,1, |
8,109,182,84,183,119,182,94,19,69,182,44,183,79,182,54,19,39,182,14,183,29, |
182,4,4,2,3,0,18,0,63,63,63,237,244,237,63,237,244,237,63,237,244,237,1,94, |
93,93,93,93,93,93,93,95,93,93,93,113,113,113,113,113,113,113,95,113,113,113, |
113,113,114,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,93,93,93, |
93,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114, |
114,114,114,94,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113, |
113,113,113,114,114,114,114,114,114,114,114,114,94,93,93,93,93,93,113,113, |
113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,114,94,93, |
93,93,93,93,93,93,93,93,93,93,93,93,113,113,113,113,113,113,113,113,113,113, |
113,47,43,43,94,93,237,244,237,47,94,93,93,93,93,93,93,93,113,113,113,113, |
113,113,113,114,114,253,244,237,18,57,47,93,113,237,17,57,57,47,47,94,93, |
93,56,56,17,51,17,51,16,244,237,49,48,0,43,43,43,43,43,43,43,43,43,43,43, |
43,1,95,93,93,33,35,1,51,37,50,30,2,21,20,14,2,35,34,46,2,53,52,62,2,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2,35,34,46,2,53, |
52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,50,30,2,21,20,14,2, |
35,34,46,2,53,52,62,2,19,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,48,155, |
3,154,157,252,152,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19, |
37,55,35,38,58,39,19,20,39,56,37,34,54,39,21,2,30,60,107,80,46,46,81,108, |
62,63,108,80,46,46,81,110,210,19,37,55,35,38,58,39,19,20,39,56,37,34,54,39, |
21,1,253,60,107,80,46,46,81,108,62,63,108,80,46,46,81,110,210,19,37,55,35, |
38,58,39,19,20,39,56,37,34,54,39,21,5,129,12,33,83,139,106,102,140,86,38, |
37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71,97,59,26,26, |
59,97,254,239,33,83,139,106,102,140,86,38,37,86,140,103,106,139,83,33,254, |
151,73,98,58,24,24,59,97,73,71,97,59,26,26,59,97,1,176,33,83,139,106,102, |
140,86,38,37,86,140,103,106,139,83,33,254,151,73,98,58,24,24,59,97,73,71, |
97,59,26,26,59,97,0,0,0,0,1,0,85,3,122,1,89,5,129,0,3,0,40,64,25,3,16,10, |
13,72,1,16,10,13,72,1,150,31,2,47,2,2,2,48,0,1,0,0,1,3,0,63,205,1,47,93,221, |
93,237,49,48,43,43,27,1,51,3,85,64,196,158,3,122,2,7,253,249,255,255,0,85, |
3,122,2,175,5,129,16,38,2,14,0,0,17,7,2,14,1,86,0,0,0,9,180,1,96,4,1,4,17, |
93,53,0,0,1,0,88,0,141,2,81,3,172,0,8,0,72,64,55,106,3,122,3,138,3,3,106, |
0,122,0,138,0,3,7,236,6,235,5,236,31,1,79,1,95,1,127,1,143,1,5,48,1,64,1, |
96,1,112,1,160,1,5,1,0,239,15,3,47,3,111,3,127,3,4,3,0,47,93,228,1,47,93, |
113,237,237,237,49,48,93,93,37,1,53,1,51,21,9,1,21,1,168,254,176,1,80,167, |
254,177,1,81,141,1,109,63,1,115,31,254,140,254,145,29,0,0,0,1,0,89,0,141, |
2,82,3,172,0,8,0,66,64,48,101,6,117,6,133,6,3,101,0,117,0,133,0,3,4,236,1, |
236,8,235,112,3,128,3,176,3,3,208,3,1,111,3,127,3,2,3,0,239,15,6,47,6,111, |
6,127,6,4,6,0,47,93,228,1,47,93,93,113,253,237,237,49,48,93,93,37,35,53,9, |
1,53,51,1,21,1,1,168,1,82,254,176,166,1,81,141,29,1,111,1,116,31,254,141, |
63,0,0,0,255,255,0,185,0,0,3,71,5,129,16,38,0,4,0,0,17,7,0,4,1,200,0,0,0, |
22,64,12,3,2,47,8,1,8,1,0,47,0,1,0,17,93,53,53,17,93,53,53,0,1,255,192,5, |
223,2,235,6,84,0,3,0,13,179,1,0,2,1,0,47,205,1,47,47,49,48,1,33,53,33,2,235, |
252,213,3,43,5,223,117,0,1,254,96,0,0,2,98,5,129,0,3,0,45,182,3,16,111,3, |
1,3,1,184,255,240,64,18,239,1,1,1,64,13,18,72,1,64,8,11,72,1,2,3,0,18,0,63, |
63,1,47,43,43,93,56,47,93,56,49,48,33,35,1,51,254,244,148,3,113,145,5,129, |
0,0,1,0,101,2,7,2,131,4,157,0,33,0,111,185,0,30,255,216,64,30,9,17,72,23, |
10,224,36,11,1,11,33,224,36,0,212,0,228,0,3,0,23,6,228,11,139,0,251,0,2,0, |
184,255,192,64,38,10,13,72,4,0,1,0,29,17,17,75,29,91,29,2,29,64,21,25,72, |
29,64,16,19,72,47,29,63,29,2,27,29,1,15,29,1,2,29,0,47,95,93,93,93,43,43, |
93,51,47,16,204,93,43,93,50,237,50,1,47,93,237,47,93,237,50,49,48,0,43,1, |
17,52,46,2,35,34,6,21,17,35,17,52,46,2,53,51,20,30,2,21,51,62,3,51,50,22, |
21,17,2,2,13,29,47,35,72,85,128,1,1,2,119,2,2,2,2,15,38,49,64,42,110,97,2, |
7,1,142,46,61,37,16,100,94,254,148,1,255,20,46,40,29,4,3,27,34,35,12,28,46, |
32,17,108,121,254,79,0,0,0,1,0,4,0,0,4,46,5,129,0,17,0,106,64,69,7,3,7,3, |
10,0,16,32,16,2,16,16,48,16,80,16,112,16,144,16,224,16,6,16,5,1,9,92,14,12, |
10,8,12,81,5,31,13,1,0,13,1,13,4,95,15,1,31,1,63,1,79,1,4,63,1,1,15,1,1,8, |
1,1,9,0,95,15,3,9,18,0,63,63,237,18,57,47,94,93,93,113,237,220,93,113,50, |
237,50,1,47,51,51,237,50,50,47,93,113,18,57,57,47,47,49,48,1,17,33,21,33, |
21,33,21,33,17,35,17,35,53,51,17,33,21,1,103,2,175,253,81,1,146,254,110,180, |
175,175,3,123,4,230,254,36,157,213,129,254,233,1,23,129,3,233,155,0,1,0,58, |
0,0,4,80,5,150,0,58,0,221,64,81,133,58,149,58,2,21,22,37,22,53,22,3,40,44, |
0,48,17,13,6,30,111,29,29,0,52,110,6,43,39,48,110,18,14,10,10,0,79,6,95,6, |
111,6,3,6,58,111,0,0,32,0,2,0,0,32,0,48,0,80,0,112,0,144,0,176,0,208,0,8, |
0,0,16,0,48,0,192,0,224,0,5,8,0,184,255,192,64,70,14,18,72,0,42,16,81,17, |
46,12,81,43,175,13,1,13,64,42,45,72,0,13,16,13,32,13,3,13,39,111,17,1,47, |
17,95,17,111,17,143,17,159,17,223,17,239,17,7,17,17,52,35,115,41,30,1,30, |
24,7,7,52,116,37,58,1,23,58,1,58,6,24,0,63,51,93,93,237,50,63,51,93,237,18, |
57,47,93,113,51,222,93,43,93,50,237,50,16,237,50,1,47,43,94,93,113,114,237, |
47,93,18,57,47,51,51,237,50,50,16,237,17,57,47,237,17,51,51,17,18,57,57,49, |
48,0,93,93,1,14,3,35,33,53,62,1,61,1,35,53,51,53,35,53,51,53,52,62,2,51,50, |
30,2,23,7,46,3,35,34,6,29,1,33,21,33,21,33,21,33,21,20,14,2,7,33,50,62,2, |
55,4,80,9,57,89,115,67,253,70,89,86,186,186,186,186,48,99,152,103,70,123, |
99,71,18,174,10,39,53,65,36,114,112,1,152,254,104,1,152,254,104,22,44,63, |
40,1,227,38,67,53,37,8,1,55,80,117,77,37,154,46,160,121,25,129,140,129,130, |
92,147,102,55,29,58,86,57,57,31,52,36,20,115,125,138,129,140,129,7,56,106, |
92,71,21,19,42,67,48,0,0,0,0,4,0,158,255,236,8,103,5,129,0,14,0,23,0,47,0, |
98,1,193,64,71,134,2,1,117,91,133,91,2,91,73,107,73,139,73,3,143,68,1,109, |
68,1,91,68,1,105,82,1,105,80,1,125,22,1,91,22,107,22,2,125,17,141,17,2,91, |
17,107,17,2,84,57,100,57,2,54,57,70,57,2,37,97,53,97,69,97,3,76,32,9,14,72, |
49,184,255,224,64,94,9,14,72,29,32,12,17,72,13,29,29,29,45,29,3,82,73,81, |
81,48,72,65,0,70,15,24,39,75,37,41,72,30,34,32,30,57,73,15,56,1,102,56,1, |
56,56,89,72,75,95,15,1,63,75,95,75,239,75,3,75,64,27,39,72,239,30,1,31,30, |
95,30,127,30,3,15,30,75,75,30,15,3,8,64,65,80,65,96,65,3,127,65,143,65,2, |
65,184,255,192,64,16,7,12,72,65,20,7,70,0,8,16,8,32,8,3,8,100,184,255,192, |
179,91,95,72,100,184,255,192,179,80,88,72,100,184,255,192,179,70,74,72,100, |
184,255,192,179,59,62,72,100,184,255,192,179,48,53,72,100,184,255,192,64, |
11,27,31,72,79,100,95,100,111,100,3,100,184,255,192,179,7,10,72,89,184,255, |
248,64,71,19,22,72,65,8,19,22,72,89,65,78,60,80,57,51,22,44,80,27,22,6,95, |
20,87,80,121,82,1,72,82,88,82,104,82,3,82,78,40,32,80,33,78,37,33,35,35,33, |
127,33,143,33,2,175,20,1,20,64,9,17,72,20,33,20,33,8,19,95,9,3,8,18,0,63, |
63,237,18,57,57,47,47,43,93,93,17,51,47,17,51,51,16,237,50,47,51,93,93,237, |
16,237,63,237,63,51,237,18,57,57,43,43,1,43,93,43,43,43,43,43,43,47,93,237, |
50,47,43,93,113,18,23,57,47,47,47,93,113,43,93,93,16,237,51,47,93,113,237, |
17,51,51,16,237,50,17,57,57,16,237,16,237,50,47,237,49,48,93,43,43,43,93, |
0,93,93,1,93,93,93,93,0,93,93,93,93,93,1,93,0,93,1,93,1,20,14,2,43,1,17,35, |
17,33,50,30,2,7,52,38,43,1,17,51,50,54,1,14,1,35,34,38,53,17,35,53,51,55, |
51,21,51,21,35,17,20,22,51,50,54,55,37,20,6,35,34,46,2,39,55,30,1,51,50,62, |
2,53,52,46,2,39,46,3,53,52,54,51,50,22,23,7,46,3,35,34,21,20,30,2,23,30,3, |
3,186,61,121,182,121,130,181,1,43,125,186,124,62,182,164,164,105,113,165, |
155,2,123,35,74,48,105,93,104,111,53,110,157,157,41,55,23,40,26,2,232,183, |
170,75,121,92,61,15,159,17,99,88,40,68,49,27,34,62,87,52,49,96,77,47,168, |
161,141,165,22,161,6,31,45,54,30,155,32,57,80,48,48,100,82,52,3,217,92,159, |
117,68,253,219,5,129,61,111,157,97,134,139,253,212,146,252,186,11,13,123, |
122,1,197,131,242,242,131,254,98,78,73,8,6,98,120,129,24,54,88,64,26,61,58, |
10,25,40,30,30,41,29,23,13,12,32,53,79,59,112,119,105,116,17,28,38,24,10, |
85,25,36,28,22,11,11,31,54,87,0,1,0,16,255,236,4,86,5,150,0,61,0,232,185, |
0,2,255,235,64,68,15,73,106,38,1,58,43,74,43,122,43,138,43,4,36,59,52,59, |
68,59,116,59,132,59,5,46,55,55,4,57,45,51,110,20,24,15,14,26,15,3,20,37,110, |
36,36,3,110,64,4,96,4,128,4,160,4,176,4,5,0,4,144,4,176,4,208,4,4,4,184,255, |
192,64,94,24,27,72,4,48,24,81,25,57,15,81,54,15,16,31,16,127,16,143,16,159, |
16,5,16,64,39,47,72,0,16,16,16,128,16,3,16,45,47,25,63,25,127,25,3,47,25, |
63,25,175,25,207,25,4,47,25,175,25,2,25,25,0,40,115,216,37,1,124,37,140,37, |
2,26,37,42,37,2,37,31,7,0,115,115,3,131,3,2,21,3,37,3,2,3,9,25,0,63,51,93, |
93,237,63,51,93,93,93,237,18,57,47,93,113,114,51,220,93,43,113,50,237,50, |
16,237,50,1,47,43,93,113,237,51,47,237,47,23,51,47,196,16,237,50,50,17,57, |
47,196,49,48,0,93,93,93,43,37,50,54,55,23,14,3,35,34,46,2,39,35,55,51,46, |
1,53,52,54,55,35,55,51,62,3,51,50,30,2,23,7,46,1,35,34,14,2,7,33,7,33,14, |
1,21,20,22,23,33,7,33,30,3,2,179,100,120,14,185,13,63,103,147,97,120,177, |
121,69,13,171,40,120,1,2,2,1,160,40,129,15,73,123,173,115,97,147,103,63,13, |
185,14,121,106,68,106,79,50,11,1,190,40,254,99,2,1,2,2,1,196,40,254,108,9, |
42,77,114,126,100,91,14,68,118,87,50,77,139,192,114,129,8,46,24,27,53,6,127, |
122,189,130,67,50,87,118,68,14,91,100,39,87,137,99,127,16,47,23,22,37,19, |
129,81,138,100,57,0,0,0,0,4,0,69,255,244,6,208,5,140,0,19,0,23,0,43,0,79, |
0,192,64,14,118,20,134,20,2,121,22,137,22,2,133,47,1,66,184,255,232,64,9, |
8,11,72,60,24,8,11,72,17,184,255,232,179,8,11,72,13,184,255,232,64,29,8,11, |
72,7,24,8,11,72,3,24,8,11,72,22,23,20,21,74,180,73,73,52,180,53,178,63,23, |
16,21,184,255,240,64,62,21,23,21,23,0,44,180,63,64,10,14,72,63,34,180,10, |
178,0,180,0,24,16,24,32,24,80,24,96,24,208,24,224,24,240,24,8,24,38,52,1, |
52,49,182,58,184,77,182,74,68,4,23,3,20,18,29,182,15,184,39,182,5,19,0,63, |
237,244,237,63,63,63,51,237,244,237,51,93,1,47,93,253,244,237,47,43,237,18, |
57,57,47,47,56,56,16,244,237,51,47,237,17,51,17,51,49,48,0,43,43,43,43,43, |
43,1,93,93,93,1,20,14,2,35,34,46,2,53,52,62,2,51,50,30,2,1,35,1,51,19,52, |
46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,20,30,2,51,50,54,55,23,14,3,35,34, |
46,2,53,52,62,2,51,50,30,2,23,7,46,1,35,34,6,6,208,51,87,116,66,66,115,85, |
49,48,86,117,68,66,115,85,50,251,59,155,3,154,157,149,22,43,63,40,42,64,44, |
22,23,43,63,41,39,63,44,24,250,155,20,47,75,54,69,94,11,141,6,45,77,111,72, |
94,132,82,38,59,97,124,65,68,106,76,48,9,143,10,83,75,108,87,1,178,125,171, |
105,45,45,104,171,126,133,174,103,41,41,103,174,253,201,5,129,252,49,99,131, |
78,32,33,78,131,98,95,128,79,34,34,79,128,2,124,75,124,90,50,82,87,9,54,99, |
76,45,69,121,164,96,130,173,103,42,40,70,94,55,11,72,85,164,0,2,0,19,255, |
236,2,126,5,149,0,39,0,55,0,185,64,9,138,32,1,53,40,14,17,72,26,184,255,232, |
179,8,16,72,22,184,255,232,64,67,8,16,72,8,32,8,16,72,6,32,11,16,72,5,27, |
21,27,2,5,21,21,21,2,3,4,4,29,16,40,32,40,2,96,40,112,40,128,40,192,40,4, |
15,40,1,40,40,4,51,20,51,2,8,51,159,35,1,35,18,14,192,10,208,10,224,10,3, |
10,184,255,192,179,34,38,72,10,184,255,192,64,26,7,11,72,10,79,57,1,18,51, |
45,15,11,34,24,14,14,7,45,24,3,3,7,24,7,0,7,0,47,205,63,18,57,47,16,205,17, |
57,47,18,57,57,205,17,57,57,1,93,47,43,43,93,198,51,205,93,50,0,94,93,1,51, |
47,93,93,113,205,50,47,51,49,48,0,93,93,43,43,43,43,1,43,93,37,50,54,55,51, |
14,1,35,34,38,61,1,14,1,7,53,62,1,55,17,52,62,2,51,50,30,2,21,20,14,2,7,21, |
20,30,2,19,52,46,2,35,34,14,2,21,17,62,3,1,177,51,68,17,69,20,120,109,111, |
127,32,66,34,35,66,31,25,59,98,72,52,79,53,27,44,79,110,66,19,32,42,115,14, |
27,40,26,32,39,22,8,49,77,54,28,78,104,109,154,157,159,155,175,17,28,13,73, |
14,29,16,2,75,59,108,83,49,42,78,111,69,99,180,152,118,38,244,57,83,54,26, |
4,20,52,85,61,33,36,61,81,46,254,5,33,104,131,151,0,0,0,0,4,0,188,0,0,8,46, |
5,129,0,19,0,35,0,55,0,59,0,244,64,124,141,0,1,0,24,13,16,72,61,0,1,25,0, |
1,132,10,1,114,10,1,69,10,85,10,101,10,3,22,10,38,10,2,5,33,21,33,37,33,3, |
4,29,20,29,2,11,24,27,24,2,11,22,27,22,2,47,61,1,58,20,73,36,19,73,16,0,16, |
57,46,73,26,144,16,160,16,192,16,3,31,26,1,16,26,16,26,8,144,36,160,36,176, |
36,3,47,36,1,0,36,1,36,10,1,7,73,48,8,64,8,80,8,3,0,8,16,8,32,8,144,8,4,8, |
41,31,15,1,184,255,192,179,29,36,72,1,184,255,192,64,15,18,21,72,1,17,9,3, |
51,23,192,57,208,57,2,57,184,255,192,64,21,35,44,72,57,56,11,64,29,36,72, |
11,64,18,21,72,0,11,56,3,8,18,0,63,23,51,43,43,47,221,43,93,222,205,63,51, |
51,43,43,63,205,1,47,93,113,237,50,50,47,93,93,93,18,57,57,47,47,93,93,16, |
237,51,17,51,16,237,16,237,50,93,49,48,0,93,93,93,93,1,93,93,93,93,93,93, |
43,93,33,1,22,23,30,1,21,17,35,17,51,1,38,39,46,1,53,17,51,17,1,20,6,35,34, |
38,53,52,62,2,51,50,30,2,7,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,1,53, |
33,21,4,38,253,48,1,2,1,2,160,202,2,216,2,2,2,2,162,3,54,176,175,168,177, |
43,87,131,88,93,131,84,39,159,24,47,69,45,46,71,48,25,26,48,67,41,46,72,50, |
25,254,16,2,123,4,166,44,44,38,89,39,252,88,5,129,251,82,40,46,39,98,51,3, |
156,250,127,2,178,188,203,201,190,91,145,101,53,53,100,145,92,81,107,64,26, |
27,64,107,80,82,108,63,26,26,63,108,253,160,146,146,0,0,0,0,2,0,188,2,122, |
7,25,5,129,0,39,0,47,0,148,64,9,9,24,19,23,72,136,9,1,8,184,255,232,64,16, |
19,23,72,89,8,105,8,121,8,3,37,24,13,17,72,24,184,255,240,64,73,12,17,72, |
44,41,196,42,24,21,196,64,22,224,22,2,22,22,0,64,47,1,47,0,42,16,42,64,42, |
80,42,4,42,39,196,37,111,0,175,0,207,0,223,0,239,0,5,0,40,44,202,0,9,22,29, |
4,0,42,32,42,80,42,128,42,4,42,2,15,23,37,15,3,45,3,0,63,23,51,17,51,204, |
93,23,50,237,50,1,47,93,51,237,47,93,204,93,18,57,47,93,237,50,16,253,204, |
49,48,43,43,93,43,93,43,1,17,53,6,7,14,1,7,3,35,3,46,1,39,38,39,6,21,6,20, |
21,17,35,17,51,19,30,1,31,1,54,55,62,3,53,19,51,17,1,17,35,17,35,53,33,21, |
6,155,5,4,4,5,2,230,108,163,2,24,14,17,20,1,1,128,190,223,2,5,2,6,20,16,7, |
13,11,7,168,184,251,40,134,255,2,138,2,122,1,169,194,11,11,9,18,5,253,203, |
1,157,5,64,38,44,55,10,10,8,18,6,253,201,3,7,253,205,4,13,7,18,51,41,18,34, |
28,18,2,1,157,252,249,2,152,253,104,2,152,111,111,0,0,0,0,1,0,108,0,0,5,184, |
5,150,0,57,0,221,64,95,101,36,1,101,22,1,157,49,1,143,49,1,49,16,11,15,72, |
157,9,1,143,9,1,9,16,11,15,72,116,3,132,3,2,54,3,1,54,2,118,2,2,54,56,118, |
56,2,116,55,132,55,2,54,55,1,42,26,1,42,32,1,41,53,48,40,10,18,32,40,96,40, |
112,40,144,40,4,47,18,111,18,127,18,159,18,4,40,18,40,18,24,34,91,16,53,1, |
53,184,255,192,64,65,23,29,72,191,53,207,53,2,0,53,48,53,2,53,17,5,91,31, |
24,63,24,79,24,143,24,191,24,207,24,223,24,7,111,24,127,24,159,24,239,24, |
255,24,5,0,24,48,24,2,8,24,10,15,19,39,48,5,42,95,18,41,18,29,95,0,4,0,63, |
237,63,51,237,23,50,1,47,94,93,93,113,253,196,47,93,93,43,114,237,17,57,57, |
47,47,93,93,17,51,17,51,16,196,49,48,0,93,93,93,93,93,93,93,93,43,93,93,43, |
93,93,93,93,1,50,30,2,21,20,14,2,7,54,55,62,1,59,1,21,33,53,62,3,53,52,46, |
2,35,34,14,2,21,20,30,2,23,21,33,53,51,50,22,23,22,23,46,3,53,52,62,2,3,18, |
151,241,168,90,59,109,157,99,42,39,33,71,23,244,253,179,96,139,89,42,61,116, |
169,108,109,170,116,61,42,89,139,96,253,179,244,23,71,33,39,42,99,157,109, |
59,90,168,241,5,150,86,162,234,147,106,191,167,138,54,2,3,2,4,156,224,51, |
126,143,159,85,116,181,124,65,65,124,181,116,85,159,143,126,51,224,156,4, |
2,3,2,54,138,167,191,106,147,234,162,86,0,0,0,2,0,88,255,222,4,124,4,72,0, |
32,0,45,0,82,64,50,90,13,1,28,15,64,160,33,176,33,2,95,33,1,80,33,96,33,112, |
33,3,33,47,128,32,47,1,45,208,17,1,17,5,16,45,45,22,39,10,16,22,21,27,1,6, |
27,1,27,0,22,0,63,50,93,93,205,63,205,18,57,47,205,1,47,205,93,50,93,26,16, |
220,93,113,113,26,205,50,49,48,93,5,34,46,2,53,52,62,2,51,50,30,2,21,33,17, |
30,3,51,50,62,2,55,23,14,3,19,17,46,3,35,34,14,2,7,17,2,107,130,198,134,69, |
95,152,189,95,112,194,142,81,252,197,22,64,78,88,46,75,116,93,76,35,72,36, |
84,109,143,203,19,59,77,92,53,51,87,74,60,24,34,93,157,204,111,147,213,139, |
66,79,146,210,130,254,156,24,45,35,20,31,60,87,56,42,57,100,76,44,2,138,1, |
21,20,42,34,22,19,32,42,24,254,234,0,0,0,255,255,0,80,255,246,6,78,5,129, |
16,38,0,121,0,0,16,39,2,20,2,249,0,0,17,7,2,144,3,204,253,206,0,63,64,40, |
4,3,2,111,15,1,47,15,1,15,1,191,12,1,128,12,1,112,12,1,96,12,1,64,12,1,16, |
12,1,12,98,64,11,11,72,4,3,2,60,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93, |
53,17,93,93,53,53,53,0,0,0,255,255,0,61,255,246,6,78,5,141,16,39,2,20,2,249, |
0,0,16,39,2,144,3,204,253,206,17,6,0,115,34,0,0,63,64,40,1,3,2,111,49,1,47, |
49,1,49,0,191,1,1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,141,64,11,11,72, |
1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53, |
0,0,0,255,255,0,93,255,246,6,78,5,129,16,39,2,20,2,249,0,0,16,39,2,144,3, |
204,253,206,17,6,2,142,40,0,0,63,64,40,1,3,2,111,49,1,47,49,1,49,0,191,1, |
1,128,1,1,112,1,1,96,1,1,64,1,1,16,1,1,1,126,64,11,11,72,1,3,2,49,24,0,63, |
53,53,53,1,43,17,93,93,93,93,93,93,53,17,93,93,53,53,53,0,0,0,255,255,0,145, |
255,246,6,78,5,129,16,39,2,20,2,189,0,0,16,39,2,144,3,204,253,206,17,6,2, |
143,102,0,0,47,64,28,1,3,2,111,49,1,47,49,1,49,0,191,1,1,128,1,1,1,102,64, |
11,11,72,1,3,2,49,24,0,63,53,53,53,1,43,17,93,93,53,17,93,93,53,53,53,0,0, |
0,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3,128,16,7,17,16,0,47, |
205,1,47,205,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51,14, |
1,7,33,21,2,129,29,59,31,72,58,130,82,82,130,58,72,31,59,29,3,221,1,41,34, |
98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1,16,255,195,2,240,4,127, |
0,17,0,26,64,10,15,64,0,0,15,12,3,17,128,7,0,47,26,205,204,50,57,57,1,47, |
26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,35,1,213,34,98, |
65,68,112,42,36,42,112,68,65,98,34,86,3,160,29,59,31,72,58,130,82,82,130, |
58,72,31,59,29,252,35,0,1,1,162,0,100,6,94,2,68,0,17,0,24,64,9,0,15,12,3, |
128,7,17,16,17,0,47,205,1,47,221,26,204,50,57,57,49,48,1,46,1,39,51,30,1, |
23,21,14,1,7,35,62,1,55,33,53,5,127,29,59,31,72,58,130,82,82,130,58,72,31, |
59,29,252,35,1,127,34,98,65,68,112,42,36,42,112,68,65,98,34,86,0,0,0,1,1, |
16,255,195,2,240,4,127,0,17,0,26,64,10,17,64,16,15,0,3,12,128,8,16,0,47,221, |
26,204,50,57,57,1,47,26,205,49,48,37,62,1,55,21,14,1,7,35,46,1,39,53,30,1, |
23,17,51,2,43,34,98,65,68,112,42,36,42,112,68,65,98,34,86,162,29,59,31,72, |
58,130,82,82,130,58,72,31,59,29,3,221,0,0,1,1,162,0,100,6,94,2,68,0,31,0, |
36,64,15,16,31,28,19,128,23,64,15,0,3,12,128,8,0,15,0,47,205,1,47,26,204, |
50,57,57,26,221,26,204,50,57,57,49,48,1,30,1,23,35,46,1,39,53,62,1,55,51, |
14,1,7,33,46,1,39,51,30,1,23,21,14,1,7,35,62,1,55,2,129,29,59,31,72,58,130, |
82,82,130,58,72,31,59,29,2,254,29,59,31,72,58,130,82,82,130,58,72,31,59,29, |
1,41,34,98,65,68,112,42,36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112, |
68,65,98,34,0,0,0,1,1,16,255,195,2,240,4,127,0,31,0,38,64,16,15,64,0,31,16, |
19,28,128,24,64,0,15,12,3,128,7,0,47,26,204,50,57,57,26,221,26,204,50,57, |
57,1,47,26,205,49,48,1,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,213,34,98,65,68,112,42,36,42,112,68,65, |
98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,3,160,29,59,31,72,58,130,82, |
82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82,130,58,72,31,59,29,0, |
2,1,16,255,72,2,240,4,127,0,3,0,35,0,40,64,17,1,19,0,4,35,20,23,32,28,3,0, |
28,4,19,16,7,11,0,47,204,50,57,57,221,222,205,16,204,50,57,57,1,47,51,205, |
50,49,48,5,33,21,33,19,14,1,7,53,62,1,55,51,30,1,23,21,46,1,39,17,62,1,55, |
21,14,1,7,35,46,1,39,53,30,1,23,1,16,1,224,254,32,197,34,98,65,68,112,42, |
36,42,112,68,65,98,34,34,98,65,68,112,42,36,42,112,68,65,98,34,104,80,4,88, |
29,59,31,72,58,130,82,82,130,58,72,31,59,29,253,2,29,59,31,72,58,130,82,82, |
130,58,72,31,59,29,0,0,2,0,56,255,229,3,186,5,197,0,47,0,69,0,222,64,93,156, |
19,172,19,2,154,6,170,6,2,122,33,138,33,2,68,24,14,17,72,85,20,101,20,149, |
20,165,20,4,140,7,1,74,7,90,7,122,7,3,74,56,90,56,2,67,56,11,15,72,58,67, |
1,42,12,58,12,74,12,3,37,45,53,45,149,45,165,45,4,32,39,48,39,2,39,39,15, |
169,48,249,48,2,40,48,1,48,28,0,70,64,96,31,1,31,184,255,192,64,64,18,21, |
72,15,31,1,31,64,12,17,72,31,71,128,60,71,63,15,1,15,64,12,17,72,15,79,71, |
1,39,34,80,43,53,81,27,0,22,64,22,128,22,192,22,4,7,22,22,47,43,111,43,223, |
43,3,15,43,191,43,2,43,65,80,10,22,0,63,237,47,93,113,57,47,94,93,51,237, |
16,237,50,1,93,47,43,93,237,26,16,220,43,93,43,113,26,237,51,51,113,113,18, |
57,47,93,49,48,0,93,1,93,93,43,0,93,1,93,93,0,93,1,43,93,93,93,1,20,14,2, |
7,14,3,35,34,46,2,53,52,62,4,51,50,30,2,23,51,62,1,53,52,38,35,34,14,2,7, |
55,62,1,51,50,30,2,3,46,3,35,34,14,4,21,20,30,2,51,50,62,2,3,186,7,13,18, |
11,31,96,130,162,97,93,127,78,35,22,47,73,102,132,83,42,77,64,50,16,4,1,3, |
130,129,28,59,58,55,22,36,42,116,67,113,154,94,41,211,8,36,51,64,36,53,86, |
67,49,32,15,21,42,65,44,66,108,83,56,3,170,46,104,106,106,48,128,206,144, |
77,63,107,138,75,60,143,144,134,104,63,26,48,67,42,25,58,34,196,209,11,19, |
28,17,147,23,39,88,149,195,254,147,42,74,55,32,51,84,110,116,116,48,53,91, |
67,38,99,161,205,0,0,0,2,0,4,0,0,4,225,5,129,0,5,0,18,0,244,64,27,74,7,90, |
7,106,7,3,69,17,85,17,101,17,3,3,56,8,1,55,16,1,6,24,14,17,72,18,184,255, |
232,64,157,14,17,72,102,2,1,39,2,71,2,87,2,3,105,1,1,40,1,72,1,88,1,3,2,1, |
12,12,0,6,59,3,1,20,3,1,244,3,1,107,3,155,3,187,3,235,3,4,52,3,84,3,2,0,3, |
1,11,2,3,18,15,0,31,0,47,0,3,18,0,15,20,47,20,127,20,3,175,20,191,20,223, |
20,255,20,4,32,20,112,20,144,20,3,15,20,63,20,143,20,3,58,175,20,207,20,223, |
20,255,20,4,64,20,96,20,144,20,3,15,20,95,20,2,143,20,159,20,191,20,223,20, |
4,0,20,32,20,80,20,112,20,4,0,3,6,3,18,95,5,18,12,32,19,22,72,153,12,1,12, |
1,3,0,63,51,93,43,63,237,23,50,1,93,93,113,114,114,94,93,113,113,114,47,94, |
93,51,47,95,94,93,93,93,93,113,113,51,18,57,61,47,51,51,49,48,93,93,93,93, |
43,43,93,93,95,93,93,55,1,51,1,21,33,37,1,46,3,39,14,3,7,1,5,2,5,217,1,254, |
251,35,4,21,254,174,16,29,22,15,1,2,14,23,28,16,254,173,141,4,244,251,12, |
141,156,3,94,40,82,69,48,8,8,49,70,82,40,252,164,0,1,0,235,254,78,5,172,5, |
129,0,7,0,54,64,36,3,90,79,4,175,4,191,4,207,4,4,4,7,90,32,0,1,15,0,1,0,0, |
32,0,192,0,208,0,4,0,2,95,5,3,4,0,0,47,50,63,237,1,47,93,113,113,237,47,93, |
237,49,48,1,17,33,17,35,17,33,17,4,244,252,182,191,4,193,254,78,6,145,249, |
111,7,51,248,205,0,0,0,0,1,0,154,254,78,5,48,5,129,0,11,0,170,64,9,134,8, |
150,8,2,163,9,1,9,184,255,192,64,26,13,16,72,163,7,1,2,144,7,1,114,7,130, |
7,2,100,7,1,53,7,69,7,85,7,3,3,184,255,240,64,74,9,17,72,41,1,57,1,2,1,16, |
12,17,72,8,143,6,159,6,175,6,3,2,72,17,73,15,2,127,2,2,2,6,2,6,0,207,10,1, |
0,10,64,10,2,10,7,3,9,3,9,207,0,1,0,0,64,0,2,7,0,32,13,1,3,7,95,2,8,0,4,3, |
1,9,95,0,0,47,237,57,63,18,57,57,237,57,1,93,47,94,93,93,51,51,47,47,51,47, |
93,93,18,57,57,47,47,93,43,93,51,49,48,0,43,93,43,1,93,93,93,93,95,93,43, |
93,93,19,53,9,1,53,33,21,33,9,1,33,21,154,2,123,253,149,4,66,252,178,2,72, |
253,168,3,162,254,78,109,3,48,3,44,106,152,253,4,252,249,152,0,0,0,0,1,0, |
101,2,96,4,72,2,242,0,3,0,32,64,20,0,2,32,2,80,2,112,2,4,2,16,0,32,0,2,0, |
0,173,1,179,0,63,237,1,47,93,47,93,49,48,19,53,33,21,101,3,227,2,96,146,146, |
0,0,0,0,1,0,51,255,242,4,98,6,84,0,8,0,185,185,0,0,255,232,64,135,14,17,72, |
9,1,57,1,73,1,3,9,1,0,4,6,1,6,6,8,16,111,8,143,8,175,8,207,8,239,8,5,15,8, |
47,8,79,8,111,8,143,8,5,8,95,2,1,2,2,15,3,47,3,79,3,111,3,4,11,3,175,10,1, |
48,10,80,10,112,10,144,10,4,111,10,143,10,2,16,10,48,10,2,240,10,1,15,10, |
47,10,79,10,3,57,239,10,1,176,10,208,10,2,143,10,175,10,207,10,239,10,4,112, |
10,1,47,10,79,10,111,10,143,10,175,10,5,2,175,31,5,1,5,5,1,7,179,6,1,0,47, |
51,63,18,57,47,93,237,1,93,113,113,114,114,94,93,93,113,113,114,114,47,94, |
93,51,47,93,47,93,113,56,57,61,47,93,51,51,49,48,94,93,43,5,35,1,35,53,33, |
19,1,51,2,110,106,254,229,182,1,14,242,1,174,129,14,3,24,117,253,78,5,135, |
0,3,0,87,0,203,5,93,3,215,0,35,0,51,0,67,0,114,64,75,137,50,1,53,67,69,67, |
2,10,15,1,10,3,1,5,33,1,5,21,1,39,26,8,52,4,18,0,0,47,32,47,64,47,112,47, |
4,47,60,18,36,224,55,1,55,23,42,239,65,1,65,8,39,52,26,4,5,63,13,1,13,64, |
18,21,72,0,13,80,13,2,13,31,15,23,1,23,0,47,93,51,220,93,43,113,50,23,57, |
205,93,50,16,205,93,50,1,47,205,47,93,205,17,23,57,49,48,0,93,93,93,93,93, |
1,93,1,20,14,2,35,34,38,39,14,3,35,34,46,2,53,52,62,2,51,50,22,23,62,3,51, |
50,30,2,37,34,6,7,30,1,51,50,62,2,53,52,46,2,5,46,1,35,34,14,2,21,20,30,2, |
51,50,54,5,93,44,82,115,70,97,168,70,32,75,84,90,46,69,115,83,46,44,82,116, |
71,94,168,67,31,75,84,94,51,69,114,81,45,254,179,70,119,56,51,119,77,43,71, |
51,27,29,51,71,254,93,51,119,78,43,70,49,27,25,48,71,47,70,120,2,78,78,141, |
106,62,133,149,63,102,72,39,55,100,143,89,81,142,104,60,135,148,62,102,73, |
40,55,101,143,168,126,130,128,128,40,70,94,54,54,92,69,39,250,128,128,40, |
70,94,54,51,93,69,41,126,0,0,0,1,1,152,0,0,6,96,4,199,0,5,0,13,179,2,5,2, |
5,0,47,205,1,47,205,49,48,1,51,17,33,21,33,1,152,94,4,106,251,56,4,199,251, |
151,94,0,0,0,0,1,1,22,255,254,4,170,4,8,0,25,0,35,64,18,75,22,91,22,2,75, |
16,91,16,2,25,0,12,13,13,0,19,6,0,47,205,47,51,1,47,205,47,205,49,48,0,93, |
93,5,17,52,62,2,51,50,30,2,21,17,35,17,52,46,2,35,34,14,2,21,17,1,22,68,122, |
167,98,99,169,123,70,103,53,95,130,78,78,130,94,52,2,2,0,116,192,138,76,76, |
138,192,116,254,0,2,2,98,155,108,57,56,108,156,100,254,0,0,0,1,255,158,254, |
78,2,148,5,227,0,35,2,3,64,30,10,34,26,34,42,34,3,5,16,21,16,37,16,3,9,3, |
218,37,1,201,37,1,154,37,170,37,186,37,3,37,184,1,0,64,162,225,228,72,76, |
37,1,0,47,37,63,37,2,9,37,1,220,37,64,211,217,72,37,64,205,209,72,134,37, |
1,25,37,41,37,57,37,3,11,37,1,251,37,1,233,37,1,37,64,188,191,72,107,37,123, |
37,139,37,3,93,37,1,75,37,1,41,37,57,37,2,27,37,1,9,37,1,249,37,1,37,128, |
170,177,72,109,37,1,37,128,164,168,72,9,37,1,163,37,128,156,162,72,189,37, |
1,121,37,153,37,169,37,3,75,37,91,37,107,37,3,37,192,140,147,72,155,37,171, |
37,187,37,3,125,37,141,37,2,107,37,1,93,37,1,38,37,54,37,70,37,3,228,37,1, |
214,37,1,180,37,196,37,2,6,37,1,112,37,184,255,192,64,110,119,122,72,37,64, |
101,107,72,219,37,1,118,37,166,37,2,9,37,25,37,41,37,3,233,37,1,37,64,79, |
82,72,37,128,74,78,72,25,37,41,37,2,11,37,1,251,37,1,217,37,233,37,2,171, |
37,187,37,203,37,3,153,37,1,37,128,60,63,72,41,37,57,37,73,37,3,11,37,27, |
37,2,55,233,37,249,37,2,187,37,203,37,219,37,3,141,37,157,37,173,37,3,123, |
37,1,109,37,1,1,95,37,1,37,184,255,128,179,39,43,72,37,184,255,192,64,13, |
34,38,72,144,37,160,37,2,2,16,37,1,37,184,255,192,64,46,28,31,72,223,37,1, |
96,37,112,37,160,37,176,37,192,37,5,15,37,31,37,47,37,3,7,32,22,144,22,2, |
22,22,31,70,12,47,4,159,4,2,4,4,32,12,1,12,184,255,192,64,15,16,19,72,12, |
25,80,64,18,128,18,2,18,7,80,0,0,47,237,47,93,237,1,47,43,93,51,47,93,16, |
237,50,47,93,94,93,93,93,43,113,95,113,43,43,114,95,114,114,114,114,114,94, |
93,93,43,93,93,93,93,113,113,43,43,113,114,114,114,43,43,94,93,93,93,93,113, |
113,113,113,113,43,114,114,114,43,94,93,43,93,43,93,113,113,113,113,113,113, |
43,113,113,114,114,114,43,43,94,93,93,95,93,43,93,93,93,49,48,0,95,94,93, |
93,19,34,38,39,53,30,1,51,50,62,2,53,3,52,62,2,51,50,22,23,21,46,1,35,34, |
14,2,21,17,20,14,2,36,36,75,23,20,62,35,51,66,39,16,2,50,90,125,75,34,75, |
22,18,61,36,51,66,39,16,50,89,124,254,78,11,8,147,8,16,37,64,84,48,4,188, |
94,134,86,40,9,9,148,10,17,40,65,84,44,251,66,94,134,86,41,0,0,0,2,0,56,1, |
80,4,44,3,244,0,33,0,67,1,31,64,26,36,16,12,16,72,2,16,12,16,72,65,24,11, |
17,72,66,48,9,17,72,61,48,9,17,72,42,184,255,208,179,9,17,72,48,184,255,208, |
64,19,9,17,72,31,24,9,17,72,32,48,9,17,72,26,48,9,17,72,13,184,255,232,179, |
13,17,72,14,184,255,208,179,9,13,72,8,184,255,208,179,14,17,72,8,184,255, |
208,64,41,9,12,72,63,16,28,48,28,80,28,3,0,28,16,28,64,28,96,28,128,28,160, |
28,240,28,7,28,45,11,64,12,17,72,11,47,69,1,59,173,64,45,184,255,192,180, |
35,60,72,45,34,184,255,192,179,23,28,72,34,184,255,192,64,27,16,20,72,34, |
128,62,64,41,60,72,62,40,173,143,49,1,32,49,48,49,2,49,15,25,173,64,11,184, |
255,192,180,39,60,72,11,0,184,255,192,179,23,28,72,0,184,255,192,64,29,16, |
20,72,0,128,28,64,41,60,72,28,6,173,15,15,207,15,2,15,64,23,28,72,15,64,11, |
19,72,15,0,47,43,43,93,237,196,43,26,221,43,43,196,43,26,237,16,220,93,93, |
237,196,43,26,221,43,43,196,43,26,237,1,93,47,43,51,47,93,113,51,49,48,0, |
43,43,43,43,43,43,43,43,43,43,43,43,43,43,1,34,38,39,46,1,35,34,14,2,7,53, |
62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,34,38,39,46,1,35,34,14,2,7, |
53,62,1,51,50,30,2,23,30,3,51,50,54,55,21,14,3,3,40,69,145,73,65,107,45,38, |
65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51,23,69,123,52,32,59,61,68, |
40,69,145,73,65,107,45,38,65,60,56,29,50,132,81,40,80,77,75,37,21,50,51,51, |
23,69,123,52,32,59,61,68,2,246,43,26,22,23,12,22,33,21,144,37,47,13,21,27, |
13,8,15,14,8,51,43,149,23,30,19,8,254,90,44,26,23,24,12,23,32,21,141,38,46, |
13,20,26,13,8,15,14,8,50,42,147,23,32,19,8,0,1,0,65,0,55,4,36,5,16,0,19,0, |
162,64,108,53,2,1,58,11,1,60,12,1,42,12,1,3,3,6,7,10,11,2,11,0,17,16,13,12, |
1,12,12,11,1,2,4,9,19,100,14,116,14,2,80,14,1,2,48,14,1,0,14,16,14,32,14, |
96,14,4,14,4,111,9,127,9,2,95,9,111,9,2,9,16,7,8,173,9,0,1,2,3,4,4,173,17, |
6,31,5,47,5,95,5,111,5,223,5,5,5,10,11,12,13,4,80,9,208,9,2,15,9,1,9,0,47, |
93,93,23,51,222,93,50,50,237,23,50,16,237,50,50,1,47,93,113,51,47,93,113, |
95,113,113,51,18,23,57,16,135,192,192,192,192,16,135,192,192,192,192,49,48, |
1,95,93,93,93,93,1,3,35,19,35,53,33,19,33,53,33,19,51,3,33,21,33,3,33,21, |
1,192,152,145,151,237,1,55,190,254,11,2,61,154,143,152,1,21,254,162,191,2, |
29,1,88,254,223,1,33,148,1,108,148,1,36,254,220,148,254,148,148,0,0,0,0,3, |
0,100,0,244,4,71,4,80,0,3,0,7,0,11,0,49,64,27,11,7,2,8,4,0,8,173,9,9,1,5, |
173,63,4,1,4,0,173,15,1,31,1,63,1,3,1,0,47,93,237,47,93,237,17,57,47,237, |
1,47,51,51,47,51,51,49,48,19,53,33,21,1,53,33,21,1,53,33,21,100,3,227,252, |
29,3,227,252,29,3,227,3,188,148,148,253,56,148,148,1,100,148,148,0,0,0,2, |
0,63,0,0,4,36,4,207,0,6,0,10,0,123,185,0,5,255,216,64,17,18,22,72,3,40,18, |
22,72,0,40,18,22,72,137,0,1,1,184,255,216,64,63,18,22,72,134,1,1,10,48,2, |
80,2,2,0,2,16,2,32,2,64,2,96,2,128,2,160,2,7,2,7,7,0,64,12,15,72,0,8,173, |
7,79,6,95,6,143,6,3,6,64,2,80,2,128,2,3,2,1,0,80,4,128,4,2,4,0,25,47,93,51, |
51,205,93,205,93,24,47,237,1,47,43,51,47,47,93,113,51,49,48,0,93,43,93,43, |
43,43,19,53,1,21,9,1,21,5,53,33,21,65,3,227,252,166,3,90,252,27,3,227,2,119, |
205,1,139,154,254,168,254,168,153,236,145,145,0,0,2,0,65,0,0,4,36,4,207,0, |
6,0,10,0,121,185,0,1,255,216,64,17,18,22,72,3,40,18,22,72,6,40,18,22,72,137, |
6,1,5,184,255,216,64,62,18,22,72,134,5,1,9,48,6,80,6,2,0,6,16,6,32,6,64,6, |
96,6,128,6,160,6,7,6,7,0,64,12,15,72,0,8,173,7,6,5,64,4,80,4,128,4,3,4,79, |
0,95,0,143,0,3,0,80,2,128,2,2,2,0,25,47,93,205,93,205,93,51,51,24,47,237, |
1,47,43,51,47,93,113,51,49,48,0,93,43,93,43,43,43,55,53,9,1,53,1,21,1,53, |
33,21,65,3,90,252,166,3,227,252,29,3,227,236,153,1,88,1,88,154,254,117,205, |
253,137,145,145,0,0,0,0,2,0,157,0,0,4,55,4,129,0,4,0,9,0,35,64,18,105,9,121, |
9,2,105,7,121,7,2,6,4,5,0,2,8,5,0,0,47,205,47,205,1,47,205,221,205,49,48, |
0,93,93,51,17,9,1,17,37,33,17,9,1,157,1,205,1,205,252,182,2,250,254,131,254, |
131,2,123,2,6,253,250,253,133,82,2,6,1,170,254,86,0,0,0,0,1,0,100,0,180,4, |
71,2,242,0,5,0,19,183,5,170,0,2,0,4,173,1,0,47,237,47,1,47,47,237,49,48,55, |
17,33,21,33,17,100,3,227,252,174,180,2,62,146,254,84,0,0,0,1,2,34,253,154, |
3,210,6,170,0,23,0,29,182,4,32,8,11,72,9,0,184,1,0,180,1,19,12,6,1,0,47,47, |
205,205,1,47,237,204,49,48,43,1,35,17,52,55,54,51,50,22,21,20,6,35,34,39, |
46,1,39,38,35,34,7,6,21,2,181,147,84,82,128,63,75,51,37,30,13,8,26,20,33, |
16,36,9,6,253,154,7,86,196,123,123,63,48,40,52,10,4,24,22,39,39,35,105,0, |
0,0,1,1,5,253,154,2,181,6,170,0,28,0,32,185,0,4,255,224,180,8,11,72,12,2, |
184,1,0,180,28,24,17,7,0,0,47,47,205,205,1,47,253,204,49,48,43,1,51,17,20, |
7,14,1,35,34,46,2,53,52,62,2,51,50,23,30,1,23,22,51,50,55,54,53,2,34,147, |
90,40,103,62,30,50,37,20,14,23,31,18,33,26,5,21,15,31,16,37,8,7,6,170,248, |
168,205,125,56,54,16,29,39,24,20,34,24,14,16,2,23,20,37,41,31,106,0,0,0,1, |
255,246,2,37,5,181,2,182,0,3,0,22,180,3,5,0,4,0,184,1,2,177,1,252,0,63,237, |
17,1,51,17,51,49,48,3,53,33,21,10,5,191,2,37,145,145,0,0,1,1,216,253,147, |
2,105,7,72,0,3,0,24,187,0,2,1,0,0,3,1,6,180,4,3,254,0,250,0,63,63,1,16,246, |
237,49,48,1,51,17,35,1,216,145,145,7,72,246,75,0,0,0,1,2,141,253,147,5,181, |
2,182,0,5,0,34,178,2,7,3,186,1,0,0,0,1,6,179,6,5,254,3,184,1,2,177,0,252, |
0,63,237,63,1,16,246,237,17,51,49,48,1,33,21,33,17,35,2,141,3,40,253,105, |
145,2,182,145,251,110,0,0,0,1,255,246,253,147,3,30,2,182,0,5,0,34,187,0,2, |
1,0,0,5,1,6,181,6,0,6,4,254,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16,246, |
237,49,48,3,53,33,17,35,17,10,3,40,145,2,37,145,250,221,4,146,0,0,0,0,1,2, |
141,2,37,5,181,7,72,0,5,0,34,178,4,7,2,189,1,0,0,5,1,6,0,6,0,5,1,2,179,2, |
252,0,250,0,63,63,237,1,16,246,237,17,51,49,48,1,51,17,33,21,33,2,141,145, |
2,151,252,216,7,72,251,110,145,0,0,0,1,255,246,2,37,3,30,7,72,0,5,0,34,187, |
0,5,1,0,0,2,1,6,181,6,0,6,3,250,5,184,1,2,177,2,252,0,63,237,63,17,1,51,16, |
244,237,49,48,3,53,33,17,51,17,10,2,151,145,2,37,145,4,146,250,221,0,0,0, |
0,1,2,141,253,147,5,181,7,72,0,7,0,39,179,4,9,5,1,186,1,0,0,0,1,6,179,8,7, |
254,5,184,1,2,179,2,252,0,250,0,63,63,237,63,1,16,246,237,50,17,51,49,48, |
1,51,17,33,21,33,17,35,2,141,145,2,151,253,105,145,7,72,251,110,145,251,110, |
0,1,255,246,253,147,3,30,7,72,0,7,0,39,177,7,4,186,1,0,0,2,1,6,183,8,0,8, |
6,254,3,250,7,184,1,2,177,2,252,0,63,237,63,63,17,1,51,16,244,237,51,49,48, |
3,53,33,17,51,17,35,17,10,2,151,145,145,2,37,145,4,146,246,75,4,146,0,0,1, |
255,246,253,147,5,181,2,182,0,7,0,40,178,3,9,4,186,1,0,0,7,1,6,182,8,0,8, |
6,254,4,0,184,1,2,177,1,252,0,63,237,50,63,17,1,51,16,246,237,17,51,49,48, |
3,53,33,21,33,17,35,17,10,5,191,253,105,145,2,37,145,145,251,110,4,146,0, |
1,255,246,2,37,5,181,7,72,0,7,0,40,178,7,9,5,186,1,0,0,2,1,6,182,8,0,8,3, |
250,5,0,184,1,2,177,1,252,0,63,237,51,63,17,1,51,16,244,237,17,51,49,48,3, |
53,33,17,51,17,33,21,10,2,151,145,2,151,2,37,145,4,146,251,110,145,0,1,255, |
246,253,147,5,181,7,72,0,11,0,51,179,7,13,5,8,187,1,0,0,2,0,11,1,6,64,9,12, |
0,12,10,254,3,250,8,11,184,1,2,178,5,2,252,0,63,51,237,50,63,63,17,1,51,16, |
246,50,237,50,17,51,49,48,3,53,33,17,51,17,33,21,33,17,35,17,10,2,151,145, |
2,151,253,105,145,2,37,145,4,146,251,110,145,251,110,4,146,0,0,0,2,255,246, |
1,113,5,181,3,106,0,3,0,7,0,37,183,3,7,7,9,0,4,8,4,184,1,2,178,5,253,0,184, |
1,2,177,1,251,0,63,237,63,237,17,1,51,50,17,51,17,51,49,48,3,53,33,21,1,53, |
33,21,10,5,191,250,65,5,191,2,217,145,145,254,152,145,145,0,2,1,217,253,147, |
3,210,7,72,0,3,0,7,0,42,65,9,0,5,1,0,0,4,1,7,0,8,0,1,1,0,0,0,1,4,182,8,7, |
3,254,4,0,250,0,63,50,63,51,1,16,246,237,16,244,237,49,48,1,51,17,35,1,51, |
17,35,1,217,145,145,1,104,145,145,7,72,246,75,9,181,246,75,0,0,0,1,2,141, |
253,147,5,181,3,106,0,9,0,49,181,2,6,6,11,7,3,186,1,0,0,0,1,6,179,10,9,254, |
7,184,1,2,178,4,253,3,184,1,2,177,0,251,0,63,237,63,237,63,1,16,246,237,50, |
17,51,17,51,49,48,1,33,21,33,21,33,21,33,17,35,2,141,3,40,253,105,2,151,253, |
105,145,3,106,145,215,145,252,34,0,0,1,1,217,253,147,5,181,2,182,0,9,0,51, |
178,1,11,6,191,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,178,10,2,6,184,1,2,180,9, |
252,4,8,254,0,63,51,63,237,50,1,16,244,237,16,246,237,17,51,49,48,1,21,33, |
17,35,17,35,17,35,17,5,181,254,29,145,215,145,2,182,145,251,110,4,146,251, |
110,5,35,0,0,0,0,2,1,217,253,147,5,181,3,106,0,5,0,11,0,63,180,2,8,8,13,9, |
65,11,1,0,0,6,1,7,0,12,0,3,1,0,0,0,1,4,0,12,0,9,1,2,181,6,253,11,5,254,3, |
184,1,2,177,0,251,0,63,237,63,51,63,237,1,16,246,237,16,244,237,17,51,17, |
51,49,48,1,33,21,33,17,35,1,33,21,33,17,35,1,217,3,220,252,181,145,1,104, |
2,116,254,29,145,3,106,145,250,186,4,111,145,252,34,0,0,1,255,246,253,147, |
3,30,3,106,0,9,0,49,177,9,6,186,1,0,0,3,1,6,183,10,4,0,0,10,8,254,3,184,1, |
2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63,17,1,51,17,51,16,244,237, |
51,49,48,3,53,33,53,33,53,33,17,35,17,10,2,151,253,105,3,40,145,1,113,145, |
215,145,250,41,3,222,0,0,0,1,255,246,253,147,3,210,2,182,0,9,0,52,65,9,0, |
6,1,0,0,9,1,4,0,10,0,2,1,0,0,5,1,7,183,10,0,10,4,8,254,6,0,184,1,2,177,1, |
252,0,63,237,50,63,51,17,1,51,16,244,237,16,246,237,49,48,3,53,33,17,35,17, |
35,17,35,17,10,3,220,145,215,145,2,37,145,250,221,4,146,251,110,4,146,0,0, |
0,0,2,255,246,253,147,3,210,3,106,0,5,0,11,0,63,180,4,9,9,12,11,65,11,1,0, |
0,8,1,4,0,12,0,0,1,0,0,3,1,7,0,12,0,9,1,2,181,10,253,2,7,254,4,184,1,2,177, |
5,251,0,63,237,63,51,63,237,1,16,244,237,16,246,237,17,51,17,51,49,48,1,17, |
35,17,33,53,1,35,17,33,53,33,3,210,145,252,181,2,116,145,254,29,2,116,3,106, |
250,41,5,70,145,250,41,3,222,145,0,0,1,2,141,1,113,5,181,7,72,0,9,0,49,181, |
4,8,8,11,2,6,189,1,0,0,9,1,6,0,10,0,9,1,2,178,6,253,5,184,1,2,179,2,251,0, |
250,0,63,63,237,63,237,1,16,246,237,50,17,51,17,51,49,48,1,51,17,33,21,33, |
21,33,21,33,2,141,145,2,151,253,105,2,151,252,216,7,72,252,34,145,215,145, |
0,0,1,1,217,2,37,5,181,7,72,0,9,0,52,178,4,11,2,65,11,1,0,0,9,1,7,0,10,0, |
8,1,0,0,5,1,4,0,10,0,5,1,2,181,2,8,252,0,6,250,0,63,51,63,51,237,1,16,246, |
237,16,244,237,17,51,49,48,1,51,17,33,21,33,17,51,17,51,3,65,145,1,227,252, |
36,145,215,7,72,251,110,145,5,35,251,110,0,0,0,2,1,217,1,113,5,181,7,72,0, |
5,0,11,0,63,180,10,4,4,13,8,65,11,1,0,0,11,1,7,0,12,0,2,1,0,0,5,1,4,0,12, |
0,11,1,2,178,8,251,5,184,1,2,180,2,253,6,0,250,0,63,50,63,237,63,237,1,16, |
246,237,16,244,237,17,51,17,51,49,48,1,51,17,33,21,33,1,51,17,33,21,33,1, |
217,145,3,75,252,36,1,104,145,1,227,253,140,7,72,250,186,145,5,215,252,34, |
145,0,0,1,255,246,1,113,3,30,7,72,0,9,0,50,188,0,9,1,0,0,6,0,2,1,6,183,10, |
4,0,0,10,7,250,3,184,1,2,178,6,251,9,184,1,2,177,2,253,0,63,237,63,237,63, |
17,1,51,17,51,16,244,50,237,49,48,3,53,33,53,33,53,33,17,51,17,10,2,151,253, |
105,2,151,145,1,113,145,215,145,3,222,250,41,0,0,1,255,246,2,37,3,210,7,72, |
0,9,0,52,65,9,0,0,1,0,0,7,1,7,0,10,0,6,1,0,0,3,1,4,183,10,1,10,8,4,250,6, |
1,184,1,2,177,2,252,0,63,237,51,63,51,17,1,51,16,244,237,16,244,237,49,48, |
1,33,53,33,17,51,17,51,17,51,3,210,252,36,1,227,145,215,145,2,37,145,4,146, |
251,110,4,146,0,0,0,2,255,246,1,113,3,210,7,72,0,5,0,11,0,63,65,9,0,8,1,0, |
0,11,1,4,0,12,0,0,1,0,0,3,1,7,181,12,9,1,1,12,9,184,1,2,181,10,251,4,6,250, |
1,184,1,2,177,2,253,0,63,237,63,51,63,237,17,1,51,17,51,16,244,237,16,244, |
237,49,48,1,33,53,33,17,51,33,51,17,33,53,33,3,210,252,36,3,75,145,254,7, |
145,253,140,1,227,1,113,145,5,70,251,145,145,0,0,0,0,1,2,141,253,147,5,181, |
7,72,0,11,0,54,182,4,8,8,13,6,2,10,186,1,0,0,11,1,6,179,12,11,254,9,184,1, |
2,178,6,253,5,184,1,2,179,2,251,0,250,0,63,63,237,63,237,63,1,16,246,237, |
50,50,17,51,17,51,49,48,1,51,17,33,21,33,21,33,21,33,17,35,2,141,145,2,151, |
253,105,2,151,253,105,145,7,72,252,34,145,215,145,252,34,0,0,0,0,2,1,217, |
253,147,5,181,7,72,0,7,0,11,0,56,178,4,13,10,186,1,0,0,11,1,4,178,12,2,6, |
186,1,0,0,7,1,7,183,12,7,11,254,0,8,250,5,184,1,2,177,2,252,0,63,237,63,51, |
63,51,1,16,244,237,50,16,246,237,17,51,49,48,1,51,17,33,21,33,17,35,1,51, |
17,35,3,65,145,1,227,254,29,145,254,152,145,145,7,72,251,110,145,251,110, |
9,181,246,75,0,0,3,1,217,253,147,5,181,7,72,0,3,0,9,0,15,0,73,181,14,6,6, |
17,12,8,65,12,1,0,0,15,0,9,1,7,0,16,0,0,1,0,0,1,1,4,0,16,0,15,1,2,178,12, |
251,7,184,1,2,183,4,253,10,2,250,9,1,254,0,63,51,63,51,63,237,63,237,1,16, |
246,237,16,244,50,237,50,17,51,17,51,49,48,1,35,17,51,19,33,21,33,17,35,17, |
51,17,33,21,33,2,106,145,145,215,2,116,254,29,145,145,1,227,253,140,253,147, |
9,181,250,186,145,252,34,9,181,252,34,145,0,1,255,246,253,147,3,30,7,72,0, |
11,0,56,185,0,9,1,0,178,6,2,10,184,1,6,64,10,12,4,0,0,12,10,254,7,250,3,184, |
1,2,178,6,251,11,184,1,2,177,2,253,0,63,237,63,237,63,63,17,1,51,17,51,16, |
246,50,50,237,49,48,3,53,33,53,33,53,33,17,51,17,35,17,10,2,151,253,105,2, |
151,145,145,1,113,145,215,145,3,222,246,75,3,222,0,0,0,2,255,246,253,147, |
3,210,7,72,0,7,0,11,0,59,65,10,0,10,1,0,0,11,1,7,0,12,0,5,1,0,0,2,0,6,1,4, |
64,10,12,0,12,11,6,254,8,3,250,7,184,1,2,177,2,252,0,63,237,63,51,63,51,17, |
1,51,16,246,50,237,16,244,237,49,48,3,53,33,17,51,17,35,17,1,51,17,35,10, |
1,227,145,145,1,104,145,145,2,37,145,4,146,246,75,4,146,5,35,246,75,0,0,0, |
0,3,255,246,253,147,3,210,7,72,0,3,0,9,0,15,0,73,181,7,13,13,16,6,10,65,12, |
1,0,0,9,0,11,1,4,0,16,0,2,1,0,0,3,1,7,0,16,0,12,1,2,181,15,253,3,11,254,6, |
184,1,2,180,9,251,0,4,250,0,63,51,63,237,63,51,63,237,1,16,244,237,16,246, |
50,237,50,17,51,17,51,49,48,1,51,17,35,1,51,17,33,53,33,19,35,17,33,53,33, |
3,65,145,145,254,152,145,253,140,1,227,145,145,254,29,2,116,7,72,246,75,9, |
181,251,145,145,250,41,3,222,145,0,0,0,2,255,246,253,147,5,181,3,106,0,7, |
0,11,0,57,180,11,3,3,13,4,186,1,0,0,7,1,6,181,12,8,0,0,12,8,184,1,2,181,9, |
251,6,254,4,0,184,1,2,177,1,253,0,63,237,50,63,63,237,17,1,51,17,51,16,246, |
237,17,51,17,51,49,48,3,53,33,21,33,17,35,17,1,53,33,21,10,5,191,253,105, |
145,253,105,5,191,1,113,145,145,252,34,3,222,1,104,145,145,0,0,1,255,246, |
253,147,5,181,2,182,0,11,0,58,178,3,13,8,191,1,0,0,11,1,4,0,12,0,4,1,0,0, |
7,1,7,64,9,12,0,12,6,10,254,8,4,0,184,1,2,177,1,252,0,63,237,50,50,63,51, |
17,1,51,16,244,237,16,246,237,17,51,49,48,3,53,33,21,33,17,35,17,35,17,35, |
17,10,5,191,254,29,145,215,145,2,37,145,145,251,110,4,146,251,110,4,146,0, |
3,255,246,253,147,5,181,3,106,0,5,0,11,0,15,0,74,180,13,8,8,17,9,186,1,0, |
0,6,1,7,181,16,14,3,3,16,5,189,1,0,0,2,1,4,0,16,0,14,1,2,179,15,251,9,3,184, |
1,2,181,6,4,253,11,1,254,0,63,51,63,51,237,50,63,237,1,16,246,237,17,51,17, |
51,16,244,237,17,51,17,51,49,48,1,35,17,33,53,33,51,33,21,33,17,35,1,21,33, |
53,2,106,145,254,29,2,116,215,2,116,254,29,145,2,116,250,65,253,147,3,222, |
145,145,252,34,5,215,145,145,0,0,0,0,2,255,246,1,113,5,181,7,72,0,7,0,11, |
0,58,64,9,7,11,11,13,0,8,8,12,5,189,1,0,0,2,1,6,0,12,0,8,1,2,181,9,253,3, |
250,5,0,184,1,2,177,1,251,0,63,237,51,63,63,237,1,16,244,237,17,51,17,51, |
17,51,17,51,49,48,3,53,33,17,51,17,33,21,1,53,33,21,10,2,151,145,2,151,250, |
65,5,191,2,217,145,3,222,252,34,145,254,152,145,145,0,1,255,246,2,37,5,181, |
7,72,0,11,0,58,178,11,13,9,191,1,0,0,6,1,7,0,12,0,5,1,0,0,2,1,4,64,9,12,0, |
12,7,3,250,9,5,0,184,1,2,177,1,252,0,63,237,51,51,63,51,17,1,51,16,244,237, |
16,244,237,17,51,49,48,3,53,33,17,51,17,51,17,51,17,33,21,10,1,227,145,215, |
145,1,227,2,37,145,4,146,251,110,4,146,251,110,145,0,3,255,246,1,113,5,181, |
7,72,0,5,0,11,0,15,0,76,64,9,4,15,15,17,9,12,12,16,8,65,11,1,0,0,11,1,4,0, |
16,0,2,1,0,0,5,1,7,0,16,0,12,1,2,179,13,253,5,9,184,1,2,181,2,10,251,0,6, |
250,0,63,51,63,51,237,50,63,237,1,16,244,237,16,244,237,17,51,17,51,17,51, |
17,51,49,48,1,51,17,33,21,33,1,51,17,33,53,33,1,53,33,21,3,65,145,1,227,253, |
140,254,152,145,253,140,1,227,254,29,5,191,7,72,252,34,145,4,111,251,145, |
145,254,7,145,145,0,0,0,1,255,246,253,147,5,181,7,72,0,19,0,76,182,11,15, |
15,21,13,9,16,184,1,0,178,6,2,19,184,1,6,64,11,20,4,0,0,20,18,254,7,250,12, |
4,184,1,2,180,9,5,251,16,0,184,1,2,178,13,1,253,0,63,51,237,50,63,51,237, |
50,63,63,17,1,51,17,51,16,246,50,50,237,50,50,17,51,17,51,49,48,3,53,33,53, |
33,53,33,17,51,17,33,21,33,21,33,21,33,17,35,17,10,2,151,253,105,2,151,145, |
2,151,253,105,2,151,253,105,145,1,113,145,215,145,3,222,252,34,145,215,145, |
252,34,3,222,0,0,1,255,246,253,147,5,181,7,72,0,19,0,77,179,4,21,18,9,187, |
1,0,0,15,0,12,1,4,178,20,2,5,187,1,0,0,19,0,8,1,7,64,9,20,13,20,0,16,250, |
9,5,13,184,1,2,182,18,2,14,252,7,11,254,0,63,51,63,51,51,237,50,50,63,51, |
17,1,51,16,244,50,237,50,16,246,50,237,50,17,51,49,48,1,51,17,33,21,33,17, |
35,17,35,17,35,17,33,53,33,17,51,17,51,3,65,145,1,227,254,29,145,215,145, |
254,29,1,227,145,215,7,72,251,110,145,251,110,4,146,251,110,4,146,145,4,146, |
251,110,0,0,0,0,4,255,246,253,147,5,181,7,72,0,5,0,11,0,17,0,23,0,93,181, |
4,14,14,25,2,15,187,1,0,0,5,0,12,1,7,182,24,21,9,9,24,20,11,187,1,0,0,23, |
0,8,1,4,178,24,5,21,184,1,2,183,2,22,251,0,18,250,15,9,184,1,2,181,12,10, |
253,17,7,254,0,63,51,63,51,237,50,63,51,63,51,237,50,1,16,246,50,237,50,17, |
51,17,51,16,244,50,237,50,17,51,17,51,49,48,1,51,17,33,21,33,3,35,17,33,53, |
33,51,33,21,33,17,35,1,51,17,33,53,33,3,65,145,1,227,253,140,215,145,254, |
29,2,116,215,2,116,254,29,145,254,152,145,253,140,1,227,7,72,252,34,145,250, |
186,3,222,145,145,252,34,9,181,251,145,145,0,0,0,0,1,0,0,2,109,5,171,7,72, |
0,3,0,18,182,0,5,1,4,2,250,1,0,47,63,17,1,51,17,51,49,48,1,33,17,33,5,171, |
250,85,5,171,2,109,4,219,0,0,0,1,0,0,253,147,5,171,2,109,0,3,0,18,182,0,5, |
1,4,2,1,254,0,63,47,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253, |
147,4,218,0,0,0,1,0,0,253,147,5,171,7,72,0,3,0,19,183,0,5,1,4,2,250,1,254, |
0,63,63,17,1,51,17,51,49,48,1,33,17,33,5,171,250,85,5,171,253,147,9,181,0, |
0,1,0,0,253,147,2,214,7,72,0,3,0,17,182,1,4,0,2,250,1,254,0,63,63,1,47,17, |
51,49,48,1,33,17,33,2,214,253,42,2,214,253,147,9,181,0,0,0,0,1,2,213,253, |
147,5,171,7,72,0,3,0,17,182,0,5,1,2,250,1,254,0,63,63,1,47,17,51,49,48,1, |
33,17,33,5,171,253,42,2,214,253,147,9,181,0,0,0,0,42,0,103,253,245,5,171, |
6,163,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55, |
0,59,0,63,0,67,0,71,0,75,0,79,0,83,0,87,0,91,0,95,0,99,0,103,0,107,0,111, |
0,115,0,119,0,123,0,127,0,131,0,135,0,139,0,143,0,147,0,151,0,155,0,159,0, |
163,0,167,2,49,181,161,157,153,149,145,165,184,1,1,182,164,109,85,69,45,13, |
121,184,1,1,64,13,120,108,84,68,44,12,120,101,77,53,29,5,137,184,1,1,64,13, |
136,100,76,52,28,4,136,113,89,65,41,17,125,184,1,1,64,13,124,112,88,64,40, |
16,124,97,81,57,25,9,141,184,1,1,64,13,140,96,80,56,24,8,140,117,93,61,37, |
21,129,184,1,1,64,33,128,116,92,60,36,20,128,120,136,124,140,128,128,140, |
124,136,120,5,132,160,156,152,148,144,164,164,169,105,73,49,33,1,133,184, |
1,1,64,15,104,72,48,32,0,10,132,1,8,3,132,167,143,139,135,184,1,3,180,132, |
163,103,99,107,184,1,3,183,104,160,100,96,104,95,91,87,184,1,3,183,84,92, |
88,84,159,83,79,75,184,1,3,183,72,156,80,76,72,67,63,71,184,1,3,183,68,64, |
60,68,155,59,55,51,184,1,3,183,48,152,56,52,48,43,39,47,184,1,3,183,44,40, |
36,44,151,31,27,35,184,1,3,183,32,148,28,24,32,23,19,15,184,1,3,183,12,20, |
16,12,147,11,7,3,184,1,3,183,0,144,8,4,0,131,127,123,184,1,3,64,60,120,128, |
124,120,22,84,1,27,72,1,25,68,1,27,48,1,27,44,1,20,32,1,104,84,72,68,48,44, |
32,12,0,120,120,0,12,32,44,48,68,72,84,104,10,108,164,140,136,27,132,59,132, |
2,15,132,1,2,132,119,115,111,184,1,3,178,116,112,108,0,47,51,51,237,50,50, |
47,95,93,93,51,51,51,18,23,57,47,47,47,47,47,47,47,47,47,47,93,93,93,93,93, |
93,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50, |
50,17,51,51,16,237,50,50,17,51,51,51,16,237,50,50,50,17,51,51,16,237,50,50, |
17,51,51,51,16,237,50,50,50,16,237,50,50,50,1,47,95,94,93,51,51,51,51,51, |
237,50,50,50,50,50,17,51,47,51,51,51,51,51,18,23,57,47,47,47,47,47,17,51, |
51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50,50,50, |
17,51,51,51,51,51,16,237,50,50,50,50,50,17,51,51,51,51,51,16,237,50,50,50, |
50,50,17,51,51,51,51,51,16,237,50,50,50,50,50,16,237,50,50,50,50,50,49,48, |
19,51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7, |
51,21,35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51, |
21,35,37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,7,51,21, |
35,37,51,21,35,37,51,21,35,5,51,21,35,37,51,21,35,37,51,21,35,7,51,21,35, |
37,51,21,35,37,51,21,35,23,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,37, |
51,21,35,37,51,21,35,1,51,21,35,37,51,21,35,37,51,21,35,1,51,21,35,17,51, |
21,35,17,51,21,35,17,51,21,35,17,51,21,35,17,51,21,35,103,104,104,1,158,104, |
104,1,160,103,103,253,145,104,104,1,159,104,104,1,159,104,104,207,103,103, |
254,96,104,104,254,98,104,104,4,13,104,104,254,97,104,104,254,97,104,104, |
207,104,104,1,158,104,104,1,160,103,103,207,104,104,254,97,104,104,254,97, |
104,104,207,104,104,1,158,104,104,1,160,103,103,253,145,104,104,1,159,104, |
104,1,159,104,104,207,103,103,254,96,104,104,254,98,104,104,207,104,104,1, |
159,104,104,1,159,104,104,252,194,104,104,1,159,104,104,1,159,104,104,251, |
243,104,104,1,158,104,104,1,160,103,103,1,158,104,104,104,104,104,104,104, |
104,104,104,104,104,5,34,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96, |
96,99,96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,97,97,97,97,97, |
98,94,94,94,94,94,98,97,97,97,97,97,96,96,96,96,96,96,7,237,98,98,98,98,98, |
1,35,96,96,96,96,96,254,223,98,254,223,96,254,221,96,254,221,97,254,222,97, |
7,238,96,0,0,0,0,84,0,0,253,245,5,171,6,163,0,3,0,7,0,11,0,15,0,19,0,23,0, |
27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,83, |
0,87,0,91,0,95,0,99,0,103,0,107,0,111,0,115,0,119,0,123,0,127,0,131,0,135, |
0,139,0,143,0,147,0,151,0,155,0,159,0,163,0,167,0,171,0,175,0,179,0,183,0, |
187,0,191,0,195,0,199,0,203,0,207,0,211,0,215,0,219,0,223,0,227,0,231,0,235, |
0,239,0,243,0,247,0,251,0,255,1,3,1,7,1,11,1,15,1,19,1,23,1,27,1,31,1,35, |
1,39,1,43,1,47,1,51,1,55,1,59,1,63,1,67,1,71,1,75,1,79,0,0,19,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,55,51,21,35,55, |
51,21,35,55,51,21,35,55,51,21,35,55,51,21,35,5,51,21,35,37,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,37,51,21,35,5,51,21,35,39,51,21,35,39,51,21, |
35,39,51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,55,51,21,35,23,51,21,35,39,51,21,35,39,51,21,35,39, |
51,21,35,39,51,21,35,39,51,21,35,7,51,21,35,55,51,21,35,55,51,21,35,55,51, |
21,35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21, |
35,55,51,21,35,55,51,21,35,1,51,21,35,55,51,21,35,55,51,21,35,55,51,21,35, |
55,51,21,35,55,51,21,35,19,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23, |
51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,23,51,21,35,7,51,21,35,17,51,21, |
35,19,51,21,35,103,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,207,103,103,207,103,103,207,104,104,208,104,104, |
208,103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104, |
207,104,104,251,140,103,103,1,158,103,103,207,104,104,208,104,104,208,103, |
103,252,194,103,103,3,165,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104, |
104,208,103,103,103,104,104,207,104,104,208,104,104,208,104,104,207,104,104, |
207,104,104,103,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,251,243,103,103,207,103,103,207,103,103,207,104,104,208,104,104,208, |
103,103,252,90,104,104,207,104,104,207,104,104,208,104,104,208,104,104,207, |
104,104,207,104,104,103,103,103,103,104,104,103,103,103,103,104,104,103,103, |
103,103,104,104,103,103,103,103,104,104,103,103,103,103,103,103,104,104,5, |
34,98,98,98,98,98,98,98,98,98,98,98,97,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,96, |
96,96,96,96,96,96,96,96,96,96,99,96,96,96,96,96,96,96,96,96,96,96,96,97,97, |
97,97,97,97,97,97,97,97,97,98,94,94,94,94,94,94,94,94,94,94,94,98,97,97,97, |
97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,96,96,96,7,237,98,98,98, |
98,98,98,98,98,98,98,98,1,35,96,96,96,96,96,96,96,96,96,96,96,254,223,98, |
97,96,96,96,99,96,96,96,99,96,96,97,98,94,98,97,96,96,7,237,98,1,35,96,0, |
0,67,0,0,253,147,5,213,6,163,0,73,0,77,0,81,0,85,0,89,0,93,0,97,0,101,0,105, |
0,109,0,113,0,117,0,121,0,125,0,129,0,133,0,137,0,141,0,145,0,149,0,153,0, |
157,0,161,0,165,0,169,0,173,0,177,0,181,0,185,0,189,0,193,0,197,0,201,0,205, |
0,209,0,213,0,217,0,221,0,225,0,229,0,233,0,237,0,241,0,245,0,249,0,253,1, |
1,1,5,1,9,1,13,1,17,1,21,1,25,1,29,1,33,1,37,1,41,1,45,1,49,1,53,1,57,1,61, |
1,65,1,69,1,73,1,77,1,81,0,0,1,33,17,51,53,35,17,51,53,35,17,51,53,35,17, |
51,53,35,17,51,53,35,17,51,53,51,21,51,53,51,21,51,53,51,21,51,53,51,21,51, |
53,51,21,51,53,51,21,51,53,51,21,35,21,51,17,35,21,51,17,35,21,51,17,35,21, |
51,17,35,21,51,17,35,21,51,1,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53, |
23,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,7,21,51,53,51,21,51,53,51, |
21,51,53,51,21,51,53,5,35,21,51,55,21,51,53,51,21,51,53,51,21,51,53,5,21, |
51,53,33,21,51,53,7,53,35,21,37,21,51,53,19,53,35,21,35,53,35,21,35,53,35, |
21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51,21,51,53,19,53,35,21, |
35,53,35,21,35,53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,51,21,51,53,51, |
21,51,53,19,35,21,51,39,35,21,51,39,35,21,51,39,35,21,51,1,35,21,51,39,35, |
21,51,39,35,21,51,39,35,21,51,1,21,51,53,51,21,51,53,23,35,21,51,39,35,21, |
51,7,21,51,53,51,21,51,53,7,35,21,51,55,21,51,53,5,21,51,53,23,53,35,21,23, |
53,35,21,35,53,35,21,7,21,51,53,51,21,51,53,19,53,35,21,35,53,35,21,7,21, |
51,53,51,21,51,53,19,35,21,51,39,35,21,51,19,35,21,51,39,35,21,51,5,213,250, |
43,106,106,106,106,106,106,106,106,106,106,106,107,106,107,106,107,107,107, |
107,107,106,107,106,107,107,107,107,107,107,107,107,107,107,107,107,107,250, |
149,107,106,107,106,107,107,107,107,107,107,214,107,107,214,106,106,213,106, |
106,213,107,106,107,106,107,107,107,253,234,106,106,107,106,107,107,107,107, |
252,170,107,1,63,107,213,107,1,171,107,107,107,107,107,107,106,107,106,107, |
107,106,107,106,107,107,107,107,107,107,107,107,106,107,106,107,107,106,107, |
106,107,107,107,107,107,107,214,107,107,214,106,106,213,106,106,2,22,107, |
107,214,107,107,213,107,107,213,107,107,2,235,107,106,107,106,106,106,213, |
106,106,213,107,106,107,107,106,106,107,106,254,86,107,213,107,213,106,107, |
106,107,107,106,107,106,106,107,106,107,107,106,107,106,106,106,213,106,106, |
107,107,107,213,107,107,253,147,1,34,97,1,34,97,1,35,96,1,33,98,1,33,98,1, |
33,96,96,96,96,96,96,96,96,96,96,96,96,96,193,98,254,223,96,254,221,96,254, |
221,96,254,221,94,254,221,96,6,106,96,96,96,96,96,96,96,96,192,98,98,98,98, |
98,98,98,97,96,96,96,96,96,96,96,96,192,96,96,96,96,96,96,96,96,195,96,96, |
96,96,96,96,96,96,96,96,254,223,97,97,97,97,97,97,97,97,98,94,94,94,94,94, |
94,94,94,254,223,97,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96,96,6,205, |
98,98,98,98,98,98,98,1,34,98,98,98,98,98,98,98,254,223,96,96,96,96,192,98, |
98,98,97,96,96,96,96,192,96,96,96,96,195,96,96,96,96,96,193,97,97,97,97,98, |
94,94,94,94,254,223,97,97,97,97,96,96,96,96,96,6,205,98,98,98,1,34,98,98, |
98,0,0,0,0,1,0,123,0,117,4,90,4,84,0,3,0,0,19,33,17,33,123,3,223,252,33,4, |
84,252,33,0,0,2,0,6,0,0,4,207,4,201,0,3,0,7,0,21,183,7,1,4,0,4,0,5,3,0,47, |
205,221,205,1,47,205,221,205,49,48,19,33,17,33,19,17,33,17,6,4,201,251,55, |
76,4,49,4,201,251,55,4,125,251,207,4,49,0,0,1,0,109,1,127,2,105,3,123,0,3, |
0,26,64,13,3,48,2,1,15,2,31,2,2,8,2,1,2,0,47,205,1,47,94,93,93,205,49,48, |
1,33,17,33,2,105,254,4,1,252,1,127,1,252,0,0,0,2,0,109,1,127,2,105,3,123, |
0,3,0,7,0,34,64,17,5,3,6,48,2,1,15,2,31,2,2,8,2,7,1,6,2,0,47,205,221,205, |
1,47,94,93,93,205,221,205,49,48,1,33,17,33,3,17,33,17,2,105,254,4,1,252,76, |
254,156,1,127,1,252,254,80,1,98,254,158,0,0,0,0,1,0,0,0,0,8,0,2,104,0,3,0, |
0,17,33,17,33,8,0,248,0,2,104,253,152,0,0,0,1,1,158,0,0,6,76,4,174,0,2,0, |
0,33,9,1,1,158,2,88,2,86,4,174,251,82,0,0,1,1,145,255,229,6,90,4,172,0,2, |
0,0,9,2,1,145,4,201,251,55,4,172,253,158,253,155,0,1,1,158,255,229,6,76,4, |
147,0,2,0,0,9,2,6,76,253,170,253,168,4,147,251,82,4,174,0,1,1,145,255,229, |
6,90,4,172,0,2,0,0,1,17,1,6,90,251,55,4,172,251,57,2,101,0,0,2,0,8,0,0,3, |
238,5,160,0,5,0,9,0,37,64,20,134,7,1,9,0,5,16,5,2,5,7,31,2,1,2,6,3,4,8,1, |
0,47,51,63,51,1,47,93,51,47,93,51,49,48,93,33,35,9,1,51,9,4,2,35,82,254,55, |
1,201,82,1,203,254,14,254,158,1,98,1,96,2,207,2,209,253,49,2,53,253,203,253, |
194,2,62,0,2,0,167,0,162,4,46,4,41,0,19,0,39,0,46,64,28,68,37,84,37,2,75, |
33,91,33,2,75,27,91,27,2,68,23,84,23,2,30,10,20,0,25,15,35,5,0,47,205,220, |
205,1,47,205,220,205,49,48,93,93,93,93,19,52,62,2,51,50,30,2,21,20,14,2,35, |
34,46,2,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,167,70,122,164,94,94, |
165,123,71,71,123,165,94,94,164,122,70,86,57,98,133,76,76,134,99,58,58,99, |
134,76,76,133,98,57,2,100,94,165,123,71,71,123,165,94,94,164,122,70,70,122, |
164,94,76,132,99,57,57,99,132,76,76,134,99,58,58,99,134,0,0,0,0,1,0,178,0, |
137,4,35,3,250,0,23,0,17,182,8,16,12,15,0,1,0,0,47,93,205,1,47,205,49,48, |
1,50,23,30,1,23,30,1,21,20,7,6,35,34,39,38,53,52,54,55,62,1,55,54,2,106,110, |
107,53,82,29,29,31,129,129,183,182,129,129,30,29,29,83,52,108,3,250,57,28, |
82,52,54,110,57,183,129,129,129,129,183,58,109,54,52,82,28,57,0,0,0,2,0,41, |
0,0,4,172,4,131,0,3,0,23,0,21,183,14,2,4,1,19,1,9,0,0,47,205,221,205,1,47, |
205,221,205,49,48,51,17,33,17,1,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2, |
41,4,131,252,4,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69,4, |
131,251,125,2,65,91,160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0, |
3,0,41,0,0,4,172,4,131,0,3,0,23,0,43,0,34,64,14,4,24,1,14,34,2,1,19,29,0, |
9,39,1,0,0,47,221,221,206,16,221,206,1,47,221,221,206,16,221,206,49,48,51, |
17,33,17,1,52,62,2,51,50,30,2,21,20,14,2,35,34,46,2,39,20,30,2,51,50,62,2, |
53,52,46,2,35,34,14,2,41,4,131,252,81,58,99,133,75,75,133,99,58,58,99,133, |
75,75,133,99,58,77,69,120,160,91,91,161,120,69,69,120,161,91,91,160,120,69, |
4,131,251,125,2,65,75,133,99,58,58,99,133,75,75,133,99,58,58,99,133,75,91, |
160,120,69,69,120,160,91,91,161,120,69,69,120,161,0,0,2,0,115,1,133,2,99, |
3,117,0,18,0,34,0,21,183,19,0,27,11,31,6,23,15,0,47,205,220,205,1,47,205, |
220,205,49,48,1,20,6,7,14,1,35,34,39,46,1,53,52,55,54,51,50,23,22,7,52,39, |
38,35,34,7,6,21,20,23,22,51,50,55,54,2,99,37,37,37,86,51,101,75,35,37,72, |
74,102,103,71,74,76,51,51,70,70,51,51,51,49,72,72,49,51,2,125,53,86,37,35, |
37,72,37,86,53,102,72,74,74,71,103,70,51,51,51,51,70,69,54,49,49,54,0,0,0, |
5,1,177,255,229,6,121,4,172,0,17,0,33,0,45,0,57,0,68,0,147,64,93,20,32,36, |
32,116,32,3,20,28,36,28,116,28,3,27,24,43,24,123,24,3,27,20,43,20,123,20, |
3,68,34,40,63,52,46,40,46,40,46,8,18,31,0,1,0,26,8,49,37,43,55,43,62,58,104, |
58,1,89,58,1,71,58,1,25,58,1,58,60,65,15,43,95,43,111,43,3,8,65,64,9,14,72, |
43,65,43,65,4,22,15,13,1,13,30,4,0,47,205,220,93,205,18,57,57,47,47,43,94, |
93,16,205,51,93,93,93,93,17,51,17,51,16,205,50,1,47,205,220,93,205,18,57, |
57,47,47,16,205,51,16,205,51,49,48,0,93,93,93,93,1,20,7,6,35,34,39,38,53, |
52,54,55,54,51,50,23,30,1,7,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54,1, |
20,6,35,34,38,53,52,54,51,50,22,5,20,6,35,34,38,53,52,54,51,50,22,1,22,51, |
50,55,23,6,35,34,38,39,6,121,180,179,253,253,179,180,90,90,178,254,254,178, |
90,90,90,153,151,218,218,151,153,153,152,217,217,152,153,253,90,46,32,32, |
45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,234,76,147,145,76,62,98, |
185,94,141,48,2,72,254,178,179,179,178,254,128,215,91,178,178,91,215,128, |
217,153,154,154,153,217,216,153,154,154,153,1,87,32,46,46,32,32,45,45,32, |
32,46,46,32,32,45,45,254,191,137,137,35,186,95,91,0,0,4,1,209,255,229,6,153, |
4,172,0,17,0,29,0,41,0,52,0,96,64,55,42,18,24,47,36,30,24,30,24,30,0,8,39, |
27,21,33,21,48,52,104,52,1,89,52,1,75,52,1,61,52,1,52,50,45,15,21,31,21,95, |
21,111,21,4,8,79,45,95,45,2,21,45,21,45,13,4,0,47,204,57,57,47,47,93,94,93, |
16,206,51,93,93,93,93,17,51,17,51,16,206,50,1,47,205,57,57,47,47,16,206,51, |
16,206,51,49,48,1,20,7,6,35,34,39,38,53,52,54,55,54,51,50,23,30,1,5,52,38, |
35,34,6,21,20,22,51,50,54,37,52,38,35,34,6,21,20,22,51,50,54,1,30,1,51,50, |
55,39,6,35,34,39,6,153,180,179,253,253,179,180,90,90,178,254,254,178,90,90, |
253,0,46,32,32,45,45,32,32,46,1,211,44,32,32,47,47,32,32,44,253,174,48,141, |
94,185,98,62,76,145,147,76,2,72,254,178,179,179,178,254,128,215,91,178,178, |
91,215,1,32,45,45,32,32,46,46,32,32,45,45,32,32,46,46,254,220,91,95,186,35, |
137,137,0,2,1,70,255,115,6,14,4,59,0,51,0,70,0,139,185,0,47,255,240,64,13, |
11,14,72,52,46,1,52,36,1,119,35,1,35,184,255,240,64,77,11,14,72,21,16,11, |
14,72,59,20,1,59,9,1,8,16,11,14,72,59,47,1,52,35,1,52,21,1,59,8,1,66,143, |
13,223,13,2,112,13,1,63,13,1,32,13,1,13,57,43,62,128,31,208,31,224,31,3,127, |
31,1,48,31,1,47,31,1,31,52,15,51,63,51,79,51,3,8,51,0,47,94,93,205,220,93, |
93,93,93,205,1,47,205,220,93,93,93,93,205,49,48,0,93,93,93,93,1,43,93,93, |
43,43,93,93,93,43,1,51,21,30,3,23,55,23,7,30,1,23,51,21,35,14,1,7,23,7,39, |
14,1,7,14,1,7,21,35,53,46,1,39,7,39,55,46,1,39,35,53,51,54,55,39,55,23,62, |
1,55,23,34,6,7,6,21,20,23,30,1,51,50,55,54,53,52,39,46,1,3,137,66,32,57,54, |
53,29,186,45,184,45,44,3,215,215,8,44,40,184,49,182,31,55,23,24,58,34,66, |
63,110,48,188,43,182,40,46,8,215,215,12,80,180,40,189,57,112,54,31,69,117, |
48,98,98,48,117,69,139,96,99,99,49,117,4,59,217,3,12,21,32,22,182,45,184, |
59,113,57,62,60,110,51,188,43,182,23,32,11,9,12,5,217,217,9,46,35,180,45, |
184,51,111,63,62,128,95,184,49,182,40,44,6,61,50,48,100,136,137,98,50,47, |
97,97,138,137,99,48,50,0,0,0,2,1,218,0,80,4,38,4,129,0,28,0,47,0,98,64,62, |
22,18,25,0,0,5,15,43,1,239,43,255,43,2,43,15,14,1,14,0,34,1,224,34,240,34, |
2,34,5,22,25,19,0,28,16,28,80,28,3,28,0,39,1,240,39,1,39,18,0,0,128,0,2,8, |
0,29,64,37,40,72,29,10,0,47,205,43,220,94,93,50,205,113,114,47,93,51,205, |
50,1,47,205,113,114,220,93,205,113,114,17,57,47,51,205,50,49,48,1,46,1,39, |
38,53,52,55,62,1,51,50,23,22,21,20,7,6,7,21,33,21,33,17,35,17,33,53,33,19, |
34,7,14,1,21,20,22,23,22,51,50,55,54,53,52,38,39,38,2,220,55,90,35,71,83, |
44,101,60,118,83,86,72,72,106,1,0,255,0,74,254,254,1,2,35,83,62,29,31,31, |
29,62,83,87,59,61,30,29,62,2,66,8,46,42,80,108,122,83,43,43,86,83,122,109, |
81,82,12,166,70,254,250,1,6,70,2,145,59,31,71,44,43,71,31,62,62,61,84,44, |
71,31,59,0,2,1,81,0,250,4,175,4,129,0,65,0,81,0,70,64,40,49,65,59,15,78,1, |
78,63,32,1,32,15,51,1,51,0,70,1,70,59,65,49,63,74,0,55,128,55,2,55,66,144, |
20,1,20,15,63,1,8,63,0,47,94,93,204,93,205,220,93,205,18,57,57,1,47,205,114, |
220,93,204,93,205,114,18,57,57,49,48,1,46,1,39,46,1,39,46,1,53,52,55,62,1, |
51,50,22,23,30,1,51,50,54,55,54,51,50,21,20,7,14,1,21,20,22,23,30,1,21,20, |
6,7,6,35,34,39,46,1,39,7,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,7, |
34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,3,255,17,54,37,28,40,14,5,3,6, |
3,6,5,5,15,13,32,63,32,46,64,19,36,13,16,6,9,7,4,8,2,2,2,2,9,5,21,20,22,31, |
11,237,84,86,87,118,118,87,84,84,85,122,71,83,154,90,62,61,61,64,88,89,60, |
62,62,60,4,0,5,18,14,11,24,14,3,10,5,8,9,2,2,2,2,8,9,7,6,12,14,9,18,34,79, |
45,31,64,34,11,16,5,5,7,3,6,39,42,82,42,238,81,109,125,86,88,84,84,117,117, |
87,86,43,32,62,61,88,91,61,61,61,62,90,87,62,62,0,0,1,0,59,0,0,4,5,4,207, |
0,47,0,40,64,25,38,32,10,48,10,96,10,112,10,4,10,14,34,64,8,11,72,34,23,79, |
0,95,0,2,0,0,47,93,47,47,43,51,1,47,93,47,49,48,1,30,1,23,30,1,23,22,23,22, |
21,20,7,6,35,34,39,22,23,30,1,31,1,33,55,50,55,62,3,39,14,1,35,34,39,38,53, |
52,55,62,1,55,62,1,55,54,2,32,14,40,26,28,95,69,141,35,37,63,66,88,157,99, |
3,36,38,163,137,8,252,232,6,125,86,43,66,44,20,1,45,132,83,90,66,63,30,23, |
78,57,69,110,38,56,4,207,54,95,44,43,105,63,126,66,67,70,95,63,66,191,147, |
87,86,99,9,37,37,49,25,69,91,119,75,96,95,66,63,91,74,59,42,85,47,59,113, |
57,83,0,0,0,0,1,0,60,0,0,5,4,4,199,0,75,0,47,64,24,57,77,63,23,1,23,52,61, |
67,13,47,30,4,18,31,18,1,27,18,27,18,1,41,1,0,47,47,18,57,57,47,47,93,18, |
23,57,50,51,1,47,93,16,206,49,48,41,1,55,62,1,55,62,1,55,54,53,52,38,53,6, |
7,14,1,35,34,38,39,38,53,52,55,54,51,50,22,23,46,1,39,46,1,53,52,55,62,1, |
51,50,23,22,21,20,7,54,55,62,1,51,50,22,23,22,21,20,7,6,35,34,38,39,46,1, |
39,30,1,23,30,1,23,22,23,4,70,252,182,8,84,108,27,41,64,26,52,2,58,90,43, |
88,45,59,97,41,79,73,73,93,31,80,51,20,27,8,5,6,78,40,97,60,116,80,80,69, |
84,16,14,30,17,51,86,36,73,80,80,112,62,132,50,17,43,26,3,23,23,22,67,46, |
61,159,35,17,33,17,25,75,50,100,109,8,22,17,121,59,28,30,42,38,83,116,115, |
79,80,25,26,34,52,19,17,38,20,115,78,38,40,80,78,109,86,98,40,3,5,3,37,41, |
76,116,118,83,80,60,51,19,61,45,81,125,46,45,76,31,39,30,0,1,0,102,255,233, |
4,90,4,121,0,39,0,38,64,23,18,2,1,4,2,1,8,29,41,16,12,64,12,80,12,112,12, |
128,12,5,12,16,0,0,47,47,1,47,93,16,206,49,48,94,93,93,5,46,1,39,46,1,39, |
46,1,39,46,1,53,52,55,54,51,50,23,30,1,23,62,1,51,50,22,23,22,21,20,7,14, |
1,7,14,1,7,14,1,2,98,14,42,26,28,103,76,56,69,14,43,37,68,70,102,98,78,28, |
47,17,34,142,88,50,85,35,70,41,20,78,60,75,108,32,31,44,23,56,101,48,50,147, |
102,76,93,22,65,106,56,103,71,70,72,28,80,54,119,117,36,34,70,94,86,88,45, |
119,75,96,152,55,54,110,0,0,0,0,1,0,66,255,231,3,210,4,199,0,26,0,18,183, |
48,12,1,12,75,21,1,21,0,25,47,93,1,47,93,49,48,1,30,1,23,30,1,23,14,1,7,14, |
1,7,46,1,39,46,1,39,46,1,39,62,1,55,62,1,2,7,45,113,69,69,116,47,39,120,83, |
69,106,40,13,35,22,38,98,60,14,94,81,50,128,80,59,96,4,199,78,165,93,93,141, |
53,40,150,111,93,159,72,25,58,32,57,135,80,20,119,99,59,160,107,77,148,0, |
0,1,0,196,0,29,3,59,4,129,0,33,0,48,64,25,2,19,33,13,64,79,6,95,6,111,6,3, |
6,128,27,33,18,10,10,47,0,1,0,31,24,0,47,205,204,93,57,47,57,1,47,205,26, |
220,93,26,205,16,205,50,49,48,1,51,21,23,30,1,21,20,6,7,35,62,1,53,52,38, |
39,38,39,17,20,6,7,6,35,34,38,53,52,55,54,51,50,23,1,233,76,153,51,58,48, |
46,47,29,28,28,29,57,64,37,37,72,108,57,58,60,63,80,44,46,4,129,100,193,69, |
163,85,78,134,59,65,124,59,60,99,40,81,9,254,6,63,98,38,75,54,46,73,60,60, |
19,0,2,1,16,255,213,4,239,4,135,0,34,0,38,0,108,64,61,35,32,64,18,26,128, |
36,15,64,111,0,1,0,128,15,9,1,9,9,0,26,1,26,17,35,86,35,1,67,35,1,35,16,36, |
54,36,1,37,36,1,20,36,1,3,36,1,8,36,34,38,33,88,33,1,33,37,34,30,23,13,6, |
0,47,205,47,205,47,51,51,93,17,51,17,51,94,93,93,93,93,17,51,51,93,93,17, |
51,1,47,93,51,47,93,26,221,93,26,205,50,26,16,221,26,205,51,49,48,1,20,6, |
7,14,1,35,34,38,53,52,55,54,51,50,23,17,5,17,20,6,7,6,35,34,38,53,52,55,54, |
51,50,23,17,37,1,37,53,5,4,239,36,38,37,88,51,57,57,57,62,81,48,42,253,218, |
37,35,74,106,57,58,59,60,84,45,45,2,186,253,144,2,38,253,218,1,68,63,101, |
35,37,39,54,47,76,57,59,18,1,192,149,254,118,62,98,38,74,53,45,76,57,60,19, |
2,240,178,254,103,149,117,152,0,0,0,3,0,29,0,0,3,118,5,204,0,27,0,31,0,35, |
0,100,179,67,10,1,10,184,255,224,64,59,8,12,72,31,35,70,28,47,32,143,32,207, |
32,3,31,32,79,32,111,32,143,32,4,32,79,16,95,16,2,16,16,1,70,144,2,1,111, |
2,1,2,34,15,31,83,30,0,19,80,12,0,0,4,80,25,5,15,32,1,21,0,63,51,63,51,237, |
50,63,237,63,237,63,1,47,93,93,237,50,47,93,47,93,113,51,237,50,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,53,51,21,3,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18, |
40,51,29,11,211,134,180,180,180,3,183,252,73,3,183,131,122,59,101,75,43,6, |
6,137,3,5,22,41,60,39,97,131,1,105,172,172,250,224,4,58,251,198,0,0,0,0,2, |
0,29,0,0,3,119,5,204,0,27,0,31,0,90,179,67,10,1,10,184,255,224,64,53,8,12, |
72,31,70,47,28,143,28,207,28,3,31,28,79,28,111,28,143,28,4,28,79,16,95,16, |
2,16,16,1,70,144,2,1,111,2,1,2,30,0,19,80,12,0,0,4,80,25,5,15,28,1,21,0,63, |
51,63,51,237,50,63,237,63,1,47,93,93,237,50,47,93,47,93,113,237,49,48,0,43, |
93,1,17,35,17,35,53,51,53,52,62,2,51,50,22,23,21,46,1,35,34,14,2,29,1,51, |
21,19,17,51,17,1,105,180,152,152,22,59,102,81,32,69,26,17,45,18,40,51,29, |
11,211,135,180,3,183,252,73,3,183,131,122,59,101,75,43,6,6,137,3,5,22,41, |
60,39,97,131,252,73,5,204,250,52,0,0,1,0,119,254,78,1,227,255,170,0,28,0, |
75,185,0,2,255,232,179,9,17,72,27,184,255,224,64,40,9,17,72,22,22,8,16,131, |
15,0,1,95,0,1,0,8,19,140,63,23,79,23,2,23,11,140,0,5,16,5,32,5,80,5,96,5, |
112,5,6,5,0,47,93,237,47,93,237,1,47,221,93,113,237,18,57,47,49,48,43,43, |
5,20,14,2,35,34,38,39,53,22,51,50,62,2,53,52,38,35,42,1,7,55,51,50,30,2,1, |
227,30,65,104,75,20,45,25,49,37,41,56,35,15,61,72,14,29,14,31,62,52,84,60, |
32,253,41,67,48,25,1,3,98,6,12,21,30,18,37,40,2,96,18,41,63,0,0,0,255,255, |
0,243,1,190,1,182,2,154,17,6,0,119,56,0,0,18,64,11,0,127,0,1,111,0,1,95,0, |
1,0,17,93,93,93,53,0,1,0,127,254,78,1,72,255,158,0,10,0,75,185,0,5,255,192, |
179,9,17,72,2,184,255,192,64,28,9,17,72,7,151,0,150,4,9,8,146,16,3,32,3,2, |
0,3,96,3,160,3,176,3,192,3,5,3,184,255,192,64,10,30,33,72,3,0,9,16,9,2,9, |
0,47,93,204,43,93,113,237,1,47,51,253,237,49,48,43,43,5,20,6,7,35,62,1,53, |
35,53,51,1,72,44,40,117,45,49,88,195,193,87,107,47,48,86,46,156,0,0,0,0,2, |
0,14,2,51,2,150,5,129,0,10,0,23,0,108,64,74,86,10,1,86,9,1,121,6,137,6,2, |
17,175,5,191,5,2,5,64,29,60,72,5,64,24,27,72,5,8,1,224,18,6,16,2,1,48,2,1, |
64,2,144,2,2,2,0,4,229,8,5,95,17,111,17,127,17,3,15,17,31,17,127,17,143,17, |
4,17,17,1,11,6,220,1,223,0,63,63,51,18,57,47,93,113,51,51,237,50,1,47,93, |
113,114,51,51,237,50,47,43,43,93,51,49,48,93,114,114,1,21,35,53,33,53,1,51, |
17,51,21,3,14,3,7,3,33,17,60,2,54,2,39,131,254,106,1,130,151,111,240,7,22, |
24,22,7,199,1,23,1,2,229,178,178,111,2,45,253,213,113,2,23,13,37,39,35,11, |
254,225,1,33,14,38,38,34,0,0,0,0,1,0,53,2,40,2,124,5,129,0,38,0,134,64,37, |
37,36,53,36,69,36,3,3,24,9,13,72,19,34,1,4,34,1,3,31,30,25,224,139,27,1,6, |
27,10,192,26,208,26,224,26,3,26,184,255,192,64,53,16,19,72,26,29,0,225,32, |
19,96,19,2,32,19,96,19,160,19,224,19,4,19,22,228,34,34,16,30,229,27,220,68, |
11,84,11,100,11,3,53,11,1,6,11,22,11,38,11,3,11,16,228,5,221,0,63,237,50, |
93,93,93,63,237,18,57,47,237,1,47,93,113,237,50,47,43,93,51,51,95,113,237, |
50,50,0,95,93,93,49,48,43,93,1,20,14,2,35,34,46,2,39,55,30,3,51,50,54,53, |
52,38,35,34,6,7,35,19,33,21,33,7,62,1,51,50,30,2,2,124,38,73,108,70,66,101, |
74,44,9,133,5,24,39,54,36,71,86,81,75,51,77,23,129,33,1,250,254,114,19,29, |
91,54,67,103,69,36,3,67,65,104,74,40,33,59,81,48,15,27,47,36,21,85,93,81, |
85,37,23,1,212,113,245,26,33,39,71,102,0,0,0,1,0,43,2,52,2,120,5,129,0,14, |
0,54,64,33,5,224,6,6,0,175,12,191,12,2,12,11,96,0,1,191,0,207,0,255,0,3,96, |
0,1,0,0,12,229,13,220,5,223,0,63,63,237,50,1,47,93,93,113,51,47,93,17,57, |
47,237,49,48,1,14,3,21,35,52,62,2,55,33,53,33,2,120,64,106,77,43,133,47,80, |
107,60,254,52,2,77,5,28,97,176,176,187,108,102,188,179,175,88,113,0,3,0,45, |
2,40,2,130,5,142,0,19,0,39,0,81,0,138,185,0,68,255,232,179,11,15,72,64,184, |
255,232,64,82,11,15,72,47,24,9,13,72,43,24,9,13,72,5,15,21,15,2,76,55,71, |
10,226,72,61,1,61,61,30,226,224,50,1,191,50,1,50,0,226,70,71,1,71,71,40,226, |
32,20,96,20,2,32,20,96,20,160,20,224,20,4,20,76,56,25,228,15,15,35,26,5,1, |
11,5,1,5,228,66,222,35,228,45,221,0,63,237,63,237,93,93,18,57,47,237,57,57, |
1,47,93,113,237,50,47,113,237,47,93,93,237,51,47,113,237,18,57,57,0,93,49, |
48,43,43,43,43,1,52,46,2,35,34,14,2,21,20,30,2,51,50,62,2,19,52,46,2,35,34, |
14,2,21,20,30,2,51,50,62,2,55,20,14,2,35,34,46,2,53,52,62,2,55,53,46,3,53, |
52,62,2,51,50,30,2,21,20,14,2,7,21,30,3,1,223,12,31,53,41,39,53,31,13,9,29, |
54,45,48,54,27,7,21,13,35,61,49,45,59,36,15,15,36,61,46,46,61,34,14,142,35, |
73,113,77,77,113,74,35,29,47,61,32,36,55,38,20,35,70,104,68,72,105,69,33, |
20,38,56,36,36,63,46,26,4,169,28,48,34,19,19,34,48,28,23,47,39,25,25,39,48, |
254,155,28,52,40,24,24,41,53,28,35,59,42,23,23,42,60,22,54,91,66,37,37,66, |
90,54,46,72,52,32,5,3,8,37,52,64,35,45,79,59,34,35,60,79,44,35,63,52,37,7, |
3,6,31,52,72,0,1,255,229,4,176,2,195,5,240,0,17,0,62,64,41,117,11,133,11, |
2,117,7,133,7,2,12,73,15,13,191,13,239,13,3,13,6,73,64,5,12,5,128,9,142,15, |
0,47,0,63,0,127,0,239,0,5,0,0,47,93,237,26,205,50,1,47,26,237,220,93,237, |
49,48,0,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,84,111,141,81,32, |
2,164,6,104,93,93,104,6,164,2,32,81,141,4,176,57,91,115,57,103,96,96,103, |
57,115,91,57,0,1,0,124,4,28,1,69,5,129,0,10,0,36,64,21,7,151,0,150,4,9,8, |
146,80,3,96,3,2,160,3,176,3,2,3,9,3,0,63,204,93,113,237,1,47,51,253,237,49, |
48,1,20,6,7,35,62,1,53,35,53,51,1,69,44,40,117,45,49,88,195,5,23,87,117,47, |
48,96,46,167,0,0,1,0,130,4,187,1,75,6,32,0,10,0,47,64,30,4,9,150,7,151,10, |
7,146,95,3,111,3,2,175,3,191,3,2,3,80,10,1,15,10,63,10,127,10,3,10,0,47,93, |
113,205,93,113,237,1,47,237,237,50,49,48,19,52,54,55,51,14,1,21,51,21,35, |
130,44,40,117,45,49,88,195,5,37,87,117,47,48,96,46,167,0,0,0,0,1,0,106,5, |
250,2,18,6,240,0,5,0,48,64,30,117,3,133,3,2,128,4,1,64,4,1,4,64,1,2,64,16, |
20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43,1,47,26,205,93,93, |
49,48,93,1,37,53,51,23,21,1,160,254,202,207,217,5,250,217,29,226,20,0,1,0, |
72,5,250,1,240,6,240,0,5,0,52,64,34,122,2,138,2,2,64,3,128,3,2,3,64,79,0, |
143,0,2,0,2,64,16,20,72,2,128,95,0,1,0,64,9,12,72,0,0,47,43,93,26,205,43, |
1,47,93,26,205,93,49,48,93,19,53,55,51,21,5,72,217,207,254,202,5,250,20,226, |
29,217,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,9,134,9,2,120,8,136, |
8,2,128,0,1,0,184,255,192,64,25,11,15,72,0,6,4,142,64,8,64,16,19,72,8,128, |
6,95,1,1,1,64,9,12,72,1,0,47,43,93,51,26,221,43,26,237,1,47,204,43,93,49, |
48,93,93,1,21,35,39,35,7,35,53,55,51,2,150,105,219,2,232,104,234,204,6,14, |
20,139,139,20,240,0,0,0,0,1,0,0,5,250,2,150,6,254,0,9,0,65,64,14,118,0,134, |
0,2,120,1,136,1,2,128,8,1,8,184,255,192,64,25,11,15,72,8,64,2,7,3,64,16,19, |
72,3,128,6,142,95,1,1,1,64,9,12,72,1,0,47,43,93,237,26,205,43,50,1,47,26, |
204,43,93,49,48,93,93,1,35,39,53,51,23,51,55,51,21,1,182,204,234,104,232, |
2,219,105,5,250,239,21,139,139,21,0,0,0,0,2,0,45,5,250,2,90,6,178,0,3,0,7, |
0,35,64,19,3,133,0,7,133,4,1,5,145,0,95,4,1,4,64,9,12,72,4,0,47,43,93,51, |
237,50,1,47,237,220,237,49,48,1,53,51,21,33,53,51,21,1,183,163,253,211,165, |
5,250,184,184,184,184,0,0,1,255,233,5,250,2,182,7,6,0,27,0,68,181,89,2,105, |
2,2,26,184,255,232,64,34,9,15,72,12,24,9,15,72,64,23,1,15,23,1,23,9,22,5, |
143,64,14,128,19,143,8,95,0,1,0,64,9,12,72,0,0,47,43,93,50,237,26,221,26, |
237,51,1,47,204,93,93,49,48,43,43,0,93,1,34,46,2,35,34,6,7,35,62,3,51,50, |
30,2,51,50,54,55,51,14,3,1,236,42,84,78,71,31,55,54,9,91,5,20,45,74,59,44, |
84,78,69,30,54,55,8,92,5,20,43,74,5,250,37,45,37,62,57,45,95,78,50,37,45, |
37,63,56,44,95,78,51,0,0,0,0,2,0,32,5,250,3,15,6,241,0,5,0,11,0,88,64,60, |
154,8,170,8,2,154,2,170,2,2,102,10,1,98,4,1,98,3,1,10,159,7,1,15,7,31,7,127, |
7,223,7,4,7,7,4,64,0,64,9,31,72,0,8,2,64,16,20,72,2,128,6,95,0,1,0,64,9,12, |
72,0,0,47,43,93,50,26,205,43,50,1,47,43,26,205,220,94,93,113,205,49,48,93, |
93,93,93,93,19,53,55,51,21,5,51,53,55,51,21,5,32,197,207,254,202,253,197, |
207,254,202,5,250,20,227,29,218,20,227,29,218,0,1,255,232,5,250,2,130,6,243, |
0,17,0,55,64,32,4,11,1,4,7,1,17,15,19,1,100,13,64,5,12,5,64,16,20,72,5,128, |
9,95,0,1,0,64,9,12,72,0,0,47,43,93,205,26,205,43,50,1,47,26,204,94,93,49, |
48,0,94,93,93,1,34,46,2,39,51,30,1,51,50,54,55,51,14,3,1,52,74,116,84,50, |
8,117,17,109,91,91,107,17,117,9,50,83,116,5,250,41,69,90,49,53,60,61,52,49, |
90,69,41,0,0,0,0,0,0,1,0,0,21,86,0,1,3,140,12,0,0,9,9,72,0,3,0,36,255,143, |
0,3,0,55,255,219,0,3,0,60,255,219,0,3,1,82,255,143,0,3,1,91,255,143,0,3,1, |
94,255,143,0,3,1,101,255,143,0,3,1,109,255,219,0,3,1,110,255,219,0,3,1,116, |
255,219,0,20,0,20,255,104,0,36,0,3,255,143,0,36,0,55,255,104,0,36,0,57,255, |
104,0,36,0,58,255,180,0,36,0,60,255,104,0,36,0,89,255,219,0,36,0,90,255,219, |
0,36,0,92,255,219,0,36,2,3,255,104,0,41,0,15,255,29,0,41,0,17,255,29,0,41, |
0,36,255,143,0,47,0,3,255,180,0,47,0,55,255,104,0,47,0,57,255,104,0,47,0, |
58,255,104,0,47,0,60,255,104,0,47,0,92,255,180,0,47,2,3,255,143,0,51,0,3, |
255,219,0,51,0,15,254,248,0,51,0,17,254,248,0,51,0,36,255,104,0,53,0,55,255, |
219,0,53,0,57,255,219,0,53,0,58,255,219,0,53,0,60,255,219,0,55,0,3,255,219, |
0,55,0,15,255,29,0,55,0,16,255,143,0,55,0,17,255,29,0,55,0,29,255,29,0,55, |
0,30,255,29,0,55,0,36,255,104,0,55,0,50,255,219,0,55,0,68,255,29,0,55,0,70, |
255,29,0,55,0,72,255,29,0,55,0,76,255,180,0,55,0,82,255,29,0,55,0,85,255, |
180,0,55,0,86,255,29,0,55,0,88,255,180,0,55,0,90,255,143,0,55,0,92,255,143, |
0,57,0,15,255,68,0,57,0,16,255,143,0,57,0,17,255,68,0,57,0,29,255,180,0,57, |
0,30,255,180,0,57,0,36,255,104,0,57,0,68,255,104,0,57,0,72,255,143,0,57,0, |
76,255,219,0,57,0,82,255,143,0,57,0,85,255,180,0,57,0,88,255,180,0,57,0,92, |
255,180,0,58,0,15,255,143,0,58,0,16,255,219,0,58,0,17,255,143,0,58,0,29,255, |
219,0,58,0,30,255,219,0,58,0,36,255,180,0,58,0,68,255,180,0,58,0,72,255,219, |
0,58,0,82,255,219,0,58,0,85,255,219,0,58,0,88,255,219,0,58,0,92,255,238,0, |
60,0,3,255,219,0,60,0,15,254,248,0,60,0,16,255,68,0,60,0,17,254,248,0,60, |
0,29,255,143,0,60,0,30,255,123,0,60,0,36,255,104,0,60,0,68,255,104,0,60,0, |
72,255,68,0,60,0,76,255,180,0,60,0,82,255,68,0,60,0,83,255,104,0,60,0,84, |
255,68,0,60,0,88,255,143,0,60,0,89,255,143,0,73,0,73,255,219,0,73,2,3,0,37, |
0,85,0,15,255,143,0,85,0,17,255,143,0,85,2,3,0,76,0,89,0,15,255,104,0,89, |
0,17,255,104,0,90,0,15,255,143,0,90,0,17,255,143,0,92,0,15,255,104,0,92,0, |
17,255,104,1,82,1,98,255,213,1,82,1,105,255,213,1,82,1,109,255,104,1,82,1, |
110,255,104,1,82,1,111,255,197,1,82,1,116,255,104,1,82,1,124,255,219,1,82, |
1,134,255,219,1,82,1,144,255,219,1,87,1,110,255,190,1,88,1,90,0,170,1,88, |
1,91,255,104,1,88,1,94,255,104,1,88,1,98,255,141,1,88,1,101,255,104,1,88, |
1,105,255,141,1,88,1,111,255,141,1,88,1,114,255,158,1,88,1,119,255,104,1, |
88,1,120,255,180,1,88,1,122,255,70,1,88,1,128,255,104,1,88,1,130,255,180, |
1,88,1,131,255,104,1,88,1,133,255,104,1,88,1,136,255,70,1,88,1,140,255,70, |
1,88,1,143,255,70,1,88,1,147,0,98,1,88,1,149,255,70,1,89,1,110,255,209,1, |
89,1,116,255,209,1,91,0,3,255,143,1,91,1,98,255,213,1,91,1,105,255,213,1, |
91,1,109,255,104,1,91,1,110,255,104,1,91,1,111,255,197,1,91,1,116,255,104, |
1,91,1,124,255,219,1,91,1,134,255,219,1,91,1,144,255,219,1,91,2,3,255,104, |
1,93,0,15,255,31,1,93,0,17,255,31,1,93,1,90,0,164,1,93,1,91,255,68,1,93,1, |
94,255,68,1,93,1,101,255,68,1,93,1,130,255,168,1,93,1,147,0,88,1,94,0,3,255, |
143,1,94,1,98,255,213,1,94,1,105,255,213,1,94,1,109,255,137,1,94,1,110,255, |
104,1,94,1,116,255,104,1,98,1,91,255,219,1,98,1,94,255,219,1,98,1,101,255, |
219,1,98,1,110,255,190,1,98,1,116,255,190,1,100,1,98,255,193,1,100,1,105, |
255,193,1,100,1,111,255,143,1,100,1,117,255,231,1,100,1,122,255,231,1,100, |
1,125,255,231,1,100,1,127,255,231,1,100,1,129,255,231,1,100,1,135,255,231, |
1,100,1,136,255,231,1,100,1,140,255,231,1,100,1,143,255,231,1,100,1,146,255, |
231,1,100,1,149,255,231,1,100,1,151,255,231,1,101,0,3,255,143,1,101,1,98, |
255,213,1,101,1,105,255,213,1,101,1,109,255,104,1,101,1,110,255,104,1,101, |
1,116,255,104,1,105,1,91,255,219,1,105,1,94,255,213,1,105,1,101,255,219,1, |
105,1,110,255,190,1,105,1,116,255,190,1,107,0,3,255,219,1,107,0,15,254,250, |
1,107,0,17,254,250,1,107,1,91,255,104,1,107,1,94,255,104,1,107,1,101,255, |
104,1,108,1,137,255,158,1,108,1,141,255,158,1,109,0,3,255,219,1,109,0,15, |
255,31,1,109,0,17,255,31,1,109,0,29,255,31,1,109,0,30,255,31,1,109,1,90,0, |
188,1,109,1,91,255,104,1,109,1,94,255,104,1,109,1,98,255,219,1,109,1,101, |
255,104,1,109,1,105,255,219,1,109,1,111,255,219,1,109,1,114,255,219,1,109, |
1,117,255,31,1,109,1,118,255,31,1,109,1,121,255,78,1,109,1,122,255,31,1,109, |
1,124,255,78,1,109,1,126,255,31,1,109,1,128,255,106,1,109,1,130,255,180,1, |
109,1,133,255,106,1,109,1,134,255,143,1,109,1,136,255,31,1,109,1,140,255, |
31,1,109,1,142,255,80,1,109,1,143,255,31,1,109,1,144,255,143,1,109,1,145, |
255,106,1,109,1,147,0,188,1,109,1,148,255,78,1,109,1,149,255,31,1,109,1,150, |
255,78,1,110,0,3,255,219,1,110,0,15,254,250,1,110,0,16,255,70,1,110,0,17, |
254,250,1,110,0,29,255,143,1,110,0,30,255,143,1,110,1,90,0,188,1,110,1,91, |
255,104,1,110,1,94,255,104,1,110,1,98,255,141,1,110,1,101,255,104,1,110,1, |
105,255,141,1,110,1,111,255,141,1,110,1,114,255,158,1,110,1,119,255,104,1, |
110,1,120,255,180,1,110,1,122,255,70,1,110,1,124,255,158,1,110,1,128,255, |
104,1,110,1,130,255,180,1,110,1,131,255,104,1,110,1,133,255,104,1,110,1,136, |
255,70,1,110,1,140,255,70,1,110,1,143,255,70,1,110,1,147,0,121,1,110,1,149, |
255,70,1,111,1,91,255,197,1,111,1,110,255,190,1,111,1,116,255,190,1,113,1, |
117,255,178,1,113,1,122,255,178,1,113,1,125,255,178,1,113,1,129,255,217,1, |
113,1,136,255,178,1,113,1,140,255,178,1,113,1,143,255,178,1,113,1,146,255, |
178,1,113,1,149,255,178,1,113,1,151,255,178,1,114,1,110,255,209,1,114,1,116, |
255,209,1,116,0,3,255,219,1,116,1,90,0,170,1,116,1,91,255,104,1,116,1,94, |
255,104,1,116,1,98,255,141,1,116,1,101,255,104,1,116,1,105,255,141,1,116, |
1,111,255,141,1,116,1,114,255,158,1,116,1,119,255,104,1,116,1,120,255,180, |
1,116,1,122,255,70,1,116,1,128,255,104,1,116,1,130,255,180,1,116,1,131,255, |
104,1,116,1,133,255,104,1,116,1,136,255,70,1,116,1,140,255,70,1,116,1,143, |
255,70,1,116,1,147,0,98,1,116,1,149,255,70,1,125,1,132,255,217,1,125,1,137, |
255,227,1,125,1,141,255,227,1,125,1,144,255,201,1,127,1,117,255,119,1,127, |
1,119,255,219,1,127,1,122,255,119,1,127,1,124,255,170,1,127,1,125,255,180, |
1,127,1,128,255,219,1,127,1,129,255,158,1,127,1,130,255,219,1,127,1,131,255, |
219,1,127,1,134,255,170,1,127,1,136,255,119,1,127,1,137,255,170,1,127,1,140, |
255,119,1,127,1,141,255,170,1,127,1,143,255,119,1,127,1,146,255,119,1,127, |
1,149,255,119,1,127,1,151,255,119,1,129,1,132,255,217,1,131,1,117,255,231, |
1,131,1,122,255,231,1,131,1,125,255,231,1,131,1,127,255,231,1,131,1,129,255, |
231,1,131,1,135,255,231,1,131,1,136,255,231,1,131,1,139,255,231,1,131,1,140, |
255,231,1,131,1,143,255,231,1,131,1,146,255,231,1,131,1,149,255,231,1,131, |
1,151,255,231,1,132,1,117,255,225,1,132,1,122,255,225,1,132,1,125,255,225, |
1,132,1,135,255,225,1,132,1,136,255,225,1,132,1,139,255,209,1,132,1,140,255, |
225,1,132,1,142,255,207,1,132,1,143,255,219,1,132,1,146,255,225,1,132,1,149, |
255,225,1,132,1,150,255,207,1,132,1,151,255,225,1,135,1,117,255,201,1,135, |
1,122,255,201,1,135,1,125,255,201,1,135,1,127,255,201,1,135,1,135,255,201, |
1,135,1,136,255,201,1,135,1,139,255,201,1,135,1,140,255,201,1,135,1,143,255, |
201,1,135,1,149,255,201,1,136,1,132,255,217,1,136,1,137,255,227,1,136,1,141, |
255,227,1,136,1,144,255,201,1,137,1,117,255,227,1,137,1,122,255,227,1,137, |
1,127,255,227,1,137,1,136,255,227,1,137,1,139,255,227,1,137,1,140,255,227, |
1,137,1,143,255,227,1,137,1,146,255,227,1,137,1,151,255,227,1,138,1,132,255, |
217,1,138,1,137,255,227,1,138,1,141,255,227,1,141,1,117,255,227,1,141,1,122, |
255,227,1,141,1,125,255,227,1,141,1,127,255,227,1,141,1,136,255,227,1,141, |
1,139,255,227,1,141,1,140,255,227,1,141,1,143,255,227,1,141,1,146,255,227, |
1,141,1,151,255,227,1,143,1,132,255,217,1,143,1,137,255,227,1,143,1,141,255, |
227,1,143,1,144,255,201,1,144,1,117,255,201,1,144,1,122,255,201,1,144,1,125, |
255,201,1,144,1,127,255,201,1,144,1,136,255,201,1,144,1,139,255,201,1,144, |
1,140,255,201,1,144,1,143,255,201,1,144,1,146,255,201,1,144,1,149,255,201, |
1,144,1,151,255,201,1,146,1,132,255,217,1,146,1,137,255,227,1,146,1,141,255, |
227,1,146,1,144,255,201,1,149,1,132,255,217,1,149,1,137,255,227,1,149,1,141, |
255,227,1,149,1,144,255,201,1,151,1,132,255,217,1,151,1,137,255,227,1,151, |
1,141,255,227,1,151,1,144,255,201,1,154,0,15,255,6,1,154,0,17,255,6,1,154, |
0,108,255,119,1,154,0,123,255,119,1,154,1,255,255,211,1,160,2,3,255,96,1, |
161,2,3,255,119,1,166,1,170,0,68,1,166,1,173,255,233,1,166,1,177,0,45,1,166, |
1,180,255,211,1,166,1,181,255,233,1,166,1,183,255,211,1,166,1,184,255,96, |
1,166,1,185,255,166,1,166,1,186,255,188,1,166,1,189,255,96,1,166,1,195,255, |
211,1,166,1,198,0,23,1,166,1,216,255,211,1,166,1,217,255,233,1,166,1,218, |
0,23,1,166,1,227,0,45,1,166,2,3,255,141,1,167,1,166,255,211,1,167,1,173,255, |
233,1,167,1,180,255,233,1,167,1,183,255,233,1,167,1,184,255,164,1,167,1,185, |
255,209,1,167,1,186,255,233,1,167,1,187,255,211,1,167,1,189,255,164,1,167, |
1,192,255,188,1,167,1,195,255,233,1,167,1,197,255,233,1,167,1,209,255,233, |
1,167,1,217,255,211,1,168,1,166,255,188,1,168,1,170,255,211,1,168,1,172,255, |
211,1,168,1,173,255,188,1,168,1,177,255,233,1,168,1,180,255,188,1,168,1,183, |
255,188,1,168,1,184,255,119,1,168,1,185,255,188,1,168,1,186,255,188,1,168, |
1,187,255,166,1,168,1,189,255,164,1,168,1,192,255,141,1,168,1,197,255,188, |
1,168,1,202,255,233,1,168,1,210,255,233,1,168,1,216,255,188,1,168,1,217,255, |
233,1,168,1,219,255,233,1,168,1,221,255,188,1,168,1,229,255,233,1,169,0,15, |
255,6,1,169,0,17,255,6,1,169,0,108,255,119,1,169,0,123,255,119,1,169,1,166, |
255,119,1,169,1,170,255,119,1,169,1,173,255,211,1,169,1,177,255,141,1,169, |
1,178,255,209,1,169,1,180,255,141,1,169,1,183,255,164,1,169,1,197,255,188, |
1,169,1,198,255,141,1,169,1,200,255,141,1,169,1,202,255,119,1,169,1,203,255, |
119,1,169,1,206,255,141,1,169,1,209,255,141,1,169,1,210,255,141,1,169,1,211, |
255,141,1,169,1,212,255,119,1,169,1,214,255,141,1,169,1,217,255,119,1,169, |
1,225,255,141,1,169,1,226,255,141,1,169,1,228,255,141,1,169,1,229,255,119, |
1,169,1,255,255,211,1,170,1,185,0,23,1,170,1,186,255,211,1,170,1,189,255, |
186,1,170,1,205,0,68,1,170,1,212,0,23,1,170,1,217,0,45,1,171,1,173,255,211, |
1,171,1,215,255,233,1,172,1,173,255,233,1,172,1,180,255,211,1,172,1,183,255, |
233,1,172,1,184,0,23,1,172,1,185,0,45,1,172,1,192,0,45,1,172,1,198,0,23,1, |
172,1,203,255,231,1,172,1,212,255,233,1,172,1,217,255,233,1,173,1,177,255, |
233,1,173,1,180,255,233,1,173,1,183,255,233,1,173,1,184,255,211,1,173,1,185, |
255,233,1,173,1,186,255,233,1,173,1,189,255,211,1,173,1,197,255,233,1,176, |
1,173,255,233,1,176,1,180,255,233,1,176,1,183,255,233,1,176,1,185,0,23,1, |
176,1,186,255,186,1,177,1,186,255,233,1,177,1,199,0,23,1,177,1,217,0,23,1, |
178,1,186,255,233,1,178,1,189,255,233,1,178,1,198,0,23,1,178,1,203,0,23,1, |
178,1,212,0,23,1,178,1,215,0,23,1,178,1,217,0,23,1,178,1,221,255,233,1,178, |
1,227,0,23,1,180,1,166,255,211,1,180,1,170,255,211,1,180,1,172,255,211,1, |
180,1,177,255,233,1,180,1,185,255,211,1,180,1,187,255,164,1,180,1,189,255, |
211,1,180,1,197,255,211,1,180,1,202,255,211,1,180,1,209,255,233,1,180,1,219, |
255,233,1,182,0,15,254,125,1,182,0,17,254,125,1,182,0,29,255,211,1,182,0, |
30,255,211,1,182,0,123,255,141,1,182,1,166,255,119,1,182,1,170,255,119,1, |
182,1,172,255,233,1,182,1,173,255,211,1,182,1,177,255,141,1,182,1,178,255, |
233,1,182,1,180,255,211,1,182,1,183,255,233,1,182,1,184,255,164,1,182,1,185, |
255,211,1,182,1,186,255,233,1,182,1,187,255,164,1,182,1,197,255,211,1,182, |
1,198,255,188,1,182,1,202,255,96,1,182,1,203,255,166,1,182,1,212,255,166, |
1,182,1,227,255,211,1,182,1,229,255,188,1,183,1,166,255,211,1,183,1,170,255, |
211,1,183,1,173,255,233,1,183,1,177,255,188,1,183,1,178,255,233,1,183,1,180, |
255,211,1,183,1,184,255,188,1,183,1,185,255,188,1,183,1,187,255,141,1,183, |
1,189,255,188,1,183,1,192,255,186,1,183,1,195,255,233,1,183,1,198,0,23,1, |
183,1,204,0,45,1,183,1,221,255,233,1,184,0,15,255,29,1,184,0,17,255,29,1, |
184,0,108,255,166,1,184,0,123,255,166,1,184,1,166,255,188,1,184,1,170,255, |
188,1,184,1,172,0,23,1,184,1,173,255,233,1,184,1,177,255,211,1,184,1,180, |
255,164,1,184,1,186,255,188,1,184,1,197,255,211,1,184,1,198,255,164,1,184, |
1,200,255,166,1,184,1,203,255,141,1,184,1,206,255,166,1,184,1,208,255,166, |
1,184,1,209,255,164,1,184,1,210,255,166,1,184,1,212,255,96,1,184,1,213,255, |
166,1,184,1,214,255,141,1,184,1,215,255,141,1,184,1,217,255,141,1,184,1,219, |
255,166,1,184,1,223,255,166,1,184,1,225,255,166,1,184,1,226,255,166,1,184, |
1,228,255,166,1,184,1,229,255,141,1,184,1,255,255,211,1,185,0,15,254,240, |
1,185,0,17,254,240,1,185,0,29,255,211,1,185,0,30,255,211,1,185,0,108,255, |
166,1,185,0,123,255,164,1,185,1,166,255,119,1,185,1,170,255,164,1,185,1,173, |
255,211,1,185,1,177,255,188,1,185,1,180,255,188,1,185,1,186,255,188,1,185, |
1,195,255,211,1,185,1,197,255,211,1,185,1,199,255,211,1,185,1,200,255,141, |
1,185,1,201,255,164,1,185,1,202,255,96,1,185,1,203,255,119,1,185,1,204,255, |
188,1,185,1,205,255,141,1,185,1,206,255,164,1,185,1,207,255,188,1,185,1,208, |
255,164,1,185,1,209,255,119,1,185,1,210,255,164,1,185,1,211,255,164,1,185, |
1,212,255,119,1,185,1,213,255,164,1,185,1,214,255,164,1,185,1,215,255,119, |
1,185,1,219,255,164,1,185,1,220,255,164,1,185,1,222,255,164,1,185,1,223,255, |
164,1,185,1,228,255,164,1,185,1,229,255,119,1,185,1,255,255,233,1,186,1,166, |
255,211,1,186,1,170,255,188,1,186,1,177,255,188,1,186,1,184,255,141,1,186, |
1,185,255,164,1,186,1,189,255,211,1,186,1,197,255,186,1,186,1,209,255,188, |
1,187,1,173,255,211,1,187,1,180,255,188,1,187,1,183,255,188,1,187,1,186,255, |
188,1,187,1,195,255,186,1,187,1,212,255,233,1,187,1,217,255,211,1,188,1,180, |
255,211,1,188,1,198,0,45,1,191,1,198,0,23,1,191,1,217,0,45,1,192,1,197,255, |
188,1,192,2,3,255,119,1,194,1,166,255,211,1,194,1,170,255,211,1,194,1,172, |
255,188,1,194,1,173,255,233,1,194,1,177,255,186,1,194,1,178,255,211,1,194, |
1,180,255,211,1,194,1,183,255,211,1,194,1,184,255,51,1,194,1,187,255,164, |
1,194,1,189,255,96,1,194,1,195,255,233,1,194,1,197,255,164,1,194,2,3,255, |
96,1,195,1,170,255,188,1,195,1,172,255,231,1,195,1,173,255,233,1,195,1,177, |
255,188,1,195,1,187,255,186,1,195,1,197,255,211,1,195,1,202,255,188,1,195, |
1,204,0,23,1,195,1,209,255,188,1,195,1,210,255,233,1,195,1,229,255,233,1, |
196,1,166,255,188,1,196,1,170,255,166,1,196,1,172,255,211,1,196,1,177,255, |
164,1,196,1,180,255,233,1,196,1,183,255,233,1,196,1,184,255,141,1,196,1,187, |
255,164,1,196,1,189,255,188,1,196,1,202,255,164,1,196,1,209,255,164,1,196, |
1,210,255,233,1,198,1,205,255,233,1,198,1,216,255,211,1,198,1,217,255,233, |
1,198,1,221,255,211,1,199,1,198,255,209,1,199,1,202,255,164,1,199,1,203,255, |
233,1,199,1,204,255,233,1,199,1,205,255,211,1,199,1,209,255,164,1,199,1,210, |
255,211,1,199,1,215,255,233,1,199,1,217,255,211,1,199,1,218,255,233,1,199, |
1,219,255,188,1,199,1,221,255,188,1,199,1,224,255,188,1,199,1,227,255,233, |
1,199,1,229,255,211,1,200,1,198,255,233,1,200,1,199,255,233,1,200,1,202,255, |
233,1,200,1,203,255,233,1,200,1,204,255,233,1,200,1,205,255,233,1,200,1,209, |
255,209,1,200,1,210,255,233,1,200,1,212,255,233,1,200,1,215,255,233,1,200, |
1,216,255,211,1,200,1,217,255,211,1,200,1,218,255,233,1,200,1,221,255,164, |
1,200,1,224,255,188,1,200,1,229,255,233,1,201,0,15,255,6,1,201,0,17,255,6, |
1,201,1,198,255,211,1,201,1,202,255,164,1,201,1,203,255,211,1,201,1,205,255, |
233,1,201,1,209,255,211,1,201,1,212,255,211,1,201,1,215,255,211,1,201,1,229, |
255,233,1,202,1,224,255,211,1,202,1,227,0,23,1,203,1,199,255,233,1,203,1, |
202,255,211,1,203,1,204,255,233,1,203,1,205,255,211,1,203,1,209,255,188,1, |
203,1,216,255,188,1,203,1,217,255,233,1,203,1,219,255,211,1,203,1,221,255, |
188,1,204,1,199,0,23,1,204,1,217,0,23,1,204,1,221,255,233,1,204,1,224,0,45, |
1,205,1,199,255,233,1,205,1,202,255,211,1,205,1,203,255,233,1,205,1,205,255, |
233,1,205,1,209,255,233,1,205,1,212,255,233,1,205,1,215,255,233,1,205,1,217, |
255,233,1,205,1,218,255,233,1,205,1,221,255,188,1,205,1,224,255,211,1,208, |
1,198,0,45,1,208,1,199,0,45,1,208,1,203,0,23,1,208,1,205,0,23,1,208,1,209, |
0,23,1,208,1,212,0,23,1,208,1,215,0,23,1,208,1,216,0,23,1,208,1,217,0,23, |
1,208,1,227,0,23,1,209,1,212,0,23,1,209,1,221,255,211,1,210,1,199,255,233, |
1,210,1,205,255,233,1,210,1,217,0,23,1,212,1,202,255,211,1,212,1,204,255, |
233,1,212,1,205,255,233,1,212,1,209,255,211,1,212,1,216,255,211,1,212,1,217, |
255,233,1,212,1,219,255,233,1,212,1,221,255,211,1,214,1,202,255,209,1,214, |
1,205,255,233,1,214,1,209,255,186,1,214,1,216,255,211,1,214,1,217,255,233, |
1,214,1,219,255,233,1,214,1,221,255,211,1,214,1,229,255,233,1,215,1,204,0, |
23,1,215,1,212,0,23,1,215,1,221,255,233,1,215,1,227,0,23,1,216,0,15,255,29, |
1,216,0,17,255,29,1,216,1,198,255,233,1,216,1,202,255,188,1,216,1,203,255, |
233,1,216,1,204,0,68,1,216,1,209,255,211,1,216,1,212,255,233,1,216,1,215, |
255,233,1,216,1,217,0,23,1,217,0,15,255,51,1,217,0,17,255,51,1,217,0,123, |
0,23,1,217,1,198,255,233,1,217,1,199,0,23,1,217,1,202,255,188,1,217,1,203, |
255,233,1,217,1,204,0,23,1,217,1,209,255,211,1,217,1,210,255,233,1,217,1, |
212,255,231,1,217,1,214,255,233,1,217,1,215,255,233,1,217,1,218,255,233,1, |
217,1,227,255,233,1,217,1,229,255,233,1,218,1,199,255,233,1,218,1,202,255, |
211,1,218,1,209,255,211,1,218,1,216,255,211,1,218,1,217,255,233,1,218,1,221, |
255,211,1,218,1,229,255,233,1,219,1,198,255,233,1,219,1,199,255,233,1,219, |
1,203,255,233,1,219,1,205,255,233,1,219,1,212,255,233,1,219,1,215,255,233, |
1,219,1,216,255,233,1,219,1,218,255,233,1,219,1,221,255,211,1,220,1,203,255, |
233,1,220,1,205,255,233,1,220,1,212,255,233,1,220,1,215,255,233,1,223,1,203, |
255,233,1,223,1,212,255,233,1,223,1,217,0,23,1,226,1,216,255,96,1,226,1,221, |
255,119,1,227,1,202,255,211,1,227,1,203,0,23,1,227,1,205,255,233,1,227,1, |
209,255,211,1,227,1,212,0,23,1,227,1,216,255,211,1,227,1,219,255,233,1,227, |
1,229,255,233,1,228,1,202,255,211,1,228,1,204,255,233,1,228,1,209,255,211, |
1,228,1,210,255,233,1,228,1,216,255,211,1,228,1,219,255,233,1,228,1,221,255, |
211,1,242,0,15,255,51,1,242,0,17,255,51,1,244,0,15,255,6,1,244,0,17,255,6, |
1,244,0,29,255,211,1,244,0,30,255,211,1,244,0,108,255,96,1,244,0,123,255, |
96,1,244,1,255,255,211,2,2,2,2,255,219,2,3,0,3,255,180,2,3,0,86,255,219,2, |
3,2,3,255,219,2,8,1,153,255,96,2,8,1,162,255,96,2,8,1,184,255,96,2,8,1,189, |
255,188,2,8,1,192,255,188,0,0,0,0,0,28,1,86,0,1,0,0,0,0,0,0,0,64,0,130,0, |
1,0,0,0,0,0,1,0,15,0,227,0,1,0,0,0,0,0,2,0,7,1,3,0,1,0,0,0,0,0,3,0,26,1,65, |
0,1,0,0,0,0,0,4,0,15,1,124,0,1,0,0,0,0,0,5,0,12,1,166,0,1,0,0,0,0,0,6,0,14, |
1,209,0,1,0,0,0,0,0,7,0,122,2,214,0,1,0,0,0,0,0,8,0,20,3,123,0,1,0,0,0,0, |
0,9,0,14,3,174,0,1,0,0,0,0,0,11,0,28,3,247,0,1,0,0,0,0,0,12,0,46,4,114,0, |
1,0,0,0,0,0,13,0,127,5,161,0,1,0,0,0,0,0,14,0,43,6,121,0,3,0,1,4,9,0,0,0, |
128,0,0,0,3,0,1,4,9,0,1,0,30,0,195,0,3,0,1,4,9,0,2,0,14,0,243,0,3,0,1,4,9, |
0,3,0,52,1,11,0,3,0,1,4,9,0,4,0,30,1,92,0,3,0,1,4,9,0,5,0,24,1,140,0,3,0, |
1,4,9,0,6,0,28,1,179,0,3,0,1,4,9,0,7,0,244,1,224,0,3,0,1,4,9,0,8,0,40,3,81, |
0,3,0,1,4,9,0,9,0,28,3,144,0,3,0,1,4,9,0,11,0,56,3,189,0,3,0,1,4,9,0,12,0, |
92,4,20,0,3,0,1,4,9,0,13,0,254,4,161,0,3,0,1,4,9,0,14,0,86,6,33,0,68,0,105, |
0,103,0,105,0,116,0,105,0,122,0,101,0,100,0,32,0,100,0,97,0,116,0,97,0,32, |
0,169,0,32,0,50,0,48,0,48,0,55,0,32,0,65,0,115,0,99,0,101,0,110,0,100,0,101, |
0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105,0,111,0,110, |
0,46,0,32,0,65,0,108,0,108,0,32,0,114,0,105,0,103,0,104,0,116,0,115,0,32, |
0,114,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,0,68,105,103,105,116, |
105,122,101,100,32,100,97,116,97,32,169,32,50,48,48,55,32,65,115,99,101,110, |
100,101,114,32,67,111,114,112,111,114,97,116,105,111,110,46,32,65,108,108, |
32,114,105,103,104,116,115,32,114,101,115,101,114,118,101,100,46,0,0,76,0, |
105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0, |
115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115,0,0,82,0,101, |
0,103,0,117,0,108,0,97,0,114,0,0,82,101,103,117,108,97,114,0,0,65,0,115,0, |
99,0,101,0,110,0,100,0,101,0,114,0,32,0,45,0,32,0,76,0,105,0,98,0,101,0,114, |
0,97,0,116,0,105,0,111,0,110,0,32,0,83,0,97,0,110,0,115,0,0,65,115,99,101, |
110,100,101,114,32,45,32,76,105,98,101,114,97,116,105,111,110,32,83,97,110, |
115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,32,0,83, |
0,97,0,110,0,115,0,0,76,105,98,101,114,97,116,105,111,110,32,83,97,110,115, |
0,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49,0,46,0,48,0,50,0,0,86, |
101,114,115,105,111,110,32,49,46,48,50,0,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,83,0,97,0,110,0,115,0,0,76,105,98,101,114,97,116, |
105,111,110,83,97,110,115,0,0,76,0,105,0,98,0,101,0,114,0,97,0,116,0,105, |
0,111,0,110,0,32,0,105,0,115,0,32,0,97,0,32,0,116,0,114,0,97,0,100,0,101, |
0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,32,0,82,0,101,0,100,0,32,0,72,0, |
97,0,116,0,44,0,32,0,73,0,110,0,99,0,46,0,32,0,114,0,101,0,103,0,105,0,115, |
0,116,0,101,0,114,0,101,0,100,0,32,0,105,0,110,0,32,0,85,0,46,0,83,0,46,0, |
32,0,80,0,97,0,116,0,101,0,110,0,116,0,32,0,97,0,110,0,100,0,32,0,84,0,114, |
0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,79,0,102,0,102,0,105,0,99, |
0,101,0,32,0,97,0,110,0,100,0,32,0,99,0,101,0,114,0,116,0,97,0,105,0,110, |
0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,106,0,117,0,114,0,105,0,115,0,100, |
0,105,0,99,0,116,0,105,0,111,0,110,0,115,0,46,0,0,76,105,98,101,114,97,116, |
105,111,110,32,105,115,32,97,32,116,114,97,100,101,109,97,114,107,32,111, |
102,32,82,101,100,32,72,97,116,44,32,73,110,99,46,32,114,101,103,105,115, |
116,101,114,101,100,32,105,110,32,85,46,83,46,32,80,97,116,101,110,116,32, |
97,110,100,32,84,114,97,100,101,109,97,114,107,32,79,102,102,105,99,101,32, |
97,110,100,32,99,101,114,116,97,105,110,32,111,116,104,101,114,32,106,117, |
114,105,115,100,105,99,116,105,111,110,115,46,0,0,65,0,115,0,99,0,101,0,110, |
0,100,0,101,0,114,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105, |
0,111,0,110,0,0,65,115,99,101,110,100,101,114,32,67,111,114,112,111,114,97, |
116,105,111,110,0,0,83,0,116,0,101,0,118,0,101,0,32,0,77,0,97,0,116,0,116, |
0,101,0,115,0,111,0,110,0,0,83,116,101,118,101,32,77,97,116,116,101,115,111, |
110,0,0,104,0,116,0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97, |
0,115,0,99,0,101,0,110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99, |
0,111,0,109,0,47,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,0,0,104,0,116,0,116,0,112, |
0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0,110,0,100,0, |
101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0,116,0,121,0, |
112,0,101,0,100,0,101,0,115,0,105,0,103,0,110,0,101,0,114,0,115,0,46,0,104, |
0,116,0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101, |
110,100,101,114,99,111,114,112,46,99,111,109,47,116,121,112,101,100,101,115, |
105,103,110,101,114,115,46,104,116,109,108,0,0,85,0,115,0,101,0,32,0,111, |
0,102,0,32,0,116,0,104,0,105,0,115,0,32,0,76,0,105,0,98,0,101,0,114,0,97, |
0,116,0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102, |
0,116,0,119,0,97,0,114,0,101,0,32,0,105,0,115,0,32,0,115,0,117,0,98,0,106, |
0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,108,0,105, |
0,99,0,101,0,110,0,115,0,101,0,32,0,97,0,103,0,114,0,101,0,101,0,109,0,101, |
0,110,0,116,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,119,0,104,0,105,0,99, |
0,104,0,32,0,121,0,111,0,117,0,32,0,97,0,99,0,99,0,101,0,112,0,116,0,101, |
0,100,0,32,0,116,0,104,0,101,0,32,0,76,0,105,0,98,0,101,0,114,0,97,0,116, |
0,105,0,111,0,110,0,32,0,102,0,111,0,110,0,116,0,32,0,115,0,111,0,102,0,116, |
0,119,0,97,0,114,0,101,0,46,0,0,85,115,101,32,111,102,32,116,104,105,115, |
32,76,105,98,101,114,97,116,105,111,110,32,102,111,110,116,32,115,111,102, |
116,119,97,114,101,32,105,115,32,115,117,98,106,101,99,116,32,116,111,32, |
116,104,101,32,108,105,99,101,110,115,101,32,97,103,114,101,101,109,101,110, |
116,32,117,110,100,101,114,32,119,104,105,99,104,32,121,111,117,32,97,99, |
99,101,112,116,101,100,32,116,104,101,32,76,105,98,101,114,97,116,105,111, |
110,32,102,111,110,116,32,115,111,102,116,119,97,114,101,46,0,0,104,0,116, |
0,116,0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46,0,97,0,115,0,99,0,101,0, |
110,0,100,0,101,0,114,0,99,0,111,0,114,0,112,0,46,0,99,0,111,0,109,0,47,0, |
108,0,105,0,98,0,101,0,114,0,97,0,116,0,105,0,111,0,110,0,46,0,104,0,116, |
0,109,0,108,0,0,104,116,116,112,58,47,47,119,119,119,46,97,115,99,101,110, |
100,101,114,99,111,114,112,46,99,111,109,47,108,105,98,101,114,97,116,105, |
111,110,46,104,116,109,108,0,0,0,2,0,0,0,0,0,0,255,39,0,150,0,0,0,0,0,0,0, |
0,0,0,0,0,0,0,0,0,0,0,0,0,2,156,0,0,0,1,0,2,1,2,0,4,0,5,0,6,0,7,0,8,0,9,0, |
10,0,11,0,12,0,13,0,14,0,15,1,3,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0, |
25,0,26,0,27,0,28,0,29,1,4,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0, |
40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54, |
0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69, |
0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84, |
0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,163,0, |
132,0,133,0,189,0,150,0,232,0,134,0,142,0,139,0,157,0,169,0,164,0,138,0,218, |
0,131,0,147,1,5,1,6,0,141,1,7,0,136,1,8,0,222,1,9,0,158,0,170,0,245,0,244, |
0,246,0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144,0,100,0,203,0,101,0,200, |
0,202,0,207,0,204,0,205,0,206,0,233,0,102,0,211,0,208,0,209,0,175,0,103,0, |
240,0,145,0,214,0,212,0,213,0,104,0,235,0,237,0,137,0,106,0,105,0,107,0,109, |
0,108,0,110,0,160,0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118,0,119,0, |
234,0,120,0,122,0,121,0,123,0,125,0,124,0,184,0,161,0,127,0,126,0,128,0,129, |
0,236,0,238,0,186,1,10,1,11,1,12,1,13,1,14,1,15,0,253,0,254,1,16,1,17,1,18, |
1,19,0,255,1,0,1,20,1,21,1,22,1,1,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30, |
1,31,1,32,1,33,1,34,0,248,0,249,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1, |
43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,0,250,0,215,1,51,1,52,1,53,1,54,1,55, |
1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,0,226,0,227,1,66,1,67,1, |
68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,0,176,0,177, |
1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,0,251,0,252,0,228,0,229, |
1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104, |
1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,0,187,1,113,1,114,1,115,1, |
116,0,230,0,231,1,117,0,166,1,118,1,119,1,120,1,121,1,122,1,123,0,216,0,225, |
1,124,0,219,0,220,0,221,0,224,0,217,0,223,1,125,1,126,1,127,1,128,1,129,1, |
130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,0,168,1,139,1,140,1,141, |
1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1, |
154,1,155,1,156,1,157,0,159,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165, |
1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,0,151,1,176,1, |
177,1,178,0,155,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188, |
1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1, |
201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213, |
1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1, |
226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238, |
1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1, |
251,1,252,1,253,1,254,1,255,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10, |
2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, |
2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,0,178,0, |
179,2,39,2,40,0,182,0,183,0,196,2,41,0,180,0,181,0,197,0,130,0,194,0,135, |
0,171,0,198,2,42,2,43,0,190,0,191,2,44,2,45,2,46,2,47,0,247,2,48,2,49,2,50, |
2,51,2,52,2,53,0,140,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2, |
64,2,65,2,66,0,152,2,67,0,154,0,153,0,239,0,165,0,146,2,68,2,69,0,156,0,167, |
0,143,2,70,0,148,0,149,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80, |
2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95, |
2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108, |
2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2, |
121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,0,185,2,132, |
2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2, |
145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157, |
2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,7,117,110,105, |
48,48,65,48,7,117,110,105,48,48,65,68,7,117,110,105,48,51,55,69,7,117,110, |
105,48,48,66,50,7,117,110,105,48,48,66,51,7,117,110,105,48,48,66,53,7,117, |
110,105,50,50,49,57,7,117,110,105,48,48,66,57,7,65,109,97,99,114,111,110, |
7,97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97,98,114,101,118,101, |
7,65,111,103,111,110,101,107,7,97,111,103,111,110,101,107,11,67,99,105,114, |
99,117,109,102,108,101,120,11,99,99,105,114,99,117,109,102,108,101,120,10, |
67,100,111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99,101,110,116, |
6,68,99,97,114,111,110,6,100,99,97,114,111,110,6,68,99,114,111,97,116,7,69, |
109,97,99,114,111,110,7,101,109,97,99,114,111,110,6,69,98,114,101,118,101, |
6,101,98,114,101,118,101,10,69,100,111,116,97,99,99,101,110,116,10,101,100, |
111,116,97,99,99,101,110,116,7,69,111,103,111,110,101,107,7,101,111,103,111, |
110,101,107,6,69,99,97,114,111,110,6,101,99,97,114,111,110,11,71,99,105,114, |
99,117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108,101,120,10, |
71,100,111,116,97,99,99,101,110,116,10,103,100,111,116,97,99,99,101,110,116, |
12,71,99,111,109,109,97,97,99,99,101,110,116,12,103,99,111,109,109,97,97, |
99,99,101,110,116,11,72,99,105,114,99,117,109,102,108,101,120,11,104,99,105, |
114,99,117,109,102,108,101,120,4,72,98,97,114,4,104,98,97,114,6,73,116,105, |
108,100,101,6,105,116,105,108,100,101,7,73,109,97,99,114,111,110,7,105,109, |
97,99,114,111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101,7,73,111, |
103,111,110,101,107,7,105,111,103,111,110,101,107,2,73,74,2,105,106,11,74, |
99,105,114,99,117,109,102,108,101,120,11,106,99,105,114,99,117,109,102,108, |
101,120,12,75,99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109,109, |
97,97,99,99,101,110,116,12,107,103,114,101,101,110,108,97,110,100,105,99, |
6,76,97,99,117,116,101,6,108,97,99,117,116,101,12,76,99,111,109,109,97,97, |
99,99,101,110,116,12,108,99,111,109,109,97,97,99,99,101,110,116,6,76,99,97, |
114,111,110,6,108,99,97,114,111,110,4,76,100,111,116,4,108,100,111,116,6, |
78,97,99,117,116,101,6,110,97,99,117,116,101,12,78,99,111,109,109,97,97,99, |
99,101,110,116,12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99,97,114, |
111,110,6,110,99,97,114,111,110,11,110,97,112,111,115,116,114,111,112,104, |
101,3,69,110,103,3,101,110,103,7,79,109,97,99,114,111,110,7,111,109,97,99, |
114,111,110,6,79,98,114,101,118,101,6,111,98,114,101,118,101,13,79,104,117, |
110,103,97,114,117,109,108,97,117,116,13,111,104,117,110,103,97,114,117,109, |
108,97,117,116,6,82,97,99,117,116,101,6,114,97,99,117,116,101,12,82,99,111, |
109,109,97,97,99,99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110, |
116,6,82,99,97,114,111,110,6,114,99,97,114,111,110,6,83,97,99,117,116,101, |
6,115,97,99,117,116,101,11,83,99,105,114,99,117,109,102,108,101,120,11,115, |
99,105,114,99,117,109,102,108,101,120,12,84,99,111,109,109,97,97,99,99,101, |
110,116,12,116,99,111,109,109,97,97,99,99,101,110,116,6,84,99,97,114,111, |
110,6,116,99,97,114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116,105,108, |
100,101,6,117,116,105,108,100,101,7,85,109,97,99,114,111,110,7,117,109,97, |
99,114,111,110,6,85,98,114,101,118,101,6,117,98,114,101,118,101,5,85,114, |
105,110,103,5,117,114,105,110,103,13,85,104,117,110,103,97,114,117,109,108, |
97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117,116,7,85,111, |
103,111,110,101,107,7,117,111,103,111,110,101,107,11,87,99,105,114,99,117, |
109,102,108,101,120,11,119,99,105,114,99,117,109,102,108,101,120,11,89,99, |
105,114,99,117,109,102,108,101,120,11,121,99,105,114,99,117,109,102,108,101, |
120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10,90,100,111,116,97,99, |
99,101,110,116,10,122,100,111,116,97,99,99,101,110,116,5,108,111,110,103, |
115,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105,110,103,97,99,117, |
116,101,7,65,69,97,99,117,116,101,7,97,101,97,99,117,116,101,11,79,115,108, |
97,115,104,97,99,117,116,101,11,111,115,108,97,115,104,97,99,117,116,101, |
7,117,110,105,48,50,67,57,5,116,111,110,111,115,13,100,105,101,114,101,115, |
105,115,116,111,110,111,115,10,65,108,112,104,97,116,111,110,111,115,9,97, |
110,111,116,101,108,101,105,97,12,69,112,115,105,108,111,110,116,111,110, |
111,115,8,69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110,111,115, |
12,79,109,105,99,114,111,110,116,111,110,111,115,12,85,112,115,105,108,111, |
110,116,111,110,111,115,10,79,109,101,103,97,116,111,110,111,115,17,105,111, |
116,97,100,105,101,114,101,115,105,115,116,111,110,111,115,5,65,108,112,104, |
97,4,66,101,116,97,5,71,97,109,109,97,7,69,112,115,105,108,111,110,4,90,101, |
116,97,3,69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75,97,112,112,97, |
6,76,97,109,98,100,97,2,77,117,2,78,117,2,88,105,7,79,109,105,99,114,111, |
110,2,80,105,3,82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112,115,105, |
108,111,110,3,80,104,105,3,67,104,105,3,80,115,105,12,73,111,116,97,100,105, |
101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,10,97,108,112,104,97,116,111,110,111,115,12,101,112,115,105,108, |
111,110,116,111,110,111,115,8,101,116,97,116,111,110,111,115,9,105,111,116, |
97,116,111,110,111,115,20,117,112,115,105,108,111,110,100,105,101,114,101, |
115,105,115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116,97,5,103, |
97,109,109,97,5,100,101,108,116,97,7,101,112,115,105,108,111,110,4,122,101, |
116,97,3,101,116,97,5,116,104,101,116,97,4,105,111,116,97,5,107,97,112,112, |
97,6,108,97,109,98,100,97,2,110,117,2,120,105,7,111,109,105,99,114,111,110, |
3,114,104,111,6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97,117,7, |
117,112,115,105,108,111,110,3,112,104,105,3,99,104,105,3,112,115,105,5,111, |
109,101,103,97,12,105,111,116,97,100,105,101,114,101,115,105,115,15,117,112, |
115,105,108,111,110,100,105,101,114,101,115,105,115,12,111,109,105,99,114, |
111,110,116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110,111, |
115,10,111,109,101,103,97,116,111,110,111,115,9,97,102,105,105,49,48,48,50, |
51,9,97,102,105,105,49,48,48,53,49,9,97,102,105,105,49,48,48,53,50,9,97,102, |
105,105,49,48,48,53,51,9,97,102,105,105,49,48,48,53,52,9,97,102,105,105,49, |
48,48,53,53,9,97,102,105,105,49,48,48,53,54,9,97,102,105,105,49,48,48,53, |
55,9,97,102,105,105,49,48,48,53,56,9,97,102,105,105,49,48,48,53,57,9,97,102, |
105,105,49,48,48,54,48,9,97,102,105,105,49,48,48,54,49,9,97,102,105,105,49, |
48,48,54,50,9,97,102,105,105,49,48,49,52,53,9,97,102,105,105,49,48,48,49, |
55,9,97,102,105,105,49,48,48,49,56,9,97,102,105,105,49,48,48,49,57,9,97,102, |
105,105,49,48,48,50,48,9,97,102,105,105,49,48,48,50,49,9,97,102,105,105,49, |
48,48,50,50,9,97,102,105,105,49,48,48,50,52,9,97,102,105,105,49,48,48,50, |
53,9,97,102,105,105,49,48,48,50,54,9,97,102,105,105,49,48,48,50,55,9,97,102, |
105,105,49,48,48,50,56,9,97,102,105,105,49,48,48,50,57,9,97,102,105,105,49, |
48,48,51,48,9,97,102,105,105,49,48,48,51,49,9,97,102,105,105,49,48,48,51, |
50,9,97,102,105,105,49,48,48,51,51,9,97,102,105,105,49,48,48,51,52,9,97,102, |
105,105,49,48,48,51,53,9,97,102,105,105,49,48,48,51,54,9,97,102,105,105,49, |
48,48,51,55,9,97,102,105,105,49,48,48,51,56,9,97,102,105,105,49,48,48,51, |
57,9,97,102,105,105,49,48,48,52,48,9,97,102,105,105,49,48,48,52,49,9,97,102, |
105,105,49,48,48,52,50,9,97,102,105,105,49,48,48,52,51,9,97,102,105,105,49, |
48,48,52,52,9,97,102,105,105,49,48,48,52,53,9,97,102,105,105,49,48,48,52, |
54,9,97,102,105,105,49,48,48,52,55,9,97,102,105,105,49,48,48,52,56,9,97,102, |
105,105,49,48,48,52,57,9,97,102,105,105,49,48,48,54,53,9,97,102,105,105,49, |
48,48,54,54,9,97,102,105,105,49,48,48,54,55,9,97,102,105,105,49,48,48,54, |
56,9,97,102,105,105,49,48,48,54,57,9,97,102,105,105,49,48,48,55,48,9,97,102, |
105,105,49,48,48,55,50,9,97,102,105,105,49,48,48,55,51,9,97,102,105,105,49, |
48,48,55,52,9,97,102,105,105,49,48,48,55,53,9,97,102,105,105,49,48,48,55, |
54,9,97,102,105,105,49,48,48,55,55,9,97,102,105,105,49,48,48,55,56,9,97,102, |
105,105,49,48,48,55,57,9,97,102,105,105,49,48,48,56,48,9,97,102,105,105,49, |
48,48,56,49,9,97,102,105,105,49,48,48,56,50,9,97,102,105,105,49,48,48,56, |
51,9,97,102,105,105,49,48,48,56,52,9,97,102,105,105,49,48,48,56,53,9,97,102, |
105,105,49,48,48,56,54,9,97,102,105,105,49,48,48,56,55,9,97,102,105,105,49, |
48,48,56,56,9,97,102,105,105,49,48,48,56,57,9,97,102,105,105,49,48,48,57, |
48,9,97,102,105,105,49,48,48,57,49,9,97,102,105,105,49,48,48,57,50,9,97,102, |
105,105,49,48,48,57,51,9,97,102,105,105,49,48,48,57,52,9,97,102,105,105,49, |
48,48,57,53,9,97,102,105,105,49,48,48,57,54,9,97,102,105,105,49,48,48,57, |
55,9,97,102,105,105,49,48,48,55,49,9,97,102,105,105,49,48,48,57,57,9,97,102, |
105,105,49,48,49,48,48,9,97,102,105,105,49,48,49,48,49,9,97,102,105,105,49, |
48,49,48,50,9,97,102,105,105,49,48,49,48,51,9,97,102,105,105,49,48,49,48, |
52,9,97,102,105,105,49,48,49,48,53,9,97,102,105,105,49,48,49,48,54,9,97,102, |
105,105,49,48,49,48,55,9,97,102,105,105,49,48,49,48,56,9,97,102,105,105,49, |
48,49,48,57,9,97,102,105,105,49,48,49,49,48,9,97,102,105,105,49,48,49,57, |
51,9,97,102,105,105,49,48,48,53,48,9,97,102,105,105,49,48,48,57,56,6,87,103, |
114,97,118,101,6,119,103,114,97,118,101,6,87,97,99,117,116,101,6,119,97,99, |
117,116,101,9,87,100,105,101,114,101,115,105,115,9,119,100,105,101,114,101, |
115,105,115,6,89,103,114,97,118,101,6,121,103,114,97,118,101,9,97,102,105, |
105,48,48,50,48,56,13,117,110,100,101,114,115,99,111,114,101,100,98,108,13, |
113,117,111,116,101,114,101,118,101,114,115,101,100,6,109,105,110,117,116, |
101,6,115,101,99,111,110,100,9,101,120,99,108,97,109,100,98,108,7,117,110, |
105,50,48,51,69,7,117,110,105,50,50,49,53,7,117,110,105,50,48,55,70,4,108, |
105,114,97,6,112,101,115,101,116,97,4,69,117,114,111,9,97,102,105,105,54, |
49,50,52,56,9,97,102,105,105,54,49,50,56,57,9,97,102,105,105,54,49,51,53, |
50,7,117,110,105,50,49,50,54,9,101,115,116,105,109,97,116,101,100,9,111,110, |
101,101,105,103,104,116,104,12,116,104,114,101,101,101,105,103,104,116,104, |
115,11,102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101,110, |
101,105,103,104,116,104,115,9,97,114,114,111,119,108,101,102,116,7,97,114, |
114,111,119,117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114,114, |
111,119,100,111,119,110,9,97,114,114,111,119,98,111,116,104,9,97,114,114, |
111,119,117,112,100,110,12,97,114,114,111,119,117,112,100,110,98,115,101, |
7,117,110,105,50,50,48,54,10,111,114,116,104,111,103,111,110,97,108,12,105, |
110,116,101,114,115,101,99,116,105,111,110,11,101,113,117,105,118,97,108, |
101,110,99,101,5,104,111,117,115,101,13,114,101,118,108,111,103,105,99,97, |
108,110,111,116,10,105,110,116,101,103,114,97,108,116,112,10,105,110,116, |
101,103,114,97,108,98,116,8,83,70,49,48,48,48,48,48,8,83,70,49,49,48,48,48, |
48,8,83,70,48,49,48,48,48,48,8,83,70,48,51,48,48,48,48,8,83,70,48,50,48,48, |
48,48,8,83,70,48,52,48,48,48,48,8,83,70,48,56,48,48,48,48,8,83,70,48,57,48, |
48,48,48,8,83,70,48,54,48,48,48,48,8,83,70,48,55,48,48,48,48,8,83,70,48,53, |
48,48,48,48,8,83,70,52,51,48,48,48,48,8,83,70,50,52,48,48,48,48,8,83,70,53, |
49,48,48,48,48,8,83,70,53,50,48,48,48,48,8,83,70,51,57,48,48,48,48,8,83,70, |
50,50,48,48,48,48,8,83,70,50,49,48,48,48,48,8,83,70,50,53,48,48,48,48,8,83, |
70,53,48,48,48,48,48,8,83,70,52,57,48,48,48,48,8,83,70,51,56,48,48,48,48, |
8,83,70,50,56,48,48,48,48,8,83,70,50,55,48,48,48,48,8,83,70,50,54,48,48,48, |
48,8,83,70,51,54,48,48,48,48,8,83,70,51,55,48,48,48,48,8,83,70,52,50,48,48, |
48,48,8,83,70,49,57,48,48,48,48,8,83,70,50,48,48,48,48,48,8,83,70,50,51,48, |
48,48,48,8,83,70,52,55,48,48,48,48,8,83,70,52,56,48,48,48,48,8,83,70,52,49, |
48,48,48,48,8,83,70,52,53,48,48,48,48,8,83,70,52,54,48,48,48,48,8,83,70,52, |
48,48,48,48,48,8,83,70,53,52,48,48,48,48,8,83,70,53,51,48,48,48,48,8,83,70, |
52,52,48,48,48,48,7,117,112,98,108,111,99,107,7,100,110,98,108,111,99,107, |
5,98,108,111,99,107,7,108,102,98,108,111,99,107,7,114,116,98,108,111,99,107, |
7,108,116,115,104,97,100,101,5,115,104,97,100,101,7,100,107,115,104,97,100, |
101,9,102,105,108,108,101,100,98,111,120,6,72,50,50,48,55,51,6,72,49,56,53, |
52,51,6,72,49,56,53,53,49,10,102,105,108,108,101,100,114,101,99,116,7,116, |
114,105,97,103,117,112,7,116,114,105,97,103,114,116,7,116,114,105,97,103, |
100,110,7,116,114,105,97,103,108,102,6,99,105,114,99,108,101,6,72,49,56,53, |
51,51,9,105,110,118,98,117,108,108,101,116,9,105,110,118,99,105,114,99,108, |
101,10,111,112,101,110,98,117,108,108,101,116,9,115,109,105,108,101,102,97, |
99,101,12,105,110,118,115,109,105,108,101,102,97,99,101,3,115,117,110,6,102, |
101,109,97,108,101,4,109,97,108,101,5,115,112,97,100,101,4,99,108,117,98, |
5,104,101,97,114,116,7,100,105,97,109,111,110,100,11,109,117,115,105,99,97, |
108,110,111,116,101,14,109,117,115,105,99,97,108,110,111,116,101,100,98,108, |
7,117,110,105,70,66,48,49,7,117,110,105,70,66,48,50,7,117,110,105,70,48,48, |
53,6,109,105,100,100,111,116,7,117,110,105,70,48,48,52,7,117,110,105,50,48, |
55,52,7,117,110,105,50,48,55,53,7,117,110,105,50,48,55,55,7,117,110,105,50, |
48,55,56,8,103,108,121,112,104,53,55,49,8,103,108,121,112,104,53,55,50,8, |
103,108,121,112,104,53,55,51,8,103,108,121,112,104,53,55,52,8,103,108,121, |
112,104,53,55,53,8,103,108,121,112,104,53,55,54,8,103,108,121,112,104,53, |
55,55,8,103,108,121,112,104,53,55,56,8,103,108,121,112,104,53,55,57,8,103, |
108,121,112,104,53,56,48,8,103,108,121,112,104,53,56,49,0,0,0,0,0,0,3,0,8, |
0,2,0,17,0,1,255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,0,0,0,0,2,0,1,0,1,2,155, |
0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,10,0,76,0,78,0,4,68,70,76,84,0,26,99,121,114, |
108,0,36,103,114,101,107,0,46,108,97,116,110,0,56,0,4,0,0,0,0,255,255,0,0, |
0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0,4,0,0,0,0,255,255,0,0,0, |
0,0,0,0,1,0,0,0,10,0,84,0,98,0,4,68,70,76,84,0,26,99,121,114,108,0,38,103, |
114,101,107,0,50,108,97,116,110,0,62,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0, |
0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0, |
0,0,1,107,101,114,110,0,8,0,0,0,1,0,0,0,1,0,4,0,2,0,0,0,1,0,8,0,1,15,112, |
0,4,0,0,0,105,0,220,1,6,1,12,1,50,1,64,1,94,1,112,1,130,1,204,2,2,2,52,2, |
114,2,124,2,138,2,148,2,138,2,158,2,196,2,202,3,28,3,38,3,84,3,118,3,144, |
3,166,3,228,3,254,4,20,4,46,4,56,4,190,5,44,5,58,3,28,5,100,5,186,5,204,6, |
22,6,28,6,82,6,136,5,186,6,178,6,216,6,230,5,186,7,16,5,186,5,186,5,186,7, |
62,7,84,7,90,7,96,7,166,7,224,8,54,8,168,8,194,8,204,8,246,9,24,9,46,9,60, |
9,98,9,144,9,242,10,48,10,174,11,72,11,106,11,136,11,146,11,156,11,166,11, |
224,12,14,12,64,12,82,12,144,12,210,12,252,13,6,13,44,13,62,13,108,13,150, |
13,160,13,174,13,208,13,242,14,4,14,46,14,112,14,142,14,180,14,198,14,212, |
14,222,15,0,15,30,15,40,15,70,15,76,15,90,0,10,0,36,255,143,0,55,255,219, |
0,60,255,219,1,82,255,143,1,91,255,143,1,94,255,143,1,101,255,143,1,109,255, |
219,1,110,255,219,1,116,255,219,0,1,0,20,255,104,0,9,0,3,255,143,0,55,255, |
104,0,57,255,104,0,58,255,180,0,60,255,104,0,89,255,219,0,90,255,219,0,92, |
255,219,2,3,255,104,0,3,0,15,255,29,0,17,255,29,0,36,255,143,0,7,0,3,255, |
180,0,55,255,104,0,57,255,104,0,58,255,104,0,60,255,104,0,92,255,180,2,3, |
255,143,0,4,0,3,255,219,0,15,254,248,0,17,254,248,0,36,255,104,0,4,0,55,255, |
219,0,57,255,219,0,58,255,219,0,60,255,219,0,18,0,3,255,219,0,15,255,29,0, |
16,255,143,0,17,255,29,0,29,255,29,0,30,255,29,0,36,255,104,0,50,255,219, |
0,68,255,29,0,70,255,29,0,72,255,29,0,76,255,180,0,82,255,29,0,85,255,180, |
0,86,255,29,0,88,255,180,0,90,255,143,0,92,255,143,0,13,0,15,255,68,0,16, |
255,143,0,17,255,68,0,29,255,180,0,30,255,180,0,36,255,104,0,68,255,104,0, |
72,255,143,0,76,255,219,0,82,255,143,0,85,255,180,0,88,255,180,0,92,255,180, |
0,12,0,15,255,143,0,16,255,219,0,17,255,143,0,29,255,219,0,30,255,219,0,36, |
255,180,0,68,255,180,0,72,255,219,0,82,255,219,0,85,255,219,0,88,255,219, |
0,92,255,238,0,15,0,3,255,219,0,15,254,248,0,16,255,68,0,17,254,248,0,29, |
255,143,0,30,255,123,0,36,255,104,0,68,255,104,0,72,255,68,0,76,255,180,0, |
82,255,68,0,83,255,104,0,84,255,68,0,88,255,143,0,89,255,143,0,2,0,73,255, |
219,2,3,0,37,0,3,0,15,255,143,0,17,255,143,2,3,0,76,0,2,0,15,255,104,0,17, |
255,104,0,2,0,15,255,143,0,17,255,143,0,9,1,98,255,213,1,105,255,213,1,109, |
255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124,255,219,1,134,255, |
219,1,144,255,219,0,1,1,110,255,190,0,20,1,90,0,170,1,91,255,104,1,94,255, |
104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255,158, |
1,119,255,104,1,120,255,180,1,122,255,70,1,128,255,104,1,130,255,180,1,131, |
255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1, |
149,255,70,0,2,1,110,255,209,1,116,255,209,0,11,0,3,255,143,1,98,255,213, |
1,105,255,213,1,109,255,104,1,110,255,104,1,111,255,197,1,116,255,104,1,124, |
255,219,1,134,255,219,1,144,255,219,2,3,255,104,0,8,0,15,255,31,0,17,255, |
31,1,90,0,164,1,91,255,68,1,94,255,68,1,101,255,68,1,130,255,168,1,147,0, |
88,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,137,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,219,1,101,255,219,1,110,255,190,1, |
116,255,190,0,15,1,98,255,193,1,105,255,193,1,111,255,143,1,117,255,231,1, |
122,255,231,1,125,255,231,1,127,255,231,1,129,255,231,1,135,255,231,1,136, |
255,231,1,140,255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255, |
231,0,6,0,3,255,143,1,98,255,213,1,105,255,213,1,109,255,104,1,110,255,104, |
1,116,255,104,0,5,1,91,255,219,1,94,255,213,1,101,255,219,1,110,255,190,1, |
116,255,190,0,6,0,3,255,219,0,15,254,250,0,17,254,250,1,91,255,104,1,94,255, |
104,1,101,255,104,0,2,1,137,255,158,1,141,255,158,0,33,0,3,255,219,0,15,255, |
31,0,17,255,31,0,29,255,31,0,30,255,31,1,90,0,188,1,91,255,104,1,94,255,104, |
1,98,255,219,1,101,255,104,1,105,255,219,1,111,255,219,1,114,255,219,1,117, |
255,31,1,118,255,31,1,121,255,78,1,122,255,31,1,124,255,78,1,126,255,31,1, |
128,255,106,1,130,255,180,1,133,255,106,1,134,255,143,1,136,255,31,1,140, |
255,31,1,142,255,80,1,143,255,31,1,144,255,143,1,145,255,106,1,147,0,188, |
1,148,255,78,1,149,255,31,1,150,255,78,0,27,0,3,255,219,0,15,254,250,0,16, |
255,70,0,17,254,250,0,29,255,143,0,30,255,143,1,90,0,188,1,91,255,104,1,94, |
255,104,1,98,255,141,1,101,255,104,1,105,255,141,1,111,255,141,1,114,255, |
158,1,119,255,104,1,120,255,180,1,122,255,70,1,124,255,158,1,128,255,104, |
1,130,255,180,1,131,255,104,1,133,255,104,1,136,255,70,1,140,255,70,1,143, |
255,70,1,147,0,121,1,149,255,70,0,3,1,91,255,197,1,110,255,190,1,116,255, |
190,0,10,1,117,255,178,1,122,255,178,1,125,255,178,1,129,255,217,1,136,255, |
178,1,140,255,178,1,143,255,178,1,146,255,178,1,149,255,178,1,151,255,178, |
0,21,0,3,255,219,1,90,0,170,1,91,255,104,1,94,255,104,1,98,255,141,1,101, |
255,104,1,105,255,141,1,111,255,141,1,114,255,158,1,119,255,104,1,120,255, |
180,1,122,255,70,1,128,255,104,1,130,255,180,1,131,255,104,1,133,255,104, |
1,136,255,70,1,140,255,70,1,143,255,70,1,147,0,98,1,149,255,70,0,4,1,132, |
255,217,1,137,255,227,1,141,255,227,1,144,255,201,0,18,1,117,255,119,1,119, |
255,219,1,122,255,119,1,124,255,170,1,125,255,180,1,128,255,219,1,129,255, |
158,1,130,255,219,1,131,255,219,1,134,255,170,1,136,255,119,1,137,255,170, |
1,140,255,119,1,141,255,170,1,143,255,119,1,146,255,119,1,149,255,119,1,151, |
255,119,0,1,1,132,255,217,0,13,1,117,255,231,1,122,255,231,1,125,255,231, |
1,127,255,231,1,129,255,231,1,135,255,231,1,136,255,231,1,139,255,231,1,140, |
255,231,1,143,255,231,1,146,255,231,1,149,255,231,1,151,255,231,0,13,1,117, |
255,225,1,122,255,225,1,125,255,225,1,135,255,225,1,136,255,225,1,139,255, |
209,1,140,255,225,1,142,255,207,1,143,255,219,1,146,255,225,1,149,255,225, |
1,150,255,207,1,151,255,225,0,10,1,117,255,201,1,122,255,201,1,125,255,201, |
1,127,255,201,1,135,255,201,1,136,255,201,1,139,255,201,1,140,255,201,1,143, |
255,201,1,149,255,201,0,9,1,117,255,227,1,122,255,227,1,127,255,227,1,136, |
255,227,1,139,255,227,1,140,255,227,1,143,255,227,1,146,255,227,1,151,255, |
227,0,3,1,132,255,217,1,137,255,227,1,141,255,227,0,10,1,117,255,227,1,122, |
255,227,1,125,255,227,1,127,255,227,1,136,255,227,1,139,255,227,1,140,255, |
227,1,143,255,227,1,146,255,227,1,151,255,227,0,11,1,117,255,201,1,122,255, |
201,1,125,255,201,1,127,255,201,1,136,255,201,1,139,255,201,1,140,255,201, |
1,143,255,201,1,146,255,201,1,149,255,201,1,151,255,201,0,5,0,15,255,6,0, |
17,255,6,0,108,255,119,0,123,255,119,1,255,255,211,0,1,2,3,255,96,0,1,2,3, |
255,119,0,17,1,170,0,68,1,173,255,233,1,177,0,45,1,180,255,211,1,181,255, |
233,1,183,255,211,1,184,255,96,1,185,255,166,1,186,255,188,1,189,255,96,1, |
195,255,211,1,198,0,23,1,216,255,211,1,217,255,233,1,218,0,23,1,227,0,45, |
2,3,255,141,0,14,1,166,255,211,1,173,255,233,1,180,255,233,1,183,255,233, |
1,184,255,164,1,185,255,209,1,186,255,233,1,187,255,211,1,189,255,164,1,192, |
255,188,1,195,255,233,1,197,255,233,1,209,255,233,1,217,255,211,0,21,1,166, |
255,188,1,170,255,211,1,172,255,211,1,173,255,188,1,177,255,233,1,180,255, |
188,1,183,255,188,1,184,255,119,1,185,255,188,1,186,255,188,1,187,255,166, |
1,189,255,164,1,192,255,141,1,197,255,188,1,202,255,233,1,210,255,233,1,216, |
255,188,1,217,255,233,1,219,255,233,1,221,255,188,1,229,255,233,0,28,0,15, |
255,6,0,17,255,6,0,108,255,119,0,123,255,119,1,166,255,119,1,170,255,119, |
1,173,255,211,1,177,255,141,1,178,255,209,1,180,255,141,1,183,255,164,1,197, |
255,188,1,198,255,141,1,200,255,141,1,202,255,119,1,203,255,119,1,206,255, |
141,1,209,255,141,1,210,255,141,1,211,255,141,1,212,255,119,1,214,255,141, |
1,217,255,119,1,225,255,141,1,226,255,141,1,228,255,141,1,229,255,119,1,255, |
255,211,0,6,1,185,0,23,1,186,255,211,1,189,255,186,1,205,0,68,1,212,0,23, |
1,217,0,45,0,2,1,173,255,211,1,215,255,233,0,10,1,173,255,233,1,180,255,211, |
1,183,255,233,1,184,0,23,1,185,0,45,1,192,0,45,1,198,0,23,1,203,255,231,1, |
212,255,233,1,217,255,233,0,8,1,177,255,233,1,180,255,233,1,183,255,233,1, |
184,255,211,1,185,255,233,1,186,255,233,1,189,255,211,1,197,255,233,0,5,1, |
173,255,233,1,180,255,233,1,183,255,233,1,185,0,23,1,186,255,186,0,3,1,186, |
255,233,1,199,0,23,1,217,0,23,0,9,1,186,255,233,1,189,255,233,1,198,0,23, |
1,203,0,23,1,212,0,23,1,215,0,23,1,217,0,23,1,221,255,233,1,227,0,23,0,11, |
1,166,255,211,1,170,255,211,1,172,255,211,1,177,255,233,1,185,255,211,1,187, |
255,164,1,189,255,211,1,197,255,211,1,202,255,211,1,209,255,233,1,219,255, |
233,0,24,0,15,254,125,0,17,254,125,0,29,255,211,0,30,255,211,0,123,255,141, |
1,166,255,119,1,170,255,119,1,172,255,233,1,173,255,211,1,177,255,141,1,178, |
255,233,1,180,255,211,1,183,255,233,1,184,255,164,1,185,255,211,1,186,255, |
233,1,187,255,164,1,197,255,211,1,198,255,188,1,202,255,96,1,203,255,166, |
1,212,255,166,1,227,255,211,1,229,255,188,0,15,1,166,255,211,1,170,255,211, |
1,173,255,233,1,177,255,188,1,178,255,233,1,180,255,211,1,184,255,188,1,185, |
255,188,1,187,255,141,1,189,255,188,1,192,255,186,1,195,255,233,1,198,0,23, |
1,204,0,45,1,221,255,233,0,31,0,15,255,29,0,17,255,29,0,108,255,166,0,123, |
255,166,1,166,255,188,1,170,255,188,1,172,0,23,1,173,255,233,1,177,255,211, |
1,180,255,164,1,186,255,188,1,197,255,211,1,198,255,164,1,200,255,166,1,203, |
255,141,1,206,255,166,1,208,255,166,1,209,255,164,1,210,255,166,1,212,255, |
96,1,213,255,166,1,214,255,141,1,215,255,141,1,217,255,141,1,219,255,166, |
1,223,255,166,1,225,255,166,1,226,255,166,1,228,255,166,1,229,255,141,1,255, |
255,211,0,38,0,15,254,240,0,17,254,240,0,29,255,211,0,30,255,211,0,108,255, |
166,0,123,255,164,1,166,255,119,1,170,255,164,1,173,255,211,1,177,255,188, |
1,180,255,188,1,186,255,188,1,195,255,211,1,197,255,211,1,199,255,211,1,200, |
255,141,1,201,255,164,1,202,255,96,1,203,255,119,1,204,255,188,1,205,255, |
141,1,206,255,164,1,207,255,188,1,208,255,164,1,209,255,119,1,210,255,164, |
1,211,255,164,1,212,255,119,1,213,255,164,1,214,255,164,1,215,255,119,1,219, |
255,164,1,220,255,164,1,222,255,164,1,223,255,164,1,228,255,164,1,229,255, |
119,1,255,255,233,0,8,1,166,255,211,1,170,255,188,1,177,255,188,1,184,255, |
141,1,185,255,164,1,189,255,211,1,197,255,186,1,209,255,188,0,7,1,173,255, |
211,1,180,255,188,1,183,255,188,1,186,255,188,1,195,255,186,1,212,255,233, |
1,217,255,211,0,2,1,180,255,211,1,198,0,45,0,2,1,198,0,23,1,217,0,45,0,2, |
1,197,255,188,2,3,255,119,0,14,1,166,255,211,1,170,255,211,1,172,255,188, |
1,173,255,233,1,177,255,186,1,178,255,211,1,180,255,211,1,183,255,211,1,184, |
255,51,1,187,255,164,1,189,255,96,1,195,255,233,1,197,255,164,2,3,255,96, |
0,11,1,170,255,188,1,172,255,231,1,173,255,233,1,177,255,188,1,187,255,186, |
1,197,255,211,1,202,255,188,1,204,0,23,1,209,255,188,1,210,255,233,1,229, |
255,233,0,12,1,166,255,188,1,170,255,166,1,172,255,211,1,177,255,164,1,180, |
255,233,1,183,255,233,1,184,255,141,1,187,255,164,1,189,255,188,1,202,255, |
164,1,209,255,164,1,210,255,233,0,4,1,205,255,233,1,216,255,211,1,217,255, |
233,1,221,255,211,0,15,1,198,255,209,1,202,255,164,1,203,255,233,1,204,255, |
233,1,205,255,211,1,209,255,164,1,210,255,211,1,215,255,233,1,217,255,211, |
1,218,255,233,1,219,255,188,1,221,255,188,1,224,255,188,1,227,255,233,1,229, |
255,211,0,16,1,198,255,233,1,199,255,233,1,202,255,233,1,203,255,233,1,204, |
255,233,1,205,255,233,1,209,255,209,1,210,255,233,1,212,255,233,1,215,255, |
233,1,216,255,211,1,217,255,211,1,218,255,233,1,221,255,164,1,224,255,188, |
1,229,255,233,0,10,0,15,255,6,0,17,255,6,1,198,255,211,1,202,255,164,1,203, |
255,211,1,205,255,233,1,209,255,211,1,212,255,211,1,215,255,211,1,229,255, |
233,0,2,1,224,255,211,1,227,0,23,0,9,1,199,255,233,1,202,255,211,1,204,255, |
233,1,205,255,211,1,209,255,188,1,216,255,188,1,217,255,233,1,219,255,211, |
1,221,255,188,0,4,1,199,0,23,1,217,0,23,1,221,255,233,1,224,0,45,0,11,1,199, |
255,233,1,202,255,211,1,203,255,233,1,205,255,233,1,209,255,233,1,212,255, |
233,1,215,255,233,1,217,255,233,1,218,255,233,1,221,255,188,1,224,255,211, |
0,10,1,198,0,45,1,199,0,45,1,203,0,23,1,205,0,23,1,209,0,23,1,212,0,23,1, |
215,0,23,1,216,0,23,1,217,0,23,1,227,0,23,0,2,1,212,0,23,1,221,255,211,0, |
3,1,199,255,233,1,205,255,233,1,217,0,23,0,8,1,202,255,211,1,204,255,233, |
1,205,255,233,1,209,255,211,1,216,255,211,1,217,255,233,1,219,255,233,1,221, |
255,211,0,8,1,202,255,209,1,205,255,233,1,209,255,186,1,216,255,211,1,217, |
255,233,1,219,255,233,1,221,255,211,1,229,255,233,0,4,1,204,0,23,1,212,0, |
23,1,221,255,233,1,227,0,23,0,10,0,15,255,29,0,17,255,29,1,198,255,233,1, |
202,255,188,1,203,255,233,1,204,0,68,1,209,255,211,1,212,255,233,1,215,255, |
233,1,217,0,23,0,16,0,15,255,51,0,17,255,51,0,123,0,23,1,198,255,233,1,199, |
0,23,1,202,255,188,1,203,255,233,1,204,0,23,1,209,255,211,1,210,255,233,1, |
212,255,231,1,214,255,233,1,215,255,233,1,218,255,233,1,227,255,233,1,229, |
255,233,0,7,1,199,255,233,1,202,255,211,1,209,255,211,1,216,255,211,1,217, |
255,233,1,221,255,211,1,229,255,233,0,9,1,198,255,233,1,199,255,233,1,203, |
255,233,1,205,255,233,1,212,255,233,1,215,255,233,1,216,255,233,1,218,255, |
233,1,221,255,211,0,4,1,203,255,233,1,205,255,233,1,212,255,233,1,215,255, |
233,0,3,1,203,255,233,1,212,255,233,1,217,0,23,0,2,1,216,255,96,1,221,255, |
119,0,8,1,202,255,211,1,203,0,23,1,205,255,233,1,209,255,211,1,212,0,23,1, |
216,255,211,1,219,255,233,1,229,255,233,0,7,1,202,255,211,1,204,255,233,1, |
209,255,211,1,210,255,233,1,216,255,211,1,219,255,233,1,221,255,211,0,2,0, |
15,255,51,0,17,255,51,0,7,0,15,255,6,0,17,255,6,0,29,255,211,0,30,255,211, |
0,108,255,96,0,123,255,96,1,255,255,211,0,1,2,2,255,219,0,3,0,3,255,180,0, |
86,255,219,2,3,255,219,0,5,1,153,255,96,1,162,255,96,1,184,255,96,1,189,255, |
188,1,192,255,188,0,1,0,105,0,3,0,20,0,36,0,41,0,47,0,51,0,53,0,55,0,57,0, |
58,0,60,0,73,0,85,0,89,0,90,0,92,1,82,1,87,1,88,1,89,1,91,1,93,1,94,1,98, |
1,100,1,101,1,105,1,107,1,108,1,109,1,110,1,111,1,113,1,114,1,116,1,125,1, |
127,1,129,1,131,1,132,1,135,1,136,1,137,1,138,1,141,1,143,1,144,1,146,1,149, |
1,151,1,154,1,160,1,161,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1, |
176,1,177,1,178,1,180,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,191,1,192, |
1,194,1,195,1,196,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,208,1, |
209,1,210,1,212,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,223,1,226,1,227, |
1,228,1,242,1,244,2,2,2,3,2,8,0,0,0,1,0,0,0,0,199,254,176,223,0,0,0,0,191, |
26,255,128,0,0,0,0,196,4,48,20,}; |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/j2k.h |
---|
0,0 → 1,446 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __J2K_H |
#define __J2K_H |
/** |
@file j2k.h |
@brief The JPEG-2000 Codestream Reader/Writer (J2K) |
The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data. |
*/ |
/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ |
/*@{*/ |
#define J2K_CP_CSTY_PRT 0x01 |
#define J2K_CP_CSTY_SOP 0x02 |
#define J2K_CP_CSTY_EPH 0x04 |
#define J2K_CCP_CSTY_PRT 0x01 |
#define J2K_CCP_CBLKSTY_LAZY 0x01 /**< Selective arithmetic coding bypass */ |
#define J2K_CCP_CBLKSTY_RESET 0x02 /**< Reset context probabilities on coding pass boundaries */ |
#define J2K_CCP_CBLKSTY_TERMALL 0x04 /**< Termination on each coding pass */ |
#define J2K_CCP_CBLKSTY_VSC 0x08 /**< Vertically stripe causal context */ |
#define J2K_CCP_CBLKSTY_PTERM 0x10 /**< Predictable termination */ |
#define J2K_CCP_CBLKSTY_SEGSYM 0x20 /**< Segmentation symbols are used */ |
#define J2K_CCP_QNTSTY_NOQNT 0 |
#define J2K_CCP_QNTSTY_SIQNT 1 |
#define J2K_CCP_QNTSTY_SEQNT 2 |
/* ----------------------------------------------------------------------- */ |
#define J2K_MS_SOC 0xff4f /**< SOC marker value */ |
#define J2K_MS_SOT 0xff90 /**< SOT marker value */ |
#define J2K_MS_SOD 0xff93 /**< SOD marker value */ |
#define J2K_MS_EOC 0xffd9 /**< EOC marker value */ |
#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */ |
#define J2K_MS_COD 0xff52 /**< COD marker value */ |
#define J2K_MS_COC 0xff53 /**< COC marker value */ |
#define J2K_MS_RGN 0xff5e /**< RGN marker value */ |
#define J2K_MS_QCD 0xff5c /**< QCD marker value */ |
#define J2K_MS_QCC 0xff5d /**< QCC marker value */ |
#define J2K_MS_POC 0xff5f /**< POC marker value */ |
#define J2K_MS_TLM 0xff55 /**< TLM marker value */ |
#define J2K_MS_PLM 0xff57 /**< PLM marker value */ |
#define J2K_MS_PLT 0xff58 /**< PLT marker value */ |
#define J2K_MS_PPM 0xff60 /**< PPM marker value */ |
#define J2K_MS_PPT 0xff61 /**< PPT marker value */ |
#define J2K_MS_SOP 0xff91 /**< SOP marker value */ |
#define J2K_MS_EPH 0xff92 /**< EPH marker value */ |
#define J2K_MS_CRG 0xff63 /**< CRG marker value */ |
#define J2K_MS_COM 0xff64 /**< COM marker value */ |
/* UniPG>> */ |
#ifdef USE_JPWL |
#define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_EPB 0xff66 /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_ESD 0xff67 /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_RED 0xff69 /**< RED marker value (Part 11: JPEG 2000 for Wireless) */ |
#endif /* USE_JPWL */ |
#ifdef USE_JPSEC |
#define J2K_MS_SEC 0xff65 /**< SEC marker value (Part 8: Secure JPEG 2000) */ |
#define J2K_MS_INSEC 0xff94 /**< INSEC marker value (Part 8: Secure JPEG 2000) */ |
#endif /* USE_JPSEC */ |
/* <<UniPG */ |
/* ----------------------------------------------------------------------- */ |
/** |
Values that specify the status of the decoding process when decoding the main header. |
These values may be combined with a | operator. |
*/ |
typedef enum J2K_STATUS { |
J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */ |
J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */ |
J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */ |
J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */ |
J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */ |
J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */ |
J2K_STATE_NEOC = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */ |
J2K_STATE_ERR = 0x0080 /**< the decoding process has encountered an error */ |
} J2K_STATUS; |
/* ----------------------------------------------------------------------- */ |
/** |
T2 encoding mode |
*/ |
typedef enum T2_MODE { |
THRESH_CALC = 0, /** Function called in Rate allocation process*/ |
FINAL_PASS = 1 /** Function called in Tier 2 process*/ |
}J2K_T2_MODE; |
/** |
Quantization stepsize |
*/ |
typedef struct opj_stepsize { |
/** exponent */ |
int expn; |
/** mantissa */ |
int mant; |
} opj_stepsize_t; |
/** |
Tile-component coding parameters |
*/ |
typedef struct opj_tccp { |
/** coding style */ |
int csty; |
/** number of resolutions */ |
int numresolutions; |
/** code-blocks width */ |
int cblkw; |
/** code-blocks height */ |
int cblkh; |
/** code-block coding style */ |
int cblksty; |
/** discrete wavelet transform identifier */ |
int qmfbid; |
/** quantisation style */ |
int qntsty; |
/** stepsizes used for quantization */ |
opj_stepsize_t stepsizes[J2K_MAXBANDS]; |
/** number of guard bits */ |
int numgbits; |
/** Region Of Interest shift */ |
int roishift; |
/** precinct width */ |
int prcw[J2K_MAXRLVLS]; |
/** precinct height */ |
int prch[J2K_MAXRLVLS]; |
} opj_tccp_t; |
/** |
Tile coding parameters : |
this structure is used to store coding/decoding parameters common to all |
tiles (information like COD, COC in main header) |
*/ |
typedef struct opj_tcp { |
/** 1 : first part-tile of a tile */ |
int first; |
/** coding style */ |
int csty; |
/** progression order */ |
OPJ_PROG_ORDER prg; |
/** number of layers */ |
int numlayers; |
/** multi-component transform identifier */ |
int mct; |
/** rates of layers */ |
float rates[100]; |
/** number of progression order changes */ |
int numpocs; |
/** indicates if a POC marker has been used O:NO, 1:YES */ |
int POC; |
/** progression order changes */ |
opj_poc_t pocs[32]; |
/** packet header store there for futur use in t2_decode_packet */ |
unsigned char *ppt_data; |
/** pointer remaining on the first byte of the first header if ppt is used */ |
unsigned char *ppt_data_first; |
/** If ppt == 1 --> there was a PPT marker for the present tile */ |
int ppt; |
/** used in case of multiple marker PPT (number of info already stored) */ |
int ppt_store; |
/** ppmbug1 */ |
int ppt_len; |
/** add fixed_quality */ |
float distoratio[100]; |
/** tile-component coding parameters */ |
opj_tccp_t *tccps; |
} opj_tcp_t; |
/** |
Coding parameters |
*/ |
typedef struct opj_cp { |
/** Digital cinema profile*/ |
OPJ_CINEMA_MODE cinema; |
/** Maximum rate for each component. If == 0, component size limitation is not considered */ |
int max_comp_size; |
/** Size of the image in bits*/ |
int img_size; |
/** Rsiz*/ |
OPJ_RSIZ_CAPABILITIES rsiz; |
/** Enabling Tile part generation*/ |
char tp_on; |
/** Flag determining tile part generation*/ |
char tp_flag; |
/** Position of tile part flag in progression order*/ |
int tp_pos; |
/** allocation by rate/distortion */ |
int disto_alloc; |
/** allocation by fixed layer */ |
int fixed_alloc; |
/** add fixed_quality */ |
int fixed_quality; |
/** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ |
int reduce; |
/** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ |
int layer; |
/** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */ |
OPJ_LIMIT_DECODING limit_decoding; |
/** XTOsiz */ |
int tx0; |
/** YTOsiz */ |
int ty0; |
/** XTsiz */ |
int tdx; |
/** YTsiz */ |
int tdy; |
/** comment for coding */ |
char *comment; |
/** number of tiles in width */ |
int tw; |
/** number of tiles in heigth */ |
int th; |
/** ID number of the tiles present in the codestream */ |
int *tileno; |
/** size of the vector tileno */ |
int tileno_size; |
/** packet header store there for futur use in t2_decode_packet */ |
unsigned char *ppm_data; |
/** pointer remaining on the first byte of the first header if ppm is used */ |
unsigned char *ppm_data_first; |
/** if ppm == 1 --> there was a PPM marker for the present tile */ |
int ppm; |
/** use in case of multiple marker PPM (number of info already store) */ |
int ppm_store; |
/** use in case of multiple marker PPM (case on non-finished previous info) */ |
int ppm_previous; |
/** ppmbug1 */ |
int ppm_len; |
/** tile coding parameters */ |
opj_tcp_t *tcps; |
/** fixed layer */ |
int *matrice; |
/* UniPG>> */ |
#ifdef USE_JPWL |
/** enables writing of EPC in MH, thus activating JPWL */ |
bool epc_on; |
/** enables writing of EPB, in case of activated JPWL */ |
bool epb_on; |
/** enables writing of ESD, in case of activated JPWL */ |
bool esd_on; |
/** enables writing of informative techniques of ESD, in case of activated JPWL */ |
bool info_on; |
/** enables writing of RED, in case of activated JPWL */ |
bool red_on; |
/** error protection method for MH (0,1,16,32,37-128) */ |
int hprot_MH; |
/** tile number of header protection specification (>=0) */ |
int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** error protection methods for TPHs (0,1,16,32,37-128) */ |
int hprot_TPH[JPWL_MAX_NO_TILESPECS]; |
/** tile number of packet protection specification (>=0) */ |
int pprot_tileno[JPWL_MAX_NO_PACKSPECS]; |
/** packet number of packet protection specification (>=0) */ |
int pprot_packno[JPWL_MAX_NO_PACKSPECS]; |
/** error protection methods for packets (0,1,16,32,37-128) */ |
int pprot[JPWL_MAX_NO_PACKSPECS]; |
/** enables writing of ESD, (0/2/4 bytes) */ |
int sens_size; |
/** sensitivity addressing size (0=auto/2/4 bytes) */ |
int sens_addr; |
/** sensitivity range (0-3) */ |
int sens_range; |
/** sensitivity method for MH (-1,0-7) */ |
int sens_MH; |
/** tile number of sensitivity specification (>=0) */ |
int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** sensitivity methods for TPHs (-1,0-7) */ |
int sens_TPH[JPWL_MAX_NO_TILESPECS]; |
/** enables JPWL correction at the decoder */ |
bool correct; |
/** expected number of components at the decoder */ |
int exp_comps; |
/** maximum number of tiles at the decoder */ |
int max_tiles; |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} opj_cp_t; |
/** |
JPEG-2000 codestream reader/writer |
*/ |
typedef struct opj_j2k { |
/** codec context */ |
opj_common_ptr cinfo; |
/** locate in which part of the codestream the decoder is (main header, tile header, end) */ |
int state; |
/** number of the tile curently concern by coding/decoding */ |
int curtileno; |
/** Tile part number*/ |
int tp_num; |
/** Tilepart number currently coding*/ |
int cur_tp_num; |
/** Total number of tileparts of the current tile*/ |
int *cur_totnum_tp; |
/** |
locate the start position of the TLM marker |
after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length. |
*/ |
int tlm_start; |
/** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/ |
/** used in TLMmarker*/ |
int totnum_tp; |
/** |
locate the position of the end of the tile in the codestream, |
used to detect a truncated codestream (in j2k_read_sod) |
*/ |
unsigned char *eot; |
/** |
locate the start position of the SOT marker of the current coded tile: |
after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length. |
*/ |
int sot_start; |
int sod_start; |
/** |
as the J2K-file is written in several parts during encoding, |
it enables to make the right correction in position return by cio_tell |
*/ |
int pos_correction; |
/** array used to store the data of each tile */ |
unsigned char **tile_data; |
/** array used to store the length of each tile */ |
int *tile_len; |
/** |
decompression only : |
store decoding parameters common to all tiles (information like COD, COC in main header) |
*/ |
opj_tcp_t *default_tcp; |
/** pointer to the encoded / decoded image */ |
opj_image_t *image; |
/** pointer to the coding parameters */ |
opj_cp_t *cp; |
/** helper used to write the index file */ |
opj_codestream_info_t *cstr_info; |
/** pointer to the byte i/o stream */ |
opj_cio_t *cio; |
} opj_j2k_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Creates a J2K decompression structure |
@param cinfo Codec context info |
@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise |
*/ |
opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo); |
/** |
Destroy a J2K decompressor handle |
@param j2k J2K decompressor handle to destroy |
*/ |
void j2k_destroy_decompress(opj_j2k_t *j2k); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in j2k->cp. |
@param j2k J2K decompressor handle |
@param parameters decompression parameters |
*/ |
void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 codestream |
@param j2k J2K decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Decode an image form a JPT-stream (JPEG 2000, JPIP) |
@param j2k J2K decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a J2K compression structure |
@param cinfo Codec context info |
@return Returns a handle to a J2K compressor if successful, returns NULL otherwise |
*/ |
opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo); |
/** |
Destroy a J2K compressor handle |
@param j2k J2K compressor handle to destroy |
*/ |
void j2k_destroy_compress(opj_j2k_t *j2k); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
Coding parameters are returned in j2k->cp. |
@param j2k J2K compressor handle |
@param parameters compression parameters |
@param image input filled image |
*/ |
void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Converts an enum type progression order to string type |
*/ |
char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); |
/** |
Encode an image into a JPEG-2000 codestream |
@param j2k J2K compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __J2K_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/j2k_lib.h |
---|
0,0 → 1,54 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __J2K_LIB_H |
#define __J2K_LIB_H |
/** |
@file j2k_lib.h |
@brief Internal functions |
The functions in J2K_LIB.C are internal utilities mainly used for timing. |
*/ |
/** @defgroup MISC MISC - Miscellaneous internal functions */ |
/*@{*/ |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Difference in successive opj_clock() calls tells you the elapsed time |
@return Returns time in seconds |
*/ |
double opj_clock(void); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __J2K_LIB_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2.h |
---|
0,0 → 1,135 |
/* |
jbig2dec |
Copyright (C) 2002-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef __cplusplus |
extern "C" { |
#endif |
#ifndef _JBIG2_H |
#define _JBIG2_H |
/* warning levels */ |
typedef enum { |
JBIG2_SEVERITY_DEBUG, |
JBIG2_SEVERITY_INFO, |
JBIG2_SEVERITY_WARNING, |
JBIG2_SEVERITY_FATAL |
} Jbig2Severity; |
typedef enum { |
JBIG2_OPTIONS_EMBEDDED = 1 |
} Jbig2Options; |
/* forward public structure declarations */ |
typedef struct _Jbig2Allocator Jbig2Allocator; |
typedef struct _Jbig2Ctx Jbig2Ctx; |
typedef struct _Jbig2GlobalCtx Jbig2GlobalCtx; |
typedef struct _Jbig2Segment Jbig2Segment; |
typedef struct _Jbig2Image Jbig2Image; |
/* private structures */ |
typedef struct _Jbig2Page Jbig2Page; |
typedef struct _Jbig2SymbolDictionary Jbig2SymbolDictionary; |
/* |
this is the general image structure used by the jbig2dec library |
images are 1 bpp, packed into rows a byte at a time. stride gives |
the byte offset to the next row, while width and height define |
the size of the image area in pixels. |
*/ |
struct _Jbig2Image { |
int width, height, stride; |
uint8_t *data; |
int refcount; |
}; |
Jbig2Image* jbig2_image_new(Jbig2Ctx *ctx, int width, int height); |
Jbig2Image* jbig2_image_clone(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_release(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_free(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_clear(Jbig2Ctx *ctx, Jbig2Image *image, int value); |
Jbig2Image *jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, |
int width, int height); |
/* errors are returned from the library via a callback. If no callback |
is provided (a NULL argument is passed ot jbig2_ctx_new) a default |
handler is used which prints fatal errors to the stderr stream. */ |
/* error callback */ |
typedef int (*Jbig2ErrorCallback) (void *data, |
const char *msg, Jbig2Severity severity, |
int32_t seg_idx); |
/* memory allocation is likewise done via a set of callbacks so that |
clients can better control memory usage. If a NULL is passed for |
this argumennt of jbig2_ctx_new, a default allocator based on malloc() |
is used. */ |
/* dynamic memory callbacks */ |
struct _Jbig2Allocator { |
void *(*alloc) (Jbig2Allocator *allocator, size_t size); |
void (*free) (Jbig2Allocator *allocator, void *p); |
void *(*realloc) (Jbig2Allocator *allocator, void *p, size_t size); |
}; |
/* decoder context */ |
Jbig2Ctx *jbig2_ctx_new (Jbig2Allocator *allocator, |
Jbig2Options options, |
Jbig2GlobalCtx *global_ctx, |
Jbig2ErrorCallback error_callback, |
void *error_callback_data); |
void jbig2_ctx_free (Jbig2Ctx *ctx); |
/* global context for embedded streams */ |
Jbig2GlobalCtx *jbig2_make_global_ctx (Jbig2Ctx *ctx); |
void jbig2_global_ctx_free (Jbig2GlobalCtx *global_ctx); |
/* submit data to the decoder */ |
int jbig2_data_in (Jbig2Ctx *ctx, const unsigned char *data, size_t size); |
/* get the next available decoded page image. NULL means there isn't one. */ |
Jbig2Image *jbig2_page_out (Jbig2Ctx *ctx); |
/* mark a returned page image as no longer needed. */ |
int jbig2_release_page (Jbig2Ctx *ctx, Jbig2Image *image); |
/* mark the current page as complete, simulating an end-of-page segment (for broken streams) */ |
int jbig2_complete_page (Jbig2Ctx *ctx); |
/* segment header routines */ |
struct _Jbig2Segment { |
uint32_t number; |
uint8_t flags; |
uint32_t page_association; |
size_t data_length; |
int referred_to_segment_count; |
uint32_t *referred_to_segments; |
void *result; |
}; |
Jbig2Segment *jbig2_parse_segment_header (Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, |
size_t *p_header_size); |
int jbig2_parse_segment (Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
void jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment); |
Jbig2Segment *jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number); |
#endif /* _JBIG2_H */ |
#ifdef __cplusplus |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_arith.h |
---|
0,0 → 1,31 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithState Jbig2ArithState; |
/* An arithmetic coding context is stored as a single byte, with the |
index in the low order 7 bits (actually only 6 are used), and the |
MPS in the top bit. */ |
typedef unsigned char Jbig2ArithCx; |
/* allocate and initialize a new arithmetic coding state */ |
Jbig2ArithState * |
jbig2_arith_new (Jbig2Ctx *ctx, Jbig2WordStream *ws); |
/* decode a bit */ |
bool |
jbig2_arith_decode (Jbig2ArithState *as, Jbig2ArithCx *pcx); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_arith_iaid.h |
---|
0,0 → 1,26 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithIaidCtx Jbig2ArithIaidCtx; |
Jbig2ArithIaidCtx * |
jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN); |
int |
jbig2_arith_iaid_decode(Jbig2ArithIaidCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result); |
void |
jbig2_arith_iaid_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *iax); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_arith_int.h |
---|
0,0 → 1,26 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithIntCtx Jbig2ArithIntCtx; |
Jbig2ArithIntCtx * |
jbig2_arith_int_ctx_new(Jbig2Ctx *ctx); |
int |
jbig2_arith_int_decode(Jbig2ArithIntCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result); |
void |
jbig2_arith_int_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIntCtx *iax); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_generic.h |
---|
0,0 → 1,62 |
/* |
jbig2dec |
Copyright (C) 2002-2004 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Headers for Generic and Generic Refinement region handling |
**/ |
/* 6.4 Table 2 */ |
typedef struct { |
bool MMR; |
/* GBW */ |
/* GBH */ |
int GBTEMPLATE; |
bool TPGDON; |
bool USESKIP; |
/* SKIP */ |
int8_t gbat[8]; |
} Jbig2GenericRegionParams; |
/* return the appropriate context size for the given template */ |
int |
jbig2_generic_stats_size(Jbig2Ctx *ctx, int template); |
int |
jbig2_decode_generic_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats); |
/* 6.3 Table 6 */ |
typedef struct { |
/* GRW */ |
/* GRH */ |
bool GRTEMPLATE; |
Jbig2Image *reference; |
int32_t DX, DY; |
bool TPGRON; |
int8_t grat[4]; |
} Jbig2RefinementRegionParams; |
int |
jbig2_decode_refinement_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_huffman.h |
---|
0,0 → 1,105 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef JBIG2_HUFFMAN_H |
#define JBIG2_HUFFMAN_H |
/* Huffman coder interface */ |
typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry; |
typedef struct _Jbig2HuffmanState Jbig2HuffmanState; |
typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable; |
typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams; |
struct _Jbig2HuffmanEntry { |
union { |
int32_t RANGELOW; |
Jbig2HuffmanTable *ext_table; |
} u; |
byte PREFLEN; |
byte RANGELEN; |
byte flags; |
}; |
struct _Jbig2HuffmanTable { |
int log_table_size; |
Jbig2HuffmanEntry *entries; |
}; |
typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine; |
struct _Jbig2HuffmanLine { |
int PREFLEN; |
int RANGELEN; |
int RANGELOW; |
}; |
struct _Jbig2HuffmanParams { |
bool HTOOB; |
int n_lines; |
const Jbig2HuffmanLine *lines; |
}; |
Jbig2HuffmanState * |
jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws); |
void |
jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs); |
void |
jbig2_huffman_skip(Jbig2HuffmanState *hs); |
void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset); |
int |
jbig2_huffman_offset(Jbig2HuffmanState *hs); |
int32_t |
jbig2_huffman_get (Jbig2HuffmanState *hs, |
const Jbig2HuffmanTable *table, bool *oob); |
int32_t |
jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits); |
#ifdef JBIG2_DEBUG |
void jbig2_dump_huffman_state(Jbig2HuffmanState *hs); |
void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs); |
#endif |
Jbig2HuffmanTable * |
jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params); |
void |
jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table); |
/* standard Huffman templates defined by the specification */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */ |
#endif /* JBIG2_HUFFMAN_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_hufftab.h |
---|
0,0 → 1,335 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* predefined Huffman table definitions |
-- See Annex B of the JBIG2 specification */ |
#ifndef JBIG2_HUFFTAB_H |
#define JBIG2_HUFFTAB_H |
/* types are in jbig2_huffman.h, you must include that first */ |
/* Table B.1 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_A[] = { |
{ 1, 4, 0 }, |
{ 2, 8, 16 }, |
{ 3, 16, 272 }, |
{ 0, 32, -1 }, /* low */ |
{ 3, 32, 65808 } /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_A = { FALSE, 5, jbig2_huffman_lines_A }; |
/* Table B.2 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_B[] = { |
{ 1, 0, 0 }, |
{ 2, 0, 1 }, |
{ 3, 0, 2 }, |
{ 4, 3, 3 }, |
{ 5, 6, 11 }, |
{ 0, 32, -1 }, /* low */ |
{ 6, 32, 75 }, /* high */ |
{ 6, 0, 0 } |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_B = { TRUE, 8, jbig2_huffman_lines_B }; |
/* Table B.3 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_C[] = { |
{ 8, 8, -256 }, |
{ 1, 0, 0 }, |
{ 2, 0, 1 }, |
{ 3, 0, 2 }, |
{ 4, 3, 3 }, |
{ 5, 6, 11 }, |
{ 8, 32, -257 }, /* low */ |
{ 7, 32, 75 }, /* high */ |
{ 6, 0, 0 } /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_C = { TRUE, 9, jbig2_huffman_lines_C }; |
/* Table B.4 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_D[] = { |
{ 1, 0, 1 }, |
{ 2, 0, 2 }, |
{ 3, 0, 3 }, |
{ 4, 3, 4 }, |
{ 5, 6, 12 }, |
{ 0, 32, -1 }, /* low */ |
{ 5, 32, 76 }, /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_D = { FALSE, 7, jbig2_huffman_lines_D }; |
/* Table B.5 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_E[] = { |
{7, 8, -255}, |
{1, 0, 1}, |
{2, 0, 2}, |
{3, 0, 3}, |
{4, 3, 4}, |
{5, 6, 12}, |
{7, 32, -256}, /* low */ |
{6, 32, 76} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_E = { FALSE, 8, jbig2_huffman_lines_E }; |
/* Table B.6 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_F[] = { |
{5, 10, -2048}, |
{4, 9, -1024}, |
{4, 8, -512}, |
{4, 7, -256}, |
{5, 6, -128}, |
{5, 5, -64}, |
{4, 5, -32}, |
{2, 7, 0}, |
{3, 7, 128}, |
{3, 8, 256}, |
{4, 9, 512}, |
{4, 10, 1024}, |
{6, 32, -2049}, /* low */ |
{6, 32, 2048} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_F = { FALSE, 14, jbig2_huffman_lines_F }; |
/* Table B.7 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_G[] = { |
{4, 9, -1024}, |
{3, 8, -512}, |
{4, 7, -256}, |
{5, 6, -128}, |
{5, 5, -64}, |
{4, 5, -32}, |
{4, 5, 0}, |
{5, 5, 32}, |
{5, 6, 64}, |
{4, 7, 128}, |
{3, 8, 256}, |
{3, 9, 512}, |
{3, 10, 1024}, |
{5, 32, -1025}, /* low */ |
{5, 32, 2048} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_G = { FALSE, 15, jbig2_huffman_lines_G }; |
/* Table B.8 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_H[] = { |
{8, 3, -15}, |
{9, 1, -7}, |
{8, 1, -5}, |
{9, 0, -3}, |
{7, 0, -2}, |
{4, 0, -1}, |
{2, 1, 0}, |
{5, 0, 2}, |
{6, 0, 3}, |
{3, 4, 4}, |
{6, 1, 20}, |
{4, 4, 22}, |
{4, 5, 38}, |
{5, 6, 70}, |
{5, 7, 134}, |
{6, 7, 262}, |
{7, 8, 390}, |
{6, 10, 646}, |
{9, 32, -16}, /* low */ |
{9, 32, 1670}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_H = { TRUE, 21, jbig2_huffman_lines_H }; |
/* Table B.9 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_I[] = { |
{8, 4, -31}, |
{9, 2, -15}, |
{8, 2, -11}, |
{9, 1, -7}, |
{7, 1, -5}, |
{4, 1, -3}, |
{3, 1, -1}, |
{3, 1, 1}, |
{5, 1, 3}, |
{6, 1, 5}, |
{3, 5, 7}, |
{6, 2, 39}, |
{4, 5, 43}, |
{4, 6, 75}, |
{5, 7, 139}, |
{5, 8, 267}, |
{6, 8, 523}, |
{7, 9, 779}, |
{6, 11, 1291}, |
{9, 32, -32}, /* low */ |
{9, 32, 3339}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_I = { TRUE, 22, jbig2_huffman_lines_I }; |
/* Table B.10 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_J[] = { |
{7, 4, -21}, |
{8, 0, -5}, |
{7, 0, -4}, |
{5, 0, -3}, |
{2, 2, -2}, |
{5, 0, 2}, |
{6, 0, 3}, |
{7, 0, 4}, |
{8, 0, 5}, |
{2, 6, 6}, |
{5, 5, 70}, |
{6, 5, 102}, |
{6, 6, 134}, |
{6, 7, 198}, |
{6, 8, 326}, |
{6, 9, 582}, |
{6, 10, 1094}, |
{7, 11, 2118}, |
{8, 32, -22}, /* low */ |
{8, 32, 4166}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_J = { TRUE, 21, jbig2_huffman_lines_J }; |
/* Table B.11 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_K[] = { |
{1, 0, 1}, |
{2, 1, 2}, |
{4, 0, 3}, |
{4, 1, 5}, |
{5, 1, 7}, |
{5, 2, 9}, |
{6, 2, 13}, |
{7, 2, 17}, |
{7, 3, 21}, |
{7, 4, 29}, |
{7, 5, 45}, |
{7, 6, 77}, |
{7, 32, 141} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_K = { FALSE, 13, jbig2_huffman_lines_K }; |
/* Table B.12 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_L[] = { |
{1, 0, 1}, |
{2, 0, 2}, |
{3, 1, 3}, |
{5, 0, 5}, |
{5, 1, 6}, |
{6, 1, 8}, |
{7, 0, 10}, |
{7, 1, 11}, |
{7, 2, 13}, |
{7, 3, 17}, |
{7, 4, 25}, |
{8, 5, 41}, |
{8, 32, 73} |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_L = { FALSE, 13, jbig2_huffman_lines_L }; |
/* Table B.13 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_M[] = { |
{1, 0, 1}, |
{3, 0, 2}, |
{4, 0, 3}, |
{5, 0, 4}, |
{4, 1, 5}, |
{3, 3, 7}, |
{6, 1, 15}, |
{6, 2, 17}, |
{6, 3, 21}, |
{6, 4, 29}, |
{6, 5, 45}, |
{7, 6, 77}, |
{7, 32, 141} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_M = { FALSE, 13, jbig2_huffman_lines_M }; |
/* Table B.14 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_N[] = { |
{ 3, 0, -2 }, |
{ 3, 0, -1 }, |
{ 1, 0, 0 }, |
{ 3, 3, 1 }, |
{ 3, 6, 2 }, |
{ 0, 32, -1 }, /* low */ |
{ 0, 32, 3 }, /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_N = { FALSE, 7, jbig2_huffman_lines_N }; |
/* Table B.15 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_O[] = { |
{7, 4, -24}, |
{6, 2, -8}, |
{5, 1, -4}, |
{4, 0, -2}, |
{3, 0, -1}, |
{1, 0, 0}, |
{3, 0, 1}, |
{4, 0, 2}, |
{5, 1, 3}, |
{6, 2, 5}, |
{7, 4, 9}, |
{7, 32, -25}, /* low */ |
{7, 32, 25} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_O = { FALSE, 13, jbig2_huffman_lines_O }; |
#endif /* JBIG2_HUFFTAB_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_image.h |
---|
0,0 → 1,38 |
/* |
jbig2dec |
Copyright (C) 2001-2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef _JBIG2_IMAGE_H |
#define _JBIG2_IMAGE_H |
int jbig2_image_get_pixel(Jbig2Image *image, int x, int y); |
int jbig2_image_set_pixel(Jbig2Image *image, int x, int y, int value); |
/* routines for dumping the image data in various formats */ |
/* FIXME: should these be in the client instead? */ |
#include <stdio.h> |
int jbig2_image_write_pbm_file(Jbig2Image *image, char *filename); |
int jbig2_image_write_pbm(Jbig2Image *image, FILE *out); |
Jbig2Image *jbig2_image_read_pbm_file(Jbig2Ctx *ctx, char *filename); |
Jbig2Image *jbig2_image_read_pbm(Jbig2Ctx *ctx, FILE *in); |
#ifdef HAVE_LIBPNG |
int jbig2_image_write_png_file(Jbig2Image *image, char *filename); |
int jbig2_image_write_png(Jbig2Image *image, FILE *out); |
#endif |
#endif /* _JBIG2_IMAGE_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_metadata.h |
---|
0,0 → 1,48 |
/* |
jbig2dec |
Copyright (C) 2003 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef _JBIG2_METADATA_H |
#define _JBIG2_METADATA_H |
/* metadata from extension segments */ |
/* these bits should be moved to jbig2.h for public access */ |
typedef enum { |
JBIG2_ENCODING_ASCII, |
JBIG2_ENCODING_UCS16 |
} Jbig2Encoding; |
typedef struct _Jbig2Metadata Jbig2Metadata; |
Jbig2Metadata *jbig2_metadata_new(Jbig2Ctx *ctx, Jbig2Encoding encoding); |
void jbig2_metadata_free(Jbig2Ctx *ctx, Jbig2Metadata *md); |
int jbig2_metadata_add(Jbig2Ctx *ctx, Jbig2Metadata *md, |
const char *key, const int key_length, |
const char *value, const int value_length); |
struct _Jbig2Metadata { |
Jbig2Encoding encoding; |
char **keys, **values; |
int entries, max_entries; |
}; |
/* these bits can go to jbig2_priv.h */ |
int jbig2_comment_ascii(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
int jbig2_comment_unicode(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
#endif /* _JBIG2_METADATA_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_mmr.h |
---|
0,0 → 1,22 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
int |
jbig2_decode_generic_mmr(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
const byte *data, size_t size, |
Jbig2Image *image); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_priv.h |
---|
0,0 → 1,177 |
/* |
jbig2dec |
Copyright (C) 2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* library internals */ |
typedef uint8_t byte; |
typedef int bool; |
#ifndef TRUE |
#define TRUE 1 |
#endif |
#ifndef FALSE |
#define FALSE 0 |
#endif |
#ifndef NULL |
#define NULL ((void*)0) |
#endif |
typedef enum { |
JBIG2_FILE_HEADER, |
JBIG2_FILE_SEQUENTIAL_HEADER, |
JBIG2_FILE_SEQUENTIAL_BODY, |
JBIG2_FILE_RANDOM_HEADERS, |
JBIG2_FILE_RANDOM_BODIES, |
JBIG2_FILE_EOF |
} Jbig2FileState; |
struct _Jbig2Ctx { |
Jbig2Allocator *allocator; |
Jbig2Options options; |
const Jbig2Ctx *global_ctx; |
Jbig2ErrorCallback error_callback; |
void *error_callback_data; |
byte *buf; |
size_t buf_size; |
unsigned int buf_rd_ix; |
unsigned int buf_wr_ix; |
Jbig2FileState state; |
uint8_t file_header_flags; |
int32_t n_pages; |
int n_segments_max; |
Jbig2Segment **segments; |
int n_segments; /* index of last segment header parsed */ |
int segment_index; /* index of last segment body parsed */ |
/* list of decoded pages, including the one in progress, |
currently stored as a contiguous, 0-indexed array. */ |
int current_page; |
int max_page_index; |
Jbig2Page *pages; |
}; |
int32_t |
jbig2_get_int32 (const byte *buf); |
int16_t |
jbig2_get_int16 (const byte *buf); |
/* dynamic memory management */ |
void * |
jbig2_alloc (Jbig2Allocator *allocator, size_t size); |
void |
jbig2_free (Jbig2Allocator *allocator, void *p); |
void * |
jbig2_realloc (Jbig2Allocator *allocator, void *p, size_t size); |
#define jbig2_new(ctx, t, size) ((t *)jbig2_alloc(ctx->allocator, (size) * sizeof(t))) |
#define jbig2_renew(ctx, p, t, size) ((t *)jbig2_realloc(ctx->allocator, (p), (size) * sizeof(t))) |
int |
jbig2_error (Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, |
const char *fmt, ...); |
/* the page structure handles decoded page |
results. it's allocated by a 'page info' |
segement and marked complete by an 'end of page' |
segment. |
*/ |
typedef enum { |
JBIG2_PAGE_FREE, |
JBIG2_PAGE_NEW, |
JBIG2_PAGE_COMPLETE, |
JBIG2_PAGE_RETURNED, |
JBIG2_PAGE_RELEASED |
} Jbig2PageState; |
struct _Jbig2Page { |
Jbig2PageState state; |
uint32_t number; |
uint32_t height, width; /* in pixels */ |
uint32_t x_resolution, |
y_resolution; /* in pixels per meter */ |
uint16_t stripe_size; |
bool striped; |
int end_row; |
uint8_t flags; |
Jbig2Image *image; |
}; |
int jbig2_page_info (Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_end_of_stripe(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_end_of_page(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
typedef enum { |
JBIG2_COMPOSE_OR = 0, |
JBIG2_COMPOSE_AND = 1, |
JBIG2_COMPOSE_XOR = 2, |
JBIG2_COMPOSE_XNOR = 3, |
JBIG2_COMPOSE_REPLACE = 4 |
} Jbig2ComposeOp; |
int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y, Jbig2ComposeOp op); |
int jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *src, int x, int y, Jbig2ComposeOp op); |
/* region segment info */ |
typedef struct { |
int32_t width; |
int32_t height; |
int32_t x; |
int32_t y; |
Jbig2ComposeOp op; |
uint8_t flags; |
} Jbig2RegionSegmentInfo; |
void jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, const uint8_t *segment_data); |
int jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
/* 7.4 */ |
int jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
int jbig2_refinement_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
int jbig2_pattern_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
int jbig2_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
/* The word stream design is a compromise between simplicity and |
trying to amortize the number of method calls. Each ::get_next_word |
invocation pulls 4 bytes from the stream, packed big-endian into a |
32 bit word. The offset argument is provided as a convenience. It |
begins at 0 and increments by 4 for each successive invocation. */ |
typedef struct _Jbig2WordStream Jbig2WordStream; |
struct _Jbig2WordStream { |
uint32_t (*get_next_word) (Jbig2WordStream *self, int offset); |
}; |
Jbig2WordStream * |
jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size); |
void |
jbig2_word_stream_buf_free(Jbig2Ctx *ctx, Jbig2WordStream *ws); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_symbol_dict.h |
---|
0,0 → 1,56 |
/* |
jbig2dec |
Copyright (C) 2001-2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* symbol dictionary header */ |
/* the results of decoding a symbol dictionary */ |
typedef struct { |
int n_symbols; |
Jbig2Image **glyphs; |
} Jbig2SymbolDict; |
/* decode a symbol dictionary segment and store the results */ |
int |
jbig2_symbol_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
/* get a particular glyph by index */ |
Jbig2Image * |
jbig2_sd_glyph(Jbig2SymbolDict *dict, unsigned int id); |
/* return a new empty symbol dict */ |
Jbig2SymbolDict * |
jbig2_sd_new(Jbig2Ctx *ctx, int n_symbols); |
/* release the memory associated with a symbol dict */ |
void |
jbig2_sd_release(Jbig2Ctx *ctx, Jbig2SymbolDict *dict); |
/* generate a new symbol dictionary by concatenating a list of |
existing dictionaries */ |
Jbig2SymbolDict * |
jbig2_sd_cat(Jbig2Ctx *ctx, int n_dicts, |
Jbig2SymbolDict **dicts); |
/* count the number of dictionary segments referred |
to by the given segment */ |
int |
jbig2_sd_count_referred(Jbig2Ctx *ctx, Jbig2Segment *segment); |
/* return an array of pointers to symbol dictionaries referred |
to by a segment */ |
Jbig2SymbolDict ** |
jbig2_sd_list_referred(Jbig2Ctx *ctx, Jbig2Segment *segment); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jbig2_text.h |
---|
0,0 → 1,73 |
/* |
jbig2dec |
Copyright (C) 2002-2004 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Headers for Text region handling |
**/ |
typedef enum { |
JBIG2_CORNER_BOTTOMLEFT = 0, |
JBIG2_CORNER_TOPLEFT = 1, |
JBIG2_CORNER_BOTTOMRIGHT = 2, |
JBIG2_CORNER_TOPRIGHT = 3 |
} Jbig2RefCorner; |
typedef struct { |
bool SBHUFF; |
bool SBREFINE; |
bool SBDEFPIXEL; |
Jbig2ComposeOp SBCOMBOP; |
bool TRANSPOSED; |
Jbig2RefCorner REFCORNER; |
int SBDSOFFSET; |
/* int SBW; */ |
/* int SBH; */ |
uint32_t SBNUMINSTANCES; |
int LOGSBSTRIPS; |
int SBSTRIPS; |
/* int SBNUMSYMS; */ |
/* SBSYMCODES */ |
/* SBSYMCODELEN */ |
/* SBSYMS */ |
Jbig2HuffmanTable *SBHUFFFS; |
Jbig2HuffmanTable *SBHUFFDS; |
Jbig2HuffmanTable *SBHUFFDT; |
Jbig2HuffmanTable *SBHUFFRDW; |
Jbig2HuffmanTable *SBHUFFRDH; |
Jbig2HuffmanTable *SBHUFFRDX; |
Jbig2HuffmanTable *SBHUFFRDY; |
Jbig2HuffmanTable *SBHUFFRSIZE; |
Jbig2ArithIntCtx *IADT; |
Jbig2ArithIntCtx *IAFS; |
Jbig2ArithIntCtx *IADS; |
Jbig2ArithIntCtx *IAIT; |
Jbig2ArithIaidCtx *IAID; |
Jbig2ArithIntCtx *IARI; |
Jbig2ArithIntCtx *IARDW; |
Jbig2ArithIntCtx *IARDH; |
Jbig2ArithIntCtx *IARDX; |
Jbig2ArithIntCtx *IARDY; |
bool SBRTEMPLATE; |
int8_t sbrat[4]; |
} Jbig2TextRegionParams; |
int |
jbig2_decode_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const Jbig2TextRegionParams *params, |
const Jbig2SymbolDict * const *dicts, const int n_dicts, |
Jbig2Image *image, |
const byte *data, const size_t size, |
Jbig2ArithCx *GR_stats, |
Jbig2ArithState *as, Jbig2WordStream *ws); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jconfig.h |
---|
0,0 → 1,38 |
/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */ |
/* see jconfig.doc for explanations */ |
#define HAVE_PROTOTYPES |
#define HAVE_UNSIGNED_CHAR |
#define HAVE_UNSIGNED_SHORT |
/* #define void char */ |
/* #define const */ |
#undef CHAR_IS_UNSIGNED |
#define HAVE_STDDEF_H |
#define HAVE_STDLIB_H |
#undef NEED_BSD_STRINGS |
#undef NEED_SYS_TYPES_H |
#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ |
#undef NEED_SHORT_EXTERNAL_NAMES |
#undef INCOMPLETE_TYPES_BROKEN |
#ifdef JPEG_INTERNALS |
#undef RIGHT_SHIFT_IS_UNSIGNED |
#endif /* JPEG_INTERNALS */ |
#ifdef JPEG_CJPEG_DJPEG |
#define BMP_SUPPORTED /* BMP image file format */ |
#define GIF_SUPPORTED /* GIF image file format */ |
#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ |
#undef RLE_SUPPORTED /* Utah RLE image file format */ |
#define TARGA_SUPPORTED /* Targa image file format */ |
#undef TWO_FILE_COMMANDLINE /* optional */ |
#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ |
#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ |
#undef DONT_USE_B_MODE |
#undef PROGRESS_REPORT /* optional */ |
#endif /* JPEG_CJPEG_DJPEG */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jmorecfg.h |
---|
0,0 → 1,363 |
/* |
* jmorecfg.h |
* |
* Copyright (C) 1991-1997, Thomas G. Lane. |
* This file is part of the Independent JPEG Group's software. |
* For conditions of distribution and use, see the accompanying README file. |
* |
* This file contains additional configuration options that customize the |
* JPEG software for special applications or support machine-dependent |
* optimizations. Most users will not need to touch this file. |
*/ |
/* |
* Define BITS_IN_JSAMPLE as either |
* 8 for 8-bit sample values (the usual setting) |
* 12 for 12-bit sample values |
* Only 8 and 12 are legal data precisions for lossy JPEG according to the |
* JPEG standard, and the IJG code does not support anything else! |
* We do not support run-time selection of data precision, sorry. |
*/ |
#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ |
/* |
* Maximum number of components (color channels) allowed in JPEG image. |
* To meet the letter of the JPEG spec, set this to 255. However, darn |
* few applications need more than 4 channels (maybe 5 for CMYK + alpha |
* mask). We recommend 10 as a reasonable compromise; use 4 if you are |
* really short on memory. (Each allowed component costs a hundred or so |
* bytes of storage, whether actually used in an image or not.) |
*/ |
#define MAX_COMPONENTS 10 /* maximum number of image components */ |
/* |
* Basic data types. |
* You may need to change these if you have a machine with unusual data |
* type sizes; for example, "char" not 8 bits, "short" not 16 bits, |
* or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, |
* but it had better be at least 16. |
*/ |
/* Representation of a single sample (pixel element value). |
* We frequently allocate large arrays of these, so it's important to keep |
* them small. But if you have memory to burn and access to char or short |
* arrays is very slow on your hardware, you might want to change these. |
*/ |
#if BITS_IN_JSAMPLE == 8 |
/* JSAMPLE should be the smallest type that will hold the values 0..255. |
* You can use a signed char by having GETJSAMPLE mask it with 0xFF. |
*/ |
#ifdef HAVE_UNSIGNED_CHAR |
typedef unsigned char JSAMPLE; |
#define GETJSAMPLE(value) ((int) (value)) |
#else /* not HAVE_UNSIGNED_CHAR */ |
typedef char JSAMPLE; |
#ifdef CHAR_IS_UNSIGNED |
#define GETJSAMPLE(value) ((int) (value)) |
#else |
#define GETJSAMPLE(value) ((int) (value) & 0xFF) |
#endif /* CHAR_IS_UNSIGNED */ |
#endif /* HAVE_UNSIGNED_CHAR */ |
#define MAXJSAMPLE 255 |
#define CENTERJSAMPLE 128 |
#endif /* BITS_IN_JSAMPLE == 8 */ |
#if BITS_IN_JSAMPLE == 12 |
/* JSAMPLE should be the smallest type that will hold the values 0..4095. |
* On nearly all machines "short" will do nicely. |
*/ |
typedef short JSAMPLE; |
#define GETJSAMPLE(value) ((int) (value)) |
#define MAXJSAMPLE 4095 |
#define CENTERJSAMPLE 2048 |
#endif /* BITS_IN_JSAMPLE == 12 */ |
/* Representation of a DCT frequency coefficient. |
* This should be a signed value of at least 16 bits; "short" is usually OK. |
* Again, we allocate large arrays of these, but you can change to int |
* if you have memory to burn and "short" is really slow. |
*/ |
typedef short JCOEF; |
/* Compressed datastreams are represented as arrays of JOCTET. |
* These must be EXACTLY 8 bits wide, at least once they are written to |
* external storage. Note that when using the stdio data source/destination |
* managers, this is also the data type passed to fread/fwrite. |
*/ |
#ifdef HAVE_UNSIGNED_CHAR |
typedef unsigned char JOCTET; |
#define GETJOCTET(value) (value) |
#else /* not HAVE_UNSIGNED_CHAR */ |
typedef char JOCTET; |
#ifdef CHAR_IS_UNSIGNED |
#define GETJOCTET(value) (value) |
#else |
#define GETJOCTET(value) ((value) & 0xFF) |
#endif /* CHAR_IS_UNSIGNED */ |
#endif /* HAVE_UNSIGNED_CHAR */ |
/* These typedefs are used for various table entries and so forth. |
* They must be at least as wide as specified; but making them too big |
* won't cost a huge amount of memory, so we don't provide special |
* extraction code like we did for JSAMPLE. (In other words, these |
* typedefs live at a different point on the speed/space tradeoff curve.) |
*/ |
/* UINT8 must hold at least the values 0..255. */ |
#ifdef HAVE_UNSIGNED_CHAR |
typedef unsigned char UINT8; |
#else /* not HAVE_UNSIGNED_CHAR */ |
#ifdef CHAR_IS_UNSIGNED |
typedef char UINT8; |
#else /* not CHAR_IS_UNSIGNED */ |
typedef short UINT8; |
#endif /* CHAR_IS_UNSIGNED */ |
#endif /* HAVE_UNSIGNED_CHAR */ |
/* UINT16 must hold at least the values 0..65535. */ |
#ifdef HAVE_UNSIGNED_SHORT |
typedef unsigned short UINT16; |
#else /* not HAVE_UNSIGNED_SHORT */ |
typedef unsigned int UINT16; |
#endif /* HAVE_UNSIGNED_SHORT */ |
/* INT16 must hold at least the values -32768..32767. */ |
#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ |
typedef short INT16; |
#endif |
/* INT32 must hold at least signed 32-bit values. */ |
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ |
typedef long INT32; |
#endif |
/* Datatype used for image dimensions. The JPEG standard only supports |
* images up to 64K*64K due to 16-bit fields in SOF markers. Therefore |
* "unsigned int" is sufficient on all machines. However, if you need to |
* handle larger images and you don't mind deviating from the spec, you |
* can change this datatype. |
*/ |
typedef unsigned int JDIMENSION; |
#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ |
/* These macros are used in all function definitions and extern declarations. |
* You could modify them if you need to change function linkage conventions; |
* in particular, you'll need to do that to make the library a Windows DLL. |
* Another application is to make all functions global for use with debuggers |
* or code profilers that require it. |
*/ |
/* a function called through method pointers: */ |
#define METHODDEF(type) static type |
/* a function used only in its module: */ |
#define LOCAL(type) static type |
/* a function referenced thru EXTERNs: */ |
#define GLOBAL(type) type |
/* a reference to a GLOBAL function: */ |
#define EXTERN(type) extern type |
/* This macro is used to declare a "method", that is, a function pointer. |
* We want to supply prototype parameters if the compiler can cope. |
* Note that the arglist parameter must be parenthesized! |
* Again, you can customize this if you need special linkage keywords. |
*/ |
#ifdef HAVE_PROTOTYPES |
#define JMETHOD(type,methodname,arglist) type (*methodname) arglist |
#else |
#define JMETHOD(type,methodname,arglist) type (*methodname) () |
#endif |
/* Here is the pseudo-keyword for declaring pointers that must be "far" |
* on 80x86 machines. Most of the specialized coding for 80x86 is handled |
* by just saying "FAR *" where such a pointer is needed. In a few places |
* explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. |
*/ |
#ifdef NEED_FAR_POINTERS |
#define FAR far |
#else |
#define FAR |
#endif |
/* |
* On a few systems, type boolean and/or its values FALSE, TRUE may appear |
* in standard header files. Or you may have conflicts with application- |
* specific header files that you want to include together with these files. |
* Defining HAVE_BOOLEAN before including jpeglib.h should make it work. |
*/ |
#ifndef HAVE_BOOLEAN |
typedef int boolean; |
#endif |
#ifndef FALSE /* in case these macros already exist */ |
#define FALSE 0 /* values of boolean */ |
#endif |
#ifndef TRUE |
#define TRUE 1 |
#endif |
/* |
* The remaining options affect code selection within the JPEG library, |
* but they don't need to be visible to most applications using the library. |
* To minimize application namespace pollution, the symbols won't be |
* defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. |
*/ |
#ifdef JPEG_INTERNALS |
#define JPEG_INTERNAL_OPTIONS |
#endif |
#ifdef JPEG_INTERNAL_OPTIONS |
/* |
* These defines indicate whether to include various optional functions. |
* Undefining some of these symbols will produce a smaller but less capable |
* library. Note that you can leave certain source files out of the |
* compilation/linking process if you've #undef'd the corresponding symbols. |
* (You may HAVE to do that if your compiler doesn't like null source files.) |
*/ |
/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ |
/* Capability options common to encoder and decoder: */ |
#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ |
#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ |
#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ |
/* Encoder capability options: */ |
#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ |
#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ |
#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ |
#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ |
/* Note: if you selected 12-bit data precision, it is dangerous to turn off |
* ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit |
* precision, so jchuff.c normally uses entropy optimization to compute |
* usable tables for higher precision. If you don't want to do optimization, |
* you'll have to supply different default Huffman tables. |
* The exact same statements apply for progressive JPEG: the default tables |
* don't work for progressive mode. (This may get fixed, however.) |
*/ |
#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ |
/* Decoder capability options: */ |
#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ |
#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ |
#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ |
#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ |
#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ |
#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ |
#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ |
#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ |
#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ |
#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ |
/* more capability options later, no doubt */ |
/* |
* Ordering of RGB data in scanlines passed to or from the application. |
* If your application wants to deal with data in the order B,G,R, just |
* change these macros. You can also deal with formats such as R,G,B,X |
* (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing |
* the offsets will also change the order in which colormap data is organized. |
* RESTRICTIONS: |
* 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. |
* 2. These macros only affect RGB<=>YCbCr color conversion, so they are not |
* useful if you are using JPEG color spaces other than YCbCr or grayscale. |
* 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE |
* is not 3 (they don't understand about dummy color components!). So you |
* can't use color quantization if you change that value. |
*/ |
#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ |
#define RGB_GREEN 1 /* Offset of Green */ |
#define RGB_BLUE 2 /* Offset of Blue */ |
#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ |
/* Definitions for speed-related optimizations. */ |
/* If your compiler supports inline functions, define INLINE |
* as the inline keyword; otherwise define it as empty. |
*/ |
#ifndef INLINE |
#ifdef __GNUC__ /* for instance, GNU C knows about inline */ |
#define INLINE __inline__ |
#endif |
#ifndef INLINE |
#define INLINE /* default is to define it as empty */ |
#endif |
#endif |
/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying |
* two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER |
* as short on such a machine. MULTIPLIER must be at least 16 bits wide. |
*/ |
#ifndef MULTIPLIER |
#define MULTIPLIER int /* type for fastest integer multiply */ |
#endif |
/* FAST_FLOAT should be either float or double, whichever is done faster |
* by your compiler. (Note that this type is only used in the floating point |
* DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) |
* Typically, float is faster in ANSI C compilers, while double is faster in |
* pre-ANSI compilers (because they insist on converting to double anyway). |
* The code below therefore chooses float if we have ANSI-style prototypes. |
*/ |
#ifndef FAST_FLOAT |
#ifdef HAVE_PROTOTYPES |
#define FAST_FLOAT float |
#else |
#define FAST_FLOAT double |
#endif |
#endif |
#endif /* JPEG_INTERNAL_OPTIONS */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jp2.h |
---|
0,0 → 1,231 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __JP2_H |
#define __JP2_H |
/** |
@file jp2.h |
@brief The JPEG-2000 file format Reader/Writer (JP2) |
*/ |
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ |
/*@{*/ |
#define JPIP_JPIP 0x6a706970 |
#define JP2_JP 0x6a502020 /**< JPEG 2000 signature box */ |
#define JP2_FTYP 0x66747970 /**< File type box */ |
#define JP2_JP2H 0x6a703268 /**< JP2 header box */ |
#define JP2_IHDR 0x69686472 /**< Image header box */ |
#define JP2_COLR 0x636f6c72 /**< Colour specification box */ |
#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */ |
#define JP2_URL 0x75726c20 /**< URL box */ |
#define JP2_DTBL 0x6474626c /**< Data Reference box */ |
#define JP2_BPCC 0x62706363 /**< Bits per component box */ |
#define JP2_JP2 0x6a703220 /**< File type fields */ |
#define JP2_PCLR 0x70636c72 /**< Palette box */ |
#define JP2_CMAP 0x636d6170 /**< Component Mapping box */ |
#define JP2_CDEF 0x63646566 /**< Channel Definition box */ |
/* ----------------------------------------------------------------------- */ |
/** |
Channel description: channel index, type, assocation |
*/ |
typedef struct opj_jp2_cdef_info |
{ |
unsigned short cn, typ, asoc; |
} opj_jp2_cdef_info_t; |
/** |
Channel descriptions and number of descriptions |
*/ |
typedef struct opj_jp2_cdef |
{ |
opj_jp2_cdef_info_t *info; |
unsigned short n; |
} opj_jp2_cdef_t; |
/** |
Component mappings: channel index, mapping type, palette index |
*/ |
typedef struct opj_jp2_cmap_comp |
{ |
unsigned short cmp; |
unsigned char mtyp, pcol; |
} opj_jp2_cmap_comp_t; |
/** |
Palette data: table entries, palette columns |
*/ |
typedef struct opj_jp2_pclr |
{ |
unsigned int *entries; |
unsigned char *channel_sign; |
unsigned char *channel_size; |
opj_jp2_cmap_comp_t *cmap; |
unsigned short nr_entries, nr_channels; |
} opj_jp2_pclr_t; |
/** |
Collector for ICC profile, palette, component mapping, channel description |
*/ |
typedef struct opj_jp2_color |
{ |
unsigned char *icc_profile_buf; |
int icc_profile_len; |
opj_jp2_cdef_t *jp2_cdef; |
opj_jp2_pclr_t *jp2_pclr; |
unsigned char jp2_has_colr; |
} opj_jp2_color_t; |
/** |
JP2 component |
*/ |
typedef struct opj_jp2_comps { |
int depth; |
int sgnd; |
int bpcc; |
} opj_jp2_comps_t; |
/** |
JPEG-2000 file format reader/writer |
*/ |
typedef struct opj_jp2 { |
/** codec context */ |
opj_common_ptr cinfo; |
/** handle to the J2K codec */ |
opj_j2k_t *j2k; |
unsigned int w; |
unsigned int h; |
unsigned int numcomps; |
unsigned int bpc; |
unsigned int C; |
unsigned int UnkC; |
unsigned int IPR; |
unsigned int meth; |
unsigned int approx; |
unsigned int enumcs; |
unsigned int precedence; |
unsigned int brand; |
unsigned int minversion; |
unsigned int numcl; |
unsigned int *cl; |
opj_jp2_comps_t *comps; |
unsigned int j2k_codestream_offset; |
unsigned int j2k_codestream_length; |
} opj_jp2_t; |
/** |
JP2 Box |
*/ |
typedef struct opj_jp2_box { |
int length; |
int type; |
int init_pos; |
} opj_jp2_box_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Write the JP2H box - JP2 Header box (used in MJ2) |
@param jp2 JP2 handle |
@param cio Output buffer stream |
*/ |
void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio); |
/** |
Read the JP2H box - JP2 Header box (used in MJ2) |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param ext Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color); |
/** |
Creates a JP2 decompression structure |
@param cinfo Codec context info |
@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise |
*/ |
opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo); |
/** |
Destroy a JP2 decompressor handle |
@param jp2 JP2 decompressor handle to destroy |
*/ |
void jp2_destroy_decompress(opj_jp2_t *jp2); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in jp2->j2k->cp. |
@param jp2 JP2 decompressor handle |
@param parameters decompression parameters |
*/ |
void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 file stream |
@param jp2 JP2 decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a JP2 compression structure |
@param cinfo Codec context info |
@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise |
*/ |
opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo); |
/** |
Destroy a JP2 compressor handle |
@param jp2 JP2 compressor handle to destroy |
*/ |
void jp2_destroy_compress(opj_jp2_t *jp2); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
Coding parameters are returned in jp2->j2k->cp. |
@param jp2 JP2 compressor handle |
@param parameters compression parameters |
@param image input filled image |
*/ |
void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Encode an image into a JPEG-2000 file stream |
@param jp2 JP2 compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __JP2_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jpeglib.h |
---|
0,0 → 1,1096 |
/* |
* jpeglib.h |
* |
* Copyright (C) 1991-1998, Thomas G. Lane. |
* This file is part of the Independent JPEG Group's software. |
* For conditions of distribution and use, see the accompanying README file. |
* |
* This file defines the application interface for the JPEG library. |
* Most applications using the library need only include this file, |
* and perhaps jerror.h if they want to know the exact error codes. |
*/ |
#ifndef JPEGLIB_H |
#define JPEGLIB_H |
/* |
* First we include the configuration files that record how this |
* installation of the JPEG library is set up. jconfig.h can be |
* generated automatically for many systems. jmorecfg.h contains |
* manual configuration options that most people need not worry about. |
*/ |
#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ |
#include "jconfig.h" /* widely used configuration options */ |
#endif |
#include "jmorecfg.h" /* seldom changed options */ |
/* Version ID for the JPEG library. |
* Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". |
*/ |
#define JPEG_LIB_VERSION 62 /* Version 6b */ |
/* Various constants determining the sizes of things. |
* All of these are specified by the JPEG standard, so don't change them |
* if you want to be compatible. |
*/ |
#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ |
#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ |
#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ |
#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ |
#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ |
#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ |
#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ |
/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; |
* the PostScript DCT filter can emit files with many more than 10 blocks/MCU. |
* If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU |
* to handle it. We even let you do this from the jconfig.h file. However, |
* we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe |
* sometimes emits noncompliant files doesn't mean you should too. |
*/ |
#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ |
#ifndef D_MAX_BLOCKS_IN_MCU |
#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ |
#endif |
/* Data structures for images (arrays of samples and of DCT coefficients). |
* On 80x86 machines, the image arrays are too big for near pointers, |
* but the pointer arrays can fit in near memory. |
*/ |
typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ |
typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ |
typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ |
typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ |
typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ |
typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ |
typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ |
typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ |
/* Types for JPEG compression parameters and working tables. */ |
/* DCT coefficient quantization tables. */ |
typedef struct { |
/* This array gives the coefficient quantizers in natural array order |
* (not the zigzag order in which they are stored in a JPEG DQT marker). |
* CAUTION: IJG versions prior to v6a kept this array in zigzag order. |
*/ |
UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ |
/* This field is used only during compression. It's initialized FALSE when |
* the table is created, and set TRUE when it's been output to the file. |
* You could suppress output of a table by setting this to TRUE. |
* (See jpeg_suppress_tables for an example.) |
*/ |
boolean sent_table; /* TRUE when table has been output */ |
} JQUANT_TBL; |
/* Huffman coding tables. */ |
typedef struct { |
/* These two fields directly represent the contents of a JPEG DHT marker */ |
UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ |
/* length k bits; bits[0] is unused */ |
UINT8 huffval[256]; /* The symbols, in order of incr code length */ |
/* This field is used only during compression. It's initialized FALSE when |
* the table is created, and set TRUE when it's been output to the file. |
* You could suppress output of a table by setting this to TRUE. |
* (See jpeg_suppress_tables for an example.) |
*/ |
boolean sent_table; /* TRUE when table has been output */ |
} JHUFF_TBL; |
/* Basic info about one component (color channel). */ |
typedef struct { |
/* These values are fixed over the whole image. */ |
/* For compression, they must be supplied by parameter setup; */ |
/* for decompression, they are read from the SOF marker. */ |
int component_id; /* identifier for this component (0..255) */ |
int component_index; /* its index in SOF or cinfo->comp_info[] */ |
int h_samp_factor; /* horizontal sampling factor (1..4) */ |
int v_samp_factor; /* vertical sampling factor (1..4) */ |
int quant_tbl_no; /* quantization table selector (0..3) */ |
/* These values may vary between scans. */ |
/* For compression, they must be supplied by parameter setup; */ |
/* for decompression, they are read from the SOS marker. */ |
/* The decompressor output side may not use these variables. */ |
int dc_tbl_no; /* DC entropy table selector (0..3) */ |
int ac_tbl_no; /* AC entropy table selector (0..3) */ |
/* Remaining fields should be treated as private by applications. */ |
/* These values are computed during compression or decompression startup: */ |
/* Component's size in DCT blocks. |
* Any dummy blocks added to complete an MCU are not counted; therefore |
* these values do not depend on whether a scan is interleaved or not. |
*/ |
JDIMENSION width_in_blocks; |
JDIMENSION height_in_blocks; |
/* Size of a DCT block in samples. Always DCTSIZE for compression. |
* For decompression this is the size of the output from one DCT block, |
* reflecting any scaling we choose to apply during the IDCT step. |
* Values of 1,2,4,8 are likely to be supported. Note that different |
* components may receive different IDCT scalings. |
*/ |
int DCT_scaled_size; |
/* The downsampled dimensions are the component's actual, unpadded number |
* of samples at the main buffer (preprocessing/compression interface), thus |
* downsampled_width = ceil(image_width * Hi/Hmax) |
* and similarly for height. For decompression, IDCT scaling is included, so |
* downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) |
*/ |
JDIMENSION downsampled_width; /* actual width in samples */ |
JDIMENSION downsampled_height; /* actual height in samples */ |
/* This flag is used only for decompression. In cases where some of the |
* components will be ignored (eg grayscale output from YCbCr image), |
* we can skip most computations for the unused components. |
*/ |
boolean component_needed; /* do we need the value of this component? */ |
/* These values are computed before starting a scan of the component. */ |
/* The decompressor output side may not use these variables. */ |
int MCU_width; /* number of blocks per MCU, horizontally */ |
int MCU_height; /* number of blocks per MCU, vertically */ |
int MCU_blocks; /* MCU_width * MCU_height */ |
int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ |
int last_col_width; /* # of non-dummy blocks across in last MCU */ |
int last_row_height; /* # of non-dummy blocks down in last MCU */ |
/* Saved quantization table for component; NULL if none yet saved. |
* See jdinput.c comments about the need for this information. |
* This field is currently used only for decompression. |
*/ |
JQUANT_TBL * quant_table; |
/* Private per-component storage for DCT or IDCT subsystem. */ |
void * dct_table; |
} jpeg_component_info; |
/* The script for encoding a multiple-scan file is an array of these: */ |
typedef struct { |
int comps_in_scan; /* number of components encoded in this scan */ |
int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ |
int Ss, Se; /* progressive JPEG spectral selection parms */ |
int Ah, Al; /* progressive JPEG successive approx. parms */ |
} jpeg_scan_info; |
/* The decompressor can save APPn and COM markers in a list of these: */ |
typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; |
struct jpeg_marker_struct { |
jpeg_saved_marker_ptr next; /* next in list, or NULL */ |
UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ |
unsigned int original_length; /* # bytes of data in the file */ |
unsigned int data_length; /* # bytes of data saved at data[] */ |
JOCTET FAR * data; /* the data contained in the marker */ |
/* the marker length word is not counted in data_length or original_length */ |
}; |
/* Known color spaces. */ |
typedef enum { |
JCS_UNKNOWN, /* error/unspecified */ |
JCS_GRAYSCALE, /* monochrome */ |
JCS_RGB, /* red/green/blue */ |
JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ |
JCS_CMYK, /* C/M/Y/K */ |
JCS_YCCK /* Y/Cb/Cr/K */ |
} J_COLOR_SPACE; |
/* DCT/IDCT algorithm options. */ |
typedef enum { |
JDCT_ISLOW, /* slow but accurate integer algorithm */ |
JDCT_IFAST, /* faster, less accurate integer method */ |
JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ |
} J_DCT_METHOD; |
#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ |
#define JDCT_DEFAULT JDCT_ISLOW |
#endif |
#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ |
#define JDCT_FASTEST JDCT_IFAST |
#endif |
/* Dithering options for decompression. */ |
typedef enum { |
JDITHER_NONE, /* no dithering */ |
JDITHER_ORDERED, /* simple ordered dither */ |
JDITHER_FS /* Floyd-Steinberg error diffusion dither */ |
} J_DITHER_MODE; |
/* Common fields between JPEG compression and decompression master structs. */ |
#define jpeg_common_fields \ |
struct jpeg_error_mgr * err; /* Error handler module */\ |
struct jpeg_memory_mgr * mem; /* Memory manager module */\ |
struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ |
void * client_data; /* Available for use by application */\ |
boolean is_decompressor; /* So common code can tell which is which */\ |
int global_state /* For checking call sequence validity */ |
/* Routines that are to be used by both halves of the library are declared |
* to receive a pointer to this structure. There are no actual instances of |
* jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. |
*/ |
struct jpeg_common_struct { |
jpeg_common_fields; /* Fields common to both master struct types */ |
/* Additional fields follow in an actual jpeg_compress_struct or |
* jpeg_decompress_struct. All three structs must agree on these |
* initial fields! (This would be a lot cleaner in C++.) |
*/ |
}; |
typedef struct jpeg_common_struct * j_common_ptr; |
typedef struct jpeg_compress_struct * j_compress_ptr; |
typedef struct jpeg_decompress_struct * j_decompress_ptr; |
/* Master record for a compression instance */ |
struct jpeg_compress_struct { |
jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ |
/* Destination for compressed data */ |
struct jpeg_destination_mgr * dest; |
/* Description of source image --- these fields must be filled in by |
* outer application before starting compression. in_color_space must |
* be correct before you can even call jpeg_set_defaults(). |
*/ |
JDIMENSION image_width; /* input image width */ |
JDIMENSION image_height; /* input image height */ |
int input_components; /* # of color components in input image */ |
J_COLOR_SPACE in_color_space; /* colorspace of input image */ |
double input_gamma; /* image gamma of input image */ |
/* Compression parameters --- these fields must be set before calling |
* jpeg_start_compress(). We recommend calling jpeg_set_defaults() to |
* initialize everything to reasonable defaults, then changing anything |
* the application specifically wants to change. That way you won't get |
* burnt when new parameters are added. Also note that there are several |
* helper routines to simplify changing parameters. |
*/ |
int data_precision; /* bits of precision in image data */ |
int num_components; /* # of color components in JPEG image */ |
J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ |
jpeg_component_info * comp_info; |
/* comp_info[i] describes component that appears i'th in SOF */ |
JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; |
/* ptrs to coefficient quantization tables, or NULL if not defined */ |
JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; |
JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; |
/* ptrs to Huffman coding tables, or NULL if not defined */ |
UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ |
UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ |
UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ |
int num_scans; /* # of entries in scan_info array */ |
const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ |
/* The default value of scan_info is NULL, which causes a single-scan |
* sequential JPEG file to be emitted. To create a multi-scan file, |
* set num_scans and scan_info to point to an array of scan definitions. |
*/ |
boolean raw_data_in; /* TRUE=caller supplies downsampled data */ |
boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ |
boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ |
boolean CCIR601_sampling; /* TRUE=first samples are cosited */ |
int smoothing_factor; /* 1..100, or 0 for no input smoothing */ |
J_DCT_METHOD dct_method; /* DCT algorithm selector */ |
/* The restart interval can be specified in absolute MCUs by setting |
* restart_interval, or in MCU rows by setting restart_in_rows |
* (in which case the correct restart_interval will be figured |
* for each scan). |
*/ |
unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ |
int restart_in_rows; /* if > 0, MCU rows per restart interval */ |
/* Parameters controlling emission of special markers. */ |
boolean write_JFIF_header; /* should a JFIF marker be written? */ |
UINT8 JFIF_major_version; /* What to write for the JFIF version number */ |
UINT8 JFIF_minor_version; |
/* These three values are not used by the JPEG code, merely copied */ |
/* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ |
/* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ |
/* ratio is defined by X_density/Y_density even when density_unit=0. */ |
UINT8 density_unit; /* JFIF code for pixel size units */ |
UINT16 X_density; /* Horizontal pixel density */ |
UINT16 Y_density; /* Vertical pixel density */ |
boolean write_Adobe_marker; /* should an Adobe marker be written? */ |
/* State variable: index of next scanline to be written to |
* jpeg_write_scanlines(). Application may use this to control its |
* processing loop, e.g., "while (next_scanline < image_height)". |
*/ |
JDIMENSION next_scanline; /* 0 .. image_height-1 */ |
/* Remaining fields are known throughout compressor, but generally |
* should not be touched by a surrounding application. |
*/ |
/* |
* These fields are computed during compression startup |
*/ |
boolean progressive_mode; /* TRUE if scan script uses progressive mode */ |
int max_h_samp_factor; /* largest h_samp_factor */ |
int max_v_samp_factor; /* largest v_samp_factor */ |
JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ |
/* The coefficient controller receives data in units of MCU rows as defined |
* for fully interleaved scans (whether the JPEG file is interleaved or not). |
* There are v_samp_factor * DCTSIZE sample rows of each component in an |
* "iMCU" (interleaved MCU) row. |
*/ |
/* |
* These fields are valid during any one scan. |
* They describe the components and MCUs actually appearing in the scan. |
*/ |
int comps_in_scan; /* # of JPEG components in this scan */ |
jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; |
/* *cur_comp_info[i] describes component that appears i'th in SOS */ |
JDIMENSION MCUs_per_row; /* # of MCUs across the image */ |
JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ |
int blocks_in_MCU; /* # of DCT blocks per MCU */ |
int MCU_membership[C_MAX_BLOCKS_IN_MCU]; |
/* MCU_membership[i] is index in cur_comp_info of component owning */ |
/* i'th block in an MCU */ |
int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ |
/* |
* Links to compression subobjects (methods and private variables of modules) |
*/ |
struct jpeg_comp_master * master; |
struct jpeg_c_main_controller * main; |
struct jpeg_c_prep_controller * prep; |
struct jpeg_c_coef_controller * coef; |
struct jpeg_marker_writer * marker; |
struct jpeg_color_converter * cconvert; |
struct jpeg_downsampler * downsample; |
struct jpeg_forward_dct * fdct; |
struct jpeg_entropy_encoder * entropy; |
jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ |
int script_space_size; |
}; |
/* Master record for a decompression instance */ |
struct jpeg_decompress_struct { |
jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ |
/* Source of compressed data */ |
struct jpeg_source_mgr * src; |
/* Basic description of image --- filled in by jpeg_read_header(). */ |
/* Application may inspect these values to decide how to process image. */ |
JDIMENSION image_width; /* nominal image width (from SOF marker) */ |
JDIMENSION image_height; /* nominal image height */ |
int num_components; /* # of color components in JPEG image */ |
J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ |
/* Decompression processing parameters --- these fields must be set before |
* calling jpeg_start_decompress(). Note that jpeg_read_header() initializes |
* them to default values. |
*/ |
J_COLOR_SPACE out_color_space; /* colorspace for output */ |
unsigned int scale_num, scale_denom; /* fraction by which to scale image */ |
double output_gamma; /* image gamma wanted in output */ |
boolean buffered_image; /* TRUE=multiple output passes */ |
boolean raw_data_out; /* TRUE=downsampled data wanted */ |
J_DCT_METHOD dct_method; /* IDCT algorithm selector */ |
boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ |
boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ |
boolean quantize_colors; /* TRUE=colormapped output wanted */ |
/* the following are ignored if not quantize_colors: */ |
J_DITHER_MODE dither_mode; /* type of color dithering to use */ |
boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ |
int desired_number_of_colors; /* max # colors to use in created colormap */ |
/* these are significant only in buffered-image mode: */ |
boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ |
boolean enable_external_quant;/* enable future use of external colormap */ |
boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ |
/* Description of actual output image that will be returned to application. |
* These fields are computed by jpeg_start_decompress(). |
* You can also use jpeg_calc_output_dimensions() to determine these values |
* in advance of calling jpeg_start_decompress(). |
*/ |
JDIMENSION output_width; /* scaled image width */ |
JDIMENSION output_height; /* scaled image height */ |
int out_color_components; /* # of color components in out_color_space */ |
int output_components; /* # of color components returned */ |
/* output_components is 1 (a colormap index) when quantizing colors; |
* otherwise it equals out_color_components. |
*/ |
int rec_outbuf_height; /* min recommended height of scanline buffer */ |
/* If the buffer passed to jpeg_read_scanlines() is less than this many rows |
* high, space and time will be wasted due to unnecessary data copying. |
* Usually rec_outbuf_height will be 1 or 2, at most 4. |
*/ |
/* When quantizing colors, the output colormap is described by these fields. |
* The application can supply a colormap by setting colormap non-NULL before |
* calling jpeg_start_decompress; otherwise a colormap is created during |
* jpeg_start_decompress or jpeg_start_output. |
* The map has out_color_components rows and actual_number_of_colors columns. |
*/ |
int actual_number_of_colors; /* number of entries in use */ |
JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ |
/* State variables: these variables indicate the progress of decompression. |
* The application may examine these but must not modify them. |
*/ |
/* Row index of next scanline to be read from jpeg_read_scanlines(). |
* Application may use this to control its processing loop, e.g., |
* "while (output_scanline < output_height)". |
*/ |
JDIMENSION output_scanline; /* 0 .. output_height-1 */ |
/* Current input scan number and number of iMCU rows completed in scan. |
* These indicate the progress of the decompressor input side. |
*/ |
int input_scan_number; /* Number of SOS markers seen so far */ |
JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ |
/* The "output scan number" is the notional scan being displayed by the |
* output side. The decompressor will not allow output scan/row number |
* to get ahead of input scan/row, but it can fall arbitrarily far behind. |
*/ |
int output_scan_number; /* Nominal scan number being displayed */ |
JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ |
/* Current progression status. coef_bits[c][i] indicates the precision |
* with which component c's DCT coefficient i (in zigzag order) is known. |
* It is -1 when no data has yet been received, otherwise it is the point |
* transform (shift) value for the most recent scan of the coefficient |
* (thus, 0 at completion of the progression). |
* This pointer is NULL when reading a non-progressive file. |
*/ |
int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ |
/* Internal JPEG parameters --- the application usually need not look at |
* these fields. Note that the decompressor output side may not use |
* any parameters that can change between scans. |
*/ |
/* Quantization and Huffman tables are carried forward across input |
* datastreams when processing abbreviated JPEG datastreams. |
*/ |
JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; |
/* ptrs to coefficient quantization tables, or NULL if not defined */ |
JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; |
JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; |
/* ptrs to Huffman coding tables, or NULL if not defined */ |
/* These parameters are never carried across datastreams, since they |
* are given in SOF/SOS markers or defined to be reset by SOI. |
*/ |
int data_precision; /* bits of precision in image data */ |
jpeg_component_info * comp_info; |
/* comp_info[i] describes component that appears i'th in SOF */ |
boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ |
boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ |
UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ |
UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ |
UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ |
unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ |
/* These fields record data obtained from optional markers recognized by |
* the JPEG library. |
*/ |
boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ |
/* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ |
UINT8 JFIF_major_version; /* JFIF version number */ |
UINT8 JFIF_minor_version; |
UINT8 density_unit; /* JFIF code for pixel size units */ |
UINT16 X_density; /* Horizontal pixel density */ |
UINT16 Y_density; /* Vertical pixel density */ |
boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ |
UINT8 Adobe_transform; /* Color transform code from Adobe marker */ |
boolean CCIR601_sampling; /* TRUE=first samples are cosited */ |
/* Aside from the specific data retained from APPn markers known to the |
* library, the uninterpreted contents of any or all APPn and COM markers |
* can be saved in a list for examination by the application. |
*/ |
jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ |
/* Remaining fields are known throughout decompressor, but generally |
* should not be touched by a surrounding application. |
*/ |
/* |
* These fields are computed during decompression startup |
*/ |
int max_h_samp_factor; /* largest h_samp_factor */ |
int max_v_samp_factor; /* largest v_samp_factor */ |
int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ |
JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ |
/* The coefficient controller's input and output progress is measured in |
* units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows |
* in fully interleaved JPEG scans, but are used whether the scan is |
* interleaved or not. We define an iMCU row as v_samp_factor DCT block |
* rows of each component. Therefore, the IDCT output contains |
* v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. |
*/ |
JSAMPLE * sample_range_limit; /* table for fast range-limiting */ |
/* |
* These fields are valid during any one scan. |
* They describe the components and MCUs actually appearing in the scan. |
* Note that the decompressor output side must not use these fields. |
*/ |
int comps_in_scan; /* # of JPEG components in this scan */ |
jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; |
/* *cur_comp_info[i] describes component that appears i'th in SOS */ |
JDIMENSION MCUs_per_row; /* # of MCUs across the image */ |
JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ |
int blocks_in_MCU; /* # of DCT blocks per MCU */ |
int MCU_membership[D_MAX_BLOCKS_IN_MCU]; |
/* MCU_membership[i] is index in cur_comp_info of component owning */ |
/* i'th block in an MCU */ |
int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ |
/* This field is shared between entropy decoder and marker parser. |
* It is either zero or the code of a JPEG marker that has been |
* read from the data source, but has not yet been processed. |
*/ |
int unread_marker; |
/* |
* Links to decompression subobjects (methods, private variables of modules) |
*/ |
struct jpeg_decomp_master * master; |
struct jpeg_d_main_controller * main; |
struct jpeg_d_coef_controller * coef; |
struct jpeg_d_post_controller * post; |
struct jpeg_input_controller * inputctl; |
struct jpeg_marker_reader * marker; |
struct jpeg_entropy_decoder * entropy; |
struct jpeg_inverse_dct * idct; |
struct jpeg_upsampler * upsample; |
struct jpeg_color_deconverter * cconvert; |
struct jpeg_color_quantizer * cquantize; |
}; |
/* "Object" declarations for JPEG modules that may be supplied or called |
* directly by the surrounding application. |
* As with all objects in the JPEG library, these structs only define the |
* publicly visible methods and state variables of a module. Additional |
* private fields may exist after the public ones. |
*/ |
/* Error handler object */ |
struct jpeg_error_mgr { |
/* Error exit handler: does not return to caller */ |
JMETHOD(void, error_exit, (j_common_ptr cinfo)); |
/* Conditionally emit a trace or warning message */ |
JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); |
/* Routine that actually outputs a trace or error message */ |
JMETHOD(void, output_message, (j_common_ptr cinfo)); |
/* Format a message string for the most recent JPEG error or message */ |
JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); |
#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ |
/* Reset error state variables at start of a new image */ |
JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); |
/* The message ID code and any parameters are saved here. |
* A message can have one string parameter or up to 8 int parameters. |
*/ |
int msg_code; |
#define JMSG_STR_PARM_MAX 80 |
union { |
int i[8]; |
char s[JMSG_STR_PARM_MAX]; |
} msg_parm; |
/* Standard state variables for error facility */ |
int trace_level; /* max msg_level that will be displayed */ |
/* For recoverable corrupt-data errors, we emit a warning message, |
* but keep going unless emit_message chooses to abort. emit_message |
* should count warnings in num_warnings. The surrounding application |
* can check for bad data by seeing if num_warnings is nonzero at the |
* end of processing. |
*/ |
long num_warnings; /* number of corrupt-data warnings */ |
/* These fields point to the table(s) of error message strings. |
* An application can change the table pointer to switch to a different |
* message list (typically, to change the language in which errors are |
* reported). Some applications may wish to add additional error codes |
* that will be handled by the JPEG library error mechanism; the second |
* table pointer is used for this purpose. |
* |
* First table includes all errors generated by JPEG library itself. |
* Error code 0 is reserved for a "no such error string" message. |
*/ |
const char * const * jpeg_message_table; /* Library errors */ |
int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ |
/* Second table can be added by application (see cjpeg/djpeg for example). |
* It contains strings numbered first_addon_message..last_addon_message. |
*/ |
const char * const * addon_message_table; /* Non-library errors */ |
int first_addon_message; /* code for first string in addon table */ |
int last_addon_message; /* code for last string in addon table */ |
}; |
/* Progress monitor object */ |
struct jpeg_progress_mgr { |
JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); |
long pass_counter; /* work units completed in this pass */ |
long pass_limit; /* total number of work units in this pass */ |
int completed_passes; /* passes completed so far */ |
int total_passes; /* total number of passes expected */ |
}; |
/* Data destination object for compression */ |
struct jpeg_destination_mgr { |
JOCTET * next_output_byte; /* => next byte to write in buffer */ |
size_t free_in_buffer; /* # of byte spaces remaining in buffer */ |
JMETHOD(void, init_destination, (j_compress_ptr cinfo)); |
JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); |
JMETHOD(void, term_destination, (j_compress_ptr cinfo)); |
}; |
/* Data source object for decompression */ |
struct jpeg_source_mgr { |
const JOCTET * next_input_byte; /* => next byte to read from buffer */ |
size_t bytes_in_buffer; /* # of bytes remaining in buffer */ |
JMETHOD(void, init_source, (j_decompress_ptr cinfo)); |
JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); |
JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); |
JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); |
JMETHOD(void, term_source, (j_decompress_ptr cinfo)); |
}; |
/* Memory manager object. |
* Allocates "small" objects (a few K total), "large" objects (tens of K), |
* and "really big" objects (virtual arrays with backing store if needed). |
* The memory manager does not allow individual objects to be freed; rather, |
* each created object is assigned to a pool, and whole pools can be freed |
* at once. This is faster and more convenient than remembering exactly what |
* to free, especially where malloc()/free() are not too speedy. |
* NB: alloc routines never return NULL. They exit to error_exit if not |
* successful. |
*/ |
#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ |
#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ |
#define JPOOL_NUMPOOLS 2 |
typedef struct jvirt_sarray_control * jvirt_sarray_ptr; |
typedef struct jvirt_barray_control * jvirt_barray_ptr; |
struct jpeg_memory_mgr { |
/* Method pointers */ |
JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, |
size_t sizeofobject)); |
JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, |
size_t sizeofobject)); |
JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, |
JDIMENSION samplesperrow, |
JDIMENSION numrows)); |
JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, |
JDIMENSION blocksperrow, |
JDIMENSION numrows)); |
JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, |
int pool_id, |
boolean pre_zero, |
JDIMENSION samplesperrow, |
JDIMENSION numrows, |
JDIMENSION maxaccess)); |
JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, |
int pool_id, |
boolean pre_zero, |
JDIMENSION blocksperrow, |
JDIMENSION numrows, |
JDIMENSION maxaccess)); |
JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); |
JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, |
jvirt_sarray_ptr ptr, |
JDIMENSION start_row, |
JDIMENSION num_rows, |
boolean writable)); |
JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, |
jvirt_barray_ptr ptr, |
JDIMENSION start_row, |
JDIMENSION num_rows, |
boolean writable)); |
JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); |
JMETHOD(void, self_destruct, (j_common_ptr cinfo)); |
/* Limit on memory allocation for this JPEG object. (Note that this is |
* merely advisory, not a guaranteed maximum; it only affects the space |
* used for virtual-array buffers.) May be changed by outer application |
* after creating the JPEG object. |
*/ |
long max_memory_to_use; |
/* Maximum allocation request accepted by alloc_large. */ |
long max_alloc_chunk; |
}; |
/* Routine signature for application-supplied marker processing methods. |
* Need not pass marker code since it is stored in cinfo->unread_marker. |
*/ |
typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); |
/* Declarations for routines called by application. |
* The JPP macro hides prototype parameters from compilers that can't cope. |
* Note JPP requires double parentheses. |
*/ |
#ifdef HAVE_PROTOTYPES |
#define JPP(arglist) arglist |
#else |
#define JPP(arglist) () |
#endif |
/* Short forms of external names for systems with brain-damaged linkers. |
* We shorten external names to be unique in the first six letters, which |
* is good enough for all known systems. |
* (If your compiler itself needs names to be unique in less than 15 |
* characters, you are out of luck. Get a better compiler.) |
*/ |
#ifdef NEED_SHORT_EXTERNAL_NAMES |
#define jpeg_std_error jStdError |
#define jpeg_CreateCompress jCreaCompress |
#define jpeg_CreateDecompress jCreaDecompress |
#define jpeg_destroy_compress jDestCompress |
#define jpeg_destroy_decompress jDestDecompress |
#define jpeg_stdio_dest jStdDest |
#define jpeg_stdio_src jStdSrc |
#define jpeg_set_defaults jSetDefaults |
#define jpeg_set_colorspace jSetColorspace |
#define jpeg_default_colorspace jDefColorspace |
#define jpeg_set_quality jSetQuality |
#define jpeg_set_linear_quality jSetLQuality |
#define jpeg_add_quant_table jAddQuantTable |
#define jpeg_quality_scaling jQualityScaling |
#define jpeg_simple_progression jSimProgress |
#define jpeg_suppress_tables jSuppressTables |
#define jpeg_alloc_quant_table jAlcQTable |
#define jpeg_alloc_huff_table jAlcHTable |
#define jpeg_start_compress jStrtCompress |
#define jpeg_write_scanlines jWrtScanlines |
#define jpeg_finish_compress jFinCompress |
#define jpeg_write_raw_data jWrtRawData |
#define jpeg_write_marker jWrtMarker |
#define jpeg_write_m_header jWrtMHeader |
#define jpeg_write_m_byte jWrtMByte |
#define jpeg_write_tables jWrtTables |
#define jpeg_read_header jReadHeader |
#define jpeg_start_decompress jStrtDecompress |
#define jpeg_read_scanlines jReadScanlines |
#define jpeg_finish_decompress jFinDecompress |
#define jpeg_read_raw_data jReadRawData |
#define jpeg_has_multiple_scans jHasMultScn |
#define jpeg_start_output jStrtOutput |
#define jpeg_finish_output jFinOutput |
#define jpeg_input_complete jInComplete |
#define jpeg_new_colormap jNewCMap |
#define jpeg_consume_input jConsumeInput |
#define jpeg_calc_output_dimensions jCalcDimensions |
#define jpeg_save_markers jSaveMarkers |
#define jpeg_set_marker_processor jSetMarker |
#define jpeg_read_coefficients jReadCoefs |
#define jpeg_write_coefficients jWrtCoefs |
#define jpeg_copy_critical_parameters jCopyCrit |
#define jpeg_abort_compress jAbrtCompress |
#define jpeg_abort_decompress jAbrtDecompress |
#define jpeg_abort jAbort |
#define jpeg_destroy jDestroy |
#define jpeg_resync_to_restart jResyncRestart |
#endif /* NEED_SHORT_EXTERNAL_NAMES */ |
/* Default error-management setup */ |
EXTERN(struct jpeg_error_mgr *) jpeg_std_error |
JPP((struct jpeg_error_mgr * err)); |
/* Initialization of JPEG compression objects. |
* jpeg_create_compress() and jpeg_create_decompress() are the exported |
* names that applications should call. These expand to calls on |
* jpeg_CreateCompress and jpeg_CreateDecompress with additional information |
* passed for version mismatch checking. |
* NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. |
*/ |
#define jpeg_create_compress(cinfo) \ |
jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ |
(size_t) sizeof(struct jpeg_compress_struct)) |
#define jpeg_create_decompress(cinfo) \ |
jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ |
(size_t) sizeof(struct jpeg_decompress_struct)) |
EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, |
int version, size_t structsize)); |
EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, |
int version, size_t structsize)); |
/* Destruction of JPEG compression objects */ |
EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); |
EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); |
/* Standard data source and destination managers: stdio streams. */ |
/* Caller is responsible for opening the file before and closing after. */ |
EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); |
EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); |
/* Default parameter setup for compression */ |
EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); |
/* Compression parameter setup aids */ |
EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, |
J_COLOR_SPACE colorspace)); |
EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); |
EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, |
boolean force_baseline)); |
EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, |
int scale_factor, |
boolean force_baseline)); |
EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, |
const unsigned int *basic_table, |
int scale_factor, |
boolean force_baseline)); |
EXTERN(int) jpeg_quality_scaling JPP((int quality)); |
EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); |
EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, |
boolean suppress)); |
EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); |
EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); |
/* Main entry points for compression */ |
EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, |
boolean write_all_tables)); |
EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, |
JSAMPARRAY scanlines, |
JDIMENSION num_lines)); |
EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); |
/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ |
EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, |
JSAMPIMAGE data, |
JDIMENSION num_lines)); |
/* Write a special marker. See libjpeg.doc concerning safe usage. */ |
EXTERN(void) jpeg_write_marker |
JPP((j_compress_ptr cinfo, int marker, |
const JOCTET * dataptr, unsigned int datalen)); |
/* Same, but piecemeal. */ |
EXTERN(void) jpeg_write_m_header |
JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); |
EXTERN(void) jpeg_write_m_byte |
JPP((j_compress_ptr cinfo, int val)); |
/* Alternate compression function: just write an abbreviated table file */ |
EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); |
/* Decompression startup: read start of JPEG datastream to see what's there */ |
EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, |
boolean require_image)); |
/* Return value is one of: */ |
#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ |
#define JPEG_HEADER_OK 1 /* Found valid image datastream */ |
#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ |
/* If you pass require_image = TRUE (normal case), you need not check for |
* a TABLES_ONLY return code; an abbreviated file will cause an error exit. |
* JPEG_SUSPENDED is only possible if you use a data source module that can |
* give a suspension return (the stdio source module doesn't). |
*/ |
/* Main entry points for decompression */ |
EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); |
EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, |
JSAMPARRAY scanlines, |
JDIMENSION max_lines)); |
EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); |
/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ |
EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, |
JSAMPIMAGE data, |
JDIMENSION max_lines)); |
/* Additional entry points for buffered-image mode. */ |
EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); |
EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, |
int scan_number)); |
EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); |
EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); |
EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); |
EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); |
/* Return value is one of: */ |
/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ |
#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ |
#define JPEG_REACHED_EOI 2 /* Reached end of image */ |
#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ |
#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ |
/* Precalculate output dimensions for current decompression parameters. */ |
EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); |
/* Control saving of COM and APPn markers into marker_list. */ |
EXTERN(void) jpeg_save_markers |
JPP((j_decompress_ptr cinfo, int marker_code, |
unsigned int length_limit)); |
/* Install a special processing method for COM or APPn markers. */ |
EXTERN(void) jpeg_set_marker_processor |
JPP((j_decompress_ptr cinfo, int marker_code, |
jpeg_marker_parser_method routine)); |
/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ |
EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); |
EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, |
jvirt_barray_ptr * coef_arrays)); |
EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, |
j_compress_ptr dstinfo)); |
/* If you choose to abort compression or decompression before completing |
* jpeg_finish_(de)compress, then you need to clean up to release memory, |
* temporary files, etc. You can just call jpeg_destroy_(de)compress |
* if you're done with the JPEG object, but if you want to clean it up and |
* reuse it, call this: |
*/ |
EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); |
EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); |
/* Generic versions of jpeg_abort and jpeg_destroy that work on either |
* flavor of JPEG object. These may be more convenient in some places. |
*/ |
EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); |
EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); |
/* Default restart-marker-resync procedure for use by data source modules */ |
EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, |
int desired)); |
/* These marker codes are exported since applications and data source modules |
* are likely to want to use them. |
*/ |
#define JPEG_RST0 0xD0 /* RST0 marker code */ |
#define JPEG_EOI 0xD9 /* EOI marker code */ |
#define JPEG_APP0 0xE0 /* APP0 marker code */ |
#define JPEG_COM 0xFE /* COM marker code */ |
/* If we have a brain-damaged compiler that emits warnings (or worse, errors) |
* for structure definitions that are never filled in, keep it quiet by |
* supplying dummy definitions for the various substructures. |
*/ |
#ifdef INCOMPLETE_TYPES_BROKEN |
#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ |
struct jvirt_sarray_control { long dummy; }; |
struct jvirt_barray_control { long dummy; }; |
struct jpeg_comp_master { long dummy; }; |
struct jpeg_c_main_controller { long dummy; }; |
struct jpeg_c_prep_controller { long dummy; }; |
struct jpeg_c_coef_controller { long dummy; }; |
struct jpeg_marker_writer { long dummy; }; |
struct jpeg_color_converter { long dummy; }; |
struct jpeg_downsampler { long dummy; }; |
struct jpeg_forward_dct { long dummy; }; |
struct jpeg_entropy_encoder { long dummy; }; |
struct jpeg_decomp_master { long dummy; }; |
struct jpeg_d_main_controller { long dummy; }; |
struct jpeg_d_coef_controller { long dummy; }; |
struct jpeg_d_post_controller { long dummy; }; |
struct jpeg_input_controller { long dummy; }; |
struct jpeg_marker_reader { long dummy; }; |
struct jpeg_entropy_decoder { long dummy; }; |
struct jpeg_inverse_dct { long dummy; }; |
struct jpeg_upsampler { long dummy; }; |
struct jpeg_color_deconverter { long dummy; }; |
struct jpeg_color_quantizer { long dummy; }; |
#endif /* JPEG_INTERNALS */ |
#endif /* INCOMPLETE_TYPES_BROKEN */ |
/* |
* The JPEG library modules define JPEG_INTERNALS before including this file. |
* The internal structure declarations are read only when that is true. |
* Applications using the library should not include jpegint.h, but may wish |
* to include jerror.h. |
*/ |
#ifdef JPEG_INTERNALS |
#include "jpegint.h" /* fetch private declarations */ |
#include "jerror.h" /* fetch error codes too */ |
#endif |
#endif /* JPEGLIB_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/jpt.h |
---|
0,0 → 1,75 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __JPT_H |
#define __JPT_H |
/** |
@file jpt.h |
@brief JPT-stream reader (JPEG 2000, JPIP) |
JPT-stream functions are implemented in J2K.C. |
*/ |
/** |
Message Header JPT stream structure |
*/ |
typedef struct opj_jpt_msg_header { |
/** In-class Identifier */ |
unsigned int Id; |
/** Last byte information */ |
unsigned int last_byte; |
/** Class Identifier */ |
unsigned int Class_Id; |
/** CSn : index identifier */ |
unsigned int CSn_Id; |
/** Message offset */ |
unsigned int Msg_offset; |
/** Message length */ |
unsigned int Msg_length; |
/** Auxiliary for JPP case */ |
unsigned int Layer_nb; |
} opj_jpt_msg_header_t; |
/* ----------------------------------------------------------------------- */ |
/** |
Initialize the value of the message header structure |
@param header Message header structure |
*/ |
void jpt_init_msg_header(opj_jpt_msg_header_t * header); |
/** |
Read the message header for a JPP/JPT - stream |
@param cinfo Codec context info |
@param cio CIO handle |
@param header Message header structure |
*/ |
void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header); |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/include/openjpeg.h |
---|
0,0 → 1,915 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef OPENJPEG_H |
#define OPENJPEG_H |
/* |
========================================================== |
Compiler directives |
========================================================== |
*/ |
#if defined(OPJ_STATIC) || !defined(_WIN32) |
#define OPJ_API |
#define OPJ_CALLCONV |
#else |
#define OPJ_CALLCONV __stdcall |
/* |
The following ifdef block is the standard way of creating macros which make exporting |
from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS |
symbol defined on the command line. this symbol should not be defined on any project |
that uses this DLL. This way any other project whose source files include this file see |
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols |
defined with this macro as being exported. |
*/ |
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT) |
#define OPJ_API __declspec(dllexport) |
#else |
#define OPJ_API __declspec(dllimport) |
#endif /* OPJ_EXPORTS */ |
#endif /* !OPJ_STATIC || !_WIN32 */ |
#ifndef __cplusplus |
#if defined(HAVE_STDBOOL_H) |
/* |
The C language implementation does correctly provide the standard header |
file "stdbool.h". |
*/ |
#include <stdbool.h> |
#else |
/* |
The C language implementation does not provide the standard header file |
"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this |
braindamage below. |
*/ |
#if !defined(bool) |
#define bool int |
#endif |
#if !defined(true) |
#define true 1 |
#endif |
#if !defined(false) |
#define false 0 |
#endif |
#endif |
#endif /* __cplusplus */ |
/* |
========================================================== |
Useful constant definitions |
========================================================== |
*/ |
#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */ |
#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */ |
#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */ |
/* UniPG>> */ |
#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */ |
#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */ |
#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */ |
#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */ |
#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */ |
#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */ |
#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */ |
#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */ |
/* <<UniPG */ |
/* |
========================================================== |
enum definitions |
========================================================== |
*/ |
/** |
Rsiz Capabilities |
*/ |
typedef enum RSIZ_CAPABILITIES { |
STD_RSIZ = 0, /** Standard JPEG2000 profile*/ |
CINEMA2K = 3, /** Profile name for a 2K image*/ |
CINEMA4K = 4 /** Profile name for a 4K image*/ |
} OPJ_RSIZ_CAPABILITIES; |
/** |
Digital cinema operation mode |
*/ |
typedef enum CINEMA_MODE { |
OFF = 0, /** Not Digital Cinema*/ |
CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/ |
CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/ |
CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/ |
}OPJ_CINEMA_MODE; |
/** |
Progression order |
*/ |
typedef enum PROG_ORDER { |
PROG_UNKNOWN = -1, /**< place-holder */ |
LRCP = 0, /**< layer-resolution-component-precinct order */ |
RLCP = 1, /**< resolution-layer-component-precinct order */ |
RPCL = 2, /**< resolution-precinct-component-layer order */ |
PCRL = 3, /**< precinct-component-resolution-layer order */ |
CPRL = 4 /**< component-precinct-resolution-layer order */ |
} OPJ_PROG_ORDER; |
/** |
Supported image color spaces |
*/ |
typedef enum COLOR_SPACE { |
CLRSPC_UNKNOWN = -1, /**< not supported by the library */ |
CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */ |
CLRSPC_SRGB = 1, /**< sRGB */ |
CLRSPC_GRAY = 2, /**< grayscale */ |
CLRSPC_SYCC = 3 /**< YUV */ |
} OPJ_COLOR_SPACE; |
/** |
Supported codec |
*/ |
typedef enum CODEC_FORMAT { |
CODEC_UNKNOWN = -1, /**< place-holder */ |
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */ |
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */ |
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */ |
} OPJ_CODEC_FORMAT; |
/** |
Limit decoding to certain portions of the codestream. |
*/ |
typedef enum LIMIT_DECODING { |
NO_LIMITATION = 0, /**< No limitation for the decoding. The entire codestream will de decoded */ |
LIMIT_TO_MAIN_HEADER = 1, /**< The decoding is limited to the Main Header */ |
DECODE_ALL_BUT_PACKETS = 2 /**< Decode everything except the JPEG 2000 packets */ |
} OPJ_LIMIT_DECODING; |
/* |
========================================================== |
event manager typedef definitions |
========================================================== |
*/ |
/** |
Callback function prototype for events |
@param msg Event message |
@param client_data |
*/ |
typedef void (*opj_msg_callback) (const char *msg, void *client_data); |
/** |
Message handler object |
used for |
<ul> |
<li>Error messages |
<li>Warning messages |
<li>Debugging messages |
</ul> |
*/ |
typedef struct opj_event_mgr { |
/** Error message callback if available, NULL otherwise */ |
opj_msg_callback error_handler; |
/** Warning message callback if available, NULL otherwise */ |
opj_msg_callback warning_handler; |
/** Debug message callback if available, NULL otherwise */ |
opj_msg_callback info_handler; |
} opj_event_mgr_t; |
/* |
========================================================== |
codec typedef definitions |
========================================================== |
*/ |
/** |
Progression order changes |
*/ |
typedef struct opj_poc { |
/** Resolution num start, Component num start, given by POC */ |
int resno0, compno0; |
/** Layer num end,Resolution num end, Component num end, given by POC */ |
int layno1, resno1, compno1; |
/** Layer num start,Precinct num start, Precinct num end */ |
int layno0, precno0, precno1; |
/** Progression order enum*/ |
OPJ_PROG_ORDER prg1,prg; |
/** Progression order string*/ |
char progorder[5]; |
/** Tile number */ |
int tile; |
/** Start and end values for Tile width and height*/ |
int tx0,tx1,ty0,ty1; |
/** Start value, initialised in pi_initialise_encode*/ |
int layS, resS, compS, prcS; |
/** End value, initialised in pi_initialise_encode */ |
int layE, resE, compE, prcE; |
/** Start and end values of Tile width and height, initialised in pi_initialise_encode*/ |
int txS,txE,tyS,tyE,dx,dy; |
/** Temporary values for Tile parts, initialised in pi_create_encode */ |
int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t; |
} opj_poc_t; |
/** |
Compression parameters |
*/ |
typedef struct opj_cparameters { |
/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ |
bool tile_size_on; |
/** XTOsiz */ |
int cp_tx0; |
/** YTOsiz */ |
int cp_ty0; |
/** XTsiz */ |
int cp_tdx; |
/** YTsiz */ |
int cp_tdy; |
/** allocation by rate/distortion */ |
int cp_disto_alloc; |
/** allocation by fixed layer */ |
int cp_fixed_alloc; |
/** add fixed_quality */ |
int cp_fixed_quality; |
/** fixed layer */ |
int *cp_matrice; |
/** comment for coding */ |
char *cp_comment; |
/** csty : coding style */ |
int csty; |
/** progression order (default LRCP) */ |
OPJ_PROG_ORDER prog_order; |
/** progression order changes */ |
opj_poc_t POC[32]; |
/** number of progression order changes (POC), default to 0 */ |
int numpocs; |
/** number of layers */ |
int tcp_numlayers; |
/** rates of layers */ |
float tcp_rates[100]; |
/** different psnr for successive layers */ |
float tcp_distoratio[100]; |
/** number of resolutions */ |
int numresolution; |
/** initial code block width, default to 64 */ |
int cblockw_init; |
/** initial code block height, default to 64 */ |
int cblockh_init; |
/** mode switch (cblk_style) */ |
int mode; |
/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ |
int irreversible; |
/** region of interest: affected component in [0..3], -1 means no ROI */ |
int roi_compno; |
/** region of interest: upshift value */ |
int roi_shift; |
/* number of precinct size specifications */ |
int res_spec; |
/** initial precinct width */ |
int prcw_init[J2K_MAXRLVLS]; |
/** initial precinct height */ |
int prch_init[J2K_MAXRLVLS]; |
/**@name command line encoder parameters (not used inside the library) */ |
/*@{*/ |
/** input file name */ |
char infile[OPJ_PATH_LEN]; |
/** output file name */ |
char outfile[OPJ_PATH_LEN]; |
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ |
int index_on; |
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ |
char index[OPJ_PATH_LEN]; |
/** subimage encoding: origin image offset in x direction */ |
int image_offset_x0; |
/** subimage encoding: origin image offset in y direction */ |
int image_offset_y0; |
/** subsampling value for dx */ |
int subsampling_dx; |
/** subsampling value for dy */ |
int subsampling_dy; |
/** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/ |
int decod_format; |
/** output file format 0: J2K, 1: JP2, 2: JPT */ |
int cod_format; |
/*@}*/ |
/* UniPG>> */ |
/**@name JPWL encoding parameters */ |
/*@{*/ |
/** enables writing of EPC in MH, thus activating JPWL */ |
bool jpwl_epc_on; |
/** error protection method for MH (0,1,16,32,37-128) */ |
int jpwl_hprot_MH; |
/** tile number of header protection specification (>=0) */ |
int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** error protection methods for TPHs (0,1,16,32,37-128) */ |
int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; |
/** tile number of packet protection specification (>=0) */ |
int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; |
/** packet number of packet protection specification (>=0) */ |
int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; |
/** error protection methods for packets (0,1,16,32,37-128) */ |
int jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; |
/** enables writing of ESD, (0=no/1/2 bytes) */ |
int jpwl_sens_size; |
/** sensitivity addressing size (0=auto/2/4 bytes) */ |
int jpwl_sens_addr; |
/** sensitivity range (0-3) */ |
int jpwl_sens_range; |
/** sensitivity method for MH (-1=no,0-7) */ |
int jpwl_sens_MH; |
/** tile number of sensitivity specification (>=0) */ |
int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** sensitivity methods for TPHs (-1=no,0-7) */ |
int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; |
/*@}*/ |
/* <<UniPG */ |
/** Digital Cinema compliance 0-not compliant, 1-compliant*/ |
OPJ_CINEMA_MODE cp_cinema; |
/** Maximum rate for each component. If == 0, component size limitation is not considered */ |
int max_comp_size; |
/** Profile name*/ |
OPJ_RSIZ_CAPABILITIES cp_rsiz; |
/** Tile part generation*/ |
char tp_on; |
/** Flag for Tile part generation*/ |
char tp_flag; |
/** MCT (multiple component transform) */ |
char tcp_mct; |
} opj_cparameters_t; |
/** |
Decompression parameters |
*/ |
typedef struct opj_dparameters { |
/** |
Set the number of highest resolution levels to be discarded. |
The image resolution is effectively divided by 2 to the power of the number of discarded levels. |
The reduce factor is limited by the smallest total number of decomposition levels among tiles. |
if != 0, then original dimension divided by 2^(reduce); |
if == 0 or not used, image is decoded to the full resolution |
*/ |
int cp_reduce; |
/** |
Set the maximum number of quality layers to decode. |
If there are less quality layers than the specified number, all the quality layers are decoded. |
if != 0, then only the first "layer" layers are decoded; |
if == 0 or not used, all the quality layers are decoded |
*/ |
int cp_layer; |
/**@name command line encoder parameters (not used inside the library) */ |
/*@{*/ |
/** input file name */ |
char infile[OPJ_PATH_LEN]; |
/** output file name */ |
char outfile[OPJ_PATH_LEN]; |
/** input file format 0: J2K, 1: JP2, 2: JPT */ |
int decod_format; |
/** output file format 0: PGX, 1: PxM, 2: BMP */ |
int cod_format; |
/*@}*/ |
/* UniPG>> */ |
/**@name JPWL decoding parameters */ |
/*@{*/ |
/** activates the JPWL correction capabilities */ |
bool jpwl_correct; |
/** expected number of components */ |
int jpwl_exp_comps; |
/** maximum number of tiles */ |
int jpwl_max_tiles; |
/*@}*/ |
/* <<UniPG */ |
/** |
Specify whether the decoding should be done on the entire codestream, or be limited to the main header |
Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream |
if == NO_LIMITATION, the entire codestream is decoded; |
if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; |
*/ |
OPJ_LIMIT_DECODING cp_limit_decoding; |
} opj_dparameters_t; |
/** Common fields between JPEG-2000 compression and decompression master structs. */ |
#define opj_common_fields \ |
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\ |
void * client_data; /**< Available for use by application */\ |
bool is_decompressor; /**< So common code can tell which is which */\ |
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\ |
void *j2k_handle; /**< pointer to the J2K codec */\ |
void *jp2_handle; /**< pointer to the JP2 codec */\ |
void *mj2_handle /**< pointer to the MJ2 codec */ |
/* Routines that are to be used by both halves of the library are declared |
* to receive a pointer to this structure. There are no actual instances of |
* opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t. |
*/ |
typedef struct opj_common_struct { |
opj_common_fields; /* Fields common to both master struct types */ |
/* Additional fields follow in an actual opj_cinfo_t or |
* opj_dinfo_t. All three structs must agree on these |
* initial fields! (This would be a lot cleaner in C++.) |
*/ |
} opj_common_struct_t; |
typedef opj_common_struct_t * opj_common_ptr; |
/** |
Compression context info |
*/ |
typedef struct opj_cinfo { |
/** Fields shared with opj_dinfo_t */ |
opj_common_fields; |
/* other specific fields go here */ |
} opj_cinfo_t; |
/** |
Decompression context info |
*/ |
typedef struct opj_dinfo { |
/** Fields shared with opj_cinfo_t */ |
opj_common_fields; |
/* other specific fields go here */ |
} opj_dinfo_t; |
/* |
========================================================== |
I/O stream typedef definitions |
========================================================== |
*/ |
/* |
* Stream open flags. |
*/ |
/** The stream was opened for reading. */ |
#define OPJ_STREAM_READ 0x0001 |
/** The stream was opened for writing. */ |
#define OPJ_STREAM_WRITE 0x0002 |
/** |
Byte input-output stream (CIO) |
*/ |
typedef struct opj_cio { |
/** codec context */ |
opj_common_ptr cinfo; |
/** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */ |
int openmode; |
/** pointer to the start of the buffer */ |
unsigned char *buffer; |
/** buffer size in bytes */ |
int length; |
/** pointer to the start of the stream */ |
unsigned char *start; |
/** pointer to the end of the stream */ |
unsigned char *end; |
/** pointer to the current position */ |
unsigned char *bp; |
} opj_cio_t; |
/* |
========================================================== |
image typedef definitions |
========================================================== |
*/ |
/** |
Defines a single image component |
*/ |
typedef struct opj_image_comp { |
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ |
int dx; |
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ |
int dy; |
/** data width */ |
int w; |
/** data height */ |
int h; |
/** x component offset compared to the whole image */ |
int x0; |
/** y component offset compared to the whole image */ |
int y0; |
/** precision */ |
int prec; |
/** image depth in bits */ |
int bpp; |
/** signed (1) / unsigned (0) */ |
int sgnd; |
/** number of decoded resolution */ |
int resno_decoded; |
/** number of division by 2 of the out image compared to the original size of image */ |
int factor; |
/** image component data */ |
int *data; |
} opj_image_comp_t; |
/** |
Defines image data and characteristics |
*/ |
typedef struct opj_image { |
/** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */ |
int x0; |
/** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */ |
int y0; |
/** Xsiz: width of the reference grid */ |
int x1; |
/** Ysiz: height of the reference grid */ |
int y1; |
/** number of components in the image */ |
int numcomps; |
/** color space: sRGB, Greyscale or YUV */ |
OPJ_COLOR_SPACE color_space; |
/** image components */ |
opj_image_comp_t *comps; |
/** 'restricted' ICC profile */ |
unsigned char *icc_profile_buf; |
/** size of ICC profile */ |
int icc_profile_len; |
} opj_image_t; |
/** |
Component parameters structure used by the opj_image_create function |
*/ |
typedef struct opj_image_comptparm { |
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ |
int dx; |
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ |
int dy; |
/** data width */ |
int w; |
/** data height */ |
int h; |
/** x component offset compared to the whole image */ |
int x0; |
/** y component offset compared to the whole image */ |
int y0; |
/** precision */ |
int prec; |
/** image depth in bits */ |
int bpp; |
/** signed (1) / unsigned (0) */ |
int sgnd; |
} opj_image_cmptparm_t; |
/* |
========================================================== |
Information on the JPEG 2000 codestream |
========================================================== |
*/ |
/** |
Index structure : Information concerning a packet inside tile |
*/ |
typedef struct opj_packet_info { |
/** packet start position (including SOP marker if it exists) */ |
int start_pos; |
/** end of packet header position (including EPH marker if it exists)*/ |
int end_ph_pos; |
/** packet end position */ |
int end_pos; |
/** packet distorsion */ |
double disto; |
} opj_packet_info_t; |
/** |
Index structure : Information concerning tile-parts |
*/ |
typedef struct opj_tp_info { |
/** start position of tile part */ |
int tp_start_pos; |
/** end position of tile part header */ |
int tp_end_header; |
/** end position of tile part */ |
int tp_end_pos; |
/** start packet of tile part */ |
int tp_start_pack; |
/** number of packets of tile part */ |
int tp_numpacks; |
} opj_tp_info_t; |
/** |
Index structure : information regarding tiles |
*/ |
typedef struct opj_tile_info { |
/** value of thresh for each layer by tile cfr. Marcela */ |
double *thresh; |
/** number of tile */ |
int tileno; |
/** start position */ |
int start_pos; |
/** end position of the header */ |
int end_header; |
/** end position */ |
int end_pos; |
/** precinct number for each resolution level (width) */ |
int pw[33]; |
/** precinct number for each resolution level (height) */ |
int ph[33]; |
/** precinct size (in power of 2), in X for each resolution level */ |
int pdx[33]; |
/** precinct size (in power of 2), in Y for each resolution level */ |
int pdy[33]; |
/** information concerning packets inside tile */ |
opj_packet_info_t *packet; |
/** add fixed_quality */ |
int numpix; |
/** add fixed_quality */ |
double distotile; |
/** number of tile parts */ |
int num_tps; |
/** information concerning tile parts */ |
opj_tp_info_t *tp; |
} opj_tile_info_t; |
/* UniPG>> */ |
/** |
Marker structure |
*/ |
typedef struct opj_marker_info_t { |
/** marker type */ |
unsigned short int type; |
/** position in codestream */ |
int pos; |
/** length, marker val included */ |
int len; |
} opj_marker_info_t; |
/* <<UniPG */ |
/** |
Index structure of the codestream |
*/ |
typedef struct opj_codestream_info { |
/** maximum distortion reduction on the whole image (add for Marcela) */ |
double D_max; |
/** packet number */ |
int packno; |
/** writing the packet in the index with t2_encode_packets */ |
int index_write; |
/** image width */ |
int image_w; |
/** image height */ |
int image_h; |
/** progression order */ |
OPJ_PROG_ORDER prog; |
/** tile size in x */ |
int tile_x; |
/** tile size in y */ |
int tile_y; |
/** */ |
int tile_Ox; |
/** */ |
int tile_Oy; |
/** number of tiles in X */ |
int tw; |
/** number of tiles in Y */ |
int th; |
/** component numbers */ |
int numcomps; |
/** number of layer */ |
int numlayers; |
/** number of decomposition for each component */ |
int *numdecompos; |
/* UniPG>> */ |
/** number of markers */ |
int marknum; |
/** list of markers */ |
opj_marker_info_t *marker; |
/** actual size of markers array */ |
int maxmarknum; |
/* <<UniPG */ |
/** main header position */ |
int main_head_start; |
/** main header position */ |
int main_head_end; |
/** codestream's size */ |
int codestream_size; |
/** information regarding tiles inside image */ |
opj_tile_info_t *tile; |
} opj_codestream_info_t; |
#ifdef __cplusplus |
extern "C" { |
#endif |
/* |
========================================================== |
openjpeg version |
========================================================== |
*/ |
OPJ_API const char * OPJ_CALLCONV opj_version(void); |
/* |
========================================================== |
image functions definitions |
========================================================== |
*/ |
/** |
Create an image |
@param numcmpts number of components |
@param cmptparms components parameters |
@param clrspc image color space |
@return returns a new image structure if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); |
/** |
Deallocate any resources associated with an image |
@param image image to be destroyed |
*/ |
OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image); |
/* |
========================================================== |
stream functions definitions |
========================================================== |
*/ |
/** |
Open and allocate a memory stream for read / write. |
On reading, the user must provide a buffer containing encoded data. The buffer will be |
wrapped by the returned CIO handle. |
On writing, buffer parameters must be set to 0: a buffer will be allocated by the library |
to contain encoded data. |
@param cinfo Codec context info |
@param buffer Reading: buffer address. Writing: NULL |
@param length Reading: buffer length. Writing: 0 |
@return Returns a CIO handle if successful, returns NULL otherwise |
*/ |
OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length); |
/** |
Close and free a CIO handle |
@param cio CIO handle to free |
*/ |
OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); |
/** |
Get position in byte stream |
@param cio CIO handle |
@return Returns the position in bytes |
*/ |
OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio); |
/** |
Set position in byte stream |
@param cio CIO handle |
@param pos Position, in number of bytes, from the beginning of the stream |
*/ |
OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); |
/* |
========================================================== |
event manager functions definitions |
========================================================== |
*/ |
OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context); |
/* |
========================================================== |
codec functions definitions |
========================================================== |
*/ |
/** |
Creates a J2K/JPT/JP2 decompression structure |
@param format Decoder to select |
@return Returns a handle to a decompressor if successful, returns NULL otherwise |
*/ |
OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format); |
/** |
Destroy a decompressor handle |
@param dinfo decompressor handle to destroy |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo); |
/** |
Set decoding parameters to default values |
@param parameters Decompression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in j2k->cp. |
@param dinfo decompressor handle |
@param parameters decompression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 codestream |
@param dinfo decompressor handle |
@param cio Input buffer stream |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio); |
/** |
Decode an image from a JPEG-2000 codestream and extract the codestream information |
@param dinfo decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a J2K/JP2 compression structure |
@param format Coder to select |
@return Returns a handle to a compressor if successful, returns NULL otherwise |
*/ |
OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format); |
/** |
Destroy a compressor handle |
@param cinfo compressor handle to destroy |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); |
/** |
Set encoding parameters to default values, that means : |
<ul> |
<li>Lossless |
<li>1 tile |
<li>Size of precinct : 2^15 x 2^15 (means 1 precinct) |
<li>Size of code-block : 64 x 64 |
<li>Number of resolutions: 6 |
<li>No SOP marker in the codestream |
<li>No EPH marker in the codestream |
<li>No sub-sampling in x or y direction |
<li>No mode switch activated |
<li>Progression order: LRCP |
<li>No index file |
<li>No ROI upshifted |
<li>No offset of the origin of the image |
<li>No offset of the origin of the tiles |
<li>Reversible DWT 5-3 |
</ul> |
@param parameters Compression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
@param cinfo Compressor handle |
@param parameters Compression parameters |
@param image Input filled image |
*/ |
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Encode an image into a JPEG-2000 codestream |
@param cinfo compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci() |
@return Returns true if successful, returns false otherwise |
*/ |
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index); |
/** |
Encode an image into a JPEG-2000 codestream and extract the codestream information |
@param cinfo compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/** |
Destroy Codestream information after compression or decompression |
@param cstr_info Codestream information structure |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info); |
#ifdef __cplusplus |
} |
#endif |
#endif /* OPENJPEG_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/Makefile |
---|
0,0 → 1,18 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = /media/maxim/E22406D62406AE1B/SVNKOS/contrib/sdk |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/libpng -I $(SDK_DIR)/sources/zlib -I . |
SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(SRC)) |
default: $(patsubst %.c,%.o,$(SRC)) |
ar rcs libjbig2dec.a *.o |
rm *.o |
mv libjbig2dec.a ../lib |
%.o : %.c Makefile $(SRC) |
$(CC) $(CFLAGS) -DHAVE_CONFIG_H $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/config.h |
---|
0,0 → 1,120 |
/* config.h. Generated from config.h.in by configure. */ |
/* config.h.in. Generated from configure.ac by autoheader. */ |
/* Define if building universal (internal helper macro) */ |
/* #undef AC_APPLE_UNIVERSAL_BUILD */ |
/* Define to 1 if you have the <dlfcn.h> header file. */ |
#define HAVE_DLFCN_H 1 |
/* Define if the local libc includes getopt_long() */ |
#define HAVE_GETOPT_LONG /**/ |
/* Define to 1 if you have the <inttypes.h> header file. */ |
#define HAVE_INTTYPES_H 1 |
/* Define to 1 if you have the <libintl.h> header file. */ |
#define HAVE_LIBINTL_H 1 |
/* Define if libpng is available (-lpng) */ |
#define HAVE_LIBPNG 1 |
/* Define to 1 if you have the <memory.h> header file. */ |
#define HAVE_MEMORY_H 1 |
/* Define to 1 if you have the `memset' function. */ |
#define HAVE_MEMSET 1 |
/* Define to 1 if you have the `snprintf' function. */ |
#define HAVE_SNPRINTF 1 |
/* Define to 1 if you have the <stddef.h> header file. */ |
#define HAVE_STDDEF_H 1 |
/* Define to 1 if you have the <stdint.h> header file. */ |
#define HAVE_STDINT_H 1 |
/* Define to 1 if you have the <stdlib.h> header file. */ |
#define HAVE_STDLIB_H 1 |
/* Define to 1 if you have the `strdup' function. */ |
#define HAVE_STRDUP 1 |
/* Define to 1 if you have the <strings.h> header file. */ |
#define HAVE_STRINGS_H 1 |
/* Define to 1 if you have the <string.h> header file. */ |
#define HAVE_STRING_H 1 |
/* Define to 1 if you have the <sys/stat.h> header file. */ |
#define HAVE_SYS_STAT_H 1 |
/* Define to 1 if you have the <sys/types.h> header file. */ |
#define HAVE_SYS_TYPES_H 1 |
/* Define to 1 if you have the <unistd.h> header file. */ |
#define HAVE_UNISTD_H 1 |
/* set by configure if an alternate header with the stdint.h types is found */ |
/* #undef JBIG2_REPLACE_STDINT_H */ |
/* Define to the sub-directory in which libtool stores uninstalled libraries. |
*/ |
#define LT_OBJDIR ".libs/" |
/* Define to 1 if your C compiler doesn't accept -c and -o together. */ |
/* #undef NO_MINUS_C_MINUS_O */ |
/* Name of package */ |
#define PACKAGE "jbig2dec" |
/* Define to the address where bug reports for this package should be sent. */ |
#define PACKAGE_BUGREPORT "jbig2-dev@ghostscript.com" |
/* Define to the full name of this package. */ |
#define PACKAGE_NAME "jbig2dec" |
/* Define to the full name and version of this package. */ |
#define PACKAGE_STRING "jbig2dec 0.11" |
/* Define to the one symbol short name of this package. */ |
#define PACKAGE_TARNAME "jbig2dec" |
/* Define to the version of this package. */ |
#define PACKAGE_VERSION "0.11" |
/* The size of `char', as computed by sizeof. */ |
#define SIZEOF_CHAR 1 |
/* The size of `int', as computed by sizeof. */ |
#define SIZEOF_INT 4 |
/* The size of `long', as computed by sizeof. */ |
#define SIZEOF_LONG 4 |
/* The size of `short', as computed by sizeof. */ |
#define SIZEOF_SHORT 2 |
/* Define to 1 if you have the ANSI C header files. */ |
#define STDC_HEADERS 1 |
/* Version number of package */ |
#define VERSION "0.11" |
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most |
significant byte first (like Motorola and SPARC, unlike Intel). */ |
#if defined AC_APPLE_UNIVERSAL_BUILD |
# if defined __BIG_ENDIAN__ |
# define WORDS_BIGENDIAN 1 |
# endif |
#else |
# ifndef WORDS_BIGENDIAN |
/* # undef WORDS_BIGENDIAN */ |
# endif |
#endif |
/* Define to empty if `const' does not conform to ANSI C. */ |
/* #undef const */ |
/* Define to `unsigned int' if <sys/types.h> does not define. */ |
/* #undef size_t */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/config_types.h |
---|
0,0 → 1,19 |
/* |
generated header with missing types for the |
jbig2dec program and library. include this |
after config.h, within the HAVE_CONFIG_H |
ifdef |
*/ |
#ifndef HAVE_STDINT_H |
# ifdef JBIG2_REPLACE_STDINT_H |
# include <no_replacement_found> |
# else |
typedef unsigned int uint32_t; |
typedef unsigned short uint16_t; |
typedef unsigned char uint8_t; |
typedef signed int int32_t; |
typedef signed short int16_t; |
typedef signed char int8_t; |
# endif /* JBIG2_REPLACE_STDINT */ |
#endif /* HAVE_STDINT_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/config_win32.h |
---|
0,0 → 1,41 |
/* |
jbig2dec |
Copyright (C) 2002-2003 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* configuration header file for compiling under Microsoft Windows */ |
/* update package version here */ |
#define PACKAGE "jbig2dec" |
#define VERSION "0.3" |
#if defined(_MSC_VER) || (defined(__BORLANDC__) && defined(__WIN32__)) |
/* Microsoft Visual C++ or Borland C++ */ |
typedef signed char int8_t; |
typedef short int int16_t; |
typedef int int32_t; |
typedef __int64 int64_t; |
typedef unsigned char uint8_t; |
typedef unsigned short int uint16_t; |
typedef unsigned int uint32_t; |
/* no uint64_t */ |
# if defined(_MSC_VER) |
# if _MSC_VER < 1500 /* VS 2008 has vsnprintf */ |
# define vsnprintf _vsnprintf |
# endif |
# endif |
# define snprintf _snprintf |
#endif /* _MSC_VER */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/getopt.h |
---|
0,0 → 1,180 |
/* Declarations for getopt. |
Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc. |
This file is part of the GNU C Library. |
The GNU C Library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
The GNU C Library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with the GNU C Library; if not, write to the Free |
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
02111-1307 USA. */ |
#ifndef _GETOPT_H |
#ifndef __need_getopt |
# define _GETOPT_H 1 |
#endif |
/* If __GNU_LIBRARY__ is not already defined, either we are being used |
standalone, or this is the first header included in the source file. |
If we are being used with glibc, we need to include <features.h>, but |
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is |
not defined, include <ctype.h>, which will pull in <features.h> for us |
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it |
doesn't flood the namespace with stuff the way some other headers do.) */ |
#if !defined __GNU_LIBRARY__ |
# include <ctype.h> |
#endif |
#ifdef __cplusplus |
extern "C" { |
#endif |
/* For communication from `getopt' to the caller. |
When `getopt' finds an option that takes an argument, |
the argument value is returned here. |
Also, when `ordering' is RETURN_IN_ORDER, |
each non-option ARGV-element is returned here. */ |
extern char *optarg; |
/* Index in ARGV of the next element to be scanned. |
This is used for communication to and from the caller |
and for communication between successive calls to `getopt'. |
On entry to `getopt', zero means this is the first call; initialize. |
When `getopt' returns -1, this is the index of the first of the |
non-option elements that the caller should itself scan. |
Otherwise, `optind' communicates from one call to the next |
how much of ARGV has been scanned so far. */ |
extern int optind; |
/* Callers store zero here to inhibit the error message `getopt' prints |
for unrecognized options. */ |
extern int opterr; |
/* Set to an option character which was unrecognized. */ |
extern int optopt; |
#ifndef __need_getopt |
/* Describe the long-named options requested by the application. |
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector |
of `struct option' terminated by an element containing a name which is |
zero. |
The field `has_arg' is: |
no_argument (or 0) if the option does not take an argument, |
required_argument (or 1) if the option requires an argument, |
optional_argument (or 2) if the option takes an optional argument. |
If the field `flag' is not NULL, it points to a variable that is set |
to the value given in the field `val' when the option is found, but |
left unchanged if the option is not found. |
To have a long-named option do something other than set an `int' to |
a compiled-in constant, such as set a value from `optarg', set the |
option's `flag' field to zero and its `val' field to a nonzero |
value (the equivalent single-letter option character, if there is |
one). For long options that have a zero `flag' field, `getopt' |
returns the contents of the `val' field. */ |
struct option |
{ |
# if (defined __STDC__ && __STDC__) || defined __cplusplus |
const char *name; |
# else |
char *name; |
# endif |
/* has_arg can't be an enum because some compilers complain about |
type mismatches in all the code that assumes it is an int. */ |
int has_arg; |
int *flag; |
int val; |
}; |
/* Names for the values of the `has_arg' field of `struct option'. */ |
# define no_argument 0 |
# define required_argument 1 |
# define optional_argument 2 |
#endif /* need getopt */ |
/* Get definitions and prototypes for functions to process the |
arguments in ARGV (ARGC of them, minus the program name) for |
options given in OPTS. |
Return the option character from OPTS just read. Return -1 when |
there are no more options. For unrecognized options, or options |
missing arguments, `optopt' is set to the option letter, and '?' is |
returned. |
The OPTS string is a list of characters which are recognized option |
letters, optionally followed by colons, specifying that that letter |
takes an argument, to be placed in `optarg'. |
If a letter in OPTS is followed by two colons, its argument is |
optional. This behavior is specific to the GNU `getopt'. |
The argument `--' causes premature termination of argument |
scanning, explicitly telling `getopt' that there are no more |
options. |
If OPTS begins with `--', then non-option arguments are treated as |
arguments to the option '\0'. This behavior is specific to the GNU |
`getopt'. */ |
#if (defined __STDC__ && __STDC__) || defined __cplusplus |
# ifdef __GNU_LIBRARY__ |
/* Many other libraries have conflicting prototypes for getopt, with |
differences in the consts, in stdlib.h. To avoid compilation |
errors, only prototype getopt for the GNU C library. */ |
extern int getopt (int __argc, char *const *__argv, const char *__shortopts); |
# else /* not __GNU_LIBRARY__ */ |
extern int getopt (); |
# endif /* __GNU_LIBRARY__ */ |
# ifndef __need_getopt |
extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts, |
const struct option *__longopts, int *__longind); |
extern int getopt_long_only (int __argc, char *const *__argv, |
const char *__shortopts, |
const struct option *__longopts, int *__longind); |
/* Internal only. Users should not call this directly. */ |
extern int _getopt_internal (int __argc, char *const *__argv, |
const char *__shortopts, |
const struct option *__longopts, int *__longind, |
int __long_only); |
# endif |
#else /* not __STDC__ */ |
extern int getopt (); |
# ifndef __need_getopt |
extern int getopt_long (); |
extern int getopt_long_only (); |
extern int _getopt_internal (); |
# endif |
#endif /* __STDC__ */ |
#ifdef __cplusplus |
} |
#endif |
/* Make sure we later can get all the definitions and declarations. */ |
#undef __need_getopt |
#endif /* getopt.h */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2.c |
---|
0,0 → 1,428 |
/* |
jbig2dec |
Copyright (C) 2002-2005 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdarg.h> |
#include <string.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
static void * |
jbig2_default_alloc (Jbig2Allocator *allocator, size_t size) |
{ |
return malloc (size); |
} |
static void |
jbig2_default_free (Jbig2Allocator *allocator, void *p) |
{ |
free (p); |
} |
static void * |
jbig2_default_realloc (Jbig2Allocator *allocator, void *p, size_t size) |
{ |
return realloc (p, size); |
} |
static Jbig2Allocator jbig2_default_allocator = |
{ |
jbig2_default_alloc, |
jbig2_default_free, |
jbig2_default_realloc |
}; |
void * |
jbig2_alloc (Jbig2Allocator *allocator, size_t size) |
{ |
return allocator->alloc (allocator, size); |
} |
void |
jbig2_free (Jbig2Allocator *allocator, void *p) |
{ |
allocator->free (allocator, p); |
} |
void * |
jbig2_realloc (Jbig2Allocator *allocator, void *p, size_t size) |
{ |
return allocator->realloc (allocator, p, size); |
} |
static int |
jbig2_default_error(void *data, const char *msg, |
Jbig2Severity severity, int32_t seg_idx) |
{ |
/* report only fatal errors by default */ |
if (severity == JBIG2_SEVERITY_FATAL) { |
fprintf(stderr, "jbig2 decoder FATAL ERROR: %s", msg); |
if (seg_idx != -1) fprintf(stderr, " (segment 0x%02x)", seg_idx); |
fprintf(stderr, "\n"); |
fflush(stderr); |
} |
return 0; |
} |
int |
jbig2_error(Jbig2Ctx *ctx, Jbig2Severity severity, int32_t segment_number, |
const char *fmt, ...) |
{ |
char buf[1024]; |
va_list ap; |
int n; |
int code; |
va_start (ap, fmt); |
n = vsnprintf (buf, sizeof(buf), fmt, ap); |
va_end (ap); |
if (n < 0 || n == sizeof(buf)) |
strncpy (buf, "jbig2_error: error in generating error string", sizeof(buf)); |
code = ctx->error_callback (ctx->error_callback_data, buf, severity, segment_number); |
if (severity == JBIG2_SEVERITY_FATAL) |
code = -1; |
return code; |
} |
Jbig2Ctx * |
jbig2_ctx_new (Jbig2Allocator *allocator, |
Jbig2Options options, |
Jbig2GlobalCtx *global_ctx, |
Jbig2ErrorCallback error_callback, |
void *error_callback_data) |
{ |
Jbig2Ctx *result; |
if (allocator == NULL) |
allocator = &jbig2_default_allocator; |
if (error_callback == NULL) |
error_callback = &jbig2_default_error; |
result = (Jbig2Ctx *)jbig2_alloc(allocator, sizeof(Jbig2Ctx)); |
if (result == NULL) { |
error_callback(error_callback_data, "initial context allocation failed!", |
JBIG2_SEVERITY_FATAL, -1); |
return result; |
} |
result->allocator = allocator; |
result->options = options; |
result->global_ctx = (const Jbig2Ctx *)global_ctx; |
result->error_callback = error_callback; |
result->error_callback_data = error_callback_data; |
result->state = (options & JBIG2_OPTIONS_EMBEDDED) ? |
JBIG2_FILE_SEQUENTIAL_HEADER : |
JBIG2_FILE_HEADER; |
result->buf = NULL; |
result->n_segments = 0; |
result->n_segments_max = 16; |
result->segments = (Jbig2Segment **)jbig2_alloc(allocator, result->n_segments_max * sizeof(Jbig2Segment *)); |
result->segment_index = 0; |
result->current_page = 0; |
result->max_page_index = 4; |
result->pages = (Jbig2Page *)jbig2_alloc(allocator, result->max_page_index * sizeof(Jbig2Page)); |
{ |
int index; |
for (index = 0; index < result->max_page_index; index++) { |
result->pages[index].state = JBIG2_PAGE_FREE; |
result->pages[index].number = 0; |
result->pages[index].image = NULL; |
} |
} |
return result; |
} |
int32_t |
jbig2_get_int32 (const byte *buf) |
{ |
return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; |
} |
int16_t |
jbig2_get_int16 (const byte *buf) |
{ |
return (buf[0] << 8) | buf[1]; |
} |
/** |
* jbig2_data_in: submit data for decoding |
* @ctx: The jbig2dec decoder context |
* @data: a pointer to the data buffer |
* @size: the size of the data buffer in bytes |
* |
* Copies the specified data into internal storage and attempts |
* to (continue to) parse it as part of a jbig2 data stream. |
* |
* Return code: 0 on success |
* -1 if there is a parsing error, or whatever |
* the error handling callback returns |
**/ |
int |
jbig2_data_in (Jbig2Ctx *ctx, const unsigned char *data, size_t size) |
{ |
const size_t initial_buf_size = 1024; |
if (ctx->buf == NULL) |
{ |
size_t buf_size = initial_buf_size; |
do |
buf_size <<= 1; |
while (buf_size < size); |
ctx->buf = (byte *)jbig2_alloc(ctx->allocator, buf_size); |
ctx->buf_size = buf_size; |
ctx->buf_rd_ix = 0; |
ctx->buf_wr_ix = 0; |
} |
else if (ctx->buf_wr_ix + size > ctx->buf_size) |
{ |
if (ctx->buf_rd_ix <= (ctx->buf_size >> 1) && |
ctx->buf_wr_ix - ctx->buf_rd_ix + size <= ctx->buf_size) |
{ |
memmove(ctx->buf, ctx->buf + ctx->buf_rd_ix, |
ctx->buf_wr_ix - ctx->buf_rd_ix); |
} |
else |
{ |
byte *buf; |
size_t buf_size = initial_buf_size; |
do |
buf_size <<= 1; |
while (buf_size < ctx->buf_wr_ix - ctx->buf_rd_ix + size); |
buf = (byte *)jbig2_alloc(ctx->allocator, buf_size); |
memcpy(buf, ctx->buf + ctx->buf_rd_ix, |
ctx->buf_wr_ix - ctx->buf_rd_ix); |
jbig2_free(ctx->allocator, ctx->buf); |
ctx->buf = buf; |
ctx->buf_size = buf_size; |
} |
ctx->buf_wr_ix -= ctx->buf_rd_ix; |
ctx->buf_rd_ix = 0; |
} |
memcpy(ctx->buf + ctx->buf_wr_ix, data, size); |
ctx->buf_wr_ix += size; |
/* data has now been added to buffer */ |
for (;;) |
{ |
const byte jbig2_id_string[8] = { 0x97, 0x4a, 0x42, 0x32, 0x0d, 0x0a, 0x1a, 0x0a }; |
Jbig2Segment *segment; |
size_t header_size; |
int code; |
switch (ctx->state) |
{ |
case JBIG2_FILE_HEADER: |
/* D.4.1 */ |
if (ctx->buf_wr_ix - ctx->buf_rd_ix < 9) |
return 0; |
if (memcmp(ctx->buf + ctx->buf_rd_ix, jbig2_id_string, 8)) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"Not a JBIG2 file header"); |
/* D.4.2 */ |
ctx->file_header_flags = ctx->buf[ctx->buf_rd_ix + 8]; |
if (ctx->file_header_flags & 0xFC) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, |
"reserved bits (2-7) of file header flags are not zero (0x%02x)", ctx->file_header_flags); |
} |
/* D.4.3 */ |
if (!(ctx->file_header_flags & 2)) /* number of pages is known */ |
{ |
if (ctx->buf_wr_ix - ctx->buf_rd_ix < 13) |
return 0; |
ctx->n_pages = jbig2_get_int32(ctx->buf + ctx->buf_rd_ix + 9); |
ctx->buf_rd_ix += 13; |
if (ctx->n_pages == 1) |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, -1, "file header indicates a single page document"); |
else |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, -1, "file header indicates a %d page document", ctx->n_pages); |
} |
else /* number of pages not known */ |
{ |
ctx->n_pages=0; |
ctx->buf_rd_ix += 9; |
} |
/* determine the file organization based on the flags - D.4.2 again */ |
if (ctx->file_header_flags & 1) |
{ |
ctx->state = JBIG2_FILE_SEQUENTIAL_HEADER; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "file header indicates sequential organization"); |
} |
else |
{ |
ctx->state = JBIG2_FILE_RANDOM_HEADERS; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, "file header indicates random-access organization"); |
} |
break; |
case JBIG2_FILE_SEQUENTIAL_HEADER: |
case JBIG2_FILE_RANDOM_HEADERS: |
segment = jbig2_parse_segment_header(ctx, ctx->buf + ctx->buf_rd_ix, |
ctx->buf_wr_ix - ctx->buf_rd_ix, |
&header_size); |
if (segment == NULL) |
return 0; /* need more data */ |
ctx->buf_rd_ix += header_size; |
if (ctx->n_segments == ctx->n_segments_max) |
ctx->segments = (Jbig2Segment **)jbig2_realloc(ctx->allocator, |
ctx->segments, (ctx->n_segments_max <<= 2) * sizeof(Jbig2Segment *)); |
ctx->segments[ctx->n_segments++] = segment; |
if (ctx->state == JBIG2_FILE_RANDOM_HEADERS) |
{ |
if ((segment->flags & 63) == 51) /* end of file */ |
ctx->state = JBIG2_FILE_RANDOM_BODIES; |
} |
else /* JBIG2_FILE_SEQUENTIAL_HEADER */ |
ctx->state = JBIG2_FILE_SEQUENTIAL_BODY; |
break; |
case JBIG2_FILE_SEQUENTIAL_BODY: |
case JBIG2_FILE_RANDOM_BODIES: |
segment = ctx->segments[ctx->segment_index]; |
if (segment->data_length > ctx->buf_wr_ix - ctx->buf_rd_ix) |
return 0; /* need more data */ |
code = jbig2_parse_segment(ctx, segment, ctx->buf + ctx->buf_rd_ix); |
ctx->buf_rd_ix += segment->data_length; |
ctx->segment_index++; |
if (ctx->state == JBIG2_FILE_RANDOM_BODIES) |
{ |
if (ctx->segment_index == ctx->n_segments) |
ctx->state = JBIG2_FILE_EOF; |
} |
else /* JBIG2_FILE_SEQUENCIAL_BODY */ |
{ |
ctx->state = JBIG2_FILE_SEQUENTIAL_HEADER; |
} |
if (code < 0) |
{ |
ctx->state = JBIG2_FILE_EOF; |
return code; |
} |
break; |
case JBIG2_FILE_EOF: |
if (ctx->buf_rd_ix == ctx->buf_wr_ix) |
return 0; |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, |
"Garbage beyond end of file"); |
} |
} |
return 0; |
} |
void |
jbig2_ctx_free (Jbig2Ctx *ctx) |
{ |
Jbig2Allocator *ca = ctx->allocator; |
int i; |
jbig2_free(ca, ctx->buf); |
if (ctx->segments != NULL) { |
for (i = 0; i < ctx->n_segments; i++) |
jbig2_free_segment(ctx, ctx->segments[i]); |
jbig2_free(ca, ctx->segments); |
} |
if (ctx->pages != NULL) { |
for (i = 0; i <= ctx->current_page; i++) |
if (ctx->pages[i].image != NULL) |
jbig2_image_release(ctx, ctx->pages[i].image); |
jbig2_free(ca, ctx->pages); |
} |
jbig2_free(ca, ctx); |
} |
Jbig2GlobalCtx *jbig2_make_global_ctx (Jbig2Ctx *ctx) |
{ |
return (Jbig2GlobalCtx *)ctx; |
} |
void jbig2_global_ctx_free(Jbig2GlobalCtx *global_ctx) |
{ |
jbig2_ctx_free((Jbig2Ctx *)global_ctx); |
} |
/* I'm not committed to keeping the word stream interface. It's handy |
when you think you may be streaming your input, but if you're not |
(as is currently the case), it just adds complexity. |
*/ |
typedef struct { |
Jbig2WordStream super; |
const byte *data; |
size_t size; |
} Jbig2WordStreamBuf; |
static uint32_t |
jbig2_word_stream_buf_get_next_word(Jbig2WordStream *self, int offset) |
{ |
Jbig2WordStreamBuf *z = (Jbig2WordStreamBuf *)self; |
const byte *data = z->data; |
uint32_t result; |
if (offset + 4 < z->size) |
result = (data[offset] << 24) | (data[offset + 1] << 16) | |
(data[offset + 2] << 8) | data[offset + 3]; |
else if (offset >= z->size) |
return 0; |
else |
{ |
int i; |
result = 0; |
for (i = 0; i < z->size - offset; i++) |
result |= data[offset + i] << ((3 - i) << 3); |
} |
return result; |
} |
Jbig2WordStream * |
jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size) |
{ |
Jbig2WordStreamBuf *result = (Jbig2WordStreamBuf *)jbig2_alloc(ctx->allocator, sizeof(Jbig2WordStreamBuf)); |
result->super.get_next_word = jbig2_word_stream_buf_get_next_word; |
result->data = data; |
result->size = size; |
return &result->super; |
} |
void |
jbig2_word_stream_buf_free(Jbig2Ctx *ctx, Jbig2WordStream *ws) |
{ |
jbig2_free(ctx->allocator, ws); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2.h |
---|
0,0 → 1,135 |
/* |
jbig2dec |
Copyright (C) 2002-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef __cplusplus |
extern "C" { |
#endif |
#ifndef _JBIG2_H |
#define _JBIG2_H |
/* warning levels */ |
typedef enum { |
JBIG2_SEVERITY_DEBUG, |
JBIG2_SEVERITY_INFO, |
JBIG2_SEVERITY_WARNING, |
JBIG2_SEVERITY_FATAL |
} Jbig2Severity; |
typedef enum { |
JBIG2_OPTIONS_EMBEDDED = 1 |
} Jbig2Options; |
/* forward public structure declarations */ |
typedef struct _Jbig2Allocator Jbig2Allocator; |
typedef struct _Jbig2Ctx Jbig2Ctx; |
typedef struct _Jbig2GlobalCtx Jbig2GlobalCtx; |
typedef struct _Jbig2Segment Jbig2Segment; |
typedef struct _Jbig2Image Jbig2Image; |
/* private structures */ |
typedef struct _Jbig2Page Jbig2Page; |
typedef struct _Jbig2SymbolDictionary Jbig2SymbolDictionary; |
/* |
this is the general image structure used by the jbig2dec library |
images are 1 bpp, packed into rows a byte at a time. stride gives |
the byte offset to the next row, while width and height define |
the size of the image area in pixels. |
*/ |
struct _Jbig2Image { |
int width, height, stride; |
uint8_t *data; |
int refcount; |
}; |
Jbig2Image* jbig2_image_new(Jbig2Ctx *ctx, int width, int height); |
Jbig2Image* jbig2_image_clone(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_release(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_free(Jbig2Ctx *ctx, Jbig2Image *image); |
void jbig2_image_clear(Jbig2Ctx *ctx, Jbig2Image *image, int value); |
Jbig2Image *jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, |
int width, int height); |
/* errors are returned from the library via a callback. If no callback |
is provided (a NULL argument is passed ot jbig2_ctx_new) a default |
handler is used which prints fatal errors to the stderr stream. */ |
/* error callback */ |
typedef int (*Jbig2ErrorCallback) (void *data, |
const char *msg, Jbig2Severity severity, |
int32_t seg_idx); |
/* memory allocation is likewise done via a set of callbacks so that |
clients can better control memory usage. If a NULL is passed for |
this argumennt of jbig2_ctx_new, a default allocator based on malloc() |
is used. */ |
/* dynamic memory callbacks */ |
struct _Jbig2Allocator { |
void *(*alloc) (Jbig2Allocator *allocator, size_t size); |
void (*free) (Jbig2Allocator *allocator, void *p); |
void *(*realloc) (Jbig2Allocator *allocator, void *p, size_t size); |
}; |
/* decoder context */ |
Jbig2Ctx *jbig2_ctx_new (Jbig2Allocator *allocator, |
Jbig2Options options, |
Jbig2GlobalCtx *global_ctx, |
Jbig2ErrorCallback error_callback, |
void *error_callback_data); |
void jbig2_ctx_free (Jbig2Ctx *ctx); |
/* global context for embedded streams */ |
Jbig2GlobalCtx *jbig2_make_global_ctx (Jbig2Ctx *ctx); |
void jbig2_global_ctx_free (Jbig2GlobalCtx *global_ctx); |
/* submit data to the decoder */ |
int jbig2_data_in (Jbig2Ctx *ctx, const unsigned char *data, size_t size); |
/* get the next available decoded page image. NULL means there isn't one. */ |
Jbig2Image *jbig2_page_out (Jbig2Ctx *ctx); |
/* mark a returned page image as no longer needed. */ |
int jbig2_release_page (Jbig2Ctx *ctx, Jbig2Image *image); |
/* mark the current page as complete, simulating an end-of-page segment (for broken streams) */ |
int jbig2_complete_page (Jbig2Ctx *ctx); |
/* segment header routines */ |
struct _Jbig2Segment { |
uint32_t number; |
uint8_t flags; |
uint32_t page_association; |
size_t data_length; |
int referred_to_segment_count; |
uint32_t *referred_to_segments; |
void *result; |
}; |
Jbig2Segment *jbig2_parse_segment_header (Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, |
size_t *p_header_size); |
int jbig2_parse_segment (Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
void jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment); |
Jbig2Segment *jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number); |
#endif /* _JBIG2_H */ |
#ifdef __cplusplus |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith.c |
---|
0,0 → 1,394 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#ifdef JBIG2_DEBUG |
#include <stdio.h> |
#endif |
struct _Jbig2ArithState { |
uint32_t C; |
int A; |
int CT; |
uint32_t next_word; |
int next_word_bytes; |
Jbig2WordStream *ws; |
int offset; |
}; |
#undef SOFTWARE_CONVENTION |
/* |
A note on the "software conventions". |
Previously, I had misinterpreted the spec, and had thought that the |
spec's description of the "software convention" was wrong. Now I |
believe that this code is both correct and matches the spec, with |
SOFTWARE_CONVENTION defined or not. Thanks to William Rucklidge for |
the clarification. |
In any case, my benchmarking indicates no speed difference at all. |
Therefore, for now we will just use the normative version. |
*/ |
static void |
jbig2_arith_bytein (Jbig2ArithState *as) |
{ |
byte B; |
/* invariant: as->next_word_bytes > 0 */ |
/* Figure G.3 */ |
B = (byte)((as->next_word >> 24) & 0xFF); |
if (B == 0xFF) |
{ |
byte B1; |
if (as->next_word_bytes == 1) |
{ |
Jbig2WordStream *ws = as->ws; |
as->next_word = ws->get_next_word (ws, as->offset); |
as->offset += 4; |
B1 = (byte)((as->next_word >> 24) & 0xFF); |
if (B1 > 0x8F) |
{ |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "read %02x (aa)\n", B); |
#endif |
#ifndef SOFTWARE_CONVENTION |
as->C += 0xFF00; |
#endif |
as->CT = 8; |
as->next_word = (0xFF00 | B1) << 16; |
as->next_word_bytes = 2; |
} |
else |
{ |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "read %02x (a)\n", B); |
#endif |
#ifdef SOFTWARE_CONVENTION |
as->C += 0xFE00 - (B1 << 9); |
#else |
as->C += B1 << 9; |
#endif |
as->CT = 7; |
as->next_word_bytes = 4; |
} |
} |
else |
{ |
B1 = (byte)((as->next_word >> 16) & 0xFF); |
if (B1 > 0x8F) |
{ |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "read %02x (ba)\n", B); |
#endif |
#ifndef SOFTWARE_CONVENTION |
as->C += 0xFF00; |
#endif |
as->CT = 8; |
} |
else |
{ |
as->next_word_bytes--; |
as->next_word <<= 8; |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "read %02x (b)\n", B); |
#endif |
#ifdef SOFTWARE_CONVENTION |
as->C += 0xFE00 - (B1 << 9); |
#else |
as->C += (B1 << 9); |
#endif |
as->CT = 7; |
} |
} |
} |
else |
{ |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "read %02x\n", B); |
#endif |
as->CT = 8; |
as->next_word <<= 8; |
as->next_word_bytes--; |
if (as->next_word_bytes == 0) |
{ |
Jbig2WordStream *ws = as->ws; |
as->next_word = ws->get_next_word (ws, as->offset); |
as->offset += 4; |
as->next_word_bytes = 4; |
} |
B = (byte)((as->next_word >> 24) & 0xFF); |
#ifdef SOFTWARE_CONVENTION |
as->C += 0xFF00 - (B << 8); |
#else |
as->C += (B << 8); |
#endif |
} |
} |
#if defined(JBIG2_DEBUG) || defined(JBIG2_DEBUG_ARITH) |
#include <stdio.h> |
static void |
jbig2_arith_trace (Jbig2ArithState *as, Jbig2ArithCx cx) |
{ |
fprintf(stderr, "I = %2d, MPS = %d, A = %04x, CT = %2d, C = %08x\n", |
cx & 0x7f, cx >> 7, as->A, as->CT, as->C); |
} |
#endif |
/** Allocate and initialize a new arithmetic coding state |
* the returned pointer can simply be freed; this does |
* not affect the associated Jbig2WordStream. |
*/ |
Jbig2ArithState * |
jbig2_arith_new (Jbig2Ctx *ctx, Jbig2WordStream *ws) |
{ |
Jbig2ArithState *result; |
result = (Jbig2ArithState *)jbig2_alloc(ctx->allocator, |
sizeof(Jbig2ArithState)); |
result->ws = ws; |
result->next_word = ws->get_next_word (ws, 0); |
result->next_word_bytes = 4; |
result->offset = 4; |
/* Figure G.1 */ |
#ifdef SOFTWARE_CONVENTION |
result->C = (~(result->next_word >> 8)) & 0xFF0000; |
#else |
result->C = (result->next_word >> 8) & 0xFF0000; |
#endif |
jbig2_arith_bytein (result); |
result->C <<= 7; |
result->CT -= 7; |
result->A = 0x8000; |
return result; |
} |
/* could put bit fields in to minimize memory usage */ |
typedef struct { |
unsigned short Qe; |
byte mps_xor; /* mps_xor = index ^ NMPS */ |
byte lps_xor; /* lps_xor = index ^ NLPS ^ (SWITCH << 7) */ |
} Jbig2ArithQe; |
const Jbig2ArithQe jbig2_arith_Qe[] = { |
{ 0x5601, 1 ^ 0, 1 ^ 0 ^ 0x80 }, |
{ 0x3401, 2 ^ 1, 6 ^ 1 }, |
{ 0x1801, 3 ^ 2, 9 ^ 2 }, |
{ 0x0AC1, 4 ^ 3, 12 ^ 3 }, |
{ 0x0521, 5 ^ 4, 29 ^ 4 }, |
{ 0x0221, 38 ^ 5, 33 ^ 5 }, |
{ 0x5601, 7 ^ 6, 6 ^ 6 ^ 0x80 }, |
{ 0x5401, 8 ^ 7, 14 ^ 7 }, |
{ 0x4801, 9 ^ 8, 14 ^ 8 }, |
{ 0x3801, 10 ^ 9, 14 ^ 9 }, |
{ 0x3001, 11 ^ 10, 17 ^ 10 }, |
{ 0x2401, 12 ^ 11, 18 ^ 11 }, |
{ 0x1C01, 13 ^ 12, 20 ^ 12 }, |
{ 0x1601, 29 ^ 13, 21 ^ 13 }, |
{ 0x5601, 15 ^ 14, 14 ^ 14 ^ 0x80 }, |
{ 0x5401, 16 ^ 15, 14 ^ 15 }, |
{ 0x5101, 17 ^ 16, 15 ^ 16 }, |
{ 0x4801, 18 ^ 17, 16 ^ 17 }, |
{ 0x3801, 19 ^ 18, 17 ^ 18 }, |
{ 0x3401, 20 ^ 19, 18 ^ 19 }, |
{ 0x3001, 21 ^ 20, 19 ^ 20 }, |
{ 0x2801, 22 ^ 21, 19 ^ 21 }, |
{ 0x2401, 23 ^ 22, 20 ^ 22 }, |
{ 0x2201, 24 ^ 23, 21 ^ 23 }, |
{ 0x1C01, 25 ^ 24, 22 ^ 24 }, |
{ 0x1801, 26 ^ 25, 23 ^ 25 }, |
{ 0x1601, 27 ^ 26, 24 ^ 26 }, |
{ 0x1401, 28 ^ 27, 25 ^ 27 }, |
{ 0x1201, 29 ^ 28, 26 ^ 28 }, |
{ 0x1101, 30 ^ 29, 27 ^ 29 }, |
{ 0x0AC1, 31 ^ 30, 28 ^ 30 }, |
{ 0x09C1, 32 ^ 31, 29 ^ 31 }, |
{ 0x08A1, 33 ^ 32, 30 ^ 32 }, |
{ 0x0521, 34 ^ 33, 31 ^ 33 }, |
{ 0x0441, 35 ^ 34, 32 ^ 34 }, |
{ 0x02A1, 36 ^ 35, 33 ^ 35 }, |
{ 0x0221, 37 ^ 36, 34 ^ 36 }, |
{ 0x0141, 38 ^ 37, 35 ^ 37 }, |
{ 0x0111, 39 ^ 38, 36 ^ 38 }, |
{ 0x0085, 40 ^ 39, 37 ^ 39 }, |
{ 0x0049, 41 ^ 40, 38 ^ 40 }, |
{ 0x0025, 42 ^ 41, 39 ^ 41 }, |
{ 0x0015, 43 ^ 42, 40 ^ 42 }, |
{ 0x0009, 44 ^ 43, 41 ^ 43 }, |
{ 0x0005, 45 ^ 44, 42 ^ 44 }, |
{ 0x0001, 45 ^ 45, 43 ^ 45 }, |
{ 0x5601, 46 ^ 46, 46 ^ 46 } |
}; |
static void |
jbig2_arith_renormd (Jbig2ArithState *as) |
{ |
/* Figure E.18 */ |
do |
{ |
if (as->CT == 0) |
jbig2_arith_bytein (as); |
as->A <<= 1; |
as->C <<= 1; |
as->CT--; |
} |
while ((as->A & 0x8000) == 0); |
} |
bool |
jbig2_arith_decode (Jbig2ArithState *as, Jbig2ArithCx *pcx) |
{ |
Jbig2ArithCx cx = *pcx; |
const Jbig2ArithQe *pqe = &jbig2_arith_Qe[cx & 0x7f]; |
bool D; |
/* Figure G.2 */ |
as->A -= pqe->Qe; |
if ( |
#ifdef SOFTWARE_CONVENTION |
/* Note: I do not think this is correct. See above. */ |
(as->C >> 16) < as->A |
#else |
!((as->C >> 16) < pqe->Qe) |
#endif |
) |
{ |
#ifndef SOFTWARE_CONVENTION |
as->C -= pqe->Qe << 16; |
#endif |
if ((as->A & 0x8000) == 0) |
{ |
/* MPS_EXCHANGE, Figure E.16 */ |
if (as->A < pqe->Qe) |
{ |
D = 1 - (cx >> 7); |
*pcx ^= pqe->lps_xor; |
} |
else |
{ |
D = cx >> 7; |
*pcx ^= pqe->mps_xor; |
} |
jbig2_arith_renormd (as); |
return D; |
} |
else |
return cx >> 7; |
} |
else |
{ |
#ifdef SOFTWARE_CONVENTION |
as->C -= (as->A) << 16; |
#endif |
/* LPS_EXCHANGE, Figure E.17 */ |
if (as->A < pqe->Qe) |
{ |
as->A = pqe->Qe; |
D = cx >> 7; |
*pcx ^= pqe->mps_xor; |
} |
else |
{ |
as->A = pqe->Qe; |
D = 1 - (cx >> 7); |
*pcx ^= pqe->lps_xor; |
} |
jbig2_arith_renormd (as); |
return D; |
} |
} |
#ifdef TEST |
static uint32_t |
test_get_word (Jbig2WordStream *self, int offset) |
{ |
byte stream[] = { |
0x84, 0xC7, 0x3B, 0xFC, 0xE1, 0xA1, 0x43, 0x04, 0x02, 0x20, 0x00, 0x00, |
0x41, 0x0D, 0xBB, 0x86, 0xF4, 0x31, 0x7F, 0xFF, 0x88, 0xFF, 0x37, 0x47, |
0x1A, 0xDB, 0x6A, 0xDF, 0xFF, 0xAC, |
0x00, 0x00 |
}; |
if (offset >= sizeof(stream)) |
return 0; |
else |
return (stream[offset] << 24) | (stream[offset + 1] << 16) | |
(stream[offset + 2] << 8) | stream[offset + 3]; |
} |
int |
main (int argc, char **argv) |
{ |
Jbig2Ctx *ctx; |
Jbig2WordStream ws; |
Jbig2ArithState *as; |
int i; |
Jbig2ArithCx cx = 0; |
ctx = jbig2_ctx_new(NULL, 0, NULL, NULL, NULL); |
ws.get_next_word = test_get_word; |
as = jbig2_arith_new (ctx, &ws); |
#ifdef JBIG2_DEBUG_ARITH |
jbig2_arith_trace (as, cx); |
#endif |
for (i = 0; i < 256; i++) |
{ |
bool D; |
D = jbig2_arith_decode (as, &cx); |
#ifdef JBIG2_DEBUG_ARITH |
fprintf(stderr, "%3d: D = %d, ", i, D); |
jbig2_arith_trace (as, cx); |
#endif |
} |
jbig2_free(ctx->allocator, as); |
jbig2_ctx_free(ctx); |
return 0; |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith.h |
---|
0,0 → 1,31 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithState Jbig2ArithState; |
/* An arithmetic coding context is stored as a single byte, with the |
index in the low order 7 bits (actually only 6 are used), and the |
MPS in the top bit. */ |
typedef unsigned char Jbig2ArithCx; |
/* allocate and initialize a new arithmetic coding state */ |
Jbig2ArithState * |
jbig2_arith_new (Jbig2Ctx *ctx, Jbig2WordStream *ws); |
/* decode a bit */ |
bool |
jbig2_arith_decode (Jbig2ArithState *as, Jbig2ArithCx *pcx); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith_iaid.c |
---|
0,0 → 1,91 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* Annex A.3 */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memset() */ |
#ifdef VERBOSE |
#include <stdio.h> /* for debug printing only */ |
#endif |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_arith_iaid.h" |
struct _Jbig2ArithIaidCtx { |
int SBSYMCODELEN; |
Jbig2ArithCx *IAIDx; |
}; |
Jbig2ArithIaidCtx * |
jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN) |
{ |
Jbig2ArithIaidCtx *result = jbig2_new(ctx, Jbig2ArithIaidCtx, 1); |
int ctx_size = 1 << SBSYMCODELEN; |
result->SBSYMCODELEN = SBSYMCODELEN; |
result->IAIDx = jbig2_alloc(ctx->allocator, ctx_size); |
memset(result->IAIDx, 0, ctx_size); |
return result; |
} |
/* A.3 */ |
/* Return value: -1 on error, 0 on normal value */ |
int |
jbig2_arith_iaid_decode(Jbig2ArithIaidCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result) |
{ |
Jbig2ArithCx *IAIDx = ctx->IAIDx; |
int SBSYMCODELEN = ctx->SBSYMCODELEN; |
int PREV = 1; |
int D; |
int i; |
/* A.3 (2) */ |
for (i = 0; i < SBSYMCODELEN; i++) |
{ |
D = jbig2_arith_decode(as, &IAIDx[PREV]); |
#ifdef VERBOSE |
fprintf(stderr, "IAID%x: D = %d\n", PREV, D); |
#endif |
PREV = (PREV << 1) | D; |
} |
/* A.3 (3) */ |
PREV -= 1 << SBSYMCODELEN; |
#ifdef VERBOSE |
fprintf(stderr, "IAID result: %d\n", PREV); |
#endif |
*p_result = PREV; |
return 0; |
} |
void |
jbig2_arith_iaid_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *iax) |
{ |
jbig2_free(ctx->allocator, iax->IAIDx); |
jbig2_free(ctx->allocator, iax); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith_iaid.h |
---|
0,0 → 1,26 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithIaidCtx Jbig2ArithIaidCtx; |
Jbig2ArithIaidCtx * |
jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN); |
int |
jbig2_arith_iaid_decode(Jbig2ArithIaidCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result); |
void |
jbig2_arith_iaid_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *iax); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith_int.c |
---|
0,0 → 1,139 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* Annex A */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memset() */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_arith_int.h" |
struct _Jbig2ArithIntCtx { |
Jbig2ArithCx IAx[512]; |
}; |
Jbig2ArithIntCtx * |
jbig2_arith_int_ctx_new(Jbig2Ctx *ctx) |
{ |
Jbig2ArithIntCtx *result = jbig2_new(ctx, Jbig2ArithIntCtx, 1); |
memset(result->IAx, 0, sizeof(result->IAx)); |
return result; |
} |
/* A.2 */ |
/* Return value: -1 on error, 0 on normal value, 1 on OOB return. */ |
int |
jbig2_arith_int_decode(Jbig2ArithIntCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result) |
{ |
Jbig2ArithCx *IAx = ctx->IAx; |
int PREV = 1; |
int S, V; |
int bit; |
int n_tail, offset; |
int i; |
S = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | S; |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | bit; |
if (bit) |
{ |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | bit; |
if (bit) |
{ |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | bit; |
if (bit) |
{ |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | bit; |
if (bit) |
{ |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = (PREV << 1) | bit; |
if (bit) |
{ |
n_tail = 32; |
offset = 4436; |
} |
else |
{ |
n_tail = 12; |
offset = 340; |
} |
} |
else |
{ |
n_tail = 8; |
offset = 84; |
} |
} |
else |
{ |
n_tail = 6; |
offset = 20; |
} |
} |
else |
{ |
n_tail = 4; |
offset = 4; |
} |
} |
else |
{ |
n_tail = 2; |
offset = 0; |
} |
V = 0; |
for (i = 0; i < n_tail; i++) |
{ |
bit = jbig2_arith_decode(as, &IAx[PREV]); |
PREV = ((PREV << 1) & 511) | (PREV & 256) | bit; |
V = (V << 1) | bit; |
} |
V += offset; |
V = S ? -V : V; |
*p_result = V; |
return S && V == 0 ? 1 : 0; |
} |
void |
jbig2_arith_int_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIntCtx *iax) |
{ |
jbig2_free(ctx->allocator, iax); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_arith_int.h |
---|
0,0 → 1,26 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
typedef struct _Jbig2ArithIntCtx Jbig2ArithIntCtx; |
Jbig2ArithIntCtx * |
jbig2_arith_int_ctx_new(Jbig2Ctx *ctx); |
int |
jbig2_arith_int_decode(Jbig2ArithIntCtx *ctx, Jbig2ArithState *as, |
int32_t *p_result); |
void |
jbig2_arith_int_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIntCtx *iax); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_generic.c |
---|
0,0 → 1,854 |
/* |
jbig2dec |
Copyright (C) 2002-2005 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Generic region handlers. |
**/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memcpy(), memset() */ |
#ifdef OUTPUT_PBM |
#include <stdio.h> |
#endif |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_image.h" |
#include "jbig2_arith.h" |
#include "jbig2_generic.h" |
#include "jbig2_mmr.h" |
/* return the appropriate context size for the given template */ |
int |
jbig2_generic_stats_size(Jbig2Ctx *ctx, int template) |
{ |
int stats_size = template == 0 ? 1 << 16 : |
template == 1 ? 1 << 1 << 13 : 1 << 10; |
return stats_size; |
} |
static int |
jbig2_decode_generic_template0(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
const int rowstride = image->stride; |
int x, y; |
byte *gbreg_line = (byte *)image->data; |
/* todo: currently we only handle the nominal gbat location */ |
#ifdef OUTPUT_PBM |
printf("P4\n%d %d\n", GBW, GBH); |
#endif |
for (y = 0; y < GBH; y++) |
{ |
uint32_t CONTEXT; |
uint32_t line_m1; |
uint32_t line_m2; |
int padded_width = (GBW + 7) & -8; |
line_m1 = (y >= 1) ? gbreg_line[-rowstride] : 0; |
line_m2 = (y >= 2) ? gbreg_line[-(rowstride << 1)] << 6 : 0; |
CONTEXT = (line_m1 & 0x7f0) | (line_m2 & 0xf800); |
/* 6.2.5.7 3d */ |
for (x = 0; x < padded_width; x += 8) |
{ |
byte result = 0; |
int x_minor; |
int minor_width = GBW - x > 8 ? 8 : GBW - x; |
if (y >= 1) |
line_m1 = (line_m1 << 8) | |
(x + 8 < GBW ? gbreg_line[-rowstride + (x >> 3) + 1] : 0); |
if (y >= 2) |
line_m2 = (line_m2 << 8) | |
(x + 8 < GBW ? gbreg_line[-(rowstride << 1) + (x >> 3) + 1] << 6: 0); |
/* This is the speed-critical inner loop. */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) |
{ |
bool bit; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bit | |
((line_m1 >> (7 - x_minor)) & 0x10) | |
((line_m2 >> (7 - x_minor)) & 0x800); |
} |
gbreg_line[x >> 3] = result; |
} |
#ifdef OUTPUT_PBM |
fwrite(gbreg_line, 1, rowstride, stdout); |
#endif |
gbreg_line += rowstride; |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template0_unopt(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x,y; |
bool bit; |
/* this version is generic and easy to understand, but very slow */ |
for (y = 0; y < GBH; y++) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 9; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], |
y + params->gbat[3]) << 10; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], |
y + params->gbat[5]) << 11; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 12; |
CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 2) << 13; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 14; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], |
y + params->gbat[7]) << 15; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template1(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
const int rowstride = image->stride; |
int x, y; |
byte *gbreg_line = (byte *)image->data; |
/* todo: currently we only handle the nominal gbat location */ |
#ifdef OUTPUT_PBM |
printf("P4\n%d %d\n", GBW, GBH); |
#endif |
for (y = 0; y < GBH; y++) |
{ |
uint32_t CONTEXT; |
uint32_t line_m1; |
uint32_t line_m2; |
int padded_width = (GBW + 7) & -8; |
line_m1 = (y >= 1) ? gbreg_line[-rowstride] : 0; |
line_m2 = (y >= 2) ? gbreg_line[-(rowstride << 1)] << 5 : 0; |
CONTEXT = ((line_m1 >> 1) & 0x1f8) | ((line_m2 >> 1) & 0x1e00); |
/* 6.2.5.7 3d */ |
for (x = 0; x < padded_width; x += 8) |
{ |
byte result = 0; |
int x_minor; |
int minor_width = GBW - x > 8 ? 8 : GBW - x; |
if (y >= 1) |
line_m1 = (line_m1 << 8) | |
(x + 8 < GBW ? gbreg_line[-rowstride + (x >> 3) + 1] : 0); |
if (y >= 2) |
line_m2 = (line_m2 << 8) | |
(x + 8 < GBW ? gbreg_line[-(rowstride << 1) + (x >> 3) + 1] << 5: 0); |
/* This is the speed-critical inner loop. */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) |
{ |
bool bit; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0xefb) << 1) | bit | |
((line_m1 >> (8 - x_minor)) & 0x8) | |
((line_m2 >> (8 - x_minor)) & 0x200); |
} |
gbreg_line[x >> 3] = result; |
} |
#ifdef OUTPUT_PBM |
fwrite(gbreg_line, 1, rowstride, stdout); |
#endif |
gbreg_line += rowstride; |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template2(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
const int rowstride = image->stride; |
int x, y; |
byte *gbreg_line = (byte *)image->data; |
/* todo: currently we only handle the nominal gbat location */ |
#ifdef OUTPUT_PBM |
printf("P4\n%d %d\n", GBW, GBH); |
#endif |
for (y = 0; y < GBH; y++) |
{ |
uint32_t CONTEXT; |
uint32_t line_m1; |
uint32_t line_m2; |
int padded_width = (GBW + 7) & -8; |
line_m1 = (y >= 1) ? gbreg_line[-rowstride] : 0; |
line_m2 = (y >= 2) ? gbreg_line[-(rowstride << 1)] << 4 : 0; |
CONTEXT = ((line_m1 >> 3) & 0x7c) | ((line_m2 >> 3) & 0x380); |
/* 6.2.5.7 3d */ |
for (x = 0; x < padded_width; x += 8) |
{ |
byte result = 0; |
int x_minor; |
int minor_width = GBW - x > 8 ? 8 : GBW - x; |
if (y >= 1) |
line_m1 = (line_m1 << 8) | |
(x + 8 < GBW ? gbreg_line[-rowstride + (x >> 3) + 1] : 0); |
if (y >= 2) |
line_m2 = (line_m2 << 8) | |
(x + 8 < GBW ? gbreg_line[-(rowstride << 1) + (x >> 3) + 1] << 4: 0); |
/* This is the speed-critical inner loop. */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) |
{ |
bool bit; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0x1bd) << 1) | bit | |
((line_m1 >> (10 - x_minor)) & 0x4) | |
((line_m2 >> (10 - x_minor)) & 0x80); |
} |
gbreg_line[x >> 3] = result; |
} |
#ifdef OUTPUT_PBM |
fwrite(gbreg_line, 1, rowstride, stdout); |
#endif |
gbreg_line += rowstride; |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template2a(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
const int rowstride = image->stride; |
int x, y; |
byte *gbreg_line = (byte *)image->data; |
/* This is a special case for GBATX1 = 3, GBATY1 = -1 */ |
#ifdef OUTPUT_PBM |
printf("P4\n%d %d\n", GBW, GBH); |
#endif |
for (y = 0; y < GBH; y++) |
{ |
uint32_t CONTEXT; |
uint32_t line_m1; |
uint32_t line_m2; |
int padded_width = (GBW + 7) & -8; |
line_m1 = (y >= 1) ? gbreg_line[-rowstride] : 0; |
line_m2 = (y >= 2) ? gbreg_line[-(rowstride << 1)] << 4 : 0; |
CONTEXT = ((line_m1 >> 3) & 0x78) | ((line_m1 >> 2) & 0x4) | ((line_m2 >> 3) & 0x380); |
/* 6.2.5.7 3d */ |
for (x = 0; x < padded_width; x += 8) |
{ |
byte result = 0; |
int x_minor; |
int minor_width = GBW - x > 8 ? 8 : GBW - x; |
if (y >= 1) |
line_m1 = (line_m1 << 8) | |
(x + 8 < GBW ? gbreg_line[-rowstride + (x >> 3) + 1] : 0); |
if (y >= 2) |
line_m2 = (line_m2 << 8) | |
(x + 8 < GBW ? gbreg_line[-(rowstride << 1) + (x >> 3) + 1] << 4: 0); |
/* This is the speed-critical inner loop. */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) |
{ |
bool bit; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0x1b9) << 1) | bit | |
((line_m1 >> (10 - x_minor)) & 0x8) | |
((line_m1 >> (9 - x_minor)) & 0x4) | |
((line_m2 >> (10 - x_minor)) & 0x80); |
} |
gbreg_line[x >> 3] = result; |
} |
#ifdef OUTPUT_PBM |
fwrite(gbreg_line, 1, rowstride, stdout); |
#endif |
gbreg_line += rowstride; |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template3(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
const int rowstride = image->stride; |
byte *gbreg_line = (byte *)image->data; |
int x, y; |
/* this routine only handles the nominal AT location */ |
#ifdef OUTPUT_PBM |
printf("P4\n%d %d\n", GBW, GBH); |
#endif |
for (y = 0; y < GBH; y++) |
{ |
uint32_t CONTEXT; |
uint32_t line_m1; |
int padded_width = (GBW + 7) & -8; |
line_m1 = (y >= 1) ? gbreg_line[-rowstride] : 0; |
CONTEXT = (line_m1 >> 1) & 0x3f0; |
/* 6.2.5.7 3d */ |
for (x = 0; x < padded_width; x += 8) |
{ |
byte result = 0; |
int x_minor; |
int minor_width = GBW - x > 8 ? 8 : GBW - x; |
if (y >= 1) |
line_m1 = (line_m1 << 8) | |
(x + 8 < GBW ? gbreg_line[-rowstride + (x >> 3) + 1] : 0); |
/* This is the speed-critical inner loop. */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) |
{ |
bool bit; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0x1f7) << 1) | bit | |
((line_m1 >> (10 - x_minor)) & 0x010); |
} |
gbreg_line[x >> 3] = result; |
} |
#ifdef OUTPUT_PBM |
fwrite(gbreg_line, 1, rowstride, stdout); |
#endif |
gbreg_line += rowstride; |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template3_unopt(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x,y; |
bool bit; |
/* this version is generic and easy to understand, but very slow */ |
for (y = 0; y < GBH; y++) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y) << 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y - 1) << 9; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} |
return 0; |
} |
static void |
copy_prev_row(Jbig2Image *image, int row) |
{ |
if (!row) { |
/* no previous row */ |
memset( image->data, 0, image->stride ); |
} else { |
/* duplicate data from the previous row */ |
uint8_t *src = image->data + (row - 1) * image->stride; |
memcpy( src + image->stride, src, image->stride ); |
} |
} |
static int |
jbig2_decode_generic_template0_TPGDON(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x, y; |
bool bit; |
int LTP = 0; |
for (y = 0; y < GBH; y++) |
{ |
LTP ^= jbig2_arith_decode(as, &GB_stats[0x9B25]); |
if (!LTP) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = jbig2_image_get_pixel(image, x - 1, y); |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 1) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 9; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[2], |
y + params->gbat[3]) << 10; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[4], |
y + params->gbat[5]) << 11; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 12; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 2) << 13; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 14; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[6], |
y + params->gbat[7]) << 15; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} else { |
copy_prev_row(image, y); |
} |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template1_TPGDON(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x, y; |
bool bit; |
int LTP = 0; |
for (y = 0; y < GBH; y++) { |
LTP ^= jbig2_arith_decode(as, &GB_stats[0x0795]); |
if (!LTP) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = jbig2_image_get_pixel(image, x - 1, y); |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 1) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x + 2, y - 2) << 9; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 10; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 2) << 11; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 12; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} else { |
copy_prev_row(image, y); |
} |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template2_TPGDON(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x, y; |
bool bit; |
int LTP = 0; |
for (y = 0; y < GBH; y++) { |
LTP ^= jbig2_arith_decode(as, &GB_stats[0xE5]); |
if (!LTP) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = jbig2_image_get_pixel(image, x - 1, y); |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 1) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 2) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 2) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 2) << 9; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} else { |
copy_prev_row(image, y); |
} |
} |
return 0; |
} |
static int |
jbig2_decode_generic_template3_TPGDON(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int GBW = image->width; |
const int GBH = image->height; |
uint32_t CONTEXT; |
int x, y; |
bool bit; |
int LTP = 0; |
for (y = 0; y < GBH; y++) { |
LTP ^= jbig2_arith_decode(as, &GB_stats[0x0195]); |
if (!LTP) { |
for (x = 0; x < GBW; x++) { |
CONTEXT = jbig2_image_get_pixel(image, x - 1, y); |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x - 4, y) << 3; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->gbat[0], |
y + params->gbat[1]) << 4; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 5; |
CONTEXT |= jbig2_image_get_pixel(image, x , y - 1) << 6; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 7; |
CONTEXT |= jbig2_image_get_pixel(image, x - 2, y - 1) << 8; |
CONTEXT |= jbig2_image_get_pixel(image, x - 3, y - 1) << 9; |
bit = jbig2_arith_decode(as, &GB_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} else { |
copy_prev_row(image, y); |
} |
} |
return 0; |
} |
static int |
jbig2_decode_generic_region_TPGDON(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
switch (params->GBTEMPLATE) { |
case 0: |
return jbig2_decode_generic_template0_TPGDON(ctx, segment, |
params, as, image, GB_stats); |
case 1: |
return jbig2_decode_generic_template1_TPGDON(ctx, segment, |
params, as, image, GB_stats); |
case 2: |
return jbig2_decode_generic_template2_TPGDON(ctx, segment, |
params, as, image, GB_stats); |
case 3: |
return jbig2_decode_generic_template3_TPGDON(ctx, segment, |
params, as, image, GB_stats); |
} |
return -1; |
} |
/** |
* jbig2_decode_generic_region: Decode a generic region. |
* @ctx: The context for allocation and error reporting. |
* @segment: A segment reference for error reporting. |
* @params: Decoding parameter set. |
* @as: Arithmetic decoder state. |
* @image: Where to store the decoded data. |
* @GB_stats: Arithmetic stats. |
* |
* Decodes a generic region, according to section 6.2. The caller should |
* pass an already allocated Jbig2Image object for @image |
* |
* Because this API is based on an arithmetic decoding state, it is |
* not suitable for MMR decoding. |
* |
* Return code: 0 on success. |
**/ |
int |
jbig2_decode_generic_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
const int8_t *gbat = params->gbat; |
if (!params->MMR && params->TPGDON) |
return jbig2_decode_generic_region_TPGDON(ctx, segment, params, |
as, image, GB_stats); |
if (!params->MMR && params->GBTEMPLATE == 0) { |
if (gbat[0] == +3 && gbat[1] == -1 && |
gbat[2] == -3 && gbat[3] == -1 && |
gbat[4] == +2 && gbat[5] == -2 && |
gbat[6] == -2 && gbat[7] == -2) |
return jbig2_decode_generic_template0(ctx, segment, params, |
as, image, GB_stats); |
else |
return jbig2_decode_generic_template0_unopt(ctx, segment, params, |
as, image, GB_stats); |
} else if (!params->MMR && params->GBTEMPLATE == 1) |
return jbig2_decode_generic_template1(ctx, segment, params, |
as, image, GB_stats); |
else if (!params->MMR && params->GBTEMPLATE == 2) |
{ |
if (gbat[0] == 3 && gbat[1] == -1) |
return jbig2_decode_generic_template2a(ctx, segment, params, |
as, image, GB_stats); |
else |
return jbig2_decode_generic_template2(ctx, segment, params, |
as, image, GB_stats); |
} |
else if (!params->MMR && params->GBTEMPLATE == 3) { |
if (gbat[0] == 2 && gbat[1] == -1) |
return jbig2_decode_generic_template3_unopt(ctx, segment, params, |
as, image, GB_stats); |
else |
return jbig2_decode_generic_template3_unopt(ctx, segment, params, |
as, image, GB_stats); |
} |
{ |
int i; |
for (i = 0; i < 8; i++) |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"gbat[%d] = %d", i, params->gbat[i]); |
} |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"decode_generic_region: MMR=%d, GBTEMPLATE=%d NYI", |
params->MMR, params->GBTEMPLATE); |
return -1; |
} |
/** |
* Handler for immediate generic region segments |
*/ |
int |
jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data) |
{ |
Jbig2RegionSegmentInfo rsi; |
byte seg_flags; |
int8_t gbat[8]; |
int offset; |
int gbat_bytes = 0; |
Jbig2GenericRegionParams params; |
int code; |
Jbig2Image *image; |
Jbig2WordStream *ws; |
Jbig2ArithState *as; |
Jbig2ArithCx *GB_stats = NULL; |
/* 7.4.6 */ |
if (segment->data_length < 18) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
jbig2_get_region_segment_info(&rsi, segment_data); |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"generic region: %d x %d @ (%d, %d), flags = %02x", |
rsi.width, rsi.height, rsi.x, rsi.y, rsi.flags); |
/* 7.4.6.2 */ |
seg_flags = segment_data[17]; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"segment flags = %02x", seg_flags); |
if ((seg_flags & 1) && (seg_flags & 6)) |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"MMR is 1, but GBTEMPLATE is not 0"); |
/* 7.4.6.3 */ |
if (!(seg_flags & 1)) |
{ |
gbat_bytes = (seg_flags & 6) ? 2 : 8; |
if (18 + gbat_bytes > segment->data_length) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
memcpy(gbat, segment_data + 18, gbat_bytes); |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"gbat: %d, %d", gbat[0], gbat[1]); |
} |
offset = 18 + gbat_bytes; |
/* Table 34 */ |
params.MMR = seg_flags & 1; |
params.GBTEMPLATE = (seg_flags & 6) >> 1; |
params.TPGDON = (seg_flags & 8) >> 3; |
params.USESKIP = 0; |
memcpy (params.gbat, gbat, gbat_bytes); |
image = jbig2_image_new(ctx, rsi.width, rsi.height); |
if (image == NULL) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"unable to allocate generic image"); |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"allocated %d x %d image buffer for region decode results", |
rsi.width, rsi.height); |
if (params.MMR) |
{ |
code = jbig2_decode_generic_mmr(ctx, segment, ¶ms, |
segment_data + offset, segment->data_length - offset, |
image); |
} |
else |
{ |
int stats_size = jbig2_generic_stats_size(ctx, params.GBTEMPLATE); |
GB_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GB_stats, 0, stats_size); |
ws = jbig2_word_stream_buf_new(ctx, |
segment_data + offset, |
segment->data_length - offset); |
as = jbig2_arith_new(ctx, ws); |
code = jbig2_decode_generic_region(ctx, segment, ¶ms, |
as, image, GB_stats); |
jbig2_free(ctx->allocator, as); |
jbig2_word_stream_buf_free(ctx, ws); |
jbig2_free(ctx->allocator, GB_stats); |
} |
jbig2_page_add_result(ctx, &ctx->pages[ctx->current_page], |
image, rsi.x, rsi.y, JBIG2_COMPOSE_OR); |
jbig2_image_release(ctx, image); |
return code; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_generic.h |
---|
0,0 → 1,62 |
/* |
jbig2dec |
Copyright (C) 2002-2004 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Headers for Generic and Generic Refinement region handling |
**/ |
/* 6.4 Table 2 */ |
typedef struct { |
bool MMR; |
/* GBW */ |
/* GBH */ |
int GBTEMPLATE; |
bool TPGDON; |
bool USESKIP; |
/* SKIP */ |
int8_t gbat[8]; |
} Jbig2GenericRegionParams; |
/* return the appropriate context size for the given template */ |
int |
jbig2_generic_stats_size(Jbig2Ctx *ctx, int template); |
int |
jbig2_decode_generic_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats); |
/* 6.3 Table 6 */ |
typedef struct { |
/* GRW */ |
/* GRH */ |
bool GRTEMPLATE; |
Jbig2Image *reference; |
int32_t DX, DY; |
bool TPGRON; |
int8_t grat[4]; |
} Jbig2RefinementRegionParams; |
int |
jbig2_decode_refinement_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_halftone.c |
---|
0,0 → 1,372 |
/* |
jbig2dec |
Copyright (C) 2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* JBIG2 Pattern Dictionary and Halftone Region decoding */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <string.h> /* memset() */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_generic.h" |
#include "jbig2_mmr.h" |
typedef struct { |
int n_patterns; |
Jbig2Image **patterns; |
int HPW, HPH; |
} Jbig2PatternDict; |
/* Table 24 */ |
typedef struct { |
bool HDMMR; |
uint32_t HDPW; |
uint32_t HDPH; |
uint32_t GRAYMAX; |
int HDTEMPLATE; |
} Jbig2PatternDictParams; |
/* Table 33 */ |
typedef struct { |
byte flags; |
uint32_t HGW; |
uint32_t HGH; |
int32_t HGX; |
int32_t HGY; |
uint16_t HRX; |
uint16_t HRY; |
bool HMMR; |
int HTEMPLATE; |
bool HENABLESKIP; |
Jbig2ComposeOp op; |
bool HDEFPIXEL; |
} Jbig2HalftoneRegionParams; |
/** |
* jbig2_hd_new: create a new dictionary from a collective bitmap |
*/ |
Jbig2PatternDict * |
jbig2_hd_new(Jbig2Ctx *ctx, |
const Jbig2PatternDictParams *params, |
Jbig2Image *image) |
{ |
Jbig2PatternDict *new; |
const int N = params->GRAYMAX + 1; |
const int HPW = params->HDPW; |
const int HPH = params->HDPH; |
int i; |
/* allocate a new struct */ |
new = (Jbig2PatternDict *)jbig2_alloc(ctx->allocator, |
sizeof(Jbig2PatternDict)); |
if (new != NULL) { |
new->patterns = (Jbig2Image **)jbig2_alloc(ctx->allocator, |
N*sizeof(Jbig2Image*)); |
if (new->patterns == NULL) { |
jbig2_free(ctx->allocator, new); |
return NULL; |
} |
new->n_patterns = N; |
new->HPW = HPW; |
new->HPH = HPH; |
/* 6.7.5(4) - copy out the individual pattern images */ |
for (i = 0; i < N; i++) { |
new->patterns[i] = jbig2_image_new(ctx, HPW, HPH); |
if (new->patterns[i] == NULL) { |
int j; |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"failed to allocate pattern element image"); |
for (j = 0; j < i; j++) |
jbig2_free(ctx->allocator, new->patterns[j]); |
jbig2_free(ctx->allocator, new); |
return NULL; |
} |
/* compose with the REPLACE operator; the source |
will be clipped to the destintion, selecting the |
proper sub image */ |
jbig2_image_compose(ctx, new->patterns[i], image, |
-i * HPW, 0, JBIG2_COMPOSE_REPLACE); |
} |
} |
return new; |
} |
/** |
* jbig2_hd_release: release a pattern dictionary |
*/ |
void |
jbig2_hd_release(Jbig2Ctx *ctx, Jbig2PatternDict *dict) |
{ |
int i; |
if (dict == NULL) return; |
for (i = 0; i < dict->n_patterns; i++) |
if (dict->patterns[i]) jbig2_image_release(ctx, dict->patterns[i]); |
jbig2_free(ctx->allocator, dict->patterns); |
jbig2_free(ctx->allocator, dict); |
} |
/** |
* jbig2_decode_pattern_dict: decode pattern dictionary data |
* |
* @ctx: jbig2 decoder context |
* @segment: jbig2 segment (header) structure |
* @params: parameters from the pattern dictionary header |
* @data: pointer to text region data to be decoded |
* @size: length of text region data |
* @GB_stats: artimetic coding context to use |
* |
* Implements the patten dictionary decoding proceedure |
* described in section 6.7 of the JBIG2 spec. |
* |
* returns: a pointer to the resulting dictionary on success |
* returns: 0 on failure |
**/ |
static Jbig2PatternDict * |
jbig2_decode_pattern_dict(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const Jbig2PatternDictParams *params, |
const byte *data, const size_t size, |
Jbig2ArithCx *GB_stats) |
{ |
Jbig2PatternDict *hd = NULL; |
Jbig2Image *image; |
Jbig2GenericRegionParams rparams; |
int code; |
/* allocate the collective image */ |
image = jbig2_image_new(ctx, |
params->HDPW * (params->GRAYMAX + 1), params->HDPH); |
if (image == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"failed to allocate collective bitmap for halftone dict!"); |
return NULL; |
} |
/* fill out the generic region decoder parameters */ |
rparams.MMR = params->HDMMR; |
rparams.GBTEMPLATE = params->HDTEMPLATE; |
rparams.TPGDON = 0; /* not used if HDMMR = 1 */ |
rparams.USESKIP = 0; |
rparams.gbat[0] = -params->HDPW; |
rparams.gbat[1] = 0; |
rparams.gbat[2] = -3; |
rparams.gbat[3] = -1; |
rparams.gbat[4] = 2; |
rparams.gbat[5] = -2; |
rparams.gbat[6] = -2; |
rparams.gbat[7] = -2; |
if (params->HDMMR) { |
code = jbig2_decode_generic_mmr(ctx, segment, &rparams, |
data, size, image); |
} else { |
Jbig2WordStream *ws = jbig2_word_stream_buf_new(ctx, data, size); |
Jbig2ArithState *as = jbig2_arith_new(ctx, ws); |
code = jbig2_decode_generic_region(ctx, segment, &rparams, |
as, image, GB_stats); |
jbig2_free(ctx->allocator, as); |
jbig2_word_stream_buf_free(ctx, ws); |
} |
if (code != 0) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"error decoding collective pattern dictionary bitmap!"); |
} |
hd = jbig2_hd_new(ctx, params, image); |
jbig2_image_release(ctx, image); |
return hd; |
} |
/* 7.4.4 */ |
int |
jbig2_pattern_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data) |
{ |
Jbig2PatternDictParams params; |
Jbig2ArithCx *GB_stats = NULL; |
byte flags; |
int offset = 0; |
/* 7.4.4.1 - Data header */ |
if (segment->data_length < 7) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
} |
flags = segment_data[0]; |
params.HDMMR = flags & 1; |
params.HDTEMPLATE = (flags & 6) >> 1; |
params.HDPW = segment_data[1]; |
params.HDPH = segment_data[2]; |
params.GRAYMAX = jbig2_get_int32(segment_data + 3); |
offset += 7; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"pattern dictionary, flags=%02x, %d grays (%dx%d cell)", |
flags, params.GRAYMAX + 1, params.HDPW, params.HDPH); |
if (params.HDMMR && params.HDTEMPLATE) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"HDTEMPLATE is %d when HDMMR is %d, contrary to spec", |
params.HDTEMPLATE, params.HDMMR); |
} |
if (flags & 0xf8) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"Reserved flag bits non-zero"); |
} |
/* 7.4.4.2 */ |
if (!params.HDMMR) { |
/* allocate and zero arithmetic coding stats */ |
int stats_size = jbig2_generic_stats_size(ctx, params.HDTEMPLATE); |
GB_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GB_stats, 0, stats_size); |
} |
segment->result = jbig2_decode_pattern_dict(ctx, segment, ¶ms, |
segment_data + offset, |
segment->data_length - offset, GB_stats); |
/* todo: retain GB_stats? */ |
if (!params.HDMMR) { |
jbig2_free(ctx->allocator, GB_stats); |
} |
return (segment->result != NULL) ? 0 : 1; |
} |
/** |
* jbig2_decode_halftone_region: decode a halftone region |
**/ |
int |
jbig2_decode_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
Jbig2HalftoneRegionParams *params, |
const byte *data, const size_t size, |
Jbig2Image *image, |
Jbig2ArithCx *GB_stats) |
{ |
int code = 0; |
/* todo: implement */ |
return code; |
} |
/** |
* jbig2_halftone_region: read a halftone region segment header |
**/ |
int |
jbig2_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data) |
{ |
int offset = 0; |
Jbig2RegionSegmentInfo region_info; |
Jbig2HalftoneRegionParams params; |
Jbig2Image *image; |
Jbig2ArithCx *GB_stats; |
int code; |
/* 7.4.5.1 */ |
if (segment->data_length < 17) goto too_short; |
jbig2_get_region_segment_info(®ion_info, segment_data); |
offset += 17; |
if (segment->data_length < 18) goto too_short; |
/* 7.4.5.1.1 */ |
params.flags = segment_data[offset]; |
params.HMMR = params.flags & 1; |
params.HTEMPLATE = (params.flags & 6) >> 1; |
params.HENABLESKIP = (params.flags & 8) >> 3; |
params.op = (params.flags & 0x70) >> 4; |
params.HDEFPIXEL = (params.flags &0x80) >> 7; |
offset += 1; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"halftone region: %d x %d @ (%x,%d) flags=%02x", |
region_info.width, region_info.height, |
region_info.x, region_info.y, params.flags); |
if (params.HMMR && params.HTEMPLATE) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"HTEMPLATE is %d when HMMR is %d, contrary to spec", |
params.HTEMPLATE, params.HMMR); |
} |
if (params.HMMR && params.HENABLESKIP) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"HENABLESKIP is %d when HMMR is %d, contrary to spec", |
params.HENABLESKIP, params.HMMR); |
} |
/* Figure 43 */ |
if (segment->data_length - offset < 16) goto too_short; |
params.HGW = jbig2_get_int32(segment_data + offset); |
params.HGH = jbig2_get_int32(segment_data + offset + 4); |
params.HGX = jbig2_get_int32(segment_data + offset + 8); |
params.HGY = jbig2_get_int32(segment_data + offset + 12); |
offset += 16; |
/* Figure 44 */ |
if (segment->data_length - offset < 4) goto too_short; |
params.HRX = jbig2_get_int16(segment_data + offset); |
params.HRY = jbig2_get_int16(segment_data + offset + 2); |
offset += 4; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
" grid %d x %d @ (%d.%d,%d.%d) vector (%d.%d,%d.%d)", |
params.HGW, params.HGH, |
params.HGX >> 8, params.HGX & 0xff, |
params.HGY >> 8, params.HGY & 0xff, |
params.HRX >> 8, params.HRX & 0xff, |
params.HRY >> 8, params.HRY & 0xff); |
/* 7.4.5.2.2 */ |
if (!params.HMMR) { |
/* allocate and zero arithmetic coding stats */ |
int stats_size = jbig2_generic_stats_size(ctx, params.HTEMPLATE); |
GB_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GB_stats, 0, stats_size); |
} |
image = jbig2_image_new(ctx, region_info.width, region_info.height); |
if (image == NULL) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"unable to allocate halftone image"); |
code = jbig2_decode_halftone_region(ctx, segment, ¶ms, |
segment_data + offset, segment->data_length - offset, |
image, GB_stats); |
/* todo: retain GB_stats? */ |
if (!params.HMMR) { |
jbig2_free(ctx->allocator, GB_stats); |
} |
return code; |
too_short: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_huffman.c |
---|
0,0 → 1,480 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* Huffman table decoding procedures |
-- See Annex B of the JBIG2 specification */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdlib.h> |
#include <string.h> |
#ifdef JBIG2_DEBUG |
#include <stdio.h> |
#endif |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_huffman.h" |
#include "jbig2_hufftab.h" |
#define JBIG2_HUFFMAN_FLAGS_ISOOB 1 |
#define JBIG2_HUFFMAN_FLAGS_ISLOW 2 |
#define JBIG2_HUFFMAN_FLAGS_ISEXT 4 |
struct _Jbig2HuffmanState { |
/* The current bit offset is equal to (offset * 8) + offset_bits. |
The MSB of this_word is the current bit offset. The MSB of next_word |
is (offset + 4) * 8. */ |
uint32_t this_word; |
uint32_t next_word; |
int offset_bits; |
int offset; |
Jbig2WordStream *ws; |
}; |
/** Allocate and initialize a new huffman coding state |
* the returned pointer can simply be freed; this does |
* not affect the associated Jbig2WordStream. |
*/ |
Jbig2HuffmanState * |
jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws) |
{ |
Jbig2HuffmanState *result; |
result = (Jbig2HuffmanState *)jbig2_alloc(ctx->allocator, |
sizeof(Jbig2HuffmanState)); |
if (result != NULL) { |
result->offset = 0; |
result->offset_bits = 0; |
result->this_word = ws->get_next_word (ws, 0); |
result->next_word = ws->get_next_word (ws, 4); |
result->ws = ws; |
} |
return result; |
} |
/** Free an allocated huffman coding state. |
* This just calls jbig2_free() if the pointer is not NULL |
*/ |
void |
jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs) |
{ |
if (hs != NULL) free(hs); |
return; |
} |
/** debug routines **/ |
#ifdef JBIG2_DEBUG |
/** print current huffman state */ |
void jbig2_dump_huffman_state(Jbig2HuffmanState *hs) { |
fprintf(stderr, "huffman state %08x %08x offset %d.%d\n", |
hs->this_word, hs->next_word, hs->offset, hs->offset_bits); |
} |
/** print the binary string we're reading from */ |
void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs) |
{ |
const uint32_t word = hs->this_word; |
int i; |
fprintf(stderr, "huffman binary "); |
for (i = 31; i >= 0; i--) |
fprintf(stderr, ((word >> i) & 1) ? "1" : "0"); |
fprintf(stderr, "\n"); |
} |
#endif /* JBIG2_DEBUG */ |
/** Skip bits up to the next byte boundary |
*/ |
void |
jbig2_huffman_skip(Jbig2HuffmanState *hs) |
{ |
int bits = hs->offset_bits & 7; |
if (bits) { |
bits = 8 - bits; |
hs->offset_bits += bits; |
hs->this_word = (hs->this_word << bits) | |
(hs->next_word >> (32 - hs->offset_bits)); |
} |
if (hs->offset_bits >= 32) { |
Jbig2WordStream *ws = hs->ws; |
hs->this_word = hs->next_word; |
hs->offset += 4; |
hs->next_word = ws->get_next_word (ws, hs->offset + 4); |
hs->offset_bits -= 32; |
if (hs->offset_bits) { |
hs->this_word = (hs->this_word << hs->offset_bits) | |
(hs->next_word >> (32 - hs->offset_bits)); |
} |
} |
} |
/* skip ahead a specified number of bytes in the word stream |
*/ |
void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset) |
{ |
Jbig2WordStream *ws = hs->ws; |
hs->offset += offset & ~3; |
hs->offset_bits += (offset & 3) << 3; |
if (hs->offset_bits >= 32) { |
hs->offset += 4; |
hs->offset_bits -= 32; |
} |
hs->this_word = ws->get_next_word (ws, hs->offset); |
hs->next_word = ws->get_next_word (ws, hs->offset + 4); |
if (hs->offset_bits > 0) |
hs->this_word = (hs->this_word << hs->offset_bits) | |
(hs->next_word >> (32 - hs->offset_bits)); |
} |
/* return the offset of the huffman decode pointer (in bytes) |
* from the beginning of the WordStream |
*/ |
int |
jbig2_huffman_offset(Jbig2HuffmanState *hs) |
{ |
return hs->offset + (hs->offset_bits >> 3); |
} |
/* read a number of bits directly from the huffman state |
* without decoding against a table |
*/ |
int32_t |
jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits) |
{ |
uint32_t this_word = hs->this_word; |
int32_t result; |
result = this_word >> (32 - bits); |
hs->offset_bits += bits; |
if (hs->offset_bits >= 32) { |
hs->offset += 4; |
hs->offset_bits -= 32; |
hs->this_word = hs->next_word; |
hs->next_word = hs->ws->get_next_word(hs->ws, hs->offset + 4); |
if (hs->offset_bits) { |
hs->this_word = (hs->this_word << hs->offset_bits) | |
(hs->next_word >> (32 - hs->offset_bits)); |
} else { |
hs->this_word = (hs->this_word << hs->offset_bits); |
} |
} else { |
hs->this_word = (this_word << bits) | |
(hs->next_word >> (32 - hs->offset_bits)); |
} |
return result; |
} |
int32_t |
jbig2_huffman_get (Jbig2HuffmanState *hs, |
const Jbig2HuffmanTable *table, bool *oob) |
{ |
Jbig2HuffmanEntry *entry; |
byte flags; |
int offset_bits = hs->offset_bits; |
uint32_t this_word = hs->this_word; |
uint32_t next_word; |
int RANGELEN; |
int32_t result; |
for (;;) |
{ |
int log_table_size = table->log_table_size; |
int PREFLEN; |
entry = &table->entries[this_word >> (32 - log_table_size)]; |
flags = entry->flags; |
PREFLEN = entry->PREFLEN; |
next_word = hs->next_word; |
offset_bits += PREFLEN; |
if (offset_bits >= 32) |
{ |
Jbig2WordStream *ws = hs->ws; |
this_word = next_word; |
hs->offset += 4; |
next_word = ws->get_next_word (ws, hs->offset + 4); |
offset_bits -= 32; |
hs->next_word = next_word; |
PREFLEN = offset_bits; |
} |
if (PREFLEN) |
this_word = (this_word << PREFLEN) | |
(next_word >> (32 - offset_bits)); |
if (flags & JBIG2_HUFFMAN_FLAGS_ISEXT) |
{ |
table = entry->u.ext_table; |
} |
else |
break; |
} |
result = entry->u.RANGELOW; |
RANGELEN = entry->RANGELEN; |
if (RANGELEN > 0) |
{ |
int32_t HTOFFSET; |
HTOFFSET = this_word >> (32 - RANGELEN); |
if (flags & JBIG2_HUFFMAN_FLAGS_ISLOW) |
result -= HTOFFSET; |
else |
result += HTOFFSET; |
offset_bits += RANGELEN; |
if (offset_bits >= 32) |
{ |
Jbig2WordStream *ws = hs->ws; |
this_word = next_word; |
hs->offset += 4; |
next_word = ws->get_next_word (ws, hs->offset + 4); |
offset_bits -= 32; |
hs->next_word = next_word; |
RANGELEN = offset_bits; |
} |
if (RANGELEN) |
this_word = (this_word << RANGELEN) | |
(next_word >> (32 - offset_bits)); |
} |
hs->this_word = this_word; |
hs->offset_bits = offset_bits; |
if (oob != NULL) |
*oob = (flags & JBIG2_HUFFMAN_FLAGS_ISOOB); |
return result; |
} |
/* TODO: more than 8 bits here is wasteful of memory. We have support |
for sub-trees in jbig2_huffman_get() above, but don't use it here. |
We should, and then revert to 8 bits */ |
#define LOG_TABLE_SIZE_MAX 16 |
/** Build an in-memory representation of a Huffman table from the |
* set of template params provided by the spec or a table segment |
*/ |
Jbig2HuffmanTable * |
jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params) |
{ |
int *LENCOUNT; |
int LENMAX = -1; |
const int lencountsize = 256 * sizeof(*LENCOUNT); |
const Jbig2HuffmanLine *lines = params->lines; |
int n_lines = params->n_lines; |
int i, j; |
int max_j; |
int log_table_size = 0; |
Jbig2HuffmanTable *result; |
Jbig2HuffmanEntry *entries; |
int CURLEN; |
int firstcode = 0; |
int CURCODE; |
int CURTEMP; |
LENCOUNT = jbig2_alloc(ctx->allocator, lencountsize); |
if (LENCOUNT == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"couldn't allocate storage for huffman histogram"); |
return NULL; |
} |
memset(LENCOUNT, 0, lencountsize); |
/* B.3, 1. */ |
for (i = 0; i < params->n_lines; i++) |
{ |
int PREFLEN = lines[i].PREFLEN; |
int lts; |
if (PREFLEN > LENMAX) |
{ |
for (j = LENMAX + 1; j < PREFLEN + 1; j++) |
LENCOUNT[j] = 0; |
LENMAX = PREFLEN; |
} |
LENCOUNT[PREFLEN]++; |
lts = PREFLEN + lines[i].RANGELEN; |
if (lts > LOG_TABLE_SIZE_MAX) |
lts = PREFLEN; |
if (lts <= LOG_TABLE_SIZE_MAX && log_table_size < lts) |
log_table_size = lts; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, |
"constructing huffman table log size %d", log_table_size); |
max_j = 1 << log_table_size; |
result = (Jbig2HuffmanTable *)jbig2_alloc(ctx->allocator, sizeof(Jbig2HuffmanTable)); |
result->log_table_size = log_table_size; |
entries = (Jbig2HuffmanEntry *)jbig2_alloc(ctx->allocator, max_j * sizeof(Jbig2HuffmanEntry)); |
result->entries = entries; |
LENCOUNT[0] = 0; |
for (CURLEN = 1; CURLEN <= LENMAX; CURLEN++) |
{ |
int shift = log_table_size - CURLEN; |
/* B.3 3.(a) */ |
firstcode = (firstcode + LENCOUNT[CURLEN - 1]) << 1; |
CURCODE = firstcode; |
/* B.3 3.(b) */ |
for (CURTEMP = 0; CURTEMP < n_lines; CURTEMP++) |
{ |
int PREFLEN = lines[CURTEMP].PREFLEN; |
if (PREFLEN == CURLEN) |
{ |
int RANGELEN = lines[CURTEMP].RANGELEN; |
int start_j = CURCODE << shift; |
int end_j = (CURCODE + 1) << shift; |
byte eflags = 0; |
if (end_j > max_j) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"ran off the end of the entries table! (%d >= %d)", |
end_j, max_j); |
jbig2_free(ctx->allocator, result->entries); |
jbig2_free(ctx->allocator, result); |
jbig2_free(ctx->allocator, LENCOUNT); |
return NULL; |
} |
/* todo: build extension tables */ |
if (params->HTOOB && CURTEMP == n_lines - 1) |
eflags |= JBIG2_HUFFMAN_FLAGS_ISOOB; |
if (CURTEMP == n_lines - (params->HTOOB ? 3 : 2)) |
eflags |= JBIG2_HUFFMAN_FLAGS_ISLOW; |
if (PREFLEN + RANGELEN > LOG_TABLE_SIZE_MAX) { |
for (j = start_j; j < end_j; j++) { |
entries[j].u.RANGELOW = lines[CURTEMP].RANGELOW; |
entries[j].PREFLEN = PREFLEN; |
entries[j].RANGELEN = RANGELEN; |
entries[j].flags = eflags; |
} |
} else { |
for (j = start_j; j < end_j; j++) { |
int32_t HTOFFSET = (j >> (shift - RANGELEN)) & |
((1 << RANGELEN) - 1); |
if (eflags & JBIG2_HUFFMAN_FLAGS_ISLOW) |
entries[j].u.RANGELOW = lines[CURTEMP].RANGELOW - |
HTOFFSET; |
else |
entries[j].u.RANGELOW = lines[CURTEMP].RANGELOW + |
HTOFFSET; |
entries[j].PREFLEN = PREFLEN + RANGELEN; |
entries[j].RANGELEN = 0; |
entries[j].flags = eflags; |
} |
} |
CURCODE++; |
} |
} |
} |
jbig2_free(ctx->allocator, LENCOUNT); |
return result; |
} |
/** Free the memory associated with the representation of table */ |
void |
jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table) |
{ |
if (table != NULL) { |
jbig2_free(ctx->allocator, table->entries); |
jbig2_free(ctx->allocator, table); |
} |
return; |
} |
#ifdef TEST |
#include <stdio.h> |
/* a test bitstream, and a list of the table indicies |
to use in decoding it. 1 = table B.1 (A), 2 = table B.2 (B), and so on */ |
/* this test stream should decode to { 8, 5, oob, 8 } */ |
const byte test_stream[] = { 0xe9, 0xcb, 0xf4, 0x00 }; |
const byte test_tabindex[] = { 4, 2, 2, 1 }; |
static uint32_t |
test_get_word (Jbig2WordStream *self, int offset) |
{ |
/* assume test_stream[] is at least 4 bytes */ |
if (offset+3 > sizeof(test_stream)) |
return 0; |
else |
return ( (test_stream[offset] << 24) | |
(test_stream[offset+1] << 16) | |
(test_stream[offset+2] << 8) | |
(test_stream[offset+3]) ); |
} |
int |
main (int argc, char **argv) |
{ |
Jbig2Ctx *ctx; |
Jbig2HuffmanTable *tables[5]; |
Jbig2HuffmanState *hs; |
Jbig2WordStream ws; |
bool oob; |
int32_t code; |
ctx = jbig2_ctx_new(NULL, 0, NULL, NULL, NULL); |
tables[0] = NULL; |
tables[1] = jbig2_build_huffman_table (ctx, &jbig2_huffman_params_A); |
tables[2] = jbig2_build_huffman_table (ctx, &jbig2_huffman_params_B); |
tables[3] = NULL; |
tables[4] = jbig2_build_huffman_table (ctx, &jbig2_huffman_params_D); |
ws.get_next_word = test_get_word; |
hs = jbig2_huffman_new (ctx, &ws); |
printf("testing jbig2 huffmann decoding..."); |
printf("\t(should be 8 5 (oob) 8)\n"); |
{ |
int i; |
int sequence_length = sizeof(test_tabindex); |
for (i = 0; i < sequence_length; i++) { |
code = jbig2_huffman_get (hs, tables[test_tabindex[i]], &oob); |
if (oob) printf("(oob) "); |
else printf("%d ", code); |
} |
} |
printf("\n"); |
jbig2_ctx_free(ctx); |
return 0; |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_huffman.h |
---|
0,0 → 1,105 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef JBIG2_HUFFMAN_H |
#define JBIG2_HUFFMAN_H |
/* Huffman coder interface */ |
typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry; |
typedef struct _Jbig2HuffmanState Jbig2HuffmanState; |
typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable; |
typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams; |
struct _Jbig2HuffmanEntry { |
union { |
int32_t RANGELOW; |
Jbig2HuffmanTable *ext_table; |
} u; |
byte PREFLEN; |
byte RANGELEN; |
byte flags; |
}; |
struct _Jbig2HuffmanTable { |
int log_table_size; |
Jbig2HuffmanEntry *entries; |
}; |
typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine; |
struct _Jbig2HuffmanLine { |
int PREFLEN; |
int RANGELEN; |
int RANGELOW; |
}; |
struct _Jbig2HuffmanParams { |
bool HTOOB; |
int n_lines; |
const Jbig2HuffmanLine *lines; |
}; |
Jbig2HuffmanState * |
jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws); |
void |
jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs); |
void |
jbig2_huffman_skip(Jbig2HuffmanState *hs); |
void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset); |
int |
jbig2_huffman_offset(Jbig2HuffmanState *hs); |
int32_t |
jbig2_huffman_get (Jbig2HuffmanState *hs, |
const Jbig2HuffmanTable *table, bool *oob); |
int32_t |
jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits); |
#ifdef JBIG2_DEBUG |
void jbig2_dump_huffman_state(Jbig2HuffmanState *hs); |
void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs); |
#endif |
Jbig2HuffmanTable * |
jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params); |
void |
jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table); |
/* standard Huffman templates defined by the specification */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */ |
extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */ |
#endif /* JBIG2_HUFFMAN_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_hufftab.h |
---|
0,0 → 1,335 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* predefined Huffman table definitions |
-- See Annex B of the JBIG2 specification */ |
#ifndef JBIG2_HUFFTAB_H |
#define JBIG2_HUFFTAB_H |
/* types are in jbig2_huffman.h, you must include that first */ |
/* Table B.1 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_A[] = { |
{ 1, 4, 0 }, |
{ 2, 8, 16 }, |
{ 3, 16, 272 }, |
{ 0, 32, -1 }, /* low */ |
{ 3, 32, 65808 } /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_A = { FALSE, 5, jbig2_huffman_lines_A }; |
/* Table B.2 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_B[] = { |
{ 1, 0, 0 }, |
{ 2, 0, 1 }, |
{ 3, 0, 2 }, |
{ 4, 3, 3 }, |
{ 5, 6, 11 }, |
{ 0, 32, -1 }, /* low */ |
{ 6, 32, 75 }, /* high */ |
{ 6, 0, 0 } |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_B = { TRUE, 8, jbig2_huffman_lines_B }; |
/* Table B.3 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_C[] = { |
{ 8, 8, -256 }, |
{ 1, 0, 0 }, |
{ 2, 0, 1 }, |
{ 3, 0, 2 }, |
{ 4, 3, 3 }, |
{ 5, 6, 11 }, |
{ 8, 32, -257 }, /* low */ |
{ 7, 32, 75 }, /* high */ |
{ 6, 0, 0 } /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_C = { TRUE, 9, jbig2_huffman_lines_C }; |
/* Table B.4 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_D[] = { |
{ 1, 0, 1 }, |
{ 2, 0, 2 }, |
{ 3, 0, 3 }, |
{ 4, 3, 4 }, |
{ 5, 6, 12 }, |
{ 0, 32, -1 }, /* low */ |
{ 5, 32, 76 }, /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_D = { FALSE, 7, jbig2_huffman_lines_D }; |
/* Table B.5 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_E[] = { |
{7, 8, -255}, |
{1, 0, 1}, |
{2, 0, 2}, |
{3, 0, 3}, |
{4, 3, 4}, |
{5, 6, 12}, |
{7, 32, -256}, /* low */ |
{6, 32, 76} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_E = { FALSE, 8, jbig2_huffman_lines_E }; |
/* Table B.6 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_F[] = { |
{5, 10, -2048}, |
{4, 9, -1024}, |
{4, 8, -512}, |
{4, 7, -256}, |
{5, 6, -128}, |
{5, 5, -64}, |
{4, 5, -32}, |
{2, 7, 0}, |
{3, 7, 128}, |
{3, 8, 256}, |
{4, 9, 512}, |
{4, 10, 1024}, |
{6, 32, -2049}, /* low */ |
{6, 32, 2048} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_F = { FALSE, 14, jbig2_huffman_lines_F }; |
/* Table B.7 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_G[] = { |
{4, 9, -1024}, |
{3, 8, -512}, |
{4, 7, -256}, |
{5, 6, -128}, |
{5, 5, -64}, |
{4, 5, -32}, |
{4, 5, 0}, |
{5, 5, 32}, |
{5, 6, 64}, |
{4, 7, 128}, |
{3, 8, 256}, |
{3, 9, 512}, |
{3, 10, 1024}, |
{5, 32, -1025}, /* low */ |
{5, 32, 2048} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_G = { FALSE, 15, jbig2_huffman_lines_G }; |
/* Table B.8 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_H[] = { |
{8, 3, -15}, |
{9, 1, -7}, |
{8, 1, -5}, |
{9, 0, -3}, |
{7, 0, -2}, |
{4, 0, -1}, |
{2, 1, 0}, |
{5, 0, 2}, |
{6, 0, 3}, |
{3, 4, 4}, |
{6, 1, 20}, |
{4, 4, 22}, |
{4, 5, 38}, |
{5, 6, 70}, |
{5, 7, 134}, |
{6, 7, 262}, |
{7, 8, 390}, |
{6, 10, 646}, |
{9, 32, -16}, /* low */ |
{9, 32, 1670}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_H = { TRUE, 21, jbig2_huffman_lines_H }; |
/* Table B.9 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_I[] = { |
{8, 4, -31}, |
{9, 2, -15}, |
{8, 2, -11}, |
{9, 1, -7}, |
{7, 1, -5}, |
{4, 1, -3}, |
{3, 1, -1}, |
{3, 1, 1}, |
{5, 1, 3}, |
{6, 1, 5}, |
{3, 5, 7}, |
{6, 2, 39}, |
{4, 5, 43}, |
{4, 6, 75}, |
{5, 7, 139}, |
{5, 8, 267}, |
{6, 8, 523}, |
{7, 9, 779}, |
{6, 11, 1291}, |
{9, 32, -32}, /* low */ |
{9, 32, 3339}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_I = { TRUE, 22, jbig2_huffman_lines_I }; |
/* Table B.10 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_J[] = { |
{7, 4, -21}, |
{8, 0, -5}, |
{7, 0, -4}, |
{5, 0, -3}, |
{2, 2, -2}, |
{5, 0, 2}, |
{6, 0, 3}, |
{7, 0, 4}, |
{8, 0, 5}, |
{2, 6, 6}, |
{5, 5, 70}, |
{6, 5, 102}, |
{6, 6, 134}, |
{6, 7, 198}, |
{6, 8, 326}, |
{6, 9, 582}, |
{6, 10, 1094}, |
{7, 11, 2118}, |
{8, 32, -22}, /* low */ |
{8, 32, 4166}, /* high */ |
{2, 0, 0} /* OOB */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_J = { TRUE, 21, jbig2_huffman_lines_J }; |
/* Table B.11 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_K[] = { |
{1, 0, 1}, |
{2, 1, 2}, |
{4, 0, 3}, |
{4, 1, 5}, |
{5, 1, 7}, |
{5, 2, 9}, |
{6, 2, 13}, |
{7, 2, 17}, |
{7, 3, 21}, |
{7, 4, 29}, |
{7, 5, 45}, |
{7, 6, 77}, |
{7, 32, 141} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_K = { FALSE, 13, jbig2_huffman_lines_K }; |
/* Table B.12 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_L[] = { |
{1, 0, 1}, |
{2, 0, 2}, |
{3, 1, 3}, |
{5, 0, 5}, |
{5, 1, 6}, |
{6, 1, 8}, |
{7, 0, 10}, |
{7, 1, 11}, |
{7, 2, 13}, |
{7, 3, 17}, |
{7, 4, 25}, |
{8, 5, 41}, |
{8, 32, 73} |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_L = { FALSE, 13, jbig2_huffman_lines_L }; |
/* Table B.13 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_M[] = { |
{1, 0, 1}, |
{3, 0, 2}, |
{4, 0, 3}, |
{5, 0, 4}, |
{4, 1, 5}, |
{3, 3, 7}, |
{6, 1, 15}, |
{6, 2, 17}, |
{6, 3, 21}, |
{6, 4, 29}, |
{6, 5, 45}, |
{7, 6, 77}, |
{7, 32, 141} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_M = { FALSE, 13, jbig2_huffman_lines_M }; |
/* Table B.14 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_N[] = { |
{ 3, 0, -2 }, |
{ 3, 0, -1 }, |
{ 1, 0, 0 }, |
{ 3, 3, 1 }, |
{ 3, 6, 2 }, |
{ 0, 32, -1 }, /* low */ |
{ 0, 32, 3 }, /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_N = { FALSE, 7, jbig2_huffman_lines_N }; |
/* Table B.15 */ |
const Jbig2HuffmanLine |
jbig2_huffman_lines_O[] = { |
{7, 4, -24}, |
{6, 2, -8}, |
{5, 1, -4}, |
{4, 0, -2}, |
{3, 0, -1}, |
{1, 0, 0}, |
{3, 0, 1}, |
{4, 0, 2}, |
{5, 1, 3}, |
{6, 2, 5}, |
{7, 4, 9}, |
{7, 32, -25}, /* low */ |
{7, 32, 25} /* high */ |
}; |
const Jbig2HuffmanParams |
jbig2_huffman_params_O = { FALSE, 13, jbig2_huffman_lines_O }; |
#endif /* JBIG2_HUFFTAB_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_image.c |
---|
0,0 → 1,313 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> /* memcpy() */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_image.h" |
/* allocate a Jbig2Image structure and its associated bitmap */ |
Jbig2Image* jbig2_image_new(Jbig2Ctx *ctx, int width, int height) |
{ |
Jbig2Image *image; |
int stride; |
image = (Jbig2Image *)jbig2_alloc(ctx->allocator, sizeof(*image)); |
if (image == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"could not allocate image structure"); |
return NULL; |
} |
stride = ((width - 1) >> 3) + 1; /* generate a byte-aligned stride */ |
image->data = (uint8_t *)jbig2_alloc(ctx->allocator, stride*height); |
if (image->data == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"could not allocate image data buffer! [%d bytes]\n", stride*height); |
jbig2_free(ctx->allocator, image); |
return NULL; |
} |
image->width = width; |
image->height = height; |
image->stride = stride; |
image->refcount = 1; |
return image; |
} |
/* clone an image pointer by bumping its reference count */ |
Jbig2Image* jbig2_image_clone(Jbig2Ctx *ctx, Jbig2Image *image) |
{ |
image->refcount++; |
return image; |
} |
/* release an image pointer, freeing it it appropriate */ |
void jbig2_image_release(Jbig2Ctx *ctx, Jbig2Image *image) |
{ |
image->refcount--; |
if (!image->refcount) jbig2_image_free(ctx, image); |
} |
/* free a Jbig2Image structure and its associated memory */ |
void jbig2_image_free(Jbig2Ctx *ctx, Jbig2Image *image) |
{ |
jbig2_free(ctx->allocator, image->data); |
jbig2_free(ctx->allocator, image); |
} |
/* resize a Jbig2Image */ |
Jbig2Image *jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image, |
int width, int height) |
{ |
if (width == image->width) { |
/* use the same stride, just change the length */ |
image->data = jbig2_realloc(ctx->allocator, |
image->data, image->stride*height); |
if (image->data == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"could not resize image buffer!"); |
return NULL; |
} |
if (height > image->height) { |
memset(image->data + image->height*image->stride, |
0, (height - image->height)*image->stride); |
} |
image->height = height; |
} else { |
/* we must allocate a new image buffer and copy */ |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, |
"jbig2_image_resize called with a different width (NYI)"); |
} |
return NULL; |
} |
/* composite one jbig2_image onto another |
slow but general version */ |
int jbig2_image_compose_unopt(Jbig2Ctx *ctx, |
Jbig2Image *dst, Jbig2Image *src, |
int x, int y, Jbig2ComposeOp op) |
{ |
int i, j; |
int sw = src->width; |
int sh = src->height; |
int sx = 0; |
int sy = 0; |
/* clip to the dst image boundaries */ |
if (x < 0) { sx += -x; sw -= -x; x = 0; } |
if (y < 0) { sy += -y; sh -= -y; y = 0; } |
if (x + sw >= dst->width) sw = dst->width - x; |
if (y + sh >= dst->height) sh = dst->height - y; |
switch (op) { |
case JBIG2_COMPOSE_OR: |
for (j = 0; j < sh; j++) { |
for (i = 0; i < sw; i++) { |
jbig2_image_set_pixel(dst, i+x, j+y, |
jbig2_image_get_pixel(src, i+sx, j+sy) | |
jbig2_image_get_pixel(dst, i+x, j+y)); |
} |
} |
break; |
case JBIG2_COMPOSE_AND: |
for (j = 0; j < sh; j++) { |
for (i = 0; i < sw; i++) { |
jbig2_image_set_pixel(dst, i+x, j+y, |
jbig2_image_get_pixel(src, i+sx, j+sy) & |
jbig2_image_get_pixel(dst, i+x, j+y)); |
} |
} |
break; |
case JBIG2_COMPOSE_XOR: |
for (j = 0; j < sh; j++) { |
for (i = 0; i < sw; i++) { |
jbig2_image_set_pixel(dst, i+x, j+y, |
jbig2_image_get_pixel(src, i+sx, j+sy) ^ |
jbig2_image_get_pixel(dst, i+x, j+y)); |
} |
} |
break; |
case JBIG2_COMPOSE_XNOR: |
for (j = 0; j < sh; j++) { |
for (i = 0; i < sw; i++) { |
jbig2_image_set_pixel(dst, i+x, j+y, |
~(jbig2_image_get_pixel(src, i+sx, j+sy) ^ |
jbig2_image_get_pixel(dst, i+x, j+y))); |
} |
} |
break; |
case JBIG2_COMPOSE_REPLACE: |
for (j = 0; j < sh; j++) { |
for (i = 0; i < sw; i++) { |
jbig2_image_set_pixel(dst, i+x, j+y, |
jbig2_image_get_pixel(src, i+sx, j+sy)); |
} |
} |
break; |
} |
return 0; |
} |
/* composite one jbig2_image onto another */ |
int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, |
int x, int y, Jbig2ComposeOp op) |
{ |
int i, j; |
int w, h; |
int leftbyte, rightbyte; |
int shift; |
uint8_t *s, *ss; |
uint8_t *d, *dd; |
uint8_t mask, rightmask; |
if (op != JBIG2_COMPOSE_OR) { |
/* hand off the the general routine */ |
return jbig2_image_compose_unopt(ctx, dst, src, x, y, op); |
} |
/* clip */ |
w = src->width; |
h = src->height; |
ss = src->data; |
/* FIXME: this isn't sufficient for the < 0 cases */ |
if (x < 0) { w += x; x = 0; } |
if (y < 0) { h += y; y = 0; } |
w = (x + w < dst->width) ? w : dst->width - x; |
h = (y + h < dst->height) ? h : dst->height - y; |
#ifdef JBIG2_DEBUG |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, |
"compositing %dx%d at (%d, %d) after clipping\n", |
w, h, x, y); |
#endif |
#if 0 |
/* special case complete/strip replacement */ |
/* disabled because it's only safe to do when the destination |
buffer is all-blank. */ |
if ((x == 0) && (w == src->width)) { |
memcpy(dst->data + y*dst->stride, src->data, h*src->stride); |
return 0; |
} |
#endif |
leftbyte = x >> 3; |
rightbyte = (x + w - 1) >> 3; |
shift = x & 7; |
/* general OR case */ |
s = ss; |
d = dd = dst->data + y*dst->stride + leftbyte; |
if (leftbyte == rightbyte) { |
mask = 0x100 - (0x100 >> w); |
for (j = 0; j < h; j++) { |
*d |= (*s & mask) >> shift; |
d += dst->stride; |
s += src->stride; |
} |
} else if (shift == 0) { |
rightmask = (w & 7) ? 0x100 - (1 << (8 - (w & 7))) : 0xFF; |
for (j = 0; j < h; j++) { |
for (i = leftbyte; i < rightbyte; i++) |
*d++ |= *s++; |
*d |= *s & rightmask; |
d = (dd += dst->stride); |
s = (ss += src->stride); |
} |
} else { |
bool overlap = (((w + 7) >> 3) < ((x + w + 7) >> 3) - (x >> 3)); |
mask = 0x100 - (1 << shift); |
if (overlap) |
rightmask = (0x100 - (0x100 >> ((x + w) & 7))) >> (8 - shift); |
else |
rightmask = 0x100 - (0x100 >> (w & 7)); |
for (j = 0; j < h; j++) { |
*d++ |= (*s & mask) >> shift; |
for(i = leftbyte; i < rightbyte - 1; i++) { |
*d |= ((*s++ & ~mask) << (8 - shift)); |
*d++ |= ((*s & mask) >> shift); |
} |
if (overlap) |
*d |= (*s & rightmask) << (8 - shift); |
else |
*d |= ((s[0] & ~mask) << (8 - shift)) | |
((s[1] & rightmask) >> shift); |
d = (dd += dst->stride); |
s = (ss += src->stride); |
} |
} |
return 0; |
} |
/* initialize an image bitmap to a constant value */ |
void jbig2_image_clear(Jbig2Ctx *ctx, Jbig2Image *image, int value) |
{ |
const uint8_t fill = value ? 0xFF : 0x00; |
memset(image->data, fill, image->stride*image->height); |
} |
/* look up a pixel value in an image. |
returns 0 outside the image frame for the convenience of |
the template code |
*/ |
int jbig2_image_get_pixel(Jbig2Image *image, int x, int y) |
{ |
const int w = image->width; |
const int h = image->height; |
const int byte = (x >> 3) + y*image->stride; |
const int bit = 7 - (x & 7); |
if ((x < 0) || (x >= w)) return 0; |
if ((y < 0) || (y >= h)) return 0; |
return ((image->data[byte]>>bit) & 1); |
} |
/* set an individual pixel value in an image */ |
int jbig2_image_set_pixel(Jbig2Image *image, int x, int y, bool value) |
{ |
const int w = image->width; |
const int h = image->height; |
int scratch, mask; |
int bit, byte; |
if ((x < 0) || (x >= w)) return 0; |
if ((y < 0) || (y >= h)) return 0; |
byte = (x >> 3) + y*image->stride; |
bit = 7 - (x & 7); |
mask = (1 << bit) ^ 0xff; |
scratch = image->data[byte] & mask; |
image->data[byte] = scratch | (value << bit); |
return 1; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_image.h |
---|
0,0 → 1,38 |
/* |
jbig2dec |
Copyright (C) 2001-2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef _JBIG2_IMAGE_H |
#define _JBIG2_IMAGE_H |
int jbig2_image_get_pixel(Jbig2Image *image, int x, int y); |
int jbig2_image_set_pixel(Jbig2Image *image, int x, int y, int value); |
/* routines for dumping the image data in various formats */ |
/* FIXME: should these be in the client instead? */ |
#include <stdio.h> |
int jbig2_image_write_pbm_file(Jbig2Image *image, char *filename); |
int jbig2_image_write_pbm(Jbig2Image *image, FILE *out); |
Jbig2Image *jbig2_image_read_pbm_file(Jbig2Ctx *ctx, char *filename); |
Jbig2Image *jbig2_image_read_pbm(Jbig2Ctx *ctx, FILE *in); |
#ifdef HAVE_LIBPNG |
int jbig2_image_write_png_file(Jbig2Image *image, char *filename); |
int jbig2_image_write_png(Jbig2Image *image, FILE *out); |
#endif |
#endif /* _JBIG2_IMAGE_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_image_pbm.c |
---|
0,0 → 1,150 |
/* |
jbig2dec |
Copyright (C) 2009 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdio.h> |
#include <ctype.h> |
#include "jbig2.h" |
#include "jbig2_image.h" |
/* take an image structure and write it to a file in pbm format */ |
int jbig2_image_write_pbm_file(Jbig2Image *image, char *filename) |
{ |
FILE *out; |
int error; |
if ((out = fopen(filename, "wb")) == NULL) { |
fprintf(stderr, "unable to open '%s' for writing", filename); |
return 1; |
} |
error = jbig2_image_write_pbm(image, out); |
fclose(out); |
return (error); |
} |
/* write out an image struct as a pbm stream to an open file pointer */ |
int jbig2_image_write_pbm(Jbig2Image *image, FILE *out) |
{ |
/* pbm header */ |
fprintf(out, "P4\n%d %d\n", image->width, image->height); |
/* pbm format pads to a byte boundary, so we can |
just write out the whole data buffer |
NB: this assumes minimal stride for the width */ |
fwrite(image->data, 1, image->height*image->stride, out); |
/* success */ |
return 0; |
} |
/* take an image from a file in pbm format */ |
Jbig2Image *jbig2_image_read_pbm_file(Jbig2Ctx *ctx, char *filename) |
{ |
FILE *in; |
Jbig2Image *image; |
if ((in = fopen(filename, "rb")) == NULL) { |
fprintf(stderr, "unable to open '%s' for reading\n", filename); |
return NULL; |
} |
image = jbig2_image_read_pbm(ctx, in); |
fclose(in); |
return (image); |
} |
/* FIXME: should handle multi-image files */ |
Jbig2Image *jbig2_image_read_pbm(Jbig2Ctx *ctx, FILE *in) |
{ |
int i, dim[2]; |
int done; |
Jbig2Image *image; |
int c; |
char buf[32]; |
/* look for 'P4' magic */ |
while ((c = fgetc(in)) != 'P') { |
if (feof(in)) return NULL; |
} |
if ((c = fgetc(in)) != '4') { |
fprintf(stderr, "not a binary pbm file.\n"); |
return NULL; |
} |
/* read size. we must find two decimal numbers representing |
the image dimensions. 'done' will index whether we're |
looking for the width or the height and 'i' will be our |
array index for copying strings into our buffer */ |
done = 0; |
i = 0; |
while (done < 2) { |
c = fgetc(in); |
/* skip whitespace */ |
if (c == ' ' || c == '\t' || c == '\r' || c == '\n') continue; |
/* skip comments */ |
if (c == '#') { |
while ((c = fgetc(in)) != '\n'); |
continue; |
} |
/* report unexpected eof */ |
if (c == EOF) { |
fprintf(stderr, "end-of-file parsing pbm header\n"); |
return NULL; |
} |
if (isdigit(c)) { |
buf[i++] = c; |
while (isdigit(c = fgetc(in))) { |
if (i >= 32) { |
fprintf(stderr, "pbm parsing error\n"); |
return NULL; |
} |
buf[i++] = c; |
} |
buf[i] = '\0'; |
if (sscanf(buf, "%d", &dim[done]) != 1) { |
fprintf(stderr, "couldn't read pbm image dimensions\n"); |
return NULL; |
} |
i = 0; |
done++; |
} |
} |
/* allocate image structure */ |
image = jbig2_image_new(ctx, dim[0], dim[1]); |
if (image == NULL) { |
fprintf(stderr, "could not allocate %dx%d image for pbm file\n", dim[0], dim[1]); |
return NULL; |
} |
/* the pbm data is byte-aligned, so we can |
do a simple block read */ |
fread(image->data, 1, image->height*image->stride, in); |
if (feof(in)) { |
fprintf(stderr, "unexpected end of pbm file.\n"); |
jbig2_image_release(ctx, image); |
return NULL; |
} |
/* success */ |
return image; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_metadata.c |
---|
0,0 → 1,155 |
/* |
jbig2dec |
Copyright (C) 2003 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdlib.h> |
#include <string.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_metadata.h" |
/* metadata key,value list object */ |
Jbig2Metadata *jbig2_metadata_new(Jbig2Ctx *ctx, Jbig2Encoding encoding) |
{ |
Jbig2Metadata *md = jbig2_alloc(ctx->allocator, sizeof(Jbig2Metadata)); |
if (md != NULL) { |
md->encoding = encoding; |
md->entries = 0; |
md->max_entries = 4; |
md->keys = jbig2_alloc(ctx->allocator, md->max_entries*sizeof(char*)); |
md->values = jbig2_alloc(ctx->allocator, md->max_entries*sizeof(char*)); |
if (md->keys == NULL || md->values == NULL) { |
jbig2_metadata_free(ctx, md); |
md = NULL; |
} |
} |
return md; |
} |
void jbig2_metadata_free(Jbig2Ctx *ctx, Jbig2Metadata *md) |
{ |
int i; |
if (md->keys) { |
/* assume we own the pointers */ |
for (i = 0; i < md->entries; i++) |
jbig2_free(ctx->allocator, md->keys[i]); |
jbig2_free(ctx->allocator, md->keys); |
} |
if (md->values) { |
for (i = 0; i < md->entries; i++) |
jbig2_free(ctx->allocator, md->values[i]); |
jbig2_free(ctx->allocator, md->values); |
} |
jbig2_free(ctx->allocator, md); |
} |
static char *jbig2_strndup(Jbig2Ctx *ctx, const char *c, const int len) |
{ |
char *s = jbig2_alloc(ctx->allocator, len*sizeof(char)); |
if (s == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"unable to duplicate comment string"); |
} else { |
memcpy(s, c, len); |
} |
return s; |
} |
int jbig2_metadata_add(Jbig2Ctx *ctx, Jbig2Metadata *md, |
const char *key, const int key_length, |
const char *value, const int value_length) |
{ |
char **keys, **values; |
/* grow the array if necessary */ |
if (md->entries == md->max_entries) { |
md->max_entries >>= 2; |
keys = jbig2_realloc(ctx->allocator, md->keys, md->max_entries); |
values = jbig2_realloc(ctx->allocator, md->values, md->max_entries); |
if (keys == NULL || values == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, |
"unable to resize metadata structure"); |
return -1; |
} |
md->keys = keys; |
md->values = values; |
} |
/* copy the passed key,value pair */ |
md->keys[md->entries] = jbig2_strndup(ctx, key, key_length); |
md->values[md->entries] = jbig2_strndup(ctx, value, value_length); |
md->entries++; |
return 0; |
} |
/* decode an ascii comment segment 7.4.15.1 */ |
int jbig2_comment_ascii(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data) |
{ |
char *s = (char *)(segment_data + 4); |
char *end = (char *)(segment_data + segment->data_length); |
Jbig2Metadata *comment; |
char *key, *value; |
int key_length, value_length; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"ASCII comment data"); |
comment = jbig2_metadata_new(ctx, JBIG2_ENCODING_ASCII); |
if (comment == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unable to allocate comment structure"); |
return -1; |
} |
/* loop over the segment data pulling out the key,value pairs */ |
while(*s && s < end) { |
key_length = strlen(s) + 1; |
key = s; s += key_length; |
if (s >= end) goto too_short; |
value_length = strlen(s) + 1; |
value = s; s += value_length; |
if (s >= end) goto too_short; |
jbig2_metadata_add(ctx, comment, key, key_length, value, value_length); |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"'%s'\t'%s'", key, value); |
} |
/* TODO: associate with ctx, page, or referred-to segment(s) */ |
segment->result = comment; |
return 0; |
too_short: |
jbig2_metadata_free(ctx, comment); |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unexpected end of comment segment"); |
} |
/* decode a UCS-16 comment segement 7.4.15.2 */ |
int jbig2_comment_unicode(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data) |
{ |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled unicode comment segment"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_metadata.h |
---|
0,0 → 1,48 |
/* |
jbig2dec |
Copyright (C) 2003 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifndef _JBIG2_METADATA_H |
#define _JBIG2_METADATA_H |
/* metadata from extension segments */ |
/* these bits should be moved to jbig2.h for public access */ |
typedef enum { |
JBIG2_ENCODING_ASCII, |
JBIG2_ENCODING_UCS16 |
} Jbig2Encoding; |
typedef struct _Jbig2Metadata Jbig2Metadata; |
Jbig2Metadata *jbig2_metadata_new(Jbig2Ctx *ctx, Jbig2Encoding encoding); |
void jbig2_metadata_free(Jbig2Ctx *ctx, Jbig2Metadata *md); |
int jbig2_metadata_add(Jbig2Ctx *ctx, Jbig2Metadata *md, |
const char *key, const int key_length, |
const char *value, const int value_length); |
struct _Jbig2Metadata { |
Jbig2Encoding encoding; |
char **keys, **values; |
int entries, max_entries; |
}; |
/* these bits can go to jbig2_priv.h */ |
int jbig2_comment_ascii(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
int jbig2_comment_unicode(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
#endif /* _JBIG2_METADATA_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_mmr.c |
---|
0,0 → 1,998 |
/* |
jbig2dec |
Copyright (C) 2001-2002 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* An implementation of MMR decoding. This is based on the |
implementation in Fitz, which in turn is based on the one |
in Ghostscript. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <stdio.h> |
#include <string.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_generic.h" |
#include "jbig2_mmr.h" |
typedef struct { |
int width; |
int height; |
const byte *data; |
size_t size; |
int data_index; |
int bit_index; |
uint32_t word; |
} Jbig2MmrCtx; |
static void |
jbig2_decode_mmr_init(Jbig2MmrCtx *mmr, int width, int height, const byte *data, size_t size) |
{ |
int i; |
uint32_t word = 0; |
mmr->width = width; |
mmr->height = height; |
mmr->data = data; |
mmr->size = size; |
mmr->data_index = 0; |
mmr->bit_index = 0; |
for (i = 0; i < size && i < 4; i++) |
word |= (data[i] << ((3 - i) << 3)); |
mmr->word = word; |
} |
static void |
jbig2_decode_mmr_consume(Jbig2MmrCtx *mmr, int n_bits) |
{ |
mmr->word <<= n_bits; |
mmr->bit_index += n_bits; |
while (mmr->bit_index >= 8) { |
mmr->bit_index -= 8; |
if (mmr->data_index + 4 < mmr->size) |
mmr->word |= (mmr->data[mmr->data_index + 4] << mmr->bit_index); |
mmr->data_index++; |
} |
} |
/* |
<raph> the first 2^(initialbits) entries map bit patterns to decodes |
<raph> let's say initial_bits is 8 for the sake of example |
<raph> and that the code is 1001 |
<raph> that means that entries 0x90 .. 0x9f have the entry { val, 4 } |
<raph> because those are all the bytes that start with the code |
<raph> and the 4 is the length of the code |
... if (n_bits > initial_bits) ... |
<raph> anyway, in that case, it basically points to a mini table |
<raph> the n_bits is the maximum length of all codes beginning with that byte |
<raph> so 2^(n_bits - initial_bits) is the size of the mini-table |
<raph> peter came up with this, and it makes sense |
*/ |
typedef struct { |
short val; |
short n_bits; |
} mmr_table_node; |
/* white decode table (runlength huffman codes) */ |
const mmr_table_node jbig2_mmr_white_decode[] = { |
{ 256, 12 }, |
{ 272, 12 }, |
{ 29, 8 }, |
{ 30, 8 }, |
{ 45, 8 }, |
{ 46, 8 }, |
{ 22, 7 }, |
{ 22, 7 }, |
{ 23, 7 }, |
{ 23, 7 }, |
{ 47, 8 }, |
{ 48, 8 }, |
{ 13, 6 }, |
{ 13, 6 }, |
{ 13, 6 }, |
{ 13, 6 }, |
{ 20, 7 }, |
{ 20, 7 }, |
{ 33, 8 }, |
{ 34, 8 }, |
{ 35, 8 }, |
{ 36, 8 }, |
{ 37, 8 }, |
{ 38, 8 }, |
{ 19, 7 }, |
{ 19, 7 }, |
{ 31, 8 }, |
{ 32, 8 }, |
{ 1, 6 }, |
{ 1, 6 }, |
{ 1, 6 }, |
{ 1, 6 }, |
{ 12, 6 }, |
{ 12, 6 }, |
{ 12, 6 }, |
{ 12, 6 }, |
{ 53, 8 }, |
{ 54, 8 }, |
{ 26, 7 }, |
{ 26, 7 }, |
{ 39, 8 }, |
{ 40, 8 }, |
{ 41, 8 }, |
{ 42, 8 }, |
{ 43, 8 }, |
{ 44, 8 }, |
{ 21, 7 }, |
{ 21, 7 }, |
{ 28, 7 }, |
{ 28, 7 }, |
{ 61, 8 }, |
{ 62, 8 }, |
{ 63, 8 }, |
{ 0, 8 }, |
{ 320, 8 }, |
{ 384, 8 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 10, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 11, 5 }, |
{ 27, 7 }, |
{ 27, 7 }, |
{ 59, 8 }, |
{ 60, 8 }, |
{ 288, 9 }, |
{ 290, 9 }, |
{ 18, 7 }, |
{ 18, 7 }, |
{ 24, 7 }, |
{ 24, 7 }, |
{ 49, 8 }, |
{ 50, 8 }, |
{ 51, 8 }, |
{ 52, 8 }, |
{ 25, 7 }, |
{ 25, 7 }, |
{ 55, 8 }, |
{ 56, 8 }, |
{ 57, 8 }, |
{ 58, 8 }, |
{ 192, 6 }, |
{ 192, 6 }, |
{ 192, 6 }, |
{ 192, 6 }, |
{ 1664, 6 }, |
{ 1664, 6 }, |
{ 1664, 6 }, |
{ 1664, 6 }, |
{ 448, 8 }, |
{ 512, 8 }, |
{ 292, 9 }, |
{ 640, 8 }, |
{ 576, 8 }, |
{ 294, 9 }, |
{ 296, 9 }, |
{ 298, 9 }, |
{ 300, 9 }, |
{ 302, 9 }, |
{ 256, 7 }, |
{ 256, 7 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 2, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 3, 4 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 128, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 8, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 9, 5 }, |
{ 16, 6 }, |
{ 16, 6 }, |
{ 16, 6 }, |
{ 16, 6 }, |
{ 17, 6 }, |
{ 17, 6 }, |
{ 17, 6 }, |
{ 17, 6 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 4, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 14, 6 }, |
{ 14, 6 }, |
{ 14, 6 }, |
{ 14, 6 }, |
{ 15, 6 }, |
{ 15, 6 }, |
{ 15, 6 }, |
{ 15, 6 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 64, 5 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ 7, 4 }, |
{ -2, 3 }, |
{ -2, 3 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -3, 4 }, |
{ 1792, 3 }, |
{ 1792, 3 }, |
{ 1984, 4 }, |
{ 2048, 4 }, |
{ 2112, 4 }, |
{ 2176, 4 }, |
{ 2240, 4 }, |
{ 2304, 4 }, |
{ 1856, 3 }, |
{ 1856, 3 }, |
{ 1920, 3 }, |
{ 1920, 3 }, |
{ 2368, 4 }, |
{ 2432, 4 }, |
{ 2496, 4 }, |
{ 2560, 4 }, |
{ 1472, 1 }, |
{ 1536, 1 }, |
{ 1600, 1 }, |
{ 1728, 1 }, |
{ 704, 1 }, |
{ 768, 1 }, |
{ 832, 1 }, |
{ 896, 1 }, |
{ 960, 1 }, |
{ 1024, 1 }, |
{ 1088, 1 }, |
{ 1152, 1 }, |
{ 1216, 1 }, |
{ 1280, 1 }, |
{ 1344, 1 }, |
{ 1408, 1 } |
}; |
/* black decode table (runlength huffman codes) */ |
const mmr_table_node jbig2_mmr_black_decode[] = { |
{ 128, 12 }, |
{ 160, 13 }, |
{ 224, 12 }, |
{ 256, 12 }, |
{ 10, 7 }, |
{ 11, 7 }, |
{ 288, 12 }, |
{ 12, 7 }, |
{ 9, 6 }, |
{ 9, 6 }, |
{ 8, 6 }, |
{ 8, 6 }, |
{ 7, 5 }, |
{ 7, 5 }, |
{ 7, 5 }, |
{ 7, 5 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 6, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 5, 4 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 1, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 4, 3 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 3, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ 2, 2 }, |
{ -2, 4 }, |
{ -2, 4 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -1, 0 }, |
{ -3, 5 }, |
{ 1792, 4 }, |
{ 1792, 4 }, |
{ 1984, 5 }, |
{ 2048, 5 }, |
{ 2112, 5 }, |
{ 2176, 5 }, |
{ 2240, 5 }, |
{ 2304, 5 }, |
{ 1856, 4 }, |
{ 1856, 4 }, |
{ 1920, 4 }, |
{ 1920, 4 }, |
{ 2368, 5 }, |
{ 2432, 5 }, |
{ 2496, 5 }, |
{ 2560, 5 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 18, 3 }, |
{ 52, 5 }, |
{ 52, 5 }, |
{ 640, 6 }, |
{ 704, 6 }, |
{ 768, 6 }, |
{ 832, 6 }, |
{ 55, 5 }, |
{ 55, 5 }, |
{ 56, 5 }, |
{ 56, 5 }, |
{ 1280, 6 }, |
{ 1344, 6 }, |
{ 1408, 6 }, |
{ 1472, 6 }, |
{ 59, 5 }, |
{ 59, 5 }, |
{ 60, 5 }, |
{ 60, 5 }, |
{ 1536, 6 }, |
{ 1600, 6 }, |
{ 24, 4 }, |
{ 24, 4 }, |
{ 24, 4 }, |
{ 24, 4 }, |
{ 25, 4 }, |
{ 25, 4 }, |
{ 25, 4 }, |
{ 25, 4 }, |
{ 1664, 6 }, |
{ 1728, 6 }, |
{ 320, 5 }, |
{ 320, 5 }, |
{ 384, 5 }, |
{ 384, 5 }, |
{ 448, 5 }, |
{ 448, 5 }, |
{ 512, 6 }, |
{ 576, 6 }, |
{ 53, 5 }, |
{ 53, 5 }, |
{ 54, 5 }, |
{ 54, 5 }, |
{ 896, 6 }, |
{ 960, 6 }, |
{ 1024, 6 }, |
{ 1088, 6 }, |
{ 1152, 6 }, |
{ 1216, 6 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 64, 3 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 13, 1 }, |
{ 23, 4 }, |
{ 23, 4 }, |
{ 50, 5 }, |
{ 51, 5 }, |
{ 44, 5 }, |
{ 45, 5 }, |
{ 46, 5 }, |
{ 47, 5 }, |
{ 57, 5 }, |
{ 58, 5 }, |
{ 61, 5 }, |
{ 256, 5 }, |
{ 16, 3 }, |
{ 16, 3 }, |
{ 16, 3 }, |
{ 16, 3 }, |
{ 17, 3 }, |
{ 17, 3 }, |
{ 17, 3 }, |
{ 17, 3 }, |
{ 48, 5 }, |
{ 49, 5 }, |
{ 62, 5 }, |
{ 63, 5 }, |
{ 30, 5 }, |
{ 31, 5 }, |
{ 32, 5 }, |
{ 33, 5 }, |
{ 40, 5 }, |
{ 41, 5 }, |
{ 22, 4 }, |
{ 22, 4 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 14, 1 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 15, 2 }, |
{ 128, 5 }, |
{ 192, 5 }, |
{ 26, 5 }, |
{ 27, 5 }, |
{ 28, 5 }, |
{ 29, 5 }, |
{ 19, 4 }, |
{ 19, 4 }, |
{ 20, 4 }, |
{ 20, 4 }, |
{ 34, 5 }, |
{ 35, 5 }, |
{ 36, 5 }, |
{ 37, 5 }, |
{ 38, 5 }, |
{ 39, 5 }, |
{ 21, 4 }, |
{ 21, 4 }, |
{ 42, 5 }, |
{ 43, 5 }, |
{ 0, 3 }, |
{ 0, 3 }, |
{ 0, 3 }, |
{ 0, 3 } |
}; |
#define getbit(buf, x) ( ( buf[x >> 3] >> ( 7 - (x & 7) ) ) & 1 ) |
static int |
jbig2_find_changing_element(const byte *line, int x, int w) |
{ |
int a, b; |
if (line == 0) |
return w; |
if (x == -1) { |
a = 0; |
x = 0; |
} |
else { |
a = getbit(line, x); |
x ++; |
} |
while (x < w) { |
b = getbit(line, x); |
if (a != b) |
break; |
x++; |
} |
return x; |
} |
static int |
jbig2_find_changing_element_of_color(const byte *line, int x, int w, int color) |
{ |
if (line == 0) |
return w; |
x = jbig2_find_changing_element(line, x, w); |
if (x < w && getbit(line, x) != color) |
x = jbig2_find_changing_element(line, x, w); |
return x; |
} |
static const byte lm[8] = { 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 }; |
static const byte rm[8] = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE }; |
static void |
jbig2_set_bits(byte *line, int x0, int x1) |
{ |
int a0, a1, b0, b1, a; |
a0 = x0 >> 3; |
a1 = x1 >> 3; |
b0 = x0 & 7; |
b1 = x1 & 7; |
if (a0 == a1) { |
line[a0] |= lm[b0] & rm[b1]; |
} |
else { |
line[a0] |= lm[b0]; |
for (a = a0 + 1; a < a1; a++) |
line[a] = 0xFF; |
line[a1] |= rm[b1]; |
} |
} |
static int |
jbig2_decode_get_code(Jbig2MmrCtx *mmr, const mmr_table_node *table, int initial_bits) |
{ |
uint32_t word = mmr->word; |
int table_ix = word >> (32 - initial_bits); |
int val = table[table_ix].val; |
int n_bits = table[table_ix].n_bits; |
if (n_bits > initial_bits) { |
int mask = (1 << (32 - initial_bits)) - 1; |
table_ix = val + ((word & mask) >> (32 - n_bits)); |
val = table[table_ix].val; |
n_bits = initial_bits + table[table_ix].n_bits; |
} |
jbig2_decode_mmr_consume(mmr, n_bits); |
return val; |
} |
static int |
jbig2_decode_get_run(Jbig2MmrCtx *mmr, const mmr_table_node *table, int initial_bits) |
{ |
int result = 0; |
int val; |
do { |
val = jbig2_decode_get_code(mmr, table, initial_bits); |
result += val; |
} while (val >= 64); |
return result; |
} |
static void |
jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst) |
{ |
int a0, a1, a2, b1, b2; |
int c; |
a0 = -1; |
c = 0; /* 0 is white, black is 1 */ |
while (1) |
{ |
uint32_t word = mmr->word; |
/* printf ("%08x\n", word); */ |
if (a0 >= mmr->width) |
break; |
if ((word >> (32 - 3)) == 1) |
{ |
int white_run, black_run; |
jbig2_decode_mmr_consume(mmr, 3); |
if (a0 == -1) |
a0 = 0; |
if (c == 0) { |
white_run = jbig2_decode_get_run(mmr, jbig2_mmr_white_decode, 8); |
black_run = jbig2_decode_get_run(mmr, jbig2_mmr_black_decode, 7); |
a1 = a0 + white_run; |
a2 = a1 + black_run; |
if (a1 > mmr->width) a1 = mmr->width; |
if (a2 > mmr->width) a2 = mmr->width; |
jbig2_set_bits(dst, a1, a2); |
a0 = a2; |
/* printf ("H %d %d\n", white_run, black_run); */ |
} |
else |
{ |
black_run = jbig2_decode_get_run(mmr, jbig2_mmr_black_decode, 7); |
white_run = jbig2_decode_get_run(mmr, jbig2_mmr_white_decode, 8); |
a1 = a0 + black_run; |
a2 = a1 + white_run; |
if (a1 > mmr->width) a1 = mmr->width; |
if (a2 > mmr->width) a2 = mmr->width; |
jbig2_set_bits(dst, a0, a1); |
a0 = a2; |
/* printf ("H %d %d\n", black_run, white_run); */ |
} |
} |
else if ((word >> (32 - 4)) == 1) |
{ |
/* printf ("P\n"); */ |
jbig2_decode_mmr_consume(mmr, 4); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
b2 = jbig2_find_changing_element(ref, b1, mmr->width); |
if (c) jbig2_set_bits(dst, a0, b2); |
a0 = b2; |
} |
else if ((word >> (32 - 1)) == 1) |
{ |
/* printf ("V(0)\n"); */ |
jbig2_decode_mmr_consume(mmr, 1); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (c) jbig2_set_bits(dst, a0, b1); |
a0 = b1; |
c = !c; |
} |
else if ((word >> (32 - 3)) == 3) |
{ |
/* printf ("VR(1)\n"); */ |
jbig2_decode_mmr_consume(mmr, 3); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 + 1 > mmr->width) break; |
if (c) jbig2_set_bits(dst, a0, b1 + 1); |
a0 = b1 + 1; |
c = !c; |
} |
else if ((word >> (32 - 6)) == 3) |
{ |
/* printf ("VR(2)\n"); */ |
jbig2_decode_mmr_consume(mmr, 6); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 + 2 > mmr->width) break; |
if (c) jbig2_set_bits(dst, a0, b1 + 2); |
a0 = b1 + 2; |
c = !c; |
} |
else if ((word >> (32 - 7)) == 3) |
{ |
/* printf ("VR(3)\n"); */ |
jbig2_decode_mmr_consume(mmr, 7); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 + 3 > mmr->width) break; |
if (c) jbig2_set_bits(dst, a0, b1 + 3); |
a0 = b1 + 3; |
c = !c; |
} |
else if ((word >> (32 - 3)) == 2) |
{ |
/* printf ("VL(1)\n"); */ |
jbig2_decode_mmr_consume(mmr, 3); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 - 1 < 0) break; |
if (c) jbig2_set_bits(dst, a0, b1 - 1); |
a0 = b1 - 1; |
c = !c; |
} |
else if ((word >> (32 - 6)) == 2) |
{ |
/* printf ("VL(2)\n"); */ |
jbig2_decode_mmr_consume(mmr, 6); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 - 2 < 0) break; |
if (c) jbig2_set_bits(dst, a0, b1 - 2); |
a0 = b1 - 2; |
c = !c; |
} |
else if ((word >> (32 - 7)) == 2) |
{ |
/* printf ("VL(3)\n"); */ |
jbig2_decode_mmr_consume(mmr, 7); |
b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c); |
if (b1 - 3 < 0) break; |
if (c) jbig2_set_bits(dst, a0, b1 - 3); |
a0 = b1 - 3; |
c = !c; |
} |
else |
break; |
} |
} |
int |
jbig2_decode_generic_mmr(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
const byte *data, size_t size, |
Jbig2Image *image) |
{ |
Jbig2MmrCtx mmr; |
const int rowstride = image->stride; |
byte *dst = image->data; |
byte *ref = NULL; |
int y; |
jbig2_decode_mmr_init(&mmr, image->width, image->height, data, size); |
for (y = 0; y < image->height; y++) { |
memset(dst, 0, rowstride); |
jbig2_decode_mmr_line(&mmr, ref, dst); |
ref = dst; |
dst += rowstride; |
} |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_mmr.h |
---|
0,0 → 1,22 |
/* |
jbig2dec |
Copyright (C) 2001 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
int |
jbig2_decode_generic_mmr(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2GenericRegionParams *params, |
const byte *data, size_t size, |
Jbig2Image *image); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_page.c |
---|
0,0 → 1,327 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stdlib.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#ifdef OUTPUT_PBM |
#include <stdio.h> |
#include "jbig2_image.h" |
#endif |
/* dump the page struct info */ |
static void |
dump_page_info(Jbig2Ctx *ctx, Jbig2Segment *segment, Jbig2Page *page) |
{ |
if (page->x_resolution == 0) { |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"page %d image is %dx%d (unknown res)", page->number, |
page->width, page->height); |
} else if (page->x_resolution == page->y_resolution) { |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"page %d image is %dx%d (%d ppm)", page->number, |
page->width, page->height, |
page->x_resolution); |
} else { |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"page %d image is %dx%d (%dx%d ppm)", page->number, |
page->width, page->height, |
page->x_resolution, page->y_resolution); |
} |
if (page->striped) { |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"\tmaximum stripe size: %d", page->stripe_size); |
} |
} |
/** |
* jbig2_page_info: parse page info segment |
* |
* Parse the page info segment data and fill out a corresponding |
* Jbig2Page struct and ready it for subsequent rendered data, |
* including allocating an image buffer for the page (or the first stripe) |
**/ |
int |
jbig2_page_info (Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data) |
{ |
Jbig2Page *page; |
/* a new page info segment implies the previous page is finished */ |
page = &(ctx->pages[ctx->current_page]); |
if ((page->number != 0) && |
((page->state == JBIG2_PAGE_NEW) || (page->state == JBIG2_PAGE_FREE))) { |
page->state = JBIG2_PAGE_COMPLETE; |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unexpected page info segment, marking previous page finished"); |
} |
/* find a free page */ |
{ |
int index, j; |
index = ctx->current_page; |
while (ctx->pages[index].state != JBIG2_PAGE_FREE) { |
index++; |
if (index >= ctx->max_page_index) { |
/* grow the list */ |
ctx->pages = jbig2_realloc(ctx->allocator, ctx->pages, |
(ctx->max_page_index <<= 2) * sizeof(Jbig2Page)); |
for (j=index; j < ctx->max_page_index; j++) { |
ctx->pages[j].state = JBIG2_PAGE_FREE; |
ctx->pages[j].number = 0; |
ctx->pages[j].image = NULL; |
} |
} |
} |
page = &(ctx->pages[index]); |
ctx->current_page = index; |
page->state = JBIG2_PAGE_NEW; |
page->number = segment->page_association; |
} |
/* FIXME: would be nice if we tried to work around this */ |
if (segment->data_length < 19) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"segment too short"); |
} |
/* 7.4.8.x */ |
page->width = jbig2_get_int32(segment_data); |
page->height = jbig2_get_int32(segment_data + 4); |
page->x_resolution = jbig2_get_int32(segment_data + 8); |
page->y_resolution = jbig2_get_int32(segment_data + 12); |
page->flags = segment_data[16]; |
/* 7.4.8.6 */ |
{ |
int16_t striping = jbig2_get_int16(segment_data +17); |
if (striping & 0x8000) { |
page->striped = TRUE; |
page->stripe_size = striping & 0x7FFF; |
} else { |
page->striped = FALSE; |
page->stripe_size = 0; /* would page->height be better? */ |
} |
} |
if (page->height == 0xFFFFFFFF && page->striped == FALSE) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"height is unspecified but page is not markes as striped"); |
page->striped = TRUE; |
} |
page->end_row = 0; |
if (segment->data_length > 19) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"extra data in segment"); |
} |
dump_page_info(ctx, segment, page); |
/* allocate an approprate page image buffer */ |
/* 7.4.8.2 */ |
if (page->height == 0xFFFFFFFF) { |
page->image = jbig2_image_new(ctx, page->width, page->stripe_size); |
} else { |
page->image = jbig2_image_new(ctx, page->width, page->height); |
} |
if (page->image == NULL) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"failed to allocate buffer for page image"); |
} else { |
/* 8.2 (3) fill the page with the default pixel value */ |
jbig2_image_clear(ctx, page->image, (page->flags & 4)); |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"allocated %dx%d page image (%d bytes)", |
page->image->width, page->image->height, |
page->image->stride*page->image->height); |
} |
return 0; |
} |
/** |
* jbig2_end_of_stripe: parse and implement an end of stripe segment |
**/ |
int |
jbig2_end_of_stripe(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data) |
{ |
Jbig2Page page = ctx->pages[ctx->current_page]; |
int end_row; |
end_row = jbig2_get_int32(segment_data); |
if (end_row < page.end_row) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"end of stripe segment with non-positive end row advance" |
" (new end row %d vs current end row %d)", |
end_row, page.end_row); |
} else { |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"end of stripe: advancing end row to %d", end_row); |
} |
page.end_row = end_row; |
return 0; |
} |
/** |
* jbig2_complete_page: complete a page image |
* |
* called upon seeing an 'end of page' segment, this routine |
* marks a page as completed so it can be returned. |
* compositing will have already happened in the previous |
* segment handlers. |
**/ |
int |
jbig2_complete_page (Jbig2Ctx *ctx) |
{ |
/* check for unfinished segments */ |
if (ctx->segment_index != ctx->n_segments) { |
Jbig2Segment *segment = ctx->segments[ctx->segment_index]; |
int code = 0; |
/* Some versions of Xerox Workcentre generate PDF files |
with the segment data length field of the last segment |
set to -1. Try to cope with this here. */ |
if ((segment->data_length & 0xffffffff) == 0xffffffff) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"File has an invalid segment data length!" |
" Trying to decode using the available data."); |
segment->data_length = ctx->buf_wr_ix - ctx->buf_rd_ix; |
code = jbig2_parse_segment(ctx, segment, ctx->buf + ctx->buf_rd_ix); |
ctx->buf_rd_ix += segment->data_length; |
ctx->segment_index++; |
} |
} |
ctx->pages[ctx->current_page].state = JBIG2_PAGE_COMPLETE; |
return 0; |
} |
/** |
* jbig2_end_of_page: parse and implement an end of page segment |
**/ |
int |
jbig2_end_of_page(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data) |
{ |
uint32_t page_number = ctx->pages[ctx->current_page].number; |
if (segment->page_association != page_number) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"end of page marker for page %d doesn't match current page number %d", |
segment->page_association, page_number); |
} |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"end of page %d", page_number); |
jbig2_complete_page(ctx); |
#ifdef OUTPUT_PBM |
jbig2_image_write_pbm(ctx->pages[ctx->current_page].image, stdout); |
#endif |
return 0; |
} |
/** |
* jbig2_add_page_result: composite a decoding result onto a page |
* |
* this is called to add the results of segment decode (when it |
* is an image) to a page image buffer |
**/ |
int |
jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, |
int x, int y, Jbig2ComposeOp op) |
{ |
/* grow the page to accomodate a new stripe if necessary */ |
if (page->striped) { |
int new_height = y + image->height + page->end_row; |
if (page->image->height < new_height) { |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, |
"growing page buffer to %d rows " |
"to accomodate new stripe", new_height); |
jbig2_image_resize(ctx, page->image, |
page->image->width, new_height); |
} |
} |
jbig2_image_compose(ctx, page->image, image, |
x, y + page->end_row, JBIG2_COMPOSE_OR); |
return 0; |
} |
/** |
* jbig2_get_page: return the next available page image buffer |
* |
* the client can call this at any time to check if any pages |
* have been decoded. If so, it returns the first available |
* one. The client should then call jbig2_release_page() when |
* it no longer needs to refer to the image buffer. |
* |
* since this is a public routine for the library clients, we |
* return an image structure pointer, even though the function |
* name refers to a page; the page structure is private. |
**/ |
Jbig2Image *jbig2_page_out(Jbig2Ctx *ctx) |
{ |
int index; |
/* search for a completed page */ |
for (index=0; index < ctx->max_page_index; index++) { |
if (ctx->pages[index].state == JBIG2_PAGE_COMPLETE) { |
ctx->pages[index].state = JBIG2_PAGE_RETURNED; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, |
"page %d returned to the client", ctx->pages[index].number); |
return jbig2_image_clone(ctx, ctx->pages[index].image); |
} |
} |
/* no pages available */ |
return NULL; |
} |
/** |
* jbig2_release_page: tell the library a page can be freed |
**/ |
int jbig2_release_page(Jbig2Ctx *ctx, Jbig2Image *image) |
{ |
int index; |
/* find the matching page struct and mark it released */ |
for (index = 0; index < ctx->max_page_index; index++) { |
if (ctx->pages[index].image == image) { |
jbig2_image_release(ctx, image); |
ctx->pages[index].state = JBIG2_PAGE_RELEASED; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, -1, |
"page %d released by the client", ctx->pages[index].number); |
return 0; |
} |
} |
/* no matching pages */ |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1, |
"jbig2_release_page called on unknown page"); |
return 1; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_priv.h |
---|
0,0 → 1,177 |
/* |
jbig2dec |
Copyright (C) 2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* library internals */ |
typedef uint8_t byte; |
typedef int bool; |
#ifndef TRUE |
#define TRUE 1 |
#endif |
#ifndef FALSE |
#define FALSE 0 |
#endif |
#ifndef NULL |
#define NULL ((void*)0) |
#endif |
typedef enum { |
JBIG2_FILE_HEADER, |
JBIG2_FILE_SEQUENTIAL_HEADER, |
JBIG2_FILE_SEQUENTIAL_BODY, |
JBIG2_FILE_RANDOM_HEADERS, |
JBIG2_FILE_RANDOM_BODIES, |
JBIG2_FILE_EOF |
} Jbig2FileState; |
struct _Jbig2Ctx { |
Jbig2Allocator *allocator; |
Jbig2Options options; |
const Jbig2Ctx *global_ctx; |
Jbig2ErrorCallback error_callback; |
void *error_callback_data; |
byte *buf; |
size_t buf_size; |
unsigned int buf_rd_ix; |
unsigned int buf_wr_ix; |
Jbig2FileState state; |
uint8_t file_header_flags; |
int32_t n_pages; |
int n_segments_max; |
Jbig2Segment **segments; |
int n_segments; /* index of last segment header parsed */ |
int segment_index; /* index of last segment body parsed */ |
/* list of decoded pages, including the one in progress, |
currently stored as a contiguous, 0-indexed array. */ |
int current_page; |
int max_page_index; |
Jbig2Page *pages; |
}; |
int32_t |
jbig2_get_int32 (const byte *buf); |
int16_t |
jbig2_get_int16 (const byte *buf); |
/* dynamic memory management */ |
void * |
jbig2_alloc (Jbig2Allocator *allocator, size_t size); |
void |
jbig2_free (Jbig2Allocator *allocator, void *p); |
void * |
jbig2_realloc (Jbig2Allocator *allocator, void *p, size_t size); |
#define jbig2_new(ctx, t, size) ((t *)jbig2_alloc(ctx->allocator, (size) * sizeof(t))) |
#define jbig2_renew(ctx, p, t, size) ((t *)jbig2_realloc(ctx->allocator, (p), (size) * sizeof(t))) |
int |
jbig2_error (Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx, |
const char *fmt, ...); |
/* the page structure handles decoded page |
results. it's allocated by a 'page info' |
segement and marked complete by an 'end of page' |
segment. |
*/ |
typedef enum { |
JBIG2_PAGE_FREE, |
JBIG2_PAGE_NEW, |
JBIG2_PAGE_COMPLETE, |
JBIG2_PAGE_RETURNED, |
JBIG2_PAGE_RELEASED |
} Jbig2PageState; |
struct _Jbig2Page { |
Jbig2PageState state; |
uint32_t number; |
uint32_t height, width; /* in pixels */ |
uint32_t x_resolution, |
y_resolution; /* in pixels per meter */ |
uint16_t stripe_size; |
bool striped; |
int end_row; |
uint8_t flags; |
Jbig2Image *image; |
}; |
int jbig2_page_info (Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_end_of_stripe(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_end_of_page(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
int jbig2_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
typedef enum { |
JBIG2_COMPOSE_OR = 0, |
JBIG2_COMPOSE_AND = 1, |
JBIG2_COMPOSE_XOR = 2, |
JBIG2_COMPOSE_XNOR = 3, |
JBIG2_COMPOSE_REPLACE = 4 |
} Jbig2ComposeOp; |
int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y, Jbig2ComposeOp op); |
int jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *src, int x, int y, Jbig2ComposeOp op); |
/* region segment info */ |
typedef struct { |
int32_t width; |
int32_t height; |
int32_t x; |
int32_t y; |
Jbig2ComposeOp op; |
uint8_t flags; |
} Jbig2RegionSegmentInfo; |
void jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, const uint8_t *segment_data); |
int jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data); |
/* 7.4 */ |
int jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data); |
int jbig2_refinement_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
int jbig2_pattern_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
int jbig2_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
/* The word stream design is a compromise between simplicity and |
trying to amortize the number of method calls. Each ::get_next_word |
invocation pulls 4 bytes from the stream, packed big-endian into a |
32 bit word. The offset argument is provided as a convenience. It |
begins at 0 and increments by 4 for each successive invocation. */ |
typedef struct _Jbig2WordStream Jbig2WordStream; |
struct _Jbig2WordStream { |
uint32_t (*get_next_word) (Jbig2WordStream *self, int offset); |
}; |
Jbig2WordStream * |
jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size); |
void |
jbig2_word_stream_buf_free(Jbig2Ctx *ctx, Jbig2WordStream *ws); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_refinement.c |
---|
0,0 → 1,440 |
/* |
jbig2dec |
Copyright (C) 2004 Artifex Software, Inc. |
This software is provided AS-IS with no warranty, |
either express or implied. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Generic Refinement region handlers. |
**/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memcpy(), memset() */ |
#include <stdio.h> |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_generic.h" |
#include "jbig2_image.h" |
static int |
jbig2_decode_refinement_template0(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GR_stats) |
{ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"refinement region template 0 NYI"); |
} |
static int |
jbig2_decode_refinement_template0_unopt(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GR_stats) |
{ |
const int GRW = image->width; |
const int GRH = image->height; |
const int dx = params->DX; |
const int dy = params->DY; |
Jbig2Image *ref = params->reference; |
uint32_t CONTEXT; |
int x,y; |
bool bit; |
for (y = 0; y < GRH; y++) { |
for (x = 0; x < GRW; x++) { |
CONTEXT = 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y + 0) << 0; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x + params->grat[0], |
y + params->grat[1]) << 3; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+1, y-dy+1) << 4; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy+1) << 5; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx-1, y-dy+1) << 6; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+1, y-dy+0) << 7; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy+0) << 8; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx-1, y-dy+0) << 9; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+1, y-dy-1) << 10; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy-1) << 11; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+params->grat[2], |
y-dy+params->grat[3]) << 12; |
bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} |
#ifdef JBIG2_DEBUG_DUMP |
{ |
static count = 0; |
char name[32]; |
snprintf(name, 32, "refin-%d.pbm", count); |
jbig2_image_write_pbm_file(ref, name); |
snprintf(name, 32, "refout-%d.pbm", count); |
jbig2_image_write_pbm_file(image, name); |
count++; |
} |
#endif |
return 0; |
} |
static int |
jbig2_decode_refinement_template1_unopt(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GR_stats) |
{ |
const int GRW = image->width; |
const int GRH = image->height; |
const int dx = params->DX; |
const int dy = params->DY; |
Jbig2Image *ref = params->reference; |
uint32_t CONTEXT; |
int x,y; |
bool bit; |
for (y = 0; y < GRH; y++) { |
for (x = 0; x < GRW; x++) { |
CONTEXT = 0; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y + 0) << 0; |
CONTEXT |= jbig2_image_get_pixel(image, x + 1, y - 1) << 1; |
CONTEXT |= jbig2_image_get_pixel(image, x + 0, y - 1) << 2; |
CONTEXT |= jbig2_image_get_pixel(image, x - 1, y - 1) << 3; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+1, y-dy+1) << 4; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy+1) << 5; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+1, y-dy+0) << 6; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy+0) << 7; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx-1, y-dy+0) << 8; |
CONTEXT |= jbig2_image_get_pixel(ref, x-dx+0, y-dy-1) << 9; |
bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]); |
jbig2_image_set_pixel(image, x, y, bit); |
} |
} |
#ifdef JBIG2_DEBUG_DUMP |
{ |
static count = 0; |
char name[32]; |
snprintf(name, 32, "refin-%d.pbm", count); |
jbig2_image_write_pbm_file(ref, name); |
snprintf(name, 32, "refout-%d.pbm", count); |
jbig2_image_write_pbm_file(image, name); |
count++; |
} |
#endif |
return 0; |
} |
static int |
jbig2_decode_refinement_template1(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GR_stats) |
{ |
const int GRW = image->width; |
const int GRH = image->height; |
const int stride = image->stride; |
const int refstride = params->reference->stride; |
const int dy = params->DY; |
byte *grreg_line = (byte *)image->data; |
byte *grref_line = (byte *)params->reference->data; |
int x,y; |
for (y = 0; y < GRH; y++) { |
const int padded_width = (GRW + 7) & -8; |
uint32_t CONTEXT; |
uint32_t refline_m1; /* previous line of the reference bitmap */ |
uint32_t refline_0; /* current line of the reference bitmap */ |
uint32_t refline_1; /* next line of the reference bitmap */ |
uint32_t line_m1; /* previous line of the decoded bitmap */ |
line_m1 = (y >= 1) ? grreg_line[-stride] : 0; |
refline_m1 = ((y-dy) >= 1) ? grref_line[(-1-dy)*stride] << 2: 0; |
refline_0 = (((y-dy) > 0) && ((y-dy) < GRH)) ? grref_line[(0-dy)*stride] << 4 : 0; |
refline_1 = (y < GRH - 1) ? grref_line[(+1-dy)*stride] << 7 : 0; |
CONTEXT = ((line_m1 >> 5) & 0x00e) | |
((refline_1 >> 5) & 0x030) | |
((refline_0 >> 5) & 0x1c0) | |
((refline_m1 >> 5) & 0x200); |
for (x = 0; x < padded_width; x += 8) { |
byte result = 0; |
int x_minor; |
const int minor_width = GRW - x > 8 ? 8 : GRW - x; |
if (y >= 1) { |
line_m1 = (line_m1 << 8) | |
(x + 8 < GRW ? grreg_line[-stride + (x >> 3) + 1] : 0); |
refline_m1 = (refline_m1 << 8) | |
(x + 8 < GRW ? grref_line[-refstride + (x >> 3) + 1] << 2 : 0); |
} |
refline_0 = (refline_0 << 8) | |
(x + 8 < GRW ? grref_line[(x >> 3) + 1] << 4 : 0); |
if (y < GRH - 1) |
refline_1 = (refline_1 << 8) | |
(x + 8 < GRW ? grref_line[+refstride + (x >> 3) + 1] << 7 : 0); |
else |
refline_1 = 0; |
/* this is the speed critical inner-loop */ |
for (x_minor = 0; x_minor < minor_width; x_minor++) { |
bool bit; |
bit = jbig2_arith_decode(as, &GR_stats[CONTEXT]); |
result |= bit << (7 - x_minor); |
CONTEXT = ((CONTEXT & 0x0d6) << 1) | bit | |
((line_m1 >> (9 - x_minor)) & 0x002) | |
((refline_1 >> (9 - x_minor)) & 0x010) | |
((refline_0 >> (9 - x_minor)) & 0x040) | |
((refline_m1 >> (9 - x_minor)) & 0x200); |
} |
grreg_line[x>>3] = result; |
} |
grreg_line += stride; |
grref_line += refstride; |
} |
return 0; |
} |
/** |
* jbig2_decode_refinement_region: Decode a generic refinement region. |
* @ctx: The context for allocation and error reporting. |
* @segment: A segment reference for error reporting. |
* @params: Decoding parameter set. |
* @as: Arithmetic decoder state. |
* @image: Where to store the decoded image. |
* @GR_stats: Arithmetic stats. |
* |
* Decodes a generic refinement region, according to section 6.3. |
* an already allocated Jbig2Image object in @image for the result. |
* |
* Because this API is based on an arithmetic decoding state, it is |
* not suitable for MMR decoding. |
* |
* Return code: 0 on success. |
**/ |
int |
jbig2_decode_refinement_region(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2RefinementRegionParams *params, |
Jbig2ArithState *as, |
Jbig2Image *image, |
Jbig2ArithCx *GR_stats) |
{ |
{ |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"decoding generic refinement region with offset %d,%x,\n" |
" GRTEMPLATE=%d, TPGRON=%d, RA1=(%d,%d) RA2=(%d,%d)\n", |
params->DX, params->DY, params->GRTEMPLATE, params->TPGRON, |
params->grat[0], params->grat[1], params->grat[2], params->grat[3]); |
} |
if (params->TPGRON) |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"decode_refinement_region: typical prediction coding NYI"); |
if (params->GRTEMPLATE) |
return jbig2_decode_refinement_template1_unopt(ctx, segment, params, |
as, image, GR_stats); |
else |
return jbig2_decode_refinement_template0_unopt(ctx, segment, params, |
as, image, GR_stats); |
} |
/** |
* Find the first referred-to intermediate region segment |
* with a non-NULL result for use as a reference image |
*/ |
Jbig2Segment * |
jbig2_region_find_referred(Jbig2Ctx *ctx,Jbig2Segment *segment) |
{ |
const int nsegments = segment->referred_to_segment_count; |
Jbig2Segment *rsegment; |
int index; |
for (index = 0; index < nsegments; index++) { |
rsegment = jbig2_find_segment(ctx, |
segment->referred_to_segments[index]); |
if (rsegment == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"could not find referred to segment %d", |
segment->referred_to_segments[index]); |
continue; |
} |
switch (rsegment->flags & 63) { |
case 4: /* intermediate text region */ |
case 20: /* intermediate halftone region */ |
case 36: /* intermediate generic region */ |
case 40: /* intermediate generic refinement region */ |
if (rsegment->result) return rsegment; |
break; |
default: /* keep looking */ |
break; |
} |
} |
/* no appropriate reference was found. */ |
return NULL; |
} |
/** |
* Handler for generic refinement region segments |
*/ |
int |
jbig2_refinement_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data) |
{ |
Jbig2RefinementRegionParams params; |
Jbig2RegionSegmentInfo rsi; |
int offset = 0; |
byte seg_flags; |
/* 7.4.7 */ |
if (segment->data_length < 18) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
jbig2_get_region_segment_info(&rsi, segment_data); |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"generic region: %d x %d @ (%d, %d), flags = %02x", |
rsi.width, rsi.height, rsi.x, rsi.y, rsi.flags); |
/* 7.4.7.2 */ |
seg_flags = segment_data[17]; |
params.GRTEMPLATE = seg_flags & 0x01; |
params.TPGRON = seg_flags & 0x02 ? 1 : 0; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"segment flags = %02x %s%s", seg_flags, |
params.GRTEMPLATE ? " GRTEMPLATE" :"", |
params.TPGRON ? " TPGRON" : "" ); |
if (seg_flags & 0xFC) |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"reserved segment flag bits are non-zero"); |
offset += 18; |
/* 7.4.7.3 */ |
if (!params.GRTEMPLATE) { |
if (segment->data_length < 22) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
params.grat[0] = segment_data[offset + 0]; |
params.grat[1] = segment_data[offset + 1]; |
params.grat[2] = segment_data[offset + 2]; |
params.grat[3] = segment_data[offset + 3]; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"grat1: (%d, %d) grat2: (%d, %d)", |
params.grat[0], params.grat[1], |
params.grat[2], params.grat[3]); |
offset += 4; |
} |
/* 7.4.7.4 - set up the reference image */ |
if (segment->referred_to_segment_count) { |
Jbig2Segment *ref; |
ref = jbig2_region_find_referred(ctx, segment); |
if (ref == NULL) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"could not find reference bitmap!"); |
/* the reference bitmap is the result of a previous |
intermediate region segment; the reference selection |
rules say to use the first one available, and not to |
reuse any intermediate result, so we simply clone it |
and free the original to keep track of this. */ |
params.reference = jbig2_image_clone(ctx, ref->result); |
jbig2_image_release(ctx, ref->result); |
ref->result = NULL; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"found reference bitmap in segment %d", ref->number); |
} else { |
/* the reference is just (a subset of) the page buffer */ |
params.reference = jbig2_image_clone(ctx, |
ctx->pages[ctx->current_page].image); |
/* TODO: subset the image if appropriate */ |
} |
/* 7.4.7.5 */ |
params.DX = 0; |
params.DY = 0; |
{ |
Jbig2WordStream *ws; |
Jbig2ArithState *as; |
Jbig2ArithCx *GR_stats = NULL; |
int stats_size; |
Jbig2Image *image; |
int code; |
image = jbig2_image_new(ctx, rsi.width, rsi.height); |
if (image == NULL) |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"unable to allocate refinement image"); |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"allocated %d x %d image buffer for region decode results", |
rsi.width, rsi.height); |
stats_size = params.GRTEMPLATE ? 1 << 10 : 1 << 13; |
GR_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GR_stats, 0, stats_size); |
ws = jbig2_word_stream_buf_new(ctx, segment_data + offset, |
segment->data_length - offset); |
as = jbig2_arith_new(ctx, ws); |
code = jbig2_decode_refinement_region(ctx, segment, ¶ms, |
as, image, GR_stats); |
jbig2_free(ctx->allocator, as); |
jbig2_word_stream_buf_free(ctx, ws); |
jbig2_free(ctx->allocator, GR_stats); |
if ((segment->flags & 63) == 40) { |
/* intermediate region. save the result for later */ |
segment->result = image; |
} else { |
/* immediate region. composite onto the page */ |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"composing %dx%d decoded refinement region onto page at (%d, %d)", |
rsi.width, rsi.height, rsi.x, rsi.y); |
jbig2_page_add_result(ctx, &ctx->pages[ctx->current_page], |
image, rsi.x, rsi.y, rsi.op); |
jbig2_image_release(ctx, image); |
} |
} |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_segment.c |
---|
0,0 → 1,295 |
/* |
jbig2dec |
Copyright (C) 2002-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> /* size_t */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_symbol_dict.h" |
#include "jbig2_metadata.h" |
Jbig2Segment * |
jbig2_parse_segment_header (Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, |
size_t *p_header_size) |
{ |
Jbig2Segment *result; |
uint8_t rtscarf; |
uint32_t rtscarf_long; |
uint32_t *referred_to_segments; |
int referred_to_segment_count; |
int referred_to_segment_size; |
int pa_size; |
int offset; |
/* minimum possible size of a jbig2 segment header */ |
if (buf_size < 11) |
return NULL; |
result = (Jbig2Segment *)jbig2_alloc(ctx->allocator, |
sizeof(Jbig2Segment)); |
/* 7.2.2 */ |
result->number = jbig2_get_int32(buf); |
/* 7.2.3 */ |
result->flags = buf[4]; |
/* 7.2.4 referred-to segments */ |
rtscarf = buf[5]; |
if ((rtscarf & 0xe0) == 0xe0) |
{ |
rtscarf_long = jbig2_get_int32(buf + 5); |
referred_to_segment_count = rtscarf_long & 0x1fffffff; |
offset = 5 + 4 + (referred_to_segment_count + 1) / 8; |
} |
else |
{ |
referred_to_segment_count = (rtscarf >> 5); |
offset = 5 + 1; |
} |
result->referred_to_segment_count = referred_to_segment_count; |
/* we now have enough information to compute the full header length */ |
referred_to_segment_size = result->number <= 256 ? 1: |
result->number <= 65536 ? 2 : 4; /* 7.2.5 */ |
pa_size = result->flags & 0x40 ? 4 : 1; /* 7.2.6 */ |
if (offset + referred_to_segment_count*referred_to_segment_size + pa_size + 4 > buf_size) |
{ |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, |
"jbig2_parse_segment_header() called with insufficient data", -1); |
jbig2_free (ctx->allocator, result); |
return NULL; |
} |
/* 7.2.5 */ |
if (referred_to_segment_count) |
{ |
int i; |
referred_to_segments = jbig2_alloc(ctx->allocator, referred_to_segment_count * referred_to_segment_size * sizeof(uint32_t)); |
for (i = 0; i < referred_to_segment_count; i++) { |
referred_to_segments[i] = |
(referred_to_segment_size == 1) ? buf[offset] : |
(referred_to_segment_size == 2) ? jbig2_get_int16(buf+offset) : |
jbig2_get_int32(buf + offset); |
offset += referred_to_segment_size; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, |
"segment %d refers to segment %d", |
result->number, referred_to_segments[i]); |
} |
result->referred_to_segments = referred_to_segments; |
} |
else /* no referred-to segments */ |
{ |
result->referred_to_segments = NULL; |
} |
/* 7.2.6 */ |
if (result->flags & 0x40) { |
result->page_association = jbig2_get_int32(buf + offset); |
offset += 4; |
} else { |
result->page_association = buf[offset++]; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, |
"segment %d is associated with page %d", |
result->number, result->page_association); |
/* 7.2.7 */ |
result->data_length = jbig2_get_int32(buf + offset); |
*p_header_size = offset + 4; |
/* no body parsing results yet */ |
result->result = NULL; |
return result; |
} |
void |
jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment) |
{ |
if (segment->referred_to_segments != NULL) { |
jbig2_free(ctx->allocator, segment->referred_to_segments); |
} |
/* todo: we need either some separate fields or |
a more complex result object rather than this |
brittle special casing */ |
switch (segment->flags & 63) { |
case 0: /* symbol dictionary */ |
if (segment->result != NULL) |
jbig2_sd_release(ctx, segment->result); |
break; |
case 4: /* intermediate text region */ |
case 40: /* intermediate refinement region */ |
if (segment->result != NULL) |
jbig2_image_release(ctx, segment->result); |
break; |
case 62: |
if (segment->result != NULL) |
jbig2_metadata_free(ctx, segment->result); |
break; |
default: |
/* anything else is probably an undefined pointer */ |
break; |
} |
jbig2_free (ctx->allocator, segment); |
} |
/* find a segment by number */ |
Jbig2Segment * |
jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number) |
{ |
int index, index_max = ctx->segment_index - 1; |
const Jbig2Ctx *global_ctx = ctx->global_ctx; |
/* FIXME: binary search would be better */ |
for (index = index_max; index >= 0; index--) |
if (ctx->segments[index]->number == number) |
return (ctx->segments[index]); |
if (global_ctx) |
for (index = global_ctx->segment_index - 1; index >= 0; index--) |
if (global_ctx->segments[index]->number == number) |
return (global_ctx->segments[index]); |
/* didn't find a match */ |
return NULL; |
} |
/* parse the generic portion of a region segment data header */ |
void |
jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, |
const uint8_t *segment_data) |
{ |
/* 7.4.1 */ |
info->width = jbig2_get_int32(segment_data); |
info->height = jbig2_get_int32(segment_data + 4); |
info->x = jbig2_get_int32(segment_data + 8); |
info->y = jbig2_get_int32(segment_data + 12); |
info->flags = segment_data[16]; |
info->op = info->flags & 0x7; |
} |
/* dispatch code for extension segment parsing */ |
int jbig2_parse_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data) |
{ |
uint32_t type; |
bool reserved, dependent, necessary; |
type = jbig2_get_int32(segment_data); |
reserved = type & 0x20000000; |
dependent = type & 0x40000000; |
necessary = type & 0x80000000; |
if (necessary && !reserved) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"extension segment is marked 'necessary' but not 'reservered' contrary to spec"); |
} |
switch (type) { |
case 0x20000000: return jbig2_comment_ascii(ctx, segment, segment_data); |
case 0x20000002: return jbig2_comment_unicode(ctx, segment, segment_data); |
default: |
if (necessary) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"unhandled necessary extension segment type 0x%08x", type); |
} else { |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled extension segment"); |
} |
} |
return 0; |
} |
/* general segment parsing dispatch */ |
int jbig2_parse_segment (Jbig2Ctx *ctx, Jbig2Segment *segment, |
const uint8_t *segment_data) |
{ |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"Segment %d, flags=%x, type=%d, data_length=%d", |
segment->number, segment->flags, segment->flags & 63, |
segment->data_length); |
switch (segment->flags & 63) |
{ |
case 0: |
return jbig2_symbol_dictionary(ctx, segment, segment_data); |
case 4: /* intermediate text region */ |
case 6: /* immediate text region */ |
case 7: /* immediate lossless text region */ |
return jbig2_text_region(ctx, segment, segment_data); |
#ifdef JBIG2_HALFTONE |
case 16: |
return jbig2_pattern_dictionary(ctx, segment, segment_data); |
case 20: /* intermediate halftone region */ |
case 22: /* immediate halftone region */ |
case 23: /* immediate lossless halftone region */ |
return jbig2_halftone_region(ctx, segment, segment_data); |
#else |
case 16: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'pattern dictionary'"); |
case 20: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'intermediate halftone region'"); |
case 22: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'immediate halftone region'"); |
case 23: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'immediate lossless halftone region'"); |
#endif |
case 36: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'intermediate generic region'"); |
case 38: /* immediate generic region */ |
case 39: /* immediate lossless generic region */ |
return jbig2_immediate_generic_region(ctx, segment, segment_data); |
case 40: /* intermediate generic refinement region */ |
case 42: /* immediate generic refinement region */ |
case 43: /* immediate lossless generic refinement region */ |
return jbig2_refinement_region(ctx, segment, segment_data); |
case 48: |
return jbig2_page_info(ctx, segment, segment_data); |
case 49: |
return jbig2_end_of_page(ctx, segment, segment_data); |
case 50: |
return jbig2_end_of_stripe(ctx, segment, segment_data); |
case 51: |
ctx->state = JBIG2_FILE_EOF; |
return jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"end of file"); |
case 52: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled segment type 'profile'"); |
case 53: |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unhandled table segment"); |
case 62: |
return jbig2_parse_extension_segment(ctx, segment, segment_data); |
default: |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unknown segment type %d", segment->flags & 63); |
} |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_symbol_dict.c |
---|
0,0 → 1,937 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* symbol dictionary segment decode and support */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memset() */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_arith_int.h" |
#include "jbig2_arith_iaid.h" |
#include "jbig2_huffman.h" |
#include "jbig2_generic.h" |
#include "jbig2_mmr.h" |
#include "jbig2_symbol_dict.h" |
#include "jbig2_text.h" |
#if defined(OUTPUT_PBM) || defined(DUMP_SYMDICT) |
#include <stdio.h> |
#include "jbig2_image.h" |
#endif |
/* Table 13 */ |
typedef struct { |
bool SDHUFF; |
bool SDREFAGG; |
int32_t SDNUMINSYMS; |
Jbig2SymbolDict *SDINSYMS; |
uint32_t SDNUMNEWSYMS; |
uint32_t SDNUMEXSYMS; |
Jbig2HuffmanTable *SDHUFFDH; |
Jbig2HuffmanTable *SDHUFFDW; |
Jbig2HuffmanTable *SDHUFFBMSIZE; |
Jbig2HuffmanTable *SDHUFFAGGINST; |
int SDTEMPLATE; |
int8_t sdat[8]; |
bool SDRTEMPLATE; |
int8_t sdrat[4]; |
} Jbig2SymbolDictParams; |
/* Utility routines */ |
#ifdef DUMP_SYMDICT |
void |
jbig2_dump_symbol_dict(Jbig2Ctx *ctx, Jbig2Segment *segment) |
{ |
Jbig2SymbolDict *dict = (Jbig2SymbolDict *)segment->result; |
int index; |
char filename[24]; |
if (dict == NULL) return; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"dumping symbol dict as %d individual png files\n", dict->n_symbols); |
for (index = 0; index < dict->n_symbols; index++) { |
snprintf(filename, sizeof(filename), "symbol_%02d-%04d.png", |
segment->number, index); |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"dumping symbol %d/%d as '%s'", index, dict->n_symbols, filename); |
#ifdef HAVE_LIBPNG |
jbig2_image_write_png_file(dict->glyphs[index], filename); |
#else |
jbig2_image_write_pbm_file(dict->glyphs[index], filename); |
#endif |
} |
} |
#endif /* DUMP_SYMDICT */ |
/* return a new empty symbol dict */ |
Jbig2SymbolDict * |
jbig2_sd_new(Jbig2Ctx *ctx, int n_symbols) |
{ |
Jbig2SymbolDict *new = NULL; |
new = (Jbig2SymbolDict *)jbig2_alloc(ctx->allocator, |
sizeof(Jbig2SymbolDict)); |
if (new != NULL) { |
new->glyphs = (Jbig2Image **)jbig2_alloc(ctx->allocator, |
n_symbols*sizeof(Jbig2Image*)); |
new->n_symbols = n_symbols; |
} else { |
return NULL; |
} |
if (new->glyphs != NULL) { |
memset(new->glyphs, 0, n_symbols*sizeof(Jbig2Image*)); |
} else { |
jbig2_free(ctx->allocator, new); |
return NULL; |
} |
return new; |
} |
/* release the memory associated with a symbol dict */ |
void |
jbig2_sd_release(Jbig2Ctx *ctx, Jbig2SymbolDict *dict) |
{ |
int i; |
if (dict == NULL) return; |
for (i = 0; i < dict->n_symbols; i++) |
if (dict->glyphs[i]) jbig2_image_release(ctx, dict->glyphs[i]); |
jbig2_free(ctx->allocator, dict->glyphs); |
jbig2_free(ctx->allocator, dict); |
} |
/* get a particular glyph by index */ |
Jbig2Image * |
jbig2_sd_glyph(Jbig2SymbolDict *dict, unsigned int id) |
{ |
if (dict == NULL) return NULL; |
return dict->glyphs[id]; |
} |
/* count the number of dictionary segments referred to by the given segment */ |
int |
jbig2_sd_count_referred(Jbig2Ctx *ctx, Jbig2Segment *segment) |
{ |
int index; |
Jbig2Segment *rsegment; |
int n_dicts = 0; |
for (index = 0; index < segment->referred_to_segment_count; index++) { |
rsegment = jbig2_find_segment(ctx, segment->referred_to_segments[index]); |
if (rsegment && ((rsegment->flags & 63) == 0)) n_dicts++; |
} |
return (n_dicts); |
} |
/* return an array of pointers to symbol dictionaries referred to by the given segment */ |
Jbig2SymbolDict ** |
jbig2_sd_list_referred(Jbig2Ctx *ctx, Jbig2Segment *segment) |
{ |
int index; |
Jbig2Segment *rsegment; |
Jbig2SymbolDict **dicts; |
int n_dicts = jbig2_sd_count_referred(ctx, segment); |
int dindex = 0; |
dicts = jbig2_alloc(ctx->allocator, sizeof(Jbig2SymbolDict *) * n_dicts); |
for (index = 0; index < segment->referred_to_segment_count; index++) { |
rsegment = jbig2_find_segment(ctx, segment->referred_to_segments[index]); |
if (rsegment && ((rsegment->flags & 63) == 0)) { |
/* add this referred to symbol dictionary */ |
dicts[dindex++] = (Jbig2SymbolDict *)rsegment->result; |
} |
} |
if (dindex != n_dicts) { |
/* should never happen */ |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"counted %d symbol dictionaries but build a list with %d.\n", |
n_dicts, dindex); |
} |
return (dicts); |
} |
/* generate a new symbol dictionary by concatenating a list of |
existing dictionaries */ |
Jbig2SymbolDict * |
jbig2_sd_cat(Jbig2Ctx *ctx, int n_dicts, Jbig2SymbolDict **dicts) |
{ |
int i,j,k, symbols; |
Jbig2SymbolDict *new = NULL; |
/* count the imported symbols and allocate a new array */ |
symbols = 0; |
for(i = 0; i < n_dicts; i++) |
symbols += dicts[i]->n_symbols; |
/* fill a new array with cloned glyph pointers */ |
new = jbig2_sd_new(ctx, symbols); |
if (new != NULL) { |
k = 0; |
for (i = 0; i < n_dicts; i++) |
for (j = 0; j < dicts[i]->n_symbols; j++) |
new->glyphs[k++] = jbig2_image_clone(ctx, dicts[i]->glyphs[j]); |
} |
return new; |
} |
/* Decoding routines */ |
/* 6.5 */ |
static Jbig2SymbolDict * |
jbig2_decode_symbol_dict(Jbig2Ctx *ctx, |
Jbig2Segment *segment, |
const Jbig2SymbolDictParams *params, |
const byte *data, size_t size, |
Jbig2ArithCx *GB_stats, |
Jbig2ArithCx *GR_stats) |
{ |
Jbig2SymbolDict *SDNEWSYMS; |
Jbig2SymbolDict *SDEXSYMS; |
int32_t HCHEIGHT; |
uint32_t NSYMSDECODED; |
int32_t SYMWIDTH, TOTWIDTH; |
uint32_t HCFIRSTSYM; |
uint32_t *SDNEWSYMWIDTHS = NULL; |
int SBSYMCODELEN = 0; |
Jbig2WordStream *ws = NULL; |
Jbig2HuffmanState *hs = NULL; |
Jbig2HuffmanTable *SDHUFFRDX = NULL; |
Jbig2ArithState *as = NULL; |
Jbig2ArithIntCtx *IADH = NULL; |
Jbig2ArithIntCtx *IADW = NULL; |
Jbig2ArithIntCtx *IAEX = NULL; |
Jbig2ArithIntCtx *IAAI = NULL; |
Jbig2ArithIaidCtx *IAID = NULL; |
Jbig2ArithIntCtx *IARDX = NULL; |
Jbig2ArithIntCtx *IARDY = NULL; |
int code = 0; |
Jbig2SymbolDict **refagg_dicts; |
int n_refagg_dicts = 1; |
Jbig2TextRegionParams *tparams = NULL; |
/* 6.5.5 (3) */ |
HCHEIGHT = 0; |
NSYMSDECODED = 0; |
ws = jbig2_word_stream_buf_new(ctx, data, size); |
if (!params->SDHUFF) { |
as = jbig2_arith_new(ctx, ws); |
IADH = jbig2_arith_int_ctx_new(ctx); |
IADW = jbig2_arith_int_ctx_new(ctx); |
IAEX = jbig2_arith_int_ctx_new(ctx); |
IAAI = jbig2_arith_int_ctx_new(ctx); |
if (params->SDREFAGG) { |
int tmp = params->SDINSYMS->n_symbols + params->SDNUMNEWSYMS; |
for (SBSYMCODELEN = 0; (1 << SBSYMCODELEN) < tmp; SBSYMCODELEN++); |
IAID = jbig2_arith_iaid_ctx_new(ctx, SBSYMCODELEN); |
IARDX = jbig2_arith_int_ctx_new(ctx); |
IARDY = jbig2_arith_int_ctx_new(ctx); |
} |
} else { |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"huffman coded symbol dictionary"); |
hs = jbig2_huffman_new(ctx, ws); |
SDHUFFRDX = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); |
if (!params->SDREFAGG) { |
SDNEWSYMWIDTHS = jbig2_alloc(ctx->allocator, |
sizeof(*SDNEWSYMWIDTHS)*params->SDNUMNEWSYMS); |
if (SDNEWSYMWIDTHS == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"could not allocate storage for symbol widths"); |
return NULL; |
} |
} |
} |
SDNEWSYMS = jbig2_sd_new(ctx, params->SDNUMNEWSYMS); |
/* 6.5.5 (4a) */ |
while (NSYMSDECODED < params->SDNUMNEWSYMS) { |
int32_t HCDH, DW; |
/* 6.5.6 */ |
if (params->SDHUFF) { |
HCDH = jbig2_huffman_get(hs, params->SDHUFFDH, &code); |
} else { |
code = jbig2_arith_int_decode(IADH, as, &HCDH); |
} |
if (code != 0) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"error or OOB decoding height class delta (%d)\n", code); |
} |
/* 6.5.5 (4b) */ |
HCHEIGHT = HCHEIGHT + HCDH; |
SYMWIDTH = 0; |
TOTWIDTH = 0; |
HCFIRSTSYM = NSYMSDECODED; |
if (HCHEIGHT < 0) { |
/* todo: mem cleanup */ |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Invalid HCHEIGHT value"); |
return NULL; |
} |
#ifdef JBIG2_DEBUG |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"HCHEIGHT = %d", HCHEIGHT); |
#endif |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"decoding height class %d with %d syms decoded", HCHEIGHT, NSYMSDECODED); |
for (;;) { |
/* check for broken symbol table */ |
if (NSYMSDECODED > params->SDNUMNEWSYMS) |
{ |
/* todo: mem cleanup? */ |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"No OOB signalling end of height class %d", HCHEIGHT); |
break; |
} |
/* 6.5.7 */ |
if (params->SDHUFF) { |
DW = jbig2_huffman_get(hs, params->SDHUFFDW, &code); |
} else { |
code = jbig2_arith_int_decode(IADW, as, &DW); |
} |
/* 6.5.5 (4c.i) */ |
if (code == 1) { |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
" OOB signals end of height class %d", HCHEIGHT); |
break; |
} |
SYMWIDTH = SYMWIDTH + DW; |
TOTWIDTH = TOTWIDTH + SYMWIDTH; |
if (SYMWIDTH < 0) { |
/* todo: mem cleanup */ |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Invalid SYMWIDTH value (%d) at symbol %d", SYMWIDTH, NSYMSDECODED+1); |
return NULL; |
} |
#ifdef JBIG2_DEBUG |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"SYMWIDTH = %d TOTWIDTH = %d", SYMWIDTH, TOTWIDTH); |
#endif |
/* 6.5.5 (4c.ii) */ |
if (!params->SDHUFF || params->SDREFAGG) { |
#ifdef JBIG2_DEBUG |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"SDHUFF = %d; SDREFAGG = %d", params->SDHUFF, params->SDREFAGG); |
#endif |
/* 6.5.8 */ |
if (!params->SDREFAGG) { |
Jbig2GenericRegionParams region_params; |
int sdat_bytes; |
Jbig2Image *image; |
/* Table 16 */ |
region_params.MMR = 0; |
region_params.GBTEMPLATE = params->SDTEMPLATE; |
region_params.TPGDON = 0; |
region_params.USESKIP = 0; |
sdat_bytes = params->SDTEMPLATE == 0 ? 8 : 2; |
memcpy(region_params.gbat, params->sdat, sdat_bytes); |
image = jbig2_image_new(ctx, SYMWIDTH, HCHEIGHT); |
code = jbig2_decode_generic_region(ctx, segment, ®ion_params, |
as, image, GB_stats); |
/* todo: handle errors */ |
SDNEWSYMS->glyphs[NSYMSDECODED] = image; |
} else { |
/* 6.5.8.2 refinement/aggregate symbol */ |
uint32_t REFAGGNINST; |
if (params->SDHUFF) { |
REFAGGNINST = jbig2_huffman_get(hs, params->SDHUFFAGGINST, &code); |
} else { |
code = jbig2_arith_int_decode(IAAI, as, (int32_t*)&REFAGGNINST); |
} |
if (code || (int32_t)REFAGGNINST <= 0) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"invalid number of symbols or OOB in aggregate glyph"); |
return NULL; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"aggregate symbol coding (%d instances)", REFAGGNINST); |
if (REFAGGNINST > 1) { |
Jbig2Image *image; |
int i; |
if (tparams == NULL) |
{ |
/* First time through, we need to initialise the */ |
/* various tables for Huffman or adaptive encoding */ |
/* as well as the text region parameters structure */ |
refagg_dicts = jbig2_alloc(ctx->allocator, sizeof(Jbig2SymbolDict *) * n_refagg_dicts); |
if (refagg_dicts == NULL) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Out of memory allocating dictionary array"); |
return NULL; |
} |
refagg_dicts[0] = jbig2_sd_new(ctx, params->SDNUMINSYMS + params->SDNUMNEWSYMS); |
if (refagg_dicts[0] == NULL) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Out of memory allocating symbol dictionary"); |
jbig2_free(ctx->allocator, refagg_dicts); |
return NULL; |
} |
refagg_dicts[0]->n_symbols = params->SDNUMINSYMS + params->SDNUMNEWSYMS; |
for (i=0;i < params->SDNUMINSYMS;i++) |
{ |
refagg_dicts[0]->glyphs[i] = jbig2_image_clone(ctx, params->SDINSYMS->glyphs[i]); |
} |
tparams = jbig2_alloc(ctx->allocator, sizeof(Jbig2TextRegionParams)); |
if (tparams == NULL) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Out of memory creating text region params"); |
jbig2_sd_release(ctx, refagg_dicts[0]); |
jbig2_free(ctx->allocator, refagg_dicts); |
return NULL; |
} |
if (!params->SDHUFF) { |
/* Values from Table 17, section 6.5.8.2 (2) */ |
tparams->IADT = jbig2_arith_int_ctx_new(ctx); |
tparams->IAFS = jbig2_arith_int_ctx_new(ctx); |
tparams->IADS = jbig2_arith_int_ctx_new(ctx); |
tparams->IAIT = jbig2_arith_int_ctx_new(ctx); |
/* Table 31 */ |
for (SBSYMCODELEN = 0; (1 << SBSYMCODELEN) < |
(int)(params->SDNUMINSYMS + params->SDNUMNEWSYMS); SBSYMCODELEN++); |
tparams->IAID = jbig2_arith_iaid_ctx_new(ctx, SBSYMCODELEN); |
tparams->IARI = jbig2_arith_int_ctx_new(ctx); |
tparams->IARDW = jbig2_arith_int_ctx_new(ctx); |
tparams->IARDH = jbig2_arith_int_ctx_new(ctx); |
tparams->IARDX = jbig2_arith_int_ctx_new(ctx); |
tparams->IARDY = jbig2_arith_int_ctx_new(ctx); |
} else { |
tparams->SBHUFFFS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_F); /* Table B.6 */ |
tparams->SBHUFFDS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_H); /* Table B.8 */ |
tparams->SBHUFFDT = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_K); /* Table B.11 */ |
tparams->SBHUFFRDW = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); /* Table B.15 */ |
tparams->SBHUFFRDH = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); /* Table B.15 */ |
tparams->SBHUFFRDX = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); /* Table B.15 */ |
tparams->SBHUFFRDY = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); /* Table B.15 */ |
} |
tparams->SBHUFF = params->SDHUFF; |
tparams->SBREFINE = 1; |
tparams->SBSTRIPS = 1; |
tparams->SBDEFPIXEL = 0; |
tparams->SBCOMBOP = JBIG2_COMPOSE_OR; |
tparams->TRANSPOSED = 0; |
tparams->REFCORNER = JBIG2_CORNER_TOPLEFT; |
tparams->SBDSOFFSET = 0; |
tparams->SBRTEMPLATE = params->SDRTEMPLATE; |
} |
tparams->SBNUMINSTANCES = REFAGGNINST; |
image = jbig2_image_new(ctx, SYMWIDTH, HCHEIGHT); |
if (image == NULL) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Out of memory creating symbol image"); |
jbig2_free(ctx->allocator, tparams); |
jbig2_sd_release(ctx, refagg_dicts[0]); |
jbig2_free(ctx->allocator, refagg_dicts); |
return NULL; |
} |
/* multiple symbols are handled as a text region */ |
jbig2_decode_text_region(ctx, segment, tparams, (const Jbig2SymbolDict * const *)refagg_dicts, |
n_refagg_dicts, image, data, size, GR_stats, as, (Jbig2WordStream *)NULL); |
SDNEWSYMS->glyphs[NSYMSDECODED] = image; |
refagg_dicts[0]->glyphs[params->SDNUMINSYMS + NSYMSDECODED] = jbig2_image_clone(ctx, SDNEWSYMS->glyphs[NSYMSDECODED]); |
} else { |
/* 6.5.8.2.2 */ |
/* bool SBHUFF = params->SDHUFF; */ |
Jbig2RefinementRegionParams rparams; |
Jbig2Image *image; |
uint32_t ID; |
int32_t RDX, RDY; |
int ninsyms = params->SDINSYMS->n_symbols; |
if (params->SDHUFF) { |
ID = jbig2_huffman_get_bits(hs, SBSYMCODELEN); |
RDX = jbig2_huffman_get(hs, SDHUFFRDX, &code); |
RDY = jbig2_huffman_get(hs, SDHUFFRDX, &code); |
} else { |
code = jbig2_arith_iaid_decode(IAID, as, (int32_t*)&ID); |
code = jbig2_arith_int_decode(IARDX, as, &RDX); |
code = jbig2_arith_int_decode(IARDY, as, &RDY); |
} |
if (ID >= ninsyms+NSYMSDECODED) { |
code = jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"refinement references unknown symbol %d", ID); |
return NULL; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"symbol is a refinement of id %d with the refinement applied at (%d,%d)", |
ID, RDX, RDY); |
image = jbig2_image_new(ctx, SYMWIDTH, HCHEIGHT); |
/* Table 18 */ |
rparams.GRTEMPLATE = params->SDRTEMPLATE; |
rparams.reference = (ID < ninsyms) ? |
params->SDINSYMS->glyphs[ID] : |
SDNEWSYMS->glyphs[ID-ninsyms]; |
rparams.DX = RDX; |
rparams.DY = RDY; |
rparams.TPGRON = 0; |
memcpy(rparams.grat, params->sdrat, 4); |
jbig2_decode_refinement_region(ctx, segment, |
&rparams, as, image, GR_stats); |
SDNEWSYMS->glyphs[NSYMSDECODED] = image; |
} |
} |
#ifdef OUTPUT_PBM |
{ |
char name[64]; |
FILE *out; |
snprintf(name, 64, "sd.%04d.%04d.pbm", |
segment->number, NSYMSDECODED); |
out = fopen(name, "wb"); |
jbig2_image_write_pbm(SDNEWSYMS->glyphs[NSYMSDECODED], out); |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"writing out glyph as '%s' ...", name); |
fclose(out); |
} |
#endif |
} |
/* 6.5.5 (4c.iii) */ |
if (params->SDHUFF && !params->SDREFAGG) { |
SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"decoded symbol %d of %d (%dx%d)", |
NSYMSDECODED, params->SDNUMNEWSYMS, |
SYMWIDTH, HCHEIGHT); |
/* 6.5.5 (4c.iv) */ |
NSYMSDECODED = NSYMSDECODED + 1; |
} /* end height class decode loop */ |
/* 6.5.5 (4d) */ |
if (params->SDHUFF && !params->SDREFAGG) { |
/* 6.5.9 */ |
Jbig2Image *image; |
int BMSIZE = jbig2_huffman_get(hs, params->SDHUFFBMSIZE, &code); |
int j, x; |
if (code || (BMSIZE < 0)) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"error decoding size of collective bitmap!"); |
/* todo: memory cleanup */ |
return NULL; |
} |
/* skip any bits before the next byte boundary */ |
jbig2_huffman_skip(hs); |
image = jbig2_image_new(ctx, TOTWIDTH, HCHEIGHT); |
if (image == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"could not allocate collective bitmap image!"); |
/* todo: memory cleanup */ |
return NULL; |
} |
if (BMSIZE == 0) { |
/* if BMSIZE == 0 bitmap is uncompressed */ |
const byte *src = data + jbig2_huffman_offset(hs); |
const int stride = (image->width >> 3) + |
((image->width & 7) ? 1 : 0); |
byte *dst = image->data; |
BMSIZE = image->height * stride; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"reading %dx%d uncompressed bitmap" |
" for %d symbols (%d bytes)", |
image->width, image->height, NSYMSDECODED - HCFIRSTSYM, BMSIZE); |
for (j = 0; j < image->height; j++) { |
memcpy(dst, src, stride); |
dst += image->stride; |
src += stride; |
} |
} else { |
Jbig2GenericRegionParams rparams; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"reading %dx%d collective bitmap for %d symbols (%d bytes)", |
image->width, image->height, NSYMSDECODED - HCFIRSTSYM, BMSIZE); |
rparams.MMR = 1; |
code = jbig2_decode_generic_mmr(ctx, segment, &rparams, |
data + jbig2_huffman_offset(hs), BMSIZE, image); |
if (code) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"error decoding MMR bitmap image!"); |
/* todo: memory cleanup */ |
return NULL; |
} |
} |
/* advance past the data we've just read */ |
jbig2_huffman_advance(hs, BMSIZE); |
/* copy the collective bitmap into the symbol dictionary */ |
x = 0; |
for (j = HCFIRSTSYM; j < NSYMSDECODED; j++) { |
Jbig2Image *glyph; |
glyph = jbig2_image_new(ctx, SDNEWSYMWIDTHS[j], HCHEIGHT); |
jbig2_image_compose(ctx, glyph, image, |
-x, 0, JBIG2_COMPOSE_REPLACE); |
x += SDNEWSYMWIDTHS[j]; |
SDNEWSYMS->glyphs[j] = glyph; |
} |
jbig2_image_release(ctx, image); |
} |
} /* end of symbol decode loop */ |
if (tparams != NULL) |
{ |
if (!params->SDHUFF) |
{ |
jbig2_arith_int_ctx_free(ctx, tparams->IADT); |
jbig2_arith_int_ctx_free(ctx, tparams->IAFS); |
jbig2_arith_int_ctx_free(ctx, tparams->IADS); |
jbig2_arith_int_ctx_free(ctx, tparams->IAIT); |
jbig2_arith_iaid_ctx_free(ctx, tparams->IAID); |
jbig2_arith_int_ctx_free(ctx, tparams->IARI); |
jbig2_arith_int_ctx_free(ctx, tparams->IARDW); |
jbig2_arith_int_ctx_free(ctx, tparams->IARDH); |
jbig2_arith_int_ctx_free(ctx, tparams->IARDX); |
jbig2_arith_int_ctx_free(ctx, tparams->IARDY); |
} |
else |
{ |
jbig2_release_huffman_table(ctx, tparams->SBHUFFFS); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFDS); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFDT); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFRDX); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFRDY); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFRDW); |
jbig2_release_huffman_table(ctx, tparams->SBHUFFRDH); |
} |
jbig2_free(ctx->allocator, tparams); |
tparams = NULL; |
jbig2_sd_release(ctx, refagg_dicts[0]); |
jbig2_free(ctx->allocator, refagg_dicts); |
} |
jbig2_free(ctx->allocator, GB_stats); |
/* 6.5.10 */ |
SDEXSYMS = jbig2_sd_new(ctx, params->SDNUMEXSYMS); |
{ |
int i = 0; |
int j = 0; |
int k, m, exflag = 0; |
int32_t exrunlength; |
if (params->SDINSYMS != NULL) |
m = params->SDINSYMS->n_symbols; |
else |
m = 0; |
while (j < params->SDNUMEXSYMS) { |
if (params->SDHUFF) |
/* FIXME: implement reading from huff table B.1 */ |
exrunlength = params->SDNUMEXSYMS; |
else |
code = jbig2_arith_int_decode(IAEX, as, &exrunlength); |
if (exrunlength > params->SDNUMEXSYMS - j) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"runlength too large in export symbol table (%d > %d - %d)\n", |
exrunlength, params->SDNUMEXSYMS, j); |
jbig2_sd_release(ctx, SDEXSYMS); |
/* skip to the cleanup code and return SDEXSYMS = NULL */ |
SDEXSYMS = NULL; |
break; |
} |
for(k = 0; k < exrunlength; k++) |
if (exflag) { |
SDEXSYMS->glyphs[j++] = (i < m) ? |
jbig2_image_clone(ctx, params->SDINSYMS->glyphs[i]) : |
jbig2_image_clone(ctx, SDNEWSYMS->glyphs[i-m]); |
i++; |
} |
exflag = !exflag; |
} |
} |
jbig2_sd_release(ctx, SDNEWSYMS); |
if (!params->SDHUFF) { |
jbig2_arith_int_ctx_free(ctx, IADH); |
jbig2_arith_int_ctx_free(ctx, IADW); |
jbig2_arith_int_ctx_free(ctx, IAEX); |
jbig2_arith_int_ctx_free(ctx, IAAI); |
if (params->SDREFAGG) { |
jbig2_arith_iaid_ctx_free(ctx, IAID); |
jbig2_arith_int_ctx_free(ctx, IARDX); |
jbig2_arith_int_ctx_free(ctx, IARDY); |
} |
jbig2_free(ctx->allocator, as); |
} else { |
if (params->SDREFAGG) { |
jbig2_free(ctx->allocator, SDNEWSYMWIDTHS); |
} |
jbig2_release_huffman_table(ctx, SDHUFFRDX); |
jbig2_free(ctx->allocator, hs); |
} |
jbig2_word_stream_buf_free(ctx, ws); |
return SDEXSYMS; |
} |
/* 7.4.2 */ |
int |
jbig2_symbol_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data) |
{ |
Jbig2SymbolDictParams params; |
uint16_t flags; |
int sdat_bytes; |
int offset; |
Jbig2ArithCx *GB_stats = NULL; |
Jbig2ArithCx *GR_stats = NULL; |
if (segment->data_length < 10) |
goto too_short; |
/* 7.4.2.1.1 */ |
flags = jbig2_get_int16(segment_data); |
params.SDHUFF = flags & 1; |
params.SDREFAGG = (flags >> 1) & 1; |
params.SDTEMPLATE = (flags >> 10) & 3; |
params.SDRTEMPLATE = (flags >> 12) & 1; |
params.SDHUFFDH = NULL; |
params.SDHUFFDW = NULL; |
params.SDHUFFBMSIZE = NULL; |
params.SDHUFFAGGINST = NULL; |
if (params.SDHUFF) { |
switch ((flags & 0x000c) >> 2) { |
case 0: /* Table B.4 */ |
params.SDHUFFDH = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_D); |
break; |
case 1: /* Table B.5 */ |
params.SDHUFFDH = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_E); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary uses custom DH huffman table (NYI)"); |
case 2: |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary specified invalid huffman table"); |
break; |
} |
switch ((flags & 0x0030) >> 4) { |
case 0: /* Table B.2 */ |
params.SDHUFFDW = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_B); |
break; |
case 1: /* Table B.3 */ |
params.SDHUFFDW = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_C); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary uses custom DW huffman table (NYI)"); |
case 2: |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary specified invalid huffman table"); |
break; |
} |
if (flags & 0x0040) { |
/* Custom table from referred segment */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary uses custom BMSIZE huffman table (NYI)"); |
} else { |
/* Table B.1 */ |
params.SDHUFFBMSIZE = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_A); |
} |
if (flags & 0x0080) { |
/* Custom table from referred segment */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol dictionary uses custom REFAGG huffman table (NYI)"); |
} else { |
/* Table B.1 */ |
params.SDHUFFAGGINST = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_A); |
} |
} |
/* FIXME: there are quite a few of these conditions to check */ |
/* maybe #ifdef CONFORMANCE and a separate routine */ |
if (!params.SDHUFF) { |
if (flags & 0x000c) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"SDHUFF is zero, but contrary to spec SDHUFFDH is not."); |
} |
if (flags & 0x0030) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"SDHUFF is zero, but contrary to spec SDHUFFDW is not."); |
} |
} |
if (flags & 0x0080) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"bitmap coding context is used (NYI) symbol data likely to be garbage!"); |
} |
/* 7.4.2.1.2 */ |
sdat_bytes = params.SDHUFF ? 0 : params.SDTEMPLATE == 0 ? 8 : 2; |
memcpy(params.sdat, segment_data + 2, sdat_bytes); |
offset = 2 + sdat_bytes; |
/* 7.4.2.1.3 */ |
if (params.SDREFAGG && !params.SDRTEMPLATE) { |
if (offset + 4 > segment->data_length) |
goto too_short; |
memcpy(params.sdrat, segment_data + offset, 4); |
offset += 4; |
} else { |
/* sdrat is meaningless if SDRTEMPLATE is 1, but set a value |
to avoid confusion if anybody looks */ |
memset(params.sdrat, 0, 4); |
} |
if (offset + 8 > segment->data_length) |
goto too_short; |
/* 7.4.2.1.4 */ |
params.SDNUMEXSYMS = jbig2_get_int32(segment_data + offset); |
/* 7.4.2.1.5 */ |
params.SDNUMNEWSYMS = jbig2_get_int32(segment_data + offset + 4); |
offset += 8; |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"symbol dictionary, flags=%04x, %d exported syms, %d new syms", |
flags, params.SDNUMEXSYMS, params.SDNUMNEWSYMS); |
/* 7.4.2.2 (2) */ |
{ |
int n_dicts = jbig2_sd_count_referred(ctx, segment); |
Jbig2SymbolDict **dicts = NULL; |
params.SDINSYMS = NULL; |
if (n_dicts > 0) { |
dicts = jbig2_sd_list_referred(ctx, segment); |
params.SDINSYMS = jbig2_sd_cat(ctx, n_dicts, dicts); |
} |
if (params.SDINSYMS != NULL) { |
params.SDNUMINSYMS = params.SDINSYMS->n_symbols; |
} else { |
params.SDNUMINSYMS = 0; |
} |
} |
/* 7.4.2.2 (4) */ |
if (!params.SDHUFF) { |
int stats_size = params.SDTEMPLATE == 0 ? 65536 : |
params.SDTEMPLATE == 1 ? 8192 : 1024; |
GB_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GB_stats, 0, stats_size); |
if (params.SDREFAGG) { |
stats_size = params.SDRTEMPLATE ? 1 << 10 : 1 << 13; |
GR_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GR_stats, 0, stats_size); |
} |
} |
if (flags & 0x0100) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"segment marks bitmap coding context as retained (NYI)"); |
} |
segment->result = (void *)jbig2_decode_symbol_dict(ctx, segment, |
¶ms, |
segment_data + offset, |
segment->data_length - offset, |
GB_stats, GR_stats); |
#ifdef DUMP_SYMDICT |
if (segment->result) jbig2_dump_symbol_dict(ctx, segment); |
#endif |
if (params.SDHUFF) { |
jbig2_release_huffman_table(ctx, params.SDHUFFDH); |
jbig2_release_huffman_table(ctx, params.SDHUFFDW); |
jbig2_release_huffman_table(ctx, params.SDHUFFBMSIZE); |
jbig2_release_huffman_table(ctx, params.SDHUFFAGGINST); |
} |
/* todo: retain or free GB_stats, GR_stats */ |
return (segment->result != NULL) ? 0 : -1; |
too_short: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_symbol_dict.h |
---|
0,0 → 1,56 |
/* |
jbig2dec |
Copyright (C) 2001-2002 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* symbol dictionary header */ |
/* the results of decoding a symbol dictionary */ |
typedef struct { |
int n_symbols; |
Jbig2Image **glyphs; |
} Jbig2SymbolDict; |
/* decode a symbol dictionary segment and store the results */ |
int |
jbig2_symbol_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const byte *segment_data); |
/* get a particular glyph by index */ |
Jbig2Image * |
jbig2_sd_glyph(Jbig2SymbolDict *dict, unsigned int id); |
/* return a new empty symbol dict */ |
Jbig2SymbolDict * |
jbig2_sd_new(Jbig2Ctx *ctx, int n_symbols); |
/* release the memory associated with a symbol dict */ |
void |
jbig2_sd_release(Jbig2Ctx *ctx, Jbig2SymbolDict *dict); |
/* generate a new symbol dictionary by concatenating a list of |
existing dictionaries */ |
Jbig2SymbolDict * |
jbig2_sd_cat(Jbig2Ctx *ctx, int n_dicts, |
Jbig2SymbolDict **dicts); |
/* count the number of dictionary segments referred |
to by the given segment */ |
int |
jbig2_sd_count_referred(Jbig2Ctx *ctx, Jbig2Segment *segment); |
/* return an array of pointers to symbol dictionaries referred |
to by a segment */ |
Jbig2SymbolDict ** |
jbig2_sd_list_referred(Jbig2Ctx *ctx, Jbig2Segment *segment); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_text.c |
---|
0,0 → 1,787 |
/* |
jbig2dec |
Copyright (C) 2002-2008 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include "os_types.h" |
#include <stddef.h> |
#include <string.h> /* memset() */ |
#include "jbig2.h" |
#include "jbig2_priv.h" |
#include "jbig2_arith.h" |
#include "jbig2_arith_int.h" |
#include "jbig2_arith_iaid.h" |
#include "jbig2_huffman.h" |
#include "jbig2_generic.h" |
#include "jbig2_symbol_dict.h" |
#include "jbig2_text.h" |
/** |
* jbig2_decode_text_region: decode a text region segment |
* |
* @ctx: jbig2 decoder context |
* @segment: jbig2 segment (header) structure |
* @params: parameters from the text region header |
* @dicts: an array of referenced symbol dictionaries |
* @n_dicts: the number of referenced symbol dictionaries |
* @image: image structure in which to store the decoded region bitmap |
* @data: pointer to text region data to be decoded |
* @size: length of text region data |
* |
* Implements the text region decoding procedure |
* described in section 6.4 of the JBIG2 spec. |
* |
* returns: 0 on success |
**/ |
int |
jbig2_decode_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const Jbig2TextRegionParams *params, |
const Jbig2SymbolDict * const *dicts, const int n_dicts, |
Jbig2Image *image, |
const byte *data, const size_t size, |
Jbig2ArithCx *GR_stats, Jbig2ArithState *as, Jbig2WordStream *ws) |
{ |
/* relevent bits of 6.4.4 */ |
uint32_t NINSTANCES; |
uint32_t ID; |
int32_t STRIPT; |
int32_t FIRSTS; |
int32_t DT; |
int32_t DFS; |
int32_t IDS; |
int32_t CURS; |
int32_t CURT; |
int S,T; |
int x,y; |
bool first_symbol; |
uint32_t index, SBNUMSYMS; |
Jbig2Image *IB; |
Jbig2HuffmanState *hs = NULL; |
Jbig2HuffmanTable *SBSYMCODES = NULL; |
int code = 0; |
int RI; |
SBNUMSYMS = 0; |
for (index = 0; index < n_dicts; index++) { |
SBNUMSYMS += dicts[index]->n_symbols; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"symbol list contains %d glyphs in %d dictionaries", SBNUMSYMS, n_dicts); |
if (params->SBHUFF) { |
Jbig2HuffmanTable *runcodes; |
Jbig2HuffmanParams runcodeparams; |
Jbig2HuffmanLine runcodelengths[35]; |
Jbig2HuffmanLine *symcodelengths; |
Jbig2HuffmanParams symcodeparams; |
int code, err, len, range, r; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"huffman coded text region"); |
hs = jbig2_huffman_new(ctx, ws); |
/* 7.4.3.1.7 - decode symbol ID Huffman table */ |
/* this is actually part of the segment header, but it is more |
convenient to handle it here */ |
/* parse and build the runlength code huffman table */ |
for (index = 0; index < 35; index++) { |
runcodelengths[index].PREFLEN = jbig2_huffman_get_bits(hs, 4); |
runcodelengths[index].RANGELEN = 0; |
runcodelengths[index].RANGELOW = index; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
" read runcode%d length %d", index, runcodelengths[index].PREFLEN); |
} |
runcodeparams.HTOOB = 0; |
runcodeparams.lines = runcodelengths; |
runcodeparams.n_lines = 35; |
runcodes = jbig2_build_huffman_table(ctx, &runcodeparams); |
if (runcodes == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"error constructing symbol id runcode table!"); |
return -1; |
} |
/* decode the symbol id codelengths using the runlength table */ |
symcodelengths = jbig2_alloc(ctx->allocator, SBNUMSYMS*sizeof(Jbig2HuffmanLine)); |
if (symcodelengths == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"memory allocation failure reading symbol ID huffman table!"); |
return -1; |
} |
index = 0; |
while (index < SBNUMSYMS) { |
code = jbig2_huffman_get(hs, runcodes, &err); |
if (err != 0 || code < 0 || code >= 35) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"error reading symbol ID huffman table!"); |
return err ? err : -1; |
} |
if (code < 32) { |
len = code; |
range = 1; |
} else { |
if (code == 32) { |
len = symcodelengths[index-1].PREFLEN; |
if (index < 1) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"error decoding symbol id table: run length with no antecedent!"); |
/* todo: memory cleanup */ |
return -1; |
} |
} else { |
len = 0; /* code == 33 or 34 */ |
} |
if (code == 32) range = jbig2_huffman_get_bits(hs, 2) + 3; |
else if (code == 33) range = jbig2_huffman_get_bits(hs, 3) + 3; |
else if (code == 34) range = jbig2_huffman_get_bits(hs, 7) + 11; |
} |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
" read runcode%d at index %d (length %d range %d)", code, index, len, range); |
if (index+range > SBNUMSYMS) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"runlength extends %d entries beyond the end of symbol id table!", |
index+range - SBNUMSYMS); |
range = SBNUMSYMS - index; |
} |
for (r = 0; r < range; r++) { |
symcodelengths[index+r].PREFLEN = len; |
symcodelengths[index+r].RANGELEN = 0; |
symcodelengths[index+r].RANGELOW = index + r; |
} |
index += r; |
} |
if (index < SBNUMSYMS) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"runlength codes do not cover the available symbol set"); |
} |
symcodeparams.HTOOB = 0; |
symcodeparams.lines = symcodelengths; |
symcodeparams.n_lines = SBNUMSYMS; |
/* skip to byte boundary */ |
jbig2_huffman_skip(hs); |
/* finally, construct the symbol id huffman table itself */ |
SBSYMCODES = jbig2_build_huffman_table(ctx, &symcodeparams); |
jbig2_free(ctx->allocator, symcodelengths); |
jbig2_release_huffman_table(ctx, runcodes); |
if (SBSYMCODES == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"could not construct Symbol ID huffman table!"); |
return -1; |
} |
} |
/* 6.4.5 (1) */ |
jbig2_image_clear(ctx, image, params->SBDEFPIXEL); |
/* 6.4.6 */ |
if (params->SBHUFF) { |
STRIPT = jbig2_huffman_get(hs, params->SBHUFFDT, &code); |
} else { |
code = jbig2_arith_int_decode(params->IADT, as, &STRIPT); |
} |
/* 6.4.5 (2) */ |
STRIPT *= -(params->SBSTRIPS); |
FIRSTS = 0; |
NINSTANCES = 0; |
/* 6.4.5 (3) */ |
while (NINSTANCES < params->SBNUMINSTANCES) { |
/* (3b) */ |
if (params->SBHUFF) { |
DT = jbig2_huffman_get(hs, params->SBHUFFDT, &code); |
} else { |
code = jbig2_arith_int_decode(params->IADT, as, &DT); |
} |
DT *= params->SBSTRIPS; |
STRIPT += DT; |
first_symbol = TRUE; |
/* 6.4.5 (3c) - decode symbols in strip */ |
for (;;) { |
/* (3c.i) */ |
if (first_symbol) { |
/* 6.4.7 */ |
if (params->SBHUFF) { |
DFS = jbig2_huffman_get(hs, params->SBHUFFFS, &code); |
} else { |
code = jbig2_arith_int_decode(params->IAFS, as, &DFS); |
} |
FIRSTS += DFS; |
CURS = FIRSTS; |
first_symbol = FALSE; |
} else { |
/* (3c.ii) / 6.4.8 */ |
if (params->SBHUFF) { |
IDS = jbig2_huffman_get(hs, params->SBHUFFDS, &code); |
} else { |
code = jbig2_arith_int_decode(params->IADS, as, &IDS); |
} |
if (code) { |
break; |
} |
CURS += IDS + params->SBDSOFFSET; |
} |
/* (3c.iii) / 6.4.9 */ |
if (params->SBSTRIPS == 1) { |
CURT = 0; |
} else if (params->SBHUFF) { |
CURT = jbig2_huffman_get_bits(hs, params->LOGSBSTRIPS); |
} else { |
code = jbig2_arith_int_decode(params->IAIT, as, &CURT); |
} |
T = STRIPT + CURT; |
/* (3b.iv) / 6.4.10 - decode the symbol id */ |
if (params->SBHUFF) { |
ID = jbig2_huffman_get(hs, SBSYMCODES, &code); |
} else { |
code = jbig2_arith_iaid_decode(params->IAID, as, (int *)&ID); |
} |
if (ID >= SBNUMSYMS) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"symbol id out of range! (%d/%d)", ID, SBNUMSYMS); |
} |
/* (3c.v) / 6.4.11 - look up the symbol bitmap IB */ |
{ |
uint32_t id = ID; |
index = 0; |
while (id >= dicts[index]->n_symbols) |
id -= dicts[index++]->n_symbols; |
IB = jbig2_image_clone(ctx, dicts[index]->glyphs[id]); |
} |
if (params->SBREFINE) { |
if (params->SBHUFF) { |
RI = jbig2_huffman_get_bits(hs, 1); |
} else { |
code = jbig2_arith_int_decode(params->IARI, as, &RI); |
} |
} else { |
RI = 0; |
} |
if (RI) { |
Jbig2RefinementRegionParams rparams; |
Jbig2Image *IBO; |
int32_t RDW, RDH, RDX, RDY; |
Jbig2Image *refimage; |
int BMSIZE = 0; |
/* 6.4.11 (1, 2, 3, 4) */ |
if (!params->SBHUFF) { |
code = jbig2_arith_int_decode(params->IARDW, as, &RDW); |
code = jbig2_arith_int_decode(params->IARDH, as, &RDH); |
code = jbig2_arith_int_decode(params->IARDX, as, &RDX); |
code = jbig2_arith_int_decode(params->IARDY, as, &RDY); |
} else { |
RDW = jbig2_huffman_get(hs, params->SBHUFFRDW, &code); |
RDH = jbig2_huffman_get(hs, params->SBHUFFRDH, &code); |
RDX = jbig2_huffman_get(hs, params->SBHUFFRDX, &code); |
RDY = jbig2_huffman_get(hs, params->SBHUFFRDY, &code); |
BMSIZE = jbig2_huffman_get(hs, params->SBHUFFRSIZE, &code); |
jbig2_huffman_skip(hs); |
} |
/* 6.4.11 (6) */ |
IBO = IB; |
refimage = jbig2_image_new(ctx, IBO->width + RDW, |
IBO->height + RDH); |
if (refimage == NULL) { |
jbig2_image_release(ctx, IBO); |
if (params->SBHUFF) { |
jbig2_release_huffman_table(ctx, SBSYMCODES); |
} |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, |
segment->number, |
"couldn't allocate reference image"); |
} |
/* Table 12 */ |
rparams.GRTEMPLATE = params->SBRTEMPLATE; |
rparams.reference = IBO; |
rparams.DX = (RDW >> 1) + RDX; |
rparams.DY = (RDH >> 1) + RDY; |
rparams.TPGRON = 0; |
memcpy(rparams.grat, params->sbrat, 4); |
jbig2_decode_refinement_region(ctx, segment, |
&rparams, as, refimage, GR_stats); |
IB = refimage; |
jbig2_image_release(ctx, IBO); |
/* 6.4.11 (7) */ |
if (params->SBHUFF) { |
jbig2_huffman_advance(hs, BMSIZE); |
} |
} |
/* (3c.vi) */ |
if ((!params->TRANSPOSED) && (params->REFCORNER > 1)) { |
CURS += IB->width - 1; |
} else if ((params->TRANSPOSED) && !(params->REFCORNER & 1)) { |
CURS += IB->height - 1; |
} |
/* (3c.vii) */ |
S = CURS; |
/* (3c.viii) */ |
if (!params->TRANSPOSED) { |
switch (params->REFCORNER) { |
case JBIG2_CORNER_TOPLEFT: x = S; y = T; break; |
case JBIG2_CORNER_TOPRIGHT: x = S - IB->width + 1; y = T; break; |
case JBIG2_CORNER_BOTTOMLEFT: x = S; y = T - IB->height + 1; break; |
case JBIG2_CORNER_BOTTOMRIGHT: x = S - IB->width + 1; y = T - IB->height + 1; break; |
} |
} else { /* TRANSPOSED */ |
switch (params->REFCORNER) { |
case JBIG2_CORNER_TOPLEFT: x = T; y = S; break; |
case JBIG2_CORNER_TOPRIGHT: x = T - IB->width + 1; y = S; break; |
case JBIG2_CORNER_BOTTOMLEFT: x = T; y = S - IB->height + 1; break; |
case JBIG2_CORNER_BOTTOMRIGHT: x = T - IB->width + 1; y = S - IB->height + 1; break; |
} |
} |
/* (3c.ix) */ |
#ifdef JBIG2_DEBUG |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"composing glyph id %d: %dx%d @ (%d,%d) symbol %d/%d", |
ID, IB->width, IB->height, x, y, NINSTANCES + 1, |
params->SBNUMINSTANCES); |
#endif |
jbig2_image_compose(ctx, image, IB, x, y, params->SBCOMBOP); |
/* (3c.x) */ |
if ((!params->TRANSPOSED) && (params->REFCORNER < 2)) { |
CURS += IB->width -1 ; |
} else if ((params->TRANSPOSED) && (params->REFCORNER & 1)) { |
CURS += IB->height - 1; |
} |
/* (3c.xi) */ |
NINSTANCES++; |
jbig2_image_release(ctx, IB); |
} |
/* end strip */ |
} |
/* 6.4.5 (4) */ |
if (params->SBHUFF) { |
jbig2_release_huffman_table(ctx, SBSYMCODES); |
} |
return 0; |
} |
/** |
* jbig2_text_region: read a text region segment header |
**/ |
int |
jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data) |
{ |
int offset = 0; |
Jbig2RegionSegmentInfo region_info; |
Jbig2TextRegionParams params; |
Jbig2Image *image; |
Jbig2SymbolDict **dicts; |
int n_dicts; |
uint16_t flags; |
uint16_t huffman_flags = 0; |
Jbig2ArithCx *GR_stats = NULL; |
int code = 0; |
Jbig2WordStream *ws = NULL; |
Jbig2ArithState *as = NULL; |
/* 7.4.1 */ |
if (segment->data_length < 17) |
goto too_short; |
jbig2_get_region_segment_info(®ion_info, segment_data); |
offset += 17; |
/* 7.4.3.1.1 */ |
flags = jbig2_get_int16(segment_data + offset); |
offset += 2; |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"text region header flags 0x%04x", flags); |
params.SBHUFF = flags & 0x0001; |
params.SBREFINE = flags & 0x0002; |
params.LOGSBSTRIPS = (flags & 0x000c) >> 2; |
params.SBSTRIPS = 1 << params.LOGSBSTRIPS; |
params.REFCORNER = (flags & 0x0030) >> 4; |
params.TRANSPOSED = flags & 0x0040; |
params.SBCOMBOP = (flags & 0x0180) >> 7; |
params.SBDEFPIXEL = flags & 0x0200; |
/* SBDSOFFSET is a signed 5 bit integer */ |
params.SBDSOFFSET = (flags & 0x7C00) >> 10; |
if (params.SBDSOFFSET > 0x0f) params.SBDSOFFSET -= 0x20; |
params.SBRTEMPLATE = flags & 0x8000; |
if (params.SBDSOFFSET) { |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"text region has SBDSOFFSET %d", params.SBDSOFFSET); |
} |
if (params.SBHUFF) /* Huffman coding */ |
{ |
/* 7.4.3.1.2 */ |
huffman_flags = jbig2_get_int16(segment_data + offset); |
offset += 2; |
if (huffman_flags & 0x8000) |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"reserved bit 15 of text region huffman flags is not zero"); |
} |
else /* arithmetic coding */ |
{ |
/* 7.4.3.1.3 */ |
if ((params.SBREFINE) && !(params.SBRTEMPLATE)) |
{ |
params.sbrat[0] = segment_data[offset]; |
params.sbrat[1] = segment_data[offset + 1]; |
params.sbrat[2] = segment_data[offset + 2]; |
params.sbrat[3] = segment_data[offset + 3]; |
offset += 4; |
} else { |
/* zero these for the sake of later debug messages */ |
memset(params.sbrat, 0, sizeof(params.sbrat)); |
} |
} |
/* 7.4.3.1.4 */ |
params.SBNUMINSTANCES = jbig2_get_int32(segment_data + offset); |
offset += 4; |
if (params.SBHUFF) { |
/* 7.4.3.1.5 - Symbol ID Huffman table */ |
/* ...this is handled in the segment body decoder */ |
/* 7.4.3.1.6 - Other Huffman table selection */ |
switch (huffman_flags & 0x0003) { |
case 0: /* Table B.6 */ |
params.SBHUFFFS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_F); |
break; |
case 1: /* Table B.7 */ |
params.SBHUFFFS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_G); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom FS huffman table (NYI)"); |
break; |
case 2: /* invalid */ |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region specified invalid FS huffman table"); |
break; |
} |
switch ((huffman_flags & 0x000c) >> 2) { |
case 0: /* Table B.8 */ |
params.SBHUFFDS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_H); |
break; |
case 1: /* Table B.9 */ |
params.SBHUFFDS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_I); |
break; |
case 2: /* Table B.10 */ |
params.SBHUFFDS = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_J); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom DS huffman table (NYI)"); |
break; |
} |
switch ((huffman_flags & 0x0030) >> 4) { |
case 0: /* Table B.11 */ |
params.SBHUFFDT = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_K); |
break; |
case 1: /* Table B.12 */ |
params.SBHUFFDT = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_L); |
break; |
case 2: /* Table B.13 */ |
params.SBHUFFDT = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_M); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom DT huffman table (NYI)"); |
break; |
} |
switch ((huffman_flags & 0x00c0) >> 6) { |
case 0: /* Table B.14 */ |
params.SBHUFFRDW = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_N); |
break; |
case 1: /* Table B.15 */ |
params.SBHUFFRDW = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom RDW huffman table (NYI)"); |
break; |
case 2: /* invalid */ |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region specified invalid RDW huffman table"); |
break; |
} |
switch ((huffman_flags & 0x0300) >> 8) { |
case 0: /* Table B.14 */ |
params.SBHUFFRDH = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_N); |
break; |
case 1: /* Table B.15 */ |
params.SBHUFFRDH = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom RDH huffman table (NYI)"); |
break; |
case 2: /* invalid */ |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region specified invalid RDH huffman table"); |
break; |
} |
switch ((huffman_flags & 0x0c00) >> 10) { |
case 0: /* Table B.14 */ |
params.SBHUFFRDX = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_N); |
break; |
case 1: /* Table B.15 */ |
params.SBHUFFRDX = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom RDX huffman table (NYI)"); |
break; |
case 2: /* invalid */ |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region specified invalid RDX huffman table"); |
break; |
} |
switch ((huffman_flags & 0x3000) >> 12) { |
case 0: /* Table B.14 */ |
params.SBHUFFRDY = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_N); |
break; |
case 1: /* Table B.15 */ |
params.SBHUFFRDY = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_O); |
break; |
case 3: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom RDY huffman table (NYI)"); |
break; |
case 2: /* invalid */ |
default: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region specified invalid RDY huffman table"); |
break; |
} |
switch ((huffman_flags & 0x4000) >> 14) { |
case 0: /* Table B.1 */ |
params.SBHUFFRSIZE = jbig2_build_huffman_table(ctx, |
&jbig2_huffman_params_A); |
break; |
case 1: /* Custom table from referred segment */ |
/* We handle this case later by leaving the table as NULL */ |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region uses custom RSIZE huffman table (NYI)"); |
break; |
} |
if (huffman_flags & 0x8000) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"text region huffman flags bit 15 is set, contrary to spec"); |
} |
/* 7.4.3.1.7 */ |
/* For convenience this is done in the body decoder routine */ |
} |
jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, |
"text region: %d x %d @ (%d,%d) %d symbols", |
region_info.width, region_info.height, |
region_info.x, region_info.y, params.SBNUMINSTANCES); |
/* 7.4.3.2 (2) - compose the list of symbol dictionaries */ |
n_dicts = jbig2_sd_count_referred(ctx, segment); |
if (n_dicts != 0) { |
dicts = jbig2_sd_list_referred(ctx, segment); |
} else { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"text region refers to no symbol dictionaries!"); |
} |
if (dicts == NULL) { |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"unable to retrive symbol dictionaries!" |
" previous parsing error?"); |
} else { |
int index; |
if (dicts[0] == NULL) { |
return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, |
segment->number, |
"unable to find first referenced symbol dictionary!"); |
} |
for (index = 1; index < n_dicts; index++) |
if (dicts[index] == NULL) { |
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, |
"unable to find all referenced symbol dictionaries!"); |
n_dicts = index; |
} |
} |
/* 7.4.3.2 (3) */ |
if (!params.SBHUFF && params.SBREFINE) { |
int stats_size = params.SBRTEMPLATE ? 1 << 10 : 1 << 13; |
GR_stats = jbig2_alloc(ctx->allocator, stats_size); |
memset(GR_stats, 0, stats_size); |
} |
image = jbig2_image_new(ctx, region_info.width, region_info.height); |
if (image == NULL) { |
if (!params.SBHUFF && params.SBREFINE) { |
jbig2_free(ctx->allocator, GR_stats); |
} else if (params.SBHUFF) { |
jbig2_release_huffman_table(ctx, params.SBHUFFFS); |
jbig2_release_huffman_table(ctx, params.SBHUFFDS); |
jbig2_release_huffman_table(ctx, params.SBHUFFDT); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDX); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDY); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDW); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDH); |
jbig2_release_huffman_table(ctx, params.SBHUFFRSIZE); |
} |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"couldn't allocate text region image"); |
} |
ws = jbig2_word_stream_buf_new(ctx, segment_data + offset, segment->data_length - offset); |
if (!params.SBHUFF) { |
int SBSYMCODELEN, index; |
int SBNUMSYMS = 0; |
for (index = 0; index < n_dicts; index++) { |
SBNUMSYMS += dicts[index]->n_symbols; |
} |
as = jbig2_arith_new(ctx, ws); |
ws = 0; |
params.IADT = jbig2_arith_int_ctx_new(ctx); |
params.IAFS = jbig2_arith_int_ctx_new(ctx); |
params.IADS = jbig2_arith_int_ctx_new(ctx); |
params.IAIT = jbig2_arith_int_ctx_new(ctx); |
/* Table 31 */ |
for (SBSYMCODELEN = 0; (1 << SBSYMCODELEN) < SBNUMSYMS; SBSYMCODELEN++); |
params.IAID = jbig2_arith_iaid_ctx_new(ctx, SBSYMCODELEN); |
params.IARI = jbig2_arith_int_ctx_new(ctx); |
params.IARDW = jbig2_arith_int_ctx_new(ctx); |
params.IARDH = jbig2_arith_int_ctx_new(ctx); |
params.IARDX = jbig2_arith_int_ctx_new(ctx); |
params.IARDY = jbig2_arith_int_ctx_new(ctx); |
} |
code = jbig2_decode_text_region(ctx, segment, ¶ms, |
(const Jbig2SymbolDict * const *)dicts, n_dicts, image, |
segment_data + offset, segment->data_length - offset, |
GR_stats, as, ws); |
if (!params.SBHUFF && params.SBREFINE) { |
jbig2_free(ctx->allocator, GR_stats); |
} |
if (params.SBHUFF) { |
jbig2_release_huffman_table(ctx, params.SBHUFFFS); |
jbig2_release_huffman_table(ctx, params.SBHUFFDS); |
jbig2_release_huffman_table(ctx, params.SBHUFFDT); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDX); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDY); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDW); |
jbig2_release_huffman_table(ctx, params.SBHUFFRDH); |
jbig2_release_huffman_table(ctx, params.SBHUFFRSIZE); |
} |
else { |
jbig2_arith_int_ctx_free(ctx, params.IADT); |
jbig2_arith_int_ctx_free(ctx, params.IAFS); |
jbig2_arith_int_ctx_free(ctx, params.IADS); |
jbig2_arith_int_ctx_free(ctx, params.IAIT); |
jbig2_arith_iaid_ctx_free(ctx, params.IAID); |
jbig2_arith_int_ctx_free(ctx, params.IARI); |
jbig2_arith_int_ctx_free(ctx, params.IARDW); |
jbig2_arith_int_ctx_free(ctx, params.IARDH); |
jbig2_arith_int_ctx_free(ctx, params.IARDX); |
jbig2_arith_int_ctx_free(ctx, params.IARDY); |
jbig2_free(ctx->allocator, as); |
jbig2_word_stream_buf_free(ctx, ws); |
} |
jbig2_free(ctx->allocator, dicts); |
/* todo: check errors */ |
if ((segment->flags & 63) == 4) { |
/* we have an intermediate region here. save it for later */ |
segment->result = image; |
} else { |
/* otherwise composite onto the page */ |
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, |
"composing %dx%d decoded text region onto page at (%d, %d)", |
region_info.width, region_info.height, region_info.x, region_info.y); |
jbig2_page_add_result(ctx, &ctx->pages[ctx->current_page], image, |
region_info.x, region_info.y, region_info.op); |
jbig2_image_release(ctx, image); |
} |
/* success */ |
return 0; |
too_short: |
return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, |
"Segment too short"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2_text.h |
---|
0,0 → 1,73 |
/* |
jbig2dec |
Copyright (C) 2002-2004 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/** |
* Headers for Text region handling |
**/ |
typedef enum { |
JBIG2_CORNER_BOTTOMLEFT = 0, |
JBIG2_CORNER_TOPLEFT = 1, |
JBIG2_CORNER_BOTTOMRIGHT = 2, |
JBIG2_CORNER_TOPRIGHT = 3 |
} Jbig2RefCorner; |
typedef struct { |
bool SBHUFF; |
bool SBREFINE; |
bool SBDEFPIXEL; |
Jbig2ComposeOp SBCOMBOP; |
bool TRANSPOSED; |
Jbig2RefCorner REFCORNER; |
int SBDSOFFSET; |
/* int SBW; */ |
/* int SBH; */ |
uint32_t SBNUMINSTANCES; |
int LOGSBSTRIPS; |
int SBSTRIPS; |
/* int SBNUMSYMS; */ |
/* SBSYMCODES */ |
/* SBSYMCODELEN */ |
/* SBSYMS */ |
Jbig2HuffmanTable *SBHUFFFS; |
Jbig2HuffmanTable *SBHUFFDS; |
Jbig2HuffmanTable *SBHUFFDT; |
Jbig2HuffmanTable *SBHUFFRDW; |
Jbig2HuffmanTable *SBHUFFRDH; |
Jbig2HuffmanTable *SBHUFFRDX; |
Jbig2HuffmanTable *SBHUFFRDY; |
Jbig2HuffmanTable *SBHUFFRSIZE; |
Jbig2ArithIntCtx *IADT; |
Jbig2ArithIntCtx *IAFS; |
Jbig2ArithIntCtx *IADS; |
Jbig2ArithIntCtx *IAIT; |
Jbig2ArithIaidCtx *IAID; |
Jbig2ArithIntCtx *IARI; |
Jbig2ArithIntCtx *IARDW; |
Jbig2ArithIntCtx *IARDH; |
Jbig2ArithIntCtx *IARDX; |
Jbig2ArithIntCtx *IARDY; |
bool SBRTEMPLATE; |
int8_t sbrat[4]; |
} Jbig2TextRegionParams; |
int |
jbig2_decode_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, |
const Jbig2TextRegionParams *params, |
const Jbig2SymbolDict * const *dicts, const int n_dicts, |
Jbig2Image *image, |
const byte *data, const size_t size, |
Jbig2ArithCx *GR_stats, |
Jbig2ArithState *as, Jbig2WordStream *ws); |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/jbig2dec.c |
---|
0,0 → 1,513 |
/* |
jbig2dec |
Copyright (C) 2001-2009 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#ifndef PACKAGE |
#define PACKAGE "jbig2dec" |
#endif |
#ifndef VERSION |
#define VERSION "unknown-version" |
#endif |
#include <stdio.h> |
#include <stdlib.h> |
#include <stddef.h> |
#include <string.h> |
#ifdef HAVE_GETOPT_H |
# include <getopt.h> |
#else |
# include "getopt.h" |
#endif |
#include "os_types.h" |
#include "sha1.h" |
#include "jbig2.h" |
#include "jbig2_image.h" |
typedef enum { |
usage,dump,render |
} jbig2dec_mode; |
typedef enum { |
jbig2dec_format_jbig2, |
jbig2dec_format_pbm, |
jbig2dec_format_png, |
jbig2dec_format_none |
} jbig2dec_format; |
typedef struct { |
jbig2dec_mode mode; |
int verbose, hash; |
SHA1_CTX *hash_ctx; |
char *output_file; |
jbig2dec_format output_format; |
} jbig2dec_params_t; |
static int print_version(void); |
static int print_usage(void); |
/* page hashing functions */ |
static void |
hash_init(jbig2dec_params_t *params) |
{ |
params->hash_ctx = malloc(sizeof(SHA1_CTX)); |
if (params->hash_ctx == NULL) { |
fprintf(stderr, "unable to allocate hash state\n"); |
params->hash = 0; |
return; |
} else { |
SHA1_Init(params->hash_ctx); |
} |
} |
static void |
hash_image(jbig2dec_params_t *params, Jbig2Image *image) |
{ |
unsigned int N = image->stride * image->height; |
SHA1_Update(params->hash_ctx, image->data, N); |
} |
static void |
hash_print(jbig2dec_params_t *params, FILE *out) |
{ |
unsigned char md[SHA1_DIGEST_SIZE]; |
char digest[2*SHA1_DIGEST_SIZE + 1]; |
int i; |
SHA1_Final(params->hash_ctx, md); |
for (i = 0; i < SHA1_DIGEST_SIZE; i++) { |
snprintf(&(digest[2*i]), 3, "%02x", md[i]); |
} |
fprintf(out, "%s", digest); |
} |
static void |
hash_free(jbig2dec_params_t *params) |
{ |
free(params->hash_ctx); |
params->hash_ctx = NULL; |
} |
static int |
set_output_format(jbig2dec_params_t *params, const char *format) |
{ |
#ifdef HAVE_LIBPNG |
/* this should really by strncasecmp() |
TODO: we need to provide our own for portability */ |
if (!strncmp(format, "png", 3) || !strncmp(format, "PNG", 3)) { |
params->output_format=jbig2dec_format_png; |
return 0; |
} |
#endif |
/* default to pbm */ |
params->output_format=jbig2dec_format_pbm; |
return 0; |
} |
static int |
parse_options(int argc, char *argv[], jbig2dec_params_t *params) |
{ |
static struct option long_options[] = { |
{"version", 0, NULL, 'V'}, |
{"help", 0, NULL, 'h'}, |
{"quiet", 0, NULL, 'q'}, |
{"verbose", 2, NULL, 'v'}, |
{"dump", 0, NULL, 'd'}, |
{"hash", 0, NULL, 'm'}, |
{"output", 1, NULL, 'o'}, |
{"format", 1, NULL, 't'}, |
{NULL, 0, NULL, 0} |
}; |
int option_idx = 1; |
int option; |
while (1) { |
option = getopt_long(argc, argv, |
"Vh?qvdo:t:", long_options, &option_idx); |
if (option == -1) break; |
switch (option) { |
case 0: /* unknown long option */ |
if (!params->verbose) fprintf(stdout, |
"unrecognized option: --%s\n", |
long_options[option_idx].name); |
break; |
case 'q': |
params->verbose = 0; |
break; |
case 'v': |
if (optarg) params->verbose = atoi(optarg); |
else params->verbose = 2; |
break; |
case 'h': |
case '?': |
params->mode = usage; |
break; |
case 'V': |
/* the GNU Coding Standards suggest --version |
should override all other options */ |
print_version(); |
exit(0); |
break; |
case 'd': |
params->mode=dump; |
break; |
case 'm': |
params->hash = 1; |
break; |
case 'o': |
params->output_file = strdup(optarg); |
break; |
case 't': |
set_output_format(params, optarg); |
break; |
default: |
if (!params->verbose) fprintf(stdout, |
"unrecognized option: -%c\n", option); |
break; |
} |
} |
return (optind); |
} |
static int |
print_version (void) |
{ |
fprintf(stdout, "%s %s\n", PACKAGE, VERSION); |
return 0; |
} |
static int |
print_usage (void) |
{ |
fprintf(stderr, |
"Usage: jbig2dec [options] <file.jbig2>\n" |
" or jbig2dec [options] <global_stream> <page_stream>\n" |
"\n" |
" When invoked with a single file, it attempts to parse it as\n" |
" a normal jbig2 file. Invoked with two files, it treats the\n" |
" first as the global segments, and the second as the segment\n" |
" stream for a particular page. This is useful for examining\n" |
" embedded streams.\n" |
"\n" |
" available options:\n" |
" -h --help this usage summary\n" |
" -q --quiet suppress diagnostic output\n" |
" -v --verbose set the verbosity level\n" |
" -d --dump print the structure of the jbig2 file\n" |
" rather than explicitly decoding\n" |
" --version program name and version information\n" |
" --hash print a hash of the decoded document\n" |
" -o <file> send decoded output to <file>\n" |
" Defaults to the the input with a different\n" |
" extension. Pass '-' for stdout.\n" |
" -t <type> force a particular output file format\n" |
#ifdef HAVE_LIBPNG |
" supported options are 'png' and 'pbm'\n" |
#else |
" the only supported option is 'pbm'\n" |
#endif |
"\n" |
); |
return 1; |
} |
static int |
error_callback(void *error_callback_data, const char *buf, Jbig2Severity severity, |
int32_t seg_idx) |
{ |
const jbig2dec_params_t *params = error_callback_data; |
char *type; |
char segment[22]; |
switch (severity) { |
case JBIG2_SEVERITY_DEBUG: |
if (params->verbose < 3) return 0; |
type = "DEBUG"; break;; |
case JBIG2_SEVERITY_INFO: |
if (params->verbose < 2) return 0; |
type = "info"; break;; |
case JBIG2_SEVERITY_WARNING: |
if (params->verbose < 1) return 0; |
type = "WARNING"; break;; |
case JBIG2_SEVERITY_FATAL: type = "FATAL ERROR"; break;; |
default: type = "unknown message"; break;; |
} |
if (seg_idx == -1) segment[0] = '\0'; |
else snprintf(segment, sizeof(segment), "(segment 0x%02x)", seg_idx); |
fprintf(stderr, "jbig2dec %s %s %s\n", type, buf, segment); |
return 0; |
} |
static char * |
make_output_filename(const char *input_filename, const char *extension) |
{ |
char *output_filename; |
const char *c, *e; |
int len; |
if (extension == NULL) { |
fprintf(stderr, "make_output_filename called with no extension!\n"); |
exit (1); |
} |
if (input_filename == NULL) |
c = "out"; |
else { |
/* strip any leading path */ |
c = strrchr(input_filename, '/'); /* *nix */ |
if (c == NULL) |
c = strrchr(input_filename, '\\'); /* win32/dos */ |
if (c != NULL) |
c++; /* skip the path separator */ |
else |
c = input_filename; /* no leading path */ |
} |
/* make sure we haven't just stripped the last character */ |
if (*c == '\0') |
c = "out"; |
/* strip the extension */ |
len = strlen(c); |
e = strrchr(c, '.'); |
if (e != NULL) |
len -= strlen(e); |
/* allocate enough space for the base + ext */ |
output_filename = malloc(len + strlen(extension) + 1); |
if (output_filename == NULL) { |
fprintf(stderr, "couldn't allocate memory for output_filename\n"); |
exit (1); |
} |
strncpy(output_filename, c, len); |
strncpy(output_filename + len, extension, strlen(extension)); |
*(output_filename + len + strlen(extension)) = '\0'; |
/* return the new string */ |
return (output_filename); |
} |
static int |
write_page_image(jbig2dec_params_t *params, Jbig2Image *image) |
{ |
if (!strncmp(params->output_file, "-", 2)) |
{ |
switch (params->output_format) { |
#ifdef HAVE_LIBPNG |
case jbig2dec_format_png: |
jbig2_image_write_png(image, stdout); |
break; |
#endif |
case jbig2dec_format_pbm: |
jbig2_image_write_pbm(image, stdout); |
break; |
default: |
fprintf(stderr, "unsupported output format.\n"); |
return 1; |
} |
} |
else |
{ |
if (params->verbose > 1) |
fprintf(stderr, "saving decoded page as '%s'\n", params->output_file); |
switch (params->output_format) { |
#ifdef HAVE_LIBPNG |
case jbig2dec_format_png: |
jbig2_image_write_png_file(image, params->output_file); |
break; |
#endif |
case jbig2dec_format_pbm: |
jbig2_image_write_pbm_file(image, params->output_file); |
break; |
default: |
fprintf(stderr, "unsupported output format.\n"); |
return 1; |
} |
} |
return 0; |
} |
static int |
write_document_hash(jbig2dec_params_t *params) |
{ |
FILE *out; |
if (!strncmp(params->output_file, "-", 2)) { |
out = stderr; |
} else { |
out = stdout; |
} |
fprintf(out, "Hash of decoded document: "); |
hash_print(params, out); |
fprintf(out, "\n"); |
return 0; |
} |
int |
main (int argc, char **argv) |
{ |
FILE *f = NULL, *f_page = NULL; |
Jbig2Ctx *ctx; |
uint8_t buf[4096]; |
jbig2dec_params_t params; |
int filearg; |
/* set defaults */ |
params.mode = render; |
params.verbose = 1; |
params.hash = 0; |
params.output_file = NULL; |
params.output_format = jbig2dec_format_none; |
filearg = parse_options(argc, argv, ¶ms); |
if (params.hash) hash_init(¶ms); |
switch (params.mode) { |
case usage: |
print_usage(); |
exit (0); |
break; |
case dump: |
fprintf(stderr, "Sorry, segment dump not yet implemented\n"); |
break; |
case render: |
if ((argc - filearg) == 1) |
/* only one argument--open as a jbig2 file */ |
{ |
char *fn = argv[filearg]; |
f = fopen(fn, "rb"); |
if (f == NULL) |
{ |
fprintf(stderr, "error opening %s\n", fn); |
return 1; |
} |
} |
else if ((argc - filearg) == 2) |
/* two arguments open as separate global and page streams */ |
{ |
char *fn = argv[filearg]; |
char *fn_page = argv[filearg+1]; |
f = fopen(fn, "rb"); |
if (f == NULL) |
{ |
fprintf(stderr, "error opening %s\n", fn); |
return 1; |
} |
f_page = fopen(fn_page, "rb"); |
if (f_page == NULL) |
{ |
fprintf(stderr, "error opening %s\n", fn_page); |
return 1; |
} |
} |
else |
/* any other number of arguments */ |
return print_usage(); |
ctx = jbig2_ctx_new(NULL, f_page != NULL ? JBIG2_OPTIONS_EMBEDDED : 0, |
NULL, |
error_callback, ¶ms); |
/* pull the whole file/global stream into memory */ |
for (;;) |
{ |
int n_bytes = fread(buf, 1, sizeof(buf), f); |
if (n_bytes <= 0) |
break; |
if (jbig2_data_in(ctx, buf, n_bytes)) |
break; |
} |
fclose(f); |
/* if there's a local page stream read that in its entirety */ |
if (f_page != NULL) |
{ |
Jbig2GlobalCtx *global_ctx = jbig2_make_global_ctx(ctx); |
ctx = jbig2_ctx_new(NULL, JBIG2_OPTIONS_EMBEDDED, global_ctx, |
error_callback, ¶ms); |
for (;;) |
{ |
int n_bytes = fread(buf, 1, sizeof(buf), f_page); |
if (n_bytes <= 0) |
break; |
if (jbig2_data_in(ctx, buf, n_bytes)) |
break; |
} |
fclose(f_page); |
jbig2_global_ctx_free(global_ctx); |
} |
/* retrieve and output the returned pages */ |
{ |
Jbig2Image *image; |
/* work around broken CVision embedded streams */ |
if (f_page != NULL) |
jbig2_complete_page(ctx); |
if (params.output_file == NULL) |
{ |
#ifdef HAVE_LIBPNG |
params.output_file = make_output_filename(argv[filearg], ".png"); |
params.output_format = jbig2dec_format_png; |
#else |
params.output_file = make_output_filename(argv[filearg], ".pbm"); |
params.output_format = jbig2dec_format_pbm; |
#endif |
} else { |
int len = strlen(params.output_file); |
if ((len >= 3) && (params.output_format == jbig2dec_format_none)) |
/* try to set the output type by the given extension */ |
set_output_format(¶ms, params.output_file + len - 3); |
} |
/* retrieve and write out all the completed pages */ |
while ((image = jbig2_page_out(ctx)) != NULL) { |
write_page_image(¶ms, image); |
if (params.hash) hash_image(¶ms, image); |
jbig2_release_page(ctx, image); |
} |
if (params.hash) write_document_hash(¶ms); |
} |
jbig2_ctx_free(ctx); |
} /* end params.mode switch */ |
if (params.output_file) free(params.output_file); |
if (params.hash) hash_free(¶ms); |
/* fin */ |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/memcmp.c |
---|
0,0 → 1,49 |
/* |
jbig2dec |
Copyright (C) 2001-2005 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include <stddef.h> |
/* replacement for broken memcmp() */ |
/* |
* compares two byte strings 'a' and 'b', both assumed to be 'len' bytes long |
* returns zero if the two strings are identical, otherwise returns -1 or 1 |
* depending on the relative magnitude of the first differing elements, |
* considered as unsigned chars |
*/ |
int memcmp(const void *b1, const void *b2, size_t len) |
{ |
unsigned char *a, *b; |
size_t i; |
a = (unsigned char *)b1; |
b = (unsigned char *)b2; |
for(i = 0; i < len; i++) { |
if (*a != *b) { |
/* strings differ */ |
return (*a < *b) ? -1 : 1; |
} |
a++; |
b++; |
} |
/* strings match */ |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/os_types.h |
---|
0,0 → 1,51 |
/* |
jbig2dec |
Copyright (C) 2003 Artifex Software, Inc. |
This software is distributed under license and may not |
be copied, modified or distributed except as expressly |
authorized under the terms of the license contained in |
the file LICENSE in this distribution. |
For further licensing information refer to http://artifex.com/ or |
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
*/ |
/* |
indirection layer for build and platform-specific definitions |
in general, this header should ensure that the stdint types are |
available, and that any optional compile flags are defined if |
the build system doesn't pass them directly. |
*/ |
#ifndef _JBIG2_OS_TYPES_H |
#define _JBIG2_OS_TYPES_H |
#if defined(__CYGWIN__) && !defined(HAVE_STDINT_H) |
# include <sys/types.h> |
# if defined(OLD_CYGWIN_SYS_TYPES) |
/* |
* Old versions of Cygwin have no stdint.h but define "MS types". Some of |
* them conflict with a standard type emulation provided by config_types.h |
* so we do a fixup here. |
*/ |
typedef u_int8_t uint8_t; |
typedef u_int16_t uint16_t; |
typedef u_int32_t uint32_t; |
#endif |
#elif defined(HAVE_CONFIG_H) |
# include "config_types.h" |
#elif defined(_WIN32) || defined(__WIN32__) |
# include "config_win32.h" |
#endif |
#if defined(HAVE_STDINT_H) || defined(__MACOS__) |
# include <stdint.h> |
#elif defined(__VMS) |
# include <inttypes.h> |
#endif |
#endif /* _JBIG2_OS_TYPES_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/sha1.c |
---|
0,0 → 1,375 |
/* |
SHA-1 in C |
By Steve Reid <sreid@sea-to-sky.net> |
100% Public Domain |
----------------- |
Modified 7/98 |
By James H. Brown <jbrown@burgoyne.com> |
Still 100% Public Domain |
Corrected a problem which generated improper hash values on 16 bit machines |
Routine SHA1Update changed from |
void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int |
len) |
to |
void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned |
long len) |
The 'len' parameter was declared an int which works fine on 32 bit machines. |
However, on 16 bit machines an int is too small for the shifts being done |
against |
it. This caused the hash function to generate incorrect values if len was |
greater than 8191 (8K - 1) due to the 'len << 3' on line 3 of SHA1Update(). |
Since the file IO in main() reads 16K at a time, any file 8K or larger would |
be guaranteed to generate the wrong hash (e.g. Test Vector #3, a million |
"a"s). |
I also changed the declaration of variables i & j in SHA1Update to |
unsigned long from unsigned int for the same reason. |
These changes should make no difference to any 32 bit implementations since |
an |
int and a long are the same size in those environments. |
-- |
I also corrected a few compiler warnings generated by Borland C. |
1. Added #include <process.h> for exit() prototype |
2. Removed unused variable 'j' in SHA1Final |
3. Changed exit(0) to return(0) at end of main. |
ALL changes I made can be located by searching for comments containing 'JHB' |
----------------- |
Modified 8/98 |
By Steve Reid <sreid@sea-to-sky.net> |
Still 100% public domain |
1- Removed #include <process.h> and used return() instead of exit() |
2- Fixed overwriting of finalcount in SHA1Final() (discovered by Chris Hall) |
3- Changed email address from steve@edmweb.com to sreid@sea-to-sky.net |
----------------- |
Modified 4/01 |
By Saul Kravitz <Saul.Kravitz@celera.com> |
Still 100% PD |
Modified to run on Compaq Alpha hardware. |
----------------- |
Modified 07/2002 |
By Ralph Giles <giles@ghostscript.com> |
Still 100% public domain |
modified for use with stdint types, autoconf |
code cleanup, removed attribution comments |
switched SHA1Final() argument order for consistency |
use SHA1_ prefix for public api |
move public api to sha1.h |
*/ |
/* |
Test Vectors (from FIPS PUB 180-1) |
"abc" |
A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D |
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |
84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 |
A million repetitions of "a" |
34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F |
*/ |
/* #define SHA1HANDSOFF */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif |
#include <stdio.h> |
#include <string.h> |
#include "os_types.h" |
#include "sha1.h" |
void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]); |
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) |
/* blk0() and blk() perform the initial expand. */ |
/* I got the idea of expanding during the round function from SSLeay */ |
/* FIXME: can we do this in an endian-proof way? */ |
#ifdef WORDS_BIGENDIAN |
#define blk0(i) block->l[i] |
#else |
#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |
|(rol(block->l[i],8)&0x00FF00FF)) |
#endif |
#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ |
^block->l[(i+2)&15]^block->l[i&15],1)) |
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ |
#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); |
#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); |
#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); |
#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); |
#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); |
#ifdef VERBOSE /* SAK */ |
void SHAPrintContext(SHA1_CTX *context, char *msg){ |
printf("%s (%d,%d) %x %x %x %x %x\n", |
msg, |
context->count[0], context->count[1], |
context->state[0], |
context->state[1], |
context->state[2], |
context->state[3], |
context->state[4]); |
} |
#endif /* VERBOSE */ |
/* Hash a single 512-bit block. This is the core of the algorithm. */ |
void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]) |
{ |
uint32_t a, b, c, d, e; |
typedef union { |
uint8_t c[64]; |
uint32_t l[16]; |
} CHAR64LONG16; |
CHAR64LONG16* block; |
#ifdef SHA1HANDSOFF |
static uint8_t workspace[64]; |
block = (CHAR64LONG16*)workspace; |
memcpy(block, buffer, 64); |
#else |
block = (CHAR64LONG16*)buffer; |
#endif |
/* Copy context->state[] to working vars */ |
a = state[0]; |
b = state[1]; |
c = state[2]; |
d = state[3]; |
e = state[4]; |
/* 4 rounds of 20 operations each. Loop unrolled. */ |
R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); |
R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); |
R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); |
R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); |
R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); |
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); |
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); |
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); |
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); |
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); |
R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); |
R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); |
R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); |
R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); |
R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); |
R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); |
R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); |
R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); |
R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); |
R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); |
/* Add the working vars back into context.state[] */ |
state[0] += a; |
state[1] += b; |
state[2] += c; |
state[3] += d; |
state[4] += e; |
/* Wipe variables */ |
a = b = c = d = e = 0; |
} |
/* SHA1Init - Initialize new context */ |
void SHA1_Init(SHA1_CTX* context) |
{ |
/* SHA1 initialization constants */ |
context->state[0] = 0x67452301; |
context->state[1] = 0xEFCDAB89; |
context->state[2] = 0x98BADCFE; |
context->state[3] = 0x10325476; |
context->state[4] = 0xC3D2E1F0; |
context->count[0] = context->count[1] = 0; |
} |
/* Run your data through this. */ |
void SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len) |
{ |
size_t i, j; |
#ifdef VERBOSE |
SHAPrintContext(context, "before"); |
#endif |
j = (context->count[0] >> 3) & 63; |
if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; |
context->count[1] += (len >> 29); |
if ((j + len) > 63) { |
memcpy(&context->buffer[j], data, (i = 64-j)); |
SHA1_Transform(context->state, context->buffer); |
for ( ; i + 63 < len; i += 64) { |
SHA1_Transform(context->state, data + i); |
} |
j = 0; |
} |
else i = 0; |
memcpy(&context->buffer[j], &data[i], len - i); |
#ifdef VERBOSE |
SHAPrintContext(context, "after "); |
#endif |
} |
/* Add padding and return the message digest. */ |
void SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]) |
{ |
uint32_t i; |
uint8_t finalcount[8]; |
for (i = 0; i < 8; i++) { |
finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] |
>> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ |
} |
SHA1_Update(context, (uint8_t *)"\200", 1); |
while ((context->count[0] & 504) != 448) { |
SHA1_Update(context, (uint8_t *)"\0", 1); |
} |
SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */ |
for (i = 0; i < SHA1_DIGEST_SIZE; i++) { |
digest[i] = (uint8_t) |
((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); |
} |
/* Wipe variables */ |
i = 0; |
memset(context->buffer, 0, 64); |
memset(context->state, 0, 20); |
memset(context->count, 0, 8); |
memset(finalcount, 0, 8); /* SWR */ |
#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite its own static vars */ |
SHA1_Transform(context->state, context->buffer); |
#endif |
} |
/*************************************************************/ |
#if 0 |
int main(int argc, char** argv) |
{ |
int i, j; |
SHA1_CTX context; |
unsigned char digest[SHA1_DIGEST_SIZE], buffer[16384]; |
FILE* file; |
if (argc > 2) { |
puts("Public domain SHA-1 implementation - by Steve Reid <sreid@sea-to-sky.net>"); |
puts("Modified for 16 bit environments 7/98 - by James H. Brown <jbrown@burgoyne.com>"); /* JHB */ |
puts("Produces the SHA-1 hash of a file, or stdin if no file is specified."); |
return(0); |
} |
if (argc < 2) { |
file = stdin; |
} |
else { |
if (!(file = fopen(argv[1], "rb"))) { |
fputs("Unable to open file.", stderr); |
return(-1); |
} |
} |
SHA1_Init(&context); |
while (!feof(file)) { /* note: what if ferror(file) */ |
i = fread(buffer, 1, 16384, file); |
SHA1_Update(&context, buffer, i); |
} |
SHA1_Final(&context, digest); |
fclose(file); |
for (i = 0; i < SHA1_DIGEST_SIZE/4; i++) { |
for (j = 0; j < 4; j++) { |
printf("%02X", digest[i*4+j]); |
} |
putchar(' '); |
} |
putchar('\n'); |
return(0); /* JHB */ |
} |
#endif |
/* self test */ |
#ifdef TEST |
static char *test_data[] = { |
"abc", |
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", |
"A million repetitions of 'a'"}; |
static char *test_results[] = { |
"A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D", |
"84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1", |
"34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F"}; |
void digest_to_hex(const uint8_t digest[SHA1_DIGEST_SIZE], char *output) |
{ |
int i,j; |
char *c = output; |
for (i = 0; i < SHA1_DIGEST_SIZE/4; i++) { |
for (j = 0; j < 4; j++) { |
sprintf(c,"%02X", digest[i*4+j]); |
c += 2; |
} |
sprintf(c, " "); |
c += 1; |
} |
*(c - 1) = '\0'; |
} |
int main(int argc, char** argv) |
{ |
int k; |
SHA1_CTX context; |
uint8_t digest[20]; |
char output[80]; |
fprintf(stdout, "verifying SHA-1 implementation... "); |
for (k = 0; k < 2; k++){ |
SHA1_Init(&context); |
SHA1_Update(&context, (uint8_t*)test_data[k], strlen(test_data[k])); |
SHA1_Final(&context, digest); |
digest_to_hex(digest, output); |
if (strcmp(output, test_results[k])) { |
fprintf(stdout, "FAIL\n"); |
fprintf(stderr,"* hash of \"%s\" incorrect:\n", test_data[k]); |
fprintf(stderr,"\t%s returned\n", output); |
fprintf(stderr,"\t%s is correct\n", test_results[k]); |
return (1); |
} |
} |
/* million 'a' vector we feed separately */ |
SHA1_Init(&context); |
for (k = 0; k < 1000000; k++) |
SHA1_Update(&context, (uint8_t*)"a", 1); |
SHA1_Final(&context, digest); |
digest_to_hex(digest, output); |
if (strcmp(output, test_results[2])) { |
fprintf(stdout, "FAIL\n"); |
fprintf(stderr,"* hash of \"%s\" incorrect:\n", test_data[2]); |
fprintf(stderr,"\t%s returned\n", output); |
fprintf(stderr,"\t%s is correct\n", test_results[2]); |
return (1); |
} |
/* success */ |
fprintf(stdout, "ok\n"); |
return(0); |
} |
#endif /* TEST */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libjbig2dec/sha1.h |
---|
0,0 → 1,27 |
/* public api for steve reid's public domain SHA-1 implementation */ |
/* this file is in the public domain */ |
#ifndef __SHA1_H |
#define __SHA1_H |
#ifdef __cplusplus |
extern "C" { |
#endif |
typedef struct { |
uint32_t state[5]; |
uint32_t count[2]; |
uint8_t buffer[64]; |
} SHA1_CTX; |
#define SHA1_DIGEST_SIZE 20 |
void SHA1_Init(SHA1_CTX* context); |
void SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len); |
void SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]); |
#ifdef __cplusplus |
} |
#endif |
#endif /* __SHA1_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/Makefile |
---|
0,0 → 1,18 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = /media/maxim/E22406D62406AE1B/SVNKOS/contrib/sdk |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/zlib -I . |
SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(SRC)) |
default: $(patsubst %.c,%.o,$(SRC)) |
ar rcs libopenjpeg.a *.o |
rm *.o |
mv libopenjpeg.a ../lib |
%.o : %.c Makefile $(SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/bio.c |
---|
0,0 → 1,187 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup BIO BIO - Individual bit input-output stream */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
/** |
Write a bit |
@param bio BIO handle |
@param b Bit to write (0 or 1) |
*/ |
static void bio_putbit(opj_bio_t *bio, int b); |
/** |
Read a bit |
@param bio BIO handle |
@return Returns the read bit |
*/ |
static int bio_getbit(opj_bio_t *bio); |
/** |
Write a byte |
@param bio BIO handle |
@return Returns 0 if successful, returns 1 otherwise |
*/ |
static int bio_byteout(opj_bio_t *bio); |
/** |
Read a byte |
@param bio BIO handle |
@return Returns 0 if successful, returns 1 otherwise |
*/ |
static int bio_bytein(opj_bio_t *bio); |
/*@}*/ |
/*@}*/ |
/* |
========================================================== |
local functions |
========================================================== |
*/ |
static int bio_byteout(opj_bio_t *bio) { |
bio->buf = (bio->buf << 8) & 0xffff; |
bio->ct = bio->buf == 0xff00 ? 7 : 8; |
if (bio->bp >= bio->end) { |
return 1; |
} |
*bio->bp++ = bio->buf >> 8; |
return 0; |
} |
static int bio_bytein(opj_bio_t *bio) { |
bio->buf = (bio->buf << 8) & 0xffff; |
bio->ct = bio->buf == 0xff00 ? 7 : 8; |
if (bio->bp >= bio->end) { |
return 1; |
} |
bio->buf |= *bio->bp++; |
return 0; |
} |
static void bio_putbit(opj_bio_t *bio, int b) { |
if (bio->ct == 0) { |
bio_byteout(bio); |
} |
bio->ct--; |
bio->buf |= b << bio->ct; |
} |
static int bio_getbit(opj_bio_t *bio) { |
if (bio->ct == 0) { |
bio_bytein(bio); |
} |
bio->ct--; |
return (bio->buf >> bio->ct) & 1; |
} |
/* |
========================================================== |
Bit Input/Output interface |
========================================================== |
*/ |
opj_bio_t* bio_create(void) { |
opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t)); |
return bio; |
} |
void bio_destroy(opj_bio_t *bio) { |
if(bio) { |
opj_free(bio); |
} |
} |
int bio_numbytes(opj_bio_t *bio) { |
return (bio->bp - bio->start); |
} |
void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) { |
bio->start = bp; |
bio->end = bp + len; |
bio->bp = bp; |
bio->buf = 0; |
bio->ct = 8; |
} |
void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) { |
bio->start = bp; |
bio->end = bp + len; |
bio->bp = bp; |
bio->buf = 0; |
bio->ct = 0; |
} |
void bio_write(opj_bio_t *bio, int v, int n) { |
int i; |
for (i = n - 1; i >= 0; i--) { |
bio_putbit(bio, (v >> i) & 1); |
} |
} |
int bio_read(opj_bio_t *bio, int n) { |
int i, v; |
v = 0; |
for (i = n - 1; i >= 0; i--) { |
v += bio_getbit(bio) << i; |
} |
return v; |
} |
int bio_flush(opj_bio_t *bio) { |
bio->ct = 0; |
if (bio_byteout(bio)) { |
return 1; |
} |
if (bio->ct == 7) { |
bio->ct = 0; |
if (bio_byteout(bio)) { |
return 1; |
} |
} |
return 0; |
} |
int bio_inalign(opj_bio_t *bio) { |
bio->ct = 0; |
if ((bio->buf & 0xff) == 0xff) { |
if (bio_bytein(bio)) { |
return 1; |
} |
bio->ct = 0; |
} |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/bio.h |
---|
0,0 → 1,125 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __BIO_H |
#define __BIO_H |
/** |
@file bio.h |
@brief Implementation of an individual bit input-output (BIO) |
The functions in BIO.C have for goal to realize an individual bit input - output. |
*/ |
/** @defgroup BIO BIO - Individual bit input-output stream */ |
/*@{*/ |
/** |
Individual bit input-output stream (BIO) |
*/ |
typedef struct opj_bio { |
/** pointer to the start of the buffer */ |
unsigned char *start; |
/** pointer to the end of the buffer */ |
unsigned char *end; |
/** pointer to the present position in the buffer */ |
unsigned char *bp; |
/** temporary place where each byte is read or written */ |
unsigned int buf; |
/** coder : number of bits free to write. decoder : number of bits read */ |
int ct; |
} opj_bio_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a new BIO handle |
@return Returns a new BIO handle if successful, returns NULL otherwise |
*/ |
opj_bio_t* bio_create(void); |
/** |
Destroy a previously created BIO handle |
@param bio BIO handle to destroy |
*/ |
void bio_destroy(opj_bio_t *bio); |
/** |
Number of bytes written. |
@param bio BIO handle |
@return Returns the number of bytes written |
*/ |
int bio_numbytes(opj_bio_t *bio); |
/** |
Init encoder |
@param bio BIO handle |
@param bp Output buffer |
@param len Output buffer length |
*/ |
void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len); |
/** |
Init decoder |
@param bio BIO handle |
@param bp Input buffer |
@param len Input buffer length |
*/ |
void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len); |
/** |
Write bits |
@param bio BIO handle |
@param v Value of bits |
@param n Number of bits to write |
*/ |
void bio_write(opj_bio_t *bio, int v, int n); |
/** |
Read bits |
@param bio BIO handle |
@param n Number of bits to read |
@return Returns the corresponding read number |
*/ |
int bio_read(opj_bio_t *bio, int n); |
/** |
Flush bits |
@param bio BIO handle |
@return Returns 1 if successful, returns 0 otherwise |
*/ |
int bio_flush(opj_bio_t *bio); |
/** |
Passes the ending bits (coming from flushing) |
@param bio BIO handle |
@return Returns 1 if successful, returns 0 otherwise |
*/ |
int bio_inalign(opj_bio_t *bio); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __BIO_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/cio.c |
---|
0,0 → 1,191 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/* ----------------------------------------------------------------------- */ |
opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) { |
opj_cp_t *cp = NULL; |
opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t)); |
if(!cio) return NULL; |
cio->cinfo = cinfo; |
if(buffer && length) { |
/* wrap a user buffer containing the encoded image */ |
cio->openmode = OPJ_STREAM_READ; |
cio->buffer = buffer; |
cio->length = length; |
} |
else if(!buffer && !length && cinfo) { |
/* allocate a buffer for the encoded image */ |
cio->openmode = OPJ_STREAM_WRITE; |
switch(cinfo->codec_format) { |
case CODEC_J2K: |
cp = ((opj_j2k_t*)cinfo->j2k_handle)->cp; |
break; |
case CODEC_JP2: |
cp = ((opj_jp2_t*)cinfo->jp2_handle)->j2k->cp; |
break; |
default: |
opj_free(cio); |
return NULL; |
} |
cio->length = (unsigned int) (0.1625 * cp->img_size + 2000); /* 0.1625 = 1.3/8 and 2000 bytes as a minimum for headers */ |
cio->buffer = (unsigned char *)opj_malloc(cio->length); |
if(!cio->buffer) { |
opj_event_msg(cio->cinfo, EVT_ERROR, "Error allocating memory for compressed bitstream\n"); |
opj_free(cio); |
return NULL; |
} |
} |
else { |
opj_free(cio); |
return NULL; |
} |
/* Initialize byte IO */ |
cio->start = cio->buffer; |
cio->end = cio->buffer + cio->length; |
cio->bp = cio->buffer; |
return cio; |
} |
void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) { |
if(cio) { |
if(cio->openmode == OPJ_STREAM_WRITE) { |
/* destroy the allocated buffer */ |
opj_free(cio->buffer); |
} |
/* destroy the cio */ |
opj_free(cio); |
} |
} |
/* ----------------------------------------------------------------------- */ |
/* |
* Get position in byte stream. |
*/ |
int OPJ_CALLCONV cio_tell(opj_cio_t *cio) { |
return cio->bp - cio->start; |
} |
/* |
* Set position in byte stream. |
* |
* pos : position, in number of bytes, from the beginning of the stream |
*/ |
void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) { |
cio->bp = cio->start + pos; |
} |
/* |
* Number of bytes left before the end of the stream. |
*/ |
int cio_numbytesleft(opj_cio_t *cio) { |
return cio->end - cio->bp; |
} |
/* |
* Get pointer to the current position in the stream. |
*/ |
unsigned char *cio_getbp(opj_cio_t *cio) { |
return cio->bp; |
} |
/* |
* Write a byte. |
*/ |
bool cio_byteout(opj_cio_t *cio, unsigned char v) { |
if (cio->bp >= cio->end) { |
opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n"); |
return false; |
} |
*cio->bp++ = v; |
return true; |
} |
/* |
* Read a byte. |
*/ |
unsigned char cio_bytein(opj_cio_t *cio) { |
if (cio->bp >= cio->end) { |
opj_event_msg(cio->cinfo, EVT_ERROR, "read error: passed the end of the codestream (start = %d, current = %d, end = %d\n", cio->start, cio->bp, cio->end); |
return 0; |
} |
return *cio->bp++; |
} |
/* |
* Write some bytes. |
* |
* v : value to write |
* n : number of bytes to write |
*/ |
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) { |
int i; |
for (i = n - 1; i >= 0; i--) { |
if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) ) |
return 0; |
} |
return n; |
} |
/* |
* Read some bytes. |
* |
* n : number of bytes to read |
* |
* return : value of the n bytes read |
*/ |
unsigned int cio_read(opj_cio_t *cio, int n) { |
int i; |
unsigned int v; |
v = 0; |
for (i = n - 1; i >= 0; i--) { |
v += cio_bytein(cio) << (i << 3); |
} |
return v; |
} |
/* |
* Skip some bytes. |
* |
* n : number of bytes to skip |
*/ |
void cio_skip(opj_cio_t *cio, int n) { |
cio->bp += n; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/cio.h |
---|
0,0 → 1,86 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __CIO_H |
#define __CIO_H |
/** |
@file cio.h |
@brief Implementation of a byte input-output process (CIO) |
The functions in CIO.C have for goal to realize a byte input / output process. |
*/ |
/** @defgroup CIO CIO - byte input-output stream */ |
/*@{*/ |
/** @name Exported functions (see also openjpeg.h) */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Number of bytes left before the end of the stream |
@param cio CIO handle |
@return Returns the number of bytes before the end of the stream |
*/ |
int cio_numbytesleft(opj_cio_t *cio); |
/** |
Get pointer to the current position in the stream |
@param cio CIO handle |
@return Returns a pointer to the current position |
*/ |
unsigned char *cio_getbp(opj_cio_t *cio); |
/** |
Write some bytes |
@param cio CIO handle |
@param v Value to write |
@param n Number of bytes to write |
@return Returns the number of bytes written or 0 if an error occured |
*/ |
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n); |
/** |
Read some bytes |
@param cio CIO handle |
@param n Number of bytes to read |
@return Returns the value of the n bytes read |
*/ |
unsigned int cio_read(opj_cio_t *cio, int n); |
/** |
Skip some bytes |
@param cio CIO handle |
@param n Number of bytes to skip |
*/ |
void cio_skip(opj_cio_t *cio, int n); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __CIO_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/dwt.c |
---|
0,0 → 1,858 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2007, Jonathan Ballard <dzonatas@dzonux.net> |
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef __SSE__ |
#include <xmmintrin.h> |
#endif |
#include "opj_includes.h" |
/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ |
/*@{*/ |
#define WS(i) v->mem[(i)*2] |
#define WD(i) v->mem[(1+(i)*2)] |
/** @name Local data structures */ |
/*@{*/ |
typedef struct dwt_local { |
int* mem; |
int dn; |
int sn; |
int cas; |
} dwt_t; |
typedef union { |
float f[4]; |
} v4; |
typedef struct v4dwt_local { |
v4* wavelet ; |
int dn ; |
int sn ; |
int cas ; |
} v4dwt_t ; |
static const float dwt_alpha = 1.586134342f; // 12994 |
static const float dwt_beta = 0.052980118f; // 434 |
static const float dwt_gamma = -0.882911075f; // -7233 |
static const float dwt_delta = -0.443506852f; // -3633 |
static const float K = 1.230174105f; // 10078 |
/* FIXME: What is this constant? */ |
static const float c13318 = 1.625732422f; |
/*@}*/ |
/** |
Virtual function type for wavelet transform in 1-D |
*/ |
typedef void (*DWT1DFN)(dwt_t* v); |
/** @name Local static functions */ |
/*@{*/ |
/** |
Forward lazy transform (horizontal) |
*/ |
static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas); |
/** |
Forward lazy transform (vertical) |
*/ |
static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas); |
/** |
Inverse lazy transform (horizontal) |
*/ |
static void dwt_interleave_h(dwt_t* h, int *a); |
/** |
Inverse lazy transform (vertical) |
*/ |
static void dwt_interleave_v(dwt_t* v, int *a, int x); |
/** |
Forward 5-3 wavelet transform in 1-D |
*/ |
static void dwt_encode_1(int *a, int dn, int sn, int cas); |
/** |
Inverse 5-3 wavelet transform in 1-D |
*/ |
static void dwt_decode_1(dwt_t *v); |
/** |
Forward 9-7 wavelet transform in 1-D |
*/ |
static void dwt_encode_1_real(int *a, int dn, int sn, int cas); |
/** |
Explicit calculation of the Quantization Stepsizes |
*/ |
static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize); |
/** |
Inverse wavelet transform in 2-D. |
*/ |
static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int i, DWT1DFN fn); |
/*@}*/ |
/*@}*/ |
#define S(i) a[(i)*2] |
#define D(i) a[(1+(i)*2)] |
#define S_(i) ((i)<0?S(0):((i)>=sn?S(sn-1):S(i))) |
#define D_(i) ((i)<0?D(0):((i)>=dn?D(dn-1):D(i))) |
/* new */ |
#define SS_(i) ((i)<0?S(0):((i)>=dn?S(dn-1):S(i))) |
#define DD_(i) ((i)<0?D(0):((i)>=sn?D(sn-1):D(i))) |
/* <summary> */ |
/* This table contains the norms of the 5-3 wavelets for different bands. */ |
/* </summary> */ |
static const double dwt_norms[4][10] = { |
{1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3}, |
{1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, |
{1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9}, |
{.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93} |
}; |
/* <summary> */ |
/* This table contains the norms of the 9-7 wavelets for different bands. */ |
/* </summary> */ |
static const double dwt_norms_real[4][10] = { |
{1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9}, |
{2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0}, |
{2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0}, |
{2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2} |
}; |
/* |
========================================================== |
local functions |
========================================================== |
*/ |
/* <summary> */ |
/* Forward lazy transform (horizontal). */ |
/* </summary> */ |
static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) { |
int i; |
for (i=0; i<sn; i++) b[i]=a[2*i+cas]; |
for (i=0; i<dn; i++) b[sn+i]=a[(2*i+1-cas)]; |
} |
/* <summary> */ |
/* Forward lazy transform (vertical). */ |
/* </summary> */ |
static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas) { |
int i; |
for (i=0; i<sn; i++) b[i*x]=a[2*i+cas]; |
for (i=0; i<dn; i++) b[(sn+i)*x]=a[(2*i+1-cas)]; |
} |
/* <summary> */ |
/* Inverse lazy transform (horizontal). */ |
/* </summary> */ |
static void dwt_interleave_h(dwt_t* h, int *a) { |
int *ai = a; |
int *bi = h->mem + h->cas; |
int i = h->sn; |
while( i-- ) { |
*bi = *(ai++); |
bi += 2; |
} |
ai = a + h->sn; |
bi = h->mem + 1 - h->cas; |
i = h->dn ; |
while( i-- ) { |
*bi = *(ai++); |
bi += 2; |
} |
} |
/* <summary> */ |
/* Inverse lazy transform (vertical). */ |
/* </summary> */ |
static void dwt_interleave_v(dwt_t* v, int *a, int x) { |
int *ai = a; |
int *bi = v->mem + v->cas; |
int i = v->sn; |
while( i-- ) { |
*bi = *ai; |
bi += 2; |
ai += x; |
} |
ai = a + (v->sn * x); |
bi = v->mem + 1 - v->cas; |
i = v->dn ; |
while( i-- ) { |
*bi = *ai; |
bi += 2; |
ai += x; |
} |
} |
/* <summary> */ |
/* Forward 5-3 wavelet transform in 1-D. */ |
/* </summary> */ |
static void dwt_encode_1(int *a, int dn, int sn, int cas) { |
int i; |
if (!cas) { |
if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ |
for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1; |
for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2; |
} |
} else { |
if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */ |
S(0) *= 2; |
else { |
for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1; |
for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2; |
} |
} |
} |
/* <summary> */ |
/* Inverse 5-3 wavelet transform in 1-D. */ |
/* </summary> */ |
static void dwt_decode_1_(int *a, int dn, int sn, int cas) { |
int i; |
if (!cas) { |
if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ |
for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2; |
for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1; |
} |
} else { |
if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */ |
S(0) /= 2; |
else { |
for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2; |
for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1; |
} |
} |
} |
/* <summary> */ |
/* Inverse 5-3 wavelet transform in 1-D. */ |
/* </summary> */ |
static void dwt_decode_1(dwt_t *v) { |
dwt_decode_1_(v->mem, v->dn, v->sn, v->cas); |
} |
/* <summary> */ |
/* Forward 9-7 wavelet transform in 1-D. */ |
/* </summary> */ |
static void dwt_encode_1_real(int *a, int dn, int sn, int cas) { |
int i; |
if (!cas) { |
if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */ |
for (i = 0; i < dn; i++) |
D(i) -= fix_mul(S_(i) + S_(i + 1), 12993); |
for (i = 0; i < sn; i++) |
S(i) -= fix_mul(D_(i - 1) + D_(i), 434); |
for (i = 0; i < dn; i++) |
D(i) += fix_mul(S_(i) + S_(i + 1), 7233); |
for (i = 0; i < sn; i++) |
S(i) += fix_mul(D_(i - 1) + D_(i), 3633); |
for (i = 0; i < dn; i++) |
D(i) = fix_mul(D(i), 5038); /*5038 */ |
for (i = 0; i < sn; i++) |
S(i) = fix_mul(S(i), 6659); /*6660 */ |
} |
} else { |
if ((sn > 0) || (dn > 1)) { /* NEW : CASE ONE ELEMENT */ |
for (i = 0; i < dn; i++) |
S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993); |
for (i = 0; i < sn; i++) |
D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434); |
for (i = 0; i < dn; i++) |
S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233); |
for (i = 0; i < sn; i++) |
D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633); |
for (i = 0; i < dn; i++) |
S(i) = fix_mul(S(i), 5038); /*5038 */ |
for (i = 0; i < sn; i++) |
D(i) = fix_mul(D(i), 6659); /*6660 */ |
} |
} |
} |
static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize) { |
int p, n; |
p = int_floorlog2(stepsize) - 13; |
n = 11 - int_floorlog2(stepsize); |
bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff; |
bandno_stepsize->expn = numbps - p; |
} |
/* |
========================================================== |
DWT interface |
========================================================== |
*/ |
/* <summary> */ |
/* Forward 5-3 wavelet transform in 2-D. */ |
/* </summary> */ |
void dwt_encode(opj_tcd_tilecomp_t * tilec) { |
int i, j, k; |
int *a = NULL; |
int *aj = NULL; |
int *bj = NULL; |
int w, l; |
w = tilec->x1-tilec->x0; |
l = tilec->numresolutions-1; |
a = tilec->data; |
for (i = 0; i < l; i++) { |
int rw; /* width of the resolution level computed */ |
int rh; /* height of the resolution level computed */ |
int rw1; /* width of the resolution level once lower than computed one */ |
int rh1; /* height of the resolution level once lower than computed one */ |
int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ |
int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ |
int dn, sn; |
rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0; |
rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0; |
rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0; |
rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0; |
cas_row = tilec->resolutions[l - i].x0 % 2; |
cas_col = tilec->resolutions[l - i].y0 % 2; |
sn = rh1; |
dn = rh - rh1; |
bj = (int*)opj_malloc(rh * sizeof(int)); |
for (j = 0; j < rw; j++) { |
aj = a + j; |
for (k = 0; k < rh; k++) bj[k] = aj[k*w]; |
dwt_encode_1(bj, dn, sn, cas_col); |
dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); |
} |
opj_free(bj); |
sn = rw1; |
dn = rw - rw1; |
bj = (int*)opj_malloc(rw * sizeof(int)); |
for (j = 0; j < rh; j++) { |
aj = a + j * w; |
for (k = 0; k < rw; k++) bj[k] = aj[k]; |
dwt_encode_1(bj, dn, sn, cas_row); |
dwt_deinterleave_h(bj, aj, dn, sn, cas_row); |
} |
opj_free(bj); |
} |
} |
/* <summary> */ |
/* Inverse 5-3 wavelet transform in 2-D. */ |
/* </summary> */ |
void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres) { |
dwt_decode_tile(tilec, numres, &dwt_decode_1); |
} |
/* <summary> */ |
/* Get gain of 5-3 wavelet transform. */ |
/* </summary> */ |
int dwt_getgain(int orient) { |
if (orient == 0) |
return 0; |
if (orient == 1 || orient == 2) |
return 1; |
return 2; |
} |
/* <summary> */ |
/* Get norm of 5-3 wavelet. */ |
/* </summary> */ |
double dwt_getnorm(int level, int orient) { |
return dwt_norms[orient][level]; |
} |
/* <summary> */ |
/* Forward 9-7 wavelet transform in 2-D. */ |
/* </summary> */ |
void dwt_encode_real(opj_tcd_tilecomp_t * tilec) { |
int i, j, k; |
int *a = NULL; |
int *aj = NULL; |
int *bj = NULL; |
int w, l; |
w = tilec->x1-tilec->x0; |
l = tilec->numresolutions-1; |
a = tilec->data; |
for (i = 0; i < l; i++) { |
int rw; /* width of the resolution level computed */ |
int rh; /* height of the resolution level computed */ |
int rw1; /* width of the resolution level once lower than computed one */ |
int rh1; /* height of the resolution level once lower than computed one */ |
int cas_col; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */ |
int cas_row; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering */ |
int dn, sn; |
rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0; |
rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0; |
rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0; |
rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0; |
cas_row = tilec->resolutions[l - i].x0 % 2; |
cas_col = tilec->resolutions[l - i].y0 % 2; |
sn = rh1; |
dn = rh - rh1; |
bj = (int*)opj_malloc(rh * sizeof(int)); |
for (j = 0; j < rw; j++) { |
aj = a + j; |
for (k = 0; k < rh; k++) bj[k] = aj[k*w]; |
dwt_encode_1_real(bj, dn, sn, cas_col); |
dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col); |
} |
opj_free(bj); |
sn = rw1; |
dn = rw - rw1; |
bj = (int*)opj_malloc(rw * sizeof(int)); |
for (j = 0; j < rh; j++) { |
aj = a + j * w; |
for (k = 0; k < rw; k++) bj[k] = aj[k]; |
dwt_encode_1_real(bj, dn, sn, cas_row); |
dwt_deinterleave_h(bj, aj, dn, sn, cas_row); |
} |
opj_free(bj); |
} |
} |
/* <summary> */ |
/* Get gain of 9-7 wavelet transform. */ |
/* </summary> */ |
int dwt_getgain_real(int orient) { |
(void)orient; |
return 0; |
} |
/* <summary> */ |
/* Get norm of 9-7 wavelet. */ |
/* </summary> */ |
double dwt_getnorm_real(int level, int orient) { |
return dwt_norms_real[orient][level]; |
} |
void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) { |
int numbands, bandno; |
numbands = 3 * tccp->numresolutions - 2; |
for (bandno = 0; bandno < numbands; bandno++) { |
double stepsize; |
int resno, level, orient, gain; |
resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1); |
orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1); |
level = tccp->numresolutions - 1 - resno; |
gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) || (orient == 2)) ? 1 : 2)); |
if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { |
stepsize = 1.0; |
} else { |
double norm = dwt_norms_real[orient][level]; |
stepsize = (1 << (gain)) / norm; |
} |
dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain, &tccp->stepsizes[bandno]); |
} |
} |
/* <summary> */ |
/* Determine maximum computed resolution level for inverse wavelet transform */ |
/* </summary> */ |
static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i) { |
int mr = 1; |
int w; |
while( --i ) { |
r++; |
if( mr < ( w = r->x1 - r->x0 ) ) |
mr = w ; |
if( mr < ( w = r->y1 - r->y0 ) ) |
mr = w ; |
} |
return mr ; |
} |
/* <summary> */ |
/* Inverse wavelet transform in 2-D. */ |
/* </summary> */ |
static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1D) { |
dwt_t h; |
dwt_t v; |
opj_tcd_resolution_t* tr = tilec->resolutions; |
int rw = tr->x1 - tr->x0; /* width of the resolution level computed */ |
int rh = tr->y1 - tr->y0; /* height of the resolution level computed */ |
int w = tilec->x1 - tilec->x0; |
h.mem = opj_aligned_malloc(dwt_decode_max_resolution(tr, numres) * sizeof(int)); |
v.mem = h.mem; |
while( --numres) { |
int * restrict tiledp = tilec->data; |
int j; |
++tr; |
h.sn = rw; |
v.sn = rh; |
rw = tr->x1 - tr->x0; |
rh = tr->y1 - tr->y0; |
h.dn = rw - h.sn; |
h.cas = tr->x0 % 2; |
for(j = 0; j < rh; ++j) { |
dwt_interleave_h(&h, &tiledp[j*w]); |
(dwt_1D)(&h); |
memcpy(&tiledp[j*w], h.mem, rw * sizeof(int)); |
} |
v.dn = rh - v.sn; |
v.cas = tr->y0 % 2; |
for(j = 0; j < rw; ++j){ |
int k; |
dwt_interleave_v(&v, &tiledp[j], w); |
(dwt_1D)(&v); |
for(k = 0; k < rh; ++k) { |
tiledp[k * w + j] = v.mem[k]; |
} |
} |
} |
opj_aligned_free(h.mem); |
} |
static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x, int size){ |
float* restrict bi = (float*) (w->wavelet + w->cas); |
int count = w->sn; |
int i, k; |
for(k = 0; k < 2; ++k){ |
if (count + 3 * x < size && ((int) a & 0x0f) == 0 && ((int) bi & 0x0f) == 0 && (x & 0x0f) == 0) { |
/* Fast code path */ |
for(i = 0; i < count; ++i){ |
int j = i; |
bi[i*8 ] = a[j]; |
j += x; |
bi[i*8 + 1] = a[j]; |
j += x; |
bi[i*8 + 2] = a[j]; |
j += x; |
bi[i*8 + 3] = a[j]; |
} |
} else { |
/* Slow code path */ |
for(i = 0; i < count; ++i){ |
int j = i; |
bi[i*8 ] = a[j]; |
j += x; |
if(j > size) continue; |
bi[i*8 + 1] = a[j]; |
j += x; |
if(j > size) continue; |
bi[i*8 + 2] = a[j]; |
j += x; |
if(j > size) continue; |
bi[i*8 + 3] = a[j]; |
} |
} |
bi = (float*) (w->wavelet + 1 - w->cas); |
a += w->sn; |
size -= w->sn; |
count = w->dn; |
} |
} |
static void v4dwt_interleave_v(v4dwt_t* restrict v , float* restrict a , int x){ |
v4* restrict bi = v->wavelet + v->cas; |
int i; |
for(i = 0; i < v->sn; ++i){ |
memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float)); |
} |
a += v->sn * x; |
bi = v->wavelet + 1 - v->cas; |
for(i = 0; i < v->dn; ++i){ |
memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float)); |
} |
} |
#ifdef __SSE__ |
static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c){ |
__m128* restrict vw = (__m128*) w; |
int i; |
/* 4x unrolled loop */ |
for(i = 0; i < count >> 2; ++i){ |
*vw = _mm_mul_ps(*vw, c); |
vw += 2; |
*vw = _mm_mul_ps(*vw, c); |
vw += 2; |
*vw = _mm_mul_ps(*vw, c); |
vw += 2; |
*vw = _mm_mul_ps(*vw, c); |
vw += 2; |
} |
count &= 3; |
for(i = 0; i < count; ++i){ |
*vw = _mm_mul_ps(*vw, c); |
vw += 2; |
} |
} |
static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c){ |
__m128* restrict vl = (__m128*) l; |
__m128* restrict vw = (__m128*) w; |
int i; |
__m128 tmp1, tmp2, tmp3; |
tmp1 = vl[0]; |
for(i = 0; i < m; ++i){ |
tmp2 = vw[-1]; |
tmp3 = vw[ 0]; |
vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c)); |
tmp1 = tmp3; |
vw += 2; |
} |
vl = vw - 2; |
if(m >= k){ |
return; |
} |
c = _mm_add_ps(c, c); |
c = _mm_mul_ps(c, vl[0]); |
for(; m < k; ++m){ |
__m128 tmp = vw[-1]; |
vw[-1] = _mm_add_ps(tmp, c); |
vw += 2; |
} |
} |
#else |
static void v4dwt_decode_step1(v4* w, int count, const float c){ |
float* restrict fw = (float*) w; |
int i; |
for(i = 0; i < count; ++i){ |
float tmp1 = fw[i*8 ]; |
float tmp2 = fw[i*8 + 1]; |
float tmp3 = fw[i*8 + 2]; |
float tmp4 = fw[i*8 + 3]; |
fw[i*8 ] = tmp1 * c; |
fw[i*8 + 1] = tmp2 * c; |
fw[i*8 + 2] = tmp3 * c; |
fw[i*8 + 3] = tmp4 * c; |
} |
} |
static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){ |
float* restrict fl = (float*) l; |
float* restrict fw = (float*) w; |
int i; |
for(i = 0; i < m; ++i){ |
float tmp1_1 = fl[0]; |
float tmp1_2 = fl[1]; |
float tmp1_3 = fl[2]; |
float tmp1_4 = fl[3]; |
float tmp2_1 = fw[-4]; |
float tmp2_2 = fw[-3]; |
float tmp2_3 = fw[-2]; |
float tmp2_4 = fw[-1]; |
float tmp3_1 = fw[0]; |
float tmp3_2 = fw[1]; |
float tmp3_3 = fw[2]; |
float tmp3_4 = fw[3]; |
fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c); |
fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c); |
fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c); |
fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c); |
fl = fw; |
fw += 8; |
} |
if(m < k){ |
float c1; |
float c2; |
float c3; |
float c4; |
c += c; |
c1 = fl[0] * c; |
c2 = fl[1] * c; |
c3 = fl[2] * c; |
c4 = fl[3] * c; |
for(; m < k; ++m){ |
float tmp1 = fw[-4]; |
float tmp2 = fw[-3]; |
float tmp3 = fw[-2]; |
float tmp4 = fw[-1]; |
fw[-4] = tmp1 + c1; |
fw[-3] = tmp2 + c2; |
fw[-2] = tmp3 + c3; |
fw[-1] = tmp4 + c4; |
fw += 8; |
} |
} |
} |
#endif |
/* <summary> */ |
/* Inverse 9-7 wavelet transform in 1-D. */ |
/* </summary> */ |
static void v4dwt_decode(v4dwt_t* restrict dwt){ |
int a, b; |
if(dwt->cas == 0) { |
if(!((dwt->dn > 0) || (dwt->sn > 1))){ |
return; |
} |
a = 0; |
b = 1; |
}else{ |
if(!((dwt->sn > 0) || (dwt->dn > 1))) { |
return; |
} |
a = 1; |
b = 0; |
} |
#ifdef __SSE__ |
v4dwt_decode_step1_sse(dwt->wavelet+a, dwt->sn, _mm_set1_ps(K)); |
v4dwt_decode_step1_sse(dwt->wavelet+b, dwt->dn, _mm_set1_ps(c13318)); |
v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_delta)); |
v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_gamma)); |
v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_beta)); |
v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_alpha)); |
#else |
v4dwt_decode_step1(dwt->wavelet+a, dwt->sn, K); |
v4dwt_decode_step1(dwt->wavelet+b, dwt->dn, c13318); |
v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_delta); |
v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_gamma); |
v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_beta); |
v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_alpha); |
#endif |
} |
/* <summary> */ |
/* Inverse 9-7 wavelet transform in 2-D. */ |
/* </summary> */ |
void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres){ |
v4dwt_t h; |
v4dwt_t v; |
opj_tcd_resolution_t* res = tilec->resolutions; |
int rw = res->x1 - res->x0; /* width of the resolution level computed */ |
int rh = res->y1 - res->y0; /* height of the resolution level computed */ |
int w = tilec->x1 - tilec->x0; |
h.wavelet = (v4*) opj_aligned_malloc((dwt_decode_max_resolution(res, numres)+5) * sizeof(v4)); |
v.wavelet = h.wavelet; |
while( --numres) { |
float * restrict aj = (float*) tilec->data; |
int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0); |
int j; |
h.sn = rw; |
v.sn = rh; |
++res; |
rw = res->x1 - res->x0; /* width of the resolution level computed */ |
rh = res->y1 - res->y0; /* height of the resolution level computed */ |
h.dn = rw - h.sn; |
h.cas = res->x0 % 2; |
for(j = rh; j > 3; j -= 4){ |
int k; |
v4dwt_interleave_h(&h, aj, w, bufsize); |
v4dwt_decode(&h); |
for(k = rw; --k >= 0;){ |
aj[k ] = h.wavelet[k].f[0]; |
aj[k+w ] = h.wavelet[k].f[1]; |
aj[k+w*2] = h.wavelet[k].f[2]; |
aj[k+w*3] = h.wavelet[k].f[3]; |
} |
aj += w*4; |
bufsize -= w*4; |
} |
if (rh & 0x03) { |
int k; |
j = rh & 0x03; |
v4dwt_interleave_h(&h, aj, w, bufsize); |
v4dwt_decode(&h); |
for(k = rw; --k >= 0;){ |
switch(j) { |
case 3: aj[k+w*2] = h.wavelet[k].f[2]; |
case 2: aj[k+w ] = h.wavelet[k].f[1]; |
case 1: aj[k ] = h.wavelet[k].f[0]; |
} |
} |
} |
v.dn = rh - v.sn; |
v.cas = res->y0 % 2; |
aj = (float*) tilec->data; |
for(j = rw; j > 3; j -= 4){ |
int k; |
v4dwt_interleave_v(&v, aj, w); |
v4dwt_decode(&v); |
for(k = 0; k < rh; ++k){ |
memcpy(&aj[k*w], &v.wavelet[k], 4 * sizeof(float)); |
} |
aj += 4; |
} |
if (rw & 0x03){ |
int k; |
j = rw & 0x03; |
v4dwt_interleave_v(&v, aj, w); |
v4dwt_decode(&v); |
for(k = 0; k < rh; ++k){ |
memcpy(&aj[k*w], &v.wavelet[k], j * sizeof(float)); |
} |
} |
} |
opj_aligned_free(h.wavelet); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/dwt.h |
---|
0,0 → 1,113 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __DWT_H |
#define __DWT_H |
/** |
@file dwt.h |
@brief Implementation of a discrete wavelet transform (DWT) |
The functions in DWT.C have for goal to realize forward and inverse discret wavelet |
transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in |
DWT.C are used by some function in TCD.C. |
*/ |
/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */ |
/*@{*/ |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Forward 5-3 wavelet tranform in 2-D. |
Apply a reversible DWT transform to a component of an image. |
@param tilec Tile component information (current tile) |
*/ |
void dwt_encode(opj_tcd_tilecomp_t * tilec); |
/** |
Inverse 5-3 wavelet tranform in 2-D. |
Apply a reversible inverse DWT transform to a component of an image. |
@param tilec Tile component information (current tile) |
@param numres Number of resolution levels to decode |
*/ |
void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres); |
/** |
Get the gain of a subband for the reversible 5-3 DWT. |
@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH) |
@return Returns 0 if orient = 0, returns 1 if orient = 1 or 2, returns 2 otherwise |
*/ |
int dwt_getgain(int orient); |
/** |
Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT. |
@param level Level of the wavelet function |
@param orient Band of the wavelet function |
@return Returns the norm of the wavelet function |
*/ |
double dwt_getnorm(int level, int orient); |
/** |
Forward 9-7 wavelet transform in 2-D. |
Apply an irreversible DWT transform to a component of an image. |
@param tilec Tile component information (current tile) |
*/ |
void dwt_encode_real(opj_tcd_tilecomp_t * tilec); |
/** |
Inverse 9-7 wavelet transform in 2-D. |
Apply an irreversible inverse DWT transform to a component of an image. |
@param tilec Tile component information (current tile) |
@param numres Number of resolution levels to decode |
*/ |
void dwt_decode_real(opj_tcd_tilecomp_t* tilec, int numres); |
/** |
Get the gain of a subband for the irreversible 9-7 DWT. |
@param orient Number that identifies the subband (0->LL, 1->HL, 2->LH, 3->HH) |
@return Returns the gain of the 9-7 wavelet transform |
*/ |
int dwt_getgain_real(int orient); |
/** |
Get the norm of a wavelet function of a subband at a specified level for the irreversible 9-7 DWT |
@param level Level of the wavelet function |
@param orient Band of the wavelet function |
@return Returns the norm of the 9-7 wavelet |
*/ |
double dwt_getnorm_real(int level, int orient); |
/** |
Explicit calculation of the Quantization Stepsizes |
@param tccp Tile-component coding parameters |
@param prec Precint analyzed |
*/ |
void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __DWT_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/event.c |
---|
0,0 → 1,121 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/* ========================================================== |
Utility functions |
==========================================================*/ |
#ifndef _WIN32 |
static char* |
i2a(unsigned i, char *a, unsigned r) { |
if (i/r > 0) a = i2a(i/r,a,r); |
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r]; |
return a+1; |
} |
/** |
Transforms integer i into an ascii string and stores the result in a; |
string is encoded in the base indicated by r. |
@param i Number to be converted |
@param a String result |
@param r Base of value; must be in the range 2 - 36 |
@return Returns a |
*/ |
static char * |
_itoa(int i, char *a, int r) { |
r = ((r < 2) || (r > 36)) ? 10 : r; |
if(i < 0) { |
*a = '-'; |
*i2a(-i, a+1, r) = 0; |
} |
else *i2a(i, a, r) = 0; |
return a; |
} |
#endif /* !_WIN32 */ |
/* ----------------------------------------------------------------------- */ |
opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) { |
if(cinfo) { |
opj_event_mgr_t *previous = cinfo->event_mgr; |
cinfo->event_mgr = event_mgr; |
cinfo->client_data = context; |
return previous; |
} |
return NULL; |
} |
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { |
#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */ |
opj_msg_callback msg_handler = NULL; |
opj_event_mgr_t *event_mgr = cinfo->event_mgr; |
if(event_mgr != NULL) { |
switch(event_type) { |
case EVT_ERROR: |
msg_handler = event_mgr->error_handler; |
break; |
case EVT_WARNING: |
msg_handler = event_mgr->warning_handler; |
break; |
case EVT_INFO: |
msg_handler = event_mgr->info_handler; |
break; |
default: |
break; |
} |
if(msg_handler == NULL) { |
return false; |
} |
} else { |
return false; |
} |
if ((fmt != NULL) && (event_mgr != NULL)) { |
va_list arg; |
int str_length/*, i, j*/; /* UniPG */ |
char message[MSG_SIZE]; |
memset(message, 0, MSG_SIZE); |
/* initialize the optional parameter list */ |
va_start(arg, fmt); |
/* check the length of the format string */ |
str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt); |
/* parse the format string and put the result in 'message' */ |
vsprintf(message, fmt, arg); /* UniPG */ |
/* deinitialize the optional parameter list */ |
va_end(arg); |
/* output the message to the user program */ |
msg_handler(message, cinfo->client_data); |
} |
return true; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/event.h |
---|
0,0 → 1,58 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __EVENT_H |
#define __EVENT_H |
/** |
@file event.h |
@brief Implementation of a event callback system |
The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user. |
*/ |
#define EVT_ERROR 1 /**< Error event type */ |
#define EVT_WARNING 2 /**< Warning event type */ |
#define EVT_INFO 4 /**< Debug event type */ |
/** @defgroup EVENT EVENT - Implementation of a event callback system */ |
/*@{*/ |
/** @name Exported functions (see also openjpeg.h) */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Write formatted data to a string and send the string to a user callback. |
@param cinfo Codec context info |
@param event_type Event type or callback to use to send the message |
@param fmt Format-control string (plus optionnal arguments) |
@return Returns true if successful, returns false otherwise |
*/ |
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __EVENT_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/fix.h |
---|
0,0 → 1,64 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __FIX_H |
#define __FIX_H |
#if defined(_MSC_VER) || defined(__BORLANDC__) |
#define int64 __int64 |
#else |
#define int64 long long |
#endif |
/** |
@file fix.h |
@brief Implementation of operations of specific multiplication (FIX) |
The functions in FIX.H have for goal to realize specific multiplication. |
*/ |
/** @defgroup FIX FIX - Implementation of operations of specific multiplication */ |
/*@{*/ |
/** |
Multiply two fixed-precision rational numbers. |
@param a |
@param b |
@return Returns a * b |
*/ |
static INLINE int fix_mul(int a, int b) { |
int64 temp = (int64) a * (int64) b ; |
temp += temp & 4096; |
return (int) (temp >> 13) ; |
} |
/*@}*/ |
#endif /* __FIX_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/image.c |
---|
0,0 → 1,89 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
opj_image_t* opj_image_create0(void) { |
opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t)); |
return image; |
} |
opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) { |
int compno; |
opj_image_t *image = NULL; |
image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t)); |
if(image) { |
image->color_space = clrspc; |
image->numcomps = numcmpts; |
/* allocate memory for the per-component information */ |
image->comps = (opj_image_comp_t*)opj_malloc(image->numcomps * sizeof(opj_image_comp_t)); |
if(!image->comps) { |
fprintf(stderr,"Unable to allocate memory for image.\n"); |
opj_image_destroy(image); |
return NULL; |
} |
/* create the individual image components */ |
for(compno = 0; compno < numcmpts; compno++) { |
opj_image_comp_t *comp = &image->comps[compno]; |
comp->dx = cmptparms[compno].dx; |
comp->dy = cmptparms[compno].dy; |
comp->w = cmptparms[compno].w; |
comp->h = cmptparms[compno].h; |
comp->x0 = cmptparms[compno].x0; |
comp->y0 = cmptparms[compno].y0; |
comp->prec = cmptparms[compno].prec; |
comp->bpp = cmptparms[compno].bpp; |
comp->sgnd = cmptparms[compno].sgnd; |
comp->data = (int*) opj_calloc(comp->w * comp->h, sizeof(int)); |
if(!comp->data) { |
fprintf(stderr,"Unable to allocate memory for image.\n"); |
opj_image_destroy(image); |
return NULL; |
} |
} |
} |
return image; |
} |
void OPJ_CALLCONV opj_image_destroy(opj_image_t *image) { |
int i; |
if(image) { |
if(image->comps) { |
/* image components */ |
for(i = 0; i < image->numcomps; i++) { |
opj_image_comp_t *image_comp = &image->comps[i]; |
if(image_comp->data) { |
opj_free(image_comp->data); |
} |
} |
opj_free(image->comps); |
} |
opj_free(image); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/image.h |
---|
0,0 → 1,48 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __IMAGE_H |
#define __IMAGE_H |
/** |
@file image.h |
@brief Implementation of operations on images (IMAGE) |
The functions in IMAGE.C have for goal to realize operations on images. |
*/ |
/** @defgroup IMAGE IMAGE - Implementation of operations on images */ |
/*@{*/ |
/** |
Create an empty image |
@todo this function should be removed |
@return returns an empty image if successful, returns NULL otherwise |
*/ |
opj_image_t* opj_image_create0(void); |
/*@}*/ |
#endif /* __IMAGE_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/int.h |
---|
0,0 → 1,119 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __INT_H |
#define __INT_H |
/** |
@file int.h |
@brief Implementation of operations on integers (INT) |
The functions in INT.H have for goal to realize operations on integers. |
*/ |
/** @defgroup INT INT - Implementation of operations on integers */ |
/*@{*/ |
/** @name Exported functions (see also openjpeg.h) */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Get the minimum of two integers |
@return Returns a if a < b else b |
*/ |
static INLINE int int_min(int a, int b) { |
return a < b ? a : b; |
} |
/** |
Get the maximum of two integers |
@return Returns a if a > b else b |
*/ |
static INLINE int int_max(int a, int b) { |
return (a > b) ? a : b; |
} |
/** |
Clamp an integer inside an interval |
@return |
<ul> |
<li>Returns a if (min < a < max) |
<li>Returns max if (a > max) |
<li>Returns min if (a < min) |
</ul> |
*/ |
static INLINE int int_clamp(int a, int min, int max) { |
if (a < min) |
return min; |
if (a > max) |
return max; |
return a; |
} |
/** |
@return Get absolute value of integer |
*/ |
static INLINE int int_abs(int a) { |
return a < 0 ? -a : a; |
} |
/** |
Divide an integer and round upwards |
@return Returns a divided by b |
*/ |
static INLINE int int_ceildiv(int a, int b) { |
return (a + b - 1) / b; |
} |
/** |
Divide an integer by a power of 2 and round upwards |
@return Returns a divided by 2^b |
*/ |
static INLINE int int_ceildivpow2(int a, int b) { |
return (a + (1 << b) - 1) >> b; |
} |
/** |
Divide an integer by a power of 2 and round downwards |
@return Returns a divided by 2^b |
*/ |
static INLINE int int_floordivpow2(int a, int b) { |
return a >> b; |
} |
/** |
Get logarithm of an integer and round downwards |
@return Returns log2(a) |
*/ |
static INLINE int int_floorlog2(int a) { |
int l; |
for (l = 0; a > 1; l++) { |
a >>= 1; |
} |
return l; |
} |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/j2k.c |
---|
0,0 → 1,2434 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
/** |
Write the SOC marker (Start Of Codestream) |
@param j2k J2K handle |
*/ |
static void j2k_write_soc(opj_j2k_t *j2k); |
/** |
Read the SOC marker (Start of Codestream) |
@param j2k J2K handle |
*/ |
static void j2k_read_soc(opj_j2k_t *j2k); |
/** |
Write the SIZ marker (image and tile size) |
@param j2k J2K handle |
*/ |
static void j2k_write_siz(opj_j2k_t *j2k); |
/** |
Read the SIZ marker (image and tile size) |
@param j2k J2K handle |
*/ |
static void j2k_read_siz(opj_j2k_t *j2k); |
/** |
Write the COM marker (comment) |
@param j2k J2K handle |
*/ |
static void j2k_write_com(opj_j2k_t *j2k); |
/** |
Read the COM marker (comment) |
@param j2k J2K handle |
*/ |
static void j2k_read_com(opj_j2k_t *j2k); |
/** |
Write the value concerning the specified component in the marker COD and COC |
@param j2k J2K handle |
@param compno Number of the component concerned by the information written |
*/ |
static void j2k_write_cox(opj_j2k_t *j2k, int compno); |
/** |
Read the value concerning the specified component in the marker COD and COC |
@param j2k J2K handle |
@param compno Number of the component concerned by the information read |
*/ |
static void j2k_read_cox(opj_j2k_t *j2k, int compno); |
/** |
Write the COD marker (coding style default) |
@param j2k J2K handle |
*/ |
static void j2k_write_cod(opj_j2k_t *j2k); |
/** |
Read the COD marker (coding style default) |
@param j2k J2K handle |
*/ |
static void j2k_read_cod(opj_j2k_t *j2k); |
/** |
Write the COC marker (coding style component) |
@param j2k J2K handle |
@param compno Number of the component concerned by the information written |
*/ |
static void j2k_write_coc(opj_j2k_t *j2k, int compno); |
/** |
Read the COC marker (coding style component) |
@param j2k J2K handle |
*/ |
static void j2k_read_coc(opj_j2k_t *j2k); |
/** |
Write the value concerning the specified component in the marker QCD and QCC |
@param j2k J2K handle |
@param compno Number of the component concerned by the information written |
*/ |
static void j2k_write_qcx(opj_j2k_t *j2k, int compno); |
/** |
Read the value concerning the specified component in the marker QCD and QCC |
@param j2k J2K handle |
@param compno Number of the component concern by the information read |
@param len Length of the information in the QCX part of the marker QCD/QCC |
*/ |
static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len); |
/** |
Write the QCD marker (quantization default) |
@param j2k J2K handle |
*/ |
static void j2k_write_qcd(opj_j2k_t *j2k); |
/** |
Read the QCD marker (quantization default) |
@param j2k J2K handle |
*/ |
static void j2k_read_qcd(opj_j2k_t *j2k); |
/** |
Write the QCC marker (quantization component) |
@param j2k J2K handle |
@param compno Number of the component concerned by the information written |
*/ |
static void j2k_write_qcc(opj_j2k_t *j2k, int compno); |
/** |
Read the QCC marker (quantization component) |
@param j2k J2K handle |
*/ |
static void j2k_read_qcc(opj_j2k_t *j2k); |
/** |
Write the POC marker (progression order change) |
@param j2k J2K handle |
*/ |
static void j2k_write_poc(opj_j2k_t *j2k); |
/** |
Read the POC marker (progression order change) |
@param j2k J2K handle |
*/ |
static void j2k_read_poc(opj_j2k_t *j2k); |
/** |
Read the CRG marker (component registration) |
@param j2k J2K handle |
*/ |
static void j2k_read_crg(opj_j2k_t *j2k); |
/** |
Read the TLM marker (tile-part lengths) |
@param j2k J2K handle |
*/ |
static void j2k_read_tlm(opj_j2k_t *j2k); |
/** |
Read the PLM marker (packet length, main header) |
@param j2k J2K handle |
*/ |
static void j2k_read_plm(opj_j2k_t *j2k); |
/** |
Read the PLT marker (packet length, tile-part header) |
@param j2k J2K handle |
*/ |
static void j2k_read_plt(opj_j2k_t *j2k); |
/** |
Read the PPM marker (packet packet headers, main header) |
@param j2k J2K handle |
*/ |
static void j2k_read_ppm(opj_j2k_t *j2k); |
/** |
Read the PPT marker (packet packet headers, tile-part header) |
@param j2k J2K handle |
*/ |
static void j2k_read_ppt(opj_j2k_t *j2k); |
/** |
Write the TLM marker (Mainheader) |
@param j2k J2K handle |
*/ |
static void j2k_write_tlm(opj_j2k_t *j2k); |
/** |
Write the SOT marker (start of tile-part) |
@param j2k J2K handle |
*/ |
static void j2k_write_sot(opj_j2k_t *j2k); |
/** |
Read the SOT marker (start of tile-part) |
@param j2k J2K handle |
*/ |
static void j2k_read_sot(opj_j2k_t *j2k); |
/** |
Write the SOD marker (start of data) |
@param j2k J2K handle |
@param tile_coder Pointer to a TCD handle |
*/ |
static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder); |
/** |
Read the SOD marker (start of data) |
@param j2k J2K handle |
*/ |
static void j2k_read_sod(opj_j2k_t *j2k); |
/** |
Write the RGN marker (region-of-interest) |
@param j2k J2K handle |
@param compno Number of the component concerned by the information written |
@param tileno Number of the tile concerned by the information written |
*/ |
static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno); |
/** |
Read the RGN marker (region-of-interest) |
@param j2k J2K handle |
*/ |
static void j2k_read_rgn(opj_j2k_t *j2k); |
/** |
Write the EOC marker (end of codestream) |
@param j2k J2K handle |
*/ |
static void j2k_write_eoc(opj_j2k_t *j2k); |
/** |
Read the EOC marker (end of codestream) |
@param j2k J2K handle |
*/ |
static void j2k_read_eoc(opj_j2k_t *j2k); |
/** |
Read an unknown marker |
@param j2k J2K handle |
*/ |
static void j2k_read_unk(opj_j2k_t *j2k); |
/*@}*/ |
/*@}*/ |
/* ----------------------------------------------------------------------- */ |
typedef struct j2k_prog_order{ |
OPJ_PROG_ORDER enum_prog; |
char str_prog[4]; |
}j2k_prog_order_t; |
j2k_prog_order_t j2k_prog_order_list[] = { |
{CPRL, "CPRL"}, |
{LRCP, "LRCP"}, |
{PCRL, "PCRL"}, |
{RLCP, "RLCP"}, |
{RPCL, "RPCL"}, |
{(OPJ_PROG_ORDER)-1, ""} |
}; |
char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){ |
j2k_prog_order_t *po; |
for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){ |
if(po->enum_prog == prg_order){ |
break; |
} |
} |
return po->str_prog; |
} |
/* ----------------------------------------------------------------------- */ |
static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){ |
char *prog; |
int i; |
int tpnum=1,tpend=0; |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
prog = j2k_convert_progression_order(tcp->prg); |
if(cp->tp_on == 1){ |
for(i=0;i<4;i++){ |
if(tpend!=1){ |
if( cp->tp_flag == prog[i] ){ |
tpend=1;cp->tp_pos=i; |
} |
switch(prog[i]){ |
case 'C': |
tpnum= tpnum * tcp->pocs[pino].compE; |
break; |
case 'R': |
tpnum= tpnum * tcp->pocs[pino].resE; |
break; |
case 'P': |
tpnum= tpnum * tcp->pocs[pino].prcE; |
break; |
case 'L': |
tpnum= tpnum * tcp->pocs[pino].layE; |
break; |
} |
} |
} |
}else{ |
tpnum=1; |
} |
return tpnum; |
} |
/** mem allocation for TLM marker*/ |
int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *j2k ){ |
int pino,tileno,totnum_tp=0; |
j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int)); |
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { |
int cur_totnum_tp = 0; |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
for(pino = 0; pino <= tcp->numpocs; pino++) { |
int tp_num=0; |
opj_pi_iterator_t *pi = pi_initialise_encode(image, cp, tileno,FINAL_PASS); |
if(!pi) { return -1;} |
tp_num = j2k_get_num_tp(cp,pino,tileno); |
totnum_tp = totnum_tp + tp_num; |
cur_totnum_tp = cur_totnum_tp + tp_num; |
pi_destroy(pi, cp, tileno); |
} |
j2k->cur_totnum_tp[tileno] = cur_totnum_tp; |
/* INDEX >> */ |
if (j2k->cstr_info) { |
j2k->cstr_info->tile[tileno].num_tps = cur_totnum_tp; |
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(cur_totnum_tp * sizeof(opj_tp_info_t)); |
} |
/* << INDEX */ |
} |
return totnum_tp; |
} |
static void j2k_write_soc(opj_j2k_t *j2k) { |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, J2K_MS_SOC, 2); |
/* UniPG>> */ |
#ifdef USE_JPWL |
/* update markers struct */ |
j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2); |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
static void j2k_read_soc(opj_j2k_t *j2k) { |
j2k->state = J2K_STATE_MHSIZ; |
/* Index */ |
if (j2k->cstr_info) { |
j2k->cstr_info->main_head_start = cio_tell(j2k->cio) - 2; |
j2k->cstr_info->codestream_size = cio_numbytesleft(j2k->cio) + 2 - j2k->cstr_info->main_head_start; |
} |
} |
static void j2k_write_siz(opj_j2k_t *j2k) { |
int i; |
int lenp, len; |
opj_cio_t *cio = j2k->cio; |
opj_image_t *image = j2k->image; |
opj_cp_t *cp = j2k->cp; |
cio_write(cio, J2K_MS_SIZ, 2); /* SIZ */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
cio_write(cio, cp->rsiz, 2); /* Rsiz (capabilities) */ |
cio_write(cio, image->x1, 4); /* Xsiz */ |
cio_write(cio, image->y1, 4); /* Ysiz */ |
cio_write(cio, image->x0, 4); /* X0siz */ |
cio_write(cio, image->y0, 4); /* Y0siz */ |
cio_write(cio, cp->tdx, 4); /* XTsiz */ |
cio_write(cio, cp->tdy, 4); /* YTsiz */ |
cio_write(cio, cp->tx0, 4); /* XT0siz */ |
cio_write(cio, cp->ty0, 4); /* YT0siz */ |
cio_write(cio, image->numcomps, 2); /* Csiz */ |
for (i = 0; i < image->numcomps; i++) { |
cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7), 1); /* Ssiz_i */ |
cio_write(cio, image->comps[i].dx, 1); /* XRsiz_i */ |
cio_write(cio, image->comps[i].dy, 1); /* YRsiz_i */ |
} |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lsiz */ |
cio_seek(cio, lenp + len); |
} |
static void j2k_read_siz(opj_j2k_t *j2k) { |
int len, i; |
opj_cio_t *cio = j2k->cio; |
opj_image_t *image = j2k->image; |
opj_cp_t *cp = j2k->cp; |
len = cio_read(cio, 2); /* Lsiz */ |
cio_read(cio, 2); /* Rsiz (capabilities) */ |
image->x1 = cio_read(cio, 4); /* Xsiz */ |
image->y1 = cio_read(cio, 4); /* Ysiz */ |
image->x0 = cio_read(cio, 4); /* X0siz */ |
image->y0 = cio_read(cio, 4); /* Y0siz */ |
cp->tdx = cio_read(cio, 4); /* XTsiz */ |
cp->tdy = cio_read(cio, 4); /* YTsiz */ |
cp->tx0 = cio_read(cio, 4); /* XT0siz */ |
cp->ty0 = cio_read(cio, 4); /* YT0siz */ |
if ((image->x0<0)||(image->x1<0)||(image->y0<0)||(image->y1<0)) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"%s: invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n", |
image->x0,image->x1,image->y0,image->y1); |
return; |
} |
image->numcomps = cio_read(cio, 2); /* Csiz */ |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* if JPWL is on, we check whether TX errors have damaged |
too much the SIZ parameters */ |
if (!(image->x1 * image->y1)) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: bad image size (%d x %d)\n", |
image->x1, image->y1); |
if (!JPWL_ASSUME || JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
} |
if (image->numcomps != ((len - 38) / 3)) { |
opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, |
"JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n", |
image->numcomps, ((len - 38) / 3)); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"); |
if (image->numcomps < ((len - 38) / 3)) { |
len = 38 + 3 * image->numcomps; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Lsiz to %d => HYPOTHESIS!!!\n", |
len); |
} else { |
image->numcomps = ((len - 38) / 3); |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Csiz to %d => HYPOTHESIS!!!\n", |
image->numcomps); |
} |
} |
/* update components number in the jpwl_exp_comps filed */ |
cp->exp_comps = image->numcomps; |
} |
#endif /* USE_JPWL */ |
image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t)); |
for (i = 0; i < image->numcomps; i++) { |
int tmp, w, h; |
tmp = cio_read(cio, 1); /* Ssiz_i */ |
image->comps[i].prec = (tmp & 0x7f) + 1; |
image->comps[i].sgnd = tmp >> 7; |
image->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */ |
image->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */ |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* if JPWL is on, we check whether TX errors have damaged |
too much the SIZ parameters, again */ |
if (!(image->comps[i].dx * image->comps[i].dy)) { |
opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, |
"JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n", |
i, i, image->comps[i].dx, image->comps[i].dy); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"); |
if (!image->comps[i].dx) { |
image->comps[i].dx = 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n", |
i, image->comps[i].dx); |
} |
if (!image->comps[i].dy) { |
image->comps[i].dy = 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n", |
i, image->comps[i].dy); |
} |
} |
} |
#endif /* USE_JPWL */ |
/* TODO: unused ? */ |
w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx); |
h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy); |
image->comps[i].resno_decoded = 0; /* number of resolution decoded */ |
image->comps[i].factor = cp->reduce; /* reducing factor per component */ |
} |
cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx); |
cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy); |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* if JPWL is on, we check whether TX errors have damaged |
too much the SIZ parameters */ |
if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) || (cp->th > cp->max_tiles)) { |
opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, |
"JPWL: bad number of tiles (%d x %d)\n", |
cp->tw, cp->th); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"); |
if (cp->tw < 1) { |
cp->tw= 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n", |
cp->tw); |
} |
if (cp->tw > cp->max_tiles) { |
cp->tw= 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large x, increase expectance of %d\n" |
"- setting %d tiles in x => HYPOTHESIS!!!\n", |
cp->max_tiles, cp->tw); |
} |
if (cp->th < 1) { |
cp->th= 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n", |
cp->th); |
} |
if (cp->th > cp->max_tiles) { |
cp->th= 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large y, increase expectance of %d to continue\n", |
"- setting %d tiles in y => HYPOTHESIS!!!\n", |
cp->max_tiles, cp->th); |
} |
} |
} |
#endif /* USE_JPWL */ |
cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t)); |
cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int)); |
cp->tileno_size = 0; |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
if (!cp->tcps) { |
opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, |
"JPWL: could not alloc tcps field of cp\n"); |
if (!JPWL_ASSUME || JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
} |
} |
#endif /* USE_JPWL */ |
for (i = 0; i < cp->tw * cp->th; i++) { |
cp->tcps[i].POC = 0; |
cp->tcps[i].numpocs = 0; |
cp->tcps[i].first = 1; |
} |
/* Initialization for PPM marker */ |
cp->ppm = 0; |
cp->ppm_data = NULL; |
cp->ppm_data_first = NULL; |
cp->ppm_previous = 0; |
cp->ppm_store = 0; |
j2k->default_tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t)); |
for (i = 0; i < cp->tw * cp->th; i++) { |
cp->tcps[i].tccps = (opj_tccp_t*) opj_malloc(image->numcomps * sizeof(opj_tccp_t)); |
} |
j2k->tile_data = (unsigned char**) opj_calloc(cp->tw * cp->th, sizeof(unsigned char*)); |
j2k->tile_len = (int*) opj_calloc(cp->tw * cp->th, sizeof(int)); |
j2k->state = J2K_STATE_MH; |
/* Index */ |
if (j2k->cstr_info) { |
opj_codestream_info_t *cstr_info = j2k->cstr_info; |
cstr_info->image_w = image->x1 - image->x0; |
cstr_info->image_h = image->y1 - image->y0; |
cstr_info->numcomps = image->numcomps; |
cstr_info->tw = cp->tw; |
cstr_info->th = cp->th; |
cstr_info->tile_x = cp->tdx; |
cstr_info->tile_y = cp->tdy; |
cstr_info->tile_Ox = cp->tx0; |
cstr_info->tile_Oy = cp->ty0; |
cstr_info->tile = (opj_tile_info_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tile_info_t)); |
} |
} |
static void j2k_write_com(opj_j2k_t *j2k) { |
unsigned int i; |
int lenp, len; |
if(j2k->cp->comment) { |
opj_cio_t *cio = j2k->cio; |
char *comment = j2k->cp->comment; |
cio_write(cio, J2K_MS_COM, 2); |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
cio_write(cio, 1, 2); /* General use (IS 8859-15:1999 (Latin) values) */ |
for (i = 0; i < strlen(comment); i++) { |
cio_write(cio, comment[i], 1); |
} |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); |
cio_seek(cio, lenp + len); |
} |
} |
static void j2k_read_com(opj_j2k_t *j2k) { |
int len; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); |
cio_skip(cio, len - 2); |
} |
static void j2k_write_cox(opj_j2k_t *j2k, int compno) { |
int i; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, tccp->numresolutions - 1, 1); /* SPcox (D) */ |
cio_write(cio, tccp->cblkw - 2, 1); /* SPcox (E) */ |
cio_write(cio, tccp->cblkh - 2, 1); /* SPcox (F) */ |
cio_write(cio, tccp->cblksty, 1); /* SPcox (G) */ |
cio_write(cio, tccp->qmfbid, 1); /* SPcox (H) */ |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
for (i = 0; i < tccp->numresolutions; i++) { |
cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1); /* SPcox (I_i) */ |
} |
} |
} |
static void j2k_read_cox(opj_j2k_t *j2k, int compno) { |
int i; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_cio_t *cio = j2k->cio; |
tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */ |
// If user wants to remove more resolutions than the codestream contains, return error |
if (cp->reduce >= tccp->numresolutions) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number " |
"of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno); |
j2k->state |= J2K_STATE_ERR; |
} |
tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */ |
tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */ |
tccp->cblksty = cio_read(cio, 1); /* SPcox (G) */ |
tccp->qmfbid = cio_read(cio, 1); /* SPcox (H) */ |
if (tccp->csty & J2K_CP_CSTY_PRT) { |
for (i = 0; i < tccp->numresolutions; i++) { |
int tmp = cio_read(cio, 1); /* SPcox (I_i) */ |
tccp->prcw[i] = tmp & 0xf; |
tccp->prch[i] = tmp >> 4; |
} |
} |
/* INDEX >> */ |
if(j2k->cstr_info && compno == 0) { |
for (i = 0; i < tccp->numresolutions; i++) { |
if (tccp->csty & J2K_CP_CSTY_PRT) { |
j2k->cstr_info->tile[j2k->curtileno].pdx[i] = tccp->prcw[i]; |
j2k->cstr_info->tile[j2k->curtileno].pdy[i] = tccp->prch[i]; |
} |
else { |
j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15; |
j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15; |
} |
} |
} |
/* << INDEX */ |
} |
static void j2k_write_cod(opj_j2k_t *j2k) { |
opj_cp_t *cp = NULL; |
opj_tcp_t *tcp = NULL; |
int lenp, len; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, J2K_MS_COD, 2); /* COD */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
cp = j2k->cp; |
tcp = &cp->tcps[j2k->curtileno]; |
cio_write(cio, tcp->csty, 1); /* Scod */ |
cio_write(cio, tcp->prg, 1); /* SGcod (A) */ |
cio_write(cio, tcp->numlayers, 2); /* SGcod (B) */ |
cio_write(cio, tcp->mct, 1); /* SGcod (C) */ |
j2k_write_cox(j2k, 0); |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lcod */ |
cio_seek(cio, lenp + len); |
} |
static void j2k_read_cod(opj_j2k_t *j2k) { |
int len, i, pos; |
opj_cio_t *cio = j2k->cio; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_image_t *image = j2k->image; |
len = cio_read(cio, 2); /* Lcod */ |
tcp->csty = cio_read(cio, 1); /* Scod */ |
tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* SGcod (A) */ |
tcp->numlayers = cio_read(cio, 2); /* SGcod (B) */ |
tcp->mct = cio_read(cio, 1); /* SGcod (C) */ |
pos = cio_tell(cio); |
for (i = 0; i < image->numcomps; i++) { |
tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT; |
cio_seek(cio, pos); |
j2k_read_cox(j2k, i); |
} |
/* Index */ |
if (j2k->cstr_info) { |
opj_codestream_info_t *cstr_info = j2k->cstr_info; |
cstr_info->prog = tcp->prg; |
cstr_info->numlayers = tcp->numlayers; |
cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int)); |
for (i = 0; i < image->numcomps; i++) { |
cstr_info->numdecompos[i] = tcp->tccps[i].numresolutions - 1; |
} |
} |
} |
static void j2k_write_coc(opj_j2k_t *j2k, int compno) { |
int lenp, len; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; |
opj_image_t *image = j2k->image; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, J2K_MS_COC, 2); /* COC */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */ |
cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */ |
j2k_write_cox(j2k, compno); |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lcoc */ |
cio_seek(cio, lenp + len); |
} |
static void j2k_read_coc(opj_j2k_t *j2k) { |
int len, compno; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_image_t *image = j2k->image; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); /* Lcoc */ |
compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */ |
tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */ |
j2k_read_cox(j2k, compno); |
} |
static void j2k_write_qcx(opj_j2k_t *j2k, int compno) { |
int bandno, numbands; |
int expn, mant; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1); /* Sqcx */ |
numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2; |
for (bandno = 0; bandno < numbands; bandno++) { |
expn = tccp->stepsizes[bandno].expn; |
mant = tccp->stepsizes[bandno].mant; |
if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { |
cio_write(cio, expn << 3, 1); /* SPqcx_i */ |
} else { |
cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */ |
} |
} |
} |
static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) { |
int tmp; |
int bandno, numbands; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_cio_t *cio = j2k->cio; |
tmp = cio_read(cio, 1); /* Sqcx */ |
tccp->qntsty = tmp & 0x1f; |
tccp->numgbits = tmp >> 5; |
numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? |
1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2); |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* if JPWL is on, we check whether there are too many subbands */ |
if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) { |
opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR, |
"JPWL: bad number of subbands in Sqcx (%d)\n", |
numbands); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
numbands = 1; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n" |
"- setting number of bands to %d => HYPOTHESIS!!!\n", |
numbands); |
}; |
}; |
#endif /* USE_JPWL */ |
for (bandno = 0; bandno < numbands; bandno++) { |
int expn, mant; |
if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { |
expn = cio_read(cio, 1) >> 3; /* SPqcx_i */ |
mant = 0; |
} else { |
tmp = cio_read(cio, 2); /* SPqcx_i */ |
expn = tmp >> 11; |
mant = tmp & 0x7ff; |
} |
tccp->stepsizes[bandno].expn = expn; |
tccp->stepsizes[bandno].mant = mant; |
} |
/* Add Antonin : if scalar_derived -> compute other stepsizes */ |
if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) { |
for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) { |
tccp->stepsizes[bandno].expn = |
((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ? |
(tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0; |
tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant; |
} |
} |
/* ddA */ |
} |
static void j2k_write_qcd(opj_j2k_t *j2k) { |
int lenp, len; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, J2K_MS_QCD, 2); /* QCD */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
j2k_write_qcx(j2k, 0); |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lqcd */ |
cio_seek(cio, lenp + len); |
} |
static void j2k_read_qcd(opj_j2k_t *j2k) { |
int len, i, pos; |
opj_cio_t *cio = j2k->cio; |
opj_image_t *image = j2k->image; |
len = cio_read(cio, 2); /* Lqcd */ |
pos = cio_tell(cio); |
for (i = 0; i < image->numcomps; i++) { |
cio_seek(cio, pos); |
j2k_read_qcx(j2k, i, len - 2); |
} |
} |
static void j2k_write_qcc(opj_j2k_t *j2k, int compno) { |
int lenp, len; |
opj_cio_t *cio = j2k->cio; |
cio_write(cio, J2K_MS_QCC, 2); /* QCC */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); |
cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2); /* Cqcc */ |
j2k_write_qcx(j2k, compno); |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lqcc */ |
cio_seek(cio, lenp + len); |
} |
static void j2k_read_qcc(opj_j2k_t *j2k) { |
int len, compno; |
int numcomp = j2k->image->numcomps; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); /* Lqcc */ |
compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */ |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
static int backup_compno = 0; |
/* compno is negative or larger than the number of components!!! */ |
if ((compno < 0) || (compno >= numcomp)) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: bad component number in QCC (%d out of a maximum of %d)\n", |
compno, numcomp); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
compno = backup_compno % numcomp; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" |
"- setting component number to %d\n", |
compno); |
} |
/* keep your private count of tiles */ |
backup_compno++; |
}; |
#endif /* USE_JPWL */ |
j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2)); |
} |
static void j2k_write_poc(opj_j2k_t *j2k) { |
int len, numpchgs, i; |
int numcomps = j2k->image->numcomps; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = &cp->tcps[j2k->curtileno]; |
opj_tccp_t *tccp = &tcp->tccps[0]; |
opj_cio_t *cio = j2k->cio; |
numpchgs = 1 + tcp->numpocs; |
cio_write(cio, J2K_MS_POC, 2); /* POC */ |
len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs; |
cio_write(cio, len, 2); /* Lpoc */ |
for (i = 0; i < numpchgs; i++) { |
opj_poc_t *poc = &tcp->pocs[i]; |
cio_write(cio, poc->resno0, 1); /* RSpoc_i */ |
cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2)); /* CSpoc_i */ |
cio_write(cio, poc->layno1, 2); /* LYEpoc_i */ |
poc->layno1 = int_min(poc->layno1, tcp->numlayers); |
cio_write(cio, poc->resno1, 1); /* REpoc_i */ |
poc->resno1 = int_min(poc->resno1, tccp->numresolutions); |
cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2)); /* CEpoc_i */ |
poc->compno1 = int_min(poc->compno1, numcomps); |
cio_write(cio, poc->prg, 1); /* Ppoc_i */ |
} |
} |
static void j2k_read_poc(opj_j2k_t *j2k) { |
int len, numpchgs, i, old_poc; |
int numcomps = j2k->image->numcomps; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_cio_t *cio = j2k->cio; |
old_poc = tcp->POC ? tcp->numpocs + 1 : 0; |
tcp->POC = 1; |
len = cio_read(cio, 2); /* Lpoc */ |
numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2)); |
for (i = old_poc; i < numpchgs + old_poc; i++) { |
opj_poc_t *poc; |
poc = &tcp->pocs[i]; |
poc->resno0 = cio_read(cio, 1); /* RSpoc_i */ |
poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2); /* CSpoc_i */ |
poc->layno1 = cio_read(cio, 2); /* LYEpoc_i */ |
poc->resno1 = cio_read(cio, 1); /* REpoc_i */ |
poc->compno1 = int_min( |
cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps); /* CEpoc_i */ |
poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* Ppoc_i */ |
} |
tcp->numpocs = numpchgs + old_poc - 1; |
} |
static void j2k_read_crg(opj_j2k_t *j2k) { |
int len, i, Xcrg_i, Ycrg_i; |
opj_cio_t *cio = j2k->cio; |
int numcomps = j2k->image->numcomps; |
len = cio_read(cio, 2); /* Lcrg */ |
for (i = 0; i < numcomps; i++) { |
Xcrg_i = cio_read(cio, 2); /* Xcrg_i */ |
Ycrg_i = cio_read(cio, 2); /* Ycrg_i */ |
} |
} |
static void j2k_read_tlm(opj_j2k_t *j2k) { |
int len, Ztlm, Stlm, ST, SP, tile_tlm, i; |
long int Ttlm_i, Ptlm_i; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); /* Ltlm */ |
Ztlm = cio_read(cio, 1); /* Ztlm */ |
Stlm = cio_read(cio, 1); /* Stlm */ |
ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02); |
SP = (Stlm >> 6) & 0x01; |
tile_tlm = (len - 4) / ((SP + 1) * 2 + ST); |
for (i = 0; i < tile_tlm; i++) { |
Ttlm_i = cio_read(cio, ST); /* Ttlm_i */ |
Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */ |
} |
} |
static void j2k_read_plm(opj_j2k_t *j2k) { |
int len, i, Zplm, Nplm, add, packet_len = 0; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); /* Lplm */ |
Zplm = cio_read(cio, 1); /* Zplm */ |
len -= 3; |
while (len > 0) { |
Nplm = cio_read(cio, 4); /* Nplm */ |
len -= 4; |
for (i = Nplm; i > 0; i--) { |
add = cio_read(cio, 1); |
len--; |
packet_len = (packet_len << 7) + add; /* Iplm_ij */ |
if ((add & 0x80) == 0) { |
/* New packet */ |
packet_len = 0; |
} |
if (len <= 0) |
break; |
} |
} |
} |
static void j2k_read_plt(opj_j2k_t *j2k) { |
int len, i, Zplt, packet_len = 0, add; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); /* Lplt */ |
Zplt = cio_read(cio, 1); /* Zplt */ |
for (i = len - 3; i > 0; i--) { |
add = cio_read(cio, 1); |
packet_len = (packet_len << 7) + add; /* Iplt_i */ |
if ((add & 0x80) == 0) { |
/* New packet */ |
packet_len = 0; |
} |
} |
} |
static void j2k_read_ppm(opj_j2k_t *j2k) { |
int len, Z_ppm, i, j; |
int N_ppm; |
opj_cp_t *cp = j2k->cp; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); |
cp->ppm = 1; |
Z_ppm = cio_read(cio, 1); /* Z_ppm */ |
len -= 3; |
while (len > 0) { |
if (cp->ppm_previous == 0) { |
N_ppm = cio_read(cio, 4); /* N_ppm */ |
len -= 4; |
} else { |
N_ppm = cp->ppm_previous; |
} |
j = cp->ppm_store; |
if (Z_ppm == 0) { /* First PPM marker */ |
cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char)); |
cp->ppm_data_first = cp->ppm_data; |
cp->ppm_len = N_ppm; |
} else { /* NON-first PPM marker */ |
cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm + cp->ppm_store) * sizeof(unsigned char)); |
#ifdef USE_JPWL |
/* this memory allocation check could be done even in non-JPWL cases */ |
if (cp->correct) { |
if (!cp->ppm_data) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n", |
cio_tell(cio)); |
if (!JPWL_ASSUME || JPWL_ASSUME) { |
opj_free(cp->ppm_data); |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
} |
} |
#endif |
cp->ppm_data_first = cp->ppm_data; |
cp->ppm_len = N_ppm + cp->ppm_store; |
} |
for (i = N_ppm; i > 0; i--) { /* Read packet header */ |
cp->ppm_data[j] = cio_read(cio, 1); |
j++; |
len--; |
if (len == 0) |
break; /* Case of non-finished packet header in present marker but finished in next one */ |
} |
cp->ppm_previous = i - 1; |
cp->ppm_store = j; |
} |
} |
static void j2k_read_ppt(opj_j2k_t *j2k) { |
int len, Z_ppt, i, j = 0; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = cp->tcps + j2k->curtileno; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); |
Z_ppt = cio_read(cio, 1); |
tcp->ppt = 1; |
if (Z_ppt == 0) { /* First PPT marker */ |
tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char)); |
tcp->ppt_data_first = tcp->ppt_data; |
tcp->ppt_store = 0; |
tcp->ppt_len = len - 3; |
} else { /* NON-first PPT marker */ |
tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char)); |
tcp->ppt_data_first = tcp->ppt_data; |
tcp->ppt_len = len - 3 + tcp->ppt_store; |
} |
j = tcp->ppt_store; |
for (i = len - 3; i > 0; i--) { |
tcp->ppt_data[j] = cio_read(cio, 1); |
j++; |
} |
tcp->ppt_store = j; |
} |
static void j2k_write_tlm(opj_j2k_t *j2k){ |
int lenp; |
opj_cio_t *cio = j2k->cio; |
j2k->tlm_start = cio_tell(cio); |
cio_write(cio, J2K_MS_TLM, 2);/* TLM */ |
lenp = 4 + (5*j2k->totnum_tp); |
cio_write(cio,lenp,2); /* Ltlm */ |
cio_write(cio, 0,1); /* Ztlm=0*/ |
cio_write(cio,80,1); /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */ |
cio_skip(cio,5*j2k->totnum_tp); |
} |
static void j2k_write_sot(opj_j2k_t *j2k) { |
int lenp, len; |
opj_cio_t *cio = j2k->cio; |
j2k->sot_start = cio_tell(cio); |
cio_write(cio, J2K_MS_SOT, 2); /* SOT */ |
lenp = cio_tell(cio); |
cio_skip(cio, 2); /* Lsot (further) */ |
cio_write(cio, j2k->curtileno, 2); /* Isot */ |
cio_skip(cio, 4); /* Psot (further in j2k_write_sod) */ |
cio_write(cio, j2k->cur_tp_num , 1); /* TPsot */ |
cio_write(cio, j2k->cur_totnum_tp[j2k->curtileno], 1); /* TNsot */ |
len = cio_tell(cio) - lenp; |
cio_seek(cio, lenp); |
cio_write(cio, len, 2); /* Lsot */ |
cio_seek(cio, lenp + len); |
/* UniPG>> */ |
#ifdef USE_JPWL |
/* update markers struct */ |
j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2); |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
static void j2k_read_sot(opj_j2k_t *j2k) { |
int len, tileno, totlen, partno, numparts, i; |
opj_tcp_t *tcp = NULL; |
char status = 0; |
opj_cp_t *cp = j2k->cp; |
opj_cio_t *cio = j2k->cio; |
len = cio_read(cio, 2); |
tileno = cio_read(cio, 2); |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
static int backup_tileno = 0; |
/* tileno is negative or larger than the number of tiles!!! */ |
if ((tileno < 0) || (tileno > (cp->tw * cp->th))) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: bad tile number (%d out of a maximum of %d)\n", |
tileno, (cp->tw * cp->th)); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
tileno = backup_tileno; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" |
"- setting tile number to %d\n", |
tileno); |
} |
/* keep your private count of tiles */ |
backup_tileno++; |
}; |
#endif /* USE_JPWL */ |
if (cp->tileno_size == 0) { |
cp->tileno[cp->tileno_size] = tileno; |
cp->tileno_size++; |
} else { |
i = 0; |
while (i < cp->tileno_size && status == 0) { |
status = cp->tileno[i] == tileno ? 1 : 0; |
i++; |
} |
if (status == 0) { |
cp->tileno[cp->tileno_size] = tileno; |
cp->tileno_size++; |
} |
} |
totlen = cio_read(cio, 4); |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* totlen is negative or larger than the bytes left!!! */ |
if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: bad tile byte size (%d bytes against %d bytes left)\n", |
totlen, cio_numbytesleft(cio) + 8); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
/* we try to correct */ |
totlen = 0; |
opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n" |
"- setting Psot to %d => assuming it is the last tile\n", |
totlen); |
} |
}; |
#endif /* USE_JPWL */ |
if (!totlen) |
totlen = cio_numbytesleft(cio) + 8; |
partno = cio_read(cio, 1); |
numparts = cio_read(cio, 1); |
j2k->curtileno = tileno; |
j2k->cur_tp_num = partno; |
j2k->eot = cio_getbp(cio) - 12 + totlen; |
j2k->state = J2K_STATE_TPH; |
tcp = &cp->tcps[j2k->curtileno]; |
/* Index */ |
if (j2k->cstr_info) { |
if (tcp->first) { |
if (tileno == 0) |
j2k->cstr_info->main_head_end = cio_tell(cio) - 13; |
j2k->cstr_info->tile[tileno].tileno = tileno; |
j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12; |
j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos + totlen - 1; |
j2k->cstr_info->tile[tileno].num_tps = numparts; |
if (numparts) |
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t)); |
else |
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10) |
} |
else { |
j2k->cstr_info->tile[tileno].end_pos += totlen; |
} |
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12; |
j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos = |
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1; |
} |
if (tcp->first == 1) { |
/* Initialization PPT */ |
opj_tccp_t *tmp = tcp->tccps; |
memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t)); |
tcp->ppt = 0; |
tcp->ppt_data = NULL; |
tcp->ppt_data_first = NULL; |
tcp->tccps = tmp; |
for (i = 0; i < j2k->image->numcomps; i++) { |
tcp->tccps[i] = j2k->default_tcp->tccps[i]; |
} |
cp->tcps[j2k->curtileno].first = 0; |
} |
} |
static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) { |
int l, layno; |
int totlen; |
opj_tcp_t *tcp = NULL; |
opj_codestream_info_t *cstr_info = NULL; |
opj_tcd_t *tcd = (opj_tcd_t*)tile_coder; /* cast is needed because of conflicts in header inclusions */ |
opj_cp_t *cp = j2k->cp; |
opj_cio_t *cio = j2k->cio; |
tcd->tp_num = j2k->tp_num ; |
tcd->cur_tp_num = j2k->cur_tp_num; |
cio_write(cio, J2K_MS_SOD, 2); |
if (j2k->curtileno == 0) { |
j2k->sod_start = cio_tell(cio) + j2k->pos_correction; |
} |
/* INDEX >> */ |
cstr_info = j2k->cstr_info; |
if (cstr_info) { |
if (!j2k->cur_tp_num ) { |
cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1; |
j2k->cstr_info->tile[j2k->curtileno].tileno = j2k->curtileno; |
} |
else{ |
if(cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos < cio_tell(cio)) |
cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(cio); |
} |
/* UniPG>> */ |
#ifdef USE_JPWL |
/* update markers struct */ |
j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2); |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
/* << INDEX */ |
tcp = &cp->tcps[j2k->curtileno]; |
for (layno = 0; layno < tcp->numlayers; layno++) { |
if (tcp->rates[layno]>(j2k->sod_start / (cp->th * cp->tw))) { |
tcp->rates[layno]-=(j2k->sod_start / (cp->th * cp->tw)); |
} else if (tcp->rates[layno]) { |
tcp->rates[layno]=1; |
} |
} |
if(j2k->cur_tp_num == 0){ |
tcd->tcd_image->tiles->packno = 0; |
if(cstr_info) |
cstr_info->packno = 0; |
} |
l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, cstr_info); |
/* Writing Psot in SOT marker */ |
totlen = cio_tell(cio) + l - j2k->sot_start; |
cio_seek(cio, j2k->sot_start + 6); |
cio_write(cio, totlen, 4); |
cio_seek(cio, j2k->sot_start + totlen); |
/* Writing Ttlm and Ptlm in TLM marker */ |
if(cp->cinema){ |
cio_seek(cio, j2k->tlm_start + 6 + (5*j2k->cur_tp_num)); |
cio_write(cio, j2k->curtileno, 1); |
cio_write(cio, totlen, 4); |
} |
cio_seek(cio, j2k->sot_start + totlen); |
} |
static void j2k_read_sod(opj_j2k_t *j2k) { |
int len, truncate = 0, i; |
unsigned char *data = NULL, *data_ptr = NULL; |
opj_cio_t *cio = j2k->cio; |
int curtileno = j2k->curtileno; |
/* Index */ |
if (j2k->cstr_info) { |
j2k->cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header = |
cio_tell(cio) + j2k->pos_correction - 1; |
if (j2k->cur_tp_num == 0) |
j2k->cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1; |
j2k->cstr_info->packno = 0; |
} |
len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1); |
if (len == cio_numbytesleft(cio) + 1) { |
truncate = 1; /* Case of a truncate codestream */ |
} |
data = j2k->tile_data[curtileno]; |
data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char)); |
data_ptr = data + j2k->tile_len[curtileno]; |
for (i = 0; i < len; i++) { |
data_ptr[i] = cio_read(cio, 1); |
} |
j2k->tile_len[curtileno] += len; |
j2k->tile_data[curtileno] = data; |
if (!truncate) { |
j2k->state = J2K_STATE_TPHSOT; |
} else { |
j2k->state = J2K_STATE_NEOC; /* RAJOUTE !! */ |
} |
j2k->cur_tp_num++; |
} |
static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno) { |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
opj_cio_t *cio = j2k->cio; |
int numcomps = j2k->image->numcomps; |
cio_write(cio, J2K_MS_RGN, 2); /* RGN */ |
cio_write(cio, numcomps <= 256 ? 5 : 6, 2); /* Lrgn */ |
cio_write(cio, compno, numcomps <= 256 ? 1 : 2); /* Crgn */ |
cio_write(cio, 0, 1); /* Srgn */ |
cio_write(cio, tcp->tccps[compno].roishift, 1); /* SPrgn */ |
} |
static void j2k_read_rgn(opj_j2k_t *j2k) { |
int len, compno, roisty; |
opj_cp_t *cp = j2k->cp; |
opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp; |
opj_cio_t *cio = j2k->cio; |
int numcomps = j2k->image->numcomps; |
len = cio_read(cio, 2); /* Lrgn */ |
compno = cio_read(cio, numcomps <= 256 ? 1 : 2); /* Crgn */ |
roisty = cio_read(cio, 1); /* Srgn */ |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
/* totlen is negative or larger than the bytes left!!! */ |
if (compno >= numcomps) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: bad component number in RGN (%d when there are only %d)\n", |
compno, numcomps); |
if (!JPWL_ASSUME || JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return; |
} |
} |
}; |
#endif /* USE_JPWL */ |
tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */ |
} |
static void j2k_write_eoc(opj_j2k_t *j2k) { |
opj_cio_t *cio = j2k->cio; |
/* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */ |
cio_write(cio, J2K_MS_EOC, 2); |
/* UniPG>> */ |
#ifdef USE_JPWL |
/* update markers struct */ |
j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2); |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
static void j2k_read_eoc(opj_j2k_t *j2k) { |
int i, tileno; |
bool success; |
/* if packets should be decoded */ |
if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) { |
opj_tcd_t *tcd = tcd_create(j2k->cinfo); |
tcd_malloc_decode(tcd, j2k->image, j2k->cp); |
for (i = 0; i < j2k->cp->tileno_size; i++) { |
tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info); |
tileno = j2k->cp->tileno[i]; |
success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info); |
opj_free(j2k->tile_data[tileno]); |
j2k->tile_data[tileno] = NULL; |
tcd_free_decode_tile(tcd, i); |
if (success == false) { |
j2k->state |= J2K_STATE_ERR; |
break; |
} |
} |
tcd_free_decode(tcd); |
tcd_destroy(tcd); |
} |
/* if packets should not be decoded */ |
else { |
for (i = 0; i < j2k->cp->tileno_size; i++) { |
tileno = j2k->cp->tileno[i]; |
opj_free(j2k->tile_data[tileno]); |
j2k->tile_data[tileno] = NULL; |
} |
} |
if (j2k->state & J2K_STATE_ERR) |
j2k->state = J2K_STATE_MT + J2K_STATE_ERR; |
else |
j2k->state = J2K_STATE_MT; |
} |
typedef struct opj_dec_mstabent { |
/** marker value */ |
int id; |
/** value of the state when the marker can appear */ |
int states; |
/** action linked to the marker */ |
void (*handler) (opj_j2k_t *j2k); |
} opj_dec_mstabent_t; |
opj_dec_mstabent_t j2k_dec_mstab[] = { |
{J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc}, |
{J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot}, |
{J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod}, |
{J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc}, |
{J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz}, |
{J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod}, |
{J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc}, |
{J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn}, |
{J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd}, |
{J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc}, |
{J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc}, |
{J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm}, |
{J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm}, |
{J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt}, |
{J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm}, |
{J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt}, |
{J2K_MS_SOP, 0, 0}, |
{J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg}, |
{J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com}, |
#ifdef USE_JPWL |
{J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc}, |
{J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb}, |
{J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd}, |
{J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red}, |
#endif /* USE_JPWL */ |
#ifdef USE_JPSEC |
{J2K_MS_SEC, J2K_STATE_MH, j2k_read_sec}, |
{J2K_MS_INSEC, 0, j2k_read_insec}, |
#endif /* USE_JPSEC */ |
{0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk} |
}; |
static void j2k_read_unk(opj_j2k_t *j2k) { |
opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n"); |
#ifdef USE_JPWL |
if (j2k->cp->correct) { |
int m = 0, id, i; |
int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id; |
cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); |
id = cio_read(j2k->cio, 2); |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"JPWL: really don't know this marker %x\n", |
id); |
if (!JPWL_ASSUME) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"- possible synch loss due to uncorrectable codestream errors => giving up\n"); |
return; |
} |
/* OK, activate this at your own risk!!! */ |
/* we look for the marker at the minimum hamming distance from this */ |
while (j2k_dec_mstab[m].id) { |
/* 1's where they differ */ |
tmp_id = j2k_dec_mstab[m].id ^ id; |
/* compute the hamming distance between our id and the current */ |
cur_dist = 0; |
for (i = 0; i < 16; i++) { |
if ((tmp_id >> i) & 0x0001) { |
cur_dist++; |
} |
} |
/* if current distance is smaller, set the minimum */ |
if (cur_dist < min_dist) { |
min_dist = cur_dist; |
min_id = j2k_dec_mstab[m].id; |
} |
/* jump to the next marker */ |
m++; |
} |
/* do we substitute the marker? */ |
if (min_dist < JPWL_MAXIMUM_HAMMING) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"- marker %x is at distance %d from the read %x\n", |
min_id, min_dist, id); |
opj_event_msg(j2k->cinfo, EVT_ERROR, |
"- trying to substitute in place and crossing fingers!\n"); |
cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); |
cio_write(j2k->cio, min_id, 2); |
/* rewind */ |
cio_seek(j2k->cio, cio_tell(j2k->cio) - 2); |
} |
}; |
#endif /* USE_JPWL */ |
} |
/** |
Read the lookup table containing all the marker, status and action |
@param id Marker value |
*/ |
static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id) { |
opj_dec_mstabent_t *e; |
for (e = j2k_dec_mstab; e->id != 0; e++) { |
if (e->id == id) { |
break; |
} |
} |
return e; |
} |
/* ----------------------------------------------------------------------- */ |
/* J2K / JPT decoder interface */ |
/* ----------------------------------------------------------------------- */ |
opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo) { |
opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t)); |
if(!j2k) |
return NULL; |
j2k->default_tcp = (opj_tcp_t*) opj_calloc(1, sizeof(opj_tcp_t)); |
if(!j2k->default_tcp) { |
opj_free(j2k); |
return NULL; |
} |
j2k->cinfo = cinfo; |
j2k->tile_data = NULL; |
return j2k; |
} |
void j2k_destroy_decompress(opj_j2k_t *j2k) { |
int i = 0; |
if(j2k->tile_len != NULL) { |
opj_free(j2k->tile_len); |
} |
if(j2k->tile_data != NULL) { |
opj_free(j2k->tile_data); |
} |
if(j2k->default_tcp != NULL) { |
opj_tcp_t *default_tcp = j2k->default_tcp; |
if(default_tcp->ppt_data_first != NULL) { |
opj_free(default_tcp->ppt_data_first); |
} |
if(j2k->default_tcp->tccps != NULL) { |
opj_free(j2k->default_tcp->tccps); |
} |
opj_free(j2k->default_tcp); |
} |
if(j2k->cp != NULL) { |
opj_cp_t *cp = j2k->cp; |
if(cp->tcps != NULL) { |
for(i = 0; i < cp->tw * cp->th; i++) { |
if(cp->tcps[i].ppt_data_first != NULL) { |
opj_free(cp->tcps[i].ppt_data_first); |
} |
if(cp->tcps[i].tccps != NULL) { |
opj_free(cp->tcps[i].tccps); |
} |
} |
opj_free(cp->tcps); |
} |
if(cp->ppm_data_first != NULL) { |
opj_free(cp->ppm_data_first); |
} |
if(cp->tileno != NULL) { |
opj_free(cp->tileno); |
} |
if(cp->comment != NULL) { |
opj_free(cp->comment); |
} |
opj_free(cp); |
} |
opj_free(j2k); |
} |
void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters) { |
if(j2k && parameters) { |
/* create and initialize the coding parameters structure */ |
opj_cp_t *cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t)); |
cp->reduce = parameters->cp_reduce; |
cp->layer = parameters->cp_layer; |
cp->limit_decoding = parameters->cp_limit_decoding; |
#ifdef USE_JPWL |
cp->correct = parameters->jpwl_correct; |
cp->exp_comps = parameters->jpwl_exp_comps; |
cp->max_tiles = parameters->jpwl_max_tiles; |
#endif /* USE_JPWL */ |
/* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */ |
j2k->cp = cp; |
} |
} |
opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { |
opj_image_t *image = NULL; |
opj_common_ptr cinfo = j2k->cinfo; |
j2k->cio = cio; |
j2k->cstr_info = cstr_info; |
if (cstr_info) |
memset(cstr_info, 0, sizeof(opj_codestream_info_t)); |
/* create an empty image */ |
image = opj_image_create0(); |
j2k->image = image; |
j2k->state = J2K_STATE_MHSOC; |
for (;;) { |
opj_dec_mstabent_t *e; |
int id = cio_read(cio, 2); |
#ifdef USE_JPWL |
/* we try to honor JPWL correction power */ |
if (j2k->cp->correct) { |
int orig_pos = cio_tell(cio); |
bool status; |
/* call the corrector */ |
status = jpwl_correct(j2k); |
/* go back to where you were */ |
cio_seek(cio, orig_pos - 2); |
/* re-read the marker */ |
id = cio_read(cio, 2); |
/* check whether it begins with ff */ |
if (id >> 8 != 0xff) { |
opj_event_msg(cinfo, EVT_ERROR, |
"JPWL: possible bad marker %x at %d\n", |
id, cio_tell(cio) - 2); |
if (!JPWL_ASSUME) { |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return 0; |
} |
/* we try to correct */ |
id = id | 0xff00; |
cio_seek(cio, cio_tell(cio) - 2); |
cio_write(cio, id, 2); |
opj_event_msg(cinfo, EVT_WARNING, "- trying to adjust this\n" |
"- setting marker to %x\n", |
id); |
} |
} |
#endif /* USE_JPWL */ |
if (id >> 8 != 0xff) { |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id); |
return 0; |
} |
e = j2k_dec_mstab_lookup(id); |
// Check if the marker is known |
if (!(j2k->state & e->states)) { |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id); |
return 0; |
} |
// Check if the decoding is limited to the main header |
if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) { |
opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n"); |
return image; |
} |
if (e->handler) { |
(*e->handler)(j2k); |
} |
if (j2k->state & J2K_STATE_ERR) |
return NULL; |
if (j2k->state == J2K_STATE_MT) { |
break; |
} |
if (j2k->state == J2K_STATE_NEOC) { |
break; |
} |
} |
if (j2k->state == J2K_STATE_NEOC) { |
j2k_read_eoc(j2k); |
} |
if (j2k->state != J2K_STATE_MT) { |
opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n"); |
} |
return image; |
} |
/* |
* Read a JPT-stream and decode file |
* |
*/ |
opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { |
opj_image_t *image = NULL; |
opj_jpt_msg_header_t header; |
int position; |
opj_common_ptr cinfo = j2k->cinfo; |
j2k->cio = cio; |
/* create an empty image */ |
image = opj_image_create0(); |
j2k->image = image; |
j2k->state = J2K_STATE_MHSOC; |
/* Initialize the header */ |
jpt_init_msg_header(&header); |
/* Read the first header of the message */ |
jpt_read_msg_header(cinfo, cio, &header); |
position = cio_tell(cio); |
if (header.Class_Id != 6) { /* 6 : Main header data-bin message */ |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Main header first [class_Id %d] !\n", header.Class_Id); |
return 0; |
} |
for (;;) { |
opj_dec_mstabent_t *e = NULL; |
int id; |
if (!cio_numbytesleft(cio)) { |
j2k_read_eoc(j2k); |
return image; |
} |
/* data-bin read -> need to read a new header */ |
if ((unsigned int) (cio_tell(cio) - position) == header.Msg_length) { |
jpt_read_msg_header(cinfo, cio, &header); |
position = cio_tell(cio); |
if (header.Class_Id != 4) { /* 4 : Tile data-bin message */ |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n"); |
return 0; |
} |
} |
id = cio_read(cio, 2); |
if (id >> 8 != 0xff) { |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id); |
return 0; |
} |
e = j2k_dec_mstab_lookup(id); |
if (!(j2k->state & e->states)) { |
opj_image_destroy(image); |
opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id); |
return 0; |
} |
if (e->handler) { |
(*e->handler)(j2k); |
} |
if (j2k->state == J2K_STATE_MT) { |
break; |
} |
if (j2k->state == J2K_STATE_NEOC) { |
break; |
} |
} |
if (j2k->state == J2K_STATE_NEOC) { |
j2k_read_eoc(j2k); |
} |
if (j2k->state != J2K_STATE_MT) { |
opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n"); |
} |
return image; |
} |
/* ----------------------------------------------------------------------- */ |
/* J2K encoder interface */ |
/* ----------------------------------------------------------------------- */ |
opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo) { |
opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t)); |
if(j2k) { |
j2k->cinfo = cinfo; |
} |
return j2k; |
} |
void j2k_destroy_compress(opj_j2k_t *j2k) { |
int tileno; |
if(!j2k) return; |
if(j2k->cp != NULL) { |
opj_cp_t *cp = j2k->cp; |
if(cp->comment) { |
opj_free(cp->comment); |
} |
if(cp->matrice) { |
opj_free(cp->matrice); |
} |
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { |
opj_free(cp->tcps[tileno].tccps); |
} |
opj_free(cp->tcps); |
opj_free(cp); |
} |
opj_free(j2k); |
} |
void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image) { |
int i, j, tileno, numpocs_tile; |
opj_cp_t *cp = NULL; |
if(!j2k || !parameters || ! image) { |
return; |
} |
/* create and initialize the coding parameters structure */ |
cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t)); |
/* keep a link to cp so that we can destroy it later in j2k_destroy_compress */ |
j2k->cp = cp; |
/* set default values for cp */ |
cp->tw = 1; |
cp->th = 1; |
/* |
copy user encoding parameters |
*/ |
cp->cinema = parameters->cp_cinema; |
cp->max_comp_size = parameters->max_comp_size; |
cp->rsiz = parameters->cp_rsiz; |
cp->disto_alloc = parameters->cp_disto_alloc; |
cp->fixed_alloc = parameters->cp_fixed_alloc; |
cp->fixed_quality = parameters->cp_fixed_quality; |
/* mod fixed_quality */ |
if(parameters->cp_matrice) { |
size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 * sizeof(int); |
cp->matrice = (int *) opj_malloc(array_size); |
memcpy(cp->matrice, parameters->cp_matrice, array_size); |
} |
/* tiles */ |
cp->tdx = parameters->cp_tdx; |
cp->tdy = parameters->cp_tdy; |
/* tile offset */ |
cp->tx0 = parameters->cp_tx0; |
cp->ty0 = parameters->cp_ty0; |
/* comment string */ |
if(parameters->cp_comment) { |
cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1); |
if(cp->comment) { |
strcpy(cp->comment, parameters->cp_comment); |
} |
} |
/* |
calculate other encoding parameters |
*/ |
if (parameters->tile_size_on) { |
cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx); |
cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy); |
} else { |
cp->tdx = image->x1 - cp->tx0; |
cp->tdy = image->y1 - cp->ty0; |
} |
if(parameters->tp_on){ |
cp->tp_flag = parameters->tp_flag; |
cp->tp_on = 1; |
} |
cp->img_size = 0; |
for(i=0;i<image->numcomps ;i++){ |
cp->img_size += (image->comps[i].w *image->comps[i].h * image->comps[i].prec); |
} |
#ifdef USE_JPWL |
/* |
calculate JPWL encoding parameters |
*/ |
if (parameters->jpwl_epc_on) { |
int i; |
/* set JPWL on */ |
cp->epc_on = true; |
cp->info_on = false; /* no informative technique */ |
/* set EPB on */ |
if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) { |
cp->epb_on = true; |
cp->hprot_MH = parameters->jpwl_hprot_MH; |
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { |
cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i]; |
cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i]; |
} |
/* if tile specs are not specified, copy MH specs */ |
if (cp->hprot_TPH[0] == -1) { |
cp->hprot_TPH_tileno[0] = 0; |
cp->hprot_TPH[0] = parameters->jpwl_hprot_MH; |
} |
for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { |
cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i]; |
cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i]; |
cp->pprot[i] = parameters->jpwl_pprot[i]; |
} |
} |
/* set ESD writing */ |
if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) { |
cp->esd_on = true; |
cp->sens_size = parameters->jpwl_sens_size; |
cp->sens_addr = parameters->jpwl_sens_addr; |
cp->sens_range = parameters->jpwl_sens_range; |
cp->sens_MH = parameters->jpwl_sens_MH; |
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { |
cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i]; |
cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i]; |
} |
} |
/* always set RED writing to false: we are at the encoder */ |
cp->red_on = false; |
} else { |
cp->epc_on = false; |
} |
#endif /* USE_JPWL */ |
/* initialize the mutiple tiles */ |
/* ---------------------------- */ |
cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t)); |
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
tcp->numlayers = parameters->tcp_numlayers; |
for (j = 0; j < tcp->numlayers; j++) { |
if(cp->cinema){ |
if (cp->fixed_quality) { |
tcp->distoratio[j] = parameters->tcp_distoratio[j]; |
} |
tcp->rates[j] = parameters->tcp_rates[j]; |
}else{ |
if (cp->fixed_quality) { /* add fixed_quality */ |
tcp->distoratio[j] = parameters->tcp_distoratio[j]; |
} else { |
tcp->rates[j] = parameters->tcp_rates[j]; |
} |
} |
} |
tcp->csty = parameters->csty; |
tcp->prg = parameters->prog_order; |
tcp->mct = parameters->tcp_mct; |
numpocs_tile = 0; |
tcp->POC = 0; |
if (parameters->numpocs) { |
/* initialisation of POC */ |
tcp->POC = 1; |
for (i = 0; i < parameters->numpocs; i++) { |
if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) { |
opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile]; |
tcp_poc->resno0 = parameters->POC[numpocs_tile].resno0; |
tcp_poc->compno0 = parameters->POC[numpocs_tile].compno0; |
tcp_poc->layno1 = parameters->POC[numpocs_tile].layno1; |
tcp_poc->resno1 = parameters->POC[numpocs_tile].resno1; |
tcp_poc->compno1 = parameters->POC[numpocs_tile].compno1; |
tcp_poc->prg1 = parameters->POC[numpocs_tile].prg1; |
tcp_poc->tile = parameters->POC[numpocs_tile].tile; |
numpocs_tile++; |
} |
} |
tcp->numpocs = numpocs_tile -1 ; |
}else{ |
tcp->numpocs = 0; |
} |
tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t)); |
for (i = 0; i < image->numcomps; i++) { |
opj_tccp_t *tccp = &tcp->tccps[i]; |
tccp->csty = parameters->csty & 0x01; /* 0 => one precinct || 1 => custom precinct */ |
tccp->numresolutions = parameters->numresolution; |
tccp->cblkw = int_floorlog2(parameters->cblockw_init); |
tccp->cblkh = int_floorlog2(parameters->cblockh_init); |
tccp->cblksty = parameters->mode; |
tccp->qmfbid = parameters->irreversible ? 0 : 1; |
tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT : J2K_CCP_QNTSTY_NOQNT; |
tccp->numgbits = 2; |
if (i == parameters->roi_compno) { |
tccp->roishift = parameters->roi_shift; |
} else { |
tccp->roishift = 0; |
} |
if(parameters->cp_cinema) |
{ |
//Precinct size for lowest frequency subband=128 |
tccp->prcw[0] = 7; |
tccp->prch[0] = 7; |
//Precinct size at all other resolutions = 256 |
for (j = 1; j < tccp->numresolutions; j++) { |
tccp->prcw[j] = 8; |
tccp->prch[j] = 8; |
} |
}else{ |
if (parameters->csty & J2K_CCP_CSTY_PRT) { |
int p = 0; |
for (j = tccp->numresolutions - 1; j >= 0; j--) { |
if (p < parameters->res_spec) { |
if (parameters->prcw_init[p] < 1) { |
tccp->prcw[j] = 1; |
} else { |
tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]); |
} |
if (parameters->prch_init[p] < 1) { |
tccp->prch[j] = 1; |
}else { |
tccp->prch[j] = int_floorlog2(parameters->prch_init[p]); |
} |
} else { |
int res_spec = parameters->res_spec; |
int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1)); |
int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1)); |
if (size_prcw < 1) { |
tccp->prcw[j] = 1; |
} else { |
tccp->prcw[j] = int_floorlog2(size_prcw); |
} |
if (size_prch < 1) { |
tccp->prch[j] = 1; |
} else { |
tccp->prch[j] = int_floorlog2(size_prch); |
} |
} |
p++; |
/*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */ |
} //end for |
} else { |
for (j = 0; j < tccp->numresolutions; j++) { |
tccp->prcw[j] = 15; |
tccp->prch[j] = 15; |
} |
} |
} |
dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec); |
} |
} |
} |
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { |
int tileno, compno; |
opj_cp_t *cp = NULL; |
opj_tcd_t *tcd = NULL; /* TCD component */ |
j2k->cio = cio; |
j2k->image = image; |
cp = j2k->cp; |
/* INDEX >> */ |
j2k->cstr_info = cstr_info; |
if (cstr_info) { |
int compno; |
cstr_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tile_info_t)); |
cstr_info->image_w = image->x1 - image->x0; |
cstr_info->image_h = image->y1 - image->y0; |
cstr_info->prog = (&cp->tcps[0])->prg; |
cstr_info->tw = cp->tw; |
cstr_info->th = cp->th; |
cstr_info->tile_x = cp->tdx; /* new version parser */ |
cstr_info->tile_y = cp->tdy; /* new version parser */ |
cstr_info->tile_Ox = cp->tx0; /* new version parser */ |
cstr_info->tile_Oy = cp->ty0; /* new version parser */ |
cstr_info->numcomps = image->numcomps; |
cstr_info->numlayers = (&cp->tcps[0])->numlayers; |
cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int)); |
for (compno=0; compno < image->numcomps; compno++) { |
cstr_info->numdecompos[compno] = (&cp->tcps[0])->tccps->numresolutions - 1; |
} |
cstr_info->D_max = 0.0; /* ADD Marcela */ |
cstr_info->main_head_start = cio_tell(cio); /* position of SOC */ |
cstr_info->maxmarknum = 100; |
cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum * sizeof(opj_marker_info_t)); |
cstr_info->marknum = 0; |
} |
/* << INDEX */ |
j2k_write_soc(j2k); |
j2k_write_siz(j2k); |
j2k_write_cod(j2k); |
j2k_write_qcd(j2k); |
if(cp->cinema){ |
for (compno = 1; compno < image->numcomps; compno++) { |
j2k_write_coc(j2k, compno); |
j2k_write_qcc(j2k, compno); |
} |
} |
for (compno = 0; compno < image->numcomps; compno++) { |
opj_tcp_t *tcp = &cp->tcps[0]; |
if (tcp->tccps[compno].roishift) |
j2k_write_rgn(j2k, compno, 0); |
} |
if (cp->comment != NULL) { |
j2k_write_com(j2k); |
} |
j2k->totnum_tp = j2k_calculate_tp(cp,image->numcomps,image,j2k); |
/* TLM Marker*/ |
if(cp->cinema){ |
j2k_write_tlm(j2k); |
if (cp->cinema == CINEMA4K_24) { |
j2k_write_poc(j2k); |
} |
} |
/* uncomment only for testing JPSEC marker writing */ |
/* j2k_write_sec(j2k); */ |
/* INDEX >> */ |
if(cstr_info) { |
cstr_info->main_head_end = cio_tell(cio) - 1; |
} |
/* << INDEX */ |
/**** Main Header ENDS here ***/ |
/* create the tile encoder */ |
tcd = tcd_create(j2k->cinfo); |
/* encode each tile */ |
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) { |
int pino; |
int tilepartno=0; |
/* UniPG>> */ |
int acc_pack_num = 0; |
/* <<UniPG */ |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th); |
j2k->curtileno = tileno; |
j2k->cur_tp_num = 0; |
tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno]; |
/* initialisation before tile encoding */ |
if (tileno == 0) { |
tcd_malloc_encode(tcd, image, cp, j2k->curtileno); |
} else { |
tcd_init_encode(tcd, image, cp, j2k->curtileno); |
} |
/* INDEX >> */ |
if(cstr_info) { |
cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction; |
} |
/* << INDEX */ |
for(pino = 0; pino <= tcp->numpocs; pino++) { |
int tot_num_tp; |
tcd->cur_pino=pino; |
/*Get number of tile parts*/ |
tot_num_tp = j2k_get_num_tp(cp,pino,tileno); |
tcd->tp_pos = cp->tp_pos; |
for(tilepartno = 0; tilepartno < tot_num_tp ; tilepartno++){ |
j2k->tp_num = tilepartno; |
/* INDEX >> */ |
if(cstr_info) |
cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pos = |
cio_tell(cio) + j2k->pos_correction; |
/* << INDEX */ |
j2k_write_sot(j2k); |
if(j2k->cur_tp_num == 0 && cp->cinema == 0){ |
for (compno = 1; compno < image->numcomps; compno++) { |
j2k_write_coc(j2k, compno); |
j2k_write_qcc(j2k, compno); |
} |
if (cp->tcps[tileno].numpocs) { |
j2k_write_poc(j2k); |
} |
} |
/* INDEX >> */ |
if(cstr_info) |
cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header = |
cio_tell(cio) + j2k->pos_correction + 1; |
/* << INDEX */ |
j2k_write_sod(j2k, tcd); |
/* INDEX >> */ |
if(cstr_info) { |
cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos = |
cio_tell(cio) + j2k->pos_correction - 1; |
cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack = |
acc_pack_num; |
cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks = |
cstr_info->packno - acc_pack_num; |
acc_pack_num = cstr_info->packno; |
} |
/* << INDEX */ |
j2k->cur_tp_num++; |
} |
} |
if(cstr_info) { |
cstr_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction - 1; |
} |
/* |
if (tile->PPT) { // BAD PPT !!! |
FILE *PPT_file; |
int i; |
PPT_file=fopen("PPT","rb"); |
fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256); |
for (i=0;i<tile->len_ppt;i++) { |
unsigned char elmt; |
fread(&elmt, 1, 1, PPT_file); |
fwrite(&elmt,1,1,f); |
} |
fclose(PPT_file); |
unlink("PPT"); |
} |
*/ |
} |
/* destroy the tile encoder */ |
tcd_free_encode(tcd); |
tcd_destroy(tcd); |
opj_free(j2k->cur_totnum_tp); |
j2k_write_eoc(j2k); |
if(cstr_info) { |
cstr_info->codestream_size = cio_tell(cio) + j2k->pos_correction; |
/* UniPG>> */ |
/* The following adjustment is done to adjust the codestream size */ |
/* if SOD is not at 0 in the buffer. Useful in case of JP2, where */ |
/* the first bunch of bytes is not in the codestream */ |
cstr_info->codestream_size -= cstr_info->main_head_start; |
/* <<UniPG */ |
} |
#ifdef USE_JPWL |
/* |
preparation of JPWL marker segments |
*/ |
if(cp->epc_on) { |
/* encode according to JPWL */ |
jpwl_encode(j2k, cio, image); |
} |
#endif /* USE_JPWL */ |
return true; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/j2k.h |
---|
0,0 → 1,446 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __J2K_H |
#define __J2K_H |
/** |
@file j2k.h |
@brief The JPEG-2000 Codestream Reader/Writer (J2K) |
The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data. |
*/ |
/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ |
/*@{*/ |
#define J2K_CP_CSTY_PRT 0x01 |
#define J2K_CP_CSTY_SOP 0x02 |
#define J2K_CP_CSTY_EPH 0x04 |
#define J2K_CCP_CSTY_PRT 0x01 |
#define J2K_CCP_CBLKSTY_LAZY 0x01 /**< Selective arithmetic coding bypass */ |
#define J2K_CCP_CBLKSTY_RESET 0x02 /**< Reset context probabilities on coding pass boundaries */ |
#define J2K_CCP_CBLKSTY_TERMALL 0x04 /**< Termination on each coding pass */ |
#define J2K_CCP_CBLKSTY_VSC 0x08 /**< Vertically stripe causal context */ |
#define J2K_CCP_CBLKSTY_PTERM 0x10 /**< Predictable termination */ |
#define J2K_CCP_CBLKSTY_SEGSYM 0x20 /**< Segmentation symbols are used */ |
#define J2K_CCP_QNTSTY_NOQNT 0 |
#define J2K_CCP_QNTSTY_SIQNT 1 |
#define J2K_CCP_QNTSTY_SEQNT 2 |
/* ----------------------------------------------------------------------- */ |
#define J2K_MS_SOC 0xff4f /**< SOC marker value */ |
#define J2K_MS_SOT 0xff90 /**< SOT marker value */ |
#define J2K_MS_SOD 0xff93 /**< SOD marker value */ |
#define J2K_MS_EOC 0xffd9 /**< EOC marker value */ |
#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */ |
#define J2K_MS_COD 0xff52 /**< COD marker value */ |
#define J2K_MS_COC 0xff53 /**< COC marker value */ |
#define J2K_MS_RGN 0xff5e /**< RGN marker value */ |
#define J2K_MS_QCD 0xff5c /**< QCD marker value */ |
#define J2K_MS_QCC 0xff5d /**< QCC marker value */ |
#define J2K_MS_POC 0xff5f /**< POC marker value */ |
#define J2K_MS_TLM 0xff55 /**< TLM marker value */ |
#define J2K_MS_PLM 0xff57 /**< PLM marker value */ |
#define J2K_MS_PLT 0xff58 /**< PLT marker value */ |
#define J2K_MS_PPM 0xff60 /**< PPM marker value */ |
#define J2K_MS_PPT 0xff61 /**< PPT marker value */ |
#define J2K_MS_SOP 0xff91 /**< SOP marker value */ |
#define J2K_MS_EPH 0xff92 /**< EPH marker value */ |
#define J2K_MS_CRG 0xff63 /**< CRG marker value */ |
#define J2K_MS_COM 0xff64 /**< COM marker value */ |
/* UniPG>> */ |
#ifdef USE_JPWL |
#define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_EPB 0xff66 /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_ESD 0xff67 /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */ |
#define J2K_MS_RED 0xff69 /**< RED marker value (Part 11: JPEG 2000 for Wireless) */ |
#endif /* USE_JPWL */ |
#ifdef USE_JPSEC |
#define J2K_MS_SEC 0xff65 /**< SEC marker value (Part 8: Secure JPEG 2000) */ |
#define J2K_MS_INSEC 0xff94 /**< INSEC marker value (Part 8: Secure JPEG 2000) */ |
#endif /* USE_JPSEC */ |
/* <<UniPG */ |
/* ----------------------------------------------------------------------- */ |
/** |
Values that specify the status of the decoding process when decoding the main header. |
These values may be combined with a | operator. |
*/ |
typedef enum J2K_STATUS { |
J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */ |
J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */ |
J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */ |
J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */ |
J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */ |
J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */ |
J2K_STATE_NEOC = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */ |
J2K_STATE_ERR = 0x0080 /**< the decoding process has encountered an error */ |
} J2K_STATUS; |
/* ----------------------------------------------------------------------- */ |
/** |
T2 encoding mode |
*/ |
typedef enum T2_MODE { |
THRESH_CALC = 0, /** Function called in Rate allocation process*/ |
FINAL_PASS = 1 /** Function called in Tier 2 process*/ |
}J2K_T2_MODE; |
/** |
Quantization stepsize |
*/ |
typedef struct opj_stepsize { |
/** exponent */ |
int expn; |
/** mantissa */ |
int mant; |
} opj_stepsize_t; |
/** |
Tile-component coding parameters |
*/ |
typedef struct opj_tccp { |
/** coding style */ |
int csty; |
/** number of resolutions */ |
int numresolutions; |
/** code-blocks width */ |
int cblkw; |
/** code-blocks height */ |
int cblkh; |
/** code-block coding style */ |
int cblksty; |
/** discrete wavelet transform identifier */ |
int qmfbid; |
/** quantisation style */ |
int qntsty; |
/** stepsizes used for quantization */ |
opj_stepsize_t stepsizes[J2K_MAXBANDS]; |
/** number of guard bits */ |
int numgbits; |
/** Region Of Interest shift */ |
int roishift; |
/** precinct width */ |
int prcw[J2K_MAXRLVLS]; |
/** precinct height */ |
int prch[J2K_MAXRLVLS]; |
} opj_tccp_t; |
/** |
Tile coding parameters : |
this structure is used to store coding/decoding parameters common to all |
tiles (information like COD, COC in main header) |
*/ |
typedef struct opj_tcp { |
/** 1 : first part-tile of a tile */ |
int first; |
/** coding style */ |
int csty; |
/** progression order */ |
OPJ_PROG_ORDER prg; |
/** number of layers */ |
int numlayers; |
/** multi-component transform identifier */ |
int mct; |
/** rates of layers */ |
float rates[100]; |
/** number of progression order changes */ |
int numpocs; |
/** indicates if a POC marker has been used O:NO, 1:YES */ |
int POC; |
/** progression order changes */ |
opj_poc_t pocs[32]; |
/** packet header store there for futur use in t2_decode_packet */ |
unsigned char *ppt_data; |
/** pointer remaining on the first byte of the first header if ppt is used */ |
unsigned char *ppt_data_first; |
/** If ppt == 1 --> there was a PPT marker for the present tile */ |
int ppt; |
/** used in case of multiple marker PPT (number of info already stored) */ |
int ppt_store; |
/** ppmbug1 */ |
int ppt_len; |
/** add fixed_quality */ |
float distoratio[100]; |
/** tile-component coding parameters */ |
opj_tccp_t *tccps; |
} opj_tcp_t; |
/** |
Coding parameters |
*/ |
typedef struct opj_cp { |
/** Digital cinema profile*/ |
OPJ_CINEMA_MODE cinema; |
/** Maximum rate for each component. If == 0, component size limitation is not considered */ |
int max_comp_size; |
/** Size of the image in bits*/ |
int img_size; |
/** Rsiz*/ |
OPJ_RSIZ_CAPABILITIES rsiz; |
/** Enabling Tile part generation*/ |
char tp_on; |
/** Flag determining tile part generation*/ |
char tp_flag; |
/** Position of tile part flag in progression order*/ |
int tp_pos; |
/** allocation by rate/distortion */ |
int disto_alloc; |
/** allocation by fixed layer */ |
int fixed_alloc; |
/** add fixed_quality */ |
int fixed_quality; |
/** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ |
int reduce; |
/** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ |
int layer; |
/** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */ |
OPJ_LIMIT_DECODING limit_decoding; |
/** XTOsiz */ |
int tx0; |
/** YTOsiz */ |
int ty0; |
/** XTsiz */ |
int tdx; |
/** YTsiz */ |
int tdy; |
/** comment for coding */ |
char *comment; |
/** number of tiles in width */ |
int tw; |
/** number of tiles in heigth */ |
int th; |
/** ID number of the tiles present in the codestream */ |
int *tileno; |
/** size of the vector tileno */ |
int tileno_size; |
/** packet header store there for futur use in t2_decode_packet */ |
unsigned char *ppm_data; |
/** pointer remaining on the first byte of the first header if ppm is used */ |
unsigned char *ppm_data_first; |
/** if ppm == 1 --> there was a PPM marker for the present tile */ |
int ppm; |
/** use in case of multiple marker PPM (number of info already store) */ |
int ppm_store; |
/** use in case of multiple marker PPM (case on non-finished previous info) */ |
int ppm_previous; |
/** ppmbug1 */ |
int ppm_len; |
/** tile coding parameters */ |
opj_tcp_t *tcps; |
/** fixed layer */ |
int *matrice; |
/* UniPG>> */ |
#ifdef USE_JPWL |
/** enables writing of EPC in MH, thus activating JPWL */ |
bool epc_on; |
/** enables writing of EPB, in case of activated JPWL */ |
bool epb_on; |
/** enables writing of ESD, in case of activated JPWL */ |
bool esd_on; |
/** enables writing of informative techniques of ESD, in case of activated JPWL */ |
bool info_on; |
/** enables writing of RED, in case of activated JPWL */ |
bool red_on; |
/** error protection method for MH (0,1,16,32,37-128) */ |
int hprot_MH; |
/** tile number of header protection specification (>=0) */ |
int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** error protection methods for TPHs (0,1,16,32,37-128) */ |
int hprot_TPH[JPWL_MAX_NO_TILESPECS]; |
/** tile number of packet protection specification (>=0) */ |
int pprot_tileno[JPWL_MAX_NO_PACKSPECS]; |
/** packet number of packet protection specification (>=0) */ |
int pprot_packno[JPWL_MAX_NO_PACKSPECS]; |
/** error protection methods for packets (0,1,16,32,37-128) */ |
int pprot[JPWL_MAX_NO_PACKSPECS]; |
/** enables writing of ESD, (0/2/4 bytes) */ |
int sens_size; |
/** sensitivity addressing size (0=auto/2/4 bytes) */ |
int sens_addr; |
/** sensitivity range (0-3) */ |
int sens_range; |
/** sensitivity method for MH (-1,0-7) */ |
int sens_MH; |
/** tile number of sensitivity specification (>=0) */ |
int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** sensitivity methods for TPHs (-1,0-7) */ |
int sens_TPH[JPWL_MAX_NO_TILESPECS]; |
/** enables JPWL correction at the decoder */ |
bool correct; |
/** expected number of components at the decoder */ |
int exp_comps; |
/** maximum number of tiles at the decoder */ |
int max_tiles; |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} opj_cp_t; |
/** |
JPEG-2000 codestream reader/writer |
*/ |
typedef struct opj_j2k { |
/** codec context */ |
opj_common_ptr cinfo; |
/** locate in which part of the codestream the decoder is (main header, tile header, end) */ |
int state; |
/** number of the tile curently concern by coding/decoding */ |
int curtileno; |
/** Tile part number*/ |
int tp_num; |
/** Tilepart number currently coding*/ |
int cur_tp_num; |
/** Total number of tileparts of the current tile*/ |
int *cur_totnum_tp; |
/** |
locate the start position of the TLM marker |
after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length. |
*/ |
int tlm_start; |
/** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/ |
/** used in TLMmarker*/ |
int totnum_tp; |
/** |
locate the position of the end of the tile in the codestream, |
used to detect a truncated codestream (in j2k_read_sod) |
*/ |
unsigned char *eot; |
/** |
locate the start position of the SOT marker of the current coded tile: |
after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length. |
*/ |
int sot_start; |
int sod_start; |
/** |
as the J2K-file is written in several parts during encoding, |
it enables to make the right correction in position return by cio_tell |
*/ |
int pos_correction; |
/** array used to store the data of each tile */ |
unsigned char **tile_data; |
/** array used to store the length of each tile */ |
int *tile_len; |
/** |
decompression only : |
store decoding parameters common to all tiles (information like COD, COC in main header) |
*/ |
opj_tcp_t *default_tcp; |
/** pointer to the encoded / decoded image */ |
opj_image_t *image; |
/** pointer to the coding parameters */ |
opj_cp_t *cp; |
/** helper used to write the index file */ |
opj_codestream_info_t *cstr_info; |
/** pointer to the byte i/o stream */ |
opj_cio_t *cio; |
} opj_j2k_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Creates a J2K decompression structure |
@param cinfo Codec context info |
@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise |
*/ |
opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo); |
/** |
Destroy a J2K decompressor handle |
@param j2k J2K decompressor handle to destroy |
*/ |
void j2k_destroy_decompress(opj_j2k_t *j2k); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in j2k->cp. |
@param j2k J2K decompressor handle |
@param parameters decompression parameters |
*/ |
void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 codestream |
@param j2k J2K decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Decode an image form a JPT-stream (JPEG 2000, JPIP) |
@param j2k J2K decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a J2K compression structure |
@param cinfo Codec context info |
@return Returns a handle to a J2K compressor if successful, returns NULL otherwise |
*/ |
opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo); |
/** |
Destroy a J2K compressor handle |
@param j2k J2K compressor handle to destroy |
*/ |
void j2k_destroy_compress(opj_j2k_t *j2k); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
Coding parameters are returned in j2k->cp. |
@param j2k J2K compressor handle |
@param parameters compression parameters |
@param image input filled image |
*/ |
void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Converts an enum type progression order to string type |
*/ |
char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); |
/** |
Encode an image into a JPEG-2000 codestream |
@param j2k J2K compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __J2K_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/j2k_lib.c |
---|
0,0 → 1,59 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef _WIN32 |
#include <windows.h> |
#else |
#include <sys/time.h> |
#include <sys/resource.h> |
#include <sys/times.h> |
#endif /* _WIN32 */ |
#include "opj_includes.h" |
double opj_clock(void) { |
#ifdef _WIN32 |
/* _WIN32: use QueryPerformance (very accurate) */ |
LARGE_INTEGER freq , t ; |
/* freq is the clock speed of the CPU */ |
QueryPerformanceFrequency(&freq) ; |
/* cout << "freq = " << ((double) freq.QuadPart) << endl; */ |
/* t is the high resolution performance counter (see MSDN) */ |
QueryPerformanceCounter ( & t ) ; |
return ( t.QuadPart /(double) freq.QuadPart ) ; |
#else |
/* Unix or Linux: use resource usage */ |
struct rusage t; |
double procTime; |
/* (1) Get the rusage data structure at this moment (man getrusage) */ |
getrusage(0,&t); |
/* (2) What is the elapsed time ? - CPU time = User time + System time */ |
/* (2a) Get the seconds */ |
procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec; |
/* (2b) More precisely! Get the microseconds part ! */ |
return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ; |
#endif |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/j2k_lib.h |
---|
0,0 → 1,54 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __J2K_LIB_H |
#define __J2K_LIB_H |
/** |
@file j2k_lib.h |
@brief Internal functions |
The functions in J2K_LIB.C are internal utilities mainly used for timing. |
*/ |
/** @defgroup MISC MISC - Miscellaneous internal functions */ |
/*@{*/ |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Difference in successive opj_clock() calls tells you the elapsed time |
@return Returns time in seconds |
*/ |
double opj_clock(void); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __J2K_LIB_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/jp2.c |
---|
0,0 → 1,1089 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
/** |
Read box headers |
@param cinfo Codec context info |
@param cio Input stream |
@param box |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box); |
/*static void jp2_write_url(opj_cio_t *cio, char *Idx_file);*/ |
/** |
Read the IHDR box - Image Header box |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio); |
static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio); |
static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio); |
static bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio); |
static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio); |
/** |
Write the FTYP box - File type box |
@param jp2 JP2 handle |
@param cio Output buffer stream |
*/ |
static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio); |
/** |
Read the FTYP box - File type box |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio); |
static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
static bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset); |
static void jp2_write_jp(opj_cio_t *cio); |
/** |
Read the JP box - JPEG 2000 signature |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio); |
/** |
Decode the structure of a JP2 file |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param color Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_color_t *color); |
/** |
Apply collected palette data |
@param color Collector for profile, cdef and pclr data |
@param image |
*/ |
static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image); |
/** |
Collect palette data |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param box |
@param color Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color); |
/** |
Collect component mapping data |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param box |
@param color Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color); |
/** |
Collect colour specification data |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param box |
@param color Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color); |
/*@}*/ |
/*@}*/ |
/* ----------------------------------------------------------------------- */ |
static bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box) { |
box->init_pos = cio_tell(cio); |
box->length = cio_read(cio, 4); |
box->type = cio_read(cio, 4); |
if (box->length == 1) { |
if (cio_read(cio, 4) != 0) { |
opj_event_msg(cinfo, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n"); |
return false; |
} |
box->length = cio_read(cio, 4); |
if (box->length == 0) |
box->length = cio_numbytesleft(cio) + 12; |
} |
else if (box->length == 0) { |
box->length = cio_numbytesleft(cio) + 8; |
} |
return true; |
} |
#if 0 |
static void jp2_write_url(opj_cio_t *cio, char *Idx_file) { |
unsigned int i; |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_URL, 4); /* DBTL */ |
cio_write(cio, 0, 1); /* VERS */ |
cio_write(cio, 0, 3); /* FLAG */ |
if(Idx_file) { |
for (i = 0; i < strlen(Idx_file); i++) { |
cio_write(cio, Idx_file[i], 1); |
} |
} |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
#endif |
static bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) { |
opj_jp2_box_t box; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
if (JP2_IHDR != box.type) { |
opj_event_msg(cinfo, EVT_ERROR, "Expected IHDR Marker\n"); |
return false; |
} |
jp2->h = cio_read(cio, 4); /* HEIGHT */ |
jp2->w = cio_read(cio, 4); /* WIDTH */ |
jp2->numcomps = cio_read(cio, 2); /* NC */ |
jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t)); |
jp2->bpc = cio_read(cio, 1); /* BPC */ |
jp2->C = cio_read(cio, 1); /* C */ |
jp2->UnkC = cio_read(cio, 1); /* UnkC */ |
jp2->IPR = cio_read(cio, 1); /* IPR */ |
if (cio_tell(cio) - box.init_pos != box.length) { |
opj_event_msg(cinfo, EVT_ERROR, "Error with IHDR Box\n"); |
return false; |
} |
return true; |
} |
static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) { |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_IHDR, 4); /* IHDR */ |
cio_write(cio, jp2->h, 4); /* HEIGHT */ |
cio_write(cio, jp2->w, 4); /* WIDTH */ |
cio_write(cio, jp2->numcomps, 2); /* NC */ |
cio_write(cio, jp2->bpc, 1); /* BPC */ |
cio_write(cio, jp2->C, 1); /* C : Always 7 */ |
cio_write(cio, jp2->UnkC, 1); /* UnkC, colorspace unknown */ |
cio_write(cio, jp2->IPR, 1); /* IPR, no intellectual property */ |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) { |
unsigned int i; |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_BPCC, 4); /* BPCC */ |
for (i = 0; i < jp2->numcomps; i++) { |
cio_write(cio, jp2->comps[i].bpcc, 1); |
} |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) { |
unsigned int i; |
opj_jp2_box_t box; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
if (JP2_BPCC != box.type) { |
opj_event_msg(cinfo, EVT_ERROR, "Expected BPCC Marker\n"); |
return false; |
} |
for (i = 0; i < jp2->numcomps; i++) { |
jp2->comps[i].bpcc = cio_read(cio, 1); |
} |
if (cio_tell(cio) - box.init_pos != box.length) { |
opj_event_msg(cinfo, EVT_ERROR, "Error with BPCC Box\n"); |
return false; |
} |
return true; |
} |
static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio) { |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_COLR, 4); /* COLR */ |
cio_write(cio, jp2->meth, 1); /* METH */ |
cio_write(cio, jp2->precedence, 1); /* PRECEDENCE */ |
cio_write(cio, jp2->approx, 1); /* APPROX */ |
if (jp2->meth == 1) { |
cio_write(cio, jp2->enumcs, 4); /* EnumCS */ |
} else { |
cio_write(cio, 0, 1); /* PROFILE (??) */ |
} |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static void jp2_free_pclr(opj_jp2_color_t *color) |
{ |
opj_free(color->jp2_pclr->channel_sign); |
opj_free(color->jp2_pclr->channel_size); |
opj_free(color->jp2_pclr->entries); |
if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap); |
opj_free(color->jp2_pclr); color->jp2_pclr = NULL; |
} |
static void free_color_data(opj_jp2_color_t *color) |
{ |
if(color->jp2_pclr) |
{ |
jp2_free_pclr(color); |
} |
if(color->jp2_cdef) |
{ |
if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); |
opj_free(color->jp2_cdef); |
} |
if(color->icc_profile_buf) opj_free(color->icc_profile_buf); |
} |
static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image) |
{ |
opj_image_comp_t *old_comps, *new_comps; |
unsigned char *channel_size, *channel_sign; |
unsigned int *entries; |
opj_jp2_cmap_comp_t *cmap; |
int *src, *dst; |
unsigned int j, max; |
unsigned short i, nr_channels, cmp, pcol; |
int k, top_k; |
channel_size = color->jp2_pclr->channel_size; |
channel_sign = color->jp2_pclr->channel_sign; |
entries = color->jp2_pclr->entries; |
cmap = color->jp2_pclr->cmap; |
nr_channels = color->jp2_pclr->nr_channels; |
old_comps = image->comps; |
new_comps = (opj_image_comp_t*) |
opj_malloc(nr_channels * sizeof(opj_image_comp_t)); |
for(i = 0; i < nr_channels; ++i) |
{ |
pcol = cmap[i].pcol; cmp = cmap[i].cmp; |
new_comps[pcol] = old_comps[cmp]; |
if(cmap[i].mtyp == 0) /* Direct use */ |
{ |
old_comps[cmp].data = NULL; continue; |
} |
/* Palette mapping: */ |
new_comps[pcol].data = (int*) |
opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(int)); |
new_comps[pcol].prec = channel_size[i]; |
new_comps[pcol].sgnd = channel_sign[i]; |
} |
top_k = color->jp2_pclr->nr_entries - 1; |
for(i = 0; i < nr_channels; ++i) |
{ |
/* Direct use: */ |
if(cmap[i].mtyp == 0) continue; |
/* Palette mapping: */ |
cmp = cmap[i].cmp; pcol = cmap[i].pcol; |
src = old_comps[cmp].data; |
dst = new_comps[pcol].data; |
max = new_comps[pcol].w * new_comps[pcol].h; |
for(j = 0; j < max; ++j) |
{ |
/* The index */ |
if((k = src[j]) < 0) k = 0; else if(k > top_k) k = top_k; |
/* The colour */ |
dst[j] = entries[k * nr_channels + pcol]; |
} |
} |
max = image->numcomps; |
for(i = 0; i < max; ++i) |
{ |
if(old_comps[i].data) opj_free(old_comps[i].data); |
} |
opj_free(old_comps); |
image->comps = new_comps; |
image->numcomps = nr_channels; |
jp2_free_pclr(color); |
}/* apply_pclr() */ |
static bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color) |
{ |
opj_jp2_pclr_t *jp2_pclr; |
unsigned char *channel_size, *channel_sign; |
unsigned int *entries; |
unsigned short nr_entries, nr_channels; |
unsigned short i, j; |
unsigned char uc; |
/* Part 1, I.5.3.4: 'There shall be at most one Palette box inside |
* a JP2 Header box' : |
*/ |
if(color->jp2_pclr) return false; |
nr_entries = cio_read(cio, 2); /* NE */ |
nr_channels = cio_read(cio, 1);/* NPC */ |
entries = (unsigned int*) |
opj_malloc(nr_channels * nr_entries * sizeof(unsigned int)); |
channel_size = (unsigned char*)opj_malloc(nr_channels); |
channel_sign = (unsigned char*)opj_malloc(nr_channels); |
jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t)); |
jp2_pclr->channel_sign = channel_sign; |
jp2_pclr->channel_size = channel_size; |
jp2_pclr->entries = entries; |
jp2_pclr->nr_entries = nr_entries; |
jp2_pclr->nr_channels = nr_channels; |
jp2_pclr->cmap = NULL; |
color->jp2_pclr = jp2_pclr; |
for(i = 0; i < nr_channels; ++i) |
{ |
uc = cio_read(cio, 1); /* Bi */ |
channel_size[i] = (uc & 0x7f) + 1; |
channel_sign[i] = (uc & 0x80)?1:0; |
} |
for(j = 0; j < nr_entries; ++j) |
{ |
for(i = 0; i < nr_channels; ++i) |
{ |
/* Cji */ |
*entries++ = cio_read(cio, channel_size[i]>>3); |
} |
} |
return true; |
}/* jp2_read_pclr() */ |
static bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color) |
{ |
opj_jp2_cmap_comp_t *cmap; |
unsigned short i, nr_channels; |
/* Need nr_channels: */ |
if(color->jp2_pclr == NULL) return false; |
/* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box |
* inside a JP2 Header box' : |
*/ |
if(color->jp2_pclr->cmap) return false; |
nr_channels = color->jp2_pclr->nr_channels; |
cmap = (opj_jp2_cmap_comp_t*) |
opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t)); |
for(i = 0; i < nr_channels; ++i) |
{ |
cmap[i].cmp = cio_read(cio, 2); |
cmap[i].mtyp = cio_read(cio, 1); |
cmap[i].pcol = cio_read(cio, 1); |
} |
color->jp2_pclr->cmap = cmap; |
return true; |
}/* jp2_read_cmap() */ |
static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color) |
{ |
opj_jp2_cdef_info_t *info; |
int color_space; |
unsigned short i, n, cn, typ, asoc, acn; |
color_space = image->color_space; |
info = color->jp2_cdef->info; |
n = color->jp2_cdef->n; |
for(i = 0; i < n; ++i) |
{ |
/* WATCH: acn = asoc - 1 ! */ |
if((asoc = info[i].asoc) == 0) continue; |
cn = info[i].cn; typ = info[i].typ; acn = asoc - 1; |
if(cn != acn) |
{ |
opj_image_comp_t saved; |
memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t)); |
memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t)); |
memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t)); |
info[i].asoc = cn + 1; |
info[acn].asoc = info[acn].cn + 1; |
} |
} |
if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); |
opj_free(color->jp2_cdef); color->jp2_cdef = NULL; |
}/* jp2_apply_cdef() */ |
static bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color) |
{ |
opj_jp2_cdef_info_t *info; |
unsigned short i, n; |
/* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box |
* inside a JP2 Header box.' |
*/ |
if(color->jp2_cdef) return false; |
if((n = cio_read(cio, 2)) == 0) return false; /* szukw000: FIXME */ |
info = (opj_jp2_cdef_info_t*) |
opj_malloc(n * sizeof(opj_jp2_cdef_info_t)); |
color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t)); |
color->jp2_cdef->info = info; |
color->jp2_cdef->n = n; |
for(i = 0; i < n; ++i) |
{ |
info[i].cn = cio_read(cio, 2); |
info[i].typ = cio_read(cio, 2); |
info[i].asoc = cio_read(cio, 2); |
} |
return true; |
}/* jp2_read_cdef() */ |
static bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_box_t *box, opj_jp2_color_t *color) |
{ |
int skip_len; |
opj_common_ptr cinfo; |
/* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour |
* Specification boxes after the first.' |
*/ |
if(color->jp2_has_colr) return false; |
cinfo = jp2->cinfo; |
jp2->meth = cio_read(cio, 1); /* METH */ |
jp2->precedence = cio_read(cio, 1); /* PRECEDENCE */ |
jp2->approx = cio_read(cio, 1); /* APPROX */ |
if (jp2->meth == 1) |
{ |
jp2->enumcs = cio_read(cio, 4); /* EnumCS */ |
} |
else |
{ |
/* skip PROFILE */ |
skip_len = box->init_pos + box->length - cio_tell(cio); |
if (skip_len < 0) |
{ |
opj_event_msg(cinfo, EVT_ERROR, "Error with COLR box size\n"); |
return false; |
} |
if(skip_len > 0) |
{ |
unsigned char *start; |
start = cio_getbp(cio); |
color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len); |
color->icc_profile_len = skip_len; |
cio_skip(cio, box->init_pos + box->length - cio_tell(cio)); |
memcpy(color->icc_profile_buf, start, skip_len); |
} |
} |
if (cio_tell(cio) - box->init_pos != box->length) |
{ |
opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n"); |
return false; |
} |
color->jp2_has_colr = 1; |
return true; |
}/* jp2_read_colr() */ |
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color) |
{ |
opj_jp2_box_t box; |
unsigned int jp2h_end; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
do |
{ |
if (JP2_JP2H != box.type) |
{ |
if (box.type == JP2_JP2C) |
{ |
opj_event_msg(cinfo, EVT_ERROR, "Expected JP2H Marker\n"); |
return false; |
} |
cio_skip(cio, box.length - 8); |
if(cio->bp >= cio->end) return false; |
jp2_read_boxhdr(cinfo, cio, &box); |
} |
} while(JP2_JP2H != box.type); |
if (!jp2_read_ihdr(jp2, cio)) |
return false; |
jp2h_end = box.init_pos + box.length; |
if (jp2->bpc == 255) |
{ |
if (!jp2_read_bpcc(jp2, cio)) |
return false; |
} |
jp2_read_boxhdr(cinfo, cio, &box); |
while(cio_tell(cio) < jp2h_end) |
{ |
if(box.type == JP2_COLR) |
{ |
if( !jp2_read_colr(jp2, cio, &box, color)) |
{ |
cio_seek(cio, box.init_pos + 8); |
cio_skip(cio, box.length - 8); |
} |
jp2_read_boxhdr(cinfo, cio, &box); |
continue; |
} |
if(box.type == JP2_CDEF) |
{ |
if( !jp2_read_cdef(jp2, cio, &box, color)) |
{ |
cio_seek(cio, box.init_pos + 8); |
cio_skip(cio, box.length - 8); |
} |
jp2_read_boxhdr(cinfo, cio, &box); |
continue; |
} |
if(box.type == JP2_PCLR) |
{ |
if( !jp2_read_pclr(jp2, cio, &box, color)) |
{ |
cio_seek(cio, box.init_pos + 8); |
cio_skip(cio, box.length - 8); |
} |
jp2_read_boxhdr(cinfo, cio, &box); |
continue; |
} |
if(box.type == JP2_CMAP) |
{ |
if( !jp2_read_cmap(jp2, cio, &box, color)) |
{ |
cio_seek(cio, box.init_pos + 8); |
cio_skip(cio, box.length - 8); |
} |
jp2_read_boxhdr(cinfo, cio, &box); |
continue; |
} |
cio_seek(cio, box.init_pos + 8); |
cio_skip(cio, box.length - 8); |
jp2_read_boxhdr(cinfo, cio, &box); |
}/* while(cio_tell(cio) < box_end) */ |
cio_seek(cio, jp2h_end); |
/* Part 1, I.5.3.3 : 'must contain at least one' */ |
return (color->jp2_has_colr == 1); |
}/* jp2_read_jp2h() */ |
opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_codestream_info_t *cstr_info) |
{ |
opj_common_ptr cinfo; |
opj_image_t *image = NULL; |
opj_jp2_color_t color; |
if(!jp2 || !cio) |
{ |
return NULL; |
} |
memset(&color, 0, sizeof(opj_jp2_color_t)); |
cinfo = jp2->cinfo; |
/* JP2 decoding */ |
if(!jp2_read_struct(jp2, cio, &color)) |
{ |
free_color_data(&color); |
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n"); |
return NULL; |
} |
/* J2K decoding */ |
image = j2k_decode(jp2->j2k, cio, cstr_info); |
if(!image) |
{ |
free_color_data(&color); |
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n"); |
return NULL; |
} |
/* Set Image Color Space */ |
if (jp2->enumcs == 16) |
image->color_space = CLRSPC_SRGB; |
else if (jp2->enumcs == 17) |
image->color_space = CLRSPC_GRAY; |
else if (jp2->enumcs == 18) |
image->color_space = CLRSPC_SYCC; |
else |
image->color_space = CLRSPC_UNKNOWN; |
if(color.jp2_cdef) |
{ |
jp2_apply_cdef(image, &color); |
} |
if(color.jp2_pclr) |
{ |
/* Part 1, I.5.3.4: Either both or none : */ |
if( !color.jp2_pclr->cmap) |
jp2_free_pclr(&color); |
else |
jp2_apply_pclr(&color, image); |
} |
if(color.icc_profile_buf) |
{ |
image->icc_profile_buf = color.icc_profile_buf; |
color.icc_profile_buf = NULL; |
image->icc_profile_len = color.icc_profile_len; |
} |
return image; |
}/* jp2_decode() */ |
void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio) { |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_JP2H, 4); /* JP2H */ |
jp2_write_ihdr(jp2, cio); |
if (jp2->bpc == 255) { |
jp2_write_bpcc(jp2, cio); |
} |
jp2_write_colr(jp2, cio); |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) { |
unsigned int i; |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_FTYP, 4); /* FTYP */ |
cio_write(cio, jp2->brand, 4); /* BR */ |
cio_write(cio, jp2->minversion, 4); /* MinV */ |
for (i = 0; i < jp2->numcl; i++) { |
cio_write(cio, jp2->cl[i], 4); /* CL */ |
} |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) { |
int i; |
opj_jp2_box_t box; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
if (JP2_FTYP != box.type) { |
opj_event_msg(cinfo, EVT_ERROR, "Expected FTYP Marker\n"); |
return false; |
} |
jp2->brand = cio_read(cio, 4); /* BR */ |
jp2->minversion = cio_read(cio, 4); /* MinV */ |
jp2->numcl = (box.length - 16) / 4; |
jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int)); |
for (i = 0; i < (int)jp2->numcl; i++) { |
jp2->cl[i] = cio_read(cio, 4); /* CLi */ |
} |
if (cio_tell(cio) - box.init_pos != box.length) { |
opj_event_msg(cinfo, EVT_ERROR, "Error with FTYP Box\n"); |
return false; |
} |
return true; |
} |
static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { |
unsigned int j2k_codestream_offset, j2k_codestream_length; |
opj_jp2_box_t box; |
opj_j2k_t *j2k = jp2->j2k; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_JP2C, 4); /* JP2C */ |
/* J2K encoding */ |
j2k_codestream_offset = cio_tell(cio); |
if(!j2k_encode(j2k, cio, image, cstr_info)) { |
opj_event_msg(j2k->cinfo, EVT_ERROR, "Failed to encode image\n"); |
return 0; |
} |
j2k_codestream_length = cio_tell(cio) - j2k_codestream_offset; |
jp2->j2k_codestream_offset = j2k_codestream_offset; |
jp2->j2k_codestream_length = j2k_codestream_length; |
box.length = 8 + jp2->j2k_codestream_length; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
return box.length; |
} |
static bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset) { |
opj_jp2_box_t box; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
do { |
if(JP2_JP2C != box.type) { |
cio_skip(cio, box.length - 8); |
jp2_read_boxhdr(cinfo, cio, &box); |
} |
} while(JP2_JP2C != box.type); |
*j2k_codestream_offset = cio_tell(cio); |
*j2k_codestream_length = box.length - 8; |
return true; |
} |
static void jp2_write_jp(opj_cio_t *cio) { |
opj_jp2_box_t box; |
box.init_pos = cio_tell(cio); |
cio_skip(cio, 4); |
cio_write(cio, JP2_JP, 4); /* JP2 signature */ |
cio_write(cio, 0x0d0a870a, 4); |
box.length = cio_tell(cio) - box.init_pos; |
cio_seek(cio, box.init_pos); |
cio_write(cio, box.length, 4); /* L */ |
cio_seek(cio, box.init_pos + box.length); |
} |
static bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio) { |
opj_jp2_box_t box; |
opj_common_ptr cinfo = jp2->cinfo; |
jp2_read_boxhdr(cinfo, cio, &box); |
if (JP2_JP != box.type) { |
opj_event_msg(cinfo, EVT_ERROR, "Expected JP Marker\n"); |
return false; |
} |
if (0x0d0a870a != cio_read(cio, 4)) { |
opj_event_msg(cinfo, EVT_ERROR, "Error with JP Marker\n"); |
return false; |
} |
if (cio_tell(cio) - box.init_pos != box.length) { |
opj_event_msg(cinfo, EVT_ERROR, "Error with JP Box size\n"); |
return false; |
} |
return true; |
} |
static bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio, |
opj_jp2_color_t *color) { |
if (!jp2_read_jp(jp2, cio)) |
return false; |
if (!jp2_read_ftyp(jp2, cio)) |
return false; |
if (!jp2_read_jp2h(jp2, cio, color)) |
return false; |
if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset)) |
return false; |
return true; |
} |
/* ----------------------------------------------------------------------- */ |
/* JP2 decoder interface */ |
/* ----------------------------------------------------------------------- */ |
opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo) { |
opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t)); |
if(jp2) { |
jp2->cinfo = cinfo; |
/* create the J2K codec */ |
jp2->j2k = j2k_create_decompress(cinfo); |
if(jp2->j2k == NULL) { |
jp2_destroy_decompress(jp2); |
return NULL; |
} |
} |
return jp2; |
} |
void jp2_destroy_decompress(opj_jp2_t *jp2) { |
if(jp2) { |
/* destroy the J2K codec */ |
j2k_destroy_decompress(jp2->j2k); |
if(jp2->comps) { |
opj_free(jp2->comps); |
} |
if(jp2->cl) { |
opj_free(jp2->cl); |
} |
opj_free(jp2); |
} |
} |
void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters) { |
/* setup the J2K codec */ |
j2k_setup_decoder(jp2->j2k, parameters); |
/* further JP2 initializations go here */ |
} |
/* ----------------------------------------------------------------------- */ |
/* JP2 encoder interface */ |
/* ----------------------------------------------------------------------- */ |
opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo) { |
opj_jp2_t *jp2 = (opj_jp2_t*)opj_malloc(sizeof(opj_jp2_t)); |
if(jp2) { |
jp2->cinfo = cinfo; |
/* create the J2K codec */ |
jp2->j2k = j2k_create_compress(cinfo); |
if(jp2->j2k == NULL) { |
jp2_destroy_compress(jp2); |
return NULL; |
} |
} |
return jp2; |
} |
void jp2_destroy_compress(opj_jp2_t *jp2) { |
if(jp2) { |
/* destroy the J2K codec */ |
j2k_destroy_compress(jp2->j2k); |
if(jp2->comps) { |
opj_free(jp2->comps); |
} |
if(jp2->cl) { |
opj_free(jp2->cl); |
} |
opj_free(jp2); |
} |
} |
void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image) { |
int i; |
int depth_0, sign; |
if(!jp2 || !parameters || !image) |
return; |
/* setup the J2K codec */ |
/* ------------------- */ |
/* Check if number of components respects standard */ |
if (image->numcomps < 1 || image->numcomps > 16384) { |
opj_event_msg(jp2->cinfo, EVT_ERROR, "Invalid number of components specified while setting up JP2 encoder\n"); |
return; |
} |
j2k_setup_encoder(jp2->j2k, parameters, image); |
/* setup the JP2 codec */ |
/* ------------------- */ |
/* Profile box */ |
jp2->brand = JP2_JP2; /* BR */ |
jp2->minversion = 0; /* MinV */ |
jp2->numcl = 1; |
jp2->cl = (unsigned int*) opj_malloc(jp2->numcl * sizeof(unsigned int)); |
jp2->cl[0] = JP2_JP2; /* CL0 : JP2 */ |
/* Image Header box */ |
jp2->numcomps = image->numcomps; /* NC */ |
jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t)); |
jp2->h = image->y1 - image->y0; /* HEIGHT */ |
jp2->w = image->x1 - image->x0; /* WIDTH */ |
/* BPC */ |
depth_0 = image->comps[0].prec - 1; |
sign = image->comps[0].sgnd; |
jp2->bpc = depth_0 + (sign << 7); |
for (i = 1; i < image->numcomps; i++) { |
int depth = image->comps[i].prec - 1; |
sign = image->comps[i].sgnd; |
if (depth_0 != depth) |
jp2->bpc = 255; |
} |
jp2->C = 7; /* C : Always 7 */ |
jp2->UnkC = 0; /* UnkC, colorspace specified in colr box */ |
jp2->IPR = 0; /* IPR, no intellectual property */ |
/* BitsPerComponent box */ |
for (i = 0; i < image->numcomps; i++) { |
jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7); |
} |
/* Colour Specification box */ |
if ((image->numcomps == 1 || image->numcomps == 3) && (jp2->bpc != 255)) { |
jp2->meth = 1; /* METH: Enumerated colourspace */ |
} else { |
jp2->meth = 2; /* METH: Restricted ICC profile */ |
} |
if (jp2->meth == 1) { |
if (image->color_space == 1) |
jp2->enumcs = 16; /* sRGB as defined by IEC 61966–2–1 */ |
else if (image->color_space == 2) |
jp2->enumcs = 17; /* greyscale */ |
else if (image->color_space == 3) |
jp2->enumcs = 18; /* YUV */ |
} else { |
jp2->enumcs = 0; /* PROFILE (??) */ |
} |
jp2->precedence = 0; /* PRECEDENCE */ |
jp2->approx = 0; /* APPROX */ |
} |
bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { |
/* JP2 encoding */ |
/* JPEG 2000 Signature box */ |
jp2_write_jp(cio); |
/* File Type box */ |
jp2_write_ftyp(jp2, cio); |
/* JP2 Header box */ |
jp2_write_jp2h(jp2, cio); |
/* J2K encoding */ |
if(!jp2_write_jp2c(jp2, cio, image, cstr_info)) { |
opj_event_msg(jp2->cinfo, EVT_ERROR, "Failed to encode image\n"); |
return false; |
} |
return true; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/jp2.h |
---|
0,0 → 1,231 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __JP2_H |
#define __JP2_H |
/** |
@file jp2.h |
@brief The JPEG-2000 file format Reader/Writer (JP2) |
*/ |
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ |
/*@{*/ |
#define JPIP_JPIP 0x6a706970 |
#define JP2_JP 0x6a502020 /**< JPEG 2000 signature box */ |
#define JP2_FTYP 0x66747970 /**< File type box */ |
#define JP2_JP2H 0x6a703268 /**< JP2 header box */ |
#define JP2_IHDR 0x69686472 /**< Image header box */ |
#define JP2_COLR 0x636f6c72 /**< Colour specification box */ |
#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */ |
#define JP2_URL 0x75726c20 /**< URL box */ |
#define JP2_DTBL 0x6474626c /**< Data Reference box */ |
#define JP2_BPCC 0x62706363 /**< Bits per component box */ |
#define JP2_JP2 0x6a703220 /**< File type fields */ |
#define JP2_PCLR 0x70636c72 /**< Palette box */ |
#define JP2_CMAP 0x636d6170 /**< Component Mapping box */ |
#define JP2_CDEF 0x63646566 /**< Channel Definition box */ |
/* ----------------------------------------------------------------------- */ |
/** |
Channel description: channel index, type, assocation |
*/ |
typedef struct opj_jp2_cdef_info |
{ |
unsigned short cn, typ, asoc; |
} opj_jp2_cdef_info_t; |
/** |
Channel descriptions and number of descriptions |
*/ |
typedef struct opj_jp2_cdef |
{ |
opj_jp2_cdef_info_t *info; |
unsigned short n; |
} opj_jp2_cdef_t; |
/** |
Component mappings: channel index, mapping type, palette index |
*/ |
typedef struct opj_jp2_cmap_comp |
{ |
unsigned short cmp; |
unsigned char mtyp, pcol; |
} opj_jp2_cmap_comp_t; |
/** |
Palette data: table entries, palette columns |
*/ |
typedef struct opj_jp2_pclr |
{ |
unsigned int *entries; |
unsigned char *channel_sign; |
unsigned char *channel_size; |
opj_jp2_cmap_comp_t *cmap; |
unsigned short nr_entries, nr_channels; |
} opj_jp2_pclr_t; |
/** |
Collector for ICC profile, palette, component mapping, channel description |
*/ |
typedef struct opj_jp2_color |
{ |
unsigned char *icc_profile_buf; |
int icc_profile_len; |
opj_jp2_cdef_t *jp2_cdef; |
opj_jp2_pclr_t *jp2_pclr; |
unsigned char jp2_has_colr; |
} opj_jp2_color_t; |
/** |
JP2 component |
*/ |
typedef struct opj_jp2_comps { |
int depth; |
int sgnd; |
int bpcc; |
} opj_jp2_comps_t; |
/** |
JPEG-2000 file format reader/writer |
*/ |
typedef struct opj_jp2 { |
/** codec context */ |
opj_common_ptr cinfo; |
/** handle to the J2K codec */ |
opj_j2k_t *j2k; |
unsigned int w; |
unsigned int h; |
unsigned int numcomps; |
unsigned int bpc; |
unsigned int C; |
unsigned int UnkC; |
unsigned int IPR; |
unsigned int meth; |
unsigned int approx; |
unsigned int enumcs; |
unsigned int precedence; |
unsigned int brand; |
unsigned int minversion; |
unsigned int numcl; |
unsigned int *cl; |
opj_jp2_comps_t *comps; |
unsigned int j2k_codestream_offset; |
unsigned int j2k_codestream_length; |
} opj_jp2_t; |
/** |
JP2 Box |
*/ |
typedef struct opj_jp2_box { |
int length; |
int type; |
int init_pos; |
} opj_jp2_box_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Write the JP2H box - JP2 Header box (used in MJ2) |
@param jp2 JP2 handle |
@param cio Output buffer stream |
*/ |
void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio); |
/** |
Read the JP2H box - JP2 Header box (used in MJ2) |
@param jp2 JP2 handle |
@param cio Input buffer stream |
@param ext Collector for profile, cdef and pclr data |
@return Returns true if successful, returns false otherwise |
*/ |
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color); |
/** |
Creates a JP2 decompression structure |
@param cinfo Codec context info |
@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise |
*/ |
opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo); |
/** |
Destroy a JP2 decompressor handle |
@param jp2 JP2 decompressor handle to destroy |
*/ |
void jp2_destroy_decompress(opj_jp2_t *jp2); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in jp2->j2k->cp. |
@param jp2 JP2 decompressor handle |
@param parameters decompression parameters |
*/ |
void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 file stream |
@param jp2 JP2 decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a JP2 compression structure |
@param cinfo Codec context info |
@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise |
*/ |
opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo); |
/** |
Destroy a JP2 compressor handle |
@param jp2 JP2 compressor handle to destroy |
*/ |
void jp2_destroy_compress(opj_jp2_t *jp2); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
Coding parameters are returned in jp2->j2k->cp. |
@param jp2 JP2 compressor handle |
@param parameters compression parameters |
@param image input filled image |
*/ |
void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Encode an image into a JPEG-2000 file stream |
@param jp2 JP2 compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if required, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __JP2_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/jpt.c |
---|
0,0 → 1,155 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/* |
* Read the information contains in VBAS [JPP/JPT stream message header] |
* Store information (7 bits) in value |
* |
*/ |
unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value) { |
unsigned char elmt; |
elmt = cio_read(cio, 1); |
while ((elmt >> 7) == 1) { |
value = (value << 7); |
value |= (elmt & 0x7f); |
elmt = cio_read(cio, 1); |
} |
value = (value << 7); |
value |= (elmt & 0x7f); |
return value; |
} |
/* |
* Initialize the value of the message header structure |
* |
*/ |
void jpt_init_msg_header(opj_jpt_msg_header_t * header) { |
header->Id = 0; /* In-class Identifier */ |
header->last_byte = 0; /* Last byte information */ |
header->Class_Id = 0; /* Class Identifier */ |
header->CSn_Id = 0; /* CSn : index identifier */ |
header->Msg_offset = 0; /* Message offset */ |
header->Msg_length = 0; /* Message length */ |
header->Layer_nb = 0; /* Auxiliary for JPP case */ |
} |
/* |
* Re-initialize the value of the message header structure |
* |
* Only parameters always present in message header |
* |
*/ |
void jpt_reinit_msg_header(opj_jpt_msg_header_t * header) { |
header->Id = 0; /* In-class Identifier */ |
header->last_byte = 0; /* Last byte information */ |
header->Msg_offset = 0; /* Message offset */ |
header->Msg_length = 0; /* Message length */ |
} |
/* |
* Read the message header for a JPP/JPT - stream |
* |
*/ |
void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header) { |
unsigned char elmt, Class = 0, CSn = 0; |
jpt_reinit_msg_header(header); |
/* ------------- */ |
/* VBAS : Bin-ID */ |
/* ------------- */ |
elmt = cio_read(cio, 1); |
/* See for Class and CSn */ |
switch ((elmt >> 5) & 0x03) { |
case 0: |
opj_event_msg(cinfo, EVT_ERROR, "Forbidden value encounter in message header !!\n"); |
break; |
case 1: |
Class = 0; |
CSn = 0; |
break; |
case 2: |
Class = 1; |
CSn = 0; |
break; |
case 3: |
Class = 1; |
CSn = 1; |
break; |
default: |
break; |
} |
/* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */ |
if (((elmt >> 4) & 0x01) == 1) |
header->last_byte = 1; |
/* In-class identifier */ |
header->Id |= (elmt & 0x0f); |
if ((elmt >> 7) == 1) |
header->Id = jpt_read_VBAS_info(cio, header->Id); |
/* ------------ */ |
/* VBAS : Class */ |
/* ------------ */ |
if (Class == 1) { |
header->Class_Id = 0; |
header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id); |
} |
/* ---------- */ |
/* VBAS : CSn */ |
/* ---------- */ |
if (CSn == 1) { |
header->CSn_Id = 0; |
header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id); |
} |
/* ----------------- */ |
/* VBAS : Msg_offset */ |
/* ----------------- */ |
header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset); |
/* ----------------- */ |
/* VBAS : Msg_length */ |
/* ----------------- */ |
header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length); |
/* ---------- */ |
/* VBAS : Aux */ |
/* ---------- */ |
if ((header->Class_Id & 0x01) == 1) { |
header->Layer_nb = 0; |
header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/jpt.h |
---|
0,0 → 1,75 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __JPT_H |
#define __JPT_H |
/** |
@file jpt.h |
@brief JPT-stream reader (JPEG 2000, JPIP) |
JPT-stream functions are implemented in J2K.C. |
*/ |
/** |
Message Header JPT stream structure |
*/ |
typedef struct opj_jpt_msg_header { |
/** In-class Identifier */ |
unsigned int Id; |
/** Last byte information */ |
unsigned int last_byte; |
/** Class Identifier */ |
unsigned int Class_Id; |
/** CSn : index identifier */ |
unsigned int CSn_Id; |
/** Message offset */ |
unsigned int Msg_offset; |
/** Message length */ |
unsigned int Msg_length; |
/** Auxiliary for JPP case */ |
unsigned int Layer_nb; |
} opj_jpt_msg_header_t; |
/* ----------------------------------------------------------------------- */ |
/** |
Initialize the value of the message header structure |
@param header Message header structure |
*/ |
void jpt_init_msg_header(opj_jpt_msg_header_t * header); |
/** |
Read the message header for a JPP/JPT - stream |
@param cinfo Codec context info |
@param cio CIO handle |
@param header Message header structure |
*/ |
void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header); |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/lrintf.c |
---|
0,0 → 1,6 |
#include <math.h> |
/* |
long long int lrintf(float x) { |
return floor(x); |
} |
*/ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/mct.c |
---|
0,0 → 1,190 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef __SSE__ |
#include <xmmintrin.h> |
#endif |
#include "opj_includes.h" |
/* <summary> */ |
/* This table contains the norms of the basis function of the reversible MCT. */ |
/* </summary> */ |
static const double mct_norms[3] = { 1.732, .8292, .8292 }; |
/* <summary> */ |
/* This table contains the norms of the basis function of the irreversible MCT. */ |
/* </summary> */ |
static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 }; |
/* <summary> */ |
/* Foward reversible MCT. */ |
/* </summary> */ |
void mct_encode( |
int* restrict c0, |
int* restrict c1, |
int* restrict c2, |
int n) |
{ |
int i; |
for(i = 0; i < n; ++i) { |
int r = c0[i]; |
int g = c1[i]; |
int b = c2[i]; |
int y = (r + (g * 2) + b) >> 2; |
int u = b - g; |
int v = r - g; |
c0[i] = y; |
c1[i] = u; |
c2[i] = v; |
} |
} |
/* <summary> */ |
/* Inverse reversible MCT. */ |
/* </summary> */ |
void mct_decode( |
int* restrict c0, |
int* restrict c1, |
int* restrict c2, |
int n) |
{ |
int i; |
for (i = 0; i < n; ++i) { |
int y = c0[i]; |
int u = c1[i]; |
int v = c2[i]; |
int g = y - ((u + v) >> 2); |
int r = v + g; |
int b = u + g; |
c0[i] = r; |
c1[i] = g; |
c2[i] = b; |
} |
} |
/* <summary> */ |
/* Get norm of basis function of reversible MCT. */ |
/* </summary> */ |
double mct_getnorm(int compno) { |
return mct_norms[compno]; |
} |
/* <summary> */ |
/* Foward irreversible MCT. */ |
/* </summary> */ |
void mct_encode_real( |
int* restrict c0, |
int* restrict c1, |
int* restrict c2, |
int n) |
{ |
int i; |
for(i = 0; i < n; ++i) { |
int r = c0[i]; |
int g = c1[i]; |
int b = c2[i]; |
int y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934); |
int u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096); |
int v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666); |
c0[i] = y; |
c1[i] = u; |
c2[i] = v; |
} |
} |
/* <summary> */ |
/* Inverse irreversible MCT. */ |
/* </summary> */ |
void mct_decode_real( |
float* restrict c0, |
float* restrict c1, |
float* restrict c2, |
int n) |
{ |
int i; |
#ifdef __SSE__ |
__m128 vrv, vgu, vgv, vbu; |
vrv = _mm_set1_ps(1.402f); |
vgu = _mm_set1_ps(0.34413f); |
vgv = _mm_set1_ps(0.71414f); |
vbu = _mm_set1_ps(1.772f); |
for (i = 0; i < (n >> 3); ++i) { |
__m128 vy, vu, vv; |
__m128 vr, vg, vb; |
vy = _mm_load_ps(c0); |
vu = _mm_load_ps(c1); |
vv = _mm_load_ps(c2); |
vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv)); |
vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv)); |
vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu)); |
_mm_store_ps(c0, vr); |
_mm_store_ps(c1, vg); |
_mm_store_ps(c2, vb); |
c0 += 4; |
c1 += 4; |
c2 += 4; |
vy = _mm_load_ps(c0); |
vu = _mm_load_ps(c1); |
vv = _mm_load_ps(c2); |
vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv)); |
vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv)); |
vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu)); |
_mm_store_ps(c0, vr); |
_mm_store_ps(c1, vg); |
_mm_store_ps(c2, vb); |
c0 += 4; |
c1 += 4; |
c2 += 4; |
} |
n &= 7; |
#endif |
for(i = 0; i < n; ++i) { |
float y = c0[i]; |
float u = c1[i]; |
float v = c2[i]; |
float r = y + (v * 1.402f); |
float g = y - (u * 0.34413f) - (v * (0.71414f)); |
float b = y + (u * 1.772f); |
c0[i] = r; |
c1[i] = g; |
c2[i] = b; |
} |
} |
/* <summary> */ |
/* Get norm of basis function of irreversible MCT. */ |
/* </summary> */ |
double mct_getnorm_real(int compno) { |
return mct_norms_real[compno]; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/mct.h |
---|
0,0 → 1,98 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __MCT_H |
#define __MCT_H |
/** |
@file mct.h |
@brief Implementation of a multi-component transforms (MCT) |
The functions in MCT.C have for goal to realize reversible and irreversible multicomponent |
transform. The functions in MCT.C are used by some function in TCD.C. |
*/ |
/** @defgroup MCT MCT - Implementation of a multi-component transform */ |
/*@{*/ |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Apply a reversible multi-component transform to an image |
@param c0 Samples for red component |
@param c1 Samples for green component |
@param c2 Samples blue component |
@param n Number of samples for each component |
*/ |
void mct_encode(int *c0, int *c1, int *c2, int n); |
/** |
Apply a reversible multi-component inverse transform to an image |
@param c0 Samples for luminance component |
@param c1 Samples for red chrominance component |
@param c2 Samples for blue chrominance component |
@param n Number of samples for each component |
*/ |
void mct_decode(int *c0, int *c1, int *c2, int n); |
/** |
Get norm of the basis function used for the reversible multi-component transform |
@param compno Number of the component (0->Y, 1->U, 2->V) |
@return |
*/ |
double mct_getnorm(int compno); |
/** |
Apply an irreversible multi-component transform to an image |
@param c0 Samples for red component |
@param c1 Samples for green component |
@param c2 Samples blue component |
@param n Number of samples for each component |
*/ |
void mct_encode_real(int *c0, int *c1, int *c2, int n); |
/** |
Apply an irreversible multi-component inverse transform to an image |
@param c0 Samples for luminance component |
@param c1 Samples for red chrominance component |
@param c2 Samples for blue chrominance component |
@param n Number of samples for each component |
*/ |
void mct_decode_real(float* c0, float* c1, float* c2, int n); |
/** |
Get norm of the basis function used for the irreversible multi-component transform |
@param compno Number of the component (0->Y, 1->U, 2->V) |
@return |
*/ |
double mct_getnorm_real(int compno); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __MCT_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/mqc.c |
---|
0,0 → 1,593 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup MQC MQC - Implementation of an MQ-Coder */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
/** |
Output a byte, doing bit-stuffing if necessary. |
After a 0xff byte, the next byte must be smaller than 0x90. |
@param mqc MQC handle |
*/ |
static void mqc_byteout(opj_mqc_t *mqc); |
/** |
Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000 |
@param mqc MQC handle |
*/ |
static void mqc_renorme(opj_mqc_t *mqc); |
/** |
Encode the most probable symbol |
@param mqc MQC handle |
*/ |
static void mqc_codemps(opj_mqc_t *mqc); |
/** |
Encode the most least symbol |
@param mqc MQC handle |
*/ |
static void mqc_codelps(opj_mqc_t *mqc); |
/** |
Fill mqc->c with 1's for flushing |
@param mqc MQC handle |
*/ |
static void mqc_setbits(opj_mqc_t *mqc); |
/** |
FIXME: documentation ??? |
@param mqc MQC handle |
@return |
*/ |
static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc); |
/** |
FIXME: documentation ??? |
@param mqc MQC handle |
@return |
*/ |
static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc); |
/** |
Input a byte |
@param mqc MQC handle |
*/ |
static INLINE void mqc_bytein(opj_mqc_t *const mqc); |
/** |
Renormalize mqc->a and mqc->c while decoding |
@param mqc MQC handle |
*/ |
static INLINE void mqc_renormd(opj_mqc_t *const mqc); |
/*@}*/ |
/*@}*/ |
/* <summary> */ |
/* This array defines all the possible states for a context. */ |
/* </summary> */ |
static opj_mqc_state_t mqc_states[47 * 2] = { |
{0x5601, 0, &mqc_states[2], &mqc_states[3]}, |
{0x5601, 1, &mqc_states[3], &mqc_states[2]}, |
{0x3401, 0, &mqc_states[4], &mqc_states[12]}, |
{0x3401, 1, &mqc_states[5], &mqc_states[13]}, |
{0x1801, 0, &mqc_states[6], &mqc_states[18]}, |
{0x1801, 1, &mqc_states[7], &mqc_states[19]}, |
{0x0ac1, 0, &mqc_states[8], &mqc_states[24]}, |
{0x0ac1, 1, &mqc_states[9], &mqc_states[25]}, |
{0x0521, 0, &mqc_states[10], &mqc_states[58]}, |
{0x0521, 1, &mqc_states[11], &mqc_states[59]}, |
{0x0221, 0, &mqc_states[76], &mqc_states[66]}, |
{0x0221, 1, &mqc_states[77], &mqc_states[67]}, |
{0x5601, 0, &mqc_states[14], &mqc_states[13]}, |
{0x5601, 1, &mqc_states[15], &mqc_states[12]}, |
{0x5401, 0, &mqc_states[16], &mqc_states[28]}, |
{0x5401, 1, &mqc_states[17], &mqc_states[29]}, |
{0x4801, 0, &mqc_states[18], &mqc_states[28]}, |
{0x4801, 1, &mqc_states[19], &mqc_states[29]}, |
{0x3801, 0, &mqc_states[20], &mqc_states[28]}, |
{0x3801, 1, &mqc_states[21], &mqc_states[29]}, |
{0x3001, 0, &mqc_states[22], &mqc_states[34]}, |
{0x3001, 1, &mqc_states[23], &mqc_states[35]}, |
{0x2401, 0, &mqc_states[24], &mqc_states[36]}, |
{0x2401, 1, &mqc_states[25], &mqc_states[37]}, |
{0x1c01, 0, &mqc_states[26], &mqc_states[40]}, |
{0x1c01, 1, &mqc_states[27], &mqc_states[41]}, |
{0x1601, 0, &mqc_states[58], &mqc_states[42]}, |
{0x1601, 1, &mqc_states[59], &mqc_states[43]}, |
{0x5601, 0, &mqc_states[30], &mqc_states[29]}, |
{0x5601, 1, &mqc_states[31], &mqc_states[28]}, |
{0x5401, 0, &mqc_states[32], &mqc_states[28]}, |
{0x5401, 1, &mqc_states[33], &mqc_states[29]}, |
{0x5101, 0, &mqc_states[34], &mqc_states[30]}, |
{0x5101, 1, &mqc_states[35], &mqc_states[31]}, |
{0x4801, 0, &mqc_states[36], &mqc_states[32]}, |
{0x4801, 1, &mqc_states[37], &mqc_states[33]}, |
{0x3801, 0, &mqc_states[38], &mqc_states[34]}, |
{0x3801, 1, &mqc_states[39], &mqc_states[35]}, |
{0x3401, 0, &mqc_states[40], &mqc_states[36]}, |
{0x3401, 1, &mqc_states[41], &mqc_states[37]}, |
{0x3001, 0, &mqc_states[42], &mqc_states[38]}, |
{0x3001, 1, &mqc_states[43], &mqc_states[39]}, |
{0x2801, 0, &mqc_states[44], &mqc_states[38]}, |
{0x2801, 1, &mqc_states[45], &mqc_states[39]}, |
{0x2401, 0, &mqc_states[46], &mqc_states[40]}, |
{0x2401, 1, &mqc_states[47], &mqc_states[41]}, |
{0x2201, 0, &mqc_states[48], &mqc_states[42]}, |
{0x2201, 1, &mqc_states[49], &mqc_states[43]}, |
{0x1c01, 0, &mqc_states[50], &mqc_states[44]}, |
{0x1c01, 1, &mqc_states[51], &mqc_states[45]}, |
{0x1801, 0, &mqc_states[52], &mqc_states[46]}, |
{0x1801, 1, &mqc_states[53], &mqc_states[47]}, |
{0x1601, 0, &mqc_states[54], &mqc_states[48]}, |
{0x1601, 1, &mqc_states[55], &mqc_states[49]}, |
{0x1401, 0, &mqc_states[56], &mqc_states[50]}, |
{0x1401, 1, &mqc_states[57], &mqc_states[51]}, |
{0x1201, 0, &mqc_states[58], &mqc_states[52]}, |
{0x1201, 1, &mqc_states[59], &mqc_states[53]}, |
{0x1101, 0, &mqc_states[60], &mqc_states[54]}, |
{0x1101, 1, &mqc_states[61], &mqc_states[55]}, |
{0x0ac1, 0, &mqc_states[62], &mqc_states[56]}, |
{0x0ac1, 1, &mqc_states[63], &mqc_states[57]}, |
{0x09c1, 0, &mqc_states[64], &mqc_states[58]}, |
{0x09c1, 1, &mqc_states[65], &mqc_states[59]}, |
{0x08a1, 0, &mqc_states[66], &mqc_states[60]}, |
{0x08a1, 1, &mqc_states[67], &mqc_states[61]}, |
{0x0521, 0, &mqc_states[68], &mqc_states[62]}, |
{0x0521, 1, &mqc_states[69], &mqc_states[63]}, |
{0x0441, 0, &mqc_states[70], &mqc_states[64]}, |
{0x0441, 1, &mqc_states[71], &mqc_states[65]}, |
{0x02a1, 0, &mqc_states[72], &mqc_states[66]}, |
{0x02a1, 1, &mqc_states[73], &mqc_states[67]}, |
{0x0221, 0, &mqc_states[74], &mqc_states[68]}, |
{0x0221, 1, &mqc_states[75], &mqc_states[69]}, |
{0x0141, 0, &mqc_states[76], &mqc_states[70]}, |
{0x0141, 1, &mqc_states[77], &mqc_states[71]}, |
{0x0111, 0, &mqc_states[78], &mqc_states[72]}, |
{0x0111, 1, &mqc_states[79], &mqc_states[73]}, |
{0x0085, 0, &mqc_states[80], &mqc_states[74]}, |
{0x0085, 1, &mqc_states[81], &mqc_states[75]}, |
{0x0049, 0, &mqc_states[82], &mqc_states[76]}, |
{0x0049, 1, &mqc_states[83], &mqc_states[77]}, |
{0x0025, 0, &mqc_states[84], &mqc_states[78]}, |
{0x0025, 1, &mqc_states[85], &mqc_states[79]}, |
{0x0015, 0, &mqc_states[86], &mqc_states[80]}, |
{0x0015, 1, &mqc_states[87], &mqc_states[81]}, |
{0x0009, 0, &mqc_states[88], &mqc_states[82]}, |
{0x0009, 1, &mqc_states[89], &mqc_states[83]}, |
{0x0005, 0, &mqc_states[90], &mqc_states[84]}, |
{0x0005, 1, &mqc_states[91], &mqc_states[85]}, |
{0x0001, 0, &mqc_states[90], &mqc_states[86]}, |
{0x0001, 1, &mqc_states[91], &mqc_states[87]}, |
{0x5601, 0, &mqc_states[92], &mqc_states[92]}, |
{0x5601, 1, &mqc_states[93], &mqc_states[93]}, |
}; |
/* |
========================================================== |
local functions |
========================================================== |
*/ |
static void mqc_byteout(opj_mqc_t *mqc) { |
if (*mqc->bp == 0xff) { |
mqc->bp++; |
*mqc->bp = mqc->c >> 20; |
mqc->c &= 0xfffff; |
mqc->ct = 7; |
} else { |
if ((mqc->c & 0x8000000) == 0) { /* ((mqc->c&0x8000000)==0) CHANGE */ |
mqc->bp++; |
*mqc->bp = mqc->c >> 19; |
mqc->c &= 0x7ffff; |
mqc->ct = 8; |
} else { |
(*mqc->bp)++; |
if (*mqc->bp == 0xff) { |
mqc->c &= 0x7ffffff; |
mqc->bp++; |
*mqc->bp = mqc->c >> 20; |
mqc->c &= 0xfffff; |
mqc->ct = 7; |
} else { |
mqc->bp++; |
*mqc->bp = mqc->c >> 19; |
mqc->c &= 0x7ffff; |
mqc->ct = 8; |
} |
} |
} |
} |
static void mqc_renorme(opj_mqc_t *mqc) { |
do { |
mqc->a <<= 1; |
mqc->c <<= 1; |
mqc->ct--; |
if (mqc->ct == 0) { |
mqc_byteout(mqc); |
} |
} while ((mqc->a & 0x8000) == 0); |
} |
static void mqc_codemps(opj_mqc_t *mqc) { |
mqc->a -= (*mqc->curctx)->qeval; |
if ((mqc->a & 0x8000) == 0) { |
if (mqc->a < (*mqc->curctx)->qeval) { |
mqc->a = (*mqc->curctx)->qeval; |
} else { |
mqc->c += (*mqc->curctx)->qeval; |
} |
*mqc->curctx = (*mqc->curctx)->nmps; |
mqc_renorme(mqc); |
} else { |
mqc->c += (*mqc->curctx)->qeval; |
} |
} |
static void mqc_codelps(opj_mqc_t *mqc) { |
mqc->a -= (*mqc->curctx)->qeval; |
if (mqc->a < (*mqc->curctx)->qeval) { |
mqc->c += (*mqc->curctx)->qeval; |
} else { |
mqc->a = (*mqc->curctx)->qeval; |
} |
*mqc->curctx = (*mqc->curctx)->nlps; |
mqc_renorme(mqc); |
} |
static void mqc_setbits(opj_mqc_t *mqc) { |
unsigned int tempc = mqc->c + mqc->a; |
mqc->c |= 0xffff; |
if (mqc->c >= tempc) { |
mqc->c -= 0x8000; |
} |
} |
static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc) { |
int d; |
if (mqc->a < (*mqc->curctx)->qeval) { |
d = 1 - (*mqc->curctx)->mps; |
*mqc->curctx = (*mqc->curctx)->nlps; |
} else { |
d = (*mqc->curctx)->mps; |
*mqc->curctx = (*mqc->curctx)->nmps; |
} |
return d; |
} |
static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc) { |
int d; |
if (mqc->a < (*mqc->curctx)->qeval) { |
mqc->a = (*mqc->curctx)->qeval; |
d = (*mqc->curctx)->mps; |
*mqc->curctx = (*mqc->curctx)->nmps; |
} else { |
mqc->a = (*mqc->curctx)->qeval; |
d = 1 - (*mqc->curctx)->mps; |
*mqc->curctx = (*mqc->curctx)->nlps; |
} |
return d; |
} |
#ifdef MQC_PERF_OPT |
static INLINE void mqc_bytein(opj_mqc_t *const mqc) { |
unsigned int i = *((unsigned int *) mqc->bp); |
mqc->c += i & 0xffff00; |
mqc->ct = i & 0x0f; |
mqc->bp += (i >> 2) & 0x04; |
} |
#else |
static void mqc_bytein(opj_mqc_t *const mqc) { |
if (mqc->bp != mqc->end) { |
unsigned int c; |
if (mqc->bp + 1 != mqc->end) { |
c = *(mqc->bp + 1); |
} else { |
c = 0xff; |
} |
if (*mqc->bp == 0xff) { |
if (c > 0x8f) { |
mqc->c += 0xff00; |
mqc->ct = 8; |
} else { |
mqc->bp++; |
mqc->c += c << 9; |
mqc->ct = 7; |
} |
} else { |
mqc->bp++; |
mqc->c += c << 8; |
mqc->ct = 8; |
} |
} else { |
mqc->c += 0xff00; |
mqc->ct = 8; |
} |
} |
#endif |
static INLINE void mqc_renormd(opj_mqc_t *const mqc) { |
do { |
if (mqc->ct == 0) { |
mqc_bytein(mqc); |
} |
mqc->a <<= 1; |
mqc->c <<= 1; |
mqc->ct--; |
} while (mqc->a < 0x8000); |
} |
/* |
========================================================== |
MQ-Coder interface |
========================================================== |
*/ |
opj_mqc_t* mqc_create(void) { |
opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t)); |
#ifdef MQC_PERF_OPT |
mqc->buffer = NULL; |
#endif |
return mqc; |
} |
void mqc_destroy(opj_mqc_t *mqc) { |
if(mqc) { |
#ifdef MQC_PERF_OPT |
if (mqc->buffer) { |
opj_free(mqc->buffer); |
} |
#endif |
opj_free(mqc); |
} |
} |
int mqc_numbytes(opj_mqc_t *mqc) { |
return mqc->bp - mqc->start; |
} |
void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) { |
mqc_setcurctx(mqc, 0); |
mqc->a = 0x8000; |
mqc->c = 0; |
mqc->bp = bp - 1; |
mqc->ct = 12; |
if (*mqc->bp == 0xff) { |
mqc->ct = 13; |
} |
mqc->start = bp; |
} |
void mqc_encode(opj_mqc_t *mqc, int d) { |
if ((*mqc->curctx)->mps == d) { |
mqc_codemps(mqc); |
} else { |
mqc_codelps(mqc); |
} |
} |
void mqc_flush(opj_mqc_t *mqc) { |
mqc_setbits(mqc); |
mqc->c <<= mqc->ct; |
mqc_byteout(mqc); |
mqc->c <<= mqc->ct; |
mqc_byteout(mqc); |
if (*mqc->bp != 0xff) { |
mqc->bp++; |
} |
} |
void mqc_bypass_init_enc(opj_mqc_t *mqc) { |
mqc->c = 0; |
mqc->ct = 8; |
/*if (*mqc->bp == 0xff) { |
mqc->ct = 7; |
} */ |
} |
void mqc_bypass_enc(opj_mqc_t *mqc, int d) { |
mqc->ct--; |
mqc->c = mqc->c + (d << mqc->ct); |
if (mqc->ct == 0) { |
mqc->bp++; |
*mqc->bp = mqc->c; |
mqc->ct = 8; |
if (*mqc->bp == 0xff) { |
mqc->ct = 7; |
} |
mqc->c = 0; |
} |
} |
int mqc_bypass_flush_enc(opj_mqc_t *mqc) { |
unsigned char bit_padding; |
bit_padding = 0; |
if (mqc->ct != 0) { |
while (mqc->ct > 0) { |
mqc->ct--; |
mqc->c += bit_padding << mqc->ct; |
bit_padding = (bit_padding + 1) & 0x01; |
} |
mqc->bp++; |
*mqc->bp = mqc->c; |
mqc->ct = 8; |
mqc->c = 0; |
} |
return 1; |
} |
void mqc_reset_enc(opj_mqc_t *mqc) { |
mqc_resetstates(mqc); |
mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); |
mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); |
mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); |
} |
int mqc_restart_enc(opj_mqc_t *mqc) { |
int correction = 1; |
/* <flush part> */ |
int n = 27 - 15 - mqc->ct; |
mqc->c <<= mqc->ct; |
while (n > 0) { |
mqc_byteout(mqc); |
n -= mqc->ct; |
mqc->c <<= mqc->ct; |
} |
mqc_byteout(mqc); |
return correction; |
} |
void mqc_restart_init_enc(opj_mqc_t *mqc) { |
/* <Re-init part> */ |
mqc_setcurctx(mqc, 0); |
mqc->a = 0x8000; |
mqc->c = 0; |
mqc->ct = 12; |
mqc->bp--; |
if (*mqc->bp == 0xff) { |
mqc->ct = 13; |
} |
} |
void mqc_erterm_enc(opj_mqc_t *mqc) { |
int k = 11 - mqc->ct + 1; |
while (k > 0) { |
mqc->c <<= mqc->ct; |
mqc->ct = 0; |
mqc_byteout(mqc); |
k -= mqc->ct; |
} |
if (*mqc->bp != 0xff) { |
mqc_byteout(mqc); |
} |
} |
void mqc_segmark_enc(opj_mqc_t *mqc) { |
int i; |
mqc_setcurctx(mqc, 18); |
for (i = 1; i < 5; i++) { |
mqc_encode(mqc, i % 2); |
} |
} |
void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) { |
mqc_setcurctx(mqc, 0); |
mqc->start = bp; |
mqc->end = bp + len; |
mqc->bp = bp; |
if (len==0) mqc->c = 0xff << 16; |
else mqc->c = *mqc->bp << 16; |
#ifdef MQC_PERF_OPT |
{ |
unsigned int c; |
unsigned int *ip; |
unsigned char *end = mqc->end - 1; |
mqc->buffer = opj_realloc(mqc->buffer, (2 * len + 1) * sizeof(unsigned int)); |
ip = (unsigned int *) mqc->buffer; |
while (bp != end) { |
c = *(bp + 1); |
if (*bp == 0xff) { |
if (c > 0x8f) { |
*ip = 0x0000ff18; |
} else { |
bp++; |
*ip = 0x00000017 | (c << 9); |
} |
} else { |
bp++; |
*ip = 0x00000018 | (c << 8); |
} |
ip++; |
} |
/* Handle last byte of data */ |
c = 0xff; |
if (*bp == 0xff) { |
*ip = 0x0000ff18; |
} else { |
bp++; |
*ip = 0x00000018 | (c << 8); |
} |
ip++; |
*ip = 0x0000ff08; |
mqc->bp = mqc->buffer; |
} |
#endif |
mqc_bytein(mqc); |
mqc->c <<= 7; |
mqc->ct -= 7; |
mqc->a = 0x8000; |
} |
int mqc_decode(opj_mqc_t *const mqc) { |
int d; |
mqc->a -= (*mqc->curctx)->qeval; |
if ((mqc->c >> 16) < (*mqc->curctx)->qeval) { |
d = mqc_lpsexchange(mqc); |
mqc_renormd(mqc); |
} else { |
mqc->c -= (*mqc->curctx)->qeval << 16; |
if ((mqc->a & 0x8000) == 0) { |
d = mqc_mpsexchange(mqc); |
mqc_renormd(mqc); |
} else { |
d = (*mqc->curctx)->mps; |
} |
} |
return d; |
} |
void mqc_resetstates(opj_mqc_t *mqc) { |
int i; |
for (i = 0; i < MQC_NUMCTXS; i++) { |
mqc->ctxs[i] = mqc_states; |
} |
} |
void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob) { |
mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)]; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/mqc.h |
---|
0,0 → 1,200 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __MQC_H |
#define __MQC_H |
/** |
@file mqc.h |
@brief Implementation of an MQ-Coder (MQC) |
The functions in MQC.C have for goal to realize the MQ-coder operations. The functions |
in MQC.C are used by some function in T1.C. |
*/ |
/** @defgroup MQC MQC - Implementation of an MQ-Coder */ |
/*@{*/ |
/** |
This struct defines the state of a context. |
*/ |
typedef struct opj_mqc_state { |
/** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */ |
unsigned int qeval; |
/** the Most Probable Symbol (0 or 1) */ |
int mps; |
/** next state if the next encoded symbol is the MPS */ |
struct opj_mqc_state *nmps; |
/** next state if the next encoded symbol is the LPS */ |
struct opj_mqc_state *nlps; |
} opj_mqc_state_t; |
#define MQC_NUMCTXS 19 |
/** |
MQ coder |
*/ |
typedef struct opj_mqc { |
unsigned int c; |
unsigned int a; |
unsigned int ct; |
unsigned char *bp; |
unsigned char *start; |
unsigned char *end; |
opj_mqc_state_t *ctxs[MQC_NUMCTXS]; |
opj_mqc_state_t **curctx; |
#ifdef MQC_PERF_OPT |
unsigned char *buffer; |
#endif |
} opj_mqc_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a new MQC handle |
@return Returns a new MQC handle if successful, returns NULL otherwise |
*/ |
opj_mqc_t* mqc_create(void); |
/** |
Destroy a previously created MQC handle |
@param mqc MQC handle to destroy |
*/ |
void mqc_destroy(opj_mqc_t *mqc); |
/** |
Return the number of bytes written/read since initialisation |
@param mqc MQC handle |
@return Returns the number of bytes already encoded |
*/ |
int mqc_numbytes(opj_mqc_t *mqc); |
/** |
Reset the states of all the context of the coder/decoder |
(each context is set to a state where 0 and 1 are more or less equiprobable) |
@param mqc MQC handle |
*/ |
void mqc_resetstates(opj_mqc_t *mqc); |
/** |
Set the state of a particular context |
@param mqc MQC handle |
@param ctxno Number that identifies the context |
@param msb The MSB of the new state of the context |
@param prob Number that identifies the probability of the symbols for the new state of the context |
*/ |
void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob); |
/** |
Initialize the encoder |
@param mqc MQC handle |
@param bp Pointer to the start of the buffer where the bytes will be written |
*/ |
void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp); |
/** |
Set the current context used for coding/decoding |
@param mqc MQC handle |
@param ctxno Number that identifies the context |
*/ |
#define mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)] |
/** |
Encode a symbol using the MQ-coder |
@param mqc MQC handle |
@param d The symbol to be encoded (0 or 1) |
*/ |
void mqc_encode(opj_mqc_t *mqc, int d); |
/** |
Flush the encoder, so that all remaining data is written |
@param mqc MQC handle |
*/ |
void mqc_flush(opj_mqc_t *mqc); |
/** |
BYPASS mode switch, initialization operation. |
JPEG 2000 p 505. |
<h2>Not fully implemented and tested !!</h2> |
@param mqc MQC handle |
*/ |
void mqc_bypass_init_enc(opj_mqc_t *mqc); |
/** |
BYPASS mode switch, coding operation. |
JPEG 2000 p 505. |
<h2>Not fully implemented and tested !!</h2> |
@param mqc MQC handle |
@param d The symbol to be encoded (0 or 1) |
*/ |
void mqc_bypass_enc(opj_mqc_t *mqc, int d); |
/** |
BYPASS mode switch, flush operation |
<h2>Not fully implemented and tested !!</h2> |
@param mqc MQC handle |
@return Returns 1 (always) |
*/ |
int mqc_bypass_flush_enc(opj_mqc_t *mqc); |
/** |
RESET mode switch |
@param mqc MQC handle |
*/ |
void mqc_reset_enc(opj_mqc_t *mqc); |
/** |
RESTART mode switch (TERMALL) |
@param mqc MQC handle |
@return Returns 1 (always) |
*/ |
int mqc_restart_enc(opj_mqc_t *mqc); |
/** |
RESTART mode switch (TERMALL) reinitialisation |
@param mqc MQC handle |
*/ |
void mqc_restart_init_enc(opj_mqc_t *mqc); |
/** |
ERTERM mode switch (PTERM) |
@param mqc MQC handle |
*/ |
void mqc_erterm_enc(opj_mqc_t *mqc); |
/** |
SEGMARK mode switch (SEGSYM) |
@param mqc MQC handle |
*/ |
void mqc_segmark_enc(opj_mqc_t *mqc); |
/** |
Initialize the decoder |
@param mqc MQC handle |
@param bp Pointer to the start of the buffer from which the bytes will be read |
@param len Length of the input buffer |
*/ |
void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len); |
/** |
Decode a symbol |
@param mqc MQC handle |
@return Returns the decoded symbol (0 or 1) |
*/ |
int mqc_decode(opj_mqc_t *const mqc); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __MQC_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/openjpeg.c |
---|
0,0 → 1,337 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef _WIN32 |
#include <windows.h> |
#endif /* _WIN32 */ |
#include "../opj_config.h" |
#include "opj_includes.h" |
/* ---------------------------------------------------------------------- */ |
#ifdef _WIN32 |
#ifndef OPJ_STATIC |
BOOL APIENTRY |
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { |
switch (ul_reason_for_call) { |
case DLL_PROCESS_ATTACH : |
break; |
case DLL_PROCESS_DETACH : |
break; |
case DLL_THREAD_ATTACH : |
case DLL_THREAD_DETACH : |
break; |
} |
return TRUE; |
} |
#endif /* OPJ_STATIC */ |
#endif /* _WIN32 */ |
/* ---------------------------------------------------------------------- */ |
const char* OPJ_CALLCONV opj_version(void) { |
return PACKAGE_VERSION; |
} |
opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) { |
opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t)); |
if(!dinfo) return NULL; |
dinfo->is_decompressor = true; |
switch(format) { |
case CODEC_J2K: |
case CODEC_JPT: |
/* get a J2K decoder handle */ |
dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo); |
if(!dinfo->j2k_handle) { |
opj_free(dinfo); |
return NULL; |
} |
break; |
case CODEC_JP2: |
/* get a JP2 decoder handle */ |
dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo); |
if(!dinfo->jp2_handle) { |
opj_free(dinfo); |
return NULL; |
} |
break; |
case CODEC_UNKNOWN: |
default: |
opj_free(dinfo); |
return NULL; |
} |
dinfo->codec_format = format; |
return dinfo; |
} |
void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) { |
if(dinfo) { |
/* destroy the codec */ |
switch(dinfo->codec_format) { |
case CODEC_J2K: |
case CODEC_JPT: |
j2k_destroy_decompress((opj_j2k_t*)dinfo->j2k_handle); |
break; |
case CODEC_JP2: |
jp2_destroy_decompress((opj_jp2_t*)dinfo->jp2_handle); |
break; |
case CODEC_UNKNOWN: |
default: |
break; |
} |
/* destroy the decompressor */ |
opj_free(dinfo); |
} |
} |
void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) { |
if(parameters) { |
memset(parameters, 0, sizeof(opj_dparameters_t)); |
/* default decoding parameters */ |
parameters->cp_layer = 0; |
parameters->cp_reduce = 0; |
parameters->cp_limit_decoding = NO_LIMITATION; |
parameters->decod_format = -1; |
parameters->cod_format = -1; |
/* UniPG>> */ |
#ifdef USE_JPWL |
parameters->jpwl_correct = false; |
parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS; |
parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES; |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
} |
void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters) { |
if(dinfo && parameters) { |
switch(dinfo->codec_format) { |
case CODEC_J2K: |
case CODEC_JPT: |
j2k_setup_decoder((opj_j2k_t*)dinfo->j2k_handle, parameters); |
break; |
case CODEC_JP2: |
jp2_setup_decoder((opj_jp2_t*)dinfo->jp2_handle, parameters); |
break; |
case CODEC_UNKNOWN: |
default: |
break; |
} |
} |
} |
opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) { |
return opj_decode_with_info(dinfo, cio, NULL); |
} |
opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info) { |
if(dinfo && cio) { |
switch(dinfo->codec_format) { |
case CODEC_J2K: |
return j2k_decode((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info); |
case CODEC_JPT: |
return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info); |
case CODEC_JP2: |
return jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info); |
case CODEC_UNKNOWN: |
default: |
break; |
} |
} |
return NULL; |
} |
opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) { |
opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t)); |
if(!cinfo) return NULL; |
cinfo->is_decompressor = false; |
switch(format) { |
case CODEC_J2K: |
/* get a J2K coder handle */ |
cinfo->j2k_handle = (void*)j2k_create_compress((opj_common_ptr)cinfo); |
if(!cinfo->j2k_handle) { |
opj_free(cinfo); |
return NULL; |
} |
break; |
case CODEC_JP2: |
/* get a JP2 coder handle */ |
cinfo->jp2_handle = (void*)jp2_create_compress((opj_common_ptr)cinfo); |
if(!cinfo->jp2_handle) { |
opj_free(cinfo); |
return NULL; |
} |
break; |
case CODEC_JPT: |
case CODEC_UNKNOWN: |
default: |
opj_free(cinfo); |
return NULL; |
} |
cinfo->codec_format = format; |
return cinfo; |
} |
void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) { |
if(cinfo) { |
/* destroy the codec */ |
switch(cinfo->codec_format) { |
case CODEC_J2K: |
j2k_destroy_compress((opj_j2k_t*)cinfo->j2k_handle); |
break; |
case CODEC_JP2: |
jp2_destroy_compress((opj_jp2_t*)cinfo->jp2_handle); |
break; |
case CODEC_JPT: |
case CODEC_UNKNOWN: |
default: |
break; |
} |
/* destroy the decompressor */ |
opj_free(cinfo); |
} |
} |
void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) { |
if(parameters) { |
memset(parameters, 0, sizeof(opj_cparameters_t)); |
/* default coding parameters */ |
parameters->cp_cinema = OFF; |
parameters->max_comp_size = 0; |
parameters->numresolution = 6; |
parameters->cp_rsiz = STD_RSIZ; |
parameters->cblockw_init = 64; |
parameters->cblockh_init = 64; |
parameters->prog_order = LRCP; |
parameters->roi_compno = -1; /* no ROI */ |
parameters->subsampling_dx = 1; |
parameters->subsampling_dy = 1; |
parameters->tp_on = 0; |
parameters->decod_format = -1; |
parameters->cod_format = -1; |
parameters->tcp_rates[0] = 0; |
parameters->tcp_numlayers = 0; |
parameters->cp_disto_alloc = 0; |
parameters->cp_fixed_alloc = 0; |
parameters->cp_fixed_quality = 0; |
/* UniPG>> */ |
#ifdef USE_JPWL |
parameters->jpwl_epc_on = false; |
parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */ |
{ |
int i; |
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { |
parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */ |
parameters->jpwl_hprot_TPH[i] = 0; /* absent */ |
} |
}; |
{ |
int i; |
for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { |
parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */ |
parameters->jpwl_pprot_packno[i] = -1; /* unassigned */ |
parameters->jpwl_pprot[i] = 0; /* absent */ |
} |
}; |
parameters->jpwl_sens_size = 0; /* 0 means no ESD */ |
parameters->jpwl_sens_addr = 0; /* 0 means auto */ |
parameters->jpwl_sens_range = 0; /* 0 means packet */ |
parameters->jpwl_sens_MH = -1; /* -1 means unassigned */ |
{ |
int i; |
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { |
parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */ |
parameters->jpwl_sens_TPH[i] = -1; /* absent */ |
} |
}; |
#endif /* USE_JPWL */ |
/* <<UniPG */ |
} |
} |
void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image) { |
if(cinfo && parameters && image) { |
switch(cinfo->codec_format) { |
case CODEC_J2K: |
j2k_setup_encoder((opj_j2k_t*)cinfo->j2k_handle, parameters, image); |
break; |
case CODEC_JP2: |
jp2_setup_encoder((opj_jp2_t*)cinfo->jp2_handle, parameters, image); |
break; |
case CODEC_JPT: |
case CODEC_UNKNOWN: |
default: |
break; |
} |
} |
} |
bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) { |
if (index != NULL) |
opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n" |
"To extract the index, use the opj_encode_with_info() function.\n" |
"No index will be generated during this encoding\n"); |
return opj_encode_with_info(cinfo, cio, image, NULL); |
} |
bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) { |
if(cinfo && cio && image) { |
switch(cinfo->codec_format) { |
case CODEC_J2K: |
return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info); |
case CODEC_JP2: |
return jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info); |
case CODEC_JPT: |
case CODEC_UNKNOWN: |
default: |
break; |
} |
} |
return false; |
} |
void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) { |
if (cstr_info) { |
int tileno; |
for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) { |
opj_tile_info_t *tile_info = &cstr_info->tile[tileno]; |
opj_free(tile_info->thresh); |
opj_free(tile_info->packet); |
opj_free(tile_info->tp); |
} |
opj_free(cstr_info->tile); |
opj_free(cstr_info->marker); |
opj_free(cstr_info->numdecompos); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/openjpeg.h |
---|
0,0 → 1,915 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef OPENJPEG_H |
#define OPENJPEG_H |
/* |
========================================================== |
Compiler directives |
========================================================== |
*/ |
#if defined(OPJ_STATIC) || !defined(_WIN32) |
#define OPJ_API |
#define OPJ_CALLCONV |
#else |
#define OPJ_CALLCONV __stdcall |
/* |
The following ifdef block is the standard way of creating macros which make exporting |
from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS |
symbol defined on the command line. this symbol should not be defined on any project |
that uses this DLL. This way any other project whose source files include this file see |
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols |
defined with this macro as being exported. |
*/ |
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT) |
#define OPJ_API __declspec(dllexport) |
#else |
#define OPJ_API __declspec(dllimport) |
#endif /* OPJ_EXPORTS */ |
#endif /* !OPJ_STATIC || !_WIN32 */ |
#ifndef __cplusplus |
#if defined(HAVE_STDBOOL_H) |
/* |
The C language implementation does correctly provide the standard header |
file "stdbool.h". |
*/ |
#include <stdbool.h> |
#else |
/* |
The C language implementation does not provide the standard header file |
"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this |
braindamage below. |
*/ |
#if !defined(bool) |
#define bool int |
#endif |
#if !defined(true) |
#define true 1 |
#endif |
#if !defined(false) |
#define false 0 |
#endif |
#endif |
#endif /* __cplusplus */ |
/* |
========================================================== |
Useful constant definitions |
========================================================== |
*/ |
#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */ |
#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */ |
#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */ |
/* UniPG>> */ |
#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */ |
#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */ |
#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */ |
#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */ |
#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */ |
#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */ |
#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */ |
#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */ |
/* <<UniPG */ |
/* |
========================================================== |
enum definitions |
========================================================== |
*/ |
/** |
Rsiz Capabilities |
*/ |
typedef enum RSIZ_CAPABILITIES { |
STD_RSIZ = 0, /** Standard JPEG2000 profile*/ |
CINEMA2K = 3, /** Profile name for a 2K image*/ |
CINEMA4K = 4 /** Profile name for a 4K image*/ |
} OPJ_RSIZ_CAPABILITIES; |
/** |
Digital cinema operation mode |
*/ |
typedef enum CINEMA_MODE { |
OFF = 0, /** Not Digital Cinema*/ |
CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/ |
CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/ |
CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/ |
}OPJ_CINEMA_MODE; |
/** |
Progression order |
*/ |
typedef enum PROG_ORDER { |
PROG_UNKNOWN = -1, /**< place-holder */ |
LRCP = 0, /**< layer-resolution-component-precinct order */ |
RLCP = 1, /**< resolution-layer-component-precinct order */ |
RPCL = 2, /**< resolution-precinct-component-layer order */ |
PCRL = 3, /**< precinct-component-resolution-layer order */ |
CPRL = 4 /**< component-precinct-resolution-layer order */ |
} OPJ_PROG_ORDER; |
/** |
Supported image color spaces |
*/ |
typedef enum COLOR_SPACE { |
CLRSPC_UNKNOWN = -1, /**< not supported by the library */ |
CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */ |
CLRSPC_SRGB = 1, /**< sRGB */ |
CLRSPC_GRAY = 2, /**< grayscale */ |
CLRSPC_SYCC = 3 /**< YUV */ |
} OPJ_COLOR_SPACE; |
/** |
Supported codec |
*/ |
typedef enum CODEC_FORMAT { |
CODEC_UNKNOWN = -1, /**< place-holder */ |
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */ |
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */ |
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */ |
} OPJ_CODEC_FORMAT; |
/** |
Limit decoding to certain portions of the codestream. |
*/ |
typedef enum LIMIT_DECODING { |
NO_LIMITATION = 0, /**< No limitation for the decoding. The entire codestream will de decoded */ |
LIMIT_TO_MAIN_HEADER = 1, /**< The decoding is limited to the Main Header */ |
DECODE_ALL_BUT_PACKETS = 2 /**< Decode everything except the JPEG 2000 packets */ |
} OPJ_LIMIT_DECODING; |
/* |
========================================================== |
event manager typedef definitions |
========================================================== |
*/ |
/** |
Callback function prototype for events |
@param msg Event message |
@param client_data |
*/ |
typedef void (*opj_msg_callback) (const char *msg, void *client_data); |
/** |
Message handler object |
used for |
<ul> |
<li>Error messages |
<li>Warning messages |
<li>Debugging messages |
</ul> |
*/ |
typedef struct opj_event_mgr { |
/** Error message callback if available, NULL otherwise */ |
opj_msg_callback error_handler; |
/** Warning message callback if available, NULL otherwise */ |
opj_msg_callback warning_handler; |
/** Debug message callback if available, NULL otherwise */ |
opj_msg_callback info_handler; |
} opj_event_mgr_t; |
/* |
========================================================== |
codec typedef definitions |
========================================================== |
*/ |
/** |
Progression order changes |
*/ |
typedef struct opj_poc { |
/** Resolution num start, Component num start, given by POC */ |
int resno0, compno0; |
/** Layer num end,Resolution num end, Component num end, given by POC */ |
int layno1, resno1, compno1; |
/** Layer num start,Precinct num start, Precinct num end */ |
int layno0, precno0, precno1; |
/** Progression order enum*/ |
OPJ_PROG_ORDER prg1,prg; |
/** Progression order string*/ |
char progorder[5]; |
/** Tile number */ |
int tile; |
/** Start and end values for Tile width and height*/ |
int tx0,tx1,ty0,ty1; |
/** Start value, initialised in pi_initialise_encode*/ |
int layS, resS, compS, prcS; |
/** End value, initialised in pi_initialise_encode */ |
int layE, resE, compE, prcE; |
/** Start and end values of Tile width and height, initialised in pi_initialise_encode*/ |
int txS,txE,tyS,tyE,dx,dy; |
/** Temporary values for Tile parts, initialised in pi_create_encode */ |
int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t; |
} opj_poc_t; |
/** |
Compression parameters |
*/ |
typedef struct opj_cparameters { |
/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ |
bool tile_size_on; |
/** XTOsiz */ |
int cp_tx0; |
/** YTOsiz */ |
int cp_ty0; |
/** XTsiz */ |
int cp_tdx; |
/** YTsiz */ |
int cp_tdy; |
/** allocation by rate/distortion */ |
int cp_disto_alloc; |
/** allocation by fixed layer */ |
int cp_fixed_alloc; |
/** add fixed_quality */ |
int cp_fixed_quality; |
/** fixed layer */ |
int *cp_matrice; |
/** comment for coding */ |
char *cp_comment; |
/** csty : coding style */ |
int csty; |
/** progression order (default LRCP) */ |
OPJ_PROG_ORDER prog_order; |
/** progression order changes */ |
opj_poc_t POC[32]; |
/** number of progression order changes (POC), default to 0 */ |
int numpocs; |
/** number of layers */ |
int tcp_numlayers; |
/** rates of layers */ |
float tcp_rates[100]; |
/** different psnr for successive layers */ |
float tcp_distoratio[100]; |
/** number of resolutions */ |
int numresolution; |
/** initial code block width, default to 64 */ |
int cblockw_init; |
/** initial code block height, default to 64 */ |
int cblockh_init; |
/** mode switch (cblk_style) */ |
int mode; |
/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ |
int irreversible; |
/** region of interest: affected component in [0..3], -1 means no ROI */ |
int roi_compno; |
/** region of interest: upshift value */ |
int roi_shift; |
/* number of precinct size specifications */ |
int res_spec; |
/** initial precinct width */ |
int prcw_init[J2K_MAXRLVLS]; |
/** initial precinct height */ |
int prch_init[J2K_MAXRLVLS]; |
/**@name command line encoder parameters (not used inside the library) */ |
/*@{*/ |
/** input file name */ |
char infile[OPJ_PATH_LEN]; |
/** output file name */ |
char outfile[OPJ_PATH_LEN]; |
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ |
int index_on; |
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ |
char index[OPJ_PATH_LEN]; |
/** subimage encoding: origin image offset in x direction */ |
int image_offset_x0; |
/** subimage encoding: origin image offset in y direction */ |
int image_offset_y0; |
/** subsampling value for dx */ |
int subsampling_dx; |
/** subsampling value for dy */ |
int subsampling_dy; |
/** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/ |
int decod_format; |
/** output file format 0: J2K, 1: JP2, 2: JPT */ |
int cod_format; |
/*@}*/ |
/* UniPG>> */ |
/**@name JPWL encoding parameters */ |
/*@{*/ |
/** enables writing of EPC in MH, thus activating JPWL */ |
bool jpwl_epc_on; |
/** error protection method for MH (0,1,16,32,37-128) */ |
int jpwl_hprot_MH; |
/** tile number of header protection specification (>=0) */ |
int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** error protection methods for TPHs (0,1,16,32,37-128) */ |
int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; |
/** tile number of packet protection specification (>=0) */ |
int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; |
/** packet number of packet protection specification (>=0) */ |
int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; |
/** error protection methods for packets (0,1,16,32,37-128) */ |
int jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; |
/** enables writing of ESD, (0=no/1/2 bytes) */ |
int jpwl_sens_size; |
/** sensitivity addressing size (0=auto/2/4 bytes) */ |
int jpwl_sens_addr; |
/** sensitivity range (0-3) */ |
int jpwl_sens_range; |
/** sensitivity method for MH (-1=no,0-7) */ |
int jpwl_sens_MH; |
/** tile number of sensitivity specification (>=0) */ |
int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; |
/** sensitivity methods for TPHs (-1=no,0-7) */ |
int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; |
/*@}*/ |
/* <<UniPG */ |
/** Digital Cinema compliance 0-not compliant, 1-compliant*/ |
OPJ_CINEMA_MODE cp_cinema; |
/** Maximum rate for each component. If == 0, component size limitation is not considered */ |
int max_comp_size; |
/** Profile name*/ |
OPJ_RSIZ_CAPABILITIES cp_rsiz; |
/** Tile part generation*/ |
char tp_on; |
/** Flag for Tile part generation*/ |
char tp_flag; |
/** MCT (multiple component transform) */ |
char tcp_mct; |
} opj_cparameters_t; |
/** |
Decompression parameters |
*/ |
typedef struct opj_dparameters { |
/** |
Set the number of highest resolution levels to be discarded. |
The image resolution is effectively divided by 2 to the power of the number of discarded levels. |
The reduce factor is limited by the smallest total number of decomposition levels among tiles. |
if != 0, then original dimension divided by 2^(reduce); |
if == 0 or not used, image is decoded to the full resolution |
*/ |
int cp_reduce; |
/** |
Set the maximum number of quality layers to decode. |
If there are less quality layers than the specified number, all the quality layers are decoded. |
if != 0, then only the first "layer" layers are decoded; |
if == 0 or not used, all the quality layers are decoded |
*/ |
int cp_layer; |
/**@name command line encoder parameters (not used inside the library) */ |
/*@{*/ |
/** input file name */ |
char infile[OPJ_PATH_LEN]; |
/** output file name */ |
char outfile[OPJ_PATH_LEN]; |
/** input file format 0: J2K, 1: JP2, 2: JPT */ |
int decod_format; |
/** output file format 0: PGX, 1: PxM, 2: BMP */ |
int cod_format; |
/*@}*/ |
/* UniPG>> */ |
/**@name JPWL decoding parameters */ |
/*@{*/ |
/** activates the JPWL correction capabilities */ |
bool jpwl_correct; |
/** expected number of components */ |
int jpwl_exp_comps; |
/** maximum number of tiles */ |
int jpwl_max_tiles; |
/*@}*/ |
/* <<UniPG */ |
/** |
Specify whether the decoding should be done on the entire codestream, or be limited to the main header |
Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream |
if == NO_LIMITATION, the entire codestream is decoded; |
if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; |
*/ |
OPJ_LIMIT_DECODING cp_limit_decoding; |
} opj_dparameters_t; |
/** Common fields between JPEG-2000 compression and decompression master structs. */ |
#define opj_common_fields \ |
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\ |
void * client_data; /**< Available for use by application */\ |
bool is_decompressor; /**< So common code can tell which is which */\ |
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\ |
void *j2k_handle; /**< pointer to the J2K codec */\ |
void *jp2_handle; /**< pointer to the JP2 codec */\ |
void *mj2_handle /**< pointer to the MJ2 codec */ |
/* Routines that are to be used by both halves of the library are declared |
* to receive a pointer to this structure. There are no actual instances of |
* opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t. |
*/ |
typedef struct opj_common_struct { |
opj_common_fields; /* Fields common to both master struct types */ |
/* Additional fields follow in an actual opj_cinfo_t or |
* opj_dinfo_t. All three structs must agree on these |
* initial fields! (This would be a lot cleaner in C++.) |
*/ |
} opj_common_struct_t; |
typedef opj_common_struct_t * opj_common_ptr; |
/** |
Compression context info |
*/ |
typedef struct opj_cinfo { |
/** Fields shared with opj_dinfo_t */ |
opj_common_fields; |
/* other specific fields go here */ |
} opj_cinfo_t; |
/** |
Decompression context info |
*/ |
typedef struct opj_dinfo { |
/** Fields shared with opj_cinfo_t */ |
opj_common_fields; |
/* other specific fields go here */ |
} opj_dinfo_t; |
/* |
========================================================== |
I/O stream typedef definitions |
========================================================== |
*/ |
/* |
* Stream open flags. |
*/ |
/** The stream was opened for reading. */ |
#define OPJ_STREAM_READ 0x0001 |
/** The stream was opened for writing. */ |
#define OPJ_STREAM_WRITE 0x0002 |
/** |
Byte input-output stream (CIO) |
*/ |
typedef struct opj_cio { |
/** codec context */ |
opj_common_ptr cinfo; |
/** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */ |
int openmode; |
/** pointer to the start of the buffer */ |
unsigned char *buffer; |
/** buffer size in bytes */ |
int length; |
/** pointer to the start of the stream */ |
unsigned char *start; |
/** pointer to the end of the stream */ |
unsigned char *end; |
/** pointer to the current position */ |
unsigned char *bp; |
} opj_cio_t; |
/* |
========================================================== |
image typedef definitions |
========================================================== |
*/ |
/** |
Defines a single image component |
*/ |
typedef struct opj_image_comp { |
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ |
int dx; |
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ |
int dy; |
/** data width */ |
int w; |
/** data height */ |
int h; |
/** x component offset compared to the whole image */ |
int x0; |
/** y component offset compared to the whole image */ |
int y0; |
/** precision */ |
int prec; |
/** image depth in bits */ |
int bpp; |
/** signed (1) / unsigned (0) */ |
int sgnd; |
/** number of decoded resolution */ |
int resno_decoded; |
/** number of division by 2 of the out image compared to the original size of image */ |
int factor; |
/** image component data */ |
int *data; |
} opj_image_comp_t; |
/** |
Defines image data and characteristics |
*/ |
typedef struct opj_image { |
/** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */ |
int x0; |
/** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */ |
int y0; |
/** Xsiz: width of the reference grid */ |
int x1; |
/** Ysiz: height of the reference grid */ |
int y1; |
/** number of components in the image */ |
int numcomps; |
/** color space: sRGB, Greyscale or YUV */ |
OPJ_COLOR_SPACE color_space; |
/** image components */ |
opj_image_comp_t *comps; |
/** 'restricted' ICC profile */ |
unsigned char *icc_profile_buf; |
/** size of ICC profile */ |
int icc_profile_len; |
} opj_image_t; |
/** |
Component parameters structure used by the opj_image_create function |
*/ |
typedef struct opj_image_comptparm { |
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ |
int dx; |
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ |
int dy; |
/** data width */ |
int w; |
/** data height */ |
int h; |
/** x component offset compared to the whole image */ |
int x0; |
/** y component offset compared to the whole image */ |
int y0; |
/** precision */ |
int prec; |
/** image depth in bits */ |
int bpp; |
/** signed (1) / unsigned (0) */ |
int sgnd; |
} opj_image_cmptparm_t; |
/* |
========================================================== |
Information on the JPEG 2000 codestream |
========================================================== |
*/ |
/** |
Index structure : Information concerning a packet inside tile |
*/ |
typedef struct opj_packet_info { |
/** packet start position (including SOP marker if it exists) */ |
int start_pos; |
/** end of packet header position (including EPH marker if it exists)*/ |
int end_ph_pos; |
/** packet end position */ |
int end_pos; |
/** packet distorsion */ |
double disto; |
} opj_packet_info_t; |
/** |
Index structure : Information concerning tile-parts |
*/ |
typedef struct opj_tp_info { |
/** start position of tile part */ |
int tp_start_pos; |
/** end position of tile part header */ |
int tp_end_header; |
/** end position of tile part */ |
int tp_end_pos; |
/** start packet of tile part */ |
int tp_start_pack; |
/** number of packets of tile part */ |
int tp_numpacks; |
} opj_tp_info_t; |
/** |
Index structure : information regarding tiles |
*/ |
typedef struct opj_tile_info { |
/** value of thresh for each layer by tile cfr. Marcela */ |
double *thresh; |
/** number of tile */ |
int tileno; |
/** start position */ |
int start_pos; |
/** end position of the header */ |
int end_header; |
/** end position */ |
int end_pos; |
/** precinct number for each resolution level (width) */ |
int pw[33]; |
/** precinct number for each resolution level (height) */ |
int ph[33]; |
/** precinct size (in power of 2), in X for each resolution level */ |
int pdx[33]; |
/** precinct size (in power of 2), in Y for each resolution level */ |
int pdy[33]; |
/** information concerning packets inside tile */ |
opj_packet_info_t *packet; |
/** add fixed_quality */ |
int numpix; |
/** add fixed_quality */ |
double distotile; |
/** number of tile parts */ |
int num_tps; |
/** information concerning tile parts */ |
opj_tp_info_t *tp; |
} opj_tile_info_t; |
/* UniPG>> */ |
/** |
Marker structure |
*/ |
typedef struct opj_marker_info_t { |
/** marker type */ |
unsigned short int type; |
/** position in codestream */ |
int pos; |
/** length, marker val included */ |
int len; |
} opj_marker_info_t; |
/* <<UniPG */ |
/** |
Index structure of the codestream |
*/ |
typedef struct opj_codestream_info { |
/** maximum distortion reduction on the whole image (add for Marcela) */ |
double D_max; |
/** packet number */ |
int packno; |
/** writing the packet in the index with t2_encode_packets */ |
int index_write; |
/** image width */ |
int image_w; |
/** image height */ |
int image_h; |
/** progression order */ |
OPJ_PROG_ORDER prog; |
/** tile size in x */ |
int tile_x; |
/** tile size in y */ |
int tile_y; |
/** */ |
int tile_Ox; |
/** */ |
int tile_Oy; |
/** number of tiles in X */ |
int tw; |
/** number of tiles in Y */ |
int th; |
/** component numbers */ |
int numcomps; |
/** number of layer */ |
int numlayers; |
/** number of decomposition for each component */ |
int *numdecompos; |
/* UniPG>> */ |
/** number of markers */ |
int marknum; |
/** list of markers */ |
opj_marker_info_t *marker; |
/** actual size of markers array */ |
int maxmarknum; |
/* <<UniPG */ |
/** main header position */ |
int main_head_start; |
/** main header position */ |
int main_head_end; |
/** codestream's size */ |
int codestream_size; |
/** information regarding tiles inside image */ |
opj_tile_info_t *tile; |
} opj_codestream_info_t; |
#ifdef __cplusplus |
extern "C" { |
#endif |
/* |
========================================================== |
openjpeg version |
========================================================== |
*/ |
OPJ_API const char * OPJ_CALLCONV opj_version(void); |
/* |
========================================================== |
image functions definitions |
========================================================== |
*/ |
/** |
Create an image |
@param numcmpts number of components |
@param cmptparms components parameters |
@param clrspc image color space |
@return returns a new image structure if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); |
/** |
Deallocate any resources associated with an image |
@param image image to be destroyed |
*/ |
OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image); |
/* |
========================================================== |
stream functions definitions |
========================================================== |
*/ |
/** |
Open and allocate a memory stream for read / write. |
On reading, the user must provide a buffer containing encoded data. The buffer will be |
wrapped by the returned CIO handle. |
On writing, buffer parameters must be set to 0: a buffer will be allocated by the library |
to contain encoded data. |
@param cinfo Codec context info |
@param buffer Reading: buffer address. Writing: NULL |
@param length Reading: buffer length. Writing: 0 |
@return Returns a CIO handle if successful, returns NULL otherwise |
*/ |
OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length); |
/** |
Close and free a CIO handle |
@param cio CIO handle to free |
*/ |
OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); |
/** |
Get position in byte stream |
@param cio CIO handle |
@return Returns the position in bytes |
*/ |
OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio); |
/** |
Set position in byte stream |
@param cio CIO handle |
@param pos Position, in number of bytes, from the beginning of the stream |
*/ |
OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); |
/* |
========================================================== |
event manager functions definitions |
========================================================== |
*/ |
OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context); |
/* |
========================================================== |
codec functions definitions |
========================================================== |
*/ |
/** |
Creates a J2K/JPT/JP2 decompression structure |
@param format Decoder to select |
@return Returns a handle to a decompressor if successful, returns NULL otherwise |
*/ |
OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format); |
/** |
Destroy a decompressor handle |
@param dinfo decompressor handle to destroy |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo); |
/** |
Set decoding parameters to default values |
@param parameters Decompression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters); |
/** |
Setup the decoder decoding parameters using user parameters. |
Decoding parameters are returned in j2k->cp. |
@param dinfo decompressor handle |
@param parameters decompression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); |
/** |
Decode an image from a JPEG-2000 codestream |
@param dinfo decompressor handle |
@param cio Input buffer stream |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio); |
/** |
Decode an image from a JPEG-2000 codestream and extract the codestream information |
@param dinfo decompressor handle |
@param cio Input buffer stream |
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise |
@return Returns a decoded image if successful, returns NULL otherwise |
*/ |
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info); |
/** |
Creates a J2K/JP2 compression structure |
@param format Coder to select |
@return Returns a handle to a compressor if successful, returns NULL otherwise |
*/ |
OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format); |
/** |
Destroy a compressor handle |
@param cinfo compressor handle to destroy |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); |
/** |
Set encoding parameters to default values, that means : |
<ul> |
<li>Lossless |
<li>1 tile |
<li>Size of precinct : 2^15 x 2^15 (means 1 precinct) |
<li>Size of code-block : 64 x 64 |
<li>Number of resolutions: 6 |
<li>No SOP marker in the codestream |
<li>No EPH marker in the codestream |
<li>No sub-sampling in x or y direction |
<li>No mode switch activated |
<li>Progression order: LRCP |
<li>No index file |
<li>No ROI upshifted |
<li>No offset of the origin of the image |
<li>No offset of the origin of the tiles |
<li>Reversible DWT 5-3 |
</ul> |
@param parameters Compression parameters |
*/ |
OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters); |
/** |
Setup the encoder parameters using the current image and using user parameters. |
@param cinfo Compressor handle |
@param parameters Compression parameters |
@param image Input filled image |
*/ |
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image); |
/** |
Encode an image into a JPEG-2000 codestream |
@param cinfo compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci() |
@return Returns true if successful, returns false otherwise |
*/ |
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index); |
/** |
Encode an image into a JPEG-2000 codestream and extract the codestream information |
@param cinfo compressor handle |
@param cio Output buffer stream |
@param image Image to encode |
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise |
@return Returns true if successful, returns false otherwise |
*/ |
OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); |
/** |
Destroy Codestream information after compression or decompression |
@param cstr_info Codestream information structure |
*/ |
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info); |
#ifdef __cplusplus |
} |
#endif |
#endif /* OPENJPEG_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/opj_includes.h |
---|
0,0 → 1,136 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef OPJ_INCLUDES_H |
#define OPJ_INCLUDES_H |
/* |
========================================================== |
Standard includes used by the library |
========================================================== |
*/ |
// #include <memory.h> |
#include <stdlib.h> |
#include <string.h> |
#include <math.h> |
#include <float.h> |
#include <time.h> |
#include <stdio.h> |
#include <stdarg.h> |
#include <ctype.h> |
/* |
========================================================== |
OpenJPEG interface |
========================================================== |
*/ |
#include "openjpeg.h" |
/* |
========================================================== |
OpenJPEG modules |
========================================================== |
*/ |
/* Ignore GCC attributes if this is not GCC */ |
#ifndef __GNUC__ |
#define __attribute__(x) /* __attribute__(x) */ |
#endif |
/* |
The inline keyword is supported by C99 but not by C90. |
Most compilers implement their own version of this keyword ... |
*/ |
#ifndef INLINE |
#if defined(_MSC_VER) |
#define INLINE __forceinline |
#elif defined(__GNUC__) |
#define INLINE __inline__ |
#elif defined(__MWERKS__) |
#define INLINE inline |
#else |
/* add other compilers here ... */ |
#define INLINE |
#endif /* defined(<Compiler>) */ |
#endif /* INLINE */ |
/* Are restricted pointers available? (C99) */ |
#if (__STDC_VERSION__ != 199901L) |
/* Not a C99 compiler */ |
#ifdef __GNUC__ |
#define restrict __restrict__ |
#else |
#define restrict /* restrict */ |
#endif |
#endif |
/* MSVC and Borland C do not have lrintf */ |
#if defined(_MSC_VER) || defined(__BORLANDC__) |
static INLINE long lrintf(float f){ |
#ifdef _M_X64 |
return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); |
#else |
int i; |
_asm{ |
fld f |
fistp i |
}; |
return i; |
#endif |
} |
#endif |
#include "j2k_lib.h" |
#include "opj_malloc.h" |
#include "event.h" |
#include "cio.h" |
#include "image.h" |
#include "j2k.h" |
#include "jp2.h" |
#include "jpt.h" |
#include "mqc.h" |
#include "raw.h" |
#include "bio.h" |
#include "tgt.h" |
#include "pi.h" |
#include "tcd.h" |
#include "t1.h" |
#include "dwt.h" |
#include "t2.h" |
#include "mct.h" |
#include "int.h" |
#include "fix.h" |
/* JPWL>> */ |
#ifdef USE_JPWL |
#include "../jpwl/jpwl.h" |
#endif /* USE_JPWL */ |
/* <<JPWL */ |
#endif /* OPJ_INCLUDES_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/opj_malloc.h |
---|
0,0 → 1,166 |
/* |
* Copyright (c) 2005, Hervé Drolon, FreeImage Team |
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __OPJ_MALLOC_H |
#define __OPJ_MALLOC_H |
/** |
@file opj_malloc.h |
@brief Internal functions |
The functions in opj_malloc.h are internal utilities used for memory management. |
*/ |
/** @defgroup MISC MISC - Miscellaneous internal functions */ |
/*@{*/ |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Allocate an uninitialized memory block |
@param size Bytes to allocate |
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available |
*/ |
#ifdef ALLOC_PERF_OPT |
void * OPJ_CALLCONV opj_malloc(size_t size); |
#else |
#define opj_malloc(size) malloc(size) |
#endif |
/** |
Allocate a memory block with elements initialized to 0 |
@param num Blocks to allocate |
@param size Bytes per block to allocate |
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available |
*/ |
#ifdef ALLOC_PERF_OPT |
void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements); |
#else |
#define opj_calloc(num, size) calloc(num, size) |
#endif |
/** |
Allocate memory aligned to a 16 byte boundry |
@param size Bytes to allocate |
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available |
*/ |
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */ |
#ifdef _WIN32 |
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */ |
#ifdef __GNUC__ |
#include <mm_malloc.h> |
#define HAVE_MM_MALLOC |
#else /* MSVC, Intel C++ */ |
#include <malloc.h> |
#ifdef _mm_malloc |
#define HAVE_MM_MALLOC |
#endif |
#endif |
#else /* Not _WIN32 */ |
#if defined(__sun) |
#define HAVE_MEMALIGN |
/* Linux x86_64 and OSX always align allocations to 16 bytes */ |
#elif !defined(__amd64__) && !defined(__APPLE__) |
// #define HAVE_MEMALIGN |
#include <malloc.h> |
#endif |
#endif |
#define opj_aligned_malloc(size) malloc(size) |
#define opj_aligned_free(m) free(m) |
#ifdef HAVE_MM_MALLOC |
#undef opj_aligned_malloc |
#define opj_aligned_malloc(size) _mm_malloc(size, 16) |
#undef opj_aligned_free |
#define opj_aligned_free(m) _mm_free(m) |
#endif |
#undef HAVE_MEMALIGN |
#ifdef HAVE_MEMALIGN |
extern void* memalign(size_t, size_t); |
#undef opj_aligned_malloc |
#define opj_aligned_malloc(size) memalign(16, (size)) |
#undef opj_aligned_free |
#define opj_aligned_free(m) free(m) |
#endif |
#undef HAVE_POSIX_MEMALIGN |
#ifdef HAVE_POSIX_MEMALIGN |
#undef opj_aligned_malloc |
extern int posix_memalign(void**, size_t, size_t); |
static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ |
void* mem = NULL; |
posix_memalign(&mem, 16, size); |
return mem; |
} |
#undef opj_aligned_free |
#define opj_aligned_free(m) free(m) |
#endif |
#ifdef ALLOC_PERF_OPT |
#undef opj_aligned_malloc |
#define opj_aligned_malloc(size) opj_malloc(size) |
#undef opj_aligned_free |
#define opj_aligned_free(m) opj_free(m) |
#endif |
/** |
Reallocate memory blocks. |
@param m Pointer to previously allocated memory block |
@param s New size in bytes |
@return Returns a void pointer to the reallocated (and possibly moved) memory block |
*/ |
#ifdef ALLOC_PERF_OPT |
void * OPJ_CALLCONV opj_realloc(void * m, size_t s); |
#else |
#define opj_realloc(m, s) realloc(m, s) |
#endif |
/** |
Deallocates or frees a memory block. |
@param m Previously allocated memory block to be freed |
*/ |
#ifdef ALLOC_PERF_OPT |
void OPJ_CALLCONV opj_free(void * m); |
#else |
#define opj_free(m) free(m) |
#endif |
#ifdef __GNUC__ |
#pragma GCC poison malloc calloc realloc free |
#endif |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __OPJ_MALLOC_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/pi.c |
---|
0,0 → 1,963 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup PI PI - Implementation of a packet iterator */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
/** |
Get next packet in layer-resolution-component-precinct order. |
@param pi packet iterator to modify |
@return returns false if pi pointed to the last packet or else returns true |
*/ |
static bool pi_next_lrcp(opj_pi_iterator_t * pi); |
/** |
Get next packet in resolution-layer-component-precinct order. |
@param pi packet iterator to modify |
@return returns false if pi pointed to the last packet or else returns true |
*/ |
static bool pi_next_rlcp(opj_pi_iterator_t * pi); |
/** |
Get next packet in resolution-precinct-component-layer order. |
@param pi packet iterator to modify |
@return returns false if pi pointed to the last packet or else returns true |
*/ |
static bool pi_next_rpcl(opj_pi_iterator_t * pi); |
/** |
Get next packet in precinct-component-resolution-layer order. |
@param pi packet iterator to modify |
@return returns false if pi pointed to the last packet or else returns true |
*/ |
static bool pi_next_pcrl(opj_pi_iterator_t * pi); |
/** |
Get next packet in component-precinct-resolution-layer order. |
@param pi packet iterator to modify |
@return returns false if pi pointed to the last packet or else returns true |
*/ |
static bool pi_next_cprl(opj_pi_iterator_t * pi); |
/*@}*/ |
/*@}*/ |
/* |
========================================================== |
local functions |
========================================================== |
*/ |
static bool pi_next_lrcp(opj_pi_iterator_t * pi) { |
opj_pi_comp_t *comp = NULL; |
opj_pi_resolution_t *res = NULL; |
long index = 0; |
if (!pi->first) { |
comp = &pi->comps[pi->compno]; |
res = &comp->resolutions[pi->resno]; |
goto LABEL_SKIP; |
} else { |
pi->first = 0; |
} |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; |
pi->resno++) { |
for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { |
comp = &pi->comps[pi->compno]; |
if (pi->resno >= comp->numresolutions) { |
continue; |
} |
res = &comp->resolutions[pi->resno]; |
if (!pi->tp_on){ |
pi->poc.precno1 = res->pw * res->ph; |
} |
for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
pi->include[index] = 1; |
return true; |
} |
LABEL_SKIP:; |
} |
} |
} |
} |
return false; |
} |
static bool pi_next_rlcp(opj_pi_iterator_t * pi) { |
opj_pi_comp_t *comp = NULL; |
opj_pi_resolution_t *res = NULL; |
long index = 0; |
if (!pi->first) { |
comp = &pi->comps[pi->compno]; |
res = &comp->resolutions[pi->resno]; |
goto LABEL_SKIP; |
} else { |
pi->first = 0; |
} |
for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { |
comp = &pi->comps[pi->compno]; |
if (pi->resno >= comp->numresolutions) { |
continue; |
} |
res = &comp->resolutions[pi->resno]; |
if(!pi->tp_on){ |
pi->poc.precno1 = res->pw * res->ph; |
} |
for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
pi->include[index] = 1; |
return true; |
} |
LABEL_SKIP:; |
} |
} |
} |
} |
return false; |
} |
static bool pi_next_rpcl(opj_pi_iterator_t * pi) { |
opj_pi_comp_t *comp = NULL; |
opj_pi_resolution_t *res = NULL; |
long index = 0; |
if (!pi->first) { |
goto LABEL_SKIP; |
} else { |
int compno, resno; |
pi->first = 0; |
pi->dx = 0; |
pi->dy = 0; |
for (compno = 0; compno < pi->numcomps; compno++) { |
comp = &pi->comps[compno]; |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int dx, dy; |
res = &comp->resolutions[resno]; |
dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); |
dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); |
pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); |
pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); |
} |
} |
} |
if (!pi->tp_on){ |
pi->poc.ty0 = pi->ty0; |
pi->poc.tx0 = pi->tx0; |
pi->poc.ty1 = pi->ty1; |
pi->poc.tx1 = pi->tx1; |
} |
for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { |
for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { |
for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { |
for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { |
int levelno; |
int trx0, try0; |
int trx1, try1; |
int rpx, rpy; |
int prci, prcj; |
comp = &pi->comps[pi->compno]; |
if (pi->resno >= comp->numresolutions) { |
continue; |
} |
res = &comp->resolutions[pi->resno]; |
levelno = comp->numresolutions - 1 - pi->resno; |
trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); |
try0 = int_ceildiv(pi->ty0, comp->dy << levelno); |
trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); |
try1 = int_ceildiv(pi->ty1, comp->dy << levelno); |
rpx = res->pdx + levelno; |
rpy = res->pdy + levelno; |
if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ |
continue; |
} |
if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ |
continue; |
} |
if ((res->pw==0)||(res->ph==0)) continue; |
if ((trx0==trx1)||(try0==try1)) continue; |
prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) |
- int_floordivpow2(trx0, res->pdx); |
prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) |
- int_floordivpow2(try0, res->pdy); |
pi->precno = prci + prcj * res->pw; |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
pi->include[index] = 1; |
return true; |
} |
LABEL_SKIP:; |
} |
} |
} |
} |
} |
return false; |
} |
static bool pi_next_pcrl(opj_pi_iterator_t * pi) { |
opj_pi_comp_t *comp = NULL; |
opj_pi_resolution_t *res = NULL; |
long index = 0; |
if (!pi->first) { |
comp = &pi->comps[pi->compno]; |
goto LABEL_SKIP; |
} else { |
int compno, resno; |
pi->first = 0; |
pi->dx = 0; |
pi->dy = 0; |
for (compno = 0; compno < pi->numcomps; compno++) { |
comp = &pi->comps[compno]; |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int dx, dy; |
res = &comp->resolutions[resno]; |
dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); |
dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); |
pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); |
pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); |
} |
} |
} |
if (!pi->tp_on){ |
pi->poc.ty0 = pi->ty0; |
pi->poc.tx0 = pi->tx0; |
pi->poc.ty1 = pi->ty1; |
pi->poc.tx1 = pi->tx1; |
} |
for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { |
for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { |
for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { |
comp = &pi->comps[pi->compno]; |
for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { |
int levelno; |
int trx0, try0; |
int trx1, try1; |
int rpx, rpy; |
int prci, prcj; |
res = &comp->resolutions[pi->resno]; |
levelno = comp->numresolutions - 1 - pi->resno; |
trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); |
try0 = int_ceildiv(pi->ty0, comp->dy << levelno); |
trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); |
try1 = int_ceildiv(pi->ty1, comp->dy << levelno); |
rpx = res->pdx + levelno; |
rpy = res->pdy + levelno; |
if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ |
continue; |
} |
if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ |
continue; |
} |
if ((res->pw==0)||(res->ph==0)) continue; |
if ((trx0==trx1)||(try0==try1)) continue; |
prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) |
- int_floordivpow2(trx0, res->pdx); |
prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) |
- int_floordivpow2(try0, res->pdy); |
pi->precno = prci + prcj * res->pw; |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
pi->include[index] = 1; |
return true; |
} |
LABEL_SKIP:; |
} |
} |
} |
} |
} |
return false; |
} |
static bool pi_next_cprl(opj_pi_iterator_t * pi) { |
opj_pi_comp_t *comp = NULL; |
opj_pi_resolution_t *res = NULL; |
long index = 0; |
if (!pi->first) { |
comp = &pi->comps[pi->compno]; |
goto LABEL_SKIP; |
} else { |
pi->first = 0; |
} |
for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { |
int resno; |
comp = &pi->comps[pi->compno]; |
pi->dx = 0; |
pi->dy = 0; |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int dx, dy; |
res = &comp->resolutions[resno]; |
dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); |
dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); |
pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); |
pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); |
} |
if (!pi->tp_on){ |
pi->poc.ty0 = pi->ty0; |
pi->poc.tx0 = pi->tx0; |
pi->poc.ty1 = pi->ty1; |
pi->poc.tx1 = pi->tx1; |
} |
for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) { |
for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) { |
for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { |
int levelno; |
int trx0, try0; |
int trx1, try1; |
int rpx, rpy; |
int prci, prcj; |
res = &comp->resolutions[pi->resno]; |
levelno = comp->numresolutions - 1 - pi->resno; |
trx0 = int_ceildiv(pi->tx0, comp->dx << levelno); |
try0 = int_ceildiv(pi->ty0, comp->dy << levelno); |
trx1 = int_ceildiv(pi->tx1, comp->dx << levelno); |
try1 = int_ceildiv(pi->ty1, comp->dy << levelno); |
rpx = res->pdx + levelno; |
rpy = res->pdy + levelno; |
if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){ |
continue; |
} |
if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){ |
continue; |
} |
if ((res->pw==0)||(res->ph==0)) continue; |
if ((trx0==trx1)||(try0==try1)) continue; |
prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) |
- int_floordivpow2(trx0, res->pdx); |
prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) |
- int_floordivpow2(try0, res->pdy); |
pi->precno = prci + prcj * res->pw; |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
pi->include[index] = 1; |
return true; |
} |
LABEL_SKIP:; |
} |
} |
} |
} |
} |
return false; |
} |
/* |
========================================================== |
Packet iterator interface |
========================================================== |
*/ |
opj_pi_iterator_t *pi_create_decode(opj_image_t *image, opj_cp_t *cp, int tileno) { |
int p, q; |
int compno, resno, pino; |
opj_pi_iterator_t *pi = NULL; |
opj_tcp_t *tcp = NULL; |
opj_tccp_t *tccp = NULL; |
tcp = &cp->tcps[tileno]; |
pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t)); |
if(!pi) { |
/* TODO: throw an error */ |
return NULL; |
} |
for (pino = 0; pino < tcp->numpocs + 1; pino++) { /* change */ |
int maxres = 0; |
int maxprec = 0; |
p = tileno % cp->tw; |
q = tileno / cp->tw; |
pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0); |
pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0); |
pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); |
pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); |
pi[pino].numcomps = image->numcomps; |
pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t)); |
if(!pi[pino].comps) { |
/* TODO: throw an error */ |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
for (compno = 0; compno < pi->numcomps; compno++) { |
int tcx0, tcy0, tcx1, tcy1; |
opj_pi_comp_t *comp = &pi[pino].comps[compno]; |
tccp = &tcp->tccps[compno]; |
comp->dx = image->comps[compno].dx; |
comp->dy = image->comps[compno].dy; |
comp->numresolutions = tccp->numresolutions; |
comp->resolutions = (opj_pi_resolution_t*) opj_calloc(comp->numresolutions, sizeof(opj_pi_resolution_t)); |
if(!comp->resolutions) { |
/* TODO: throw an error */ |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
tcx0 = int_ceildiv(pi->tx0, comp->dx); |
tcy0 = int_ceildiv(pi->ty0, comp->dy); |
tcx1 = int_ceildiv(pi->tx1, comp->dx); |
tcy1 = int_ceildiv(pi->ty1, comp->dy); |
if (comp->numresolutions > maxres) { |
maxres = comp->numresolutions; |
} |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int levelno; |
int rx0, ry0, rx1, ry1; |
int px0, py0, px1, py1; |
opj_pi_resolution_t *res = &comp->resolutions[resno]; |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
res->pdx = tccp->prcw[resno]; |
res->pdy = tccp->prch[resno]; |
} else { |
res->pdx = 15; |
res->pdy = 15; |
} |
levelno = comp->numresolutions - 1 - resno; |
rx0 = int_ceildivpow2(tcx0, levelno); |
ry0 = int_ceildivpow2(tcy0, levelno); |
rx1 = int_ceildivpow2(tcx1, levelno); |
ry1 = int_ceildivpow2(tcy1, levelno); |
px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; |
py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; |
px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; |
py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; |
res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx); |
res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy); |
if (res->pw*res->ph > maxprec) { |
maxprec = res->pw*res->ph; |
} |
} |
} |
tccp = &tcp->tccps[0]; |
pi[pino].step_p = 1; |
pi[pino].step_c = maxprec * pi[pino].step_p; |
pi[pino].step_r = image->numcomps * pi[pino].step_c; |
pi[pino].step_l = maxres * pi[pino].step_r; |
if (pino == 0) { |
pi[pino].include = (short int*) opj_calloc(image->numcomps * maxres * tcp->numlayers * maxprec, sizeof(short int)); |
if(!pi[pino].include) { |
/* TODO: throw an error */ |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
} |
else { |
pi[pino].include = pi[pino - 1].include; |
} |
if (tcp->POC == 0) { |
pi[pino].first = 1; |
pi[pino].poc.resno0 = 0; |
pi[pino].poc.compno0 = 0; |
pi[pino].poc.layno1 = tcp->numlayers; |
pi[pino].poc.resno1 = maxres; |
pi[pino].poc.compno1 = image->numcomps; |
pi[pino].poc.prg = tcp->prg; |
} else { |
pi[pino].first = 1; |
pi[pino].poc.resno0 = tcp->pocs[pino].resno0; |
pi[pino].poc.compno0 = tcp->pocs[pino].compno0; |
pi[pino].poc.layno1 = tcp->pocs[pino].layno1; |
pi[pino].poc.resno1 = tcp->pocs[pino].resno1; |
pi[pino].poc.compno1 = tcp->pocs[pino].compno1; |
pi[pino].poc.prg = tcp->pocs[pino].prg; |
} |
pi[pino].poc.layno0 = 0; |
pi[pino].poc.precno0 = 0; |
pi[pino].poc.precno1 = maxprec; |
} |
return pi; |
} |
opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno, J2K_T2_MODE t2_mode){ |
int p, q, pino; |
int compno, resno; |
int maxres = 0; |
int maxprec = 0; |
opj_pi_iterator_t *pi = NULL; |
opj_tcp_t *tcp = NULL; |
opj_tccp_t *tccp = NULL; |
tcp = &cp->tcps[tileno]; |
pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t)); |
if(!pi) { return NULL;} |
pi->tp_on = cp->tp_on; |
for(pino = 0;pino < tcp->numpocs+1 ; pino ++){ |
p = tileno % cp->tw; |
q = tileno / cp->tw; |
pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0); |
pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0); |
pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); |
pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); |
pi[pino].numcomps = image->numcomps; |
pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t)); |
if(!pi[pino].comps) { |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
for (compno = 0; compno < pi[pino].numcomps; compno++) { |
int tcx0, tcy0, tcx1, tcy1; |
opj_pi_comp_t *comp = &pi[pino].comps[compno]; |
tccp = &tcp->tccps[compno]; |
comp->dx = image->comps[compno].dx; |
comp->dy = image->comps[compno].dy; |
comp->numresolutions = tccp->numresolutions; |
comp->resolutions = (opj_pi_resolution_t*) opj_malloc(comp->numresolutions * sizeof(opj_pi_resolution_t)); |
if(!comp->resolutions) { |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
tcx0 = int_ceildiv(pi[pino].tx0, comp->dx); |
tcy0 = int_ceildiv(pi[pino].ty0, comp->dy); |
tcx1 = int_ceildiv(pi[pino].tx1, comp->dx); |
tcy1 = int_ceildiv(pi[pino].ty1, comp->dy); |
if (comp->numresolutions > maxres) { |
maxres = comp->numresolutions; |
} |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int levelno; |
int rx0, ry0, rx1, ry1; |
int px0, py0, px1, py1; |
opj_pi_resolution_t *res = &comp->resolutions[resno]; |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
res->pdx = tccp->prcw[resno]; |
res->pdy = tccp->prch[resno]; |
} else { |
res->pdx = 15; |
res->pdy = 15; |
} |
levelno = comp->numresolutions - 1 - resno; |
rx0 = int_ceildivpow2(tcx0, levelno); |
ry0 = int_ceildivpow2(tcy0, levelno); |
rx1 = int_ceildivpow2(tcx1, levelno); |
ry1 = int_ceildivpow2(tcy1, levelno); |
px0 = int_floordivpow2(rx0, res->pdx) << res->pdx; |
py0 = int_floordivpow2(ry0, res->pdy) << res->pdy; |
px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx; |
py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy; |
res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx); |
res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy); |
if (res->pw*res->ph > maxprec) { |
maxprec = res->pw * res->ph; |
} |
} |
} |
tccp = &tcp->tccps[0]; |
pi[pino].step_p = 1; |
pi[pino].step_c = maxprec * pi[pino].step_p; |
pi[pino].step_r = image->numcomps * pi[pino].step_c; |
pi[pino].step_l = maxres * pi[pino].step_r; |
for (compno = 0; compno < pi->numcomps; compno++) { |
opj_pi_comp_t *comp = &pi->comps[compno]; |
for (resno = 0; resno < comp->numresolutions; resno++) { |
int dx, dy; |
opj_pi_resolution_t *res = &comp->resolutions[resno]; |
dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); |
dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); |
pi[pino].dx = !pi->dx ? dx : int_min(pi->dx, dx); |
pi[pino].dy = !pi->dy ? dy : int_min(pi->dy, dy); |
} |
} |
if (pino == 0) { |
pi[pino].include = (short int*) opj_calloc(tcp->numlayers * pi[pino].step_l, sizeof(short int)); |
if(!pi[pino].include) { |
pi_destroy(pi, cp, tileno); |
return NULL; |
} |
} |
else { |
pi[pino].include = pi[pino - 1].include; |
} |
/* Generation of boundaries for each prog flag*/ |
if(tcp->POC && ( cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))){ |
tcp->pocs[pino].compS= tcp->pocs[pino].compno0; |
tcp->pocs[pino].compE= tcp->pocs[pino].compno1; |
tcp->pocs[pino].resS = tcp->pocs[pino].resno0; |
tcp->pocs[pino].resE = tcp->pocs[pino].resno1; |
tcp->pocs[pino].layE = tcp->pocs[pino].layno1; |
tcp->pocs[pino].prg = tcp->pocs[pino].prg1; |
if (pino > 0) |
tcp->pocs[pino].layS = (tcp->pocs[pino].layE > tcp->pocs[pino - 1].layE) ? tcp->pocs[pino - 1].layE : 0; |
}else { |
tcp->pocs[pino].compS= 0; |
tcp->pocs[pino].compE= image->numcomps; |
tcp->pocs[pino].resS = 0; |
tcp->pocs[pino].resE = maxres; |
tcp->pocs[pino].layS = 0; |
tcp->pocs[pino].layE = tcp->numlayers; |
tcp->pocs[pino].prg = tcp->prg; |
} |
tcp->pocs[pino].prcS = 0; |
tcp->pocs[pino].prcE = maxprec;; |
tcp->pocs[pino].txS = pi[pino].tx0; |
tcp->pocs[pino].txE = pi[pino].tx1; |
tcp->pocs[pino].tyS = pi[pino].ty0; |
tcp->pocs[pino].tyE = pi[pino].ty1; |
tcp->pocs[pino].dx = pi[pino].dx; |
tcp->pocs[pino].dy = pi[pino].dy; |
} |
return pi; |
} |
void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) { |
int compno, pino; |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
if(pi) { |
for (pino = 0; pino < tcp->numpocs + 1; pino++) { |
if(pi[pino].comps) { |
for (compno = 0; compno < pi->numcomps; compno++) { |
opj_pi_comp_t *comp = &pi[pino].comps[compno]; |
if(comp->resolutions) { |
opj_free(comp->resolutions); |
} |
} |
opj_free(pi[pino].comps); |
} |
} |
if(pi->include) { |
opj_free(pi->include); |
} |
opj_free(pi); |
} |
} |
bool pi_next(opj_pi_iterator_t * pi) { |
switch (pi->poc.prg) { |
case LRCP: |
return pi_next_lrcp(pi); |
case RLCP: |
return pi_next_rlcp(pi); |
case RPCL: |
return pi_next_rpcl(pi); |
case PCRL: |
return pi_next_pcrl(pi); |
case CPRL: |
return pi_next_cprl(pi); |
case PROG_UNKNOWN: |
return false; |
} |
return false; |
} |
bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){ |
char prog[4]; |
int i; |
int incr_top=1,resetX=0; |
opj_tcp_t *tcps =&cp->tcps[tileno]; |
opj_poc_t *tcp= &tcps->pocs[pino]; |
pi[pino].first = 1; |
pi[pino].poc.prg = tcp->prg; |
switch(tcp->prg){ |
case CPRL: strncpy(prog, "CPRL",4); |
break; |
case LRCP: strncpy(prog, "LRCP",4); |
break; |
case PCRL: strncpy(prog, "PCRL",4); |
break; |
case RLCP: strncpy(prog, "RLCP",4); |
break; |
case RPCL: strncpy(prog, "RPCL",4); |
break; |
case PROG_UNKNOWN: |
return true; |
} |
if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){ |
pi[pino].poc.resno0 = tcp->resS; |
pi[pino].poc.resno1 = tcp->resE; |
pi[pino].poc.compno0 = tcp->compS; |
pi[pino].poc.compno1 = tcp->compE; |
pi[pino].poc.layno0 = tcp->layS; |
pi[pino].poc.layno1 = tcp->layE; |
pi[pino].poc.precno0 = tcp->prcS; |
pi[pino].poc.precno1 = tcp->prcE; |
pi[pino].poc.tx0 = tcp->txS; |
pi[pino].poc.ty0 = tcp->tyS; |
pi[pino].poc.tx1 = tcp->txE; |
pi[pino].poc.ty1 = tcp->tyE; |
}else { |
if( tpnum < cur_totnum_tp){ |
for(i=3;i>=0;i--){ |
switch(prog[i]){ |
case 'C': |
if (i > tppos){ |
pi[pino].poc.compno0 = tcp->compS; |
pi[pino].poc.compno1 = tcp->compE; |
}else{ |
if (tpnum == 0){ |
tcp->comp_t = tcp->compS; |
pi[pino].poc.compno0 = tcp->comp_t; |
pi[pino].poc.compno1 = tcp->comp_t+1; |
tcp->comp_t+=1; |
}else{ |
if (incr_top == 1){ |
if(tcp->comp_t ==tcp->compE){ |
tcp->comp_t = tcp->compS; |
pi[pino].poc.compno0 = tcp->comp_t; |
pi[pino].poc.compno1 = tcp->comp_t+1; |
tcp->comp_t+=1; |
incr_top=1; |
}else{ |
pi[pino].poc.compno0 = tcp->comp_t; |
pi[pino].poc.compno1 = tcp->comp_t+1; |
tcp->comp_t+=1; |
incr_top=0; |
} |
}else{ |
pi[pino].poc.compno0 = tcp->comp_t-1; |
pi[pino].poc.compno1 = tcp->comp_t; |
} |
} |
} |
break; |
case 'R': |
if (i > tppos){ |
pi[pino].poc.resno0 = tcp->resS; |
pi[pino].poc.resno1 = tcp->resE; |
}else{ |
if (tpnum == 0){ |
tcp->res_t = tcp->resS; |
pi[pino].poc.resno0 = tcp->res_t; |
pi[pino].poc.resno1 = tcp->res_t+1; |
tcp->res_t+=1; |
}else{ |
if (incr_top == 1){ |
if(tcp->res_t==tcp->resE){ |
tcp->res_t = tcp->resS; |
pi[pino].poc.resno0 = tcp->res_t; |
pi[pino].poc.resno1 = tcp->res_t+1; |
tcp->res_t+=1; |
incr_top=1; |
}else{ |
pi[pino].poc.resno0 = tcp->res_t; |
pi[pino].poc.resno1 = tcp->res_t+1; |
tcp->res_t+=1; |
incr_top=0; |
} |
}else{ |
pi[pino].poc.resno0 = tcp->res_t - 1; |
pi[pino].poc.resno1 = tcp->res_t; |
} |
} |
} |
break; |
case 'L': |
if (i > tppos){ |
pi[pino].poc.layno0 = tcp->layS; |
pi[pino].poc.layno1 = tcp->layE; |
}else{ |
if (tpnum == 0){ |
tcp->lay_t = tcp->layS; |
pi[pino].poc.layno0 = tcp->lay_t; |
pi[pino].poc.layno1 = tcp->lay_t+1; |
tcp->lay_t+=1; |
}else{ |
if (incr_top == 1){ |
if(tcp->lay_t == tcp->layE){ |
tcp->lay_t = tcp->layS; |
pi[pino].poc.layno0 = tcp->lay_t; |
pi[pino].poc.layno1 = tcp->lay_t+1; |
tcp->lay_t+=1; |
incr_top=1; |
}else{ |
pi[pino].poc.layno0 = tcp->lay_t; |
pi[pino].poc.layno1 = tcp->lay_t+1; |
tcp->lay_t+=1; |
incr_top=0; |
} |
}else{ |
pi[pino].poc.layno0 = tcp->lay_t - 1; |
pi[pino].poc.layno1 = tcp->lay_t; |
} |
} |
} |
break; |
case 'P': |
switch(tcp->prg){ |
case LRCP: |
case RLCP: |
if (i > tppos){ |
pi[pino].poc.precno0 = tcp->prcS; |
pi[pino].poc.precno1 = tcp->prcE; |
}else{ |
if (tpnum == 0){ |
tcp->prc_t = tcp->prcS; |
pi[pino].poc.precno0 = tcp->prc_t; |
pi[pino].poc.precno1 = tcp->prc_t+1; |
tcp->prc_t+=1; |
}else{ |
if (incr_top == 1){ |
if(tcp->prc_t == tcp->prcE){ |
tcp->prc_t = tcp->prcS; |
pi[pino].poc.precno0 = tcp->prc_t; |
pi[pino].poc.precno1 = tcp->prc_t+1; |
tcp->prc_t+=1; |
incr_top=1; |
}else{ |
pi[pino].poc.precno0 = tcp->prc_t; |
pi[pino].poc.precno1 = tcp->prc_t+1; |
tcp->prc_t+=1; |
incr_top=0; |
} |
}else{ |
pi[pino].poc.precno0 = tcp->prc_t - 1; |
pi[pino].poc.precno1 = tcp->prc_t; |
} |
} |
} |
break; |
default: |
if (i > tppos){ |
pi[pino].poc.tx0 = tcp->txS; |
pi[pino].poc.ty0 = tcp->tyS; |
pi[pino].poc.tx1 = tcp->txE; |
pi[pino].poc.ty1 = tcp->tyE; |
}else{ |
if (tpnum == 0){ |
tcp->tx0_t = tcp->txS; |
tcp->ty0_t = tcp->tyS; |
pi[pino].poc.tx0 = tcp->tx0_t; |
pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx); |
pi[pino].poc.ty0 = tcp->ty0_t; |
pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); |
tcp->tx0_t = pi[pino].poc.tx1; |
tcp->ty0_t = pi[pino].poc.ty1; |
}else{ |
if (incr_top == 1){ |
if(tcp->tx0_t >= tcp->txE){ |
if(tcp->ty0_t >= tcp->tyE){ |
tcp->ty0_t = tcp->tyS; |
pi[pino].poc.ty0 = tcp->ty0_t; |
pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); |
tcp->ty0_t = pi[pino].poc.ty1; |
incr_top=1;resetX=1; |
}else{ |
pi[pino].poc.ty0 = tcp->ty0_t; |
pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy); |
tcp->ty0_t = pi[pino].poc.ty1; |
incr_top=0;resetX=1; |
} |
if(resetX==1){ |
tcp->tx0_t = tcp->txS; |
pi[pino].poc.tx0 = tcp->tx0_t; |
pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx); |
tcp->tx0_t = pi[pino].poc.tx1; |
} |
}else{ |
pi[pino].poc.tx0 = tcp->tx0_t; |
pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx); |
tcp->tx0_t = pi[pino].poc.tx1; |
pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy); |
pi[pino].poc.ty1 = tcp->ty0_t ; |
incr_top=0; |
} |
}else{ |
pi[pino].poc.tx0 = tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx); |
pi[pino].poc.tx1 = tcp->tx0_t ; |
pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy); |
pi[pino].poc.ty1 = tcp->ty0_t ; |
} |
} |
} |
break; |
} |
break; |
} |
} |
} |
} |
return false; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/pi.h |
---|
0,0 → 1,156 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __PI_H |
#define __PI_H |
/** |
@file pi.h |
@brief Implementation of a packet iterator (PI) |
The functions in PI.C have for goal to realize a packet iterator that permits to get the next |
packet following the progression order and change of it. The functions in PI.C are used |
by some function in T2.C. |
*/ |
/** @defgroup PI PI - Implementation of a packet iterator */ |
/*@{*/ |
/** |
FIXME: documentation |
*/ |
typedef struct opj_pi_resolution { |
int pdx, pdy; |
int pw, ph; |
} opj_pi_resolution_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_pi_comp { |
int dx, dy; |
/** number of resolution levels */ |
int numresolutions; |
opj_pi_resolution_t *resolutions; |
} opj_pi_comp_t; |
/** |
Packet iterator |
*/ |
typedef struct opj_pi_iterator { |
/** Enabling Tile part generation*/ |
char tp_on; |
/** precise if the packet has been already used (usefull for progression order change) */ |
short int *include; |
/** layer step used to localize the packet in the include vector */ |
int step_l; |
/** resolution step used to localize the packet in the include vector */ |
int step_r; |
/** component step used to localize the packet in the include vector */ |
int step_c; |
/** precinct step used to localize the packet in the include vector */ |
int step_p; |
/** component that identify the packet */ |
int compno; |
/** resolution that identify the packet */ |
int resno; |
/** precinct that identify the packet */ |
int precno; |
/** layer that identify the packet */ |
int layno; |
/** 0 if the first packet */ |
int first; |
/** progression order change information */ |
opj_poc_t poc; |
/** number of components in the image */ |
int numcomps; |
/** Components*/ |
opj_pi_comp_t *comps; |
int tx0, ty0, tx1, ty1; |
int x, y, dx, dy; |
} opj_pi_iterator_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a packet iterator for Encoder |
@param image Raw image for which the packets will be listed |
@param cp Coding parameters |
@param tileno Number that identifies the tile for which to list the packets |
@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass |
@return Returns a packet iterator that points to the first packet of the tile |
@see pi_destroy |
*/ |
opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno,J2K_T2_MODE t2_mode); |
/** |
Modify the packet iterator for enabling tile part generation |
@param pi Handle to the packet iterator generated in pi_initialise_encode |
@param cp Coding parameters |
@param tileno Number that identifies the tile for which to list the packets |
@param pino Iterator index for pi |
@param tpnum Tile part number of the current tile |
@param tppos The position of the tile part flag in the progression order |
@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass |
@param cur_totnum_tp The total number of tile parts in the current tile |
@return Returns true if an error is detected |
*/ |
bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp); |
/** |
Create a packet iterator for Decoder |
@param image Raw image for which the packets will be listed |
@param cp Coding parameters |
@param tileno Number that identifies the tile for which to list the packets |
@return Returns a packet iterator that points to the first packet of the tile |
@see pi_destroy |
*/ |
opj_pi_iterator_t *pi_create_decode(opj_image_t * image, opj_cp_t * cp, int tileno); |
/** |
Destroy a packet iterator |
@param pi Previously created packet iterator |
@param cp Coding parameters |
@param tileno Number that identifies the tile for which the packets were listed |
@see pi_create |
*/ |
void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno); |
/** |
Modify the packet iterator to point to the next packet |
@param pi Packet iterator to modify |
@return Returns false if pi pointed to the last packet or else returns true |
*/ |
bool pi_next(opj_pi_iterator_t * pi); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __PI_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/raw.c |
---|
0,0 → 1,87 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/* |
========================================================== |
local functions |
========================================================== |
*/ |
/* |
========================================================== |
RAW encoding interface |
========================================================== |
*/ |
opj_raw_t* raw_create(void) { |
opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t)); |
return raw; |
} |
void raw_destroy(opj_raw_t *raw) { |
if(raw) { |
opj_free(raw); |
} |
} |
int raw_numbytes(opj_raw_t *raw) { |
return raw->bp - raw->start; |
} |
void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) { |
raw->start = bp; |
raw->lenmax = len; |
raw->len = 0; |
raw->c = 0; |
raw->ct = 0; |
} |
int raw_decode(opj_raw_t *raw) { |
int d; |
if (raw->ct == 0) { |
raw->ct = 8; |
if (raw->len == raw->lenmax) { |
raw->c = 0xff; |
} else { |
if (raw->c == 0xff) { |
raw->ct = 7; |
} |
raw->c = *(raw->start + raw->len); |
raw->len++; |
} |
} |
raw->ct--; |
d = (raw->c >> raw->ct) & 0x01; |
return d; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/raw.h |
---|
0,0 → 1,100 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __RAW_H |
#define __RAW_H |
/** |
@file raw.h |
@brief Implementation of operations for raw encoding (RAW) |
The functions in RAW.C have for goal to realize the operation of raw encoding linked |
with the corresponding mode switch. |
*/ |
/** @defgroup RAW RAW - Implementation of operations for raw encoding */ |
/*@{*/ |
/** |
RAW encoding operations |
*/ |
typedef struct opj_raw { |
/** temporary buffer where bits are coded or decoded */ |
unsigned char c; |
/** number of bits already read or free to write */ |
unsigned int ct; |
/** maximum length to decode */ |
unsigned int lenmax; |
/** length decoded */ |
unsigned int len; |
/** pointer to the current position in the buffer */ |
unsigned char *bp; |
/** pointer to the start of the buffer */ |
unsigned char *start; |
/** pointer to the end of the buffer */ |
unsigned char *end; |
} opj_raw_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a new RAW handle |
@return Returns a new RAW handle if successful, returns NULL otherwise |
*/ |
opj_raw_t* raw_create(void); |
/** |
Destroy a previously created RAW handle |
@param raw RAW handle to destroy |
*/ |
void raw_destroy(opj_raw_t *raw); |
/** |
Return the number of bytes written/read since initialisation |
@param raw RAW handle to destroy |
@return Returns the number of bytes already encoded |
*/ |
int raw_numbytes(opj_raw_t *raw); |
/** |
Initialize the decoder |
@param raw RAW handle |
@param bp Pointer to the start of the buffer from which the bytes will be read |
@param len Length of the input buffer |
*/ |
void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len); |
/** |
Decode a symbol using raw-decoder. Cfr p.506 TAUBMAN |
@param raw RAW handle |
@return Returns the decoded symbol (0 or 1) |
*/ |
int raw_decode(opj_raw_t *raw); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __RAW_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t1.c |
---|
0,0 → 1,1581 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
#include "t1_luts.h" |
/** @defgroup T1 T1 - Implementation of the tier-1 coding */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
static INLINE char t1_getctxno_zc(int f, int orient); |
static char t1_getctxno_sc(int f); |
static INLINE int t1_getctxno_mag(int f); |
static char t1_getspb(int f); |
static short t1_getnmsedec_sig(int x, int bitpos); |
static short t1_getnmsedec_ref(int x, int bitpos); |
static void t1_updateflags(flag_t *flagsp, int s, int stride); |
/** |
Encode significant pass |
*/ |
static void t1_enc_sigpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int bpno, |
int one, |
int *nmsedec, |
char type, |
int vsc); |
/** |
Decode significant pass |
*/ |
static INLINE void t1_dec_sigpass_step_raw( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int vsc); |
static INLINE void t1_dec_sigpass_step_mqc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf); |
static INLINE void t1_dec_sigpass_step_mqc_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int vsc); |
/** |
Encode significant pass |
*/ |
static void t1_enc_sigpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int *nmsedec, |
char type, |
int cblksty); |
/** |
Decode significant pass |
*/ |
static void t1_dec_sigpass_raw( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int cblksty); |
static void t1_dec_sigpass_mqc( |
opj_t1_t *t1, |
int bpno, |
int orient); |
static void t1_dec_sigpass_mqc_vsc( |
opj_t1_t *t1, |
int bpno, |
int orient); |
/** |
Encode refinement pass |
*/ |
static void t1_enc_refpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int bpno, |
int one, |
int *nmsedec, |
char type, |
int vsc); |
/** |
Decode refinement pass |
*/ |
static void INLINE t1_dec_refpass_step_raw( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf, |
int vsc); |
static void INLINE t1_dec_refpass_step_mqc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf); |
static void INLINE t1_dec_refpass_step_mqc_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf, |
int vsc); |
/** |
Encode refinement pass |
*/ |
static void t1_enc_refpass( |
opj_t1_t *t1, |
int bpno, |
int *nmsedec, |
char type, |
int cblksty); |
/** |
Decode refinement pass |
*/ |
static void t1_dec_refpass_raw( |
opj_t1_t *t1, |
int bpno, |
int cblksty); |
static void t1_dec_refpass_mqc( |
opj_t1_t *t1, |
int bpno); |
static void t1_dec_refpass_mqc_vsc( |
opj_t1_t *t1, |
int bpno); |
/** |
Encode clean-up pass |
*/ |
static void t1_enc_clnpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int bpno, |
int one, |
int *nmsedec, |
int partial, |
int vsc); |
/** |
Decode clean-up pass |
*/ |
static void t1_dec_clnpass_step_partial( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf); |
static void t1_dec_clnpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf); |
static void t1_dec_clnpass_step_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int partial, |
int vsc); |
/** |
Encode clean-up pass |
*/ |
static void t1_enc_clnpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int *nmsedec, |
int cblksty); |
/** |
Decode clean-up pass |
*/ |
static void t1_dec_clnpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int cblksty); |
static double t1_getwmsedec( |
int nmsedec, |
int compno, |
int level, |
int orient, |
int bpno, |
int qmfbid, |
double stepsize, |
int numcomps, |
int mct); |
/** |
Encode 1 code-block |
@param t1 T1 handle |
@param cblk Code-block coding parameters |
@param orient |
@param compno Component number |
@param level |
@param qmfbid |
@param stepsize |
@param cblksty Code-block style |
@param numcomps |
@param mct |
@param tile |
*/ |
static void t1_encode_cblk( |
opj_t1_t *t1, |
opj_tcd_cblk_enc_t* cblk, |
int orient, |
int compno, |
int level, |
int qmfbid, |
double stepsize, |
int cblksty, |
int numcomps, |
int mct, |
opj_tcd_tile_t * tile); |
/** |
Decode 1 code-block |
@param t1 T1 handle |
@param cblk Code-block coding parameters |
@param orient |
@param roishift Region of interest shifting value |
@param cblksty Code-block style |
*/ |
static void t1_decode_cblk( |
opj_t1_t *t1, |
opj_tcd_cblk_dec_t* cblk, |
int orient, |
int roishift, |
int cblksty); |
/*@}*/ |
/*@}*/ |
/* ----------------------------------------------------------------------- */ |
static char t1_getctxno_zc(int f, int orient) { |
return lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)]; |
} |
static char t1_getctxno_sc(int f) { |
return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; |
} |
static int t1_getctxno_mag(int f) { |
int tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG; |
int tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1; |
return (tmp2); |
} |
static char t1_getspb(int f) { |
return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4]; |
} |
static short t1_getnmsedec_sig(int x, int bitpos) { |
if (bitpos > T1_NMSEDEC_FRACBITS) { |
return lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; |
} |
return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; |
} |
static short t1_getnmsedec_ref(int x, int bitpos) { |
if (bitpos > T1_NMSEDEC_FRACBITS) { |
return lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)]; |
} |
return lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)]; |
} |
static void t1_updateflags(flag_t *flagsp, int s, int stride) { |
flag_t *np = flagsp - stride; |
flag_t *sp = flagsp + stride; |
static const flag_t mod[] = { |
T1_SIG_S, T1_SIG_S|T1_SGN_S, |
T1_SIG_E, T1_SIG_E|T1_SGN_E, |
T1_SIG_W, T1_SIG_W|T1_SGN_W, |
T1_SIG_N, T1_SIG_N|T1_SGN_N |
}; |
np[-1] |= T1_SIG_SE; |
np[0] |= mod[s]; |
np[1] |= T1_SIG_SW; |
flagsp[-1] |= mod[s+2]; |
flagsp[0] |= T1_SIG; |
flagsp[1] |= mod[s+4]; |
sp[-1] |= T1_SIG_NE; |
sp[0] |= mod[s+6]; |
sp[1] |= T1_SIG_NW; |
} |
static void t1_enc_sigpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int bpno, |
int one, |
int *nmsedec, |
char type, |
int vsc) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { |
v = int_abs(*datap) & one ? 1 : 0; |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); /* ESSAI */ |
if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ |
mqc_bypass_enc(mqc, v); |
} else { |
mqc_encode(mqc, v); |
} |
if (v) { |
v = *datap < 0 ? 1 : 0; |
*nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); /* ESSAI */ |
if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ |
mqc_bypass_enc(mqc, v); |
} else { |
mqc_encode(mqc, v ^ t1_getspb(flag)); |
} |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
*flagsp |= T1_VISIT; |
} |
} |
static INLINE void t1_dec_sigpass_step_raw( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int vsc) |
{ |
int v, flag; |
opj_raw_t *raw = t1->raw; /* RAW component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { |
if (raw_decode(raw)) { |
v = raw_decode(raw); /* ESSAI */ |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
*flagsp |= T1_VISIT; |
} |
} /* VSC and BYPASS by Antonin */ |
static INLINE void t1_dec_sigpass_step_mqc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = *flagsp; |
if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); |
if (mqc_decode(mqc)) { |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = mqc_decode(mqc) ^ t1_getspb(flag); |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
*flagsp |= T1_VISIT; |
} |
} /* VSC and BYPASS by Antonin */ |
static INLINE void t1_dec_sigpass_step_mqc_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int vsc) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) { |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); |
if (mqc_decode(mqc)) { |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = mqc_decode(mqc) ^ t1_getspb(flag); |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
*flagsp |= T1_VISIT; |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_enc_sigpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int *nmsedec, |
char type, |
int cblksty) |
{ |
int i, j, k, one, vsc; |
*nmsedec = 0; |
one = 1 << (bpno + T1_NMSEDEC_FRACBITS); |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_enc_sigpass_step( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
orient, |
bpno, |
one, |
nmsedec, |
type, |
vsc); |
} |
} |
} |
} |
static void t1_dec_sigpass_raw( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int cblksty) |
{ |
int i, j, k, one, half, oneplushalf, vsc; |
one = 1 << bpno; |
half = one >> 1; |
oneplushalf = one | half; |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_dec_sigpass_step_raw( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
orient, |
oneplushalf, |
vsc); |
} |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_sigpass_mqc( |
opj_t1_t *t1, |
int bpno, |
int orient) |
{ |
int i, j, k, one, half, oneplushalf; |
int *data1 = t1->data; |
flag_t *flags1 = &t1->flags[1]; |
one = 1 << bpno; |
half = one >> 1; |
oneplushalf = one | half; |
for (k = 0; k < (t1->h & ~3); k += 4) { |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
flags2 += t1->flags_stride; |
t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
} |
data1 += t1->w << 2; |
flags1 += t1->flags_stride << 2; |
} |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
for (j = k; j < t1->h; ++j) { |
flags2 += t1->flags_stride; |
t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_sigpass_mqc_vsc( |
opj_t1_t *t1, |
int bpno, |
int orient) |
{ |
int i, j, k, one, half, oneplushalf, vsc; |
one = 1 << bpno; |
half = one >> 1; |
oneplushalf = one | half; |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0; |
t1_dec_sigpass_step_mqc_vsc( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
orient, |
oneplushalf, |
vsc); |
} |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_enc_refpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int bpno, |
int one, |
int *nmsedec, |
char type, |
int vsc) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { |
*nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); |
v = int_abs(*datap) & one ? 1 : 0; |
mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ |
if (type == T1_TYPE_RAW) { /* BYPASS/LAZY MODE */ |
mqc_bypass_enc(mqc, v); |
} else { |
mqc_encode(mqc, v); |
} |
*flagsp |= T1_REFINE; |
} |
} |
static INLINE void t1_dec_refpass_step_raw( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf, |
int vsc) |
{ |
int v, t, flag; |
opj_raw_t *raw = t1->raw; /* RAW component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { |
v = raw_decode(raw); |
t = v ? poshalf : neghalf; |
*datap += *datap < 0 ? -t : t; |
*flagsp |= T1_REFINE; |
} |
} /* VSC and BYPASS by Antonin */ |
static INLINE void t1_dec_refpass_step_mqc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf) |
{ |
int v, t, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = *flagsp; |
if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { |
mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ |
v = mqc_decode(mqc); |
t = v ? poshalf : neghalf; |
*datap += *datap < 0 ? -t : t; |
*flagsp |= T1_REFINE; |
} |
} /* VSC and BYPASS by Antonin */ |
static INLINE void t1_dec_refpass_step_mqc_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int poshalf, |
int neghalf, |
int vsc) |
{ |
int v, t, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) { |
mqc_setcurctx(mqc, t1_getctxno_mag(flag)); /* ESSAI */ |
v = mqc_decode(mqc); |
t = v ? poshalf : neghalf; |
*datap += *datap < 0 ? -t : t; |
*flagsp |= T1_REFINE; |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_enc_refpass( |
opj_t1_t *t1, |
int bpno, |
int *nmsedec, |
char type, |
int cblksty) |
{ |
int i, j, k, one, vsc; |
*nmsedec = 0; |
one = 1 << (bpno + T1_NMSEDEC_FRACBITS); |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_enc_refpass_step( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
bpno, |
one, |
nmsedec, |
type, |
vsc); |
} |
} |
} |
} |
static void t1_dec_refpass_raw( |
opj_t1_t *t1, |
int bpno, |
int cblksty) |
{ |
int i, j, k, one, poshalf, neghalf; |
int vsc; |
one = 1 << bpno; |
poshalf = one >> 1; |
neghalf = bpno > 0 ? -poshalf : -1; |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_dec_refpass_step_raw( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
poshalf, |
neghalf, |
vsc); |
} |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_refpass_mqc( |
opj_t1_t *t1, |
int bpno) |
{ |
int i, j, k, one, poshalf, neghalf; |
int *data1 = t1->data; |
flag_t *flags1 = &t1->flags[1]; |
one = 1 << bpno; |
poshalf = one >> 1; |
neghalf = bpno > 0 ? -poshalf : -1; |
for (k = 0; k < (t1->h & ~3); k += 4) { |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
flags2 += t1->flags_stride; |
t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); |
data2 += t1->w; |
} |
data1 += t1->w << 2; |
flags1 += t1->flags_stride << 2; |
} |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
for (j = k; j < t1->h; ++j) { |
flags2 += t1->flags_stride; |
t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf); |
data2 += t1->w; |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_refpass_mqc_vsc( |
opj_t1_t *t1, |
int bpno) |
{ |
int i, j, k, one, poshalf, neghalf; |
int vsc; |
one = 1 << bpno; |
poshalf = one >> 1; |
neghalf = bpno > 0 ? -poshalf : -1; |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
for (j = k; j < k + 4 && j < t1->h; ++j) { |
vsc = ((j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_dec_refpass_step_mqc_vsc( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
poshalf, |
neghalf, |
vsc); |
} |
} |
} |
} /* VSC and BYPASS by Antonin */ |
static void t1_enc_clnpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int bpno, |
int one, |
int *nmsedec, |
int partial, |
int vsc) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if (partial) { |
goto LABEL_PARTIAL; |
} |
if (!(*flagsp & (T1_SIG | T1_VISIT))) { |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); |
v = int_abs(*datap) & one ? 1 : 0; |
mqc_encode(mqc, v); |
if (v) { |
LABEL_PARTIAL: |
*nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS); |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = *datap < 0 ? 1 : 0; |
mqc_encode(mqc, v ^ t1_getspb(flag)); |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
} |
*flagsp &= ~T1_VISIT; |
} |
static void t1_dec_clnpass_step_partial( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = *flagsp; |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = mqc_decode(mqc) ^ t1_getspb(flag); |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
*flagsp &= ~T1_VISIT; |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_clnpass_step( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = *flagsp; |
if (!(flag & (T1_SIG | T1_VISIT))) { |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); |
if (mqc_decode(mqc)) { |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = mqc_decode(mqc) ^ t1_getspb(flag); |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
} |
*flagsp &= ~T1_VISIT; |
} /* VSC and BYPASS by Antonin */ |
static void t1_dec_clnpass_step_vsc( |
opj_t1_t *t1, |
flag_t *flagsp, |
int *datap, |
int orient, |
int oneplushalf, |
int partial, |
int vsc) |
{ |
int v, flag; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp); |
if (partial) { |
goto LABEL_PARTIAL; |
} |
if (!(flag & (T1_SIG | T1_VISIT))) { |
mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient)); |
if (mqc_decode(mqc)) { |
LABEL_PARTIAL: |
mqc_setcurctx(mqc, t1_getctxno_sc(flag)); |
v = mqc_decode(mqc) ^ t1_getspb(flag); |
*datap = v ? -oneplushalf : oneplushalf; |
t1_updateflags(flagsp, v, t1->flags_stride); |
} |
} |
*flagsp &= ~T1_VISIT; |
} |
static void t1_enc_clnpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int *nmsedec, |
int cblksty) |
{ |
int i, j, k, one, agg, runlen, vsc; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
*nmsedec = 0; |
one = 1 << (bpno + T1_NMSEDEC_FRACBITS); |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
if (k + 3 < t1->h) { |
if (cblksty & J2K_CCP_CBLKSTY_VSC) { |
agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| (MACRO_t1_flags(1 + k + 3,1 + i) |
& (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); |
} else { |
agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); |
} |
} else { |
agg = 0; |
} |
if (agg) { |
for (runlen = 0; runlen < 4; ++runlen) { |
if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one) |
break; |
} |
mqc_setcurctx(mqc, T1_CTXNO_AGG); |
mqc_encode(mqc, runlen != 4); |
if (runlen == 4) { |
continue; |
} |
mqc_setcurctx(mqc, T1_CTXNO_UNI); |
mqc_encode(mqc, runlen >> 1); |
mqc_encode(mqc, runlen & 1); |
} else { |
runlen = 0; |
} |
for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { |
vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0; |
t1_enc_clnpass_step( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
orient, |
bpno, |
one, |
nmsedec, |
agg && (j == k + runlen), |
vsc); |
} |
} |
} |
} |
static void t1_dec_clnpass( |
opj_t1_t *t1, |
int bpno, |
int orient, |
int cblksty) |
{ |
int i, j, k, one, half, oneplushalf, agg, runlen, vsc; |
int segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
one = 1 << bpno; |
half = one >> 1; |
oneplushalf = one | half; |
if (cblksty & J2K_CCP_CBLKSTY_VSC) { |
for (k = 0; k < t1->h; k += 4) { |
for (i = 0; i < t1->w; ++i) { |
if (k + 3 < t1->h) { |
agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| (MACRO_t1_flags(1 + k + 3,1 + i) |
& (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); |
} else { |
agg = 0; |
} |
if (agg) { |
mqc_setcurctx(mqc, T1_CTXNO_AGG); |
if (!mqc_decode(mqc)) { |
continue; |
} |
mqc_setcurctx(mqc, T1_CTXNO_UNI); |
runlen = mqc_decode(mqc); |
runlen = (runlen << 1) | mqc_decode(mqc); |
} else { |
runlen = 0; |
} |
for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { |
vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0; |
t1_dec_clnpass_step_vsc( |
t1, |
&t1->flags[((j+1) * t1->flags_stride) + i + 1], |
&t1->data[(j * t1->w) + i], |
orient, |
oneplushalf, |
agg && (j == k + runlen), |
vsc); |
} |
} |
} |
} else { |
int *data1 = t1->data; |
flag_t *flags1 = &t1->flags[1]; |
for (k = 0; k < (t1->h & ~3); k += 4) { |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH) |
|| MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)); |
if (agg) { |
mqc_setcurctx(mqc, T1_CTXNO_AGG); |
if (!mqc_decode(mqc)) { |
continue; |
} |
mqc_setcurctx(mqc, T1_CTXNO_UNI); |
runlen = mqc_decode(mqc); |
runlen = (runlen << 1) | mqc_decode(mqc); |
flags2 += runlen * t1->flags_stride; |
data2 += runlen * t1->w; |
for (j = k + runlen; j < k + 4 && j < t1->h; ++j) { |
flags2 += t1->flags_stride; |
if (agg && (j == k + runlen)) { |
t1_dec_clnpass_step_partial(t1, flags2, data2, orient, oneplushalf); |
} else { |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
} |
data2 += t1->w; |
} |
} else { |
flags2 += t1->flags_stride; |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
flags2 += t1->flags_stride; |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
} |
} |
data1 += t1->w << 2; |
flags1 += t1->flags_stride << 2; |
} |
for (i = 0; i < t1->w; ++i) { |
int *data2 = data1 + i; |
flag_t *flags2 = flags1 + i; |
for (j = k; j < t1->h; ++j) { |
flags2 += t1->flags_stride; |
t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf); |
data2 += t1->w; |
} |
} |
} |
if (segsym) { |
int v = 0; |
mqc_setcurctx(mqc, T1_CTXNO_UNI); |
v = mqc_decode(mqc); |
v = (v << 1) | mqc_decode(mqc); |
v = (v << 1) | mqc_decode(mqc); |
v = (v << 1) | mqc_decode(mqc); |
/* |
if (v!=0xa) { |
opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); |
} |
*/ |
} |
} /* VSC and BYPASS by Antonin */ |
/** mod fixed_quality */ |
static double t1_getwmsedec( |
int nmsedec, |
int compno, |
int level, |
int orient, |
int bpno, |
int qmfbid, |
double stepsize, |
int numcomps, |
int mct) |
{ |
double w1, w2, wmsedec; |
if (qmfbid == 1) { |
w1 = (mct && numcomps==3) ? mct_getnorm(compno) : 1.0; |
w2 = dwt_getnorm(level, orient); |
} else { /* if (qmfbid == 0) */ |
w1 = (mct && numcomps==3) ? mct_getnorm_real(compno) : 1.0; |
w2 = dwt_getnorm_real(level, orient); |
} |
wmsedec = w1 * w2 * stepsize * (1 << bpno); |
wmsedec *= wmsedec * nmsedec / 8192.0; |
return wmsedec; |
} |
static bool allocate_buffers( |
opj_t1_t *t1, |
int w, |
int h) |
{ |
int datasize=w * h; |
int flagssize; |
if(datasize > t1->datasize){ |
opj_aligned_free(t1->data); |
t1->data = (int*) opj_aligned_malloc(datasize * sizeof(int)); |
if(!t1->data){ |
return false; |
} |
t1->datasize=datasize; |
} |
memset(t1->data,0,datasize * sizeof(int)); |
t1->flags_stride=w+2; |
flagssize=t1->flags_stride * (h+2); |
if(flagssize > t1->flagssize){ |
opj_aligned_free(t1->flags); |
t1->flags = (flag_t*) opj_aligned_malloc(flagssize * sizeof(flag_t)); |
if(!t1->flags){ |
return false; |
} |
t1->flagssize=flagssize; |
} |
memset(t1->flags,0,flagssize * sizeof(flag_t)); |
t1->w=w; |
t1->h=h; |
return true; |
} |
/** mod fixed_quality */ |
static void t1_encode_cblk( |
opj_t1_t *t1, |
opj_tcd_cblk_enc_t* cblk, |
int orient, |
int compno, |
int level, |
int qmfbid, |
double stepsize, |
int cblksty, |
int numcomps, |
int mct, |
opj_tcd_tile_t * tile) |
{ |
double cumwmsedec = 0.0; |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
int passno, bpno, passtype; |
int nmsedec = 0; |
int i, max; |
char type = T1_TYPE_MQ; |
double tempwmsedec; |
max = 0; |
for (i = 0; i < t1->w * t1->h; ++i) { |
int tmp = abs(t1->data[i]); |
max = int_max(max, tmp); |
} |
cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0; |
bpno = cblk->numbps - 1; |
passtype = 2; |
mqc_resetstates(mqc); |
mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); |
mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); |
mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); |
mqc_init_enc(mqc, cblk->data); |
for (passno = 0; bpno >= 0; ++passno) { |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
int correction = 3; |
type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; |
switch (passtype) { |
case 0: |
t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty); |
break; |
case 1: |
t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty); |
break; |
case 2: |
t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty); |
/* code switch SEGMARK (i.e. SEGSYM) */ |
if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) |
mqc_segmark_enc(mqc); |
break; |
} |
/* fixed_quality */ |
tempwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps, mct); |
cumwmsedec += tempwmsedec; |
tile->distotile += tempwmsedec; |
/* Code switch "RESTART" (i.e. TERMALL) */ |
if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) { |
if (type == T1_TYPE_RAW) { |
mqc_flush(mqc); |
correction = 1; |
/* correction = mqc_bypass_flush_enc(); */ |
} else { /* correction = mqc_restart_enc(); */ |
mqc_flush(mqc); |
correction = 1; |
} |
pass->term = 1; |
} else { |
if (((bpno < (cblk->numbps - 4) && (passtype > 0)) |
|| ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) { |
if (type == T1_TYPE_RAW) { |
mqc_flush(mqc); |
correction = 1; |
/* correction = mqc_bypass_flush_enc(); */ |
} else { /* correction = mqc_restart_enc(); */ |
mqc_flush(mqc); |
correction = 1; |
} |
pass->term = 1; |
} else { |
pass->term = 0; |
} |
} |
if (++passtype == 3) { |
passtype = 0; |
bpno--; |
} |
if (pass->term && bpno > 0) { |
type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; |
if (type == T1_TYPE_RAW) |
mqc_bypass_init_enc(mqc); |
else |
mqc_restart_init_enc(mqc); |
} |
pass->distortiondec = cumwmsedec; |
pass->rate = mqc_numbytes(mqc) + correction; /* FIXME */ |
/* Code-switch "RESET" */ |
if (cblksty & J2K_CCP_CBLKSTY_RESET) |
mqc_reset_enc(mqc); |
} |
/* Code switch "ERTERM" (i.e. PTERM) */ |
if (cblksty & J2K_CCP_CBLKSTY_PTERM) |
mqc_erterm_enc(mqc); |
else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY)) |
mqc_flush(mqc); |
cblk->totalpasses = passno; |
for (passno = 0; passno<cblk->totalpasses; passno++) { |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
if (pass->rate > mqc_numbytes(mqc)) |
pass->rate = mqc_numbytes(mqc); |
/*Preventing generation of FF as last data byte of a pass*/ |
if((pass->rate>1) && (cblk->data[pass->rate - 1] == 0xFF)){ |
pass->rate--; |
} |
pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate); |
} |
} |
static void t1_decode_cblk( |
opj_t1_t *t1, |
opj_tcd_cblk_dec_t* cblk, |
int orient, |
int roishift, |
int cblksty) |
{ |
opj_raw_t *raw = t1->raw; /* RAW component */ |
opj_mqc_t *mqc = t1->mqc; /* MQC component */ |
int bpno, passtype; |
int segno, passno; |
char type = T1_TYPE_MQ; /* BYPASS mode */ |
if(!allocate_buffers( |
t1, |
cblk->x1 - cblk->x0, |
cblk->y1 - cblk->y0)) |
{ |
return; |
} |
bpno = roishift + cblk->numbps - 1; |
passtype = 2; |
mqc_resetstates(mqc); |
mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); |
mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); |
mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); |
for (segno = 0; segno < cblk->numsegs; ++segno) { |
opj_tcd_seg_t *seg = &cblk->segs[segno]; |
/* BYPASS mode */ |
type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; |
/* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */ |
if(seg->data == NULL){ |
continue; |
} |
if (type == T1_TYPE_RAW) { |
raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len); |
} else { |
mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len); |
} |
for (passno = 0; passno < seg->numpasses; ++passno) { |
switch (passtype) { |
case 0: |
if (type == T1_TYPE_RAW) { |
t1_dec_sigpass_raw(t1, bpno+1, orient, cblksty); |
} else { |
if (cblksty & J2K_CCP_CBLKSTY_VSC) { |
t1_dec_sigpass_mqc_vsc(t1, bpno+1, orient); |
} else { |
t1_dec_sigpass_mqc(t1, bpno+1, orient); |
} |
} |
break; |
case 1: |
if (type == T1_TYPE_RAW) { |
t1_dec_refpass_raw(t1, bpno+1, cblksty); |
} else { |
if (cblksty & J2K_CCP_CBLKSTY_VSC) { |
t1_dec_refpass_mqc_vsc(t1, bpno+1); |
} else { |
t1_dec_refpass_mqc(t1, bpno+1); |
} |
} |
break; |
case 2: |
t1_dec_clnpass(t1, bpno+1, orient, cblksty); |
break; |
} |
if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) { |
mqc_resetstates(mqc); |
mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46); |
mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3); |
mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4); |
} |
if (++passtype == 3) { |
passtype = 0; |
bpno--; |
} |
} |
} |
} |
/* ----------------------------------------------------------------------- */ |
opj_t1_t* t1_create(opj_common_ptr cinfo) { |
opj_t1_t *t1 = (opj_t1_t*) opj_malloc(sizeof(opj_t1_t)); |
if(!t1) |
return NULL; |
t1->cinfo = cinfo; |
/* create MQC and RAW handles */ |
t1->mqc = mqc_create(); |
t1->raw = raw_create(); |
t1->data=NULL; |
t1->flags=NULL; |
t1->datasize=0; |
t1->flagssize=0; |
return t1; |
} |
void t1_destroy(opj_t1_t *t1) { |
if(t1) { |
/* destroy MQC and RAW handles */ |
mqc_destroy(t1->mqc); |
raw_destroy(t1->raw); |
opj_aligned_free(t1->data); |
opj_aligned_free(t1->flags); |
opj_free(t1); |
} |
} |
void t1_encode_cblks( |
opj_t1_t *t1, |
opj_tcd_tile_t *tile, |
opj_tcp_t *tcp) |
{ |
int compno, resno, bandno, precno, cblkno; |
tile->distotile = 0; /* fixed_quality */ |
for (compno = 0; compno < tile->numcomps; ++compno) { |
opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; |
opj_tccp_t* tccp = &tcp->tccps[compno]; |
int tile_w = tilec->x1 - tilec->x0; |
for (resno = 0; resno < tilec->numresolutions; ++resno) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; ++bandno) { |
opj_tcd_band_t* restrict band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; ++precno) { |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) { |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
int* restrict datap; |
int* restrict tiledp; |
int cblk_w; |
int cblk_h; |
int i, j; |
int x = cblk->x0 - band->x0; |
int y = cblk->y0 - band->y0; |
if (band->bandno & 1) { |
opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; |
x += pres->x1 - pres->x0; |
} |
if (band->bandno & 2) { |
opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1]; |
y += pres->y1 - pres->y0; |
} |
if(!allocate_buffers( |
t1, |
cblk->x1 - cblk->x0, |
cblk->y1 - cblk->y0)) |
{ |
return; |
} |
datap=t1->data; |
cblk_w = t1->w; |
cblk_h = t1->h; |
tiledp=&tilec->data[(y * tile_w) + x]; |
if (tccp->qmfbid == 1) { |
for (j = 0; j < cblk_h; ++j) { |
for (i = 0; i < cblk_w; ++i) { |
int tmp = tiledp[(j * tile_w) + i]; |
datap[(j * cblk_w) + i] = tmp << T1_NMSEDEC_FRACBITS; |
} |
} |
} else { /* if (tccp->qmfbid == 0) */ |
for (j = 0; j < cblk_h; ++j) { |
for (i = 0; i < cblk_w; ++i) { |
int tmp = tiledp[(j * tile_w) + i]; |
datap[(j * cblk_w) + i] = |
fix_mul( |
tmp, |
8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (11 - T1_NMSEDEC_FRACBITS); |
} |
} |
} |
t1_encode_cblk( |
t1, |
cblk, |
band->bandno, |
compno, |
tilec->numresolutions - 1 - resno, |
tccp->qmfbid, |
band->stepsize, |
tccp->cblksty, |
tile->numcomps, |
tcp->mct, |
tile); |
} /* cblkno */ |
} /* precno */ |
} /* bandno */ |
} /* resno */ |
} /* compno */ |
} |
void t1_decode_cblks( |
opj_t1_t* t1, |
opj_tcd_tilecomp_t* tilec, |
opj_tccp_t* tccp) |
{ |
int resno, bandno, precno, cblkno; |
int tile_w = tilec->x1 - tilec->x0; |
for (resno = 0; resno < tilec->numresolutions; ++resno) { |
opj_tcd_resolution_t* res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; ++bandno) { |
opj_tcd_band_t* restrict band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; ++precno) { |
opj_tcd_precinct_t* precinct = &band->precincts[precno]; |
for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) { |
opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno]; |
int* restrict datap; |
int cblk_w, cblk_h; |
int x, y; |
int i, j; |
t1_decode_cblk( |
t1, |
cblk, |
band->bandno, |
tccp->roishift, |
tccp->cblksty); |
x = cblk->x0 - band->x0; |
y = cblk->y0 - band->y0; |
if (band->bandno & 1) { |
opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1]; |
x += pres->x1 - pres->x0; |
} |
if (band->bandno & 2) { |
opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1]; |
y += pres->y1 - pres->y0; |
} |
datap=t1->data; |
cblk_w = t1->w; |
cblk_h = t1->h; |
if (tccp->roishift) { |
int thresh = 1 << tccp->roishift; |
for (j = 0; j < cblk_h; ++j) { |
for (i = 0; i < cblk_w; ++i) { |
int val = datap[(j * cblk_w) + i]; |
int mag = abs(val); |
if (mag >= thresh) { |
mag >>= tccp->roishift; |
datap[(j * cblk_w) + i] = val < 0 ? -mag : mag; |
} |
} |
} |
} |
if (tccp->qmfbid == 1) { |
int* restrict tiledp = &tilec->data[(y * tile_w) + x]; |
for (j = 0; j < cblk_h; ++j) { |
for (i = 0; i < cblk_w; ++i) { |
int tmp = datap[(j * cblk_w) + i]; |
((int*)tiledp)[(j * tile_w) + i] = tmp / 2; |
} |
} |
} else { /* if (tccp->qmfbid == 0) */ |
float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x]; |
for (j = 0; j < cblk_h; ++j) { |
float* restrict tiledp2 = tiledp; |
for (i = 0; i < cblk_w; ++i) { |
float tmp = *datap * band->stepsize; |
*tiledp2 = tmp; |
datap++; |
tiledp2++; |
} |
tiledp += tile_w; |
} |
} |
opj_free(cblk->data); |
opj_free(cblk->segs); |
} /* cblkno */ |
opj_free(precinct->cblks.dec); |
} /* precno */ |
} /* bandno */ |
} /* resno */ |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t1.h |
---|
0,0 → 1,147 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __T1_H |
#define __T1_H |
/** |
@file t1.h |
@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1) |
The functions in T1.C have for goal to realize the tier-1 coding operation. The functions |
in T1.C are used by some function in TCD.C. |
*/ |
/** @defgroup T1 T1 - Implementation of the tier-1 coding */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
#define T1_NMSEDEC_BITS 7 |
#define T1_SIG_NE 0x0001 /**< Context orientation : North-East direction */ |
#define T1_SIG_SE 0x0002 /**< Context orientation : South-East direction */ |
#define T1_SIG_SW 0x0004 /**< Context orientation : South-West direction */ |
#define T1_SIG_NW 0x0008 /**< Context orientation : North-West direction */ |
#define T1_SIG_N 0x0010 /**< Context orientation : North direction */ |
#define T1_SIG_E 0x0020 /**< Context orientation : East direction */ |
#define T1_SIG_S 0x0040 /**< Context orientation : South direction */ |
#define T1_SIG_W 0x0080 /**< Context orientation : West direction */ |
#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW) |
#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W) |
#define T1_SGN_N 0x0100 |
#define T1_SGN_E 0x0200 |
#define T1_SGN_S 0x0400 |
#define T1_SGN_W 0x0800 |
#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W) |
#define T1_SIG 0x1000 |
#define T1_REFINE 0x2000 |
#define T1_VISIT 0x4000 |
#define T1_NUMCTXS_ZC 9 |
#define T1_NUMCTXS_SC 5 |
#define T1_NUMCTXS_MAG 3 |
#define T1_NUMCTXS_AGG 1 |
#define T1_NUMCTXS_UNI 1 |
#define T1_CTXNO_ZC 0 |
#define T1_CTXNO_SC (T1_CTXNO_ZC+T1_NUMCTXS_ZC) |
#define T1_CTXNO_MAG (T1_CTXNO_SC+T1_NUMCTXS_SC) |
#define T1_CTXNO_AGG (T1_CTXNO_MAG+T1_NUMCTXS_MAG) |
#define T1_CTXNO_UNI (T1_CTXNO_AGG+T1_NUMCTXS_AGG) |
#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI) |
#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1) |
#define T1_TYPE_MQ 0 /**< Normal coding using entropy coder */ |
#define T1_TYPE_RAW 1 /**< No encoding the information is store under raw format in codestream (mode switch RAW)*/ |
/* ----------------------------------------------------------------------- */ |
typedef short flag_t; |
/** |
Tier-1 coding (coding of code-block coefficients) |
*/ |
typedef struct opj_t1 { |
/** codec context */ |
opj_common_ptr cinfo; |
/** MQC component */ |
opj_mqc_t *mqc; |
/** RAW component */ |
opj_raw_t *raw; |
int *data; |
flag_t *flags; |
int w; |
int h; |
int datasize; |
int flagssize; |
int flags_stride; |
} opj_t1_t; |
#define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)] |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a new T1 handle |
and initialize the look-up tables of the Tier-1 coder/decoder |
@return Returns a new T1 handle if successful, returns NULL otherwise |
@see t1_init_luts |
*/ |
opj_t1_t* t1_create(opj_common_ptr cinfo); |
/** |
Destroy a previously created T1 handle |
@param t1 T1 handle to destroy |
*/ |
void t1_destroy(opj_t1_t *t1); |
/** |
Encode the code-blocks of a tile |
@param t1 T1 handle |
@param tile The tile to encode |
@param tcp Tile coding parameters |
*/ |
void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp); |
/** |
Decode the code-blocks of a tile |
@param t1 T1 handle |
@param tilec The tile to decode |
@param tccp Tile coding parameters |
*/ |
void t1_decode_cblks(opj_t1_t* t1, opj_tcd_tilecomp_t* tilec, opj_tccp_t* tccp); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __T1_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t1_generate_luts.c |
---|
0,0 → 1,275 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
#include <math.h> |
static int t1_init_ctxno_zc(int f, int orient) { |
int h, v, d, n, t, hv; |
n = 0; |
h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0); |
v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0); |
d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0); |
switch (orient) { |
case 2: |
t = h; |
h = v; |
v = t; |
case 0: |
case 1: |
if (!h) { |
if (!v) { |
if (!d) |
n = 0; |
else if (d == 1) |
n = 1; |
else |
n = 2; |
} else if (v == 1) { |
n = 3; |
} else { |
n = 4; |
} |
} else if (h == 1) { |
if (!v) { |
if (!d) |
n = 5; |
else |
n = 6; |
} else { |
n = 7; |
} |
} else |
n = 8; |
break; |
case 3: |
hv = h + v; |
if (!d) { |
if (!hv) { |
n = 0; |
} else if (hv == 1) { |
n = 1; |
} else { |
n = 2; |
} |
} else if (d == 1) { |
if (!hv) { |
n = 3; |
} else if (hv == 1) { |
n = 4; |
} else { |
n = 5; |
} |
} else if (d == 2) { |
if (!hv) { |
n = 6; |
} else { |
n = 7; |
} |
} else { |
n = 8; |
} |
break; |
} |
return (T1_CTXNO_ZC + n); |
} |
static int t1_init_ctxno_sc(int f) { |
int hc, vc, n; |
n = 0; |
hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == |
T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), |
1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == |
(T1_SIG_E | T1_SGN_E)) + |
((f & (T1_SIG_W | T1_SGN_W)) == |
(T1_SIG_W | T1_SGN_W)), 1); |
vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == |
T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), |
1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == |
(T1_SIG_N | T1_SGN_N)) + |
((f & (T1_SIG_S | T1_SGN_S)) == |
(T1_SIG_S | T1_SGN_S)), 1); |
if (hc < 0) { |
hc = -hc; |
vc = -vc; |
} |
if (!hc) { |
if (vc == -1) |
n = 1; |
else if (!vc) |
n = 0; |
else |
n = 1; |
} else if (hc == 1) { |
if (vc == -1) |
n = 2; |
else if (!vc) |
n = 3; |
else |
n = 4; |
} |
return (T1_CTXNO_SC + n); |
} |
static int t1_init_spb(int f) { |
int hc, vc, n; |
hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) == |
T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W), |
1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) == |
(T1_SIG_E | T1_SGN_E)) + |
((f & (T1_SIG_W | T1_SGN_W)) == |
(T1_SIG_W | T1_SGN_W)), 1); |
vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) == |
T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S), |
1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) == |
(T1_SIG_N | T1_SGN_N)) + |
((f & (T1_SIG_S | T1_SGN_S)) == |
(T1_SIG_S | T1_SGN_S)), 1); |
if (!hc && !vc) |
n = 0; |
else |
n = (!(hc > 0 || (!hc && vc > 0))); |
return n; |
} |
void dump_array16(int array[],int size){ |
int i; |
--size; |
for (i = 0; i < size; ++i) { |
printf("0x%04x, ", array[i]); |
if(!((i+1)&0x7)) |
printf("\n "); |
} |
printf("0x%04x\n};\n\n", array[size]); |
} |
int main(){ |
int i, j; |
double u, v, t; |
int lut_ctxno_zc[1024]; |
int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS]; |
int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS]; |
int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS]; |
int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS]; |
printf("/* This file was automatically generated by t1_generate_luts.c */\n\n"); |
// lut_ctxno_zc |
for (j = 0; j < 4; ++j) { |
for (i = 0; i < 256; ++i) { |
int orient = j; |
if (orient == 2) { |
orient = 1; |
} else if (orient == 1) { |
orient = 2; |
} |
lut_ctxno_zc[(orient << 8) | i] = t1_init_ctxno_zc(i, j); |
} |
} |
printf("static char lut_ctxno_zc[1024] = {\n "); |
for (i = 0; i < 1023; ++i) { |
printf("%i, ", lut_ctxno_zc[i]); |
if(!((i+1)&0x1f)) |
printf("\n "); |
} |
printf("%i\n};\n\n", lut_ctxno_zc[1023]); |
// lut_ctxno_sc |
printf("static char lut_ctxno_sc[256] = {\n "); |
for (i = 0; i < 255; ++i) { |
printf("0x%x, ", t1_init_ctxno_sc(i << 4)); |
if(!((i+1)&0xf)) |
printf("\n "); |
} |
printf("0x%x\n};\n\n", t1_init_ctxno_sc(255 << 4)); |
// lut_spb |
printf("static char lut_spb[256] = {\n "); |
for (i = 0; i < 255; ++i) { |
printf("%i, ", t1_init_spb(i << 4)); |
if(!((i+1)&0x1f)) |
printf("\n "); |
} |
printf("%i\n};\n\n", t1_init_spb(255 << 4)); |
/* FIXME FIXME FIXME */ |
/* fprintf(stdout,"nmsedec luts:\n"); */ |
for (i = 0; i < (1 << T1_NMSEDEC_BITS); ++i) { |
t = i / pow(2, T1_NMSEDEC_FRACBITS); |
u = t; |
v = t - 1.5; |
lut_nmsedec_sig[i] = |
int_max(0, |
(int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); |
lut_nmsedec_sig0[i] = |
int_max(0, |
(int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); |
u = t - 1.0; |
if (i & (1 << (T1_NMSEDEC_BITS - 1))) { |
v = t - 1.5; |
} else { |
v = t - 0.5; |
} |
lut_nmsedec_ref[i] = |
int_max(0, |
(int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); |
lut_nmsedec_ref0[i] = |
int_max(0, |
(int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0)); |
} |
printf("static short lut_nmsedec_sig[1 << T1_NMSEDEC_BITS] = {\n "); |
dump_array16(lut_nmsedec_sig, 1 << T1_NMSEDEC_BITS); |
printf("static short lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS] = {\n "); |
dump_array16(lut_nmsedec_sig0, 1 << T1_NMSEDEC_BITS); |
printf("static short lut_nmsedec_ref[1 << T1_NMSEDEC_BITS] = {\n "); |
dump_array16(lut_nmsedec_ref, 1 << T1_NMSEDEC_BITS); |
printf("static short lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS] = {\n "); |
dump_array16(lut_nmsedec_ref0, 1 << T1_NMSEDEC_BITS); |
return 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t1_luts.h |
---|
0,0 → 1,143 |
/* This file was automatically generated by t1_generate_luts.c */ |
static char lut_ctxno_zc[1024] = { |
0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, |
5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, |
5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, |
0, 3, 3, 6, 3, 6, 6, 8, 3, 6, 6, 8, 6, 8, 8, 8, 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, |
1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, |
2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8 |
}; |
static char lut_ctxno_sc[256] = { |
0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd, |
0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc, |
0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa, |
0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9, |
0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc, |
0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb, |
0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9, |
0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa, |
0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa, |
0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9, |
0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb, |
0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc, |
0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9, |
0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa, |
0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc, |
0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd |
}; |
static char lut_spb[256] = { |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, |
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, |
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, |
0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, |
0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 |
}; |
static short lut_nmsedec_sig[1 << T1_NMSEDEC_BITS] = { |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0180, 0x0300, 0x0480, 0x0600, 0x0780, 0x0900, 0x0a80, |
0x0c00, 0x0d80, 0x0f00, 0x1080, 0x1200, 0x1380, 0x1500, 0x1680, |
0x1800, 0x1980, 0x1b00, 0x1c80, 0x1e00, 0x1f80, 0x2100, 0x2280, |
0x2400, 0x2580, 0x2700, 0x2880, 0x2a00, 0x2b80, 0x2d00, 0x2e80, |
0x3000, 0x3180, 0x3300, 0x3480, 0x3600, 0x3780, 0x3900, 0x3a80, |
0x3c00, 0x3d80, 0x3f00, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680, |
0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5100, 0x5280, |
0x5400, 0x5580, 0x5700, 0x5880, 0x5a00, 0x5b80, 0x5d00, 0x5e80, |
0x6000, 0x6180, 0x6300, 0x6480, 0x6600, 0x6780, 0x6900, 0x6a80, |
0x6c00, 0x6d80, 0x6f00, 0x7080, 0x7200, 0x7380, 0x7500, 0x7680 |
}; |
static short lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS] = { |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080, |
0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200, |
0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400, |
0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, |
0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00, |
0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180, |
0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780, |
0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00, |
0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2680, 0x2780, |
0x2880, 0x2980, 0x2b00, 0x2c00, 0x2d00, 0x2e80, 0x2f80, 0x3100, |
0x3200, 0x3380, 0x3480, 0x3600, 0x3700, 0x3880, 0x3a00, 0x3b00, |
0x3c80, 0x3e00, 0x3f80, 0x4080, 0x4200, 0x4380, 0x4500, 0x4680, |
0x4800, 0x4980, 0x4b00, 0x4c80, 0x4e00, 0x4f80, 0x5180, 0x5300, |
0x5480, 0x5600, 0x5800, 0x5980, 0x5b00, 0x5d00, 0x5e80, 0x6080, |
0x6200, 0x6400, 0x6580, 0x6780, 0x6900, 0x6b00, 0x6d00, 0x6e80, |
0x7080, 0x7280, 0x7480, 0x7600, 0x7800, 0x7a00, 0x7c00, 0x7e00 |
}; |
static short lut_nmsedec_ref[1 << T1_NMSEDEC_BITS] = { |
0x1800, 0x1780, 0x1700, 0x1680, 0x1600, 0x1580, 0x1500, 0x1480, |
0x1400, 0x1380, 0x1300, 0x1280, 0x1200, 0x1180, 0x1100, 0x1080, |
0x1000, 0x0f80, 0x0f00, 0x0e80, 0x0e00, 0x0d80, 0x0d00, 0x0c80, |
0x0c00, 0x0b80, 0x0b00, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880, |
0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0500, 0x0480, |
0x0400, 0x0380, 0x0300, 0x0280, 0x0200, 0x0180, 0x0100, 0x0080, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0080, 0x0100, 0x0180, 0x0200, 0x0280, 0x0300, 0x0380, |
0x0400, 0x0480, 0x0500, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, |
0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b00, 0x0b80, |
0x0c00, 0x0c80, 0x0d00, 0x0d80, 0x0e00, 0x0e80, 0x0f00, 0x0f80, |
0x1000, 0x1080, 0x1100, 0x1180, 0x1200, 0x1280, 0x1300, 0x1380, |
0x1400, 0x1480, 0x1500, 0x1580, 0x1600, 0x1680, 0x1700, 0x1780 |
}; |
static short lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS] = { |
0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x1b00, 0x1a80, 0x1980, |
0x1880, 0x1780, 0x1700, 0x1600, 0x1500, 0x1480, 0x1380, 0x1300, |
0x1200, 0x1180, 0x1080, 0x1000, 0x0f00, 0x0e80, 0x0e00, 0x0d00, |
0x0c80, 0x0c00, 0x0b80, 0x0a80, 0x0a00, 0x0980, 0x0900, 0x0880, |
0x0800, 0x0780, 0x0700, 0x0680, 0x0600, 0x0580, 0x0580, 0x0500, |
0x0480, 0x0400, 0x0400, 0x0380, 0x0300, 0x0300, 0x0280, 0x0280, |
0x0200, 0x0200, 0x0180, 0x0180, 0x0100, 0x0100, 0x0100, 0x0080, |
0x0080, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080, |
0x0080, 0x0080, 0x0100, 0x0100, 0x0100, 0x0180, 0x0180, 0x0200, |
0x0200, 0x0280, 0x0280, 0x0300, 0x0300, 0x0380, 0x0400, 0x0400, |
0x0480, 0x0500, 0x0580, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, |
0x0800, 0x0880, 0x0900, 0x0980, 0x0a00, 0x0a80, 0x0b80, 0x0c00, |
0x0c80, 0x0d00, 0x0e00, 0x0e80, 0x0f00, 0x1000, 0x1080, 0x1180, |
0x1200, 0x1300, 0x1380, 0x1480, 0x1500, 0x1600, 0x1700, 0x1780, |
0x1880, 0x1980, 0x1a80, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00 |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t2.c |
---|
0,0 → 1,791 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/** @defgroup T2 T2 - Implementation of a tier-2 coding */ |
/*@{*/ |
/** @name Local static functions */ |
/*@{*/ |
static void t2_putcommacode(opj_bio_t *bio, int n); |
static int t2_getcommacode(opj_bio_t *bio); |
/** |
Variable length code for signalling delta Zil (truncation point) |
@param bio Bit Input/Output component |
@param n delta Zil |
*/ |
static void t2_putnumpasses(opj_bio_t *bio, int n); |
static int t2_getnumpasses(opj_bio_t *bio); |
/** |
Encode a packet of a tile to a destination buffer |
@param tile Tile for which to write the packets |
@param tcp Tile coding parameters |
@param pi Packet identity |
@param dest Destination buffer |
@param len Length of the destination buffer |
@param cstr_info Codestream information structure |
@param tileno Number of the tile encoded |
@return |
*/ |
static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_codestream_info_t *cstr_info, int tileno); |
/** |
@param cblk |
@param index |
@param cblksty |
@param first |
*/ |
static void t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first); |
/** |
Decode a packet of a tile from a source buffer |
@param t2 T2 handle |
@param src Source buffer |
@param len Length of the source buffer |
@param tile Tile for which to write the packets |
@param tcp Tile coding parameters |
@param pi Packet identity |
@param pack_info Packet information |
@return |
*/ |
static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, |
opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info); |
/*@}*/ |
/*@}*/ |
/* ----------------------------------------------------------------------- */ |
/* #define RESTART 0x04 */ |
static void t2_putcommacode(opj_bio_t *bio, int n) { |
while (--n >= 0) { |
bio_write(bio, 1, 1); |
} |
bio_write(bio, 0, 1); |
} |
static int t2_getcommacode(opj_bio_t *bio) { |
int n; |
for (n = 0; bio_read(bio, 1); n++) { |
; |
} |
return n; |
} |
static void t2_putnumpasses(opj_bio_t *bio, int n) { |
if (n == 1) { |
bio_write(bio, 0, 1); |
} else if (n == 2) { |
bio_write(bio, 2, 2); |
} else if (n <= 5) { |
bio_write(bio, 0xc | (n - 3), 4); |
} else if (n <= 36) { |
bio_write(bio, 0x1e0 | (n - 6), 9); |
} else if (n <= 164) { |
bio_write(bio, 0xff80 | (n - 37), 16); |
} |
} |
static int t2_getnumpasses(opj_bio_t *bio) { |
int n; |
if (!bio_read(bio, 1)) |
return 1; |
if (!bio_read(bio, 1)) |
return 2; |
if ((n = bio_read(bio, 2)) != 3) |
return (3 + n); |
if ((n = bio_read(bio, 5)) != 31) |
return (6 + n); |
return (37 + bio_read(bio, 7)); |
} |
static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_codestream_info_t *cstr_info, int tileno) { |
int bandno, cblkno; |
unsigned char *c = dest; |
int compno = pi->compno; /* component value */ |
int resno = pi->resno; /* resolution level value */ |
int precno = pi->precno; /* precinct value */ |
int layno = pi->layno; /* quality layer value */ |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
opj_bio_t *bio = NULL; /* BIO component */ |
/* <SOP 0xff91> */ |
if (tcp->csty & J2K_CP_CSTY_SOP) { |
c[0] = 255; |
c[1] = 145; |
c[2] = 0; |
c[3] = 4; |
c[4] = (tile->packno % 65536) / 256; |
c[5] = (tile->packno % 65536) % 256; |
c += 6; |
} |
/* </SOP> */ |
if (!layno) { |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
tgt_reset(prc->incltree); |
tgt_reset(prc->imsbtree); |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
cblk->numpasses = 0; |
tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps); |
} |
} |
} |
bio = bio_create(); |
bio_init_enc(bio, c, length); |
bio_write(bio, 1, 1); /* Empty header bit */ |
/* Writing Packet header */ |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
opj_tcd_layer_t *layer = &cblk->layers[layno]; |
if (!cblk->numpasses && layer->numpasses) { |
tgt_setvalue(prc->incltree, cblkno, layno); |
} |
} |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
opj_tcd_layer_t *layer = &cblk->layers[layno]; |
int increment = 0; |
int nump = 0; |
int len = 0, passno; |
/* cblk inclusion bits */ |
if (!cblk->numpasses) { |
tgt_encode(bio, prc->incltree, cblkno, layno + 1); |
} else { |
bio_write(bio, layer->numpasses != 0, 1); |
} |
/* if cblk not included, go to the next cblk */ |
if (!layer->numpasses) { |
continue; |
} |
/* if first instance of cblk --> zero bit-planes information */ |
if (!cblk->numpasses) { |
cblk->numlenbits = 3; |
tgt_encode(bio, prc->imsbtree, cblkno, 999); |
} |
/* number of coding passes included */ |
t2_putnumpasses(bio, layer->numpasses); |
/* computation of the increase of the length indicator and insertion in the header */ |
for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
nump++; |
len += pass->len; |
if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { |
increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); |
len = 0; |
nump = 0; |
} |
} |
t2_putcommacode(bio, increment); |
/* computation of the new Length indicator */ |
cblk->numlenbits += increment; |
/* insertion of the codeword segment length */ |
for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
nump++; |
len += pass->len; |
if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { |
bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); |
len = 0; |
nump = 0; |
} |
} |
} |
} |
if (bio_flush(bio)) { |
bio_destroy(bio); |
return -999; /* modified to eliminate longjmp !! */ |
} |
c += bio_numbytes(bio); |
bio_destroy(bio); |
/* <EPH 0xff92> */ |
if (tcp->csty & J2K_CP_CSTY_EPH) { |
c[0] = 255; |
c[1] = 146; |
c += 2; |
} |
/* </EPH> */ |
/* << INDEX */ |
// End of packet header position. Currently only represents the distance to start of packet |
// Will be updated later by incrementing with packet start value |
if(cstr_info && cstr_info->index_write) { |
opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; |
info_PK->end_ph_pos = (int)(c - dest); |
} |
/* INDEX >> */ |
/* Writing the packet body */ |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
opj_tcd_layer_t *layer = &cblk->layers[layno]; |
if (!layer->numpasses) { |
continue; |
} |
if (c + layer->len > dest + length) { |
return -999; |
} |
memcpy(c, layer->data, layer->len); |
cblk->numpasses += layer->numpasses; |
c += layer->len; |
/* << INDEX */ |
if(cstr_info && cstr_info->index_write) { |
opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; |
info_PK->disto += layer->disto; |
if (cstr_info->D_max < info_PK->disto) { |
cstr_info->D_max = info_PK->disto; |
} |
} |
/* INDEX >> */ |
} |
} |
return (c - dest); |
} |
static void t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first) { |
opj_tcd_seg_t* seg; |
cblk->segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs, (index + 1) * sizeof(opj_tcd_seg_t)); |
seg = &cblk->segs[index]; |
seg->data = NULL; |
seg->dataindex = 0; |
seg->numpasses = 0; |
seg->len = 0; |
if (cblksty & J2K_CCP_CBLKSTY_TERMALL) { |
seg->maxpasses = 1; |
} |
else if (cblksty & J2K_CCP_CBLKSTY_LAZY) { |
if (first) { |
seg->maxpasses = 10; |
} else { |
seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1; |
} |
} else { |
seg->maxpasses = 109; |
} |
} |
static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, |
opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info) { |
int bandno, cblkno; |
unsigned char *c = src; |
opj_cp_t *cp = t2->cp; |
int compno = pi->compno; /* component value */ |
int resno = pi->resno; /* resolution level value */ |
int precno = pi->precno; /* precinct value */ |
int layno = pi->layno; /* quality layer value */ |
opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno]; |
unsigned char *hd = NULL; |
int present; |
opj_bio_t *bio = NULL; /* BIO component */ |
if (layno == 0) { |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; |
tgt_reset(prc->incltree); |
tgt_reset(prc->imsbtree); |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; |
cblk->numsegs = 0; |
} |
} |
} |
/* SOP markers */ |
if (tcp->csty & J2K_CP_CSTY_SOP) { |
if ((*c) != 0xff || (*(c + 1) != 0x91)) { |
opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n"); |
} else { |
c += 6; |
} |
/** TODO : check the Nsop value */ |
} |
/* |
When the marker PPT/PPM is used the packet header are store in PPT/PPM marker |
This part deal with this caracteristic |
step 1: Read packet header in the saved structure |
step 2: Return to codestream for decoding |
*/ |
bio = bio_create(); |
if (cp->ppm == 1) { /* PPM */ |
hd = cp->ppm_data; |
bio_init_dec(bio, hd, cp->ppm_len); |
} else if (tcp->ppt == 1) { /* PPT */ |
hd = tcp->ppt_data; |
bio_init_dec(bio, hd, tcp->ppt_len); |
} else { /* Normal Case */ |
hd = c; |
bio_init_dec(bio, hd, src+len-hd); |
} |
present = bio_read(bio, 1); |
if (!present) { |
bio_inalign(bio); |
hd += bio_numbytes(bio); |
bio_destroy(bio); |
/* EPH markers */ |
if (tcp->csty & J2K_CP_CSTY_EPH) { |
if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { |
printf("Error : expected EPH marker\n"); |
} else { |
hd += 2; |
} |
} |
/* << INDEX */ |
// End of packet header position. Currently only represents the distance to start of packet |
// Will be updated later by incrementing with packet start value |
if(pack_info) { |
pack_info->end_ph_pos = (int)(c - src); |
} |
/* INDEX >> */ |
if (cp->ppm == 1) { /* PPM case */ |
cp->ppm_len += cp->ppm_data-hd; |
cp->ppm_data = hd; |
return (c - src); |
} |
if (tcp->ppt == 1) { /* PPT case */ |
tcp->ppt_len+=tcp->ppt_data-hd; |
tcp->ppt_data = hd; |
return (c - src); |
} |
return (hd - src); |
} |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
int included, increment, n, segno; |
opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; |
/* if cblk not yet included before --> inclusion tagtree */ |
if (!cblk->numsegs) { |
included = tgt_decode(bio, prc->incltree, cblkno, layno + 1); |
/* else one bit */ |
} else { |
included = bio_read(bio, 1); |
} |
/* if cblk not included */ |
if (!included) { |
cblk->numnewpasses = 0; |
continue; |
} |
/* if cblk not yet included --> zero-bitplane tagtree */ |
if (!cblk->numsegs) { |
int i, numimsbs; |
for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++) { |
; |
} |
numimsbs = i - 1; |
cblk->numbps = band->numbps - numimsbs; |
cblk->numlenbits = 3; |
} |
/* number of coding passes */ |
cblk->numnewpasses = t2_getnumpasses(bio); |
increment = t2_getcommacode(bio); |
/* length indicator increment */ |
cblk->numlenbits += increment; |
segno = 0; |
if (!cblk->numsegs) { |
t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 1); |
} else { |
segno = cblk->numsegs - 1; |
if (cblk->segs[segno].numpasses == cblk->segs[segno].maxpasses) { |
++segno; |
t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0); |
} |
} |
n = cblk->numnewpasses; |
do { |
cblk->segs[segno].numnewpasses = int_min(cblk->segs[segno].maxpasses - cblk->segs[segno].numpasses, n); |
cblk->segs[segno].newlen = bio_read(bio, cblk->numlenbits + int_floorlog2(cblk->segs[segno].numnewpasses)); |
n -= cblk->segs[segno].numnewpasses; |
if (n > 0) { |
++segno; |
t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0); |
} |
} while (n > 0); |
} |
} |
if (bio_inalign(bio)) { |
bio_destroy(bio); |
return -999; |
} |
hd += bio_numbytes(bio); |
bio_destroy(bio); |
/* EPH markers */ |
if (tcp->csty & J2K_CP_CSTY_EPH) { |
if ((*hd) != 0xff || (*(hd + 1) != 0x92)) { |
opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n"); |
return -999; |
} else { |
hd += 2; |
} |
} |
/* << INDEX */ |
// End of packet header position. Currently only represents the distance to start of packet |
// Will be updated later by incrementing with packet start value |
if(pack_info) { |
pack_info->end_ph_pos = (int)(hd - src); |
} |
/* INDEX >> */ |
if (cp->ppm==1) { |
cp->ppm_len+=cp->ppm_data-hd; |
cp->ppm_data = hd; |
} else if (tcp->ppt == 1) { |
tcp->ppt_len+=tcp->ppt_data-hd; |
tcp->ppt_data = hd; |
} else { |
c=hd; |
} |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; |
opj_tcd_seg_t *seg = NULL; |
if (!cblk->numnewpasses) |
continue; |
if (!cblk->numsegs) { |
seg = &cblk->segs[0]; |
cblk->numsegs++; |
cblk->len = 0; |
} else { |
seg = &cblk->segs[cblk->numsegs - 1]; |
if (seg->numpasses == seg->maxpasses) { |
seg++; |
cblk->numsegs++; |
} |
} |
do { |
if (c + seg->newlen > src + len) { |
return -999; |
} |
#ifdef USE_JPWL |
/* we need here a j2k handle to verify if making a check to |
the validity of cblocks parameters is selected from user (-W) */ |
/* let's check that we are not exceeding */ |
if ((cblk->len + seg->newlen) > 8192) { |
opj_event_msg(t2->cinfo, EVT_WARNING, |
"JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n", |
seg->newlen, cblkno, precno, bandno, resno, compno); |
if (!JPWL_ASSUME) { |
opj_event_msg(t2->cinfo, EVT_ERROR, "JPWL: giving up\n"); |
return -999; |
} |
seg->newlen = 8192 - cblk->len; |
opj_event_msg(t2->cinfo, EVT_WARNING, " - truncating segment to %d\n", seg->newlen); |
break; |
}; |
#endif /* USE_JPWL */ |
cblk->data = (unsigned char*) opj_realloc(cblk->data, (cblk->len + seg->newlen) * sizeof(unsigned char*)); |
memcpy(cblk->data + cblk->len, c, seg->newlen); |
if (seg->numpasses == 0) { |
seg->data = &cblk->data; |
seg->dataindex = cblk->len; |
} |
c += seg->newlen; |
cblk->len += seg->newlen; |
seg->len += seg->newlen; |
seg->numpasses += seg->numnewpasses; |
cblk->numnewpasses -= seg->numnewpasses; |
if (cblk->numnewpasses > 0) { |
seg++; |
cblk->numsegs++; |
} |
} while (cblk->numnewpasses > 0); |
} |
} |
return (c - src); |
} |
/* ----------------------------------------------------------------------- */ |
int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,int tpnum, int tppos,int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp){ |
unsigned char *c = dest; |
int e = 0; |
int compno; |
opj_pi_iterator_t *pi = NULL; |
int poc; |
opj_image_t *image = t2->image; |
opj_cp_t *cp = t2->cp; |
opj_tcp_t *tcp = &cp->tcps[tileno]; |
int pocno = cp->cinema == CINEMA4K_24? 2: 1; |
int maxcomp = cp->max_comp_size > 0 ? image->numcomps : 1; |
pi = pi_initialise_encode(image, cp, tileno, t2_mode); |
if(!pi) { |
/* TODO: throw an error */ |
return -999; |
} |
if(t2_mode == THRESH_CALC ){ /* Calculating threshold */ |
for(compno = 0; compno < maxcomp; compno++ ){ |
for(poc = 0; poc < pocno ; poc++){ |
int comp_len = 0; |
int tpnum = compno; |
if (pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode,cur_totnum_tp)) { |
opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n"); |
pi_destroy(pi, cp, tileno); |
return -999; |
} |
while (pi_next(&pi[poc])) { |
if (pi[poc].layno < maxlayers) { |
e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, cstr_info, tileno); |
comp_len = comp_len + e; |
if (e == -999) { |
break; |
} else { |
c += e; |
} |
} |
} |
if (e == -999) break; |
if (cp->max_comp_size){ |
if (comp_len > cp->max_comp_size){ |
e = -999; |
break; |
} |
} |
} |
if (e == -999) break; |
} |
}else{ /* t2_mode == FINAL_PASS */ |
pi_create_encode(pi, cp,tileno,pino,tpnum,tppos,t2_mode,cur_totnum_tp); |
while (pi_next(&pi[pino])) { |
if (pi[pino].layno < maxlayers) { |
e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, cstr_info, tileno); |
if (e == -999) { |
break; |
} else { |
c += e; |
} |
/* INDEX >> */ |
if(cstr_info) { |
if(cstr_info->index_write) { |
opj_tile_info_t *info_TL = &cstr_info->tile[tileno]; |
opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno]; |
if (!cstr_info->packno) { |
info_PK->start_pos = info_TL->end_header + 1; |
} else { |
info_PK->start_pos = ((cp->tp_on | tcp->POC)&& info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1; |
} |
info_PK->end_pos = info_PK->start_pos + e - 1; |
info_PK->end_ph_pos += info_PK->start_pos - 1; // End of packet header which now only represents the distance |
// to start of packet is incremented by value of start of packet |
} |
cstr_info->packno++; |
} |
/* << INDEX */ |
tile->packno++; |
} |
} |
} |
pi_destroy(pi, cp, tileno); |
if (e == -999) { |
return e; |
} |
return (c - dest); |
} |
int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info) { |
unsigned char *c = src; |
opj_pi_iterator_t *pi; |
int pino, e = 0; |
int n = 0, curtp = 0; |
int tp_start_packno; |
opj_image_t *image = t2->image; |
opj_cp_t *cp = t2->cp; |
/* create a packet iterator */ |
pi = pi_create_decode(image, cp, tileno); |
if(!pi) { |
/* TODO: throw an error */ |
return -999; |
} |
tp_start_packno = 0; |
for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { |
while (pi_next(&pi[pino])) { |
if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { |
opj_packet_info_t *pack_info; |
if (cstr_info) |
pack_info = &cstr_info->tile[tileno].packet[cstr_info->packno]; |
else |
pack_info = NULL; |
e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino], pack_info); |
} else { |
e = 0; |
} |
if(e == -999) return -999; |
/* progression in resolution */ |
image->comps[pi[pino].compno].resno_decoded = |
(e > 0) ? |
int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded) |
: image->comps[pi[pino].compno].resno_decoded; |
n++; |
/* INDEX >> */ |
if(cstr_info) { |
opj_tile_info_t *info_TL = &cstr_info->tile[tileno]; |
opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno]; |
if (!cstr_info->packno) { |
info_PK->start_pos = info_TL->end_header + 1; |
} else if (info_TL->packet[cstr_info->packno-1].end_pos >= (int)cstr_info->tile[tileno].tp[curtp].tp_end_pos){ // New tile part |
info_TL->tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; // Number of packets in previous tile-part |
tp_start_packno = cstr_info->packno; |
curtp++; |
info_PK->start_pos = cstr_info->tile[tileno].tp[curtp].tp_end_header+1; |
} else { |
info_PK->start_pos = (cp->tp_on && info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1; |
} |
info_PK->end_pos = info_PK->start_pos + e - 1; |
info_PK->end_ph_pos += info_PK->start_pos - 1; // End of packet header which now only represents the distance |
// to start of packet is incremented by value of start of packet |
cstr_info->packno++; |
} |
/* << INDEX */ |
if (e == -999) { /* ADD */ |
break; |
} else { |
c += e; |
} |
} |
} |
/* INDEX >> */ |
if(cstr_info) { |
cstr_info->tile[tileno].tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; // Number of packets in last tile-part |
} |
/* << INDEX */ |
/* don't forget to release pi */ |
pi_destroy(pi, cp, tileno); |
if (e == -999) { |
return e; |
} |
return (c - src); |
} |
/* ----------------------------------------------------------------------- */ |
opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp) { |
/* create the tcd structure */ |
opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t)); |
if(!t2) return NULL; |
t2->cinfo = cinfo; |
t2->image = image; |
t2->cp = cp; |
return t2; |
} |
void t2_destroy(opj_t2_t *t2) { |
if(t2) { |
opj_free(t2); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/t2.h |
---|
0,0 → 1,105 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __T2_H |
#define __T2_H |
/** |
@file t2.h |
@brief Implementation of a tier-2 coding (packetization of code-block data) (T2) |
*/ |
/** @defgroup T2 T2 - Implementation of a tier-2 coding */ |
/*@{*/ |
/** |
Tier-2 coding |
*/ |
typedef struct opj_t2 { |
/** codec context */ |
opj_common_ptr cinfo; |
/** Encoding: pointer to the src image. Decoding: pointer to the dst image. */ |
opj_image_t *image; |
/** pointer to the image coding parameters */ |
opj_cp_t *cp; |
} opj_t2_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Encode the packets of a tile to a destination buffer |
@param t2 T2 handle |
@param tileno number of the tile encoded |
@param tile the tile for which to write the packets |
@param maxlayers maximum number of layers |
@param dest the destination buffer |
@param len the length of the destination buffer |
@param cstr_info Codestream information structure |
@param tpnum Tile part number of the current tile |
@param tppos The position of the tile part flag in the progression order |
@param pino |
@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass |
@param cur_totnum_tp The total number of tile parts in the current tile |
*/ |
int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,int tpnum, int tppos,int pino,J2K_T2_MODE t2_mode,int cur_totnum_tp); |
/** |
Decode the packets of a tile from a source buffer |
@param t2 T2 handle |
@param src the source buffer |
@param len length of the source buffer |
@param tileno number that identifies the tile for which to decode the packets |
@param tile tile for which to decode the packets |
@param cstr_info Codestream information structure |
*/ |
int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info); |
/** |
Create a T2 handle |
@param cinfo Codec context info |
@param image Source or destination image |
@param cp Image coding parameters |
@return Returns a new T2 handle if successful, returns NULL otherwise |
*/ |
opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp); |
/** |
Destroy a T2 handle |
@param t2 T2 handle to destroy |
*/ |
void t2_destroy(opj_t2_t *t2); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __T2_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/tcd.c |
---|
0,0 → 1,1516 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* Copyright (c) 2006-2007, Parvatha Elangovan |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) { |
int tileno, compno, resno, bandno, precno;//, cblkno; |
fprintf(fd, "image {\n"); |
fprintf(fd, " tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n", |
img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0, tcd->image->y1); |
for (tileno = 0; tileno < img->th * img->tw; tileno++) { |
opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno]; |
fprintf(fd, " tile {\n"); |
fprintf(fd, " x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n", |
tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps); |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
fprintf(fd, " tilec {\n"); |
fprintf(fd, |
" x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n", |
tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions); |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
fprintf(fd, "\n res {\n"); |
fprintf(fd, |
" x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n", |
res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands); |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
fprintf(fd, " band {\n"); |
fprintf(fd, |
" x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n", |
band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps); |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
opj_tcd_precinct_t *prec = &band->precincts[precno]; |
fprintf(fd, " prec {\n"); |
fprintf(fd, |
" x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n", |
prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch); |
/* |
for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) { |
opj_tcd_cblk_t *cblk = &prec->cblks[cblkno]; |
fprintf(fd, " cblk {\n"); |
fprintf(fd, |
" x0=%d, y0=%d, x1=%d, y1=%d\n", |
cblk->x0, cblk->y0, cblk->x1, cblk->y1); |
fprintf(fd, " }\n"); |
} |
*/ |
fprintf(fd, " }\n"); |
} |
fprintf(fd, " }\n"); |
} |
fprintf(fd, " }\n"); |
} |
fprintf(fd, " }\n"); |
} |
fprintf(fd, " }\n"); |
} |
fprintf(fd, "}\n"); |
} |
/* ----------------------------------------------------------------------- */ |
/** |
Create a new TCD handle |
*/ |
opj_tcd_t* tcd_create(opj_common_ptr cinfo) { |
/* create the tcd structure */ |
opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t)); |
if(!tcd) return NULL; |
tcd->cinfo = cinfo; |
tcd->tcd_image = (opj_tcd_image_t*)opj_malloc(sizeof(opj_tcd_image_t)); |
if(!tcd->tcd_image) { |
opj_free(tcd); |
return NULL; |
} |
return tcd; |
} |
/** |
Destroy a previously created TCD handle |
*/ |
void tcd_destroy(opj_tcd_t *tcd) { |
if(tcd) { |
opj_free(tcd->tcd_image); |
opj_free(tcd); |
} |
} |
/* ----------------------------------------------------------------------- */ |
void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) { |
int tileno, compno, resno, bandno, precno, cblkno; |
tcd->image = image; |
tcd->cp = cp; |
tcd->tcd_image->tw = cp->tw; |
tcd->tcd_image->th = cp->th; |
tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t)); |
for (tileno = 0; tileno < 1; tileno++) { |
opj_tcp_t *tcp = &cp->tcps[curtileno]; |
int j; |
/* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
int p = curtileno % cp->tw; /* si numerotation matricielle .. */ |
int q = curtileno / cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */ |
/* opj_tcd_tile_t *tile=&tcd->tcd_image->tiles[tileno]; */ |
opj_tcd_tile_t *tile = tcd->tcd_image->tiles; |
/* 4 borders of the tile rescale on the image if necessary */ |
tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); |
tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); |
tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); |
tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); |
tile->numcomps = image->numcomps; |
/* tile->PPT=image->PPT; */ |
/* Modification of the RATE >> */ |
for (j = 0; j < tcp->numlayers; j++) { |
tcp->rates[j] = tcp->rates[j] ? |
cp->tp_on ? |
(((float) (tile->numcomps |
* (tile->x1 - tile->x0) |
* (tile->y1 - tile->y0) |
* image->comps[0].prec)) |
/(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers) |
: |
((float) (tile->numcomps |
* (tile->x1 - tile->x0) |
* (tile->y1 - tile->y0) |
* image->comps[0].prec))/ |
(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy) |
: 0; |
if (tcp->rates[j]) { |
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { |
tcp->rates[j] = tcp->rates[j - 1] + 20; |
} else { |
if (!j && tcp->rates[j] < 30) |
tcp->rates[j] = 30; |
} |
if(j == (tcp->numlayers-1)){ |
tcp->rates[j] = tcp->rates[j]- 2; |
} |
} |
} |
/* << Modification of the RATE */ |
tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(image->numcomps * sizeof(opj_tcd_tilecomp_t)); |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
/* border of each tile component (global) */ |
tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); |
tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); |
tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); |
tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); |
tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int)); |
tilec->numresolutions = tccp->numresolutions; |
tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t)); |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
int pdx, pdy; |
int levelno = tilec->numresolutions - 1 - resno; |
int tlprcxstart, tlprcystart, brprcxend, brprcyend; |
int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; |
int cbgwidthexpn, cbgheightexpn; |
int cblkwidthexpn, cblkheightexpn; |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
/* border for each resolution level (global) */ |
res->x0 = int_ceildivpow2(tilec->x0, levelno); |
res->y0 = int_ceildivpow2(tilec->y0, levelno); |
res->x1 = int_ceildivpow2(tilec->x1, levelno); |
res->y1 = int_ceildivpow2(tilec->y1, levelno); |
res->numbands = resno == 0 ? 1 : 3; |
/* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
pdx = tccp->prcw[resno]; |
pdy = tccp->prch[resno]; |
} else { |
pdx = 15; |
pdy = 15; |
} |
/* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; |
tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; |
brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; |
brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; |
res->pw = (brprcxend - tlprcxstart) >> pdx; |
res->ph = (brprcyend - tlprcystart) >> pdy; |
if (resno == 0) { |
tlcbgxstart = tlprcxstart; |
tlcbgystart = tlprcystart; |
brcbgxend = brprcxend; |
brcbgyend = brprcyend; |
cbgwidthexpn = pdx; |
cbgheightexpn = pdy; |
} else { |
tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); |
tlcbgystart = int_ceildivpow2(tlprcystart, 1); |
brcbgxend = int_ceildivpow2(brprcxend, 1); |
brcbgyend = int_ceildivpow2(brprcyend, 1); |
cbgwidthexpn = pdx - 1; |
cbgheightexpn = pdy - 1; |
} |
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); |
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); |
for (bandno = 0; bandno < res->numbands; bandno++) { |
int x0b, y0b, i; |
int gain, numbps; |
opj_stepsize_t *ss = NULL; |
opj_tcd_band_t *band = &res->bands[bandno]; |
band->bandno = resno == 0 ? 0 : bandno + 1; |
x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; |
y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; |
if (band->bandno == 0) { |
/* band border (global) */ |
band->x0 = int_ceildivpow2(tilec->x0, levelno); |
band->y0 = int_ceildivpow2(tilec->y0, levelno); |
band->x1 = int_ceildivpow2(tilec->x1, levelno); |
band->y1 = int_ceildivpow2(tilec->y1, levelno); |
} else { |
/* band border (global) */ |
band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); |
band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); |
band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); |
band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); |
} |
ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; |
gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); |
numbps = image->comps[compno].prec + gain; |
band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); |
band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ |
band->precincts = (opj_tcd_precinct_t *) opj_malloc(3 * res->pw * res->ph * sizeof(opj_tcd_precinct_t)); |
for (i = 0; i < res->pw * res->ph * 3; i++) { |
band->precincts[i].imsbtree = NULL; |
band->precincts[i].incltree = NULL; |
} |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; |
int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); |
int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); |
int cbgxend = cbgxstart + (1 << cbgwidthexpn); |
int cbgyend = cbgystart + (1 << cbgheightexpn); |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
/* precinct size (global) */ |
prc->x0 = int_max(cbgxstart, band->x0); |
prc->y0 = int_max(cbgystart, band->y0); |
prc->x1 = int_min(cbgxend, band->x1); |
prc->y1 = int_min(cbgyend, band->y1); |
tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; |
tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; |
brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; |
brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; |
prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; |
prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; |
prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc((prc->cw * prc->ch), sizeof(opj_tcd_cblk_enc_t)); |
prc->incltree = tgt_create(prc->cw, prc->ch); |
prc->imsbtree = tgt_create(prc->cw, prc->ch); |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); |
int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); |
int cblkxend = cblkxstart + (1 << cblkwidthexpn); |
int cblkyend = cblkystart + (1 << cblkheightexpn); |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
/* code-block size (global) */ |
cblk->x0 = int_max(cblkxstart, prc->x0); |
cblk->y0 = int_max(cblkystart, prc->y0); |
cblk->x1 = int_min(cblkxend, prc->x1); |
cblk->y1 = int_min(cblkyend, prc->y1); |
cblk->data = (unsigned char*) opj_calloc(8192+2, sizeof(unsigned char)); |
/* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */ |
cblk->data += 2; |
cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t)); |
cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t)); |
} |
} |
} |
} |
} |
} |
/* tcd_dump(stdout, tcd, &tcd->tcd_image); */ |
} |
void tcd_free_encode(opj_tcd_t *tcd) { |
int tileno, compno, resno, bandno, precno, cblkno; |
for (tileno = 0; tileno < 1; tileno++) { |
opj_tcd_tile_t *tile = tcd->tcd_image->tiles; |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
if (prc->incltree != NULL) { |
tgt_destroy(prc->incltree); |
prc->incltree = NULL; |
} |
if (prc->imsbtree != NULL) { |
tgt_destroy(prc->imsbtree); |
prc->imsbtree = NULL; |
} |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_free(prc->cblks.enc[cblkno].data - 2); |
opj_free(prc->cblks.enc[cblkno].layers); |
opj_free(prc->cblks.enc[cblkno].passes); |
} |
opj_free(prc->cblks.enc); |
} /* for (precno */ |
opj_free(band->precincts); |
band->precincts = NULL; |
} /* for (bandno */ |
} /* for (resno */ |
opj_free(tilec->resolutions); |
tilec->resolutions = NULL; |
} /* for (compno */ |
opj_free(tile->comps); |
tile->comps = NULL; |
} /* for (tileno */ |
opj_free(tcd->tcd_image->tiles); |
tcd->tcd_image->tiles = NULL; |
} |
void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) { |
int tileno, compno, resno, bandno, precno, cblkno; |
for (tileno = 0; tileno < 1; tileno++) { |
opj_tcp_t *tcp = &cp->tcps[curtileno]; |
int j; |
/* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
int p = curtileno % cp->tw; |
int q = curtileno / cp->tw; |
opj_tcd_tile_t *tile = tcd->tcd_image->tiles; |
/* 4 borders of the tile rescale on the image if necessary */ |
tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); |
tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); |
tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); |
tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); |
tile->numcomps = image->numcomps; |
/* tile->PPT=image->PPT; */ |
/* Modification of the RATE >> */ |
for (j = 0; j < tcp->numlayers; j++) { |
tcp->rates[j] = tcp->rates[j] ? |
cp->tp_on ? |
(((float) (tile->numcomps |
* (tile->x1 - tile->x0) |
* (tile->y1 - tile->y0) |
* image->comps[0].prec)) |
/(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers) |
: |
((float) (tile->numcomps |
* (tile->x1 - tile->x0) |
* (tile->y1 - tile->y0) |
* image->comps[0].prec))/ |
(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy) |
: 0; |
if (tcp->rates[j]) { |
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) { |
tcp->rates[j] = tcp->rates[j - 1] + 20; |
} else { |
if (!j && tcp->rates[j] < 30) |
tcp->rates[j] = 30; |
} |
} |
} |
/* << Modification of the RATE */ |
/* tile->comps=(opj_tcd_tilecomp_t*)opj_realloc(tile->comps,image->numcomps*sizeof(opj_tcd_tilecomp_t)); */ |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
/* border of each tile component (global) */ |
tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); |
tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); |
tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); |
tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); |
tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int)); |
tilec->numresolutions = tccp->numresolutions; |
/* tilec->resolutions=(opj_tcd_resolution_t*)opj_realloc(tilec->resolutions,tilec->numresolutions*sizeof(opj_tcd_resolution_t)); */ |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
int pdx, pdy; |
int levelno = tilec->numresolutions - 1 - resno; |
int tlprcxstart, tlprcystart, brprcxend, brprcyend; |
int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; |
int cbgwidthexpn, cbgheightexpn; |
int cblkwidthexpn, cblkheightexpn; |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
/* border for each resolution level (global) */ |
res->x0 = int_ceildivpow2(tilec->x0, levelno); |
res->y0 = int_ceildivpow2(tilec->y0, levelno); |
res->x1 = int_ceildivpow2(tilec->x1, levelno); |
res->y1 = int_ceildivpow2(tilec->y1, levelno); |
res->numbands = resno == 0 ? 1 : 3; |
/* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
pdx = tccp->prcw[resno]; |
pdy = tccp->prch[resno]; |
} else { |
pdx = 15; |
pdy = 15; |
} |
/* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; |
tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; |
brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; |
brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; |
res->pw = (brprcxend - tlprcxstart) >> pdx; |
res->ph = (brprcyend - tlprcystart) >> pdy; |
if (resno == 0) { |
tlcbgxstart = tlprcxstart; |
tlcbgystart = tlprcystart; |
brcbgxend = brprcxend; |
brcbgyend = brprcyend; |
cbgwidthexpn = pdx; |
cbgheightexpn = pdy; |
} else { |
tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); |
tlcbgystart = int_ceildivpow2(tlprcystart, 1); |
brcbgxend = int_ceildivpow2(brprcxend, 1); |
brcbgyend = int_ceildivpow2(brprcyend, 1); |
cbgwidthexpn = pdx - 1; |
cbgheightexpn = pdy - 1; |
} |
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); |
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); |
for (bandno = 0; bandno < res->numbands; bandno++) { |
int x0b, y0b; |
int gain, numbps; |
opj_stepsize_t *ss = NULL; |
opj_tcd_band_t *band = &res->bands[bandno]; |
band->bandno = resno == 0 ? 0 : bandno + 1; |
x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; |
y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; |
if (band->bandno == 0) { |
/* band border */ |
band->x0 = int_ceildivpow2(tilec->x0, levelno); |
band->y0 = int_ceildivpow2(tilec->y0, levelno); |
band->x1 = int_ceildivpow2(tilec->x1, levelno); |
band->y1 = int_ceildivpow2(tilec->y1, levelno); |
} else { |
band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); |
band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); |
band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); |
band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); |
} |
ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; |
gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); |
numbps = image->comps[compno].prec + gain; |
band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)); |
band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; |
int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); |
int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); |
int cbgxend = cbgxstart + (1 << cbgwidthexpn); |
int cbgyend = cbgystart + (1 << cbgheightexpn); |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
/* precinct size (global) */ |
prc->x0 = int_max(cbgxstart, band->x0); |
prc->y0 = int_max(cbgystart, band->y0); |
prc->x1 = int_min(cbgxend, band->x1); |
prc->y1 = int_min(cbgyend, band->y1); |
tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; |
tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; |
brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; |
brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; |
prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; |
prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; |
opj_free(prc->cblks.enc); |
prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc(prc->cw * prc->ch, sizeof(opj_tcd_cblk_enc_t)); |
if (prc->incltree != NULL) { |
tgt_destroy(prc->incltree); |
} |
if (prc->imsbtree != NULL) { |
tgt_destroy(prc->imsbtree); |
} |
prc->incltree = tgt_create(prc->cw, prc->ch); |
prc->imsbtree = tgt_create(prc->cw, prc->ch); |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); |
int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); |
int cblkxend = cblkxstart + (1 << cblkwidthexpn); |
int cblkyend = cblkystart + (1 << cblkheightexpn); |
opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; |
/* code-block size (global) */ |
cblk->x0 = int_max(cblkxstart, prc->x0); |
cblk->y0 = int_max(cblkystart, prc->y0); |
cblk->x1 = int_min(cblkxend, prc->x1); |
cblk->y1 = int_min(cblkyend, prc->y1); |
cblk->data = (unsigned char*) opj_calloc(8192+2, sizeof(unsigned char)); |
/* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */ |
cblk->data += 2; |
cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t)); |
cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t)); |
} |
} /* precno */ |
} /* bandno */ |
} /* resno */ |
} /* compno */ |
} /* tileno */ |
/* tcd_dump(stdout, tcd, &tcd->tcd_image); */ |
} |
void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp) { |
int i, j, tileno, p, q; |
unsigned int x0 = 0, y0 = 0, x1 = 0, y1 = 0, w, h; |
tcd->image = image; |
tcd->tcd_image->tw = cp->tw; |
tcd->tcd_image->th = cp->th; |
tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tcd_tile_t)); |
/* |
Allocate place to store the decoded data = final image |
Place limited by the tile really present in the codestream |
*/ |
for (j = 0; j < cp->tileno_size; j++) { |
opj_tcd_tile_t *tile; |
tileno = cp->tileno[j]; |
tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); |
tile->numcomps = image->numcomps; |
tile->comps = (opj_tcd_tilecomp_t*) opj_calloc(image->numcomps, sizeof(opj_tcd_tilecomp_t)); |
} |
for (i = 0; i < image->numcomps; i++) { |
for (j = 0; j < cp->tileno_size; j++) { |
opj_tcd_tile_t *tile; |
opj_tcd_tilecomp_t *tilec; |
/* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
tileno = cp->tileno[j]; |
tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); |
tilec = &tile->comps[i]; |
p = tileno % cp->tw; /* si numerotation matricielle .. */ |
q = tileno / cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */ |
/* 4 borders of the tile rescale on the image if necessary */ |
tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0); |
tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0); |
tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1); |
tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1); |
tilec->x0 = int_ceildiv(tile->x0, image->comps[i].dx); |
tilec->y0 = int_ceildiv(tile->y0, image->comps[i].dy); |
tilec->x1 = int_ceildiv(tile->x1, image->comps[i].dx); |
tilec->y1 = int_ceildiv(tile->y1, image->comps[i].dy); |
x0 = j == 0 ? tilec->x0 : int_min(x0, (unsigned int) tilec->x0); |
y0 = j == 0 ? tilec->y0 : int_min(y0, (unsigned int) tilec->x0); |
x1 = j == 0 ? tilec->x1 : int_max(x1, (unsigned int) tilec->x1); |
y1 = j == 0 ? tilec->y1 : int_max(y1, (unsigned int) tilec->y1); |
} |
w = int_ceildivpow2(x1 - x0, image->comps[i].factor); |
h = int_ceildivpow2(y1 - y0, image->comps[i].factor); |
image->comps[i].w = w; |
image->comps[i].h = h; |
image->comps[i].x0 = x0; |
image->comps[i].y0 = y0; |
} |
} |
void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info) { |
int compno, resno, bandno, precno, cblkno; |
opj_tcp_t *tcp; |
opj_tcd_tile_t *tile; |
tcd->cp = cp; |
tcp = &(cp->tcps[cp->tileno[tileno]]); |
tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]); |
tileno = cp->tileno[tileno]; |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
/* border of each tile component (global) */ |
tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx); |
tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy); |
tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx); |
tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy); |
tilec->numresolutions = tccp->numresolutions; |
tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t)); |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
int pdx, pdy; |
int levelno = tilec->numresolutions - 1 - resno; |
int tlprcxstart, tlprcystart, brprcxend, brprcyend; |
int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend; |
int cbgwidthexpn, cbgheightexpn; |
int cblkwidthexpn, cblkheightexpn; |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
/* border for each resolution level (global) */ |
res->x0 = int_ceildivpow2(tilec->x0, levelno); |
res->y0 = int_ceildivpow2(tilec->y0, levelno); |
res->x1 = int_ceildivpow2(tilec->x1, levelno); |
res->y1 = int_ceildivpow2(tilec->y1, levelno); |
res->numbands = resno == 0 ? 1 : 3; |
/* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */ |
if (tccp->csty & J2K_CCP_CSTY_PRT) { |
pdx = tccp->prcw[resno]; |
pdy = tccp->prch[resno]; |
} else { |
pdx = 15; |
pdy = 15; |
} |
/* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */ |
tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx; |
tlprcystart = int_floordivpow2(res->y0, pdy) << pdy; |
brprcxend = int_ceildivpow2(res->x1, pdx) << pdx; |
brprcyend = int_ceildivpow2(res->y1, pdy) << pdy; |
res->pw = (res->x0 == res->x1) ? 0 : ((brprcxend - tlprcxstart) >> pdx); |
res->ph = (res->y0 == res->y1) ? 0 : ((brprcyend - tlprcystart) >> pdy); |
if (resno == 0) { |
tlcbgxstart = tlprcxstart; |
tlcbgystart = tlprcystart; |
brcbgxend = brprcxend; |
brcbgyend = brprcyend; |
cbgwidthexpn = pdx; |
cbgheightexpn = pdy; |
} else { |
tlcbgxstart = int_ceildivpow2(tlprcxstart, 1); |
tlcbgystart = int_ceildivpow2(tlprcystart, 1); |
brcbgxend = int_ceildivpow2(brprcxend, 1); |
brcbgyend = int_ceildivpow2(brprcyend, 1); |
cbgwidthexpn = pdx - 1; |
cbgheightexpn = pdy - 1; |
} |
cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn); |
cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn); |
for (bandno = 0; bandno < res->numbands; bandno++) { |
int x0b, y0b; |
int gain, numbps; |
opj_stepsize_t *ss = NULL; |
opj_tcd_band_t *band = &res->bands[bandno]; |
band->bandno = resno == 0 ? 0 : bandno + 1; |
x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0; |
y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0; |
if (band->bandno == 0) { |
/* band border (global) */ |
band->x0 = int_ceildivpow2(tilec->x0, levelno); |
band->y0 = int_ceildivpow2(tilec->y0, levelno); |
band->x1 = int_ceildivpow2(tilec->x1, levelno); |
band->y1 = int_ceildivpow2(tilec->y1, levelno); |
} else { |
/* band border (global) */ |
band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1); |
band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1); |
band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1); |
band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1); |
} |
ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1]; |
gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno); |
numbps = image->comps[compno].prec + gain; |
band->stepsize = (float)(((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)) * 0.5); |
band->numbps = ss->expn + tccp->numgbits - 1; /* WHY -1 ? */ |
band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->pw * res->ph * sizeof(opj_tcd_precinct_t)); |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend; |
int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn); |
int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn); |
int cbgxend = cbgxstart + (1 << cbgwidthexpn); |
int cbgyend = cbgystart + (1 << cbgheightexpn); |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
/* precinct size (global) */ |
prc->x0 = int_max(cbgxstart, band->x0); |
prc->y0 = int_max(cbgystart, band->y0); |
prc->x1 = int_min(cbgxend, band->x1); |
prc->y1 = int_min(cbgyend, band->y1); |
tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn; |
tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn; |
brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn; |
brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn; |
prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn; |
prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn; |
prc->cblks.dec = (opj_tcd_cblk_dec_t*) opj_malloc(prc->cw * prc->ch * sizeof(opj_tcd_cblk_dec_t)); |
prc->incltree = tgt_create(prc->cw, prc->ch); |
prc->imsbtree = tgt_create(prc->cw, prc->ch); |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn); |
int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn); |
int cblkxend = cblkxstart + (1 << cblkwidthexpn); |
int cblkyend = cblkystart + (1 << cblkheightexpn); |
opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno]; |
cblk->data = NULL; |
cblk->segs = NULL; |
/* code-block size (global) */ |
cblk->x0 = int_max(cblkxstart, prc->x0); |
cblk->y0 = int_max(cblkystart, prc->y0); |
cblk->x1 = int_min(cblkxend, prc->x1); |
cblk->y1 = int_min(cblkyend, prc->y1); |
cblk->numsegs = 0; |
} |
} /* precno */ |
} /* bandno */ |
} /* resno */ |
} /* compno */ |
/* tcd_dump(stdout, tcd, &tcd->tcd_image); */ |
} |
void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final) { |
int compno, resno, bandno, precno, cblkno; |
int value; /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */ |
int matrice[10][10][3]; |
int i, j, k; |
opj_cp_t *cp = tcd->cp; |
opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; |
opj_tcp_t *tcd_tcp = tcd->tcp; |
/*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolutions*3*sizeof(int)); */ |
for (compno = 0; compno < tcd_tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; |
for (i = 0; i < tcd_tcp->numlayers; i++) { |
for (j = 0; j < tilec->numresolutions; j++) { |
for (k = 0; k < 3; k++) { |
matrice[i][j][k] = |
(int) (cp->matrice[i * tilec->numresolutions * 3 + j * 3 + k] |
* (float) (tcd->image->comps[compno].prec / 16.0)); |
} |
} |
} |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; |
opj_tcd_layer_t *layer = &cblk->layers[layno]; |
int n; |
int imsb = tcd->image->comps[compno].prec - cblk->numbps; /* number of bit-plan equal to zero */ |
/* Correction of the matrix of coefficient to include the IMSB information */ |
if (layno == 0) { |
value = matrice[layno][resno][bandno]; |
if (imsb >= value) { |
value = 0; |
} else { |
value -= imsb; |
} |
} else { |
value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno]; |
if (imsb >= matrice[layno - 1][resno][bandno]) { |
value -= (imsb - matrice[layno - 1][resno][bandno]); |
if (value < 0) { |
value = 0; |
} |
} |
} |
if (layno == 0) { |
cblk->numpassesinlayers = 0; |
} |
n = cblk->numpassesinlayers; |
if (cblk->numpassesinlayers == 0) { |
if (value != 0) { |
n = 3 * value - 2 + cblk->numpassesinlayers; |
} else { |
n = cblk->numpassesinlayers; |
} |
} else { |
n = 3 * value + cblk->numpassesinlayers; |
} |
layer->numpasses = n - cblk->numpassesinlayers; |
if (!layer->numpasses) |
continue; |
if (cblk->numpassesinlayers == 0) { |
layer->len = cblk->passes[n - 1].rate; |
layer->data = cblk->data; |
} else { |
layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; |
layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; |
} |
if (final) |
cblk->numpassesinlayers = n; |
} |
} |
} |
} |
} |
} |
void tcd_rateallocate_fixed(opj_tcd_t *tcd) { |
int layno; |
for (layno = 0; layno < tcd->tcp->numlayers; layno++) { |
tcd_makelayer_fixed(tcd, layno, 1); |
} |
} |
void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final) { |
int compno, resno, bandno, precno, cblkno, passno; |
opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; |
tcd_tile->distolayer[layno] = 0; /* fixed_quality */ |
for (compno = 0; compno < tcd_tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; |
opj_tcd_layer_t *layer = &cblk->layers[layno]; |
int n; |
if (layno == 0) { |
cblk->numpassesinlayers = 0; |
} |
n = cblk->numpassesinlayers; |
for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) { |
int dr; |
double dd; |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
if (n == 0) { |
dr = pass->rate; |
dd = pass->distortiondec; |
} else { |
dr = pass->rate - cblk->passes[n - 1].rate; |
dd = pass->distortiondec - cblk->passes[n - 1].distortiondec; |
} |
if (!dr) { |
if (dd != 0) |
n = passno + 1; |
continue; |
} |
if (dd / dr >= thresh) |
n = passno + 1; |
} |
layer->numpasses = n - cblk->numpassesinlayers; |
if (!layer->numpasses) { |
layer->disto = 0; |
continue; |
} |
if (cblk->numpassesinlayers == 0) { |
layer->len = cblk->passes[n - 1].rate; |
layer->data = cblk->data; |
layer->disto = cblk->passes[n - 1].distortiondec; |
} else { |
layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate; |
layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate; |
layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec; |
} |
tcd_tile->distolayer[layno] += layer->disto; /* fixed_quality */ |
if (final) |
cblk->numpassesinlayers = n; |
} |
} |
} |
} |
} |
} |
bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) { |
int compno, resno, bandno, precno, cblkno, passno, layno; |
double min, max; |
double cumdisto[100]; /* fixed_quality */ |
const double K = 1; /* 1.1; fixed_quality */ |
double maxSE = 0; |
opj_cp_t *cp = tcd->cp; |
opj_tcd_tile_t *tcd_tile = tcd->tcd_tile; |
opj_tcp_t *tcd_tcp = tcd->tcp; |
min = DBL_MAX; |
max = 0; |
tcd_tile->numpix = 0; /* fixed_quality */ |
for (compno = 0; compno < tcd_tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno]; |
tilec->numpix = 0; |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
for (precno = 0; precno < res->pw * res->ph; precno++) { |
opj_tcd_precinct_t *prc = &band->precincts[precno]; |
for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { |
opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno]; |
for (passno = 0; passno < cblk->totalpasses; passno++) { |
opj_tcd_pass_t *pass = &cblk->passes[passno]; |
int dr; |
double dd, rdslope; |
if (passno == 0) { |
dr = pass->rate; |
dd = pass->distortiondec; |
} else { |
dr = pass->rate - cblk->passes[passno - 1].rate; |
dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec; |
} |
if (dr == 0) { |
continue; |
} |
rdslope = dd / dr; |
if (rdslope < min) { |
min = rdslope; |
} |
if (rdslope > max) { |
max = rdslope; |
} |
} /* passno */ |
/* fixed_quality */ |
tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); |
tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); |
} /* cbklno */ |
} /* precno */ |
} /* bandno */ |
} /* resno */ |
maxSE += (((double)(1 << tcd->image->comps[compno].prec) - 1.0) |
* ((double)(1 << tcd->image->comps[compno].prec) -1.0)) |
* ((double)(tilec->numpix)); |
} /* compno */ |
/* index file */ |
if(cstr_info) { |
opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno]; |
tile_info->numpix = tcd_tile->numpix; |
tile_info->distotile = tcd_tile->distotile; |
tile_info->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double)); |
} |
for (layno = 0; layno < tcd_tcp->numlayers; layno++) { |
double lo = min; |
double hi = max; |
int success = 0; |
int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(tcd_tcp->rates[layno])), len) : len; |
double goodthresh = 0; |
double stable_thresh = 0; |
int i; |
double distotarget; /* fixed_quality */ |
/* fixed_quality */ |
distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10, tcd_tcp->distoratio[layno] / 10)); |
/* Don't try to find an optimal threshold but rather take everything not included yet, if |
-r xx,yy,zz,0 (disto_alloc == 1 and rates == 0) |
-q xx,yy,zz,0 (fixed_quality == 1 and distoratio == 0) |
==> possible to have some lossy layers and the last layer for sure lossless */ |
if ( ((cp->disto_alloc==1) && (tcd_tcp->rates[layno]>0)) || ((cp->fixed_quality==1) && (tcd_tcp->distoratio[layno]>0))) { |
opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->image, cp); |
double thresh = 0; |
for (i = 0; i < 128; i++) { |
int l = 0; |
double distoachieved = 0; /* fixed_quality */ |
thresh = (lo + hi) / 2; |
tcd_makelayer(tcd, layno, thresh, 0); |
if (cp->fixed_quality) { /* fixed_quality */ |
if(cp->cinema){ |
l = t2_encode_packets(t2,tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp); |
if (l == -999) { |
lo = thresh; |
continue; |
}else{ |
distoachieved = layno == 0 ? |
tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno]; |
if (distoachieved < distotarget) { |
hi=thresh; |
stable_thresh = thresh; |
continue; |
}else{ |
lo=thresh; |
} |
} |
}else{ |
distoachieved = (layno == 0) ? |
tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]); |
if (distoachieved < distotarget) { |
hi = thresh; |
stable_thresh = thresh; |
continue; |
} |
lo = thresh; |
} |
} else { |
l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp); |
/* TODO: what to do with l ??? seek / tell ??? */ |
/* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */ |
if (l == -999) { |
lo = thresh; |
continue; |
} |
hi = thresh; |
stable_thresh = thresh; |
} |
} |
success = 1; |
goodthresh = stable_thresh == 0? thresh : stable_thresh; |
t2_destroy(t2); |
} else { |
success = 1; |
goodthresh = min; |
} |
if (!success) { |
return false; |
} |
if(cstr_info) { /* Threshold for Marcela Index */ |
cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh; |
} |
tcd_makelayer(tcd, layno, goodthresh, 1); |
/* fixed_quality */ |
cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]); |
} |
return true; |
} |
int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) { |
int compno; |
int l, i, numpacks = 0; |
opj_tcd_tile_t *tile = NULL; |
opj_tcp_t *tcd_tcp = NULL; |
opj_cp_t *cp = NULL; |
opj_tcp_t *tcp = &tcd->cp->tcps[0]; |
opj_tccp_t *tccp = &tcp->tccps[0]; |
opj_image_t *image = tcd->image; |
opj_t1_t *t1 = NULL; /* T1 component */ |
opj_t2_t *t2 = NULL; /* T2 component */ |
tcd->tcd_tileno = tileno; |
tcd->tcd_tile = tcd->tcd_image->tiles; |
tcd->tcp = &tcd->cp->tcps[tileno]; |
tile = tcd->tcd_tile; |
tcd_tcp = tcd->tcp; |
cp = tcd->cp; |
if(tcd->cur_tp_num == 0){ |
tcd->encoding_time = opj_clock(); /* time needed to encode a tile */ |
/* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */ |
if(cstr_info) { |
opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0]; /* based on component 0 */ |
for (i = 0; i < tilec_idx->numresolutions; i++) { |
opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i]; |
cstr_info->tile[tileno].pw[i] = res_idx->pw; |
cstr_info->tile[tileno].ph[i] = res_idx->ph; |
numpacks += res_idx->pw * res_idx->ph; |
cstr_info->tile[tileno].pdx[i] = tccp->prcw[i]; |
cstr_info->tile[tileno].pdy[i] = tccp->prch[i]; |
} |
cstr_info->tile[tileno].packet = (opj_packet_info_t*) opj_calloc(cstr_info->numcomps * cstr_info->numlayers * numpacks, sizeof(opj_packet_info_t)); |
} |
/* << INDEX */ |
/*---------------TILE-------------------*/ |
for (compno = 0; compno < tile->numcomps; compno++) { |
int x, y; |
int adjust = image->comps[compno].sgnd ? 0 : 1 << (image->comps[compno].prec - 1); |
int offset_x = int_ceildiv(image->x0, image->comps[compno].dx); |
int offset_y = int_ceildiv(image->y0, image->comps[compno].dy); |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
int tw = tilec->x1 - tilec->x0; |
int w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx); |
/* extract tile data */ |
if (tcd_tcp->tccps[compno].qmfbid == 1) { |
for (y = tilec->y0; y < tilec->y1; y++) { |
/* start of the src tile scanline */ |
int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w]; |
/* start of the dst tile scanline */ |
int *tile_data = &tilec->data[(y - tilec->y0) * tw]; |
for (x = tilec->x0; x < tilec->x1; x++) { |
*tile_data++ = *data++ - adjust; |
} |
} |
} else if (tcd_tcp->tccps[compno].qmfbid == 0) { |
for (y = tilec->y0; y < tilec->y1; y++) { |
/* start of the src tile scanline */ |
int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w]; |
/* start of the dst tile scanline */ |
int *tile_data = &tilec->data[(y - tilec->y0) * tw]; |
for (x = tilec->x0; x < tilec->x1; x++) { |
*tile_data++ = (*data++ - adjust) << 11; |
} |
} |
} |
} |
/*----------------MCT-------------------*/ |
if (tcd_tcp->mct) { |
int samples = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0); |
if (tcd_tcp->tccps[0].qmfbid == 0) { |
mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); |
} else { |
mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples); |
} |
} |
/*----------------DWT---------------------*/ |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
if (tcd_tcp->tccps[compno].qmfbid == 1) { |
dwt_encode(tilec); |
} else if (tcd_tcp->tccps[compno].qmfbid == 0) { |
dwt_encode_real(tilec); |
} |
} |
/*------------------TIER1-----------------*/ |
t1 = t1_create(tcd->cinfo); |
t1_encode_cblks(t1, tile, tcd_tcp); |
t1_destroy(t1); |
/*-----------RATE-ALLOCATE------------------*/ |
/* INDEX */ |
if(cstr_info) { |
cstr_info->index_write = 0; |
} |
if (cp->disto_alloc || cp->fixed_quality) { /* fixed_quality */ |
/* Normal Rate/distortion allocation */ |
tcd_rateallocate(tcd, dest, len, cstr_info); |
} else { |
/* Fixed layer allocation */ |
tcd_rateallocate_fixed(tcd); |
} |
} |
/*--------------TIER2------------------*/ |
/* INDEX */ |
if(cstr_info) { |
cstr_info->index_write = 1; |
} |
t2 = t2_create(tcd->cinfo, image, cp); |
l = t2_encode_packets(t2,tileno, tile, tcd_tcp->numlayers, dest, len, cstr_info,tcd->tp_num,tcd->tp_pos,tcd->cur_pino,FINAL_PASS,tcd->cur_totnum_tp); |
t2_destroy(t2); |
/*---------------CLEAN-------------------*/ |
if(tcd->cur_tp_num == tcd->cur_totnum_tp - 1){ |
tcd->encoding_time = opj_clock() - tcd->encoding_time; |
opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", tcd->encoding_time); |
/* cleaning memory */ |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
opj_aligned_free(tilec->data); |
} |
} |
return l; |
} |
bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info) { |
int l; |
int compno; |
int eof = 0; |
double tile_time, t1_time, dwt_time; |
opj_tcd_tile_t *tile = NULL; |
opj_t1_t *t1 = NULL; /* T1 component */ |
opj_t2_t *t2 = NULL; /* T2 component */ |
tcd->tcd_tileno = tileno; |
tcd->tcd_tile = &(tcd->tcd_image->tiles[tileno]); |
tcd->tcp = &(tcd->cp->tcps[tileno]); |
tile = tcd->tcd_tile; |
tile_time = opj_clock(); /* time needed to decode a tile */ |
opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d of %d\n", tileno + 1, tcd->cp->tw * tcd->cp->th); |
/* INDEX >> */ |
if(cstr_info) { |
int resno, compno, numprec = 0; |
for (compno = 0; compno < cstr_info->numcomps; compno++) { |
opj_tcp_t *tcp = &tcd->cp->tcps[0]; |
opj_tccp_t *tccp = &tcp->tccps[compno]; |
opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno]; |
for (resno = 0; resno < tilec_idx->numresolutions; resno++) { |
opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno]; |
cstr_info->tile[tileno].pw[resno] = res_idx->pw; |
cstr_info->tile[tileno].ph[resno] = res_idx->ph; |
numprec += res_idx->pw * res_idx->ph; |
if (tccp->csty & J2K_CP_CSTY_PRT) { |
cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno]; |
cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno]; |
} |
else { |
cstr_info->tile[tileno].pdx[resno] = 15; |
cstr_info->tile[tileno].pdx[resno] = 15; |
} |
} |
} |
cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(cstr_info->numlayers * numprec * sizeof(opj_packet_info_t)); |
cstr_info->packno = 0; |
} |
/* << INDEX */ |
/*--------------TIER2------------------*/ |
t2 = t2_create(tcd->cinfo, tcd->image, tcd->cp); |
l = t2_decode_packets(t2, src, len, tileno, tile, cstr_info); |
t2_destroy(t2); |
if (l == -999) { |
eof = 1; |
opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bistream\n"); |
} |
/*------------------TIER1-----------------*/ |
t1_time = opj_clock(); /* time needed to decode a tile */ |
t1 = t1_create(tcd->cinfo); |
for (compno = 0; compno < tile->numcomps; ++compno) { |
opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; |
/* The +3 is headroom required by the vectorized DWT */ |
tilec->data = (int*) opj_aligned_malloc((((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0))+3) * sizeof(int)); |
t1_decode_cblks(t1, tilec, &tcd->tcp->tccps[compno]); |
} |
t1_destroy(t1); |
t1_time = opj_clock() - t1_time; |
opj_event_msg(tcd->cinfo, EVT_INFO, "- tiers-1 took %f s\n", t1_time); |
/*----------------DWT---------------------*/ |
dwt_time = opj_clock(); /* time needed to decode a tile */ |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
int numres2decode; |
if (tcd->cp->reduce != 0) { |
tcd->image->comps[compno].resno_decoded = |
tile->comps[compno].numresolutions - tcd->cp->reduce - 1; |
if (tcd->image->comps[compno].resno_decoded < 0) { |
opj_event_msg(tcd->cinfo, EVT_ERROR, "Error decoding tile. The number of resolutions to remove [%d+1] is higher than the number " |
" of resolutions in the original codestream [%d]\nModify the cp_reduce parameter.\n", tcd->cp->reduce, tile->comps[compno].numresolutions); |
return false; |
} |
} |
numres2decode = tcd->image->comps[compno].resno_decoded + 1; |
if(numres2decode > 0){ |
if (tcd->tcp->tccps[compno].qmfbid == 1) { |
dwt_decode(tilec, numres2decode); |
} else { |
dwt_decode_real(tilec, numres2decode); |
} |
} |
} |
dwt_time = opj_clock() - dwt_time; |
opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time); |
/*----------------MCT-------------------*/ |
if (tcd->tcp->mct) { |
int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0); |
if (tcd->tcp->tccps[0].qmfbid == 1) { |
mct_decode( |
tile->comps[0].data, |
tile->comps[1].data, |
tile->comps[2].data, |
n); |
} else { |
mct_decode_real( |
(float*)tile->comps[0].data, |
(float*)tile->comps[1].data, |
(float*)tile->comps[2].data, |
n); |
} |
} |
/*---------------TILE-------------------*/ |
for (compno = 0; compno < tile->numcomps; ++compno) { |
opj_tcd_tilecomp_t* tilec = &tile->comps[compno]; |
opj_image_comp_t* imagec = &tcd->image->comps[compno]; |
opj_tcd_resolution_t* res = &tilec->resolutions[imagec->resno_decoded]; |
int adjust = imagec->sgnd ? 0 : 1 << (imagec->prec - 1); |
int min = imagec->sgnd ? -(1 << (imagec->prec - 1)) : 0; |
int max = imagec->sgnd ? (1 << (imagec->prec - 1)) - 1 : (1 << imagec->prec) - 1; |
int tw = tilec->x1 - tilec->x0; |
int w = imagec->w; |
int offset_x = int_ceildivpow2(imagec->x0, imagec->factor); |
int offset_y = int_ceildivpow2(imagec->y0, imagec->factor); |
int i, j; |
if(!imagec->data){ |
imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int)); |
} |
if(tcd->tcp->tccps[compno].qmfbid == 1) { |
for(j = res->y0; j < res->y1; ++j) { |
for(i = res->x0; i < res->x1; ++i) { |
int v = tilec->data[i - res->x0 + (j - res->y0) * tw]; |
v += adjust; |
imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max); |
} |
} |
}else{ |
for(j = res->y0; j < res->y1; ++j) { |
for(i = res->x0; i < res->x1; ++i) { |
float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw]; |
int v = lrintf(tmp); |
v += adjust; |
imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max); |
} |
} |
} |
opj_aligned_free(tilec->data); |
} |
tile_time = opj_clock() - tile_time; /* time needed to decode a tile */ |
opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time); |
if (eof) { |
return false; |
} |
return true; |
} |
void tcd_free_decode(opj_tcd_t *tcd) { |
opj_tcd_image_t *tcd_image = tcd->tcd_image; |
opj_free(tcd_image->tiles); |
} |
void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) { |
int compno,resno,bandno,precno; |
opj_tcd_image_t *tcd_image = tcd->tcd_image; |
opj_tcd_tile_t *tile = &tcd_image->tiles[tileno]; |
for (compno = 0; compno < tile->numcomps; compno++) { |
opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; |
for (resno = 0; resno < tilec->numresolutions; resno++) { |
opj_tcd_resolution_t *res = &tilec->resolutions[resno]; |
for (bandno = 0; bandno < res->numbands; bandno++) { |
opj_tcd_band_t *band = &res->bands[bandno]; |
for (precno = 0; precno < res->ph * res->pw; precno++) { |
opj_tcd_precinct_t *prec = &band->precincts[precno]; |
if (prec->imsbtree != NULL) tgt_destroy(prec->imsbtree); |
if (prec->incltree != NULL) tgt_destroy(prec->incltree); |
} |
opj_free(band->precincts); |
} |
} |
opj_free(tilec->resolutions); |
} |
opj_free(tile->comps); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/tcd.h |
---|
0,0 → 1,286 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __TCD_H |
#define __TCD_H |
/** |
@file tcd.h |
@brief Implementation of a tile coder/decoder (TCD) |
The functions in TCD.C have for goal to encode or decode each tile independently from |
each other. The functions in TCD.C are used by some function in J2K.C. |
*/ |
/** @defgroup TCD TCD - Implementation of a tile coder/decoder */ |
/*@{*/ |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_seg { |
unsigned char** data; |
int dataindex; |
int numpasses; |
int len; |
int maxpasses; |
int numnewpasses; |
int newlen; |
} opj_tcd_seg_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_pass { |
int rate; |
double distortiondec; |
int term, len; |
} opj_tcd_pass_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_layer { |
int numpasses; /* Number of passes in the layer */ |
int len; /* len of information */ |
double disto; /* add for index (Cfr. Marcela) */ |
unsigned char *data; /* data */ |
} opj_tcd_layer_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_cblk_enc { |
unsigned char* data; /* Data */ |
opj_tcd_layer_t* layers; /* layer information */ |
opj_tcd_pass_t* passes; /* information about the passes */ |
int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ |
int numbps; |
int numlenbits; |
int numpasses; /* number of pass already done for the code-blocks */ |
int numpassesinlayers; /* number of passes in the layer */ |
int totalpasses; /* total number of passes */ |
} opj_tcd_cblk_enc_t; |
typedef struct opj_tcd_cblk_dec { |
unsigned char* data; /* Data */ |
opj_tcd_seg_t* segs; /* segments informations */ |
int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ |
int numbps; |
int numlenbits; |
int len; /* length */ |
int numnewpasses; /* number of pass added to the code-blocks */ |
int numsegs; /* number of segments */ |
} opj_tcd_cblk_dec_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_precinct { |
int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ |
int cw, ch; /* number of precinct in width and heigth */ |
union{ /* code-blocks informations */ |
opj_tcd_cblk_enc_t* enc; |
opj_tcd_cblk_dec_t* dec; |
} cblks; |
opj_tgt_tree_t *incltree; /* inclusion tree */ |
opj_tgt_tree_t *imsbtree; /* IMSB tree */ |
} opj_tcd_precinct_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_band { |
int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ |
int bandno; |
opj_tcd_precinct_t *precincts; /* precinct information */ |
int numbps; |
float stepsize; |
} opj_tcd_band_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_resolution { |
int x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */ |
int pw, ph; |
int numbands; /* number sub-band for the resolution level */ |
opj_tcd_band_t bands[3]; /* subband information */ |
} opj_tcd_resolution_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_tilecomp { |
int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ |
int numresolutions; /* number of resolutions level */ |
opj_tcd_resolution_t *resolutions; /* resolutions information */ |
int *data; /* data of the component */ |
int numpix; /* add fixed_quality */ |
} opj_tcd_tilecomp_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_tile { |
int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */ |
int numcomps; /* number of components in tile */ |
opj_tcd_tilecomp_t *comps; /* Components information */ |
int numpix; /* add fixed_quality */ |
double distotile; /* add fixed_quality */ |
double distolayer[100]; /* add fixed_quality */ |
/** packet number */ |
int packno; |
} opj_tcd_tile_t; |
/** |
FIXME: documentation |
*/ |
typedef struct opj_tcd_image { |
int tw, th; /* number of tiles in width and heigth */ |
opj_tcd_tile_t *tiles; /* Tiles information */ |
} opj_tcd_image_t; |
/** |
Tile coder/decoder |
*/ |
typedef struct opj_tcd { |
/** Position of the tilepart flag in Progression order*/ |
int tp_pos; |
/** Tile part number*/ |
int tp_num; |
/** Current tile part number*/ |
int cur_tp_num; |
/** Total number of tileparts of the current tile*/ |
int cur_totnum_tp; |
/** Current Packet iterator number */ |
int cur_pino; |
/** codec context */ |
opj_common_ptr cinfo; |
/** info on each image tile */ |
opj_tcd_image_t *tcd_image; |
/** image */ |
opj_image_t *image; |
/** coding parameters */ |
opj_cp_t *cp; |
/** pointer to the current encoded/decoded tile */ |
opj_tcd_tile_t *tcd_tile; |
/** coding/decoding parameters common to all tiles */ |
opj_tcp_t *tcp; |
/** current encoded/decoded tile */ |
int tcd_tileno; |
/** Time taken to encode a tile*/ |
double encoding_time; |
} opj_tcd_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Dump the content of a tcd structure |
*/ |
void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img); |
/** |
Create a new TCD handle |
@param cinfo Codec context info |
@return Returns a new TCD handle if successful returns NULL otherwise |
*/ |
opj_tcd_t* tcd_create(opj_common_ptr cinfo); |
/** |
Destroy a previously created TCD handle |
@param tcd TCD handle to destroy |
*/ |
void tcd_destroy(opj_tcd_t *tcd); |
/** |
Initialize the tile coder (allocate the memory) |
@param tcd TCD handle |
@param image Raw image |
@param cp Coding parameters |
@param curtileno Number that identifies the tile that will be encoded |
*/ |
void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno); |
/** |
Free the memory allocated for encoding |
@param tcd TCD handle |
*/ |
void tcd_free_encode(opj_tcd_t *tcd); |
/** |
Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode) |
@param tcd TCD handle |
@param image Raw image |
@param cp Coding parameters |
@param curtileno Number that identifies the tile that will be encoded |
*/ |
void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno); |
/** |
Initialize the tile decoder |
@param tcd TCD handle |
@param image Raw image |
@param cp Coding parameters |
*/ |
void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp); |
void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info); |
void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final); |
void tcd_rateallocate_fixed(opj_tcd_t *tcd); |
void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final); |
bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); |
/** |
Encode a tile from the raw image into a buffer |
@param tcd TCD handle |
@param tileno Number that identifies one of the tiles to be encoded |
@param dest Destination buffer |
@param len Length of destination buffer |
@param cstr_info Codestream information structure |
@return |
*/ |
int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); |
/** |
Decode a tile from a buffer into a raw image |
@param tcd TCD handle |
@param src Source buffer |
@param len Length of source buffer |
@param tileno Number that identifies one of the tiles to be decoded |
@param cstr_info Codestream information structure |
*/ |
bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info); |
/** |
Free the memory allocated for decoding |
@param tcd TCD handle |
*/ |
void tcd_free_decode(opj_tcd_t *tcd); |
void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __TCD_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/tgt.c |
---|
0,0 → 1,213 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "opj_includes.h" |
/* |
========================================================== |
Tag-tree coder interface |
========================================================== |
*/ |
opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv) { |
int nplh[32]; |
int nplv[32]; |
opj_tgt_node_t *node = NULL; |
opj_tgt_node_t *parentnode = NULL; |
opj_tgt_node_t *parentnode0 = NULL; |
opj_tgt_tree_t *tree = NULL; |
int i, j, k; |
int numlvls; |
int n; |
tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t)); |
if(!tree) return NULL; |
tree->numleafsh = numleafsh; |
tree->numleafsv = numleafsv; |
numlvls = 0; |
nplh[0] = numleafsh; |
nplv[0] = numleafsv; |
tree->numnodes = 0; |
do { |
n = nplh[numlvls] * nplv[numlvls]; |
nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2; |
nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2; |
tree->numnodes += n; |
++numlvls; |
} while (n > 1); |
/* ADD */ |
if (tree->numnodes == 0) { |
opj_free(tree); |
return NULL; |
} |
tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tgt_node_t)); |
if(!tree->nodes) { |
opj_free(tree); |
return NULL; |
} |
node = tree->nodes; |
parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv]; |
parentnode0 = parentnode; |
for (i = 0; i < numlvls - 1; ++i) { |
for (j = 0; j < nplv[i]; ++j) { |
k = nplh[i]; |
while (--k >= 0) { |
node->parent = parentnode; |
++node; |
if (--k >= 0) { |
node->parent = parentnode; |
++node; |
} |
++parentnode; |
} |
if ((j & 1) || j == nplv[i] - 1) { |
parentnode0 = parentnode; |
} else { |
parentnode = parentnode0; |
parentnode0 += nplh[i]; |
} |
} |
} |
node->parent = 0; |
tgt_reset(tree); |
return tree; |
} |
void tgt_destroy(opj_tgt_tree_t *tree) { |
opj_free(tree->nodes); |
opj_free(tree); |
} |
void tgt_reset(opj_tgt_tree_t *tree) { |
int i; |
if (NULL == tree) |
return; |
for (i = 0; i < tree->numnodes; i++) { |
tree->nodes[i].value = 999; |
tree->nodes[i].low = 0; |
tree->nodes[i].known = 0; |
} |
} |
void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) { |
opj_tgt_node_t *node; |
node = &tree->nodes[leafno]; |
while (node && node->value > value) { |
node->value = value; |
node = node->parent; |
} |
} |
void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { |
opj_tgt_node_t *stk[31]; |
opj_tgt_node_t **stkptr; |
opj_tgt_node_t *node; |
int low; |
stkptr = stk; |
node = &tree->nodes[leafno]; |
while (node->parent) { |
*stkptr++ = node; |
node = node->parent; |
} |
low = 0; |
for (;;) { |
if (low > node->low) { |
node->low = low; |
} else { |
low = node->low; |
} |
while (low < threshold) { |
if (low >= node->value) { |
if (!node->known) { |
bio_write(bio, 1, 1); |
node->known = 1; |
} |
break; |
} |
bio_write(bio, 0, 1); |
++low; |
} |
node->low = low; |
if (stkptr == stk) |
break; |
node = *--stkptr; |
} |
} |
int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) { |
opj_tgt_node_t *stk[31]; |
opj_tgt_node_t **stkptr; |
opj_tgt_node_t *node; |
int low; |
stkptr = stk; |
node = &tree->nodes[leafno]; |
while (node->parent) { |
*stkptr++ = node; |
node = node->parent; |
} |
low = 0; |
for (;;) { |
if (low > node->low) { |
node->low = low; |
} else { |
low = node->low; |
} |
while (low < threshold && low < node->value) { |
if (bio_read(bio, 1)) { |
node->value = low; |
} else { |
++low; |
} |
} |
node->low = low; |
if (stkptr == stk) { |
break; |
} |
node = *--stkptr; |
} |
return (node->value < threshold) ? 1 : 0; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/libopenjpeg/tgt.h |
---|
0,0 → 1,114 |
/* |
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
* Copyright (c) 2002-2007, Professor Benoit Macq |
* Copyright (c) 2001-2003, David Janssens |
* Copyright (c) 2002-2003, Yannick Verschueren |
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
* Copyright (c) 2005, Herve Drolon, FreeImage Team |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef __TGT_H |
#define __TGT_H |
/** |
@file tgt.h |
@brief Implementation of a tag-tree coder (TGT) |
The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C |
are used by some function in T2.C. |
*/ |
/** @defgroup TGT TGT - Implementation of a tag-tree coder */ |
/*@{*/ |
/** |
Tag node |
*/ |
typedef struct opj_tgt_node { |
struct opj_tgt_node *parent; |
int value; |
int low; |
int known; |
} opj_tgt_node_t; |
/** |
Tag tree |
*/ |
typedef struct opj_tgt_tree { |
int numleafsh; |
int numleafsv; |
int numnodes; |
opj_tgt_node_t *nodes; |
} opj_tgt_tree_t; |
/** @name Exported functions */ |
/*@{*/ |
/* ----------------------------------------------------------------------- */ |
/** |
Create a tag-tree |
@param numleafsh Width of the array of leafs of the tree |
@param numleafsv Height of the array of leafs of the tree |
@return Returns a new tag-tree if successful, returns NULL otherwise |
*/ |
opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv); |
/** |
Destroy a tag-tree, liberating memory |
@param tree Tag-tree to destroy |
*/ |
void tgt_destroy(opj_tgt_tree_t *tree); |
/** |
Reset a tag-tree (set all leaves to 0) |
@param tree Tag-tree to reset |
*/ |
void tgt_reset(opj_tgt_tree_t *tree); |
/** |
Set the value of a leaf of a tag-tree |
@param tree Tag-tree to modify |
@param leafno Number that identifies the leaf to modify |
@param value New value of the leaf |
*/ |
void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value); |
/** |
Encode the value of a leaf of the tag-tree up to a given threshold |
@param bio Pointer to a BIO handle |
@param tree Tag-tree to modify |
@param leafno Number that identifies the leaf to encode |
@param threshold Threshold to use when encoding value of the leaf |
*/ |
void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); |
/** |
Decode the value of a leaf of the tag-tree up to a given threshold |
@param bio Pointer to a BIO handle |
@param tree Tag-tree to decode |
@param leafno Number that identifies the leaf to decode |
@param threshold Threshold to use when decoding value of the leaf |
@return Returns 1 if the node's value < threshold, returns 0 otherwise |
*/ |
int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold); |
/* ----------------------------------------------------------------------- */ |
/*@}*/ |
/*@}*/ |
#endif /* __TGT_H */ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/Makefile |
---|
0,0 → 1,21 |
CC = kos32-gcc |
LD = kos32-ld |
SDK_DIR = $(abspath ../../../sdk) |
LDFLAGS = -call_shared -nostdlib -T $(SDK_DIR)/sources/newlib/app-dynamic.lds --image-base 0 |
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 |
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz -I $(SDK_DIR)/sources/freetype/include |
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib |
PDF_SRC := $(notdir $(wildcard *.c)) |
OBJECTS = $(patsubst %.c, %.o, $(PDF_SRC)) |
default: $(patsubst %.c,%.o,$(PDF_SRC)) |
ar rcs libmupdf.a *.o |
rm *.o |
mv libmupdf.a ../lib |
%.o : %.c Makefile $(PDF_SRC) |
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/data_encodings.h |
---|
0,0 → 1,214 |
#define _notdef NULL |
const unsigned short pdf_doc_encoding[256] = |
{ |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x0000, 0x0009, 0x000A, 0x0000, 0x0000, 0x000D, 0x0000, 0x0000, |
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc, |
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, |
0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, |
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, |
0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, |
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, |
0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, |
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, |
0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, |
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, |
0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, |
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, |
0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x0000, |
0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, |
0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, |
0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, |
0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0x0000, |
0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, |
0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x0000, 0x00ae, 0x00af, |
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, |
0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, |
0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, |
0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff |
}; |
const char * const pdf_standard[256] = { _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
"space", "exclam", "quotedbl", "numbersign", "dollar", "percent", |
"ampersand", "quoteright", "parenleft", "parenright", "asterisk", |
"plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", |
"three", "four", "five", "six", "seven", "eight", "nine", "colon", |
"semicolon", "less", "equal", "greater", "question", "at", "A", |
"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", |
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", |
"bracketleft", "backslash", "bracketright", "asciicircum", "underscore", |
"quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", |
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", |
"y", "z", "braceleft", "bar", "braceright", "asciitilde", _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, "exclamdown", "cent", "sterling", |
"fraction", "yen", "florin", "section", "currency", "quotesingle", |
"quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", |
"fi", "fl", _notdef, "endash", "dagger", "daggerdbl", "periodcentered", |
_notdef, "paragraph", "bullet", "quotesinglbase", "quotedblbase", |
"quotedblright", "guillemotright", "ellipsis", "perthousand", |
_notdef, "questiondown", _notdef, "grave", "acute", "circumflex", |
"tilde", "macron", "breve", "dotaccent", "dieresis", _notdef, |
"ring", "cedilla", _notdef, "hungarumlaut", "ogonek", "caron", |
"emdash", _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, "AE", |
_notdef, "ordfeminine", _notdef, _notdef, _notdef, _notdef, |
"Lslash", "Oslash", "OE", "ordmasculine", _notdef, _notdef, |
_notdef, _notdef, _notdef, "ae", _notdef, _notdef, |
_notdef, "dotlessi", _notdef, _notdef, "lslash", "oslash", |
"oe", "germandbls", _notdef, _notdef, _notdef, _notdef |
}; |
const char * const pdf_mac_roman[256] = { _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
"space", "exclam", "quotedbl", "numbersign", "dollar", "percent", |
"ampersand", "quotesingle", "parenleft", "parenright", "asterisk", |
"plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", |
"three", "four", "five", "six", "seven", "eight", "nine", "colon", |
"semicolon", "less", "equal", "greater", "question", "at", "A", |
"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", |
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", |
"bracketleft", "backslash", "bracketright", "asciicircum", "underscore", |
"grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", |
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", |
"y", "z", "braceleft", "bar", "braceright", "asciitilde", _notdef, |
"Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", |
"Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", |
"aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", |
"iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", |
"ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", |
"ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", |
"section", "bullet", "paragraph", "germandbls", "registered", |
"copyright", "trademark", "acute", "dieresis", _notdef, "AE", |
"Oslash", _notdef, "plusminus", _notdef, _notdef, "yen", "mu", |
_notdef, _notdef, _notdef, _notdef, _notdef, "ordfeminine", |
"ordmasculine", _notdef, "ae", "oslash", "questiondown", "exclamdown", |
"logicalnot", _notdef, "florin", _notdef, _notdef, "guillemotleft", |
"guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", |
"OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", |
"quoteleft", "quoteright", "divide", _notdef, "ydieresis", |
"Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", |
"fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", |
"quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", |
"Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", |
"Oacute", "Ocircumflex", _notdef, "Ograve", "Uacute", "Ucircumflex", |
"Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", |
"dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron" |
}; |
const char * const pdf_mac_expert[256] = { _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
"space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", |
"dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", |
"parenleftsuperior", "parenrightsuperior", "twodotenleader", |
"onedotenleader", "comma", "hyphen", "period", "fraction", |
"zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", |
"fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", |
"eightoldstyle", "nineoldstyle", "colon", "semicolon", _notdef, |
"threequartersemdash", _notdef, "questionsmall", _notdef, |
_notdef, _notdef, _notdef, "Ethsmall", _notdef, _notdef, |
"onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", |
"fiveeighths", "seveneighths", "onethird", "twothirds", _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, "ff", "fi", |
"fl", "ffi", "ffl", "parenleftinferior", _notdef, "parenrightinferior", |
"Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", |
"Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", |
"Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", |
"Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", |
"Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", |
"Tildesmall", _notdef, _notdef, "asuperior", "centsuperior", |
_notdef, _notdef, _notdef, _notdef, "Aacutesmall", |
"Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", |
"Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", |
"Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", |
"Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", |
"Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", |
"Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", |
_notdef, "eightsuperior", "fourinferior", "threeinferior", |
"sixinferior", "eightinferior", "seveninferior", "Scaronsmall", |
_notdef, "centinferior", "twoinferior", _notdef, "Dieresissmall", |
_notdef, "Caronsmall", "osuperior", "fiveinferior", _notdef, |
"commainferior", "periodinferior", "Yacutesmall", _notdef, |
"dollarinferior", _notdef, _notdef, "Thornsmall", _notdef, |
"nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", |
"questiondownsmall", "oneinferior", "Lslashsmall", _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, "Cedillasmall", |
_notdef, _notdef, _notdef, _notdef, _notdef, "OEsmall", |
"figuredash", "hyphensuperior", _notdef, _notdef, _notdef, |
_notdef, "exclamdownsmall", _notdef, "Ydieresissmall", _notdef, |
"onesuperior", "twosuperior", "threesuperior", "foursuperior", |
"fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", |
"zerosuperior", _notdef, "esuperior", "rsuperior", "tsuperior", |
_notdef, _notdef, "isuperior", "ssuperior", "dsuperior", |
_notdef, _notdef, _notdef, _notdef, _notdef, "lsuperior", |
"Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", |
"msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", |
"Ringsmall", _notdef, _notdef, _notdef, _notdef }; |
const char * const pdf_win_ansi[256] = { _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, _notdef, |
_notdef, _notdef, _notdef, _notdef, _notdef, "space", |
"exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", |
"quotesingle", "parenleft", "parenright", "asterisk", "plus", |
"comma", "hyphen", "period", "slash", "zero", "one", "two", "three", |
"four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", |
"less", "equal", "greater", "question", "at", "A", "B", "C", "D", |
"E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", |
"R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", |
"backslash", "bracketright", "asciicircum", "underscore", "grave", |
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", |
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", |
"braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", |
"bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", |
"dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", |
"guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", |
"quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", |
"endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", |
"oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", |
"sterling", "currency", "yen", "brokenbar", "section", "dieresis", |
"copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", |
"registered", "macron", "degree", "plusminus", "twosuperior", |
"threesuperior", "acute", "mu", "paragraph", "periodcentered", |
"cedilla", "onesuperior", "ordmasculine", "guillemotright", |
"onequarter", "onehalf", "threequarters", "questiondown", "Agrave", |
"Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", |
"Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", |
"Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", |
"Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", |
"Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", |
"germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", |
"aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", |
"edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", |
"ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", |
"divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", |
"yacute", "thorn", "ydieresis" |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/data_glyphlist.h |
---|
0,0 → 1,1461 |
/* |
# Name: Adobe Glyph List |
# Table version: 2.0 |
# Date: September 20, 2002 |
# |
# See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html |
# |
# Format: Semicolon-delimited fields: |
# (1) glyph name |
# (2) Unicode scalar value |
#--end |
*/ |
static const char *agl_name_list[] = { |
"A","AE","AEacute","AEmacron","AEsmall","Aacute","Aacutesmall","Abreve", |
"Abreveacute","Abrevecyrillic","Abrevedotbelow","Abrevegrave", |
"Abrevehookabove","Abrevetilde","Acaron","Acircle","Acircumflex", |
"Acircumflexacute","Acircumflexdotbelow","Acircumflexgrave", |
"Acircumflexhookabove","Acircumflexsmall","Acircumflextilde","Acute", |
"Acutesmall","Acyrillic","Adblgrave","Adieresis","Adieresiscyrillic", |
"Adieresismacron","Adieresissmall","Adotbelow","Adotmacron","Agrave", |
"Agravesmall","Ahookabove","Aiecyrillic","Ainvertedbreve","Alpha", |
"Alphatonos","Amacron","Amonospace","Aogonek","Aring","Aringacute", |
"Aringbelow","Aringsmall","Asmall","Atilde","Atildesmall","Aybarmenian","B", |
"Bcircle","Bdotaccent","Bdotbelow","Becyrillic","Benarmenian","Beta","Bhook", |
"Blinebelow","Bmonospace","Brevesmall","Bsmall","Btopbar","C","Caarmenian", |
"Cacute","Caron","Caronsmall","Ccaron","Ccedilla","Ccedillaacute", |
"Ccedillasmall","Ccircle","Ccircumflex","Cdot","Cdotaccent","Cedillasmall", |
"Chaarmenian","Cheabkhasiancyrillic","Checyrillic", |
"Chedescenderabkhasiancyrillic","Chedescendercyrillic","Chedieresiscyrillic", |
"Cheharmenian","Chekhakassiancyrillic","Cheverticalstrokecyrillic","Chi", |
"Chook","Circumflexsmall","Cmonospace","Coarmenian","Csmall","D","DZ", |
"DZcaron","Daarmenian","Dafrican","Dcaron","Dcedilla","Dcircle", |
"Dcircumflexbelow","Dcroat","Ddotaccent","Ddotbelow","Decyrillic","Deicoptic", |
"Delta","Deltagreek","Dhook","Dieresis","DieresisAcute","DieresisGrave", |
"Dieresissmall","Digammagreek","Djecyrillic","Dlinebelow","Dmonospace", |
"Dotaccentsmall","Dslash","Dsmall","Dtopbar","Dz","Dzcaron", |
"Dzeabkhasiancyrillic","Dzecyrillic","Dzhecyrillic","E","Eacute", |
"Eacutesmall","Ebreve","Ecaron","Ecedillabreve","Echarmenian","Ecircle", |
"Ecircumflex","Ecircumflexacute","Ecircumflexbelow","Ecircumflexdotbelow", |
"Ecircumflexgrave","Ecircumflexhookabove","Ecircumflexsmall", |
"Ecircumflextilde","Ecyrillic","Edblgrave","Edieresis","Edieresissmall", |
"Edot","Edotaccent","Edotbelow","Efcyrillic","Egrave","Egravesmall", |
"Eharmenian","Ehookabove","Eightroman","Einvertedbreve","Eiotifiedcyrillic", |
"Elcyrillic","Elevenroman","Emacron","Emacronacute","Emacrongrave", |
"Emcyrillic","Emonospace","Encyrillic","Endescendercyrillic","Eng", |
"Enghecyrillic","Enhookcyrillic","Eogonek","Eopen","Epsilon","Epsilontonos", |
"Ercyrillic","Ereversed","Ereversedcyrillic","Escyrillic", |
"Esdescendercyrillic","Esh","Esmall","Eta","Etarmenian","Etatonos","Eth", |
"Ethsmall","Etilde","Etildebelow","Euro","Ezh","Ezhcaron","Ezhreversed","F", |
"Fcircle","Fdotaccent","Feharmenian","Feicoptic","Fhook","Fitacyrillic", |
"Fiveroman","Fmonospace","Fourroman","Fsmall","G","GBsquare","Gacute","Gamma", |
"Gammaafrican","Gangiacoptic","Gbreve","Gcaron","Gcedilla","Gcircle", |
"Gcircumflex","Gcommaaccent","Gdot","Gdotaccent","Gecyrillic","Ghadarmenian", |
"Ghemiddlehookcyrillic","Ghestrokecyrillic","Gheupturncyrillic","Ghook", |
"Gimarmenian","Gjecyrillic","Gmacron","Gmonospace","Grave","Gravesmall", |
"Gsmall","Gsmallhook","Gstroke","H","H18533","H18543","H18551","H22073", |
"HPsquare","Haabkhasiancyrillic","Hadescendercyrillic","Hardsigncyrillic", |
"Hbar","Hbrevebelow","Hcedilla","Hcircle","Hcircumflex","Hdieresis", |
"Hdotaccent","Hdotbelow","Hmonospace","Hoarmenian","Horicoptic","Hsmall", |
"Hungarumlaut","Hungarumlautsmall","Hzsquare","I","IAcyrillic","IJ", |
"IUcyrillic","Iacute","Iacutesmall","Ibreve","Icaron","Icircle","Icircumflex", |
"Icircumflexsmall","Icyrillic","Idblgrave","Idieresis","Idieresisacute", |
"Idieresiscyrillic","Idieresissmall","Idot","Idotaccent","Idotbelow", |
"Iebrevecyrillic","Iecyrillic","Ifraktur","Igrave","Igravesmall","Ihookabove", |
"Iicyrillic","Iinvertedbreve","Iishortcyrillic","Imacron","Imacroncyrillic", |
"Imonospace","Iniarmenian","Iocyrillic","Iogonek","Iota","Iotaafrican", |
"Iotadieresis","Iotatonos","Ismall","Istroke","Itilde","Itildebelow", |
"Izhitsacyrillic","Izhitsadblgravecyrillic","J","Jaarmenian","Jcircle", |
"Jcircumflex","Jecyrillic","Jheharmenian","Jmonospace","Jsmall","K", |
"KBsquare","KKsquare","Kabashkircyrillic","Kacute","Kacyrillic", |
"Kadescendercyrillic","Kahookcyrillic","Kappa","Kastrokecyrillic", |
"Kaverticalstrokecyrillic","Kcaron","Kcedilla","Kcircle","Kcommaaccent", |
"Kdotbelow","Keharmenian","Kenarmenian","Khacyrillic","Kheicoptic","Khook", |
"Kjecyrillic","Klinebelow","Kmonospace","Koppacyrillic","Koppagreek", |
"Ksicyrillic","Ksmall","L","LJ","LL","Lacute","Lambda","Lcaron","Lcedilla", |
"Lcircle","Lcircumflexbelow","Lcommaaccent","Ldot","Ldotaccent","Ldotbelow", |
"Ldotbelowmacron","Liwnarmenian","Lj","Ljecyrillic","Llinebelow","Lmonospace", |
"Lslash","Lslashsmall","Lsmall","M","MBsquare","Macron","Macronsmall", |
"Macute","Mcircle","Mdotaccent","Mdotbelow","Menarmenian","Mmonospace", |
"Msmall","Mturned","Mu","N","NJ","Nacute","Ncaron","Ncedilla","Ncircle", |
"Ncircumflexbelow","Ncommaaccent","Ndotaccent","Ndotbelow","Nhookleft", |
"Nineroman","Nj","Njecyrillic","Nlinebelow","Nmonospace","Nowarmenian", |
"Nsmall","Ntilde","Ntildesmall","Nu","O","OE","OEsmall","Oacute", |
"Oacutesmall","Obarredcyrillic","Obarreddieresiscyrillic","Obreve","Ocaron", |
"Ocenteredtilde","Ocircle","Ocircumflex","Ocircumflexacute", |
"Ocircumflexdotbelow","Ocircumflexgrave","Ocircumflexhookabove", |
"Ocircumflexsmall","Ocircumflextilde","Ocyrillic","Odblacute","Odblgrave", |
"Odieresis","Odieresiscyrillic","Odieresissmall","Odotbelow","Ogoneksmall", |
"Ograve","Ogravesmall","Oharmenian","Ohm","Ohookabove","Ohorn","Ohornacute", |
"Ohorndotbelow","Ohorngrave","Ohornhookabove","Ohorntilde","Ohungarumlaut", |
"Oi","Oinvertedbreve","Omacron","Omacronacute","Omacrongrave","Omega", |
"Omegacyrillic","Omegagreek","Omegaroundcyrillic","Omegatitlocyrillic", |
"Omegatonos","Omicron","Omicrontonos","Omonospace","Oneroman","Oogonek", |
"Oogonekmacron","Oopen","Oslash","Oslashacute","Oslashsmall","Osmall", |
"Ostrokeacute","Otcyrillic","Otilde","Otildeacute","Otildedieresis", |
"Otildesmall","P","Pacute","Pcircle","Pdotaccent","Pecyrillic","Peharmenian", |
"Pemiddlehookcyrillic","Phi","Phook","Pi","Piwrarmenian","Pmonospace","Psi", |
"Psicyrillic","Psmall","Q","Qcircle","Qmonospace","Qsmall","R","Raarmenian", |
"Racute","Rcaron","Rcedilla","Rcircle","Rcommaaccent","Rdblgrave", |
"Rdotaccent","Rdotbelow","Rdotbelowmacron","Reharmenian","Rfraktur","Rho", |
"Ringsmall","Rinvertedbreve","Rlinebelow","Rmonospace","Rsmall", |
"Rsmallinverted","Rsmallinvertedsuperior","S","SF010000","SF020000", |
"SF030000","SF040000","SF050000","SF060000","SF070000","SF080000","SF090000", |
"SF100000","SF110000","SF190000","SF200000","SF210000","SF220000","SF230000", |
"SF240000","SF250000","SF260000","SF270000","SF280000","SF360000","SF370000", |
"SF380000","SF390000","SF400000","SF410000","SF420000","SF430000","SF440000", |
"SF450000","SF460000","SF470000","SF480000","SF490000","SF500000","SF510000", |
"SF520000","SF530000","SF540000","Sacute","Sacutedotaccent","Sampigreek", |
"Scaron","Scarondotaccent","Scaronsmall","Scedilla","Schwa","Schwacyrillic", |
"Schwadieresiscyrillic","Scircle","Scircumflex","Scommaaccent","Sdotaccent", |
"Sdotbelow","Sdotbelowdotaccent","Seharmenian","Sevenroman","Shaarmenian", |
"Shacyrillic","Shchacyrillic","Sheicoptic","Shhacyrillic","Shimacoptic", |
"Sigma","Sixroman","Smonospace","Softsigncyrillic","Ssmall","Stigmagreek","T", |
"Tau","Tbar","Tcaron","Tcedilla","Tcircle","Tcircumflexbelow","Tcommaaccent", |
"Tdotaccent","Tdotbelow","Tecyrillic","Tedescendercyrillic","Tenroman", |
"Tetsecyrillic","Theta","Thook","Thorn","Thornsmall","Threeroman", |
"Tildesmall","Tiwnarmenian","Tlinebelow","Tmonospace","Toarmenian","Tonefive", |
"Tonesix","Tonetwo","Tretroflexhook","Tsecyrillic","Tshecyrillic","Tsmall", |
"Twelveroman","Tworoman","U","Uacute","Uacutesmall","Ubreve","Ucaron", |
"Ucircle","Ucircumflex","Ucircumflexbelow","Ucircumflexsmall","Ucyrillic", |
"Udblacute","Udblgrave","Udieresis","Udieresisacute","Udieresisbelow", |
"Udieresiscaron","Udieresiscyrillic","Udieresisgrave","Udieresismacron", |
"Udieresissmall","Udotbelow","Ugrave","Ugravesmall","Uhookabove","Uhorn", |
"Uhornacute","Uhorndotbelow","Uhorngrave","Uhornhookabove","Uhorntilde", |
"Uhungarumlaut","Uhungarumlautcyrillic","Uinvertedbreve","Ukcyrillic", |
"Umacron","Umacroncyrillic","Umacrondieresis","Umonospace","Uogonek", |
"Upsilon","Upsilon1","Upsilonacutehooksymbolgreek","Upsilonafrican", |
"Upsilondieresis","Upsilondieresishooksymbolgreek","Upsilonhooksymbol", |
"Upsilontonos","Uring","Ushortcyrillic","Usmall","Ustraightcyrillic", |
"Ustraightstrokecyrillic","Utilde","Utildeacute","Utildebelow","V","Vcircle", |
"Vdotbelow","Vecyrillic","Vewarmenian","Vhook","Vmonospace","Voarmenian", |
"Vsmall","Vtilde","W","Wacute","Wcircle","Wcircumflex","Wdieresis", |
"Wdotaccent","Wdotbelow","Wgrave","Wmonospace","Wsmall","X","Xcircle", |
"Xdieresis","Xdotaccent","Xeharmenian","Xi","Xmonospace","Xsmall","Y", |
"Yacute","Yacutesmall","Yatcyrillic","Ycircle","Ycircumflex","Ydieresis", |
"Ydieresissmall","Ydotaccent","Ydotbelow","Yericyrillic", |
"Yerudieresiscyrillic","Ygrave","Yhook","Yhookabove","Yiarmenian", |
"Yicyrillic","Yiwnarmenian","Ymonospace","Ysmall","Ytilde","Yusbigcyrillic", |
"Yusbigiotifiedcyrillic","Yuslittlecyrillic","Yuslittleiotifiedcyrillic","Z", |
"Zaarmenian","Zacute","Zcaron","Zcaronsmall","Zcircle","Zcircumflex","Zdot", |
"Zdotaccent","Zdotbelow","Zecyrillic","Zedescendercyrillic", |
"Zedieresiscyrillic","Zeta","Zhearmenian","Zhebrevecyrillic","Zhecyrillic", |
"Zhedescendercyrillic","Zhedieresiscyrillic","Zlinebelow","Zmonospace", |
"Zsmall","Zstroke","a","aabengali","aacute","aadeva","aagujarati", |
"aagurmukhi","aamatragurmukhi","aarusquare","aavowelsignbengali", |
"aavowelsigndeva","aavowelsigngujarati","abbreviationmarkarmenian", |
"abbreviationsigndeva","abengali","abopomofo","abreve","abreveacute", |
"abrevecyrillic","abrevedotbelow","abrevegrave","abrevehookabove", |
"abrevetilde","acaron","acircle","acircumflex","acircumflexacute", |
"acircumflexdotbelow","acircumflexgrave","acircumflexhookabove", |
"acircumflextilde","acute","acutebelowcmb","acutecmb","acutecomb","acutedeva", |
"acutelowmod","acutetonecmb","acyrillic","adblgrave","addakgurmukhi","adeva", |
"adieresis","adieresiscyrillic","adieresismacron","adotbelow","adotmacron", |
"ae","aeacute","aekorean","aemacron","afii00208","afii08941","afii10017", |
"afii10018","afii10019","afii10020","afii10021","afii10022","afii10023", |
"afii10024","afii10025","afii10026","afii10027","afii10028","afii10029", |
"afii10030","afii10031","afii10032","afii10033","afii10034","afii10035", |
"afii10036","afii10037","afii10038","afii10039","afii10040","afii10041", |
"afii10042","afii10043","afii10044","afii10045","afii10046","afii10047", |
"afii10048","afii10049","afii10050","afii10051","afii10052","afii10053", |
"afii10054","afii10055","afii10056","afii10057","afii10058","afii10059", |
"afii10060","afii10061","afii10062","afii10063","afii10064","afii10065", |
"afii10066","afii10067","afii10068","afii10069","afii10070","afii10071", |
"afii10072","afii10073","afii10074","afii10075","afii10076","afii10077", |
"afii10078","afii10079","afii10080","afii10081","afii10082","afii10083", |
"afii10084","afii10085","afii10086","afii10087","afii10088","afii10089", |
"afii10090","afii10091","afii10092","afii10093","afii10094","afii10095", |
"afii10096","afii10097","afii10098","afii10099","afii10100","afii10101", |
"afii10102","afii10103","afii10104","afii10105","afii10106","afii10107", |
"afii10108","afii10109","afii10110","afii10145","afii10146","afii10147", |
"afii10148","afii10192","afii10193","afii10194","afii10195","afii10196", |
"afii10831","afii10832","afii10846","afii299","afii300","afii301","afii57381", |
"afii57388","afii57392","afii57393","afii57394","afii57395","afii57396", |
"afii57397","afii57398","afii57399","afii57400","afii57401","afii57403", |
"afii57407","afii57409","afii57410","afii57411","afii57412","afii57413", |
"afii57414","afii57415","afii57416","afii57417","afii57418","afii57419", |
"afii57420","afii57421","afii57422","afii57423","afii57424","afii57425", |
"afii57426","afii57427","afii57428","afii57429","afii57430","afii57431", |
"afii57432","afii57433","afii57434","afii57440","afii57441","afii57442", |
"afii57443","afii57444","afii57445","afii57446","afii57448","afii57449", |
"afii57450","afii57451","afii57452","afii57453","afii57454","afii57455", |
"afii57456","afii57457","afii57458","afii57470","afii57505","afii57506", |
"afii57507","afii57508","afii57509","afii57511","afii57512","afii57513", |
"afii57514","afii57519","afii57534","afii57636","afii57645","afii57658", |
"afii57664","afii57665","afii57666","afii57667","afii57668","afii57669", |
"afii57670","afii57671","afii57672","afii57673","afii57674","afii57675", |
"afii57676","afii57677","afii57678","afii57679","afii57680","afii57681", |
"afii57682","afii57683","afii57684","afii57685","afii57686","afii57687", |
"afii57688","afii57689","afii57690","afii57694","afii57695","afii57700", |
"afii57705","afii57716","afii57717","afii57718","afii57723","afii57793", |
"afii57794","afii57795","afii57796","afii57797","afii57798","afii57799", |
"afii57800","afii57801","afii57802","afii57803","afii57804","afii57806", |
"afii57807","afii57839","afii57841","afii57842","afii57929","afii61248", |
"afii61289","afii61352","afii61573","afii61574","afii61575","afii61664", |
"afii63167","afii64937","agrave","agujarati","agurmukhi","ahiragana", |
"ahookabove","aibengali","aibopomofo","aideva","aiecyrillic","aigujarati", |
"aigurmukhi","aimatragurmukhi","ainarabic","ainfinalarabic", |
"aininitialarabic","ainmedialarabic","ainvertedbreve","aivowelsignbengali", |
"aivowelsigndeva","aivowelsigngujarati","akatakana","akatakanahalfwidth", |
"akorean","alef","alefarabic","alefdageshhebrew","aleffinalarabic", |
"alefhamzaabovearabic","alefhamzaabovefinalarabic","alefhamzabelowarabic", |
"alefhamzabelowfinalarabic","alefhebrew","aleflamedhebrew", |
"alefmaddaabovearabic","alefmaddaabovefinalarabic","alefmaksuraarabic", |
"alefmaksurafinalarabic","alefmaksurainitialarabic","alefmaksuramedialarabic", |
"alefpatahhebrew","alefqamatshebrew","aleph","allequal","alpha","alphatonos", |
"amacron","amonospace","ampersand","ampersandmonospace","ampersandsmall", |
"amsquare","anbopomofo","angbopomofo","angkhankhuthai","angle", |
"anglebracketleft","anglebracketleftvertical","anglebracketright", |
"anglebracketrightvertical","angleleft","angleright","angstrom","anoteleia", |
"anudattadeva","anusvarabengali","anusvaradeva","anusvaragujarati","aogonek", |
"apaatosquare","aparen","apostrophearmenian","apostrophemod","apple", |
"approaches","approxequal","approxequalorimage","approximatelyequal", |
"araeaekorean","araeakorean","arc","arighthalfring","aring","aringacute", |
"aringbelow","arrowboth","arrowdashdown","arrowdashleft","arrowdashright", |
"arrowdashup","arrowdblboth","arrowdbldown","arrowdblleft","arrowdblright", |
"arrowdblup","arrowdown","arrowdownleft","arrowdownright","arrowdownwhite", |
"arrowheaddownmod","arrowheadleftmod","arrowheadrightmod","arrowheadupmod", |
"arrowhorizex","arrowleft","arrowleftdbl","arrowleftdblstroke", |
"arrowleftoverright","arrowleftwhite","arrowright","arrowrightdblstroke", |
"arrowrightheavy","arrowrightoverleft","arrowrightwhite","arrowtableft", |
"arrowtabright","arrowup","arrowupdn","arrowupdnbse","arrowupdownbase", |
"arrowupleft","arrowupleftofdown","arrowupright","arrowupwhite","arrowvertex", |
"asciicircum","asciicircummonospace","asciitilde","asciitildemonospace", |
"ascript","ascriptturned","asmallhiragana","asmallkatakana", |
"asmallkatakanahalfwidth","asterisk","asteriskaltonearabic","asteriskarabic", |
"asteriskmath","asteriskmonospace","asterisksmall","asterism","asuperior", |
"asymptoticallyequal","at","atilde","atmonospace","atsmall","aturned", |
"aubengali","aubopomofo","audeva","augujarati","augurmukhi", |
"aulengthmarkbengali","aumatragurmukhi","auvowelsignbengali", |
"auvowelsigndeva","auvowelsigngujarati","avagrahadeva","aybarmenian","ayin", |
"ayinaltonehebrew","ayinhebrew","b","babengali","backslash", |
"backslashmonospace","badeva","bagujarati","bagurmukhi","bahiragana", |
"bahtthai","bakatakana","bar","barmonospace","bbopomofo","bcircle", |
"bdotaccent","bdotbelow","beamedsixteenthnotes","because","becyrillic", |
"beharabic","behfinalarabic","behinitialarabic","behiragana", |
"behmedialarabic","behmeeminitialarabic","behmeemisolatedarabic", |
"behnoonfinalarabic","bekatakana","benarmenian","bet","beta", |
"betasymbolgreek","betdagesh","betdageshhebrew","bethebrew","betrafehebrew", |
"bhabengali","bhadeva","bhagujarati","bhagurmukhi","bhook","bihiragana", |
"bikatakana","bilabialclick","bindigurmukhi","birusquare","blackcircle", |
"blackdiamond","blackdownpointingtriangle","blackleftpointingpointer", |
"blackleftpointingtriangle","blacklenticularbracketleft", |
"blacklenticularbracketleftvertical","blacklenticularbracketright", |
"blacklenticularbracketrightvertical","blacklowerlefttriangle", |
"blacklowerrighttriangle","blackrectangle","blackrightpointingpointer", |
"blackrightpointingtriangle","blacksmallsquare","blacksmilingface", |
"blacksquare","blackstar","blackupperlefttriangle","blackupperrighttriangle", |
"blackuppointingsmalltriangle","blackuppointingtriangle","blank","blinebelow", |
"block","bmonospace","bobaimaithai","bohiragana","bokatakana","bparen", |
"bqsquare","braceex","braceleft","braceleftbt","braceleftmid", |
"braceleftmonospace","braceleftsmall","bracelefttp","braceleftvertical", |
"braceright","bracerightbt","bracerightmid","bracerightmonospace", |
"bracerightsmall","bracerighttp","bracerightvertical","bracketleft", |
"bracketleftbt","bracketleftex","bracketleftmonospace","bracketlefttp", |
"bracketright","bracketrightbt","bracketrightex","bracketrightmonospace", |
"bracketrighttp","breve","brevebelowcmb","brevecmb","breveinvertedbelowcmb", |
"breveinvertedcmb","breveinverteddoublecmb","bridgebelowcmb", |
"bridgeinvertedbelowcmb","brokenbar","bstroke","bsuperior","btopbar", |
"buhiragana","bukatakana","bullet","bulletinverse","bulletoperator", |
"bullseye","c","caarmenian","cabengali","cacute","cadeva","cagujarati", |
"cagurmukhi","calsquare","candrabindubengali","candrabinducmb", |
"candrabindudeva","candrabindugujarati","capslock","careof","caron", |
"caronbelowcmb","caroncmb","carriagereturn","cbopomofo","ccaron","ccedilla", |
"ccedillaacute","ccircle","ccircumflex","ccurl","cdot","cdotaccent", |
"cdsquare","cedilla","cedillacmb","cent","centigrade","centinferior", |
"centmonospace","centoldstyle","centsuperior","chaarmenian","chabengali", |
"chadeva","chagujarati","chagurmukhi","chbopomofo","cheabkhasiancyrillic", |
"checkmark","checyrillic","chedescenderabkhasiancyrillic", |
"chedescendercyrillic","chedieresiscyrillic","cheharmenian", |
"chekhakassiancyrillic","cheverticalstrokecyrillic","chi", |
"chieuchacirclekorean","chieuchaparenkorean","chieuchcirclekorean", |
"chieuchkorean","chieuchparenkorean","chochangthai","chochanthai", |
"chochingthai","chochoethai","chook","cieucacirclekorean","cieucaparenkorean", |
"cieuccirclekorean","cieuckorean","cieucparenkorean","cieucuparenkorean", |
"circle","circlemultiply","circleot","circleplus","circlepostalmark", |
"circlewithlefthalfblack","circlewithrighthalfblack","circumflex", |
"circumflexbelowcmb","circumflexcmb","clear","clickalveolar","clickdental", |
"clicklateral","clickretroflex","club","clubsuitblack","clubsuitwhite", |
"cmcubedsquare","cmonospace","cmsquaredsquare","coarmenian","colon", |
"colonmonetary","colonmonospace","colonsign","colonsmall", |
"colontriangularhalfmod","colontriangularmod","comma","commaabovecmb", |
"commaaboverightcmb","commaaccent","commaarabic","commaarmenian", |
"commainferior","commamonospace","commareversedabovecmb","commareversedmod", |
"commasmall","commasuperior","commaturnedabovecmb","commaturnedmod","compass", |
"congruent","contourintegral","control","controlACK","controlBEL","controlBS", |
"controlCAN","controlCR","controlDC1","controlDC2","controlDC3","controlDC4", |
"controlDEL","controlDLE","controlEM","controlENQ","controlEOT","controlESC", |
"controlETB","controlETX","controlFF","controlFS","controlGS","controlHT", |
"controlLF","controlNAK","controlRS","controlSI","controlSO","controlSOT", |
"controlSTX","controlSUB","controlSYN","controlUS","controlVT","copyright", |
"copyrightsans","copyrightserif","cornerbracketleft", |
"cornerbracketlefthalfwidth","cornerbracketleftvertical","cornerbracketright", |
"cornerbracketrighthalfwidth","cornerbracketrightvertical", |
"corporationsquare","cosquare","coverkgsquare","cparen","cruzeiro", |
"cstretched","curlyand","curlyor","currency","cyrBreve","cyrFlex","cyrbreve", |
"cyrflex","d","daarmenian","dabengali","dadarabic","dadeva","dadfinalarabic", |
"dadinitialarabic","dadmedialarabic","dagesh","dageshhebrew","dagger", |
"daggerdbl","dagujarati","dagurmukhi","dahiragana","dakatakana","dalarabic", |
"dalet","daletdagesh","daletdageshhebrew","dalethatafpatah", |
"dalethatafpatahhebrew","dalethatafsegol","dalethatafsegolhebrew", |
"dalethebrew","dalethiriq","dalethiriqhebrew","daletholam","daletholamhebrew", |
"daletpatah","daletpatahhebrew","daletqamats","daletqamatshebrew", |
"daletqubuts","daletqubutshebrew","daletsegol","daletsegolhebrew", |
"daletsheva","daletshevahebrew","dalettsere","dalettserehebrew", |
"dalfinalarabic","dammaarabic","dammalowarabic","dammatanaltonearabic", |
"dammatanarabic","danda","dargahebrew","dargalefthebrew", |
"dasiapneumatacyrilliccmb","dblGrave","dblanglebracketleft", |
"dblanglebracketleftvertical","dblanglebracketright", |
"dblanglebracketrightvertical","dblarchinvertedbelowcmb","dblarrowleft", |
"dblarrowright","dbldanda","dblgrave","dblgravecmb","dblintegral", |
"dbllowline","dbllowlinecmb","dbloverlinecmb","dblprimemod","dblverticalbar", |
"dblverticallineabovecmb","dbopomofo","dbsquare","dcaron","dcedilla", |
"dcircle","dcircumflexbelow","dcroat","ddabengali","ddadeva","ddagujarati", |
"ddagurmukhi","ddalarabic","ddalfinalarabic","dddhadeva","ddhabengali", |
"ddhadeva","ddhagujarati","ddhagurmukhi","ddotaccent","ddotbelow", |
"decimalseparatorarabic","decimalseparatorpersian","decyrillic","degree", |
"dehihebrew","dehiragana","deicoptic","dekatakana","deleteleft","deleteright", |
"delta","deltaturned","denominatorminusonenumeratorbengali","dezh", |
"dhabengali","dhadeva","dhagujarati","dhagurmukhi","dhook","dialytikatonos", |
"dialytikatonoscmb","diamond","diamondsuitwhite","dieresis","dieresisacute", |
"dieresisbelowcmb","dieresiscmb","dieresisgrave","dieresistonos","dihiragana", |
"dikatakana","dittomark","divide","divides","divisionslash","djecyrillic", |
"dkshade","dlinebelow","dlsquare","dmacron","dmonospace","dnblock", |
"dochadathai","dodekthai","dohiragana","dokatakana","dollar","dollarinferior", |
"dollarmonospace","dollaroldstyle","dollarsmall","dollarsuperior","dong", |
"dorusquare","dotaccent","dotaccentcmb","dotbelowcmb","dotbelowcomb", |
"dotkatakana","dotlessi","dotlessj","dotlessjstrokehook","dotmath", |
"dottedcircle","doubleyodpatah","doubleyodpatahhebrew","downtackbelowcmb", |
"downtackmod","dparen","dsuperior","dtail","dtopbar","duhiragana", |
"dukatakana","dz","dzaltone","dzcaron","dzcurl","dzeabkhasiancyrillic", |
"dzecyrillic","dzhecyrillic","e","eacute","earth","ebengali","ebopomofo", |
"ebreve","ecandradeva","ecandragujarati","ecandravowelsigndeva", |
"ecandravowelsigngujarati","ecaron","ecedillabreve","echarmenian", |
"echyiwnarmenian","ecircle","ecircumflex","ecircumflexacute", |
"ecircumflexbelow","ecircumflexdotbelow","ecircumflexgrave", |
"ecircumflexhookabove","ecircumflextilde","ecyrillic","edblgrave","edeva", |
"edieresis","edot","edotaccent","edotbelow","eegurmukhi","eematragurmukhi", |
"efcyrillic","egrave","egujarati","eharmenian","ehbopomofo","ehiragana", |
"ehookabove","eibopomofo","eight","eightarabic","eightbengali","eightcircle", |
"eightcircleinversesansserif","eightdeva","eighteencircle","eighteenparen", |
"eighteenperiod","eightgujarati","eightgurmukhi","eighthackarabic", |
"eighthangzhou","eighthnotebeamed","eightideographicparen","eightinferior", |
"eightmonospace","eightoldstyle","eightparen","eightperiod","eightpersian", |
"eightroman","eightsuperior","eightthai","einvertedbreve","eiotifiedcyrillic", |
"ekatakana","ekatakanahalfwidth","ekonkargurmukhi","ekorean","elcyrillic", |
"element","elevencircle","elevenparen","elevenperiod","elevenroman", |
"ellipsis","ellipsisvertical","emacron","emacronacute","emacrongrave", |
"emcyrillic","emdash","emdashvertical","emonospace","emphasismarkarmenian", |
"emptyset","enbopomofo","encyrillic","endash","endashvertical", |
"endescendercyrillic","eng","engbopomofo","enghecyrillic","enhookcyrillic", |
"enspace","eogonek","eokorean","eopen","eopenclosed","eopenreversed", |
"eopenreversedclosed","eopenreversedhook","eparen","epsilon","epsilontonos", |
"equal","equalmonospace","equalsmall","equalsuperior","equivalence", |
"erbopomofo","ercyrillic","ereversed","ereversedcyrillic","escyrillic", |
"esdescendercyrillic","esh","eshcurl","eshortdeva","eshortvowelsigndeva", |
"eshreversedloop","eshsquatreversed","esmallhiragana","esmallkatakana", |
"esmallkatakanahalfwidth","estimated","esuperior","eta","etarmenian", |
"etatonos","eth","etilde","etildebelow","etnahtafoukhhebrew", |
"etnahtafoukhlefthebrew","etnahtahebrew","etnahtalefthebrew","eturned", |
"eukorean","euro","evowelsignbengali","evowelsigndeva","evowelsigngujarati", |
"exclam","exclamarmenian","exclamdbl","exclamdown","exclamdownsmall", |
"exclammonospace","exclamsmall","existential","ezh","ezhcaron","ezhcurl", |
"ezhreversed","ezhtail","f","fadeva","fagurmukhi","fahrenheit","fathaarabic", |
"fathalowarabic","fathatanarabic","fbopomofo","fcircle","fdotaccent", |
"feharabic","feharmenian","fehfinalarabic","fehinitialarabic", |
"fehmedialarabic","feicoptic","female","ff","ffi","ffl","fi","fifteencircle", |
"fifteenparen","fifteenperiod","figuredash","filledbox","filledrect", |
"finalkaf","finalkafdagesh","finalkafdageshhebrew","finalkafhebrew", |
"finalkafqamats","finalkafqamatshebrew","finalkafsheva","finalkafshevahebrew", |
"finalmem","finalmemhebrew","finalnun","finalnunhebrew","finalpe", |
"finalpehebrew","finaltsadi","finaltsadihebrew","firsttonechinese","fisheye", |
"fitacyrillic","five","fivearabic","fivebengali","fivecircle", |
"fivecircleinversesansserif","fivedeva","fiveeighths","fivegujarati", |
"fivegurmukhi","fivehackarabic","fivehangzhou","fiveideographicparen", |
"fiveinferior","fivemonospace","fiveoldstyle","fiveparen","fiveperiod", |
"fivepersian","fiveroman","fivesuperior","fivethai","fl","florin", |
"fmonospace","fmsquare","fofanthai","fofathai","fongmanthai","forall","four", |
"fourarabic","fourbengali","fourcircle","fourcircleinversesansserif", |
"fourdeva","fourgujarati","fourgurmukhi","fourhackarabic","fourhangzhou", |
"fourideographicparen","fourinferior","fourmonospace","fournumeratorbengali", |
"fouroldstyle","fourparen","fourperiod","fourpersian","fourroman", |
"foursuperior","fourteencircle","fourteenparen","fourteenperiod","fourthai", |
"fourthtonechinese","fparen","fraction","franc","g","gabengali","gacute", |
"gadeva","gafarabic","gaffinalarabic","gafinitialarabic","gafmedialarabic", |
"gagujarati","gagurmukhi","gahiragana","gakatakana","gamma","gammalatinsmall", |
"gammasuperior","gangiacoptic","gbopomofo","gbreve","gcaron","gcedilla", |
"gcircle","gcircumflex","gcommaaccent","gdot","gdotaccent","gecyrillic", |
"gehiragana","gekatakana","geometricallyequal","gereshaccenthebrew", |
"gereshhebrew","gereshmuqdamhebrew","germandbls","gershayimaccenthebrew", |
"gershayimhebrew","getamark","ghabengali","ghadarmenian","ghadeva", |
"ghagujarati","ghagurmukhi","ghainarabic","ghainfinalarabic", |
"ghaininitialarabic","ghainmedialarabic","ghemiddlehookcyrillic", |
"ghestrokecyrillic","gheupturncyrillic","ghhadeva","ghhagurmukhi","ghook", |
"ghzsquare","gihiragana","gikatakana","gimarmenian","gimel","gimeldagesh", |
"gimeldageshhebrew","gimelhebrew","gjecyrillic","glottalinvertedstroke", |
"glottalstop","glottalstopinverted","glottalstopmod","glottalstopreversed", |
"glottalstopreversedmod","glottalstopreversedsuperior","glottalstopstroke", |
"glottalstopstrokereversed","gmacron","gmonospace","gohiragana","gokatakana", |
"gparen","gpasquare","gradient","grave","gravebelowcmb","gravecmb", |
"gravecomb","gravedeva","gravelowmod","gravemonospace","gravetonecmb", |
"greater","greaterequal","greaterequalorless","greatermonospace", |
"greaterorequivalent","greaterorless","greateroverequal","greatersmall", |
"gscript","gstroke","guhiragana","guillemotleft","guillemotright", |
"guilsinglleft","guilsinglright","gukatakana","guramusquare","gysquare","h", |
"haabkhasiancyrillic","haaltonearabic","habengali","hadescendercyrillic", |
"hadeva","hagujarati","hagurmukhi","haharabic","hahfinalarabic", |
"hahinitialarabic","hahiragana","hahmedialarabic","haitusquare","hakatakana", |
"hakatakanahalfwidth","halantgurmukhi","hamzaarabic","hamzadammaarabic", |
"hamzadammatanarabic","hamzafathaarabic","hamzafathatanarabic", |
"hamzalowarabic","hamzalowkasraarabic","hamzalowkasratanarabic", |
"hamzasukunarabic","hangulfiller","hardsigncyrillic","harpoonleftbarbup", |
"harpoonrightbarbup","hasquare","hatafpatah","hatafpatah16","hatafpatah23", |
"hatafpatah2f","hatafpatahhebrew","hatafpatahnarrowhebrew", |
"hatafpatahquarterhebrew","hatafpatahwidehebrew","hatafqamats", |
"hatafqamats1b","hatafqamats28","hatafqamats34","hatafqamatshebrew", |
"hatafqamatsnarrowhebrew","hatafqamatsquarterhebrew","hatafqamatswidehebrew", |
"hatafsegol","hatafsegol17","hatafsegol24","hatafsegol30","hatafsegolhebrew", |
"hatafsegolnarrowhebrew","hatafsegolquarterhebrew","hatafsegolwidehebrew", |
"hbar","hbopomofo","hbrevebelow","hcedilla","hcircle","hcircumflex", |
"hdieresis","hdotaccent","hdotbelow","he","heart","heartsuitblack", |
"heartsuitwhite","hedagesh","hedageshhebrew","hehaltonearabic","heharabic", |
"hehebrew","hehfinalaltonearabic","hehfinalalttwoarabic","hehfinalarabic", |
"hehhamzaabovefinalarabic","hehhamzaaboveisolatedarabic", |
"hehinitialaltonearabic","hehinitialarabic","hehiragana", |
"hehmedialaltonearabic","hehmedialarabic","heiseierasquare","hekatakana", |
"hekatakanahalfwidth","hekutaarusquare","henghook","herutusquare","het", |
"hethebrew","hhook","hhooksuperior","hieuhacirclekorean","hieuhaparenkorean", |
"hieuhcirclekorean","hieuhkorean","hieuhparenkorean","hihiragana", |
"hikatakana","hikatakanahalfwidth","hiriq","hiriq14","hiriq21","hiriq2d", |
"hiriqhebrew","hiriqnarrowhebrew","hiriqquarterhebrew","hiriqwidehebrew", |
"hlinebelow","hmonospace","hoarmenian","hohipthai","hohiragana","hokatakana", |
"hokatakanahalfwidth","holam","holam19","holam26","holam32","holamhebrew", |
"holamnarrowhebrew","holamquarterhebrew","holamwidehebrew","honokhukthai", |
"hookabovecomb","hookcmb","hookpalatalizedbelowcmb","hookretroflexbelowcmb", |
"hoonsquare","horicoptic","horizontalbar","horncmb","hotsprings","house", |
"hparen","hsuperior","hturned","huhiragana","huiitosquare","hukatakana", |
"hukatakanahalfwidth","hungarumlaut","hungarumlautcmb","hv","hyphen", |
"hypheninferior","hyphenmonospace","hyphensmall","hyphensuperior","hyphentwo", |
"i","iacute","iacyrillic","ibengali","ibopomofo","ibreve","icaron","icircle", |
"icircumflex","icyrillic","idblgrave","ideographearthcircle", |
"ideographfirecircle","ideographicallianceparen","ideographiccallparen", |
"ideographiccentrecircle","ideographicclose","ideographiccomma", |
"ideographiccommaleft","ideographiccongratulationparen", |
"ideographiccorrectcircle","ideographicearthparen", |
"ideographicenterpriseparen","ideographicexcellentcircle", |
"ideographicfestivalparen","ideographicfinancialcircle", |
"ideographicfinancialparen","ideographicfireparen","ideographichaveparen", |
"ideographichighcircle","ideographiciterationmark","ideographiclaborcircle", |
"ideographiclaborparen","ideographicleftcircle","ideographiclowcircle", |
"ideographicmedicinecircle","ideographicmetalparen","ideographicmoonparen", |
"ideographicnameparen","ideographicperiod","ideographicprintcircle", |
"ideographicreachparen","ideographicrepresentparen", |
"ideographicresourceparen","ideographicrightcircle","ideographicsecretcircle", |
"ideographicselfparen","ideographicsocietyparen","ideographicspace", |
"ideographicspecialparen","ideographicstockparen","ideographicstudyparen", |
"ideographicsunparen","ideographicsuperviseparen","ideographicwaterparen", |
"ideographicwoodparen","ideographiczero","ideographmetalcircle", |
"ideographmooncircle","ideographnamecircle","ideographsuncircle", |
"ideographwatercircle","ideographwoodcircle","ideva","idieresis", |
"idieresisacute","idieresiscyrillic","idotbelow","iebrevecyrillic", |
"iecyrillic","ieungacirclekorean","ieungaparenkorean","ieungcirclekorean", |
"ieungkorean","ieungparenkorean","igrave","igujarati","igurmukhi","ihiragana", |
"ihookabove","iibengali","iicyrillic","iideva","iigujarati","iigurmukhi", |
"iimatragurmukhi","iinvertedbreve","iishortcyrillic","iivowelsignbengali", |
"iivowelsigndeva","iivowelsigngujarati","ij","ikatakana","ikatakanahalfwidth", |
"ikorean","ilde","iluyhebrew","imacron","imacroncyrillic", |
"imageorapproximatelyequal","imatragurmukhi","imonospace","increment", |
"infinity","iniarmenian","integral","integralbottom","integralbt", |
"integralex","integraltop","integraltp","intersection","intisquare", |
"invbullet","invcircle","invsmileface","iocyrillic","iogonek","iota", |
"iotadieresis","iotadieresistonos","iotalatin","iotatonos","iparen", |
"irigurmukhi","ismallhiragana","ismallkatakana","ismallkatakanahalfwidth", |
"issharbengali","istroke","isuperior","iterationhiragana","iterationkatakana", |
"itilde","itildebelow","iubopomofo","iucyrillic","ivowelsignbengali", |
"ivowelsigndeva","ivowelsigngujarati","izhitsacyrillic", |
"izhitsadblgravecyrillic","j","jaarmenian","jabengali","jadeva","jagujarati", |
"jagurmukhi","jbopomofo","jcaron","jcircle","jcircumflex","jcrossedtail", |
"jdotlessstroke","jecyrillic","jeemarabic","jeemfinalarabic", |
"jeeminitialarabic","jeemmedialarabic","jeharabic","jehfinalarabic", |
"jhabengali","jhadeva","jhagujarati","jhagurmukhi","jheharmenian","jis", |
"jmonospace","jparen","jsuperior","k","kabashkircyrillic","kabengali", |
"kacute","kacyrillic","kadescendercyrillic","kadeva","kaf","kafarabic", |
"kafdagesh","kafdageshhebrew","kaffinalarabic","kafhebrew","kafinitialarabic", |
"kafmedialarabic","kafrafehebrew","kagujarati","kagurmukhi","kahiragana", |
"kahookcyrillic","kakatakana","kakatakanahalfwidth","kappa", |
"kappasymbolgreek","kapyeounmieumkorean","kapyeounphieuphkorean", |
"kapyeounpieupkorean","kapyeounssangpieupkorean","karoriisquare", |
"kashidaautoarabic","kashidaautonosidebearingarabic","kasmallkatakana", |
"kasquare","kasraarabic","kasratanarabic","kastrokecyrillic", |
"katahiraprolongmarkhalfwidth","kaverticalstrokecyrillic","kbopomofo", |
"kcalsquare","kcaron","kcedilla","kcircle","kcommaaccent","kdotbelow", |
"keharmenian","kehiragana","kekatakana","kekatakanahalfwidth","kenarmenian", |
"kesmallkatakana","kgreenlandic","khabengali","khacyrillic","khadeva", |
"khagujarati","khagurmukhi","khaharabic","khahfinalarabic", |
"khahinitialarabic","khahmedialarabic","kheicoptic","khhadeva","khhagurmukhi", |
"khieukhacirclekorean","khieukhaparenkorean","khieukhcirclekorean", |
"khieukhkorean","khieukhparenkorean","khokhaithai","khokhonthai", |
"khokhuatthai","khokhwaithai","khomutthai","khook","khorakhangthai", |
"khzsquare","kihiragana","kikatakana","kikatakanahalfwidth", |
"kiroguramusquare","kiromeetorusquare","kirosquare","kiyeokacirclekorean", |
"kiyeokaparenkorean","kiyeokcirclekorean","kiyeokkorean","kiyeokparenkorean", |
"kiyeoksioskorean","kjecyrillic","klinebelow","klsquare","kmcubedsquare", |
"kmonospace","kmsquaredsquare","kohiragana","kohmsquare","kokaithai", |
"kokatakana","kokatakanahalfwidth","kooposquare","koppacyrillic", |
"koreanstandardsymbol","koroniscmb","kparen","kpasquare","ksicyrillic", |
"ktsquare","kturned","kuhiragana","kukatakana","kukatakanahalfwidth", |
"kvsquare","kwsquare","l","labengali","lacute","ladeva","lagujarati", |
"lagurmukhi","lakkhangyaothai","lamaleffinalarabic", |
"lamalefhamzaabovefinalarabic","lamalefhamzaaboveisolatedarabic", |
"lamalefhamzabelowfinalarabic","lamalefhamzabelowisolatedarabic", |
"lamalefisolatedarabic","lamalefmaddaabovefinalarabic", |
"lamalefmaddaaboveisolatedarabic","lamarabic","lambda","lambdastroke","lamed", |
"lameddagesh","lameddageshhebrew","lamedhebrew","lamedholam", |
"lamedholamdagesh","lamedholamdageshhebrew","lamedholamhebrew", |
"lamfinalarabic","lamhahinitialarabic","laminitialarabic", |
"lamjeeminitialarabic","lamkhahinitialarabic","lamlamhehisolatedarabic", |
"lammedialarabic","lammeemhahinitialarabic","lammeeminitialarabic", |
"lammeemjeeminitialarabic","lammeemkhahinitialarabic","largecircle","lbar", |
"lbelt","lbopomofo","lcaron","lcedilla","lcircle","lcircumflexbelow", |
"lcommaaccent","ldot","ldotaccent","ldotbelow","ldotbelowmacron", |
"leftangleabovecmb","lefttackbelowcmb","less","lessequal", |
"lessequalorgreater","lessmonospace","lessorequivalent","lessorgreater", |
"lessoverequal","lesssmall","lezh","lfblock","lhookretroflex","lira", |
"liwnarmenian","lj","ljecyrillic","ll","lladeva","llagujarati","llinebelow", |
"llladeva","llvocalicbengali","llvocalicdeva","llvocalicvowelsignbengali", |
"llvocalicvowelsigndeva","lmiddletilde","lmonospace","lmsquare","lochulathai", |
"logicaland","logicalnot","logicalnotreversed","logicalor","lolingthai", |
"longs","lowlinecenterline","lowlinecmb","lowlinedashed","lozenge","lparen", |
"lslash","lsquare","lsuperior","ltshade","luthai","lvocalicbengali", |
"lvocalicdeva","lvocalicvowelsignbengali","lvocalicvowelsigndeva","lxsquare", |
"m","mabengali","macron","macronbelowcmb","macroncmb","macronlowmod", |
"macronmonospace","macute","madeva","magujarati","magurmukhi", |
"mahapakhhebrew","mahapakhlefthebrew","mahiragana","maichattawalowleftthai", |
"maichattawalowrightthai","maichattawathai","maichattawaupperleftthai", |
"maieklowleftthai","maieklowrightthai","maiekthai","maiekupperleftthai", |
"maihanakatleftthai","maihanakatthai","maitaikhuleftthai","maitaikhuthai", |
"maitholowleftthai","maitholowrightthai","maithothai","maithoupperleftthai", |
"maitrilowleftthai","maitrilowrightthai","maitrithai","maitriupperleftthai", |
"maiyamokthai","makatakana","makatakanahalfwidth","male","mansyonsquare", |
"maqafhebrew","mars","masoracirclehebrew","masquare","mbopomofo","mbsquare", |
"mcircle","mcubedsquare","mdotaccent","mdotbelow","meemarabic", |
"meemfinalarabic","meeminitialarabic","meemmedialarabic", |
"meemmeeminitialarabic","meemmeemisolatedarabic","meetorusquare","mehiragana", |
"meizierasquare","mekatakana","mekatakanahalfwidth","mem","memdagesh", |
"memdageshhebrew","memhebrew","menarmenian","merkhahebrew", |
"merkhakefulahebrew","merkhakefulalefthebrew","merkhalefthebrew","mhook", |
"mhzsquare","middledotkatakanahalfwidth","middot","mieumacirclekorean", |
"mieumaparenkorean","mieumcirclekorean","mieumkorean","mieumpansioskorean", |
"mieumparenkorean","mieumpieupkorean","mieumsioskorean","mihiragana", |
"mikatakana","mikatakanahalfwidth","minus","minusbelowcmb","minuscircle", |
"minusmod","minusplus","minute","miribaarusquare","mirisquare", |
"mlonglegturned","mlsquare","mmcubedsquare","mmonospace","mmsquaredsquare", |
"mohiragana","mohmsquare","mokatakana","mokatakanahalfwidth","molsquare", |
"momathai","moverssquare","moverssquaredsquare","mparen","mpasquare", |
"mssquare","msuperior","mturned","mu","mu1","muasquare","muchgreater", |
"muchless","mufsquare","mugreek","mugsquare","muhiragana","mukatakana", |
"mukatakanahalfwidth","mulsquare","multiply","mumsquare","munahhebrew", |
"munahlefthebrew","musicalnote","musicalnotedbl","musicflatsign", |
"musicsharpsign","mussquare","muvsquare","muwsquare","mvmegasquare", |
"mvsquare","mwmegasquare","mwsquare","n","nabengali","nabla","nacute", |
"nadeva","nagujarati","nagurmukhi","nahiragana","nakatakana", |
"nakatakanahalfwidth","napostrophe","nasquare","nbopomofo","nbspace","ncaron", |
"ncedilla","ncircle","ncircumflexbelow","ncommaaccent","ndotaccent", |
"ndotbelow","nehiragana","nekatakana","nekatakanahalfwidth","newsheqelsign", |
"nfsquare","ngabengali","ngadeva","ngagujarati","ngagurmukhi","ngonguthai", |
"nhiragana","nhookleft","nhookretroflex","nieunacirclekorean", |
"nieunaparenkorean","nieuncieuckorean","nieuncirclekorean","nieunhieuhkorean", |
"nieunkorean","nieunpansioskorean","nieunparenkorean","nieunsioskorean", |
"nieuntikeutkorean","nihiragana","nikatakana","nikatakanahalfwidth", |
"nikhahitleftthai","nikhahitthai","nine","ninearabic","ninebengali", |
"ninecircle","ninecircleinversesansserif","ninedeva","ninegujarati", |
"ninegurmukhi","ninehackarabic","ninehangzhou","nineideographicparen", |
"nineinferior","ninemonospace","nineoldstyle","nineparen","nineperiod", |
"ninepersian","nineroman","ninesuperior","nineteencircle","nineteenparen", |
"nineteenperiod","ninethai","nj","njecyrillic","nkatakana", |
"nkatakanahalfwidth","nlegrightlong","nlinebelow","nmonospace","nmsquare", |
"nnabengali","nnadeva","nnagujarati","nnagurmukhi","nnnadeva","nohiragana", |
"nokatakana","nokatakanahalfwidth","nonbreakingspace","nonenthai","nonuthai", |
"noonarabic","noonfinalarabic","noonghunnaarabic","noonghunnafinalarabic", |
"noonhehinitialarabic","nooninitialarabic","noonjeeminitialarabic", |
"noonjeemisolatedarabic","noonmedialarabic","noonmeeminitialarabic", |
"noonmeemisolatedarabic","noonnoonfinalarabic","notcontains","notelement", |
"notelementof","notequal","notgreater","notgreaternorequal", |
"notgreaternorless","notidentical","notless","notlessnorequal","notparallel", |
"notprecedes","notsubset","notsucceeds","notsuperset","nowarmenian","nparen", |
"nssquare","nsuperior","ntilde","nu","nuhiragana","nukatakana", |
"nukatakanahalfwidth","nuktabengali","nuktadeva","nuktagujarati", |
"nuktagurmukhi","numbersign","numbersignmonospace","numbersignsmall", |
"numeralsigngreek","numeralsignlowergreek","numero","nun","nundagesh", |
"nundageshhebrew","nunhebrew","nvsquare","nwsquare","nyabengali","nyadeva", |
"nyagujarati","nyagurmukhi","o","oacute","oangthai","obarred", |
"obarredcyrillic","obarreddieresiscyrillic","obengali","obopomofo","obreve", |
"ocandradeva","ocandragujarati","ocandravowelsigndeva", |
"ocandravowelsigngujarati","ocaron","ocircle","ocircumflex", |
"ocircumflexacute","ocircumflexdotbelow","ocircumflexgrave", |
"ocircumflexhookabove","ocircumflextilde","ocyrillic","odblacute","odblgrave", |
"odeva","odieresis","odieresiscyrillic","odotbelow","oe","oekorean","ogonek", |
"ogonekcmb","ograve","ogujarati","oharmenian","ohiragana","ohookabove", |
"ohorn","ohornacute","ohorndotbelow","ohorngrave","ohornhookabove", |
"ohorntilde","ohungarumlaut","oi","oinvertedbreve","okatakana", |
"okatakanahalfwidth","okorean","olehebrew","omacron","omacronacute", |
"omacrongrave","omdeva","omega","omega1","omegacyrillic","omegalatinclosed", |
"omegaroundcyrillic","omegatitlocyrillic","omegatonos","omgujarati","omicron", |
"omicrontonos","omonospace","one","onearabic","onebengali","onecircle", |
"onecircleinversesansserif","onedeva","onedotenleader","oneeighth", |
"onefitted","onegujarati","onegurmukhi","onehackarabic","onehalf", |
"onehangzhou","oneideographicparen","oneinferior","onemonospace", |
"onenumeratorbengali","oneoldstyle","oneparen","oneperiod","onepersian", |
"onequarter","oneroman","onesuperior","onethai","onethird","oogonek", |
"oogonekmacron","oogurmukhi","oomatragurmukhi","oopen","oparen","openbullet", |
"option","ordfeminine","ordmasculine","orthogonal","oshortdeva", |
"oshortvowelsigndeva","oslash","oslashacute","osmallhiragana", |
"osmallkatakana","osmallkatakanahalfwidth","ostrokeacute","osuperior", |
"otcyrillic","otilde","otildeacute","otildedieresis","oubopomofo","overline", |
"overlinecenterline","overlinecmb","overlinedashed","overlinedblwavy", |
"overlinewavy","overscore","ovowelsignbengali","ovowelsigndeva", |
"ovowelsigngujarati","p","paampssquare","paasentosquare","pabengali","pacute", |
"padeva","pagedown","pageup","pagujarati","pagurmukhi","pahiragana", |
"paiyannoithai","pakatakana","palatalizationcyrilliccmb","palochkacyrillic", |
"pansioskorean","paragraph","parallel","parenleft","parenleftaltonearabic", |
"parenleftbt","parenleftex","parenleftinferior","parenleftmonospace", |
"parenleftsmall","parenleftsuperior","parenlefttp","parenleftvertical", |
"parenright","parenrightaltonearabic","parenrightbt","parenrightex", |
"parenrightinferior","parenrightmonospace","parenrightsmall", |
"parenrightsuperior","parenrighttp","parenrightvertical","partialdiff", |
"paseqhebrew","pashtahebrew","pasquare","patah","patah11","patah1d","patah2a", |
"patahhebrew","patahnarrowhebrew","patahquarterhebrew","patahwidehebrew", |
"pazerhebrew","pbopomofo","pcircle","pdotaccent","pe","pecyrillic","pedagesh", |
"pedageshhebrew","peezisquare","pefinaldageshhebrew","peharabic", |
"peharmenian","pehebrew","pehfinalarabic","pehinitialarabic","pehiragana", |
"pehmedialarabic","pekatakana","pemiddlehookcyrillic","perafehebrew", |
"percent","percentarabic","percentmonospace","percentsmall","period", |
"periodarmenian","periodcentered","periodhalfwidth","periodinferior", |
"periodmonospace","periodsmall","periodsuperior","perispomenigreekcmb", |
"perpendicular","perthousand","peseta","pfsquare","phabengali","phadeva", |
"phagujarati","phagurmukhi","phi","phi1","phieuphacirclekorean", |
"phieuphaparenkorean","phieuphcirclekorean","phieuphkorean", |
"phieuphparenkorean","philatin","phinthuthai","phisymbolgreek","phook", |
"phophanthai","phophungthai","phosamphaothai","pi","pieupacirclekorean", |
"pieupaparenkorean","pieupcieuckorean","pieupcirclekorean", |
"pieupkiyeokkorean","pieupkorean","pieupparenkorean","pieupsioskiyeokkorean", |
"pieupsioskorean","pieupsiostikeutkorean","pieupthieuthkorean", |
"pieuptikeutkorean","pihiragana","pikatakana","pisymbolgreek","piwrarmenian", |
"plus","plusbelowcmb","pluscircle","plusminus","plusmod","plusmonospace", |
"plussmall","plussuperior","pmonospace","pmsquare","pohiragana", |
"pointingindexdownwhite","pointingindexleftwhite","pointingindexrightwhite", |
"pointingindexupwhite","pokatakana","poplathai","postalmark","postalmarkface", |
"pparen","precedes","prescription","primemod","primereversed","product", |
"projective","prolongedkana","propellor","propersubset","propersuperset", |
"proportion","proportional","psi","psicyrillic","psilipneumatacyrilliccmb", |
"pssquare","puhiragana","pukatakana","pvsquare","pwsquare","q","qadeva", |
"qadmahebrew","qafarabic","qaffinalarabic","qafinitialarabic", |
"qafmedialarabic","qamats","qamats10","qamats1a","qamats1c","qamats27", |
"qamats29","qamats33","qamatsde","qamatshebrew","qamatsnarrowhebrew", |
"qamatsqatanhebrew","qamatsqatannarrowhebrew","qamatsqatanquarterhebrew", |
"qamatsqatanwidehebrew","qamatsquarterhebrew","qamatswidehebrew", |
"qarneyparahebrew","qbopomofo","qcircle","qhook","qmonospace","qof", |
"qofdagesh","qofdageshhebrew","qofhatafpatah","qofhatafpatahhebrew", |
"qofhatafsegol","qofhatafsegolhebrew","qofhebrew","qofhiriq","qofhiriqhebrew", |
"qofholam","qofholamhebrew","qofpatah","qofpatahhebrew","qofqamats", |
"qofqamatshebrew","qofqubuts","qofqubutshebrew","qofsegol","qofsegolhebrew", |
"qofsheva","qofshevahebrew","qoftsere","qoftserehebrew","qparen", |
"quarternote","qubuts","qubuts18","qubuts25","qubuts31","qubutshebrew", |
"qubutsnarrowhebrew","qubutsquarterhebrew","qubutswidehebrew","question", |
"questionarabic","questionarmenian","questiondown","questiondownsmall", |
"questiongreek","questionmonospace","questionsmall","quotedbl","quotedblbase", |
"quotedblleft","quotedblmonospace","quotedblprime","quotedblprimereversed", |
"quotedblright","quoteleft","quoteleftreversed","quotereversed","quoteright", |
"quoterightn","quotesinglbase","quotesingle","quotesinglemonospace","r", |
"raarmenian","rabengali","racute","radeva","radical","radicalex", |
"radoverssquare","radoverssquaredsquare","radsquare","rafe","rafehebrew", |
"ragujarati","ragurmukhi","rahiragana","rakatakana","rakatakanahalfwidth", |
"ralowerdiagonalbengali","ramiddlediagonalbengali","ramshorn","ratio", |
"rbopomofo","rcaron","rcedilla","rcircle","rcommaaccent","rdblgrave", |
"rdotaccent","rdotbelow","rdotbelowmacron","referencemark","reflexsubset", |
"reflexsuperset","registered","registersans","registerserif","reharabic", |
"reharmenian","rehfinalarabic","rehiragana","rehyehaleflamarabic", |
"rekatakana","rekatakanahalfwidth","resh","reshdageshhebrew","reshhatafpatah", |
"reshhatafpatahhebrew","reshhatafsegol","reshhatafsegolhebrew","reshhebrew", |
"reshhiriq","reshhiriqhebrew","reshholam","reshholamhebrew","reshpatah", |
"reshpatahhebrew","reshqamats","reshqamatshebrew","reshqubuts", |
"reshqubutshebrew","reshsegol","reshsegolhebrew","reshsheva", |
"reshshevahebrew","reshtsere","reshtserehebrew","reversedtilde","reviahebrew", |
"reviamugrashhebrew","revlogicalnot","rfishhook","rfishhookreversed", |
"rhabengali","rhadeva","rho","rhook","rhookturned","rhookturnedsuperior", |
"rhosymbolgreek","rhotichookmod","rieulacirclekorean","rieulaparenkorean", |
"rieulcirclekorean","rieulhieuhkorean","rieulkiyeokkorean", |
"rieulkiyeoksioskorean","rieulkorean","rieulmieumkorean","rieulpansioskorean", |
"rieulparenkorean","rieulphieuphkorean","rieulpieupkorean", |
"rieulpieupsioskorean","rieulsioskorean","rieulthieuthkorean", |
"rieultikeutkorean","rieulyeorinhieuhkorean","rightangle","righttackbelowcmb", |
"righttriangle","rihiragana","rikatakana","rikatakanahalfwidth","ring", |
"ringbelowcmb","ringcmb","ringhalfleft","ringhalfleftarmenian", |
"ringhalfleftbelowcmb","ringhalfleftcentered","ringhalfright", |
"ringhalfrightbelowcmb","ringhalfrightcentered","rinvertedbreve", |
"rittorusquare","rlinebelow","rlongleg","rlonglegturned","rmonospace", |
"rohiragana","rokatakana","rokatakanahalfwidth","roruathai","rparen", |
"rrabengali","rradeva","rragurmukhi","rreharabic","rrehfinalarabic", |
"rrvocalicbengali","rrvocalicdeva","rrvocalicgujarati", |
"rrvocalicvowelsignbengali","rrvocalicvowelsigndeva", |
"rrvocalicvowelsigngujarati","rsuperior","rtblock","rturned", |
"rturnedsuperior","ruhiragana","rukatakana","rukatakanahalfwidth", |
"rupeemarkbengali","rupeesignbengali","rupiah","ruthai","rvocalicbengali", |
"rvocalicdeva","rvocalicgujarati","rvocalicvowelsignbengali", |
"rvocalicvowelsigndeva","rvocalicvowelsigngujarati","s","sabengali","sacute", |
"sacutedotaccent","sadarabic","sadeva","sadfinalarabic","sadinitialarabic", |
"sadmedialarabic","sagujarati","sagurmukhi","sahiragana","sakatakana", |
"sakatakanahalfwidth","sallallahoualayhewasallamarabic","samekh", |
"samekhdagesh","samekhdageshhebrew","samekhhebrew","saraaathai","saraaethai", |
"saraaimaimalaithai","saraaimaimuanthai","saraamthai","saraathai","saraethai", |
"saraiileftthai","saraiithai","saraileftthai","saraithai","saraothai", |
"saraueeleftthai","saraueethai","saraueleftthai","sarauethai","sarauthai", |
"sarauuthai","sbopomofo","scaron","scarondotaccent","scedilla","schwa", |
"schwacyrillic","schwadieresiscyrillic","schwahook","scircle","scircumflex", |
"scommaaccent","sdotaccent","sdotbelow","sdotbelowdotaccent", |
"seagullbelowcmb","second","secondtonechinese","section","seenarabic", |
"seenfinalarabic","seeninitialarabic","seenmedialarabic","segol","segol13", |
"segol1f","segol2c","segolhebrew","segolnarrowhebrew","segolquarterhebrew", |
"segoltahebrew","segolwidehebrew","seharmenian","sehiragana","sekatakana", |
"sekatakanahalfwidth","semicolon","semicolonarabic","semicolonmonospace", |
"semicolonsmall","semivoicedmarkkana","semivoicedmarkkanahalfwidth", |
"sentisquare","sentosquare","seven","sevenarabic","sevenbengali", |
"sevencircle","sevencircleinversesansserif","sevendeva","seveneighths", |
"sevengujarati","sevengurmukhi","sevenhackarabic","sevenhangzhou", |
"sevenideographicparen","seveninferior","sevenmonospace","sevenoldstyle", |
"sevenparen","sevenperiod","sevenpersian","sevenroman","sevensuperior", |
"seventeencircle","seventeenparen","seventeenperiod","seventhai","sfthyphen", |
"shaarmenian","shabengali","shacyrillic","shaddaarabic","shaddadammaarabic", |
"shaddadammatanarabic","shaddafathaarabic","shaddafathatanarabic", |
"shaddakasraarabic","shaddakasratanarabic","shade","shadedark","shadelight", |
"shademedium","shadeva","shagujarati","shagurmukhi","shalshelethebrew", |
"shbopomofo","shchacyrillic","sheenarabic","sheenfinalarabic", |
"sheeninitialarabic","sheenmedialarabic","sheicoptic","sheqel","sheqelhebrew", |
"sheva","sheva115","sheva15","sheva22","sheva2e","shevahebrew", |
"shevanarrowhebrew","shevaquarterhebrew","shevawidehebrew","shhacyrillic", |
"shimacoptic","shin","shindagesh","shindageshhebrew","shindageshshindot", |
"shindageshshindothebrew","shindageshsindot","shindageshsindothebrew", |
"shindothebrew","shinhebrew","shinshindot","shinshindothebrew","shinsindot", |
"shinsindothebrew","shook","sigma","sigma1","sigmafinal", |
"sigmalunatesymbolgreek","sihiragana","sikatakana","sikatakanahalfwidth", |
"siluqhebrew","siluqlefthebrew","similar","sindothebrew","siosacirclekorean", |
"siosaparenkorean","sioscieuckorean","sioscirclekorean","sioskiyeokkorean", |
"sioskorean","siosnieunkorean","siosparenkorean","siospieupkorean", |
"siostikeutkorean","six","sixarabic","sixbengali","sixcircle", |
"sixcircleinversesansserif","sixdeva","sixgujarati","sixgurmukhi", |
"sixhackarabic","sixhangzhou","sixideographicparen","sixinferior", |
"sixmonospace","sixoldstyle","sixparen","sixperiod","sixpersian","sixroman", |
"sixsuperior","sixteencircle","sixteencurrencydenominatorbengali", |
"sixteenparen","sixteenperiod","sixthai","slash","slashmonospace","slong", |
"slongdotaccent","smileface","smonospace","sofpasuqhebrew","softhyphen", |
"softsigncyrillic","sohiragana","sokatakana","sokatakanahalfwidth", |
"soliduslongoverlaycmb","solidusshortoverlaycmb","sorusithai","sosalathai", |
"sosothai","sosuathai","space","spacehackarabic","spade","spadesuitblack", |
"spadesuitwhite","sparen","squarebelowcmb","squarecc","squarecm", |
"squarediagonalcrosshatchfill","squarehorizontalfill","squarekg","squarekm", |
"squarekmcapital","squareln","squarelog","squaremg","squaremil","squaremm", |
"squaremsquared","squareorthogonalcrosshatchfill", |
"squareupperlefttolowerrightfill","squareupperrighttolowerleftfill", |
"squareverticalfill","squarewhitewithsmallblack","srsquare","ssabengali", |
"ssadeva","ssagujarati","ssangcieuckorean","ssanghieuhkorean", |
"ssangieungkorean","ssangkiyeokkorean","ssangnieunkorean","ssangpieupkorean", |
"ssangsioskorean","ssangtikeutkorean","ssuperior","sterling", |
"sterlingmonospace","strokelongoverlaycmb","strokeshortoverlaycmb","subset", |
"subsetnotequal","subsetorequal","succeeds","suchthat","suhiragana", |
"sukatakana","sukatakanahalfwidth","sukunarabic","summation","sun","superset", |
"supersetnotequal","supersetorequal","svsquare","syouwaerasquare","t", |
"tabengali","tackdown","tackleft","tadeva","tagujarati","tagurmukhi", |
"taharabic","tahfinalarabic","tahinitialarabic","tahiragana", |
"tahmedialarabic","taisyouerasquare","takatakana","takatakanahalfwidth", |
"tatweelarabic","tau","tav","tavdages","tavdagesh","tavdageshhebrew", |
"tavhebrew","tbar","tbopomofo","tcaron","tccurl","tcedilla","tcheharabic", |
"tchehfinalarabic","tchehinitialarabic","tchehmedialarabic", |
"tchehmeeminitialarabic","tcircle","tcircumflexbelow","tcommaaccent", |
"tdieresis","tdotaccent","tdotbelow","tecyrillic","tedescendercyrillic", |
"teharabic","tehfinalarabic","tehhahinitialarabic","tehhahisolatedarabic", |
"tehinitialarabic","tehiragana","tehjeeminitialarabic", |
"tehjeemisolatedarabic","tehmarbutaarabic","tehmarbutafinalarabic", |
"tehmedialarabic","tehmeeminitialarabic","tehmeemisolatedarabic", |
"tehnoonfinalarabic","tekatakana","tekatakanahalfwidth","telephone", |
"telephoneblack","telishagedolahebrew","telishaqetanahebrew","tencircle", |
"tenideographicparen","tenparen","tenperiod","tenroman","tesh","tet", |
"tetdagesh","tetdageshhebrew","tethebrew","tetsecyrillic","tevirhebrew", |
"tevirlefthebrew","thabengali","thadeva","thagujarati","thagurmukhi", |
"thalarabic","thalfinalarabic","thanthakhatlowleftthai", |
"thanthakhatlowrightthai","thanthakhatthai","thanthakhatupperleftthai", |
"theharabic","thehfinalarabic","thehinitialarabic","thehmedialarabic", |
"thereexists","therefore","theta","theta1","thetasymbolgreek", |
"thieuthacirclekorean","thieuthaparenkorean","thieuthcirclekorean", |
"thieuthkorean","thieuthparenkorean","thirteencircle","thirteenparen", |
"thirteenperiod","thonangmonthothai","thook","thophuthaothai","thorn", |
"thothahanthai","thothanthai","thothongthai","thothungthai", |
"thousandcyrillic","thousandsseparatorarabic","thousandsseparatorpersian", |
"three","threearabic","threebengali","threecircle", |
"threecircleinversesansserif","threedeva","threeeighths","threegujarati", |
"threegurmukhi","threehackarabic","threehangzhou","threeideographicparen", |
"threeinferior","threemonospace","threenumeratorbengali","threeoldstyle", |
"threeparen","threeperiod","threepersian","threequarters", |
"threequartersemdash","threeroman","threesuperior","threethai","thzsquare", |
"tihiragana","tikatakana","tikatakanahalfwidth","tikeutacirclekorean", |
"tikeutaparenkorean","tikeutcirclekorean","tikeutkorean","tikeutparenkorean", |
"tilde","tildebelowcmb","tildecmb","tildecomb","tildedoublecmb", |
"tildeoperator","tildeoverlaycmb","tildeverticalcmb","timescircle", |
"tipehahebrew","tipehalefthebrew","tippigurmukhi","titlocyrilliccmb", |
"tiwnarmenian","tlinebelow","tmonospace","toarmenian","tohiragana", |
"tokatakana","tokatakanahalfwidth","tonebarextrahighmod","tonebarextralowmod", |
"tonebarhighmod","tonebarlowmod","tonebarmidmod","tonefive","tonesix", |
"tonetwo","tonos","tonsquare","topatakthai","tortoiseshellbracketleft", |
"tortoiseshellbracketleftsmall","tortoiseshellbracketleftvertical", |
"tortoiseshellbracketright","tortoiseshellbracketrightsmall", |
"tortoiseshellbracketrightvertical","totaothai","tpalatalhook","tparen", |
"trademark","trademarksans","trademarkserif","tretroflexhook","triagdn", |
"triaglf","triagrt","triagup","ts","tsadi","tsadidagesh","tsadidageshhebrew", |
"tsadihebrew","tsecyrillic","tsere","tsere12","tsere1e","tsere2b", |
"tserehebrew","tserenarrowhebrew","tserequarterhebrew","tserewidehebrew", |
"tshecyrillic","tsuperior","ttabengali","ttadeva","ttagujarati","ttagurmukhi", |
"tteharabic","ttehfinalarabic","ttehinitialarabic","ttehmedialarabic", |
"tthabengali","tthadeva","tthagujarati","tthagurmukhi","tturned","tuhiragana", |
"tukatakana","tukatakanahalfwidth","tusmallhiragana","tusmallkatakana", |
"tusmallkatakanahalfwidth","twelvecircle","twelveparen","twelveperiod", |
"twelveroman","twentycircle","twentyhangzhou","twentyparen","twentyperiod", |
"two","twoarabic","twobengali","twocircle","twocircleinversesansserif", |
"twodeva","twodotenleader","twodotleader","twodotleadervertical", |
"twogujarati","twogurmukhi","twohackarabic","twohangzhou", |
"twoideographicparen","twoinferior","twomonospace","twonumeratorbengali", |
"twooldstyle","twoparen","twoperiod","twopersian","tworoman","twostroke", |
"twosuperior","twothai","twothirds","u","uacute","ubar","ubengali", |
"ubopomofo","ubreve","ucaron","ucircle","ucircumflex","ucircumflexbelow", |
"ucyrillic","udattadeva","udblacute","udblgrave","udeva","udieresis", |
"udieresisacute","udieresisbelow","udieresiscaron","udieresiscyrillic", |
"udieresisgrave","udieresismacron","udotbelow","ugrave","ugujarati", |
"ugurmukhi","uhiragana","uhookabove","uhorn","uhornacute","uhorndotbelow", |
"uhorngrave","uhornhookabove","uhorntilde","uhungarumlaut", |
"uhungarumlautcyrillic","uinvertedbreve","ukatakana","ukatakanahalfwidth", |
"ukcyrillic","ukorean","umacron","umacroncyrillic","umacrondieresis", |
"umatragurmukhi","umonospace","underscore","underscoredbl", |
"underscoremonospace","underscorevertical","underscorewavy","union", |
"universal","uogonek","uparen","upblock","upperdothebrew","upsilon", |
"upsilondieresis","upsilondieresistonos","upsilonlatin","upsilontonos", |
"uptackbelowcmb","uptackmod","uragurmukhi","uring","ushortcyrillic", |
"usmallhiragana","usmallkatakana","usmallkatakanahalfwidth", |
"ustraightcyrillic","ustraightstrokecyrillic","utilde","utildeacute", |
"utildebelow","uubengali","uudeva","uugujarati","uugurmukhi", |
"uumatragurmukhi","uuvowelsignbengali","uuvowelsigndeva", |
"uuvowelsigngujarati","uvowelsignbengali","uvowelsigndeva", |
"uvowelsigngujarati","v","vadeva","vagujarati","vagurmukhi","vakatakana", |
"vav","vavdagesh","vavdagesh65","vavdageshhebrew","vavhebrew","vavholam", |
"vavholamhebrew","vavvavhebrew","vavyodhebrew","vcircle","vdotbelow", |
"vecyrillic","veharabic","vehfinalarabic","vehinitialarabic", |
"vehmedialarabic","vekatakana","venus","verticalbar","verticallineabovecmb", |
"verticallinebelowcmb","verticallinelowmod","verticallinemod","vewarmenian", |
"vhook","vikatakana","viramabengali","viramadeva","viramagujarati", |
"visargabengali","visargadeva","visargagujarati","vmonospace","voarmenian", |
"voicediterationhiragana","voicediterationkatakana","voicedmarkkana", |
"voicedmarkkanahalfwidth","vokatakana","vparen","vtilde","vturned", |
"vuhiragana","vukatakana","w","wacute","waekorean","wahiragana","wakatakana", |
"wakatakanahalfwidth","wakorean","wasmallhiragana","wasmallkatakana", |
"wattosquare","wavedash","wavyunderscorevertical","wawarabic", |
"wawfinalarabic","wawhamzaabovearabic","wawhamzaabovefinalarabic","wbsquare", |
"wcircle","wcircumflex","wdieresis","wdotaccent","wdotbelow","wehiragana", |
"weierstrass","wekatakana","wekorean","weokorean","wgrave","whitebullet", |
"whitecircle","whitecircleinverse","whitecornerbracketleft", |
"whitecornerbracketleftvertical","whitecornerbracketright", |
"whitecornerbracketrightvertical","whitediamond", |
"whitediamondcontainingblacksmalldiamond","whitedownpointingsmalltriangle", |
"whitedownpointingtriangle","whiteleftpointingsmalltriangle", |
"whiteleftpointingtriangle","whitelenticularbracketleft", |
"whitelenticularbracketright","whiterightpointingsmalltriangle", |
"whiterightpointingtriangle","whitesmallsquare","whitesmilingface", |
"whitesquare","whitestar","whitetelephone","whitetortoiseshellbracketleft", |
"whitetortoiseshellbracketright","whiteuppointingsmalltriangle", |
"whiteuppointingtriangle","wihiragana","wikatakana","wikorean","wmonospace", |
"wohiragana","wokatakana","wokatakanahalfwidth","won","wonmonospace", |
"wowaenthai","wparen","wring","wsuperior","wturned","wynn","x","xabovecmb", |
"xbopomofo","xcircle","xdieresis","xdotaccent","xeharmenian","xi", |
"xmonospace","xparen","xsuperior","y","yaadosquare","yabengali","yacute", |
"yadeva","yaekorean","yagujarati","yagurmukhi","yahiragana","yakatakana", |
"yakatakanahalfwidth","yakorean","yamakkanthai","yasmallhiragana", |
"yasmallkatakana","yasmallkatakanahalfwidth","yatcyrillic","ycircle", |
"ycircumflex","ydieresis","ydotaccent","ydotbelow","yeharabic", |
"yehbarreearabic","yehbarreefinalarabic","yehfinalarabic", |
"yehhamzaabovearabic","yehhamzaabovefinalarabic","yehhamzaaboveinitialarabic", |
"yehhamzaabovemedialarabic","yehinitialarabic","yehmedialarabic", |
"yehmeeminitialarabic","yehmeemisolatedarabic","yehnoonfinalarabic", |
"yehthreedotsbelowarabic","yekorean","yen","yenmonospace","yeokorean", |
"yeorinhieuhkorean","yerahbenyomohebrew","yerahbenyomolefthebrew", |
"yericyrillic","yerudieresiscyrillic","yesieungkorean", |
"yesieungpansioskorean","yesieungsioskorean","yetivhebrew","ygrave","yhook", |
"yhookabove","yiarmenian","yicyrillic","yikorean","yinyang","yiwnarmenian", |
"ymonospace","yod","yoddagesh","yoddageshhebrew","yodhebrew","yodyodhebrew", |
"yodyodpatahhebrew","yohiragana","yoikorean","yokatakana", |
"yokatakanahalfwidth","yokorean","yosmallhiragana","yosmallkatakana", |
"yosmallkatakanahalfwidth","yotgreek","yoyaekorean","yoyakorean","yoyakthai", |
"yoyingthai","yparen","ypogegrammeni","ypogegrammenigreekcmb","yr","yring", |
"ysuperior","ytilde","yturned","yuhiragana","yuikorean","yukatakana", |
"yukatakanahalfwidth","yukorean","yusbigcyrillic","yusbigiotifiedcyrillic", |
"yuslittlecyrillic","yuslittleiotifiedcyrillic","yusmallhiragana", |
"yusmallkatakana","yusmallkatakanahalfwidth","yuyekorean","yuyeokorean", |
"yyabengali","yyadeva","z","zaarmenian","zacute","zadeva","zagurmukhi", |
"zaharabic","zahfinalarabic","zahinitialarabic","zahiragana", |
"zahmedialarabic","zainarabic","zainfinalarabic","zakatakana", |
"zaqefgadolhebrew","zaqefqatanhebrew","zarqahebrew","zayin","zayindagesh", |
"zayindageshhebrew","zayinhebrew","zbopomofo","zcaron","zcircle", |
"zcircumflex","zcurl","zdot","zdotaccent","zdotbelow","zecyrillic", |
"zedescendercyrillic","zedieresiscyrillic","zehiragana","zekatakana","zero", |
"zeroarabic","zerobengali","zerodeva","zerogujarati","zerogurmukhi", |
"zerohackarabic","zeroinferior","zeromonospace","zerooldstyle","zeropersian", |
"zerosuperior","zerothai","zerowidthjoiner","zerowidthnonjoiner", |
"zerowidthspace","zeta","zhbopomofo","zhearmenian","zhebrevecyrillic", |
"zhecyrillic","zhedescendercyrillic","zhedieresiscyrillic","zihiragana", |
"zikatakana","zinorhebrew","zlinebelow","zmonospace","zohiragana", |
"zokatakana","zparen","zretroflexhook","zstroke","zuhiragana","zukatakana", |
}; |
static const unsigned short agl_code_list[] = { |
65,198,508,482,63462,193,63457,258,7854,1232,7862,7856,7858,7860,461,9398,194, |
7844,7852,7846,7848,63458,7850,63177,63412,1040,512,196,1234,478,63460,7840, |
480,192,63456,7842,1236,514,913,902,256,65313,260,197,506,7680,63461,63329, |
195,63459,1329,66,9399,7682,7684,1041,1330,914,385,7686,65314,63220,63330,386, |
67,1342,262,63178,63221,268,199,7688,63463,9400,264,266,266,63416,1353,1212, |
1063,1214,1206,1268,1347,1227,1208,935,391,63222,65315,1361,63331,68,497,452, |
1332,393,270,7696,9401,7698,272,7690,7692,1044,1006,8710,916,394,63179,63180, |
63181,63400,988,1026,7694,65316,63223,272,63332,395,498,453,1248,1029,1039,69, |
201,63465,276,282,7708,1333,9402,202,7870,7704,7878,7872,7874,63466,7876,1028, |
516,203,63467,278,278,7864,1060,200,63464,1335,7866,8551,518,1124,1051,8554, |
274,7702,7700,1052,65317,1053,1186,330,1188,1223,280,400,917,904,1056,398, |
1069,1057,1194,425,63333,919,1336,905,208,63472,7868,7706,8364,439,494,440,70, |
9403,7710,1366,996,401,1138,8548,65318,8547,63334,71,13191,500,915,404,1002, |
286,486,290,9404,284,290,288,288,1043,1346,1172,1170,1168,403,1331,1027,7712, |
65319,63182,63328,63335,667,484,72,9679,9642,9643,9633,13259,1192,1202,1066, |
294,7722,7720,9405,292,7718,7714,7716,65320,1344,1000,63336,63183,63224,13200, |
73,1071,306,1070,205,63469,300,463,9406,206,63470,1030,520,207,7726,1252, |
63471,304,304,7882,1238,1045,8465,204,63468,7880,1048,522,1049,298,1250,65321, |
1339,1025,302,921,406,938,906,63337,407,296,7724,1140,1142,74,1345,9407,308, |
1032,1355,65322,63338,75,13189,13261,1184,7728,1050,1178,1219,922,1182,1180, |
488,310,9408,310,7730,1364,1343,1061,998,408,1036,7732,65323,1152,990,1134, |
63339,76,455,63167,313,923,317,315,9409,7740,315,319,319,7734,7736,1340,456, |
1033,7738,65324,321,63225,63340,77,13190,63184,63407,7742,9410,7744,7746,1348, |
65325,63341,412,924,78,458,323,327,325,9411,7754,325,7748,7750,413,8552,459, |
1034,7752,65326,1350,63342,209,63473,925,79,338,63226,211,63475,1256,1258,334, |
465,415,9412,212,7888,7896,7890,7892,63476,7894,1054,336,524,214,1254,63478, |
7884,63227,210,63474,1365,8486,7886,416,7898,7906,7900,7902,7904,336,418,526, |
332,7762,7760,8486,1120,937,1146,1148,911,927,908,65327,8544,490,492,390,216, |
510,63480,63343,510,1150,213,7756,7758,63477,80,7764,9413,7766,1055,1354,1190, |
934,420,928,1363,65328,936,1136,63344,81,9414,65329,63345,82,1356,340,344,342, |
9415,342,528,7768,7770,7772,1360,8476,929,63228,530,7774,65330,63346,641,694, |
83,9484,9492,9488,9496,9532,9516,9524,9500,9508,9472,9474,9569,9570,9558,9557, |
9571,9553,9559,9565,9564,9563,9566,9567,9562,9556,9577,9574,9568,9552,9580, |
9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,346,7780,992,352,7782,63229, |
350,399,1240,1242,9416,348,536,7776,7778,7784,1357,8550,1351,1064,1065,994, |
1210,1004,931,8549,65331,1068,63347,986,84,932,358,356,354,9417,7792,354,7786, |
7788,1058,1196,8553,1204,920,428,222,63486,8546,63230,1359,7790,65332,1337, |
444,388,423,430,1062,1035,63348,8555,8545,85,218,63482,364,467,9418,219,7798, |
63483,1059,368,532,220,471,7794,473,1264,475,469,63484,7908,217,63481,7910, |
431,7912,7920,7914,7916,7918,368,1266,534,1144,362,1262,7802,65333,370,933, |
978,979,433,939,980,978,910,366,1038,63349,1198,1200,360,7800,7796,86,9419, |
7806,1042,1358,434,65334,1352,63350,7804,87,7810,9420,372,7812,7814,7816,7808, |
65335,63351,88,9421,7820,7818,1341,926,65336,63352,89,221,63485,1122,9422,374, |
376,63487,7822,7924,1067,1272,7922,435,7926,1349,1031,1362,65337,63353,7928, |
1130,1132,1126,1128,90,1334,377,381,63231,9423,7824,379,379,7826,1047,1176, |
1246,918,1338,1217,1046,1174,1244,7828,65338,63354,437,97,2438,225,2310,2694, |
2566,2622,13059,2494,2366,2750,1375,2416,2437,12570,259,7855,1233,7863,7857, |
7859,7861,462,9424,226,7845,7853,7847,7849,7851,180,791,769,769,2388,719,833, |
1072,513,2673,2309,228,1235,479,7841,481,230,509,12624,483,8213,8356,1040, |
1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054, |
1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069, |
1070,1071,1168,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038, |
63172,63173,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083, |
1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098, |
1099,1100,1101,1102,1103,1169,1106,1107,1108,1109,1110,1111,1112,1113,1114, |
1115,1116,1118,1039,1122,1138,1140,63174,1119,1123,1139,1141,63175,63176,1241, |
8206,8207,8205,1642,1548,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641, |
1563,1567,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581, |
1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1600,1601, |
1602,1603,1604,1605,1606,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617, |
1618,1607,1700,1662,1670,1688,1711,1657,1672,1681,1722,1746,1749,8362,1470, |
1475,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501, |
1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,64298,64299, |
64331,64287,1520,1521,1522,64309,1460,1461,1462,1467,1464,1463,1456,1458,1457, |
1459,1474,1473,1465,1468,1469,1471,1472,700,8453,8467,8470,8236,8237,8238, |
8204,1645,701,224,2693,2565,12354,7843,2448,12574,2320,1237,2704,2576,2632, |
1593,65226,65227,65228,515,2504,2376,2760,12450,65393,12623,1488,1575,64304, |
65166,1571,65156,1573,65160,1488,64335,1570,65154,1609,65264,65267,65268, |
64302,64303,8501,8780,945,940,257,65345,38,65286,63270,13250,12578,12580,3674, |
8736,12296,65087,12297,65088,9001,9002,8491,903,2386,2434,2306,2690,261,13056, |
9372,1370,700,63743,8784,8776,8786,8773,12686,12685,8978,7834,229,507,7681, |
8596,8675,8672,8674,8673,8660,8659,8656,8658,8657,8595,8601,8600,8681,709,706, |
707,708,63719,8592,8656,8653,8646,8678,8594,8655,10142,8644,8680,8676,8677, |
8593,8597,8616,8616,8598,8645,8599,8679,63718,94,65342,126,65374,593,594, |
12353,12449,65383,42,1645,1645,8727,65290,65121,8258,63209,8771,64,227,65312, |
65131,592,2452,12576,2324,2708,2580,2519,2636,2508,2380,2764,2365,1377,1506, |
64288,1506,98,2476,92,65340,2348,2732,2604,12400,3647,12496,124,65372,12549, |
9425,7683,7685,9836,8757,1073,1576,65168,65169,12409,65170,64671,64520,64621, |
12505,1378,1489,946,976,64305,64305,1489,64332,2477,2349,2733,2605,595,12403, |
12499,664,2562,13105,9679,9670,9660,9668,9664,12304,65083,12305,65084,9699, |
9698,9644,9658,9654,9642,9787,9632,9733,9700,9701,9652,9650,9251,7687,9608, |
65346,3610,12412,12508,9373,13251,63732,123,63731,63730,65371,65115,63729, |
65079,125,63742,63741,65373,65116,63740,65080,91,63728,63727,65339,63726,93, |
63739,63738,65341,63737,728,814,774,815,785,865,810,826,166,384,63210,387, |
12406,12502,8226,9688,8729,9678,99,1390,2458,263,2330,2714,2586,13192,2433, |
784,2305,2689,8682,8453,711,812,780,8629,12568,269,231,7689,9426,265,597,267, |
267,13253,184,807,162,8451,63199,65504,63394,63200,1401,2459,2331,2715,2587, |
12564,1213,10003,1095,1215,1207,1269,1395,1228,1209,967,12919,12823,12905, |
12618,12809,3594,3592,3593,3596,392,12918,12822,12904,12616,12808,12828,9675, |
8855,8857,8853,12342,9680,9681,710,813,770,8999,450,448,449,451,9827,9827, |
9831,13220,65347,13216,1409,58,8353,65306,8353,65109,721,720,44,787,789,63171, |
1548,1373,63201,65292,788,701,65104,63202,786,699,9788,8773,8750,8963,6,7,8, |
24,13,17,18,19,20,127,16,25,5,4,27,23,3,12,28,29,9,10,21,30,15,14,2,1,26,22, |
31,11,169,63721,63193,12300,65378,65089,12301,65379,65090,13183,13255,13254, |
9374,8354,663,8911,8910,164,63185,63186,63188,63189,100,1380,2470,1590,2342, |
65214,65215,65216,1468,1468,8224,8225,2726,2598,12384,12480,1583,1491,64307, |
64307,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, |
1491,1491,1491,1491,1491,1491,1491,65194,1615,1615,1612,1612,2404,1447,1447, |
1157,63187,12298,65085,12299,65086,811,8660,8658,2405,63190,783,8748,8215,819, |
831,698,8214,782,12553,13256,271,7697,9427,7699,273,2465,2337,2721,2593,1672, |
64393,2396,2466,2338,2722,2594,7691,7693,1643,1643,1076,176,1453,12391,1007, |
12487,9003,8998,948,397,2552,676,2471,2343,2727,2599,599,901,836,9830,9826, |
168,63191,804,776,63192,901,12386,12482,12291,247,8739,8725,1106,9619,7695, |
13207,273,65348,9604,3598,3604,12393,12489,36,63203,65284,63268,65129,63204, |
8363,13094,729,775,803,803,12539,305,63166,644,8901,9676,64287,64287,798,725, |
9375,63211,598,396,12389,12485,499,675,454,677,1249,1109,1119,101,233,9793, |
2447,12572,277,2317,2701,2373,2757,283,7709,1381,1415,9428,234,7871,7705,7879, |
7873,7875,7877,1108,517,2319,235,279,279,7865,2575,2631,1092,232,2703,1383, |
12573,12360,7867,12575,56,1640,2542,9319,10129,2414,9329,9349,9369,2798,2670, |
1640,12328,9835,12839,8328,65304,63288,9339,9359,1784,8567,8312,3672,519,1125, |
12456,65396,2676,12628,1083,8712,9322,9342,9362,8570,8230,8942,275,7703,7701, |
1084,8212,65073,65349,1371,8709,12579,1085,8211,65074,1187,331,12581,1189, |
1224,8194,281,12627,603,666,604,606,605,9376,949,941,61,65309,65126,8316,8801, |
12582,1088,600,1101,1089,1195,643,646,2318,2374,426,645,12359,12455,65386, |
8494,63212,951,1384,942,240,7869,7707,1425,1425,1425,1425,477,12641,8364,2503, |
2375,2759,33,1372,8252,161,63393,65281,63265,8707,658,495,659,441,442,102, |
2398,2654,8457,1614,1614,1611,12552,9429,7711,1601,1414,65234,65235,65236,997, |
9792,64256,64259,64260,64257,9326,9346,9366,8210,9632,9644,1498,64314,64314, |
1498,1498,1498,1498,1498,1501,1501,1503,1503,1507,1507,1509,1509,713,9673, |
1139,53,1637,2539,9316,10126,2411,8541,2795,2667,1637,12325,12836,8325,65301, |
63285,9336,9356,1781,8564,8309,3669,64258,402,65350,13209,3615,3613,3663,8704, |
52,1636,2538,9315,10125,2410,2794,2666,1636,12324,12835,8324,65300,2551,63284, |
9335,9355,1780,8563,8308,9325,9345,9365,3668,715,9377,8260,8355,103,2455,501, |
2327,1711,64403,64404,64405,2711,2583,12364,12460,947,611,736,1003,12557,287, |
487,291,9430,285,291,289,289,1075,12370,12466,8785,1436,1523,1437,223,1438, |
1524,12307,2456,1394,2328,2712,2584,1594,65230,65231,65232,1173,1171,1169, |
2394,2650,608,13203,12366,12462,1379,1490,64306,64306,1490,1107,446,660,662, |
704,661,705,740,673,674,7713,65351,12372,12468,9378,13228,8711,96,790,768,768, |
2387,718,65344,832,62,8805,8923,65310,8819,8823,8807,65125,609,485,12368,171, |
187,8249,8250,12464,13080,13257,104,1193,1729,2489,1203,2361,2745,2617,1581, |
65186,65187,12399,65188,13098,12495,65418,2637,1569,1569,1569,1569,1569,1569, |
1569,1569,1569,12644,1098,8636,8640,13258,1458,1458,1458,1458,1458,1458,1458, |
1458,1459,1459,1459,1459,1459,1459,1459,1459,1457,1457,1457,1457,1457,1457, |
1457,1457,295,12559,7723,7721,9431,293,7719,7715,7717,1492,9829,9829,9825, |
64308,64308,1729,1607,1492,64423,65258,65258,64421,64420,64424,65259,12408, |
64425,65260,13179,12504,65421,13110,615,13113,1495,1495,614,689,12923,12827, |
12909,12622,12813,12402,12498,65419,1460,1460,1460,1460,1460,1460,1460,1460, |
7830,65352,1392,3627,12411,12507,65422,1465,1465,1465,1465,1465,1465,1465, |
1465,3630,777,777,801,802,13122,1001,8213,795,9832,8962,9379,688,613,12405, |
13107,12501,65420,733,779,405,45,63205,65293,65123,63206,8208,105,237,1103, |
2439,12583,301,464,9432,238,1110,521,12943,12939,12863,12858,12965,12294, |
12289,65380,12855,12963,12847,12861,12957,12864,12950,12854,12843,12850,12964, |
12293,12952,12856,12967,12966,12969,12846,12842,12852,12290,12958,12867,12857, |
12862,12968,12953,12866,12851,12288,12853,12849,12859,12848,12860,12844,12845, |
12295,12942,12938,12948,12944,12940,12941,2311,239,7727,1253,7883,1239,1077, |
12917,12821,12903,12615,12807,236,2695,2567,12356,7881,2440,1080,2312,2696, |
2568,2624,523,1081,2496,2368,2752,307,12452,65394,12643,732,1452,299,1251, |
8787,2623,65353,8710,8734,1387,8747,8993,8993,63733,8992,8992,8745,13061,9688, |
9689,9787,1105,303,953,970,912,617,943,9380,2674,12355,12451,65384,2554,616, |
63213,12445,12541,297,7725,12585,1102,2495,2367,2751,1141,1143,106,1393,2460, |
2332,2716,2588,12560,496,9433,309,669,607,1112,1580,65182,65183,65184,1688, |
64395,2461,2333,2717,2589,1403,12292,65354,9381,690,107,1185,2453,7729,1082, |
1179,2325,1499,1603,64315,64315,65242,1499,65243,65244,64333,2709,2581,12363, |
1220,12459,65398,954,1008,12657,12676,12664,12665,13069,1600,1600,12533,13188, |
1616,1613,1183,65392,1181,12558,13193,489,311,9434,311,7731,1412,12369,12465, |
65401,1391,12534,312,2454,1093,2326,2710,2582,1582,65190,65191,65192,999,2393, |
2649,12920,12824,12906,12619,12810,3586,3589,3587,3588,3675,409,3590,13201, |
12365,12461,65399,13077,13078,13076,12910,12814,12896,12593,12800,12595,1116, |
7733,13208,13222,65355,13218,12371,13248,3585,12467,65402,13086,1153,12927, |
835,9382,13226,1135,13263,670,12367,12463,65400,13240,13246,108,2482,314,2354, |
2738,2610,3653,65276,65272,65271,65274,65273,65275,65270,65269,1604,955,411, |
1500,64316,64316,1500,1500,1500,1500,1500,65246,64714,65247,64713,64715,65010, |
65248,64904,64716,65247,65247,9711,410,620,12556,318,316,9435,7741,316,320, |
320,7735,7737,794,792,60,8804,8922,65308,8818,8822,8806,65124,622,9612,621, |
8356,1388,457,1113,63168,2355,2739,7739,2356,2529,2401,2531,2403,619,65356, |
13264,3628,8743,172,8976,8744,3621,383,65102,818,65101,9674,9383,322,8467, |
63214,9617,3622,2444,2316,2530,2402,13267,109,2478,175,817,772,717,65507,7743, |
2350,2734,2606,1444,1444,12414,63637,63636,3659,63635,63628,63627,3656,63626, |
63620,3633,63625,3655,63631,63630,3657,63629,63634,63633,3658,63632,3654, |
12510,65423,9794,13127,1470,9794,1455,13187,12551,13268,9436,13221,7745,7747, |
1605,65250,65251,65252,64721,64584,13133,12417,13182,12513,65426,1502,64318, |
64318,1502,1396,1445,1446,1446,1445,625,13202,65381,183,12914,12818,12900, |
12609,12656,12804,12654,12655,12415,12511,65424,8722,800,8854,727,8723,8242, |
13130,13129,624,13206,13219,65357,13215,12418,13249,12514,65427,13270,3617, |
13223,13224,9384,13227,13235,63215,623,181,181,13186,8811,8810,13196,956, |
13197,12416,12512,65425,13205,215,13211,1443,1443,9834,9835,9837,9839,13234, |
13238,13244,13241,13239,13247,13245,110,2472,8711,324,2344,2728,2600,12394, |
12490,65413,329,13185,12555,160,328,326,9437,7755,326,7749,7751,12397,12493, |
65416,8362,13195,2457,2329,2713,2585,3591,12435,626,627,12911,12815,12597, |
12897,12598,12596,12648,12801,12647,12646,12395,12491,65414,63641,3661,57, |
1641,2543,9320,10130,2415,2799,2671,1641,12329,12840,8329,65305,63289,9340, |
9360,1785,8568,8313,9330,9350,9370,3673,460,1114,12531,65437,414,7753,65358, |
13210,2467,2339,2723,2595,2345,12398,12494,65417,160,3603,3609,1606,65254, |
1722,64415,65255,65255,64722,64587,65256,64725,64590,64653,8716,8713,8713, |
8800,8815,8817,8825,8802,8814,8816,8742,8832,8836,8833,8837,1398,9385,13233, |
8319,241,957,12396,12492,65415,2492,2364,2748,2620,35,65283,65119,884,885, |
8470,1504,64320,64320,1504,13237,13243,2462,2334,2718,2590,111,243,3629,629, |
1257,1259,2451,12571,335,2321,2705,2377,2761,466,9438,244,7889,7897,7891,7893, |
7895,1086,337,525,2323,246,1255,7885,339,12634,731,808,242,2707,1413,12362, |
7887,417,7899,7907,7901,7903,7905,337,419,527,12458,65397,12631,1451,333,7763, |
7761,2384,969,982,1121,631,1147,1149,974,2768,959,972,65359,49,1633,2535,9312, |
10122,2407,8228,8539,63196,2791,2663,1633,189,12321,12832,8321,65297,2548, |
63281,9332,9352,1777,188,8560,185,3665,8531,491,493,2579,2635,596,9386,9702, |
8997,170,186,8735,2322,2378,248,511,12361,12457,65387,511,63216,1151,245,7757, |
7759,12577,8254,65098,773,65097,65100,65099,175,2507,2379,2763,112,13184, |
13099,2474,7765,2346,8671,8670,2730,2602,12401,3631,12497,1156,1216,12671,182, |
8741,40,64830,63725,63724,8333,65288,65113,8317,63723,65077,41,64831,63736, |
63735,8334,65289,65114,8318,63734,65078,8706,1472,1433,13225,1463,1463,1463, |
1463,1463,1463,1463,1463,1441,12550,9439,7767,1508,1087,64324,64324,13115, |
64323,1662,1402,1508,64343,64344,12410,64345,12506,1191,64334,37,1642,65285, |
65130,46,1417,183,65377,63207,65294,65106,63208,834,8869,8240,8359,13194,2475, |
2347,2731,2603,966,981,12922,12826,12908,12621,12812,632,3642,981,421,3614, |
3612,3616,960,12915,12819,12662,12901,12658,12610,12805,12660,12612,12661, |
12663,12659,12404,12500,982,1411,43,799,8853,177,726,65291,65122,8314,65360, |
13272,12413,9759,9756,9758,9757,12509,3611,12306,12320,9387,8826,8478,697, |
8245,8719,8965,12540,8984,8834,8835,8759,8733,968,1137,1158,13232,12407,12503, |
13236,13242,113,2392,1448,1602,65238,65239,65240,1464,1464,1464,1464,1464, |
1464,1464,1464,1464,1464,1464,1464,1464,1464,1464,1464,1439,12561,9440,672, |
65361,1511,64327,64327,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511, |
1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,9388,9833,1467,1467,1467, |
1467,1467,1467,1467,1467,63,1567,1374,191,63423,894,65311,63295,34,8222,8220, |
65282,12318,12317,8221,8216,8219,8219,8217,329,8218,39,65287,114,1404,2480, |
341,2352,8730,63717,13230,13231,13229,1471,1471,2736,2608,12425,12521,65431, |
2545,2544,612,8758,12566,345,343,9441,343,529,7769,7771,7773,8251,8838,8839, |
174,63720,63194,1585,1408,65198,12428,1585,12524,65434,1512,64328,1512,1512, |
1512,1512,1512,1512,1512,1512,1512,1512,1512,1512,1512,1512,1512,1512,1512, |
1512,1512,1512,1512,8765,1431,1431,8976,638,639,2525,2397,961,637,635,693, |
1009,734,12913,12817,12899,12608,12602,12649,12601,12603,12652,12803,12607, |
12604,12651,12605,12606,12650,12653,8735,793,8895,12426,12522,65432,730,805, |
778,703,1369,796,723,702,825,722,531,13137,7775,636,634,65362,12429,12525, |
65435,3619,9389,2524,2353,2652,1681,64397,2528,2400,2784,2500,2372,2756,63217, |
9616,633,692,12427,12523,65433,2546,2547,63197,3620,2443,2315,2699,2499,2371, |
2755,115,2488,347,7781,1589,2360,65210,65211,65212,2744,2616,12373,12469, |
65403,65018,1505,64321,64321,1505,3634,3649,3652,3651,3635,3632,3648,63622, |
3637,63621,3636,3650,63624,3639,63623,3638,3640,3641,12569,353,7783,351,601, |
1241,1243,602,9442,349,537,7777,7779,7785,828,8243,714,167,1587,65202,65203, |
65204,1462,1462,1462,1462,1462,1462,1462,1426,1462,1405,12379,12475,65406,59, |
1563,65307,65108,12444,65439,13090,13091,55,1639,2541,9318,10128,2413,8542, |
2797,2669,1639,12327,12838,8327,65303,63287,9338,9358,1783,8566,8311,9328, |
9348,9368,3671,173,1399,2486,1096,1617,64609,64606,64608,1617,64610,64607, |
9618,9619,9617,9618,2358,2742,2614,1427,12565,1097,1588,65206,65207,65208,995, |
8362,8362,1456,1456,1456,1456,1456,1456,1456,1456,1456,1211,1005,1513,64329, |
64329,64300,64300,64301,64301,1473,1513,64298,64298,64299,64299,642,963,962, |
962,1010,12375,12471,65404,1469,1469,8764,1474,12916,12820,12670,12902,12666, |
12613,12667,12806,12669,12668,54,1638,2540,9317,10127,2412,2796,2668,1638, |
12326,12837,8326,65302,63286,9337,9357,1782,8565,8310,9327,2553,9347,9367, |
3670,47,65295,383,7835,9786,65363,1475,173,1100,12381,12477,65407,824,823, |
3625,3624,3595,3626,32,32,9824,9824,9828,9390,827,13252,13213,9641,9636,13199, |
13214,13262,13265,13266,13198,13269,13212,13217,9638,9639,9640,9637,9635, |
13275,2487,2359,2743,12617,12677,12672,12594,12645,12611,12614,12600,63218, |
163,65505,822,821,8834,8842,8838,8827,8715,12377,12473,65405,1618,8721,9788, |
8835,8843,8839,13276,13180,116,2468,8868,8867,2340,2724,2596,1591,65218,65219, |
12383,65220,13181,12479,65408,1600,964,1514,64330,64330,64330,1514,359,12554, |
357,680,355,1670,64379,64380,64381,64380,9443,7793,355,7831,7787,7789,1090, |
1197,1578,65174,64674,64524,65175,12390,64673,64523,1577,65172,65176,64676, |
64526,64627,12486,65411,8481,9742,1440,1449,9321,12841,9341,9361,8569,679, |
1496,64312,64312,1496,1205,1435,1435,2469,2341,2725,2597,1584,65196,63640, |
63639,3660,63638,1579,65178,65179,65180,8707,8756,952,977,977,12921,12825, |
12907,12620,12811,9324,9344,9364,3601,429,3602,254,3607,3600,3608,3606,1154, |
1644,1644,51,1635,2537,9314,10124,2409,8540,2793,2665,1635,12323,12834,8323, |
65299,2550,63283,9334,9354,1779,190,63198,8562,179,3667,13204,12385,12481, |
65409,12912,12816,12898,12599,12802,732,816,771,771,864,8764,820,830,8855, |
1430,1430,2672,1155,1407,7791,65364,1385,12392,12488,65412,741,745,742,744, |
743,445,389,424,900,13095,3599,12308,65117,65081,12309,65118,65082,3605,427, |
9391,8482,63722,63195,648,9660,9668,9658,9650,678,1510,64326,64326,1510,1094, |
1461,1461,1461,1461,1461,1461,1461,1461,1115,63219,2463,2335,2719,2591,1657, |
64359,64360,64361,2464,2336,2720,2592,647,12388,12484,65410,12387,12483,65391, |
9323,9343,9363,8571,9331,21316,9351,9371,50,1634,2536,9313,10123,2408,8229, |
8229,65072,2792,2664,1634,12322,12833,8322,65298,2549,63282,9333,9353,1778, |
8561,443,178,3666,8532,117,250,649,2441,12584,365,468,9444,251,7799,1091,2385, |
369,533,2313,252,472,7795,474,1265,476,470,7909,249,2697,2569,12358,7911,432, |
7913,7921,7915,7917,7919,369,1267,535,12454,65395,1145,12636,363,1263,7803, |
2625,65365,95,8215,65343,65075,65103,8746,8704,371,9392,9600,1476,965,971,944, |
650,973,797,724,2675,367,1118,12357,12453,65385,1199,1201,361,7801,7797,2442, |
2314,2698,2570,2626,2498,2370,2754,2497,2369,2753,118,2357,2741,2613,12535, |
1493,64309,64309,64309,1493,64331,64331,1520,1521,9445,7807,1074,1700,64363, |
64364,64365,12537,9792,124,781,809,716,712,1406,651,12536,2509,2381,2765,2435, |
2307,2691,65366,1400,12446,12542,12443,65438,12538,9393,7805,652,12436,12532, |
119,7811,12633,12431,12527,65436,12632,12430,12526,13143,12316,65076,1608, |
65262,1572,65158,13277,9446,373,7813,7815,7817,12433,8472,12529,12638,12637, |
7809,9702,9675,9689,12302,65091,12303,65092,9671,9672,9663,9661,9667,9665, |
12310,12311,9657,9655,9643,9786,9633,9734,9743,12312,12313,9653,9651,12432, |
12528,12639,65367,12434,12530,65382,8361,65510,3623,9394,7832,695,653,447,120, |
829,12562,9447,7821,7819,1389,958,65368,9395,739,121,13134,2479,253,2351, |
12626,2735,2607,12420,12516,65428,12625,3662,12419,12515,65388,1123,9448,375, |
255,7823,7925,1610,1746,64431,65266,1574,65162,65163,65164,65267,65268,64733, |
64600,64660,1745,12630,165,65509,12629,12678,1450,1450,1099,1273,12673,12675, |
12674,1434,7923,436,7927,1397,1111,12642,9775,1410,65369,1497,64313,64313, |
1497,1522,64287,12424,12681,12520,65430,12635,12423,12519,65390,1011,12680, |
12679,3618,3597,9396,890,837,422,7833,696,7929,654,12422,12684,12518,65429, |
12640,1131,1133,1127,1129,12421,12517,65389,12683,12682,2527,2399,122,1382, |
378,2395,2651,1592,65222,65223,12374,65224,1586,65200,12470,1429,1428,1432, |
1494,64310,64310,1494,12567,382,9449,7825,657,380,380,7827,1079,1177,1247, |
12380,12476,48,1632,2534,2406,2790,2662,1632,8320,65296,63280,1776,8304,3664, |
65279,8204,8203,950,12563,1386,1218,1078,1175,1245,12376,12472,1454,7829, |
65370,12382,12478,9397,656,438,12378,12474, |
}; |
static const unsigned short agl_dup_offsets[] = { |
32,0,124,3,160,6,173,9,175,12,181,15,183,18,266,21,267,24,272,27,273,30, |
278,33,279,36,288,39,289,42,290,45,291,48,304,51,310,54,311,57,315,60,316,63, |
319,66,320,69,325,72,326,75,329,78,336,81,337,84,342,87,343,90,354,93,355,96, |
368,99,369,102,379,105,380,108,383,111,510,114,511,117,700,120,701,123, |
732,126,768,129,769,132,771,135,777,138,803,141,901,144,962,147,977,150, |
978,153,981,156,982,159,1025,162,1026,165,1027,168,1028,171,1029,174,1030,177, |
1031,180,1032,183,1033,186,1034,189,1035,192,1036,195,1038,198,1039,201, |
1040,204,1041,207,1042,210,1043,213,1044,216,1045,219,1046,222,1047,225, |
1048,228,1049,231,1050,234,1051,237,1052,240,1053,243,1054,246,1055,249, |
1056,252,1057,255,1058,258,1059,261,1060,264,1061,267,1062,270,1063,273, |
1064,276,1065,279,1066,282,1067,285,1068,288,1069,291,1070,294,1071,297, |
1072,300,1073,303,1074,306,1075,309,1076,312,1077,315,1078,318,1079,321, |
1080,324,1081,327,1082,330,1083,333,1084,336,1085,339,1086,342,1087,345, |
1088,348,1089,351,1090,354,1091,357,1092,360,1093,363,1094,366,1095,369, |
1096,372,1097,375,1098,378,1099,381,1100,384,1101,387,1102,390,1103,393, |
1105,396,1106,399,1107,402,1108,405,1109,408,1110,411,1111,414,1112,417, |
1113,420,1114,423,1115,426,1116,429,1118,432,1119,435,1122,438,1123,441, |
1138,444,1139,447,1140,450,1141,453,1168,456,1169,459,1241,462,1425,465, |
1430,470,1431,473,1435,476,1443,479,1444,482,1445,485,1446,488,1447,491, |
1450,494,1456,497,1457,508,1458,518,1459,528,1460,538,1461,548,1462,558, |
1463,568,1464,578,1465,596,1467,606,1468,616,1469,620,1470,624,1471,627, |
1472,631,1473,634,1474,637,1475,640,1488,643,1489,647,1490,651,1491,655, |
1492,679,1493,683,1494,687,1495,691,1496,695,1497,699,1498,703,1499,711, |
1500,715,1501,723,1502,727,1503,731,1504,735,1505,739,1506,743,1507,747, |
1508,751,1509,755,1510,759,1511,763,1512,787,1513,811,1514,815,1520,819, |
1521,822,1522,825,1548,828,1563,831,1567,834,1569,837,1570,848,1571,851, |
1572,854,1573,857,1574,860,1575,863,1576,866,1577,869,1578,872,1579,875, |
1580,878,1581,881,1582,884,1583,887,1584,890,1585,893,1586,897,1587,900, |
1588,903,1589,906,1590,909,1591,912,1592,915,1593,918,1594,921,1600,924, |
1601,929,1602,932,1603,935,1604,938,1605,941,1606,944,1607,947,1608,950, |
1609,953,1610,956,1611,959,1612,962,1613,966,1614,969,1615,973,1616,977, |
1617,980,1618,984,1632,987,1633,991,1634,995,1635,999,1636,1003,1637,1007, |
1638,1011,1639,1015,1640,1019,1641,1023,1642,1027,1643,1030,1644,1033, |
1645,1036,1657,1040,1662,1043,1670,1046,1672,1049,1681,1052,1688,1055, |
1700,1058,1711,1061,1722,1064,1729,1067,1746,1070,8204,1073,8213,1076, |
8215,1079,8219,1082,8229,1085,8353,1088,8356,1091,8362,1094,8364,1099, |
8453,1102,8467,1105,8470,1108,8486,1111,8616,1114,8656,1117,8658,1120, |
8660,1123,8704,1126,8707,1129,8710,1132,8711,1135,8713,1138,8735,1141, |
8764,1144,8773,1147,8834,1150,8835,1153,8838,1156,8839,1159,8853,1162, |
8855,1165,8976,1168,8992,1171,8993,1174,9617,1177,9618,1180,9619,1183, |
9632,1186,9633,1189,9642,1192,9643,1195,9644,1198,9650,1201,9658,1204, |
9660,1207,9668,1210,9675,1213,9679,1216,9688,1219,9689,1222,9702,1225, |
9786,1228,9787,1231,9788,1234,9792,1237,9794,1240,9824,1243,9827,1246, |
9829,1249,9835,1252,64287,1255,64298,1260,64299,1264,64300,1268,64301,1271, |
64305,1274,64306,1277,64307,1280,64308,1283,64309,1286,64310,1291,64312,1294, |
64313,1297,64314,1300,64315,1303,64316,1306,64318,1309,64320,1312,64321,1315, |
64324,1318,64326,1321,64327,1324,64329,1327,64330,1330,64331,1334,64380,1338, |
65247,1341,65255,1345,65258,1348,65267,1351,65268,1354, |
}; |
static const char *agl_dup_names[] = { |
"space","spacehackarabic",0,"bar","verticalbar",0,"nbspace", |
"nonbreakingspace",0,"sfthyphen","softhyphen",0,"macron","overscore",0,"mu", |
"mu1",0,"middot","periodcentered",0,"Cdot","Cdotaccent",0,"cdot","cdotaccent", |
0,"Dcroat","Dslash",0,"dcroat","dmacron",0,"Edot","Edotaccent",0,"edot", |
"edotaccent",0,"Gdot","Gdotaccent",0,"gdot","gdotaccent",0,"Gcedilla", |
"Gcommaaccent",0,"gcedilla","gcommaaccent",0,"Idot","Idotaccent",0,"Kcedilla", |
"Kcommaaccent",0,"kcedilla","kcommaaccent",0,"Lcedilla","Lcommaaccent",0, |
"lcedilla","lcommaaccent",0,"Ldot","Ldotaccent",0,"ldot","ldotaccent",0, |
"Ncedilla","Ncommaaccent",0,"ncedilla","ncommaaccent",0,"napostrophe", |
"quoterightn",0,"Odblacute","Ohungarumlaut",0,"odblacute","ohungarumlaut",0, |
"Rcedilla","Rcommaaccent",0,"rcedilla","rcommaaccent",0,"Tcedilla", |
"Tcommaaccent",0,"tcedilla","tcommaaccent",0,"Udblacute","Uhungarumlaut",0, |
"udblacute","uhungarumlaut",0,"Zdot","Zdotaccent",0,"zdot","zdotaccent",0, |
"longs","slong",0,"Oslashacute","Ostrokeacute",0,"oslashacute","ostrokeacute", |
0,"afii57929","apostrophemod",0,"afii64937","commareversedmod",0,"ilde", |
"tilde",0,"gravecmb","gravecomb",0,"acutecmb","acutecomb",0,"tildecmb", |
"tildecomb",0,"hookabovecomb","hookcmb",0,"dotbelowcmb","dotbelowcomb",0, |
"dialytikatonos","dieresistonos",0,"sigma1","sigmafinal",0,"theta1", |
"thetasymbolgreek",0,"Upsilon1","Upsilonhooksymbol",0,"phi1","phisymbolgreek", |
0,"omega1","pisymbolgreek",0,"Iocyrillic","afii10023",0,"Djecyrillic", |
"afii10051",0,"Gjecyrillic","afii10052",0,"Ecyrillic","afii10053",0, |
"Dzecyrillic","afii10054",0,"Icyrillic","afii10055",0,"Yicyrillic", |
"afii10056",0,"Jecyrillic","afii10057",0,"Ljecyrillic","afii10058",0, |
"Njecyrillic","afii10059",0,"Tshecyrillic","afii10060",0,"Kjecyrillic", |
"afii10061",0,"Ushortcyrillic","afii10062",0,"Dzhecyrillic","afii10145",0, |
"Acyrillic","afii10017",0,"Becyrillic","afii10018",0,"Vecyrillic","afii10019", |
0,"Gecyrillic","afii10020",0,"Decyrillic","afii10021",0,"Iecyrillic", |
"afii10022",0,"Zhecyrillic","afii10024",0,"Zecyrillic","afii10025",0, |
"Iicyrillic","afii10026",0,"Iishortcyrillic","afii10027",0,"Kacyrillic", |
"afii10028",0,"Elcyrillic","afii10029",0,"Emcyrillic","afii10030",0, |
"Encyrillic","afii10031",0,"Ocyrillic","afii10032",0,"Pecyrillic","afii10033", |
0,"Ercyrillic","afii10034",0,"Escyrillic","afii10035",0,"Tecyrillic", |
"afii10036",0,"Ucyrillic","afii10037",0,"Efcyrillic","afii10038",0, |
"Khacyrillic","afii10039",0,"Tsecyrillic","afii10040",0,"Checyrillic", |
"afii10041",0,"Shacyrillic","afii10042",0,"Shchacyrillic","afii10043",0, |
"Hardsigncyrillic","afii10044",0,"Yericyrillic","afii10045",0, |
"Softsigncyrillic","afii10046",0,"Ereversedcyrillic","afii10047",0, |
"IUcyrillic","afii10048",0,"IAcyrillic","afii10049",0,"acyrillic","afii10065", |
0,"afii10066","becyrillic",0,"afii10067","vecyrillic",0,"afii10068", |
"gecyrillic",0,"afii10069","decyrillic",0,"afii10070","iecyrillic",0, |
"afii10072","zhecyrillic",0,"afii10073","zecyrillic",0,"afii10074", |
"iicyrillic",0,"afii10075","iishortcyrillic",0,"afii10076","kacyrillic",0, |
"afii10077","elcyrillic",0,"afii10078","emcyrillic",0,"afii10079", |
"encyrillic",0,"afii10080","ocyrillic",0,"afii10081","pecyrillic",0, |
"afii10082","ercyrillic",0,"afii10083","escyrillic",0,"afii10084", |
"tecyrillic",0,"afii10085","ucyrillic",0,"afii10086","efcyrillic",0, |
"afii10087","khacyrillic",0,"afii10088","tsecyrillic",0,"afii10089", |
"checyrillic",0,"afii10090","shacyrillic",0,"afii10091","shchacyrillic",0, |
"afii10092","hardsigncyrillic",0,"afii10093","yericyrillic",0,"afii10094", |
"softsigncyrillic",0,"afii10095","ereversedcyrillic",0,"afii10096", |
"iucyrillic",0,"afii10097","iacyrillic",0,"afii10071","iocyrillic",0, |
"afii10099","djecyrillic",0,"afii10100","gjecyrillic",0,"afii10101", |
"ecyrillic",0,"afii10102","dzecyrillic",0,"afii10103","icyrillic",0, |
"afii10104","yicyrillic",0,"afii10105","jecyrillic",0,"afii10106", |
"ljecyrillic",0,"afii10107","njecyrillic",0,"afii10108","tshecyrillic",0, |
"afii10109","kjecyrillic",0,"afii10110","ushortcyrillic",0,"afii10193", |
"dzhecyrillic",0,"Yatcyrillic","afii10146",0,"afii10194","yatcyrillic",0, |
"Fitacyrillic","afii10147",0,"afii10195","fitacyrillic",0,"Izhitsacyrillic", |
"afii10148",0,"afii10196","izhitsacyrillic",0,"Gheupturncyrillic","afii10050", |
0,"afii10098","gheupturncyrillic",0,"afii10846","schwacyrillic",0, |
"etnahtafoukhhebrew","etnahtafoukhlefthebrew","etnahtahebrew", |
"etnahtalefthebrew",0,"tipehahebrew","tipehalefthebrew",0,"reviahebrew", |
"reviamugrashhebrew",0,"tevirhebrew","tevirlefthebrew",0,"munahhebrew", |
"munahlefthebrew",0,"mahapakhhebrew","mahapakhlefthebrew",0,"merkhahebrew", |
"merkhalefthebrew",0,"merkhakefulahebrew","merkhakefulalefthebrew",0, |
"dargahebrew","dargalefthebrew",0,"yerahbenyomohebrew", |
"yerahbenyomolefthebrew",0,"afii57799","sheva","sheva115","sheva15","sheva22", |
"sheva2e","shevahebrew","shevanarrowhebrew","shevaquarterhebrew", |
"shevawidehebrew",0,"afii57801","hatafsegol","hatafsegol17","hatafsegol24", |
"hatafsegol30","hatafsegolhebrew","hatafsegolnarrowhebrew", |
"hatafsegolquarterhebrew","hatafsegolwidehebrew",0,"afii57800","hatafpatah", |
"hatafpatah16","hatafpatah23","hatafpatah2f","hatafpatahhebrew", |
"hatafpatahnarrowhebrew","hatafpatahquarterhebrew","hatafpatahwidehebrew",0, |
"afii57802","hatafqamats","hatafqamats1b","hatafqamats28","hatafqamats34", |
"hatafqamatshebrew","hatafqamatsnarrowhebrew","hatafqamatsquarterhebrew", |
"hatafqamatswidehebrew",0,"afii57793","hiriq","hiriq14","hiriq21","hiriq2d", |
"hiriqhebrew","hiriqnarrowhebrew","hiriqquarterhebrew","hiriqwidehebrew",0, |
"afii57794","tsere","tsere12","tsere1e","tsere2b","tserehebrew", |
"tserenarrowhebrew","tserequarterhebrew","tserewidehebrew",0,"afii57795", |
"segol","segol13","segol1f","segol2c","segolhebrew","segolnarrowhebrew", |
"segolquarterhebrew","segolwidehebrew",0,"afii57798","patah","patah11", |
"patah1d","patah2a","patahhebrew","patahnarrowhebrew","patahquarterhebrew", |
"patahwidehebrew",0,"afii57797","qamats","qamats10","qamats1a","qamats1c", |
"qamats27","qamats29","qamats33","qamatsde","qamatshebrew", |
"qamatsnarrowhebrew","qamatsqatanhebrew","qamatsqatannarrowhebrew", |
"qamatsqatanquarterhebrew","qamatsqatanwidehebrew","qamatsquarterhebrew", |
"qamatswidehebrew",0,"afii57806","holam","holam19","holam26","holam32", |
"holamhebrew","holamnarrowhebrew","holamquarterhebrew","holamwidehebrew",0, |
"afii57796","qubuts","qubuts18","qubuts25","qubuts31","qubutshebrew", |
"qubutsnarrowhebrew","qubutsquarterhebrew","qubutswidehebrew",0,"afii57807", |
"dagesh","dageshhebrew",0,"afii57839","siluqhebrew","siluqlefthebrew",0, |
"afii57645","maqafhebrew",0,"afii57841","rafe","rafehebrew",0,"afii57842", |
"paseqhebrew",0,"afii57804","shindothebrew",0,"afii57803","sindothebrew",0, |
"afii57658","sofpasuqhebrew",0,"afii57664","alef","alefhebrew",0,"afii57665", |
"bet","bethebrew",0,"afii57666","gimel","gimelhebrew",0,"afii57667","dalet", |
"dalethatafpatah","dalethatafpatahhebrew","dalethatafsegol", |
"dalethatafsegolhebrew","dalethebrew","dalethiriq","dalethiriqhebrew", |
"daletholam","daletholamhebrew","daletpatah","daletpatahhebrew","daletqamats", |
"daletqamatshebrew","daletqubuts","daletqubutshebrew","daletsegol", |
"daletsegolhebrew","daletsheva","daletshevahebrew","dalettsere", |
"dalettserehebrew",0,"afii57668","he","hehebrew",0,"afii57669","vav", |
"vavhebrew",0,"afii57670","zayin","zayinhebrew",0,"afii57671","het", |
"hethebrew",0,"afii57672","tet","tethebrew",0,"afii57673","yod","yodhebrew",0, |
"afii57674","finalkaf","finalkafhebrew","finalkafqamats", |
"finalkafqamatshebrew","finalkafsheva","finalkafshevahebrew",0,"afii57675", |
"kaf","kafhebrew",0,"afii57676","lamed","lamedhebrew","lamedholam", |
"lamedholamdagesh","lamedholamdageshhebrew","lamedholamhebrew",0,"afii57677", |
"finalmem","finalmemhebrew",0,"afii57678","mem","memhebrew",0,"afii57679", |
"finalnun","finalnunhebrew",0,"afii57680","nun","nunhebrew",0,"afii57681", |
"samekh","samekhhebrew",0,"afii57682","ayin","ayinhebrew",0,"afii57683", |
"finalpe","finalpehebrew",0,"afii57684","pe","pehebrew",0,"afii57685", |
"finaltsadi","finaltsadihebrew",0,"afii57686","tsadi","tsadihebrew",0, |
"afii57687","qof","qofhatafpatah","qofhatafpatahhebrew","qofhatafsegol", |
"qofhatafsegolhebrew","qofhebrew","qofhiriq","qofhiriqhebrew","qofholam", |
"qofholamhebrew","qofpatah","qofpatahhebrew","qofqamats","qofqamatshebrew", |
"qofqubuts","qofqubutshebrew","qofsegol","qofsegolhebrew","qofsheva", |
"qofshevahebrew","qoftsere","qoftserehebrew",0,"afii57688","resh", |
"reshhatafpatah","reshhatafpatahhebrew","reshhatafsegol", |
"reshhatafsegolhebrew","reshhebrew","reshhiriq","reshhiriqhebrew","reshholam", |
"reshholamhebrew","reshpatah","reshpatahhebrew","reshqamats", |
"reshqamatshebrew","reshqubuts","reshqubutshebrew","reshsegol", |
"reshsegolhebrew","reshsheva","reshshevahebrew","reshtsere","reshtserehebrew", |
0,"afii57689","shin","shinhebrew",0,"afii57690","tav","tavhebrew",0, |
"afii57716","vavvavhebrew",0,"afii57717","vavyodhebrew",0,"afii57718", |
"yodyodhebrew",0,"afii57388","commaarabic",0,"afii57403","semicolonarabic",0, |
"afii57407","questionarabic",0,"afii57409","hamzaarabic","hamzadammaarabic", |
"hamzadammatanarabic","hamzafathaarabic","hamzafathatanarabic", |
"hamzalowarabic","hamzalowkasraarabic","hamzalowkasratanarabic", |
"hamzasukunarabic",0,"afii57410","alefmaddaabovearabic",0,"afii57411", |
"alefhamzaabovearabic",0,"afii57412","wawhamzaabovearabic",0,"afii57413", |
"alefhamzabelowarabic",0,"afii57414","yehhamzaabovearabic",0,"afii57415", |
"alefarabic",0,"afii57416","beharabic",0,"afii57417","tehmarbutaarabic",0, |
"afii57418","teharabic",0,"afii57419","theharabic",0,"afii57420","jeemarabic", |
0,"afii57421","haharabic",0,"afii57422","khaharabic",0,"afii57423", |
"dalarabic",0,"afii57424","thalarabic",0,"afii57425","reharabic", |
"rehyehaleflamarabic",0,"afii57426","zainarabic",0,"afii57427","seenarabic",0, |
"afii57428","sheenarabic",0,"afii57429","sadarabic",0,"afii57430","dadarabic", |
0,"afii57431","taharabic",0,"afii57432","zaharabic",0,"afii57433","ainarabic", |
0,"afii57434","ghainarabic",0,"afii57440","kashidaautoarabic", |
"kashidaautonosidebearingarabic","tatweelarabic",0,"afii57441","feharabic",0, |
"afii57442","qafarabic",0,"afii57443","kafarabic",0,"afii57444","lamarabic",0, |
"afii57445","meemarabic",0,"afii57446","noonarabic",0,"afii57470","heharabic", |
0,"afii57448","wawarabic",0,"afii57449","alefmaksuraarabic",0,"afii57450", |
"yeharabic",0,"afii57451","fathatanarabic",0,"afii57452", |
"dammatanaltonearabic","dammatanarabic",0,"afii57453","kasratanarabic",0, |
"afii57454","fathaarabic","fathalowarabic",0,"afii57455","dammaarabic", |
"dammalowarabic",0,"afii57456","kasraarabic",0,"afii57457","shaddaarabic", |
"shaddafathatanarabic",0,"afii57458","sukunarabic",0,"afii57392","zeroarabic", |
"zerohackarabic",0,"afii57393","onearabic","onehackarabic",0,"afii57394", |
"twoarabic","twohackarabic",0,"afii57395","threearabic","threehackarabic",0, |
"afii57396","fourarabic","fourhackarabic",0,"afii57397","fivearabic", |
"fivehackarabic",0,"afii57398","sixarabic","sixhackarabic",0,"afii57399", |
"sevenarabic","sevenhackarabic",0,"afii57400","eightarabic","eighthackarabic", |
0,"afii57401","ninearabic","ninehackarabic",0,"afii57381","percentarabic",0, |
"decimalseparatorarabic","decimalseparatorpersian",0, |
"thousandsseparatorarabic","thousandsseparatorpersian",0,"afii63167", |
"asteriskaltonearabic","asteriskarabic",0,"afii57511","tteharabic",0, |
"afii57506","peharabic",0,"afii57507","tcheharabic",0,"afii57512", |
"ddalarabic",0,"afii57513","rreharabic",0,"afii57508","jeharabic",0, |
"afii57505","veharabic",0,"afii57509","gafarabic",0,"afii57514", |
"noonghunnaarabic",0,"haaltonearabic","hehaltonearabic",0,"afii57519", |
"yehbarreearabic",0,"afii61664","zerowidthnonjoiner",0,"afii00208", |
"horizontalbar",0,"dbllowline","underscoredbl",0,"quoteleftreversed", |
"quotereversed",0,"twodotenleader","twodotleader",0,"colonmonetary", |
"colonsign",0,"afii08941","lira",0,"afii57636","newsheqelsign","sheqel", |
"sheqelhebrew",0,"Euro","euro",0,"afii61248","careof",0,"afii61289","lsquare", |
0,"afii61352","numero",0,"Ohm","Omega",0,"arrowupdnbse","arrowupdownbase",0, |
"arrowdblleft","arrowleftdbl",0,"arrowdblright","dblarrowright",0, |
"arrowdblboth","dblarrowleft",0,"forall","universal",0,"existential", |
"thereexists",0,"Delta","increment",0,"gradient","nabla",0,"notelement", |
"notelementof",0,"orthogonal","rightangle",0,"similar","tildeoperator",0, |
"approximatelyequal","congruent",0,"propersubset","subset",0,"propersuperset", |
"superset",0,"reflexsubset","subsetorequal",0,"reflexsuperset", |
"supersetorequal",0,"circleplus","pluscircle",0,"circlemultiply", |
"timescircle",0,"logicalnotreversed","revlogicalnot",0,"integraltop", |
"integraltp",0,"integralbottom","integralbt",0,"ltshade","shadelight",0, |
"shade","shademedium",0,"dkshade","shadedark",0,"blacksquare","filledbox",0, |
"H22073","whitesquare",0,"H18543","blacksmallsquare",0,"H18551", |
"whitesmallsquare",0,"blackrectangle","filledrect",0, |
"blackuppointingtriangle","triagup",0,"blackrightpointingpointer","triagrt",0, |
"blackdownpointingtriangle","triagdn",0,"blackleftpointingpointer","triaglf", |
0,"circle","whitecircle",0,"H18533","blackcircle",0,"bulletinverse", |
"invbullet",0,"invcircle","whitecircleinverse",0,"openbullet","whitebullet",0, |
"smileface","whitesmilingface",0,"blacksmilingface","invsmileface",0, |
"compass","sun",0,"female","venus",0,"male","mars",0,"spade","spadesuitblack", |
0,"club","clubsuitblack",0,"heart","heartsuitblack",0,"eighthnotebeamed", |
"musicalnotedbl",0,"afii57705","doubleyodpatah","doubleyodpatahhebrew", |
"yodyodpatahhebrew",0,"afii57694","shinshindot","shinshindothebrew",0, |
"afii57695","shinsindot","shinsindothebrew",0,"shindageshshindot", |
"shindageshshindothebrew",0,"shindageshsindot","shindageshsindothebrew",0, |
"betdagesh","betdageshhebrew",0,"gimeldagesh","gimeldageshhebrew",0, |
"daletdagesh","daletdageshhebrew",0,"hedagesh","hedageshhebrew",0,"afii57723", |
"vavdagesh","vavdagesh65","vavdageshhebrew",0,"zayindagesh", |
"zayindageshhebrew",0,"tetdagesh","tetdageshhebrew",0,"yoddagesh", |
"yoddageshhebrew",0,"finalkafdagesh","finalkafdageshhebrew",0,"kafdagesh", |
"kafdageshhebrew",0,"lameddagesh","lameddageshhebrew",0,"memdagesh", |
"memdageshhebrew",0,"nundagesh","nundageshhebrew",0,"samekhdagesh", |
"samekhdageshhebrew",0,"pedagesh","pedageshhebrew",0,"tsadidagesh", |
"tsadidageshhebrew",0,"qofdagesh","qofdageshhebrew",0,"shindagesh", |
"shindageshhebrew",0,"tavdages","tavdagesh","tavdageshhebrew",0,"afii57700", |
"vavholam","vavholamhebrew",0,"tchehinitialarabic","tchehmeeminitialarabic",0, |
"laminitialarabic","lammeemjeeminitialarabic","lammeemkhahinitialarabic",0, |
"noonhehinitialarabic","nooninitialarabic",0,"hehfinalalttwoarabic", |
"hehfinalarabic",0,"alefmaksurainitialarabic","yehinitialarabic",0, |
"alefmaksuramedialarabic","yehmedialarabic",0, |
}; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/mupdf.h |
---|
0,0 → 1,493 |
#ifndef _MUPDF_H_ |
#define _MUPDF_H_ |
#ifndef _FITZ_H_ |
#error "fitz.h must be included before mupdf.h" |
#endif |
typedef struct pdf_xref_s pdf_xref; |
/* |
* tokenizer and low-level object parser |
*/ |
enum |
{ |
PDF_TOK_ERROR, PDF_TOK_EOF, |
PDF_TOK_OPEN_ARRAY, PDF_TOK_CLOSE_ARRAY, |
PDF_TOK_OPEN_DICT, PDF_TOK_CLOSE_DICT, |
PDF_TOK_OPEN_BRACE, PDF_TOK_CLOSE_BRACE, |
PDF_TOK_NAME, PDF_TOK_INT, PDF_TOK_REAL, PDF_TOK_STRING, PDF_TOK_KEYWORD, |
PDF_TOK_R, PDF_TOK_TRUE, PDF_TOK_FALSE, PDF_TOK_NULL, |
PDF_TOK_OBJ, PDF_TOK_ENDOBJ, |
PDF_TOK_STREAM, PDF_TOK_ENDSTREAM, |
PDF_TOK_XREF, PDF_TOK_TRAILER, PDF_TOK_STARTXREF, |
PDF_NUM_TOKENS |
}; |
fz_error pdf_lex(int *tok, fz_stream *f, char *buf, int n, int *len); |
fz_error pdf_parse_array(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
fz_error pdf_parse_dict(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
fz_error pdf_parse_stm_obj(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
fz_error pdf_parse_ind_obj(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap, int *num, int *gen, int *stm_ofs); |
fz_rect pdf_to_rect(fz_obj *array); |
fz_matrix pdf_to_matrix(fz_obj *array); |
char *pdf_to_utf8(fz_obj *src); |
unsigned short *pdf_to_ucs2(fz_obj *src); |
fz_obj *pdf_to_utf8_name(fz_obj *src); |
char *pdf_from_ucs2(unsigned short *str); |
/* |
* xref and object / stream api |
*/ |
typedef struct pdf_xref_entry_s pdf_xref_entry; |
typedef struct pdf_crypt_s pdf_crypt; |
struct pdf_xref_entry_s |
{ |
int ofs; /* file offset / objstm object number */ |
int gen; /* generation / objstm index */ |
int stm_ofs; /* on-disk stream */ |
fz_obj *obj; /* stored/cached object */ |
int type; /* 0=unset (f)ree i(n)use (o)bjstm */ |
}; |
struct pdf_xref_s |
{ |
fz_stream *file; |
int version; |
int startxref; |
int file_size; |
pdf_crypt *crypt; |
fz_obj *trailer; |
int len; |
pdf_xref_entry *table; |
int page_len; |
int page_cap; |
fz_obj **page_objs; |
fz_obj **page_refs; |
struct pdf_store_s *store; |
char scratch[65536]; |
}; |
fz_obj *pdf_resolve_indirect(fz_obj *ref); |
fz_error pdf_cache_object(pdf_xref *, int num, int gen); |
fz_error pdf_load_object(fz_obj **objp, pdf_xref *, int num, int gen); |
void pdf_update_object( pdf_xref *xref, int num, int gen, fz_obj *newobj); |
int pdf_is_stream(pdf_xref *xref, int num, int gen); |
fz_stream *pdf_open_inline_stream(fz_stream *chain, pdf_xref *xref, fz_obj *stmobj, int length); |
fz_error pdf_load_raw_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen); |
fz_error pdf_load_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen); |
fz_error pdf_open_raw_stream(fz_stream **stmp, pdf_xref *, int num, int gen); |
fz_error pdf_open_stream(fz_stream **stmp, pdf_xref *, int num, int gen); |
fz_error pdf_open_stream_at(fz_stream **stmp, pdf_xref *xref, int num, int gen, fz_obj *dict, int stm_ofs); |
fz_error pdf_open_xref_with_stream(pdf_xref **xrefp, fz_stream *file, char *password); |
fz_error pdf_open_xref(pdf_xref **xrefp, const char *filename, char *password); |
void pdf_free_xref(pdf_xref *); |
/* private */ |
fz_error pdf_repair_xref(pdf_xref *xref, char *buf, int bufsize); |
fz_error pdf_repair_obj_stms(pdf_xref *xref); |
void pdf_debug_xref(pdf_xref *); |
void pdf_resize_xref(pdf_xref *xref, int newcap); |
/* |
* Encryption |
*/ |
enum |
{ |
PDF_PERM_PRINT = 1 << 2, |
PDF_PERM_CHANGE = 1 << 3, |
PDF_PERM_COPY = 1 << 4, |
PDF_PERM_NOTES = 1 << 5, |
PDF_PERM_FILL_FORM = 1 << 8, |
PDF_PERM_ACCESSIBILITY = 1 << 9, |
PDF_PERM_ASSEMBLE = 1 << 10, |
PDF_PERM_HIGH_RES_PRINT = 1 << 11, |
PDF_DEFAULT_PERM_FLAGS = 0xfffc |
}; |
fz_error pdf_new_crypt(pdf_crypt **cp, fz_obj *enc, fz_obj *id); |
void pdf_free_crypt(pdf_crypt *crypt); |
void pdf_crypt_obj(pdf_crypt *crypt, fz_obj *obj, int num, int gen); |
fz_stream *pdf_open_crypt(fz_stream *chain, pdf_crypt *crypt, int num, int gen); |
fz_stream *pdf_open_crypt_with_filter(fz_stream *chain, pdf_crypt *crypt, char *name, int num, int gen); |
int pdf_needs_password(pdf_xref *xref); |
int pdf_authenticate_password(pdf_xref *xref, char *pw); |
int pdf_has_permission(pdf_xref *xref, int p); |
int pdf_get_crypt_revision(pdf_xref *xref); |
char *pdf_get_crypt_method(pdf_xref *xref); |
int pdf_get_crypt_length(pdf_xref *xref); |
unsigned char *pdf_get_crypt_key(pdf_xref *xref); |
void pdf_debug_crypt(pdf_crypt *crypt); |
/* |
* Resource store |
*/ |
typedef struct pdf_store_s pdf_store; |
pdf_store *pdf_new_store(void); |
void pdf_free_store(pdf_store *store); |
void pdf_debug_store(pdf_store *store); |
void pdf_store_item(pdf_store *store, void *keepfn, void *dropfn, fz_obj *key, void *val); |
void *pdf_find_item(pdf_store *store, void *dropfn, fz_obj *key); |
void pdf_remove_item(pdf_store *store, void *dropfn, fz_obj *key); |
void pdf_age_store(pdf_store *store, int maxage); |
/* |
* Functions, Colorspaces, Shadings and Images |
*/ |
typedef struct pdf_function_s pdf_function; |
fz_error pdf_load_function(pdf_function **func, pdf_xref *xref, fz_obj *ref); |
void pdf_eval_function(pdf_function *func, float *in, int inlen, float *out, int outlen); |
pdf_function *pdf_keep_function(pdf_function *func); |
void pdf_drop_function(pdf_function *func); |
fz_error pdf_load_colorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj); |
fz_pixmap *pdf_expand_indexed_pixmap(fz_pixmap *src); |
fz_error pdf_load_shading(fz_shade **shadep, pdf_xref *xref, fz_obj *obj); |
fz_error pdf_load_inline_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict, fz_stream *file); |
fz_error pdf_load_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *obj); |
int pdf_is_jpx_image(fz_obj *dict); |
/* |
* Pattern |
*/ |
typedef struct pdf_pattern_s pdf_pattern; |
struct pdf_pattern_s |
{ |
int refs; |
int ismask; |
float xstep; |
float ystep; |
fz_matrix matrix; |
fz_rect bbox; |
fz_obj *resources; |
fz_buffer *contents; |
}; |
fz_error pdf_load_pattern(pdf_pattern **patp, pdf_xref *xref, fz_obj *obj); |
pdf_pattern *pdf_keep_pattern(pdf_pattern *pat); |
void pdf_drop_pattern(pdf_pattern *pat); |
/* |
* XObject |
*/ |
typedef struct pdf_xobject_s pdf_xobject; |
struct pdf_xobject_s |
{ |
int refs; |
fz_matrix matrix; |
fz_rect bbox; |
int isolated; |
int knockout; |
int transparency; |
fz_colorspace *colorspace; |
fz_obj *resources; |
fz_buffer *contents; |
}; |
fz_error pdf_load_xobject(pdf_xobject **xobjp, pdf_xref *xref, fz_obj *obj); |
pdf_xobject *pdf_keep_xobject(pdf_xobject *xobj); |
void pdf_drop_xobject(pdf_xobject *xobj); |
/* |
* CMap |
*/ |
typedef struct pdf_cmap_s pdf_cmap; |
typedef struct pdf_range_s pdf_range; |
enum { PDF_CMAP_SINGLE, PDF_CMAP_RANGE, PDF_CMAP_TABLE, PDF_CMAP_MULTI }; |
struct pdf_range_s |
{ |
unsigned short low; |
/* Next, we pack 2 fields into the same unsigned short. Top 14 bits |
* are the extent, bottom 2 bits are flags: single, range, table, |
* multi */ |
unsigned short extent_flags; |
unsigned short offset; /* range-delta or table-index */ |
}; |
struct pdf_cmap_s |
{ |
int refs; |
char cmap_name[32]; |
char usecmap_name[32]; |
pdf_cmap *usecmap; |
int wmode; |
int codespace_len; |
struct |
{ |
unsigned short n; |
unsigned short low; |
unsigned short high; |
} codespace[40]; |
int rlen, rcap; |
pdf_range *ranges; |
int tlen, tcap; |
unsigned short *table; |
}; |
pdf_cmap *pdf_new_cmap(void); |
pdf_cmap *pdf_keep_cmap(pdf_cmap *cmap); |
void pdf_drop_cmap(pdf_cmap *cmap); |
void pdf_debug_cmap(pdf_cmap *cmap); |
int pdf_get_wmode(pdf_cmap *cmap); |
void pdf_set_wmode(pdf_cmap *cmap, int wmode); |
void pdf_set_usecmap(pdf_cmap *cmap, pdf_cmap *usecmap); |
void pdf_add_codespace(pdf_cmap *cmap, int low, int high, int n); |
void pdf_map_range_to_table(pdf_cmap *cmap, int low, int *map, int len); |
void pdf_map_range_to_range(pdf_cmap *cmap, int srclo, int srchi, int dstlo); |
void pdf_map_one_to_many(pdf_cmap *cmap, int one, int *many, int len); |
void pdf_sort_cmap(pdf_cmap *cmap); |
int pdf_lookup_cmap(pdf_cmap *cmap, int cpt); |
int pdf_lookup_cmap_full(pdf_cmap *cmap, int cpt, int *out); |
unsigned char *pdf_decode_cmap(pdf_cmap *cmap, unsigned char *s, int *cpt); |
pdf_cmap *pdf_new_identity_cmap(int wmode, int bytes); |
fz_error pdf_parse_cmap(pdf_cmap **cmapp, fz_stream *file); |
fz_error pdf_load_embedded_cmap(pdf_cmap **cmapp, pdf_xref *xref, fz_obj *ref); |
fz_error pdf_load_system_cmap(pdf_cmap **cmapp, char *name); |
pdf_cmap *pdf_find_builtin_cmap(char *cmap_name); |
/* |
* Font |
*/ |
enum |
{ |
PDF_FD_FIXED_PITCH = 1 << 0, |
PDF_FD_SERIF = 1 << 1, |
PDF_FD_SYMBOLIC = 1 << 2, |
PDF_FD_SCRIPT = 1 << 3, |
PDF_FD_NONSYMBOLIC = 1 << 5, |
PDF_FD_ITALIC = 1 << 6, |
PDF_FD_ALL_CAP = 1 << 16, |
PDF_FD_SMALL_CAP = 1 << 17, |
PDF_FD_FORCE_BOLD = 1 << 18 |
}; |
enum { PDF_ROS_CNS, PDF_ROS_GB, PDF_ROS_JAPAN, PDF_ROS_KOREA }; |
void pdf_load_encoding(char **estrings, char *encoding); |
int pdf_lookup_agl(char *name); |
const char **pdf_lookup_agl_duplicates(int ucs); |
extern const unsigned short pdf_doc_encoding[256]; |
extern const char * const pdf_mac_roman[256]; |
extern const char * const pdf_mac_expert[256]; |
extern const char * const pdf_win_ansi[256]; |
extern const char * const pdf_standard[256]; |
typedef struct pdf_font_desc_s pdf_font_desc; |
typedef struct pdf_hmtx_s pdf_hmtx; |
typedef struct pdf_vmtx_s pdf_vmtx; |
struct pdf_hmtx_s |
{ |
unsigned short lo; |
unsigned short hi; |
int w; /* type3 fonts can be big! */ |
}; |
struct pdf_vmtx_s |
{ |
unsigned short lo; |
unsigned short hi; |
short x; |
short y; |
short w; |
}; |
struct pdf_font_desc_s |
{ |
int refs; |
fz_font *font; |
/* FontDescriptor */ |
int flags; |
float italic_angle; |
float ascent; |
float descent; |
float cap_height; |
float x_height; |
float missing_width; |
/* Encoding (CMap) */ |
pdf_cmap *encoding; |
pdf_cmap *to_ttf_cmap; |
int cid_to_gid_len; |
unsigned short *cid_to_gid; |
/* ToUnicode */ |
pdf_cmap *to_unicode; |
int cid_to_ucs_len; |
unsigned short *cid_to_ucs; |
/* Metrics (given in the PDF file) */ |
int wmode; |
int hmtx_len, hmtx_cap; |
pdf_hmtx dhmtx; |
pdf_hmtx *hmtx; |
int vmtx_len, vmtx_cap; |
pdf_vmtx dvmtx; |
pdf_vmtx *vmtx; |
int is_embedded; |
}; |
void pdf_set_font_wmode(pdf_font_desc *font, int wmode); |
void pdf_set_default_hmtx(pdf_font_desc *font, int w); |
void pdf_set_default_vmtx(pdf_font_desc *font, int y, int w); |
void pdf_add_hmtx(pdf_font_desc *font, int lo, int hi, int w); |
void pdf_add_vmtx(pdf_font_desc *font, int lo, int hi, int x, int y, int w); |
void pdf_end_hmtx(pdf_font_desc *font); |
void pdf_end_vmtx(pdf_font_desc *font); |
pdf_hmtx pdf_get_hmtx(pdf_font_desc *font, int cid); |
pdf_vmtx pdf_get_vmtx(pdf_font_desc *font, int cid); |
fz_error pdf_load_to_unicode(pdf_font_desc *font, pdf_xref *xref, char **strings, char *collection, fz_obj *cmapstm); |
int pdf_font_cid_to_gid(pdf_font_desc *fontdesc, int cid); |
unsigned char *pdf_find_builtin_font(char *name, unsigned int *len); |
unsigned char *pdf_find_substitute_font(int mono, int serif, int bold, int italic, unsigned int *len); |
unsigned char *pdf_find_substitute_cjk_font(int ros, int serif, unsigned int *len); |
fz_error pdf_load_type3_font(pdf_font_desc **fontp, pdf_xref *xref, fz_obj *rdb, fz_obj *obj); |
fz_error pdf_load_font(pdf_font_desc **fontp, pdf_xref *xref, fz_obj *rdb, fz_obj *obj); |
pdf_font_desc *pdf_new_font_desc(void); |
pdf_font_desc *pdf_keep_font(pdf_font_desc *fontdesc); |
void pdf_drop_font(pdf_font_desc *font); |
void pdf_debug_font(pdf_font_desc *fontdesc); |
/* |
* Interactive features |
*/ |
typedef struct pdf_link_s pdf_link; |
typedef struct pdf_annot_s pdf_annot; |
typedef struct pdf_outline_s pdf_outline; |
typedef enum pdf_link_kind_e |
{ |
PDF_LINK_GOTO = 0, |
PDF_LINK_URI, |
PDF_LINK_LAUNCH, |
PDF_LINK_NAMED, |
PDF_LINK_ACTION, |
} pdf_link_kind; |
struct pdf_link_s |
{ |
pdf_link_kind kind; |
fz_rect rect; |
fz_obj *dest; |
pdf_link *next; |
}; |
struct pdf_annot_s |
{ |
fz_obj *obj; |
fz_rect rect; |
pdf_xobject *ap; |
fz_matrix matrix; |
pdf_annot *next; |
}; |
struct pdf_outline_s |
{ |
char *title; |
pdf_link *link; |
int count; |
pdf_outline *child; |
pdf_outline *next; |
}; |
fz_obj *pdf_lookup_dest(pdf_xref *xref, fz_obj *needle); |
fz_obj *pdf_lookup_name(pdf_xref *xref, char *which, fz_obj *needle); |
fz_obj *pdf_load_name_tree(pdf_xref *xref, char *which); |
pdf_outline *pdf_load_outline(pdf_xref *xref); |
void pdf_debug_outline(pdf_outline *outline, int level); |
void pdf_free_outline(pdf_outline *outline); |
pdf_link *pdf_load_link(pdf_xref *xref, fz_obj *dict); |
void pdf_load_links(pdf_link **, pdf_xref *, fz_obj *annots); |
void pdf_free_link(pdf_link *link); |
void pdf_load_annots(pdf_annot **, pdf_xref *, fz_obj *annots); |
void pdf_free_annot(pdf_annot *link); |
/* |
* Page tree, pages and related objects |
*/ |
typedef struct pdf_page_s pdf_page; |
struct pdf_page_s |
{ |
fz_rect mediabox; |
int rotate; |
int transparency; |
fz_obj *resources; |
fz_buffer *contents; |
pdf_link *links; |
pdf_annot *annots; |
}; |
fz_error pdf_load_page_tree(pdf_xref *xref); |
int pdf_find_page_number(pdf_xref *xref, fz_obj *pageobj); |
int pdf_count_pages(pdf_xref *xref); |
fz_error pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number); |
void pdf_free_page(pdf_page *page); |
/* |
* Content stream parsing |
*/ |
fz_error pdf_run_page_with_usage(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm, char *target); |
fz_error pdf_run_page(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm); |
fz_error pdf_run_glyph(pdf_xref *xref, fz_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm); |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_annot.c |
---|
0,0 → 1,234 |
#include "fitz.h" |
#include "mupdf.h" |
void |
pdf_free_link(pdf_link *link) |
{ |
if (link->next) |
pdf_free_link(link->next); |
if (link->dest) |
fz_drop_obj(link->dest); |
fz_free(link); |
} |
static fz_obj * |
resolve_dest(pdf_xref *xref, fz_obj *dest) |
{ |
if (fz_is_name(dest) || fz_is_string(dest)) |
{ |
dest = pdf_lookup_dest(xref, dest); |
return resolve_dest(xref, dest); |
} |
else if (fz_is_array(dest)) |
{ |
return dest; |
} |
else if (fz_is_dict(dest)) |
{ |
dest = fz_dict_gets(dest, "D"); |
return resolve_dest(xref, dest); |
} |
else if (fz_is_indirect(dest)) |
return dest; |
return NULL; |
} |
pdf_link * |
pdf_load_link(pdf_xref *xref, fz_obj *dict) |
{ |
fz_obj *dest; |
fz_obj *action; |
fz_obj *obj; |
fz_rect bbox; |
pdf_link_kind kind; |
dest = NULL; |
obj = fz_dict_gets(dict, "Rect"); |
if (obj) |
bbox = pdf_to_rect(obj); |
else |
bbox = fz_empty_rect; |
obj = fz_dict_gets(dict, "Dest"); |
if (obj) |
{ |
kind = PDF_LINK_GOTO; |
dest = resolve_dest(xref, obj); |
} |
action = fz_dict_gets(dict, "A"); |
/* fall back to additional action button's down/up action */ |
if (!action) |
action = fz_dict_getsa(fz_dict_gets(dict, "AA"), "U", "D"); |
if (action) |
{ |
obj = fz_dict_gets(action, "S"); |
if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "GoTo")) |
{ |
kind = PDF_LINK_GOTO; |
dest = resolve_dest(xref, fz_dict_gets(action, "D")); |
} |
else if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "URI")) |
{ |
kind = PDF_LINK_URI; |
dest = fz_dict_gets(action, "URI"); |
} |
else if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "Launch")) |
{ |
kind = PDF_LINK_LAUNCH; |
dest = fz_dict_gets(action, "F"); |
} |
else if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "Named")) |
{ |
kind = PDF_LINK_NAMED; |
dest = fz_dict_gets(action, "N"); |
} |
else if (fz_is_name(obj) && (!strcmp(fz_to_name(obj), "GoToR"))) |
{ |
kind = PDF_LINK_ACTION; |
dest = action; |
} |
else |
{ |
dest = NULL; |
} |
} |
if (dest) |
{ |
pdf_link *link = fz_malloc(sizeof(pdf_link)); |
link->kind = kind; |
link->rect = bbox; |
link->dest = fz_keep_obj(dest); |
link->next = NULL; |
return link; |
} |
return NULL; |
} |
void |
pdf_load_links(pdf_link **linkp, pdf_xref *xref, fz_obj *annots) |
{ |
pdf_link *link, *head, *tail; |
fz_obj *obj; |
int i; |
head = tail = NULL; |
link = NULL; |
for (i = 0; i < fz_array_len(annots); i++) |
{ |
obj = fz_array_get(annots, i); |
link = pdf_load_link(xref, obj); |
if (link) |
{ |
if (!head) |
head = tail = link; |
else |
{ |
tail->next = link; |
tail = link; |
} |
} |
} |
*linkp = head; |
} |
void |
pdf_free_annot(pdf_annot *annot) |
{ |
if (annot->next) |
pdf_free_annot(annot->next); |
if (annot->ap) |
pdf_drop_xobject(annot->ap); |
if (annot->obj) |
fz_drop_obj(annot->obj); |
fz_free(annot); |
} |
static void |
pdf_transform_annot(pdf_annot *annot) |
{ |
fz_matrix matrix = annot->ap->matrix; |
fz_rect bbox = annot->ap->bbox; |
fz_rect rect = annot->rect; |
float w, h, x, y; |
bbox = fz_transform_rect(matrix, bbox); |
w = (rect.x1 - rect.x0) / (bbox.x1 - bbox.x0); |
h = (rect.y1 - rect.y0) / (bbox.y1 - bbox.y0); |
x = rect.x0 - bbox.x0; |
y = rect.y0 - bbox.y0; |
annot->matrix = fz_concat(fz_scale(w, h), fz_translate(x, y)); |
} |
void |
pdf_load_annots(pdf_annot **annotp, pdf_xref *xref, fz_obj *annots) |
{ |
pdf_annot *annot, *head, *tail; |
fz_obj *obj, *ap, *as, *n, *rect; |
pdf_xobject *form; |
fz_error error; |
int i; |
head = tail = NULL; |
annot = NULL; |
for (i = 0; i < fz_array_len(annots); i++) |
{ |
obj = fz_array_get(annots, i); |
rect = fz_dict_gets(obj, "Rect"); |
ap = fz_dict_gets(obj, "AP"); |
as = fz_dict_gets(obj, "AS"); |
if (fz_is_dict(ap)) |
{ |
n = fz_dict_gets(ap, "N"); /* normal state */ |
/* lookup current state in sub-dictionary */ |
if (!pdf_is_stream(xref, fz_to_num(n), fz_to_gen(n))) |
n = fz_dict_get(n, as); |
if (pdf_is_stream(xref, fz_to_num(n), fz_to_gen(n))) |
{ |
error = pdf_load_xobject(&form, xref, n); |
if (error) |
{ |
fz_catch(error, "ignoring broken annotation"); |
continue; |
} |
annot = fz_malloc(sizeof(pdf_annot)); |
annot->obj = fz_keep_obj(obj); |
annot->rect = pdf_to_rect(rect); |
annot->ap = form; |
annot->next = NULL; |
pdf_transform_annot(annot); |
if (annot) |
{ |
if (!head) |
head = tail = annot; |
else |
{ |
tail->next = annot; |
tail = annot; |
} |
} |
} |
} |
} |
*annotp = head; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_cmap.c |
---|
0,0 → 1,510 |
/* |
* The CMap data structure here is constructed on the fly by |
* adding simple range-to-range mappings. Then the data structure |
* is optimized to contain both range-to-range and range-to-table |
* lookups. |
* |
* Any one-to-many mappings are inserted as one-to-table |
* lookups in the beginning, and are not affected by the optimization |
* stage. |
* |
* There is a special function to add a 256-length range-to-table mapping. |
* The ranges do not have to be added in order. |
* |
* This code can be a lot simpler if we don't care about wasting memory, |
* or can trust the parser to give us optimal mappings. |
*/ |
#include "fitz.h" |
#include "mupdf.h" |
/* Macros for accessing the combined extent_flags field */ |
#define pdf_range_high(r) ((r)->low + ((r)->extent_flags >> 2)) |
#define pdf_range_flags(r) ((r)->extent_flags & 3) |
#define pdf_range_set_high(r, h) \ |
((r)->extent_flags = (((r)->extent_flags & 3) | ((h - (r)->low) << 2))) |
#define pdf_range_set_flags(r, f) \ |
((r)->extent_flags = (((r)->extent_flags & ~3) | f)) |
/* |
* Allocate, destroy and simple parameters. |
*/ |
pdf_cmap * |
pdf_new_cmap(void) |
{ |
pdf_cmap *cmap; |
cmap = fz_malloc(sizeof(pdf_cmap)); |
cmap->refs = 1; |
strcpy(cmap->cmap_name, ""); |
strcpy(cmap->usecmap_name, ""); |
cmap->usecmap = NULL; |
cmap->wmode = 0; |
cmap->codespace_len = 0; |
cmap->rlen = 0; |
cmap->rcap = 0; |
cmap->ranges = NULL; |
cmap->tlen = 0; |
cmap->tcap = 0; |
cmap->table = NULL; |
return cmap; |
} |
pdf_cmap * |
pdf_keep_cmap(pdf_cmap *cmap) |
{ |
if (cmap->refs >= 0) |
cmap->refs ++; |
return cmap; |
} |
void |
pdf_drop_cmap(pdf_cmap *cmap) |
{ |
if (cmap->refs >= 0) |
{ |
if (--cmap->refs == 0) |
{ |
if (cmap->usecmap) |
pdf_drop_cmap(cmap->usecmap); |
fz_free(cmap->ranges); |
fz_free(cmap->table); |
fz_free(cmap); |
} |
} |
} |
void |
pdf_set_usecmap(pdf_cmap *cmap, pdf_cmap *usecmap) |
{ |
int i; |
if (cmap->usecmap) |
pdf_drop_cmap(cmap->usecmap); |
cmap->usecmap = pdf_keep_cmap(usecmap); |
if (cmap->codespace_len == 0) |
{ |
cmap->codespace_len = usecmap->codespace_len; |
for (i = 0; i < usecmap->codespace_len; i++) |
cmap->codespace[i] = usecmap->codespace[i]; |
} |
} |
int |
pdf_get_wmode(pdf_cmap *cmap) |
{ |
return cmap->wmode; |
} |
void |
pdf_set_wmode(pdf_cmap *cmap, int wmode) |
{ |
cmap->wmode = wmode; |
} |
void |
pdf_debug_cmap(pdf_cmap *cmap) |
{ |
int i, k, n; |
printf("cmap $%p /%s {\n", (void *) cmap, cmap->cmap_name); |
if (cmap->usecmap_name[0]) |
printf("\tusecmap /%s\n", cmap->usecmap_name); |
if (cmap->usecmap) |
printf("\tusecmap $%p\n", (void *) cmap->usecmap); |
printf("\twmode %d\n", cmap->wmode); |
printf("\tcodespaces {\n"); |
for (i = 0; i < cmap->codespace_len; i++) |
{ |
printf("\t\t<%x> <%x>\n", cmap->codespace[i].low, cmap->codespace[i].high); |
} |
printf("\t}\n"); |
printf("\tranges (%d,%d) {\n", cmap->rlen, cmap->tlen); |
for (i = 0; i < cmap->rlen; i++) |
{ |
pdf_range *r = &cmap->ranges[i]; |
printf("\t\t<%04x> <%04x> ", r->low, pdf_range_high(r)); |
if (pdf_range_flags(r) == PDF_CMAP_TABLE) |
{ |
printf("[ "); |
for (k = 0; k < pdf_range_high(r) - r->low + 1; k++) |
printf("%d ", cmap->table[r->offset + k]); |
printf("]\n"); |
} |
else if (pdf_range_flags(r) == PDF_CMAP_MULTI) |
{ |
printf("< "); |
n = cmap->table[r->offset]; |
for (k = 0; k < n; k++) |
printf("%04x ", cmap->table[r->offset + 1 + k]); |
printf(">\n"); |
} |
else |
printf("%d\n", r->offset); |
} |
printf("\t}\n}\n"); |
} |
/* |
* Add a codespacerange section. |
* These ranges are used by pdf_decode_cmap to decode |
* multi-byte encoded strings. |
*/ |
void |
pdf_add_codespace(pdf_cmap *cmap, int low, int high, int n) |
{ |
if (cmap->codespace_len + 1 == nelem(cmap->codespace)) |
{ |
fz_warn("assert: too many code space ranges"); |
return; |
} |
cmap->codespace[cmap->codespace_len].n = n; |
cmap->codespace[cmap->codespace_len].low = low; |
cmap->codespace[cmap->codespace_len].high = high; |
cmap->codespace_len ++; |
} |
/* |
* Add an integer to the table. |
*/ |
static void |
add_table(pdf_cmap *cmap, int value) |
{ |
if (cmap->tlen == USHRT_MAX) |
{ |
fz_warn("cmap table is full; ignoring additional entries"); |
return; |
} |
if (cmap->tlen + 1 > cmap->tcap) |
{ |
cmap->tcap = cmap->tcap > 1 ? (cmap->tcap * 3) / 2 : 256; |
cmap->table = fz_realloc(cmap->table, cmap->tcap, sizeof(unsigned short)); |
} |
cmap->table[cmap->tlen++] = value; |
} |
/* |
* Add a range. |
*/ |
static void |
add_range(pdf_cmap *cmap, int low, int high, int flag, int offset) |
{ |
/* If the range is too large to be represented, split it */ |
if (high - low > 0x3fff) |
{ |
add_range(cmap, low, low+0x3fff, flag, offset); |
add_range(cmap, low+0x3fff, high, flag, offset+0x3fff); |
return; |
} |
if (cmap->rlen + 1 > cmap->rcap) |
{ |
cmap->rcap = cmap->rcap > 1 ? (cmap->rcap * 3) / 2 : 256; |
cmap->ranges = fz_realloc(cmap->ranges, cmap->rcap, sizeof(pdf_range)); |
} |
cmap->ranges[cmap->rlen].low = low; |
pdf_range_set_high(&cmap->ranges[cmap->rlen], high); |
pdf_range_set_flags(&cmap->ranges[cmap->rlen], flag); |
cmap->ranges[cmap->rlen].offset = offset; |
cmap->rlen ++; |
} |
/* |
* Add a range-to-table mapping. |
*/ |
void |
pdf_map_range_to_table(pdf_cmap *cmap, int low, int *table, int len) |
{ |
int i; |
int high = low + len; |
int offset = cmap->tlen; |
if (cmap->tlen + len >= USHRT_MAX) |
fz_warn("cannot map range to table; table is full"); |
else |
{ |
for (i = 0; i < len; i++) |
add_table(cmap, table[i]); |
add_range(cmap, low, high, PDF_CMAP_TABLE, offset); |
} |
} |
/* |
* Add a range of contiguous one-to-one mappings (ie 1..5 maps to 21..25) |
*/ |
void |
pdf_map_range_to_range(pdf_cmap *cmap, int low, int high, int offset) |
{ |
add_range(cmap, low, high, high - low == 0 ? PDF_CMAP_SINGLE : PDF_CMAP_RANGE, offset); |
} |
/* |
* Add a single one-to-many mapping. |
*/ |
void |
pdf_map_one_to_many(pdf_cmap *cmap, int low, int *values, int len) |
{ |
int offset, i; |
if (len == 1) |
{ |
add_range(cmap, low, low, PDF_CMAP_SINGLE, values[0]); |
return; |
} |
if (len > 8) |
{ |
fz_warn("one to many mapping is too large (%d); truncating", len); |
len = 8; |
} |
if (len == 2 && |
values[0] >= 0xD800 && values[0] <= 0xDBFF && |
values[1] >= 0xDC00 && values[1] <= 0xDFFF) |
{ |
fz_warn("ignoring surrogate pair mapping in cmap"); |
return; |
} |
if (cmap->tlen + len + 1 >= USHRT_MAX) |
fz_warn("cannot map one to many; table is full"); |
else |
{ |
offset = cmap->tlen; |
add_table(cmap, len); |
for (i = 0; i < len; i++) |
add_table(cmap, values[i]); |
add_range(cmap, low, low, PDF_CMAP_MULTI, offset); |
} |
} |
/* |
* Sort the input ranges. |
* Merge contiguous input ranges to range-to-range if the output is contiguous. |
* Merge contiguous input ranges to range-to-table if the output is random. |
*/ |
static int cmprange(const void *va, const void *vb) |
{ |
return ((const pdf_range*)va)->low - ((const pdf_range*)vb)->low; |
} |
void |
pdf_sort_cmap(pdf_cmap *cmap) |
{ |
pdf_range *a; /* last written range on output */ |
pdf_range *b; /* current range examined on input */ |
if (cmap->rlen == 0) |
return; |
qsort(cmap->ranges, cmap->rlen, sizeof(pdf_range), cmprange); |
if (cmap->tlen == USHRT_MAX) |
{ |
fz_warn("cmap table is full; will not combine ranges"); |
return; |
} |
a = cmap->ranges; |
b = cmap->ranges + 1; |
while (b < cmap->ranges + cmap->rlen) |
{ |
/* ignore one-to-many mappings */ |
if (pdf_range_flags(b) == PDF_CMAP_MULTI) |
{ |
*(++a) = *b; |
} |
/* input contiguous */ |
else if (pdf_range_high(a) + 1 == b->low) |
{ |
/* output contiguous */ |
if (pdf_range_high(a) - a->low + a->offset + 1 == b->offset) |
{ |
/* SR -> R and SS -> R and RR -> R and RS -> R */ |
if ((pdf_range_flags(a) == PDF_CMAP_SINGLE || pdf_range_flags(a) == PDF_CMAP_RANGE) && (pdf_range_high(b) - a->low <= 0x3fff)) |
{ |
pdf_range_set_flags(a, PDF_CMAP_RANGE); |
pdf_range_set_high(a, pdf_range_high(b)); |
} |
/* LS -> L */ |
else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE && (pdf_range_high(b) - a->low <= 0x3fff)) |
{ |
pdf_range_set_high(a, pdf_range_high(b)); |
add_table(cmap, b->offset); |
} |
/* LR -> LR */ |
else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_RANGE) |
{ |
*(++a) = *b; |
} |
/* XX -> XX */ |
else |
{ |
*(++a) = *b; |
} |
} |
/* output separated */ |
else |
{ |
/* SS -> L */ |
if (pdf_range_flags(a) == PDF_CMAP_SINGLE && pdf_range_flags(b) == PDF_CMAP_SINGLE) |
{ |
pdf_range_set_flags(a, PDF_CMAP_TABLE); |
pdf_range_set_high(a, pdf_range_high(b)); |
add_table(cmap, a->offset); |
add_table(cmap, b->offset); |
a->offset = cmap->tlen - 2; |
} |
/* LS -> L */ |
else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE && (pdf_range_high(b) - a->low <= 0x3fff)) |
{ |
pdf_range_set_high(a, pdf_range_high(b)); |
add_table(cmap, b->offset); |
} |
/* XX -> XX */ |
else |
{ |
*(++a) = *b; |
} |
} |
} |
/* input separated: XX -> XX */ |
else |
{ |
*(++a) = *b; |
} |
b ++; |
} |
cmap->rlen = a - cmap->ranges + 1; |
fz_flush_warnings(); |
} |
/* |
* Lookup the mapping of a codepoint. |
*/ |
int |
pdf_lookup_cmap(pdf_cmap *cmap, int cpt) |
{ |
int l = 0; |
int r = cmap->rlen - 1; |
int m; |
while (l <= r) |
{ |
m = (l + r) >> 1; |
if (cpt < cmap->ranges[m].low) |
r = m - 1; |
else if (cpt > pdf_range_high(&cmap->ranges[m])) |
l = m + 1; |
else |
{ |
int i = cpt - cmap->ranges[m].low + cmap->ranges[m].offset; |
if (pdf_range_flags(&cmap->ranges[m]) == PDF_CMAP_TABLE) |
return cmap->table[i]; |
if (pdf_range_flags(&cmap->ranges[m]) == PDF_CMAP_MULTI) |
return -1; /* should use lookup_cmap_full */ |
return i; |
} |
} |
if (cmap->usecmap) |
return pdf_lookup_cmap(cmap->usecmap, cpt); |
return -1; |
} |
int |
pdf_lookup_cmap_full(pdf_cmap *cmap, int cpt, int *out) |
{ |
int i, k, n; |
int l = 0; |
int r = cmap->rlen - 1; |
int m; |
while (l <= r) |
{ |
m = (l + r) >> 1; |
if (cpt < cmap->ranges[m].low) |
r = m - 1; |
else if (cpt > pdf_range_high(&cmap->ranges[m])) |
l = m + 1; |
else |
{ |
k = cpt - cmap->ranges[m].low + cmap->ranges[m].offset; |
if (pdf_range_flags(&cmap->ranges[m]) == PDF_CMAP_TABLE) |
{ |
out[0] = cmap->table[k]; |
return 1; |
} |
else if (pdf_range_flags(&cmap->ranges[m]) == PDF_CMAP_MULTI) |
{ |
n = cmap->ranges[m].offset; |
for (i = 0; i < cmap->table[n]; i++) |
out[i] = cmap->table[n + i + 1]; |
return cmap->table[n]; |
} |
else |
{ |
out[0] = k; |
return 1; |
} |
} |
} |
if (cmap->usecmap) |
return pdf_lookup_cmap_full(cmap->usecmap, cpt, out); |
return 0; |
} |
/* |
* Use the codespace ranges to extract a codepoint from a |
* multi-byte encoded string. |
*/ |
unsigned char * |
pdf_decode_cmap(pdf_cmap *cmap, unsigned char *buf, int *cpt) |
{ |
int k, n, c; |
c = 0; |
for (n = 0; n < 4; n++) |
{ |
c = (c << 8) | buf[n]; |
for (k = 0; k < cmap->codespace_len; k++) |
{ |
if (cmap->codespace[k].n == n + 1) |
{ |
if (c >= cmap->codespace[k].low && c <= cmap->codespace[k].high) |
{ |
*cpt = c; |
return buf + n + 1; |
} |
} |
} |
} |
*cpt = 0; |
return buf + 1; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_cmap_load.c |
---|
0,0 → 1,118 |
#include "fitz.h" |
#include "mupdf.h" |
/* |
* Load CMap stream in PDF file |
*/ |
fz_error |
pdf_load_embedded_cmap(pdf_cmap **cmapp, pdf_xref *xref, fz_obj *stmobj) |
{ |
fz_error error = fz_okay; |
fz_stream *file = NULL; |
pdf_cmap *cmap = NULL; |
pdf_cmap *usecmap; |
fz_obj *wmode; |
fz_obj *obj; |
if ((*cmapp = pdf_find_item(xref->store, pdf_drop_cmap, stmobj))) |
{ |
pdf_keep_cmap(*cmapp); |
return fz_okay; |
} |
error = pdf_open_stream(&file, xref, fz_to_num(stmobj), fz_to_gen(stmobj)); |
if (error) |
{ |
error = fz_rethrow(error, "cannot open cmap stream (%d %d R)", fz_to_num(stmobj), fz_to_gen(stmobj)); |
goto cleanup; |
} |
error = pdf_parse_cmap(&cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "cannot parse cmap stream (%d %d R)", fz_to_num(stmobj), fz_to_gen(stmobj)); |
goto cleanup; |
} |
fz_close(file); |
wmode = fz_dict_gets(stmobj, "WMode"); |
if (fz_is_int(wmode)) |
pdf_set_wmode(cmap, fz_to_int(wmode)); |
obj = fz_dict_gets(stmobj, "UseCMap"); |
if (fz_is_name(obj)) |
{ |
error = pdf_load_system_cmap(&usecmap, fz_to_name(obj)); |
if (error) |
{ |
error = fz_rethrow(error, "cannot load system usecmap '%s'", fz_to_name(obj)); |
goto cleanup; |
} |
pdf_set_usecmap(cmap, usecmap); |
pdf_drop_cmap(usecmap); |
} |
else if (fz_is_indirect(obj)) |
{ |
error = pdf_load_embedded_cmap(&usecmap, xref, obj); |
if (error) |
{ |
error = fz_rethrow(error, "cannot load embedded usecmap (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
goto cleanup; |
} |
pdf_set_usecmap(cmap, usecmap); |
pdf_drop_cmap(usecmap); |
} |
pdf_store_item(xref->store, pdf_keep_cmap, pdf_drop_cmap, stmobj, cmap); |
*cmapp = cmap; |
return fz_okay; |
cleanup: |
if (file) |
fz_close(file); |
if (cmap) |
pdf_drop_cmap(cmap); |
return error; /* already rethrown */ |
} |
/* |
* Create an Identity-* CMap (for both 1 and 2-byte encodings) |
*/ |
pdf_cmap * |
pdf_new_identity_cmap(int wmode, int bytes) |
{ |
pdf_cmap *cmap = pdf_new_cmap(); |
sprintf(cmap->cmap_name, "Identity-%c", wmode ? 'V' : 'H'); |
pdf_add_codespace(cmap, 0x0000, 0xffff, bytes); |
pdf_map_range_to_range(cmap, 0x0000, 0xffff, 0); |
pdf_sort_cmap(cmap); |
pdf_set_wmode(cmap, wmode); |
return cmap; |
} |
/* |
* Load predefined CMap from system. |
*/ |
fz_error |
pdf_load_system_cmap(pdf_cmap **cmapp, char *cmap_name) |
{ |
pdf_cmap *usecmap; |
pdf_cmap *cmap; |
cmap = pdf_find_builtin_cmap(cmap_name); |
if (!cmap) |
return fz_throw("no builtin cmap file: %s", cmap_name); |
if (cmap->usecmap_name[0] && !cmap->usecmap) |
{ |
usecmap = pdf_find_builtin_cmap(cmap->usecmap_name); |
if (!usecmap) |
return fz_throw("nu builtin cmap file: %s", cmap->usecmap_name); |
pdf_set_usecmap(cmap, usecmap); |
} |
*cmapp = cmap; |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_cmap_parse.c |
---|
0,0 → 1,490 |
#include "fitz.h" |
#include "mupdf.h" |
/* |
* CMap parser |
*/ |
enum |
{ |
TOK_USECMAP = PDF_NUM_TOKENS, |
TOK_BEGIN_CODESPACE_RANGE, |
TOK_END_CODESPACE_RANGE, |
TOK_BEGIN_BF_CHAR, |
TOK_END_BF_CHAR, |
TOK_BEGIN_BF_RANGE, |
TOK_END_BF_RANGE, |
TOK_BEGIN_CID_CHAR, |
TOK_END_CID_CHAR, |
TOK_BEGIN_CID_RANGE, |
TOK_END_CID_RANGE, |
TOK_END_CMAP |
}; |
static int |
pdf_cmap_token_from_keyword(char *key) |
{ |
if (!strcmp(key, "usecmap")) return TOK_USECMAP; |
if (!strcmp(key, "begincodespacerange")) return TOK_BEGIN_CODESPACE_RANGE; |
if (!strcmp(key, "endcodespacerange")) return TOK_END_CODESPACE_RANGE; |
if (!strcmp(key, "beginbfchar")) return TOK_BEGIN_BF_CHAR; |
if (!strcmp(key, "endbfchar")) return TOK_END_BF_CHAR; |
if (!strcmp(key, "beginbfrange")) return TOK_BEGIN_BF_RANGE; |
if (!strcmp(key, "endbfrange")) return TOK_END_BF_RANGE; |
if (!strcmp(key, "begincidchar")) return TOK_BEGIN_CID_CHAR; |
if (!strcmp(key, "endcidchar")) return TOK_END_CID_CHAR; |
if (!strcmp(key, "begincidrange")) return TOK_BEGIN_CID_RANGE; |
if (!strcmp(key, "endcidrange")) return TOK_END_CID_RANGE; |
if (!strcmp(key, "endcmap")) return TOK_END_CMAP; |
return PDF_TOK_KEYWORD; |
} |
static int |
pdf_code_from_string(char *buf, int len) |
{ |
int a = 0; |
while (len--) |
a = (a << 8) | *(unsigned char *)buf++; |
return a; |
} |
static fz_error |
pdf_lex_cmap(int *tok, fz_stream *file, char *buf, int n, int *sl) |
{ |
fz_error error; |
error = pdf_lex(tok, file, buf, n, sl); |
if (error) |
return fz_rethrow(error, "cannot parse cmap token"); |
if (*tok == PDF_TOK_KEYWORD) |
*tok = pdf_cmap_token_from_keyword(buf); |
return fz_okay; |
} |
static fz_error |
pdf_parse_cmap_name(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == PDF_TOK_NAME) |
fz_strlcpy(cmap->cmap_name, buf, sizeof(cmap->cmap_name)); |
else |
fz_warn("expected name after CMapName in cmap"); |
return fz_okay; |
} |
static fz_error |
pdf_parse_wmode(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == PDF_TOK_INT) |
pdf_set_wmode(cmap, atoi(buf)); |
else |
fz_warn("expected integer after WMode in cmap"); |
return fz_okay; |
} |
static fz_error |
pdf_parse_codespace_range(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int lo, hi; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == TOK_END_CODESPACE_RANGE) |
return fz_okay; |
else if (tok == PDF_TOK_STRING) |
{ |
lo = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == PDF_TOK_STRING) |
{ |
hi = pdf_code_from_string(buf, len); |
pdf_add_codespace(cmap, lo, hi, len); |
} |
else break; |
} |
else break; |
} |
return fz_throw("expected string or endcodespacerange"); |
} |
static fz_error |
pdf_parse_cid_range(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int lo, hi, dst; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == TOK_END_CID_RANGE) |
return fz_okay; |
else if (tok != PDF_TOK_STRING) |
return fz_throw("expected string or endcidrange"); |
lo = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok != PDF_TOK_STRING) |
return fz_throw("expected string"); |
hi = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok != PDF_TOK_INT) |
return fz_throw("expected integer"); |
dst = atoi(buf); |
pdf_map_range_to_range(cmap, lo, hi, dst); |
} |
} |
static fz_error |
pdf_parse_cid_char(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int src, dst; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == TOK_END_CID_CHAR) |
return fz_okay; |
else if (tok != PDF_TOK_STRING) |
return fz_throw("expected string or endcidchar"); |
src = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok != PDF_TOK_INT) |
return fz_throw("expected integer"); |
dst = atoi(buf); |
pdf_map_range_to_range(cmap, src, src, dst); |
} |
} |
static fz_error |
pdf_parse_bf_range_array(pdf_cmap *cmap, fz_stream *file, int lo, int hi) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int dst[256]; |
int i; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == PDF_TOK_CLOSE_ARRAY) |
return fz_okay; |
/* Note: does not handle [ /Name /Name ... ] */ |
else if (tok != PDF_TOK_STRING) |
return fz_throw("expected string or ]"); |
if (len / 2) |
{ |
for (i = 0; i < len / 2; i++) |
dst[i] = pdf_code_from_string(buf + i * 2, 2); |
pdf_map_one_to_many(cmap, lo, dst, len / 2); |
} |
lo ++; |
} |
} |
static fz_error |
pdf_parse_bf_range(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int lo, hi, dst; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == TOK_END_BF_RANGE) |
return fz_okay; |
else if (tok != PDF_TOK_STRING) |
return fz_throw("expected string or endbfrange"); |
lo = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok != PDF_TOK_STRING) |
return fz_throw("expected string"); |
hi = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == PDF_TOK_STRING) |
{ |
if (len == 2) |
{ |
dst = pdf_code_from_string(buf, len); |
pdf_map_range_to_range(cmap, lo, hi, dst); |
} |
else |
{ |
int dststr[256]; |
int i; |
if (len / 2) |
{ |
for (i = 0; i < len / 2; i++) |
dststr[i] = pdf_code_from_string(buf + i * 2, 2); |
while (lo <= hi) |
{ |
dststr[i-1] ++; |
pdf_map_one_to_many(cmap, lo, dststr, i); |
lo ++; |
} |
} |
} |
} |
else if (tok == PDF_TOK_OPEN_ARRAY) |
{ |
error = pdf_parse_bf_range_array(cmap, file, lo, hi); |
if (error) |
return fz_rethrow(error, "cannot map bfrange"); |
} |
else |
{ |
return fz_throw("expected string or array or endbfrange"); |
} |
} |
} |
static fz_error |
pdf_parse_bf_char(pdf_cmap *cmap, fz_stream *file) |
{ |
fz_error error; |
char buf[256]; |
int tok; |
int len; |
int dst[256]; |
int src; |
int i; |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
if (tok == TOK_END_BF_CHAR) |
return fz_okay; |
else if (tok != PDF_TOK_STRING) |
return fz_throw("expected string or endbfchar"); |
src = pdf_code_from_string(buf, len); |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "syntaxerror in cmap"); |
/* Note: does not handle /dstName */ |
if (tok != PDF_TOK_STRING) |
return fz_throw("expected string"); |
if (len / 2) |
{ |
for (i = 0; i < len / 2; i++) |
dst[i] = pdf_code_from_string(buf + i * 2, 2); |
pdf_map_one_to_many(cmap, src, dst, i); |
} |
} |
} |
fz_error |
pdf_parse_cmap(pdf_cmap **cmapp, fz_stream *file) |
{ |
fz_error error; |
pdf_cmap *cmap; |
char key[64]; |
char buf[256]; |
int tok; |
int len; |
cmap = pdf_new_cmap(); |
strcpy(key, ".notdef"); |
while (1) |
{ |
error = pdf_lex_cmap(&tok, file, buf, sizeof buf, &len); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap"); |
goto cleanup; |
} |
if (tok == PDF_TOK_EOF || tok == TOK_END_CMAP) |
break; |
else if (tok == PDF_TOK_NAME) |
{ |
if (!strcmp(buf, "CMapName")) |
{ |
error = pdf_parse_cmap_name(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap after CMapName"); |
goto cleanup; |
} |
} |
else if (!strcmp(buf, "WMode")) |
{ |
error = pdf_parse_wmode(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap after WMode"); |
goto cleanup; |
} |
} |
else |
fz_strlcpy(key, buf, sizeof key); |
} |
else if (tok == TOK_USECMAP) |
{ |
fz_strlcpy(cmap->usecmap_name, key, sizeof(cmap->usecmap_name)); |
} |
else if (tok == TOK_BEGIN_CODESPACE_RANGE) |
{ |
error = pdf_parse_codespace_range(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap codespacerange"); |
goto cleanup; |
} |
} |
else if (tok == TOK_BEGIN_BF_CHAR) |
{ |
error = pdf_parse_bf_char(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap bfchar"); |
goto cleanup; |
} |
} |
else if (tok == TOK_BEGIN_CID_CHAR) |
{ |
error = pdf_parse_cid_char(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap cidchar"); |
goto cleanup; |
} |
} |
else if (tok == TOK_BEGIN_BF_RANGE) |
{ |
error = pdf_parse_bf_range(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap bfrange"); |
goto cleanup; |
} |
} |
else if (tok == TOK_BEGIN_CID_RANGE) |
{ |
error = pdf_parse_cid_range(cmap, file); |
if (error) |
{ |
error = fz_rethrow(error, "syntaxerror in cmap cidrange"); |
goto cleanup; |
} |
} |
/* ignore everything else */ |
} |
pdf_sort_cmap(cmap); |
*cmapp = cmap; |
return fz_okay; |
cleanup: |
pdf_drop_cmap(cmap); |
return error; /* already rethrown */ |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_cmap_table.c |
---|
0,0 → 1,184 |
#include "fitz.h" |
#include "mupdf.h" |
#ifndef NOCJK |
#include "../generated/cmap_cns.h" |
#include "../generated/cmap_gb.h" |
#include "../generated/cmap_japan.h" |
#include "../generated/cmap_korea.h" |
#endif |
static const struct { char *name; pdf_cmap *cmap; } cmap_table[] = |
{ |
#ifndef NOCJK |
{"78-EUC-H",&cmap_78_EUC_H}, |
{"78-EUC-V",&cmap_78_EUC_V}, |
{"78-H",&cmap_78_H}, |
{"78-RKSJ-H",&cmap_78_RKSJ_H}, |
{"78-RKSJ-V",&cmap_78_RKSJ_V}, |
{"78-V",&cmap_78_V}, |
{"78ms-RKSJ-H",&cmap_78ms_RKSJ_H}, |
{"78ms-RKSJ-V",&cmap_78ms_RKSJ_V}, |
{"83pv-RKSJ-H",&cmap_83pv_RKSJ_H}, |
{"90ms-RKSJ-H",&cmap_90ms_RKSJ_H}, |
{"90ms-RKSJ-V",&cmap_90ms_RKSJ_V}, |
{"90msp-RKSJ-H",&cmap_90msp_RKSJ_H}, |
{"90msp-RKSJ-V",&cmap_90msp_RKSJ_V}, |
{"90pv-RKSJ-H",&cmap_90pv_RKSJ_H}, |
{"90pv-RKSJ-V",&cmap_90pv_RKSJ_V}, |
{"Add-H",&cmap_Add_H}, |
{"Add-RKSJ-H",&cmap_Add_RKSJ_H}, |
{"Add-RKSJ-V",&cmap_Add_RKSJ_V}, |
{"Add-V",&cmap_Add_V}, |
{"Adobe-CNS1-0",&cmap_Adobe_CNS1_0}, |
{"Adobe-CNS1-1",&cmap_Adobe_CNS1_1}, |
{"Adobe-CNS1-2",&cmap_Adobe_CNS1_2}, |
{"Adobe-CNS1-3",&cmap_Adobe_CNS1_3}, |
{"Adobe-CNS1-4",&cmap_Adobe_CNS1_4}, |
{"Adobe-CNS1-5",&cmap_Adobe_CNS1_5}, |
{"Adobe-CNS1-6",&cmap_Adobe_CNS1_6}, |
{"Adobe-CNS1-UCS2",&cmap_Adobe_CNS1_UCS2}, |
{"Adobe-GB1-0",&cmap_Adobe_GB1_0}, |
{"Adobe-GB1-1",&cmap_Adobe_GB1_1}, |
{"Adobe-GB1-2",&cmap_Adobe_GB1_2}, |
{"Adobe-GB1-3",&cmap_Adobe_GB1_3}, |
{"Adobe-GB1-4",&cmap_Adobe_GB1_4}, |
{"Adobe-GB1-5",&cmap_Adobe_GB1_5}, |
{"Adobe-GB1-UCS2",&cmap_Adobe_GB1_UCS2}, |
{"Adobe-Japan1-0",&cmap_Adobe_Japan1_0}, |
{"Adobe-Japan1-1",&cmap_Adobe_Japan1_1}, |
{"Adobe-Japan1-2",&cmap_Adobe_Japan1_2}, |
{"Adobe-Japan1-3",&cmap_Adobe_Japan1_3}, |
{"Adobe-Japan1-4",&cmap_Adobe_Japan1_4}, |
{"Adobe-Japan1-5",&cmap_Adobe_Japan1_5}, |
{"Adobe-Japan1-6",&cmap_Adobe_Japan1_6}, |
{"Adobe-Japan1-UCS2",&cmap_Adobe_Japan1_UCS2}, |
{"Adobe-Japan2-0",&cmap_Adobe_Japan2_0}, |
{"Adobe-Korea1-0",&cmap_Adobe_Korea1_0}, |
{"Adobe-Korea1-1",&cmap_Adobe_Korea1_1}, |
{"Adobe-Korea1-2",&cmap_Adobe_Korea1_2}, |
{"Adobe-Korea1-UCS2",&cmap_Adobe_Korea1_UCS2}, |
{"B5-H",&cmap_B5_H}, |
{"B5-V",&cmap_B5_V}, |
{"B5pc-H",&cmap_B5pc_H}, |
{"B5pc-V",&cmap_B5pc_V}, |
{"CNS-EUC-H",&cmap_CNS_EUC_H}, |
{"CNS-EUC-V",&cmap_CNS_EUC_V}, |
{"CNS1-H",&cmap_CNS1_H}, |
{"CNS1-V",&cmap_CNS1_V}, |
{"CNS2-H",&cmap_CNS2_H}, |
{"CNS2-V",&cmap_CNS2_V}, |
{"ETHK-B5-H",&cmap_ETHK_B5_H}, |
{"ETHK-B5-V",&cmap_ETHK_B5_V}, |
{"ETen-B5-H",&cmap_ETen_B5_H}, |
{"ETen-B5-V",&cmap_ETen_B5_V}, |
{"ETenms-B5-H",&cmap_ETenms_B5_H}, |
{"ETenms-B5-V",&cmap_ETenms_B5_V}, |
{"EUC-H",&cmap_EUC_H}, |
{"EUC-V",&cmap_EUC_V}, |
{"Ext-H",&cmap_Ext_H}, |
{"Ext-RKSJ-H",&cmap_Ext_RKSJ_H}, |
{"Ext-RKSJ-V",&cmap_Ext_RKSJ_V}, |
{"Ext-V",&cmap_Ext_V}, |
{"GB-EUC-H",&cmap_GB_EUC_H}, |
{"GB-EUC-V",&cmap_GB_EUC_V}, |
{"GB-H",&cmap_GB_H}, |
{"GB-V",&cmap_GB_V}, |
{"GBK-EUC-H",&cmap_GBK_EUC_H}, |
{"GBK-EUC-V",&cmap_GBK_EUC_V}, |
{"GBK2K-H",&cmap_GBK2K_H}, |
{"GBK2K-V",&cmap_GBK2K_V}, |
{"GBKp-EUC-H",&cmap_GBKp_EUC_H}, |
{"GBKp-EUC-V",&cmap_GBKp_EUC_V}, |
{"GBT-EUC-H",&cmap_GBT_EUC_H}, |
{"GBT-EUC-V",&cmap_GBT_EUC_V}, |
{"GBT-H",&cmap_GBT_H}, |
{"GBT-V",&cmap_GBT_V}, |
{"GBTpc-EUC-H",&cmap_GBTpc_EUC_H}, |
{"GBTpc-EUC-V",&cmap_GBTpc_EUC_V}, |
{"GBpc-EUC-H",&cmap_GBpc_EUC_H}, |
{"GBpc-EUC-V",&cmap_GBpc_EUC_V}, |
{"H",&cmap_H}, |
{"HKdla-B5-H",&cmap_HKdla_B5_H}, |
{"HKdla-B5-V",&cmap_HKdla_B5_V}, |
{"HKdlb-B5-H",&cmap_HKdlb_B5_H}, |
{"HKdlb-B5-V",&cmap_HKdlb_B5_V}, |
{"HKgccs-B5-H",&cmap_HKgccs_B5_H}, |
{"HKgccs-B5-V",&cmap_HKgccs_B5_V}, |
{"HKm314-B5-H",&cmap_HKm314_B5_H}, |
{"HKm314-B5-V",&cmap_HKm314_B5_V}, |
{"HKm471-B5-H",&cmap_HKm471_B5_H}, |
{"HKm471-B5-V",&cmap_HKm471_B5_V}, |
{"HKscs-B5-H",&cmap_HKscs_B5_H}, |
{"HKscs-B5-V",&cmap_HKscs_B5_V}, |
{"Hankaku",&cmap_Hankaku}, |
{"Hiragana",&cmap_Hiragana}, |
{"Hojo-EUC-H",&cmap_Hojo_EUC_H}, |
{"Hojo-EUC-V",&cmap_Hojo_EUC_V}, |
{"Hojo-H",&cmap_Hojo_H}, |
{"Hojo-V",&cmap_Hojo_V}, |
{"KSC-EUC-H",&cmap_KSC_EUC_H}, |
{"KSC-EUC-V",&cmap_KSC_EUC_V}, |
{"KSC-H",&cmap_KSC_H}, |
{"KSC-Johab-H",&cmap_KSC_Johab_H}, |
{"KSC-Johab-V",&cmap_KSC_Johab_V}, |
{"KSC-V",&cmap_KSC_V}, |
{"KSCms-UHC-H",&cmap_KSCms_UHC_H}, |
{"KSCms-UHC-HW-H",&cmap_KSCms_UHC_HW_H}, |
{"KSCms-UHC-HW-V",&cmap_KSCms_UHC_HW_V}, |
{"KSCms-UHC-V",&cmap_KSCms_UHC_V}, |
{"KSCpc-EUC-H",&cmap_KSCpc_EUC_H}, |
{"KSCpc-EUC-V",&cmap_KSCpc_EUC_V}, |
{"Katakana",&cmap_Katakana}, |
{"NWP-H",&cmap_NWP_H}, |
{"NWP-V",&cmap_NWP_V}, |
{"RKSJ-H",&cmap_RKSJ_H}, |
{"RKSJ-V",&cmap_RKSJ_V}, |
{"Roman",&cmap_Roman}, |
{"UniCNS-UCS2-H",&cmap_UniCNS_UCS2_H}, |
{"UniCNS-UCS2-V",&cmap_UniCNS_UCS2_V}, |
{"UniCNS-UTF16-H",&cmap_UniCNS_UTF16_H}, |
{"UniCNS-UTF16-V",&cmap_UniCNS_UTF16_V}, |
{"UniGB-UCS2-H",&cmap_UniGB_UCS2_H}, |
{"UniGB-UCS2-V",&cmap_UniGB_UCS2_V}, |
{"UniGB-UTF16-H",&cmap_UniGB_UTF16_H}, |
{"UniGB-UTF16-V",&cmap_UniGB_UTF16_V}, |
{"UniHojo-UCS2-H",&cmap_UniHojo_UCS2_H}, |
{"UniHojo-UCS2-V",&cmap_UniHojo_UCS2_V}, |
{"UniHojo-UTF16-H",&cmap_UniHojo_UTF16_H}, |
{"UniHojo-UTF16-V",&cmap_UniHojo_UTF16_V}, |
{"UniJIS-UCS2-H",&cmap_UniJIS_UCS2_H}, |
{"UniJIS-UCS2-HW-H",&cmap_UniJIS_UCS2_HW_H}, |
{"UniJIS-UCS2-HW-V",&cmap_UniJIS_UCS2_HW_V}, |
{"UniJIS-UCS2-V",&cmap_UniJIS_UCS2_V}, |
{"UniJIS-UTF16-H",&cmap_UniJIS_UTF16_H}, |
{"UniJIS-UTF16-V",&cmap_UniJIS_UTF16_V}, |
{"UniJISPro-UCS2-HW-V",&cmap_UniJISPro_UCS2_HW_V}, |
{"UniJISPro-UCS2-V",&cmap_UniJISPro_UCS2_V}, |
{"UniKS-UCS2-H",&cmap_UniKS_UCS2_H}, |
{"UniKS-UCS2-V",&cmap_UniKS_UCS2_V}, |
{"UniKS-UTF16-H",&cmap_UniKS_UTF16_H}, |
{"UniKS-UTF16-V",&cmap_UniKS_UTF16_V}, |
{"V",&cmap_V}, |
{"WP-Symbol",&cmap_WP_Symbol}, |
#endif |
}; |
pdf_cmap * |
pdf_find_builtin_cmap(char *cmap_name) |
{ |
int l = 0; |
int r = nelem(cmap_table) - 1; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
int c = strcmp(cmap_name, cmap_table[m].name); |
if (c < 0) |
r = m - 1; |
else if (c > 0) |
l = m + 1; |
else |
return cmap_table[m].cmap; |
} |
return NULL; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_colorspace.c |
---|
0,0 → 1,387 |
#include "fitz.h" |
#include "mupdf.h" |
/* ICCBased */ |
static fz_error |
load_icc_based(fz_colorspace **csp, pdf_xref *xref, fz_obj *dict) |
{ |
int n; |
n = fz_to_int(fz_dict_gets(dict, "N")); |
switch (n) |
{ |
case 1: *csp = fz_device_gray; return fz_okay; |
case 3: *csp = fz_device_rgb; return fz_okay; |
case 4: *csp = fz_device_cmyk; return fz_okay; |
} |
return fz_throw("syntaxerror: ICCBased must have 1, 3 or 4 components"); |
} |
/* Lab */ |
static inline float fung(float x) |
{ |
if (x >= 6.0f / 29.0f) |
return x * x * x; |
return (108.0f / 841.0f) * (x - (4.0f / 29.0f)); |
} |
static void |
lab_to_rgb(fz_colorspace *cs, float *lab, float *rgb) |
{ |
/* input is in range (0..100, -128..127, -128..127) not (0..1, 0..1, 0..1) */ |
float lstar, astar, bstar, l, m, n, x, y, z, r, g, b; |
lstar = lab[0]; |
astar = lab[1]; |
bstar = lab[2]; |
m = (lstar + 16) / 116; |
l = m + astar / 500; |
n = m - bstar / 200; |
x = fung(l); |
y = fung(m); |
z = fung(n); |
r = (3.240449f * x + -1.537136f * y + -0.498531f * z) * 0.830026f; |
g = (-0.969265f * x + 1.876011f * y + 0.041556f * z) * 1.05452f; |
b = (0.055643f * x + -0.204026f * y + 1.057229f * z) * 1.1003f; |
rgb[0] = sqrtf(CLAMP(r, 0, 1)); |
rgb[1] = sqrtf(CLAMP(g, 0, 1)); |
rgb[2] = sqrtf(CLAMP(b, 0, 1)); |
} |
static void |
rgb_to_lab(fz_colorspace *cs, float *rgb, float *lab) |
{ |
fz_warn("cannot convert into L*a*b colorspace"); |
lab[0] = rgb[0]; |
lab[1] = rgb[1]; |
lab[2] = rgb[2]; |
} |
static fz_colorspace k_device_lab = { -1, "Lab", 3, lab_to_rgb, rgb_to_lab }; |
static fz_colorspace *fz_device_lab = &k_device_lab; |
/* Separation and DeviceN */ |
struct separation |
{ |
fz_colorspace *base; |
pdf_function *tint; |
}; |
static void |
separation_to_rgb(fz_colorspace *cs, float *color, float *rgb) |
{ |
struct separation *sep = cs->data; |
float alt[FZ_MAX_COLORS]; |
pdf_eval_function(sep->tint, color, cs->n, alt, sep->base->n); |
sep->base->to_rgb(sep->base, alt, rgb); |
} |
static void |
free_separation(fz_colorspace *cs) |
{ |
struct separation *sep = cs->data; |
fz_drop_colorspace(sep->base); |
pdf_drop_function(sep->tint); |
fz_free(sep); |
} |
static fz_error |
load_separation(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) |
{ |
fz_error error; |
fz_colorspace *cs; |
struct separation *sep; |
fz_obj *nameobj = fz_array_get(array, 1); |
fz_obj *baseobj = fz_array_get(array, 2); |
fz_obj *tintobj = fz_array_get(array, 3); |
fz_colorspace *base; |
pdf_function *tint; |
int n; |
if (fz_is_array(nameobj)) |
n = fz_array_len(nameobj); |
else |
n = 1; |
if (n > FZ_MAX_COLORS) |
return fz_throw("too many components in colorspace"); |
error = pdf_load_colorspace(&base, xref, baseobj); |
if (error) |
return fz_rethrow(error, "cannot load base colorspace (%d %d R)", fz_to_num(baseobj), fz_to_gen(baseobj)); |
error = pdf_load_function(&tint, xref, tintobj); |
if (error) |
{ |
fz_drop_colorspace(base); |
return fz_rethrow(error, "cannot load tint function (%d %d R)", fz_to_num(tintobj), fz_to_gen(tintobj)); |
} |
sep = fz_malloc(sizeof(struct separation)); |
sep->base = base; |
sep->tint = tint; |
cs = fz_new_colorspace(n == 1 ? "Separation" : "DeviceN", n); |
cs->to_rgb = separation_to_rgb; |
cs->free_data = free_separation; |
cs->data = sep; |
*csp = cs; |
return fz_okay; |
} |
/* Indexed */ |
struct indexed |
{ |
fz_colorspace *base; |
int high; |
unsigned char *lookup; |
}; |
static void |
indexed_to_rgb(fz_colorspace *cs, float *color, float *rgb) |
{ |
struct indexed *idx = cs->data; |
float alt[FZ_MAX_COLORS]; |
int i, k; |
i = color[0] * 255; |
i = CLAMP(i, 0, idx->high); |
for (k = 0; k < idx->base->n; k++) |
alt[k] = idx->lookup[i * idx->base->n + k] / 255.0f; |
idx->base->to_rgb(idx->base, alt, rgb); |
} |
static void |
free_indexed(fz_colorspace *cs) |
{ |
struct indexed *idx = cs->data; |
if (idx->base) |
fz_drop_colorspace(idx->base); |
fz_free(idx->lookup); |
fz_free(idx); |
} |
fz_pixmap * |
pdf_expand_indexed_pixmap(fz_pixmap *src) |
{ |
struct indexed *idx; |
fz_pixmap *dst; |
unsigned char *s, *d; |
int y, x, k, n, high; |
unsigned char *lookup; |
assert(src->colorspace->to_rgb == indexed_to_rgb); |
assert(src->n == 2); |
idx = src->colorspace->data; |
high = idx->high; |
lookup = idx->lookup; |
n = idx->base->n; |
dst = fz_new_pixmap_with_rect(idx->base, fz_bound_pixmap(src)); |
s = src->samples; |
d = dst->samples; |
for (y = 0; y < src->h; y++) |
{ |
for (x = 0; x < src->w; x++) |
{ |
int v = *s++; |
int a = *s++; |
v = MIN(v, high); |
for (k = 0; k < n; k++) |
*d++ = fz_mul255(lookup[v * n + k], a); |
*d++ = a; |
} |
} |
if (src->mask) |
dst->mask = fz_keep_pixmap(src->mask); |
dst->interpolate = src->interpolate; |
return dst; |
} |
static fz_error |
load_indexed(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) |
{ |
fz_error error; |
fz_colorspace *cs; |
struct indexed *idx; |
fz_obj *baseobj = fz_array_get(array, 1); |
fz_obj *highobj = fz_array_get(array, 2); |
fz_obj *lookup = fz_array_get(array, 3); |
fz_colorspace *base; |
int i, n; |
error = pdf_load_colorspace(&base, xref, baseobj); |
if (error) |
return fz_rethrow(error, "cannot load base colorspace (%d %d R)", fz_to_num(baseobj), fz_to_gen(baseobj)); |
idx = fz_malloc(sizeof(struct indexed)); |
idx->base = base; |
idx->high = fz_to_int(highobj); |
idx->high = CLAMP(idx->high, 0, 255); |
n = base->n * (idx->high + 1); |
idx->lookup = fz_malloc(n); |
memset(idx->lookup, 0, n); |
cs = fz_new_colorspace("Indexed", 1); |
cs->to_rgb = indexed_to_rgb; |
cs->free_data = free_indexed; |
cs->data = idx; |
if (fz_is_string(lookup) && fz_to_str_len(lookup) == n) |
{ |
unsigned char *buf = (unsigned char *) fz_to_str_buf(lookup); |
for (i = 0; i < n; i++) |
idx->lookup[i] = buf[i]; |
} |
else if (fz_is_indirect(lookup)) |
{ |
fz_stream *file; |
error = pdf_open_stream(&file, xref, fz_to_num(lookup), fz_to_gen(lookup)); |
if (error) |
{ |
fz_drop_colorspace(cs); |
return fz_rethrow(error, "cannot open colorspace lookup table (%d 0 R)", fz_to_num(lookup)); |
} |
i = fz_read(file, idx->lookup, n); |
if (i < 0) |
{ |
fz_drop_colorspace(cs); |
return fz_throw("cannot read colorspace lookup table (%d 0 R)", fz_to_num(lookup)); |
} |
fz_close(file); |
} |
else |
{ |
fz_drop_colorspace(cs); |
return fz_throw("cannot parse colorspace lookup table"); |
} |
*csp = cs; |
return fz_okay; |
} |
/* Parse and create colorspace from PDF object */ |
static fz_error |
pdf_load_colorspace_imp(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) |
{ |
if (fz_is_name(obj)) |
{ |
if (!strcmp(fz_to_name(obj), "Pattern")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(obj), "G")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(obj), "RGB")) |
*csp = fz_device_rgb; |
else if (!strcmp(fz_to_name(obj), "CMYK")) |
*csp = fz_device_cmyk; |
else if (!strcmp(fz_to_name(obj), "DeviceGray")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(obj), "DeviceRGB")) |
*csp = fz_device_rgb; |
else if (!strcmp(fz_to_name(obj), "DeviceCMYK")) |
*csp = fz_device_cmyk; |
else |
return fz_throw("unknown colorspace: %s", fz_to_name(obj)); |
return fz_okay; |
} |
else if (fz_is_array(obj)) |
{ |
fz_obj *name = fz_array_get(obj, 0); |
if (fz_is_name(name)) |
{ |
/* load base colorspace instead */ |
if (!strcmp(fz_to_name(name), "Pattern")) |
{ |
fz_error error; |
obj = fz_array_get(obj, 1); |
if (!obj) |
{ |
*csp = fz_device_gray; |
return fz_okay; |
} |
error = pdf_load_colorspace(csp, xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load pattern (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
else if (!strcmp(fz_to_name(name), "G")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(name), "RGB")) |
*csp = fz_device_rgb; |
else if (!strcmp(fz_to_name(name), "CMYK")) |
*csp = fz_device_cmyk; |
else if (!strcmp(fz_to_name(name), "DeviceGray")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(name), "DeviceRGB")) |
*csp = fz_device_rgb; |
else if (!strcmp(fz_to_name(name), "DeviceCMYK")) |
*csp = fz_device_cmyk; |
else if (!strcmp(fz_to_name(name), "CalGray")) |
*csp = fz_device_gray; |
else if (!strcmp(fz_to_name(name), "CalRGB")) |
*csp = fz_device_rgb; |
else if (!strcmp(fz_to_name(name), "CalCMYK")) |
*csp = fz_device_cmyk; |
else if (!strcmp(fz_to_name(name), "Lab")) |
*csp = fz_device_lab; |
else if (!strcmp(fz_to_name(name), "ICCBased")) |
return load_icc_based(csp, xref, fz_array_get(obj, 1)); |
else if (!strcmp(fz_to_name(name), "Indexed")) |
return load_indexed(csp, xref, obj); |
else if (!strcmp(fz_to_name(name), "I")) |
return load_indexed(csp, xref, obj); |
else if (!strcmp(fz_to_name(name), "Separation")) |
return load_separation(csp, xref, obj); |
else if (!strcmp(fz_to_name(name), "DeviceN")) |
return load_separation(csp, xref, obj); |
else |
return fz_throw("syntaxerror: unknown colorspace %s", fz_to_name(name)); |
return fz_okay; |
} |
} |
return fz_throw("syntaxerror: could not parse color space (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
fz_error |
pdf_load_colorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) |
{ |
fz_error error; |
if ((*csp = pdf_find_item(xref->store, fz_drop_colorspace, obj))) |
{ |
fz_keep_colorspace(*csp); |
return fz_okay; |
} |
error = pdf_load_colorspace_imp(csp, xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load colorspace (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
pdf_store_item(xref->store, fz_keep_colorspace, fz_drop_colorspace, obj, *csp); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_crypt.c |
---|
0,0 → 1,847 |
#include "fitz.h" |
#include "mupdf.h" |
enum |
{ |
PDF_CRYPT_NONE, |
PDF_CRYPT_RC4, |
PDF_CRYPT_AESV2, |
PDF_CRYPT_AESV3, |
PDF_CRYPT_UNKNOWN, |
}; |
typedef struct pdf_crypt_filter_s pdf_crypt_filter; |
struct pdf_crypt_filter_s |
{ |
int method; |
int length; |
}; |
struct pdf_crypt_s |
{ |
fz_obj *id; |
int v; |
int length; |
fz_obj *cf; |
pdf_crypt_filter stmf; |
pdf_crypt_filter strf; |
int r; |
unsigned char o[48]; |
unsigned char u[48]; |
unsigned char oe[32]; |
unsigned char ue[32]; |
int p; |
int encrypt_metadata; |
unsigned char key[32]; /* decryption key generated from password */ |
}; |
static fz_error pdf_parse_crypt_filter(pdf_crypt_filter *cf, fz_obj *dict, char *name, int defaultlength); |
/* |
* Create crypt object for decrypting strings and streams |
* given the Encryption and ID objects. |
*/ |
fz_error |
pdf_new_crypt(pdf_crypt **cryptp, fz_obj *dict, fz_obj *id) |
{ |
pdf_crypt *crypt; |
fz_error error; |
fz_obj *obj; |
crypt = fz_malloc(sizeof(pdf_crypt)); |
memset(crypt, 0x00, sizeof(pdf_crypt)); |
/* Common to all security handlers (PDF 1.7 table 3.18) */ |
obj = fz_dict_gets(dict, "Filter"); |
if (!fz_is_name(obj)) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("unspecified encryption handler"); |
} |
if (strcmp(fz_to_name(obj), "Standard") != 0) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("unknown encryption handler: '%s'", fz_to_name(obj)); |
} |
crypt->v = 0; |
obj = fz_dict_gets(dict, "V"); |
if (fz_is_int(obj)) |
crypt->v = fz_to_int(obj); |
if (crypt->v != 1 && crypt->v != 2 && crypt->v != 4 && crypt->v != 5) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("unknown encryption version"); |
} |
crypt->length = 40; |
if (crypt->v == 2 || crypt->v == 4) |
{ |
obj = fz_dict_gets(dict, "Length"); |
if (fz_is_int(obj)) |
crypt->length = fz_to_int(obj); |
/* work-around for pdf generators that assume length is in bytes */ |
if (crypt->length < 40) |
crypt->length = crypt->length * 8; |
if (crypt->length % 8 != 0) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("invalid encryption key length"); |
} |
if (crypt->length > 256) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("invalid encryption key length"); |
} |
} |
if (crypt->v == 5) |
crypt->length = 256; |
if (crypt->v == 1 || crypt->v == 2) |
{ |
crypt->stmf.method = PDF_CRYPT_RC4; |
crypt->stmf.length = crypt->length; |
crypt->strf.method = PDF_CRYPT_RC4; |
crypt->strf.length = crypt->length; |
} |
if (crypt->v == 4 || crypt->v == 5) |
{ |
crypt->stmf.method = PDF_CRYPT_NONE; |
crypt->stmf.length = crypt->length; |
crypt->strf.method = PDF_CRYPT_NONE; |
crypt->strf.length = crypt->length; |
obj = fz_dict_gets(dict, "CF"); |
if (fz_is_dict(obj)) |
{ |
crypt->cf = fz_keep_obj(obj); |
} |
else |
{ |
crypt->cf = NULL; |
} |
obj = fz_dict_gets(dict, "StmF"); |
if (fz_is_name(obj)) |
{ |
error = pdf_parse_crypt_filter(&crypt->stmf, crypt->cf, fz_to_name(obj), crypt->length); |
if (error) |
{ |
pdf_free_crypt(crypt); |
return fz_rethrow(error, "cannot parse stream crypt filter (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
} |
obj = fz_dict_gets(dict, "StrF"); |
if (fz_is_name(obj)) |
{ |
error = pdf_parse_crypt_filter(&crypt->strf, crypt->cf, fz_to_name(obj), crypt->length); |
if (error) |
{ |
pdf_free_crypt(crypt); |
return fz_rethrow(error, "cannot parse string crypt filter (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
} |
/* in crypt revision 4, the crypt filter determines the key length */ |
if (crypt->strf.method != PDF_CRYPT_NONE) |
crypt->length = crypt->stmf.length; |
} |
/* Standard security handler (PDF 1.7 table 3.19) */ |
obj = fz_dict_gets(dict, "R"); |
if (fz_is_int(obj)) |
crypt->r = fz_to_int(obj); |
else |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing revision value"); |
} |
obj = fz_dict_gets(dict, "O"); |
if (fz_is_string(obj) && fz_to_str_len(obj) == 32) |
memcpy(crypt->o, fz_to_str_buf(obj), 32); |
/* /O and /U are supposed to be 48 bytes long for revision 5, they're often longer, though */ |
else if (crypt->r == 5 && fz_is_string(obj) && fz_to_str_len(obj) >= 48) |
memcpy(crypt->o, fz_to_str_buf(obj), 48); |
else |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing owner password"); |
} |
obj = fz_dict_gets(dict, "U"); |
if (fz_is_string(obj) && fz_to_str_len(obj) == 32) |
memcpy(crypt->u, fz_to_str_buf(obj), 32); |
else if (fz_is_string(obj) && fz_to_str_len(obj) >= 48 && crypt->r == 5) |
memcpy(crypt->u, fz_to_str_buf(obj), 48); |
else if (fz_is_string(obj) && fz_to_str_len(obj) < 32) |
{ |
fz_warn("encryption password key too short (%d)", fz_to_str_len(obj)); |
memcpy(crypt->u, fz_to_str_buf(obj), fz_to_str_len(obj)); |
} |
else |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing user password"); |
} |
obj = fz_dict_gets(dict, "P"); |
if (fz_is_int(obj)) |
crypt->p = fz_to_int(obj); |
else |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing permissions value"); |
} |
if (crypt->r == 5) |
{ |
obj = fz_dict_gets(dict, "OE"); |
if (!fz_is_string(obj) || fz_to_str_len(obj) != 32) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing owner encryption key"); |
} |
memcpy(crypt->oe, fz_to_str_buf(obj), 32); |
obj = fz_dict_gets(dict, "UE"); |
if (!fz_is_string(obj) || fz_to_str_len(obj) != 32) |
{ |
pdf_free_crypt(crypt); |
return fz_throw("encryption dictionary missing user encryption key"); |
} |
memcpy(crypt->ue, fz_to_str_buf(obj), 32); |
} |
crypt->encrypt_metadata = 1; |
obj = fz_dict_gets(dict, "EncryptMetadata"); |
if (fz_is_bool(obj)) |
crypt->encrypt_metadata = fz_to_bool(obj); |
/* Extract file identifier string */ |
if (fz_is_array(id) && fz_array_len(id) == 2) |
{ |
obj = fz_array_get(id, 0); |
if (fz_is_string(obj)) |
crypt->id = fz_keep_obj(obj); |
} |
else |
fz_warn("missing file identifier, may not be able to do decryption"); |
*cryptp = crypt; |
return fz_okay; |
} |
void |
pdf_free_crypt(pdf_crypt *crypt) |
{ |
if (crypt->id) fz_drop_obj(crypt->id); |
if (crypt->cf) fz_drop_obj(crypt->cf); |
fz_free(crypt); |
} |
/* |
* Parse a CF dictionary entry (PDF 1.7 table 3.22) |
*/ |
static fz_error |
pdf_parse_crypt_filter(pdf_crypt_filter *cf, fz_obj *cf_obj, char *name, int defaultlength) |
{ |
fz_obj *obj; |
fz_obj *dict; |
int is_identity = (strcmp(name, "Identity") == 0); |
int is_stdcf = (!is_identity && (strcmp(name, "StdCF") == 0)); |
if (!is_identity && !is_stdcf) |
{ |
return fz_throw("Crypt Filter not Identity or StdCF (%d %d R)", fz_to_num(cf_obj), fz_to_gen(cf_obj)); |
} |
cf->method = PDF_CRYPT_NONE; |
cf->length = defaultlength; |
if (cf_obj == NULL) |
{ |
cf->method = (is_identity ? PDF_CRYPT_NONE : PDF_CRYPT_RC4); |
return fz_okay; |
} |
dict = fz_dict_gets(cf_obj, name); |
if (!fz_is_dict(dict)) |
{ |
return fz_throw("cannot parse crypt filter (%d %d R)", fz_to_num(cf_obj), fz_to_gen(cf_obj)); |
} |
obj = fz_dict_gets(dict, "CFM"); |
if (fz_is_name(obj)) |
{ |
if (!strcmp(fz_to_name(obj), "None")) |
cf->method = PDF_CRYPT_NONE; |
else if (!strcmp(fz_to_name(obj), "V2")) |
cf->method = PDF_CRYPT_RC4; |
else if (!strcmp(fz_to_name(obj), "AESV2")) |
cf->method = PDF_CRYPT_AESV2; |
else if (!strcmp(fz_to_name(obj), "AESV3")) |
cf->method = PDF_CRYPT_AESV3; |
else |
fz_throw("unknown encryption method: %s", fz_to_name(obj)); |
} |
obj = fz_dict_gets(dict, "Length"); |
if (fz_is_int(obj)) |
cf->length = fz_to_int(obj); |
/* the length for crypt filters is supposed to be in bytes not bits */ |
if (cf->length < 40) |
cf->length = cf->length * 8; |
if ((cf->length % 8) != 0) |
return fz_throw("invalid key length: %d", cf->length); |
return fz_okay; |
} |
/* |
* Compute an encryption key (PDF 1.7 algorithm 3.2) |
*/ |
static const unsigned char padding[32] = |
{ |
0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, |
0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, |
0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, |
0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a |
}; |
static void |
pdf_compute_encryption_key(pdf_crypt *crypt, unsigned char *password, int pwlen, unsigned char *key) |
{ |
unsigned char buf[32]; |
unsigned int p; |
int i, n; |
fz_md5 md5; |
n = crypt->length / 8; |
/* Step 1 - copy and pad password string */ |
if (pwlen > 32) |
pwlen = 32; |
memcpy(buf, password, pwlen); |
memcpy(buf + pwlen, padding, 32 - pwlen); |
/* Step 2 - init md5 and pass value of step 1 */ |
fz_md5_init(&md5); |
fz_md5_update(&md5, buf, 32); |
/* Step 3 - pass O value */ |
fz_md5_update(&md5, crypt->o, 32); |
/* Step 4 - pass P value as unsigned int, low-order byte first */ |
p = (unsigned int) crypt->p; |
buf[0] = (p) & 0xFF; |
buf[1] = (p >> 8) & 0xFF; |
buf[2] = (p >> 16) & 0xFF; |
buf[3] = (p >> 24) & 0xFF; |
fz_md5_update(&md5, buf, 4); |
/* Step 5 - pass first element of ID array */ |
fz_md5_update(&md5, (unsigned char *)fz_to_str_buf(crypt->id), fz_to_str_len(crypt->id)); |
/* Step 6 (revision 4 or greater) - if metadata is not encrypted pass 0xFFFFFFFF */ |
if (crypt->r >= 4) |
{ |
if (!crypt->encrypt_metadata) |
{ |
buf[0] = 0xFF; |
buf[1] = 0xFF; |
buf[2] = 0xFF; |
buf[3] = 0xFF; |
fz_md5_update(&md5, buf, 4); |
} |
} |
/* Step 7 - finish the hash */ |
fz_md5_final(&md5, buf); |
/* Step 8 (revision 3 or greater) - do some voodoo 50 times */ |
if (crypt->r >= 3) |
{ |
for (i = 0; i < 50; i++) |
{ |
fz_md5_init(&md5); |
fz_md5_update(&md5, buf, n); |
fz_md5_final(&md5, buf); |
} |
} |
/* Step 9 - the key is the first 'n' bytes of the result */ |
memcpy(key, buf, n); |
} |
/* |
* Compute an encryption key (PDF 1.7 ExtensionLevel 3 algorithm 3.2a) |
*/ |
static void |
pdf_compute_encryption_key_r5(pdf_crypt *crypt, unsigned char *password, int pwlen, int ownerkey, unsigned char *validationkey) |
{ |
unsigned char buffer[128 + 8 + 48]; |
fz_sha256 sha256; |
fz_aes aes; |
/* Step 2 - truncate UTF-8 password to 127 characters */ |
if (pwlen > 127) |
pwlen = 127; |
/* Step 3/4 - test password against owner/user key and compute encryption key */ |
memcpy(buffer, password, pwlen); |
if (ownerkey) |
{ |
memcpy(buffer + pwlen, crypt->o + 32, 8); |
memcpy(buffer + pwlen + 8, crypt->u, 48); |
} |
else |
memcpy(buffer + pwlen, crypt->u + 32, 8); |
fz_sha256_init(&sha256); |
fz_sha256_update(&sha256, buffer, pwlen + 8 + (ownerkey ? 48 : 0)); |
fz_sha256_final(&sha256, validationkey); |
/* Step 3.5/4.5 - compute file encryption key from OE/UE */ |
memcpy(buffer + pwlen, crypt->u + 40, 8); |
fz_sha256_init(&sha256); |
fz_sha256_update(&sha256, buffer, pwlen + 8); |
fz_sha256_final(&sha256, buffer); |
// clear password buffer and use it as iv |
memset(buffer + 32, 0, sizeof(buffer) - 32); |
aes_setkey_dec(&aes, buffer, crypt->length); |
aes_crypt_cbc(&aes, AES_DECRYPT, 32, buffer + 32, ownerkey ? crypt->oe : crypt->ue, crypt->key); |
} |
/* |
* Computing the user password (PDF 1.7 algorithm 3.4 and 3.5) |
* Also save the generated key for decrypting objects and streams in crypt->key. |
*/ |
static void |
pdf_compute_user_password(pdf_crypt *crypt, unsigned char *password, int pwlen, unsigned char *output) |
{ |
if (crypt->r == 2) |
{ |
fz_arc4 arc4; |
pdf_compute_encryption_key(crypt, password, pwlen, crypt->key); |
fz_arc4_init(&arc4, crypt->key, crypt->length / 8); |
fz_arc4_encrypt(&arc4, output, padding, 32); |
} |
if (crypt->r == 3 || crypt->r == 4) |
{ |
unsigned char xor[32]; |
unsigned char digest[16]; |
fz_md5 md5; |
fz_arc4 arc4; |
int i, x, n; |
n = crypt->length / 8; |
pdf_compute_encryption_key(crypt, password, pwlen, crypt->key); |
fz_md5_init(&md5); |
fz_md5_update(&md5, padding, 32); |
fz_md5_update(&md5, (unsigned char*)fz_to_str_buf(crypt->id), fz_to_str_len(crypt->id)); |
fz_md5_final(&md5, digest); |
fz_arc4_init(&arc4, crypt->key, n); |
fz_arc4_encrypt(&arc4, output, digest, 16); |
for (x = 1; x <= 19; x++) |
{ |
for (i = 0; i < n; i++) |
xor[i] = crypt->key[i] ^ x; |
fz_arc4_init(&arc4, xor, n); |
fz_arc4_encrypt(&arc4, output, output, 16); |
} |
memcpy(output + 16, padding, 16); |
} |
if (crypt->r == 5) |
{ |
pdf_compute_encryption_key_r5(crypt, password, pwlen, 0, output); |
} |
} |
/* |
* Authenticating the user password (PDF 1.7 algorithm 3.6 |
* and ExtensionLevel 3 algorithm 3.11) |
* This also has the side effect of saving a key generated |
* from the password for decrypting objects and streams. |
*/ |
static int |
pdf_authenticate_user_password(pdf_crypt *crypt, unsigned char *password, int pwlen) |
{ |
unsigned char output[32]; |
pdf_compute_user_password(crypt, password, pwlen, output); |
if (crypt->r == 2 || crypt->r == 5) |
return memcmp(output, crypt->u, 32) == 0; |
if (crypt->r == 3 || crypt->r == 4) |
return memcmp(output, crypt->u, 16) == 0; |
return 0; |
} |
/* |
* Authenticating the owner password (PDF 1.7 algorithm 3.7 |
* and ExtensionLevel 3 algorithm 3.12) |
* Generates the user password from the owner password |
* and calls pdf_authenticate_user_password. |
*/ |
static int |
pdf_authenticate_owner_password(pdf_crypt *crypt, unsigned char *ownerpass, int pwlen) |
{ |
unsigned char pwbuf[32]; |
unsigned char key[32]; |
unsigned char xor[32]; |
unsigned char userpass[32]; |
int i, n, x; |
fz_md5 md5; |
fz_arc4 arc4; |
if (crypt->r == 5) |
{ |
/* PDF 1.7 ExtensionLevel 3 algorithm 3.12 */ |
pdf_compute_encryption_key_r5(crypt, ownerpass, pwlen, 1, key); |
return !memcmp(key, crypt->o, 32); |
} |
n = crypt->length / 8; |
/* Step 1 -- steps 1 to 4 of PDF 1.7 algorithm 3.3 */ |
/* copy and pad password string */ |
if (pwlen > 32) |
pwlen = 32; |
memcpy(pwbuf, ownerpass, pwlen); |
memcpy(pwbuf + pwlen, padding, 32 - pwlen); |
/* take md5 hash of padded password */ |
fz_md5_init(&md5); |
fz_md5_update(&md5, pwbuf, 32); |
fz_md5_final(&md5, key); |
/* do some voodoo 50 times (Revision 3 or greater) */ |
if (crypt->r >= 3) |
{ |
for (i = 0; i < 50; i++) |
{ |
fz_md5_init(&md5); |
fz_md5_update(&md5, key, 16); |
fz_md5_final(&md5, key); |
} |
} |
/* Step 2 (Revision 2) */ |
if (crypt->r == 2) |
{ |
fz_arc4_init(&arc4, key, n); |
fz_arc4_encrypt(&arc4, userpass, crypt->o, 32); |
} |
/* Step 2 (Revision 3 or greater) */ |
if (crypt->r >= 3) |
{ |
memcpy(userpass, crypt->o, 32); |
for (x = 0; x < 20; x++) |
{ |
for (i = 0; i < n; i++) |
xor[i] = key[i] ^ (19 - x); |
fz_arc4_init(&arc4, xor, n); |
fz_arc4_encrypt(&arc4, userpass, userpass, 32); |
} |
} |
return pdf_authenticate_user_password(crypt, userpass, 32); |
} |
int |
pdf_authenticate_password(pdf_xref *xref, char *password) |
{ |
if (xref->crypt) |
{ |
if (pdf_authenticate_user_password(xref->crypt, (unsigned char *)password, strlen(password))) |
return 1; |
if (pdf_authenticate_owner_password(xref->crypt, (unsigned char *)password, strlen(password))) |
return 1; |
return 0; |
} |
return 1; |
} |
int |
pdf_needs_password(pdf_xref *xref) |
{ |
if (!xref->crypt) |
return 0; |
if (pdf_authenticate_password(xref, "")) |
return 0; |
return 1; |
} |
int |
pdf_has_permission(pdf_xref *xref, int p) |
{ |
if (!xref->crypt) |
return 1; |
return xref->crypt->p & p; |
} |
unsigned char * |
pdf_get_crypt_key(pdf_xref *xref) |
{ |
if (xref->crypt) |
return xref->crypt->key; |
return NULL; |
} |
int |
pdf_get_crypt_revision(pdf_xref *xref) |
{ |
if (xref->crypt) |
return xref->crypt->v; |
return 0; |
} |
char * |
pdf_get_crypt_method(pdf_xref *xref) |
{ |
if (xref->crypt) |
{ |
switch (xref->crypt->strf.method) |
{ |
case PDF_CRYPT_NONE: return "None"; |
case PDF_CRYPT_RC4: return "RC4"; |
case PDF_CRYPT_AESV2: return "AES"; |
case PDF_CRYPT_AESV3: return "AES"; |
case PDF_CRYPT_UNKNOWN: return "Unknown"; |
} |
} |
return "None"; |
} |
int |
pdf_get_crypt_length(pdf_xref *xref) |
{ |
if (xref->crypt) |
return xref->crypt->length; |
return 0; |
} |
/* |
* PDF 1.7 algorithm 3.1 and ExtensionLevel 3 algorithm 3.1a |
* |
* Using the global encryption key that was generated from the |
* password, create a new key that is used to decrypt indivual |
* objects and streams. This key is based on the object and |
* generation numbers. |
*/ |
static int |
pdf_compute_object_key(pdf_crypt *crypt, pdf_crypt_filter *cf, int num, int gen, unsigned char *key) |
{ |
fz_md5 md5; |
unsigned char message[5]; |
if (cf->method == PDF_CRYPT_AESV3) |
{ |
memcpy(key, crypt->key, crypt->length / 8); |
return crypt->length / 8; |
} |
fz_md5_init(&md5); |
fz_md5_update(&md5, crypt->key, crypt->length / 8); |
message[0] = (num) & 0xFF; |
message[1] = (num >> 8) & 0xFF; |
message[2] = (num >> 16) & 0xFF; |
message[3] = (gen) & 0xFF; |
message[4] = (gen >> 8) & 0xFF; |
fz_md5_update(&md5, message, 5); |
if (cf->method == PDF_CRYPT_AESV2) |
fz_md5_update(&md5, (unsigned char *)"sAlT", 4); |
fz_md5_final(&md5, key); |
if (crypt->length / 8 + 5 > 16) |
return 16; |
return crypt->length / 8 + 5; |
} |
/* |
* PDF 1.7 algorithm 3.1 and ExtensionLevel 3 algorithm 3.1a |
* |
* Decrypt all strings in obj modifying the data in-place. |
* Recurse through arrays and dictionaries, but do not follow |
* indirect references. |
*/ |
static void |
pdf_crypt_obj_imp(pdf_crypt *crypt, fz_obj *obj, unsigned char *key, int keylen) |
{ |
unsigned char *s; |
int i, n; |
if (fz_is_indirect(obj)) |
return; |
if (fz_is_string(obj)) |
{ |
s = (unsigned char *) fz_to_str_buf(obj); |
n = fz_to_str_len(obj); |
if (crypt->strf.method == PDF_CRYPT_RC4) |
{ |
fz_arc4 arc4; |
fz_arc4_init(&arc4, key, keylen); |
fz_arc4_encrypt(&arc4, s, s, n); |
} |
if (crypt->strf.method == PDF_CRYPT_AESV2 || crypt->strf.method == PDF_CRYPT_AESV3) |
{ |
if (n & 15 || n < 32) |
fz_warn("invalid string length for aes encryption"); |
else |
{ |
unsigned char iv[16]; |
fz_aes aes; |
memcpy(iv, s, 16); |
aes_setkey_dec(&aes, key, keylen * 8); |
aes_crypt_cbc(&aes, AES_DECRYPT, n - 16, iv, s + 16, s); |
/* delete space used for iv and padding bytes at end */ |
if (s[n - 17] < 1 || s[n - 17] > 16) |
fz_warn("aes padding out of range"); |
else |
fz_set_str_len(obj, n - 16 - s[n - 17]); |
} |
} |
} |
else if (fz_is_array(obj)) |
{ |
n = fz_array_len(obj); |
for (i = 0; i < n; i++) |
{ |
pdf_crypt_obj_imp(crypt, fz_array_get(obj, i), key, keylen); |
} |
} |
else if (fz_is_dict(obj)) |
{ |
n = fz_dict_len(obj); |
for (i = 0; i < n; i++) |
{ |
pdf_crypt_obj_imp(crypt, fz_dict_get_val(obj, i), key, keylen); |
} |
} |
} |
void |
pdf_crypt_obj(pdf_crypt *crypt, fz_obj *obj, int num, int gen) |
{ |
unsigned char key[32]; |
int len; |
len = pdf_compute_object_key(crypt, &crypt->strf, num, gen, key); |
pdf_crypt_obj_imp(crypt, obj, key, len); |
} |
/* |
* PDF 1.7 algorithm 3.1 and ExtensionLevel 3 algorithm 3.1a |
* |
* Create filter suitable for de/encrypting a stream. |
*/ |
static fz_stream * |
pdf_open_crypt_imp(fz_stream *chain, pdf_crypt *crypt, pdf_crypt_filter *stmf, int num, int gen) |
{ |
unsigned char key[32]; |
int len; |
len = pdf_compute_object_key(crypt, stmf, num, gen, key); |
if (stmf->method == PDF_CRYPT_RC4) |
return fz_open_arc4(chain, key, len); |
if (stmf->method == PDF_CRYPT_AESV2 || stmf->method == PDF_CRYPT_AESV3) |
return fz_open_aesd(chain, key, len); |
return fz_open_copy(chain); |
} |
fz_stream * |
pdf_open_crypt(fz_stream *chain, pdf_crypt *crypt, int num, int gen) |
{ |
return pdf_open_crypt_imp(chain, crypt, &crypt->stmf, num, gen); |
} |
fz_stream * |
pdf_open_crypt_with_filter(fz_stream *chain, pdf_crypt *crypt, char *name, int num, int gen) |
{ |
fz_error error; |
pdf_crypt_filter cf; |
if (strcmp(name, "Identity")) |
{ |
error = pdf_parse_crypt_filter(&cf, crypt->cf, name, crypt->length); |
if (error) |
fz_catch(error, "cannot parse crypt filter (%d %d R)", num, gen); |
else |
return pdf_open_crypt_imp(chain, crypt, &cf, num, gen); |
} |
return chain; |
} |
void pdf_debug_crypt(pdf_crypt *crypt) |
{ |
int i; |
printf("crypt {\n"); |
printf("\tv=%d length=%d\n", crypt->v, crypt->length); |
printf("\tstmf method=%d length=%d\n", crypt->stmf.method, crypt->stmf.length); |
printf("\tstrf method=%d length=%d\n", crypt->strf.method, crypt->strf.length); |
printf("\tr=%d\n", crypt->r); |
printf("\to=<"); |
for (i = 0; i < 32; i++) |
printf("%02X", crypt->o[i]); |
printf(">\n"); |
printf("\tu=<"); |
for (i = 0; i < 32; i++) |
printf("%02X", crypt->u[i]); |
printf(">\n"); |
printf("}\n"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_encoding.c |
---|
0,0 → 1,83 |
#include "fitz.h" |
#include "mupdf.h" |
#include "data_encodings.h" |
#include "data_glyphlist.h" |
void |
pdf_load_encoding(char **estrings, char *encoding) |
{ |
char **bstrings = NULL; |
int i; |
if (!strcmp(encoding, "StandardEncoding")) |
bstrings = (char**) pdf_standard; |
if (!strcmp(encoding, "MacRomanEncoding")) |
bstrings = (char**) pdf_mac_roman; |
if (!strcmp(encoding, "MacExpertEncoding")) |
bstrings = (char**) pdf_mac_expert; |
if (!strcmp(encoding, "WinAnsiEncoding")) |
bstrings = (char**) pdf_win_ansi; |
if (bstrings) |
for (i = 0; i < 256; i++) |
estrings[i] = bstrings[i]; |
} |
int |
pdf_lookup_agl(char *name) |
{ |
char buf[64]; |
char *p; |
int l = 0; |
int r = nelem(agl_name_list) - 1; |
fz_strlcpy(buf, name, sizeof buf); |
/* kill anything after first period and underscore */ |
p = strchr(buf, '.'); |
if (p) p[0] = 0; |
p = strchr(buf, '_'); |
if (p) p[0] = 0; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
int c = strcmp(buf, agl_name_list[m]); |
if (c < 0) |
r = m - 1; |
else if (c > 0) |
l = m + 1; |
else |
return agl_code_list[m]; |
} |
if (strstr(buf, "uni") == buf) |
return strtol(buf + 3, NULL, 16); |
else if (strstr(buf, "u") == buf) |
return strtol(buf + 1, NULL, 16); |
else if (strstr(buf, "a") == buf && strlen(buf) >= 3) |
return strtol(buf + 1, NULL, 10); |
return 0; |
} |
static const char *empty_dup_list[] = { 0 }; |
const char ** |
pdf_lookup_agl_duplicates(int ucs) |
{ |
int l = 0; |
int r = nelem(agl_dup_offsets) / 2 - 1; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
if (ucs < agl_dup_offsets[m << 1]) |
r = m - 1; |
else if (ucs > agl_dup_offsets[m << 1]) |
l = m + 1; |
else |
return agl_dup_names + agl_dup_offsets[(m << 1) + 1]; |
} |
return empty_dup_list; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_font.c |
---|
0,0 → 1,1165 |
#include "fitz.h" |
#include "mupdf.h" |
#include <ft2build.h> |
#include FT_FREETYPE_H |
#include FT_XFREE86_H |
static fz_error pdf_load_font_descriptor(pdf_font_desc *fontdesc, pdf_xref *xref, fz_obj *dict, char *collection, char *basefont); |
static char *base_font_names[14][7] = |
{ |
{ "Courier", "CourierNew", "CourierNewPSMT", NULL }, |
{ "Courier-Bold", "CourierNew,Bold", "Courier,Bold", |
"CourierNewPS-BoldMT", "CourierNew-Bold", NULL }, |
{ "Courier-Oblique", "CourierNew,Italic", "Courier,Italic", |
"CourierNewPS-ItalicMT", "CourierNew-Italic", NULL }, |
{ "Courier-BoldOblique", "CourierNew,BoldItalic", "Courier,BoldItalic", |
"CourierNewPS-BoldItalicMT", "CourierNew-BoldItalic", NULL }, |
{ "Helvetica", "ArialMT", "Arial", NULL }, |
{ "Helvetica-Bold", "Arial-BoldMT", "Arial,Bold", "Arial-Bold", |
"Helvetica,Bold", NULL }, |
{ "Helvetica-Oblique", "Arial-ItalicMT", "Arial,Italic", "Arial-Italic", |
"Helvetica,Italic", "Helvetica-Italic", NULL }, |
{ "Helvetica-BoldOblique", "Arial-BoldItalicMT", |
"Arial,BoldItalic", "Arial-BoldItalic", |
"Helvetica,BoldItalic", "Helvetica-BoldItalic", NULL }, |
{ "Times-Roman", "TimesNewRomanPSMT", "TimesNewRoman", |
"TimesNewRomanPS", NULL }, |
{ "Times-Bold", "TimesNewRomanPS-BoldMT", "TimesNewRoman,Bold", |
"TimesNewRomanPS-Bold", "TimesNewRoman-Bold", NULL }, |
{ "Times-Italic", "TimesNewRomanPS-ItalicMT", "TimesNewRoman,Italic", |
"TimesNewRomanPS-Italic", "TimesNewRoman-Italic", NULL }, |
{ "Times-BoldItalic", "TimesNewRomanPS-BoldItalicMT", |
"TimesNewRoman,BoldItalic", "TimesNewRomanPS-BoldItalic", |
"TimesNewRoman-BoldItalic", NULL }, |
{ "Symbol", NULL }, |
{ "ZapfDingbats", NULL } |
}; |
static int is_dynalab(char *name) |
{ |
if (strstr(name, "HuaTian")) |
return 1; |
if (strstr(name, "MingLi")) |
return 1; |
if ((strstr(name, "DF") == name) || strstr(name, "+DF")) |
return 1; |
if ((strstr(name, "DLC") == name) || strstr(name, "+DLC")) |
return 1; |
return 0; |
} |
static int strcmp_ignore_space(char *a, char *b) |
{ |
while (1) |
{ |
while (*a == ' ') |
a++; |
while (*b == ' ') |
b++; |
if (*a != *b) |
return 1; |
if (*a == 0) |
return *a != *b; |
if (*b == 0) |
return *a != *b; |
a++; |
b++; |
} |
} |
static char *clean_font_name(char *fontname) |
{ |
int i, k; |
for (i = 0; i < 14; i++) |
for (k = 0; base_font_names[i][k]; k++) |
if (!strcmp_ignore_space(base_font_names[i][k], fontname)) |
return base_font_names[i][0]; |
return fontname; |
} |
/* |
* FreeType and Rendering glue |
*/ |
enum { UNKNOWN, TYPE1, TRUETYPE }; |
static int ft_kind(FT_Face face) |
{ |
/// ZAGLUSHKA /// |
//const char *kind = FT_Get_X11_Font_Format(face); |
const char *kind = "TrueType"; |
if (!strcmp(kind, "TrueType")) |
return TRUETYPE; |
if (!strcmp(kind, "Type 1")) |
return TYPE1; |
if (!strcmp(kind, "CFF")) |
return TYPE1; |
if (!strcmp(kind, "CID Type 1")) |
return TYPE1; |
return UNKNOWN; |
} |
static int ft_is_bold(FT_Face face) |
{ |
return face->style_flags & FT_STYLE_FLAG_BOLD; |
} |
static int ft_is_italic(FT_Face face) |
{ |
return face->style_flags & FT_STYLE_FLAG_ITALIC; |
} |
static int ft_char_index(FT_Face face, int cid) |
{ |
int gid = FT_Get_Char_Index(face, cid); |
if (gid == 0) |
gid = FT_Get_Char_Index(face, 0xf000 + cid); |
/* some chinese fonts only ship the similarly looking 0x2026 */ |
if (gid == 0 && cid == 0x22ef) |
gid = FT_Get_Char_Index(face, 0x2026); |
return gid; |
} |
static int ft_cid_to_gid(pdf_font_desc *fontdesc, int cid) |
{ |
if (fontdesc->to_ttf_cmap) |
{ |
cid = pdf_lookup_cmap(fontdesc->to_ttf_cmap, cid); |
return ft_char_index(fontdesc->font->ft_face, cid); |
} |
if (fontdesc->cid_to_gid) |
return fontdesc->cid_to_gid[cid]; |
return cid; |
} |
int |
pdf_font_cid_to_gid(pdf_font_desc *fontdesc, int cid) |
{ |
if (fontdesc->font->ft_face) |
return ft_cid_to_gid(fontdesc, cid); |
return cid; |
} |
static int ft_width(pdf_font_desc *fontdesc, int cid) |
{ |
int gid = ft_cid_to_gid(fontdesc, cid); |
int fterr = FT_Load_Glyph(fontdesc->font->ft_face, gid, |
FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM); |
if (fterr) |
{ |
fz_warn("freetype load glyph (gid %d): %s", gid, ft_error_string(fterr)); |
return 0; |
} |
return ((FT_Face)fontdesc->font->ft_face)->glyph->advance.x; |
} |
static int lookup_mre_code(char *name) |
{ |
int i; |
for (i = 0; i < 256; i++) |
if (pdf_mac_roman[i] && !strcmp(name, pdf_mac_roman[i])) |
return i; |
return -1; |
} |
/* |
* Load font files. |
*/ |
static fz_error |
pdf_load_builtin_font(pdf_font_desc *fontdesc, char *fontname) |
{ |
fz_error error; |
unsigned char *data; |
unsigned int len; |
data = pdf_find_builtin_font(fontname, &len); |
if (!data) |
return fz_throw("cannot find builtin font: '%s'", fontname); |
error = fz_new_font_from_memory(&fontdesc->font, data, len, 0); |
if (error) |
return fz_rethrow(error, "cannot load freetype font from memory"); |
if (!strcmp(fontname, "Symbol") || !strcmp(fontname, "ZapfDingbats")) |
fontdesc->flags |= PDF_FD_SYMBOLIC; |
return fz_okay; |
} |
static fz_error |
pdf_load_substitute_font(pdf_font_desc *fontdesc, int mono, int serif, int bold, int italic) |
{ |
fz_error error; |
unsigned char *data; |
unsigned int len; |
data = pdf_find_substitute_font(mono, serif, bold, italic, &len); |
if (!data) |
return fz_throw("cannot find substitute font"); |
error = fz_new_font_from_memory(&fontdesc->font, data, len, 0); |
if (error) |
return fz_rethrow(error, "cannot load freetype font from memory"); |
fontdesc->font->ft_substitute = 1; |
fontdesc->font->ft_bold = bold && !ft_is_bold(fontdesc->font->ft_face); |
fontdesc->font->ft_italic = italic && !ft_is_italic(fontdesc->font->ft_face); |
return fz_okay; |
} |
static fz_error |
pdf_load_substitute_cjk_font(pdf_font_desc *fontdesc, int ros, int serif) |
{ |
fz_error error; |
unsigned char *data; |
unsigned int len; |
data = pdf_find_substitute_cjk_font(ros, serif, &len); |
if (!data) |
return fz_throw("cannot find builtin CJK font"); |
error = fz_new_font_from_memory(&fontdesc->font, data, len, 0); |
if (error) |
return fz_rethrow(error, "cannot load builtin CJK font"); |
fontdesc->font->ft_substitute = 1; |
return fz_okay; |
} |
static fz_error |
pdf_load_system_font(pdf_font_desc *fontdesc, char *fontname, char *collection) |
{ |
fz_error error; |
int bold = 0; |
int italic = 0; |
int serif = 0; |
int mono = 0; |
if (strstr(fontname, "Bold")) |
bold = 1; |
if (strstr(fontname, "Italic")) |
italic = 1; |
if (strstr(fontname, "Oblique")) |
italic = 1; |
if (fontdesc->flags & PDF_FD_FIXED_PITCH) |
mono = 1; |
if (fontdesc->flags & PDF_FD_SERIF) |
serif = 1; |
if (fontdesc->flags & PDF_FD_ITALIC) |
italic = 1; |
if (fontdesc->flags & PDF_FD_FORCE_BOLD) |
bold = 1; |
if (collection) |
{ |
if (!strcmp(collection, "Adobe-CNS1")) |
return pdf_load_substitute_cjk_font(fontdesc, PDF_ROS_CNS, serif); |
else if (!strcmp(collection, "Adobe-GB1")) |
return pdf_load_substitute_cjk_font(fontdesc, PDF_ROS_GB, serif); |
else if (!strcmp(collection, "Adobe-Japan1")) |
return pdf_load_substitute_cjk_font(fontdesc, PDF_ROS_JAPAN, serif); |
else if (!strcmp(collection, "Adobe-Korea1")) |
return pdf_load_substitute_cjk_font(fontdesc, PDF_ROS_KOREA, serif); |
return fz_throw("unknown cid collection: %s", collection); |
} |
error = pdf_load_substitute_font(fontdesc, mono, serif, bold, italic); |
if (error) |
return fz_rethrow(error, "cannot load substitute font"); |
return fz_okay; |
} |
static fz_error |
pdf_load_embedded_font(pdf_font_desc *fontdesc, pdf_xref *xref, fz_obj *stmref) |
{ |
fz_error error; |
fz_buffer *buf; |
error = pdf_load_stream(&buf, xref, fz_to_num(stmref), fz_to_gen(stmref)); |
if (error) |
return fz_rethrow(error, "cannot load font stream (%d %d R)", fz_to_num(stmref), fz_to_gen(stmref)); |
error = fz_new_font_from_memory(&fontdesc->font, buf->data, buf->len, 0); |
if (error) |
{ |
fz_drop_buffer(buf); |
return fz_rethrow(error, "cannot load embedded font (%d %d R)", fz_to_num(stmref), fz_to_gen(stmref)); |
} |
/* save the buffer so we can free it later */ |
fontdesc->font->ft_data = buf->data; |
fontdesc->font->ft_size = buf->len; |
fz_free(buf); /* only free the fz_buffer struct, not the contained data */ |
fontdesc->is_embedded = 1; |
return fz_okay; |
} |
/* |
* Create and destroy |
*/ |
pdf_font_desc * |
pdf_keep_font(pdf_font_desc *fontdesc) |
{ |
fontdesc->refs ++; |
return fontdesc; |
} |
void |
pdf_drop_font(pdf_font_desc *fontdesc) |
{ |
if (fontdesc && --fontdesc->refs == 0) |
{ |
if (fontdesc->font) |
fz_drop_font(fontdesc->font); |
if (fontdesc->encoding) |
pdf_drop_cmap(fontdesc->encoding); |
if (fontdesc->to_ttf_cmap) |
pdf_drop_cmap(fontdesc->to_ttf_cmap); |
if (fontdesc->to_unicode) |
pdf_drop_cmap(fontdesc->to_unicode); |
fz_free(fontdesc->cid_to_gid); |
fz_free(fontdesc->cid_to_ucs); |
fz_free(fontdesc->hmtx); |
fz_free(fontdesc->vmtx); |
fz_free(fontdesc); |
} |
} |
pdf_font_desc * |
pdf_new_font_desc(void) |
{ |
pdf_font_desc *fontdesc; |
fontdesc = fz_malloc(sizeof(pdf_font_desc)); |
fontdesc->refs = 1; |
fontdesc->font = NULL; |
fontdesc->flags = 0; |
fontdesc->italic_angle = 0; |
fontdesc->ascent = 0; |
fontdesc->descent = 0; |
fontdesc->cap_height = 0; |
fontdesc->x_height = 0; |
fontdesc->missing_width = 0; |
fontdesc->encoding = NULL; |
fontdesc->to_ttf_cmap = NULL; |
fontdesc->cid_to_gid_len = 0; |
fontdesc->cid_to_gid = NULL; |
fontdesc->to_unicode = NULL; |
fontdesc->cid_to_ucs_len = 0; |
fontdesc->cid_to_ucs = NULL; |
fontdesc->wmode = 0; |
fontdesc->hmtx_cap = 0; |
fontdesc->vmtx_cap = 0; |
fontdesc->hmtx_len = 0; |
fontdesc->vmtx_len = 0; |
fontdesc->hmtx = NULL; |
fontdesc->vmtx = NULL; |
fontdesc->dhmtx.lo = 0x0000; |
fontdesc->dhmtx.hi = 0xFFFF; |
fontdesc->dhmtx.w = 1000; |
fontdesc->dvmtx.lo = 0x0000; |
fontdesc->dvmtx.hi = 0xFFFF; |
fontdesc->dvmtx.x = 0; |
fontdesc->dvmtx.y = 880; |
fontdesc->dvmtx.w = -1000; |
fontdesc->is_embedded = 0; |
return fontdesc; |
} |
/* |
* Simple fonts (Type1 and TrueType) |
*/ |
static fz_error |
pdf_load_simple_font(pdf_font_desc **fontdescp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
fz_obj *descriptor; |
fz_obj *encoding; |
fz_obj *widths; |
unsigned short *etable = NULL; |
pdf_font_desc *fontdesc; |
FT_Face face; |
FT_CharMap cmap; |
int symbolic; |
int kind; |
char *basefont; |
char *fontname; |
char *estrings[256]; |
char ebuffer[256][32]; |
int i, k, n; |
int fterr; |
basefont = fz_to_name(fz_dict_gets(dict, "BaseFont")); |
fontname = clean_font_name(basefont); |
/* Load font file */ |
fontdesc = pdf_new_font_desc(); |
descriptor = fz_dict_gets(dict, "FontDescriptor"); |
if (descriptor) |
error = pdf_load_font_descriptor(fontdesc, xref, descriptor, NULL, basefont); |
else |
error = pdf_load_builtin_font(fontdesc, fontname); |
if (error) |
goto cleanup; |
/* Some chinese documents mistakenly consider WinAnsiEncoding to be codepage 936 */ |
if (!*fontdesc->font->name && |
!fz_dict_gets(dict, "ToUnicode") && |
!strcmp(fz_to_name(fz_dict_gets(dict, "Encoding")), "WinAnsiEncoding") && |
fz_to_int(fz_dict_gets(descriptor, "Flags")) == 4) |
{ |
/* note: without the comma, pdf_load_font_descriptor would prefer /FontName over /BaseFont */ |
char *cp936fonts[] = { |
"\xCB\xCE\xCC\xE5", "SimSun,Regular", |
"\xBA\xDA\xCC\xE5", "SimHei,Regular", |
"\xBF\xAC\xCC\xE5_GB2312", "SimKai,Regular", |
"\xB7\xC2\xCB\xCE_GB2312", "SimFang,Regular", |
"\xC1\xA5\xCA\xE9", "SimLi,Regular", |
NULL |
}; |
for (i = 0; cp936fonts[i]; i += 2) |
if (!strcmp(basefont, cp936fonts[i])) |
break; |
if (cp936fonts[i]) |
{ |
fz_warn("workaround for S22PDF lying about chinese font encodings"); |
pdf_drop_font(fontdesc); |
fontdesc = pdf_new_font_desc(); |
error = pdf_load_font_descriptor(fontdesc, xref, descriptor, "Adobe-GB1", cp936fonts[i+1]); |
error |= pdf_load_system_cmap(&fontdesc->encoding, "GBK-EUC-H"); |
error |= pdf_load_system_cmap(&fontdesc->to_unicode, "Adobe-GB1-UCS2"); |
error |= pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-GB1-UCS2"); |
if (error) |
return fz_rethrow(error, "cannot load font"); |
face = fontdesc->font->ft_face; |
kind = ft_kind(face); |
goto skip_encoding; |
} |
} |
face = fontdesc->font->ft_face; |
kind = ft_kind(face); |
/* Encoding */ |
symbolic = fontdesc->flags & 4; |
if (face->num_charmaps > 0) |
cmap = face->charmaps[0]; |
else |
cmap = NULL; |
for (i = 0; i < face->num_charmaps; i++) |
{ |
FT_CharMap test = face->charmaps[i]; |
if (kind == TYPE1) |
{ |
if (test->platform_id == 7) |
cmap = test; |
} |
if (kind == TRUETYPE) |
{ |
if (test->platform_id == 1 && test->encoding_id == 0) |
cmap = test; |
if (test->platform_id == 3 && test->encoding_id == 1) |
cmap = test; |
} |
} |
if (cmap) |
{ |
fterr = FT_Set_Charmap(face, cmap); |
if (fterr) |
fz_warn("freetype could not set cmap: %s", ft_error_string(fterr)); |
} |
else |
fz_warn("freetype could not find any cmaps"); |
etable = fz_calloc(256, sizeof(unsigned short)); |
for (i = 0; i < 256; i++) |
{ |
estrings[i] = NULL; |
etable[i] = 0; |
} |
encoding = fz_dict_gets(dict, "Encoding"); |
if (encoding) |
{ |
if (fz_is_name(encoding)) |
pdf_load_encoding(estrings, fz_to_name(encoding)); |
if (fz_is_dict(encoding)) |
{ |
fz_obj *base, *diff, *item; |
base = fz_dict_gets(encoding, "BaseEncoding"); |
if (fz_is_name(base)) |
pdf_load_encoding(estrings, fz_to_name(base)); |
else if (!fontdesc->is_embedded && !symbolic) |
pdf_load_encoding(estrings, "StandardEncoding"); |
diff = fz_dict_gets(encoding, "Differences"); |
if (fz_is_array(diff)) |
{ |
n = fz_array_len(diff); |
k = 0; |
for (i = 0; i < n; i++) |
{ |
item = fz_array_get(diff, i); |
if (fz_is_int(item)) |
k = fz_to_int(item); |
if (fz_is_name(item)) |
estrings[k++] = fz_to_name(item); |
if (k < 0) k = 0; |
if (k > 255) k = 255; |
} |
} |
} |
} |
/* start with the builtin encoding */ |
for (i = 0; i < 256; i++) |
etable[i] = ft_char_index(face, i); |
/* encode by glyph name where we can */ |
if (kind == TYPE1) |
{ |
for (i = 0; i < 256; i++) |
{ |
if (estrings[i]) |
{ |
etable[i] = FT_Get_Name_Index(face, estrings[i]); |
if (etable[i] == 0) |
{ |
int aglcode = pdf_lookup_agl(estrings[i]); |
const char **dupnames = pdf_lookup_agl_duplicates(aglcode); |
while (*dupnames) |
{ |
etable[i] = FT_Get_Name_Index(face, (char*)*dupnames); |
if (etable[i]) |
break; |
dupnames++; |
} |
} |
} |
} |
} |
/* encode by glyph name where we can */ |
if (kind == TRUETYPE) |
{ |
/* Unicode cmap */ |
if (!symbolic && face->charmap && face->charmap->platform_id == 3) |
{ |
for (i = 0; i < 256; i++) |
{ |
if (estrings[i]) |
{ |
int aglcode = pdf_lookup_agl(estrings[i]); |
if (!aglcode) |
etable[i] = FT_Get_Name_Index(face, estrings[i]); |
else |
etable[i] = ft_char_index(face, aglcode); |
} |
} |
} |
/* MacRoman cmap */ |
else if (!symbolic && face->charmap && face->charmap->platform_id == 1) |
{ |
for (i = 0; i < 256; i++) |
{ |
if (estrings[i]) |
{ |
k = lookup_mre_code(estrings[i]); |
if (k <= 0) |
etable[i] = FT_Get_Name_Index(face, estrings[i]); |
else |
etable[i] = ft_char_index(face, k); |
} |
} |
} |
/* Symbolic cmap */ |
else |
{ |
for (i = 0; i < 256; i++) |
{ |
if (estrings[i]) |
{ |
etable[i] = FT_Get_Name_Index(face, estrings[i]); |
if (etable[i] == 0) |
etable[i] = ft_char_index(face, i); |
} |
} |
} |
} |
/* try to reverse the glyph names from the builtin encoding */ |
for (i = 0; i < 256; i++) |
{ |
if (etable[i] && !estrings[i]) |
{ |
if (FT_HAS_GLYPH_NAMES(face)) |
{ |
fterr = FT_Get_Glyph_Name(face, etable[i], ebuffer[i], 32); |
if (fterr) |
fz_warn("freetype get glyph name (gid %d): %s", etable[i], ft_error_string(fterr)); |
if (ebuffer[i][0]) |
estrings[i] = ebuffer[i]; |
} |
else |
{ |
estrings[i] = (char*) pdf_win_ansi[i]; /* discard const */ |
} |
} |
} |
fontdesc->encoding = pdf_new_identity_cmap(0, 1); |
fontdesc->cid_to_gid_len = 256; |
fontdesc->cid_to_gid = etable; |
error = pdf_load_to_unicode(fontdesc, xref, estrings, NULL, fz_dict_gets(dict, "ToUnicode")); |
if (error) |
fz_catch(error, "cannot load to_unicode"); |
skip_encoding: |
/* Widths */ |
pdf_set_default_hmtx(fontdesc, fontdesc->missing_width); |
widths = fz_dict_gets(dict, "Widths"); |
if (widths) |
{ |
int first, last; |
first = fz_to_int(fz_dict_gets(dict, "FirstChar")); |
last = fz_to_int(fz_dict_gets(dict, "LastChar")); |
if (first < 0 || last > 255 || first > last) |
first = last = 0; |
for (i = 0; i < last - first + 1; i++) |
{ |
int wid = fz_to_int(fz_array_get(widths, i)); |
pdf_add_hmtx(fontdesc, i + first, i + first, wid); |
} |
} |
else |
{ |
fterr = FT_Set_Char_Size(face, 1000, 1000, 72, 72); |
if (fterr) |
fz_warn("freetype set character size: %s", ft_error_string(fterr)); |
for (i = 0; i < 256; i++) |
{ |
pdf_add_hmtx(fontdesc, i, i, ft_width(fontdesc, i)); |
} |
} |
pdf_end_hmtx(fontdesc); |
*fontdescp = fontdesc; |
return fz_okay; |
cleanup: |
if (etable != fontdesc->cid_to_gid) |
fz_free(etable); |
pdf_drop_font(fontdesc); |
return fz_rethrow(error, "cannot load simple font (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
/* |
* CID Fonts |
*/ |
static fz_error |
load_cid_font(pdf_font_desc **fontdescp, pdf_xref *xref, fz_obj *dict, fz_obj *encoding, fz_obj *to_unicode) |
{ |
fz_error error; |
fz_obj *widths; |
fz_obj *descriptor; |
pdf_font_desc *fontdesc; |
FT_Face face; |
int kind; |
char collection[256]; |
char *basefont; |
int i, k, fterr; |
fz_obj *obj; |
int dw; |
/* Get font name and CID collection */ |
basefont = fz_to_name(fz_dict_gets(dict, "BaseFont")); |
{ |
fz_obj *cidinfo; |
char tmpstr[64]; |
int tmplen; |
cidinfo = fz_dict_gets(dict, "CIDSystemInfo"); |
if (!cidinfo) |
return fz_throw("cid font is missing info"); |
obj = fz_dict_gets(cidinfo, "Registry"); |
tmplen = MIN(sizeof tmpstr - 1, fz_to_str_len(obj)); |
memcpy(tmpstr, fz_to_str_buf(obj), tmplen); |
tmpstr[tmplen] = '\0'; |
fz_strlcpy(collection, tmpstr, sizeof collection); |
fz_strlcat(collection, "-", sizeof collection); |
obj = fz_dict_gets(cidinfo, "Ordering"); |
tmplen = MIN(sizeof tmpstr - 1, fz_to_str_len(obj)); |
memcpy(tmpstr, fz_to_str_buf(obj), tmplen); |
tmpstr[tmplen] = '\0'; |
fz_strlcat(collection, tmpstr, sizeof collection); |
} |
/* Load font file */ |
fontdesc = pdf_new_font_desc(); |
descriptor = fz_dict_gets(dict, "FontDescriptor"); |
if (descriptor) |
error = pdf_load_font_descriptor(fontdesc, xref, descriptor, collection, basefont); |
else |
error = fz_throw("syntaxerror: missing font descriptor"); |
if (error) |
goto cleanup; |
face = fontdesc->font->ft_face; |
kind = ft_kind(face); |
/* Encoding */ |
error = fz_okay; |
if (fz_is_name(encoding)) |
{ |
if (!strcmp(fz_to_name(encoding), "Identity-H")) |
fontdesc->encoding = pdf_new_identity_cmap(0, 2); |
else if (!strcmp(fz_to_name(encoding), "Identity-V")) |
fontdesc->encoding = pdf_new_identity_cmap(1, 2); |
else |
error = pdf_load_system_cmap(&fontdesc->encoding, fz_to_name(encoding)); |
} |
else if (fz_is_indirect(encoding)) |
{ |
error = pdf_load_embedded_cmap(&fontdesc->encoding, xref, encoding); |
} |
else |
{ |
error = fz_throw("syntaxerror: font missing encoding"); |
} |
if (error) |
goto cleanup; |
pdf_set_font_wmode(fontdesc, pdf_get_wmode(fontdesc->encoding)); |
if (kind == TRUETYPE) |
{ |
fz_obj *cidtogidmap; |
cidtogidmap = fz_dict_gets(dict, "CIDToGIDMap"); |
if (fz_is_indirect(cidtogidmap)) |
{ |
fz_buffer *buf; |
error = pdf_load_stream(&buf, xref, fz_to_num(cidtogidmap), fz_to_gen(cidtogidmap)); |
if (error) |
goto cleanup; |
fontdesc->cid_to_gid_len = (buf->len) / 2; |
fontdesc->cid_to_gid = fz_calloc(fontdesc->cid_to_gid_len, sizeof(unsigned short)); |
for (i = 0; i < fontdesc->cid_to_gid_len; i++) |
fontdesc->cid_to_gid[i] = (buf->data[i * 2] << 8) + buf->data[i * 2 + 1]; |
fz_drop_buffer(buf); |
} |
/* if truetype font is external, cidtogidmap should not be identity */ |
/* so we map from cid to unicode and then map that through the (3 1) */ |
/* unicode cmap to get a glyph id */ |
else if (fontdesc->font->ft_substitute) |
{ |
fterr = FT_Select_Charmap(face, ft_encoding_unicode); |
if (fterr) |
{ |
error = fz_throw("fonterror: no unicode cmap when emulating CID font: %s", ft_error_string(fterr)); |
goto cleanup; |
} |
if (!strcmp(collection, "Adobe-CNS1")) |
error = pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-CNS1-UCS2"); |
else if (!strcmp(collection, "Adobe-GB1")) |
error = pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-GB1-UCS2"); |
else if (!strcmp(collection, "Adobe-Japan1")) |
error = pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-Japan1-UCS2"); |
else if (!strcmp(collection, "Adobe-Japan2")) |
error = pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-Japan2-UCS2"); |
else if (!strcmp(collection, "Adobe-Korea1")) |
error = pdf_load_system_cmap(&fontdesc->to_ttf_cmap, "Adobe-Korea1-UCS2"); |
else |
error = fz_okay; |
if (error) |
{ |
error = fz_rethrow(error, "cannot load system cmap %s", collection); |
goto cleanup; |
} |
} |
} |
error = pdf_load_to_unicode(fontdesc, xref, NULL, collection, to_unicode); |
if (error) |
fz_catch(error, "cannot load to_unicode"); |
/* Horizontal */ |
dw = 1000; |
obj = fz_dict_gets(dict, "DW"); |
if (obj) |
dw = fz_to_int(obj); |
pdf_set_default_hmtx(fontdesc, dw); |
widths = fz_dict_gets(dict, "W"); |
if (widths) |
{ |
int c0, c1, w; |
for (i = 0; i < fz_array_len(widths); ) |
{ |
c0 = fz_to_int(fz_array_get(widths, i)); |
obj = fz_array_get(widths, i + 1); |
if (fz_is_array(obj)) |
{ |
for (k = 0; k < fz_array_len(obj); k++) |
{ |
w = fz_to_int(fz_array_get(obj, k)); |
pdf_add_hmtx(fontdesc, c0 + k, c0 + k, w); |
} |
i += 2; |
} |
else |
{ |
c1 = fz_to_int(obj); |
w = fz_to_int(fz_array_get(widths, i + 2)); |
pdf_add_hmtx(fontdesc, c0, c1, w); |
i += 3; |
} |
} |
} |
pdf_end_hmtx(fontdesc); |
/* Vertical */ |
if (pdf_get_wmode(fontdesc->encoding) == 1) |
{ |
int dw2y = 880; |
int dw2w = -1000; |
obj = fz_dict_gets(dict, "DW2"); |
if (obj) |
{ |
dw2y = fz_to_int(fz_array_get(obj, 0)); |
dw2w = fz_to_int(fz_array_get(obj, 1)); |
} |
pdf_set_default_vmtx(fontdesc, dw2y, dw2w); |
widths = fz_dict_gets(dict, "W2"); |
if (widths) |
{ |
int c0, c1, w, x, y; |
for (i = 0; i < fz_array_len(widths); ) |
{ |
c0 = fz_to_int(fz_array_get(widths, i)); |
obj = fz_array_get(widths, i + 1); |
if (fz_is_array(obj)) |
{ |
for (k = 0; k * 3 < fz_array_len(obj); k ++) |
{ |
w = fz_to_int(fz_array_get(obj, k * 3 + 0)); |
x = fz_to_int(fz_array_get(obj, k * 3 + 1)); |
y = fz_to_int(fz_array_get(obj, k * 3 + 2)); |
pdf_add_vmtx(fontdesc, c0 + k, c0 + k, x, y, w); |
} |
i += 2; |
} |
else |
{ |
c1 = fz_to_int(obj); |
w = fz_to_int(fz_array_get(widths, i + 2)); |
x = fz_to_int(fz_array_get(widths, i + 3)); |
y = fz_to_int(fz_array_get(widths, i + 4)); |
pdf_add_vmtx(fontdesc, c0, c1, x, y, w); |
i += 5; |
} |
} |
} |
pdf_end_vmtx(fontdesc); |
} |
*fontdescp = fontdesc; |
return fz_okay; |
cleanup: |
pdf_drop_font(fontdesc); |
return fz_rethrow(error, "cannot load cid font (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
static fz_error |
pdf_load_type0_font(pdf_font_desc **fontdescp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
fz_obj *dfonts; |
fz_obj *dfont; |
fz_obj *subtype; |
fz_obj *encoding; |
fz_obj *to_unicode; |
dfonts = fz_dict_gets(dict, "DescendantFonts"); |
if (!dfonts) |
return fz_throw("cid font is missing descendant fonts"); |
dfont = fz_array_get(dfonts, 0); |
subtype = fz_dict_gets(dfont, "Subtype"); |
encoding = fz_dict_gets(dict, "Encoding"); |
to_unicode = fz_dict_gets(dict, "ToUnicode"); |
if (fz_is_name(subtype) && !strcmp(fz_to_name(subtype), "CIDFontType0")) |
error = load_cid_font(fontdescp, xref, dfont, encoding, to_unicode); |
else if (fz_is_name(subtype) && !strcmp(fz_to_name(subtype), "CIDFontType2")) |
error = load_cid_font(fontdescp, xref, dfont, encoding, to_unicode); |
else |
error = fz_throw("syntaxerror: unknown cid font type"); |
if (error) |
return fz_rethrow(error, "cannot load descendant font (%d %d R)", fz_to_num(dfont), fz_to_gen(dfont)); |
return fz_okay; |
} |
/* |
* FontDescriptor |
*/ |
static fz_error |
pdf_load_font_descriptor(pdf_font_desc *fontdesc, pdf_xref *xref, fz_obj *dict, char *collection, char *basefont) |
{ |
fz_error error; |
fz_obj *obj1, *obj2, *obj3, *obj; |
char *fontname; |
char *origname; |
FT_Face face; |
if (!strchr(basefont, ',') || strchr(basefont, '+')) |
origname = fz_to_name(fz_dict_gets(dict, "FontName")); |
else |
origname = basefont; |
fontname = clean_font_name(origname); |
fontdesc->flags = fz_to_int(fz_dict_gets(dict, "Flags")); |
fontdesc->italic_angle = fz_to_real(fz_dict_gets(dict, "ItalicAngle")); |
fontdesc->ascent = fz_to_real(fz_dict_gets(dict, "Ascent")); |
fontdesc->descent = fz_to_real(fz_dict_gets(dict, "Descent")); |
fontdesc->cap_height = fz_to_real(fz_dict_gets(dict, "CapHeight")); |
fontdesc->x_height = fz_to_real(fz_dict_gets(dict, "XHeight")); |
fontdesc->missing_width = fz_to_real(fz_dict_gets(dict, "MissingWidth")); |
obj1 = fz_dict_gets(dict, "FontFile"); |
obj2 = fz_dict_gets(dict, "FontFile2"); |
obj3 = fz_dict_gets(dict, "FontFile3"); |
obj = obj1 ? obj1 : obj2 ? obj2 : obj3; |
if (fz_is_indirect(obj)) |
{ |
error = pdf_load_embedded_font(fontdesc, xref, obj); |
if (error) |
{ |
fz_catch(error, "ignored error when loading embedded font, attempting to load system font"); |
if (origname != fontname) |
error = pdf_load_builtin_font(fontdesc, fontname); |
else |
error = pdf_load_system_font(fontdesc, fontname, collection); |
if (error) |
return fz_rethrow(error, "cannot load font descriptor (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
} |
else |
{ |
if (origname != fontname) |
error = pdf_load_builtin_font(fontdesc, fontname); |
else |
error = pdf_load_system_font(fontdesc, fontname, collection); |
if (error) |
return fz_rethrow(error, "cannot load font descriptor (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
fz_strlcpy(fontdesc->font->name, fontname, sizeof fontdesc->font->name); |
/* Check for DynaLab fonts that must use hinting */ |
face = fontdesc->font->ft_face; |
if (ft_kind(face) == TRUETYPE) |
{ |
if (FT_IS_TRICKY(face) || is_dynalab(fontdesc->font->name)) |
fontdesc->font->ft_hint = 1; |
} |
return fz_okay; |
} |
static void |
pdf_make_width_table(pdf_font_desc *fontdesc) |
{ |
fz_font *font = fontdesc->font; |
int i, k, cid, gid; |
font->width_count = 0; |
for (i = 0; i < fontdesc->hmtx_len; i++) |
{ |
for (k = fontdesc->hmtx[i].lo; k <= fontdesc->hmtx[i].hi; k++) |
{ |
cid = pdf_lookup_cmap(fontdesc->encoding, k); |
gid = pdf_font_cid_to_gid(fontdesc, cid); |
if (gid > font->width_count) |
font->width_count = gid; |
} |
} |
font->width_count ++; |
font->width_table = fz_calloc(font->width_count, sizeof(int)); |
memset(font->width_table, 0, sizeof(int) * font->width_count); |
for (i = 0; i < fontdesc->hmtx_len; i++) |
{ |
for (k = fontdesc->hmtx[i].lo; k <= fontdesc->hmtx[i].hi; k++) |
{ |
cid = pdf_lookup_cmap(fontdesc->encoding, k); |
gid = pdf_font_cid_to_gid(fontdesc, cid); |
if (gid >= 0 && gid < font->width_count) |
font->width_table[gid] = fontdesc->hmtx[i].w; |
} |
} |
} |
fz_error |
pdf_load_font(pdf_font_desc **fontdescp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict) |
{ |
fz_error error; |
char *subtype; |
fz_obj *dfonts; |
fz_obj *charprocs; |
if ((*fontdescp = pdf_find_item(xref->store, pdf_drop_font, dict))) |
{ |
pdf_keep_font(*fontdescp); |
return fz_okay; |
} |
subtype = fz_to_name(fz_dict_gets(dict, "Subtype")); |
dfonts = fz_dict_gets(dict, "DescendantFonts"); |
charprocs = fz_dict_gets(dict, "CharProcs"); |
if (subtype && !strcmp(subtype, "Type0")) |
error = pdf_load_type0_font(fontdescp, xref, dict); |
else if (subtype && !strcmp(subtype, "Type1")) |
error = pdf_load_simple_font(fontdescp, xref, dict); |
else if (subtype && !strcmp(subtype, "MMType1")) |
error = pdf_load_simple_font(fontdescp, xref, dict); |
else if (subtype && !strcmp(subtype, "TrueType")) |
error = pdf_load_simple_font(fontdescp, xref, dict); |
else if (subtype && !strcmp(subtype, "Type3")) |
error = pdf_load_type3_font(fontdescp, xref, rdb, dict); |
else if (charprocs) |
{ |
fz_warn("unknown font format, guessing type3."); |
error = pdf_load_type3_font(fontdescp, xref, rdb, dict); |
} |
else if (dfonts) |
{ |
fz_warn("unknown font format, guessing type0."); |
error = pdf_load_type0_font(fontdescp, xref, dict); |
} |
else |
{ |
fz_warn("unknown font format, guessing type1 or truetype."); |
error = pdf_load_simple_font(fontdescp, xref, dict); |
} |
if (error) |
return fz_rethrow(error, "cannot load font (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
/* Save the widths to stretch non-CJK substitute fonts */ |
if ((*fontdescp)->font->ft_substitute && !(*fontdescp)->to_ttf_cmap) |
pdf_make_width_table(*fontdescp); |
pdf_store_item(xref->store, pdf_keep_font, pdf_drop_font, dict, *fontdescp); |
return fz_okay; |
} |
void |
pdf_debug_font(pdf_font_desc *fontdesc) |
{ |
int i; |
printf("fontdesc {\n"); |
if (fontdesc->font->ft_face) |
printf("\tfreetype font\n"); |
if (fontdesc->font->t3procs) |
printf("\ttype3 font\n"); |
printf("\twmode %d\n", fontdesc->wmode); |
printf("\tDW %d\n", fontdesc->dhmtx.w); |
printf("\tW {\n"); |
for (i = 0; i < fontdesc->hmtx_len; i++) |
printf("\t\t<%04x> <%04x> %d\n", |
fontdesc->hmtx[i].lo, fontdesc->hmtx[i].hi, fontdesc->hmtx[i].w); |
printf("\t}\n"); |
if (fontdesc->wmode) |
{ |
printf("\tDW2 [%d %d]\n", fontdesc->dvmtx.y, fontdesc->dvmtx.w); |
printf("\tW2 {\n"); |
for (i = 0; i < fontdesc->vmtx_len; i++) |
printf("\t\t<%04x> <%04x> %d %d %d\n", fontdesc->vmtx[i].lo, fontdesc->vmtx[i].hi, |
fontdesc->vmtx[i].x, fontdesc->vmtx[i].y, fontdesc->vmtx[i].w); |
printf("\t}\n"); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_fontfile.c |
---|
0,0 → 1,139 |
#include "fitz.h" |
#include "mupdf.h" |
#ifdef NOCJK |
#define NOCJKFONT |
#endif |
#include "../generated/font_base14.h" |
#ifndef NODROIDFONT |
#include "../generated/font_droid.h" |
#endif |
#ifndef NOCJKFONT |
#include "../generated/font_cjk.h" |
#endif |
unsigned char * |
pdf_find_builtin_font(char *name, unsigned int *len) |
{ |
if (!strcmp("Courier", name)) { |
*len = sizeof pdf_font_NimbusMonL_Regu; |
return (unsigned char*) pdf_font_NimbusMonL_Regu; |
} |
if (!strcmp("Courier-Bold", name)) { |
*len = sizeof pdf_font_NimbusMonL_Bold; |
return (unsigned char*) pdf_font_NimbusMonL_Bold; |
} |
if (!strcmp("Courier", name)) { |
*len = sizeof pdf_font_NimbusMonL_Regu; |
return (unsigned char*) pdf_font_NimbusMonL_Regu; |
} |
if (!strcmp("Courier-Bold", name)) { |
*len = sizeof pdf_font_NimbusMonL_Bold; |
return (unsigned char*) pdf_font_NimbusMonL_Bold; |
} |
if (!strcmp("Courier-Oblique", name)) { |
*len = sizeof pdf_font_NimbusMonL_ReguObli; |
return (unsigned char*) pdf_font_NimbusMonL_ReguObli; |
} |
if (!strcmp("Courier-BoldOblique", name)) { |
*len = sizeof pdf_font_NimbusMonL_BoldObli; |
return (unsigned char*) pdf_font_NimbusMonL_BoldObli; |
} |
if (!strcmp("Helvetica", name)) { |
*len = sizeof pdf_font_NimbusSanL_Regu; |
return (unsigned char*) pdf_font_NimbusSanL_Regu; |
} |
if (!strcmp("Helvetica-Bold", name)) { |
*len = sizeof pdf_font_NimbusSanL_Bold; |
return (unsigned char*) pdf_font_NimbusSanL_Bold; |
} |
if (!strcmp("Helvetica-Oblique", name)) { |
*len = sizeof pdf_font_NimbusSanL_ReguItal; |
return (unsigned char*) pdf_font_NimbusSanL_ReguItal; |
} |
if (!strcmp("Helvetica-BoldOblique", name)) { |
*len = sizeof pdf_font_NimbusSanL_BoldItal; |
return (unsigned char*) pdf_font_NimbusSanL_BoldItal; |
} |
if (!strcmp("Times-Roman", name)) { |
*len = sizeof pdf_font_NimbusRomNo9L_Regu; |
return (unsigned char*) pdf_font_NimbusRomNo9L_Regu; |
} |
if (!strcmp("Times-Bold", name)) { |
*len = sizeof pdf_font_NimbusRomNo9L_Medi; |
return (unsigned char*) pdf_font_NimbusRomNo9L_Medi; |
} |
if (!strcmp("Times-Italic", name)) { |
*len = sizeof pdf_font_NimbusRomNo9L_ReguItal; |
return (unsigned char*) pdf_font_NimbusRomNo9L_ReguItal; |
} |
if (!strcmp("Times-BoldItalic", name)) { |
*len = sizeof pdf_font_NimbusRomNo9L_MediItal; |
return (unsigned char*) pdf_font_NimbusRomNo9L_MediItal; |
} |
if (!strcmp("Symbol", name)) { |
*len = sizeof pdf_font_StandardSymL; |
return (unsigned char*) pdf_font_StandardSymL; |
} |
if (!strcmp("ZapfDingbats", name)) { |
*len = sizeof pdf_font_Dingbats; |
return (unsigned char*) pdf_font_Dingbats; |
} |
*len = 0; |
return NULL; |
} |
unsigned char * |
pdf_find_substitute_font(int mono, int serif, int bold, int italic, unsigned int *len) |
{ |
#ifdef NODROIDFONT |
if (mono) { |
if (bold) { |
if (italic) return pdf_find_builtin_font("Courier-BoldOblique", len); |
else return pdf_find_builtin_font("Courier-Bold", len); |
} else { |
if (italic) return pdf_find_builtin_font("Courier-Oblique", len); |
else return pdf_find_builtin_font("Courier", len); |
} |
} else if (serif) { |
if (bold) { |
if (italic) return pdf_find_builtin_font("Times-BoldItalic", len); |
else return pdf_find_builtin_font("Times-Bold", len); |
} else { |
if (italic) return pdf_find_builtin_font("Times-Italic", len); |
else return pdf_find_builtin_font("Times-Roman", len); |
} |
} else { |
if (bold) { |
if (italic) return pdf_find_builtin_font("Helvetica-BoldOblique", len); |
else return pdf_find_builtin_font("Helvetica-Bold", len); |
} else { |
if (italic) return pdf_find_builtin_font("Helvetica-Oblique", len); |
else return pdf_find_builtin_font("Helvetica", len); |
} |
} |
#else |
if (mono) { |
*len = sizeof pdf_font_DroidSansMono; |
return (unsigned char*) pdf_font_DroidSansMono; |
} else { |
*len = sizeof pdf_font_DroidSans; |
return (unsigned char*) pdf_font_DroidSans; |
} |
#endif |
} |
unsigned char * |
pdf_find_substitute_cjk_font(int ros, int serif, unsigned int *len) |
{ |
#ifndef NOCJKFONT |
*len = sizeof pdf_font_DroidSansFallback; |
return (unsigned char*) pdf_font_DroidSansFallback; |
#else |
*len = 0; |
return NULL; |
#endif |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_function.c |
---|
0,0 → 1,1694 |
#include "fitz.h" |
#include "mupdf.h" |
enum |
{ |
MAXN = FZ_MAX_COLORS, |
MAXM = FZ_MAX_COLORS, |
}; |
typedef struct psobj_s psobj; |
enum |
{ |
SAMPLE = 0, |
EXPONENTIAL = 2, |
STITCHING = 3, |
POSTSCRIPT = 4 |
}; |
struct pdf_function_s |
{ |
int refs; |
int type; /* 0=sample 2=exponential 3=stitching 4=postscript */ |
int m; /* number of input values */ |
int n; /* number of output values */ |
float domain[MAXM][2]; /* even index : min value, odd index : max value */ |
float range[MAXN][2]; /* even index : min value, odd index : max value */ |
int has_range; |
union |
{ |
struct { |
unsigned short bps; |
int size[MAXM]; |
float encode[MAXM][2]; |
float decode[MAXN][2]; |
float *samples; |
} sa; |
struct { |
float n; |
float c0[MAXN]; |
float c1[MAXN]; |
} e; |
struct { |
int k; |
pdf_function **funcs; /* k */ |
float *bounds; /* k - 1 */ |
float *encode; /* k * 2 */ |
} st; |
struct { |
psobj *code; |
int cap; |
} p; |
} u; |
}; |
#define RADIAN 57.2957795 |
static inline float lerp(float x, float xmin, float xmax, float ymin, float ymax) |
{ |
if (xmin == xmax) |
return ymin; |
if (ymin == ymax) |
return ymin; |
return ymin + (x - xmin) * (ymax - ymin) / (xmax - xmin); |
} |
/* |
* PostScript calculator |
*/ |
enum { PS_BOOL, PS_INT, PS_REAL, PS_OPERATOR, PS_BLOCK }; |
enum |
{ |
PS_OP_ABS, PS_OP_ADD, PS_OP_AND, PS_OP_ATAN, PS_OP_BITSHIFT, |
PS_OP_CEILING, PS_OP_COPY, PS_OP_COS, PS_OP_CVI, PS_OP_CVR, |
PS_OP_DIV, PS_OP_DUP, PS_OP_EQ, PS_OP_EXCH, PS_OP_EXP, |
PS_OP_FALSE, PS_OP_FLOOR, PS_OP_GE, PS_OP_GT, PS_OP_IDIV, |
PS_OP_INDEX, PS_OP_LE, PS_OP_LN, PS_OP_LOG, PS_OP_LT, PS_OP_MOD, |
PS_OP_MUL, PS_OP_NE, PS_OP_NEG, PS_OP_NOT, PS_OP_OR, PS_OP_POP, |
PS_OP_ROLL, PS_OP_ROUND, PS_OP_SIN, PS_OP_SQRT, PS_OP_SUB, |
PS_OP_TRUE, PS_OP_TRUNCATE, PS_OP_XOR, PS_OP_IF, PS_OP_IFELSE, |
PS_OP_RETURN |
}; |
static char *ps_op_names[] = |
{ |
"abs", "add", "and", "atan", "bitshift", "ceiling", "copy", |
"cos", "cvi", "cvr", "div", "dup", "eq", "exch", "exp", |
"false", "floor", "ge", "gt", "idiv", "index", "le", "ln", |
"log", "lt", "mod", "mul", "ne", "neg", "not", "or", "pop", |
"roll", "round", "sin", "sqrt", "sub", "true", "truncate", |
"xor", "if", "ifelse", "return" |
}; |
struct psobj_s |
{ |
int type; |
union |
{ |
int b; /* boolean (stack only) */ |
int i; /* integer (stack and code) */ |
float f; /* real (stack and code) */ |
int op; /* operator (code only) */ |
int block; /* if/ifelse block pointer (code only) */ |
} u; |
}; |
typedef struct ps_stack_s ps_stack; |
struct ps_stack_s |
{ |
psobj stack[100]; |
int sp; |
}; |
void |
pdf_debug_ps_stack(ps_stack *st) |
{ |
int i; |
printf("stack: "); |
for (i = 0; i < st->sp; i++) |
{ |
switch (st->stack[i].type) |
{ |
case PS_BOOL: |
if (st->stack[i].u.b) |
printf("true "); |
else |
printf("false "); |
break; |
case PS_INT: |
printf("%d ", st->stack[i].u.i); |
break; |
case PS_REAL: |
printf("%g ", st->stack[i].u.f); |
break; |
} |
} |
printf("\n"); |
} |
static void |
ps_init_stack(ps_stack *st) |
{ |
memset(st->stack, 0, sizeof(st->stack)); |
st->sp = 0; |
} |
static inline int ps_overflow(ps_stack *st, int n) |
{ |
return n < 0 || st->sp + n >= nelem(st->stack); |
} |
static inline int ps_underflow(ps_stack *st, int n) |
{ |
return n < 0 || st->sp - n < 0; |
} |
static inline int ps_is_type(ps_stack *st, int t) |
{ |
return !ps_underflow(st, 1) && st->stack[st->sp - 1].type == t; |
} |
static inline int ps_is_type2(ps_stack *st, int t) |
{ |
return !ps_underflow(st, 2) && st->stack[st->sp - 1].type == t && st->stack[st->sp - 2].type == t; |
} |
static void |
ps_push_bool(ps_stack *st, int b) |
{ |
if (!ps_overflow(st, 1)) |
{ |
st->stack[st->sp].type = PS_BOOL; |
st->stack[st->sp].u.b = b; |
st->sp++; |
} |
} |
static void |
ps_push_int(ps_stack *st, int n) |
{ |
if (!ps_overflow(st, 1)) |
{ |
st->stack[st->sp].type = PS_INT; |
st->stack[st->sp].u.i = n; |
st->sp++; |
} |
} |
static void |
ps_push_real(ps_stack *st, float n) |
{ |
if (!ps_overflow(st, 1)) |
{ |
st->stack[st->sp].type = PS_REAL; |
st->stack[st->sp].u.f = n; |
st->sp++; |
} |
} |
static int |
ps_pop_bool(ps_stack *st) |
{ |
if (!ps_underflow(st, 1)) |
{ |
if (ps_is_type(st, PS_BOOL)) |
return st->stack[--st->sp].u.b; |
} |
return 0; |
} |
static int |
ps_pop_int(ps_stack *st) |
{ |
if (!ps_underflow(st, 1)) |
{ |
if (ps_is_type(st, PS_INT)) |
return st->stack[--st->sp].u.i; |
if (ps_is_type(st, PS_REAL)) |
return st->stack[--st->sp].u.f; |
} |
return 0; |
} |
static float |
ps_pop_real(ps_stack *st) |
{ |
if (!ps_underflow(st, 1)) |
{ |
if (ps_is_type(st, PS_INT)) |
return st->stack[--st->sp].u.i; |
if (ps_is_type(st, PS_REAL)) |
return st->stack[--st->sp].u.f; |
} |
return 0; |
} |
static void |
ps_copy(ps_stack *st, int n) |
{ |
if (!ps_underflow(st, n) && !ps_overflow(st, n)) |
{ |
memcpy(st->stack + st->sp, st->stack + st->sp - n, n * sizeof(psobj)); |
st->sp += n; |
} |
} |
static void |
ps_roll(ps_stack *st, int n, int j) |
{ |
psobj tmp; |
int i; |
if (ps_underflow(st, n) || j == 0 || n == 0) |
return; |
if (j >= 0) |
{ |
j %= n; |
} |
else |
{ |
j = -j % n; |
if (j != 0) |
j = n - j; |
} |
for (i = 0; i < j; i++) |
{ |
tmp = st->stack[st->sp - 1]; |
memmove(st->stack + st->sp - n + 1, st->stack + st->sp - n, n * sizeof(psobj)); |
st->stack[st->sp - n] = tmp; |
} |
} |
static void |
ps_index(ps_stack *st, int n) |
{ |
if (!ps_overflow(st, 1) && !ps_underflow(st, n)) |
{ |
st->stack[st->sp] = st->stack[st->sp - n - 1]; |
st->sp++; |
} |
} |
static void |
ps_run(psobj *code, ps_stack *st, int pc) |
{ |
int i1, i2; |
float r1, r2; |
int b1, b2; |
while (1) |
{ |
switch (code[pc].type) |
{ |
case PS_INT: |
ps_push_int(st, code[pc++].u.i); |
break; |
case PS_REAL: |
ps_push_real(st, code[pc++].u.f); |
break; |
case PS_OPERATOR: |
switch (code[pc++].u.op) |
{ |
case PS_OP_ABS: |
if (ps_is_type(st, PS_INT)) |
ps_push_int(st, abs(ps_pop_int(st))); |
else |
ps_push_real(st, fabsf(ps_pop_real(st))); |
break; |
case PS_OP_ADD: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 + i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_real(st, r1 + r2); |
} |
break; |
case PS_OP_AND: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 & i2); |
} |
else { |
b2 = ps_pop_bool(st); |
b1 = ps_pop_bool(st); |
ps_push_bool(st, b1 && b2); |
} |
break; |
case PS_OP_ATAN: |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
r1 = atan2f(r1, r2) * RADIAN; |
if (r1 < 0) |
r1 += 360; |
ps_push_real(st, r1); |
break; |
case PS_OP_BITSHIFT: |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
if (i2 > 0) |
ps_push_int(st, i1 << i2); |
else if (i2 < 0) |
ps_push_int(st, (int)((unsigned int)i1 >> i2)); |
else |
ps_push_int(st, i1); |
break; |
case PS_OP_CEILING: |
r1 = ps_pop_real(st); |
ps_push_real(st, ceilf(r1)); |
break; |
case PS_OP_COPY: |
ps_copy(st, ps_pop_int(st)); |
break; |
case PS_OP_COS: |
r1 = ps_pop_real(st); |
ps_push_real(st, cosf(r1/RADIAN)); |
break; |
case PS_OP_CVI: |
ps_push_int(st, ps_pop_int(st)); |
break; |
case PS_OP_CVR: |
ps_push_real(st, ps_pop_real(st)); |
break; |
case PS_OP_DIV: |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_real(st, r1 / r2); |
break; |
case PS_OP_DUP: |
ps_copy(st, 1); |
break; |
case PS_OP_EQ: |
if (ps_is_type2(st, PS_BOOL)) { |
b2 = ps_pop_bool(st); |
b1 = ps_pop_bool(st); |
ps_push_bool(st, b1 == b2); |
} |
else if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 == i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 == r2); |
} |
break; |
case PS_OP_EXCH: |
ps_roll(st, 2, 1); |
break; |
case PS_OP_EXP: |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_real(st, powf(r1, r2)); |
break; |
case PS_OP_FALSE: |
ps_push_bool(st, 0); |
break; |
case PS_OP_FLOOR: |
r1 = ps_pop_real(st); |
ps_push_real(st, floorf(r1)); |
break; |
case PS_OP_GE: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 >= i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 >= r2); |
} |
break; |
case PS_OP_GT: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 > i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 > r2); |
} |
break; |
case PS_OP_IDIV: |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 / i2); |
break; |
case PS_OP_INDEX: |
ps_index(st, ps_pop_int(st)); |
break; |
case PS_OP_LE: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 <= i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 <= r2); |
} |
break; |
case PS_OP_LN: |
r1 = ps_pop_real(st); |
ps_push_real(st, logf(r1)); |
break; |
case PS_OP_LOG: |
r1 = ps_pop_real(st); |
ps_push_real(st, log10f(r1)); |
break; |
case PS_OP_LT: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 < i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 < r2); |
} |
break; |
case PS_OP_MOD: |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 % i2); |
break; |
case PS_OP_MUL: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 * i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_real(st, r1 * r2); |
} |
break; |
case PS_OP_NE: |
if (ps_is_type2(st, PS_BOOL)) { |
b2 = ps_pop_bool(st); |
b1 = ps_pop_bool(st); |
ps_push_bool(st, b1 != b2); |
} |
else if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_bool(st, i1 != i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_bool(st, r1 != r2); |
} |
break; |
case PS_OP_NEG: |
if (ps_is_type(st, PS_INT)) |
ps_push_int(st, -ps_pop_int(st)); |
else |
ps_push_real(st, -ps_pop_real(st)); |
break; |
case PS_OP_NOT: |
if (ps_is_type(st, PS_BOOL)) |
ps_push_bool(st, !ps_pop_bool(st)); |
else |
ps_push_int(st, ~ps_pop_int(st)); |
break; |
case PS_OP_OR: |
if (ps_is_type2(st, PS_BOOL)) { |
b2 = ps_pop_bool(st); |
b1 = ps_pop_bool(st); |
ps_push_bool(st, b1 || b2); |
} |
else { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 | i2); |
} |
break; |
case PS_OP_POP: |
if (!ps_underflow(st, 1)) |
st->sp--; |
break; |
case PS_OP_ROLL: |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_roll(st, i1, i2); |
break; |
case PS_OP_ROUND: |
if (!ps_is_type(st, PS_INT)) { |
r1 = ps_pop_real(st); |
ps_push_real(st, (r1 >= 0) ? floorf(r1 + 0.5f) : ceilf(r1 - 0.5f)); |
} |
break; |
case PS_OP_SIN: |
r1 = ps_pop_real(st); |
ps_push_real(st, sinf(r1/RADIAN)); |
break; |
case PS_OP_SQRT: |
r1 = ps_pop_real(st); |
ps_push_real(st, sqrtf(r1)); |
break; |
case PS_OP_SUB: |
if (ps_is_type2(st, PS_INT)) { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 - i2); |
} |
else { |
r2 = ps_pop_real(st); |
r1 = ps_pop_real(st); |
ps_push_real(st, r1 - r2); |
} |
break; |
case PS_OP_TRUE: |
ps_push_bool(st, 1); |
break; |
case PS_OP_TRUNCATE: |
if (!ps_is_type(st, PS_INT)) { |
r1 = ps_pop_real(st); |
ps_push_real(st, (r1 >= 0) ? floorf(r1) : ceilf(r1)); |
} |
break; |
case PS_OP_XOR: |
if (ps_is_type2(st, PS_BOOL)) { |
b2 = ps_pop_bool(st); |
b1 = ps_pop_bool(st); |
ps_push_bool(st, b1 ^ b2); |
} |
else { |
i2 = ps_pop_int(st); |
i1 = ps_pop_int(st); |
ps_push_int(st, i1 ^ i2); |
} |
break; |
case PS_OP_IF: |
b1 = ps_pop_bool(st); |
if (b1) |
ps_run(code, st, code[pc + 1].u.block); |
pc = code[pc + 2].u.block; |
break; |
case PS_OP_IFELSE: |
b1 = ps_pop_bool(st); |
if (b1) |
ps_run(code, st, code[pc + 1].u.block); |
else |
ps_run(code, st, code[pc + 0].u.block); |
pc = code[pc + 2].u.block; |
break; |
case PS_OP_RETURN: |
return; |
default: |
fz_warn("foreign operator in calculator function"); |
return; |
} |
break; |
default: |
fz_warn("foreign object in calculator function"); |
return; |
} |
} |
} |
static void |
resize_code(pdf_function *func, int newsize) |
{ |
if (newsize >= func->u.p.cap) |
{ |
func->u.p.cap = func->u.p.cap + 64; |
func->u.p.code = fz_realloc(func->u.p.code, func->u.p.cap, sizeof(psobj)); |
} |
} |
static fz_error |
parse_code(pdf_function *func, fz_stream *stream, int *codeptr) |
{ |
fz_error error; |
char buf[64]; |
int len; |
int tok; |
int opptr, elseptr, ifptr; |
int a, b, mid, cmp; |
memset(buf, 0, sizeof(buf)); |
while (1) |
{ |
error = pdf_lex(&tok, stream, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "calculator function lexical error"); |
switch(tok) |
{ |
case PDF_TOK_EOF: |
return fz_throw("truncated calculator function"); |
case PDF_TOK_INT: |
resize_code(func, *codeptr); |
func->u.p.code[*codeptr].type = PS_INT; |
func->u.p.code[*codeptr].u.i = atoi(buf); |
++*codeptr; |
break; |
case PDF_TOK_REAL: |
resize_code(func, *codeptr); |
func->u.p.code[*codeptr].type = PS_REAL; |
func->u.p.code[*codeptr].u.f = fz_atof(buf); |
++*codeptr; |
break; |
case PDF_TOK_OPEN_BRACE: |
opptr = *codeptr; |
*codeptr += 4; |
resize_code(func, *codeptr); |
ifptr = *codeptr; |
error = parse_code(func, stream, codeptr); |
if (error) |
return fz_rethrow(error, "error in 'if' branch"); |
error = pdf_lex(&tok, stream, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "calculator function syntax error"); |
if (tok == PDF_TOK_OPEN_BRACE) |
{ |
elseptr = *codeptr; |
error = parse_code(func, stream, codeptr); |
if (error) |
return fz_rethrow(error, "error in 'else' branch"); |
error = pdf_lex(&tok, stream, buf, sizeof buf, &len); |
if (error) |
return fz_rethrow(error, "calculator function syntax error"); |
} |
else |
{ |
elseptr = -1; |
} |
if (tok == PDF_TOK_KEYWORD) |
{ |
if (!strcmp(buf, "if")) |
{ |
if (elseptr >= 0) |
return fz_throw("too many branches for 'if'"); |
func->u.p.code[opptr].type = PS_OPERATOR; |
func->u.p.code[opptr].u.op = PS_OP_IF; |
func->u.p.code[opptr+2].type = PS_BLOCK; |
func->u.p.code[opptr+2].u.block = ifptr; |
func->u.p.code[opptr+3].type = PS_BLOCK; |
func->u.p.code[opptr+3].u.block = *codeptr; |
} |
else if (!strcmp(buf, "ifelse")) |
{ |
if (elseptr < 0) |
return fz_throw("not enough branches for 'ifelse'"); |
func->u.p.code[opptr].type = PS_OPERATOR; |
func->u.p.code[opptr].u.op = PS_OP_IFELSE; |
func->u.p.code[opptr+1].type = PS_BLOCK; |
func->u.p.code[opptr+1].u.block = elseptr; |
func->u.p.code[opptr+2].type = PS_BLOCK; |
func->u.p.code[opptr+2].u.block = ifptr; |
func->u.p.code[opptr+3].type = PS_BLOCK; |
func->u.p.code[opptr+3].u.block = *codeptr; |
} |
else |
{ |
return fz_throw("unknown keyword in 'if-else' context: '%s'", buf); |
} |
} |
else |
{ |
return fz_throw("missing keyword in 'if-else' context"); |
} |
break; |
case PDF_TOK_CLOSE_BRACE: |
resize_code(func, *codeptr); |
func->u.p.code[*codeptr].type = PS_OPERATOR; |
func->u.p.code[*codeptr].u.op = PS_OP_RETURN; |
++*codeptr; |
return fz_okay; |
case PDF_TOK_KEYWORD: |
cmp = -1; |
a = -1; |
b = nelem(ps_op_names); |
while (b - a > 1) |
{ |
mid = (a + b) / 2; |
cmp = strcmp(buf, ps_op_names[mid]); |
if (cmp > 0) |
a = mid; |
else if (cmp < 0) |
b = mid; |
else |
a = b = mid; |
} |
if (cmp != 0) |
return fz_throw("unknown operator: '%s'", buf); |
resize_code(func, *codeptr); |
func->u.p.code[*codeptr].type = PS_OPERATOR; |
func->u.p.code[*codeptr].u.op = a; |
++*codeptr; |
break; |
default: |
return fz_throw("calculator function syntax error"); |
} |
} |
} |
static fz_error |
load_postscript_func(pdf_function *func, pdf_xref *xref, fz_obj *dict, int num, int gen) |
{ |
fz_error error; |
fz_stream *stream; |
int codeptr; |
char buf[64]; |
int tok; |
int len; |
error = pdf_open_stream(&stream, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot open calculator function stream"); |
error = pdf_lex(&tok, stream, buf, sizeof buf, &len); |
if (error) |
{ |
fz_close(stream); |
return fz_rethrow(error, "stream is not a calculator function"); |
} |
if (tok != PDF_TOK_OPEN_BRACE) |
{ |
fz_close(stream); |
return fz_throw("stream is not a calculator function"); |
} |
func->u.p.code = NULL; |
func->u.p.cap = 0; |
codeptr = 0; |
error = parse_code(func, stream, &codeptr); |
if (error) |
{ |
fz_close(stream); |
return fz_rethrow(error, "cannot parse calculator function (%d %d R)", num, gen); |
} |
fz_close(stream); |
return fz_okay; |
} |
static void |
eval_postscript_func(pdf_function *func, float *in, float *out) |
{ |
ps_stack st; |
float x; |
int i; |
ps_init_stack(&st); |
for (i = 0; i < func->m; i++) |
{ |
x = CLAMP(in[i], func->domain[i][0], func->domain[i][1]); |
ps_push_real(&st, x); |
} |
ps_run(func->u.p.code, &st, 0); |
for (i = func->n - 1; i >= 0; i--) |
{ |
x = ps_pop_real(&st); |
out[i] = CLAMP(x, func->range[i][0], func->range[i][1]); |
} |
} |
/* |
* Sample function |
*/ |
static fz_error |
load_sample_func(pdf_function *func, pdf_xref *xref, fz_obj *dict, int num, int gen) |
{ |
fz_error error; |
fz_stream *stream; |
fz_obj *obj; |
int samplecount; |
int bps; |
int i; |
func->u.sa.samples = NULL; |
obj = fz_dict_gets(dict, "Size"); |
if (!fz_is_array(obj) || fz_array_len(obj) != func->m) |
return fz_throw("malformed /Size"); |
for (i = 0; i < func->m; i++) |
func->u.sa.size[i] = fz_to_int(fz_array_get(obj, i)); |
obj = fz_dict_gets(dict, "BitsPerSample"); |
if (!fz_is_int(obj)) |
return fz_throw("malformed /BitsPerSample"); |
func->u.sa.bps = bps = fz_to_int(obj); |
obj = fz_dict_gets(dict, "Encode"); |
if (fz_is_array(obj)) |
{ |
if (fz_array_len(obj) != func->m * 2) |
return fz_throw("malformed /Encode"); |
for (i = 0; i < func->m; i++) |
{ |
func->u.sa.encode[i][0] = fz_to_real(fz_array_get(obj, i*2+0)); |
func->u.sa.encode[i][1] = fz_to_real(fz_array_get(obj, i*2+1)); |
} |
} |
else |
{ |
for (i = 0; i < func->m; i++) |
{ |
func->u.sa.encode[i][0] = 0; |
func->u.sa.encode[i][1] = func->u.sa.size[i] - 1; |
} |
} |
obj = fz_dict_gets(dict, "Decode"); |
if (fz_is_array(obj)) |
{ |
if (fz_array_len(obj) != func->n * 2) |
return fz_throw("malformed /Decode"); |
for (i = 0; i < func->n; i++) |
{ |
func->u.sa.decode[i][0] = fz_to_real(fz_array_get(obj, i*2+0)); |
func->u.sa.decode[i][1] = fz_to_real(fz_array_get(obj, i*2+1)); |
} |
} |
else |
{ |
for (i = 0; i < func->n; i++) |
{ |
func->u.sa.decode[i][0] = func->range[i][0]; |
func->u.sa.decode[i][1] = func->range[i][1]; |
} |
} |
for (i = 0, samplecount = func->n; i < func->m; i++) |
samplecount *= func->u.sa.size[i]; |
func->u.sa.samples = fz_calloc(samplecount, sizeof(float)); |
error = pdf_open_stream(&stream, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot open samples stream (%d %d R)", num, gen); |
/* read samples */ |
for (i = 0; i < samplecount; i++) |
{ |
unsigned int x; |
float s; |
if (fz_is_eof_bits(stream)) |
{ |
fz_close(stream); |
return fz_throw("truncated sample stream"); |
} |
switch (bps) |
{ |
case 1: s = fz_read_bits(stream, 1); break; |
case 2: s = fz_read_bits(stream, 2) / 3.0f; break; |
case 4: s = fz_read_bits(stream, 4) / 15.0f; break; |
case 8: s = fz_read_byte(stream) / 255.0f; break; |
case 12: s = fz_read_bits(stream, 12) / 4095.0f; break; |
case 16: |
x = fz_read_byte(stream) << 8; |
x |= fz_read_byte(stream); |
s = x / 65535.0f; |
break; |
case 24: |
x = fz_read_byte(stream) << 16; |
x |= fz_read_byte(stream) << 8; |
x |= fz_read_byte(stream); |
s = x / 16777215.0f; |
break; |
case 32: |
x = fz_read_byte(stream) << 24; |
x |= fz_read_byte(stream) << 16; |
x |= fz_read_byte(stream) << 8; |
x |= fz_read_byte(stream); |
s = x / 4294967295.0f; |
break; |
default: |
fz_close(stream); |
return fz_throw("sample stream bit depth %d unsupported", bps); |
} |
func->u.sa.samples[i] = s; |
} |
fz_close(stream); |
return fz_okay; |
} |
static float |
interpolate_sample(pdf_function *func, int *scale, int *e0, int *e1, float *efrac, int dim, int idx) |
{ |
float a, b; |
int idx0, idx1; |
idx0 = e0[dim] * scale[dim] + idx; |
idx1 = e1[dim] * scale[dim] + idx; |
if (dim == 0) |
{ |
a = func->u.sa.samples[idx0]; |
b = func->u.sa.samples[idx1]; |
} |
else |
{ |
a = interpolate_sample(func, scale, e0, e1, efrac, dim - 1, idx0); |
b = interpolate_sample(func, scale, e0, e1, efrac, dim - 1, idx1); |
} |
return a + (b - a) * efrac[dim]; |
} |
static void |
eval_sample_func(pdf_function *func, float *in, float *out) |
{ |
int e0[MAXM], e1[MAXM], scale[MAXM]; |
float efrac[MAXM]; |
float x; |
int i; |
/* encode input coordinates */ |
for (i = 0; i < func->m; i++) |
{ |
x = CLAMP(in[i], func->domain[i][0], func->domain[i][1]); |
x = lerp(x, func->domain[i][0], func->domain[i][1], |
func->u.sa.encode[i][0], func->u.sa.encode[i][1]); |
x = CLAMP(x, 0, func->u.sa.size[i] - 1); |
e0[i] = floorf(x); |
e1[i] = ceilf(x); |
efrac[i] = x - floorf(x); |
} |
scale[0] = func->n; |
for (i = 1; i < func->m; i++) |
scale[i] = scale[i - 1] * func->u.sa.size[i]; |
for (i = 0; i < func->n; i++) |
{ |
if (func->m == 1) |
{ |
float a = func->u.sa.samples[e0[0] * func->n + i]; |
float b = func->u.sa.samples[e1[0] * func->n + i]; |
float ab = a + (b - a) * efrac[0]; |
out[i] = lerp(ab, 0, 1, func->u.sa.decode[i][0], func->u.sa.decode[i][1]); |
out[i] = CLAMP(out[i], func->range[i][0], func->range[i][1]); |
} |
else if (func->m == 2) |
{ |
int s0 = func->n; |
int s1 = s0 * func->u.sa.size[0]; |
float a = func->u.sa.samples[e0[0] * s0 + e0[1] * s1 + i]; |
float b = func->u.sa.samples[e1[0] * s0 + e0[1] * s1 + i]; |
float c = func->u.sa.samples[e0[0] * s0 + e1[1] * s1 + i]; |
float d = func->u.sa.samples[e1[0] * s0 + e1[1] * s1 + i]; |
float ab = a + (b - a) * efrac[0]; |
float cd = c + (d - c) * efrac[0]; |
float abcd = ab + (cd - ab) * efrac[1]; |
out[i] = lerp(abcd, 0, 1, func->u.sa.decode[i][0], func->u.sa.decode[i][1]); |
out[i] = CLAMP(out[i], func->range[i][0], func->range[i][1]); |
} |
else |
{ |
float x = interpolate_sample(func, scale, e0, e1, efrac, func->m - 1, i); |
out[i] = lerp(x, 0, 1, func->u.sa.decode[i][0], func->u.sa.decode[i][1]); |
out[i] = CLAMP(out[i], func->range[i][0], func->range[i][1]); |
} |
} |
} |
/* |
* Exponential function |
*/ |
static fz_error |
load_exponential_func(pdf_function *func, fz_obj *dict) |
{ |
fz_obj *obj; |
int i; |
if (func->m != 1) |
return fz_throw("/Domain must be one dimension (%d)", func->m); |
obj = fz_dict_gets(dict, "N"); |
if (!fz_is_int(obj) && !fz_is_real(obj)) |
return fz_throw("malformed /N"); |
func->u.e.n = fz_to_real(obj); |
obj = fz_dict_gets(dict, "C0"); |
if (fz_is_array(obj)) |
{ |
func->n = fz_array_len(obj); |
if (func->n >= MAXN) |
return fz_throw("exponential function result array out of range"); |
for (i = 0; i < func->n; i++) |
func->u.e.c0[i] = fz_to_real(fz_array_get(obj, i)); |
} |
else |
{ |
func->n = 1; |
func->u.e.c0[0] = 0; |
} |
obj = fz_dict_gets(dict, "C1"); |
if (fz_is_array(obj)) |
{ |
if (fz_array_len(obj) != func->n) |
return fz_throw("/C1 must match /C0 length"); |
for (i = 0; i < func->n; i++) |
func->u.e.c1[i] = fz_to_real(fz_array_get(obj, i)); |
} |
else |
{ |
if (func->n != 1) |
return fz_throw("/C1 must match /C0 length"); |
func->u.e.c1[0] = 1; |
} |
return fz_okay; |
} |
static void |
eval_exponential_func(pdf_function *func, float in, float *out) |
{ |
float x = in; |
float tmp; |
int i; |
x = CLAMP(x, func->domain[0][0], func->domain[0][1]); |
/* constraint */ |
if ((func->u.e.n != (int)func->u.e.n && x < 0) || (func->u.e.n < 0 && x == 0)) |
{ |
fz_warn("constraint error"); |
return; |
} |
tmp = powf(x, func->u.e.n); |
for (i = 0; i < func->n; i++) |
{ |
out[i] = func->u.e.c0[i] + tmp * (func->u.e.c1[i] - func->u.e.c0[i]); |
if (func->has_range) |
out[i] = CLAMP(out[i], func->range[i][0], func->range[i][1]); |
} |
} |
/* |
* Stitching function |
*/ |
static fz_error |
load_stitching_func(pdf_function *func, pdf_xref *xref, fz_obj *dict) |
{ |
pdf_function **funcs; |
fz_error error; |
fz_obj *obj; |
fz_obj *sub; |
fz_obj *num; |
int k; |
int i; |
func->u.st.k = 0; |
if (func->m != 1) |
return fz_throw("/Domain must be one dimension (%d)", func->m); |
obj = fz_dict_gets(dict, "Functions"); |
if (!fz_is_array(obj)) |
return fz_throw("stitching function has no input functions"); |
{ |
k = fz_array_len(obj); |
func->u.st.funcs = fz_calloc(k, sizeof(pdf_function*)); |
func->u.st.bounds = fz_calloc(k - 1, sizeof(float)); |
func->u.st.encode = fz_calloc(k * 2, sizeof(float)); |
funcs = func->u.st.funcs; |
for (i = 0; i < k; i++) |
{ |
sub = fz_array_get(obj, i); |
error = pdf_load_function(&funcs[i], xref, sub); |
if (error) |
return fz_rethrow(error, "cannot load sub function %d (%d %d R)", i, fz_to_num(sub), fz_to_gen(sub)); |
if (funcs[i]->m != 1 || funcs[i]->n != funcs[0]->n) |
return fz_throw("sub function %d /Domain or /Range mismatch", i); |
func->u.st.k ++; |
} |
if (!func->n) |
func->n = funcs[0]->n; |
else if (func->n != funcs[0]->n) |
return fz_throw("sub function /Domain or /Range mismatch"); |
} |
obj = fz_dict_gets(dict, "Bounds"); |
if (!fz_is_array(obj)) |
return fz_throw("stitching function has no bounds"); |
{ |
if (!fz_is_array(obj) || fz_array_len(obj) != k - 1) |
return fz_throw("malformed /Bounds (not array or wrong length)"); |
for (i = 0; i < k-1; i++) |
{ |
num = fz_array_get(obj, i); |
if (!fz_is_int(num) && !fz_is_real(num)) |
return fz_throw("malformed /Bounds (item not real)"); |
func->u.st.bounds[i] = fz_to_real(num); |
if (i && func->u.st.bounds[i-1] > func->u.st.bounds[i]) |
return fz_throw("malformed /Bounds (item not monotonic)"); |
} |
if (k != 1 && (func->domain[0][0] > func->u.st.bounds[0] || |
func->domain[0][1] < func->u.st.bounds[k-2])) |
fz_warn("malformed shading function bounds (domain mismatch), proceeding anyway."); |
} |
obj = fz_dict_gets(dict, "Encode"); |
if (!fz_is_array(obj)) |
return fz_throw("stitching function is missing encoding"); |
{ |
if (!fz_is_array(obj) || fz_array_len(obj) != k * 2) |
return fz_throw("malformed /Encode"); |
for (i = 0; i < k; i++) |
{ |
func->u.st.encode[i*2+0] = fz_to_real(fz_array_get(obj, i*2+0)); |
func->u.st.encode[i*2+1] = fz_to_real(fz_array_get(obj, i*2+1)); |
} |
} |
return fz_okay; |
} |
static void |
eval_stitching_func(pdf_function *func, float in, float *out) |
{ |
float low, high; |
int k = func->u.st.k; |
float *bounds = func->u.st.bounds; |
int i; |
in = CLAMP(in, func->domain[0][0], func->domain[0][1]); |
for (i = 0; i < k - 1; i++) |
{ |
if (in < bounds[i]) |
break; |
} |
if (i == 0 && k == 1) |
{ |
low = func->domain[0][0]; |
high = func->domain[0][1]; |
} |
else if (i == 0) |
{ |
low = func->domain[0][0]; |
high = bounds[0]; |
} |
else if (i == k - 1) |
{ |
low = bounds[k-2]; |
high = func->domain[0][1]; |
} |
else |
{ |
low = bounds[i-1]; |
high = bounds[i]; |
} |
in = lerp(in, low, high, func->u.st.encode[i*2+0], func->u.st.encode[i*2+1]); |
pdf_eval_function(func->u.st.funcs[i], &in, 1, out, func->n); |
} |
/* |
* Common |
*/ |
pdf_function * |
pdf_keep_function(pdf_function *func) |
{ |
func->refs ++; |
return func; |
} |
void |
pdf_drop_function(pdf_function *func) |
{ |
int i; |
if (--func->refs == 0) |
{ |
switch(func->type) |
{ |
case SAMPLE: |
fz_free(func->u.sa.samples); |
break; |
case EXPONENTIAL: |
break; |
case STITCHING: |
for (i = 0; i < func->u.st.k; i++) |
pdf_drop_function(func->u.st.funcs[i]); |
fz_free(func->u.st.funcs); |
fz_free(func->u.st.bounds); |
fz_free(func->u.st.encode); |
break; |
case POSTSCRIPT: |
fz_free(func->u.p.code); |
break; |
} |
fz_free(func); |
} |
} |
fz_error |
pdf_load_function(pdf_function **funcp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
pdf_function *func; |
fz_obj *obj; |
int i; |
if ((*funcp = pdf_find_item(xref->store, pdf_drop_function, dict))) |
{ |
pdf_keep_function(*funcp); |
return fz_okay; |
} |
func = fz_malloc(sizeof(pdf_function)); |
memset(func, 0, sizeof(pdf_function)); |
func->refs = 1; |
obj = fz_dict_gets(dict, "FunctionType"); |
func->type = fz_to_int(obj); |
/* required for all */ |
obj = fz_dict_gets(dict, "Domain"); |
func->m = fz_array_len(obj) / 2; |
for (i = 0; i < func->m; i++) |
{ |
func->domain[i][0] = fz_to_real(fz_array_get(obj, i * 2 + 0)); |
func->domain[i][1] = fz_to_real(fz_array_get(obj, i * 2 + 1)); |
} |
/* required for type0 and type4, optional otherwise */ |
obj = fz_dict_gets(dict, "Range"); |
if (fz_is_array(obj)) |
{ |
func->has_range = 1; |
func->n = fz_array_len(obj) / 2; |
for (i = 0; i < func->n; i++) |
{ |
func->range[i][0] = fz_to_real(fz_array_get(obj, i * 2 + 0)); |
func->range[i][1] = fz_to_real(fz_array_get(obj, i * 2 + 1)); |
} |
} |
else |
{ |
func->has_range = 0; |
func->n = 0; |
} |
if (func->m >= MAXM || func->n >= MAXN) |
{ |
fz_free(func); |
return fz_throw("assert: /Domain or /Range too big"); |
} |
switch(func->type) |
{ |
case SAMPLE: |
error = load_sample_func(func, xref, dict, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
pdf_drop_function(func); |
return fz_rethrow(error, "cannot load sampled function (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
break; |
case EXPONENTIAL: |
error = load_exponential_func(func, dict); |
if (error) |
{ |
pdf_drop_function(func); |
return fz_rethrow(error, "cannot load exponential function (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
break; |
case STITCHING: |
error = load_stitching_func(func, xref, dict); |
if (error) |
{ |
pdf_drop_function(func); |
return fz_rethrow(error, "cannot load stitching function (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
break; |
case POSTSCRIPT: |
error = load_postscript_func(func, xref, dict, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
pdf_drop_function(func); |
return fz_rethrow(error, "cannot load calculator function (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
break; |
default: |
fz_free(func); |
return fz_throw("unknown function type (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
pdf_store_item(xref->store, pdf_keep_function, pdf_drop_function, dict, func); |
*funcp = func; |
return fz_okay; |
} |
void |
pdf_eval_function(pdf_function *func, float *in, int inlen, float *out, int outlen) |
{ |
memset(out, 0, sizeof(float) * outlen); |
if (inlen != func->m) |
{ |
fz_warn("tried to evaluate function with wrong number of inputs"); |
return; |
} |
if (func->n != outlen) |
{ |
fz_warn("tried to evaluate function with wrong number of outputs"); |
return; |
} |
switch(func->type) |
{ |
case SAMPLE: eval_sample_func(func, in, out); break; |
case EXPONENTIAL: eval_exponential_func(func, *in, out); break; |
case STITCHING: eval_stitching_func(func, *in, out); break; |
case POSTSCRIPT: eval_postscript_func(func, in, out); break; |
} |
} |
/* |
* Debugging prints |
*/ |
static void |
pdf_debug_indent(char *prefix, int level, char *suffix) |
{ |
int i; |
printf("%s", prefix); |
for (i = 0; i < level; i++) |
printf("\t"); |
printf("%s", suffix); |
} |
static void |
pdf_debug_ps_func_code(psobj *funccode, psobj *code, int level) |
{ |
int eof, wasop; |
pdf_debug_indent("", level, "{"); |
/* Print empty blocks as { }, instead of separating braces on different lines. */ |
if (code->type == PS_OPERATOR && code->u.op == PS_OP_RETURN) |
{ |
printf(" } "); |
return; |
} |
pdf_debug_indent("\n", ++level, ""); |
eof = 0; |
wasop = 0; |
while (!eof) |
{ |
switch (code->type) |
{ |
case PS_INT: |
if (wasop) |
pdf_debug_indent("\n", level, ""); |
printf("%d ", code->u.i); |
wasop = 0; |
code++; |
break; |
case PS_REAL: |
if (wasop) |
pdf_debug_indent("\n", level, ""); |
printf("%g ", code->u.f); |
wasop = 0; |
code++; |
break; |
case PS_OPERATOR: |
if (code->u.op == PS_OP_RETURN) |
{ |
printf("\n"); |
eof = 1; |
} |
else if (code->u.op == PS_OP_IF) |
{ |
printf("\n"); |
pdf_debug_ps_func_code(funccode, &funccode[(code + 2)->u.block], level); |
printf("%s", ps_op_names[code->u.op]); |
code = &funccode[(code + 3)->u.block]; |
if (code->type != PS_OPERATOR || code->u.op != PS_OP_RETURN) |
pdf_debug_indent("\n", level, ""); |
wasop = 0; |
} |
else if (code->u.op == PS_OP_IFELSE) |
{ |
printf("\n"); |
pdf_debug_ps_func_code(funccode, &funccode[(code + 2)->u.block], level); |
printf("\n"); |
pdf_debug_ps_func_code(funccode, &funccode[(code + 1)->u.block], level); |
printf("%s", ps_op_names[code->u.op]); |
code = &funccode[(code + 3)->u.block]; |
if (code->type != PS_OPERATOR || code->u.op != PS_OP_RETURN) |
pdf_debug_indent("\n", level, ""); |
wasop = 0; |
} |
else |
{ |
printf("%s ", ps_op_names[code->u.op]); |
code++; |
wasop = 1; |
} |
break; |
} |
} |
pdf_debug_indent("", --level, "} "); |
} |
static void |
pdf_debug_function_imp(pdf_function *func, int level) |
{ |
int i; |
pdf_debug_indent("", level, "function {\n"); |
pdf_debug_indent("", ++level, ""); |
switch (func->type) |
{ |
case SAMPLE: |
printf("sampled"); |
break; |
case EXPONENTIAL: |
printf("exponential"); |
break; |
case STITCHING: |
printf("stitching"); |
break; |
case POSTSCRIPT: |
printf("postscript"); |
break; |
} |
pdf_debug_indent("\n", level, ""); |
printf("%d input -> %d output\n", func->m, func->n); |
pdf_debug_indent("", level, "domain "); |
for (i = 0; i < func->m; i++) |
printf("%g %g ", func->domain[i][0], func->domain[i][1]); |
printf("\n"); |
if (func->has_range) |
{ |
pdf_debug_indent("", level, "range "); |
for (i = 0; i < func->n; i++) |
printf("%g %g ", func->range[i][0], func->range[i][1]); |
printf("\n"); |
} |
switch (func->type) |
{ |
case SAMPLE: |
pdf_debug_indent("", level, ""); |
printf("bps: %d\n", func->u.sa.bps); |
pdf_debug_indent("", level, ""); |
printf("size: [ "); |
for (i = 0; i < func->m; i++) |
printf("%d ", func->u.sa.size[i]); |
printf("]\n"); |
pdf_debug_indent("", level, ""); |
printf("encode: [ "); |
for (i = 0; i < func->m; i++) |
printf("%g %g ", func->u.sa.encode[i][0], func->u.sa.encode[i][1]); |
printf("]\n"); |
pdf_debug_indent("", level, ""); |
printf("decode: [ "); |
for (i = 0; i < func->m; i++) |
printf("%g %g ", func->u.sa.decode[i][0], func->u.sa.decode[i][1]); |
printf("]\n"); |
break; |
case EXPONENTIAL: |
pdf_debug_indent("", level, ""); |
printf("n: %g\n", func->u.e.n); |
pdf_debug_indent("", level, ""); |
printf("c0: [ "); |
for (i = 0; i < func->n; i++) |
printf("%g ", func->u.e.c0[i]); |
printf("]\n"); |
pdf_debug_indent("", level, ""); |
printf("c1: [ "); |
for (i = 0; i < func->n; i++) |
printf("%g ", func->u.e.c1[i]); |
printf("]\n"); |
break; |
case STITCHING: |
pdf_debug_indent("", level, ""); |
printf("%d functions\n", func->u.st.k); |
pdf_debug_indent("", level, ""); |
printf("bounds: [ "); |
for (i = 0; i < func->u.st.k - 1; i++) |
printf("%g ", func->u.st.bounds[i]); |
printf("]\n"); |
pdf_debug_indent("", level, ""); |
printf("encode: [ "); |
for (i = 0; i < func->u.st.k * 2; i++) |
printf("%g ", func->u.st.encode[i]); |
printf("]\n"); |
for (i = 0; i < func->u.st.k; i++) |
pdf_debug_function_imp(func->u.st.funcs[i], level); |
break; |
case POSTSCRIPT: |
pdf_debug_ps_func_code(func->u.p.code, func->u.p.code, level); |
printf("\n"); |
break; |
} |
pdf_debug_indent("", --level, "}\n"); |
} |
void |
pdf_debug_function(pdf_function *func) |
{ |
pdf_debug_function_imp(func, 0); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_image.c |
---|
0,0 → 1,354 |
#include "fitz.h" |
#include "mupdf.h" |
/* TODO: store JPEG compressed samples */ |
/* TODO: store flate compressed samples */ |
static fz_error pdf_load_jpx_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *dict); |
static void |
pdf_mask_color_key(fz_pixmap *pix, int n, int *colorkey) |
{ |
unsigned char *p = pix->samples; |
int len = pix->w * pix->h; |
int k, t; |
while (len--) |
{ |
t = 1; |
for (k = 0; k < n; k++) |
if (p[k] < colorkey[k * 2] || p[k] > colorkey[k * 2 + 1]) |
t = 0; |
if (t) |
for (k = 0; k < pix->n; k++) |
p[k] = 0; |
p += pix->n; |
} |
} |
static fz_error |
pdf_load_image_imp(fz_pixmap **imgp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict, fz_stream *cstm, int forcemask) |
{ |
fz_stream *stm; |
fz_pixmap *tile; |
fz_obj *obj, *res; |
fz_error error; |
int w, h, bpc, n; |
int imagemask; |
int interpolate; |
int indexed; |
fz_colorspace *colorspace; |
fz_pixmap *mask; /* explicit mask/softmask image */ |
int usecolorkey; |
int colorkey[FZ_MAX_COLORS * 2]; |
float decode[FZ_MAX_COLORS * 2]; |
int stride; |
unsigned char *samples; |
int i, len; |
/* special case for JPEG2000 images */ |
if (pdf_is_jpx_image(dict)) |
{ |
tile = NULL; |
error = pdf_load_jpx_image(&tile, xref, dict); |
if (error) |
return fz_rethrow(error, "cannot load jpx image"); |
if (forcemask) |
{ |
if (tile->n != 2) |
{ |
fz_drop_pixmap(tile); |
return fz_throw("softmask must be grayscale"); |
} |
mask = fz_alpha_from_gray(tile, 1); |
fz_drop_pixmap(tile); |
*imgp = mask; |
return fz_okay; |
} |
*imgp = tile; |
return fz_okay; |
} |
w = fz_to_int(fz_dict_getsa(dict, "Width", "W")); |
h = fz_to_int(fz_dict_getsa(dict, "Height", "H")); |
bpc = fz_to_int(fz_dict_getsa(dict, "BitsPerComponent", "BPC")); |
imagemask = fz_to_bool(fz_dict_getsa(dict, "ImageMask", "IM")); |
interpolate = fz_to_bool(fz_dict_getsa(dict, "Interpolate", "I")); |
indexed = 0; |
usecolorkey = 0; |
colorspace = NULL; |
mask = NULL; |
if (imagemask) |
bpc = 1; |
if (w == 0) |
return fz_throw("image width is zero"); |
if (h == 0) |
return fz_throw("image height is zero"); |
if (bpc == 0) |
return fz_throw("image depth is zero"); |
if (bpc > 16) |
return fz_throw("image depth is too large: %d", bpc); |
if (w > (1 << 16)) |
return fz_throw("image is too wide"); |
if (h > (1 << 16)) |
return fz_throw("image is too high"); |
obj = fz_dict_getsa(dict, "ColorSpace", "CS"); |
if (obj && !imagemask && !forcemask) |
{ |
/* colorspace resource lookup is only done for inline images */ |
if (fz_is_name(obj)) |
{ |
res = fz_dict_get(fz_dict_gets(rdb, "ColorSpace"), obj); |
if (res) |
obj = res; |
} |
error = pdf_load_colorspace(&colorspace, xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load image colorspace"); |
if (!strcmp(colorspace->name, "Indexed")) |
indexed = 1; |
n = colorspace->n; |
} |
else |
{ |
n = 1; |
} |
obj = fz_dict_getsa(dict, "Decode", "D"); |
if (obj) |
{ |
for (i = 0; i < n * 2; i++) |
decode[i] = fz_to_real(fz_array_get(obj, i)); |
} |
else |
{ |
float maxval = indexed ? (1 << bpc) - 1 : 1; |
for (i = 0; i < n * 2; i++) |
decode[i] = i & 1 ? maxval : 0; |
} |
obj = fz_dict_getsa(dict, "SMask", "Mask"); |
if (fz_is_dict(obj)) |
{ |
/* Not allowed for inline images */ |
if (!cstm) |
{ |
error = pdf_load_image_imp(&mask, xref, rdb, obj, NULL, 1); |
if (error) |
{ |
if (colorspace) |
fz_drop_colorspace(colorspace); |
return fz_rethrow(error, "cannot load image mask/softmask"); |
} |
} |
} |
else if (fz_is_array(obj)) |
{ |
usecolorkey = 1; |
for (i = 0; i < n * 2; i++) |
colorkey[i] = fz_to_int(fz_array_get(obj, i)); |
} |
/* Allocate now, to fail early if we run out of memory */ |
tile = fz_new_pixmap_with_limit(colorspace, w, h); |
if (!tile) |
{ |
if (colorspace) |
fz_drop_colorspace(colorspace); |
if (mask) |
fz_drop_pixmap(mask); |
return fz_throw("out of memory"); |
} |
if (colorspace) |
fz_drop_colorspace(colorspace); |
tile->mask = mask; |
tile->interpolate = interpolate; |
stride = (w * n * bpc + 7) / 8; |
if (cstm) |
{ |
stm = pdf_open_inline_stream(cstm, xref, dict, stride * h); |
} |
else |
{ |
error = pdf_open_stream(&stm, xref, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
fz_drop_pixmap(tile); |
return fz_rethrow(error, "cannot open image data stream (%d 0 R)", fz_to_num(dict)); |
} |
} |
samples = fz_calloc(h, stride); |
len = fz_read(stm, samples, h * stride); |
if (len < 0) |
{ |
fz_close(stm); |
fz_free(samples); |
fz_drop_pixmap(tile); |
return fz_rethrow(len, "cannot read image data"); |
} |
/* Make sure we read the EOF marker (for inline images only) */ |
if (cstm) |
{ |
unsigned char tbuf[512]; |
int tlen = fz_read(stm, tbuf, sizeof tbuf); |
if (tlen < 0) |
fz_catch(tlen, "ignoring error at end of image"); |
if (tlen > 0) |
fz_warn("ignoring garbage at end of image"); |
} |
fz_close(stm); |
/* Pad truncated images */ |
if (len < stride * h) |
{ |
fz_warn("padding truncated image (%d 0 R)", fz_to_num(dict)); |
memset(samples + len, 0, stride * h - len); |
} |
/* Invert 1-bit image masks */ |
if (imagemask) |
{ |
/* 0=opaque and 1=transparent so we need to invert */ |
unsigned char *p = samples; |
len = h * stride; |
for (i = 0; i < len; i++) |
p[i] = ~p[i]; |
} |
fz_unpack_tile(tile, samples, n, bpc, stride, indexed); |
fz_free(samples); |
if (usecolorkey) |
pdf_mask_color_key(tile, n, colorkey); |
if (indexed) |
{ |
fz_pixmap *conv; |
fz_decode_indexed_tile(tile, decode, (1 << bpc) - 1); |
conv = pdf_expand_indexed_pixmap(tile); |
fz_drop_pixmap(tile); |
tile = conv; |
} |
else |
{ |
fz_decode_tile(tile, decode); |
} |
*imgp = tile; |
return fz_okay; |
} |
fz_error |
pdf_load_inline_image(fz_pixmap **pixp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict, fz_stream *file) |
{ |
fz_error error; |
error = pdf_load_image_imp(pixp, xref, rdb, dict, file, 0); |
if (error) |
return fz_rethrow(error, "cannot load inline image"); |
return fz_okay; |
} |
int |
pdf_is_jpx_image(fz_obj *dict) |
{ |
fz_obj *filter; |
int i; |
filter = fz_dict_gets(dict, "Filter"); |
if (!strcmp(fz_to_name(filter), "JPXDecode")) |
return 1; |
for (i = 0; i < fz_array_len(filter); i++) |
if (!strcmp(fz_to_name(fz_array_get(filter, i)), "JPXDecode")) |
return 1; |
return 0; |
} |
static fz_error |
pdf_load_jpx_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
fz_buffer *buf; |
fz_colorspace *colorspace; |
fz_pixmap *img; |
fz_obj *obj; |
colorspace = NULL; |
error = pdf_load_stream(&buf, xref, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
return fz_rethrow(error, "cannot load jpx image data"); |
obj = fz_dict_gets(dict, "ColorSpace"); |
if (obj) |
{ |
error = pdf_load_colorspace(&colorspace, xref, obj); |
if (error) |
fz_catch(error, "cannot load image colorspace"); |
} |
error = fz_load_jpx_image(&img, buf->data, buf->len, colorspace); |
if (error) |
{ |
if (colorspace) |
fz_drop_colorspace(colorspace); |
fz_drop_buffer(buf); |
return fz_rethrow(error, "cannot load jpx image"); |
} |
if (colorspace) |
fz_drop_colorspace(colorspace); |
fz_drop_buffer(buf); |
obj = fz_dict_getsa(dict, "SMask", "Mask"); |
if (fz_is_dict(obj)) |
{ |
error = pdf_load_image_imp(&img->mask, xref, NULL, obj, NULL, 1); |
if (error) |
{ |
fz_drop_pixmap(img); |
return fz_rethrow(error, "cannot load image mask/softmask"); |
} |
} |
*imgp = img; |
return fz_okay; |
} |
fz_error |
pdf_load_image(fz_pixmap **pixp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
if ((*pixp = pdf_find_item(xref->store, fz_drop_pixmap, dict))) |
{ |
fz_keep_pixmap(*pixp); |
return fz_okay; |
} |
error = pdf_load_image_imp(pixp, xref, NULL, dict, NULL, 0); |
if (error) |
return fz_rethrow(error, "cannot load image (%d 0 R)", fz_to_num(dict)); |
pdf_store_item(xref->store, fz_keep_pixmap, fz_drop_pixmap, dict, *pixp); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_interpret.c |
---|
0,0 → 1,2304 |
#include "fitz.h" |
#include "mupdf.h" |
#define TILE |
typedef struct pdf_material_s pdf_material; |
typedef struct pdf_gstate_s pdf_gstate; |
typedef struct pdf_csi_s pdf_csi; |
enum |
{ |
PDF_FILL, |
PDF_STROKE, |
}; |
enum |
{ |
PDF_MAT_NONE, |
PDF_MAT_COLOR, |
PDF_MAT_PATTERN, |
PDF_MAT_SHADE, |
}; |
struct pdf_material_s |
{ |
int kind; |
fz_colorspace *colorspace; |
pdf_pattern *pattern; |
fz_shade *shade; |
float alpha; |
float v[32]; |
}; |
struct pdf_gstate_s |
{ |
fz_matrix ctm; |
int clip_depth; |
/* path stroking */ |
fz_stroke_state stroke_state; |
/* materials */ |
pdf_material stroke; |
pdf_material fill; |
/* text state */ |
float char_space; |
float word_space; |
float scale; |
float leading; |
pdf_font_desc *font; |
float size; |
int render; |
float rise; |
/* transparency */ |
int blendmode; |
pdf_xobject *softmask; |
fz_matrix softmask_ctm; |
float softmask_bc[FZ_MAX_COLORS]; |
int luminosity; |
}; |
struct pdf_csi_s |
{ |
fz_device *dev; |
pdf_xref *xref; |
/* usage mode for optional content groups */ |
char *target; /* "View", "Print", "Export" */ |
/* interpreter stack */ |
fz_obj *obj; |
char name[256]; |
unsigned char string[256]; |
int string_len; |
float stack[32]; |
int top; |
int xbalance; |
int in_text; |
/* path object state */ |
fz_path *path; |
/* text object state */ |
fz_text *text; |
fz_matrix tlm; |
fz_matrix tm; |
int text_mode; |
int accumulate; |
/* graphics state */ |
fz_matrix top_ctm; |
pdf_gstate gstate[64]; |
int gtop; |
}; |
static fz_error pdf_run_buffer(pdf_csi *csi, fz_obj *rdb, fz_buffer *contents); |
static fz_error pdf_run_xobject(pdf_csi *csi, fz_obj *resources, pdf_xobject *xobj, fz_matrix transform); |
static void pdf_show_pattern(pdf_csi *csi, pdf_pattern *pat, fz_rect area, int what); |
static int |
pdf_is_hidden_ocg(fz_obj *xobj, char *target) |
{ |
char target_state[16]; |
fz_obj *obj; |
fz_strlcpy(target_state, target, sizeof target_state); |
fz_strlcat(target_state, "State", sizeof target_state); |
obj = fz_dict_gets(xobj, "OC"); |
obj = fz_dict_gets(obj, "OCGs"); |
if (fz_is_array(obj)) |
obj = fz_array_get(obj, 0); |
obj = fz_dict_gets(obj, "Usage"); |
obj = fz_dict_gets(obj, target); |
obj = fz_dict_gets(obj, target_state); |
return !strcmp(fz_to_name(obj), "OFF"); |
} |
/* |
* Emit graphics calls to device. |
*/ |
static void |
pdf_begin_group(pdf_csi *csi, fz_rect bbox) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_error error; |
if (gstate->softmask) |
{ |
pdf_xobject *softmask = gstate->softmask; |
fz_rect bbox = fz_transform_rect(gstate->softmask_ctm, softmask->bbox); |
fz_matrix save_ctm = gstate->ctm; |
gstate->softmask = NULL; |
gstate->ctm = gstate->softmask_ctm; |
fz_begin_mask(csi->dev, bbox, gstate->luminosity, |
softmask->colorspace, gstate->softmask_bc); |
error = pdf_run_xobject(csi, NULL, softmask, fz_identity); |
if (error) |
fz_catch(error, "cannot run softmask"); |
fz_end_mask(csi->dev); |
gstate->softmask = softmask; |
gstate->ctm = save_ctm; |
} |
if (gstate->blendmode) |
fz_begin_group(csi->dev, bbox, 1, 0, gstate->blendmode, 1); |
} |
static void |
pdf_end_group(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
if (gstate->blendmode) |
fz_end_group(csi->dev); |
if (gstate->softmask) |
fz_pop_clip(csi->dev); |
} |
static void |
pdf_show_shade(pdf_csi *csi, fz_shade *shd) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_rect bbox; |
bbox = fz_bound_shade(shd, gstate->ctm); |
pdf_begin_group(csi, bbox); |
fz_fill_shade(csi->dev, shd, gstate->ctm, gstate->fill.alpha); |
pdf_end_group(csi); |
} |
static void |
pdf_show_image(pdf_csi *csi, fz_pixmap *image) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_rect bbox; |
bbox = fz_transform_rect(gstate->ctm, fz_unit_rect); |
if (image->mask) |
{ |
/* apply blend group even though we skip the softmask */ |
if (gstate->blendmode) |
fz_begin_group(csi->dev, bbox, 0, 0, gstate->blendmode, 1); |
fz_clip_image_mask(csi->dev, image->mask, &bbox, gstate->ctm); |
} |
else |
pdf_begin_group(csi, bbox); |
if (!image->colorspace) |
{ |
switch (gstate->fill.kind) |
{ |
case PDF_MAT_NONE: |
break; |
case PDF_MAT_COLOR: |
fz_fill_image_mask(csi->dev, image, gstate->ctm, |
gstate->fill.colorspace, gstate->fill.v, gstate->fill.alpha); |
break; |
case PDF_MAT_PATTERN: |
if (gstate->fill.pattern) |
{ |
fz_clip_image_mask(csi->dev, image, &bbox, gstate->ctm); |
pdf_show_pattern(csi, gstate->fill.pattern, bbox, PDF_FILL); |
fz_pop_clip(csi->dev); |
} |
break; |
case PDF_MAT_SHADE: |
if (gstate->fill.shade) |
{ |
fz_clip_image_mask(csi->dev, image, &bbox, gstate->ctm); |
fz_fill_shade(csi->dev, gstate->fill.shade, gstate->ctm, gstate->fill.alpha); |
fz_pop_clip(csi->dev); |
} |
break; |
} |
} |
else |
{ |
fz_fill_image(csi->dev, image, gstate->ctm, gstate->fill.alpha); |
} |
if (image->mask) |
{ |
fz_pop_clip(csi->dev); |
if (gstate->blendmode) |
fz_end_group(csi->dev); |
} |
else |
pdf_end_group(csi); |
} |
static void pdf_show_clip(pdf_csi *csi, int even_odd) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->clip_depth++; |
fz_clip_path(csi->dev, csi->path, NULL, even_odd, gstate->ctm); |
} |
static void |
pdf_show_path(pdf_csi *csi, int doclose, int dofill, int dostroke, int even_odd) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_path *path; |
fz_rect bbox; |
path = csi->path; |
csi->path = fz_new_path(); |
if (doclose) |
fz_closepath(path); |
if (dostroke) |
bbox = fz_bound_path(path, &gstate->stroke_state, gstate->ctm); |
else |
bbox = fz_bound_path(path, NULL, gstate->ctm); |
if (dofill || dostroke) |
pdf_begin_group(csi, bbox); |
if (dofill) |
{ |
switch (gstate->fill.kind) |
{ |
case PDF_MAT_NONE: |
break; |
case PDF_MAT_COLOR: |
fz_fill_path(csi->dev, path, even_odd, gstate->ctm, |
gstate->fill.colorspace, gstate->fill.v, gstate->fill.alpha); |
break; |
case PDF_MAT_PATTERN: |
if (gstate->fill.pattern) |
{ |
fz_clip_path(csi->dev, path, NULL, even_odd, gstate->ctm); |
pdf_show_pattern(csi, gstate->fill.pattern, bbox, PDF_FILL); |
fz_pop_clip(csi->dev); |
} |
break; |
case PDF_MAT_SHADE: |
if (gstate->fill.shade) |
{ |
fz_clip_path(csi->dev, path, NULL, even_odd, gstate->ctm); |
fz_fill_shade(csi->dev, gstate->fill.shade, csi->top_ctm, gstate->fill.alpha); |
fz_pop_clip(csi->dev); |
} |
break; |
} |
} |
if (dostroke) |
{ |
switch (gstate->stroke.kind) |
{ |
case PDF_MAT_NONE: |
break; |
case PDF_MAT_COLOR: |
fz_stroke_path(csi->dev, path, &gstate->stroke_state, gstate->ctm, |
gstate->stroke.colorspace, gstate->stroke.v, gstate->stroke.alpha); |
break; |
case PDF_MAT_PATTERN: |
if (gstate->stroke.pattern) |
{ |
fz_clip_stroke_path(csi->dev, path, &bbox, &gstate->stroke_state, gstate->ctm); |
pdf_show_pattern(csi, gstate->stroke.pattern, bbox, PDF_FILL); |
fz_pop_clip(csi->dev); |
} |
break; |
case PDF_MAT_SHADE: |
if (gstate->stroke.shade) |
{ |
fz_clip_stroke_path(csi->dev, path, &bbox, &gstate->stroke_state, gstate->ctm); |
fz_fill_shade(csi->dev, gstate->stroke.shade, csi->top_ctm, gstate->stroke.alpha); |
fz_pop_clip(csi->dev); |
} |
break; |
} |
} |
if (dofill || dostroke) |
pdf_end_group(csi); |
fz_free_path(path); |
} |
/* |
* Assemble and emit text |
*/ |
static void |
pdf_flush_text(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_text *text; |
int dofill = 0; |
int dostroke = 0; |
int doclip = 0; |
int doinvisible = 0; |
fz_rect bbox; |
if (!csi->text) |
return; |
text = csi->text; |
csi->text = NULL; |
dofill = dostroke = doclip = doinvisible = 0; |
switch (csi->text_mode) |
{ |
case 0: dofill = 1; break; |
case 1: dostroke = 1; break; |
case 2: dofill = dostroke = 1; break; |
case 3: doinvisible = 1; break; |
case 4: dofill = doclip = 1; break; |
case 5: dostroke = doclip = 1; break; |
case 6: dofill = dostroke = doclip = 1; break; |
case 7: doclip = 1; break; |
} |
bbox = fz_bound_text(text, gstate->ctm); |
pdf_begin_group(csi, bbox); |
if (doinvisible) |
fz_ignore_text(csi->dev, text, gstate->ctm); |
if (doclip) |
{ |
if (csi->accumulate < 2) |
gstate->clip_depth++; |
fz_clip_text(csi->dev, text, gstate->ctm, csi->accumulate); |
csi->accumulate = 2; |
} |
if (dofill) |
{ |
switch (gstate->fill.kind) |
{ |
case PDF_MAT_NONE: |
break; |
case PDF_MAT_COLOR: |
fz_fill_text(csi->dev, text, gstate->ctm, |
gstate->fill.colorspace, gstate->fill.v, gstate->fill.alpha); |
break; |
case PDF_MAT_PATTERN: |
if (gstate->fill.pattern) |
{ |
fz_clip_text(csi->dev, text, gstate->ctm, 0); |
pdf_show_pattern(csi, gstate->fill.pattern, bbox, PDF_FILL); |
fz_pop_clip(csi->dev); |
} |
break; |
case PDF_MAT_SHADE: |
if (gstate->fill.shade) |
{ |
fz_clip_text(csi->dev, text, gstate->ctm, 0); |
fz_fill_shade(csi->dev, gstate->fill.shade, csi->top_ctm, gstate->fill.alpha); |
fz_pop_clip(csi->dev); |
} |
break; |
} |
} |
if (dostroke) |
{ |
switch (gstate->stroke.kind) |
{ |
case PDF_MAT_NONE: |
break; |
case PDF_MAT_COLOR: |
fz_stroke_text(csi->dev, text, &gstate->stroke_state, gstate->ctm, |
gstate->stroke.colorspace, gstate->stroke.v, gstate->stroke.alpha); |
break; |
case PDF_MAT_PATTERN: |
if (gstate->stroke.pattern) |
{ |
fz_clip_stroke_text(csi->dev, text, &gstate->stroke_state, gstate->ctm); |
pdf_show_pattern(csi, gstate->stroke.pattern, bbox, PDF_FILL); |
fz_pop_clip(csi->dev); |
} |
break; |
case PDF_MAT_SHADE: |
if (gstate->stroke.shade) |
{ |
fz_clip_stroke_text(csi->dev, text, &gstate->stroke_state, gstate->ctm); |
fz_fill_shade(csi->dev, gstate->stroke.shade, csi->top_ctm, gstate->stroke.alpha); |
fz_pop_clip(csi->dev); |
} |
break; |
} |
} |
pdf_end_group(csi); |
fz_free_text(text); |
} |
static void |
pdf_show_char(pdf_csi *csi, int cid) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
pdf_font_desc *fontdesc = gstate->font; |
fz_matrix tsm, trm; |
float w0, w1, tx, ty; |
pdf_hmtx h; |
pdf_vmtx v; |
int gid; |
int ucsbuf[8]; |
int ucslen; |
int i; |
tsm.a = gstate->size * gstate->scale; |
tsm.b = 0; |
tsm.c = 0; |
tsm.d = gstate->size; |
tsm.e = 0; |
tsm.f = gstate->rise; |
ucslen = 0; |
if (fontdesc->to_unicode) |
ucslen = pdf_lookup_cmap_full(fontdesc->to_unicode, cid, ucsbuf); |
if (ucslen == 0 && cid < fontdesc->cid_to_ucs_len) |
{ |
ucsbuf[0] = fontdesc->cid_to_ucs[cid]; |
ucslen = 1; |
} |
if (ucslen == 0 || (ucslen == 1 && ucsbuf[0] == 0)) |
{ |
ucsbuf[0] = '?'; |
ucslen = 1; |
} |
gid = pdf_font_cid_to_gid(fontdesc, cid); |
if (fontdesc->wmode == 1) |
{ |
v = pdf_get_vmtx(fontdesc, cid); |
tsm.e -= v.x * gstate->size * 0.001f; |
tsm.f -= v.y * gstate->size * 0.001f; |
} |
trm = fz_concat(tsm, csi->tm); |
/* flush buffered text if face or matrix or rendermode has changed */ |
if (!csi->text || |
fontdesc->font != csi->text->font || |
fontdesc->wmode != csi->text->wmode || |
fabsf(trm.a - csi->text->trm.a) > FLT_EPSILON || |
fabsf(trm.b - csi->text->trm.b) > FLT_EPSILON || |
fabsf(trm.c - csi->text->trm.c) > FLT_EPSILON || |
fabsf(trm.d - csi->text->trm.d) > FLT_EPSILON || |
gstate->render != csi->text_mode) |
{ |
pdf_flush_text(csi); |
csi->text = fz_new_text(fontdesc->font, trm, fontdesc->wmode); |
csi->text->trm.e = 0; |
csi->text->trm.f = 0; |
csi->text_mode = gstate->render; |
} |
/* add glyph to textobject */ |
fz_add_text(csi->text, gid, ucsbuf[0], trm.e, trm.f); |
/* add filler glyphs for one-to-many unicode mapping */ |
for (i = 1; i < ucslen; i++) |
fz_add_text(csi->text, -1, ucsbuf[i], trm.e, trm.f); |
if (fontdesc->wmode == 0) |
{ |
h = pdf_get_hmtx(fontdesc, cid); |
w0 = h.w * 0.001f; |
tx = (w0 * gstate->size + gstate->char_space) * gstate->scale; |
csi->tm = fz_concat(fz_translate(tx, 0), csi->tm); |
} |
if (fontdesc->wmode == 1) |
{ |
w1 = v.w * 0.001f; |
ty = w1 * gstate->size + gstate->char_space; |
csi->tm = fz_concat(fz_translate(0, ty), csi->tm); |
} |
} |
static void |
pdf_show_space(pdf_csi *csi, float tadj) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
pdf_font_desc *fontdesc = gstate->font; |
if (!fontdesc) |
{ |
fz_warn("cannot draw text since font and size not set"); |
return; |
} |
if (fontdesc->wmode == 0) |
csi->tm = fz_concat(fz_translate(tadj * gstate->scale, 0), csi->tm); |
else |
csi->tm = fz_concat(fz_translate(0, tadj), csi->tm); |
} |
static void |
pdf_show_string(pdf_csi *csi, unsigned char *buf, int len) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
pdf_font_desc *fontdesc = gstate->font; |
unsigned char *end = buf + len; |
int cpt, cid; |
if (!fontdesc) |
{ |
fz_warn("cannot draw text since font and size not set"); |
return; |
} |
while (buf < end) |
{ |
buf = pdf_decode_cmap(fontdesc->encoding, buf, &cpt); |
cid = pdf_lookup_cmap(fontdesc->encoding, cpt); |
if (cid >= 0) |
pdf_show_char(csi, cid); |
else |
fz_warn("cannot encode character with code point %#x", cpt); |
if (cpt == 32) |
pdf_show_space(csi, gstate->word_space); |
} |
} |
static void |
pdf_show_text(pdf_csi *csi, fz_obj *text) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
int i; |
if (fz_is_array(text)) |
{ |
for (i = 0; i < fz_array_len(text); i++) |
{ |
fz_obj *item = fz_array_get(text, i); |
if (fz_is_string(item)) |
pdf_show_string(csi, (unsigned char *)fz_to_str_buf(item), fz_to_str_len(item)); |
else |
pdf_show_space(csi, - fz_to_real(item) * gstate->size * 0.001f); |
} |
} |
else if (fz_is_string(text)) |
{ |
pdf_show_string(csi, (unsigned char *)fz_to_str_buf(text), fz_to_str_len(text)); |
} |
} |
/* |
* Interpreter and graphics state stack. |
*/ |
static void |
pdf_init_gstate(pdf_gstate *gs, fz_matrix ctm) |
{ |
gs->ctm = ctm; |
gs->clip_depth = 0; |
gs->stroke_state.start_cap = 0; |
gs->stroke_state.dash_cap = 0; |
gs->stroke_state.end_cap = 0; |
gs->stroke_state.linejoin = 0; |
gs->stroke_state.linewidth = 1; |
gs->stroke_state.miterlimit = 10; |
gs->stroke_state.dash_phase = 0; |
gs->stroke_state.dash_len = 0; |
memset(gs->stroke_state.dash_list, 0, sizeof(gs->stroke_state.dash_list)); |
gs->stroke.kind = PDF_MAT_COLOR; |
gs->stroke.colorspace = fz_keep_colorspace(fz_device_gray); |
gs->stroke.v[0] = 0; |
gs->stroke.pattern = NULL; |
gs->stroke.shade = NULL; |
gs->stroke.alpha = 1; |
gs->fill.kind = PDF_MAT_COLOR; |
gs->fill.colorspace = fz_keep_colorspace(fz_device_gray); |
gs->fill.v[0] = 0; |
gs->fill.pattern = NULL; |
gs->fill.shade = NULL; |
gs->fill.alpha = 1; |
gs->char_space = 0; |
gs->word_space = 0; |
gs->scale = 1; |
gs->leading = 0; |
gs->font = NULL; |
gs->size = -1; |
gs->render = 0; |
gs->rise = 0; |
gs->blendmode = 0; |
gs->softmask = NULL; |
gs->softmask_ctm = fz_identity; |
gs->luminosity = 0; |
} |
static pdf_csi * |
pdf_new_csi(pdf_xref *xref, fz_device *dev, fz_matrix ctm, char *target) |
{ |
pdf_csi *csi; |
csi = fz_malloc(sizeof(pdf_csi)); |
csi->xref = xref; |
csi->dev = dev; |
csi->target = target; |
csi->top = 0; |
csi->obj = NULL; |
csi->name[0] = 0; |
csi->string_len = 0; |
memset(csi->stack, 0, sizeof csi->stack); |
csi->xbalance = 0; |
csi->in_text = 0; |
csi->path = fz_new_path(); |
csi->text = NULL; |
csi->tlm = fz_identity; |
csi->tm = fz_identity; |
csi->text_mode = 0; |
csi->accumulate = 1; |
csi->top_ctm = ctm; |
pdf_init_gstate(&csi->gstate[0], ctm); |
csi->gtop = 0; |
return csi; |
} |
static void |
pdf_clear_stack(pdf_csi *csi) |
{ |
int i; |
if (csi->obj) |
fz_drop_obj(csi->obj); |
csi->obj = NULL; |
csi->name[0] = 0; |
csi->string_len = 0; |
for (i = 0; i < csi->top; i++) |
csi->stack[i] = 0; |
csi->top = 0; |
} |
static pdf_material * |
pdf_keep_material(pdf_material *mat) |
{ |
if (mat->colorspace) |
fz_keep_colorspace(mat->colorspace); |
if (mat->pattern) |
pdf_keep_pattern(mat->pattern); |
if (mat->shade) |
fz_keep_shade(mat->shade); |
return mat; |
} |
static pdf_material * |
pdf_drop_material(pdf_material *mat) |
{ |
if (mat->colorspace) |
fz_drop_colorspace(mat->colorspace); |
if (mat->pattern) |
pdf_drop_pattern(mat->pattern); |
if (mat->shade) |
fz_drop_shade(mat->shade); |
return mat; |
} |
static void |
pdf_gsave(pdf_csi *csi) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
if (csi->gtop == nelem(csi->gstate) - 1) |
{ |
fz_warn("gstate overflow in content stream"); |
return; |
} |
memcpy(&csi->gstate[csi->gtop + 1], &csi->gstate[csi->gtop], sizeof(pdf_gstate)); |
csi->gtop ++; |
pdf_keep_material(&gs->stroke); |
pdf_keep_material(&gs->fill); |
if (gs->font) |
pdf_keep_font(gs->font); |
if (gs->softmask) |
pdf_keep_xobject(gs->softmask); |
} |
static void |
pdf_grestore(pdf_csi *csi) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
int clip_depth = gs->clip_depth; |
if (csi->gtop == 0) |
{ |
fz_warn("gstate underflow in content stream"); |
return; |
} |
pdf_drop_material(&gs->stroke); |
pdf_drop_material(&gs->fill); |
if (gs->font) |
pdf_drop_font(gs->font); |
if (gs->softmask) |
pdf_drop_xobject(gs->softmask); |
csi->gtop --; |
gs = csi->gstate + csi->gtop; |
while (clip_depth > gs->clip_depth) |
{ |
fz_pop_clip(csi->dev); |
clip_depth--; |
} |
} |
static void |
pdf_free_csi(pdf_csi *csi) |
{ |
while (csi->gtop) |
pdf_grestore(csi); |
pdf_drop_material(&csi->gstate[0].fill); |
pdf_drop_material(&csi->gstate[0].stroke); |
if (csi->gstate[0].font) |
pdf_drop_font(csi->gstate[0].font); |
if (csi->gstate[0].softmask) |
pdf_drop_xobject(csi->gstate[0].softmask); |
while (csi->gstate[0].clip_depth--) |
fz_pop_clip(csi->dev); |
if (csi->path) fz_free_path(csi->path); |
if (csi->text) fz_free_text(csi->text); |
pdf_clear_stack(csi); |
fz_free(csi); |
} |
/* |
* Material state |
*/ |
static void |
pdf_set_colorspace(pdf_csi *csi, int what, fz_colorspace *colorspace) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
pdf_material *mat; |
pdf_flush_text(csi); |
mat = what == PDF_FILL ? &gs->fill : &gs->stroke; |
fz_drop_colorspace(mat->colorspace); |
mat->kind = PDF_MAT_COLOR; |
mat->colorspace = fz_keep_colorspace(colorspace); |
mat->v[0] = 0; |
mat->v[1] = 0; |
mat->v[2] = 0; |
mat->v[3] = 1; |
} |
static void |
pdf_set_color(pdf_csi *csi, int what, float *v) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
pdf_material *mat; |
int i; |
pdf_flush_text(csi); |
mat = what == PDF_FILL ? &gs->fill : &gs->stroke; |
switch (mat->kind) |
{ |
case PDF_MAT_PATTERN: |
case PDF_MAT_COLOR: |
if (!strcmp(mat->colorspace->name, "Lab")) |
{ |
mat->v[0] = v[0] / 100; |
mat->v[1] = (v[1] + 100) / 200; |
mat->v[2] = (v[2] + 100) / 200; |
} |
for (i = 0; i < mat->colorspace->n; i++) |
mat->v[i] = v[i]; |
break; |
default: |
fz_warn("color incompatible with material"); |
} |
} |
static void |
pdf_set_shade(pdf_csi *csi, int what, fz_shade *shade) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
pdf_material *mat; |
pdf_flush_text(csi); |
mat = what == PDF_FILL ? &gs->fill : &gs->stroke; |
if (mat->shade) |
fz_drop_shade(mat->shade); |
mat->kind = PDF_MAT_SHADE; |
mat->shade = fz_keep_shade(shade); |
} |
static void |
pdf_set_pattern(pdf_csi *csi, int what, pdf_pattern *pat, float *v) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
pdf_material *mat; |
pdf_flush_text(csi); |
mat = what == PDF_FILL ? &gs->fill : &gs->stroke; |
if (mat->pattern) |
pdf_drop_pattern(mat->pattern); |
mat->kind = PDF_MAT_PATTERN; |
if (pat) |
mat->pattern = pdf_keep_pattern(pat); |
else |
mat->pattern = NULL; |
if (v) |
pdf_set_color(csi, what, v); |
} |
static void |
pdf_unset_pattern(pdf_csi *csi, int what) |
{ |
pdf_gstate *gs = csi->gstate + csi->gtop; |
pdf_material *mat; |
mat = what == PDF_FILL ? &gs->fill : &gs->stroke; |
if (mat->kind == PDF_MAT_PATTERN) |
{ |
if (mat->pattern) |
pdf_drop_pattern(mat->pattern); |
mat->pattern = NULL; |
mat->kind = PDF_MAT_COLOR; |
} |
} |
/* |
* Patterns, XObjects and ExtGState |
*/ |
static void |
pdf_show_pattern(pdf_csi *csi, pdf_pattern *pat, fz_rect area, int what) |
{ |
pdf_gstate *gstate; |
fz_matrix ptm, invptm; |
fz_matrix oldtopctm; |
fz_error error; |
int x0, y0, x1, y1; |
int oldtop; |
pdf_gsave(csi); |
gstate = csi->gstate + csi->gtop; |
if (pat->ismask) |
{ |
pdf_unset_pattern(csi, PDF_FILL); |
pdf_unset_pattern(csi, PDF_STROKE); |
if (what == PDF_FILL) |
{ |
pdf_drop_material(&gstate->stroke); |
pdf_keep_material(&gstate->fill); |
gstate->stroke = gstate->fill; |
} |
if (what == PDF_STROKE) |
{ |
pdf_drop_material(&gstate->fill); |
pdf_keep_material(&gstate->stroke); |
gstate->fill = gstate->stroke; |
} |
} |
else |
{ |
// TODO: unset only the current fill/stroke or both? |
pdf_unset_pattern(csi, what); |
} |
/* don't apply softmasks to objects in the pattern as well */ |
if (gstate->softmask) |
{ |
pdf_drop_xobject(gstate->softmask); |
gstate->softmask = NULL; |
} |
ptm = fz_concat(pat->matrix, csi->top_ctm); |
invptm = fz_invert_matrix(ptm); |
/* patterns are painted using the ctm in effect at the beginning of the content stream */ |
/* get bbox of shape in pattern space for stamping */ |
area = fz_transform_rect(invptm, area); |
x0 = floorf(area.x0 / pat->xstep); |
y0 = floorf(area.y0 / pat->ystep); |
x1 = ceilf(area.x1 / pat->xstep); |
y1 = ceilf(area.y1 / pat->ystep); |
oldtopctm = csi->top_ctm; |
oldtop = csi->gtop; |
#ifdef TILE |
if ((x1 - x0) * (y1 - y0) > 0) |
{ |
fz_begin_tile(csi->dev, area, pat->bbox, pat->xstep, pat->ystep, ptm); |
gstate->ctm = ptm; |
csi->top_ctm = gstate->ctm; |
pdf_gsave(csi); |
error = pdf_run_buffer(csi, pat->resources, pat->contents); |
if (error) |
fz_catch(error, "cannot render pattern tile"); |
pdf_grestore(csi); |
while (oldtop < csi->gtop) |
pdf_grestore(csi); |
fz_end_tile(csi->dev); |
} |
#else |
{ |
int x, y; |
for (y = y0; y < y1; y++) |
{ |
for (x = x0; x < x1; x++) |
{ |
gstate->ctm = fz_concat(fz_translate(x * pat->xstep, y * pat->ystep), ptm); |
csi->top_ctm = gstate->ctm; |
error = pdf_run_csi_buffer(csi, pat->resources, pat->contents); |
while (oldtop < csi->gtop) |
pdf_grestore(csi); |
if (error) |
{ |
fz_catch(error, "cannot render pattern tile"); |
goto cleanup; |
} |
} |
} |
} |
cleanup: |
#endif |
csi->top_ctm = oldtopctm; |
pdf_grestore(csi); |
} |
static fz_error |
pdf_run_xobject(pdf_csi *csi, fz_obj *resources, pdf_xobject *xobj, fz_matrix transform) |
{ |
fz_error error; |
pdf_gstate *gstate; |
fz_matrix oldtopctm; |
int oldtop; |
int popmask; |
pdf_gsave(csi); |
gstate = csi->gstate + csi->gtop; |
oldtop = csi->gtop; |
popmask = 0; |
/* apply xobject's transform matrix */ |
transform = fz_concat(xobj->matrix, transform); |
gstate->ctm = fz_concat(transform, gstate->ctm); |
/* apply soft mask, create transparency group and reset state */ |
if (xobj->transparency) |
{ |
if (gstate->softmask) |
{ |
pdf_xobject *softmask = gstate->softmask; |
fz_rect bbox = fz_transform_rect(gstate->ctm, xobj->bbox); |
gstate->softmask = NULL; |
popmask = 1; |
fz_begin_mask(csi->dev, bbox, gstate->luminosity, |
softmask->colorspace, gstate->softmask_bc); |
error = pdf_run_xobject(csi, resources, softmask, fz_identity); |
if (error) |
return fz_rethrow(error, "cannot run softmask"); |
fz_end_mask(csi->dev); |
pdf_drop_xobject(softmask); |
} |
fz_begin_group(csi->dev, |
fz_transform_rect(gstate->ctm, xobj->bbox), |
xobj->isolated, xobj->knockout, gstate->blendmode, gstate->fill.alpha); |
gstate->blendmode = 0; |
gstate->stroke.alpha = 1; |
gstate->fill.alpha = 1; |
} |
/* clip to the bounds */ |
fz_moveto(csi->path, xobj->bbox.x0, xobj->bbox.y0); |
fz_lineto(csi->path, xobj->bbox.x1, xobj->bbox.y0); |
fz_lineto(csi->path, xobj->bbox.x1, xobj->bbox.y1); |
fz_lineto(csi->path, xobj->bbox.x0, xobj->bbox.y1); |
fz_closepath(csi->path); |
pdf_show_clip(csi, 0); |
pdf_show_path(csi, 0, 0, 0, 0); |
/* run contents */ |
oldtopctm = csi->top_ctm; |
csi->top_ctm = gstate->ctm; |
if (xobj->resources) |
resources = xobj->resources; |
error = pdf_run_buffer(csi, resources, xobj->contents); |
if (error) |
fz_catch(error, "cannot interpret XObject stream"); |
csi->top_ctm = oldtopctm; |
while (oldtop < csi->gtop) |
pdf_grestore(csi); |
pdf_grestore(csi); |
/* wrap up transparency stacks */ |
if (xobj->transparency) |
{ |
fz_end_group(csi->dev); |
if (popmask) |
fz_pop_clip(csi->dev); |
} |
return fz_okay; |
} |
static fz_error |
pdf_run_extgstate(pdf_csi *csi, fz_obj *rdb, fz_obj *extgstate) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_colorspace *colorspace; |
int i, k; |
pdf_flush_text(csi); |
for (i = 0; i < fz_dict_len(extgstate); i++) |
{ |
fz_obj *key = fz_dict_get_key(extgstate, i); |
fz_obj *val = fz_dict_get_val(extgstate, i); |
char *s = fz_to_name(key); |
if (!strcmp(s, "Font")) |
{ |
if (fz_is_array(val) && fz_array_len(val) == 2) |
{ |
fz_error error; |
fz_obj *font = fz_array_get(val, 0); |
if (gstate->font) |
{ |
pdf_drop_font(gstate->font); |
gstate->font = NULL; |
} |
error = pdf_load_font(&gstate->font, csi->xref, rdb, font); |
if (error) |
return fz_rethrow(error, "cannot load font (%d %d R)", fz_to_num(font), fz_to_gen(font)); |
if (!gstate->font) |
return fz_throw("cannot find font in store"); |
gstate->size = fz_to_real(fz_array_get(val, 1)); |
} |
else |
return fz_throw("malformed /Font dictionary"); |
} |
else if (!strcmp(s, "LC")) |
{ |
gstate->stroke_state.start_cap = fz_to_int(val); |
gstate->stroke_state.dash_cap = fz_to_int(val); |
gstate->stroke_state.end_cap = fz_to_int(val); |
} |
else if (!strcmp(s, "LW")) |
gstate->stroke_state.linewidth = fz_to_real(val); |
else if (!strcmp(s, "LJ")) |
gstate->stroke_state.linejoin = fz_to_int(val); |
else if (!strcmp(s, "ML")) |
gstate->stroke_state.miterlimit = fz_to_real(val); |
else if (!strcmp(s, "D")) |
{ |
if (fz_is_array(val) && fz_array_len(val) == 2) |
{ |
fz_obj *dashes = fz_array_get(val, 0); |
gstate->stroke_state.dash_len = MAX(fz_array_len(dashes), 32); |
for (k = 0; k < gstate->stroke_state.dash_len; k++) |
gstate->stroke_state.dash_list[k] = fz_to_real(fz_array_get(dashes, k)); |
gstate->stroke_state.dash_phase = fz_to_real(fz_array_get(val, 1)); |
} |
else |
return fz_throw("malformed /D"); |
} |
else if (!strcmp(s, "CA")) |
gstate->stroke.alpha = fz_to_real(val); |
else if (!strcmp(s, "ca")) |
gstate->fill.alpha = fz_to_real(val); |
else if (!strcmp(s, "BM")) |
{ |
if (fz_is_array(val)) |
val = fz_array_get(val, 0); |
gstate->blendmode = fz_find_blendmode(fz_to_name(val)); |
} |
else if (!strcmp(s, "SMask")) |
{ |
if (fz_is_dict(val)) |
{ |
fz_error error; |
pdf_xobject *xobj; |
fz_obj *group, *luminosity, *bc; |
if (gstate->softmask) |
{ |
pdf_drop_xobject(gstate->softmask); |
gstate->softmask = NULL; |
} |
group = fz_dict_gets(val, "G"); |
if (!group) |
return fz_throw("cannot load softmask xobject (%d %d R)", fz_to_num(val), fz_to_gen(val)); |
error = pdf_load_xobject(&xobj, csi->xref, group); |
if (error) |
return fz_rethrow(error, "cannot load xobject (%d %d R)", fz_to_num(val), fz_to_gen(val)); |
colorspace = xobj->colorspace; |
if (!colorspace) |
colorspace = fz_device_gray; |
gstate->softmask_ctm = fz_concat(xobj->matrix, gstate->ctm); |
gstate->softmask = xobj; |
for (k = 0; k < colorspace->n; k++) |
gstate->softmask_bc[k] = 0; |
bc = fz_dict_gets(val, "BC"); |
if (fz_is_array(bc)) |
{ |
for (k = 0; k < colorspace->n; k++) |
gstate->softmask_bc[k] = fz_to_real(fz_array_get(bc, k)); |
} |
luminosity = fz_dict_gets(val, "S"); |
if (fz_is_name(luminosity) && !strcmp(fz_to_name(luminosity), "Luminosity")) |
gstate->luminosity = 1; |
else |
gstate->luminosity = 0; |
} |
else if (fz_is_name(val) && !strcmp(fz_to_name(val), "None")) |
{ |
if (gstate->softmask) |
{ |
pdf_drop_xobject(gstate->softmask); |
gstate->softmask = NULL; |
} |
} |
} |
else if (!strcmp(s, "TR")) |
{ |
if (fz_is_name(val) && strcmp(fz_to_name(val), "Identity")) |
fz_warn("ignoring transfer function"); |
} |
} |
return fz_okay; |
} |
/* |
* Operators |
*/ |
static void pdf_run_BDC(pdf_csi *csi) |
{ |
} |
static fz_error pdf_run_BI(pdf_csi *csi, fz_obj *rdb, fz_stream *file) |
{ |
int ch; |
fz_error error; |
char *buf = csi->xref->scratch; |
int buflen = sizeof(csi->xref->scratch); |
fz_pixmap *img; |
fz_obj *obj; |
error = pdf_parse_dict(&obj, csi->xref, file, buf, buflen); |
if (error) |
return fz_rethrow(error, "cannot parse inline image dictionary"); |
/* read whitespace after ID keyword */ |
ch = fz_read_byte(file); |
if (ch == '\r') |
if (fz_peek_byte(file) == '\n') |
fz_read_byte(file); |
error = pdf_load_inline_image(&img, csi->xref, rdb, obj, file); |
fz_drop_obj(obj); |
if (error) |
return fz_rethrow(error, "cannot load inline image"); |
pdf_show_image(csi, img); |
fz_drop_pixmap(img); |
/* find EI */ |
ch = fz_read_byte(file); |
while (ch != 'E' && ch != EOF) |
ch = fz_read_byte(file); |
ch = fz_read_byte(file); |
if (ch != 'I') |
return fz_rethrow(error, "syntax error after inline image"); |
return fz_okay; |
} |
static void pdf_run_B(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 1, 1, 0); |
} |
static void pdf_run_BMC(pdf_csi *csi) |
{ |
} |
static void pdf_run_BT(pdf_csi *csi) |
{ |
csi->in_text = 1; |
csi->tm = fz_identity; |
csi->tlm = fz_identity; |
} |
static void pdf_run_BX(pdf_csi *csi) |
{ |
csi->xbalance ++; |
} |
static void pdf_run_Bstar(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 1, 1, 1); |
} |
static fz_error pdf_run_cs_imp(pdf_csi *csi, fz_obj *rdb, int what) |
{ |
fz_colorspace *colorspace; |
fz_obj *obj, *dict; |
fz_error error; |
if (!strcmp(csi->name, "Pattern")) |
{ |
pdf_set_pattern(csi, what, NULL, NULL); |
} |
else |
{ |
if (!strcmp(csi->name, "DeviceGray")) |
colorspace = fz_keep_colorspace(fz_device_gray); |
else if (!strcmp(csi->name, "DeviceRGB")) |
colorspace = fz_keep_colorspace(fz_device_rgb); |
else if (!strcmp(csi->name, "DeviceCMYK")) |
colorspace = fz_keep_colorspace(fz_device_cmyk); |
else |
{ |
dict = fz_dict_gets(rdb, "ColorSpace"); |
if (!dict) |
return fz_throw("cannot find ColorSpace dictionary"); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find colorspace resource '%s'", csi->name); |
error = pdf_load_colorspace(&colorspace, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load colorspace (%d 0 R)", fz_to_num(obj)); |
} |
pdf_set_colorspace(csi, what, colorspace); |
fz_drop_colorspace(colorspace); |
} |
return fz_okay; |
} |
static void pdf_run_CS(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_error error; |
error = pdf_run_cs_imp(csi, rdb, PDF_STROKE); |
if (error) |
fz_catch(error, "cannot set colorspace"); |
} |
static void pdf_run_cs(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_error error; |
error = pdf_run_cs_imp(csi, rdb, PDF_FILL); |
if (error) |
fz_catch(error, "cannot set colorspace"); |
} |
static void pdf_run_DP(pdf_csi *csi) |
{ |
} |
static fz_error pdf_run_Do(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_obj *dict; |
fz_obj *obj; |
fz_obj *subtype; |
fz_error error; |
dict = fz_dict_gets(rdb, "XObject"); |
if (!dict) |
return fz_throw("cannot find XObject dictionary when looking for: '%s'", csi->name); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find xobject resource: '%s'", csi->name); |
subtype = fz_dict_gets(obj, "Subtype"); |
if (!fz_is_name(subtype)) |
return fz_throw("no XObject subtype specified"); |
if (pdf_is_hidden_ocg(obj, csi->target)) |
return fz_okay; |
if (!strcmp(fz_to_name(subtype), "Form") && fz_dict_gets(obj, "Subtype2")) |
subtype = fz_dict_gets(obj, "Subtype2"); |
if (!strcmp(fz_to_name(subtype), "Form")) |
{ |
pdf_xobject *xobj; |
error = pdf_load_xobject(&xobj, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load xobject (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
/* Inherit parent resources, in case this one was empty XXX check where it's loaded */ |
if (!xobj->resources) |
xobj->resources = fz_keep_obj(rdb); |
error = pdf_run_xobject(csi, xobj->resources, xobj, fz_identity); |
if (error) |
return fz_rethrow(error, "cannot draw xobject (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
pdf_drop_xobject(xobj); |
} |
else if (!strcmp(fz_to_name(subtype), "Image")) |
{ |
if ((csi->dev->hints & FZ_IGNORE_IMAGE) == 0) |
{ |
fz_pixmap *img; |
error = pdf_load_image(&img, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load image (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
pdf_show_image(csi, img); |
fz_drop_pixmap(img); |
} |
} |
else if (!strcmp(fz_to_name(subtype), "PS")) |
{ |
fz_warn("ignoring XObject with subtype PS"); |
} |
else |
{ |
return fz_throw("unknown XObject subtype: '%s'", fz_to_name(subtype)); |
} |
return fz_okay; |
} |
static void pdf_run_EMC(pdf_csi *csi) |
{ |
} |
static void pdf_run_ET(pdf_csi *csi) |
{ |
pdf_flush_text(csi); |
csi->accumulate = 1; |
csi->in_text = 0; |
} |
static void pdf_run_EX(pdf_csi *csi) |
{ |
csi->xbalance --; |
} |
static void pdf_run_F(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 1, 0, 0); |
} |
static void pdf_run_G(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_STROKE, fz_device_gray); |
pdf_set_color(csi, PDF_STROKE, csi->stack); |
} |
static void pdf_run_J(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->stroke_state.start_cap = csi->stack[0]; |
gstate->stroke_state.dash_cap = csi->stack[0]; |
gstate->stroke_state.end_cap = csi->stack[0]; |
} |
static void pdf_run_K(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_STROKE, fz_device_cmyk); |
pdf_set_color(csi, PDF_STROKE, csi->stack); |
} |
static void pdf_run_M(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->stroke_state.miterlimit = csi->stack[0]; |
} |
static void pdf_run_MP(pdf_csi *csi) |
{ |
} |
static void pdf_run_Q(pdf_csi *csi) |
{ |
pdf_grestore(csi); |
} |
static void pdf_run_RG(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_STROKE, fz_device_rgb); |
pdf_set_color(csi, PDF_STROKE, csi->stack); |
} |
static void pdf_run_S(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 0, 1, 0); |
} |
static fz_error pdf_run_SC_imp(pdf_csi *csi, fz_obj *rdb, int what, pdf_material *mat) |
{ |
fz_error error; |
fz_obj *patterntype; |
fz_obj *dict; |
fz_obj *obj; |
int kind; |
kind = mat->kind; |
if (csi->name[0]) |
kind = PDF_MAT_PATTERN; |
switch (kind) |
{ |
case PDF_MAT_NONE: |
return fz_throw("cannot set color in mask objects"); |
case PDF_MAT_COLOR: |
pdf_set_color(csi, what, csi->stack); |
break; |
case PDF_MAT_PATTERN: |
dict = fz_dict_gets(rdb, "Pattern"); |
if (!dict) |
return fz_throw("cannot find Pattern dictionary"); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find pattern resource '%s'", csi->name); |
patterntype = fz_dict_gets(obj, "PatternType"); |
if (fz_to_int(patterntype) == 1) |
{ |
pdf_pattern *pat; |
error = pdf_load_pattern(&pat, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load pattern (%d 0 R)", fz_to_num(obj)); |
pdf_set_pattern(csi, what, pat, csi->top > 0 ? csi->stack : NULL); |
pdf_drop_pattern(pat); |
} |
else if (fz_to_int(patterntype) == 2) |
{ |
fz_shade *shd; |
error = pdf_load_shading(&shd, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load shading (%d 0 R)", fz_to_num(obj)); |
pdf_set_shade(csi, what, shd); |
fz_drop_shade(shd); |
} |
else |
{ |
return fz_throw("unknown pattern type: %d", fz_to_int(patterntype)); |
} |
break; |
case PDF_MAT_SHADE: |
return fz_throw("cannot set color in shade objects"); |
} |
return fz_okay; |
} |
static void pdf_run_SC(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_error error; |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
error = pdf_run_SC_imp(csi, rdb, PDF_STROKE, &gstate->stroke); |
if (error) |
fz_catch(error, "cannot set color and colorspace"); |
} |
static void pdf_run_sc(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_error error; |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
error = pdf_run_SC_imp(csi, rdb, PDF_FILL, &gstate->fill); |
if (error) |
fz_catch(error, "cannot set color and colorspace"); |
} |
static void pdf_run_Tc(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->char_space = csi->stack[0]; |
} |
static void pdf_run_Tw(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->word_space = csi->stack[0]; |
} |
static void pdf_run_Tz(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
float a = csi->stack[0] / 100; |
pdf_flush_text(csi); |
gstate->scale = a; |
} |
static void pdf_run_TL(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->leading = csi->stack[0]; |
} |
static fz_error pdf_run_Tf(pdf_csi *csi, fz_obj *rdb) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_error error; |
fz_obj *dict; |
fz_obj *obj; |
gstate->size = csi->stack[0]; |
if (gstate->font) |
pdf_drop_font(gstate->font); |
gstate->font = NULL; |
dict = fz_dict_gets(rdb, "Font"); |
if (!dict) |
return fz_throw("cannot find Font dictionary"); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find font resource: '%s'", csi->name); |
error = pdf_load_font(&gstate->font, csi->xref, rdb, obj); |
if (error) |
return fz_rethrow(error, "cannot load font (%d 0 R)", fz_to_num(obj)); |
return fz_okay; |
} |
static void pdf_run_Tr(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->render = csi->stack[0]; |
} |
static void pdf_run_Ts(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->rise = csi->stack[0]; |
} |
static void pdf_run_Td(pdf_csi *csi) |
{ |
fz_matrix m = fz_translate(csi->stack[0], csi->stack[1]); |
csi->tlm = fz_concat(m, csi->tlm); |
csi->tm = csi->tlm; |
} |
static void pdf_run_TD(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_matrix m; |
gstate->leading = -csi->stack[1]; |
m = fz_translate(csi->stack[0], csi->stack[1]); |
csi->tlm = fz_concat(m, csi->tlm); |
csi->tm = csi->tlm; |
} |
static void pdf_run_Tm(pdf_csi *csi) |
{ |
csi->tm.a = csi->stack[0]; |
csi->tm.b = csi->stack[1]; |
csi->tm.c = csi->stack[2]; |
csi->tm.d = csi->stack[3]; |
csi->tm.e = csi->stack[4]; |
csi->tm.f = csi->stack[5]; |
csi->tlm = csi->tm; |
} |
static void pdf_run_Tstar(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_matrix m = fz_translate(0, -gstate->leading); |
csi->tlm = fz_concat(m, csi->tlm); |
csi->tm = csi->tlm; |
} |
static void pdf_run_Tj(pdf_csi *csi) |
{ |
if (csi->string_len) |
pdf_show_string(csi, csi->string, csi->string_len); |
else |
pdf_show_text(csi, csi->obj); |
} |
static void pdf_run_TJ(pdf_csi *csi) |
{ |
if (csi->string_len) |
pdf_show_string(csi, csi->string, csi->string_len); |
else |
pdf_show_text(csi, csi->obj); |
} |
static void pdf_run_W(pdf_csi *csi) |
{ |
pdf_show_clip(csi, 0); |
} |
static void pdf_run_Wstar(pdf_csi *csi) |
{ |
pdf_show_clip(csi, 1); |
} |
static void pdf_run_b(pdf_csi *csi) |
{ |
pdf_show_path(csi, 1, 1, 1, 0); |
} |
static void pdf_run_bstar(pdf_csi *csi) |
{ |
pdf_show_path(csi, 1, 1, 1, 1); |
} |
static void pdf_run_c(pdf_csi *csi) |
{ |
float a, b, c, d, e, f; |
a = csi->stack[0]; |
b = csi->stack[1]; |
c = csi->stack[2]; |
d = csi->stack[3]; |
e = csi->stack[4]; |
f = csi->stack[5]; |
fz_curveto(csi->path, a, b, c, d, e, f); |
} |
static void pdf_run_cm(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_matrix m; |
m.a = csi->stack[0]; |
m.b = csi->stack[1]; |
m.c = csi->stack[2]; |
m.d = csi->stack[3]; |
m.e = csi->stack[4]; |
m.f = csi->stack[5]; |
gstate->ctm = fz_concat(m, gstate->ctm); |
} |
static void pdf_run_d(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
fz_obj *array; |
int i; |
array = csi->obj; |
gstate->stroke_state.dash_len = MIN(fz_array_len(array), nelem(gstate->stroke_state.dash_list)); |
for (i = 0; i < gstate->stroke_state.dash_len; i++) |
gstate->stroke_state.dash_list[i] = fz_to_real(fz_array_get(array, i)); |
gstate->stroke_state.dash_phase = csi->stack[0]; |
} |
static void pdf_run_d0(pdf_csi *csi) |
{ |
csi->dev->flags |= FZ_CHARPROC_COLOR; |
} |
static void pdf_run_d1(pdf_csi *csi) |
{ |
csi->dev->flags |= FZ_CHARPROC_MASK; |
} |
static void pdf_run_f(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 1, 0, 0); |
} |
static void pdf_run_fstar(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 1, 0, 1); |
} |
static void pdf_run_g(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_FILL, fz_device_gray); |
pdf_set_color(csi, PDF_FILL, csi->stack); |
} |
static fz_error pdf_run_gs(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_error error; |
fz_obj *dict; |
fz_obj *obj; |
dict = fz_dict_gets(rdb, "ExtGState"); |
if (!dict) |
return fz_throw("cannot find ExtGState dictionary"); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find extgstate resource '%s'", csi->name); |
error = pdf_run_extgstate(csi, rdb, obj); |
if (error) |
return fz_rethrow(error, "cannot set ExtGState (%d 0 R)", fz_to_num(obj)); |
return fz_okay; |
} |
static void pdf_run_h(pdf_csi *csi) |
{ |
fz_closepath(csi->path); |
} |
static void pdf_run_i(pdf_csi *csi) |
{ |
} |
static void pdf_run_j(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->stroke_state.linejoin = csi->stack[0]; |
} |
static void pdf_run_k(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_FILL, fz_device_cmyk); |
pdf_set_color(csi, PDF_FILL, csi->stack); |
} |
static void pdf_run_l(pdf_csi *csi) |
{ |
float a, b; |
a = csi->stack[0]; |
b = csi->stack[1]; |
fz_lineto(csi->path, a, b); |
} |
static void pdf_run_m(pdf_csi *csi) |
{ |
float a, b; |
a = csi->stack[0]; |
b = csi->stack[1]; |
fz_moveto(csi->path, a, b); |
} |
static void pdf_run_n(pdf_csi *csi) |
{ |
pdf_show_path(csi, 0, 0, 0, 0); |
} |
static void pdf_run_q(pdf_csi *csi) |
{ |
pdf_gsave(csi); |
} |
static void pdf_run_re(pdf_csi *csi) |
{ |
float x, y, w, h; |
x = csi->stack[0]; |
y = csi->stack[1]; |
w = csi->stack[2]; |
h = csi->stack[3]; |
fz_moveto(csi->path, x, y); |
fz_lineto(csi->path, x + w, y); |
fz_lineto(csi->path, x + w, y + h); |
fz_lineto(csi->path, x, y + h); |
fz_closepath(csi->path); |
} |
static void pdf_run_rg(pdf_csi *csi) |
{ |
pdf_set_colorspace(csi, PDF_FILL, fz_device_rgb); |
pdf_set_color(csi, PDF_FILL, csi->stack); |
} |
static void pdf_run_ri(pdf_csi *csi) |
{ |
} |
static void pdf_run(pdf_csi *csi) |
{ |
pdf_show_path(csi, 1, 0, 1, 0); |
} |
static fz_error pdf_run_sh(pdf_csi *csi, fz_obj *rdb) |
{ |
fz_obj *dict; |
fz_obj *obj; |
fz_shade *shd; |
fz_error error; |
dict = fz_dict_gets(rdb, "Shading"); |
if (!dict) |
return fz_throw("cannot find shading dictionary"); |
obj = fz_dict_gets(dict, csi->name); |
if (!obj) |
return fz_throw("cannot find shading resource: '%s'", csi->name); |
if ((csi->dev->hints & FZ_IGNORE_SHADE) == 0) |
{ |
error = pdf_load_shading(&shd, csi->xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load shading (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
pdf_show_shade(csi, shd); |
fz_drop_shade(shd); |
} |
return fz_okay; |
} |
static void pdf_run_v(pdf_csi *csi) |
{ |
float a, b, c, d; |
a = csi->stack[0]; |
b = csi->stack[1]; |
c = csi->stack[2]; |
d = csi->stack[3]; |
fz_curvetov(csi->path, a, b, c, d); |
} |
static void pdf_run_w(pdf_csi *csi) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
pdf_flush_text(csi); /* linewidth affects stroked text rendering mode */ |
gstate->stroke_state.linewidth = csi->stack[0]; |
} |
static void pdf_run_y(pdf_csi *csi) |
{ |
float a, b, c, d; |
a = csi->stack[0]; |
b = csi->stack[1]; |
c = csi->stack[2]; |
d = csi->stack[3]; |
fz_curvetoy(csi->path, a, b, c, d); |
} |
static void pdf_run_squote(pdf_csi *csi) |
{ |
fz_matrix m; |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
m = fz_translate(0, -gstate->leading); |
csi->tlm = fz_concat(m, csi->tlm); |
csi->tm = csi->tlm; |
if (csi->string_len) |
pdf_show_string(csi, csi->string, csi->string_len); |
else |
pdf_show_text(csi, csi->obj); |
} |
static void pdf_run_dquote(pdf_csi *csi) |
{ |
fz_matrix m; |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
gstate->word_space = csi->stack[0]; |
gstate->char_space = csi->stack[1]; |
m = fz_translate(0, -gstate->leading); |
csi->tlm = fz_concat(m, csi->tlm); |
csi->tm = csi->tlm; |
if (csi->string_len) |
pdf_show_string(csi, csi->string, csi->string_len); |
else |
pdf_show_text(csi, csi->obj); |
} |
#define A(a) (a) |
#define B(a,b) (a | b << 8) |
#define C(a,b,c) (a | b << 8 | c << 16) |
static fz_error |
pdf_run_keyword(pdf_csi *csi, fz_obj *rdb, fz_stream *file, char *buf) |
{ |
fz_error error; |
int key; |
key = buf[0]; |
if (buf[1]) |
{ |
key |= buf[1] << 8; |
if (buf[2]) |
{ |
key |= buf[2] << 16; |
if (buf[3]) |
key = 0; |
} |
} |
switch (key) |
{ |
case A('"'): pdf_run_dquote(csi); break; |
case A('\''): pdf_run_squote(csi); break; |
case A('B'): pdf_run_B(csi); break; |
case B('B','*'): pdf_run_Bstar(csi); break; |
case C('B','D','C'): pdf_run_BDC(csi); break; |
case B('B','I'): |
error = pdf_run_BI(csi, rdb, file); |
if (error) |
return fz_rethrow(error, "cannot draw inline image"); |
break; |
case C('B','M','C'): pdf_run_BMC(csi); break; |
case B('B','T'): pdf_run_BT(csi); break; |
case B('B','X'): pdf_run_BX(csi); break; |
case B('C','S'): pdf_run_CS(csi, rdb); break; |
case B('D','P'): pdf_run_DP(csi); break; |
case B('D','o'): |
error = pdf_run_Do(csi, rdb); |
if (error) |
fz_catch(error, "cannot draw xobject/image"); |
break; |
case C('E','M','C'): pdf_run_EMC(csi); break; |
case B('E','T'): pdf_run_ET(csi); break; |
case B('E','X'): pdf_run_EX(csi); break; |
case A('F'): pdf_run_F(csi); break; |
case A('G'): pdf_run_G(csi); break; |
case A('J'): pdf_run_J(csi); break; |
case A('K'): pdf_run_K(csi); break; |
case A('M'): pdf_run_M(csi); break; |
case B('M','P'): pdf_run_MP(csi); break; |
case A('Q'): pdf_run_Q(csi); break; |
case B('R','G'): pdf_run_RG(csi); break; |
case A('S'): pdf_run_S(csi); break; |
case B('S','C'): pdf_run_SC(csi, rdb); break; |
case C('S','C','N'): pdf_run_SC(csi, rdb); break; |
case B('T','*'): pdf_run_Tstar(csi); break; |
case B('T','D'): pdf_run_TD(csi); break; |
case B('T','J'): pdf_run_TJ(csi); break; |
case B('T','L'): pdf_run_TL(csi); break; |
case B('T','c'): pdf_run_Tc(csi); break; |
case B('T','d'): pdf_run_Td(csi); break; |
case B('T','f'): |
error = pdf_run_Tf(csi, rdb); |
if (error) |
fz_catch(error, "cannot set font"); |
break; |
case B('T','j'): pdf_run_Tj(csi); break; |
case B('T','m'): pdf_run_Tm(csi); break; |
case B('T','r'): pdf_run_Tr(csi); break; |
case B('T','s'): pdf_run_Ts(csi); break; |
case B('T','w'): pdf_run_Tw(csi); break; |
case B('T','z'): pdf_run_Tz(csi); break; |
case A('W'): pdf_run_W(csi); break; |
case B('W','*'): pdf_run_Wstar(csi); break; |
case A('b'): pdf_run_b(csi); break; |
case B('b','*'): pdf_run_bstar(csi); break; |
case A('c'): pdf_run_c(csi); break; |
case B('c','m'): pdf_run_cm(csi); break; |
case B('c','s'): pdf_run_cs(csi, rdb); break; |
case A('d'): pdf_run_d(csi); break; |
case B('d','0'): pdf_run_d0(csi); break; |
case B('d','1'): pdf_run_d1(csi); break; |
case A('f'): pdf_run_f(csi); break; |
case B('f','*'): pdf_run_fstar(csi); break; |
case A('g'): pdf_run_g(csi); break; |
case B('g','s'): |
error = pdf_run_gs(csi, rdb); |
if (error) |
fz_catch(error, "cannot set graphics state"); |
break; |
case A('h'): pdf_run_h(csi); break; |
case A('i'): pdf_run_i(csi); break; |
case A('j'): pdf_run_j(csi); break; |
case A('k'): pdf_run_k(csi); break; |
case A('l'): pdf_run_l(csi); break; |
case A('m'): pdf_run_m(csi); break; |
case A('n'): pdf_run_n(csi); break; |
case A('q'): pdf_run_q(csi); break; |
case B('r','e'): pdf_run_re(csi); break; |
case B('r','g'): pdf_run_rg(csi); break; |
case B('r','i'): pdf_run_ri(csi); break; |
case A('s'): pdf_run(csi); break; |
case B('s','c'): pdf_run_sc(csi, rdb); break; |
case C('s','c','n'): pdf_run_sc(csi, rdb); break; |
case B('s','h'): |
error = pdf_run_sh(csi, rdb); |
if (error) |
fz_catch(error, "cannot draw shading"); |
break; |
case A('v'): pdf_run_v(csi); break; |
case A('w'): pdf_run_w(csi); break; |
case A('y'): pdf_run_y(csi); break; |
default: |
if (!csi->xbalance) |
fz_warn("unknown keyword: '%s'", buf); |
break; |
} |
return fz_okay; |
} |
static fz_error |
pdf_run_stream(pdf_csi *csi, fz_obj *rdb, fz_stream *file, char *buf, int buflen) |
{ |
fz_error error; |
int tok, len, in_array; |
/* make sure we have a clean slate if we come here from flush_text */ |
pdf_clear_stack(csi); |
in_array = 0; |
while (1) |
{ |
if (csi->top == nelem(csi->stack) - 1) |
return fz_throw("stack overflow"); |
error = pdf_lex(&tok, file, buf, buflen, &len); |
if (error) |
return fz_rethrow(error, "lexical error in content stream"); |
if (in_array) |
{ |
if (tok == PDF_TOK_CLOSE_ARRAY) |
{ |
in_array = 0; |
} |
else if (tok == PDF_TOK_INT || tok == PDF_TOK_REAL) |
{ |
pdf_gstate *gstate = csi->gstate + csi->gtop; |
pdf_show_space(csi, -fz_atof(buf) * gstate->size * 0.001f); |
} |
else if (tok == PDF_TOK_STRING) |
{ |
pdf_show_string(csi, (unsigned char *)buf, len); |
} |
else if (tok == PDF_TOK_KEYWORD) |
{ |
if (!strcmp(buf, "Tw") || !strcmp(buf, "Tc")) |
fz_warn("ignoring keyword '%s' inside array", buf); |
else |
return fz_throw("syntax error in array"); |
} |
else if (tok == PDF_TOK_EOF) |
return fz_okay; |
else |
return fz_throw("syntax error in array"); |
} |
else switch (tok) |
{ |
case PDF_TOK_ENDSTREAM: |
case PDF_TOK_EOF: |
return fz_okay; |
case PDF_TOK_OPEN_ARRAY: |
if (!csi->in_text) |
{ |
error = pdf_parse_array(&csi->obj, csi->xref, file, buf, buflen); |
if (error) |
return fz_rethrow(error, "cannot parse array"); |
} |
else |
{ |
in_array = 1; |
} |
break; |
case PDF_TOK_OPEN_DICT: |
error = pdf_parse_dict(&csi->obj, csi->xref, file, buf, buflen); |
if (error) |
return fz_rethrow(error, "cannot parse dictionary"); |
break; |
case PDF_TOK_NAME: |
fz_strlcpy(csi->name, buf, sizeof(csi->name)); |
break; |
case PDF_TOK_INT: |
csi->stack[csi->top] = atoi(buf); |
csi->top ++; |
break; |
case PDF_TOK_REAL: |
csi->stack[csi->top] = fz_atof(buf); |
csi->top ++; |
break; |
case PDF_TOK_STRING: |
if (len <= sizeof(csi->string)) |
{ |
memcpy(csi->string, buf, len); |
csi->string_len = len; |
} |
else |
{ |
csi->obj = fz_new_string(buf, len); |
} |
break; |
case PDF_TOK_KEYWORD: |
error = pdf_run_keyword(csi, rdb, file, buf); |
if (error) |
return fz_rethrow(error, "cannot run keyword"); |
pdf_clear_stack(csi); |
break; |
default: |
return fz_throw("syntax error in content stream"); |
} |
} |
} |
/* |
* Entry points |
*/ |
static fz_error |
pdf_run_buffer(pdf_csi *csi, fz_obj *rdb, fz_buffer *contents) |
{ |
fz_error error; |
int len = sizeof csi->xref->scratch; |
char *buf = fz_malloc(len); /* we must be re-entrant for type3 fonts */ |
fz_stream *file = fz_open_buffer(contents); |
int save_in_text = csi->in_text; |
csi->in_text = 0; |
error = pdf_run_stream(csi, rdb, file, buf, len); |
csi->in_text = save_in_text; |
fz_close(file); |
fz_free(buf); |
if (error) |
return fz_rethrow(error, "cannot parse content stream"); |
return fz_okay; |
} |
fz_error |
pdf_run_page_with_usage(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm, char *target) |
{ |
pdf_csi *csi; |
fz_error error; |
pdf_annot *annot; |
int flags; |
if (page->transparency) |
fz_begin_group(dev, fz_transform_rect(ctm, page->mediabox), 1, 0, 0, 1); |
csi = pdf_new_csi(xref, dev, ctm, target); |
error = pdf_run_buffer(csi, page->resources, page->contents); |
pdf_free_csi(csi); |
if (error) |
return fz_rethrow(error, "cannot parse page content stream"); |
for (annot = page->annots; annot; annot = annot->next) |
{ |
flags = fz_to_int(fz_dict_gets(annot->obj, "F")); |
/* TODO: NoZoom and NoRotate */ |
if (flags & (1 << 0)) /* Invisible */ |
continue; |
if (flags & (1 << 1)) /* Hidden */ |
continue; |
if (flags & (1 << 5)) /* NoView */ |
continue; |
if (pdf_is_hidden_ocg(annot->obj, target)) |
continue; |
csi = pdf_new_csi(xref, dev, ctm, target); |
error = pdf_run_xobject(csi, page->resources, annot->ap, annot->matrix); |
pdf_free_csi(csi); |
if (error) |
return fz_rethrow(error, "cannot parse annotation appearance stream"); |
} |
if (page->transparency) |
fz_end_group(dev); |
return fz_okay; |
} |
fz_error |
pdf_run_page(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm) |
{ |
return pdf_run_page_with_usage(xref, page, dev, ctm, "View"); |
} |
fz_error |
pdf_run_glyph(pdf_xref *xref, fz_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm) |
{ |
pdf_csi *csi = pdf_new_csi(xref, dev, ctm, "View"); |
fz_error error = pdf_run_buffer(csi, resources, contents); |
pdf_free_csi(csi); |
if (error) |
return fz_rethrow(error, "cannot parse glyph content stream"); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_lex.c |
---|
0,0 → 1,461 |
#include "fitz.h" |
#include "mupdf.h" |
#define IS_NUMBER \ |
'+':case'-':case'.':case'0':case'1':case'2':case'3':\ |
case'4':case'5':case'6':case'7':case'8':case'9' |
#define IS_WHITE \ |
'\000':case'\011':case'\012':case'\014':case'\015':case'\040' |
#define IS_HEX \ |
'0':case'1':case'2':case'3':case'4':case'5':case'6':\ |
case'7':case'8':case'9':case'A':case'B':case'C':\ |
case'D':case'E':case'F':case'a':case'b':case'c':\ |
case'd':case'e':case'f' |
#define IS_DELIM \ |
'(':case')':case'<':case'>':case'[':case']':case'{':\ |
case'}':case'/':case'%' |
#define RANGE_0_9 \ |
'0':case'1':case'2':case'3':case'4':case'5':\ |
case'6':case'7':case'8':case'9' |
#define RANGE_a_f \ |
'a':case'b':case'c':case'd':case'e':case'f' |
#define RANGE_A_F \ |
'A':case'B':case'C':case'D':case'E':case'F' |
static inline int iswhite(int ch) |
{ |
return |
ch == '\000' || |
ch == '\011' || |
ch == '\012' || |
ch == '\014' || |
ch == '\015' || |
ch == '\040'; |
} |
static inline int unhex(int ch) |
{ |
if (ch >= '0' && ch <= '9') return ch - '0'; |
if (ch >= 'A' && ch <= 'F') return ch - 'A' + 0xA; |
if (ch >= 'a' && ch <= 'f') return ch - 'a' + 0xA; |
return 0; |
} |
static void |
lex_white(fz_stream *f) |
{ |
int c; |
do { |
c = fz_read_byte(f); |
} while ((c <= 32) && (iswhite(c))); |
if (c != EOF) |
fz_unread_byte(f); |
} |
static void |
lex_comment(fz_stream *f) |
{ |
int c; |
do { |
c = fz_read_byte(f); |
} while ((c != '\012') && (c != '\015') && (c != EOF)); |
} |
static int |
lex_number(fz_stream *f, char *s, int n, int *tok) |
{ |
char *buf = s; |
*tok = PDF_TOK_INT; |
/* Initially we might have +, -, . or a digit */ |
if (n > 1) |
{ |
int c = fz_read_byte(f); |
switch (c) |
{ |
case '.': |
*tok = PDF_TOK_REAL; |
*s++ = c; |
n--; |
goto loop_after_dot; |
case '+': |
case '-': |
case RANGE_0_9: |
*s++ = c; |
n--; |
goto loop_after_sign; |
default: |
fz_unread_byte(f); |
goto end; |
case EOF: |
goto end; |
} |
} |
/* We can't accept a sign from here on in, just . or a digit */ |
loop_after_sign: |
while (n > 1) |
{ |
int c = fz_read_byte(f); |
switch (c) |
{ |
case '.': |
*tok = PDF_TOK_REAL; |
*s++ = c; |
n--; |
goto loop_after_dot; |
case RANGE_0_9: |
*s++ = c; |
break; |
default: |
fz_unread_byte(f); |
goto end; |
case EOF: |
goto end; |
} |
n--; |
} |
/* In here, we've seen a dot, so can accept just digits */ |
loop_after_dot: |
while (n > 1) |
{ |
int c = fz_read_byte(f); |
switch (c) |
{ |
case RANGE_0_9: |
*s++ = c; |
break; |
default: |
fz_unread_byte(f); |
goto end; |
case EOF: |
goto end; |
} |
n--; |
} |
end: |
*s = '\0'; |
return s-buf; |
} |
static void |
lex_name(fz_stream *f, char *s, int n) |
{ |
while (n > 1) |
{ |
int c = fz_read_byte(f); |
switch (c) |
{ |
case IS_WHITE: |
case IS_DELIM: |
fz_unread_byte(f); |
goto end; |
case EOF: |
goto end; |
case '#': |
{ |
int d; |
c = fz_read_byte(f); |
switch (c) |
{ |
case RANGE_0_9: |
d = (c - '0') << 4; |
break; |
case RANGE_a_f: |
d = (c - 'a' + 10) << 4; |
break; |
case RANGE_A_F: |
d = (c - 'A' + 10) << 4; |
break; |
default: |
fz_unread_byte(f); |
/* fallthrough */ |
case EOF: |
goto end; |
} |
c = fz_read_byte(f); |
switch (c) |
{ |
case RANGE_0_9: |
c -= '0'; |
break; |
case RANGE_a_f: |
c -= 'a' - 10; |
break; |
case RANGE_A_F: |
c -= 'A' - 10; |
break; |
default: |
fz_unread_byte(f); |
/* fallthrough */ |
case EOF: |
*s++ = d; |
n--; |
goto end; |
} |
*s++ = d + c; |
n--; |
break; |
} |
default: |
*s++ = c; |
n--; |
break; |
} |
} |
end: |
*s = '\0'; |
} |
static int |
lex_string(fz_stream *f, char *buf, int n) |
{ |
char *s = buf; |
char *e = buf + n; |
int bal = 1; |
int oct; |
int c; |
while (s < e) |
{ |
c = fz_read_byte(f); |
switch (c) |
{ |
case EOF: |
goto end; |
case '(': |
bal++; |
*s++ = c; |
break; |
case ')': |
bal --; |
if (bal == 0) |
goto end; |
*s++ = c; |
break; |
case '\\': |
c = fz_read_byte(f); |
switch (c) |
{ |
case EOF: |
goto end; |
case 'n': |
*s++ = '\n'; |
break; |
case 'r': |
*s++ = '\r'; |
break; |
case 't': |
*s++ = '\t'; |
break; |
case 'b': |
*s++ = '\b'; |
break; |
case 'f': |
*s++ = '\f'; |
break; |
case '(': |
*s++ = '('; |
break; |
case ')': |
*s++ = ')'; |
break; |
case '\\': |
*s++ = '\\'; |
break; |
case RANGE_0_9: |
oct = c - '0'; |
c = fz_read_byte(f); |
if (c >= '0' && c <= '9') |
{ |
oct = oct * 8 + (c - '0'); |
c = fz_read_byte(f); |
if (c >= '0' && c <= '9') |
oct = oct * 8 + (c - '0'); |
else if (c != EOF) |
fz_unread_byte(f); |
} |
else if (c != EOF) |
fz_unread_byte(f); |
*s++ = oct; |
break; |
case '\n': |
break; |
case '\r': |
c = fz_read_byte(f); |
if ((c != '\n') && (c != EOF)) |
fz_unread_byte(f); |
break; |
default: |
*s++ = c; |
} |
break; |
default: |
*s++ = c; |
break; |
} |
} |
end: |
return s - buf; |
} |
static int |
lex_hex_string(fz_stream *f, char *buf, int n) |
{ |
char *s = buf; |
char *e = buf + n; |
int a = 0, x = 0; |
int c; |
while (s < e) |
{ |
c = fz_read_byte(f); |
switch (c) |
{ |
case IS_WHITE: |
break; |
case IS_HEX: |
if (x) |
{ |
*s++ = a * 16 + unhex(c); |
x = !x; |
} |
else |
{ |
a = unhex(c); |
x = !x; |
} |
break; |
case '>': |
case EOF: |
goto end; |
default: |
fz_warn("ignoring invalid character in hex string: '%c'", c); |
} |
} |
end: |
return s - buf; |
} |
static int |
pdf_token_from_keyword(char *key) |
{ |
switch (*key) |
{ |
case 'R': |
if (!strcmp(key, "R")) return PDF_TOK_R; |
break; |
case 't': |
if (!strcmp(key, "true")) return PDF_TOK_TRUE; |
if (!strcmp(key, "trailer")) return PDF_TOK_TRAILER; |
break; |
case 'f': |
if (!strcmp(key, "false")) return PDF_TOK_FALSE; |
break; |
case 'n': |
if (!strcmp(key, "null")) return PDF_TOK_NULL; |
break; |
case 'o': |
if (!strcmp(key, "obj")) return PDF_TOK_OBJ; |
break; |
case 'e': |
if (!strcmp(key, "endobj")) return PDF_TOK_ENDOBJ; |
if (!strcmp(key, "endstream")) return PDF_TOK_ENDSTREAM; |
break; |
case 's': |
if (!strcmp(key, "stream")) return PDF_TOK_STREAM; |
if (!strcmp(key, "startxref")) return PDF_TOK_STARTXREF; |
break; |
case 'x': |
if (!strcmp(key, "xref")) return PDF_TOK_XREF; |
break; |
default: |
break; |
} |
return PDF_TOK_KEYWORD; |
} |
fz_error |
pdf_lex(int *tok, fz_stream *f, char *buf, int n, int *sl) |
{ |
while (1) |
{ |
int c = fz_read_byte(f); |
switch (c) |
{ |
case EOF: |
*tok = PDF_TOK_EOF; |
return fz_okay; |
case IS_WHITE: |
lex_white(f); |
break; |
case '%': |
lex_comment(f); |
break; |
case '/': |
lex_name(f, buf, n); |
*sl = strlen(buf); |
*tok = PDF_TOK_NAME; |
return fz_okay; |
case '(': |
*sl = lex_string(f, buf, n); |
*tok = PDF_TOK_STRING; |
return fz_okay; |
case ')': |
*tok = PDF_TOK_ERROR; |
goto cleanuperror; |
case '<': |
c = fz_read_byte(f); |
if (c == '<') |
{ |
*tok = PDF_TOK_OPEN_DICT; |
} |
else |
{ |
fz_unread_byte(f); |
*sl = lex_hex_string(f, buf, n); |
*tok = PDF_TOK_STRING; |
} |
return fz_okay; |
case '>': |
c = fz_read_byte(f); |
if (c == '>') |
{ |
*tok = PDF_TOK_CLOSE_DICT; |
return fz_okay; |
} |
*tok = PDF_TOK_ERROR; |
goto cleanuperror; |
case '[': |
*tok = PDF_TOK_OPEN_ARRAY; |
return fz_okay; |
case ']': |
*tok = PDF_TOK_CLOSE_ARRAY; |
return fz_okay; |
case '{': |
*tok = PDF_TOK_OPEN_BRACE; |
return fz_okay; |
case '}': |
*tok = PDF_TOK_CLOSE_BRACE; |
return fz_okay; |
case IS_NUMBER: |
fz_unread_byte(f); |
*sl = lex_number(f, buf, n, tok); |
return fz_okay; |
default: /* isregular: !isdelim && !iswhite && c != EOF */ |
fz_unread_byte(f); |
lex_name(f, buf, n); |
*sl = strlen(buf); |
*tok = pdf_token_from_keyword(buf); |
return fz_okay; |
} |
} |
cleanuperror: |
*tok = PDF_TOK_ERROR; |
return fz_throw("lexical error"); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_metrics.c |
---|
0,0 → 1,138 |
#include "fitz.h" |
#include "mupdf.h" |
void |
pdf_set_font_wmode(pdf_font_desc *font, int wmode) |
{ |
font->wmode = wmode; |
} |
void |
pdf_set_default_hmtx(pdf_font_desc *font, int w) |
{ |
font->dhmtx.w = w; |
} |
void |
pdf_set_default_vmtx(pdf_font_desc *font, int y, int w) |
{ |
font->dvmtx.y = y; |
font->dvmtx.w = w; |
} |
void |
pdf_add_hmtx(pdf_font_desc *font, int lo, int hi, int w) |
{ |
if (font->hmtx_len + 1 >= font->hmtx_cap) |
{ |
font->hmtx_cap = font->hmtx_cap + 16; |
font->hmtx = fz_realloc(font->hmtx, font->hmtx_cap, sizeof(pdf_hmtx)); |
} |
font->hmtx[font->hmtx_len].lo = lo; |
font->hmtx[font->hmtx_len].hi = hi; |
font->hmtx[font->hmtx_len].w = w; |
font->hmtx_len++; |
} |
void |
pdf_add_vmtx(pdf_font_desc *font, int lo, int hi, int x, int y, int w) |
{ |
if (font->vmtx_len + 1 >= font->vmtx_cap) |
{ |
font->vmtx_cap = font->vmtx_cap + 16; |
font->vmtx = fz_realloc(font->vmtx, font->vmtx_cap, sizeof(pdf_vmtx)); |
} |
font->vmtx[font->vmtx_len].lo = lo; |
font->vmtx[font->vmtx_len].hi = hi; |
font->vmtx[font->vmtx_len].x = x; |
font->vmtx[font->vmtx_len].y = y; |
font->vmtx[font->vmtx_len].w = w; |
font->vmtx_len++; |
} |
static int cmph(const void *a0, const void *b0) |
{ |
pdf_hmtx *a = (pdf_hmtx*)a0; |
pdf_hmtx *b = (pdf_hmtx*)b0; |
return a->lo - b->lo; |
} |
static int cmpv(const void *a0, const void *b0) |
{ |
pdf_vmtx *a = (pdf_vmtx*)a0; |
pdf_vmtx *b = (pdf_vmtx*)b0; |
return a->lo - b->lo; |
} |
void |
pdf_end_hmtx(pdf_font_desc *font) |
{ |
if (!font->hmtx) |
return; |
qsort(font->hmtx, font->hmtx_len, sizeof(pdf_hmtx), cmph); |
} |
void |
pdf_end_vmtx(pdf_font_desc *font) |
{ |
if (!font->vmtx) |
return; |
qsort(font->vmtx, font->vmtx_len, sizeof(pdf_vmtx), cmpv); |
} |
pdf_hmtx |
pdf_get_hmtx(pdf_font_desc *font, int cid) |
{ |
int l = 0; |
int r = font->hmtx_len - 1; |
int m; |
if (!font->hmtx) |
goto notfound; |
while (l <= r) |
{ |
m = (l + r) >> 1; |
if (cid < font->hmtx[m].lo) |
r = m - 1; |
else if (cid > font->hmtx[m].hi) |
l = m + 1; |
else |
return font->hmtx[m]; |
} |
notfound: |
return font->dhmtx; |
} |
pdf_vmtx |
pdf_get_vmtx(pdf_font_desc *font, int cid) |
{ |
pdf_hmtx h; |
pdf_vmtx v; |
int l = 0; |
int r = font->vmtx_len - 1; |
int m; |
if (!font->vmtx) |
goto notfound; |
while (l <= r) |
{ |
m = (l + r) >> 1; |
if (cid < font->vmtx[m].lo) |
r = m - 1; |
else if (cid > font->vmtx[m].hi) |
l = m + 1; |
else |
return font->vmtx[m]; |
} |
notfound: |
h = pdf_get_hmtx(font, cid); |
v = font->dvmtx; |
v.x = h.w / 2; |
return v; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_nametree.c |
---|
0,0 → 1,139 |
#include "fitz.h" |
#include "mupdf.h" |
static fz_obj * |
pdf_lookup_name_imp(fz_obj *node, fz_obj *needle) |
{ |
fz_obj *kids = fz_dict_gets(node, "Kids"); |
fz_obj *names = fz_dict_gets(node, "Names"); |
if (fz_is_array(kids)) |
{ |
int l = 0; |
int r = fz_array_len(kids) - 1; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
fz_obj *kid = fz_array_get(kids, m); |
fz_obj *limits = fz_dict_gets(kid, "Limits"); |
fz_obj *first = fz_array_get(limits, 0); |
fz_obj *last = fz_array_get(limits, 1); |
if (fz_objcmp(needle, first) < 0) |
r = m - 1; |
else if (fz_objcmp(needle, last) > 0) |
l = m + 1; |
else |
return pdf_lookup_name_imp(kid, needle); |
} |
} |
if (fz_is_array(names)) |
{ |
int l = 0; |
int r = (fz_array_len(names) / 2) - 1; |
while (l <= r) |
{ |
int m = (l + r) >> 1; |
int c; |
fz_obj *key = fz_array_get(names, m * 2); |
fz_obj *val = fz_array_get(names, m * 2 + 1); |
c = fz_objcmp(needle, key); |
if (c < 0) |
r = m - 1; |
else if (c > 0) |
l = m + 1; |
else |
return val; |
} |
} |
return NULL; |
} |
fz_obj * |
pdf_lookup_name(pdf_xref *xref, char *which, fz_obj *needle) |
{ |
fz_obj *root = fz_dict_gets(xref->trailer, "Root"); |
fz_obj *names = fz_dict_gets(root, "Names"); |
fz_obj *tree = fz_dict_gets(names, which); |
return pdf_lookup_name_imp(tree, needle); |
} |
fz_obj * |
pdf_lookup_dest(pdf_xref *xref, fz_obj *needle) |
{ |
fz_obj *root = fz_dict_gets(xref->trailer, "Root"); |
fz_obj *dests = fz_dict_gets(root, "Dests"); |
fz_obj *names = fz_dict_gets(root, "Names"); |
fz_obj *dest = NULL; |
/* PDF 1.1 has destinations in a dictionary */ |
if (dests) |
{ |
if (fz_is_name(needle)) |
return fz_dict_get(dests, needle); |
else |
return fz_dict_gets(dests, fz_to_str_buf(needle)); |
} |
/* PDF 1.2 has destinations in a name tree */ |
if (names && !dest) |
{ |
fz_obj *tree = fz_dict_gets(names, "Dests"); |
return pdf_lookup_name_imp(tree, needle); |
} |
return NULL; |
} |
static void |
pdf_load_name_tree_imp(fz_obj *dict, pdf_xref *xref, fz_obj *node) |
{ |
fz_obj *kids = fz_dict_gets(node, "Kids"); |
fz_obj *names = fz_dict_gets(node, "Names"); |
int i; |
if (kids) |
{ |
for (i = 0; i < fz_array_len(kids); i++) |
pdf_load_name_tree_imp(dict, xref, fz_array_get(kids, i)); |
} |
if (names) |
{ |
for (i = 0; i + 1 < fz_array_len(names); i += 2) |
{ |
fz_obj *key = fz_array_get(names, i); |
fz_obj *val = fz_array_get(names, i + 1); |
if (fz_is_string(key)) |
{ |
key = pdf_to_utf8_name(key); |
fz_dict_put(dict, key, val); |
fz_drop_obj(key); |
} |
else if (fz_is_name(key)) |
{ |
fz_dict_put(dict, key, val); |
} |
} |
} |
} |
fz_obj * |
pdf_load_name_tree(pdf_xref *xref, char *which) |
{ |
fz_obj *root = fz_dict_gets(xref->trailer, "Root"); |
fz_obj *names = fz_dict_gets(root, "Names"); |
fz_obj *tree = fz_dict_gets(names, which); |
if (fz_is_dict(tree)) |
{ |
fz_obj *dict = fz_new_dict(100); |
pdf_load_name_tree_imp(dict, xref, tree); |
return dict; |
} |
return NULL; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_outline.c |
---|
0,0 → 1,93 |
#include "fitz.h" |
#include "mupdf.h" |
static pdf_outline * |
pdf_load_outline_imp(pdf_xref *xref, fz_obj *dict) |
{ |
pdf_outline *node; |
fz_obj *obj; |
if (fz_is_null(dict)) |
return NULL; |
node = fz_malloc(sizeof(pdf_outline)); |
node->title = NULL; |
node->link = NULL; |
node->child = NULL; |
node->next = NULL; |
node->count = 0; |
obj = fz_dict_gets(dict, "Title"); |
if (obj) |
node->title = pdf_to_utf8(obj); |
obj = fz_dict_gets(dict, "Count"); |
if (obj) |
node->count = fz_to_int(obj); |
if (fz_dict_gets(dict, "Dest") || fz_dict_gets(dict, "A")) |
node->link = pdf_load_link(xref, dict); |
obj = fz_dict_gets(dict, "First"); |
if (obj) |
node->child = pdf_load_outline_imp(xref, obj); |
obj = fz_dict_gets(dict, "Next"); |
if (obj) |
node->next = pdf_load_outline_imp(xref, obj); |
return node; |
} |
pdf_outline * |
pdf_load_outline(pdf_xref *xref) |
{ |
fz_obj *root, *obj, *first; |
root = fz_dict_gets(xref->trailer, "Root"); |
obj = fz_dict_gets(root, "Outlines"); |
first = fz_dict_gets(obj, "First"); |
if (first) |
return pdf_load_outline_imp(xref, first); |
return NULL; |
} |
void |
pdf_free_outline(pdf_outline *outline) |
{ |
if (outline->child) |
pdf_free_outline(outline->child); |
if (outline->next) |
pdf_free_outline(outline->next); |
if (outline->link) |
pdf_free_link(outline->link); |
fz_free(outline->title); |
fz_free(outline); |
} |
void |
pdf_debug_outline(pdf_outline *outline, int level) |
{ |
int i; |
while (outline) |
{ |
for (i = 0; i < level; i++) |
putchar(' '); |
if (outline->title) |
printf("%s ", outline->title); |
else |
printf("<NULL> "); |
if (outline->link) |
fz_debug_obj(outline->link->dest); |
else |
printf("<NULL>\n"); |
if (outline->child) |
pdf_debug_outline(outline->child, level + 2); |
outline = outline->next; |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_page.c |
---|
0,0 → 1,370 |
#include "fitz.h" |
#include "mupdf.h" |
struct info |
{ |
fz_obj *resources; |
fz_obj *mediabox; |
fz_obj *cropbox; |
fz_obj *rotate; |
}; |
int |
pdf_count_pages(pdf_xref *xref) |
{ |
return xref->page_len; |
} |
int |
pdf_find_page_number(pdf_xref *xref, fz_obj *page) |
{ |
int i, num = fz_to_num(page); |
for (i = 0; i < xref->page_len; i++) |
if (num == fz_to_num(xref->page_refs[i])) |
return i; |
return -1; |
} |
static void |
pdf_load_page_tree_node(pdf_xref *xref, fz_obj *node, struct info info) |
{ |
fz_obj *dict, *kids, *count; |
fz_obj *obj, *tmp; |
int i, n; |
/* prevent infinite recursion */ |
if (fz_dict_gets(node, ".seen")) |
return; |
kids = fz_dict_gets(node, "Kids"); |
count = fz_dict_gets(node, "Count"); |
if (fz_is_array(kids) && fz_is_int(count)) |
{ |
obj = fz_dict_gets(node, "Resources"); |
if (obj) |
info.resources = obj; |
obj = fz_dict_gets(node, "MediaBox"); |
if (obj) |
info.mediabox = obj; |
obj = fz_dict_gets(node, "CropBox"); |
if (obj) |
info.cropbox = obj; |
obj = fz_dict_gets(node, "Rotate"); |
if (obj) |
info.rotate = obj; |
tmp = fz_new_null(); |
fz_dict_puts(node, ".seen", tmp); |
fz_drop_obj(tmp); |
n = fz_array_len(kids); |
for (i = 0; i < n; i++) |
{ |
obj = fz_array_get(kids, i); |
pdf_load_page_tree_node(xref, obj, info); |
} |
fz_dict_dels(node, ".seen"); |
} |
else |
{ |
dict = fz_resolve_indirect(node); |
if (info.resources && !fz_dict_gets(dict, "Resources")) |
fz_dict_puts(dict, "Resources", info.resources); |
if (info.mediabox && !fz_dict_gets(dict, "MediaBox")) |
fz_dict_puts(dict, "MediaBox", info.mediabox); |
if (info.cropbox && !fz_dict_gets(dict, "CropBox")) |
fz_dict_puts(dict, "CropBox", info.cropbox); |
if (info.rotate && !fz_dict_gets(dict, "Rotate")) |
fz_dict_puts(dict, "Rotate", info.rotate); |
if (xref->page_len == xref->page_cap) |
{ |
fz_warn("found more pages than expected"); |
xref->page_cap ++; |
xref->page_refs = fz_realloc(xref->page_refs, xref->page_cap, sizeof(fz_obj*)); |
xref->page_objs = fz_realloc(xref->page_objs, xref->page_cap, sizeof(fz_obj*)); |
} |
xref->page_refs[xref->page_len] = fz_keep_obj(node); |
xref->page_objs[xref->page_len] = fz_keep_obj(dict); |
xref->page_len ++; |
} |
} |
fz_error |
pdf_load_page_tree(pdf_xref *xref) |
{ |
struct info info; |
fz_obj *catalog = fz_dict_gets(xref->trailer, "Root"); |
fz_obj *pages = fz_dict_gets(catalog, "Pages"); |
fz_obj *count = fz_dict_gets(pages, "Count"); |
if (!fz_is_dict(pages)) |
return fz_throw("missing page tree"); |
if (!fz_is_int(count)) |
return fz_throw("missing page count"); |
xref->page_cap = fz_to_int(count); |
xref->page_len = 0; |
xref->page_refs = fz_calloc(xref->page_cap, sizeof(fz_obj*)); |
xref->page_objs = fz_calloc(xref->page_cap, sizeof(fz_obj*)); |
info.resources = NULL; |
info.mediabox = NULL; |
info.cropbox = NULL; |
info.rotate = NULL; |
pdf_load_page_tree_node(xref, pages, info); |
return fz_okay; |
} |
/* We need to know whether to install a page-level transparency group */ |
static int pdf_resources_use_blending(fz_obj *rdb); |
static int |
pdf_extgstate_uses_blending(fz_obj *dict) |
{ |
fz_obj *obj = fz_dict_gets(dict, "BM"); |
if (fz_is_name(obj) && strcmp(fz_to_name(obj), "Normal")) |
return 1; |
return 0; |
} |
static int |
pdf_pattern_uses_blending(fz_obj *dict) |
{ |
fz_obj *obj; |
obj = fz_dict_gets(dict, "Resources"); |
if (pdf_resources_use_blending(obj)) |
return 1; |
obj = fz_dict_gets(dict, "ExtGState"); |
if (pdf_extgstate_uses_blending(obj)) |
return 1; |
return 0; |
} |
static int |
pdf_xobject_uses_blending(fz_obj *dict) |
{ |
fz_obj *obj = fz_dict_gets(dict, "Resources"); |
if (pdf_resources_use_blending(obj)) |
return 1; |
return 0; |
} |
static int |
pdf_resources_use_blending(fz_obj *rdb) |
{ |
fz_obj *dict; |
fz_obj *tmp; |
int i; |
if (!rdb) |
return 0; |
/* stop on cyclic resource dependencies */ |
if (fz_dict_gets(rdb, ".useBM")) |
return fz_to_bool(fz_dict_gets(rdb, ".useBM")); |
tmp = fz_new_bool(0); |
fz_dict_puts(rdb, ".useBM", tmp); |
fz_drop_obj(tmp); |
dict = fz_dict_gets(rdb, "ExtGState"); |
for (i = 0; i < fz_dict_len(dict); i++) |
if (pdf_extgstate_uses_blending(fz_dict_get_val(dict, i))) |
goto found; |
dict = fz_dict_gets(rdb, "Pattern"); |
for (i = 0; i < fz_dict_len(dict); i++) |
if (pdf_pattern_uses_blending(fz_dict_get_val(dict, i))) |
goto found; |
dict = fz_dict_gets(rdb, "XObject"); |
for (i = 0; i < fz_dict_len(dict); i++) |
if (pdf_xobject_uses_blending(fz_dict_get_val(dict, i))) |
goto found; |
return 0; |
found: |
tmp = fz_new_bool(1); |
fz_dict_puts(rdb, ".useBM", tmp); |
fz_drop_obj(tmp); |
return 1; |
} |
/* we need to combine all sub-streams into one for the content stream interpreter */ |
static fz_error |
pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list) |
{ |
fz_error error; |
fz_buffer *big; |
fz_buffer *one; |
int i, n; |
big = fz_new_buffer(32 * 1024); |
n = fz_array_len(list); |
for (i = 0; i < n; i++) |
{ |
fz_obj *stm = fz_array_get(list, i); |
error = pdf_load_stream(&one, xref, fz_to_num(stm), fz_to_gen(stm)); |
if (error) |
{ |
fz_catch(error, "cannot load content stream part %d/%d", i + 1, n); |
continue; |
} |
if (big->len + one->len + 1 > big->cap) |
fz_resize_buffer(big, big->len + one->len + 1); |
memcpy(big->data + big->len, one->data, one->len); |
big->data[big->len + one->len] = ' '; |
big->len += one->len + 1; |
fz_drop_buffer(one); |
} |
if (n > 0 && big->len == 0) |
{ |
fz_drop_buffer(big); |
return fz_throw("cannot load content stream"); |
} |
*bigbufp = big; |
return fz_okay; |
} |
static fz_error |
pdf_load_page_contents(fz_buffer **bufp, pdf_xref *xref, fz_obj *obj) |
{ |
fz_error error; |
if (fz_is_array(obj)) |
{ |
error = pdf_load_page_contents_array(bufp, xref, obj); |
if (error) |
return fz_rethrow(error, "cannot load content stream array"); |
} |
else if (pdf_is_stream(xref, fz_to_num(obj), fz_to_gen(obj))) |
{ |
error = pdf_load_stream(bufp, xref, fz_to_num(obj), fz_to_gen(obj)); |
if (error) |
return fz_rethrow(error, "cannot load content stream (%d 0 R)", fz_to_num(obj)); |
} |
else |
{ |
fz_warn("page contents missing, leaving page blank"); |
*bufp = fz_new_buffer(0); |
} |
return fz_okay; |
} |
fz_error |
pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number) |
{ |
fz_error error; |
pdf_page *page; |
pdf_annot *annot; |
fz_obj *pageobj, *pageref; |
fz_obj *obj; |
fz_bbox bbox; |
if (number < 0 || number >= xref->page_len) |
return fz_throw("cannot find page %d", number + 1); |
/* Ensure that we have a store for resource objects */ |
if (!xref->store) |
xref->store = pdf_new_store(); |
pageobj = xref->page_objs[number]; |
pageref = xref->page_refs[number]; |
page = fz_malloc(sizeof(pdf_page)); |
page->resources = NULL; |
page->contents = NULL; |
page->transparency = 0; |
page->links = NULL; |
page->annots = NULL; |
obj = fz_dict_gets(pageobj, "MediaBox"); |
bbox = fz_round_rect(pdf_to_rect(obj)); |
if (fz_is_empty_rect(pdf_to_rect(obj))) |
{ |
fz_warn("cannot find page size for page %d", number + 1); |
bbox.x0 = 0; |
bbox.y0 = 0; |
bbox.x1 = 612; |
bbox.y1 = 792; |
} |
obj = fz_dict_gets(pageobj, "CropBox"); |
if (fz_is_array(obj)) |
{ |
fz_bbox cropbox = fz_round_rect(pdf_to_rect(obj)); |
bbox = fz_intersect_bbox(bbox, cropbox); |
} |
page->mediabox.x0 = MIN(bbox.x0, bbox.x1); |
page->mediabox.y0 = MIN(bbox.y0, bbox.y1); |
page->mediabox.x1 = MAX(bbox.x0, bbox.x1); |
page->mediabox.y1 = MAX(bbox.y0, bbox.y1); |
if (page->mediabox.x1 - page->mediabox.x0 < 1 || page->mediabox.y1 - page->mediabox.y0 < 1) |
{ |
fz_warn("invalid page size in page %d", number + 1); |
page->mediabox = fz_unit_rect; |
} |
page->rotate = fz_to_int(fz_dict_gets(pageobj, "Rotate")); |
obj = fz_dict_gets(pageobj, "Annots"); |
if (obj) |
{ |
pdf_load_links(&page->links, xref, obj); |
pdf_load_annots(&page->annots, xref, obj); |
} |
page->resources = fz_dict_gets(pageobj, "Resources"); |
if (page->resources) |
fz_keep_obj(page->resources); |
obj = fz_dict_gets(pageobj, "Contents"); |
error = pdf_load_page_contents(&page->contents, xref, obj); |
if (error) |
{ |
pdf_free_page(page); |
return fz_rethrow(error, "cannot load page %d contents (%d 0 R)", number + 1, fz_to_num(pageref)); |
} |
if (pdf_resources_use_blending(page->resources)) |
page->transparency = 1; |
for (annot = page->annots; annot && !page->transparency; annot = annot->next) |
if (pdf_resources_use_blending(annot->ap->resources)) |
page->transparency = 1; |
*pagep = page; |
return fz_okay; |
} |
void |
pdf_free_page(pdf_page *page) |
{ |
if (page->resources) |
fz_drop_obj(page->resources); |
if (page->contents) |
fz_drop_buffer(page->contents); |
if (page->links) |
pdf_free_link(page->links); |
if (page->annots) |
pdf_free_annot(page->annots); |
fz_free(page); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_parse.c |
---|
0,0 → 1,581 |
#include "fitz.h" |
#include "mupdf.h" |
fz_rect |
pdf_to_rect(fz_obj *array) |
{ |
fz_rect r; |
float a = fz_to_real(fz_array_get(array, 0)); |
float b = fz_to_real(fz_array_get(array, 1)); |
float c = fz_to_real(fz_array_get(array, 2)); |
float d = fz_to_real(fz_array_get(array, 3)); |
r.x0 = MIN(a, c); |
r.y0 = MIN(b, d); |
r.x1 = MAX(a, c); |
r.y1 = MAX(b, d); |
return r; |
} |
fz_matrix |
pdf_to_matrix(fz_obj *array) |
{ |
fz_matrix m; |
m.a = fz_to_real(fz_array_get(array, 0)); |
m.b = fz_to_real(fz_array_get(array, 1)); |
m.c = fz_to_real(fz_array_get(array, 2)); |
m.d = fz_to_real(fz_array_get(array, 3)); |
m.e = fz_to_real(fz_array_get(array, 4)); |
m.f = fz_to_real(fz_array_get(array, 5)); |
return m; |
} |
/* Convert Unicode/PdfDocEncoding string into utf-8 */ |
char * |
pdf_to_utf8(fz_obj *src) |
{ |
unsigned char *srcptr = (unsigned char *) fz_to_str_buf(src); |
char *dstptr, *dst; |
int srclen = fz_to_str_len(src); |
int dstlen = 0; |
int ucs; |
int i; |
if (srclen > 2 && srcptr[0] == 254 && srcptr[1] == 255) |
{ |
for (i = 2; i < srclen; i += 2) |
{ |
ucs = (srcptr[i] << 8) | srcptr[i+1]; |
dstlen += runelen(ucs); |
} |
dstptr = dst = fz_malloc(dstlen + 1); |
for (i = 2; i < srclen; i += 2) |
{ |
ucs = (srcptr[i] << 8) | srcptr[i+1]; |
dstptr += runetochar(dstptr, &ucs); |
} |
} |
else |
{ |
for (i = 0; i < srclen; i++) |
dstlen += runelen(pdf_doc_encoding[srcptr[i]]); |
dstptr = dst = fz_malloc(dstlen + 1); |
for (i = 0; i < srclen; i++) |
{ |
ucs = pdf_doc_encoding[srcptr[i]]; |
dstptr += runetochar(dstptr, &ucs); |
} |
} |
*dstptr = '\0'; |
return dst; |
} |
/* Convert Unicode/PdfDocEncoding string into ucs-2 */ |
unsigned short * |
pdf_to_ucs2(fz_obj *src) |
{ |
unsigned char *srcptr = (unsigned char *) fz_to_str_buf(src); |
unsigned short *dstptr, *dst; |
int srclen = fz_to_str_len(src); |
int i; |
if (srclen > 2 && srcptr[0] == 254 && srcptr[1] == 255) |
{ |
dstptr = dst = fz_calloc((srclen - 2) / 2 + 1, sizeof(short)); |
for (i = 2; i < srclen; i += 2) |
*dstptr++ = (srcptr[i] << 8) | srcptr[i+1]; |
} |
else |
{ |
dstptr = dst = fz_calloc(srclen + 1, sizeof(short)); |
for (i = 0; i < srclen; i++) |
*dstptr++ = pdf_doc_encoding[srcptr[i]]; |
} |
*dstptr = '\0'; |
return dst; |
} |
/* Convert UCS-2 string into PdfDocEncoding for authentication */ |
char * |
pdf_from_ucs2(unsigned short *src) |
{ |
int i, j, len; |
char *docstr; |
len = 0; |
while (src[len]) |
len++; |
docstr = fz_malloc(len + 1); |
for (i = 0; i < len; i++) |
{ |
/* shortcut: check if the character has the same code point in both encodings */ |
if (0 < src[i] && src[i] < 256 && pdf_doc_encoding[src[i]] == src[i]) { |
docstr[i] = src[i]; |
continue; |
} |
/* search through pdf_docencoding for the character's code point */ |
for (j = 0; j < 256; j++) |
if (pdf_doc_encoding[j] == src[i]) |
break; |
docstr[i] = j; |
/* fail, if a character can't be encoded */ |
if (!docstr[i]) |
{ |
fz_free(docstr); |
return NULL; |
} |
} |
docstr[len] = '\0'; |
return docstr; |
} |
fz_obj * |
pdf_to_utf8_name(fz_obj *src) |
{ |
char *buf = pdf_to_utf8(src); |
fz_obj *dst = fz_new_name(buf); |
fz_free(buf); |
return dst; |
} |
fz_error |
pdf_parse_array(fz_obj **op, pdf_xref *xref, fz_stream *file, char *buf, int cap) |
{ |
fz_error error = fz_okay; |
fz_obj *ary = NULL; |
fz_obj *obj = NULL; |
int a = 0, b = 0, n = 0; |
int tok; |
int len; |
ary = fz_new_array(4); |
while (1) |
{ |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(ary); |
return fz_rethrow(error, "cannot parse array"); |
} |
if (tok != PDF_TOK_INT && tok != PDF_TOK_R) |
{ |
if (n > 0) |
{ |
obj = fz_new_int(a); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
} |
if (n > 1) |
{ |
obj = fz_new_int(b); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
} |
n = 0; |
} |
if (tok == PDF_TOK_INT && n == 2) |
{ |
obj = fz_new_int(a); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
a = b; |
n --; |
} |
switch (tok) |
{ |
case PDF_TOK_CLOSE_ARRAY: |
*op = ary; |
return fz_okay; |
case PDF_TOK_INT: |
if (n == 0) |
a = atoi(buf); |
if (n == 1) |
b = atoi(buf); |
n ++; |
break; |
case PDF_TOK_R: |
if (n != 2) |
{ |
fz_drop_obj(ary); |
return fz_throw("cannot parse indirect reference in array"); |
} |
obj = fz_new_indirect(a, b, xref); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
n = 0; |
break; |
case PDF_TOK_OPEN_ARRAY: |
error = pdf_parse_array(&obj, xref, file, buf, cap); |
if (error) |
{ |
fz_drop_obj(ary); |
return fz_rethrow(error, "cannot parse array"); |
} |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_OPEN_DICT: |
error = pdf_parse_dict(&obj, xref, file, buf, cap); |
if (error) |
{ |
fz_drop_obj(ary); |
return fz_rethrow(error, "cannot parse array"); |
} |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_NAME: |
obj = fz_new_name(buf); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_REAL: |
obj = fz_new_real(fz_atof(buf)); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_STRING: |
obj = fz_new_string(buf, len); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_TRUE: |
obj = fz_new_bool(1); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_FALSE: |
obj = fz_new_bool(0); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
case PDF_TOK_NULL: |
obj = fz_new_null(); |
fz_array_push(ary, obj); |
fz_drop_obj(obj); |
break; |
default: |
fz_drop_obj(ary); |
return fz_throw("cannot parse token in array"); |
} |
} |
} |
fz_error |
pdf_parse_dict(fz_obj **op, pdf_xref *xref, fz_stream *file, char *buf, int cap) |
{ |
fz_error error = fz_okay; |
fz_obj *dict = NULL; |
fz_obj *key = NULL; |
fz_obj *val = NULL; |
int tok; |
int len; |
int a, b; |
dict = fz_new_dict(8); |
while (1) |
{ |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
skip: |
if (tok == PDF_TOK_CLOSE_DICT) |
{ |
*op = dict; |
return fz_okay; |
} |
/* for BI .. ID .. EI in content streams */ |
if (tok == PDF_TOK_KEYWORD && !strcmp(buf, "ID")) |
{ |
*op = dict; |
return fz_okay; |
} |
if (tok != PDF_TOK_NAME) |
{ |
fz_drop_obj(dict); |
return fz_throw("invalid key in dict"); |
} |
key = fz_new_name(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
switch (tok) |
{ |
case PDF_TOK_OPEN_ARRAY: |
error = pdf_parse_array(&val, xref, file, buf, cap); |
if (error) |
{ |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
break; |
case PDF_TOK_OPEN_DICT: |
error = pdf_parse_dict(&val, xref, file, buf, cap); |
if (error) |
{ |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
break; |
case PDF_TOK_NAME: val = fz_new_name(buf); break; |
case PDF_TOK_REAL: val = fz_new_real(fz_atof(buf)); break; |
case PDF_TOK_STRING: val = fz_new_string(buf, len); break; |
case PDF_TOK_TRUE: val = fz_new_bool(1); break; |
case PDF_TOK_FALSE: val = fz_new_bool(0); break; |
case PDF_TOK_NULL: val = fz_new_null(); break; |
case PDF_TOK_INT: |
/* 64-bit to allow for numbers > INT_MAX and overflow */ |
a = (int) strtoll(buf, 0, 10); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
if (tok == PDF_TOK_CLOSE_DICT || tok == PDF_TOK_NAME || |
(tok == PDF_TOK_KEYWORD && !strcmp(buf, "ID"))) |
{ |
val = fz_new_int(a); |
fz_dict_put(dict, key, val); |
fz_drop_obj(val); |
fz_drop_obj(key); |
goto skip; |
} |
if (tok == PDF_TOK_INT) |
{ |
b = atoi(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_rethrow(error, "cannot parse dict"); |
} |
if (tok == PDF_TOK_R) |
{ |
val = fz_new_indirect(a, b, xref); |
break; |
} |
} |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_throw("invalid indirect reference in dict"); |
default: |
fz_drop_obj(key); |
fz_drop_obj(dict); |
return fz_throw("unknown token in dict"); |
} |
fz_dict_put(dict, key, val); |
fz_drop_obj(val); |
fz_drop_obj(key); |
} |
} |
fz_error |
pdf_parse_stm_obj(fz_obj **op, pdf_xref *xref, fz_stream *file, char *buf, int cap) |
{ |
fz_error error; |
int tok; |
int len; |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse token in object stream"); |
switch (tok) |
{ |
case PDF_TOK_OPEN_ARRAY: |
error = pdf_parse_array(op, xref, file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse object stream"); |
break; |
case PDF_TOK_OPEN_DICT: |
error = pdf_parse_dict(op, xref, file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse object stream"); |
break; |
case PDF_TOK_NAME: *op = fz_new_name(buf); break; |
case PDF_TOK_REAL: *op = fz_new_real(fz_atof(buf)); break; |
case PDF_TOK_STRING: *op = fz_new_string(buf, len); break; |
case PDF_TOK_TRUE: *op = fz_new_bool(1); break; |
case PDF_TOK_FALSE: *op = fz_new_bool(0); break; |
case PDF_TOK_NULL: *op = fz_new_null(); break; |
case PDF_TOK_INT: *op = fz_new_int(atoi(buf)); break; |
default: return fz_throw("unknown token in object stream"); |
} |
return fz_okay; |
} |
fz_error |
pdf_parse_ind_obj(fz_obj **op, pdf_xref *xref, |
fz_stream *file, char *buf, int cap, |
int *onum, int *ogen, int *ostmofs) |
{ |
fz_error error = fz_okay; |
fz_obj *obj = NULL; |
int num = 0, gen = 0, stm_ofs; |
int tok; |
int len; |
int a, b; |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
if (tok != PDF_TOK_INT) |
return fz_throw("expected object number (%d %d R)", num, gen); |
num = atoi(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
if (tok != PDF_TOK_INT) |
return fz_throw("expected generation number (%d %d R)", num, gen); |
gen = atoi(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
if (tok != PDF_TOK_OBJ) |
return fz_throw("expected 'obj' keyword (%d %d R)", num, gen); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
switch (tok) |
{ |
case PDF_TOK_OPEN_ARRAY: |
error = pdf_parse_array(&obj, xref, file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
break; |
case PDF_TOK_OPEN_DICT: |
error = pdf_parse_dict(&obj, xref, file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
break; |
case PDF_TOK_NAME: obj = fz_new_name(buf); break; |
case PDF_TOK_REAL: obj = fz_new_real(fz_atof(buf)); break; |
case PDF_TOK_STRING: obj = fz_new_string(buf, len); break; |
case PDF_TOK_TRUE: obj = fz_new_bool(1); break; |
case PDF_TOK_FALSE: obj = fz_new_bool(0); break; |
case PDF_TOK_NULL: obj = fz_new_null(); break; |
case PDF_TOK_INT: |
a = atoi(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
if (tok == PDF_TOK_STREAM || tok == PDF_TOK_ENDOBJ) |
{ |
obj = fz_new_int(a); |
goto skip; |
} |
if (tok == PDF_TOK_INT) |
{ |
b = atoi(buf); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
if (tok == PDF_TOK_R) |
{ |
obj = fz_new_indirect(a, b, xref); |
break; |
} |
} |
return fz_throw("expected 'R' keyword (%d %d R)", num, gen); |
case PDF_TOK_ENDOBJ: |
obj = fz_new_null(); |
goto skip; |
default: |
return fz_throw("syntax error in object (%d %d R)", num, gen); |
} |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
{ |
fz_drop_obj(obj); |
return fz_rethrow(error, "cannot parse indirect object (%d %d R)", num, gen); |
} |
skip: |
if (tok == PDF_TOK_STREAM) |
{ |
int c = fz_read_byte(file); |
while (c == ' ') |
c = fz_read_byte(file); |
if (c == '\r') |
{ |
c = fz_peek_byte(file); |
if (c != '\n') |
fz_warn("line feed missing after stream begin marker (%d %d R)", num, gen); |
else |
fz_read_byte(file); |
} |
stm_ofs = fz_tell(file); |
} |
else if (tok == PDF_TOK_ENDOBJ) |
{ |
stm_ofs = 0; |
} |
else |
{ |
fz_warn("expected 'endobj' or 'stream' keyword (%d %d R)", num, gen); |
stm_ofs = 0; |
} |
if (onum) *onum = num; |
if (ogen) *ogen = gen; |
if (ostmofs) *ostmofs = stm_ofs; |
*op = obj; |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_pattern.c |
---|
0,0 → 1,72 |
#include "fitz.h" |
#include "mupdf.h" |
fz_error |
pdf_load_pattern(pdf_pattern **patp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
pdf_pattern *pat; |
fz_obj *obj; |
if ((*patp = pdf_find_item(xref->store, pdf_drop_pattern, dict))) |
{ |
pdf_keep_pattern(*patp); |
return fz_okay; |
} |
pat = fz_malloc(sizeof(pdf_pattern)); |
pat->refs = 1; |
pat->resources = NULL; |
pat->contents = NULL; |
/* Store pattern now, to avoid possible recursion if objects refer back to this one */ |
pdf_store_item(xref->store, pdf_keep_pattern, pdf_drop_pattern, dict, pat); |
pat->ismask = fz_to_int(fz_dict_gets(dict, "PaintType")) == 2; |
pat->xstep = fz_to_real(fz_dict_gets(dict, "XStep")); |
pat->ystep = fz_to_real(fz_dict_gets(dict, "YStep")); |
obj = fz_dict_gets(dict, "BBox"); |
pat->bbox = pdf_to_rect(obj); |
obj = fz_dict_gets(dict, "Matrix"); |
if (obj) |
pat->matrix = pdf_to_matrix(obj); |
else |
pat->matrix = fz_identity; |
pat->resources = fz_dict_gets(dict, "Resources"); |
if (pat->resources) |
fz_keep_obj(pat->resources); |
error = pdf_load_stream(&pat->contents, xref, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
pdf_remove_item(xref->store, pdf_drop_pattern, dict); |
pdf_drop_pattern(pat); |
return fz_rethrow(error, "cannot load pattern stream (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
*patp = pat; |
return fz_okay; |
} |
pdf_pattern * |
pdf_keep_pattern(pdf_pattern *pat) |
{ |
pat->refs ++; |
return pat; |
} |
void |
pdf_drop_pattern(pdf_pattern *pat) |
{ |
if (pat && --pat->refs == 0) |
{ |
if (pat->resources) |
fz_drop_obj(pat->resources); |
if (pat->contents) |
fz_drop_buffer(pat->contents); |
fz_free(pat); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_repair.c |
---|
0,0 → 1,463 |
#include "fitz.h" |
#include "mupdf.h" |
/* Scan file for objects and reconstruct xref table */ |
struct entry |
{ |
int num; |
int gen; |
int ofs; |
int stm_ofs; |
int stm_len; |
}; |
static fz_error |
pdf_repair_obj(fz_stream *file, char *buf, int cap, int *stmofsp, int *stmlenp, fz_obj **encrypt, fz_obj **id) |
{ |
fz_error error; |
int tok; |
int stm_len; |
int len; |
int n; |
*stmofsp = 0; |
*stmlenp = -1; |
stm_len = 0; |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot parse object"); |
if (tok == PDF_TOK_OPEN_DICT) |
{ |
fz_obj *dict, *obj; |
/* Send NULL xref so we don't try to resolve references */ |
error = pdf_parse_dict(&dict, NULL, file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse object"); |
obj = fz_dict_gets(dict, "Type"); |
if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "XRef")) |
{ |
obj = fz_dict_gets(dict, "Encrypt"); |
if (obj) |
{ |
if (*encrypt) |
fz_drop_obj(*encrypt); |
*encrypt = fz_keep_obj(obj); |
} |
obj = fz_dict_gets(dict, "ID"); |
if (obj) |
{ |
if (*id) |
fz_drop_obj(*id); |
*id = fz_keep_obj(obj); |
} |
} |
obj = fz_dict_gets(dict, "Length"); |
if (fz_is_int(obj)) |
stm_len = fz_to_int(obj); |
fz_drop_obj(dict); |
} |
while ( tok != PDF_TOK_STREAM && |
tok != PDF_TOK_ENDOBJ && |
tok != PDF_TOK_ERROR && |
tok != PDF_TOK_EOF ) |
{ |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot scan for endobj or stream token"); |
} |
if (tok == PDF_TOK_STREAM) |
{ |
int c = fz_read_byte(file); |
if (c == '\r') { |
c = fz_peek_byte(file); |
if (c == '\n') |
fz_read_byte(file); |
} |
*stmofsp = fz_tell(file); |
if (*stmofsp < 0) |
return fz_throw("cannot seek in file"); |
if (stm_len > 0) |
{ |
fz_seek(file, *stmofsp + stm_len, 0); |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
fz_catch(error, "cannot find endstream token, falling back to scanning"); |
if (tok == PDF_TOK_ENDSTREAM) |
goto atobjend; |
fz_seek(file, *stmofsp, 0); |
} |
n = fz_read(file, (unsigned char *) buf, 9); |
if (n < 0) |
return fz_rethrow(n, "cannot read from file"); |
while (memcmp(buf, "endstream", 9) != 0) |
{ |
c = fz_read_byte(file); |
if (c == EOF) |
break; |
memmove(buf, buf + 1, 8); |
buf[8] = c; |
} |
*stmlenp = fz_tell(file) - *stmofsp - 9; |
atobjend: |
error = pdf_lex(&tok, file, buf, cap, &len); |
if (error) |
return fz_rethrow(error, "cannot scan for endobj token"); |
if (tok != PDF_TOK_ENDOBJ) |
fz_warn("object missing 'endobj' token"); |
} |
return fz_okay; |
} |
static fz_error |
pdf_repair_obj_stm(pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
fz_obj *obj; |
fz_stream *stm; |
int tok; |
int i, n, count; |
char buf[256]; |
error = pdf_load_object(&obj, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load object stream object (%d %d R)", num, gen); |
count = fz_to_int(fz_dict_gets(obj, "N")); |
fz_drop_obj(obj); |
error = pdf_open_stream(&stm, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot open object stream object (%d %d R)", num, gen); |
for (i = 0; i < count; i++) |
{ |
error = pdf_lex(&tok, stm, buf, sizeof buf, &n); |
if (error || tok != PDF_TOK_INT) |
{ |
fz_close(stm); |
return fz_rethrow(error, "corrupt object stream (%d %d R)", num, gen); |
} |
n = atoi(buf); |
if (n >= xref->len) |
pdf_resize_xref(xref, n + 1); |
xref->table[n].ofs = num; |
xref->table[n].gen = i; |
xref->table[n].stm_ofs = 0; |
xref->table[n].obj = NULL; |
xref->table[n].type = 'o'; |
error = pdf_lex(&tok, stm, buf, sizeof buf, &n); |
if (error || tok != PDF_TOK_INT) |
{ |
fz_close(stm); |
return fz_rethrow(error, "corrupt object stream (%d %d R)", num, gen); |
} |
} |
fz_close(stm); |
return fz_okay; |
} |
fz_error |
pdf_repair_xref(pdf_xref *xref, char *buf, int bufsize) |
{ |
fz_error error; |
fz_obj *dict, *obj; |
fz_obj *length; |
fz_obj *encrypt = NULL; |
fz_obj *id = NULL; |
fz_obj *root = NULL; |
fz_obj *info = NULL; |
struct entry *list = NULL; |
int listlen; |
int listcap; |
int maxnum = 0; |
int num = 0; |
int gen = 0; |
int tmpofs, numofs = 0, genofs = 0; |
int stm_len, stm_ofs = 0; |
int tok; |
int next; |
int i, n, c; |
fz_seek(xref->file, 0, 0); |
listlen = 0; |
listcap = 1024; |
list = fz_calloc(listcap, sizeof(struct entry)); |
/* look for '%PDF' version marker within first kilobyte of file */ |
n = fz_read(xref->file, (unsigned char *)buf, MAX(bufsize, 1024)); |
if (n < 0) |
{ |
error = fz_rethrow(n, "cannot read from file"); |
goto cleanup; |
} |
fz_seek(xref->file, 0, 0); |
for (i = 0; i < n - 4; i++) |
{ |
if (memcmp(buf + i, "%PDF", 4) == 0) |
{ |
fz_seek(xref->file, i + 8, 0); /* skip "%PDF-X.Y" */ |
break; |
} |
} |
/* skip comment line after version marker since some generators |
* forget to terminate the comment with a newline */ |
c = fz_read_byte(xref->file); |
while (c >= 0 && (c == ' ' || c == '%')) |
c = fz_read_byte(xref->file); |
fz_unread_byte(xref->file); |
while (1) |
{ |
tmpofs = fz_tell(xref->file); |
if (tmpofs < 0) |
{ |
error = fz_throw("cannot tell in file"); |
goto cleanup; |
} |
error = pdf_lex(&tok, xref->file, buf, bufsize, &n); |
if (error) |
{ |
fz_catch(error, "ignoring the rest of the file"); |
break; |
} |
if (tok == PDF_TOK_INT) |
{ |
numofs = genofs; |
num = gen; |
genofs = tmpofs; |
gen = atoi(buf); |
} |
else if (tok == PDF_TOK_OBJ) |
{ |
error = pdf_repair_obj(xref->file, buf, bufsize, &stm_ofs, &stm_len, &encrypt, &id); |
if (error) |
{ |
error = fz_rethrow(error, "cannot parse object (%d %d R)", num, gen); |
goto cleanup; |
} |
if (listlen + 1 == listcap) |
{ |
listcap = (listcap * 3) / 2; |
list = fz_realloc(list, listcap, sizeof(struct entry)); |
} |
list[listlen].num = num; |
list[listlen].gen = gen; |
list[listlen].ofs = numofs; |
list[listlen].stm_ofs = stm_ofs; |
list[listlen].stm_len = stm_len; |
listlen ++; |
if (num > maxnum) |
maxnum = num; |
} |
/* trailer dictionary */ |
else if (tok == PDF_TOK_OPEN_DICT) |
{ |
error = pdf_parse_dict(&dict, xref, xref->file, buf, bufsize); |
if (error) |
{ |
error = fz_rethrow(error, "cannot parse object"); |
goto cleanup; |
} |
obj = fz_dict_gets(dict, "Encrypt"); |
if (obj) |
{ |
if (encrypt) |
fz_drop_obj(encrypt); |
encrypt = fz_keep_obj(obj); |
} |
obj = fz_dict_gets(dict, "ID"); |
if (obj) |
{ |
if (id) |
fz_drop_obj(id); |
id = fz_keep_obj(obj); |
} |
obj = fz_dict_gets(dict, "Root"); |
if (obj) |
{ |
if (root) |
fz_drop_obj(root); |
root = fz_keep_obj(obj); |
} |
obj = fz_dict_gets(dict, "Info"); |
if (obj) |
{ |
if (info) |
fz_drop_obj(info); |
info = fz_keep_obj(obj); |
} |
fz_drop_obj(dict); |
} |
else if (tok == PDF_TOK_ERROR) |
fz_read_byte(xref->file); |
else if (tok == PDF_TOK_EOF) |
break; |
} |
/* make xref reasonable */ |
pdf_resize_xref(xref, maxnum + 1); |
for (i = 0; i < listlen; i++) |
{ |
xref->table[list[i].num].type = 'n'; |
xref->table[list[i].num].ofs = list[i].ofs; |
xref->table[list[i].num].gen = list[i].gen; |
xref->table[list[i].num].stm_ofs = list[i].stm_ofs; |
/* corrected stream length */ |
if (list[i].stm_len >= 0) |
{ |
error = pdf_load_object(&dict, xref, list[i].num, list[i].gen); |
if (error) |
{ |
error = fz_rethrow(error, "cannot load stream object (%d %d R)", list[i].num, list[i].gen); |
goto cleanup; |
} |
length = fz_new_int(list[i].stm_len); |
fz_dict_puts(dict, "Length", length); |
fz_drop_obj(length); |
fz_drop_obj(dict); |
} |
} |
xref->table[0].type = 'f'; |
xref->table[0].ofs = 0; |
xref->table[0].gen = 65535; |
xref->table[0].stm_ofs = 0; |
xref->table[0].obj = NULL; |
next = 0; |
for (i = xref->len - 1; i >= 0; i--) |
{ |
if (xref->table[i].type == 'f') |
{ |
xref->table[i].ofs = next; |
if (xref->table[i].gen < 65535) |
xref->table[i].gen ++; |
next = i; |
} |
} |
/* create a repaired trailer, Root will be added later */ |
xref->trailer = fz_new_dict(5); |
obj = fz_new_int(maxnum + 1); |
fz_dict_puts(xref->trailer, "Size", obj); |
fz_drop_obj(obj); |
if (root) |
{ |
fz_dict_puts(xref->trailer, "Root", root); |
fz_drop_obj(root); |
} |
if (info) |
{ |
fz_dict_puts(xref->trailer, "Info", info); |
fz_drop_obj(info); |
} |
if (encrypt) |
{ |
if (fz_is_indirect(encrypt)) |
{ |
/* create new reference with non-NULL xref pointer */ |
obj = fz_new_indirect(fz_to_num(encrypt), fz_to_gen(encrypt), xref); |
fz_drop_obj(encrypt); |
encrypt = obj; |
} |
fz_dict_puts(xref->trailer, "Encrypt", encrypt); |
fz_drop_obj(encrypt); |
} |
if (id) |
{ |
if (fz_is_indirect(id)) |
{ |
/* create new reference with non-NULL xref pointer */ |
obj = fz_new_indirect(fz_to_num(id), fz_to_gen(id), xref); |
fz_drop_obj(id); |
id = obj; |
} |
fz_dict_puts(xref->trailer, "ID", id); |
fz_drop_obj(id); |
} |
fz_free(list); |
return fz_okay; |
cleanup: |
if (encrypt) fz_drop_obj(encrypt); |
if (id) fz_drop_obj(id); |
if (root) fz_drop_obj(root); |
if (info) fz_drop_obj(info); |
fz_free(list); |
return error; /* already rethrown */ |
} |
fz_error |
pdf_repair_obj_stms(pdf_xref *xref) |
{ |
fz_obj *dict; |
int i; |
for (i = 0; i < xref->len; i++) |
{ |
if (xref->table[i].stm_ofs) |
{ |
pdf_load_object(&dict, xref, i, 0); |
if (!strcmp(fz_to_name(fz_dict_gets(dict, "Type")), "ObjStm")) |
pdf_repair_obj_stm(xref, i, 0); |
fz_drop_obj(dict); |
} |
} |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_shade.c |
---|
0,0 → 1,1140 |
#include "fitz.h" |
#include "mupdf.h" |
#define HUGENUM 32000 /* how far to extend axial/radial shadings */ |
#define FUNSEGS 32 /* size of sampled mesh for function-based shadings */ |
#define RADSEGS 32 /* how many segments to generate for radial meshes */ |
#define SUBDIV 3 /* how many levels to subdivide patches */ |
struct vertex |
{ |
float x, y; |
float c[FZ_MAX_COLORS]; |
}; |
static void |
pdf_grow_mesh(fz_shade *shade, int amount) |
{ |
if (shade->mesh_len + amount < shade->mesh_cap) |
return; |
if (shade->mesh_cap == 0) |
shade->mesh_cap = 1024; |
while (shade->mesh_len + amount > shade->mesh_cap) |
shade->mesh_cap = (shade->mesh_cap * 3) / 2; |
shade->mesh = fz_realloc(shade->mesh, shade->mesh_cap, sizeof(float)); |
} |
static void |
pdf_add_vertex(fz_shade *shade, struct vertex *v) |
{ |
int ncomp = shade->use_function ? 1 : shade->colorspace->n; |
int i; |
pdf_grow_mesh(shade, 2 + ncomp); |
shade->mesh[shade->mesh_len++] = v->x; |
shade->mesh[shade->mesh_len++] = v->y; |
for (i = 0; i < ncomp; i++) |
shade->mesh[shade->mesh_len++] = v->c[i]; |
} |
static void |
pdf_add_triangle(fz_shade *shade, |
struct vertex *v0, |
struct vertex *v1, |
struct vertex *v2) |
{ |
pdf_add_vertex(shade, v0); |
pdf_add_vertex(shade, v1); |
pdf_add_vertex(shade, v2); |
} |
static void |
pdf_add_quad(fz_shade *shade, |
struct vertex *v0, |
struct vertex *v1, |
struct vertex *v2, |
struct vertex *v3) |
{ |
pdf_add_triangle(shade, v0, v1, v3); |
pdf_add_triangle(shade, v1, v3, v2); |
} |
/* Subdivide and tesselate tensor-patches */ |
typedef struct pdf_tensor_patch_s pdf_tensor_patch; |
struct pdf_tensor_patch_s |
{ |
fz_point pole[4][4]; |
float color[4][FZ_MAX_COLORS]; |
}; |
static void |
triangulate_patch(pdf_tensor_patch p, fz_shade *shade) |
{ |
struct vertex v0, v1, v2, v3; |
v0.x = p.pole[0][0].x; |
v0.y = p.pole[0][0].y; |
memcpy(v0.c, p.color[0], sizeof(v0.c)); |
v1.x = p.pole[0][3].x; |
v1.y = p.pole[0][3].y; |
memcpy(v1.c, p.color[1], sizeof(v1.c)); |
v2.x = p.pole[3][3].x; |
v2.y = p.pole[3][3].y; |
memcpy(v2.c, p.color[2], sizeof(v2.c)); |
v3.x = p.pole[3][0].x; |
v3.y = p.pole[3][0].y; |
memcpy(v3.c, p.color[3], sizeof(v3.c)); |
pdf_add_quad(shade, &v0, &v1, &v2, &v3); |
} |
static inline void midcolor(float *c, float *c1, float *c2) |
{ |
int i; |
for (i = 0; i < FZ_MAX_COLORS; i++) |
c[i] = (c1[i] + c2[i]) * 0.5f; |
} |
static void |
split_curve(fz_point *pole, fz_point *q0, fz_point *q1, int polestep) |
{ |
/* |
split bezier curve given by control points pole[0]..pole[3] |
using de casteljau algo at midpoint and build two new |
bezier curves q0[0]..q0[3] and q1[0]..q1[3]. all indices |
should be multiplies by polestep == 1 for vertical bezier |
curves in patch and == 4 for horizontal bezier curves due |
to C's multi-dimensional matrix memory layout. |
*/ |
float x12 = (pole[1 * polestep].x + pole[2 * polestep].x) * 0.5f; |
float y12 = (pole[1 * polestep].y + pole[2 * polestep].y) * 0.5f; |
q0[1 * polestep].x = (pole[0 * polestep].x + pole[1 * polestep].x) * 0.5f; |
q0[1 * polestep].y = (pole[0 * polestep].y + pole[1 * polestep].y) * 0.5f; |
q1[2 * polestep].x = (pole[2 * polestep].x + pole[3 * polestep].x) * 0.5f; |
q1[2 * polestep].y = (pole[2 * polestep].y + pole[3 * polestep].y) * 0.5f; |
q0[2 * polestep].x = (q0[1 * polestep].x + x12) * 0.5f; |
q0[2 * polestep].y = (q0[1 * polestep].y + y12) * 0.5f; |
q1[1 * polestep].x = (x12 + q1[2 * polestep].x) * 0.5f; |
q1[1 * polestep].y = (y12 + q1[2 * polestep].y) * 0.5f; |
q0[3 * polestep].x = (q0[2 * polestep].x + q1[1 * polestep].x) * 0.5f; |
q0[3 * polestep].y = (q0[2 * polestep].y + q1[1 * polestep].y) * 0.5f; |
q1[0 * polestep].x = (q0[2 * polestep].x + q1[1 * polestep].x) * 0.5f; |
q1[0 * polestep].y = (q0[2 * polestep].y + q1[1 * polestep].y) * 0.5f; |
q0[0 * polestep].x = pole[0 * polestep].x; |
q0[0 * polestep].y = pole[0 * polestep].y; |
q1[3 * polestep].x = pole[3 * polestep].x; |
q1[3 * polestep].y = pole[3 * polestep].y; |
} |
static void |
split_stripe(pdf_tensor_patch *p, pdf_tensor_patch *s0, pdf_tensor_patch *s1) |
{ |
/* |
split all horizontal bezier curves in patch, |
creating two new patches with half the width. |
*/ |
split_curve(&p->pole[0][0], &s0->pole[0][0], &s1->pole[0][0], 4); |
split_curve(&p->pole[0][1], &s0->pole[0][1], &s1->pole[0][1], 4); |
split_curve(&p->pole[0][2], &s0->pole[0][2], &s1->pole[0][2], 4); |
split_curve(&p->pole[0][3], &s0->pole[0][3], &s1->pole[0][3], 4); |
/* interpolate the colors for the two new patches. */ |
memcpy(s0->color[0], p->color[0], sizeof(s0->color[0])); |
memcpy(s0->color[1], p->color[1], sizeof(s0->color[1])); |
midcolor(s0->color[2], p->color[1], p->color[2]); |
midcolor(s0->color[3], p->color[0], p->color[3]); |
memcpy(s1->color[0], s0->color[3], sizeof(s1->color[0])); |
memcpy(s1->color[1], s0->color[2], sizeof(s1->color[1])); |
memcpy(s1->color[2], p->color[2], sizeof(s1->color[2])); |
memcpy(s1->color[3], p->color[3], sizeof(s1->color[3])); |
} |
static void |
draw_stripe(pdf_tensor_patch *p, fz_shade *shade, int depth) |
{ |
pdf_tensor_patch s0, s1; |
/* split patch into two half-height patches */ |
split_stripe(p, &s0, &s1); |
depth--; |
if (depth == 0) |
{ |
/* if no more subdividing, draw two new patches... */ |
triangulate_patch(s0, shade); |
triangulate_patch(s1, shade); |
} |
else |
{ |
/* ...otherwise, continue subdividing. */ |
draw_stripe(&s0, shade, depth); |
draw_stripe(&s1, shade, depth); |
} |
} |
static void |
split_patch(pdf_tensor_patch *p, pdf_tensor_patch *s0, pdf_tensor_patch *s1) |
{ |
/* |
split all vertical bezier curves in patch, |
creating two new patches with half the height. |
*/ |
split_curve(p->pole[0], s0->pole[0], s1->pole[0], 1); |
split_curve(p->pole[1], s0->pole[1], s1->pole[1], 1); |
split_curve(p->pole[2], s0->pole[2], s1->pole[2], 1); |
split_curve(p->pole[3], s0->pole[3], s1->pole[3], 1); |
/* interpolate the colors for the two new patches. */ |
memcpy(s0->color[0], p->color[0], sizeof(s0->color[0])); |
midcolor(s0->color[1], p->color[0], p->color[1]); |
midcolor(s0->color[2], p->color[2], p->color[3]); |
memcpy(s0->color[3], p->color[3], sizeof(s0->color[3])); |
memcpy(s1->color[0], s0->color[1], sizeof(s1->color[0])); |
memcpy(s1->color[1], p->color[1], sizeof(s1->color[1])); |
memcpy(s1->color[2], p->color[2], sizeof(s1->color[2])); |
memcpy(s1->color[3], s0->color[2], sizeof(s1->color[3])); |
} |
static void |
draw_patch(fz_shade *shade, pdf_tensor_patch *p, int depth, int origdepth) |
{ |
pdf_tensor_patch s0, s1; |
/* split patch into two half-width patches */ |
split_patch(p, &s0, &s1); |
depth--; |
if (depth == 0) |
{ |
/* if no more subdividing, draw two new patches... */ |
draw_stripe(&s0, shade, origdepth); |
draw_stripe(&s1, shade, origdepth); |
} |
else |
{ |
/* ...otherwise, continue subdividing. */ |
draw_patch(shade, &s0, depth, origdepth); |
draw_patch(shade, &s1, depth, origdepth); |
} |
} |
static fz_point |
pdf_compute_tensor_interior( |
fz_point a, fz_point b, fz_point c, fz_point d, |
fz_point e, fz_point f, fz_point g, fz_point h) |
{ |
fz_point pt; |
/* see equations at page 330 in pdf 1.7 */ |
pt.x = -4 * a.x; |
pt.x += 6 * (b.x + c.x); |
pt.x += -2 * (d.x + e.x); |
pt.x += 3 * (f.x + g.x); |
pt.x += -1 * h.x; |
pt.x /= 9; |
pt.y = -4 * a.y; |
pt.y += 6 * (b.y + c.y); |
pt.y += -2 * (d.y + e.y); |
pt.y += 3 * (f.y + g.y); |
pt.y += -1 * h.y; |
pt.y /= 9; |
return pt; |
} |
static void |
pdf_make_tensor_patch(pdf_tensor_patch *p, int type, fz_point *pt) |
{ |
if (type == 6) |
{ |
/* see control point stream order at page 325 in pdf 1.7 */ |
p->pole[0][0] = pt[0]; |
p->pole[0][1] = pt[1]; |
p->pole[0][2] = pt[2]; |
p->pole[0][3] = pt[3]; |
p->pole[1][3] = pt[4]; |
p->pole[2][3] = pt[5]; |
p->pole[3][3] = pt[6]; |
p->pole[3][2] = pt[7]; |
p->pole[3][1] = pt[8]; |
p->pole[3][0] = pt[9]; |
p->pole[2][0] = pt[10]; |
p->pole[1][0] = pt[11]; |
/* see equations at page 330 in pdf 1.7 */ |
p->pole[1][1] = pdf_compute_tensor_interior( |
p->pole[0][0], p->pole[0][1], p->pole[1][0], p->pole[0][3], |
p->pole[3][0], p->pole[3][1], p->pole[1][3], p->pole[3][3]); |
p->pole[1][2] = pdf_compute_tensor_interior( |
p->pole[0][3], p->pole[0][2], p->pole[1][3], p->pole[0][0], |
p->pole[3][3], p->pole[3][2], p->pole[1][0], p->pole[3][0]); |
p->pole[2][1] = pdf_compute_tensor_interior( |
p->pole[3][0], p->pole[3][1], p->pole[2][0], p->pole[3][3], |
p->pole[0][0], p->pole[0][1], p->pole[2][3], p->pole[0][3]); |
p->pole[2][2] = pdf_compute_tensor_interior( |
p->pole[3][3], p->pole[3][2], p->pole[2][3], p->pole[3][0], |
p->pole[0][3], p->pole[0][2], p->pole[2][0], p->pole[0][0]); |
} |
else if (type == 7) |
{ |
/* see control point stream order at page 330 in pdf 1.7 */ |
p->pole[0][0] = pt[0]; |
p->pole[0][1] = pt[1]; |
p->pole[0][2] = pt[2]; |
p->pole[0][3] = pt[3]; |
p->pole[1][3] = pt[4]; |
p->pole[2][3] = pt[5]; |
p->pole[3][3] = pt[6]; |
p->pole[3][2] = pt[7]; |
p->pole[3][1] = pt[8]; |
p->pole[3][0] = pt[9]; |
p->pole[2][0] = pt[10]; |
p->pole[1][0] = pt[11]; |
p->pole[1][1] = pt[12]; |
p->pole[1][2] = pt[13]; |
p->pole[2][2] = pt[14]; |
p->pole[2][1] = pt[15]; |
} |
} |
/* Sample various functions into lookup tables */ |
static void |
pdf_sample_composite_shade_function(fz_shade *shade, pdf_function *func, float t0, float t1) |
{ |
int i; |
float t; |
for (i = 0; i < 256; i++) |
{ |
t = t0 + (i / 255.0f) * (t1 - t0); |
pdf_eval_function(func, &t, 1, shade->function[i], shade->colorspace->n); |
shade->function[i][shade->colorspace->n] = 1; |
} |
} |
static void |
pdf_sample_component_shade_function(fz_shade *shade, int funcs, pdf_function **func, float t0, float t1) |
{ |
int i, k; |
float t; |
for (i = 0; i < 256; i++) |
{ |
t = t0 + (i / 255.0f) * (t1 - t0); |
for (k = 0; k < funcs; k++) |
pdf_eval_function(func[k], &t, 1, &shade->function[i][k], 1); |
shade->function[i][k] = 1; |
} |
} |
static void |
pdf_sample_shade_function(fz_shade *shade, int funcs, pdf_function **func, float t0, float t1) |
{ |
shade->use_function = 1; |
if (funcs == 1) |
pdf_sample_composite_shade_function(shade, func[0], t0, t1); |
else |
pdf_sample_component_shade_function(shade, funcs, func, t0, t1); |
} |
/* Type 1-3 -- Function-based, axial and radial shadings */ |
static void |
pdf_load_function_based_shading(fz_shade *shade, pdf_xref *xref, fz_obj *dict, pdf_function *func) |
{ |
fz_obj *obj; |
float x0, y0, x1, y1; |
fz_matrix matrix; |
struct vertex v[4]; |
int xx, yy; |
float x, y; |
float xn, yn; |
int i; |
x0 = y0 = 0; |
x1 = y1 = 1; |
obj = fz_dict_gets(dict, "Domain"); |
if (fz_array_len(obj) == 4) |
{ |
x0 = fz_to_real(fz_array_get(obj, 0)); |
x1 = fz_to_real(fz_array_get(obj, 1)); |
y0 = fz_to_real(fz_array_get(obj, 2)); |
y1 = fz_to_real(fz_array_get(obj, 3)); |
} |
matrix = fz_identity; |
obj = fz_dict_gets(dict, "Matrix"); |
if (fz_array_len(obj) == 6) |
matrix = pdf_to_matrix(obj); |
for (yy = 0; yy < FUNSEGS; yy++) |
{ |
y = y0 + (y1 - y0) * yy / FUNSEGS; |
yn = y0 + (y1 - y0) * (yy + 1) / FUNSEGS; |
for (xx = 0; xx < FUNSEGS; xx++) |
{ |
x = x0 + (x1 - x0) * xx / FUNSEGS; |
xn = x0 + (x1 - x0) * (xx + 1) / FUNSEGS; |
v[0].x = x; v[0].y = y; |
v[1].x = xn; v[1].y = y; |
v[2].x = xn; v[2].y = yn; |
v[3].x = x; v[3].y = yn; |
for (i = 0; i < 4; i++) |
{ |
fz_point pt; |
float fv[2]; |
fv[0] = v[i].x; |
fv[1] = v[i].y; |
pdf_eval_function(func, fv, 2, v[i].c, shade->colorspace->n); |
pt.x = v[i].x; |
pt.y = v[i].y; |
pt = fz_transform_point(matrix, pt); |
v[i].x = pt.x; |
v[i].y = pt.y; |
} |
pdf_add_quad(shade, &v[0], &v[1], &v[2], &v[3]); |
} |
} |
} |
static void |
pdf_load_axial_shading(fz_shade *shade, pdf_xref *xref, fz_obj *dict, int funcs, pdf_function **func) |
{ |
fz_obj *obj; |
float d0, d1; |
int e0, e1; |
float x0, y0, x1, y1; |
struct vertex p1, p2; |
obj = fz_dict_gets(dict, "Coords"); |
x0 = fz_to_real(fz_array_get(obj, 0)); |
y0 = fz_to_real(fz_array_get(obj, 1)); |
x1 = fz_to_real(fz_array_get(obj, 2)); |
y1 = fz_to_real(fz_array_get(obj, 3)); |
d0 = 0; |
d1 = 1; |
obj = fz_dict_gets(dict, "Domain"); |
if (fz_array_len(obj) == 2) |
{ |
d0 = fz_to_real(fz_array_get(obj, 0)); |
d1 = fz_to_real(fz_array_get(obj, 1)); |
} |
e0 = e1 = 0; |
obj = fz_dict_gets(dict, "Extend"); |
if (fz_array_len(obj) == 2) |
{ |
e0 = fz_to_bool(fz_array_get(obj, 0)); |
e1 = fz_to_bool(fz_array_get(obj, 1)); |
} |
pdf_sample_shade_function(shade, funcs, func, d0, d1); |
shade->type = FZ_LINEAR; |
shade->extend[0] = e0; |
shade->extend[1] = e1; |
p1.x = x0; |
p1.y = y0; |
p1.c[0] = 0; |
pdf_add_vertex(shade, &p1); |
p2.x = x1; |
p2.y = y1; |
p2.c[0] = 0; |
pdf_add_vertex(shade, &p2); |
} |
static void |
pdf_load_radial_shading(fz_shade *shade, pdf_xref *xref, fz_obj *dict, int funcs, pdf_function **func) |
{ |
fz_obj *obj; |
float d0, d1; |
int e0, e1; |
float x0, y0, r0, x1, y1, r1; |
struct vertex p1, p2; |
obj = fz_dict_gets(dict, "Coords"); |
x0 = fz_to_real(fz_array_get(obj, 0)); |
y0 = fz_to_real(fz_array_get(obj, 1)); |
r0 = fz_to_real(fz_array_get(obj, 2)); |
x1 = fz_to_real(fz_array_get(obj, 3)); |
y1 = fz_to_real(fz_array_get(obj, 4)); |
r1 = fz_to_real(fz_array_get(obj, 5)); |
d0 = 0; |
d1 = 1; |
obj = fz_dict_gets(dict, "Domain"); |
if (fz_array_len(obj) == 2) |
{ |
d0 = fz_to_real(fz_array_get(obj, 0)); |
d1 = fz_to_real(fz_array_get(obj, 1)); |
} |
e0 = e1 = 0; |
obj = fz_dict_gets(dict, "Extend"); |
if (fz_array_len(obj) == 2) |
{ |
e0 = fz_to_bool(fz_array_get(obj, 0)); |
e1 = fz_to_bool(fz_array_get(obj, 1)); |
} |
pdf_sample_shade_function(shade, funcs, func, d0, d1); |
shade->type = FZ_RADIAL; |
shade->extend[0] = e0; |
shade->extend[1] = e1; |
p1.x = x0; |
p1.y = y0; |
p1.c[0] = r0; |
pdf_add_vertex(shade, &p1); |
p2.x = x1; |
p2.y = y1; |
p2.c[0] = r1; |
pdf_add_vertex(shade, &p2); |
} |
/* Type 4-7 -- Triangle and patch mesh shadings */ |
static inline float read_sample(fz_stream *stream, int bits, float min, float max) |
{ |
/* we use pow(2,x) because (1<<x) would overflow the math on 32-bit samples */ |
float bitscale = 1 / (powf(2, bits) - 1); |
return min + fz_read_bits(stream, bits) * (max - min) * bitscale; |
} |
struct mesh_params |
{ |
int vprow; |
int bpflag; |
int bpcoord; |
int bpcomp; |
float x0, x1; |
float y0, y1; |
float c0[FZ_MAX_COLORS]; |
float c1[FZ_MAX_COLORS]; |
}; |
static void |
pdf_load_mesh_params(pdf_xref *xref, fz_obj *dict, struct mesh_params *p) |
{ |
fz_obj *obj; |
int i, n; |
p->x0 = p->y0 = 0; |
p->x1 = p->y1 = 1; |
for (i = 0; i < FZ_MAX_COLORS; i++) |
{ |
p->c0[i] = 0; |
p->c1[i] = 1; |
} |
p->vprow = fz_to_int(fz_dict_gets(dict, "VerticesPerRow")); |
p->bpflag = fz_to_int(fz_dict_gets(dict, "BitsPerFlag")); |
p->bpcoord = fz_to_int(fz_dict_gets(dict, "BitsPerCoordinate")); |
p->bpcomp = fz_to_int(fz_dict_gets(dict, "BitsPerComponent")); |
obj = fz_dict_gets(dict, "Decode"); |
if (fz_array_len(obj) >= 6) |
{ |
n = (fz_array_len(obj) - 4) / 2; |
p->x0 = fz_to_real(fz_array_get(obj, 0)); |
p->x1 = fz_to_real(fz_array_get(obj, 1)); |
p->y0 = fz_to_real(fz_array_get(obj, 2)); |
p->y1 = fz_to_real(fz_array_get(obj, 3)); |
for (i = 0; i < n; i++) |
{ |
p->c0[i] = fz_to_real(fz_array_get(obj, 4 + i * 2)); |
p->c1[i] = fz_to_real(fz_array_get(obj, 5 + i * 2)); |
} |
} |
if (p->vprow < 2) |
p->vprow = 2; |
if (p->bpflag != 2 && p->bpflag != 4 && p->bpflag != 8) |
p->bpflag = 8; |
if (p->bpcoord != 1 && p->bpcoord != 2 && p->bpcoord != 4 && |
p->bpcoord != 8 && p->bpcoord != 12 && p->bpcoord != 16 && |
p->bpcoord != 24 && p->bpcoord != 32) |
p->bpcoord = 8; |
if (p->bpcomp != 1 && p->bpcomp != 2 && p->bpcomp != 4 && |
p->bpcomp != 8 && p->bpcomp != 12 && p->bpcomp != 16) |
p->bpcomp = 8; |
} |
static void |
pdf_load_type4_shade(fz_shade *shade, pdf_xref *xref, fz_obj *dict, |
int funcs, pdf_function **func, fz_stream *stream) |
{ |
struct mesh_params p; |
struct vertex va, vb, vc, vd; |
int ncomp; |
int flag; |
int i; |
pdf_load_mesh_params(xref, dict, &p); |
if (funcs > 0) |
{ |
ncomp = 1; |
pdf_sample_shade_function(shade, funcs, func, p.c0[0], p.c1[0]); |
} |
else |
ncomp = shade->colorspace->n; |
while (!fz_is_eof_bits(stream)) |
{ |
flag = fz_read_bits(stream, p.bpflag); |
vd.x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
vd.y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
for (i = 0; i < ncomp; i++) |
vd.c[i] = read_sample(stream, p.bpcomp, p.c0[i], p.c1[i]); |
switch (flag) |
{ |
case 0: /* start new triangle */ |
va = vd; |
fz_read_bits(stream, p.bpflag); |
vb.x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
vb.y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
for (i = 0; i < ncomp; i++) |
vb.c[i] = read_sample(stream, p.bpcomp, p.c0[i], p.c1[i]); |
fz_read_bits(stream, p.bpflag); |
vc.x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
vc.y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
for (i = 0; i < ncomp; i++) |
vc.c[i] = read_sample(stream, p.bpcomp, p.c0[i], p.c1[i]); |
pdf_add_triangle(shade, &va, &vb, &vc); |
break; |
case 1: /* Vb, Vc, Vd */ |
va = vb; |
vb = vc; |
vc = vd; |
pdf_add_triangle(shade, &va, &vb, &vc); |
break; |
case 2: /* Va, Vc, Vd */ |
vb = vc; |
vc = vd; |
pdf_add_triangle(shade, &va, &vb, &vc); |
break; |
} |
} |
} |
static void |
pdf_load_type5_shade(fz_shade *shade, pdf_xref *xref, fz_obj *dict, |
int funcs, pdf_function **func, fz_stream *stream) |
{ |
struct mesh_params p; |
struct vertex *buf, *ref; |
int first; |
int ncomp; |
int i, k; |
pdf_load_mesh_params(xref, dict, &p); |
if (funcs > 0) |
{ |
ncomp = 1; |
pdf_sample_shade_function(shade, funcs, func, p.c0[0], p.c1[0]); |
} |
else |
ncomp = shade->colorspace->n; |
ref = fz_calloc(p.vprow, sizeof(struct vertex)); |
buf = fz_calloc(p.vprow, sizeof(struct vertex)); |
first = 1; |
while (!fz_is_eof_bits(stream)) |
{ |
for (i = 0; i < p.vprow; i++) |
{ |
buf[i].x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
buf[i].y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
for (k = 0; k < ncomp; k++) |
buf[i].c[k] = read_sample(stream, p.bpcomp, p.c0[k], p.c1[k]); |
} |
if (!first) |
for (i = 0; i < p.vprow - 1; i++) |
pdf_add_quad(shade, |
&ref[i], &ref[i+1], &buf[i+1], &buf[i]); |
memcpy(ref, buf, p.vprow * sizeof(struct vertex)); |
first = 0; |
} |
free(ref); |
free(buf); |
} |
/* Type 6 & 7 -- Patch mesh shadings */ |
static void |
pdf_load_type6_shade(fz_shade *shade, pdf_xref *xref, fz_obj *dict, |
int funcs, pdf_function **func, fz_stream *stream) |
{ |
struct mesh_params p; |
int haspatch, hasprevpatch; |
float prevc[4][FZ_MAX_COLORS]; |
fz_point prevp[12]; |
int ncomp; |
int i, k; |
pdf_load_mesh_params(xref, dict, &p); |
if (funcs > 0) |
{ |
ncomp = 1; |
pdf_sample_shade_function(shade, funcs, func, p.c0[0], p.c1[0]); |
} |
else |
ncomp = shade->colorspace->n; |
hasprevpatch = 0; |
while (!fz_is_eof_bits(stream)) |
{ |
float c[4][FZ_MAX_COLORS]; |
fz_point v[12]; |
int startcolor; |
int startpt; |
int flag; |
flag = fz_read_bits(stream, p.bpflag); |
if (flag == 0) |
{ |
startpt = 0; |
startcolor = 0; |
} |
else |
{ |
startpt = 4; |
startcolor = 2; |
} |
for (i = startpt; i < 12; i++) |
{ |
v[i].x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
v[i].y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
} |
for (i = startcolor; i < 4; i++) |
{ |
for (k = 0; k < ncomp; k++) |
c[i][k] = read_sample(stream, p.bpcomp, p.c0[k], p.c1[k]); |
} |
haspatch = 0; |
if (flag == 0) |
{ |
haspatch = 1; |
} |
else if (flag == 1 && hasprevpatch) |
{ |
v[0] = prevp[3]; |
v[1] = prevp[4]; |
v[2] = prevp[5]; |
v[3] = prevp[6]; |
memcpy(c[0], prevc[1], ncomp * sizeof(float)); |
memcpy(c[1], prevc[2], ncomp * sizeof(float)); |
haspatch = 1; |
} |
else if (flag == 2 && hasprevpatch) |
{ |
v[0] = prevp[6]; |
v[1] = prevp[7]; |
v[2] = prevp[8]; |
v[3] = prevp[9]; |
memcpy(c[0], prevc[2], ncomp * sizeof(float)); |
memcpy(c[1], prevc[3], ncomp * sizeof(float)); |
haspatch = 1; |
} |
else if (flag == 3 && hasprevpatch) |
{ |
v[0] = prevp[ 9]; |
v[1] = prevp[10]; |
v[2] = prevp[11]; |
v[3] = prevp[ 0]; |
memcpy(c[0], prevc[3], ncomp * sizeof(float)); |
memcpy(c[1], prevc[0], ncomp * sizeof(float)); |
haspatch = 1; |
} |
if (haspatch) |
{ |
pdf_tensor_patch patch; |
pdf_make_tensor_patch(&patch, 6, v); |
for (i = 0; i < 4; i++) |
memcpy(patch.color[i], c[i], ncomp * sizeof(float)); |
draw_patch(shade, &patch, SUBDIV, SUBDIV); |
for (i = 0; i < 12; i++) |
prevp[i] = v[i]; |
for (i = 0; i < 4; i++) |
memcpy(prevc[i], c[i], ncomp * sizeof(float)); |
hasprevpatch = 1; |
} |
} |
} |
static void |
pdf_load_type7_shade(fz_shade *shade, pdf_xref *xref, fz_obj *dict, |
int funcs, pdf_function **func, fz_stream *stream) |
{ |
struct mesh_params p; |
int haspatch, hasprevpatch; |
float prevc[4][FZ_MAX_COLORS]; |
fz_point prevp[16]; |
int ncomp; |
int i, k; |
pdf_load_mesh_params(xref, dict, &p); |
if (funcs > 0) |
{ |
ncomp = 1; |
pdf_sample_shade_function(shade, funcs, func, p.c0[0], p.c1[0]); |
} |
else |
ncomp = shade->colorspace->n; |
hasprevpatch = 0; |
while (!fz_is_eof_bits(stream)) |
{ |
float c[4][FZ_MAX_COLORS]; |
fz_point v[16]; |
int startcolor; |
int startpt; |
int flag; |
flag = fz_read_bits(stream, p.bpflag); |
if (flag == 0) |
{ |
startpt = 0; |
startcolor = 0; |
} |
else |
{ |
startpt = 4; |
startcolor = 2; |
} |
for (i = startpt; i < 16; i++) |
{ |
v[i].x = read_sample(stream, p.bpcoord, p.x0, p.x1); |
v[i].y = read_sample(stream, p.bpcoord, p.y0, p.y1); |
} |
for (i = startcolor; i < 4; i++) |
{ |
for (k = 0; k < ncomp; k++) |
c[i][k] = read_sample(stream, p.bpcomp, p.c0[k], p.c1[k]); |
} |
haspatch = 0; |
if (flag == 0) |
{ |
haspatch = 1; |
} |
else if (flag == 1 && hasprevpatch) |
{ |
v[0] = prevp[3]; |
v[1] = prevp[4]; |
v[2] = prevp[5]; |
v[3] = prevp[6]; |
memcpy(c[0], prevc[1], ncomp * sizeof(float)); |
memcpy(c[1], prevc[2], ncomp * sizeof(float)); |
haspatch = 1; |
} |
else if (flag == 2 && hasprevpatch) |
{ |
v[0] = prevp[6]; |
v[1] = prevp[7]; |
v[2] = prevp[8]; |
v[3] = prevp[9]; |
memcpy(c[0], prevc[2], ncomp * sizeof(float)); |
memcpy(c[1], prevc[3], ncomp * sizeof(float)); |
haspatch = 1; |
} |
else if (flag == 3 && hasprevpatch) |
{ |
v[0] = prevp[ 9]; |
v[1] = prevp[10]; |
v[2] = prevp[11]; |
v[3] = prevp[ 0]; |
memcpy(c[0], prevc[3], ncomp * sizeof(float)); |
memcpy(c[1], prevc[0], ncomp * sizeof(float)); |
haspatch = 1; |
} |
if (haspatch) |
{ |
pdf_tensor_patch patch; |
pdf_make_tensor_patch(&patch, 7, v); |
for (i = 0; i < 4; i++) |
memcpy(patch.color[i], c[i], ncomp * sizeof(float)); |
draw_patch(shade, &patch, SUBDIV, SUBDIV); |
for (i = 0; i < 16; i++) |
prevp[i] = v[i]; |
for (i = 0; i < 4; i++) |
memcpy(prevc[i], c[i], FZ_MAX_COLORS * sizeof(float)); |
hasprevpatch = 1; |
} |
} |
} |
/* Load all of the shading dictionary parameters, then switch on the shading type. */ |
static fz_error |
pdf_load_shading_dict(fz_shade **shadep, pdf_xref *xref, fz_obj *dict, fz_matrix transform) |
{ |
fz_error error; |
fz_shade *shade; |
pdf_function *func[FZ_MAX_COLORS] = { NULL }; |
fz_stream *stream = NULL; |
fz_obj *obj; |
int funcs; |
int type; |
int i; |
shade = fz_malloc(sizeof(fz_shade)); |
shade->refs = 1; |
shade->type = FZ_MESH; |
shade->use_background = 0; |
shade->use_function = 0; |
shade->matrix = transform; |
shade->bbox = fz_infinite_rect; |
shade->extend[0] = 0; |
shade->extend[1] = 0; |
shade->mesh_len = 0; |
shade->mesh_cap = 0; |
shade->mesh = NULL; |
shade->colorspace = NULL; |
funcs = 0; |
obj = fz_dict_gets(dict, "ShadingType"); |
type = fz_to_int(obj); |
obj = fz_dict_gets(dict, "ColorSpace"); |
if (!obj) |
{ |
fz_drop_shade(shade); |
return fz_throw("shading colorspace is missing"); |
} |
error = pdf_load_colorspace(&shade->colorspace, xref, obj); |
if (error) |
{ |
fz_drop_shade(shade); |
return fz_rethrow(error, "cannot load colorspace (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
obj = fz_dict_gets(dict, "Background"); |
if (obj) |
{ |
shade->use_background = 1; |
for (i = 0; i < shade->colorspace->n; i++) |
shade->background[i] = fz_to_real(fz_array_get(obj, i)); |
} |
obj = fz_dict_gets(dict, "BBox"); |
if (fz_is_array(obj)) |
{ |
shade->bbox = pdf_to_rect(obj); |
} |
obj = fz_dict_gets(dict, "Function"); |
if (fz_is_dict(obj)) |
{ |
funcs = 1; |
error = pdf_load_function(&func[0], xref, obj); |
if (error) |
{ |
error = fz_rethrow(error, "cannot load shading function (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
goto cleanup; |
} |
} |
else if (fz_is_array(obj)) |
{ |
funcs = fz_array_len(obj); |
if (funcs != 1 && funcs != shade->colorspace->n) |
{ |
error = fz_throw("incorrect number of shading functions"); |
goto cleanup; |
} |
for (i = 0; i < funcs; i++) |
{ |
error = pdf_load_function(&func[i], xref, fz_array_get(obj, i)); |
if (error) |
{ |
error = fz_rethrow(error, "cannot load shading function (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
goto cleanup; |
} |
} |
} |
if (type >= 4 && type <= 7) |
{ |
error = pdf_open_stream(&stream, xref, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
error = fz_rethrow(error, "cannot open shading stream (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
goto cleanup; |
} |
} |
switch (type) |
{ |
case 1: pdf_load_function_based_shading(shade, xref, dict, func[0]); break; |
case 2: pdf_load_axial_shading(shade, xref, dict, funcs, func); break; |
case 3: pdf_load_radial_shading(shade, xref, dict, funcs, func); break; |
case 4: pdf_load_type4_shade(shade, xref, dict, funcs, func, stream); break; |
case 5: pdf_load_type5_shade(shade, xref, dict, funcs, func, stream); break; |
case 6: pdf_load_type6_shade(shade, xref, dict, funcs, func, stream); break; |
case 7: pdf_load_type7_shade(shade, xref, dict, funcs, func, stream); break; |
default: |
error = fz_throw("unknown shading type: %d", type); |
goto cleanup; |
} |
if (stream) |
fz_close(stream); |
for (i = 0; i < funcs; i++) |
if (func[i]) |
pdf_drop_function(func[i]); |
*shadep = shade; |
return fz_okay; |
cleanup: |
if (stream) |
fz_close(stream); |
for (i = 0; i < funcs; i++) |
if (func[i]) |
pdf_drop_function(func[i]); |
fz_drop_shade(shade); |
return fz_rethrow(error, "cannot load shading type %d (%d %d R)", type, fz_to_num(dict), fz_to_gen(dict)); |
} |
fz_error |
pdf_load_shading(fz_shade **shadep, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
fz_matrix mat; |
fz_obj *obj; |
if ((*shadep = pdf_find_item(xref->store, fz_drop_shade, dict))) |
{ |
fz_keep_shade(*shadep); |
return fz_okay; |
} |
/* Type 2 pattern dictionary */ |
if (fz_dict_gets(dict, "PatternType")) |
{ |
obj = fz_dict_gets(dict, "Matrix"); |
if (obj) |
mat = pdf_to_matrix(obj); |
else |
mat = fz_identity; |
obj = fz_dict_gets(dict, "ExtGState"); |
if (obj) |
{ |
if (fz_dict_gets(obj, "CA") || fz_dict_gets(obj, "ca")) |
{ |
fz_warn("shading with alpha not supported"); |
} |
} |
obj = fz_dict_gets(dict, "Shading"); |
if (!obj) |
return fz_throw("syntaxerror: missing shading dictionary"); |
error = pdf_load_shading_dict(shadep, xref, obj, mat); |
if (error) |
return fz_rethrow(error, "cannot load shading dictionary (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); |
} |
/* Naked shading dictionary */ |
else |
{ |
error = pdf_load_shading_dict(shadep, xref, dict, fz_identity); |
if (error) |
return fz_rethrow(error, "cannot load shading dictionary (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
pdf_store_item(xref->store, fz_keep_shade, fz_drop_shade, dict, *shadep); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_store.c |
---|
0,0 → 1,222 |
#include "fitz.h" |
#include "mupdf.h" |
typedef struct pdf_item_s pdf_item; |
struct pdf_item_s |
{ |
void *drop_func; |
fz_obj *key; |
void *val; |
int age; |
pdf_item *next; |
}; |
struct refkey |
{ |
void *drop_func; |
int num; |
int gen; |
}; |
struct pdf_store_s |
{ |
fz_hash_table *hash; /* hash for num/gen keys */ |
pdf_item *root; /* linked list for everything else */ |
}; |
pdf_store * |
pdf_new_store(void) |
{ |
pdf_store *store; |
store = fz_malloc(sizeof(pdf_store)); |
store->hash = fz_new_hash_table(4096, sizeof(struct refkey)); |
store->root = NULL; |
return store; |
} |
void |
pdf_store_item(pdf_store *store, void *keepfunc, void *drop_func, fz_obj *key, void *val) |
{ |
pdf_item *item; |
if (!store) |
return; |
item = fz_malloc(sizeof(pdf_item)); |
item->drop_func = drop_func; |
item->key = fz_keep_obj(key); |
item->val = ((void*(*)(void*))keepfunc)(val); |
item->age = 0; |
item->next = NULL; |
if (fz_is_indirect(key)) |
{ |
struct refkey refkey; |
refkey.drop_func = drop_func; |
refkey.num = fz_to_num(key); |
refkey.gen = fz_to_gen(key); |
fz_hash_insert(store->hash, &refkey, item); |
} |
else |
{ |
item->next = store->root; |
store->root = item; |
} |
} |
void * |
pdf_find_item(pdf_store *store, void *drop_func, fz_obj *key) |
{ |
struct refkey refkey; |
pdf_item *item; |
if (!store) |
return NULL; |
if (key == NULL) |
return NULL; |
if (fz_is_indirect(key)) |
{ |
refkey.drop_func = drop_func; |
refkey.num = fz_to_num(key); |
refkey.gen = fz_to_gen(key); |
item = fz_hash_find(store->hash, &refkey); |
if (item) |
{ |
item->age = 0; |
return item->val; |
} |
} |
else |
{ |
for (item = store->root; item; item = item->next) |
{ |
if (item->drop_func == drop_func && !fz_objcmp(item->key, key)) |
{ |
item->age = 0; |
return item->val; |
} |
} |
} |
return NULL; |
} |
void |
pdf_remove_item(pdf_store *store, void *drop_func, fz_obj *key) |
{ |
struct refkey refkey; |
pdf_item *item, *prev, *next; |
if (fz_is_indirect(key)) |
{ |
refkey.drop_func = drop_func; |
refkey.num = fz_to_num(key); |
refkey.gen = fz_to_gen(key); |
item = fz_hash_find(store->hash, &refkey); |
if (item) |
{ |
fz_hash_remove(store->hash, &refkey); |
((void(*)(void*))item->drop_func)(item->val); |
fz_drop_obj(item->key); |
fz_free(item); |
} |
} |
else |
{ |
prev = NULL; |
for (item = store->root; item; item = next) |
{ |
next = item->next; |
if (item->drop_func == drop_func && !fz_objcmp(item->key, key)) |
{ |
if (!prev) |
store->root = next; |
else |
prev->next = next; |
((void(*)(void*))item->drop_func)(item->val); |
fz_drop_obj(item->key); |
fz_free(item); |
} |
else |
prev = item; |
} |
} |
} |
void |
pdf_age_store(pdf_store *store, int maxage) |
{ |
struct refkey *refkey; |
pdf_item *item, *prev, *next; |
int i; |
for (i = 0; i < fz_hash_len(store->hash); i++) |
{ |
refkey = fz_hash_get_key(store->hash, i); |
item = fz_hash_get_val(store->hash, i); |
if (item && ++item->age > maxage) |
{ |
fz_hash_remove(store->hash, refkey); |
((void(*)(void*))item->drop_func)(item->val); |
fz_drop_obj(item->key); |
fz_free(item); |
i--; /* items with same hash may move into place */ |
} |
} |
prev = NULL; |
for (item = store->root; item; item = next) |
{ |
next = item->next; |
if (++item->age > maxage) |
{ |
if (!prev) |
store->root = next; |
else |
prev->next = next; |
((void(*)(void*))item->drop_func)(item->val); |
fz_drop_obj(item->key); |
fz_free(item); |
} |
else |
prev = item; |
} |
} |
void |
pdf_free_store(pdf_store *store) |
{ |
pdf_age_store(store, 0); |
fz_free_hash(store->hash); |
fz_free(store); |
} |
void |
pdf_debug_store(pdf_store *store) |
{ |
pdf_item *item; |
pdf_item *next; |
struct refkey *refkey; |
int i; |
printf("-- resource store contents --\n"); |
for (i = 0; i < fz_hash_len(store->hash); i++) |
{ |
refkey = fz_hash_get_key(store->hash, i); |
item = fz_hash_get_val(store->hash, i); |
if (item) |
printf("store[%d] (%d %d R) = %p\n", i, refkey->num, refkey->gen, item->val); |
} |
for (item = store->root; item; item = next) |
{ |
next = item->next; |
printf("store[*] "); |
fz_debug_obj(item->key); |
printf(" = %p\n", item->val); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_stream.c |
---|
0,0 → 1,385 |
#include "fitz.h" |
#include "mupdf.h" |
/* |
* Check if an object is a stream or not. |
*/ |
int |
pdf_is_stream(pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
if (num < 0 || num >= xref->len) |
return 0; |
error = pdf_cache_object(xref, num, gen); |
if (error) |
{ |
fz_catch(error, "cannot load object, ignoring error"); |
return 0; |
} |
return xref->table[num].stm_ofs > 0; |
} |
/* |
* Scan stream dictionary for an explicit /Crypt filter |
*/ |
static int |
pdf_stream_has_crypt(fz_obj *stm) |
{ |
fz_obj *filters; |
fz_obj *obj; |
int i; |
filters = fz_dict_getsa(stm, "Filter", "F"); |
if (filters) |
{ |
if (!strcmp(fz_to_name(filters), "Crypt")) |
return 1; |
if (fz_is_array(filters)) |
{ |
for (i = 0; i < fz_array_len(filters); i++) |
{ |
obj = fz_array_get(filters, i); |
if (!strcmp(fz_to_name(obj), "Crypt")) |
return 1; |
} |
} |
} |
return 0; |
} |
/* |
* Create a filter given a name and param dictionary. |
*/ |
static fz_stream * |
build_filter(fz_stream *chain, pdf_xref * xref, fz_obj * f, fz_obj * p, int num, int gen) |
{ |
fz_error error; |
char *s; |
s = fz_to_name(f); |
if (!strcmp(s, "ASCIIHexDecode") || !strcmp(s, "AHx")) |
return fz_open_ahxd(chain); |
else if (!strcmp(s, "ASCII85Decode") || !strcmp(s, "A85")) |
return fz_open_a85d(chain); |
else if (!strcmp(s, "CCITTFaxDecode") || !strcmp(s, "CCF")) |
return fz_open_faxd(chain, p); |
else if (!strcmp(s, "DCTDecode") || !strcmp(s, "DCT")) |
return fz_open_dctd(chain, p); |
else if (!strcmp(s, "RunLengthDecode") || !strcmp(s, "RL")) |
return fz_open_rld(chain); |
else if (!strcmp(s, "FlateDecode") || !strcmp(s, "Fl")) |
{ |
fz_obj *obj = fz_dict_gets(p, "Predictor"); |
if (fz_to_int(obj) > 1) |
return fz_open_predict(fz_open_flated(chain), p); |
return fz_open_flated(chain); |
} |
else if (!strcmp(s, "LZWDecode") || !strcmp(s, "LZW")) |
{ |
fz_obj *obj = fz_dict_gets(p, "Predictor"); |
if (fz_to_int(obj) > 1) |
return fz_open_predict(fz_open_lzwd(chain, p), p); |
return fz_open_lzwd(chain, p); |
} |
else if (!strcmp(s, "JBIG2Decode")) |
{ |
fz_obj *obj = fz_dict_gets(p, "JBIG2Globals"); |
if (obj) |
{ |
fz_buffer *globals; |
error = pdf_load_stream(&globals, xref, fz_to_num(obj), fz_to_gen(obj)); |
if (error) |
fz_catch(error, "cannot load jbig2 global segments"); |
chain = fz_open_jbig2d(chain, globals); |
fz_drop_buffer(globals); |
return chain; |
} |
return fz_open_jbig2d(chain, NULL); |
} |
else if (!strcmp(s, "JPXDecode")) |
return chain; /* JPX decoding is special cased in the image loading code */ |
else if (!strcmp(s, "Crypt")) |
{ |
fz_obj *name; |
if (!xref->crypt) |
{ |
fz_warn("crypt filter in unencrypted document"); |
return chain; |
} |
name = fz_dict_gets(p, "Name"); |
if (fz_is_name(name)) |
return pdf_open_crypt_with_filter(chain, xref->crypt, fz_to_name(name), num, gen); |
return chain; |
} |
fz_warn("unknown filter name (%s)", s); |
return chain; |
} |
/* |
* Build a chain of filters given filter names and param dicts. |
* If head is given, start filter chain with it. |
* Assume ownership of head. |
*/ |
static fz_stream * |
build_filter_chain(fz_stream *chain, pdf_xref *xref, fz_obj *fs, fz_obj *ps, int num, int gen) |
{ |
fz_obj *f; |
fz_obj *p; |
int i; |
for (i = 0; i < fz_array_len(fs); i++) |
{ |
f = fz_array_get(fs, i); |
p = fz_array_get(ps, i); |
chain = build_filter(chain, xref, f, p, num, gen); |
} |
return chain; |
} |
/* |
* Build a filter for reading raw stream data. |
* This is a null filter to constrain reading to the |
* stream length, followed by a decryption filter. |
*/ |
static fz_stream * |
pdf_open_raw_filter(fz_stream *chain, pdf_xref *xref, fz_obj *stmobj, int num, int gen) |
{ |
int hascrypt; |
int len; |
/* don't close chain when we close this filter */ |
fz_keep_stream(chain); |
len = fz_to_int(fz_dict_gets(stmobj, "Length")); |
chain = fz_open_null(chain, len); |
hascrypt = pdf_stream_has_crypt(stmobj); |
if (xref->crypt && !hascrypt) |
chain = pdf_open_crypt(chain, xref->crypt, num, gen); |
return chain; |
} |
/* |
* Construct a filter to decode a stream, constraining |
* to stream length and decrypting. |
*/ |
static fz_stream * |
pdf_open_filter(fz_stream *chain, pdf_xref *xref, fz_obj *stmobj, int num, int gen) |
{ |
fz_obj *filters; |
fz_obj *params; |
filters = fz_dict_getsa(stmobj, "Filter", "F"); |
params = fz_dict_getsa(stmobj, "DecodeParms", "DP"); |
chain = pdf_open_raw_filter(chain, xref, stmobj, num, gen); |
if (fz_is_name(filters)) |
return build_filter(chain, xref, filters, params, num, gen); |
if (fz_array_len(filters) > 0) |
return build_filter_chain(chain, xref, filters, params, num, gen); |
return chain; |
} |
/* |
* Construct a filter to decode a stream, without |
* constraining to stream length, and without decryption. |
*/ |
fz_stream * |
pdf_open_inline_stream(fz_stream *chain, pdf_xref *xref, fz_obj *stmobj, int length) |
{ |
fz_obj *filters; |
fz_obj *params; |
filters = fz_dict_getsa(stmobj, "Filter", "F"); |
params = fz_dict_getsa(stmobj, "DecodeParms", "DP"); |
/* don't close chain when we close this filter */ |
fz_keep_stream(chain); |
if (fz_is_name(filters)) |
return build_filter(chain, xref, filters, params, 0, 0); |
if (fz_array_len(filters) > 0) |
return build_filter_chain(chain, xref, filters, params, 0, 0); |
return fz_open_null(chain, length); |
} |
/* |
* Open a stream for reading the raw (compressed but decrypted) data. |
* Using xref->file while this is open is a bad idea. |
*/ |
fz_error |
pdf_open_raw_stream(fz_stream **stmp, pdf_xref *xref, int num, int gen) |
{ |
pdf_xref_entry *x; |
fz_error error; |
if (num < 0 || num >= xref->len) |
return fz_throw("object id out of range (%d %d R)", num, gen); |
x = xref->table + num; |
error = pdf_cache_object(xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load stream object (%d %d R)", num, gen); |
if (x->stm_ofs) |
{ |
*stmp = pdf_open_raw_filter(xref->file, xref, x->obj, num, gen); |
fz_seek(xref->file, x->stm_ofs, 0); |
return fz_okay; |
} |
return fz_throw("object is not a stream"); |
} |
/* |
* Open a stream for reading uncompressed data. |
* Put the opened file in xref->stream. |
* Using xref->file while a stream is open is a Bad idea. |
*/ |
fz_error |
pdf_open_stream(fz_stream **stmp, pdf_xref *xref, int num, int gen) |
{ |
pdf_xref_entry *x; |
fz_error error; |
if (num < 0 || num >= xref->len) |
return fz_throw("object id out of range (%d %d R)", num, gen); |
x = xref->table + num; |
error = pdf_cache_object(xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load stream object (%d %d R)", num, gen); |
if (x->stm_ofs) |
{ |
*stmp = pdf_open_filter(xref->file, xref, x->obj, num, gen); |
fz_seek(xref->file, x->stm_ofs, 0); |
return fz_okay; |
} |
return fz_throw("object is not a stream"); |
} |
fz_error |
pdf_open_stream_at(fz_stream **stmp, pdf_xref *xref, int num, int gen, fz_obj *dict, int stm_ofs) |
{ |
if (stm_ofs) |
{ |
*stmp = pdf_open_filter(xref->file, xref, dict, num, gen); |
fz_seek(xref->file, stm_ofs, 0); |
return fz_okay; |
} |
return fz_throw("object is not a stream"); |
} |
/* |
* Load raw (compressed but decrypted) contents of a stream into buf. |
*/ |
fz_error |
pdf_load_raw_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
fz_stream *stm; |
fz_obj *dict; |
int len; |
error = pdf_load_object(&dict, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load stream dictionary (%d %d R)", num, gen); |
len = fz_to_int(fz_dict_gets(dict, "Length")); |
fz_drop_obj(dict); |
error = pdf_open_raw_stream(&stm, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot open raw stream (%d %d R)", num, gen); |
error = fz_read_all(bufp, stm, len); |
if (error) |
{ |
fz_close(stm); |
return fz_rethrow(error, "cannot read raw stream (%d %d R)", num, gen); |
} |
fz_close(stm); |
return fz_okay; |
} |
static int |
pdf_guess_filter_length(int len, char *filter) |
{ |
if (!strcmp(filter, "ASCIIHexDecode")) |
return len / 2; |
if (!strcmp(filter, "ASCII85Decode")) |
return len * 4 / 5; |
if (!strcmp(filter, "FlateDecode")) |
return len * 3; |
if (!strcmp(filter, "RunLengthDecode")) |
return len * 3; |
if (!strcmp(filter, "LZWDecode")) |
return len * 2; |
return len; |
} |
/* |
* Load uncompressed contents of a stream into buf. |
*/ |
fz_error |
pdf_load_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
fz_stream *stm; |
fz_obj *dict, *obj; |
int i, len; |
error = pdf_open_stream(&stm, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot open stream (%d %d R)", num, gen); |
error = pdf_load_object(&dict, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load stream dictionary (%d %d R)", num, gen); |
len = fz_to_int(fz_dict_gets(dict, "Length")); |
obj = fz_dict_gets(dict, "Filter"); |
len = pdf_guess_filter_length(len, fz_to_name(obj)); |
for (i = 0; i < fz_array_len(obj); i++) |
len = pdf_guess_filter_length(len, fz_to_name(fz_array_get(obj, i))); |
fz_drop_obj(dict); |
error = fz_read_all(bufp, stm, len); |
if (error) |
{ |
fz_close(stm); |
return fz_rethrow(error, "cannot read raw stream (%d %d R)", num, gen); |
} |
fz_close(stm); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_type3.c |
---|
0,0 → 1,158 |
#include "fitz.h" |
#include "mupdf.h" |
static fz_error |
pdf_run_glyph_func(void *xref, fz_obj *rdb, fz_buffer *contents, fz_device *dev, fz_matrix ctm) |
{ |
return pdf_run_glyph(xref, rdb, contents, dev, ctm); |
} |
fz_error |
pdf_load_type3_font(pdf_font_desc **fontdescp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict) |
{ |
fz_error error; |
char buf[256]; |
char *estrings[256]; |
pdf_font_desc *fontdesc; |
fz_obj *encoding; |
fz_obj *widths; |
fz_obj *charprocs; |
fz_obj *obj; |
int first, last; |
int i, k, n; |
fz_rect bbox; |
fz_matrix matrix; |
obj = fz_dict_gets(dict, "Name"); |
if (fz_is_name(obj)) |
fz_strlcpy(buf, fz_to_name(obj), sizeof buf); |
else |
sprintf(buf, "Unnamed-T3"); |
fontdesc = pdf_new_font_desc(); |
obj = fz_dict_gets(dict, "FontMatrix"); |
matrix = pdf_to_matrix(obj); |
obj = fz_dict_gets(dict, "FontBBox"); |
bbox = pdf_to_rect(obj); |
fontdesc->font = fz_new_type3_font(buf, matrix); |
fz_set_font_bbox(fontdesc->font, bbox.x0, bbox.y0, bbox.x1, bbox.y1); |
/* Encoding */ |
for (i = 0; i < 256; i++) |
estrings[i] = NULL; |
encoding = fz_dict_gets(dict, "Encoding"); |
if (!encoding) |
{ |
error = fz_throw("syntaxerror: Type3 font missing Encoding"); |
goto cleanup; |
} |
if (fz_is_name(encoding)) |
pdf_load_encoding(estrings, fz_to_name(encoding)); |
if (fz_is_dict(encoding)) |
{ |
fz_obj *base, *diff, *item; |
base = fz_dict_gets(encoding, "BaseEncoding"); |
if (fz_is_name(base)) |
pdf_load_encoding(estrings, fz_to_name(base)); |
diff = fz_dict_gets(encoding, "Differences"); |
if (fz_is_array(diff)) |
{ |
n = fz_array_len(diff); |
k = 0; |
for (i = 0; i < n; i++) |
{ |
item = fz_array_get(diff, i); |
if (fz_is_int(item)) |
k = fz_to_int(item); |
if (fz_is_name(item)) |
estrings[k++] = fz_to_name(item); |
if (k < 0) k = 0; |
if (k > 255) k = 255; |
} |
} |
} |
fontdesc->encoding = pdf_new_identity_cmap(0, 1); |
error = pdf_load_to_unicode(fontdesc, xref, estrings, NULL, fz_dict_gets(dict, "ToUnicode")); |
if (error) |
goto cleanup; |
/* Widths */ |
pdf_set_default_hmtx(fontdesc, 0); |
first = fz_to_int(fz_dict_gets(dict, "FirstChar")); |
last = fz_to_int(fz_dict_gets(dict, "LastChar")); |
widths = fz_dict_gets(dict, "Widths"); |
if (!widths) |
{ |
error = fz_throw("syntaxerror: Type3 font missing Widths"); |
goto cleanup; |
} |
for (i = first; i <= last; i++) |
{ |
float w = fz_to_real(fz_array_get(widths, i - first)); |
w = fontdesc->font->t3matrix.a * w * 1000; |
fontdesc->font->t3widths[i] = w * 0.001f; |
pdf_add_hmtx(fontdesc, i, i, w); |
} |
pdf_end_hmtx(fontdesc); |
/* Resources -- inherit page resources if the font doesn't have its own */ |
fontdesc->font->t3resources = fz_dict_gets(dict, "Resources"); |
if (!fontdesc->font->t3resources) |
fontdesc->font->t3resources = rdb; |
if (fontdesc->font->t3resources) |
fz_keep_obj(fontdesc->font->t3resources); |
if (!fontdesc->font->t3resources) |
fz_warn("no resource dictionary for type 3 font!"); |
fontdesc->font->t3xref = xref; |
fontdesc->font->t3run = pdf_run_glyph_func; |
/* CharProcs */ |
charprocs = fz_dict_gets(dict, "CharProcs"); |
if (!charprocs) |
{ |
error = fz_throw("syntaxerror: Type3 font missing CharProcs"); |
goto cleanup; |
} |
for (i = 0; i < 256; i++) |
{ |
if (estrings[i]) |
{ |
obj = fz_dict_gets(charprocs, estrings[i]); |
if (pdf_is_stream(xref, fz_to_num(obj), fz_to_gen(obj))) |
{ |
error = pdf_load_stream(&fontdesc->font->t3procs[i], xref, fz_to_num(obj), fz_to_gen(obj)); |
if (error) |
goto cleanup; |
} |
} |
} |
*fontdescp = fontdesc; |
return fz_okay; |
cleanup: |
fz_drop_font(fontdesc->font); |
fz_free(fontdesc); |
return fz_rethrow(error, "cannot load type3 font (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_unicode.c |
---|
0,0 → 1,83 |
#include "fitz.h" |
#include "mupdf.h" |
/* Load or synthesize ToUnicode map for fonts */ |
fz_error |
pdf_load_to_unicode(pdf_font_desc *font, pdf_xref *xref, |
char **strings, char *collection, fz_obj *cmapstm) |
{ |
fz_error error = fz_okay; |
pdf_cmap *cmap; |
int cid; |
int ucsbuf[8]; |
int ucslen; |
int i; |
if (pdf_is_stream(xref, fz_to_num(cmapstm), fz_to_gen(cmapstm))) |
{ |
error = pdf_load_embedded_cmap(&cmap, xref, cmapstm); |
if (error) |
return fz_rethrow(error, "cannot load embedded cmap (%d %d R)", fz_to_num(cmapstm), fz_to_gen(cmapstm)); |
font->to_unicode = pdf_new_cmap(); |
for (i = 0; i < (strings ? 256 : 65536); i++) |
{ |
cid = pdf_lookup_cmap(font->encoding, i); |
if (cid >= 0) |
{ |
ucslen = pdf_lookup_cmap_full(cmap, i, ucsbuf); |
if (ucslen == 1) |
pdf_map_range_to_range(font->to_unicode, cid, cid, ucsbuf[0]); |
if (ucslen > 1) |
pdf_map_one_to_many(font->to_unicode, cid, ucsbuf, ucslen); |
} |
} |
pdf_sort_cmap(font->to_unicode); |
pdf_drop_cmap(cmap); |
} |
else if (collection) |
{ |
error = fz_okay; |
if (!strcmp(collection, "Adobe-CNS1")) |
error = pdf_load_system_cmap(&font->to_unicode, "Adobe-CNS1-UCS2"); |
else if (!strcmp(collection, "Adobe-GB1")) |
error = pdf_load_system_cmap(&font->to_unicode, "Adobe-GB1-UCS2"); |
else if (!strcmp(collection, "Adobe-Japan1")) |
error = pdf_load_system_cmap(&font->to_unicode, "Adobe-Japan1-UCS2"); |
else if (!strcmp(collection, "Adobe-Korea1")) |
error = pdf_load_system_cmap(&font->to_unicode, "Adobe-Korea1-UCS2"); |
if (error) |
return fz_rethrow(error, "cannot load ToUnicode system cmap %s-UCS2", collection); |
} |
if (strings) |
{ |
/* TODO one-to-many mappings */ |
font->cid_to_ucs_len = 256; |
font->cid_to_ucs = fz_calloc(256, sizeof(unsigned short)); |
for (i = 0; i < 256; i++) |
{ |
if (strings[i]) |
font->cid_to_ucs[i] = pdf_lookup_agl(strings[i]); |
else |
font->cid_to_ucs[i] = '?'; |
} |
} |
if (!font->to_unicode && !font->cid_to_ucs) |
{ |
/* TODO: synthesize a ToUnicode if it's a freetype font with |
* cmap and/or post tables or if it has glyph names. */ |
} |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_xobject.c |
---|
0,0 → 1,96 |
#include "fitz.h" |
#include "mupdf.h" |
fz_error |
pdf_load_xobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) |
{ |
fz_error error; |
pdf_xobject *form; |
fz_obj *obj; |
if ((*formp = pdf_find_item(xref->store, pdf_drop_xobject, dict))) |
{ |
pdf_keep_xobject(*formp); |
return fz_okay; |
} |
form = fz_malloc(sizeof(pdf_xobject)); |
form->refs = 1; |
form->resources = NULL; |
form->contents = NULL; |
form->colorspace = NULL; |
/* Store item immediately, to avoid possible recursion if objects refer back to this one */ |
pdf_store_item(xref->store, pdf_keep_xobject, pdf_drop_xobject, dict, form); |
obj = fz_dict_gets(dict, "BBox"); |
form->bbox = pdf_to_rect(obj); |
obj = fz_dict_gets(dict, "Matrix"); |
if (obj) |
form->matrix = pdf_to_matrix(obj); |
else |
form->matrix = fz_identity; |
form->isolated = 0; |
form->knockout = 0; |
form->transparency = 0; |
obj = fz_dict_gets(dict, "Group"); |
if (obj) |
{ |
fz_obj *attrs = obj; |
form->isolated = fz_to_bool(fz_dict_gets(attrs, "I")); |
form->knockout = fz_to_bool(fz_dict_gets(attrs, "K")); |
obj = fz_dict_gets(attrs, "S"); |
if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "Transparency")) |
form->transparency = 1; |
obj = fz_dict_gets(attrs, "CS"); |
if (obj) |
{ |
error = pdf_load_colorspace(&form->colorspace, xref, obj); |
if (error) |
fz_catch(error, "cannot load xobject colorspace"); |
} |
} |
form->resources = fz_dict_gets(dict, "Resources"); |
if (form->resources) |
fz_keep_obj(form->resources); |
error = pdf_load_stream(&form->contents, xref, fz_to_num(dict), fz_to_gen(dict)); |
if (error) |
{ |
pdf_remove_item(xref->store, pdf_drop_xobject, dict); |
pdf_drop_xobject(form); |
return fz_rethrow(error, "cannot load xobject content stream (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); |
} |
*formp = form; |
return fz_okay; |
} |
pdf_xobject * |
pdf_keep_xobject(pdf_xobject *xobj) |
{ |
xobj->refs ++; |
return xobj; |
} |
void |
pdf_drop_xobject(pdf_xobject *xobj) |
{ |
if (xobj && --xobj->refs == 0) |
{ |
if (xobj->colorspace) |
fz_drop_colorspace(xobj->colorspace); |
if (xobj->resources) |
fz_drop_obj(xobj->resources); |
if (xobj->contents) |
fz_drop_buffer(xobj->contents); |
fz_free(xobj); |
} |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/pdf_xref.c |
---|
0,0 → 1,940 |
#include "fitz.h" |
#include "mupdf.h" |
static inline int iswhite(int ch) |
{ |
return |
ch == '\000' || ch == '\011' || ch == '\012' || |
ch == '\014' || ch == '\015' || ch == '\040'; |
} |
/* |
* magic version tag and startxref |
*/ |
static fz_error |
pdf_load_version(pdf_xref *xref) |
{ |
char buf[20]; |
fz_seek(xref->file, 0, 0); |
fz_read_line(xref->file, buf, sizeof buf); |
if (memcmp(buf, "%PDF-", 5) != 0) |
return fz_throw("cannot recognize version marker"); |
xref->version = atoi(buf + 5) * 10 + atoi(buf + 7); |
return fz_okay; |
} |
static fz_error |
pdf_read_start_xref(pdf_xref *xref) |
{ |
unsigned char buf[1024]; |
int t, n; |
int i; |
fz_seek(xref->file, 0, 2); |
xref->file_size = fz_tell(xref->file); |
t = MAX(0, xref->file_size - (int)sizeof buf); |
fz_seek(xref->file, t, 0); |
n = fz_read(xref->file, buf, sizeof buf); |
if (n < 0) |
return fz_rethrow(n, "cannot read from file"); |
for (i = n - 9; i >= 0; i--) |
{ |
if (memcmp(buf + i, "startxref", 9) == 0) |
{ |
i += 9; |
while (iswhite(buf[i]) && i < n) |
i ++; |
xref->startxref = atoi((char*)(buf + i)); |
return fz_okay; |
} |
} |
return fz_throw("cannot find startxref"); |
} |
/* |
* trailer dictionary |
*/ |
static fz_error |
pdf_read_old_trailer(pdf_xref *xref, char *buf, int cap) |
{ |
fz_error error; |
int len; |
char *s; |
int n; |
int t; |
int tok; |
int c; |
fz_read_line(xref->file, buf, cap); |
if (strncmp(buf, "xref", 4) != 0) |
return fz_throw("cannot find xref marker"); |
while (1) |
{ |
c = fz_peek_byte(xref->file); |
if (!(c >= '0' && c <= '9')) |
break; |
fz_read_line(xref->file, buf, cap); |
s = buf; |
fz_strsep(&s, " "); /* ignore ofs */ |
if (!s) |
return fz_throw("invalid range marker in xref"); |
len = atoi(fz_strsep(&s, " ")); |
/* broken pdfs where the section is not on a separate line */ |
if (s && *s != '\0') |
fz_seek(xref->file, -(2 + (int)strlen(s)), 1); |
t = fz_tell(xref->file); |
if (t < 0) |
return fz_throw("cannot tell in file"); |
fz_seek(xref->file, t + 20 * len, 0); |
} |
error = pdf_lex(&tok, xref->file, buf, cap, &n); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
if (tok != PDF_TOK_TRAILER) |
return fz_throw("expected trailer marker"); |
error = pdf_lex(&tok, xref->file, buf, cap, &n); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
if (tok != PDF_TOK_OPEN_DICT) |
return fz_throw("expected trailer dictionary"); |
error = pdf_parse_dict(&xref->trailer, xref, xref->file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
return fz_okay; |
} |
static fz_error |
pdf_read_new_trailer(pdf_xref *xref, char *buf, int cap) |
{ |
fz_error error; |
error = pdf_parse_ind_obj(&xref->trailer, xref, xref->file, buf, cap, NULL, NULL, NULL); |
if (error) |
return fz_rethrow(error, "cannot parse trailer (compressed)"); |
return fz_okay; |
} |
static fz_error |
pdf_read_trailer(pdf_xref *xref, char *buf, int cap) |
{ |
fz_error error; |
int c; |
fz_seek(xref->file, xref->startxref, 0); |
while (iswhite(fz_peek_byte(xref->file))) |
fz_read_byte(xref->file); |
c = fz_peek_byte(xref->file); |
if (c == 'x') |
{ |
error = pdf_read_old_trailer(xref, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot read trailer"); |
} |
else if (c >= '0' && c <= '9') |
{ |
error = pdf_read_new_trailer(xref, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot read trailer"); |
} |
else |
{ |
return fz_throw("cannot recognize xref format: '%c'", c); |
} |
return fz_okay; |
} |
/* |
* xref tables |
*/ |
void |
pdf_resize_xref(pdf_xref *xref, int newlen) |
{ |
int i; |
xref->table = fz_realloc(xref->table, newlen, sizeof(pdf_xref_entry)); |
for (i = xref->len; i < newlen; i++) |
{ |
xref->table[i].type = 0; |
xref->table[i].ofs = 0; |
xref->table[i].gen = 0; |
xref->table[i].stm_ofs = 0; |
xref->table[i].obj = NULL; |
} |
xref->len = newlen; |
} |
static fz_error |
pdf_read_old_xref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) |
{ |
fz_error error; |
int ofs, len; |
char *s; |
int n; |
int tok; |
int i; |
int c; |
fz_read_line(xref->file, buf, cap); |
if (strncmp(buf, "xref", 4) != 0) |
return fz_throw("cannot find xref marker"); |
while (1) |
{ |
c = fz_peek_byte(xref->file); |
if (!(c >= '0' && c <= '9')) |
break; |
fz_read_line(xref->file, buf, cap); |
s = buf; |
ofs = atoi(fz_strsep(&s, " ")); |
len = atoi(fz_strsep(&s, " ")); |
/* broken pdfs where the section is not on a separate line */ |
if (s && *s != '\0') |
{ |
fz_warn("broken xref section. proceeding anyway."); |
fz_seek(xref->file, -(2 + (int)strlen(s)), 1); |
} |
/* broken pdfs where size in trailer undershoots entries in xref sections */ |
if (ofs + len > xref->len) |
{ |
fz_warn("broken xref section, proceeding anyway."); |
pdf_resize_xref(xref, ofs + len); |
} |
for (i = ofs; i < ofs + len; i++) |
{ |
n = fz_read(xref->file, (unsigned char *) buf, 20); |
if (n < 0) |
return fz_rethrow(n, "cannot read xref table"); |
if (!xref->table[i].type) |
{ |
s = buf; |
/* broken pdfs where line start with white space */ |
while (*s != '\0' && iswhite(*s)) |
s++; |
xref->table[i].ofs = atoi(s); |
xref->table[i].gen = atoi(s + 11); |
xref->table[i].type = s[17]; |
if (s[17] != 'f' && s[17] != 'n' && s[17] != 'o') |
return fz_throw("unexpected xref type: %#x (%d %d R)", s[17], i, xref->table[i].gen); |
} |
} |
} |
error = pdf_lex(&tok, xref->file, buf, cap, &n); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
if (tok != PDF_TOK_TRAILER) |
return fz_throw("expected trailer marker"); |
error = pdf_lex(&tok, xref->file, buf, cap, &n); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
if (tok != PDF_TOK_OPEN_DICT) |
return fz_throw("expected trailer dictionary"); |
error = pdf_parse_dict(trailerp, xref, xref->file, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot parse trailer"); |
return fz_okay; |
} |
static fz_error |
pdf_read_new_xref_section(pdf_xref *xref, fz_stream *stm, int i0, int i1, int w0, int w1, int w2) |
{ |
int i, n; |
if (i0 < 0 || i0 + i1 > xref->len) |
return fz_throw("xref stream has too many entries"); |
for (i = i0; i < i0 + i1; i++) |
{ |
int a = 0; |
int b = 0; |
int c = 0; |
if (fz_is_eof(stm)) |
return fz_throw("truncated xref stream"); |
for (n = 0; n < w0; n++) |
a = (a << 8) + fz_read_byte(stm); |
for (n = 0; n < w1; n++) |
b = (b << 8) + fz_read_byte(stm); |
for (n = 0; n < w2; n++) |
c = (c << 8) + fz_read_byte(stm); |
if (!xref->table[i].type) |
{ |
int t = w0 ? a : 1; |
xref->table[i].type = t == 0 ? 'f' : t == 1 ? 'n' : t == 2 ? 'o' : 0; |
xref->table[i].ofs = w1 ? b : 0; |
xref->table[i].gen = w2 ? c : 0; |
} |
} |
return fz_okay; |
} |
static fz_error |
pdf_read_new_xref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) |
{ |
fz_error error; |
fz_stream *stm; |
fz_obj *trailer; |
fz_obj *index; |
fz_obj *obj; |
int num, gen, stm_ofs; |
int size, w0, w1, w2; |
int t; |
error = pdf_parse_ind_obj(&trailer, xref, xref->file, buf, cap, &num, &gen, &stm_ofs); |
if (error) |
return fz_rethrow(error, "cannot parse compressed xref stream object"); |
obj = fz_dict_gets(trailer, "Size"); |
if (!obj) |
{ |
fz_drop_obj(trailer); |
return fz_throw("xref stream missing Size entry (%d %d R)", num, gen); |
} |
size = fz_to_int(obj); |
if (size > xref->len) |
{ |
pdf_resize_xref(xref, size); |
} |
if (num < 0 || num >= xref->len) |
{ |
fz_drop_obj(trailer); |
return fz_throw("object id (%d %d R) out of range (0..%d)", num, gen, xref->len - 1); |
} |
obj = fz_dict_gets(trailer, "W"); |
if (!obj) { |
fz_drop_obj(trailer); |
return fz_throw("xref stream missing W entry (%d %d R)", num, gen); |
} |
w0 = fz_to_int(fz_array_get(obj, 0)); |
w1 = fz_to_int(fz_array_get(obj, 1)); |
w2 = fz_to_int(fz_array_get(obj, 2)); |
index = fz_dict_gets(trailer, "Index"); |
error = pdf_open_stream_at(&stm, xref, num, gen, trailer, stm_ofs); |
if (error) |
{ |
fz_drop_obj(trailer); |
return fz_rethrow(error, "cannot open compressed xref stream (%d %d R)", num, gen); |
} |
if (!index) |
{ |
error = pdf_read_new_xref_section(xref, stm, 0, size, w0, w1, w2); |
if (error) |
{ |
fz_close(stm); |
fz_drop_obj(trailer); |
return fz_rethrow(error, "cannot read xref stream (%d %d R)", num, gen); |
} |
} |
else |
{ |
for (t = 0; t < fz_array_len(index); t += 2) |
{ |
int i0 = fz_to_int(fz_array_get(index, t + 0)); |
int i1 = fz_to_int(fz_array_get(index, t + 1)); |
error = pdf_read_new_xref_section(xref, stm, i0, i1, w0, w1, w2); |
if (error) |
{ |
fz_close(stm); |
fz_drop_obj(trailer); |
return fz_rethrow(error, "cannot read xref stream section (%d %d R)", num, gen); |
} |
} |
} |
fz_close(stm); |
*trailerp = trailer; |
return fz_okay; |
} |
static fz_error |
pdf_read_xref(fz_obj **trailerp, pdf_xref *xref, int ofs, char *buf, int cap) |
{ |
fz_error error; |
int c; |
fz_seek(xref->file, ofs, 0); |
while (iswhite(fz_peek_byte(xref->file))) |
fz_read_byte(xref->file); |
c = fz_peek_byte(xref->file); |
if (c == 'x') |
{ |
error = pdf_read_old_xref(trailerp, xref, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot read xref (ofs=%d)", ofs); |
} |
else if (c >= '0' && c <= '9') |
{ |
error = pdf_read_new_xref(trailerp, xref, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot read xref (ofs=%d)", ofs); |
} |
else |
{ |
return fz_throw("cannot recognize xref format"); |
} |
return fz_okay; |
} |
static fz_error |
pdf_read_xref_sections(pdf_xref *xref, int ofs, char *buf, int cap) |
{ |
fz_error error; |
fz_obj *trailer; |
fz_obj *prev; |
fz_obj *xrefstm; |
error = pdf_read_xref(&trailer, xref, ofs, buf, cap); |
if (error) |
return fz_rethrow(error, "cannot read xref section"); |
/* FIXME: do we overwrite free entries properly? */ |
xrefstm = fz_dict_gets(trailer, "XRefStm"); |
if (xrefstm) |
{ |
error = pdf_read_xref_sections(xref, fz_to_int(xrefstm), buf, cap); |
if (error) |
{ |
fz_drop_obj(trailer); |
return fz_rethrow(error, "cannot read /XRefStm xref section"); |
} |
} |
prev = fz_dict_gets(trailer, "Prev"); |
if (prev) |
{ |
error = pdf_read_xref_sections(xref, fz_to_int(prev), buf, cap); |
if (error) |
{ |
fz_drop_obj(trailer); |
return fz_rethrow(error, "cannot read /Prev xref section"); |
} |
} |
fz_drop_obj(trailer); |
return fz_okay; |
} |
/* |
* load xref tables from pdf |
*/ |
static fz_error |
pdf_load_xref(pdf_xref *xref, char *buf, int bufsize) |
{ |
fz_error error; |
fz_obj *size; |
int i; |
error = pdf_load_version(xref); |
if (error) |
return fz_rethrow(error, "cannot read version marker"); |
error = pdf_read_start_xref(xref); |
if (error) |
return fz_rethrow(error, "cannot read startxref"); |
error = pdf_read_trailer(xref, buf, bufsize); |
if (error) |
return fz_rethrow(error, "cannot read trailer"); |
size = fz_dict_gets(xref->trailer, "Size"); |
if (!size) |
return fz_throw("trailer missing Size entry"); |
pdf_resize_xref(xref, fz_to_int(size)); |
error = pdf_read_xref_sections(xref, xref->startxref, buf, bufsize); |
if (error) |
return fz_rethrow(error, "cannot read xref"); |
/* broken pdfs where first object is not free */ |
if (xref->table[0].type != 'f') |
return fz_throw("first object in xref is not free"); |
/* broken pdfs where object offsets are out of range */ |
for (i = 0; i < xref->len; i++) |
{ |
if (xref->table[i].type == 'n') |
if (xref->table[i].ofs <= 0 || xref->table[i].ofs >= xref->file_size) |
return fz_throw("object offset out of range: %d (%d 0 R)", xref->table[i].ofs, i); |
if (xref->table[i].type == 'o') |
if (xref->table[i].ofs <= 0 || xref->table[i].ofs >= xref->len || xref->table[xref->table[i].ofs].type != 'n') |
return fz_throw("invalid reference to an objstm that does not exist: %d (%d 0 R)", xref->table[i].ofs, i); |
} |
return fz_okay; |
} |
/* |
* Initialize and load xref tables. |
* If password is not null, try to decrypt. |
*/ |
fz_error |
pdf_open_xref_with_stream(pdf_xref **xrefp, fz_stream *file, char *password) |
{ |
pdf_xref *xref; |
fz_error error; |
fz_obj *encrypt, *id; |
fz_obj *dict, *obj; |
int i, repaired = 0; |
/* install pdf specific callback */ |
fz_resolve_indirect = pdf_resolve_indirect; |
xref = fz_malloc(sizeof(pdf_xref)); |
memset(xref, 0, sizeof(pdf_xref)); |
xref->file = fz_keep_stream(file); |
error = pdf_load_xref(xref, xref->scratch, sizeof xref->scratch); |
if (error) |
{ |
fz_catch(error, "trying to repair"); |
if (xref->table) |
{ |
fz_free(xref->table); |
xref->table = NULL; |
xref->len = 0; |
} |
if (xref->trailer) |
{ |
fz_drop_obj(xref->trailer); |
xref->trailer = NULL; |
} |
error = pdf_repair_xref(xref, xref->scratch, sizeof xref->scratch); |
if (error) |
{ |
pdf_free_xref(xref); |
return fz_rethrow(error, "cannot repair document"); |
} |
repaired = 1; |
} |
encrypt = fz_dict_gets(xref->trailer, "Encrypt"); |
id = fz_dict_gets(xref->trailer, "ID"); |
if (fz_is_dict(encrypt)) |
{ |
error = pdf_new_crypt(&xref->crypt, encrypt, id); |
if (error) |
{ |
pdf_free_xref(xref); |
return fz_rethrow(error, "cannot decrypt document"); |
} |
} |
if (pdf_needs_password(xref)) |
{ |
/* Only care if we have a password */ |
if (password) |
{ |
int okay = pdf_authenticate_password(xref, password); |
if (!okay) |
{ |
pdf_free_xref(xref); |
return fz_throw("invalid password"); |
} |
} |
} |
if (repaired) |
{ |
int hasroot, hasinfo; |
error = pdf_repair_obj_stms(xref); |
if (error) |
{ |
pdf_free_xref(xref); |
return fz_rethrow(error, "cannot repair document"); |
} |
hasroot = fz_dict_gets(xref->trailer, "Root") != NULL; |
hasinfo = fz_dict_gets(xref->trailer, "Info") != NULL; |
for (i = 1; i < xref->len; i++) |
{ |
if (xref->table[i].type == 0 || xref->table[i].type == 'f') |
continue; |
error = pdf_load_object(&dict, xref, i, 0); |
if (error) |
{ |
fz_catch(error, "ignoring broken object (%d 0 R)", i); |
continue; |
} |
if (!hasroot) |
{ |
obj = fz_dict_gets(dict, "Type"); |
if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "Catalog")) |
{ |
obj = fz_new_indirect(i, 0, xref); |
fz_dict_puts(xref->trailer, "Root", obj); |
fz_drop_obj(obj); |
} |
} |
if (!hasinfo) |
{ |
if (fz_dict_gets(dict, "Creator") || fz_dict_gets(dict, "Producer")) |
{ |
obj = fz_new_indirect(i, 0, xref); |
fz_dict_puts(xref->trailer, "Info", obj); |
fz_drop_obj(obj); |
} |
} |
fz_drop_obj(dict); |
} |
} |
*xrefp = xref; |
return fz_okay; |
} |
void |
pdf_free_xref(pdf_xref *xref) |
{ |
int i; |
if (xref->store) |
pdf_free_store(xref->store); |
if (xref->table) |
{ |
for (i = 0; i < xref->len; i++) |
{ |
if (xref->table[i].obj) |
{ |
fz_drop_obj(xref->table[i].obj); |
xref->table[i].obj = NULL; |
} |
} |
fz_free(xref->table); |
} |
if (xref->page_objs) |
{ |
for (i = 0; i < xref->page_len; i++) |
fz_drop_obj(xref->page_objs[i]); |
fz_free(xref->page_objs); |
} |
if (xref->page_refs) |
{ |
for (i = 0; i < xref->page_len; i++) |
fz_drop_obj(xref->page_refs[i]); |
fz_free(xref->page_refs); |
} |
if (xref->file) |
fz_close(xref->file); |
if (xref->trailer) |
fz_drop_obj(xref->trailer); |
if (xref->crypt) |
pdf_free_crypt(xref->crypt); |
fz_free(xref); |
} |
void |
pdf_debug_xref(pdf_xref *xref) |
{ |
int i; |
printf("xref\n0 %d\n", xref->len); |
for (i = 0; i < xref->len; i++) |
{ |
printf("%05d: %010d %05d %c (stm_ofs=%d)\n", i, |
xref->table[i].ofs, |
xref->table[i].gen, |
xref->table[i].type ? xref->table[i].type : '-', |
xref->table[i].stm_ofs); |
} |
} |
/* |
* compressed object streams |
*/ |
static fz_error |
pdf_load_obj_stm(pdf_xref *xref, int num, int gen, char *buf, int cap) |
{ |
fz_error error; |
fz_stream *stm; |
fz_obj *objstm; |
int *numbuf; |
int *ofsbuf; |
fz_obj *obj; |
int first; |
int count; |
int i, n; |
int tok; |
error = pdf_load_object(&objstm, xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load object stream object (%d %d R)", num, gen); |
count = fz_to_int(fz_dict_gets(objstm, "N")); |
first = fz_to_int(fz_dict_gets(objstm, "First")); |
numbuf = fz_calloc(count, sizeof(int)); |
ofsbuf = fz_calloc(count, sizeof(int)); |
error = pdf_open_stream(&stm, xref, num, gen); |
if (error) |
{ |
error = fz_rethrow(error, "cannot open object stream (%d %d R)", num, gen); |
goto cleanupbuf; |
} |
for (i = 0; i < count; i++) |
{ |
error = pdf_lex(&tok, stm, buf, cap, &n); |
if (error || tok != PDF_TOK_INT) |
{ |
error = fz_rethrow(error, "corrupt object stream (%d %d R)", num, gen); |
goto cleanupstm; |
} |
numbuf[i] = atoi(buf); |
error = pdf_lex(&tok, stm, buf, cap, &n); |
if (error || tok != PDF_TOK_INT) |
{ |
error = fz_rethrow(error, "corrupt object stream (%d %d R)", num, gen); |
goto cleanupstm; |
} |
ofsbuf[i] = atoi(buf); |
} |
fz_seek(stm, first, 0); |
for (i = 0; i < count; i++) |
{ |
fz_seek(stm, first + ofsbuf[i], 0); |
error = pdf_parse_stm_obj(&obj, xref, stm, buf, cap); |
if (error) |
{ |
error = fz_rethrow(error, "cannot parse object %d in stream (%d %d R)", i, num, gen); |
goto cleanupstm; |
} |
if (numbuf[i] < 1 || numbuf[i] >= xref->len) |
{ |
fz_drop_obj(obj); |
error = fz_throw("object id (%d 0 R) out of range (0..%d)", numbuf[i], xref->len - 1); |
goto cleanupstm; |
} |
if (xref->table[numbuf[i]].type == 'o' && xref->table[numbuf[i]].ofs == num) |
{ |
if (xref->table[numbuf[i]].obj) |
fz_drop_obj(xref->table[numbuf[i]].obj); |
xref->table[numbuf[i]].obj = obj; |
} |
else |
{ |
fz_drop_obj(obj); |
} |
} |
fz_close(stm); |
fz_free(ofsbuf); |
fz_free(numbuf); |
fz_drop_obj(objstm); |
return fz_okay; |
cleanupstm: |
fz_close(stm); |
cleanupbuf: |
fz_free(ofsbuf); |
fz_free(numbuf); |
fz_drop_obj(objstm); |
return error; /* already rethrown */ |
} |
/* |
* object loading |
*/ |
fz_error |
pdf_cache_object(pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
pdf_xref_entry *x; |
int rnum, rgen; |
if (num < 0 || num >= xref->len) |
return fz_throw("object out of range (%d %d R); xref size %d", num, gen, xref->len); |
x = &xref->table[num]; |
if (x->obj) |
return fz_okay; |
if (x->type == 'f') |
{ |
x->obj = fz_new_null(); |
return fz_okay; |
} |
else if (x->type == 'n') |
{ |
fz_seek(xref->file, x->ofs, 0); |
error = pdf_parse_ind_obj(&x->obj, xref, xref->file, xref->scratch, sizeof xref->scratch, |
&rnum, &rgen, &x->stm_ofs); |
if (error) |
return fz_rethrow(error, "cannot parse object (%d %d R)", num, gen); |
if (rnum != num) |
return fz_throw("found object (%d %d R) instead of (%d %d R)", rnum, rgen, num, gen); |
if (xref->crypt) |
pdf_crypt_obj(xref->crypt, x->obj, num, gen); |
} |
else if (x->type == 'o') |
{ |
if (!x->obj) |
{ |
error = pdf_load_obj_stm(xref, x->ofs, 0, xref->scratch, sizeof xref->scratch); |
if (error) |
return fz_rethrow(error, "cannot load object stream containing object (%d %d R)", num, gen); |
if (!x->obj) |
return fz_throw("object (%d %d R) was not found in its object stream", num, gen); |
} |
} |
else |
{ |
return fz_throw("assert: corrupt xref struct"); |
} |
return fz_okay; |
} |
fz_error |
pdf_load_object(fz_obj **objp, pdf_xref *xref, int num, int gen) |
{ |
fz_error error; |
error = pdf_cache_object(xref, num, gen); |
if (error) |
return fz_rethrow(error, "cannot load object (%d %d R) into cache", num, gen); |
assert(xref->table[num].obj); |
*objp = fz_keep_obj(xref->table[num].obj); |
return fz_okay; |
} |
fz_obj * |
pdf_resolve_indirect(fz_obj *ref) |
{ |
if (fz_is_indirect(ref)) |
{ |
pdf_xref *xref = fz_get_indirect_xref(ref); |
int num = fz_to_num(ref); |
int gen = fz_to_gen(ref); |
if (xref) |
{ |
fz_error error = pdf_cache_object(xref, num, gen); |
if (error) |
{ |
fz_catch(error, "cannot load object (%d %d R) into cache", num, gen); |
return ref; |
} |
if (xref->table[num].obj) |
return xref->table[num].obj; |
} |
} |
return ref; |
} |
/* Replace numbered object -- for use by pdfclean and similar tools */ |
void |
pdf_update_object(pdf_xref *xref, int num, int gen, fz_obj *newobj) |
{ |
pdf_xref_entry *x; |
if (num < 0 || num >= xref->len) |
{ |
fz_warn("object out of range (%d %d R); xref size %d", num, gen, xref->len); |
return; |
} |
x = &xref->table[num]; |
if (x->obj) |
fz_drop_obj(x->obj); |
x->obj = fz_keep_obj(newobj); |
x->type = 'n'; |
x->ofs = 0; |
} |
/* |
* Convenience function to open a file then call pdf_open_xref_with_stream. |
*/ |
fz_error |
pdf_open_xref(pdf_xref **xrefp, const char *filename, char *password) |
{ |
fz_error error; |
fz_stream *file; |
file = fz_open_file(filename); |
if (!file) |
return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); |
error = pdf_open_xref_with_stream(xrefp, file, password); |
if (error) |
return fz_rethrow(error, "cannot load document '%s'", filename); |
fz_close(file); |
return fz_okay; |
} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/snprintf.c |
---|
0,0 → 1,1025 |
/* |
* snprintf.c - a portable implementation of snprintf |
* |
* AUTHOR |
* Mark Martinec <mark.martinec@ijs.si>, April 1999. |
* |
* Copyright 1999, Mark Martinec. All rights reserved. |
* |
* TERMS AND CONDITIONS |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the "Frontier Artistic License" which comes |
* with this Kit. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty |
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
* See the Frontier Artistic License for more details. |
* |
* You should have received a copy of the Frontier Artistic License |
* with this Kit in the file named LICENSE.txt . |
* If not, I'll be glad to provide one. |
* |
* FEATURES |
* - careful adherence to specs regarding flags, field width and precision; |
* - good performance for large string handling (large format, large |
* argument or large paddings). Performance is similar to system's sprintf |
* and in several cases significantly better (make sure you compile with |
* optimizations turned on, tell the compiler the code is strict ANSI |
* if necessary to give it more freedom for optimizations); |
* - return value semantics per ISO/IEC 9899:1999 ("ISO C99"); |
* - written in standard ISO/ANSI C - requires an ANSI C compiler. |
* |
* SUPPORTED CONVERSION SPECIFIERS AND DATA TYPES |
* |
* This snprintf only supports the following conversion specifiers: |
* s, c, d, u, o, x, X, p (and synonyms: i, D, U, O - see below) |
* with flags: '-', '+', ' ', '0' and '#'. |
* An asterisk is supported for field width as well as precision. |
* |
* Length modifiers 'h' (short int), 'l' (long int), |
* and 'll' (long long int) are supported. |
* NOTE: |
* If macro SNPRINTF_LONGLONG_SUPPORT is not defined (default) the |
* length modifier 'll' is recognized but treated the same as 'l', |
* which may cause argument value truncation! Defining |
* SNPRINTF_LONGLONG_SUPPORT requires that your system's sprintf also |
* handles length modifier 'll'. long long int is a language extension |
* which may not be portable. |
* |
* Conversion of numeric data (conversion specifiers d, u, o, x, X, p) |
* with length modifiers (none or h, l, ll) is left to the system routine |
* sprintf, but all handling of flags, field width and precision as well as |
* c and s conversions is done very carefully by this portable routine. |
* If a string precision (truncation) is specified (e.g. %.8s) it is |
* guaranteed the string beyond the specified precision will not be referenced. |
* |
* Length modifiers h, l and ll are ignored for c and s conversions (data |
* types wint_t and wchar_t are not supported). |
* |
* The following common synonyms for conversion characters are supported: |
* - i is a synonym for d |
* - D is a synonym for ld, explicit length modifiers are ignored |
* - U is a synonym for lu, explicit length modifiers are ignored |
* - O is a synonym for lo, explicit length modifiers are ignored |
* The D, O and U conversion characters are nonstandard, they are supported |
* for backward compatibility only, and should not be used for new code. |
* |
* The following is specifically NOT supported: |
* - flag ' (thousands' grouping character) is recognized but ignored |
* - numeric conversion specifiers: f, e, E, g, G and synonym F, |
* as well as the new a and A conversion specifiers |
* - length modifier 'L' (long double) and 'q' (quad - use 'll' instead) |
* - wide character/string conversions: lc, ls, and nonstandard |
* synonyms C and S |
* - writeback of converted string length: conversion character n |
* - the n$ specification for direct reference to n-th argument |
* - locales |
* |
* It is permitted for str_m to be zero, and it is permitted to specify NULL |
* pointer for resulting string argument if str_m is zero (as per ISO C99). |
* |
* The return value is the number of characters which would be generated |
* for the given input, excluding the trailing null. If this value |
* is greater or equal to str_m, not all characters from the result |
* have been stored in str, output bytes beyond the (str_m-1) -th character |
* are discarded. If str_m is greater than zero it is guaranteed |
* the resulting string will be null-terminated. |
* |
* NOTE that this matches the ISO C99, OpenBSD, and GNU C library 2.1, |
* but is different from some older and vendor implementations, |
* and is also different from XPG, XSH5, SUSv2 specifications. |
* For historical discussion on changes in the semantics and standards |
* of snprintf see printf(3) man page in the Linux programmers manual. |
* |
* Routines asprintf and vasprintf return a pointer (in the ptr argument) |
* to a buffer sufficiently large to hold the resulting string. This pointer |
* should be passed to free(3) to release the allocated storage when it is |
* no longer needed. If sufficient space cannot be allocated, these functions |
* will return -1 and set ptr to be a NULL pointer. These two routines are a |
* GNU C library extensions (glibc). |
* |
* Routines asnprintf and vasnprintf are similar to asprintf and vasprintf, |
* yet, like snprintf and vsnprintf counterparts, will write at most str_m-1 |
* characters into the allocated output string, the last character in the |
* allocated buffer then gets the terminating null. If the formatted string |
* length (the return value) is greater than or equal to the str_m argument, |
* the resulting string was truncated and some of the formatted characters |
* were discarded. These routines present a handy way to limit the amount |
* of allocated memory to some sane value. |
* |
* AVAILABILITY |
* http://www.ijs.si/software/snprintf/ |
* |
* REVISION HISTORY |
* 1999-04 V0.9 Mark Martinec |
* - initial version, some modifications after comparing printf |
* man pages for Digital Unix 4.0, Solaris 2.6 and HPUX 10, |
* and checking how Perl handles sprintf (differently!); |
* 1999-04-09 V1.0 Mark Martinec <mark.martinec@ijs.si> |
* - added main test program, fixed remaining inconsistencies, |
* added optional (long long int) support; |
* 1999-04-12 V1.1 Mark Martinec <mark.martinec@ijs.si> |
* - support the 'p' conversion (pointer to void); |
* - if a string precision is specified |
* make sure the string beyond the specified precision |
* will not be referenced (e.g. by strlen); |
* 1999-04-13 V1.2 Mark Martinec <mark.martinec@ijs.si> |
* - support synonyms %D=%ld, %U=%lu, %O=%lo; |
* - speed up the case of long format string with few conversions; |
* 1999-06-30 V1.3 Mark Martinec <mark.martinec@ijs.si> |
* - fixed runaway loop (eventually crashing when str_l wraps |
* beyond 2^31) while copying format string without |
* conversion specifiers to a buffer that is too short |
* (thanks to Edwin Young <edwiny@autonomy.com> for |
* spotting the problem); |
* - added macros PORTABLE_SNPRINTF_VERSION_(MAJOR|MINOR) |
* to snprintf.h |
* 2000-02-14 V2.0 (never released) Mark Martinec <mark.martinec@ijs.si> |
* - relaxed license terms: The Artistic License now applies. |
* You may still apply the GNU GENERAL PUBLIC LICENSE |
* as was distributed with previous versions, if you prefer; |
* - changed REVISION HISTORY dates to use ISO 8601 date format; |
* - added vsnprintf (patch also independently proposed by |
* Caolan McNamara 2000-05-04, and Keith M Willenson 2000-06-01) |
* 2000-06-27 V2.1 Mark Martinec <mark.martinec@ijs.si> |
* - removed POSIX check for str_m<1; value 0 for str_m is |
* allowed by ISO C99 (and GNU C library 2.1) - (pointed out |
* on 2000-05-04 by Caolan McNamara, caolan@ csn dot ul dot ie). |
* Besides relaxed license this change in standards adherence |
* is the main reason to bump up the major version number; |
* - added nonstandard routines asnprintf, vasnprintf, asprintf, |
* vasprintf that dynamically allocate storage for the |
* resulting string; these routines are not compiled by default, |
* see comments where NEED_V?ASN?PRINTF macros are defined; |
* - autoconf contributed by Caolan McNamara |
* 2000-10-06 V2.2 Mark Martinec <mark.martinec@ijs.si> |
* - BUG FIX: the %c conversion used a temporary variable |
* that was no longer in scope when referenced, |
* possibly causing incorrect resulting character; |
* - BUG FIX: make precision and minimal field width unsigned |
* to handle huge values (2^31 <= n < 2^32) correctly; |
* also be more careful in the use of signed/unsigned/size_t |
* internal variables - probably more careful than many |
* vendor implementations, but there may still be a case |
* where huge values of str_m, precision or minimal field |
* could cause incorrect behaviour; |
* - use separate variables for signed/unsigned arguments, |
* and for short/int, long, and long long argument lengths |
* to avoid possible incompatibilities on certain |
* computer architectures. Also use separate variable |
* arg_sign to hold sign of a numeric argument, |
* to make code more transparent; |
* - some fiddling with zero padding and "0x" to make it |
* Linux compatible; |
* - systematically use macros fast_memcpy and fast_memset |
* instead of case-by-case hand optimization; determine some |
* breakeven string lengths for different architectures; |
* - terminology change: 'format' -> 'conversion specifier', |
* 'C9x' -> 'ISO/IEC 9899:1999 ("ISO C99")', |
* 'alternative form' -> 'alternate form', |
* 'data type modifier' -> 'length modifier'; |
* - several comments rephrased and new ones added; |
* - make compiler not complain about 'credits' defined but |
* not used; |
*/ |
/* Define HAVE_SNPRINTF if your system already has snprintf and vsnprintf. |
* |
* If HAVE_SNPRINTF is defined this module will not produce code for |
* snprintf and vsnprintf, unless PREFER_PORTABLE_SNPRINTF is defined as well, |
* causing this portable version of snprintf to be called portable_snprintf |
* (and portable_vsnprintf). |
*/ |
/* #define HAVE_SNPRINTF */ |
/* Define PREFER_PORTABLE_SNPRINTF if your system does have snprintf and |
* vsnprintf but you would prefer to use the portable routine(s) instead. |
* In this case the portable routine is declared as portable_snprintf |
* (and portable_vsnprintf) and a macro 'snprintf' (and 'vsnprintf') |
* is defined to expand to 'portable_v?snprintf' - see file snprintf.h . |
* Defining this macro is only useful if HAVE_SNPRINTF is also defined, |
* but does does no harm if defined nevertheless. |
*/ |
/* #define PREFER_PORTABLE_SNPRINTF */ |
/* Define SNPRINTF_LONGLONG_SUPPORT if you want to support |
* data type (long long int) and length modifier 'll' (e.g. %lld). |
* If undefined, 'll' is recognized but treated as a single 'l'. |
* |
* If the system's sprintf does not handle 'll' |
* the SNPRINTF_LONGLONG_SUPPORT must not be defined! |
* |
* This is off by default as (long long int) is a language extension. |
*/ |
/* #define SNPRINTF_LONGLONG_SUPPORT */ |
/* Define NEED_SNPRINTF_ONLY if you only need snprintf, and not vsnprintf. |
* If NEED_SNPRINTF_ONLY is defined, the snprintf will be defined directly, |
* otherwise both snprintf and vsnprintf routines will be defined |
* and snprintf will be a simple wrapper around vsnprintf, at the expense |
* of an extra procedure call. |
*/ |
/* #define NEED_SNPRINTF_ONLY */ |
/* Define NEED_V?ASN?PRINTF macros if you need library extension |
* routines asprintf, vasprintf, asnprintf, vasnprintf respectively, |
* and your system library does not provide them. They are all small |
* wrapper routines around portable_vsnprintf. Defining any of the four |
* NEED_V?ASN?PRINTF macros automatically turns off NEED_SNPRINTF_ONLY |
* and turns on PREFER_PORTABLE_SNPRINTF. |
* |
* Watch for name conflicts with the system library if these routines |
* are already present there. |
* |
* NOTE: vasprintf and vasnprintf routines need va_copy() from stdarg.h, as |
* specified by C99, to be able to traverse the same list of arguments twice. |
* I don't know of any other standard and portable way of achieving the same. |
* With some versions of gcc you may use __va_copy(). You might even get away |
* with "ap2 = ap", in this case you must not call va_end(ap2) ! |
* #define va_copy(ap2,ap) ap2 = ap |
*/ |
/* #define NEED_ASPRINTF */ |
/* #define NEED_ASNPRINTF */ |
/* #define NEED_VASPRINTF */ |
/* #define NEED_VASNPRINTF */ |
/* Define the following macros if desired: |
* SOLARIS_COMPATIBLE, SOLARIS_BUG_COMPATIBLE, |
* HPUX_COMPATIBLE, HPUX_BUG_COMPATIBLE, LINUX_COMPATIBLE, |
* DIGITAL_UNIX_COMPATIBLE, DIGITAL_UNIX_BUG_COMPATIBLE, |
* PERL_COMPATIBLE, PERL_BUG_COMPATIBLE, |
* |
* - For portable applications it is best not to rely on peculiarities |
* of a given implementation so it may be best not to define any |
* of the macros that select compatibility and to avoid features |
* that vary among the systems. |
* |
* - Selecting compatibility with more than one operating system |
* is not strictly forbidden but is not recommended. |
* |
* - 'x'_BUG_COMPATIBLE implies 'x'_COMPATIBLE . |
* |
* - 'x'_COMPATIBLE refers to (and enables) a behaviour that is |
* documented in a sprintf man page on a given operating system |
* and actually adhered to by the system's sprintf (but not on |
* most other operating systems). It may also refer to and enable |
* a behaviour that is declared 'undefined' or 'implementation specific' |
* in the man page but a given implementation behaves predictably |
* in a certain way. |
* |
* - 'x'_BUG_COMPATIBLE refers to (and enables) a behaviour of system's sprintf |
* that contradicts the sprintf man page on the same operating system. |
* |
* - I do not claim that the 'x'_COMPATIBLE and 'x'_BUG_COMPATIBLE |
* conditionals take into account all idiosyncrasies of a particular |
* implementation, there may be other incompatibilities. |
*/ |
/* ============================================= */ |
/* NO USER SERVICABLE PARTS FOLLOWING THIS POINT */ |
/* ============================================= */ |
#define PORTABLE_SNPRINTF_VERSION_MAJOR 2 |
#define PORTABLE_SNPRINTF_VERSION_MINOR 2 |
#if defined(NEED_ASPRINTF) || defined(NEED_ASNPRINTF) || defined(NEED_VASPRINTF) || defined(NEED_VASNPRINTF) |
# if defined(NEED_SNPRINTF_ONLY) |
# undef NEED_SNPRINTF_ONLY |
# endif |
# if !defined(PREFER_PORTABLE_SNPRINTF) |
# define PREFER_PORTABLE_SNPRINTF |
# endif |
#endif |
#if defined(SOLARIS_BUG_COMPATIBLE) && !defined(SOLARIS_COMPATIBLE) |
#define SOLARIS_COMPATIBLE |
#endif |
#if defined(HPUX_BUG_COMPATIBLE) && !defined(HPUX_COMPATIBLE) |
#define HPUX_COMPATIBLE |
#endif |
#if defined(DIGITAL_UNIX_BUG_COMPATIBLE) && !defined(DIGITAL_UNIX_COMPATIBLE) |
#define DIGITAL_UNIX_COMPATIBLE |
#endif |
#if defined(PERL_BUG_COMPATIBLE) && !defined(PERL_COMPATIBLE) |
#define PERL_COMPATIBLE |
#endif |
#if defined(LINUX_BUG_COMPATIBLE) && !defined(LINUX_COMPATIBLE) |
#define LINUX_COMPATIBLE |
#endif |
#include <sys/types.h> |
#include <string.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <stdarg.h> |
#include <assert.h> |
#include <errno.h> |
#ifdef isdigit |
#undef isdigit |
#endif |
#define isdigit(c) ((c) >= '0' && (c) <= '9') |
/* For copying strings longer or equal to 'breakeven_point' |
* it is more efficient to call memcpy() than to do it inline. |
* The value depends mostly on the processor architecture, |
* but also on the compiler and its optimization capabilities. |
* The value is not critical, some small value greater than zero |
* will be just fine if you don't care to squeeze every drop |
* of performance out of the code. |
* |
* Small values favor memcpy, large values favor inline code. |
*/ |
#if defined(__alpha__) || defined(__alpha) |
# define breakeven_point 2 /* AXP (DEC Alpha) - gcc or cc or egcs */ |
#endif |
#if defined(__i386__) || defined(__i386) |
# define breakeven_point 12 /* Intel Pentium/Linux - gcc 2.96 */ |
#endif |
#if defined(__hppa) |
# define breakeven_point 10 /* HP-PA - gcc */ |
#endif |
#if defined(__sparc__) || defined(__sparc) |
# define breakeven_point 33 /* Sun Sparc 5 - gcc 2.8.1 */ |
#endif |
/* some other values of possible interest: */ |
/* #define breakeven_point 8 */ /* VAX 4000 - vaxc */ |
/* #define breakeven_point 19 */ /* VAX 4000 - gcc 2.7.0 */ |
#ifndef breakeven_point |
# define breakeven_point 6 /* some reasonable one-size-fits-all value */ |
#endif |
#define fast_memcpy(d,s,n) \ |
{ register size_t nn = (size_t)(n); \ |
if (nn >= breakeven_point) memcpy((d), (s), nn); \ |
else if (nn > 0) { /* proc call overhead is worth only for large strings*/\ |
register char *dd; register const char *ss; \ |
for (ss=(s), dd=(d); nn>0; nn--) *dd++ = *ss++; } } |
#define fast_memset(d,c,n) \ |
{ register size_t nn = (size_t)(n); \ |
if (nn >= breakeven_point) memset((d), (int)(c), nn); \ |
else if (nn > 0) { /* proc call overhead is worth only for large strings*/\ |
register char *dd; register const int cc=(int)(c); \ |
for (dd=(d); nn>0; nn--) *dd++ = cc; } } |
/* prototypes */ |
#if defined(NEED_ASPRINTF) |
int asprintf (char **ptr, const char *fmt, /*args*/ ...); |
#endif |
#if defined(NEED_VASPRINTF) |
int vasprintf (char **ptr, const char *fmt, va_list ap); |
#endif |
#if defined(NEED_ASNPRINTF) |
int asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...); |
#endif |
#if defined(NEED_VASNPRINTF) |
int vasnprintf (char **ptr, size_t str_m, const char *fmt, va_list ap); |
#endif |
#if defined(HAVE_SNPRINTF) |
/* declare our portable snprintf routine under name portable_snprintf */ |
/* declare our portable vsnprintf routine under name portable_vsnprintf */ |
#else |
/* declare our portable routines under names snprintf and vsnprintf */ |
#define portable_snprintf snprintf |
#if !defined(NEED_SNPRINTF_ONLY) |
#define portable_vsnprintf vsnprintf |
#endif |
#endif |
#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) |
int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...); |
#if !defined(NEED_SNPRINTF_ONLY) |
int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap); |
#endif |
#endif |
/* declarations */ |
static char credits[] = "\n\ |
@(#)snprintf.c, v2.2: Mark Martinec, <mark.martinec@ijs.si>\n\ |
@(#)snprintf.c, v2.2: Copyright 1999, Mark Martinec. Frontier Artistic License applies.\n\ |
@(#)snprintf.c, v2.2: http://www.ijs.si/software/snprintf/\n"; |
#if defined(NEED_ASPRINTF) |
int asprintf(char **ptr, const char *fmt, /*args*/ ...) { |
va_list ap; |
size_t str_m; |
int str_l; |
*ptr = NULL; |
va_start(ap, fmt); /* measure the required size */ |
str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap); |
va_end(ap); |
assert(str_l >= 0); /* possible integer overflow if str_m > INT_MAX */ |
*ptr = (char *) malloc(str_m = (size_t)str_l + 1); |
if (*ptr == NULL) { errno = ENOMEM; str_l = -1; } |
else { |
int str_l2; |
va_start(ap, fmt); |
str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap); |
va_end(ap); |
assert(str_l2 == str_l); |
} |
return str_l; |
} |
#endif |
#if defined(NEED_VASPRINTF) |
int vasprintf(char **ptr, const char *fmt, va_list ap) { |
size_t str_m; |
int str_l; |
*ptr = NULL; |
{ va_list ap2; |
va_copy(ap2, ap); /* don't consume the original ap, we'll need it again */ |
str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/ |
va_end(ap2); |
} |
assert(str_l >= 0); /* possible integer overflow if str_m > INT_MAX */ |
*ptr = (char *) malloc(str_m = (size_t)str_l + 1); |
if (*ptr == NULL) { errno = ENOMEM; str_l = -1; } |
else { |
int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap); |
assert(str_l2 == str_l); |
} |
return str_l; |
} |
#endif |
#if defined(NEED_ASNPRINTF) |
int asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...) { |
va_list ap; |
int str_l; |
*ptr = NULL; |
va_start(ap, fmt); /* measure the required size */ |
str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap); |
va_end(ap); |
assert(str_l >= 0); /* possible integer overflow if str_m > INT_MAX */ |
if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1; /* truncate */ |
/* if str_m is 0, no buffer is allocated, just set *ptr to NULL */ |
if (str_m == 0) { /* not interested in resulting string, just return size */ |
} else { |
*ptr = (char *) malloc(str_m); |
if (*ptr == NULL) { errno = ENOMEM; str_l = -1; } |
else { |
int str_l2; |
va_start(ap, fmt); |
str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap); |
va_end(ap); |
assert(str_l2 == str_l); |
} |
} |
return str_l; |
} |
#endif |
#if defined(NEED_VASNPRINTF) |
int vasnprintf (char **ptr, size_t str_m, const char *fmt, va_list ap) { |
int str_l; |
*ptr = NULL; |
{ va_list ap2; |
va_copy(ap2, ap); /* don't consume the original ap, we'll need it again */ |
str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/ |
va_end(ap2); |
} |
assert(str_l >= 0); /* possible integer overflow if str_m > INT_MAX */ |
if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1; /* truncate */ |
/* if str_m is 0, no buffer is allocated, just set *ptr to NULL */ |
if (str_m == 0) { /* not interested in resulting string, just return size */ |
} else { |
*ptr = (char *) malloc(str_m); |
if (*ptr == NULL) { errno = ENOMEM; str_l = -1; } |
else { |
int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap); |
assert(str_l2 == str_l); |
} |
} |
return str_l; |
} |
#endif |
/* |
* If the system does have snprintf and the portable routine is not |
* specifically required, this module produces no code for snprintf/vsnprintf. |
*/ |
#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) |
#if !defined(NEED_SNPRINTF_ONLY) |
int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) { |
va_list ap; |
int str_l; |
va_start(ap, fmt); |
str_l = portable_vsnprintf(str, str_m, fmt, ap); |
va_end(ap); |
return str_l; |
} |
#endif |
#if defined(NEED_SNPRINTF_ONLY) |
int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) { |
#else |
int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) { |
#endif |
#if defined(NEED_SNPRINTF_ONLY) |
va_list ap; |
#endif |
size_t str_l = 0; |
const char *p = fmt; |
/* In contrast with POSIX, the ISO C99 now says |
* that str can be NULL and str_m can be 0. |
* This is more useful than the old: if (str_m < 1) return -1; */ |
#if defined(NEED_SNPRINTF_ONLY) |
va_start(ap, fmt); |
#endif |
if (!p) p = ""; |
while (*p) { |
if (*p != '%') { |
/* if (str_l < str_m) str[str_l++] = *p++; -- this would be sufficient */ |
/* but the following code achieves better performance for cases |
* where format string is long and contains few conversions */ |
const char *q = strchr(p+1,'%'); |
size_t n = !q ? strlen(p) : (q-p); |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memcpy(str+str_l, p, (n>avail?avail:n)); |
} |
p += n; str_l += n; |
} else { |
const char *starting_p; |
size_t min_field_width = 0, precision = 0; |
int zero_padding = 0, precision_specified = 0, justify_left = 0; |
int alternate_form = 0, force_sign = 0; |
int space_for_positive = 1; /* If both the ' ' and '+' flags appear, |
the ' ' flag should be ignored. */ |
char length_modifier = '\0'; /* allowed values: \0, h, l, L */ |
char tmp[32];/* temporary buffer for simple numeric->string conversion */ |
const char *str_arg; /* string address in case of string argument */ |
size_t str_arg_l; /* natural field width of arg without padding |
and sign */ |
unsigned char uchar_arg; |
/* unsigned char argument value - only defined for c conversion. |
N.B. standard explicitly states the char argument for |
the c conversion is unsigned */ |
size_t number_of_zeros_to_pad = 0; |
/* number of zeros to be inserted for numeric conversions |
as required by the precision or minimal field width */ |
size_t zero_padding_insertion_ind = 0; |
/* index into tmp where zero padding is to be inserted */ |
char fmt_spec = '\0'; |
/* current conversion specifier character */ |
str_arg = credits;/* just to make compiler happy (defined but not used)*/ |
str_arg = NULL; |
starting_p = p; p++; /* skip '%' */ |
/* parse flags */ |
while (*p == '0' || *p == '-' || *p == '+' || |
*p == ' ' || *p == '#' || *p == '\'') { |
switch (*p) { |
case '0': zero_padding = 1; break; |
case '-': justify_left = 1; break; |
case '+': force_sign = 1; space_for_positive = 0; break; |
case ' ': force_sign = 1; |
/* If both the ' ' and '+' flags appear, the ' ' flag should be ignored */ |
#ifdef PERL_COMPATIBLE |
/* ... but in Perl the last of ' ' and '+' applies */ |
space_for_positive = 1; |
#endif |
break; |
case '#': alternate_form = 1; break; |
case '\'': break; |
} |
p++; |
} |
/* If the '0' and '-' flags both appear, the '0' flag should be ignored. */ |
/* parse field width */ |
if (*p == '*') { |
int j; |
p++; j = va_arg(ap, int); |
if (j >= 0) min_field_width = j; |
else { min_field_width = -j; justify_left = 1; } |
} else if (isdigit((int)(*p))) { |
/* size_t could be wider than unsigned int; |
make sure we treat argument like common implementations do */ |
unsigned int uj = *p++ - '0'; |
while (isdigit((int)(*p))) uj = 10*uj + (unsigned int)(*p++ - '0'); |
min_field_width = uj; |
} |
/* parse precision */ |
if (*p == '.') { |
p++; precision_specified = 1; |
if (*p == '*') { |
int j = va_arg(ap, int); |
p++; |
if (j >= 0) precision = j; |
else { |
precision_specified = 0; precision = 0; |
/* NOTE: |
* Solaris 2.6 man page claims that in this case the precision |
* should be set to 0. Digital Unix 4.0, HPUX 10 and BSD man page |
* claim that this case should be treated as unspecified precision, |
* which is what we do here. |
*/ |
} |
} else if (isdigit((int)(*p))) { |
/* size_t could be wider than unsigned int; |
make sure we treat argument like common implementations do */ |
unsigned int uj = *p++ - '0'; |
while (isdigit((int)(*p))) uj = 10*uj + (unsigned int)(*p++ - '0'); |
precision = uj; |
} |
} |
/* parse 'h', 'l' and 'll' length modifiers */ |
if (*p == 'h' || *p == 'l') { |
length_modifier = *p; p++; |
if (length_modifier == 'l' && *p == 'l') { /* double l = long long */ |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
length_modifier = '2'; /* double l encoded as '2' */ |
#else |
length_modifier = 'l'; /* treat it as a single 'l' */ |
#endif |
p++; |
} |
} |
fmt_spec = *p; |
/* common synonyms: */ |
switch (fmt_spec) { |
case 'i': fmt_spec = 'd'; break; |
case 'D': fmt_spec = 'd'; length_modifier = 'l'; break; |
case 'U': fmt_spec = 'u'; length_modifier = 'l'; break; |
case 'O': fmt_spec = 'o'; length_modifier = 'l'; break; |
default: break; |
} |
/* get parameter value, do initial processing */ |
switch (fmt_spec) { |
case '%': /* % behaves similar to 's' regarding flags and field widths */ |
case 'c': /* c behaves similar to 's' regarding flags and field widths */ |
case 's': |
length_modifier = '\0'; /* wint_t and wchar_t not supported */ |
/* the result of zero padding flag with non-numeric conversion specifier*/ |
/* is undefined. Solaris and HPUX 10 does zero padding in this case, */ |
/* Digital Unix and Linux does not. */ |
#if !defined(SOLARIS_COMPATIBLE) && !defined(HPUX_COMPATIBLE) |
zero_padding = 0; /* turn zero padding off for string conversions */ |
#endif |
str_arg_l = 1; |
switch (fmt_spec) { |
case '%': |
str_arg = p; break; |
case 'c': { |
int j = va_arg(ap, int); |
uchar_arg = (unsigned char) j; /* standard demands unsigned char */ |
str_arg = (const char *) &uchar_arg; |
break; |
} |
case 's': |
str_arg = va_arg(ap, const char *); |
if (!str_arg) str_arg_l = 0; |
/* make sure not to address string beyond the specified precision !!! */ |
else if (!precision_specified) str_arg_l = strlen(str_arg); |
/* truncate string if necessary as requested by precision */ |
else if (precision == 0) str_arg_l = 0; |
else { |
/* memchr on HP does not like n > 2^31 !!! */ |
const char *q = memchr(str_arg, '\0', |
precision <= 0x7fffffff ? precision : 0x7fffffff); |
str_arg_l = !q ? precision : (q-str_arg); |
} |
break; |
default: break; |
} |
break; |
case 'd': case 'u': case 'o': case 'x': case 'X': case 'p': { |
/* NOTE: the u, o, x, X and p conversion specifiers imply |
the value is unsigned; d implies a signed value */ |
int arg_sign = 0; |
/* 0 if numeric argument is zero (or if pointer is NULL for 'p'), |
+1 if greater than zero (or nonzero for unsigned arguments), |
-1 if negative (unsigned argument is never negative) */ |
int int_arg = 0; unsigned int uint_arg = 0; |
/* only defined for length modifier h, or for no length modifiers */ |
long int long_arg = 0; unsigned long int ulong_arg = 0; |
/* only defined for length modifier l */ |
void *ptr_arg = NULL; |
/* pointer argument value -only defined for p conversion */ |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
long long int long_long_arg = 0; |
unsigned long long int ulong_long_arg = 0; |
/* only defined for length modifier ll */ |
#endif |
if (fmt_spec == 'p') { |
/* HPUX 10: An l, h, ll or L before any other conversion character |
* (other than d, i, u, o, x, or X) is ignored. |
* Digital Unix: |
* not specified, but seems to behave as HPUX does. |
* Solaris: If an h, l, or L appears before any other conversion |
* specifier (other than d, i, u, o, x, or X), the behavior |
* is undefined. (Actually %hp converts only 16-bits of address |
* and %llp treats address as 64-bit data which is incompatible |
* with (void *) argument on a 32-bit system). |
*/ |
#ifdef SOLARIS_COMPATIBLE |
# ifdef SOLARIS_BUG_COMPATIBLE |
/* keep length modifiers even if it represents 'll' */ |
# else |
if (length_modifier == '2') length_modifier = '\0'; |
# endif |
#else |
length_modifier = '\0'; |
#endif |
ptr_arg = va_arg(ap, void *); |
if (ptr_arg != NULL) arg_sign = 1; |
} else if (fmt_spec == 'd') { /* signed */ |
switch (length_modifier) { |
case '\0': |
case 'h': |
/* It is non-portable to specify a second argument of char or short |
* to va_arg, because arguments seen by the called function |
* are not char or short. C converts char and short arguments |
* to int before passing them to a function. |
*/ |
int_arg = va_arg(ap, int); |
if (int_arg > 0) arg_sign = 1; |
else if (int_arg < 0) arg_sign = -1; |
break; |
case 'l': |
long_arg = va_arg(ap, long int); |
if (long_arg > 0) arg_sign = 1; |
else if (long_arg < 0) arg_sign = -1; |
break; |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
case '2': |
long_long_arg = va_arg(ap, long long int); |
if (long_long_arg > 0) arg_sign = 1; |
else if (long_long_arg < 0) arg_sign = -1; |
break; |
#endif |
} |
} else { /* unsigned */ |
switch (length_modifier) { |
case '\0': |
case 'h': |
uint_arg = va_arg(ap, unsigned int); |
if (uint_arg) arg_sign = 1; |
break; |
case 'l': |
ulong_arg = va_arg(ap, unsigned long int); |
if (ulong_arg) arg_sign = 1; |
break; |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
case '2': |
ulong_long_arg = va_arg(ap, unsigned long long int); |
if (ulong_long_arg) arg_sign = 1; |
break; |
#endif |
} |
} |
str_arg = tmp; str_arg_l = 0; |
/* NOTE: |
* For d, i, u, o, x, and X conversions, if precision is specified, |
* the '0' flag should be ignored. This is so with Solaris 2.6, |
* Digital UNIX 4.0, HPUX 10, Linux, FreeBSD, NetBSD; but not with Perl. |
*/ |
#ifndef PERL_COMPATIBLE |
if (precision_specified) zero_padding = 0; |
#endif |
if (fmt_spec == 'd') { |
if (force_sign && arg_sign >= 0) |
tmp[str_arg_l++] = space_for_positive ? ' ' : '+'; |
/* leave negative numbers for sprintf to handle, |
to avoid handling tricky cases like (short int)(-32768) */ |
#ifdef LINUX_COMPATIBLE |
} else if (fmt_spec == 'p' && force_sign && arg_sign > 0) { |
tmp[str_arg_l++] = space_for_positive ? ' ' : '+'; |
#endif |
} else if (alternate_form) { |
if (arg_sign != 0 && (fmt_spec == 'x' || fmt_spec == 'X') ) |
{ tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = fmt_spec; } |
/* alternate form should have no effect for p conversion, but ... */ |
#ifdef HPUX_COMPATIBLE |
else if (fmt_spec == 'p' |
/* HPUX 10: for an alternate form of p conversion, |
* a nonzero result is prefixed by 0x. */ |
#ifndef HPUX_BUG_COMPATIBLE |
/* Actually it uses 0x prefix even for a zero value. */ |
&& arg_sign != 0 |
#endif |
) { tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = 'x'; } |
#endif |
} |
zero_padding_insertion_ind = str_arg_l; |
if (!precision_specified) precision = 1; /* default precision is 1 */ |
if (precision == 0 && arg_sign == 0 |
#if defined(HPUX_BUG_COMPATIBLE) || defined(LINUX_COMPATIBLE) |
&& fmt_spec != 'p' |
/* HPUX 10 man page claims: With conversion character p the result of |
* converting a zero value with a precision of zero is a null string. |
* Actually HP returns all zeroes, and Linux returns "(nil)". */ |
#endif |
) { |
/* converted to null string */ |
/* When zero value is formatted with an explicit precision 0, |
the resulting formatted string is empty (d, i, u, o, x, X, p). */ |
} else { |
char f[5]; int f_l = 0; |
f[f_l++] = '%'; /* construct a simple format string for sprintf */ |
if (!length_modifier) { } |
else if (length_modifier=='2') { f[f_l++] = 'l'; f[f_l++] = 'l'; } |
else f[f_l++] = length_modifier; |
f[f_l++] = fmt_spec; f[f_l++] = '\0'; |
if (fmt_spec == 'p') str_arg_l += sprintf(tmp+str_arg_l, f, ptr_arg); |
else if (fmt_spec == 'd') { /* signed */ |
switch (length_modifier) { |
case '\0': |
case 'h': str_arg_l+=sprintf(tmp+str_arg_l, f, int_arg); break; |
case 'l': str_arg_l+=sprintf(tmp+str_arg_l, f, long_arg); break; |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
case '2': str_arg_l+=sprintf(tmp+str_arg_l,f,long_long_arg); break; |
#endif |
} |
} else { /* unsigned */ |
switch (length_modifier) { |
case '\0': |
case 'h': str_arg_l+=sprintf(tmp+str_arg_l, f, uint_arg); break; |
case 'l': str_arg_l+=sprintf(tmp+str_arg_l, f, ulong_arg); break; |
#ifdef SNPRINTF_LONGLONG_SUPPORT |
case '2': str_arg_l+=sprintf(tmp+str_arg_l,f,ulong_long_arg);break; |
#endif |
} |
} |
/* include the optional minus sign and possible "0x" |
in the region before the zero padding insertion point */ |
if (zero_padding_insertion_ind < str_arg_l && |
tmp[zero_padding_insertion_ind] == '-') { |
zero_padding_insertion_ind++; |
} |
if (zero_padding_insertion_ind+1 < str_arg_l && |
tmp[zero_padding_insertion_ind] == '0' && |
(tmp[zero_padding_insertion_ind+1] == 'x' || |
tmp[zero_padding_insertion_ind+1] == 'X') ) { |
zero_padding_insertion_ind += 2; |
} |
} |
{ size_t num_of_digits = str_arg_l - zero_padding_insertion_ind; |
if (alternate_form && fmt_spec == 'o' |
#ifdef HPUX_COMPATIBLE /* ("%#.o",0) -> "" */ |
&& (str_arg_l > 0) |
#endif |
#ifdef DIGITAL_UNIX_BUG_COMPATIBLE /* ("%#o",0) -> "00" */ |
#else |
/* unless zero is already the first character */ |
&& !(zero_padding_insertion_ind < str_arg_l |
&& tmp[zero_padding_insertion_ind] == '0') |
#endif |
) { /* assure leading zero for alternate-form octal numbers */ |
if (!precision_specified || precision < num_of_digits+1) { |
/* precision is increased to force the first character to be zero, |
except if a zero value is formatted with an explicit precision |
of zero */ |
precision = num_of_digits+1; precision_specified = 1; |
} |
} |
/* zero padding to specified precision? */ |
if (num_of_digits < precision) |
number_of_zeros_to_pad = precision - num_of_digits; |
} |
/* zero padding to specified minimal field width? */ |
if (!justify_left && zero_padding) { |
int n = min_field_width - (str_arg_l+number_of_zeros_to_pad); |
if (n > 0) number_of_zeros_to_pad += n; |
} |
break; |
} |
default: /* unrecognized conversion specifier, keep format string as-is*/ |
zero_padding = 0; /* turn zero padding off for non-numeric convers. */ |
#ifndef DIGITAL_UNIX_COMPATIBLE |
justify_left = 1; min_field_width = 0; /* reset flags */ |
#endif |
#if defined(PERL_COMPATIBLE) || defined(LINUX_COMPATIBLE) |
/* keep the entire format string unchanged */ |
str_arg = starting_p; str_arg_l = p - starting_p; |
/* well, not exactly so for Linux, which does something inbetween, |
* and I don't feel an urge to imitate it: "%+++++hy" -> "%+y" */ |
#else |
/* discard the unrecognized conversion, just keep * |
* the unrecognized conversion character */ |
str_arg = p; str_arg_l = 0; |
#endif |
if (*p) str_arg_l++; /* include invalid conversion specifier unchanged |
if not at end-of-string */ |
break; |
} |
if (*p) p++; /* step over the just processed conversion specifier */ |
/* insert padding to the left as requested by min_field_width; |
this does not include the zero padding in case of numerical conversions*/ |
if (!justify_left) { /* left padding with blank or zero */ |
int n = min_field_width - (str_arg_l+number_of_zeros_to_pad); |
if (n > 0) { |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memset(str+str_l, (zero_padding?'0':' '), (n>avail?avail:n)); |
} |
str_l += n; |
} |
} |
/* zero padding as requested by the precision or by the minimal field width |
* for numeric conversions required? */ |
if (number_of_zeros_to_pad <= 0) { |
/* will not copy first part of numeric right now, * |
* force it to be copied later in its entirety */ |
zero_padding_insertion_ind = 0; |
} else { |
/* insert first part of numerics (sign or '0x') before zero padding */ |
int n = zero_padding_insertion_ind; |
if (n > 0) { |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memcpy(str+str_l, str_arg, (n>avail?avail:n)); |
} |
str_l += n; |
} |
/* insert zero padding as requested by the precision or min field width */ |
n = number_of_zeros_to_pad; |
if (n > 0) { |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memset(str+str_l, '0', (n>avail?avail:n)); |
} |
str_l += n; |
} |
} |
/* insert formatted string |
* (or as-is conversion specifier for unknown conversions) */ |
{ int n = str_arg_l - zero_padding_insertion_ind; |
if (n > 0) { |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memcpy(str+str_l, str_arg+zero_padding_insertion_ind, |
(n>avail?avail:n)); |
} |
str_l += n; |
} |
} |
/* insert right padding */ |
if (justify_left) { /* right blank padding to the field width */ |
int n = min_field_width - (str_arg_l+number_of_zeros_to_pad); |
if (n > 0) { |
if (str_l < str_m) { |
size_t avail = str_m-str_l; |
fast_memset(str+str_l, ' ', (n>avail?avail:n)); |
} |
str_l += n; |
} |
} |
} |
} |
#if defined(NEED_SNPRINTF_ONLY) |
va_end(ap); |
#endif |
if (str_m > 0) { /* make sure the string is null-terminated |
even at the expense of overwriting the last character |
(shouldn't happen, but just in case) */ |
str[str_l <= str_m-1 ? str_l : str_m-1] = '\0'; |
} |
/* Return the number of characters formatted (excluding trailing null |
* character), that is, the number of characters that would have been |
* written to the buffer if it were large enough. |
* |
* The value of str_l should be returned, but str_l is of unsigned type |
* size_t, and snprintf is int, possibly leading to an undetected |
* integer overflow, resulting in a negative return value, which is illegal. |
* Both XSH5 and ISO C99 (at least the draft) are silent on this issue. |
* Should errno be set to EOVERFLOW and EOF returned in this case??? |
*/ |
return (int) str_l; |
} |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/media/updf_newlib/pdf/snprintf.h |
---|
0,0 → 1,26 |
#ifndef _PORTABLE_SNPRINTF_H_ |
#define _PORTABLE_SNPRINTF_H_ |
#define PORTABLE_SNPRINTF_VERSION_MAJOR 2 |
#define PORTABLE_SNPRINTF_VERSION_MINOR 2 |
#ifdef HAVE_SNPRINTF |
#include <stdio.h> |
#else |
extern int snprintf(char *, size_t, const char *, /*args*/ ...); |
extern int vsnprintf(char *, size_t, const char *, va_list); |
#endif |
#if defined(HAVE_SNPRINTF) && defined(PREFER_PORTABLE_SNPRINTF) |
extern int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...); |
extern int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap); |
#define snprintf portable_snprintf |
#define vsnprintf portable_vsnprintf |
#endif |
extern int asprintf (char **ptr, const char *fmt, /*args*/ ...); |
extern int vasprintf (char **ptr, const char *fmt, va_list ap); |
extern int asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...); |
extern int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap); |
#endif |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |