diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
commit | c7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch) | |
tree | 3682407a599b8f9f03fc096298134cafba1c9b2f /include/asm-sparc64 | |
parent | 1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff) |
o Merge with Linux 2.1.116.
o New Newport console code.
o New G364 console code.
Diffstat (limited to 'include/asm-sparc64')
43 files changed, 2356 insertions, 1805 deletions
diff --git a/include/asm-sparc64/asm_offsets.h b/include/asm-sparc64/asm_offsets.h index 36b684ae6..bc1bdb8dc 100644 --- a/include/asm-sparc64/asm_offsets.h +++ b/include/asm-sparc64/asm_offsets.h @@ -14,170 +14,176 @@ #define ASIZ_task_addr_limit 0x00000008 #define AOFF_task_exec_domain 0x00000020 #define ASIZ_task_exec_domain 0x00000008 -#define AOFF_task_debugreg 0x00000028 -#define ASIZ_task_debugreg 0x00000040 -#define AOFF_task_counter 0x00000068 +#define AOFF_task_need_resched 0x00000028 +#define ASIZ_task_need_resched 0x00000008 +#define AOFF_task_counter 0x00000030 #define ASIZ_task_counter 0x00000008 -#define AOFF_task_priority 0x00000070 +#define AOFF_task_priority 0x00000038 #define ASIZ_task_priority 0x00000008 -#define AOFF_task_binfmt 0x00000078 -#define ASIZ_task_binfmt 0x00000008 -#define AOFF_task_next_task 0x00000080 +#define AOFF_task_has_cpu 0x00000040 +#define ASIZ_task_has_cpu 0x00000004 +#define AOFF_task_processor 0x00000044 +#define ASIZ_task_processor 0x00000004 +#define AOFF_task_last_processor 0x00000048 +#define ASIZ_task_last_processor 0x00000004 +#define AOFF_task_lock_depth 0x0000004c +#define ASIZ_task_lock_depth 0x00000004 +#define AOFF_task_next_task 0x00000050 #define ASIZ_task_next_task 0x00000008 -#define AOFF_task_prev_task 0x00000088 +#define AOFF_task_prev_task 0x00000058 #define ASIZ_task_prev_task 0x00000008 -#define AOFF_task_next_run 0x00000090 +#define AOFF_task_next_run 0x00000060 #define ASIZ_task_next_run 0x00000008 -#define AOFF_task_prev_run 0x00000098 +#define AOFF_task_prev_run 0x00000068 #define ASIZ_task_prev_run 0x00000008 -#define AOFF_task_exit_code 0x000000a0 +#define AOFF_task_binfmt 0x00000070 +#define ASIZ_task_binfmt 0x00000008 +#define AOFF_task_exit_code 0x00000078 #define ASIZ_task_exit_code 0x00000004 -#define AOFF_task_exit_signal 0x000000a4 +#define AOFF_task_exit_signal 0x0000007c #define ASIZ_task_exit_signal 0x00000004 -#define AOFF_task_pdeath_signal 0x000000a8 +#define AOFF_task_pdeath_signal 0x00000080 #define ASIZ_task_pdeath_signal 0x00000004 -#define AOFF_task_personality 0x000000b0 +#define AOFF_task_personality 0x00000088 #define ASIZ_task_personality 0x00000008 -#define AOFF_task_pid 0x000000bc +#define AOFF_task_pid 0x00000094 #define ASIZ_task_pid 0x00000004 -#define AOFF_task_pgrp 0x000000c0 +#define AOFF_task_pgrp 0x00000098 #define ASIZ_task_pgrp 0x00000004 -#define AOFF_task_tty_old_pgrp 0x000000c4 +#define AOFF_task_tty_old_pgrp 0x0000009c #define ASIZ_task_tty_old_pgrp 0x00000004 -#define AOFF_task_session 0x000000c8 +#define AOFF_task_session 0x000000a0 #define ASIZ_task_session 0x00000004 -#define AOFF_task_leader 0x000000cc +#define AOFF_task_leader 0x000000a4 #define ASIZ_task_leader 0x00000004 -#define AOFF_task_ngroups 0x000000d0 -#define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x000000d4 -#define ASIZ_task_groups 0x00000080 -#define AOFF_task_p_opptr 0x00000158 +#define AOFF_task_p_opptr 0x000000a8 #define ASIZ_task_p_opptr 0x00000008 -#define AOFF_task_p_pptr 0x00000160 +#define AOFF_task_p_pptr 0x000000b0 #define ASIZ_task_p_pptr 0x00000008 -#define AOFF_task_p_cptr 0x00000168 +#define AOFF_task_p_cptr 0x000000b8 #define ASIZ_task_p_cptr 0x00000008 -#define AOFF_task_p_ysptr 0x00000170 +#define AOFF_task_p_ysptr 0x000000c0 #define ASIZ_task_p_ysptr 0x00000008 -#define AOFF_task_p_osptr 0x00000178 +#define AOFF_task_p_osptr 0x000000c8 #define ASIZ_task_p_osptr 0x00000008 -#define AOFF_task_pidhash_next 0x00000180 +#define AOFF_task_pidhash_next 0x000000d0 #define ASIZ_task_pidhash_next 0x00000008 -#define AOFF_task_pidhash_pprev 0x00000188 +#define AOFF_task_pidhash_pprev 0x000000d8 #define ASIZ_task_pidhash_pprev 0x00000008 -#define AOFF_task_tarray_ptr 0x00000190 +#define AOFF_task_tarray_ptr 0x000000e0 #define ASIZ_task_tarray_ptr 0x00000008 -#define AOFF_task_wait_chldexit 0x00000198 +#define AOFF_task_wait_chldexit 0x000000e8 #define ASIZ_task_wait_chldexit 0x00000008 -#define AOFF_task_uid 0x000001a0 -#define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000001a4 -#define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000001a8 -#define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x000001ac -#define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x000001b0 -#define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x000001b4 -#define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x000001b8 -#define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x000001bc -#define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_timeout 0x000001c0 +#define AOFF_task_timeout 0x000000f0 #define ASIZ_task_timeout 0x00000008 -#define AOFF_task_policy 0x000001c8 +#define AOFF_task_policy 0x000000f8 #define ASIZ_task_policy 0x00000008 -#define AOFF_task_rt_priority 0x000001d0 +#define AOFF_task_rt_priority 0x00000100 #define ASIZ_task_rt_priority 0x00000008 -#define AOFF_task_it_real_value 0x000001d8 +#define AOFF_task_it_real_value 0x00000108 #define ASIZ_task_it_real_value 0x00000008 -#define AOFF_task_it_prof_value 0x000001e0 +#define AOFF_task_it_prof_value 0x00000110 #define ASIZ_task_it_prof_value 0x00000008 -#define AOFF_task_it_virt_value 0x000001e8 +#define AOFF_task_it_virt_value 0x00000118 #define ASIZ_task_it_virt_value 0x00000008 -#define AOFF_task_it_real_incr 0x000001f0 +#define AOFF_task_it_real_incr 0x00000120 #define ASIZ_task_it_real_incr 0x00000008 -#define AOFF_task_it_prof_incr 0x000001f8 +#define AOFF_task_it_prof_incr 0x00000128 #define ASIZ_task_it_prof_incr 0x00000008 -#define AOFF_task_it_virt_incr 0x00000200 +#define AOFF_task_it_virt_incr 0x00000130 #define ASIZ_task_it_virt_incr 0x00000008 -#define AOFF_task_real_timer 0x00000208 +#define AOFF_task_real_timer 0x00000138 #define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000230 +#define AOFF_task_times 0x00000160 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x00000250 +#define AOFF_task_start_time 0x00000180 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x00000258 +#define AOFF_task_per_cpu_utime 0x00000188 #define ASIZ_task_per_cpu_utime 0x00000008 -#define AOFF_task_min_flt 0x00000268 +#define AOFF_task_min_flt 0x00000198 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x00000270 +#define AOFF_task_maj_flt 0x000001a0 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x00000278 +#define AOFF_task_nswap 0x000001a8 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x00000280 +#define AOFF_task_cmin_flt 0x000001b0 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x00000288 +#define AOFF_task_cmaj_flt 0x000001b8 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x00000290 +#define AOFF_task_cnswap 0x000001c0 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_swap_address 0x000002a0 +#define AOFF_task_swap_address 0x000001d0 #define ASIZ_task_swap_address 0x00000008 -#define AOFF_task_old_maj_flt 0x000002a8 +#define AOFF_task_old_maj_flt 0x000001d8 #define ASIZ_task_old_maj_flt 0x00000008 -#define AOFF_task_dec_flt 0x000002b0 +#define AOFF_task_dec_flt 0x000001e0 #define ASIZ_task_dec_flt 0x00000008 -#define AOFF_task_swap_cnt 0x000002b8 +#define AOFF_task_swap_cnt 0x000001e8 #define ASIZ_task_swap_cnt 0x00000008 -#define AOFF_task_rlim 0x000002c0 +#define AOFF_task_uid 0x000001f0 +#define ASIZ_task_uid 0x00000004 +#define AOFF_task_euid 0x000001f4 +#define ASIZ_task_euid 0x00000004 +#define AOFF_task_suid 0x000001f8 +#define ASIZ_task_suid 0x00000004 +#define AOFF_task_fsuid 0x000001fc +#define ASIZ_task_fsuid 0x00000004 +#define AOFF_task_gid 0x00000200 +#define ASIZ_task_gid 0x00000004 +#define AOFF_task_egid 0x00000204 +#define ASIZ_task_egid 0x00000004 +#define AOFF_task_sgid 0x00000208 +#define ASIZ_task_sgid 0x00000004 +#define AOFF_task_fsgid 0x0000020c +#define ASIZ_task_fsgid 0x00000004 +#define AOFF_task_ngroups 0x00000210 +#define ASIZ_task_ngroups 0x00000004 +#define AOFF_task_groups 0x00000214 +#define ASIZ_task_groups 0x00000080 +#define AOFF_task_cap_effective 0x00000294 +#define ASIZ_task_cap_effective 0x00000004 +#define AOFF_task_cap_inheritable 0x00000298 +#define ASIZ_task_cap_inheritable 0x00000004 +#define AOFF_task_cap_permitted 0x0000029c +#define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_rlim 0x000002a0 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000360 +#define AOFF_task_used_math 0x00000340 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_io_usage 0x00000368 -#define ASIZ_task_io_usage 0x00000008 -#define AOFF_task_comm 0x00000370 +#define AOFF_task_comm 0x00000342 #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x00000380 +#define AOFF_task_link_count 0x00000354 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000388 +#define AOFF_task_tty 0x00000358 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000390 +#define AOFF_task_semundo 0x00000360 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000398 +#define AOFF_task_semsleeping 0x00000368 #define ASIZ_task_semsleeping 0x00000008 -#define AOFF_task_ldt 0x000003a0 -#define ASIZ_task_ldt 0x00000008 -#define AOFF_task_tss 0x000003b0 -#define ASIZ_task_tss 0x00000490 -#define AOFF_task_fs 0x00000840 +#define AOFF_task_tss 0x00000370 +#define ASIZ_task_tss 0x00000440 +#define AOFF_task_fs 0x000007b0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x00000848 +#define AOFF_task_files 0x000007b8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_mm 0x00000850 +#define AOFF_task_mm 0x000007c0 #define ASIZ_task_mm 0x00000008 -#define AOFF_task_sig 0x00000858 +#define AOFF_task_sigmask_lock 0x000007c8 +#define ASIZ_task_sigmask_lock 0x00000000 +#define AOFF_task_sig 0x000007c8 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x00000860 +#define AOFF_task_signal 0x000007d0 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x00000868 +#define AOFF_task_blocked 0x000007d8 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x00000870 +#define AOFF_task_sigqueue 0x000007e0 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x00000878 +#define AOFF_task_sigqueue_tail 0x000007e8 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_has_cpu 0x00000880 -#define ASIZ_task_has_cpu 0x00000004 -#define AOFF_task_processor 0x00000884 -#define ASIZ_task_processor 0x00000004 -#define AOFF_task_last_processor 0x00000888 -#define ASIZ_task_last_processor 0x00000004 -#define AOFF_task_lock_depth 0x0000088c -#define ASIZ_task_lock_depth 0x00000004 -#define AOFF_task_sigmask_lock 0x00000890 -#define ASIZ_task_sigmask_lock 0x00000000 +#define AOFF_task_sas_ss_sp 0x000007f0 +#define ASIZ_task_sas_ss_sp 0x00000008 +#define AOFF_task_sas_ss_size 0x000007f8 +#define ASIZ_task_sas_ss_size 0x00000008 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_cache 0x00000008 @@ -224,22 +230,24 @@ #define ASIZ_mm_def_flags 0x00000008 #define AOFF_mm_cpu_vm_mask 0x000000b0 #define ASIZ_mm_cpu_vm_mask 0x00000008 +#define AOFF_mm_segments 0x000000b8 +#define ASIZ_mm_segments 0x00000008 #define AOFF_thread_ksp 0x00000000 #define ASIZ_thread_ksp 0x00000008 -#define AOFF_thread_kpc 0x00000008 -#define ASIZ_thread_kpc 0x00000004 -#define AOFF_thread_wstate 0x0000000c +#define AOFF_thread_wstate 0x00000008 #define ASIZ_thread_wstate 0x00000002 -#define AOFF_thread_cwp 0x0000000e +#define AOFF_thread_cwp 0x0000000a #define ASIZ_thread_cwp 0x00000002 -#define AOFF_thread_flags 0x00000010 +#define AOFF_thread_flags 0x0000000c #define ASIZ_thread_flags 0x00000002 -#define AOFF_thread_ctx 0x00000012 +#define AOFF_thread_ctx 0x0000000e #define ASIZ_thread_ctx 0x00000002 -#define AOFF_thread_w_saved 0x00000014 +#define AOFF_thread_w_saved 0x00000010 #define ASIZ_thread_w_saved 0x00000002 -#define AOFF_thread_new_signal 0x00000016 +#define AOFF_thread_new_signal 0x00000012 #define ASIZ_thread_new_signal 0x00000002 +#define AOFF_thread____pad 0x00000014 +#define ASIZ_thread____pad 0x00000004 #define AOFF_thread_current_ds 0x00000018 #define ASIZ_thread_current_ds 0x00000008 #define AOFF_thread_kregs 0x00000020 @@ -247,15 +255,21 @@ #define AOFF_thread_utraps 0x00000028 #define ASIZ_thread_utraps 0x00000008 #define AOFF_thread_reg_window 0x00000030 -#define ASIZ_thread_reg_window 0x00000400 -#define AOFF_thread_rwbuf_stkptrs 0x00000430 -#define ASIZ_thread_rwbuf_stkptrs 0x00000040 -#define AOFF_thread_sig_address 0x00000470 +#define ASIZ_thread_reg_window 0x00000380 +#define AOFF_thread_rwbuf_stkptrs 0x000003b0 +#define ASIZ_thread_rwbuf_stkptrs 0x00000038 +#define AOFF_thread_sig_address 0x000003e8 #define ASIZ_thread_sig_address 0x00000008 -#define AOFF_thread_sig_desc 0x00000478 +#define AOFF_thread_sig_desc 0x000003f0 #define ASIZ_thread_sig_desc 0x00000008 -#define AOFF_thread_sstk_info 0x00000480 -#define ASIZ_thread_sstk_info 0x00000010 +#define AOFF_thread_fpdepth 0x000003f8 +#define ASIZ_thread_fpdepth 0x00000001 +#define AOFF_thread_fpsaved 0x000003f9 +#define ASIZ_thread_fpsaved 0x00000007 +#define AOFF_thread_gsr 0x00000400 +#define ASIZ_thread_gsr 0x00000007 +#define AOFF_thread_xfsr 0x00000408 +#define ASIZ_thread_xfsr 0x00000038 #else /* __SMP__ */ @@ -269,170 +283,176 @@ #define ASIZ_task_addr_limit 0x00000008 #define AOFF_task_exec_domain 0x00000020 #define ASIZ_task_exec_domain 0x00000008 -#define AOFF_task_debugreg 0x00000028 -#define ASIZ_task_debugreg 0x00000040 -#define AOFF_task_counter 0x00000068 +#define AOFF_task_need_resched 0x00000028 +#define ASIZ_task_need_resched 0x00000008 +#define AOFF_task_counter 0x00000030 #define ASIZ_task_counter 0x00000008 -#define AOFF_task_priority 0x00000070 +#define AOFF_task_priority 0x00000038 #define ASIZ_task_priority 0x00000008 -#define AOFF_task_binfmt 0x00000078 -#define ASIZ_task_binfmt 0x00000008 -#define AOFF_task_next_task 0x00000080 +#define AOFF_task_has_cpu 0x00000040 +#define ASIZ_task_has_cpu 0x00000004 +#define AOFF_task_processor 0x00000044 +#define ASIZ_task_processor 0x00000004 +#define AOFF_task_last_processor 0x00000048 +#define ASIZ_task_last_processor 0x00000004 +#define AOFF_task_lock_depth 0x0000004c +#define ASIZ_task_lock_depth 0x00000004 +#define AOFF_task_next_task 0x00000050 #define ASIZ_task_next_task 0x00000008 -#define AOFF_task_prev_task 0x00000088 +#define AOFF_task_prev_task 0x00000058 #define ASIZ_task_prev_task 0x00000008 -#define AOFF_task_next_run 0x00000090 +#define AOFF_task_next_run 0x00000060 #define ASIZ_task_next_run 0x00000008 -#define AOFF_task_prev_run 0x00000098 +#define AOFF_task_prev_run 0x00000068 #define ASIZ_task_prev_run 0x00000008 -#define AOFF_task_exit_code 0x000000a0 +#define AOFF_task_binfmt 0x00000070 +#define ASIZ_task_binfmt 0x00000008 +#define AOFF_task_exit_code 0x00000078 #define ASIZ_task_exit_code 0x00000004 -#define AOFF_task_exit_signal 0x000000a4 +#define AOFF_task_exit_signal 0x0000007c #define ASIZ_task_exit_signal 0x00000004 -#define AOFF_task_pdeath_signal 0x000000a8 +#define AOFF_task_pdeath_signal 0x00000080 #define ASIZ_task_pdeath_signal 0x00000004 -#define AOFF_task_personality 0x000000b0 +#define AOFF_task_personality 0x00000088 #define ASIZ_task_personality 0x00000008 -#define AOFF_task_pid 0x000000bc +#define AOFF_task_pid 0x00000094 #define ASIZ_task_pid 0x00000004 -#define AOFF_task_pgrp 0x000000c0 +#define AOFF_task_pgrp 0x00000098 #define ASIZ_task_pgrp 0x00000004 -#define AOFF_task_tty_old_pgrp 0x000000c4 +#define AOFF_task_tty_old_pgrp 0x0000009c #define ASIZ_task_tty_old_pgrp 0x00000004 -#define AOFF_task_session 0x000000c8 +#define AOFF_task_session 0x000000a0 #define ASIZ_task_session 0x00000004 -#define AOFF_task_leader 0x000000cc +#define AOFF_task_leader 0x000000a4 #define ASIZ_task_leader 0x00000004 -#define AOFF_task_ngroups 0x000000d0 -#define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x000000d4 -#define ASIZ_task_groups 0x00000080 -#define AOFF_task_p_opptr 0x00000158 +#define AOFF_task_p_opptr 0x000000a8 #define ASIZ_task_p_opptr 0x00000008 -#define AOFF_task_p_pptr 0x00000160 +#define AOFF_task_p_pptr 0x000000b0 #define ASIZ_task_p_pptr 0x00000008 -#define AOFF_task_p_cptr 0x00000168 +#define AOFF_task_p_cptr 0x000000b8 #define ASIZ_task_p_cptr 0x00000008 -#define AOFF_task_p_ysptr 0x00000170 +#define AOFF_task_p_ysptr 0x000000c0 #define ASIZ_task_p_ysptr 0x00000008 -#define AOFF_task_p_osptr 0x00000178 +#define AOFF_task_p_osptr 0x000000c8 #define ASIZ_task_p_osptr 0x00000008 -#define AOFF_task_pidhash_next 0x00000180 +#define AOFF_task_pidhash_next 0x000000d0 #define ASIZ_task_pidhash_next 0x00000008 -#define AOFF_task_pidhash_pprev 0x00000188 +#define AOFF_task_pidhash_pprev 0x000000d8 #define ASIZ_task_pidhash_pprev 0x00000008 -#define AOFF_task_tarray_ptr 0x00000190 +#define AOFF_task_tarray_ptr 0x000000e0 #define ASIZ_task_tarray_ptr 0x00000008 -#define AOFF_task_wait_chldexit 0x00000198 +#define AOFF_task_wait_chldexit 0x000000e8 #define ASIZ_task_wait_chldexit 0x00000008 -#define AOFF_task_uid 0x000001a0 -#define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000001a4 -#define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000001a8 -#define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x000001ac -#define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x000001b0 -#define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x000001b4 -#define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x000001b8 -#define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x000001bc -#define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_timeout 0x000001c0 +#define AOFF_task_timeout 0x000000f0 #define ASIZ_task_timeout 0x00000008 -#define AOFF_task_policy 0x000001c8 +#define AOFF_task_policy 0x000000f8 #define ASIZ_task_policy 0x00000008 -#define AOFF_task_rt_priority 0x000001d0 +#define AOFF_task_rt_priority 0x00000100 #define ASIZ_task_rt_priority 0x00000008 -#define AOFF_task_it_real_value 0x000001d8 +#define AOFF_task_it_real_value 0x00000108 #define ASIZ_task_it_real_value 0x00000008 -#define AOFF_task_it_prof_value 0x000001e0 +#define AOFF_task_it_prof_value 0x00000110 #define ASIZ_task_it_prof_value 0x00000008 -#define AOFF_task_it_virt_value 0x000001e8 +#define AOFF_task_it_virt_value 0x00000118 #define ASIZ_task_it_virt_value 0x00000008 -#define AOFF_task_it_real_incr 0x000001f0 +#define AOFF_task_it_real_incr 0x00000120 #define ASIZ_task_it_real_incr 0x00000008 -#define AOFF_task_it_prof_incr 0x000001f8 +#define AOFF_task_it_prof_incr 0x00000128 #define ASIZ_task_it_prof_incr 0x00000008 -#define AOFF_task_it_virt_incr 0x00000200 +#define AOFF_task_it_virt_incr 0x00000130 #define ASIZ_task_it_virt_incr 0x00000008 -#define AOFF_task_real_timer 0x00000208 +#define AOFF_task_real_timer 0x00000138 #define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000230 +#define AOFF_task_times 0x00000160 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x00000250 +#define AOFF_task_start_time 0x00000180 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x00000258 +#define AOFF_task_per_cpu_utime 0x00000188 #define ASIZ_task_per_cpu_utime 0x00000100 -#define AOFF_task_min_flt 0x00000458 +#define AOFF_task_min_flt 0x00000388 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x00000460 +#define AOFF_task_maj_flt 0x00000390 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x00000468 +#define AOFF_task_nswap 0x00000398 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x00000470 +#define AOFF_task_cmin_flt 0x000003a0 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x00000478 +#define AOFF_task_cmaj_flt 0x000003a8 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x00000480 +#define AOFF_task_cnswap 0x000003b0 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_swap_address 0x00000490 +#define AOFF_task_swap_address 0x000003c0 #define ASIZ_task_swap_address 0x00000008 -#define AOFF_task_old_maj_flt 0x00000498 +#define AOFF_task_old_maj_flt 0x000003c8 #define ASIZ_task_old_maj_flt 0x00000008 -#define AOFF_task_dec_flt 0x000004a0 +#define AOFF_task_dec_flt 0x000003d0 #define ASIZ_task_dec_flt 0x00000008 -#define AOFF_task_swap_cnt 0x000004a8 +#define AOFF_task_swap_cnt 0x000003d8 #define ASIZ_task_swap_cnt 0x00000008 -#define AOFF_task_rlim 0x000004b0 +#define AOFF_task_uid 0x000003e0 +#define ASIZ_task_uid 0x00000004 +#define AOFF_task_euid 0x000003e4 +#define ASIZ_task_euid 0x00000004 +#define AOFF_task_suid 0x000003e8 +#define ASIZ_task_suid 0x00000004 +#define AOFF_task_fsuid 0x000003ec +#define ASIZ_task_fsuid 0x00000004 +#define AOFF_task_gid 0x000003f0 +#define ASIZ_task_gid 0x00000004 +#define AOFF_task_egid 0x000003f4 +#define ASIZ_task_egid 0x00000004 +#define AOFF_task_sgid 0x000003f8 +#define ASIZ_task_sgid 0x00000004 +#define AOFF_task_fsgid 0x000003fc +#define ASIZ_task_fsgid 0x00000004 +#define AOFF_task_ngroups 0x00000400 +#define ASIZ_task_ngroups 0x00000004 +#define AOFF_task_groups 0x00000404 +#define ASIZ_task_groups 0x00000080 +#define AOFF_task_cap_effective 0x00000484 +#define ASIZ_task_cap_effective 0x00000004 +#define AOFF_task_cap_inheritable 0x00000488 +#define ASIZ_task_cap_inheritable 0x00000004 +#define AOFF_task_cap_permitted 0x0000048c +#define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_rlim 0x00000490 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000550 +#define AOFF_task_used_math 0x00000530 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_io_usage 0x00000558 -#define ASIZ_task_io_usage 0x00000008 -#define AOFF_task_comm 0x00000560 +#define AOFF_task_comm 0x00000532 #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x00000570 +#define AOFF_task_link_count 0x00000544 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000578 +#define AOFF_task_tty 0x00000548 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000580 +#define AOFF_task_semundo 0x00000550 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000588 +#define AOFF_task_semsleeping 0x00000558 #define ASIZ_task_semsleeping 0x00000008 -#define AOFF_task_ldt 0x00000590 -#define ASIZ_task_ldt 0x00000008 -#define AOFF_task_tss 0x000005a0 -#define ASIZ_task_tss 0x00000490 -#define AOFF_task_fs 0x00000a30 +#define AOFF_task_tss 0x00000560 +#define ASIZ_task_tss 0x00000440 +#define AOFF_task_fs 0x000009a0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x00000a38 +#define AOFF_task_files 0x000009a8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_mm 0x00000a40 +#define AOFF_task_mm 0x000009b0 #define ASIZ_task_mm 0x00000008 -#define AOFF_task_sig 0x00000a48 +#define AOFF_task_sigmask_lock 0x000009b8 +#define ASIZ_task_sigmask_lock 0x00000001 +#define AOFF_task_sig 0x000009c0 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x00000a50 +#define AOFF_task_signal 0x000009c8 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x00000a58 +#define AOFF_task_blocked 0x000009d0 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x00000a60 +#define AOFF_task_sigqueue 0x000009d8 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x00000a68 +#define AOFF_task_sigqueue_tail 0x000009e0 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_has_cpu 0x00000a70 -#define ASIZ_task_has_cpu 0x00000004 -#define AOFF_task_processor 0x00000a74 -#define ASIZ_task_processor 0x00000004 -#define AOFF_task_last_processor 0x00000a78 -#define ASIZ_task_last_processor 0x00000004 -#define AOFF_task_lock_depth 0x00000a7c -#define ASIZ_task_lock_depth 0x00000004 -#define AOFF_task_sigmask_lock 0x00000a80 -#define ASIZ_task_sigmask_lock 0x00000001 +#define AOFF_task_sas_ss_sp 0x000009e8 +#define ASIZ_task_sas_ss_sp 0x00000008 +#define AOFF_task_sas_ss_size 0x000009f0 +#define ASIZ_task_sas_ss_size 0x00000008 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_cache 0x00000008 @@ -479,22 +499,24 @@ #define ASIZ_mm_def_flags 0x00000008 #define AOFF_mm_cpu_vm_mask 0x000000b0 #define ASIZ_mm_cpu_vm_mask 0x00000008 +#define AOFF_mm_segments 0x000000b8 +#define ASIZ_mm_segments 0x00000008 #define AOFF_thread_ksp 0x00000000 #define ASIZ_thread_ksp 0x00000008 -#define AOFF_thread_kpc 0x00000008 -#define ASIZ_thread_kpc 0x00000004 -#define AOFF_thread_wstate 0x0000000c +#define AOFF_thread_wstate 0x00000008 #define ASIZ_thread_wstate 0x00000002 -#define AOFF_thread_cwp 0x0000000e +#define AOFF_thread_cwp 0x0000000a #define ASIZ_thread_cwp 0x00000002 -#define AOFF_thread_flags 0x00000010 +#define AOFF_thread_flags 0x0000000c #define ASIZ_thread_flags 0x00000002 -#define AOFF_thread_ctx 0x00000012 +#define AOFF_thread_ctx 0x0000000e #define ASIZ_thread_ctx 0x00000002 -#define AOFF_thread_w_saved 0x00000014 +#define AOFF_thread_w_saved 0x00000010 #define ASIZ_thread_w_saved 0x00000002 -#define AOFF_thread_new_signal 0x00000016 +#define AOFF_thread_new_signal 0x00000012 #define ASIZ_thread_new_signal 0x00000002 +#define AOFF_thread____pad 0x00000014 +#define ASIZ_thread____pad 0x00000004 #define AOFF_thread_current_ds 0x00000018 #define ASIZ_thread_current_ds 0x00000008 #define AOFF_thread_kregs 0x00000020 @@ -502,15 +524,21 @@ #define AOFF_thread_utraps 0x00000028 #define ASIZ_thread_utraps 0x00000008 #define AOFF_thread_reg_window 0x00000030 -#define ASIZ_thread_reg_window 0x00000400 -#define AOFF_thread_rwbuf_stkptrs 0x00000430 -#define ASIZ_thread_rwbuf_stkptrs 0x00000040 -#define AOFF_thread_sig_address 0x00000470 +#define ASIZ_thread_reg_window 0x00000380 +#define AOFF_thread_rwbuf_stkptrs 0x000003b0 +#define ASIZ_thread_rwbuf_stkptrs 0x00000038 +#define AOFF_thread_sig_address 0x000003e8 #define ASIZ_thread_sig_address 0x00000008 -#define AOFF_thread_sig_desc 0x00000478 +#define AOFF_thread_sig_desc 0x000003f0 #define ASIZ_thread_sig_desc 0x00000008 -#define AOFF_thread_sstk_info 0x00000480 -#define ASIZ_thread_sstk_info 0x00000010 +#define AOFF_thread_fpdepth 0x000003f8 +#define ASIZ_thread_fpdepth 0x00000001 +#define AOFF_thread_fpsaved 0x000003f9 +#define ASIZ_thread_fpsaved 0x00000007 +#define AOFF_thread_gsr 0x00000400 +#define ASIZ_thread_gsr 0x00000007 +#define AOFF_thread_xfsr 0x00000408 +#define ASIZ_thread_xfsr 0x00000038 #endif /* __SMP__ */ diff --git a/include/asm-sparc64/audioio.h b/include/asm-sparc64/audioio.h new file mode 100644 index 000000000..8d3000ea9 --- /dev/null +++ b/include/asm-sparc64/audioio.h @@ -0,0 +1,416 @@ +/* + * include/asm-sparc/audioio.h + * + * Sparc Audio Midlayer + * Copyright (C) 1996 Thomas K. Dyas (tdyas@noc.rutgers.edu) + */ + +#ifndef _AUDIOIO_H_ +#define _AUDIOIO_H_ + +/* + * SunOS/Solaris /dev/audio interface + */ + +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) +#include <linux/types.h> +#include <linux/time.h> +#include <linux/ioctl.h> +#endif + +/* + * This structure contains state information for audio device IO streams. + */ +typedef struct audio_prinfo { + /* + * The following values describe the audio data encoding. + */ + unsigned int sample_rate; /* samples per second */ + unsigned int channels; /* number of interleaved channels */ + unsigned int precision; /* bit-width of each sample */ + unsigned int encoding; /* data encoding method */ + + /* + * The following values control audio device configuration + */ + unsigned int gain; /* gain level: 0 - 255 */ + unsigned int port; /* selected I/O port (see below) */ + unsigned int avail_ports; /* available I/O ports (see below) */ + unsigned int _xxx[2]; /* Reserved for future use */ + + unsigned int buffer_size; /* I/O buffer size */ + + /* + * The following values describe driver state + */ + unsigned int samples; /* number of samples converted */ + unsigned int eof; /* End Of File counter (play only) */ + + unsigned char pause; /* non-zero for pause, zero to resume */ + unsigned char error; /* non-zero if overflow/underflow */ + unsigned char waiting; /* non-zero if a process wants access */ + unsigned char balance; /* stereo channel balance */ + + unsigned short minordev; + + /* + * The following values are read-only state flags + */ + unsigned char open; /* non-zero if open access permitted */ + unsigned char active; /* non-zero if I/O is active */ +} audio_prinfo_t; + + +/* + * This structure describes the current state of the audio device. + */ +typedef struct audio_info { + /* + * Per-stream information + */ + audio_prinfo_t play; /* output status information */ + audio_prinfo_t record; /* input status information */ + + /* + * Per-unit/channel information + */ + unsigned int monitor_gain; /* input to output mix: 0 - 255 */ + unsigned char output_muted; /* non-zero if output is muted */ + unsigned char _xxx[3]; /* Reserved for future use */ + unsigned int _yyy[3]; /* Reserved for future use */ +} audio_info_t; + + +/* + * Audio encoding types + */ +#define AUDIO_ENCODING_NONE (0) /* no encoding assigned */ +#define AUDIO_ENCODING_ULAW (1) /* u-law encoding */ +#define AUDIO_ENCODING_ALAW (2) /* A-law encoding */ +#define AUDIO_ENCODING_LINEAR (3) /* Linear PCM encoding */ +#define AUDIO_ENCODING_DVI (104) /* DVI ADPCM */ +#define AUDIO_ENCODING_LINEAR8 (105) /* 8 bit UNSIGNED */ +#define AUDIO_ENCODING_LINEARLE (106) /* Linear PCM LE encoding */ + +/* + * These ranges apply to record, play, and monitor gain values + */ +#define AUDIO_MIN_GAIN (0) /* minimum gain value */ +#define AUDIO_MAX_GAIN (255) /* maximum gain value */ + +/* + * These values apply to the balance field to adjust channel gain values + */ +#define AUDIO_LEFT_BALANCE (0) /* left channel only */ +#define AUDIO_MID_BALANCE (32) /* equal left/right channel */ +#define AUDIO_RIGHT_BALANCE (64) /* right channel only */ +#define AUDIO_BALANCE_SHIFT (3) + +/* + * Generic minimum/maximum limits for number of channels, both modes + */ +#define AUDIO_MIN_PLAY_CHANNELS (1) +#define AUDIO_MAX_PLAY_CHANNELS (4) +#define AUDIO_MIN_REC_CHANNELS (1) +#define AUDIO_MAX_REC_CHANNELS (4) + +/* + * Generic minimum/maximum limits for sample precision + */ +#define AUDIO_MIN_PLAY_PRECISION (8) +#define AUDIO_MAX_PLAY_PRECISION (32) +#define AUDIO_MIN_REC_PRECISION (8) +#define AUDIO_MAX_REC_PRECISION (32) + +/* + * Define some convenient names for typical audio ports + */ +/* + * output ports (several may be enabled simultaneously) + */ +#define AUDIO_SPEAKER 0x01 /* output to built-in speaker */ +#define AUDIO_HEADPHONE 0x02 /* output to headphone jack */ +#define AUDIO_LINE_OUT 0x04 /* output to line out */ + +/* + * input ports (usually only one at a time) + */ +#define AUDIO_MICROPHONE 0x01 /* input from microphone */ +#define AUDIO_LINE_IN 0x02 /* input from line in */ +#define AUDIO_CD 0x04 /* input from on-board CD inputs */ +#define AUDIO_INTERNAL_CD_IN AUDIO_CD /* input from internal CDROM */ +/* Supposedly an undocumented feature of the 4231 */ +#define AUDIO_ANALOG_LOOPBACK 0x40 + + +/* + * This macro initializes an audio_info structure to 'harmless' values. + * Note that (~0) might not be a harmless value for a flag that was + * a signed int. + */ +#define AUDIO_INITINFO(i) { \ + unsigned int *__x__; \ + for (__x__ = (unsigned int *)(i); \ + (char *) __x__ < (((char *)(i)) + sizeof (audio_info_t)); \ + *__x__++ = ~0); \ +} + +/* + * These allow testing for what the user wants to set + */ +#define AUD_INITVALUE (~0) +#define Modify(X) ((unsigned int)(X) != AUD_INITVALUE) +#define Modifys(X) ((X) != (unsigned short)AUD_INITVALUE) +#define Modifyc(X) ((X) != (unsigned char)AUD_INITVALUE) + +/* + * Parameter for the AUDIO_GETDEV ioctl to determine current + * audio devices. + */ +#define MAX_AUDIO_DEV_LEN (16) +typedef struct audio_device { + char name[MAX_AUDIO_DEV_LEN]; + char version[MAX_AUDIO_DEV_LEN]; + char config[MAX_AUDIO_DEV_LEN]; +} audio_device_t; + + +/* + * Ioctl calls for the audio device. + */ + +/* + * AUDIO_GETINFO retrieves the current state of the audio device. + * + * AUDIO_SETINFO copies all fields of the audio_info structure whose + * values are not set to the initialized value (-1) to the device state. + * It performs an implicit AUDIO_GETINFO to return the new state of the + * device. Note that the record.samples and play.samples fields are set + * to the last value before the AUDIO_SETINFO took effect. This allows + * an application to reset the counters while atomically retrieving the + * last value. + * + * AUDIO_DRAIN suspends the calling process until the write buffers are + * empty. + * + * AUDIO_GETDEV returns a structure of type audio_device_t which contains + * three strings. The string "name" is a short identifying string (for + * example, the SBus Fcode name string), the string "version" identifies + * the current version of the device, and the "config" string identifies + * the specific configuration of the audio stream. All fields are + * device-dependent -- see the device specific manual pages for details. + * + * AUDIO_GETDEV_SUNOS returns a number which is an audio device defined + * herein (making it not too portable) + * + * AUDIO_FLUSH stops all playback and recording, clears all queued buffers, + * resets error counters, and restarts recording and playback as appropriate + * for the current sampling mode. + */ +#define AUDIO_GETINFO _IOR('A', 1, audio_info_t) +#define AUDIO_SETINFO _IOWR('A', 2, audio_info_t) +#define AUDIO_DRAIN _IO('A', 3) +#define AUDIO_GETDEV _IOR('A', 4, audio_device_t) +#define AUDIO_GETDEV_SUNOS _IOR('A', 4, int) +#define AUDIO_FLUSH _IO('A', 5) + +/* Define possible audio hardware configurations for + * old SunOS-style AUDIO_GETDEV ioctl */ +#define AUDIO_DEV_UNKNOWN (0) /* not defined */ +#define AUDIO_DEV_AMD (1) /* audioamd device */ +#define AUDIO_DEV_SPEAKERBOX (2) /* dbri device with speakerbox */ +#define AUDIO_DEV_CODEC (3) /* dbri device (internal speaker) */ +#define AUDIO_DEV_CS4231 (5) /* cs4231 device */ + +/* + * The following ioctl sets the audio device into an internal loopback mode, + * if the hardware supports this. The argument is TRUE to set loopback, + * FALSE to reset to normal operation. If the hardware does not support + * internal loopback, the ioctl should fail with EINVAL. + */ +#define AUDIO_DIAG_LOOPBACK _IOW('A', 101, int) + +#ifdef notneeded +/* + * Structure sent up as a M_PROTO message on trace streams + */ +typedef struct audtrace_hdr audtrace_hdr_t; +struct audtrace_hdr { + unsigned int seq; /* Sequence number (per-aud_stream) */ + int type; /* device-dependent */ + struct timeval timestamp; + char _f[8]; /* filler */ +}; +#endif + +/* + * Linux kernel internal implementation. + */ + +#ifdef __KERNEL__ + +#include <linux/types.h> +#include <linux/fs.h> +#include <linux/tqueue.h> +#include <linux/wait.h> + +#define SDF_OPEN_WRITE 0x00000001 +#define SDF_OPEN_READ 0x00000002 + +struct sparcaudio_driver +{ + const char * name; + struct sparcaudio_operations *ops; + void *private; + unsigned long flags; + + /* This device */ + struct linux_sbus_device *dev; + + /* Processes blocked on open() sit here. */ + struct wait_queue *open_wait; + + /* Task queue for this driver's bottom half. */ + struct tq_struct tqueue; + + /* Support for a circular queue of output buffers. */ + __u8 **output_buffers; + size_t *output_sizes, output_size; + int num_output_buffers, output_front, output_rear; + int output_count, output_active, playing_count; + struct wait_queue *output_write_wait, *output_drain_wait; + + /* Support for a circular queue of input buffers. */ + __u8 **input_buffers; + int input_offset; + int num_input_buffers, input_front, input_rear; + int input_count, input_active, recording_count; + struct wait_queue *input_read_wait; +}; + +struct sparcaudio_operations +{ + int (*open)(struct inode *, struct file *, struct sparcaudio_driver *); + void (*release)(struct inode *, struct file *, + struct sparcaudio_driver *); + int (*ioctl)(struct inode *, struct file *, unsigned int, + unsigned long, struct sparcaudio_driver *); + + /* Ask driver to begin playing a buffer. */ + void (*start_output)(struct sparcaudio_driver *, __u8 *, + unsigned long); + + /* Ask driver to stop playing a buffer. */ + void (*stop_output)(struct sparcaudio_driver *); + + /* Ask driver to begin recording into a buffer. */ + void (*start_input)(struct sparcaudio_driver *, __u8 *, unsigned long); + + /* Ask driver to stop recording. */ + void (*stop_input)(struct sparcaudio_driver *); + + /* Return driver name/version to caller. (/dev/audio specific) */ + void (*sunaudio_getdev)(struct sparcaudio_driver *, audio_device_t *); + + /* Get and set the output volume. (0-255) */ + int (*set_output_volume)(struct sparcaudio_driver *, int); + int (*get_output_volume)(struct sparcaudio_driver *); + + /* Get and set the input volume. (0-255) */ + int (*set_input_volume)(struct sparcaudio_driver *, int); + int (*get_input_volume)(struct sparcaudio_driver *); + + /* Get and set the monitor volume. (0-255) */ + int (*set_monitor_volume)(struct sparcaudio_driver *, int); + int (*get_monitor_volume)(struct sparcaudio_driver *); + + /* Get and set the output balance. (0-64) */ + int (*set_output_balance)(struct sparcaudio_driver *, int); + int (*get_output_balance)(struct sparcaudio_driver *); + + /* Get and set the input balance. (0-64) */ + int (*set_input_balance)(struct sparcaudio_driver *, int); + int (*get_input_balance)(struct sparcaudio_driver *); + + /* Get and set the output channels. (1-4) */ + int (*set_output_channels)(struct sparcaudio_driver *, int); + int (*get_output_channels)(struct sparcaudio_driver *); + + /* Get and set the input channels. (1-4) */ + int (*set_input_channels)(struct sparcaudio_driver *, int); + int (*get_input_channels)(struct sparcaudio_driver *); + + /* Get and set the output precision. (8-32) */ + int (*set_output_precision)(struct sparcaudio_driver *, int); + int (*get_output_precision)(struct sparcaudio_driver *); + + /* Get and set the input precision. (8-32) */ + int (*set_input_precision)(struct sparcaudio_driver *, int); + int (*get_input_precision)(struct sparcaudio_driver *); + + /* Get and set the output port. () */ + int (*set_output_port)(struct sparcaudio_driver *, int); + int (*get_output_port)(struct sparcaudio_driver *); + + /* Get and set the input port. () */ + int (*set_input_port)(struct sparcaudio_driver *, int); + int (*get_input_port)(struct sparcaudio_driver *); + + /* Get and set the output encoding. () */ + int (*set_output_encoding)(struct sparcaudio_driver *, int); + int (*get_output_encoding)(struct sparcaudio_driver *); + + /* Get and set the input encoding. () */ + int (*set_input_encoding)(struct sparcaudio_driver *, int); + int (*get_input_encoding)(struct sparcaudio_driver *); + + /* Get and set the output rate. () */ + int (*set_output_rate)(struct sparcaudio_driver *, int); + int (*get_output_rate)(struct sparcaudio_driver *); + + /* Get and set the input rate. () */ + int (*set_input_rate)(struct sparcaudio_driver *, int); + int (*get_input_rate)(struct sparcaudio_driver *); + + /* Return driver number to caller. (SunOS /dev/audio specific) */ + int (*sunaudio_getdev_sunos)(struct sparcaudio_driver *); + + /* Get available ports */ + int (*get_output_ports)(struct sparcaudio_driver *); + int (*get_input_ports)(struct sparcaudio_driver *); + + /* Get and set output mute */ + int (*set_output_muted)(struct sparcaudio_driver *, int); + int (*get_output_muted)(struct sparcaudio_driver *); +}; + +extern int register_sparcaudio_driver(struct sparcaudio_driver *); +extern int unregister_sparcaudio_driver(struct sparcaudio_driver *); +extern void sparcaudio_output_done(struct sparcaudio_driver *, int); +extern void sparcaudio_input_done(struct sparcaudio_driver *); +extern int sparcaudio_init(void); +extern int amd7930_init(void); +extern int cs4231_init(void); + +#endif + +/* Macros to convert between mixer stereo volumes and gain (mono) */ +#define s_to_m(a) (((((a) >> 8) & 0x7f) + ((a) & 0x7f)) / 2) +#define m_to_s(a) (((a) << 8) + (a)) + +/* convert mixer stereo volume to balance */ +#define s_to_b(a) (AUDIO_RIGHT_BALANCE * ((((a) >> 8) & 0xff) / (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2))) + +/* convert mixer stereo volume to audio gain */ +#define s_to_g(a) (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2) + +/* convert gain a and balance b to mixer volume */ +#define b_to_s(a,b) ((a * (b / AUDIO_RIGHT_BALANCE) << 8) + (a * (1 - (b / AUDIO_RIGHT_BALANCE)))) + +#define SPARCAUDIO_MIXER_MINOR 0 +#define SPARCAUDIO_DSP16_MINOR 1 +#define SPARCAUDIO_DSP_MINOR 3 +#define SPARCAUDIO_AUDIO_MINOR 4 +#define SPARCAUDIO_AUDIOCTL_MINOR 5 +#define SPARCAUDIO_STATUS_MINOR 6 +#endif diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h index e8b600eb0..d355b1ed4 100644 --- a/include/asm-sparc64/bitops.h +++ b/include/asm-sparc64/bitops.h @@ -1,4 +1,4 @@ -/* $Id: bitops.h,v 1.23 1997/12/18 02:44:12 ecd Exp $ +/* $Id: bitops.h,v 1.25 1998/07/26 03:05:51 davem Exp $ * bitops.h: Bit string operations on the V9. * * Copyright 1996, 1997 David S. Miller (davem@caip.rutgers.edu) @@ -186,6 +186,56 @@ extern __inline__ unsigned long ffz(unsigned long word) return result; } +#ifdef __KERNEL__ + +/* + * ffs: find first bit set. This is defined the same way as + * the libc and compiler builtin ffs routines, therefore + * differs in spirit from the above ffz (man ffs). + */ + +#define ffs(x) generic_ffs(x) + +/* + * hweightN: returns the hamming weight (i.e. the number + * of bits set) of a N-bit word + */ + +#ifdef ULTRA_HAS_POPULATION_COUNT + +extern __inline__ unsigned int hweight32(unsigned int w) +{ + unsigned int res; + + __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffffffff)); + return res; +} + +extern __inline__ unsigned int hweight16(unsigned int w) +{ + unsigned int res; + + __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffff)); + return res; +} + +extern __inline__ unsigned int hweight8(unsigned int w) +{ + unsigned int res; + + __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xff)); + return res; +} + +#else + +#define hweight32(x) generic_hweight32(x) +#define hweight16(x) generic_hweight16(x) +#define hweight8(x) generic_hweight8(x) + +#endif +#endif /* __KERNEL__ */ + /* find_next_zero_bit() finds the first zero bit in a bit string of length * 'size' bits, starting the search at bit 'offset'. This is largely based * on Linus's ALPHA routines, which are pretty portable BTW. diff --git a/include/asm-sparc64/dma.h b/include/asm-sparc64/dma.h index 4afcd5f27..aedfa7ddd 100644 --- a/include/asm-sparc64/dma.h +++ b/include/asm-sparc64/dma.h @@ -1,4 +1,4 @@ -/* $Id: dma.h,v 1.7 1997/04/10 05:13:28 davem Exp $ +/* $Id: dma.h,v 1.8 1998/04/13 07:27:06 davem Exp $ * include/asm-sparc64/dma.h * * Copyright 1996 (C) David S. Miller (davem@caip.rutgers.edu) @@ -74,7 +74,7 @@ extern struct Linux_SBus_DMA *dma_chain; #define DMA_ISESC1(dma) ((dma)->revision == dvmaesc1) /* Main routines in dma.c */ -extern unsigned long dvma_init(struct linux_sbus *, unsigned long); +extern void dvma_init(struct linux_sbus *); /* Fields in the cond_reg register */ /* First, the version identification bits */ diff --git a/include/asm-sparc64/ebus.h b/include/asm-sparc64/ebus.h index 333f7affe..8724757c7 100644 --- a/include/asm-sparc64/ebus.h +++ b/include/asm-sparc64/ebus.h @@ -1,4 +1,4 @@ -/* $Id: ebus.h,v 1.5 1998/03/15 10:14:46 ecd Exp $ +/* $Id: ebus.h,v 1.8 1998/05/07 21:00:27 ecd Exp $ * ebus.h: PCI to Ebus pseudo driver software state. * * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) @@ -82,7 +82,7 @@ struct linux_ebus_dma { extern struct linux_ebus *ebus_chain; -extern unsigned long ebus_init(unsigned long, unsigned long); +extern void ebus_init(void); #define for_each_ebus(bus) \ for((bus) = ebus_chain; (bus); (bus) = (bus)->next) @@ -93,9 +93,4 @@ extern unsigned long ebus_init(unsigned long, unsigned long); #define for_each_edevchild(dev, child) \ for((child) = (dev)->children; (child); (child) = (child)->next) -#define for_all_ebusdev(dev, bus) \ - for ((bus) = ebus_chain, ((dev) = (bus) ? (bus)->devices : 0); \ - (bus); ((dev) = (dev)->next ? (dev)->next : \ - ((bus) = (bus)->next, (bus) ? (bus)->devices : 0))) - #endif /* !(__SPARC64_EBUS_H) */ diff --git a/include/asm-sparc64/envctrl.h b/include/asm-sparc64/envctrl.h new file mode 100644 index 000000000..1b5e4da9c --- /dev/null +++ b/include/asm-sparc64/envctrl.h @@ -0,0 +1,17 @@ +/* $Id: envctrl.h,v 1.1 1998/05/16 17:26:07 ecd Exp $ + * + * envctrl.h: Definitions for access to the i2c environment + * monitoring on Ultrasparc systems. + * + * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) + */ + +#ifndef _SPARC64_ENVCTRL_H +#define _SPARC64_ENVCTRL_H 1 + +#include <linux/ioctl.h> + +#define I2CIOCSADR _IOW('p', 0x40, int) +#define I2CIOCGADR _IOR('p', 0x41, int) + +#endif /* !(_SPARC64_ENVCTRL_H) */ diff --git a/include/asm-sparc64/fbio.h b/include/asm-sparc64/fbio.h index c890793ed..6f45ce973 100644 --- a/include/asm-sparc64/fbio.h +++ b/include/asm-sparc64/fbio.h @@ -59,8 +59,13 @@ struct fbcmap { unsigned char *blue; }; +#ifdef __KERNEL__ +#define FBIOPUTCMAP_SPARC _IOW('F', 3, struct fbcmap) +#define FBIOGETCMAP_SPARC _IOW('F', 4, struct fbcmap) +#else #define FBIOPUTCMAP _IOW('F', 3, struct fbcmap) #define FBIOGETCMAP _IOW('F', 4, struct fbcmap) +#endif /* # of device specific values */ #define FB_ATTR_NDEVSPECIFIC 8 diff --git a/include/asm-sparc64/firehose.h b/include/asm-sparc64/firehose.h index e4f4bb7e7..de403e98c 100644 --- a/include/asm-sparc64/firehose.h +++ b/include/asm-sparc64/firehose.h @@ -1,4 +1,4 @@ -/* $Id: firehose.h,v 1.2 1997/08/08 04:26:31 davem Exp $ +/* $Id: firehose.h,v 1.3 1998/06/10 07:28:43 davem Exp $ * firehose.h: Defines for the Fire Hose Controller (FHC) found * on Sunfire/Starfire/Wildfire systems. * @@ -29,7 +29,7 @@ struct fhc_internal_regs { /*0x0100*/ u32 fhc_jtag_cmd; /* FHC JTAG Command Register */ }; -/* Part of same space of regs, but mapped seperately in PROM reg property +/* Part of same space of regs, but mapped separately in PROM reg property * for the FHC, thus we have the following few structs... */ struct fhc_ign_reg { diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index ea5208f85..e90a7aca1 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h @@ -1,4 +1,4 @@ -/* $Id: floppy.h,v 1.7 1997/09/07 03:34:08 davem Exp $ +/* $Id: floppy.h,v 1.11 1998/05/22 14:33:39 jj Exp $ * asm-sparc64/floppy.h: Sparc specific parts of the Floppy driver. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -11,6 +11,7 @@ #define __ASM_SPARC64_FLOPPY_H #include <linux/config.h> +#include <linux/init.h> #include <asm/page.h> #include <asm/pgtable.h> @@ -39,7 +40,7 @@ struct sun_flpy_controller { #define dcr_82077 dir_82077 /* Config Control reg. */ }; -/* You'll only ever find one controller on a SparcStation anyways. */ +/* You'll only ever find one controller on an Ultra anyways. */ static struct sun_flpy_controller *sun_fdc = NULL; volatile unsigned char *fdc_status; static struct linux_sbus_device *floppy_sdev = NULL; @@ -229,21 +230,10 @@ static int sun_fd_request_irq(void) int error; if(!once) { - struct devid_cookie dcookie; - once = 1; - dcookie.real_dev_id = NULL; - dcookie.imap = dcookie.iclr = 0; - dcookie.pil = -1; - dcookie.bus_cookie = floppy_sdev->my_bus; - - error = request_fast_irq(FLOPPY_IRQ, floppy_hardint, - (SA_INTERRUPT | SA_SBUS | SA_DCOOKIE), - "floppy", &dcookie); - - if(error == 0) - FLOPPY_IRQ = dcookie.ret_ino; + error = request_fast_irq(FLOPPY_IRQ, floppy_hardint, + SA_INTERRUPT, "floppy", NULL); return ((error == 0) ? 0 : -1); } @@ -294,29 +284,45 @@ static void sun_pci_fd_outb(unsigned char val, unsigned long port) outb(val, port); } -static void sun_pci_fd_enable_dma(void) +static void sun_pci_fd_reset_dma(void) { unsigned int dcsr; - dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr); - dcsr |= (EBUS_DCSR_EN_DMA | EBUS_DCSR_EN_CNT); + writel(EBUS_DCSR_RESET, &sun_fd_ebus_dma->dcsr); + + dcsr = EBUS_DCSR_BURST_SZ_16 | EBUS_DCSR_TCI_DIS | + EBUS_DCSR_EN_CNT | EBUS_DCSR_INT_EN; writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); } +static void sun_pci_fd_enable_dma(void) +{ + unsigned int dcsr; + + dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr |= EBUS_DCSR_EN_DMA; + writel(dcsr, &sun_fd_ebus_dma->dcsr); +} + static void sun_pci_fd_disable_dma(void) { unsigned int dcsr; - dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr); - dcsr &= ~(EBUS_DCSR_EN_DMA | EBUS_DCSR_EN_CNT); - writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_fd_ebus_dma->dcsr); + while (dcsr & EBUS_DCSR_DRAIN) + dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr &= ~(EBUS_DCSR_EN_DMA); + if (dcsr & EBUS_DCSR_ERR_PEND) + sun_pci_fd_reset_dma(); + writel(dcsr, &sun_fd_ebus_dma->dcsr); } static void sun_pci_fd_set_dma_mode(int mode) { unsigned int dcsr; - dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr |= EBUS_DCSR_EN_CNT | EBUS_DCSR_TC; /* * For EBus WRITE means to system memory, which is * READ for us. @@ -325,61 +331,61 @@ static void sun_pci_fd_set_dma_mode(int mode) dcsr &= ~(EBUS_DCSR_WRITE); else dcsr |= EBUS_DCSR_WRITE; - writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_fd_ebus_dma->dcsr); } static void sun_pci_fd_set_dma_count(int length) { - writel(length, (unsigned long)&sun_fd_ebus_dma->dbcr); + writel(length, &sun_fd_ebus_dma->dbcr); } static void sun_pci_fd_set_dma_addr(char *buffer) { - unsigned int addr; + unsigned int addr = virt_to_bus(buffer); + writel(addr, &sun_fd_ebus_dma->dacr); +} - addr = virt_to_bus(buffer); - writel(addr, (unsigned long)&sun_fd_ebus_dma->dacr); +static unsigned int sun_pci_get_dma_residue(void) +{ + return readl(&sun_fd_ebus_dma->dbcr); } static void sun_pci_fd_enable_irq(void) { unsigned int dcsr; - dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_fd_ebus_dma->dcsr); dcsr |= EBUS_DCSR_INT_EN; - writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_fd_ebus_dma->dcsr); } static void sun_pci_fd_disable_irq(void) { unsigned int dcsr; - dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_fd_ebus_dma->dcsr); dcsr &= ~(EBUS_DCSR_INT_EN); - writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_fd_ebus_dma->dcsr); } static int sun_pci_fd_request_irq(void) { - int error; + int err; - error = request_irq(FLOPPY_IRQ, floppy_interrupt, SA_SHIRQ, "floppy", sun_fdc); - return ((error == 0) ? 0 : -1); + err = request_irq(FLOPPY_IRQ, floppy_interrupt, SA_SHIRQ, + "floppy", sun_fdc); + if (err) + return -1; + sun_pci_fd_enable_irq(); + return 0; } static void sun_pci_fd_free_irq(void) { + sun_pci_fd_disable_irq(); free_irq(FLOPPY_IRQ, sun_fdc); } -static unsigned int sun_pci_get_dma_residue(void) -{ - unsigned int res; - - res = readl((unsigned long)&sun_fd_ebus_dma->dbcr); - return res; -} - static int sun_pci_fd_eject(int drive) { return -EINVAL; @@ -388,7 +394,7 @@ static int sun_pci_fd_eject(int drive) static struct linux_prom_registers fd_regs[2]; -static unsigned long sun_floppy_init(void) +__initfunc(static unsigned long sun_floppy_init(void)) { char state[128]; int fd_node, num_regs; @@ -401,19 +407,26 @@ static unsigned long sun_floppy_init(void) } if(sdev) { floppy_sdev = sdev; - FLOPPY_IRQ = sdev->irqs[0].pri; + FLOPPY_IRQ = sdev->irqs[0]; } else { #ifdef CONFIG_PCI struct linux_ebus *ebus; - struct linux_ebus_device *edev; + struct linux_ebus_device *edev = 0; - for_all_ebusdev(edev, ebus) { - if (!strcmp(edev->prom_name, "fdthree")) - break; + for_each_ebus(ebus) { + for_each_ebusdev(edev, ebus) { + if (!strcmp(edev->prom_name, "fdthree")) + goto ebus_done; + } } + ebus_done: if (!edev) return -1; + prom_getproperty(edev->prom_node, "status", state, sizeof(state)); + if(!strncmp(state, "disabled", 8)) + return -1; + if (check_region(edev->base_address[1], sizeof(struct linux_ebus_dma))) { printk("sun_floppy_init: can't get region %016lx (%d)\n", edev->base_address[1], (int)sizeof(struct linux_ebus_dma)); @@ -425,7 +438,7 @@ static unsigned long sun_floppy_init(void) FLOPPY_IRQ = edev->irqs[0]; sun_fd_ebus_dma = (struct linux_ebus_dma *)edev->base_address[1]; - writel(EBUS_DCSR_BURST_SZ_16, (unsigned long)&sun_fd_ebus_dma->dcsr); + sun_pci_fd_reset_dma(); sun_fdops.fd_inb = sun_pci_fd_inb; sun_fdops.fd_outb = sun_pci_fd_outb; @@ -460,12 +473,11 @@ static unsigned long sun_floppy_init(void) num_regs = prom_getproperty(fd_node, "reg", (char *) fd_regs, sizeof(fd_regs)); num_regs = (num_regs / sizeof(fd_regs[0])); prom_apply_sbus_ranges(sdev->my_bus, fd_regs, num_regs, sdev); - sun_fdc = (struct sun_flpy_controller *) sparc_alloc_io(fd_regs[0].phys_addr, - 0x0, - fd_regs[0].reg_size, - "floppy", - fd_regs[0].which_io, - 0x0); + /* We cannot do sparc_alloc_io here: it does request_region, which is the generic + floppy driver trying to do once again */ + sun_fdc = (struct sun_flpy_controller *) (PAGE_OFFSET + fd_regs[0].phys_addr + + (((unsigned long)fd_regs[0].which_io) << 32)); + /* Last minute sanity check... */ if(sun_fdc->status1_82077 == 0xff) { sun_fdc = NULL; diff --git a/include/asm-sparc64/fpumacro.h b/include/asm-sparc64/fpumacro.h index 91b9b81f8..9fd631670 100644 --- a/include/asm-sparc64/fpumacro.h +++ b/include/asm-sparc64/fpumacro.h @@ -8,14 +8,13 @@ #define _SPARC64_FPUMACRO_H #include <asm/asi.h> +#include <asm/visasm.h> struct fpustate { u32 regs[64]; - u64 fsr; - u64 gsr; }; -#define FPUSTATE (struct fpustate *)(((unsigned long)current) + (((PAGE_SIZE<<1)-((64*4)+(2*8))) & ~(64 - 1))) +#define FPUSTATE (struct fpustate *)(((unsigned long)current) + AOFF_task_fpregs) extern __inline__ unsigned long fprs_read(void) { diff --git a/include/asm-sparc64/ide.h b/include/asm-sparc64/ide.h index acd593303..8ac583281 100644 --- a/include/asm-sparc64/ide.h +++ b/include/asm-sparc64/ide.h @@ -1,4 +1,4 @@ -/* $Id: ide.h,v 1.6 1998/03/15 13:29:13 ecd Exp $ +/* $Id: ide.h,v 1.9 1998/05/08 21:05:28 davem Exp $ * ide.h: Ultra/PCI specific IDE glue. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) @@ -97,24 +97,43 @@ static __inline__ int ide_ack_intr(ide_ioreg_t status_port, ide_ioreg_t irq_port /* From m68k code... */ +#ifdef insl +#undef insl +#endif +#ifdef outsl +#undef outsl +#endif +#ifdef insw +#undef insw +#endif +#ifdef outsw +#undef outsw +#endif + #define insl(data_reg, buffer, wcount) insw(data_reg, buffer, (wcount)<<1) #define outsl(data_reg, buffer, wcount) outsw(data_reg, buffer, (wcount)<<1) #define insw(port, buf, nr) ide_insw((port), (buf), (nr)) #define outsw(port, buf, nr) ide_outsw((port), (buf), (nr)) +/* We need to use L1 cache bypassing to prevent dcache alias + * inconsistencies with user space. -DaveM + */ static __inline__ void ide_insw(unsigned long port, void *dst, unsigned long count) { volatile unsigned short *data_port; - u16 *ps = dst; + u16 *ps = (u16 *)__pa(dst); u32 *pi; data_port = (volatile unsigned short *)port; if(((u64)ps) & 0x2) { - *ps++ = *data_port; + __asm__ __volatile__("stha %0, [%1] %2" + : /* no outputs */ + : "r" (*data_port), "r" (ps++), + "i" (ASI_PHYS_USE_EC)); count--; } pi = (u32 *)ps; @@ -123,12 +142,18 @@ static __inline__ void ide_insw(unsigned long port, w = (*data_port) << 16; w |= (*data_port); - *pi++ = w; + __asm__ __volatile__("stwa %0, [%1] %2" + : /* no outputs */ + : "r" (w), "r" (pi++), + "i" (ASI_PHYS_USE_EC)); count -= 2; } ps = (u16 *)pi; if(count) - *ps = *data_port; + __asm__ __volatile__("stha %0, [%1] %2" + : /* no outputs */ + : "r" (*data_port), "r" (ps), + "i" (ASI_PHYS_USE_EC)); } static __inline__ void ide_outsw(unsigned long port, @@ -136,27 +161,37 @@ static __inline__ void ide_outsw(unsigned long port, unsigned long count) { volatile unsigned short *data_port; - const u16 *ps = src; + const u16 *ps = (const u16 *)__pa(src); const u32 *pi; data_port = (volatile unsigned short *)port; if(((u64)src) & 0x2) { - *data_port = *ps++; + u16 w; + __asm__ __volatile__("lduha [%1] %2, %0" + : "=r" (w) + : "r" (ps++), "i" (ASI_PHYS_USE_EC)); + *data_port = w; count--; } pi = (const u32 *)ps; while(count >= 2) { u32 w; - - w = *pi++; + __asm__ __volatile__("lduwa [%1] %2, %0" + : "=r" (w) + : "r" (pi++), "i" (ASI_PHYS_USE_EC)); *data_port = (w >> 16); *data_port = w; count -= 2; } ps = (const u16 *)pi; - if(count) - *data_port = *ps; + if(count) { + u16 w; + __asm__ __volatile__("lduha [%1] %2, %0" + : "=r" (w) + : "r" (ps++), "i" (ASI_PHYS_USE_EC)); + *data_port = w; + } } #define T_CHAR (0x0000) /* char: don't touch */ diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index 3b8502189..a6bdff9a3 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h @@ -1,4 +1,4 @@ -/* $Id: io.h,v 1.16 1998/03/24 05:54:40 ecd Exp $ */ +/* $Id: io.h,v 1.18 1998/07/12 12:07:43 ecd Exp $ */ #ifndef __SPARC64_IO_H #define __SPARC64_IO_H @@ -13,27 +13,48 @@ #define __SLOW_DOWN_IO do { } while (0) #define SLOW_DOWN_IO do { } while (0) + +#define PCI_DVMA_HASHSZ 256 + extern unsigned long pci_dvma_offset; extern unsigned long pci_dvma_mask; +extern unsigned long pci_dvma_v2p_hash[PCI_DVMA_HASHSZ]; +extern unsigned long pci_dvma_p2v_hash[PCI_DVMA_HASHSZ]; + +#define pci_dvma_ahashfn(addr) (((addr) >> 24) & 0xff) + extern __inline__ unsigned long virt_to_phys(volatile void *addr) { unsigned long vaddr = (unsigned long)addr; + unsigned long off; /* Handle kernel variable pointers... */ if (vaddr < PAGE_OFFSET) vaddr += PAGE_OFFSET - (unsigned long)&empty_zero_page; - return ((vaddr - PAGE_OFFSET) | pci_dvma_offset); + + off = pci_dvma_v2p_hash[pci_dvma_ahashfn(vaddr - PAGE_OFFSET)]; + return vaddr + off; } extern __inline__ void *phys_to_virt(unsigned long addr) { - return ((void *)((addr & pci_dvma_mask) + PAGE_OFFSET)); + unsigned long paddr = addr & 0xffffffffUL; + unsigned long off; + + off = pci_dvma_p2v_hash[pci_dvma_ahashfn(paddr)]; + return (void *)(paddr + off); } #define virt_to_bus virt_to_phys #define bus_to_virt phys_to_virt +extern __inline__ unsigned long bus_dvma_to_mem(unsigned long vaddr) +{ + return vaddr & pci_dvma_mask; +} + + extern __inline__ unsigned int inb(unsigned long addr) { unsigned int ret; diff --git a/include/asm-sparc64/irq.h b/include/asm-sparc64/irq.h index b7e6f2d23..b9a900406 100644 --- a/include/asm-sparc64/irq.h +++ b/include/asm-sparc64/irq.h @@ -1,39 +1,39 @@ -/* $Id: irq.h,v 1.8 1998/03/15 17:23:51 ecd Exp $ +/* $Id: irq.h,v 1.10 1998/05/29 06:00:39 ecd Exp $ * irq.h: IRQ registers on the 64-bit Sparc. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz) */ #ifndef _SPARC64_IRQ_H #define _SPARC64_IRQ_H #include <linux/linkage.h> - -/* Sparc64 extensions to the interrupt registry flags. Mostly this is - * for passing along what bus type the device is on and also the true - * format of the dev_id cookie, see below. - */ -#define SA_BUSMASK 0x0f000 -#define SA_SBUS 0x01000 -#define SA_PCI 0x02000 -#define SA_FHC 0x03000 -#define SA_EBUS 0x04000 -#define SA_BUS(mask) ((mask) & SA_BUSMASK) +#include <linux/kernel.h> struct devid_cookie { - /* Caller specifies these. */ - void *real_dev_id; /* What dev_id would usually contain. */ - unsigned int *imap; /* Anonymous IMAP register */ - unsigned int *iclr; /* Anonymous ICLR register */ - int pil; /* Anonymous PIL */ - void *bus_cookie; /* SYSIO regs, PSYCHO regs, etc. */ - - /* Return values. */ - unsigned int ret_ino; - unsigned int ret_pil; + int dummy; +}; + +/* You should not mess with this directly. That's the job of irq.c. */ +struct ino_bucket { + unsigned short ino; + short imap_off; + unsigned short pil; + unsigned short flags; + unsigned int *iclr; }; -#define SA_DCOOKIE 0x10000 +#define __irq_ino(irq) ((struct ino_bucket *)(unsigned long)(irq))->ino +#define __irq_pil(irq) ((struct ino_bucket *)(unsigned long)(irq))->pil + +static __inline__ char *__irq_itoa(unsigned int irq) +{ + static char buff[16]; + + sprintf(buff, "%d,%x", __irq_pil(irq), __irq_ino(irq)); + return buff; +} #define NR_IRQS 15 @@ -41,6 +41,9 @@ extern void disable_irq(unsigned int); extern void enable_irq(unsigned int); extern void init_timers(void (*lvl10_irq)(int, void *, struct pt_regs *), unsigned long *); +extern unsigned int build_irq(int pil, int inofixup, unsigned int *iclr, unsigned int *imap); +extern unsigned int sbus_build_irq(void *sbus, unsigned int ino); +extern unsigned int psycho_build_irq(void *psycho, int imap_off, int ino, int need_dma_sync); #ifdef __SMP__ extern void set_cpu_int(int, int); @@ -76,9 +79,4 @@ extern __inline__ unsigned long get_softint(void) return retval; } -static __inline__ int irq_cannonicalize(int irq) -{ - return irq; -} - #endif diff --git a/include/asm-sparc64/linux_logo.h b/include/asm-sparc64/linux_logo.h index 59bd61866..df564adcd 100644 --- a/include/asm-sparc64/linux_logo.h +++ b/include/asm-sparc64/linux_logo.h @@ -1,4 +1,4 @@ -/* $Id: linux_logo.h,v 1.3 1997/08/25 07:50:35 jj Exp $ +/* $Id: linux_logo.h,v 1.6 1998/07/30 16:30:48 jj Exp $ * include/asm-sparc64/linux_logo.h: This is a linux logo * to be displayed on boot. * @@ -23,899 +23,904 @@ #define linux_logo_banner "Linux/UltraSPARC version " UTS_RELEASE -#define LINUX_LOGO_COLORS 215 +#define LINUX_LOGO_COLORS 219 + +#ifdef INCLUDE_LINUX_LOGO_DATA unsigned char linux_logo_red[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xB0, - 0x0C, 0xB1, 0xD4, 0xCE, 0x04, 0x06, 0x16, 0xB6, - 0xCD, 0xB2, 0x42, 0x46, 0x4B, 0xA8, 0xF3, 0xCA, - 0xC5, 0x1C, 0xDC, 0xA0, 0xD4, 0xE6, 0xED, 0xF3, - 0xC2, 0x8E, 0xCC, 0xA5, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x79, 0x68, 0x8D, 0xAF, 0xFC, 0x8E, 0x3E, - 0x6B, 0x11, 0x37, 0x79, 0x5C, 0x3C, 0x3F, 0x3C, - 0x48, 0x47, 0x3D, 0xB9, 0x62, 0xE1, 0x4D, 0x57, - 0x84, 0x78, 0xA6, 0x58, 0x99, 0xCD, 0xB7, 0xE3, - 0x6D, 0x5A, 0xAF, 0x79, 0x79, 0xF2, 0x42, 0x46, - 0xDD, 0x89, 0xC3, 0xF2, 0xF0, 0xE0, 0xD1, 0x90, - 0x76, 0x6B, 0x4A, 0xBE, 0xBD, 0xE3, 0xF6, 0xE9, - 0xEC, 0xE8, 0xEC, 0xC0, 0x66, 0x63, 0xCB, 0xAB, - 0x49, 0x5C, 0xAD, 0xD6, 0xEE, 0xF5, 0xF5, 0xE9, - 0x6E, 0x00, 0x69, 0x6A, 0xA1, 0x7A, 0xB4, 0xDE, - 0xF1, 0xF6, 0xDD, 0x00, 0x73, 0xDB, 0x4C, 0x53, - 0x6A, 0xF5, 0xF5, 0xD6, 0xC3, 0x6A, 0x4B, 0x4B, - 0x60, 0xF8, 0x9B, 0xD7, 0xD7, 0x71, 0xB3, 0xA4, - 0xCA, 0xAB, 0xB4, 0xB2, 0x76, 0xBA, 0x8B, 0xA0, - 0xA5, 0xEE, 0xE7, 0x67, 0x5F, 0x08, 0x94, 0xDB, - 0xE5, 0x4F, 0x00, 0x34, 0xEE, 0xEC, 0xE2, 0x48, - 0xF3, 0xEB, 0xF4, 0xF4, 0xEF, 0xD6, 0xB6, 0xE6, - 0xE6, 0xED, 0xE7, 0xE6, 0x3D, 0xE7, 0xCD, 0x44, - 0xEF, 0xEC, 0xF5, 0x66, 0xF3, 0xA9, 0x77, 0x58, - 0x75, 0x6C, 0x53, 0x24, 0xAC, 0x0D, 0x3C + 0x03, 0x9E, 0xEC, 0xEE, 0xC4, 0xDA, 0x50, 0xC9, + 0xC5, 0xED, 0x65, 0xE3, 0xE3, 0xF4, 0x24, 0xA4, + 0xEC, 0xEE, 0x94, 0xE5, 0xE3, 0x6A, 0xA6, 0xC4, + 0xDC, 0xE5, 0x13, 0xF3, 0xD1, 0xFD, 0xE2, 0xDB, + 0xA0, 0xC2, 0xEC, 0xB8, 0xC2, 0xD5, 0xF2, 0xF4, + 0xC5, 0x3E, 0xF1, 0x1B, 0x55, 0xF5, 0xCF, 0xF7, + 0xA9, 0xB4, 0xEB, 0x6C, 0x0A, 0x74, 0xB4, 0xF7, + 0xF0, 0xF5, 0xD4, 0xF2, 0xCE, 0xF5, 0xC7, 0x26, + 0x5B, 0xF4, 0xBC, 0x7F, 0xAB, 0x82, 0x94, 0xE5, + 0xFC, 0x3A, 0xF2, 0xFD, 0xF0, 0x1C, 0xEF, 0xD4, + 0xF3, 0x0F, 0xED, 0xF7, 0xC9, 0x49, 0xC3, 0xBA, + 0xC8, 0xD4, 0xE7, 0xF3, 0xF5, 0xA7, 0xEC, 0xF9, + 0xFA, 0x0A, 0xF5, 0xCF, 0xFC, 0xEA, 0xE1, 0xA6, + 0xD6, 0xBC, 0xF8, 0xF7, 0xB4, 0xEB, 0xDC, 0x84, + 0xCE, 0xBA, 0x45, 0xD6, 0x86, 0x50, 0x96, 0xC6, + 0x8C, 0x6E, 0xE8, 0x60, 0x3C, 0x70, 0xF0, 0x93, + 0x7C, 0xDA, 0xDA, 0x9C, 0xBA, 0x6D, 0x4D, 0x2B, + 0x2F, 0x8B, 0xE0, 0xCC, 0xDA, 0x5C, 0x3D, 0xEE, + 0xDB, 0x46, 0xAC, 0x96, 0xCE, 0xD1, 0xE3, 0xF1, + 0x96, 0x7A, 0x80, 0xB2, 0xBA, 0xB6, 0xD2, 0x1E, + 0x7E, 0xAA, 0xC4, 0xF0, 0x96, 0x65, 0x9E, 0xC2, + 0xAA, 0xF5, 0xF2, 0xE9, 0xE6, 0xD1, 0x35, 0xC7, + 0xF6, 0xB6, 0xE8, 0x82, 0xBE, 0xC2, 0xF2, 0x9E, + 0xC7, 0xB4, 0x0F, 0xF7, 0xE8, 0xD8, 0xCC, 0x9C, + 0xD8, 0xD8, 0xA0, 0xEA, 0xC6, 0xA8, 0xE0, 0xEC, + 0xD1, 0xF7, 0xF4, 0xFC, 0x75, 0xBD, 0xDC, 0xDD, + 0xCC, 0xE1, 0xFA, 0xEE, 0xAA, 0xEC, 0xF2, 0xB8, + 0xE2, 0xCD, 0x87 }; unsigned char linux_logo_green[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xAD, - 0x0C, 0xB1, 0x92, 0xAB, 0x03, 0x06, 0x16, 0xB6, - 0xCD, 0x88, 0x42, 0x46, 0x4B, 0x94, 0xBB, 0xCA, - 0xC5, 0x1C, 0xAB, 0xA0, 0xD4, 0xE6, 0xED, 0xF3, - 0xC2, 0x73, 0xCA, 0x91, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x5A, 0x49, 0x56, 0x6E, 0xFC, 0x6B, 0x3E, - 0x6B, 0x0D, 0x37, 0x79, 0x51, 0x44, 0x3F, 0x43, - 0x38, 0x3D, 0x48, 0xB9, 0x62, 0xA5, 0x47, 0x48, - 0x49, 0x4A, 0x97, 0x48, 0x81, 0x95, 0x8E, 0xE3, - 0x6D, 0x57, 0x51, 0x51, 0x47, 0xB2, 0x42, 0x46, - 0xDD, 0x5B, 0x87, 0xBE, 0xC7, 0xC8, 0x56, 0x75, - 0x5D, 0x4B, 0x4D, 0xBE, 0x85, 0xA6, 0xBC, 0xC7, - 0xCA, 0xCD, 0xCC, 0xA4, 0x53, 0x4D, 0x9F, 0x55, - 0x52, 0x5E, 0x75, 0x9C, 0xB6, 0xC3, 0xD7, 0xCC, - 0x55, 0x00, 0x6A, 0x59, 0x7D, 0x55, 0x7C, 0xA3, - 0xB7, 0xBF, 0xA5, 0x00, 0x67, 0xC6, 0x47, 0x54, - 0x46, 0xB8, 0xBE, 0xB2, 0x87, 0x52, 0x4B, 0x43, - 0x41, 0xF8, 0x69, 0x96, 0x9B, 0x66, 0xB0, 0x6C, - 0x8E, 0x81, 0xB4, 0x76, 0x76, 0xB9, 0x65, 0x77, - 0x6D, 0xED, 0xE7, 0x67, 0x5F, 0x06, 0x54, 0x6C, - 0xCB, 0x4F, 0x00, 0x2F, 0xC2, 0xB5, 0xB6, 0x30, - 0xC3, 0xAE, 0xC4, 0xCA, 0xC6, 0xB4, 0x7B, 0xAD, - 0xAD, 0xB6, 0xB6, 0xAD, 0x29, 0xAB, 0x93, 0x2E, - 0xBC, 0xBC, 0xC9, 0x53, 0xBF, 0x77, 0x54, 0x3B, - 0x4B, 0x3F, 0x39, 0x19, 0x76, 0x08, 0x2C + 0x03, 0x88, 0xC4, 0xE2, 0x85, 0xC2, 0x44, 0xA3, + 0xA9, 0xD3, 0x65, 0xA6, 0xC5, 0xF3, 0x24, 0xA4, + 0xB4, 0xD6, 0x63, 0xD5, 0xB7, 0x44, 0x86, 0x94, + 0xC2, 0xE4, 0x14, 0xB6, 0xD2, 0xFB, 0xD4, 0xB2, + 0x73, 0x96, 0xDB, 0x92, 0xC2, 0x95, 0xC2, 0xDA, + 0xA4, 0x36, 0xD4, 0x0E, 0x55, 0xF4, 0xC4, 0xE9, + 0x75, 0xB4, 0xBC, 0x52, 0x0A, 0x74, 0x84, 0xEB, + 0xDC, 0xDA, 0xA2, 0xD6, 0x9B, 0xBD, 0xB7, 0x12, + 0x44, 0xCA, 0x8C, 0x65, 0x7B, 0x54, 0x94, 0xAB, + 0xF4, 0x25, 0xC4, 0xFD, 0xE4, 0x1C, 0xDD, 0xAB, + 0xBD, 0x06, 0xCB, 0xD6, 0xCA, 0x33, 0x8C, 0xA2, + 0x92, 0x9C, 0xBC, 0xDB, 0xCD, 0x6E, 0xEC, 0xEE, + 0xBC, 0x03, 0xDA, 0xCE, 0xF4, 0xB6, 0xDB, 0x92, + 0xAD, 0xBC, 0xDE, 0xD5, 0x7B, 0xAE, 0x9D, 0x84, + 0xB6, 0x96, 0x44, 0xBA, 0x6E, 0x3C, 0x7A, 0xB2, + 0x8C, 0x4C, 0xCE, 0x4C, 0x3C, 0x5A, 0xCA, 0x6D, + 0x7C, 0xCE, 0xDA, 0x9C, 0xAA, 0x6D, 0x4D, 0x2B, + 0x1B, 0x5E, 0xCB, 0xAC, 0xBE, 0x5C, 0x2E, 0xDC, + 0xBD, 0x3E, 0xAC, 0x82, 0xB6, 0xBE, 0xD3, 0xBD, + 0x72, 0x62, 0x6C, 0x82, 0x92, 0x9E, 0xB0, 0x13, + 0x4A, 0x8E, 0xBE, 0xCE, 0x86, 0x45, 0x6B, 0xAA, + 0x9A, 0xC5, 0xC6, 0xDA, 0xC5, 0xC4, 0x34, 0x9B, + 0xCC, 0xAC, 0xC4, 0x76, 0x9A, 0x9E, 0xEE, 0x62, + 0xC6, 0x76, 0x0D, 0xE4, 0xDA, 0xD5, 0xA5, 0x92, + 0xCD, 0xB2, 0x7C, 0xCC, 0xBE, 0x7E, 0xDC, 0xD6, + 0xB9, 0xE3, 0xD4, 0xF6, 0x55, 0x82, 0xA4, 0xAA, + 0x8D, 0xBB, 0xCE, 0xD5, 0x8A, 0xDB, 0xD4, 0x8B, + 0xCA, 0x93, 0x63 }; unsigned char linux_logo_blue[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0xD6, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x39, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xA7, - 0x0C, 0xB1, 0x58, 0x8A, 0x03, 0x07, 0x16, 0xB6, - 0xCD, 0x5A, 0x42, 0x46, 0x4F, 0x6F, 0x77, 0xCA, - 0xC5, 0x1C, 0x6F, 0xA5, 0xD4, 0xE6, 0xF5, 0xF3, - 0xC2, 0x4D, 0xD1, 0x64, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x49, 0x3C, 0x47, 0x45, 0xFE, 0x3B, 0x41, - 0x6B, 0x09, 0x37, 0x79, 0x39, 0x39, 0x3F, 0x42, - 0x3A, 0x42, 0x5F, 0xB9, 0x62, 0x4C, 0x39, 0x44, - 0x3B, 0x3A, 0xA0, 0x3D, 0x08, 0x08, 0x09, 0xDE, - 0x6D, 0x48, 0x3B, 0x3F, 0x42, 0xF3, 0x36, 0x3C, - 0xDD, 0x06, 0x16, 0x08, 0x13, 0x0A, 0x4B, 0x71, - 0x5D, 0x44, 0x47, 0xBE, 0x08, 0x0C, 0x0D, 0x0C, - 0x19, 0x29, 0x36, 0x06, 0x43, 0x44, 0xBA, 0x45, - 0x50, 0x58, 0x07, 0x07, 0x0D, 0x0E, 0x10, 0x50, - 0x06, 0x42, 0x40, 0x44, 0x79, 0x06, 0x06, 0x0C, - 0x08, 0x08, 0x07, 0x36, 0x4C, 0xE5, 0x42, 0x55, - 0x03, 0x0F, 0x12, 0x06, 0x07, 0x3C, 0x4B, 0x3D, - 0x01, 0xF8, 0x08, 0x0E, 0x0A, 0x69, 0xAC, 0x0C, - 0x0A, 0x27, 0xBB, 0x36, 0x76, 0xC0, 0x04, 0x08, - 0x08, 0xED, 0xEE, 0x68, 0x5F, 0xB2, 0x3B, 0x52, - 0xAC, 0x4F, 0x6F, 0x2D, 0x16, 0x08, 0x59, 0x04, - 0x13, 0x0E, 0x14, 0x17, 0x16, 0x2E, 0x08, 0x0D, - 0x11, 0x14, 0x0D, 0x06, 0x04, 0x08, 0x25, 0x8E, - 0x0E, 0x14, 0x25, 0x9B, 0x1C, 0x16, 0x78, 0x06, - 0x04, 0x03, 0x79, 0x8C, 0x0B, 0xC8, 0x48 + 0x04, 0x28, 0x10, 0x8C, 0x0B, 0x84, 0x14, 0x1A, + 0x77, 0x1F, 0x64, 0x0E, 0x85, 0xD2, 0x24, 0xA4, + 0x0F, 0x54, 0x0C, 0x7C, 0x3F, 0x04, 0x20, 0x0D, + 0x54, 0xDF, 0x14, 0x0D, 0xD1, 0xE9, 0xB0, 0x11, + 0x0A, 0x40, 0x57, 0x14, 0xC3, 0x0C, 0x04, 0x12, + 0x50, 0x0C, 0x7D, 0x05, 0x55, 0xF2, 0xBA, 0xC7, + 0x09, 0xB4, 0x0E, 0x24, 0x0B, 0x74, 0x0C, 0xB6, + 0x80, 0x48, 0x10, 0x34, 0x0F, 0x0C, 0xA0, 0x04, + 0x19, 0x10, 0x0E, 0x14, 0x0E, 0x05, 0x94, 0x0E, + 0xCA, 0x0B, 0x46, 0xFB, 0xB4, 0x1C, 0x9B, 0x1A, + 0x21, 0x09, 0x14, 0x4D, 0xCB, 0x08, 0x11, 0x7C, + 0x20, 0x10, 0x24, 0x66, 0x79, 0x07, 0xEA, 0xC9, + 0x0C, 0x08, 0x38, 0xC4, 0xD8, 0x24, 0xBE, 0x6C, + 0x51, 0xBB, 0x8C, 0x36, 0x0A, 0x0F, 0x0C, 0x84, + 0x3C, 0x54, 0x44, 0x7C, 0x28, 0x0E, 0x28, 0x7F, + 0x8C, 0x0F, 0x54, 0x24, 0x3C, 0x18, 0x54, 0x17, + 0x7C, 0x9C, 0xDA, 0x9C, 0x7C, 0x6C, 0x4D, 0x2C, + 0x09, 0x0E, 0x8A, 0x50, 0x4C, 0x5B, 0x14, 0xAC, + 0x19, 0x3C, 0xAC, 0x5C, 0x64, 0x97, 0x94, 0x37, + 0x29, 0x3C, 0x44, 0x3C, 0x2C, 0x7C, 0x70, 0x07, + 0x04, 0x29, 0xB2, 0x64, 0x74, 0x07, 0x07, 0x2C, + 0x74, 0x2E, 0x6C, 0xA4, 0x29, 0x9E, 0x34, 0x27, + 0x2F, 0x98, 0x48, 0x5C, 0x0C, 0x5C, 0xE8, 0x04, + 0xC2, 0x0C, 0x0A, 0xB2, 0x74, 0xCB, 0x46, 0x78, + 0xB4, 0x5C, 0x18, 0x80, 0x8C, 0x24, 0xD9, 0xAC, + 0x87, 0x99, 0x1D, 0xE8, 0x14, 0x0D, 0x10, 0x17, + 0x0A, 0x67, 0x3C, 0x68, 0x3C, 0x69, 0x90, 0x22, + 0x6C, 0x0D, 0x17 }; unsigned char linux_logo[] __initdata = { + 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2, 0x2F, 0x2F, + 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0xA3, + 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51, 0x51, 0x2F, + 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44, 0x89, 0x51, + 0xB2, 0x2F, 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x66, + 0xA3, 0xB2, 0xB2, 0xB2, 0x89, 0xD8, 0x44, 0x44, + 0xD8, 0x83, 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2, + 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, + 0x2F, 0xA3, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51, + 0x51, 0x2F, 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44, + 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F, 0x2F, 0xA3, + 0x66, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x98, + 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51, 0xB2, 0x2F, + 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51, 0xB2, 0x2F, + 0x2F, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, + 0xB2, 0xB2, 0x2F, 0x2F, 0xB2, 0x51, 0x51, 0x51, + 0x51, 0x51, 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F, + 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66, 0x66, + 0x66, 0x98, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51, + 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51, + 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0x2F, 0xA3, + 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66, 0x66, 0x98, + 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F, + 0xA3, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, + 0xA3, 0x66, 0x98, 0xA3, 0x51, 0xB2, 0x2F, 0xA3, + 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0x51, 0xB2, 0xB2, + 0xB2, 0x2F, 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, + 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66, + 0x66, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51, + 0xB2, 0x2F, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0xB2, + 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51, 0xB2, 0xA3, + 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x98, 0x98, + 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51, 0xB2, 0xA3, + 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, + 0x66, 0x98, 0xB2, 0x4C, 0x54, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xCE, 0x2F, 0xB2, 0x2F, 0x2F, + 0xA3, 0x98, 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51, + 0xB2, 0xA3, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, + 0x98, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51, + 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0xB2, 0x2F, + 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66, + 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0xA3, + 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0x2F, 0xA0, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x9C, 0xB2, 0xA3, + 0x66, 0x98, 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, + 0xB2, 0x2F, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, + 0x66, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2, + 0x2F, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0xA3, + 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3, + 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x2F, 0x2F, + 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0xA3, 0x66, + 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xB2, + 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xDA, 0x3A, 0x20, 0x54, 0x55, + 0xA3, 0x98, 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, + 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, + 0x2F, 0x2F, 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, + 0xA3, 0x66, 0x66, 0x66, 0x2F, 0xA3, 0x2F, 0x2F, + 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66, + 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3, 0xB2, 0xB2, + 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, + 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xAD, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA7, 0x4C, 0xCE, 0xDA, 0x20, + 0xA6, 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, + 0x2F, 0x66, 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3, + 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2, 0x2F, 0x98, + 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, + 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x51, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xCE, 0x55, 0xAD, 0xA7, 0x54, + 0x20, 0x8F, 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2, + 0x2F, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2, + 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, + 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0x8F, 0x66, 0x2F, 0xB2, 0x51, 0x2F, 0x98, + 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2, + 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66, + 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x21, 0x22, 0x23, 0x24, 0x24, - 0x25, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x25, - 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x23, 0x23, - 0x23, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x26, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x26, 0x28, - 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2B, 0x2B, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2B, 0x2B, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x29, 0x29, 0x2C, 0x29, 0x29, 0x29, 0x28, - 0x28, 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2A, 0x2A, - 0x2A, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2D, 0x2E, 0x2F, 0x27, - 0x27, 0x26, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, - 0x28, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x29, - 0x29, 0x29, 0x28, 0x28, 0x2A, 0x2B, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xCE, 0x4C, 0x9C, 0x2E, 0xDA, + 0x20, 0xDA, 0x51, 0x8F, 0x66, 0x2F, 0xB2, 0x51, + 0x2F, 0x98, 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51, + 0x51, 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, + 0x66, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66, + 0x51, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0xA3, 0xA0, + 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xA3, + 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x98, + 0x98, 0x98, 0x98, 0x66, 0x66, 0xB2, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6D, 0x3A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xA5, 0x66, 0x2F, 0xB2, 0x51, 0xB2, + 0xA3, 0xA0, 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, + 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66, + 0x98, 0x98, 0x8F, 0x98, 0x66, 0x66, 0x66, 0x66, + 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0, + 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66, + 0x98, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x2F, 0xA3, 0x2F, 0x2F, 0x51, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xDA, 0x51, 0xB2, 0x51, 0x51, 0x2F, + 0x66, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, + 0x2F, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0x51, 0x2F, 0xB2, 0x51, 0x2F, 0xA3, 0x8F, 0x8F, + 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3, 0x98, 0x66, + 0x98, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x2F, + 0xB2, 0xB2, 0x51, 0xB2, 0xB2, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2F, 0x30, 0x31, 0x32, - 0x27, 0x27, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20, - 0x20, 0x20, 0x2B, 0x2A, 0x28, 0x29, 0x29, 0x29, - 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0xB2, 0x51, 0x2F, 0xA3, + 0x8F, 0x8F, 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3, + 0x98, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66, + 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, + 0xB2, 0x2F, 0xA3, 0x2F, 0x66, 0x98, 0x8F, 0x98, + 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98, 0x98, 0x98, + 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0xB2, + 0x51, 0x51, 0x51, 0xB2, 0xB2, 0x8F, 0x20, 0x20, + 0x20, 0x54, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x54, 0x6D, 0x6D, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4C, 0xA3, 0x2F, 0x66, 0x98, + 0x8F, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98, + 0x98, 0x98, 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3, + 0x2F, 0xB2, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F, + 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98, + 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F, 0x98, 0xA3, + 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66, 0x2F, 0xB2, + 0x51, 0xB2, 0x2F, 0xA3, 0xA3, 0xA0, 0x20, 0x20, + 0xDA, 0x2E, 0x3A, 0xA7, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xCE, 0x2A, 0x2A, 0x2E, 0xA7, 0xDA, 0x20, + 0x20, 0x20, 0x20, 0x9C, 0xA3, 0x66, 0x98, 0x98, + 0x8F, 0x98, 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F, + 0x98, 0xA3, 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66, + 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3, + 0xB2, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66, 0xA3, + 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66, 0x2F, 0x2F, + 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F, 0xB2, 0xB2, + 0xB2, 0xA3, 0x66, 0x66, 0x66, 0x98, 0x20, 0x3A, + 0x98, 0x89, 0x8F, 0x6D, 0x20, 0x20, 0x20, 0x20, + 0x4C, 0x66, 0x51, 0x44, 0x51, 0x2E, 0x54, 0x20, + 0x20, 0x20, 0x20, 0xA7, 0x66, 0x98, 0x8F, 0x8F, + 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66, + 0x2F, 0x2F, 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F, + 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3, + 0x2F, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x2F, + 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0xB2, + 0xA3, 0x8F, 0x98, 0xA3, 0xB2, 0x51, 0x89, 0x89, + 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x98, 0x20, 0xA6, + 0x44, 0x39, 0xE6, 0x98, 0x20, 0x20, 0x20, 0x9C, + 0x74, 0xD6, 0x7E, 0xD6, 0x39, 0x8F, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2E, 0x98, 0x8F, 0x8F, 0x98, + 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3, + 0x2F, 0xB2, 0x66, 0x98, 0x8F, 0xA3, 0xB2, 0x51, + 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66, + 0x2F, 0x66, 0x8F, 0xA0, 0x8F, 0x98, 0xA3, 0xB2, + 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, + 0x66, 0x98, 0xA3, 0xB2, 0x89, 0x44, 0x89, 0x51, + 0x2F, 0x66, 0x98, 0x98, 0xA3, 0x66, 0x20, 0x2F, + 0x2F, 0xAD, 0x89, 0xD6, 0x3A, 0x20, 0x20, 0x55, + 0x6B, 0x51, 0x6D, 0x4C, 0xD8, 0xD6, 0x2E, 0x20, + 0x20, 0x20, 0x20, 0x54, 0x8F, 0xA0, 0x8F, 0x98, + 0xA3, 0xB2, 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F, + 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x44, + 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3, + 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2, + 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0xA3, + 0xA3, 0x2F, 0xB2, 0x89, 0xD8, 0xD8, 0x51, 0x66, + 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0xA3, 0x20, 0x44, + 0xA7, 0xCE, 0xA6, 0x4D, 0xCE, 0x6D, 0xA7, 0xA0, + 0x6B, 0xA7, 0x20, 0x92, 0xAD, 0x6B, 0x4C, 0x20, + 0x20, 0x20, 0x20, 0x54, 0x98, 0xA0, 0x8F, 0x66, + 0x2F, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F, + 0x2F, 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0xD8, 0xD8, + 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66, + 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2, + 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, + 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51, 0x66, 0xA0, + 0x55, 0xA5, 0x55, 0x8F, 0x66, 0xA3, 0x20, 0x44, + 0x6D, 0x54, 0xA7, 0x74, 0x2E, 0x4B, 0xBF, 0x9C, + 0x7E, 0xDA, 0x20, 0x54, 0x2E, 0x6B, 0x2A, 0x20, + 0x20, 0x20, 0x20, 0x3A, 0x8F, 0x55, 0x8F, 0xA3, + 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F, + 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51, + 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66, + 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2, + 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0x2F, + 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98, 0xA0, 0x2A, + 0xA5, 0x55, 0x98, 0x66, 0xA3, 0xB2, 0x20, 0x2F, + 0x4C, 0x20, 0x4B, 0xBB, 0xCF, 0x6F, 0x27, 0x36, + 0x93, 0xCE, 0x20, 0x20, 0xA6, 0x3D, 0x4C, 0x20, + 0x20, 0x20, 0x20, 0xDA, 0xA0, 0xA0, 0x8F, 0xA3, + 0x2F, 0xB2, 0x66, 0x98, 0xA3, 0x2F, 0xB2, 0x2F, + 0x2F, 0x2F, 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98, + 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3, + 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0x2F, + 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, + 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55, 0xAD, 0x2A, + 0x55, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0x20, 0x2A, + 0xE6, 0x95, 0xE5, 0x5A, 0x52, 0x52, 0x3F, 0x27, + 0x22, 0xC7, 0x9D, 0x60, 0xA2, 0xA2, 0x3A, 0x20, + 0x20, 0x20, 0x20, 0x54, 0x66, 0xA0, 0x8F, 0xA3, + 0xB2, 0x2F, 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2, + 0xB2, 0x2F, 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55, + 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F, + 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0xB2, + 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0x2F, 0x2F, + 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A, 0x2A, 0xA5, + 0x8F, 0x66, 0xA3, 0xB2, 0x2F, 0x51, 0x20, 0x6D, + 0x77, 0xF7, 0xEE, 0x30, 0xB0, 0x72, 0x72, 0x5B, + 0x82, 0xEA, 0x72, 0xB0, 0x90, 0x96, 0x71, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F, + 0xB2, 0xB2, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2, + 0xB2, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A, + 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2, + 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0xB2, 0xB2, + 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F, 0xA3, + 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A, 0xA5, 0x8F, + 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x51, 0x20, 0x69, + 0x64, 0xF9, 0x3F, 0x52, 0x52, 0x72, 0x29, 0x82, + 0x47, 0x47, 0x47, 0x8B, 0x72, 0xB7, 0x60, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F, + 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0x89, 0x51, 0x2F, + 0x2F, 0xA3, 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A, + 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, + 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2, + 0xA3, 0xA3, 0xB2, 0x51, 0xB2, 0x2F, 0xA3, 0x2F, + 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0xA5, 0x8F, 0x98, + 0x66, 0x66, 0xB2, 0x51, 0x51, 0x51, 0x81, 0xFA, + 0x62, 0xEE, 0x30, 0x52, 0x22, 0x72, 0x82, 0x82, + 0x47, 0x47, 0xEA, 0x3F, 0x37, 0x6F, 0x26, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2A, 0x98, 0x66, 0x2F, + 0x51, 0xB2, 0xA3, 0x66, 0xB2, 0x51, 0x51, 0xB2, + 0xA3, 0x2F, 0xB2, 0x89, 0xB2, 0x66, 0x55, 0x55, + 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2, + 0x74, 0xA0, 0x8F, 0x98, 0x66, 0xB2, 0xB2, 0xB2, + 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x2F, 0xA3, 0x2F, + 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55, 0xA0, 0xA0, + 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0x51, 0x54, 0xA9, + 0x62, 0xEF, 0x52, 0x22, 0x72, 0x29, 0xEA, 0xEA, + 0x29, 0x22, 0x37, 0x37, 0x8E, 0xCF, 0x49, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6D, 0x2F, 0x66, 0x2F, + 0x51, 0xB2, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0x2F, + 0xA3, 0x2F, 0xB2, 0x51, 0x2F, 0x98, 0xA0, 0x55, + 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3, + 0xA3, 0x2A, 0xA5, 0x98, 0xA3, 0x2F, 0xB2, 0x2F, + 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, + 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0, 0xA0, 0xA0, + 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xB2, 0x54, 0xA8, + 0x65, 0x5C, 0x52, 0x22, 0x29, 0x29, 0x29, 0xB0, + 0x62, 0x56, 0xF9, 0x79, 0xF9, 0xBB, 0x4B, 0x20, + 0x6D, 0xA5, 0x2E, 0x20, 0x20, 0xA3, 0xA3, 0x2F, + 0xB2, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, + 0x2F, 0x2F, 0xB2, 0x2F, 0x66, 0x8F, 0xA0, 0xA0, + 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3, + 0xA0, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, + 0xA3, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xA3, 0x66, + 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x98, + 0xA3, 0x51, 0x89, 0x89, 0xA3, 0x2F, 0x20, 0x54, + 0xDF, 0xFA, 0x40, 0x37, 0xD4, 0x43, 0x56, 0x64, + 0x76, 0xF9, 0x78, 0x41, 0x5E, 0x5E, 0x4C, 0x20, + 0x20, 0xAD, 0x8F, 0x9C, 0x20, 0xA5, 0xA3, 0x2F, + 0x2F, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, + 0xA3, 0x66, 0xA3, 0x2F, 0x66, 0x8F, 0x8F, 0x8F, + 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66, + 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2, + 0x2F, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66, + 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3, + 0xB2, 0x89, 0xD8, 0x51, 0x66, 0x51, 0x20, 0x6D, + 0x51, 0x77, 0x9F, 0xF7, 0xEE, 0x8E, 0xF9, 0xF0, + 0x24, 0xF7, 0x77, 0x5E, 0x74, 0xD8, 0x98, 0x20, + 0x20, 0x2E, 0x55, 0x92, 0x20, 0x54, 0x51, 0x2F, + 0x2F, 0xB2, 0xB2, 0xA3, 0x2F, 0x51, 0x51, 0xB2, + 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66, + 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98, + 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2, + 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66, + 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2, + 0x89, 0xD8, 0x89, 0xB2, 0x66, 0x66, 0x20, 0x6D, + 0x89, 0xC2, 0xA4, 0x96, 0xC6, 0x64, 0x50, 0x40, + 0xF4, 0x97, 0x89, 0x74, 0x7E, 0x6B, 0x39, 0xA7, + 0x20, 0x20, 0x3A, 0x54, 0x20, 0x20, 0xA7, 0x51, + 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, + 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, + 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66, + 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2, + 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, + 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51, + 0x89, 0x89, 0xB2, 0x66, 0x2F, 0x6D, 0x20, 0xCE, + 0x39, 0x74, 0x89, 0x5E, 0xBD, 0x87, 0xC8, 0xD1, + 0x89, 0x44, 0x3C, 0x4D, 0x6B, 0x6B, 0x6B, 0x2F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA3, + 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, + 0x2F, 0xA3, 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, + 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66, + 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, + 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0x2F, 0xA3, + 0x66, 0x66, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, + 0xB2, 0x2F, 0x66, 0x66, 0x2A, 0x20, 0x54, 0x44, + 0x6B, 0x39, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, + 0xD8, 0x39, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, + 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, + 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, + 0xA3, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, + 0xB2, 0xB2, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x66, + 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66, + 0x98, 0x66, 0x66, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, + 0x66, 0x98, 0x98, 0x98, 0x3A, 0x54, 0x2A, 0x6B, + 0x6B, 0x6B, 0x83, 0x44, 0x89, 0x89, 0x44, 0x3C, + 0xD6, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xAD, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0x66, 0x66, 0x98, 0x66, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x8F, 0x98, + 0x8F, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, + 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x8F, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x8F, 0xA0, + 0xA0, 0xA0, 0xA3, 0xDA, 0x20, 0x3A, 0x39, 0x6B, + 0x6B, 0x6B, 0x4D, 0xA2, 0x74, 0x3C, 0x7E, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x98, + 0x8F, 0xA0, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0xA0, + 0x8F, 0x66, 0x66, 0xA3, 0x66, 0xA3, 0xA3, 0x2F, + 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x98, + 0x98, 0xA0, 0x98, 0x66, 0x66, 0x98, 0x8F, 0xA0, + 0xA0, 0xA3, 0x2E, 0x20, 0x20, 0x8F, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3A, 0x51, 0x2F, 0xA3, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x98, + 0x8F, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0x8F, 0xA0, + 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, + 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66, + 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x66, 0x8F, + 0x66, 0xA6, 0x20, 0x20, 0x6D, 0x39, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2E, 0x89, 0xA3, 0xA3, 0x66, 0x66, + 0x66, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, + 0x66, 0x8F, 0x98, 0x98, 0x66, 0x98, 0x98, 0x8F, + 0x2F, 0x51, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x66, 0x2F, + 0x55, 0x20, 0x20, 0x20, 0x4C, 0x39, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x4D, 0x7E, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2E, 0x51, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0xA3, + 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66, + 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0xA3, 0x2F, 0xA3, + 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, + 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x98, 0x98, 0xA0, + 0x20, 0x20, 0x20, 0x20, 0xA5, 0x83, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x4D, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x4D, 0x4D, 0xD6, 0x7E, 0xDD, + 0x3C, 0x39, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x92, 0xB2, 0xA3, 0xA3, + 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, 0x98, + 0x98, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3, + 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, + 0x2F, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x2F, 0xDA, + 0x20, 0x20, 0x20, 0xDA, 0xA0, 0x51, 0x3C, 0x7E, + 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x7E, 0x3C, 0xD8, 0x44, 0xD8, + 0x44, 0x83, 0x89, 0xDA, 0x20, 0x3A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB2, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, + 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0x2F, + 0x3C, 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, + 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3, + 0xA3, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x20, + 0x20, 0x20, 0x20, 0x6D, 0x2F, 0xE6, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0xD6, 0x3D, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0xA2, + 0x74, 0x44, 0xA2, 0xA3, 0x20, 0x3A, 0x2E, 0x6D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xA6, 0xA3, 0x66, + 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0x66, 0x66, 0x98, + 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3, + 0x83, 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, + 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA6, 0x20, + 0x3A, 0x3A, 0x54, 0x55, 0x7E, 0x6B, 0x6B, 0x6B, + 0x4D, 0x3D, 0x6B, 0x6B, 0x6B, 0x57, 0x33, 0xEB, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x4D, 0xA2, 0x74, 0x39, 0x92, 0x20, 0x20, 0x6D, + 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, + 0x98, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3, + 0x89, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F, + 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xB2, 0x3A, 0x20, + 0xA7, 0x20, 0x3A, 0x39, 0x6B, 0x6B, 0x6B, 0x6B, + 0xB5, 0xCB, 0x6B, 0x6B, 0x3D, 0x8A, 0x42, 0x3D, + 0x6B, 0x6B, 0x6B, 0x84, 0x6C, 0x4D, 0x6B, 0x6B, + 0x6B, 0x6B, 0x7E, 0x83, 0x51, 0x20, 0x20, 0x20, + 0x6D, 0x3A, 0x20, 0x20, 0x20, 0x20, 0xAD, 0x66, + 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, + 0xB2, 0x98, 0x66, 0x66, 0x98, 0x66, 0x66, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x20, 0x6D, + 0x3A, 0x20, 0x98, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0xAA, 0x33, 0x6B, 0x6B, 0x3D, 0xF5, 0x7B, 0x3D, + 0x6B, 0x6B, 0x4F, 0x4A, 0x58, 0x3D, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x7E, 0x7E, 0x9C, 0x54, 0xA7, + 0x2E, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x54, 0x51, + 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, + 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, + 0xB2, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3, + 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0xB2, + 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA6, 0x20, 0xCE, + 0x20, 0x6D, 0x4D, 0x6B, 0xD6, 0x7E, 0x6B, 0x6B, + 0x6E, 0x9A, 0x57, 0x6B, 0x2D, 0x7B, 0x7B, 0x3D, + 0x6B, 0x84, 0xF5, 0x7B, 0x84, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x98, 0x3A, 0x9C, + 0xCE, 0x3A, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x98, + 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0x2F, + 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, + 0x89, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3, + 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0xB2, + 0xB2, 0x2F, 0x2F, 0x2F, 0x89, 0x54, 0x6D, 0x3A, + 0x20, 0x98, 0x6B, 0x6B, 0xE0, 0xB4, 0x6B, 0x6B, + 0x2D, 0x9E, 0x4A, 0x3D, 0x84, 0xF5, 0xF5, 0x84, + 0x6B, 0x6E, 0x59, 0x6C, 0x6B, 0x6B, 0x6B, 0x6B, + 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0xDD, 0xDA, 0x6D, + 0x54, 0x20, 0xCE, 0x20, 0x20, 0x20, 0x20, 0xA7, + 0x51, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2, 0x2F, 0x2F, + 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, + 0x89, 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, + 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x2F, + 0xB2, 0x2F, 0x2F, 0xA3, 0x98, 0x20, 0xA7, 0x20, + 0x3A, 0x7E, 0x6B, 0x6B, 0x7F, 0xDE, 0xF6, 0x3D, + 0x6B, 0xDB, 0x8A, 0xDB, 0xE9, 0xF3, 0xF3, 0xDB, + 0x68, 0xF3, 0x73, 0x7F, 0x6B, 0x6B, 0x57, 0x58, + 0xDC, 0x2D, 0x6B, 0x6B, 0x6B, 0x6B, 0x3A, 0x20, + 0x20, 0x20, 0x6D, 0x54, 0x20, 0x20, 0x20, 0x20, + 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x66, + 0xA3, 0x66, 0x98, 0x98, 0x66, 0x98, 0x98, 0x66, + 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, + 0x66, 0x98, 0x8F, 0x98, 0xCE, 0xDA, 0x2E, 0x20, + 0x2A, 0x6B, 0x6B, 0x6B, 0x6B, 0x2C, 0x34, 0xCB, + 0xEB, 0x6C, 0x31, 0x59, 0x82, 0x82, 0x8B, 0x82, + 0xF3, 0x73, 0xE9, 0x6B, 0x3D, 0x6E, 0xF3, 0x4A, + 0x4F, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x92, 0x20, + 0x20, 0x20, 0x6D, 0x6D, 0x20, 0x20, 0x20, 0x20, + 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x8F, 0x98, + 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x66, 0xA3, + 0xA3, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3, + 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x66, + 0x8F, 0x55, 0xA5, 0x98, 0x20, 0x2E, 0x54, 0x54, + 0x89, 0x6B, 0x6B, 0x6B, 0x6B, 0x84, 0xE3, 0x4A, + 0x58, 0x42, 0x5B, 0x8B, 0x82, 0x82, 0x82, 0x82, + 0x82, 0x59, 0x58, 0x57, 0x57, 0x59, 0x7B, 0x84, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0xAD, 0x20, + 0x20, 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20, + 0x2A, 0x66, 0x8F, 0x55, 0xA5, 0xA5, 0xA0, 0x8F, + 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x66, 0x66, 0x2F, + 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, + 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66, + 0x8F, 0xA5, 0x8F, 0x2E, 0x20, 0x2E, 0x20, 0x3A, + 0x4D, 0x6B, 0xE6, 0x84, 0x3D, 0x6B, 0xEB, 0x4A, + 0xC9, 0x8B, 0x8B, 0x31, 0x59, 0x82, 0x59, 0x59, + 0x5B, 0x82, 0x59, 0x73, 0x7B, 0xDC, 0x57, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20, + 0x20, 0x20, 0x6D, 0xDA, 0x20, 0x20, 0x20, 0x20, + 0x9C, 0x66, 0x8F, 0xA5, 0xA5, 0x55, 0x8F, 0x66, + 0x2F, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x2F, 0x51, + 0x89, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, + 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, + 0x8F, 0xA5, 0x8F, 0x20, 0x20, 0xA7, 0x20, 0xA6, + 0x6B, 0x6B, 0xE4, 0x48, 0x2C, 0xDB, 0x4F, 0x9E, + 0xD0, 0xD0, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82, + 0x59, 0x82, 0x82, 0x73, 0x7B, 0x68, 0x6B, 0x3D, + 0x68, 0x68, 0x84, 0x3D, 0x6B, 0x6B, 0xA0, 0x20, + 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6D, 0x2F, 0xA0, 0xA5, 0x55, 0x98, 0x66, 0xA3, + 0xB2, 0x89, 0xB2, 0x98, 0x8F, 0x98, 0x2F, 0x51, + 0x74, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, + 0xA3, 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3, + 0x98, 0xA3, 0x6D, 0x20, 0x20, 0xCE, 0x20, 0x2A, + 0x6B, 0x6B, 0xEB, 0x2C, 0xE1, 0xF1, 0x7C, 0xD0, + 0x8B, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82, 0x59, + 0x82, 0x82, 0x42, 0x82, 0x31, 0x57, 0x4F, 0x7B, + 0x7B, 0xF5, 0xF6, 0xDB, 0x6B, 0x6B, 0x98, 0x20, + 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x51, 0x66, 0xA0, 0xA0, 0x66, 0x2F, 0xB2, + 0xB2, 0x51, 0x2F, 0xA0, 0x55, 0xA3, 0x51, 0x89, + 0x44, 0xA3, 0x98, 0x98, 0x2F, 0x2F, 0x2F, 0xA3, + 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0x2F, + 0x98, 0x8F, 0x20, 0x20, 0x3A, 0xA6, 0x20, 0xA0, + 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0xC3, 0xC9, + 0xD0, 0xD0, 0x29, 0x59, 0x82, 0x73, 0x82, 0x73, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0xAF, 0xF5, + 0x8A, 0x68, 0xEB, 0x6B, 0x6B, 0x6B, 0x98, 0x20, + 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x51, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51, + 0x51, 0x2F, 0x98, 0x55, 0x8F, 0xB2, 0x89, 0x44, + 0xA3, 0x55, 0x55, 0x98, 0xA3, 0xB2, 0x2F, 0xA3, + 0x66, 0x66, 0x98, 0x8F, 0x66, 0xA3, 0x66, 0x98, + 0x55, 0x4C, 0x20, 0x20, 0xDA, 0xAD, 0x20, 0x98, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x9A, 0xD0, + 0xF2, 0x8B, 0x8B, 0x8B, 0x73, 0x82, 0x5B, 0x82, + 0x82, 0x59, 0x59, 0x73, 0x73, 0x58, 0x3D, 0x3D, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x66, 0x20, + 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2F, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51, + 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x51, + 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0xB2, 0xA3, + 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0x66, 0x8F, + 0x8F, 0x92, 0x20, 0x20, 0x20, 0x6D, 0x6D, 0xA3, + 0x6B, 0x6B, 0xEB, 0x7F, 0x4F, 0xDB, 0xD2, 0xC9, + 0xC9, 0xD0, 0x8B, 0x8B, 0x73, 0x82, 0x59, 0x8B, + 0x59, 0x82, 0x59, 0x59, 0x73, 0xF5, 0xEB, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20, + 0x20, 0xA7, 0x54, 0xDA, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51, + 0x51, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x51, 0xB2, + 0xA0, 0xA5, 0x55, 0x66, 0x2F, 0x51, 0x2F, 0xA3, + 0x66, 0x66, 0x66, 0x98, 0x66, 0x66, 0x98, 0x98, + 0x98, 0x2A, 0x54, 0x95, 0x95, 0x71, 0x2E, 0x98, + 0x6B, 0x6B, 0x4D, 0x28, 0xDE, 0x88, 0xB7, 0x70, + 0xC9, 0xC9, 0xD0, 0xF2, 0x8B, 0x8B, 0x8B, 0x59, + 0x59, 0x59, 0x59, 0x5B, 0x59, 0xF3, 0x57, 0xE9, + 0xDB, 0x84, 0x6B, 0x6B, 0x6B, 0x6B, 0x4C, 0xDA, + 0x2E, 0xDA, 0x20, 0xDA, 0x2E, 0x2E, 0x6D, 0x20, + 0x4C, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51, + 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0xA0, 0xA0, 0x8F, 0x2F, 0xB2, 0x89, 0xB2, 0xA3, + 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3, + 0x2F, 0xD1, 0xE2, 0x52, 0x52, 0xF4, 0xBF, 0x9C, + 0x39, 0x6B, 0x6B, 0x6B, 0x7F, 0x4F, 0xE3, 0x6A, + 0xD0, 0xC9, 0xC9, 0xD0, 0xD0, 0x8B, 0x8B, 0x82, + 0x5B, 0x5B, 0x73, 0x8B, 0x59, 0x23, 0x6E, 0x31, + 0x59, 0x7B, 0xDB, 0x84, 0x68, 0x7F, 0xAE, 0x54, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0xA6, 0x3A, + 0xA0, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2, + 0x2F, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, + 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3, + 0x66, 0x98, 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F, + 0x3C, 0x88, 0x8D, 0x52, 0x52, 0x5D, 0xF7, 0xBF, + 0xCE, 0xA2, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x85, + 0x70, 0xC9, 0xC9, 0xC9, 0xD0, 0xEA, 0x8B, 0x5B, + 0x82, 0xEA, 0x82, 0x82, 0x42, 0x57, 0x3D, 0x68, + 0x68, 0x57, 0x4A, 0x34, 0x22, 0xCC, 0x21, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0xA7, 0x6D, + 0xDF, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, + 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F, + 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66, + 0x8F, 0x8F, 0x8F, 0x98, 0xA3, 0xA3, 0x89, 0xD8, + 0x25, 0x5C, 0x3B, 0x5D, 0x52, 0x80, 0x70, 0x36, + 0x71, 0xA7, 0x44, 0x6B, 0x84, 0xCB, 0xAA, 0xF3, + 0xC9, 0xC9, 0xC9, 0xC9, 0xD0, 0x8B, 0x5B, 0x5B, + 0x5B, 0xEA, 0x82, 0x47, 0x7B, 0x68, 0x3D, 0x3D, + 0x6B, 0x3D, 0x6C, 0x2B, 0x80, 0x61, 0x96, 0x81, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xDA, 0x63, + 0xAC, 0x6C, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, + 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, + 0x66, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0x2F, 0x66, + 0x8F, 0x8F, 0x2F, 0xD8, 0xE4, 0xCD, 0xAA, 0xB4, + 0x78, 0x2B, 0x3B, 0x70, 0x46, 0x5D, 0x5D, 0x52, + 0x9D, 0x81, 0x3A, 0xA3, 0xCD, 0x48, 0xBE, 0x4F, + 0xC3, 0xC9, 0xD0, 0xD0, 0xD0, 0xEA, 0x5B, 0x8B, + 0x5B, 0x82, 0x8B, 0x59, 0x4A, 0xF3, 0x33, 0x7F, + 0x3D, 0x6B, 0x4F, 0x6F, 0x5D, 0x52, 0x63, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x85, + 0x72, 0xDC, 0xD8, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3, + 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, + 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0x51, 0xA3, 0x98, + 0xA0, 0xA3, 0x93, 0xCF, 0x79, 0x27, 0x5C, 0x79, + 0x2B, 0x30, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, + 0x3F, 0x69, 0x20, 0x20, 0x2A, 0xD6, 0x3D, 0x6B, + 0x84, 0xE3, 0x34, 0xB7, 0xC9, 0xD0, 0xD0, 0xF2, + 0xD0, 0x8B, 0x31, 0x68, 0x68, 0x6E, 0x31, 0x33, + 0x7F, 0x7E, 0xA1, 0x6F, 0x52, 0x8D, 0xE5, 0xBF, + 0x20, 0x20, 0x20, 0x20, 0x81, 0xA8, 0x78, 0x52, + 0x52, 0xD2, 0xD8, 0xA3, 0xA3, 0x2F, 0x2F, 0xA3, + 0xA3, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66, + 0x51, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0xA0, + 0xA0, 0x44, 0x78, 0xEF, 0x52, 0x30, 0x30, 0x30, + 0x3B, 0x70, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, + 0x46, 0xC1, 0x71, 0x20, 0x81, 0xB1, 0xDD, 0x3D, + 0xA1, 0xE7, 0xDB, 0xCA, 0xD2, 0x6A, 0x6A, 0x6A, + 0xF3, 0xE9, 0xDB, 0x8A, 0x84, 0x3D, 0x84, 0xDC, + 0x25, 0x44, 0xB5, 0xEE, 0x30, 0xEF, 0xF0, 0x32, + 0x69, 0x5F, 0x4B, 0xA8, 0x99, 0x56, 0x67, 0x30, + 0x30, 0x34, 0xB2, 0x2F, 0xA3, 0xA3, 0x66, 0x66, + 0x98, 0x8F, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66, + 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0, + 0x8F, 0xE0, 0xF9, 0x8D, 0x52, 0x5D, 0x46, 0x5D, + 0x80, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x52, 0x52, 0x60, 0x81, 0x20, 0x20, 0x6D, 0xD1, + 0x48, 0xE7, 0x6B, 0x33, 0xF6, 0x7F, 0x7F, 0xDB, + 0x84, 0x6B, 0x6C, 0x6A, 0xF3, 0xEB, 0x6B, 0x3D, + 0x4F, 0xD8, 0xCD, 0x79, 0x30, 0x67, 0xF9, 0x24, + 0xED, 0xD9, 0x8C, 0xED, 0x37, 0x2B, 0x3B, 0x5D, + 0x80, 0x85, 0x4E, 0x98, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0x51, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x8F, 0x8F, + 0x98, 0xE0, 0xF0, 0x67, 0x5D, 0x80, 0x80, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, + 0x5D, 0x70, 0x27, 0x4B, 0x20, 0x81, 0x71, 0x3A, + 0xB5, 0xEB, 0x3D, 0xF1, 0xE1, 0x84, 0x84, 0xF1, + 0xE3, 0x3D, 0x6B, 0x6C, 0x34, 0xE7, 0x6B, 0x6B, + 0xD6, 0x74, 0x5E, 0x78, 0x67, 0x30, 0xEE, 0x5C, + 0xF9, 0xF9, 0x45, 0x5C, 0x2B, 0x3B, 0x5D, 0x5D, + 0x5D, 0x5D, 0xF8, 0x44, 0x66, 0x66, 0x66, 0x66, + 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, + 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x98, 0x8F, 0x98, + 0x66, 0x83, 0x76, 0x67, 0x30, 0x80, 0x5D, 0x80, + 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x80, 0x5D, 0x22, 0xFA, 0x20, 0x81, 0x20, 0x20, + 0xA5, 0x6B, 0x6B, 0xE8, 0xBE, 0x3D, 0x6B, 0x2C, + 0xE1, 0xEB, 0x6B, 0x3D, 0x3E, 0xA1, 0x6B, 0x6B, + 0x4D, 0x74, 0xE8, 0x62, 0x67, 0x30, 0x8D, 0x67, + 0xEE, 0xEE, 0xEE, 0x67, 0x30, 0x80, 0x5D, 0x5D, + 0x52, 0x5D, 0x85, 0xAC, 0x3E, 0xA3, 0x66, 0x66, + 0x2F, 0x51, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F, + 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66, + 0x2F, 0x83, 0xBC, 0xEE, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, + 0x5D, 0x5D, 0x22, 0xB0, 0xAE, 0x81, 0x20, 0x20, + 0x4C, 0x3D, 0xEB, 0x39, 0x57, 0x6B, 0x6B, 0x3E, + 0x97, 0x3D, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, + 0x3D, 0x3C, 0xBA, 0x62, 0xEE, 0x5D, 0x5D, 0x30, + 0x30, 0x8D, 0x8D, 0x30, 0x52, 0x5D, 0x5D, 0x80, + 0x5D, 0x5D, 0x5D, 0x85, 0xB0, 0x6E, 0x2F, 0x66, + 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3, + 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98, 0xA3, + 0x2F, 0x51, 0xDE, 0x8E, 0x30, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x52, 0x80, 0x5D, 0x22, 0x43, 0x4B, 0x20, 0x6D, + 0x44, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x4D, + 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B, + 0x4D, 0x2A, 0xAE, 0x76, 0xEE, 0x30, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80, + 0x5D, 0x5D, 0x80, 0x80, 0x5D, 0x7A, 0xB6, 0x51, + 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3, + 0x2F, 0x66, 0x98, 0x8F, 0xA0, 0x98, 0xA3, 0x2F, + 0x2F, 0x51, 0xAB, 0x8E, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80, + 0x5D, 0x80, 0x5D, 0x52, 0x52, 0x94, 0x2F, 0x7E, + 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7E, + 0xAD, 0x54, 0xAE, 0x24, 0x2B, 0x3B, 0x5D, 0x52, + 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80, + 0x5D, 0x52, 0x52, 0x5D, 0x5D, 0x5D, 0xD2, 0x3E, + 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66, + 0x2F, 0x66, 0x8F, 0x8F, 0xA0, 0x98, 0xA3, 0xB2, + 0x2F, 0x51, 0xDE, 0x79, 0x5D, 0x80, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x80, 0x5D, 0x52, 0x6F, 0xA4, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0xA2, 0xCE, + 0x20, 0x20, 0x95, 0x24, 0x67, 0x3B, 0x80, 0x80, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x30, 0xB0, 0x86, + 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3, + 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2, + 0x2F, 0x4E, 0x76, 0x2B, 0x30, 0x5D, 0x5D, 0x5D, + 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x80, 0x5D, 0x5D, 0x5D, 0x46, 0x52, 0x21, 0x74, + 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, + 0x6B, 0x6B, 0x6B, 0x6B, 0x7E, 0x98, 0x3A, 0x20, + 0x20, 0x81, 0x60, 0xED, 0x2B, 0x52, 0x5D, 0x5D, + 0x80, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x80, + 0x22, 0x5D, 0x5D, 0x5D, 0x8D, 0x2B, 0x38, 0x39, + 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66, + 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2, + 0xA3, 0xE8, 0xF9, 0x30, 0x3B, 0x80, 0x5D, 0x5D, + 0x5D, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0xD4, 0x99, + 0x51, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x6B, + 0x6B, 0x6B, 0x7E, 0xA3, 0x2E, 0x20, 0x20, 0x20, + 0x20, 0x81, 0xC5, 0xED, 0x2B, 0x3B, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80, + 0x5D, 0x52, 0x52, 0x6F, 0xDE, 0x2C, 0x39, 0x51, + 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66, + 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F, + 0x51, 0xD5, 0x45, 0x8D, 0x3B, 0x5D, 0x80, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x67, 0x37, 0xA9, + 0x3A, 0xCE, 0xA0, 0x2F, 0x51, 0x51, 0xB2, 0xA3, + 0xA5, 0x9C, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x54, 0x99, 0xED, 0x67, 0x30, 0x5D, 0x5D, + 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x3B, 0x80, + 0x8D, 0x79, 0x48, 0x2C, 0x39, 0x44, 0xB2, 0x66, + 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3, + 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0xB2, + 0xD8, 0xBC, 0x45, 0xEE, 0x67, 0x8D, 0x30, 0x30, + 0x52, 0x52, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x80, + 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0x67, 0xF9, 0x32, + 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xBF, 0xEC, 0xED, 0x2B, 0x30, 0x5D, 0x5D, + 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0x67, 0x2B, + 0xCF, 0xAA, 0xD8, 0x89, 0x89, 0x51, 0x66, 0x55, + 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F, + 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0x2F, + 0xD1, 0x28, 0x56, 0xED, 0x62, 0x37, 0x5C, 0x79, + 0x8E, 0x2B, 0x2B, 0x30, 0x30, 0x30, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0xEE, 0x56, 0xA9, + 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x5F, 0x99, 0xD9, 0x45, 0x8D, 0x3B, 0x5D, + 0x5D, 0x3B, 0x5D, 0x8D, 0x2B, 0x79, 0x79, 0x41, + 0x83, 0xB2, 0xB2, 0x89, 0x89, 0x2F, 0xA0, 0x2A, + 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2, + 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0x51, 0xB2, + 0xA3, 0x83, 0x3E, 0x25, 0xD5, 0xE5, 0x50, 0x8C, + 0xED, 0x24, 0x24, 0xF0, 0x45, 0x8E, 0x2B, 0x30, + 0x30, 0x5D, 0x3B, 0x30, 0xEE, 0xF0, 0xC6, 0x65, + 0x75, 0x71, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x32, 0x33, 0x34, 0x35, - 0x36, 0x27, 0x27, 0x33, 0x25, 0x25, 0x24, 0x24, - 0x24, 0x24, 0x23, 0x21, 0x20, 0x20, 0x2B, 0x2A, - 0x28, 0x29, 0x29, 0x37, 0x2C, 0x2C, 0x29, 0x28, - 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2A, 0x2B, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2F, 0x32, 0x36, 0x27, - 0x27, 0x27, 0x27, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x25, 0x25, 0x24, 0x23, 0x21, - 0x20, 0x2B, 0x2A, 0x29, 0x29, 0x2C, 0x2C, 0x2C, - 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x38, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x23, 0x23, 0x24, 0x24, - 0x25, 0x25, 0x33, 0x33, 0x33, 0x33, 0x33, 0x25, - 0x24, 0x22, 0x20, 0x20, 0x2A, 0x28, 0x29, 0x2C, - 0x2C, 0x2C, 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x23, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2A, 0x2A, 0x2B, 0x2B, - 0x20, 0x21, 0x22, 0x24, 0x20, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x3A, 0x3B, 0x22, 0x20, 0x2A, 0x28, - 0x29, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, - 0x2B, 0x20, 0x21, 0x22, 0x22, 0x23, 0x24, 0x27, - 0x27, 0x27, 0x3C, 0x36, 0x3C, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x3D, 0x3E, 0x32, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x3D, 0x39, 0x3F, 0x3F, - 0x39, 0x2C, 0x20, 0x20, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x40, 0x40, 0x41, 0x22, 0x20, - 0x2A, 0x28, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x2A, - 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20, - 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x22, 0x27, - 0x27, 0x3C, 0x3C, 0x3D, 0x42, 0x3C, 0x27, 0x27, - 0x3C, 0x27, 0x3C, 0x43, 0x44, 0x36, 0x42, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x3D, 0x28, 0x29, 0x2C, - 0x2C, 0x45, 0x20, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x46, 0x40, 0x47, 0x40, 0x47, 0x3A, 0x40, - 0x22, 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x2C, 0x29, - 0x28, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x20, 0x27, - 0x27, 0x44, 0x28, 0x24, 0x27, 0x2F, 0x3C, 0x27, - 0x27, 0x38, 0x24, 0x2C, 0x2C, 0x48, 0x49, 0x36, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x29, 0x29, - 0x4A, 0x20, 0x3A, 0x40, 0x47, 0x40, 0x47, 0x40, - 0x40, 0x47, 0x40, 0x40, 0x39, 0x39, 0x39, 0x4A, - 0x25, 0x24, 0x22, 0x2B, 0x28, 0x29, 0x2C, 0x2C, - 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x21, 0x20, 0x2B, 0x2A, 0x27, - 0x3D, 0x4B, 0x48, 0x4C, 0x2B, 0x3C, 0x27, 0x3C, - 0x3C, 0x23, 0x4D, 0x4E, 0x4F, 0x50, 0x33, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x39, 0x3F, 0x39, - 0x51, 0x20, 0x39, 0x39, 0x47, 0x40, 0x4D, 0x4D, - 0x40, 0x52, 0x4D, 0x40, 0x47, 0x40, 0x39, 0x39, - 0x53, 0x54, 0x25, 0x24, 0x20, 0x2A, 0x29, 0x2C, - 0x2C, 0x2C, 0x29, 0x2A, 0x2B, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x21, 0x20, 0x2B, 0x28, 0x2A, 0x20, 0x27, - 0x36, 0x4F, 0x55, 0x48, 0x56, 0x3D, 0x3C, 0x3C, - 0x32, 0x57, 0x56, 0x58, 0x49, 0x56, 0x56, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x20, 0x20, - 0x41, 0x39, 0x39, 0x3A, 0x59, 0x5A, 0x59, 0x5B, - 0x5C, 0x3A, 0x4D, 0x5D, 0x57, 0x39, 0x39, 0x4A, - 0x5E, 0x33, 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28, - 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, - 0x20, 0x2B, 0x2A, 0x2A, 0x20, 0x22, 0x22, 0x27, - 0x5F, 0x2D, 0x3C, 0x60, 0x56, 0x54, 0x61, 0x49, - 0x35, 0x56, 0x34, 0x27, 0x62, 0x27, 0x56, 0x39, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x63, 0x54, - 0x40, 0x64, 0x65, 0x66, 0x67, 0x67, 0x68, 0x5F, - 0x2E, 0x69, 0x6A, 0x67, 0x5F, 0x3A, 0x39, 0x2C, - 0x53, 0x23, 0x25, 0x54, 0x33, 0x25, 0x23, 0x20, - 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, - 0x2B, 0x2A, 0x20, 0x22, 0x22, 0x21, 0x2B, 0x27, - 0x62, 0x36, 0x27, 0x33, 0x6B, 0x54, 0x3D, 0x3C, - 0x49, 0x57, 0x27, 0x27, 0x27, 0x27, 0x56, 0x57, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x6C, 0x31, 0x6D, - 0x64, 0x51, 0x6E, 0x2E, 0x2E, 0x6F, 0x5A, 0x70, - 0x70, 0x71, 0x72, 0x67, 0x67, 0x69, 0x73, 0x46, - 0x4A, 0x2A, 0x21, 0x25, 0x33, 0x54, 0x33, 0x24, - 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B, - 0x2B, 0x22, 0x22, 0x22, 0x2B, 0x28, 0x2A, 0x27, - 0x27, 0x39, 0x3C, 0x3D, 0x45, 0x74, 0x75, 0x76, - 0x76, 0x45, 0x27, 0x27, 0x27, 0x27, 0x56, 0x77, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x78, 0x78, 0x5E, - 0x79, 0x7A, 0x7B, 0x6E, 0x5A, 0x5A, 0x70, 0x7C, - 0x70, 0x5B, 0x7D, 0x5A, 0x66, 0x7E, 0x7F, 0x79, - 0x48, 0x6B, 0x2C, 0x20, 0x24, 0x33, 0x54, 0x33, - 0x24, 0x21, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x21, - 0x22, 0x22, 0x20, 0x28, 0x2B, 0x20, 0x22, 0x27, - 0x27, 0x80, 0x27, 0x81, 0x82, 0x83, 0x84, 0x85, - 0x74, 0x85, 0x84, 0x27, 0x3C, 0x4F, 0x4F, 0x66, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x23, 0x5E, - 0x64, 0x86, 0x79, 0x73, 0x87, 0x88, 0x7C, 0x5A, - 0x5A, 0x71, 0x7D, 0x71, 0x89, 0x79, 0x8A, 0x8A, - 0x51, 0x8B, 0x48, 0x39, 0x2A, 0x22, 0x33, 0x54, - 0x33, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x2C, 0x29, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x22, 0x23, - 0x21, 0x2A, 0x2A, 0x20, 0x21, 0x23, 0x25, 0x27, - 0x27, 0x55, 0x8C, 0x8D, 0x8E, 0x83, 0x8F, 0x90, - 0x91, 0x92, 0x92, 0x85, 0x85, 0x93, 0x51, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0x29, 0x51, - 0x79, 0x79, 0x94, 0x89, 0x89, 0x89, 0x5A, 0x95, - 0x64, 0x88, 0x96, 0x97, 0x7A, 0x73, 0x98, 0x98, - 0x99, 0x50, 0x50, 0x48, 0x6B, 0x28, 0x21, 0x25, - 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x29, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x2B, 0x20, 0x22, 0x22, 0x20, - 0x2B, 0x2B, 0x20, 0x22, 0x24, 0x25, 0x33, 0x27, - 0x27, 0x9A, 0x9B, 0x9C, 0x9D, 0x83, 0x9E, 0x85, - 0x9F, 0x92, 0x85, 0x85, 0x85, 0x85, 0x92, 0xA0, - 0x27, 0x27, 0x27, 0x27, 0x27, 0xA1, 0x47, 0xA2, - 0xA2, 0x94, 0xA3, 0x94, 0x95, 0x95, 0x73, 0x73, - 0x95, 0x87, 0xA4, 0x5B, 0x97, 0x7B, 0x88, 0x98, - 0xA2, 0x50, 0x48, 0x48, 0x48, 0x8B, 0x29, 0x20, - 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x29, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x2B, 0x2B, - 0x20, 0x21, 0x23, 0x24, 0x25, 0x25, 0x33, 0x27, - 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x8F, 0x90, 0x90, - 0x9F, 0x90, 0x85, 0x90, 0x85, 0x74, 0xAA, 0x81, - 0x27, 0x27, 0x27, 0x27, 0x27, 0xAB, 0x40, 0xAC, - 0x79, 0xA3, 0x89, 0xAD, 0x95, 0x6F, 0xAE, 0xAE, - 0xAE, 0x5B, 0x59, 0x88, 0x7B, 0x89, 0x79, 0xAF, - 0xA2, 0x6B, 0x48, 0x48, 0x48, 0x48, 0x50, 0x2C, - 0x20, 0x24, 0x33, 0x54, 0x25, 0x22, 0x2A, 0x2A, - 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x23, 0x22, 0x2B, 0x20, 0x20, - 0x22, 0x23, 0x24, 0x25, 0x24, 0x24, 0x22, 0x27, - 0xB0, 0x8C, 0xAA, 0xB1, 0xB2, 0x84, 0x85, 0x9F, - 0x85, 0x85, 0x85, 0xB3, 0xB4, 0xAA, 0xAA, 0xA0, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0xB5, - 0xA3, 0xA3, 0xAC, 0x5D, 0xB6, 0xAE, 0xB7, 0x69, - 0x73, 0x5B, 0x88, 0x89, 0x95, 0x73, 0x99, 0x99, - 0x59, 0x2A, 0x39, 0x48, 0x48, 0x50, 0x48, 0x50, - 0x2C, 0x20, 0x24, 0x33, 0x54, 0x25, 0x21, 0x20, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x23, 0x21, 0x2B, 0x20, 0x20, 0x22, - 0x22, 0x24, 0x24, 0x23, 0x22, 0x20, 0x2A, 0x27, - 0x27, 0xB0, 0x8C, 0xA9, 0xB2, 0x9E, 0x91, 0x85, - 0x85, 0x93, 0xB8, 0x75, 0xAA, 0xA7, 0x8C, 0x27, - 0x27, 0x27, 0x33, 0x3C, 0x27, 0x27, 0x2C, 0x7B, - 0x55, 0x79, 0xA3, 0x5D, 0xB9, 0x43, 0x7F, 0x7E, - 0x5F, 0x5A, 0x5A, 0x95, 0x64, 0x73, 0x58, 0x64, - 0x5C, 0x25, 0x2B, 0x3F, 0x48, 0x48, 0x8B, 0x48, - 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x24, 0x22, - 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x23, 0x21, 0x20, 0x20, 0x20, 0x21, 0x22, - 0x24, 0x23, 0x22, 0x21, 0x2B, 0x20, 0x54, 0x27, - 0x27, 0x8B, 0x81, 0xA5, 0x93, 0x93, 0x74, 0xA5, - 0xBA, 0x75, 0xBB, 0xBC, 0xB4, 0x6D, 0x50, 0x6B, - 0x27, 0x27, 0x30, 0x33, 0x49, 0x27, 0x27, 0x5E, - 0x6F, 0x73, 0x94, 0xBD, 0x4E, 0x5D, 0x7F, 0x7F, - 0xB7, 0x68, 0x73, 0x6E, 0xB7, 0x7F, 0x95, 0x97, - 0x47, 0x63, 0x25, 0x20, 0x3F, 0x48, 0x8B, 0x8B, - 0x48, 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x25, - 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x21, - 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24, - 0x22, 0x21, 0x20, 0x2A, 0x33, 0x30, 0x30, 0x27, - 0x27, 0x50, 0xBE, 0xBF, 0x9A, 0xB3, 0x9B, 0xBB, - 0xBB, 0xC0, 0x8C, 0xC1, 0x8B, 0xC2, 0x47, 0x8B, - 0x27, 0x27, 0x38, 0x63, 0x63, 0x27, 0x27, 0xC3, - 0xB5, 0x95, 0x72, 0x95, 0x6F, 0x69, 0x7E, 0x66, - 0x7E, 0x7F, 0x6E, 0x7E, 0x95, 0x95, 0x73, 0x70, - 0x30, 0x30, 0x30, 0x33, 0x20, 0x3F, 0x48, 0x8B, - 0x6B, 0x48, 0x50, 0x29, 0x21, 0x33, 0x54, 0x33, - 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x21, 0x21, 0x23, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24, 0x22, - 0x20, 0x2B, 0x21, 0xC4, 0x30, 0x60, 0x30, 0x27, - 0x27, 0xC5, 0x8B, 0x39, 0xC6, 0xC7, 0xA6, 0xA6, - 0xC8, 0x9A, 0x3B, 0x39, 0x50, 0x56, 0x56, 0x4F, - 0x33, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x48, - 0x59, 0x94, 0x73, 0xAE, 0xB7, 0xB7, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7E, 0x5A, 0x70, 0x7C, 0x71, 0xC3, - 0x63, 0x30, 0x60, 0x78, 0x54, 0x20, 0x6B, 0x48, - 0x6B, 0x6B, 0x50, 0x50, 0x29, 0x22, 0x33, 0x33, - 0x2A, 0x2B, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, - 0x21, 0x20, 0x20, 0x20, 0x24, 0x24, 0x20, 0x20, - 0x2B, 0x24, 0x30, 0x60, 0x60, 0x30, 0xAB, 0x27, - 0x27, 0x40, 0x4C, 0x50, 0x39, 0x87, 0xC3, 0x53, - 0x37, 0x48, 0x37, 0x48, 0xC9, 0x56, 0xB9, 0x56, - 0xCA, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x3C, - 0x51, 0x5A, 0x6E, 0xB7, 0xB7, 0x7E, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7F, 0xB7, 0x5A, 0x7C, 0x5B, 0x37, - 0x23, 0x63, 0x31, 0x6C, 0xCB, 0x63, 0x20, 0x6B, - 0x50, 0x3F, 0x39, 0x50, 0x8B, 0x28, 0x24, 0x24, - 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x22, 0x22, 0x21, - 0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x20, 0x2B, - 0x33, 0x78, 0xCB, 0x60, 0x30, 0x22, 0x3D, 0x27, - 0x2F, 0x56, 0x4E, 0x8B, 0x6B, 0x39, 0x48, 0x8B, - 0x6B, 0x8B, 0x80, 0xC9, 0xB9, 0xB9, 0x56, 0xB9, - 0x56, 0x34, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x48, 0xB5, 0xB7, 0xB7, 0x7E, 0x7E, 0x2E, 0x7E, - 0x7E, 0x7E, 0x7F, 0x7C, 0x65, 0x71, 0x3A, 0x48, - 0x2C, 0x24, 0x30, 0x6C, 0x34, 0x6C, 0xC4, 0x20, - 0x8B, 0x50, 0x39, 0x39, 0x48, 0x6B, 0x2B, 0x22, - 0x2B, 0x20, 0x21, 0x22, 0x23, 0x23, 0x22, 0x21, - 0x20, 0x2B, 0x23, 0x22, 0x20, 0x2B, 0x2B, 0x54, - 0x60, 0x31, 0xCB, 0x54, 0x20, 0x3D, 0x36, 0x27, - 0x4E, 0xB9, 0x56, 0x56, 0x8B, 0x6B, 0x50, 0x6B, - 0x40, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, - 0x56, 0x56, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x7B, 0x6E, 0xB7, 0xB7, 0xB7, 0x7E, 0x7F, - 0xB7, 0xB7, 0x7F, 0x7E, 0x6F, 0x5B, 0x29, 0x2C, - 0x48, 0x39, 0x24, 0x60, 0x58, 0xAF, 0xCC, 0x63, - 0x20, 0x8B, 0x8B, 0x39, 0x39, 0x48, 0x3F, 0x28, - 0x20, 0x20, 0x22, 0x23, 0x23, 0x23, 0x22, 0x20, - 0x2B, 0x22, 0x22, 0x2B, 0x2B, 0x20, 0x54, 0xCB, - 0x31, 0xCB, 0x25, 0x20, 0x27, 0x27, 0x27, 0x48, - 0xB9, 0x56, 0xB9, 0x56, 0x4F, 0x48, 0x47, 0x57, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0x56, 0x62, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x48, 0x6F, 0x69, 0xB7, 0xB7, 0xB7, 0x7F, - 0xB7, 0xB7, 0xB7, 0x73, 0x59, 0x50, 0x29, 0x2B, - 0x28, 0x8B, 0x39, 0x25, 0x31, 0x55, 0xB6, 0x34, - 0x63, 0x2B, 0x48, 0x6B, 0x2C, 0x39, 0x47, 0x6B, - 0x22, 0x22, 0x23, 0x24, 0x23, 0x22, 0x20, 0x2B, - 0x20, 0x22, 0x2A, 0x2B, 0x20, 0x33, 0xCB, 0x31, - 0x78, 0x24, 0x21, 0xCD, 0x27, 0x27, 0x27, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x56, 0xB9, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0x56, 0xC9, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x41, 0x64, 0xB7, 0xB7, 0xB7, 0x7F, - 0x68, 0xB7, 0xAE, 0xA3, 0x23, 0x39, 0x8B, 0x2A, - 0x20, 0x20, 0x39, 0x6B, 0x25, 0xCC, 0x43, 0x43, - 0x34, 0x63, 0x2A, 0x48, 0x3F, 0x39, 0x6B, 0x6B, - 0x24, 0x23, 0x24, 0x24, 0x23, 0x21, 0x2B, 0x2B, - 0x22, 0x2B, 0x2B, 0x20, 0x24, 0x78, 0x31, 0x30, - 0x23, 0x21, 0x21, 0x27, 0x27, 0x27, 0x80, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x3C, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xCE, 0x8A, 0xAE, 0x6F, 0xB7, - 0x6F, 0x89, 0x71, 0x78, 0x63, 0x23, 0x39, 0x6B, - 0x2B, 0x20, 0x20, 0x2C, 0x6B, 0x25, 0x34, 0x42, - 0x42, 0x34, 0x54, 0x29, 0x48, 0x3F, 0x39, 0x3F, - 0x25, 0x24, 0x25, 0x24, 0x22, 0x20, 0x2A, 0x21, - 0x2B, 0x2A, 0x20, 0x22, 0x30, 0x60, 0x30, 0x22, - 0x21, 0x22, 0x27, 0x27, 0x27, 0x2D, 0x4C, 0x56, - 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0x56, 0x2E, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x40, 0x97, 0x95, 0x5A, 0x71, - 0x7C, 0xCE, 0x40, 0x60, 0x31, 0x30, 0x23, 0x3F, - 0x3F, 0x20, 0x20, 0x20, 0x29, 0x8B, 0x33, 0x58, - 0x66, 0x43, 0xCC, 0x25, 0x39, 0x50, 0x6B, 0x2C, - 0x33, 0x25, 0x25, 0x23, 0x20, 0x2A, 0x2B, 0x20, - 0x2A, 0x2B, 0x22, 0x54, 0x30, 0x30, 0x24, 0x22, - 0x21, 0x27, 0x27, 0x27, 0x27, 0xAF, 0x29, 0x4E, - 0x4F, 0xB9, 0x56, 0xB9, 0x4D, 0x4D, 0x77, 0xC9, - 0xB9, 0xB9, 0xB9, 0x56, 0xC9, 0x4D, 0x4D, 0x80, - 0x4C, 0x40, 0xC9, 0x4D, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0xCF, 0x97, 0x97, 0xCE, - 0x86, 0xD0, 0x54, 0x6C, 0x58, 0x34, 0x60, 0x23, - 0x6B, 0x39, 0x20, 0x20, 0x20, 0x28, 0x6B, 0x54, - 0xD1, 0x66, 0xB6, 0x60, 0x22, 0x6B, 0x8B, 0x2C, - 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28, 0x20, 0x28, - 0x2B, 0x20, 0x25, 0xC4, 0x30, 0x25, 0x22, 0x21, - 0x26, 0x27, 0x27, 0x27, 0x27, 0x20, 0x4B, 0x52, - 0x80, 0x4F, 0xB9, 0x56, 0xB9, 0x80, 0x56, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x4D, 0x80, 0x50, 0x48, - 0x50, 0x50, 0x50, 0x56, 0x3D, 0x27, 0x36, 0x27, - 0x27, 0x27, 0x27, 0x3C, 0x46, 0xC3, 0x86, 0x86, - 0xD0, 0x39, 0x24, 0x6C, 0xD1, 0x43, 0x43, 0x6C, - 0x24, 0x6B, 0x2C, 0x20, 0x20, 0x20, 0x29, 0x39, - 0x63, 0xD1, 0x42, 0x55, 0xC4, 0x2B, 0x8B, 0x39, - 0x54, 0x25, 0x24, 0x20, 0x2A, 0x2A, 0x28, 0x28, - 0x20, 0x22, 0x54, 0x63, 0x25, 0x24, 0x22, 0x22, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x77, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xC9, 0x56, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x4F, - 0x77, 0x47, 0x8B, 0x40, 0x56, 0x27, 0x27, 0x49, - 0x2D, 0x27, 0x27, 0x27, 0x39, 0x40, 0x39, 0x39, - 0x28, 0x3F, 0x39, 0x33, 0x58, 0x66, 0x35, 0x2E, - 0x58, 0x24, 0x8B, 0x29, 0x20, 0x20, 0x20, 0x39, - 0x29, 0x30, 0x55, 0xB6, 0xCC, 0x25, 0x29, 0x39, - 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2A, 0x29, 0x2B, - 0x22, 0x24, 0x54, 0x33, 0x25, 0x22, 0x2B, 0x54, - 0x27, 0x27, 0x62, 0x27, 0x30, 0x80, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x4D, 0x8B, 0x77, 0x36, 0x27, 0x27, - 0x3C, 0x2F, 0x27, 0x27, 0x39, 0x39, 0x39, 0x47, - 0x20, 0x2B, 0x2C, 0x39, 0x33, 0xB6, 0x35, 0x35, - 0x35, 0xAF, 0x24, 0x48, 0x2A, 0x20, 0x20, 0x20, - 0x8B, 0x2B, 0x78, 0xAF, 0x58, 0x30, 0x21, 0x28, - 0x33, 0x25, 0x21, 0x28, 0x29, 0x29, 0x28, 0x20, - 0x24, 0x33, 0x54, 0x33, 0x23, 0x20, 0x24, 0xD2, - 0x27, 0x49, 0x27, 0x27, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0xC9, 0x50, 0x56, 0x27, 0x27, - 0x3D, 0x38, 0x3D, 0x27, 0x27, 0x47, 0x39, 0x39, - 0x28, 0x20, 0x20, 0x2A, 0x39, 0x54, 0x43, 0x35, - 0x35, 0x35, 0xAF, 0x23, 0x48, 0x2B, 0x20, 0x20, - 0x2B, 0x48, 0x22, 0x60, 0x34, 0xCB, 0x25, 0x21, - 0x33, 0x24, 0x2B, 0x29, 0x29, 0x29, 0x2B, 0x22, - 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x33, 0x27, - 0x27, 0x32, 0x27, 0x30, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0xC9, 0x4C, 0x36, 0x3C, - 0x62, 0x2F, 0x2E, 0x27, 0x27, 0x54, 0x47, 0x47, - 0x8B, 0x2B, 0x20, 0x20, 0x20, 0x3F, 0x54, 0x2E, - 0x35, 0x35, 0x35, 0x34, 0x21, 0x8B, 0x2A, 0x20, - 0x20, 0x2C, 0x6B, 0x25, 0x60, 0x60, 0x54, 0x23, - 0x25, 0x22, 0x2A, 0x2C, 0x29, 0x28, 0x20, 0x24, - 0x54, 0x63, 0x54, 0x24, 0x2B, 0x22, 0x24, 0x27, - 0x36, 0x27, 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x4C, 0x36, - 0x66, 0xD3, 0x27, 0x2F, 0x27, 0x54, 0x54, 0x27, - 0x26, 0x6B, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x63, - 0x35, 0x35, 0x35, 0x62, 0xCB, 0x2A, 0x3F, 0x28, - 0x2B, 0x2A, 0x50, 0x29, 0x33, 0x30, 0x54, 0x25, - 0x24, 0x20, 0x29, 0x2C, 0x2C, 0x2A, 0x21, 0x33, - 0xC4, 0xC4, 0x33, 0x21, 0x29, 0x22, 0x27, 0x27, - 0x99, 0x27, 0x31, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x3D, - 0x3D, 0x3C, 0x3C, 0x55, 0x54, 0x54, 0x54, 0x20, - 0x27, 0x2C, 0x39, 0x20, 0x20, 0x20, 0x20, 0x48, - 0x30, 0x62, 0x35, 0x35, 0x42, 0x54, 0x39, 0x39, - 0x2C, 0x28, 0x3F, 0x8B, 0x20, 0x33, 0x54, 0x24, - 0x22, 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x54, - 0x30, 0xC4, 0x25, 0x2B, 0x28, 0x2B, 0x27, 0x3D, - 0x27, 0x27, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x27, - 0x20, 0x20, 0x20, 0x54, 0x54, 0x54, 0x54, 0x20, - 0x20, 0x2D, 0x2D, 0x29, 0x20, 0x20, 0x20, 0x20, - 0x48, 0x60, 0x66, 0x35, 0x62, 0x34, 0x22, 0x2C, - 0x2C, 0x3F, 0x6B, 0x48, 0x2C, 0x22, 0x23, 0x23, - 0x20, 0x2A, 0x2C, 0x29, 0x29, 0x20, 0x25, 0xC4, - 0x30, 0x54, 0x22, 0x29, 0x28, 0xD2, 0x27, 0x35, - 0x27, 0x49, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x4F, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x40, 0x20, - 0x20, 0x54, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, - 0x2D, 0x2D, 0x2D, 0x49, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x6B, 0x6C, 0x42, 0x2E, 0xB6, 0x54, 0x28, - 0x29, 0x2C, 0x6B, 0x48, 0x3F, 0x2A, 0x20, 0x22, - 0x2B, 0x28, 0x2C, 0x28, 0x29, 0x20, 0x33, 0x30, - 0x30, 0x54, 0x20, 0x2C, 0x29, 0x27, 0x27, 0x3D, - 0x27, 0x40, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0x63, 0x56, 0x54, 0x54, - 0x54, 0x54, 0x20, 0xD3, 0x45, 0x51, 0x51, 0x49, - 0x7C, 0x2D, 0x2D, 0x49, 0x49, 0x20, 0x20, 0x20, - 0x20, 0x2A, 0x2A, 0xCC, 0xB6, 0x8A, 0x60, 0x22, - 0x28, 0x29, 0x3F, 0x6B, 0x39, 0x29, 0x2B, 0x20, - 0x28, 0x2C, 0x28, 0x2A, 0x2A, 0x24, 0xC4, 0x30, - 0xC4, 0x33, 0x2B, 0x39, 0xCD, 0x27, 0x3C, 0x27, - 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x63, 0x63, 0x49, 0x2D, 0x20, - 0x20, 0x2D, 0xD3, 0x49, 0x66, 0x2D, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x8B, 0x2B, 0x20, - 0x20, 0x20, 0x39, 0x23, 0x6C, 0xAF, 0xCB, 0x23, - 0x28, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, - 0x29, 0x39, 0x2B, 0x2B, 0x2B, 0x25, 0x78, 0xC4, - 0x63, 0x23, 0x29, 0x39, 0x27, 0x27, 0x3D, 0x27, - 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x4F, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49, - 0x49, 0x2D, 0x49, 0x2D, 0x49, 0x2D, 0x2D, 0x2D, - 0x49, 0x49, 0x35, 0x49, 0x2D, 0x2D, 0x39, 0x28, - 0x20, 0x20, 0x2A, 0x28, 0x33, 0x60, 0xC4, 0x22, - 0x2C, 0x2A, 0x2A, 0x22, 0x23, 0x22, 0x20, 0x21, - 0x2C, 0x29, 0x20, 0x2B, 0x2B, 0x54, 0x30, 0xC4, - 0x63, 0x22, 0x2C, 0x27, 0x27, 0x27, 0x3D, 0x27, - 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49, - 0x61, 0x49, 0x2D, 0x49, 0x49, 0x2D, 0x2D, 0x49, - 0x49, 0x49, 0x2F, 0x49, 0x2D, 0x78, 0x29, 0x28, - 0x2C, 0x2A, 0x2B, 0x39, 0x2B, 0x25, 0x33, 0x20, - 0x2C, 0x20, 0x2A, 0x24, 0x54, 0x54, 0x23, 0x23, - 0x2C, 0x2A, 0x22, 0x2B, 0x20, 0x63, 0x30, 0x63, - 0xC4, 0x21, 0x39, 0x27, 0x27, 0x27, 0x35, 0x36, - 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x2D, 0x49, 0x49, 0x49, - 0x49, 0x27, 0x27, 0x2D, 0x38, 0x27, 0x36, 0x36, - 0x49, 0x27, 0x49, 0x2D, 0x2D, 0x44, 0x24, 0x2B, - 0x20, 0x2C, 0x3F, 0x6B, 0x2A, 0x20, 0x21, 0x28, - 0x2C, 0x20, 0x2B, 0x24, 0x30, 0xCB, 0x63, 0x54, - 0x28, 0x20, 0x24, 0x2B, 0x23, 0x78, 0xC4, 0x63, - 0x63, 0x2B, 0x3F, 0x27, 0x27, 0x27, 0x38, 0x33, - 0x3D, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x63, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x3D, 0x3D, 0x27, 0x27, 0x27, 0x2D, - 0x49, 0x49, 0x49, 0x2D, 0x62, 0x5F, 0xC4, 0x20, - 0x22, 0x2A, 0x6B, 0x8B, 0x2C, 0x2B, 0x2A, 0x3F, - 0x3F, 0x2A, 0x21, 0x21, 0xCB, 0x58, 0x6C, 0x60, - 0x20, 0x23, 0x24, 0x2A, 0x25, 0x78, 0x63, 0x63, - 0x54, 0x2A, 0x28, 0x27, 0x27, 0x27, 0x27, 0x62, - 0x3C, 0xB9, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x49, 0x2D, 0x2D, - 0x2D, 0x3D, 0x2F, 0x3C, 0x2D, 0x3C, 0x27, 0x38, - 0x2D, 0x49, 0x2D, 0x2D, 0xD1, 0x43, 0x30, 0x20, - 0x24, 0x21, 0x21, 0x21, 0x2B, 0x2A, 0x29, 0x8B, - 0x6B, 0x29, 0x2B, 0x2A, 0x30, 0x55, 0x55, 0x34, - 0x22, 0x23, 0x24, 0x29, 0x54, 0x30, 0x63, 0x63, - 0x25, 0x29, 0x22, 0x3C, 0xA5, 0xD4, 0xD5, 0x27, - 0x31, 0x56, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x2D, 0x2E, - 0x3E, 0x27, 0x27, 0x27, 0x27, 0x27, 0x36, 0x44, - 0x3C, 0x27, 0x2D, 0xC4, 0x78, 0xCC, 0x54, 0x2B, - 0x25, 0x24, 0x63, 0x60, 0x63, 0x24, 0x2A, 0x6B, - 0x3F, 0x39, 0x28, 0x21, 0x33, 0xB6, 0x44, 0x58, - 0x22, 0x23, 0x24, 0x2A, 0x30, 0x30, 0x63, 0x63, - 0x24, 0x39, 0x22, 0xBB, 0x9C, 0xB2, 0x9D, 0xA8, - 0x27, 0x8B, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0xD6, 0xD6, 0xD7, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x32, - 0x3D, 0x27, 0x39, 0x33, 0xC4, 0xC4, 0x22, 0x28, - 0x25, 0x54, 0x30, 0xD1, 0xD1, 0x60, 0x23, 0x6B, - 0x3F, 0x39, 0x2C, 0x2B, 0x20, 0x58, 0x8A, 0x58, - 0x22, 0x23, 0x23, 0x2B, 0x78, 0x30, 0xC4, 0xC4, - 0x23, 0x29, 0xBB, 0xBB, 0xD8, 0xB2, 0x9D, 0xA9, - 0xA9, 0x3C, 0x60, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xD9, 0x85, 0x85, 0x85, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2D, - 0xA0, 0x83, 0x2C, 0x21, 0x30, 0x33, 0x29, 0x29, - 0x21, 0x33, 0x54, 0x42, 0x66, 0x55, 0xC4, 0x29, - 0x8B, 0x2C, 0x39, 0x28, 0x29, 0x31, 0x44, 0x58, - 0x23, 0x23, 0x21, 0x20, 0x30, 0xC4, 0xC4, 0x30, - 0x21, 0x20, 0xBB, 0xBC, 0xDA, 0xDB, 0xDC, 0xB2, - 0x83, 0xB4, 0x3C, 0x2F, 0xB9, 0x56, 0x56, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x56, 0xA7, 0xD4, 0x85, 0x82, - 0x3C, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x61, - 0x9E, 0x90, 0xDD, 0x21, 0x33, 0x25, 0x2C, 0x39, - 0x2A, 0x24, 0x24, 0x42, 0x62, 0x43, 0x34, 0x22, - 0x50, 0x39, 0x2C, 0x2C, 0x2A, 0x54, 0xD1, 0x58, - 0x22, 0x22, 0x2B, 0x22, 0x30, 0xC4, 0x30, 0x60, - 0x20, 0xDE, 0xBB, 0xD9, 0x84, 0x84, 0xDF, 0xA9, - 0xDB, 0xDB, 0x61, 0x27, 0x38, 0x4D, 0x56, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x56, 0x8D, 0xD9, 0xD5, 0xA6, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xBB, - 0x85, 0xDB, 0xDD, 0x21, 0x22, 0x22, 0x3F, 0x39, - 0x2C, 0x2B, 0x25, 0x34, 0x62, 0x66, 0xD1, 0xC4, - 0x6B, 0x39, 0x2C, 0x39, 0x29, 0x21, 0x58, 0xCC, - 0x22, 0x21, 0x29, 0x23, 0x30, 0x30, 0x30, 0x5E, - 0x82, 0xBB, 0xE0, 0xB1, 0xE1, 0x9C, 0xD4, 0xDC, - 0x9D, 0xA9, 0xE2, 0x27, 0x27, 0x27, 0x4D, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x4C, 0x48, 0xA8, 0xA8, 0xE3, 0x8C, - 0xC6, 0x3C, 0x27, 0x27, 0x27, 0xE4, 0xA6, 0xE5, - 0x83, 0xA9, 0xE6, 0xAF, 0x54, 0x2B, 0x8B, 0x39, - 0x39, 0x29, 0x20, 0x54, 0x42, 0x42, 0xB6, 0xCC, - 0x2A, 0x29, 0x39, 0x39, 0x2C, 0x2C, 0xCC, 0xCC, - 0x22, 0x20, 0x39, 0xE7, 0xC0, 0xD9, 0xA7, 0xBC, - 0x8D, 0xAA, 0x9C, 0xE8, 0x9C, 0x9D, 0xD4, 0xD4, - 0xD8, 0xA9, 0x84, 0xC7, 0x27, 0x27, 0x27, 0x2A, - 0x56, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x48, 0x50, 0xAA, 0xE3, 0xE3, 0xC0, - 0xA6, 0x9A, 0xBA, 0xC8, 0x9A, 0xDE, 0x9B, 0xD5, - 0xE8, 0xD8, 0xD5, 0x2E, 0x58, 0x33, 0x6B, 0x39, - 0x2C, 0x39, 0x29, 0x28, 0xD1, 0x43, 0xB6, 0xAF, - 0x23, 0x28, 0x2C, 0x39, 0x39, 0x8B, 0x30, 0x31, - 0x21, 0x20, 0x3F, 0xBB, 0xDF, 0xDF, 0xD5, 0xA8, - 0xD5, 0x9C, 0x8E, 0xB2, 0x9D, 0xE9, 0xD4, 0xD8, - 0x90, 0xB2, 0xA9, 0x8F, 0x27, 0x27, 0x27, 0x27, - 0x2F, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0xB9, 0x48, 0x48, 0x75, 0xE3, 0xAA, 0xAA, - 0xC0, 0xB4, 0xB4, 0xB4, 0x75, 0x9B, 0xD9, 0x83, - 0x9D, 0x90, 0xDF, 0xDD, 0x8A, 0x31, 0x4B, 0x2C, - 0x2C, 0x29, 0x2C, 0x3F, 0x6C, 0x55, 0xD1, 0x55, - 0x54, 0x29, 0x28, 0x39, 0x39, 0x6B, 0x24, 0x60, - 0x20, 0x2B, 0x3F, 0xA7, 0xB1, 0x9D, 0xA9, 0x8E, - 0xE5, 0xE5, 0xDF, 0xE0, 0xA9, 0x9D, 0xDF, 0xDF, - 0xEA, 0x9D, 0xB2, 0x84, 0xAA, 0x27, 0x27, 0x27, - 0x27, 0x35, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x48, 0x48, 0xA6, 0x9B, 0xE3, 0xAA, - 0xAA, 0x9B, 0x9B, 0x9B, 0xAA, 0xE3, 0xD5, 0xD4, - 0x9D, 0xA9, 0xA9, 0x9D, 0xEB, 0xAF, 0x23, 0x28, - 0x2C, 0x29, 0x28, 0x39, 0x54, 0xCC, 0xAF, 0x55, - 0x30, 0x29, 0x2B, 0x2C, 0x39, 0x39, 0x2B, 0xC4, - 0x2B, 0x29, 0x39, 0xA7, 0x8E, 0x9D, 0x83, 0xE5, - 0xB1, 0xDB, 0xDC, 0xE0, 0xDC, 0x84, 0xE9, 0x84, - 0x83, 0xD4, 0xEC, 0x83, 0x8F, 0xE4, 0x27, 0x27, - 0x27, 0x27, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x40, 0x50, 0x9A, 0x75, 0xE3, 0xE3, - 0xE3, 0xD9, 0x8D, 0xAA, 0xD9, 0xA8, 0xB2, 0xDC, - 0xB2, 0x8D, 0x84, 0xEA, 0xB1, 0xEB, 0x54, 0x29, - 0x28, 0x2C, 0x2A, 0x28, 0x2B, 0x78, 0xCC, 0x58, - 0xCB, 0x20, 0x20, 0x29, 0x39, 0x39, 0x2C, 0x25, - 0x29, 0x2C, 0x39, 0xBB, 0xD9, 0xD9, 0x9D, 0x9D, - 0xB2, 0xB1, 0xD4, 0xDB, 0xB1, 0x9D, 0xD4, 0xEA, - 0xB1, 0x8D, 0xD8, 0x8E, 0x8F, 0xAA, 0x27, 0x27, - 0x27, 0x3D, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x47, 0xE4, 0xA6, 0x75, 0xAA, 0xA8, - 0x9C, 0x9C, 0xE1, 0x9C, 0x9C, 0x8E, 0xD8, 0x9D, - 0xA9, 0xDB, 0xA9, 0xDC, 0xD8, 0xDA, 0xD4, 0x2B, - 0x20, 0x2C, 0x28, 0x2A, 0x28, 0x63, 0x31, 0x58, - 0xCB, 0x24, 0x20, 0x2B, 0x2C, 0x39, 0x6B, 0x21, - 0x39, 0x6B, 0x2C, 0xC0, 0xE0, 0xB1, 0xB2, 0x9D, - 0x8E, 0xD8, 0xE0, 0xD9, 0x84, 0xDB, 0xD8, 0xB1, - 0x8E, 0xB2, 0xE2, 0x9C, 0x83, 0x9E, 0xBC, 0x3D, - 0xD3, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xB9, - 0x56, 0x4F, 0x27, 0x61, 0xA6, 0x9B, 0xE3, 0xA9, - 0xE9, 0xD4, 0xDA, 0xDB, 0x8E, 0xE1, 0xE9, 0x8E, - 0xD4, 0xA8, 0xE0, 0x84, 0xE8, 0xB1, 0xDC, 0x9D, - 0x20, 0x29, 0x29, 0x2B, 0x2C, 0x54, 0x78, 0xCC, - 0x78, 0x33, 0x2A, 0x20, 0x29, 0x39, 0x50, 0x2A, - 0x6B, 0x8B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xA9, - 0xB2, 0xDC, 0x8E, 0xDC, 0xE1, 0xDA, 0xA9, 0x8E, - 0xEA, 0xE2, 0x83, 0xE8, 0x8E, 0x83, 0xE2, 0xED, - 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, - 0xC9, 0x27, 0x27, 0xE4, 0xA6, 0x9B, 0xD5, 0xA8, - 0xD4, 0xB2, 0xD8, 0xDA, 0xD9, 0xE8, 0xE9, 0xE8, - 0xD8, 0xB1, 0xDA, 0xB2, 0xE9, 0x8E, 0xEC, 0xDA, - 0x22, 0x20, 0x39, 0x2B, 0x39, 0x24, 0xC4, 0x30, - 0x30, 0x54, 0x22, 0x29, 0x29, 0x39, 0x48, 0x2C, - 0x39, 0x6B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xB2, - 0xB2, 0x8E, 0xA9, 0xD8, 0xDA, 0xB1, 0xA9, 0xDA, - 0x9C, 0xDC, 0x8E, 0xD4, 0xE8, 0xE8, 0x8F, 0x9B, - 0x4F, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x6B, - 0x27, 0x27, 0x27, 0xD7, 0xDE, 0xAA, 0xE3, 0xA8, - 0xB2, 0xD5, 0xE5, 0x90, 0xE2, 0xA9, 0xE9, 0xB2, - 0xDA, 0xB2, 0xE1, 0xB2, 0xE9, 0x8E, 0xDA, 0xDF, - 0x78, 0x2A, 0x2C, 0x2A, 0x6B, 0x28, 0x23, 0x54, - 0x63, 0xC4, 0x33, 0x28, 0x2C, 0x39, 0x47, 0x39, - 0x28, 0x2C, 0x29, 0xBB, 0x8D, 0x83, 0xE9, 0xD4, - 0xB2, 0xE9, 0xE9, 0xE8, 0xD4, 0xD8, 0xD4, 0xA9, - 0xDA, 0xB2, 0xE9, 0xA8, 0xB2, 0xA8, 0xD5, 0xAA, - 0xC6, 0x56, 0x56, 0x56, 0x56, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x56, 0x56, 0x56, 0xC9, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xB8, 0xB4, 0x9B, 0xE3, 0x8E, - 0x9D, 0x8E, 0xB2, 0xE8, 0xE8, 0x8E, 0xB2, 0xDA, - 0xB2, 0x8E, 0xEC, 0xB2, 0x8E, 0xB2, 0xBB, 0x58, - 0xAF, 0x33, 0x50, 0x39, 0x6B, 0x39, 0x29, 0x20, - 0x33, 0x30, 0x78, 0x23, 0x6B, 0x6B, 0x48, 0x6B, - 0x2B, 0x2A, 0x29, 0xBB, 0xE5, 0x9C, 0xB1, 0xB2, - 0xE5, 0x84, 0x8E, 0x9C, 0x84, 0xB2, 0xB2, 0x9D, - 0x84, 0xDF, 0xA9, 0x84, 0x8E, 0xA8, 0xE3, 0x9B, - 0xA6, 0xD7, 0x80, 0x4F, 0x56, 0x56, 0x56, 0x4F, - 0x4F, 0x4F, 0x4F, 0x2A, 0x2D, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xB8, 0xB4, 0xAA, 0xD5, 0xA9, - 0x9D, 0xB2, 0x90, 0xEA, 0xE9, 0xE2, 0xE1, 0x8E, - 0xB2, 0x9D, 0x8E, 0xB1, 0xA7, 0xEE, 0x63, 0xD1, - 0x2E, 0xCC, 0x28, 0x48, 0x8B, 0x47, 0x6B, 0x28, - 0x23, 0x78, 0x6C, 0x54, 0x29, 0x50, 0x50, 0x6B, - 0x23, 0x20, 0xBB, 0xBC, 0xBB, 0x8D, 0xE3, 0xDF, - 0x9C, 0xA9, 0x8D, 0xA8, 0xD9, 0x90, 0x9D, 0xA9, - 0xDC, 0xA9, 0x83, 0xB2, 0xA9, 0xD4, 0xE3, 0x9B, - 0x8C, 0xEF, 0x27, 0x27, 0x27, 0x3C, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0x84, - 0x9D, 0x84, 0x90, 0xB1, 0xA9, 0x9C, 0xD9, 0xB1, - 0xB2, 0xEA, 0xBB, 0x51, 0x24, 0x30, 0x30, 0x42, - 0x66, 0x58, 0x24, 0x48, 0x50, 0x3F, 0x20, 0x25, - 0x22, 0x60, 0x34, 0x30, 0x20, 0x8B, 0x8B, 0x39, - 0x54, 0x24, 0x2B, 0xC0, 0xC0, 0xC0, 0xBB, 0x9B, - 0xBC, 0xAA, 0xAA, 0xE3, 0xE3, 0x9C, 0xB2, 0xD4, - 0x83, 0xD8, 0xE8, 0x83, 0x84, 0xE8, 0xE5, 0x75, - 0x9A, 0xF0, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0xA8, - 0xA9, 0xD8, 0x8E, 0xEA, 0xA8, 0x9C, 0xD9, 0xE0, - 0xC0, 0x5E, 0x2C, 0x20, 0x54, 0x60, 0x30, 0x66, - 0xB6, 0xCC, 0x63, 0x3F, 0x8B, 0x28, 0x22, 0x33, - 0x23, 0x31, 0xAF, 0x31, 0x22, 0x6B, 0x6B, 0x29, - 0x30, 0x54, 0x22, 0x89, 0xBA, 0xED, 0xA6, 0x8C, - 0xB4, 0xC0, 0xB4, 0x75, 0x75, 0x9B, 0x9B, 0xE5, - 0xA9, 0xD5, 0x8E, 0x8E, 0x9C, 0xE3, 0x75, 0x8C, - 0xC8, 0xF1, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF1, 0x9A, 0xB4, 0x9B, 0xE3, - 0xE3, 0xA8, 0xE3, 0xE5, 0xAA, 0xBC, 0xC0, 0x9A, - 0x26, 0x29, 0x20, 0x24, 0x63, 0x60, 0x54, 0x43, - 0x34, 0xCB, 0x30, 0x39, 0x2C, 0x20, 0x24, 0x54, - 0x22, 0x34, 0x34, 0x31, 0x24, 0x3F, 0x2C, 0x2B, - 0x31, 0x30, 0x25, 0x2A, 0x6B, 0x29, 0x20, 0xF2, - 0xBA, 0xBF, 0xC8, 0x9A, 0xA6, 0xA6, 0x8C, 0xB4, - 0x9B, 0xAA, 0xAA, 0xAA, 0x9B, 0x75, 0xDE, 0xBF, - 0x81, 0xEF, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xEF, 0xBA, 0x9A, 0xB4, 0x75, - 0x9B, 0x9B, 0x9B, 0xC0, 0xB4, 0x9A, 0xA5, 0xC4, - 0x30, 0x28, 0x22, 0x33, 0x30, 0x30, 0x23, 0x34, - 0x31, 0x30, 0xC4, 0x2C, 0x2B, 0x22, 0x33, 0x63, - 0x21, 0x58, 0x6C, 0x60, 0x25, 0x39, 0x28, 0x2B, - 0xCC, 0x6C, 0x63, 0x20, 0x6B, 0x28, 0x2B, 0x20, - 0x63, 0x43, 0xF3, 0xEF, 0xF0, 0x81, 0xBA, 0xF4, - 0xF4, 0xA6, 0xDE, 0x8C, 0xA6, 0x9A, 0xBA, 0x81, - 0xB0, 0xE4, 0xA1, 0x20, 0x20, 0x23, 0x31, 0xC4, - 0x30, 0x24, 0x33, 0x31, 0x31, 0x60, 0x43, 0x35, - 0x35, 0x55, 0x6C, 0xEF, 0x81, 0xC8, 0x9A, 0xA6, - 0xB4, 0xB4, 0x8C, 0xA6, 0xBA, 0x68, 0x30, 0x30, - 0x30, 0x2B, 0x25, 0x54, 0xC4, 0x54, 0x24, 0x78, - 0x63, 0x63, 0x30, 0x29, 0x21, 0x24, 0x54, 0x63, - 0x23, 0x34, 0xCB, 0x30, 0x25, 0x39, 0x20, 0x20, - 0x58, 0x34, 0x60, 0x23, 0x6B, 0x29, 0x28, 0x20, - 0x22, 0xB6, 0x42, 0xB6, 0x58, 0x54, 0xF5, 0xD7, - 0xA5, 0xBA, 0xBA, 0xBA, 0xBA, 0x81, 0xA5, 0xF1, - 0xE4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x31, 0x60, - 0x54, 0x28, 0x2B, 0x22, 0x33, 0x30, 0x43, 0x35, - 0x66, 0xD1, 0x34, 0xE4, 0xEF, 0x81, 0xC8, 0x9A, - 0x9A, 0xC8, 0xC8, 0x81, 0xF6, 0x31, 0x63, 0x31, - 0x78, 0x2B, 0x54, 0x63, 0x54, 0x24, 0x23, 0x54, - 0x63, 0x54, 0x63, 0x2C, 0x23, 0x33, 0x63, 0x54, - 0x25, 0x31, 0x78, 0x30, 0x25, 0x3F, 0x20, 0x20, - 0xAF, 0x58, 0xCC, 0x33, 0x39, 0x29, 0x29, 0x2A, - 0x29, 0x58, 0x43, 0x42, 0xD1, 0xCB, 0x2C, 0x2C, - 0x37, 0xCD, 0xEF, 0xB0, 0xF0, 0xB0, 0xEF, 0xE4, - 0x63, 0x20, 0x20, 0x2C, 0x2C, 0x21, 0xCB, 0x78, - 0x54, 0x39, 0x39, 0x28, 0x2B, 0x28, 0x2B, 0xCB, - 0x55, 0xB6, 0xD1, 0x28, 0xE4, 0xD7, 0xB8, 0xF0, - 0xA5, 0xB0, 0xEF, 0x26, 0x23, 0x54, 0x31, 0x58, - 0xCB, 0x20, 0x63, 0x63, 0x25, 0x2B, 0x54, 0x78, - 0x30, 0x63, 0x54, 0x28, 0x33, 0x63, 0x63, 0x33, - 0x54, 0x78, 0xC4, 0x30, 0x24, 0x2C, 0x22, 0x22, - 0x55, 0x55, 0x34, 0x30, 0x28, 0x2C, 0x29, 0x29, - 0x28, 0x30, 0xB6, 0x42, 0x43, 0x55, 0x22, 0x29, - 0x2C, 0x2B, 0x2B, 0x3F, 0xE4, 0xE4, 0x43, 0x66, - 0x30, 0x23, 0x24, 0x2A, 0x28, 0x2B, 0x54, 0x63, - 0x33, 0x39, 0x28, 0x20, 0x20, 0x20, 0x2B, 0x31, - 0x30, 0xD1, 0x43, 0x30, 0x39, 0x28, 0xE4, 0xE4, - 0xD7, 0xF5, 0x2B, 0x6B, 0x20, 0x30, 0x34, 0xD1, - 0x60, 0x23, 0x63, 0x54, 0x22, 0x47, 0x60, 0xCB, - 0xC4, 0xC4, 0x25, 0x22, 0x54, 0xC4, 0x63, 0x23, - 0xC4, 0xC4, 0x63, 0xC4, 0x23, 0x2A, 0x24, 0x22, - 0x55, 0x55, 0xAF, 0x6C, 0x22, 0x39, 0x2C, 0x39, - 0x28, 0x23, 0xD1, 0x43, 0x42, 0x8A, 0x63, 0x39, - 0x39, 0x2A, 0x20, 0x6B, 0x33, 0xCC, 0xD1, 0xB6, - 0x30, 0x24, 0x54, 0x63, 0x31, 0xCC, 0xCC, 0xCB, - 0xC4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x39, 0x30, - 0x30, 0x6C, 0x43, 0x43, 0x6C, 0x63, 0x25, 0x24, - 0x63, 0x63, 0x63, 0x25, 0x63, 0xCC, 0xD1, 0x34, - 0x63, 0x25, 0x54, 0x25, 0x2A, 0x28, 0x31, 0xCB, - 0x63, 0x78, 0x24, 0x33, 0xC4, 0xC4, 0x33, 0x2C, - 0xC4, 0x54, 0x54, 0x30, 0x21, 0x22, 0x25, 0x23, - 0x55, 0x55, 0xD1, 0x58, 0x33, 0x6B, 0x2C, 0x39, - 0x39, 0x39, 0x34, 0x43, 0x42, 0x43, 0xCC, 0x2B, - 0x28, 0x29, 0x20, 0x28, 0x21, 0x30, 0xCC, 0xAF, - 0x54, 0x23, 0xC4, 0x54, 0x58, 0x2E, 0x35, 0x42, - 0x55, 0x54, 0x8B, 0x2A, 0x20, 0x20, 0x28, 0x22, - 0x78, 0x30, 0xD1, 0x43, 0x44, 0x6C, 0xC4, 0xC4, - 0x60, 0x31, 0x31, 0x63, 0x6C, 0xAF, 0xCC, 0xCB, - 0x24, 0x25, 0x33, 0x23, 0x2C, 0x24, 0x31, 0x30, - 0x63, 0xC4, 0x21, 0x54, 0x30, 0x63, 0x24, 0x2A, - 0x54, 0x63, 0x54, 0xC4, 0x2B, 0x24, 0x33, 0x24, - 0x34, 0x55, 0xD1, 0x55, 0x30, 0x28, 0x29, 0x39, - 0x39, 0x8B, 0x63, 0x55, 0x42, 0x66, 0xB6, 0x25, - 0x29, 0x29, 0x29, 0x28, 0x2A, 0x54, 0x78, 0x6C, - 0x23, 0x20, 0x25, 0x30, 0xCB, 0x62, 0x35, 0x35, - 0x35, 0x44, 0x24, 0x6B, 0x29, 0x20, 0x2A, 0x39, - 0x28, 0x63, 0x34, 0xB6, 0x34, 0xCB, 0x63, 0x30, - 0x31, 0x31, 0x30, 0x30, 0xCC, 0x60, 0x63, 0xC4, - 0x20, 0x33, 0x25, 0x20, 0x48, 0x33, 0x30, 0x54, - 0x78, 0x54, 0x2B, 0x63, 0x30, 0x63, 0x23, 0x22, - 0x63, 0x63, 0x63, 0x33, 0x28, 0x25, 0x54, 0x24, - 0x78, 0xAF, 0xD1, 0xD1, 0xCC, 0x22, 0x39, 0x39, - 0x2C, 0x3F, 0x2B, 0x34, 0xB6, 0x43, 0x43, 0xC4, - 0x2B, 0x28, 0x39, 0x50, 0x2C, 0x24, 0x63, 0x78, - 0x21, 0x2C, 0x2A, 0x23, 0x54, 0xD1, 0x35, 0x35, - 0x35, 0x35, 0x55, 0x22, 0x39, 0x2C, 0x2C, 0x2C, - 0x20, 0x30, 0xCC, 0x6C, 0xCB, 0x30, 0x54, 0x30, - 0x78, 0x63, 0x78, 0x30, 0x54, 0x78, 0x30, 0x23, - 0x2B, 0x33, 0x24, 0x28, 0x39, 0x24, 0x54, 0x30, - 0x78, 0x33, 0x25, 0xC4, 0xC4, 0x33, 0x39, 0x25, - 0xC4, 0x63, 0xC4, 0x24, 0x20, 0x54, 0x54, 0x25, - 0x63, 0xCC, 0xD1, 0xB6, 0x55, 0x54, 0x39, 0x29, - 0x39, 0x2C, 0x6B, 0x30, 0xAF, 0xB6, 0xB6, 0x60, - 0x22, 0x2A, 0x2C, 0x39, 0x2C, 0x21, 0x54, 0x63, - 0x21, 0x50, 0x2C, 0x2C, 0x2B, 0x25, 0x62, 0x35, - 0x35, 0x35, 0x35, 0xCC, 0x2B, 0x29, 0x2B, 0x20, - 0x23, 0x25, 0xC4, 0x30, 0xC4, 0x63, 0x63, 0x63, - 0x63, 0x33, 0x24, 0x31, 0x31, 0x31, 0x54, 0x28, - 0x24, 0x25, 0x22, 0x6B, 0x28, 0x24, 0xC4, 0x78, - 0x30, 0x24, 0x63, 0xC4, 0x54, 0x23, 0x29, 0x63, - 0xC4, 0x54, 0xC4, 0x21, 0x24, 0x54, 0x54, 0x25, - 0x30, 0xCB, 0xD1, 0xB6, 0x55, 0x63, 0x28, 0x29, - 0x39, 0x39, 0x48, 0x33, 0x58, 0x44, 0xB6, 0x60, - 0x24, 0x20, 0x2B, 0x28, 0x2A, 0x22, 0x54, 0x63, - 0x21, 0x48, 0x2A, 0x2B, 0x39, 0x21, 0xB6, 0x35, - 0x35, 0x35, 0x35, 0x42, 0x23, 0x29, 0x2A, 0x2B, - 0x23, 0x25, 0x54, 0x54, 0x54, 0x63, 0x63, 0x30, - 0x25, 0x2B, 0x31, 0x31, 0x31, 0x31, 0x21, 0x2C, - 0x33, 0x25, 0x21, 0x39, 0x20, 0x25, 0x30, 0x78, - 0xC4, 0x23, 0xC4, 0x30, 0x54, 0x20, 0x28, 0x63, - 0x63, 0x63, 0x63, 0x20, 0x25, 0x54, 0x54, 0x20, + 0x20, 0x4B, 0xC5, 0x7D, 0x24, 0xEE, 0x67, 0x30, + 0x30, 0x8D, 0x67, 0x8E, 0xF9, 0xF7, 0x97, 0xDD, + 0x2F, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x55, 0x2A, + 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, + 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2, + 0xA3, 0xA3, 0xB2, 0x51, 0x89, 0x44, 0xE0, 0x5E, + 0x91, 0x9F, 0x9F, 0x7D, 0x7D, 0xD9, 0x24, 0xF0, + 0x79, 0x8E, 0xEE, 0x8E, 0x24, 0x40, 0x65, 0x35, + 0x69, 0x2E, 0x98, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x98, + 0xA5, 0xA7, 0x95, 0xD7, 0x8C, 0xF0, 0x8E, 0x8E, + 0xEE, 0x79, 0xF0, 0xED, 0x50, 0xE8, 0x89, 0x2F, + 0xA3, 0xA3, 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0x55, + 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2, + 0x74, 0xA0, 0xA0, 0x98, 0x66, 0xB2, 0xB2, 0xB2, + 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x2F, + 0x51, 0x83, 0xE4, 0x87, 0xB8, 0xFA, 0xA9, 0xC6, + 0x40, 0x64, 0x64, 0x50, 0xD7, 0x65, 0x35, 0x60, + 0x98, 0xB2, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3, + 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xB2, + 0x89, 0xDD, 0x9B, 0xC0, 0x7D, 0x50, 0x8C, 0xED, + 0xED, 0x8C, 0x40, 0x9F, 0x4E, 0x51, 0xB2, 0x2F, + 0x2F, 0x2F, 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55, + 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3, + 0xA3, 0x2A, 0x55, 0x98, 0xA3, 0x2F, 0xB2, 0x2F, + 0x66, 0x66, 0x2F, 0xB2, 0xD1, 0x2F, 0x2F, 0xA3, + 0xB2, 0xB2, 0xA3, 0x8F, 0xA3, 0x2F, 0xD1, 0x94, + 0xEC, 0x65, 0x65, 0xC0, 0xC0, 0x35, 0x95, 0xC2, + 0xA3, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, + 0xA3, 0x2F, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0x51, + 0x89, 0x44, 0xD1, 0x60, 0x35, 0xA9, 0x32, 0xC6, + 0xD7, 0x32, 0x94, 0x44, 0x2F, 0xB2, 0xB2, 0xB2, + 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0, + 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3, + 0x8F, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0x2F, 0xB2, + 0xA3, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66, + 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x2F, + 0x5E, 0xDF, 0xB9, 0x60, 0x95, 0xD3, 0x89, 0x2F, + 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0xA3, + 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2, + 0x51, 0x2F, 0x8F, 0x2F, 0xC4, 0xB9, 0x9B, 0xEC, + 0x53, 0xB3, 0x4E, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, + 0xA3, 0x66, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, + 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66, + 0xA0, 0x55, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2, + 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0x66, + 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3, + 0xB2, 0xC2, 0x74, 0xD8, 0xB2, 0xA3, 0xA3, 0xA3, + 0x66, 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66, + 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2, + 0x2F, 0x66, 0xA0, 0x55, 0x98, 0x2F, 0x89, 0x89, + 0x89, 0xB2, 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2, + 0x2F, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, + 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98, + 0x66, 0x98, 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2, + 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, + 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2, + 0x89, 0xD8, 0x89, 0x2F, 0x66, 0x66, 0xA3, 0xA3, + 0x98, 0x98, 0x66, 0x66, 0x98, 0x98, 0x66, 0xA3, + 0x2F, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, + 0xB2, 0x2F, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F, + 0x2F, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x2F, + 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, + 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66, + 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, + 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, + 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51, + 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66, 0xA3, 0x66, + 0x98, 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0x2F, + 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, + 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, + 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, + 0x2F, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, + 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66 }; unsigned char linux_logo_bw[] __initdata = { @@ -1021,22 +1026,22 @@ unsigned char linux_logo_bw[] __initdata = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; -/* Painted by Johnny Stenback <jst@uwasa.fi> */ +unsigned char linux_logo16_red[0]; +unsigned char linux_logo16_green[0]; +unsigned char linux_logo16_blue[0]; +unsigned char linux_logo16[0]; + +#else + +/* prototypes only */ +extern unsigned char linux_logo_red[]; +extern unsigned char linux_logo_green[]; +extern unsigned char linux_logo_blue[]; +extern unsigned char linux_logo[]; +extern unsigned char linux_logo_bw[]; +extern unsigned char linux_logo16_red[]; +extern unsigned char linux_logo16_green[]; +extern unsigned char linux_logo16_blue[]; +extern unsigned char linux_logo16[]; -unsigned char *linux_serial_image __initdata = "\n" -" .u$e.\n" -" .$$$$$:S\n" -" $\"*$/\"*$$\n" -" $.`$ . ^F\n" -" 4k+#+T.$F\n" -" 4P+++\"$\"$\n" -" :R\"+ t$$B\n" -" ___# $$$\n" -" | | R$$k\n" -" dd. | Linux $!$\n" -" ddd | Sparc $9$F\n" -" '!!!!!$ !!#!`\n" -" !!!!!* .!!!!!`\n" -"'!!!!!!!W..e$$!!!!!!` %s\n" -" \"~^^~ ^~~^\n" -"\n"; +#endif diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h index 44209a120..1d8a9f7ee 100644 --- a/include/asm-sparc64/mmu_context.h +++ b/include/asm-sparc64/mmu_context.h @@ -1,4 +1,4 @@ -/* $Id: mmu_context.h,v 1.20 1997/09/18 10:42:08 rth Exp $ */ +/* $Id: mmu_context.h,v 1.26 1998/07/31 10:42:38 jj Exp $ */ #ifndef __SPARC64_MMU_CONTEXT_H #define __SPARC64_MMU_CONTEXT_H @@ -6,70 +6,80 @@ #include <asm/system.h> #include <asm/spitfire.h> +#include <asm/spinlock.h> #define NO_CONTEXT 0 #ifndef __ASSEMBLY__ extern unsigned long tlb_context_cache; +extern spinlock_t scheduler_lock; +extern unsigned long mmu_context_bmap[]; -#define CTX_VERSION_SHIFT PAGE_SHIFT +#define CTX_VERSION_SHIFT (PAGE_SHIFT - 3) #define CTX_VERSION_MASK ((~0UL) << CTX_VERSION_SHIFT) #define CTX_FIRST_VERSION ((1UL << CTX_VERSION_SHIFT) + 1UL) -extern void get_new_mmu_context(struct mm_struct *mm, unsigned long *ctx); +extern void get_new_mmu_context(struct mm_struct *mm); /* Initialize/destroy the context related info for a new mm_struct * instance. */ #define init_new_context(mm) ((mm)->context = NO_CONTEXT) -#define destroy_context(mm) ((mm)->context = NO_CONTEXT) - -#ifdef __SMP__ -#define LOCAL_FLUSH_PENDING(cpu) \ - ((cpu_data[(cpu)].last_tlbversion_seen ^ tlb_context_cache) & CTX_VERSION_MASK) -#define DO_LOCAL_FLUSH(cpu) do { __flush_tlb_all(); \ - cpu_data[cpu].last_tlbversion_seen = \ - tlb_context_cache & CTX_VERSION_MASK; \ - } while(0) -#else -#define LOCAL_FLUSH_PENDING(cpu) 0 -#define DO_LOCAL_FLUSH(cpu) do { __flush_tlb_all(); } while(0) -#endif - -extern void __flush_tlb_all(void); +#define destroy_context(mm) do { \ + if ((mm)->context != NO_CONTEXT) { \ + spin_lock(&scheduler_lock); \ + if (!(((mm)->context ^ tlb_context_cache) & CTX_VERSION_MASK)) \ + clear_bit((mm)->context & ~(CTX_VERSION_MASK), \ + mmu_context_bmap); \ + spin_unlock(&scheduler_lock); \ + (mm)->context = NO_CONTEXT; \ + } \ +} while (0) extern __inline__ void get_mmu_context(struct task_struct *tsk) { register unsigned long paddr asm("o5"); + register unsigned long pgd_cache asm("o4"); struct mm_struct *mm = tsk->mm; flushw_user(); - if(LOCAL_FLUSH_PENDING(current->processor)) - DO_LOCAL_FLUSH(current->processor); if(!(tsk->tss.flags & SPARC_FLAG_KTHREAD) && !(tsk->flags & PF_EXITING)) { unsigned long ctx = tlb_context_cache; if((mm->context ^ ctx) & CTX_VERSION_MASK) - get_new_mmu_context(mm, &tlb_context_cache); - + get_new_mmu_context(mm); + if(!(mm->cpu_vm_mask & (1UL<<smp_processor_id()))) { + spitfire_set_secondary_context(mm->context & 0x3ff); + __asm__ __volatile__("flush %g6"); + spitfire_flush_dtlb_secondary_context(); + spitfire_flush_itlb_secondary_context(); + __asm__ __volatile__("flush %g6"); + } /* Don't worry, set_fs() will restore it... */ /* Sigh, damned include loops... just poke seg directly. */ tsk->tss.ctx = (tsk->tss.current_ds.seg ? - (mm->context & 0x1fff) : 0); + (mm->context & 0x3ff) : 0); } else tsk->tss.ctx = 0; spitfire_set_secondary_context(tsk->tss.ctx); __asm__ __volatile__("flush %g6"); paddr = __pa(mm->pgd); + if(tsk->tss.flags & SPARC_FLAG_32BIT) + pgd_cache = (unsigned long) mm->pgd[0]; + else + pgd_cache = 0; __asm__ __volatile__(" - rdpr %%pstate, %%o4 - wrpr %%o4, %1, %%pstate + rdpr %%pstate, %%o3 + wrpr %%o3, %2, %%pstate + mov %4, %%g4 mov %0, %%g7 - wrpr %%o4, 0x0, %%pstate + stxa %1, [%%g4] %3 + wrpr %%o3, 0x0, %%pstate " : /* no outputs */ - : "r" (paddr), "i" (PSTATE_MG|PSTATE_IE) - : "o4"); + : "r" (paddr), "r" (pgd_cache), "i" (PSTATE_MG|PSTATE_IE), + "i" (ASI_DMMU), "i" (TSB_REG) + : "o3"); } /* diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h index 86ec1477d..fe33651cf 100644 --- a/include/asm-sparc64/page.h +++ b/include/asm-sparc64/page.h @@ -1,4 +1,4 @@ -/* $Id: page.h,v 1.17 1998/01/14 17:16:28 jj Exp $ */ +/* $Id: page.h,v 1.23 1998/06/12 14:54:33 jj Exp $ */ #ifndef _SPARC64_PAGE_H #define _SPARC64_PAGE_H @@ -13,12 +13,12 @@ #define PAGE_MASK (~(PAGE_SIZE-1)) + #ifdef __KERNEL__ #ifndef __ASSEMBLY__ -#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) - +#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) extern void copy_page(unsigned long to, unsigned long from); /* GROSS, defining this makes gcc pass these types as aggregates, @@ -82,8 +82,7 @@ typedef unsigned long iopgprot_t; #endif /* (STRICT_MM_TYPECHECKS) */ #define TASK_UNMAPPED_BASE ((current->tss.flags & SPARC_FLAG_32BIT) ? \ - (0x0000000070000000UL) : \ - (0xfffff80000000000UL)) + (0x0000000070000000UL) : (PAGE_OFFSET)) #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc64/pbm.h b/include/asm-sparc64/pbm.h index 3adcc9583..adb1e10bf 100644 --- a/include/asm-sparc64/pbm.h +++ b/include/asm-sparc64/pbm.h @@ -1,4 +1,4 @@ -/* $Id: pbm.h,v 1.12 1998/04/10 12:29:55 ecd Exp $ +/* $Id: pbm.h,v 1.14 1998/05/29 06:00:40 ecd Exp $ * pbm.h: U2P PCI bus module pseudo driver software state. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) @@ -74,46 +74,13 @@ struct pcidev_cookie { int prom_node; }; -extern struct linux_psycho *psycho_root; -extern struct linux_psycho **psycho_index_map; -extern int linux_num_psycho; -static __inline__ struct linux_psycho * -psycho_by_index(int index) -{ - if (index >= linux_num_psycho) - return NULL; - return psycho_index_map[index]; -} +#define PCI_IRQ_IGN 0x000007c0 /* PSYCHO "Int Group Number". */ +#define PCI_IRQ_INO 0x0000003f /* PSYCHO INO. */ -/* Special PCI IRQ encoding, this just makes life easier for the generic - * irq registry layer, there is already enough crap in there due to sbus, - * fhc, and dcookies. - */ -#define PCI_IRQ_IDENT 0x80000000 /* This tells irq.c what we are */ -#define PCI_IRQ_IMAP_OFF 0x7ff00000 /* Offset from first PSYCHO imap */ -#define PCI_IRQ_IMAP_OFF_SHFT 20 -#define PCI_IRQ_BUSNO 0x000fc000 /* PSYCHO instance */ -#define PCI_IRQ_BUSNO_SHFT 14 -#define PCI_IRQ_IGN 0x000007c0 /* PSYCHO "Int Group Number" */ -#define PCI_IRQ_INO 0x0000003f /* PSYCHO INO */ - -#define PCI_IRQ_P(__irq) (((__irq) & PCI_IRQ_IDENT) != 0) - -extern __inline__ unsigned int pci_irq_encode(unsigned long imap_off, - unsigned long psycho_instance, - unsigned long ign, - unsigned long ino) -{ - unsigned int irq; - - irq = PCI_IRQ_IDENT; - irq |= ((imap_off << PCI_IRQ_IMAP_OFF_SHFT) & PCI_IRQ_IMAP_OFF); - irq |= ((psycho_instance << PCI_IRQ_BUSNO_SHFT) & PCI_IRQ_BUSNO); - irq |= ((ign << 6) & PCI_IRQ_IGN); - irq |= (ino & PCI_IRQ_INO); - - return irq; -} +/* Used by EBus */ +extern unsigned int psycho_irq_build(struct linux_pbm_info *pbm, + struct pci_dev *pdev, + unsigned int full_ino); #endif /* !(__SPARC64_PBM_H) */ diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index c57eb06cf..2bc6695b7 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h @@ -1,4 +1,4 @@ -/* $Id: pgtable.h,v 1.64 1998/02/16 14:06:44 jj Exp $ +/* $Id: pgtable.h,v 1.85 1998/08/04 20:51:33 davem Exp $ * pgtable.h: SpitFire page table operations. * * Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu) @@ -41,10 +41,20 @@ /* Entries per page directory level. */ #define PTRS_PER_PTE (1UL << (PAGE_SHIFT-3)) -#define PTRS_PER_PMD (1UL << (PAGE_SHIFT-2)) -/* We cannot use the top 16G because a half of mm/ would break, so why to check it */ + +/* We the first one in this file, what we export to the kernel + * is different so we can optimize correctly for 32-bit tasks. + */ +#define REAL_PTRS_PER_PMD (1UL << (PAGE_SHIFT-2)) +#define PTRS_PER_PMD ((const int)((current->tss.flags & SPARC_FLAG_32BIT) ? \ + (REAL_PTRS_PER_PMD >> 2) : (REAL_PTRS_PER_PMD))) + +/* We cannot use the top 16G because VPTE table lives there. */ #define PTRS_PER_PGD ((1UL << (PAGE_SHIFT-3))-1) -#define USER_PTRS_PER_PGD PTRS_PER_PGD /* Kernel has a separate 44bit address space */ + +/* Kernel has a separate 44bit address space. */ +#define USER_PTRS_PER_PGD ((const int)((current->tss.flags & SPARC_FLAG_32BIT) ? \ + (1) : (PTRS_PER_PGD))) #define PTE_TABLE_SIZE 0x2000 /* 1024 entries 8 bytes each */ #define PMD_TABLE_SIZE 0x2000 /* 2048 entries 4 bytes each */ @@ -54,8 +64,9 @@ #define PTRS_PER_PAGE (1UL << (PAGE_SHIFT-3)) /* NOTE: TLB miss handlers depend heavily upon where this is. */ -#define VMALLOC_START 0x0000000800000000UL +#define VMALLOC_START 0x0000000140000000UL #define VMALLOC_VMADDR(x) ((unsigned long)(x)) +#define VMALLOC_END 0x0000000200000000UL #endif /* !(__ASSEMBLY__) */ @@ -93,8 +104,7 @@ #define __ACCESS_BITS (_PAGE_ACCESSED | _PAGE_READ | _PAGE_R) #define __PRIV_BITS _PAGE_P -#define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \ - __PRIV_BITS | __ACCESS_BITS) +#define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_ACCESSED) #define PAGE_SHARED __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \ __ACCESS_BITS | _PAGE_W | _PAGE_WRITE) @@ -137,11 +147,7 @@ #ifndef __ASSEMBLY__ extern pte_t __bad_page(void); -extern pmd_t *__bad_pmd(void); -extern pte_t *__bad_pte(void); -#define BAD_PMD __bad_pmd() -#define BAD_PTE __bad_pte() #define BAD_PAGE __bad_page() /* First physical page can be anywhere, the following is needed so that @@ -151,12 +157,9 @@ extern pte_t *__bad_pte(void); extern unsigned long phys_base; #define ZERO_PAGE ((unsigned long)__va(phys_base)) -/* This is for making TLB miss faster to process. */ -#define null_pmd_table (null_pte_table - PAGE_SIZE) -extern unsigned int null_pte_table; - /* Allocate a block of RAM which is aligned to its size. - This procedure can be used until the call to mem_init(). */ + * This procedure can be used until the call to mem_init(). + */ extern void *sparc_init_alloc(unsigned long *kbrk, unsigned long size); /* Cache and TLB flush operations. */ @@ -173,36 +176,38 @@ extern void *sparc_init_alloc(unsigned long *kbrk, unsigned long size); extern void __flush_cache_all(void); extern void __flush_tlb_all(void); -extern void __flush_tlb_mm(unsigned long context); +extern void __flush_tlb_mm(unsigned long context, unsigned long r); extern void __flush_tlb_range(unsigned long context, unsigned long start, - unsigned long end); -extern void __flush_tlb_page(unsigned long context, unsigned long page); + unsigned long r, unsigned long end, + unsigned long pgsz, unsigned long size); +extern void __flush_tlb_page(unsigned long context, unsigned long page, unsigned long r); #ifndef __SMP__ #define flush_cache_all() __flush_cache_all() #define flush_tlb_all() __flush_tlb_all() -extern __inline__ void flush_tlb_mm(struct mm_struct *mm) -{ - if(mm->context != NO_CONTEXT) - __flush_tlb_mm(mm->context & 0x1fff); -} - -extern __inline__ void flush_tlb_range(struct mm_struct *mm, unsigned long start, - unsigned long end) -{ - if(mm->context != NO_CONTEXT) - __flush_tlb_range(mm->context & 0x1fff, start, end); -} - -extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) -{ - struct mm_struct *mm = vma->vm_mm; - - if(mm->context != NO_CONTEXT) - __flush_tlb_page(mm->context & 0x1fff, page & PAGE_MASK); -} +#define flush_tlb_mm(mm) \ +do { if((mm)->context != NO_CONTEXT) \ + __flush_tlb_mm((mm)->context & 0x3ff, SECONDARY_CONTEXT); \ +} while(0) + +#define flush_tlb_range(mm, start, end) \ +do { if((mm)->context != NO_CONTEXT) { \ + unsigned long __start = (start)&PAGE_MASK; \ + unsigned long __end = (end)&PAGE_MASK; \ + __flush_tlb_range((mm)->context & 0x3ff, __start, \ + SECONDARY_CONTEXT, __end, PAGE_SIZE, \ + (__end - __start)); \ + } \ +} while(0) + +#define flush_tlb_page(vma, page) \ +do { struct mm_struct *__mm = (vma)->vm_mm; \ + if(__mm->context != NO_CONTEXT) \ + __flush_tlb_page(__mm->context & 0x3ff, (page)&PAGE_MASK, \ + SECONDARY_CONTEXT); \ +} while(0) #else /* __SMP__ */ @@ -239,105 +244,74 @@ extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long #endif -extern inline pte_t mk_pte(unsigned long page, pgprot_t pgprot) -{ return __pte(__pa(page) | pgprot_val(pgprot)); } - -extern inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) -{ return __pte(physpage | pgprot_val(pgprot)); } - -extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot) -{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; } - -extern inline void pmd_set(pmd_t *pmdp, pte_t *ptep) -{ pmd_val(*pmdp) = __pa((unsigned long) ptep); } - -extern inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp) -{ pgd_val(*pgdp) = __pa((unsigned long) pmdp); } - -extern inline unsigned long pte_page(pte_t pte) -{ return (unsigned long) __va((pte_val(pte) & _PFN_MASK)); } - -extern inline unsigned long pmd_page(pmd_t pmd) -{ return (unsigned long) __va(pmd_val(pmd)); } - -extern inline unsigned long pgd_page(pgd_t pgd) -{ return (unsigned long) __va(pgd_val(pgd)); } - -#define PMD_NONE_MAGIC 0x40 -#define PGD_NONE_MAGIC 0x40 - -extern inline int pte_none(pte_t pte) { return !pte_val(pte); } -extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_PRESENT; } -extern inline void pte_clear(pte_t *pte) { pte_val(*pte) = 0; } - -extern inline int pmd_none(pmd_t pmd) { return pmd_val(pmd)&PMD_NONE_MAGIC; } -extern inline int pmd_bad(pmd_t pmd) { return 0; } -extern inline int pmd_present(pmd_t pmd) { return !(pmd_val(pmd)&PMD_NONE_MAGIC);} -extern inline void pmd_clear(pmd_t *pmdp) { pmd_val(*pmdp) = null_pte_table; } - -extern inline int pgd_none(pgd_t pgd) { return pgd_val(pgd) & PGD_NONE_MAGIC; } -extern inline int pgd_bad(pgd_t pgd) { return 0; } -extern inline int pgd_present(pgd_t pgd) { return !(pgd_val(pgd)&PGD_NONE_MAGIC);} -extern inline void pgd_clear(pgd_t *pgdp) { pgd_val(*pgdp) = null_pmd_table; } +#define mk_pte(page, pgprot) (__pte(__pa(page) | pgprot_val(pgprot))) +#define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot))) +#define pte_modify(_pte, newprot) \ + (pte_val(_pte) = ((pte_val(_pte) & _PAGE_CHG_MASK) | pgprot_val(newprot))) +#define pmd_set(pmdp, ptep) (pmd_val(*(pmdp)) = __pa((unsigned long) (ptep))) +#define pgd_set(pgdp, pmdp) (pgd_val(*(pgdp)) = __pa((unsigned long) (pmdp))) +#define pte_page(pte) ((unsigned long) __va(((pte_val(pte)&~PAGE_OFFSET)&~(0xfffUL)))) +#define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd))) +#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd))) +#define pte_none(pte) (!pte_val(pte)) +#define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT) +#define pte_clear(pte) (pte_val(*(pte)) = 0UL) +#define pmd_none(pmd) (!pmd_val(pmd)) +#define pmd_bad(pmd) (0) +#define pmd_present(pmd) (pmd_val(pmd) != 0UL) +#define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL) +#define pgd_none(pgd) (!pgd_val(pgd)) +#define pgd_bad(pgd) (0) +#define pgd_present(pgd) (pgd_val(pgd) != 0UL) +#define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) /* The following only work if pte_present() is true. * Undefined behaviour if not.. */ -extern inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_READ; } -extern inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } -extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_MODIFIED; } -extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } - -extern inline pte_t pte_wrprotect(pte_t pte) -{ return __pte(pte_val(pte) & ~(_PAGE_WRITE|_PAGE_W)); } - -extern inline pte_t pte_rdprotect(pte_t pte) -{ return __pte(pte_val(pte) & ~(_PAGE_READ|_PAGE_R)); } - -extern inline pte_t pte_mkclean(pte_t pte) -{ return __pte(pte_val(pte) & ~(_PAGE_MODIFIED | _PAGE_W)); } - -extern inline pte_t pte_mkold(pte_t pte) -{ return __pte(pte_val(pte) & ~(_PAGE_ACCESSED | _PAGE_R)); } - -extern inline pte_t pte_mkwrite(pte_t pte) -{ - if(pte_val(pte) & _PAGE_MODIFIED) - return __pte(pte_val(pte) | (_PAGE_WRITE | _PAGE_W)); +#define pte_read(pte) (pte_val(pte) & _PAGE_READ) +#define pte_write(pte) (pte_val(pte) & _PAGE_WRITE) +#define pte_dirty(pte) (pte_val(pte) & _PAGE_MODIFIED) +#define pte_young(pte) (pte_val(pte) & _PAGE_ACCESSED) +#define pte_wrprotect(pte) (__pte(pte_val(pte) & ~(_PAGE_WRITE|_PAGE_W))) +#define pte_rdprotect(pte) (__pte(((pte_val(pte)<<1UL)>>1UL) & ~_PAGE_READ)) +#define pte_mkclean(pte) (__pte(pte_val(pte) & ~(_PAGE_MODIFIED|_PAGE_W))) +#define pte_mkold(pte) (__pte(((pte_val(pte)<<1UL)>>1UL) & ~_PAGE_ACCESSED)) + +/* Be very careful when you change these three, they are delicate. */ +static __inline__ pte_t pte_mkyoung(pte_t _pte) +{ if(pte_val(_pte) & _PAGE_READ) + return __pte(pte_val(_pte)|(_PAGE_ACCESSED|_PAGE_R)); else - return __pte(pte_val(pte) | (_PAGE_WRITE)); + return __pte(pte_val(_pte)|(_PAGE_ACCESSED)); } -extern inline pte_t pte_mkdirty(pte_t pte) -{ - if(pte_val(pte) & _PAGE_WRITE) - return __pte(pte_val(pte) | (_PAGE_MODIFIED | _PAGE_W)); +static __inline__ pte_t pte_mkwrite(pte_t _pte) +{ if(pte_val(_pte) & _PAGE_MODIFIED) + return __pte(pte_val(_pte)|(_PAGE_WRITE|_PAGE_W)); else - return __pte(pte_val(pte) | (_PAGE_MODIFIED)); + return __pte(pte_val(_pte)|(_PAGE_WRITE)); } -extern inline pte_t pte_mkyoung(pte_t pte) -{ - if(pte_val(pte) & _PAGE_READ) - return __pte(pte_val(pte) | (_PAGE_ACCESSED | _PAGE_R)); +static __inline__ pte_t pte_mkdirty(pte_t _pte) +{ if(pte_val(_pte) & _PAGE_WRITE) + return __pte(pte_val(_pte)|(_PAGE_MODIFIED|_PAGE_W)); else - return __pte(pte_val(pte) | (_PAGE_ACCESSED)); + return __pte(pte_val(_pte)|(_PAGE_MODIFIED)); } /* to find an entry in a page-table-directory. */ -extern inline pgd_t *pgd_offset(struct mm_struct *mm, unsigned long address) -{ return mm->pgd + ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD)); } +#define pgd_offset(mm, address) ((mm)->pgd + ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD))) /* to find an entry in a kernel page-table-directory */ #define pgd_offset_k(address) pgd_offset(&init_mm, address) /* Find an entry in the second-level page table.. */ -extern inline pmd_t *pmd_offset(pgd_t *dir, unsigned long address) -{ return (pmd_t *) pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1)); } +#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \ + ((address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD-1))) /* Find an entry in the third-level page table.. */ -extern inline pte_t *pte_offset(pmd_t *dir, unsigned long address) -{ return (pte_t *) pmd_page(*dir) + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)); } +#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \ + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) /* Very stupidly, we used to get new pgd's and pmd's, init their contents * to point to the NULL versions of the next level page table, later on @@ -352,31 +326,68 @@ extern inline pte_t *pte_offset(pmd_t *dir, unsigned long address) #else extern struct pgtable_cache_struct { unsigned long *pgd_cache; - unsigned long *pmd_cache; unsigned long *pte_cache; unsigned long pgcache_size; + unsigned long pgdcache_size; } pgt_quicklists; #endif #define pgd_quicklist (pgt_quicklists.pgd_cache) -#define pmd_quicklist (pgt_quicklists.pmd_cache) +#define pmd_quicklist ((unsigned long *)0) #define pte_quicklist (pgt_quicklists.pte_cache) #define pgtable_cache_size (pgt_quicklists.pgcache_size) +#define pgd_cache_size (pgt_quicklists.pgdcache_size) -extern pgd_t *get_pgd_slow(void); +#ifndef __SMP__ -extern __inline__ pgd_t *get_pgd_fast(void) +extern __inline__ void free_pgd_fast(pgd_t *pgd) { - unsigned long *ret; + struct page *page = mem_map + MAP_NR(pgd); - if((ret = pgd_quicklist) != NULL) { - pgd_quicklist = (unsigned long *)(*ret); - ret[0] = ret[1]; - pgtable_cache_size--; - } else - ret = (unsigned long *)get_pgd_slow(); - return (pgd_t *)ret; + if (!page->pprev_hash) { + (unsigned long *)page->next_hash = pgd_quicklist; + pgd_quicklist = (unsigned long *)page; + } + (unsigned long)page->pprev_hash |= + (((unsigned long)pgd & (PAGE_SIZE / 2)) ? 2 : 1); + pgd_cache_size++; } +extern __inline__ pgd_t *get_pgd_fast(void) +{ + struct page *ret; + + if ((ret = (struct page *)pgd_quicklist) != NULL) { + unsigned long mask = (unsigned long)ret->pprev_hash; + unsigned long off = 0; + + if (mask & 1) + mask &= ~1; + else { + off = PAGE_SIZE / 2; + mask &= ~2; + } + (unsigned long)ret->pprev_hash = mask; + if (!mask) + pgd_quicklist = (unsigned long *)ret->next_hash; + ret = (struct page *)(PAGE_OFFSET + (ret->map_nr << PAGE_SHIFT) + off); + pgd_cache_size--; + } else { + ret = (struct page *) __get_free_page(GFP_KERNEL); + if(ret) { + struct page *page = mem_map + MAP_NR(ret); + + clear_page(ret); + (unsigned long)page->pprev_hash = 2; + (unsigned long *)page->next_hash = pgd_quicklist; + pgd_quicklist = (unsigned long *)page; + pgd_cache_size++; + } + } + return (pgd_t *)ret; +} + +#else /* __SMP__ */ + extern __inline__ void free_pgd_fast(pgd_t *pgd) { *(unsigned long *)pgd = (unsigned long) pgd_quicklist; @@ -384,20 +395,38 @@ extern __inline__ void free_pgd_fast(pgd_t *pgd) pgtable_cache_size++; } +extern __inline__ pgd_t *get_pgd_fast(void) +{ + unsigned long *ret; + + if((ret = pgd_quicklist) != NULL) { + pgd_quicklist = (unsigned long *)(*ret); + ret[0] = 0; + pgtable_cache_size--; + } else { + ret = (unsigned long *) __get_free_page(GFP_KERNEL); + if(ret) + clear_page(ret); + } + return (pgd_t *)ret; +} + extern __inline__ void free_pgd_slow(pgd_t *pgd) { free_page((unsigned long)pgd); } +#endif /* __SMP__ */ + extern pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long address_premasked); extern __inline__ pmd_t *get_pmd_fast(void) { unsigned long *ret; - if((ret = (unsigned long *)pmd_quicklist) != NULL) { - pmd_quicklist = (unsigned long *)(*ret); - ret[0] = ret[1]; + if((ret = (unsigned long *)pte_quicklist) != NULL) { + pte_quicklist = (unsigned long *)(*ret); + ret[0] = 0; pgtable_cache_size--; } return (pmd_t *)ret; @@ -405,8 +434,8 @@ extern __inline__ pmd_t *get_pmd_fast(void) extern __inline__ void free_pmd_fast(pgd_t *pmd) { - *(unsigned long *)pmd = (unsigned long) pmd_quicklist; - pmd_quicklist = (unsigned long *) pmd; + *(unsigned long *)pmd = (unsigned long) pte_quicklist; + pte_quicklist = (unsigned long *) pmd; pgtable_cache_size++; } @@ -423,7 +452,7 @@ extern __inline__ pte_t *get_pte_fast(void) if((ret = (unsigned long *)pte_quicklist) != NULL) { pte_quicklist = (unsigned long *)(*ret); - ret[0] = ret[1]; + ret[0] = 0; pgtable_cache_size--; } return (pte_t *)ret; @@ -464,7 +493,7 @@ extern inline pte_t * pte_alloc(pmd_t *pmd, unsigned long address) extern inline pmd_t * pmd_alloc(pgd_t *pgd, unsigned long address) { - address = (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1); + address = (address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD - 1); if (pgd_none(*pgd)) { pmd_t *page = get_pmd_fast(); @@ -479,12 +508,12 @@ extern inline pmd_t * pmd_alloc(pgd_t *pgd, unsigned long address) #define pte_alloc_kernel(pmd, addr) pte_alloc(pmd, addr) #define pmd_alloc_kernel(pgd, addr) pmd_alloc(pgd, addr) -extern inline void set_pgdir(unsigned long address, pgd_t entry) -{ - /* Nothing to do on sparc64 :) */ -} +extern int do_check_pgt_cache(int, int); -extern pgd_t swapper_pg_dir[1024]; +/* Nothing to do on sparc64 :) */ +#define set_pgdir(address, entry) do { } while(0) + +extern pgd_t swapper_pg_dir[1]; extern inline void SET_PAGE_DIR(struct task_struct *tsk, pgd_t *pgdir) { @@ -526,35 +555,26 @@ extern void mmu_release_scsi_sgl(struct mmu_sglist *sg, int sz, struct linux_sbu #define mmu_lockarea(vaddr, len) (vaddr) #define mmu_unlockarea(vaddr, len) do { } while(0) -extern __inline__ void update_mmu_cache(struct vm_area_struct *vma, - unsigned long address, pte_t pte) -{ - struct mm_struct *mm = vma->vm_mm; - unsigned long ctx = mm->context & 0x1fff; - unsigned long tag_access; - - tag_access = address | ctx; - - __asm__ __volatile__(" - rdpr %%pstate, %%g1 - wrpr %%g1, %0, %%pstate - brz,pt %1, 1f - mov %2, %%g2 - stxa %3, [%%g2] %5 - b,pt %%xcc, 2f - stxa %4, [%%g0] %6 -1: - stxa %3, [%%g2] %7 - stxa %4, [%%g0] %8 -2: - wrpr %%g1, 0x0, %%pstate -" : /* no outputs */ - : "i" (PSTATE_IE), "r" (vma->vm_flags & VM_EXEC), - "i" (TLB_TAG_ACCESS), "r" (tag_access), "r" (pte_val(pte)), - "i" (ASI_IMMU), "i" (ASI_ITLB_DATA_IN), - "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_IN) - : "g1", "g2"); -} +#define update_mmu_cache(__vma, __address, _pte) \ +__asm__ __volatile__( \ + "rdpr %%pstate, %%g1\n\t" \ + "wrpr %%g1, %0, %%pstate\n\t" \ + "brz,pt %1, 1f\n\t" \ + " mov %2, %%g2\n\t" \ + "stxa %3, [%%g2] %5\n\t" \ + "ba,pt %%xcc, 2f\n\t" \ + " stxa %4, [%%g0] %6\n\t" \ +"1: stxa %3, [%%g2] %7\n\t" \ +" stxa %4, [%%g0] %8\n\t" \ +"2: wrpr %%g1, 0x0, %%pstate\n" \ + : /* no outputs */ \ + : "i" (PSTATE_IE), \ + "r" (((__vma)->vm_flags&(VM_READ|VM_WRITE|VM_EXEC))==(VM_READ|VM_EXEC)), \ + "i" (TLB_TAG_ACCESS), \ + "r" ((__address) | ((__vma)->vm_mm->context & 0x3ff)), \ + "r" (pte_val(_pte)), "i" (ASI_IMMU), "i" (ASI_ITLB_DATA_IN), \ + "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_IN) \ + : "g1", "g2") /* Make a non-present pseudo-TTE. */ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) @@ -596,7 +616,6 @@ __get_iospace (unsigned long addr) extern void * module_map (unsigned long size); extern void module_unmap (void *addr); -extern void module_shrink (void *addr, unsigned long size); /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (test_bit(PG_skip, &(page)->flags)) diff --git a/include/asm-sparc64/posix_types.h b/include/asm-sparc64/posix_types.h index dd09cb516..98b4125a6 100644 --- a/include/asm-sparc64/posix_types.h +++ b/include/asm-sparc64/posix_types.h @@ -7,7 +7,11 @@ * assume GCC is being used. */ +#if __GNUC_MINOR__ > 7 +typedef unsigned long int __kernel_size_t; +#else typedef unsigned long long __kernel_size_t; +#endif typedef long long __kernel_ssize_t; typedef long __kernel_ptrdiff_t; diff --git a/include/asm-sparc64/processor.h b/include/asm-sparc64/processor.h index fd1a5fc9a..ab4348216 100644 --- a/include/asm-sparc64/processor.h +++ b/include/asm-sparc64/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.42 1998/01/28 10:00:04 ecd Exp $ +/* $Id: processor.h,v 1.49 1998/07/31 10:42:40 jj Exp $ * include/asm-sparc64/processor.h * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -31,22 +31,9 @@ #define TASK_SIZE 0xfffffffc00000000 #endif -#define COPY_TASK_STRUCT(dst, src) \ -do { \ - if (src->tss.w_saved) \ - *dst = *src; \ - else { \ - memcpy (dst, src, ((const unsigned long)(&((struct task_struct *)0)->tss.reg_window))); \ - memcpy ((char *)dst + ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address)), \ - (char *)src + ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address)), \ - sizeof(struct task_struct) - \ - ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address))); \ - } \ -} while (0) - #ifndef __ASSEMBLY__ -#define NSWINS 8 +#define NSWINS 7 typedef struct { unsigned long seg; @@ -55,14 +42,14 @@ typedef struct { /* The Sparc processor specific thread struct. */ struct thread_struct { /*DC1*/ unsigned long ksp __attribute__ ((aligned(16))); - unsigned int kpc; unsigned short wstate; unsigned short cwp; - -/*DC2*/ unsigned short flags; + unsigned short flags; unsigned short ctx; - unsigned short w_saved; + +/*DC2*/ unsigned short w_saved; unsigned short new_signal; + unsigned int ___pad; mm_segment_t current_ds; /*DC3*/ struct pt_regs *kregs; @@ -73,35 +60,39 @@ struct thread_struct { unsigned long sig_address __attribute__ ((aligned (8))); unsigned long sig_desc; - struct sigstack sstk_info; + + unsigned char fpdepth; + unsigned char fpsaved[7]; + unsigned char gsr[7]; + unsigned long xfsr[7]; }; #endif /* !(__ASSEMBLY__) */ -#define SPARC_FLAG_USEDFPUL 0x01 /* Used f0-f31 */ -#define SPARC_FLAG_USEDFPUU 0x02 /* Used f32-f62 */ -#define SPARC_FLAG_USEDFPU 0x04 /* If ever FEF bit was set while TSTATE_PEF */ -#define SPARC_FLAG_KTHREAD 0x10 /* task is a kernel thread */ -#define SPARC_FLAG_UNALIGNED 0x20 /* is allowed to do unaligned accesses */ -#define SPARC_FLAG_NEWSIGNALS 0x40 /* task wants new-style signals */ -#define SPARC_FLAG_32BIT 0x80 /* task is older 32-bit binary */ +#define SPARC_FLAG_KTHREAD 0x010 /* task is a kernel thread */ +#define SPARC_FLAG_UNALIGNED 0x020 /* is allowed to do unaligned accesses */ +#define SPARC_FLAG_NEWSIGNALS 0x040 /* task wants new-style signals */ +#define SPARC_FLAG_32BIT 0x080 /* task is older 32-bit binary */ +#define SPARC_FLAG_NEWCHILD 0x100 /* task is just-spawned child process */ #define INIT_MMAP { &init_mm, 0xfffff80000000000, 0xfffff80001000000, \ PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ -/* ksp, kpc, wstate, cwp */ \ - 0, 0, 0, 0, \ -/* flags, ctx, w_saved, new_signal, current_ds, */ \ - SPARC_FLAG_KTHREAD, 0, 0, 0, KERNEL_DS, \ +/* ksp, wstate, cwp, flags, ctx, */ \ + 0, 0, 0, SPARC_FLAG_KTHREAD, 0, \ +/* w_saved, new_signal, padding, current_ds, */ \ + 0, 0, 0, KERNEL_DS, \ /* kregs, utraps, */ \ 0, 0, \ /* reg_window */ \ { { { 0, }, { 0, } }, }, \ /* rwbuf_stkptrs */ \ - { 0, 0, 0, 0, 0, 0, 0, 0, }, \ -/* sig_address, sig_desc, sstk_info */ \ - 0, 0, { 0, 0, }, \ + { 0, 0, 0, 0, 0, 0, 0, }, \ +/* sig_address, sig_desc */ \ + 0, 0, \ +/* fpdepth, fpsaved, gsr, xfsr */ \ + 0, { 0 }, { 0 }, { 0 }, \ } #ifndef __ASSEMBLY__ @@ -109,7 +100,10 @@ struct thread_struct { /* Return saved PC of a blocked thread. */ extern __inline__ unsigned long thread_saved_pc(struct thread_struct *t) { - return t->kpc; + unsigned long *sp = (unsigned long *)(t->ksp + STACK_BIAS); + unsigned long *fp = (unsigned long *)(sp[14] + STACK_BIAS); + + return fp[15]; } /* On Uniprocessor, even in RMO processes see TSO semantics */ @@ -160,8 +154,6 @@ do { \ #define start_thread32(regs, pc, sp) \ do { \ - register unsigned int zero asm("g1"); \ -\ pc &= 0x00000000ffffffffUL; \ sp &= 0x00000000ffffffffUL; \ \ @@ -178,8 +170,8 @@ do { \ (*(current->tss.utraps))--; \ current->tss.utraps = NULL; \ } \ - zero = 0; \ __asm__ __volatile__( \ + "stxa %3, [%4] %5\n\t" \ "stx %%g0, [%0 + %2 + 0x00]\n\t" \ "stx %%g0, [%0 + %2 + 0x08]\n\t" \ "stx %%g0, [%0 + %2 + 0x10]\n\t" \ @@ -200,12 +192,15 @@ do { \ : \ : "r" (regs), "r" (sp - REGWIN32_SZ), \ "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])), \ - "r" (zero)); \ + "r" (current->mm->pgd[0]), "r" (TSB_REG), "i" (ASI_DMMU)); \ } while(0) /* Free all resources held by a thread. */ #define release_thread(tsk) do { } while(0) +#define copy_segments(nr, tsk, mm) do { } while (0) +#define release_segments(mm) do { } while (0) + #ifdef __KERNEL__ /* Allocation and freeing of task_struct and kernel stack. */ #define alloc_task_struct() ((struct task_struct *)__get_free_pages(GFP_KERNEL, 1)) diff --git a/include/asm-sparc64/sbus.h b/include/asm-sparc64/sbus.h index 95aa09ede..ea2f85132 100644 --- a/include/asm-sparc64/sbus.h +++ b/include/asm-sparc64/sbus.h @@ -1,4 +1,4 @@ -/* $Id: sbus.h,v 1.6 1998/03/09 14:05:03 jj Exp $ +/* $Id: sbus.h,v 1.7 1998/05/22 14:33:40 jj Exp $ * sbus.h: Defines for the Sun SBus. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -54,7 +54,7 @@ struct linux_sbus_device { struct linux_prom_registers reg_addrs[PROMREG_MAX]; int num_registers, ranges_applied; - struct linux_prom_irqs irqs[PROMINTR_MAX]; + unsigned int irqs[4]; int num_irqs; unsigned long sbus_addr; /* Absolute base address for device. */ diff --git a/include/asm-sparc64/siginfo.h b/include/asm-sparc64/siginfo.h index cd0611f89..ff2534c66 100644 --- a/include/asm-sparc64/siginfo.h +++ b/include/asm-sparc64/siginfo.h @@ -51,6 +51,7 @@ typedef struct siginfo { /* SIGCHLD */ struct { pid_t _pid; /* which child */ + uid_t _uid; /* sender's uid */ int _status; /* exit code */ clock_t _utime; clock_t _stime; diff --git a/include/asm-sparc64/signal.h b/include/asm-sparc64/signal.h index 42382c42c..ba179564b 100644 --- a/include/asm-sparc64/signal.h +++ b/include/asm-sparc64/signal.h @@ -1,4 +1,4 @@ -/* $Id: signal.h,v 1.4 1997/12/11 15:16:06 jj Exp $ */ +/* $Id: signal.h,v 1.8 1998/07/29 16:32:39 jj Exp $ */ #ifndef _ASMSPARC64_SIGNAL_H #define _ASMSPARC64_SIGNAL_H @@ -75,6 +75,7 @@ #define SIGPROF 27 #define SIGWINCH 28 #define SIGLOST 29 +#define SIGPWR SIGLOST #define SIGUSR1 30 #define SIGUSR2 31 @@ -148,6 +149,7 @@ struct sigstack { */ #define SA_NOCLDSTOP SV_IGNCHILD #define SA_STACK SV_SSTACK +#define SA_ONSTACK SV_SSTACK #define SA_RESTART SV_INTR #define SA_ONESHOT SV_RESET #define SA_INTERRUPT 0x10 @@ -161,6 +163,15 @@ struct sigstack { #define SIG_UNBLOCK 0x02 /* for unblocking signals */ #define SIG_SETMASK 0x04 /* for setting the signal mask */ +/* + * sigaltstack controls + */ +#define SS_ONSTACK 1 +#define SS_DISABLE 2 + +#define MINSIGSTKSZ 4096 +#define SIGSTKSZ 16384 + #ifdef __KERNEL__ /* * These values of sa_flags are used only by the kernel as part of the @@ -233,6 +244,12 @@ typedef struct sigaltstack { __kernel_size_t ss_size; } stack_t; +typedef struct sigaltstack32 { + u32 ss_sp; + int ss_flags; + __kernel_size_t32 ss_size; +} stack_t32; + #endif /* !(__ASSEMBLY__) */ #endif /* !(_ASMSPARC64_SIGNAL_H) */ diff --git a/include/asm-sparc64/smp.h b/include/asm-sparc64/smp.h index 53121ff1c..1a07cd850 100644 --- a/include/asm-sparc64/smp.h +++ b/include/asm-sparc64/smp.h @@ -36,28 +36,18 @@ struct cpuinfo_sparc { unsigned long irq_count; unsigned int multiplier; unsigned int counter; - unsigned long last_tlbversion_seen; unsigned long pgcache_size; + unsigned long pgdcache_size; /* Dcache line 2 */ unsigned long *pgd_cache; - unsigned long *pmd_cache; unsigned long *pte_cache; unsigned long udelay_val; + unsigned long dummy; }; extern struct cpuinfo_sparc cpu_data[NR_CPUS]; -struct klock_info { - unsigned char kernel_flag; - unsigned char akp; -}; - -extern struct klock_info klock_info; - -#define KLOCK_HELD 0xff -#define KLOCK_CLEAR 0x00 - /* * Private routines/data */ @@ -95,18 +85,15 @@ extern __inline__ int hard_smp_processor_id(void) extern void smp_message_pass(int target, int msg, unsigned long data, int wait); +/* As idle task checks need_resched in a tight loop, it is not necessary to + wake it up. -jj */ +#define smp_send_reschedule(cpu) do {} while (0) + #endif /* !(__ASSEMBLY__) */ #define PROC_CHANGE_PENALTY 20 #else /* !(__SMP__) */ -#ifndef __ASSEMBLY__ -extern __inline__ int cpu_logical_map(int cpu) -{ - return cpu; -} -#endif -#endif /* !(__SMP__) */ #define NO_PROC_ID 0xFF diff --git a/include/asm-sparc64/smp_lock.h b/include/asm-sparc64/smp_lock.h deleted file mode 100644 index a01d9ec35..000000000 --- a/include/asm-sparc64/smp_lock.h +++ /dev/null @@ -1,87 +0,0 @@ -/* smp_lock.h: Locking and unlocking the kernel on the 64-bit Sparc. - * - * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) - */ - -#ifndef __SPARC64_SMPLOCK_H -#define __SPARC64_SMPLOCK_H - -#include <asm/smp.h> -#include <asm/bitops.h> -#include <asm/pgtable.h> - -#ifndef __SMP__ - -#define lock_kernel() do { } while(0) -#define unlock_kernel() do { } while(0) -#define release_kernel_lock(task, cpu, depth) ((depth) = 1) -#define reacquire_kernel_lock(task, cpu, depth) do { } while(0) - -#else - -#include <asm/hardirq.h> - -/* Release global kernel lock and global interrupt lock */ -#define release_kernel_lock(task, cpu, depth) \ -do { \ - if((depth = (task)->lock_depth) != 0) { \ - __cli(); \ - (task)->lock_depth = 0; \ - klock_info.akp = NO_PROC_ID; \ - membar("#LoadStore | #StoreStore"); \ - klock_info.kernel_flag = 0; \ - } \ - release_irqlock(cpu); \ - __sti(); \ -} while(0) - -/* Do not fuck with this without consulting arch/sparc64/lib/locks.S first! */ -#define reacquire_kernel_lock(task, cpu, depth) \ -do { \ - if(depth) { \ - register struct klock_info *klip asm("g1"); \ - klip = &klock_info; \ - __asm__ __volatile__("mov %%o7, %%g5\n\t" \ - "call ___lock_reacquire_kernel\n\t" \ - " mov %1, %%g2" \ - : /* No outputs. */ \ - : "r" (klip), "r" (depth) \ - : "g2", "g3", "g5", "memory", "cc"); \ - } \ -} while(0) - -/* The following acquire and release the master kernel global lock, - * the idea is that the usage of this mechanmism becomes less and less - * as time goes on, to the point where they are no longer needed at all - * and can thus disappear. - */ - -/* Do not fuck with this without consulting arch/sparc64/lib/locks.S first! */ -extern __inline__ void lock_kernel(void) -{ - register struct klock_info *klip asm("g1"); - klip = &klock_info; - __asm__ __volatile__(" - mov %%o7, %%g5 - call ___lock_kernel - lduw [%%g6 + %0], %%g2 -" : : "i" (AOFF_task_lock_depth), "r" (klip) - : "g2", "g3", "g5", "memory", "cc"); -} - -/* Release kernel global lock. */ -extern __inline__ void unlock_kernel(void) -{ - register struct klock_info *klip asm("g1"); - klip = &klock_info; - __asm__ __volatile__(" - mov %%o7, %%g5 - call ___unlock_kernel - lduw [%%g6 + %0], %%g2 -" : : "i" (AOFF_task_lock_depth), "r" (klip) - : "g2", "g3", "g5", "memory", "cc"); -} - -#endif /* (__SMP__) */ - -#endif /* !(__SPARC64_SMPLOCK_H) */ diff --git a/include/asm-sparc64/smplock.h b/include/asm-sparc64/smplock.h new file mode 100644 index 000000000..e62326a10 --- /dev/null +++ b/include/asm-sparc64/smplock.h @@ -0,0 +1,49 @@ +/* + * <asm/smplock.h> + * + * Default SMP lock implementation + */ +#include <linux/interrupt.h> +#include <asm/spinlock.h> + +extern spinlock_t kernel_flag; + +/* + * Release global kernel lock and global interrupt lock + */ +#define release_kernel_lock(task, cpu) \ +do { \ + if (task->lock_depth >= 0) \ + spin_unlock(&kernel_flag); \ + release_irqlock(cpu); \ + __sti(); \ +} while (0) + +/* + * Re-acquire the kernel lock + */ +#define reacquire_kernel_lock(task) \ +do { \ + if (task->lock_depth >= 0) \ + spin_lock(&kernel_flag); \ +} while (0) + + +/* + * Getting the big kernel lock. + * + * This cannot happen asynchronously, + * so we only need to worry about other + * CPU's. + */ +extern __inline__ void lock_kernel(void) +{ + if (!++current->lock_depth) + spin_lock(&kernel_flag); +} + +extern __inline__ void unlock_kernel(void) +{ + if (--current->lock_depth < 0) + spin_unlock(&kernel_flag); +} diff --git a/include/asm-sparc64/socket.h b/include/asm-sparc64/socket.h index 3c110baeb..0f25b82c1 100644 --- a/include/asm-sparc64/socket.h +++ b/include/asm-sparc64/socket.h @@ -1,4 +1,4 @@ -/* $Id: socket.h,v 1.4 1997/10/19 00:19:23 davem Exp $ */ +/* $Id: socket.h,v 1.5 1998/07/22 22:06:49 davem Exp $ */ #ifndef _ASM_SOCKET_H #define _ASM_SOCKET_H @@ -37,6 +37,9 @@ #define SO_BINDTODEVICE 0x000d +#define SO_ATTACH_FILTER 0x001a +#define SO_DETACH_FILTER 0x001b + /* Security levels - as per NRL IPv6 - don't actually do anything */ #define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 diff --git a/include/asm-sparc64/softirq.h b/include/asm-sparc64/softirq.h index 1357489b4..0e1a6b589 100644 --- a/include/asm-sparc64/softirq.h +++ b/include/asm-sparc64/softirq.h @@ -23,6 +23,7 @@ extern int __sparc64_bh_counter; #define softirq_trylock(cpu) (__sparc64_bh_counter ? 0 : (__sparc64_bh_counter=1)) #define softirq_endlock(cpu) (__sparc64_bh_counter = 0) #define clear_active_bhs(x) (bh_active &= ~(x)) +#define synchronize_bh() do { } while (0) /* XXX implement SMP version -DaveM */ #define init_bh(nr, routine) \ do { int ent = nr; \ diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h index 65880b033..4e2dd6b8c 100644 --- a/include/asm-sparc64/spinlock.h +++ b/include/asm-sparc64/spinlock.h @@ -10,8 +10,13 @@ #ifndef __SMP__ -typedef struct { } spinlock_t; -#define SPIN_LOCK_UNLOCKED { } +#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8) + typedef struct { } spinlock_t; + #define SPIN_LOCK_UNLOCKED { } +#else + typedef unsigned char spinlock_t; + #define SPIN_LOCK_UNLOCKED 0 +#endif #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) do { } while(0) diff --git a/include/asm-sparc64/spitfire.h b/include/asm-sparc64/spitfire.h index 76232c227..04667b185 100644 --- a/include/asm-sparc64/spitfire.h +++ b/include/asm-sparc64/spitfire.h @@ -1,4 +1,4 @@ -/* $Id: spitfire.h,v 1.8 1997/05/18 04:16:56 davem Exp $ +/* $Id: spitfire.h,v 1.9 1998/04/28 08:23:33 davem Exp $ * spitfire.h: SpitFire/BlackBird/Cheetah inline MMU operations. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -85,7 +85,7 @@ extern __inline__ void spitfire_set_primary_context(unsigned long ctx) { __asm__ __volatile__("stxa %0, [%1] %2" : /* No outputs */ - : "r" (ctx & 0x1fff), + : "r" (ctx & 0x3ff), "r" (PRIMARY_CONTEXT), "i" (ASI_DMMU)); membar("#Sync"); } @@ -104,7 +104,7 @@ extern __inline__ void spitfire_set_secondary_context(unsigned long ctx) { __asm__ __volatile__("stxa %0, [%1] %2" : /* No outputs */ - : "r" (ctx & 0x1fff), + : "r" (ctx & 0x3ff), "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU)); membar("#Sync"); } diff --git a/include/asm-sparc64/stat.h b/include/asm-sparc64/stat.h index 05853d3b5..f726bd5a0 100644 --- a/include/asm-sparc64/stat.h +++ b/include/asm-sparc64/stat.h @@ -1,4 +1,4 @@ -/* $Id: stat.h,v 1.4 1998/02/06 12:52:14 jj Exp $ */ +/* $Id: stat.h,v 1.5 1998/07/26 05:24:41 davem Exp $ */ #ifndef _SPARC64_STAT_H #define _SPARC64_STAT_H @@ -42,54 +42,4 @@ struct stat { unsigned long __unused4[2]; }; -typedef __u64 __new_dev_t; - -struct stat64 { - __new_dev_t st_dev; - __u64 st_ino; - __u32 st_mode; - __u32 st_nlink; - __s32 st_uid; - __s32 st_gid; - __new_dev_t st_rdev; - __s64 st_size; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - int st_blksize; - long st_blocks; - char st_fstype[16]; -}; - -struct stat64_32 { - __new_dev_t st_dev; - __u64 st_ino; - __u32 st_mode; - __u32 st_nlink; - __s32 st_uid; - __s32 st_gid; - __new_dev_t st_rdev; - __s64 st_size; - __u64 st_blocks; - __s32 st_atime; - __u32 __unused1; - __s32 st_mtime; - __u32 __unused2; - __s32 st_ctime; - __u32 __unused3; - __u32 st_blksize; - __u32 __unused4; -}; - -#define __XSTAT_VER_1 1 -#define __XSTAT_VER_2 2 -#define __XSTAT_VER_MASK 0xff - -#define __XSTAT_VER_XSTAT 0x000 -#define __XSTAT_VER_LXSTAT 0x100 -#define __XSTAT_VER_FXSTAT 0x200 -#define __XSTAT_VER_TYPEMASK 0xff00 - -#define __XMKNOD_VER_1 1 - #endif diff --git a/include/asm-sparc64/string.h b/include/asm-sparc64/string.h index 545e1285d..b5293acd9 100644 --- a/include/asm-sparc64/string.h +++ b/include/asm-sparc64/string.h @@ -1,4 +1,4 @@ -/* $Id: string.h,v 1.8 1997/11/19 07:57:50 jj Exp $ +/* $Id: string.h,v 1.11 1998/06/12 14:54:35 jj Exp $ * string.h: External definitions for optimized assembly string * routines for the Linux Kernel. * @@ -67,8 +67,8 @@ extern inline void *__nonconstant_memcpy(void *to, const void *from, __kernel_si extern inline void *__constant_c_and_count_memset(void *s, char c, __kernel_size_t count) { - extern void *__bzero_1page(void *); extern __kernel_size_t __bzero(void *, __kernel_size_t); + extern void *__bzero_1page(void *); if(!c) { if (count == 8192) diff --git a/include/asm-sparc64/svr4.h b/include/asm-sparc64/svr4.h index 2e624a94b..fbf94c2e2 100644 --- a/include/asm-sparc64/svr4.h +++ b/include/asm-sparc64/svr4.h @@ -81,7 +81,7 @@ typedef struct { /* flags for stack_t.flags */ enum svr4_stack_flags { - SS_ONSTACK, + SVR4_SS_ONSTACK, SVR4_SS_DISABLE, }; diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h index 5bec88028..55072c93b 100644 --- a/include/asm-sparc64/system.h +++ b/include/asm-sparc64/system.h @@ -1,10 +1,11 @@ -/* $Id: system.h,v 1.38 1998/01/30 11:00:11 jj Exp $ */ +/* $Id: system.h,v 1.42 1998/07/29 01:32:51 davem Exp $ */ #ifndef __SPARC64_SYSTEM_H #define __SPARC64_SYSTEM_H #include <asm/ptrace.h> #include <asm/processor.h> #include <asm/asm_offsets.h> +#include <asm/visasm.h> #ifndef __ASSEMBLY__ /* @@ -28,8 +29,6 @@ enum sparc_cpu { #define ARCH_SUN4 0 extern unsigned long empty_bad_page; -extern unsigned long empty_bad_pmd_table; -extern unsigned long empty_bad_pte_table; extern unsigned long empty_zero_page; #endif @@ -43,10 +42,10 @@ extern unsigned long empty_zero_page; __asm__ __volatile__("wrpr 0, %%pil" : : : "memory") #define getipl() \ -({ int retval; __asm__ __volatile__("rdpr %%pil, %0" : "=r" (retval)); retval; }) +({ unsigned long retval; __asm__ __volatile__("rdpr %%pil, %0" : "=r" (retval)); retval; }) #define swap_pil(__new_pil) \ -({ int retval; \ +({ unsigned long retval; \ __asm__ __volatile__("rdpr %%pil, %0\n\t" \ "wrpr %1, %%pil" \ : "=r" (retval) \ @@ -56,7 +55,7 @@ extern unsigned long empty_zero_page; }) #define read_pil_and_cli() \ -({ int retval; \ +({ unsigned long retval; \ __asm__ __volatile__("rdpr %%pil, %0\n\t" \ "wrpr 15, %%pil" \ : "=r" (retval) \ @@ -126,12 +125,10 @@ extern __inline__ void flushw_user(void) #define flush_user_windows flushw_user /* See what happens when you design the chip correctly? - * NOTE NOTE NOTE this is extremely non-trivial what I - * am doing here. GCC needs only one register to stuff - * things into ('next' in particular) So I "claim" that - * I do not clobber it, when in fact I do. Please, - * when modifying this code inspect output of sched.s very - * carefully to make sure things still work. -DaveM + * + * XXX What we are doing here assumes a lot about gcc reload + * XXX internals, it heavily risks compiler aborts due to + * XXX forbidden registers being spilled. Rewrite me... -DaveM * * SMP NOTE: At first glance it looks like there is a tiny * race window here at the end. The possible problem @@ -144,48 +141,48 @@ extern __inline__ void flushw_user(void) * not reference %g6. */ #define switch_to(prev, next) \ -do { __label__ switch_continue; \ - register unsigned long task_pc asm("o7"); \ - (prev)->tss.kregs->tstate &= ~TSTATE_PEF; \ - task_pc = ((unsigned long) &&switch_continue) - 0x8; \ +do { save_and_clear_fpu(); \ (next)->mm->cpu_vm_mask |= (1UL << smp_processor_id()); \ __asm__ __volatile__( \ "rdpr %%pstate, %%g2\n\t" \ "wrpr %%g2, 0x3, %%pstate\n\t" \ "flushw\n\t" \ + "stx %%l0, [%%sp + 2047 + 0x60]\n\t" \ + "stx %%l1, [%%sp + 2047 + 0x68]\n\t" \ "stx %%i6, [%%sp + 2047 + 0x70]\n\t" \ "stx %%i7, [%%sp + 2047 + 0x78]\n\t" \ "rdpr %%wstate, %%o5\n\t" \ - "stx %%o6, [%%g6 + %3]\n\t" \ - "stw %%o7, [%%g6 + %4]\n\t" \ - "sth %%o5, [%%g6 + %2]\n\t" \ + "stx %%o6, [%%g6 + %2]\n\t" \ + "sth %%o5, [%%g6 + %1]\n\t" \ "rdpr %%cwp, %%o5\n\t" \ - "sth %%o5, [%%g6 + %5]\n\t" \ - "membar #Sync\n\t" \ + "sth %%o5, [%%g6 + %4]\n\t" \ "mov %0, %%g6\n\t" \ - "lduh [%0 + %5], %%g1\n\t" \ + "lduh [%0 + %4], %%g1\n\t" \ "wrpr %%g1, %%cwp\n\t" \ - "ldx [%%g6 + %3], %%o6\n\t" \ - "lduw [%%g6 + %4], %%o7\n\t" \ - "lduh [%%g6 + %2], %%o5\n\t" \ - "mov %%g6, %0\n\t" \ + "ldx [%%g6 + %2], %%o6\n\t" \ + "lduh [%%g6 + %1], %%o5\n\t" \ + "lduh [%%g6 + %3], %%o7\n\t" \ + "mov %%g6, %%l2\n\t" \ "wrpr %%o5, 0x0, %%wstate\n\t" \ + "ldx [%%sp + 2047 + 0x60], %%l0\n\t" \ + "ldx [%%sp + 2047 + 0x68], %%l1\n\t" \ "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ "wrpr %%g0, 0x96, %%pstate\n\t" \ - "jmpl %%o7 + 0x8, %%g0\n\t" \ - " mov %0, %%g6\n\t" \ - : /* No outputs */ \ - : "r" (next), "r" (task_pc), \ + "andcc %%o7, 0x100, %%g0\n\t" \ + "bne,pn %%icc, ret_from_syscall\n\t" \ + " mov %%l2, %%g6\n\t" \ + : \ + : "r" (next), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.wstate)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.ksp)), \ - "i" ((const unsigned long)(&((struct task_struct *)0)->tss.kpc)), \ + "i" ((const unsigned long)(&((struct task_struct *)0)->tss.flags)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.cwp)) \ : "cc", "g1", "g2", "g3", "g5", "g7", \ - "l1", "l2", "l3", "l4", "l5", "l6", "l7", \ + "l2", "l3", "l4", "l5", "l6", "l7", \ "i0", "i1", "i2", "i3", "i4", "i5", \ - "o0", "o1", "o2", "o3", "o4", "o5"); \ -switch_continue: } while(0) + "o0", "o1", "o2", "o3", "o4", "o5", "o7"); \ +} while(0) extern __inline__ unsigned long xchg32(__volatile__ unsigned int *m, unsigned int val) { diff --git a/include/asm-sparc64/termios.h b/include/asm-sparc64/termios.h index 622158d24..8a972984b 100644 --- a/include/asm-sparc64/termios.h +++ b/include/asm-sparc64/termios.h @@ -1,4 +1,4 @@ -/* $Id: termios.h,v 1.4 1997/03/14 21:05:26 jj Exp $ */ +/* $Id: termios.h,v 1.5 1998/04/12 06:27:22 davem Exp $ */ #ifndef _SPARC64_TERMIOS_H #define _SPARC64_TERMIOS_H diff --git a/include/asm-sparc64/timex.h b/include/asm-sparc64/timex.h new file mode 100644 index 000000000..80210c259 --- /dev/null +++ b/include/asm-sparc64/timex.h @@ -0,0 +1,15 @@ +/* + * linux/include/asm-sparc64/timex.h + * + * sparc64 architecture timex specifications + */ +#ifndef _ASMsparc64_TIMEX_H +#define _ASMsparc64_TIMEX_H + +#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ +#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */ +#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \ + (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \ + << (SHIFT_SCALE-SHIFT_HZ)) / HZ) + +#endif diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index 82e360042..9d2434618 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h @@ -1,4 +1,4 @@ -/* $Id: ttable.h,v 1.6 1998/03/15 17:23:54 ecd Exp $ */ +/* $Id: ttable.h,v 1.8 1998/06/12 14:54:32 jj Exp $ */ #ifndef _SPARC64_TTABLE_H #define _SPARC64_TTABLE_H @@ -66,7 +66,7 @@ #define SYSCALL_TRAP(routine, systbl) \ sethi %hi(109f), %g7; \ - ba,pt %xcc, etrap; \ + ba,pt %xcc, scetrap; \ 109: or %g7, %lo(109b), %g7; \ call routine; \ sethi %hi(systbl), %l7; \ @@ -133,6 +133,16 @@ call routine; \ add %sp, STACK_BIAS + REGWIN_SZ, %o1; \ ba,a,pt %xcc, rtrap_clr_l6; + +#define TICK_SMP_IRQ \ + rdpr %pil, %g2; \ + wrpr %g0, 15, %pil; \ + sethi %hi(109f), %g7; \ + b,pt %xcc, etrap_irq; \ +109: or %g7, %lo(109b), %g7; \ + call smp_percpu_timer_interrupt; \ + add %sp, STACK_BIAS + REGWIN_SZ, %o0; \ + ba,a,pt %xcc, rtrap_clr_l6; #define TRAP_IVEC TRAP_NOSAVE(do_ivec) diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h index e2d59cf23..ec80bb5dc 100644 --- a/include/asm-sparc64/uaccess.h +++ b/include/asm-sparc64/uaccess.h @@ -1,4 +1,4 @@ -/* $Id: uaccess.h,v 1.24 1997/12/15 15:05:14 jj Exp $ */ +/* $Id: uaccess.h,v 1.25 1998/04/28 08:23:34 davem Exp $ */ #ifndef _ASM_UACCESS_H #define _ASM_UACCESS_H @@ -52,7 +52,7 @@ do { \ flushw_user (); \ current->tss.ctx = 0; \ } else { \ - current->tss.ctx = (current->mm->context & 0x1fff); \ + current->tss.ctx = (current->mm->context & 0x3ff); \ } \ spitfire_set_secondary_context(current->tss.ctx); \ __asm__ __volatile__("flush %g6"); \ diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h index ca749ffd9..960d3a01b 100644 --- a/include/asm-sparc64/unistd.h +++ b/include/asm-sparc64/unistd.h @@ -1,4 +1,4 @@ -/* $Id: unistd.h,v 1.17 1998/03/29 12:57:54 ecd Exp $ */ +/* $Id: unistd.h,v 1.20 1998/07/28 13:08:40 jj Exp $ */ #ifndef _SPARC64_UNISTD_H #define _SPARC64_UNISTD_H @@ -29,22 +29,22 @@ #define __NR_unlink 10 /* Common */ #define __NR_execv 11 /* SunOS Specific */ #define __NR_chdir 12 /* Common */ -#define __NR_xstat 13 /* Linux Specific */ +/* #define __NR_ni_syscall 13 ENOSYS under SunOS */ #define __NR_mknod 14 /* Common */ #define __NR_chmod 15 /* Common */ #define __NR_chown 16 /* Common */ #define __NR_brk 17 /* Common */ -#define __NR_xmknod 18 /* Linux Specific */ +/* #define __NR_ni_syscall 18 ENOSYS under SunOS */ #define __NR_lseek 19 /* Common */ #define __NR_getpid 20 /* Common */ -/* #define __NR_ni_syscall 21 ENOSYS under SunOS */ -/* #define __NR_ni_syscall 22 ENOSYS under SunOS */ +#define __NR_capget 21 /* Linux Specific */ +#define __NR_capset 22 /* Linux Specific */ #define __NR_setuid 23 /* Implemented via setreuid in SunOS */ #define __NR_getuid 24 /* Common */ /* #define __NR_time alias 25 ENOSYS under SunOS */ #define __NR_ptrace 26 /* Common */ #define __NR_alarm 27 /* Implemented via setitimer in SunOS */ -/* #define __NR_ni_syscall 28 ENOSYS under SunOS */ +#define __NR_sigaltstack 28 /* Common */ #define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */ #define __NR_utime 30 /* Implemented via utimes() under SunOS */ #define __NR_stty 31 /* Implemented via ioctl() under SunOS */ @@ -55,7 +55,7 @@ #define __NR_sync 36 /* Common */ #define __NR_kill 37 /* Common */ #define __NR_stat 38 /* Common */ -/* #define __NR_ni_syscall 39 ENOSYS under SunOS */ +#define __NR_sendfile 39 /* Linux Specific */ #define __NR_lstat 40 /* Common */ #define __NR_dup 41 /* Common */ #define __NR_pipe 42 /* Common */ @@ -135,7 +135,7 @@ #define __NR_gettimeofday 116 /* Common */ #define __NR_getrusage 117 /* Common */ #define __NR_getsockopt 118 /* Common */ -/* #define __NR_ni_syscall 119 ENOSYS under SunOS */ +#define __NR_getcwd 119 /* Linux Specific */ #define __NR_readv 120 /* Common */ #define __NR_writev 121 /* Common */ #define __NR_settimeofday 122 /* Common */ diff --git a/include/asm-sparc64/vaddrs.h b/include/asm-sparc64/vaddrs.h index b88085668..04a265680 100644 --- a/include/asm-sparc64/vaddrs.h +++ b/include/asm-sparc64/vaddrs.h @@ -1,4 +1,4 @@ -/* $Id: vaddrs.h,v 1.8 1997/06/27 14:55:13 jj Exp $ */ +/* $Id: vaddrs.h,v 1.10 1998/05/14 13:36:01 jj Exp $ */ #ifndef _SPARC64_VADDRS_H #define _SPARC64_VADDRS_H @@ -7,19 +7,13 @@ * For instance the timer register virtual address * is defined here. * - * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1995,1998 David S. Miller (davem@caip.rutgers.edu) */ -/* I can see only one reason why we should have statically defined - * mappings for devices and is the speedup improvements of not loading - * a pointer and then the value in the assembly code - */ -#define IOBASE_VADDR 0x0000006000000000ULL /* Base for mapping pages */ -#define IOBASE_LEN 0x0000001000000000ULL /* Length of the IO area */ -#define IOBASE_END 0x0000007000000000ULL -#define DVMA_VADDR 0x0000007000000000ULL /* Base area of the DVMA on suns */ -#define DVMA_LEN 0x0000001000000000ULL /* Size of the DVMA address space */ -#define DVMA_END 0x0000008000000000ULL +/* Everything here must be in the first kernel PGD. */ +#define DVMA_VADDR 0x0000000100000000ULL /* Base area of the DVMA on suns */ +#define DVMA_LEN 0x0000000040000000ULL /* Size of the DVMA address space */ +#define DVMA_END 0x0000000140000000ULL #define MODULES_VADDR 0x0000000001000000ULL /* Where to map modules */ #define MODULES_LEN 0x000000007f000000ULL #define MODULES_END 0x0000000080000000ULL diff --git a/include/asm-sparc64/vga.h b/include/asm-sparc64/vga.h new file mode 100644 index 000000000..14ae757a4 --- /dev/null +++ b/include/asm-sparc64/vga.h @@ -0,0 +1,30 @@ +/* + * Access to VGA videoram + * + * (c) 1998 Martin Mares <mj@ucw.cz> + */ + +#ifndef _LINUX_ASM_VGA_H_ +#define _LINUX_ASM_VGA_H_ + +#define VT_BUF_HAVE_RW + +static inline void scr_writew(u16 val, u16 *addr) +{ + if ((long) addr < 0) + *addr = val; + else + writew(val, (unsigned long) addr); +} + +static inline u16 scr_readw(u16 *addr) +{ + if ((long) addr < 0) + return *addr; + else + return readw((unsigned long) addr); +} + +#define VGA_MAP_MEM(x) (x) + +#endif diff --git a/include/asm-sparc64/visasm.h b/include/asm-sparc64/visasm.h new file mode 100644 index 000000000..e1de6a384 --- /dev/null +++ b/include/asm-sparc64/visasm.h @@ -0,0 +1,62 @@ +/* $Id: visasm.h,v 1.2 1998/06/19 12:14:47 jj Exp $ */ +#ifndef _SPARC64_VISASM_H +#define _SPARC64_VISASM_H + +/* visasm.h: FPU saving macros for VIS routines + * + * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz) + */ + +#include <asm/pstate.h> +#include <asm/ptrace.h> + +#define AOFF_task_fpregs ((AOFF_task_sigmask_lock + 285)&~255) + +/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */ + +#define VISEntry \ + rd %fprs, %o5; \ + andcc %o5, (FPRS_FEF|FPRS_DU), %g0; \ + be,pt %icc, 297f; \ + sethi %hi(297f), %g7; \ + ba,pt %xcc, VISenter; \ + or %g7, %lo(297f), %g7; \ +297: wr %g0, FPRS_FEF, %fprs; \ + +#define VISExit \ + wr %g0, 0, %fprs; + +/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc. + * Must preserve %o5 between VISEntryHalf and VISExitHalf */ + +#define VISEntryHalf \ + rd %fprs, %o5; \ + andcc %o5, FPRS_FEF, %g0; \ + be,pt %icc, 297f; \ + sethi %hi(298f), %g7; \ + ba,pt %xcc, VISenterhalf; \ + or %g7, %lo(298f), %g7; \ + clr %o5; \ +297: wr %o5, FPRS_FEF, %fprs; \ +298: + +#define VISExitHalf \ + wr %o5, 0, %fprs; + +#ifndef __ASSEMBLY__ +extern __inline__ void save_and_clear_fpu(void) { + __asm__ __volatile__ (" + rd %%fprs, %%o5 + andcc %%o5, %0, %%g0 + be,pt %%icc, 299f + sethi %%hi(298f), %%g7 + ba VISenter ! Note. This cannot be bp, as it may be too far from VISenter. + or %%g7, %%lo(298f), %%g7 + 298: wr %%g0, 0, %%fprs + 299: + " : : "i" (FPRS_FEF|FPRS_DU) : + "o5", "g1", "g2", "g3", "g7", "cc"); +} +#endif + +#endif /* _SPARC64_ASI_H */ diff --git a/include/asm-sparc64/xstat.h b/include/asm-sparc64/xstat.h deleted file mode 100644 index f73a1b967..000000000 --- a/include/asm-sparc64/xstat.h +++ /dev/null @@ -1,58 +0,0 @@ -/* $Id: xstat.h,v 1.1 1998/02/06 12:52:18 jj Exp $ - * xstat.h: sys_xstat/xmknod architecture dependent stuff. - * - * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) - */ - -extern __inline__ int cp_xstat32(struct inode *inode, struct stat64_32 *s, unsigned long blocks, int blksize) -{ - struct stat64_32 tmp; - - memset (&tmp, 0, sizeof(tmp)); - tmp.st_dev = (((__u64)MAJOR(inode->i_dev)) << 32) | MINOR(inode->i_dev); - tmp.st_ino = inode->i_ino; - tmp.st_mode = inode->i_mode; - tmp.st_nlink = inode->i_nlink; - tmp.st_uid = inode->i_uid; - tmp.st_gid = inode->i_gid; - tmp.st_rdev = (((__u64)MAJOR(inode->i_rdev)) << 32) | MINOR(inode->i_rdev); - tmp.st_size = inode->i_size; - tmp.st_blocks = blocks; - tmp.st_atime = inode->i_atime; - tmp.st_mtime = inode->i_mtime; - tmp.st_ctime = inode->i_ctime; - tmp.st_blksize = blksize; - return copy_to_user(s,&tmp,sizeof(tmp)); -} - -extern __inline__ int cp_xstat(struct inode *inode, struct stat64 *s, unsigned long blocks, int blksize) -{ - struct stat64 tmp; - if (current->tss.flags & SPARC_FLAG_32BIT) - return cp_xstat32(inode, (struct stat64_32 *)s, blocks, blksize); - memset (&tmp, 0, sizeof(tmp)); - tmp.st_dev = (((__u64)MAJOR(inode->i_dev)) << 32) | MINOR(inode->i_dev); - tmp.st_ino = inode->i_ino; - tmp.st_mode = inode->i_mode; - tmp.st_nlink = inode->i_nlink; - tmp.st_uid = inode->i_uid; - tmp.st_gid = inode->i_gid; - tmp.st_rdev = (((__u64)MAJOR(inode->i_rdev)) << 32) | MINOR(inode->i_rdev); - tmp.st_size = inode->i_size; - tmp.st_atim.tv_sec = inode->i_atime; - tmp.st_mtim.tv_sec = inode->i_mtime; - tmp.st_ctim.tv_sec = inode->i_ctime; - tmp.st_blksize = blksize; - tmp.st_blocks = blocks; - /* Should I check if all fs names are < 16? All in the kernel tree are */ - if (inode->i_sb) - strcpy(tmp.st_fstype, inode->i_sb->s_type->name); - return copy_to_user(s,&tmp,sizeof(tmp)); -} - -extern __inline__ int get_user_new_dev_t(kdev_t *kdev, __new_dev_t *udev) { - __new_dev_t ndev; - if (copy_from_user (&ndev, udev, sizeof(__new_dev_t))) return -EFAULT; - *kdev = MKDEV((ndev >> 32), (__u32)ndev); - return 0; -} |