aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2013-09-26 10:37:16 +0300
committerEli Zaretskii2013-09-26 10:37:16 +0300
commitb87c4ff2817e71ca71b028792200b1e069a95e04 (patch)
treebfe00c0655fa02078a9ab2c633ea06d90c4a2064 /src
parentbbc108377873aa6ed7cf21c731770103096eea39 (diff)
parentba355de014b75ed104da4777f909db70d62f2357 (diff)
downloademacs-b87c4ff2817e71ca71b028792200b1e069a95e04.tar.gz
emacs-b87c4ff2817e71ca71b028792200b1e069a95e04.zip
Merge from trunk.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog837
-rw-r--r--src/Makefile.in4
-rw-r--r--src/alloc.c186
-rw-r--r--src/bidi.c4
-rw-r--r--src/blockinput.h7
-rw-r--r--src/buffer.c8
-rw-r--r--src/buffer.h75
-rw-r--r--src/bytecode.c10
-rw-r--r--src/casetab.c4
-rw-r--r--src/category.c2
-rw-r--r--src/category.h5
-rw-r--r--src/ccl.c8
-rw-r--r--src/character.c2
-rw-r--r--src/character.h9
-rw-r--r--src/charset.c4
-rw-r--r--src/charset.h5
-rw-r--r--src/chartab.c4
-rw-r--r--src/composite.c6
-rw-r--r--src/composite.h19
-rw-r--r--src/conf_post.h39
-rw-r--r--src/data.c545
-rw-r--r--src/dired.c2
-rw-r--r--src/dispextern.h111
-rw-r--r--src/dispnew.c161
-rw-r--r--src/disptab.h2
-rw-r--r--src/emacs.c15
-rw-r--r--src/eval.c11
-rw-r--r--src/fileio.c3
-rw-r--r--src/filelock.c16
-rw-r--r--src/fns.c8
-rw-r--r--src/font.c17
-rw-r--r--src/font.h1
-rw-r--r--src/fontset.c15
-rw-r--r--src/frame.c103
-rw-r--r--src/frame.h197
-rw-r--r--src/ftfont.c2
-rw-r--r--src/gfilenotify.c2
-rw-r--r--src/gtkutil.c16
-rw-r--r--src/gtkutil.h4
-rw-r--r--src/image.c45
-rw-r--r--src/indent.c6
-rw-r--r--src/insdel.c3
-rw-r--r--src/intervals.c4
-rw-r--r--src/intervals.h7
-rw-r--r--src/keyboard.c41
-rw-r--r--src/keyboard.h19
-rw-r--r--src/lisp.h451
-rw-r--r--src/lisp.mk1
-rw-r--r--src/lread.c7
-rw-r--r--src/macfont.h144
-rw-r--r--src/macfont.m3858
-rw-r--r--src/macuvs.h9215
-rw-r--r--src/menu.c4
-rw-r--r--src/minibuf.c7
-rw-r--r--src/msdos.c8
-rw-r--r--src/msdos.h2
-rw-r--r--src/nsfns.m99
-rw-r--r--src/nsfont.m49
-rw-r--r--src/nsmenu.m2
-rw-r--r--src/nsterm.h51
-rw-r--r--src/nsterm.m202
-rw-r--r--src/process.c34
-rw-r--r--src/process.h7
-rw-r--r--src/ralloc.c22
-rw-r--r--src/regex.c6
-rw-r--r--src/syntax.c10
-rw-r--r--src/syntax.h55
-rw-r--r--src/sysdep.c2
-rw-r--r--src/systime.h9
-rw-r--r--src/term.c29
-rw-r--r--src/termchar.h4
-rw-r--r--src/termhooks.h15
-rw-r--r--src/terminal.c2
-rw-r--r--src/w32console.c1
-rw-r--r--src/w32fns.c114
-rw-r--r--src/w32font.c2
-rw-r--r--src/w32menu.c8
-rw-r--r--src/w32proc.c2
-rw-r--r--src/w32reg.c8
-rw-r--r--src/w32term.c247
-rw-r--r--src/w32term.h63
-rw-r--r--src/w32xfns.c8
-rw-r--r--src/widget.c2
-rw-r--r--src/window.c47
-rw-r--r--src/window.h30
-rw-r--r--src/xdisp.c410
-rw-r--r--src/xfaces.c45
-rw-r--r--src/xfns.c358
-rw-r--r--src/xfont.c12
-rw-r--r--src/xmenu.c24
-rw-r--r--src/xrdb.c4
-rw-r--r--src/xselect.c26
-rw-r--r--src/xsettings.c17
-rw-r--r--src/xsettings.h5
-rw-r--r--src/xterm.c1277
-rw-r--r--src/xterm.h115
96 files changed, 16977 insertions, 2737 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 3ef8bee2f0b..a6774e30b0c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,840 @@
12013-09-26 Barry O'Reilly <gundaetiapo@gmail.com>
2
3 Signal error when reading an empty byte-code object (Bug#15405)
4 * lread.c (read1): signal error
5 * alloc.c (make_byte_code): eassert header size
6 (sweep_vectors): change an int to size_t
7
82013-09-24 Paul Eggert <eggert@cs.ucla.edu>
9
10 * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums
11 instead of ints, as it's the usual style for offsetof constants. See:
12 http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00478.html
13
14 * data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount.
15 This is ugly, but it should fix the performance problem for older
16 GCC versions in the short run. I'll look into integrating the
17 Gnulib module for popcount, as a better fix.
18 See the thread starting in:
19 http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00474.html
20 (popcount_size_t_generic) [NEED_GENERIC_POPCOUNT]:
21 (popcount_size_t_msc) [USE_MSC_POPCOUNT]:
22 (popcount_size_t_gcc) [USE_GCC_POPCOUNT]:
23 (popcount_size_t): Use it.
24
252013-09-24 Daniel Colascione <dancol@dancol.org>
26
27 * process.c (Fnetwork_interface_info): Fix build break due to
28 vector changes.
29
302013-09-24 Paul Eggert <eggert@cs.ucla.edu>
31
32 * dispnew.c (clear_glyph_row, copy_row_except_pointers):
33 Prefer signed to unsigned integers where either will do.
34 No need for 'const' on locals that do not escape.
35 Omit easserts with unnecessary and unportable assumptions about
36 alignment. Avoid unnecessary casts to char *.
37
382013-09-24 Dmitry Antipov <dmantipov@yandex.ru>
39
40 Use union for the payload of struct Lisp_Vector.
41 This helps to avoid a few glitches dictated by C's aliasing rules.
42 * lisp.h (struct Lisp_Vector): Use union for next and
43 contents member. Adjust comment. Change related users.
44 * alloc.c (next_in_free_list, set_next_in_free_list): Remove.
45 Related users changed.
46 * buffer.c, bytecode.c, ccl.c, character.h, chartab.c, composite.c:
47 * composite.h, disptab.h, fns.c, fontset.c, indent.c, keyboard.c:
48 * lread.c, msdos.c, process.c, w32menu.c, window.c, xdisp.c:
49 * xfaces.c, xfont.c, xmenu.c: Related users changed.
50
512013-09-24 Dmitry Antipov <dmantipov@yandex.ru>
52
53 Optimize glyph row clearing and copying routines.
54 * dispextern.h (struct glyph_row): Change layout of struct
55 glyph_row to help copy_row_except_pointers. Adjust comment.
56 * dispnew.c (null_row): Remove.
57 (clear_glyph_row): Use offsetof and memset to find and clear
58 just the members that need clearing. Adjust comment.
59 (copy_row_except_pointers): Likewise for copying.
60
612013-09-24 Paul Eggert <eggert@cs.ucla.edu>
62
63 Some minor cleanups of recently-added bool vector code.
64 * conf_post.h (assume): Always return void. Use lint version
65 only if GCC and MSC versions don't apply.
66 * conf_post.h (assume):
67 * data.c (USC_MSC_POPCOUNT, count_trailing_zero_bits):
68 Depend on _MSC_VER, not __MSC_VER, for consistency with
69 the rest of Emacs.
70 * data.c (bool_vector_spare_mask, popcount_size_t_generic)
71 (popcount_size_t_msc, popcount_size_t_gcc, popcount_size_t)
72 (bool_vector_binop_driver, count_trailing_zero_bits)
73 (size_t_to_host_endian): Now static, not static inline;
74 the latter isn't needed with modern compilers and doesn't
75 work with older compilers anyway.
76
77 * alloc.c (valgrind_p): Use bool for boolean.
78
792013-09-23 Dmitry Antipov <dmantipov@yandex.ru>
80
81 * xdisp.c (noninteractive_need_newline, message_log_need_newline)
82 (overlay_arrow_seen, message_enable_multibyte, line_number_displayed)
83 (display_last_displayed_message_p, message_buf_print)
84 (message_cleared_p, help_echo_showing_p, hourglass_shown_p):
85 Use bool for boolean.
86 * dispextern.h (cancel_line, init_desired_glyphs):
87 Remove ancient leftover.
88 (help_echo_showing_p, hourglass_shown_p):
89 * lisp.h (noninteractive_need_newline): Adjust declaration.
90
912013-09-23 Dmitry Antipov <dmantipov@yandex.ru>
92
93 * dispnew.c (frame_garbaged, selected_frame, last_nonminibuf_frame):
94 Move to...
95 * frame.c (frame_garbaged, selected_frame, last_nonminibuf_frame):
96 ...this file and convert the latter to static. Adjust comment.
97 (make_initial_frame):
98 * window.c (init_window_once): Adjust user.
99 * frame.h (last_nonminibuf_frame): Remove declaration.
100 * lisp.h (selected_frame): Likewise.
101 * msdos.c (the_only_display_info): Adjust comment.
102
1032013-09-23 Eli Zaretskii <eliz@gnu.org>
104
105 * xdisp.c (mouse_face_from_string_pos): Fix off-by-one error in
106 computing the end column of mouse-highlight that comes from
107 display or overlay strings. (Bug#15437)
108 (note_mouse_highlight): Adapt calculation of last argument to
109 mouse_face_from_string_pos to the above change.
110
111 * conf_post.h (__has_builtin): Define to zero, if undefined, on
112 all platforms, not just for clang.
113
1142013-09-23 Jan Djärv <jan.h.d@swipnet.se>
115
116 * filelock.c (lock_file_1): Rearrange to remove compiler warning
117 about excess arguments to snprintf.
118
119 * conf_post.h(assume): Use __builtin_unreachable for clang.
120
1212013-09-23 Juanma Barranquero <lekktu@gmail.com>
122
123 * w32console.c (initialize_w32_display): Remove unused variable hlinfo.
124 * w32term.c (w32_scroll_bar_handle_click): Remove unused variable f.
125
1262013-09-23 Daniel Colascione <dancol@dancol.org>
127
128 * alloc.c (USE_VALGRIND): New macro; on by default
129 when ENABLE_CHECKING.
130 (mark_maybe_object,mark_maybe_pointer)
131 [USE_VALGRIND]: Mark conservatively-scanned regions valid for
132 valgrind purposes.
133 (valgrind_p) [USE_VALGRIND]: New variable.
134 (init_alloc) [USE_VALGRIND]: Initialize valgrind_p.
135
1362013-09-22 Jan Djärv <jan.h.d@swipnet.se>
137
138 * process.c (wait_reading_process_output): Change int pnamelen to
139 socklen_t.
140
141 * nsterm.m (setMarkedText:selectedRange:):
142 (deleteWorkingText):
143 * nsmenu.m (addDisplayItemWithImage:idx:tag:helpText:enabled:):
144 * nsfont.m (ns_get_covering_families, ns_findfonts): Cast NSLog
145 argument to unsigned long to avoid warning.
146 (nsfont_draw): Use 0.25 instead of Fix2X (kATSItalicQDSkew).
147
148 * conf_post.h (assume): Fix compiler error: x shall be cond.
149
1502013-09-22 Daniel Colascione <dancol@dancol.org>
151
152 * xfns.c (x_get_monitor_attributes): Suppress unused variable
153 warning when compiling without a window system.
154
1552013-09-22 Daniel Colascione <dancol@dancol.org>
156
157 * data.c (Qbool_vector_p): New symbol.
158 (bool_vector_spare_mask,popcount_size_t_generic)
159 (popcount_size_t_msc,popcount_size_t_gcc)
160 (popcount_size_t)
161 (bool_vector_binop_driver)
162 (count_trailing_zero_bits,size_t_to_host_endian)
163 (Fbool_vector_exclusive_or)
164 (Fbool_vector_union)
165 (Fbool_vector_intersection,Fbool_vector_set_difference)
166 (Fbool_vector_subsetp,Fbool_vector_not)
167 (Fbool_vector_count_matches)
168 (Fbool_vector_count_matches_at): New functions.
169 (syms_of_data): Intern new symbol, functions.
170 * alloc.c (bool_vector_payload_bytes): New function.
171 (Fmake_bool_vector): Instead of calling Fmake_vector,
172 which performs redundant initialization and argument checking,
173 just call allocate_vector ourselves. Make sure we clear any
174 terminating padding to zero.
175 (vector_nbytes,sweep_vectors): Use bool_vector_payload_bytes
176 instead of open-coding the size calculation.
177 (vroundup_ct): New macro.
178 (vroundup): Assume argument >= 0; invoke vroundup_ct.
179 * casetab.c (shuffle,set_identity): Change lint_assume to assume.
180 * composite.c (composition_gstring_put_cache): Change
181 lint_assume to assume.
182 * conf_post.h (assume): New macro.
183 (lint_assume): Remove.
184 * dispnew.c (update_frame_1): Change lint_assume to assume.
185 * ftfont.c (ftfont_shape_by_flt): Change lint_assume
186 to assume.
187 * image.c (gif_load): Change lint_assume to assume.
188 * lisp.h (eassert_and_assume): New macro.
189 (Qbool_vector_p): Declare.
190 (CHECK_BOOL_VECTOR,ROUNDUP,BITS_PER_SIZE_T): New macros.
191 (swap16,swap32,swap64): New inline functions.
192 * macfont.c (macfont_shape): Change lint_assume to assume.
193 * ralloc.c: Rename ROUNDUP to PAGE_ROUNDUP throughout.
194 * xsettings.c (parse_settings): Use new swap16 and
195 swap32 from lisp.h instead of file-specific macros.
196
1972013-09-22 Eli Zaretskii <eliz@gnu.org>
198
199 * xdisp.c (try_window_id): Don't abort if cursor row could not be
200 found (which can legitimately happen when the glyph row at the
201 window start is disabled in the current_matrix. (Bug#15365)
202
2032013-09-22 Paul Eggert <eggert@cs.ucla.edu>
204
205 Fix syntax.h bug introduced by recent INLINE change.
206 syntax.h defined an extern inline function SYNTAX_ENTRY that was
207 conditionally compiled one way in some modules, and a different
208 way in others. This doesn't work with extern inline functions,
209 which must have the same definition in all modules, because the
210 defining code might be shared across modules, depending on the
211 implementation. Symptoms reported by Martin Rudalics in:
212 http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00414.html
213 * regex.c, syntax.c (SYNTAX_ENTRY_VIA_PROPERTY): Remove.
214 (SYNTAX, SYNTAX_ENTRY, SYNTAX_WITH_FLAGS): New macros,
215 overriding the corresponding functions in syntax.h.
216 * syntax.h (syntax_property_entry, syntax_property_with_flags)
217 (syntax_property): New inline functions.
218 (SYNTAX_ENTRY, SYNTAX_WITH_FLAGS, SYNTAX):
219 Rewrite in terms of these new functions.
220
2212013-09-21 Eli Zaretskii <eliz@gnu.org>
222
223 * dired.c (directory_files_internal): Use multibyte_chars_in_text,
224 not chars_in_text, whose result depends on the multibyteness of
225 the current buffer. (Bug#15426)
226
2272013-09-20 Paul Eggert <eggert@cs.ucla.edu>
228
229 Port recent change to hosts where pointers aren't 'long'.
230 * xterm.c (x_send_scroll_bar_event, x_scroll_bar_to_input_event):
231 Don't assume that pointers are the same width as 'long'.
232 Add a compile-time check that a pointer fits into two X slots.
233
234 A simpler, centralized INLINE.
235 * conf_post.h (INLINE): Define only if not already defined.
236 This allows us to use a single INLINE, defined by one file
237 per executable.
238 * emacs.c (INLINE): Define it.
239 Also, include category.h, charset.h, composite.h, dispextern.h,
240 syntax.h, systime.h, so that their INLINE definitions are expanded
241 properly for Emacs.
242 * blockinput.h, keyboard.c (BLOCKINPUT_INLINE):
243 * buffer.h, buffer.c (BUFFER_INLINE):
244 * category.h, category.c (CATEGORY_INLINE):
245 * character.h, character.c (CHARACTER_INLINE):
246 * charset.h, charset.c (CHARSET_INLINE):
247 * composite.h, composite.c (COMPOSITE_INLINE):
248 * dispextern.h, dispnew.c (DISPEXTERN_INLINE):
249 * frame.h, frame.c (FRAME_INLINE):
250 * intervals.h, intervals.c (INTERVALS_INLINE):
251 * keyboard.h, keyboard.c (KEYBOARD_INLINE):
252 * lisp.h, alloc.c (LISP_INLINE):
253 * process.h, process.c (PROCESS_INLINE):
254 * syntax.h, syntax.c (SYNTAX_INLINE):
255 * systime.h, sysdep.c (SYSTIME_INLINE):
256 * termhooks.h, terminal.h (TERMHOOKS_INLINE):
257 * window.h, window.c (WINDOW_INLINE):
258 Remove. All uses replaced with INLINE.
259
2602013-09-20 Dmitry Antipov <dmantipov@yandex.ru>
261
262 * xterm.c (handle_one_xevent): Revert part of 2013-09-17 change
263 to avoid Bug#15398.
264
2652013-09-19 Eli Zaretskii <eliz@gnu.org>
266
267 * w32reg.c (w32_get_string_resource): Make the first 2 arguments
268 'const char *' to avoid compiler warnings due to similar change in
269 the prototype of x_get_string_resource.
270
2712013-09-19 Dmitry Antipov <dmantipov@yandex.ru>
272
273 * xterm.h (struct x_display_info): New members last_mouse_glyph_frame,
274 last_mouse_scroll_bar, last_mouse_glyph and last_mouse_movement_time,
275 going to replace static variables below. Adjust comments.
276 * xterm.c (last_mouse_glyph, last_mouse_glyph_frame)
277 (last_mouse_scroll_bar, last_mouse_movement_time): Remove.
278 (note_mouse_movement, XTmouse_position, x_scroll_bar_note_movement)
279 (x_scroll_bar_report_motion, handle_one_xevent, syms_of_xterm):
280 Related users changed.
281 * w32term.h (struct w32_display_info): New members last_mouse_glyph_frame,
282 last_mouse_scroll_bar, last_mouse_scroll_bar_pos, last_mouse_glyph and
283 last_mouse_movement_time, going to replace static variables below.
284 Adjust comments.
285 * w32term.c (last_mouse_glyph_frame, last_mouse_scroll_bar)
286 (last_mouse_scroll_bar_pos, last_mouse_glyph, last_mouse_movement_time):
287 Remove.
288 (note_mouse_movement, w32_mouse_position, w32_scroll_bar_handle_click)
289 (x_scroll_bar_report_motion, syms_of_w32term): Related users changed.
290 * nsterm.h (struct ns_display_info): New members last_mouse_glyph,
291 last_mouse_movement_time and last_mouse_scroll_bar, going to replace
292 static variables below.
293 * nsterm.m (last_mouse_glyph, last_mouse_movement_time)
294 (last_mouse_scroll_bar): Remove.
295 (note_mouse_movement, ns_mouse_position, mouseMoved, mouseEntered)
296 (mouseExited): Related users changed.
297
2982013-09-19 Dmitry Antipov <dmantipov@yandex.ru>
299
300 Do not use external array to process X scroll bar messages.
301 * xterm.c (scroll_bar_windows, scroll_bar_windows_size): Remove.
302 (x_send_scroll_bar_event): Pack window pointer into two slots
303 of XClientMessageEvent if we're 64-bit. Adjust comment.
304 (x_scroll_bar_to_input_event): Unpack accordingly.
305
3062013-09-18 Dmitry Antipov <dmantipov@yandex.ru>
307
308 Ifdef away recent changes which aren't relevant to NS port.
309 * dispextern.h (x_mouse_grabbed, x_redo_mouse_highlight)
310 [!HAVE_NS]: Declare as such.
311 * frame.c (x_mouse_grabbed, x_redo_mouse_highlight)
312 [!HAVE_NS]: Define as such.
313
3142013-09-18 Dmitry Antipov <dmantipov@yandex.ru>
315
316 * frame.c (x_redo_mouse_highlight): New function
317 to factor out common code used in W32 and X ports.
318 * dispextern.h (x_redo_mouse_highlight): Add prototype.
319 * xterm.h (struct x_display_info):
320 * w32term.h (struct w32_display_info):
321 * nsterm.h (struct ns_display_info): New members
322 last_mouse_motion_frame, last_mouse_motion_x and
323 last_mouse_motion_y, going to replace static variables below.
324 * xterm.c (last_mouse_motion_event, last_mouse_motion_frame)
325 (redo_mouse_highlight): Remove.
326 (note_mouse_movement, syms_of_xterm): Adjust user.
327 (handle_one_xevent): Likewise. Use x_redo_mouse_highlight.
328 * w32term.c (last_mouse_motion_event, last_mouse_motion_frame)
329 (redo_mouse_highlight): Remove.
330 (note_mouse_movement, syms_of_w32term): Adjust user.
331 (w32_read_socket): Likewise. Use x_redo_mouse_highlight.
332 * nsterm.m (last_mouse_motion_position, last_mouse_motion_frame):
333 Remove.
334 (note_mouse_movement, mouseMoved, syms_of_nsterm):
335 * nsfns.m (compute_tip_xy): Adjust user.
336
3372013-09-18 Dmitry Antipov <dmantipov@yandex.ru>
338
339 * frame.c (x_mouse_grabbed): New function.
340 * dispextern.h (x_mouse_grabbed): Add prototype.
341 (last_mouse_frame): Remove declaration.
342 * xterm.h (struct x_display_info):
343 * w32term.h (struct w32_display_info):
344 * nsterm.h (struct ns_display_info): New member
345 last_mouse_frame, going to replace...
346 * xdisp.c (last_mouse_frame): ...global variable.
347 (note_tool_bar_highlight):
348 * w32term.c (w32_mouse_position, w32_read_socket):
349 * xterm.c (XTmouse_position, handle_one_xevent):
350 Use x_mouse_grabbed.
351 * nsterm.m (ns_mouse_position, mouseDown): Adjust user.
352
3532013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
354
355 * w32term.c (w32_read_socket): Avoid temporary
356 variables in a call to x_real_positions.
357 * xterm.c (handle_one_xevent): Likewise.
358
3592013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
360
361 * frame.h (x_set_bitmap_icon) [!HAVE_NS]: New function.
362 (x_icon_type): Remove prototype.
363 (x_bitmap_icon) [!HAVE_NS]: Declare as such.
364 * frame.c (x_icon_type): Remove.
365 * w32term.c (x_make_frame_visible, x_iconify_frame):
366 * xterm.c (x_make_frame_visible, x_iconify_frame):
367 Use x_set_bitmap_icon to factor out common code.
368
3692013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
370
371 * dispextern.h (check_x_display_info, x_get_string_resource):
372 Declare here just once and unify the latter.
373 * frame.c (check_x_display_info, x_get_string_resource):
374 * nsterm.h (check_x_display_info):
375 * xrdb.c (x_get_string_resource):
376 * xterm.h (check_x_display_info): Remove prototypes.
377 * nsfns.m (x_get_string_resource): Likewise. Adjust definition.
378 * w32reg.c (x_get_string_resource): Likewise.
379 (w32_get_rdb_resource): Adjust user.
380
3812013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
382
383 * xterm.h (struct x_display_info): New member
384 x_pending_autoraise_frame, going to replace...
385 * xterm.c (pending_autoraise_frame): ...static variable.
386 (x_new_focus_frame, XTread_socket): Adjust users.
387 * w32term.h (struct w32_display_info): New member
388 w32_pending_autoraise_frame, going to replace...
389 * w32term.c (pending_autoraise_frame): ...global variable.
390 (x_new_focus_frame, w32_read_socket): Adjust users.
391
3922013-09-17 Glenn Morris <rgm@gnu.org>
393
394 * xdisp.c (message_dolog): If we create *Messages*,
395 switch it to messages-buffer-mode.
396
3972013-09-17 Paul Eggert <eggert@cs.ucla.edu>
398
399 Don't overuse 'const' in types of locals.
400 * bidi.c (bidi_count_bytes):
401 * gtkutil.c, gtkutil.h (xg_event_is_for_menubar)
402 (xg_event_is_for_scrollbar):
403 * xselect.c (x_handle_property_notify)
404 (x_handle_selection_notify, x_handle_dnd_message):
405 * xsettings.c, xsettings.h (xft_settings_event):
406 * xterm.c (x_handle_net_wm_state, handle_one_event)
407 (x_menubar_window_to_frame, x_detect_focus_change)
408 (construct_mouse_click, note_mouse_movement)
409 (x_scroll_bar_to_input_event, x_scroll_bar_expose)
410 (x_scroll_bar_handle_click, x_scroll_bar_note_movement)
411 (handle_one_xevent, x_handle_net_wm_state):
412 * xterm.h (x_handle_property_notify, x_handle_selection_notify)
413 (x_handle_dnd_message):
414 Avoid unnecessary 'const', typically the second 'const' in
415 'const foo * const arg', a 'const' that does not affect the API
416 and doesn't significantly help the human reader.
417
4182013-09-17 Dmitry Antipov <dmantipov@yandex.ru>
419
420 * image.c (fn_g_type_init) [WINDOWSNT]: Define and load
421 only if Glib < 2.36.0.
422 (fn_g_type_init) [!WINDOWSNT]: Define only if Glib < 2.36.0.
423 * xsettings.c (init_gconf, init_gsettings): Do not check
424 for g_type_init.
425 * xterm.c (handle_one_xevent): Do not call to x_clear_area
426 if GTK >= 2.7.0.
427 (toplevel) [USE_MOTIF]: Include xlwmenu.h to pacify GCC.
428
4292013-09-16 Jan Djärv <jan.h.d@swipnet.se>
430
431 * xsettings.c (init_gconf, init_gsettings): Check for Glib 2.36.0
432 before calling g_type_init.
433
434 * font.c (syms_of_font): Move call to syms_of_(ns|mac)font ...
435
436 * nsterm.m (syms_of_nsterm): ... to here.
437
4382013-09-16 Dmitry Antipov <dmantipov@yandex.ru>
439
440 * xterm.c (toolkit_scroll_bar_interaction): Use bool for boolean.
441 (ignore_next_mouse_click_timeout): Use Time as X does.
442 (handle_one_xevent): Avoid cast and use unsigned comparison.
443
4442013-09-16 Dmitry Antipov <dmantipov@yandex.ru>
445
446 Do not copy X event in handle_one_xevent except KeyPress case.
447 Wnen XEvent is processed, it is unlikely to be changed except
448 KeyPress case, so we can avoid copying and use const pointer to
449 const data to make sure that an event is not changed elsewhere.
450 * xterm.c (handle_one_xevent): Change 2nd arg to 'const XEvent *
451 const' and do not create local copy except for the KeyPress event.
452 Use casts to avoid a few glitches. Adjust formatting. Add comments.
453 (SET_SAVED_BUTTON_EVENT): Remove and move the code to the only user.
454 (x_handle_net_wm_state, x_menubar_window_to_frame)
455 (x_detect_focus_change, construct_mouse_click, note_mouse_movement)
456 (x_scroll_bar_to_input_event, x_scroll_bar_expose)
457 (x_scroll_bar_handle_click, x_scroll_bar_note_movement):
458 * gtkutil.c (xg_event_is_for_menubar, xg_event_is_for_scrollbar):
459 * xselect.c (x_handle_property_notify, x_handle_selection_notify)
460 (x_handle_dnd_message):
461 * xsettings.c (xft_settings_event):
462 Use 'const XEvent * const' where appropriate.
463 * xterm.h, gtkutil.h, xsettngs.h: Adjust related prototypes.
464
4652013-09-16 Dmitry Antipov <dmantipov@yandex.ru>
466
467 Fix X event waiting to handle multiple frames.
468 * frame.h (struct frame) [HAVE_X_WINDOWS]: New member wait_event_type.
469 * xterm.c (pending_event_wait): Remove. Adjust users.
470 (x_detect_focus_change): Pass frame arg.
471 (handle_one_xevent): Find related frame early and clear per-frame
472 wait_event_type only if this is an event for the relevant frame.
473 (x_wait_for_event): Use per-frame wait_event_type.
474
4752013-09-15 Jan Djärv <jan.h.d@swipnet.se>
476
477 * nsfns.m (Fx_create_frame): Fix font driver registration for
478 GNUStep.
479
480 * font.c (syms_of_font): Check MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
481 for syms_of_macfont.
482
483 * nsterm.m: Include macfont.h.
484 (ns_tmp_flags, ns_tmp_font): Remove.
485 (ns_compute_glyph_string_overhangs): Check for driver Qns.
486 (ns_draw_glyph_string): Use local variables instead of ns_tmp_flags,
487 ns_tmp_font. Call ns_draw_text_decoration here instead of nsfont.m.
488 (changeFont:): Fix code style. Check for font driver type when
489 getiing font.
490
491 * nsterm.h (FONT_DESCENT, FONT_ASCENT): Define to (f)->ascent and
492 (f)->descent.
493
494 * nsfont.m (ns_tmp_flags, ns_tmp_font): Remove.
495 (nsfont_open): Set font driver type.
496 Set font->ascent and font->descent. Figure out font instead of
497 ns_tmp_font, and flags instead of ns_tmp_flags.
498 Fix indentation. Remove call to ns_draw_text_decoration,
499 moved to nsterm.
500
501 * nsfns.m: Include macfont.h.
502 (Fx_create_frame): Register macfont driver, make a better default font.
503 (Fns_popup_font_panel): Get font from macfont driver, if used.
504
505 * macfont.m, macfont.h, maccuvs.h: New files.
506
507 * font.h: Declare syms_of_macfont.
508
509 * font.c (syms_of_font): Call syms_of_macfont.
510
511 * Makefile.in (NS_OBJ, SOME_MACHINE_OBJECTS): Add macfont.o.
512
5132013-09-15 Dmitry Antipov <dmantipov@yandex.ru>
514
515 Drop VERTICAL_SCROLL_BAR_WIDTH_TRIM. For X, it is zero since 1999,
516 and it is always zero for others, so I assume that this is an ancient
517 leftover which nobody will want to change any more.
518 * xterm.h, w32term.h, nsterm.h (VERTICAL_SCROLL_BAR_WIDTH_TRIM): Remove.
519 (VERTICAL_SCROLL_BAR_INSIDE_WIDTH):
520 * frame.c (x_set_scroll_bar_width):
521 * w32fns.c (w32_createscrollbar):
522 * w32term.c (w32_set_vertical_scroll_bar):
523 * xfns.c (x_set_scroll_bar_default_width):
524 * xterm.c (XTflash, x_scroll_bar_create, XTset_vertical_scroll_bar)
525 (x_scroll_bar_expose): Related users changed.
526
5272013-09-15 Dmitry Antipov <dmantipov@yandex.ru>
528
529 * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment.
530 (BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT): Use FRAME_X_SCREEN_NUMBER.
531 (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET) [USE_X_TOOLKIT]:
532 Define as such.
533 * frame.h (FRAME_SMALLEST_CHAR_WIDTH, FRAME_SMALLEST_FONT_HEIGHT):
534 Define once here...
535 * nsterm.h, w32term.h, xterm.h: ...and not here.
536 * w32term.h (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET):
537 Remove unused Xisms.
538 * xterm.c, xfns.c (toplevel): Remove #ifdef HAVE_X_WINDOWS because
539 these modules are never compiled otherwise.
540
5412013-09-14 Eli Zaretskii <eliz@gnu.org>
542
543 * buffer.c (syms_of_buffer) <left-margin-width, right-margin-width>:
544 Doc fix. (Bug#15375)
545
5462013-09-13 Dmitry Antipov <dmantipov@yandex.ru>
547
548 Unify Fx_focus_frame between all ports.
549 * frame.h (x_focus_frame): New prototype.
550 * xfns.c (Fx_focus_frame): Remove.
551 (syms_of_xfns): Do not defsubr it.
552 (x_focus_frame): X implementation.
553 * nsfns.m (Fx_focus_frame): Remove.
554 (syms_of_nsfns): Do not defsubr it.
555 (x_focus_frame): NS implementation.
556 * w32term.c (Fx_focus_frame): Remove.
557 (x_focus_on_frame): Rename to...
558 (x_focus_frame): W32 implementation.
559 * w32term.h (x_focus_on_frame): Remove prototype.
560 * w32fns.c (Fx_focus_frame): Remove.
561 (syms_of_w32fns): Do not defsubr it.
562 * frame.c (Fx_focus_frame): Define here.
563 (syms_of_frame): Defsubr here.
564 * gtkutil.c (xg_tool_bar_callback): Use x_focus_frame.
565
5662013-09-13 Dmitry Antipov <dmantipov@yandex.ru>
567
568 Unify FRAME_window_system_DISPLAY_INFO macros between all ports.
569 All of them are replaced with FRAME_DISPLAY_INFO, defined in
570 each port to reference the port-specific window system data.
571 * msdos.h (FRAME_X_DISPLAY_INFO): Remove.
572 (FRAME_DISPLAY_INFO): Define.
573 * w32term.h (FRAME_W32_DISPLAY_INFO, FRAME_X_DISPLAY_INFO): Remove.
574 (FRAME_DISPLAY_INFO): Define. Adjust users.
575 * xterm.h (FRAME_X_DISPLAY_INFO): Remove.
576 (FRAME_DISPLAY_INFO): Define. Adjust users.
577 * frame.h (FRAME_RES_X, FRAME_RES_Y): Unify.
578 * font.c, frame.c, gtkutil.c, image.c, menu.c, msdos.c, nsfns.m:
579 * nsfont.m, nsterm.m, w32fns.c, w32font.c, w32menu.c, w32term.c:
580 * w32xfns.c, widget.c, xdisp.c, xfaces.c, xfns.c, xfont.c, xmenu.c:
581 * xselect.c, xterm.c: All related users changed.
582
5832013-09-13 Dmitry Antipov <dmantipov@yandex.ru>
584
585 * xterm.h (x_window_to_frame, x_any_window_to_frame)
586 (x_menubar_window_to_frame): Remove prototypes.
587 * xfns.c (x_window_to_frame, x_any_window_to_frame)
588 (x_menubar_window_to_frame, x_top_window_to_frame):
589 Move from here...
590 * xterm.c (x_window_to_frame, x_any_window_to_frame)
591 (x_menubar_window_to_frame, x_top_window_to_frame):
592 ...to here and convert all but the last to static.
593
5942013-09-12 Eli Zaretskii <eliz@gnu.org>
595
596 * lisp.mk (lisp): Add w32-common-fns.elc.
597
5982013-09-12 Xue Fuqiao <xfq.free@gmail.com>
599
600 * charset.c (char_charset): Document an exception for char-charset.
601
6022013-09-12 Dmitry Antipov <dmantipov@yandex.ru>
603
604 * xterm.h (x_display_info): New field last_user_time...
605 * xterm.c (toplevel): ...to replace static last_user_time.
606 (handle_one_xevent, x_ewmh_activate_frame): Adjust users.
607
6082013-09-12 Dmitry Antipov <dmantipov@yandex.ru>
609
610 * xterm.c (x_set_scroll_bar_thumb) [USE_LUCID && !HAVE_XAW3D]: Clip
611 scroll bar values to prevent thumb from disappear and update comment.
612
6132013-09-11 Glenn Morris <rgm@gnu.org>
614
615 * emacs.c (usage_message): Possessive apostrophe tweak.
616
6172013-09-11 Dmitry Antipov <dmantipov@yandex.ru>
618
619 * nsterm.m (syms_of_nsterm): Use Qns.
620 * w32fns.c (Fx_open_connection): Remove old '#if 0' code.
621 * w32term.c (w32_create_terminal, syms_of_w32term): Use Qw32.
622 * xfns.c (x_display_info_for_name, Fx_open_connection):
623 Remove old '#if 0' code.
624 (syms_of_xfns): Use Qx.
625 * termhooks.h (fullscreen_hook): Remove the leftover.
626 (struct terminal): Fix typo in comment.
627
6282013-09-11 Dmitry Antipov <dmantipov@yandex.ru>
629
630 Cleaning up a few X scroll bar bits.
631 * termhooks.h (enum scroll_bar_part): Add scroll_bar_nowhere member.
632 * xterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]:
633 New member last_seen_part, going to replace...
634 * xterm.c [USE_TOOLKIT_SCROLL_BARS]: ...global last_scroll_bar_part.
635 (xt_action_hook) [USE_LUCID]: Adjust user.
636 (xm_scroll_callback, xg_scroll_callback): Do not bloat with
637 Lucid-specific scroll bar support.
638 (xaw_jump_callback, xaw_scroll_callback): Prefer enum scroll_par_part
639 to int and adjust to use last_seen_part member.
640 (x_set_toolkit_scroll_bar_thumb) [USE_LUCID]: Adjust user.
641 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]:
642 Initialize last_seen_part.
643
6442013-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
645
646 * insdel.c (insert_from_buffer_1): Don't mark buffer as modified when
647 insert-buffer-substring an empty string.
648
6492013-09-11 Paul Eggert <eggert@cs.ucla.edu>
650
651 * xdisp.c (Ftool_bar_lines_needed): Declare as 'const' if ifdeffed out,
652 avoiding a GCC warning.
653
6542013-09-11 Dmitry Antipov <dmantipov@yandex.ru>
655
656 Ifdef away frame tool bar code when it is not really used.
657 * frame.h (struct frame) [HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS]:
658 Move tool_bar_window, desired_tool_bar_string, current_tool_bar_string
659 and minimize_tool_bar_window_p under the above.
660 (fset_current_tool_bar_string, fset_desired_tool_bar_string)
661 (fset_tool_bar_window): Likewise.
662 * dispnew.c (clear_current_matrices, clear_desired_matrices)
663 (adjust_frame_glyphs_for_window_redisplay, free_glyphs, update_frame)
664 (change_frame_size_1):
665 * window.c (window_from_coordinates, Frecenter): Adjust users.
666 * window.h (WINDOW_TOOL_BAR_P): Define to zero when frame tool bar
667 code is not really used.
668 * xdisp.c (build_desired_tool_bar_string, display_tool_bar_line)
669 (tool_bar_lines_needed, MAX_FRAME_TOOL_BAR_HEIGHT, tool_bar_item_info)
670 (get_tool_bar_item, handle_tool_bar_click, note_tool_bar_highlight)
671 [!USE_GTK && !HAVE_NS]: Define as such.
672 (Ftool_bar_lines_needed, redisplay_tool_bar, show_mouse_face)
673 (note_mouse_highlight, expose_frame):
674 * xfns.c (x_set_tool_bar_lines):
675 * xterm.c (handle_one_xevent): Adjust users.
676
6772013-09-11 Paul Eggert <eggert@cs.ucla.edu>
678
679 Fix corruption with multiple emacsclient -t instances (Bug#15222).
680 This bug was introduced by my 2013-08-26 patch, which incorrectly
681 assumed that the terminfo implementation doesn't use termcap buffers.
682 * term.c (init_tty) [TERMINFO]: Remove optimization, as
683 these buffers apparently are used after all.
684 * termchar.h (TERMCAP_BUFFER_SIZE) [TERMINFO]: Define here too.
685 (struct tty_display_info): Define members termcap_term_buffer and
686 termcap_strings_buffer even if TERMINFO.
687
6882013-09-11 Dmitry Antipov <dmantipov@yandex.ru>
689
690 Fix last change.
691 * data.c (Feqlsign, Flss, Fgtr, Fleq, Fgeq): Add convenient
692 'usage' docstring entry to pacify make-docfile.
693
6942013-09-11 Barry O'Reilly <gundaetiapo@gmail.com>
695
696 Change comparison functions =, <, >, <=, >= to take many arguments.
697 * data.c: Change comparison functions' interface and implementation.
698 * lisp.h: Make arithcompare available for efficient two arg
699 comparisons.
700 * bytecode.c: Use arithcompare.
701 * fileio.c: Use new interface.
702
7032013-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
704
705 * keyboard.c (read_char): Don't break immediate_echo (bug#15332).
706
7072013-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
708
709 * eval.c (Feval): Document the new use of `lexical'.
710
7112013-09-09 Dmitry Antipov <dmantipov@yandex.ru>
712
713 Review and drop old frame resize hack.
714 * frame.h (struct frame): Remove force_flush_display_p.
715 * dispnew.c (update_frame): Adjust user and don't call
716 flush_frame here. The comment has said that there was an issues
717 with redisplaying fringes, but I don't see any differences with
718 and without this hack. Hopefully we can continue without it.
719 * xdisp.c (clear_garbaged_frames): Adjust user and do not clear
720 current frame matrices twice if resized_p is set.
721
7222013-09-09 Dmitry Antipov <dmantipov@yandex.ru>
723
724 Do not populate pure Xism x_sync to other ports.
725 * frame.h (x_sync): Move under HAVE_X_WINDOWS.
726 * frame.c (other_visible_frames) [HAVE_X_WINDOWS]: Use as such.
727 * nsfns.m, w32xfns.c (x_sync): Remove no-op.
728 * w32term.h (x_sync): Remove prototype.
729
7302013-09-09 Dmitry Antipov <dmantipov@yandex.ru>
731
732 Cleanup frame flushing.
733 * dispextern.h (struct redisplay_interface):
734 Drop flush_display_optional because flush_display is enough
735 for X and flushing via RIF is just a no-op for others.
736 * frame.h (flush_frame): New function.
737 * dispnew.c (update_frame):
738 * minibuf.c (read_minibuf):
739 * xdisp.c (echo_area_display, redisplay_preserve_echo_area):
740 Use it.
741 * keyboard.c (detect_input_pending_run_timers): Do not flush
742 all frames but selected one in redisplay_preserve_echo_area.
743 * nsterm.m (ns_flush): Remove no-op.
744 (ns_redisplay_interface): Adjust user.
745 * w32term.h (x_flush): Remove no-op.
746 (w32_redisplay_interface): Adjust user.
747 * xterm.c (x_flush): Simplify because we do not flush all
748 frames at once any more. Adjust comment.
749 (x_redisplay_interface): Adjust user.
750
7512013-09-07 Paul Eggert <eggert@cs.ucla.edu>
752
753 Port --without-x --enable-gcc-warnings to Fedora 19.
754 * gfilenotify.c (globals_of_gfilenotify):
755 Call g_type_init only if using an older glib version that needs it.
756
7572013-09-06 Dmitry Antipov <dmantipov@yandex.ru>
758
759 * lisp.h (last_glyphless_glyph_frame, last_glyphless_glyph_face_id)
760 (last_glyphless_glyph_merged_face_id): Remove declarations.
761 * dispextern.h (merge_glyphless_glyph_face): Add prototype.
762 * xdisp.c (last_glyphless_glyph_frame, last_glyphless_glyph_face_id)
763 (last_glyphless_glyph_merged_face_id): Now static.
764 (merge_escape_glyph_face): New function, refactored from...
765 (get_next_display_element): ...here.
766 (merge_glyphless_glyph_face): New function, refactored from...
767 (produce_glyphless_glyph): ...here...
768 * term.c (produce_glyphless_glyph): ...and here.
769
7702013-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
771
772 * eval.c (eval_sub): Only call Ffunction if necessary.
773
7742013-09-06 Dmitry Antipov <dmantipov@yandex.ru>
775
776 Attempt to make redisplay more selective when changing cursor type.
777 * frame.h (struct frame): New bitfield cursor_type_changed.
778 * xdisp.c (cursor_type_changed): Remove.
779 (try_cursor_movement, redisplay_window, try_window_id)
780 (set_frame_cursor_types, try_window_reusing_current_matrix):
781 Adjust to use per-frame bitfield.
782 (redisplay_internal): Look for cursor type change on each visible
783 frame and consider all frames if cursor type has been changed on
784 the frame other than selected. If cursor type has been changed on
785 selected frame only, do not use fast update.
786
7872013-09-06 Dmitry Antipov <dmantipov@yandex.ru>
788
789 Attempt to make redisplay more selective when changing fonts.
790 * frame.h (struct frame): New bitfield fonts_changed.
791 * dispextern.h (fonts_changed_p, adjust_glyphs): Remove declaration.
792 (adjust_frame_glyphs): Add prototype.
793 * dispnew.c (fonts_changed_p): Remove.
794 (adjust_glyphs): Remove because we do not
795 adjust matrices on all frames at once any more.
796 (adjust_frame_glyphs): Block and unblock input here.
797 (adjust_glyph_matrix): Use fonts_changed.
798 (change_frame_size_1): Use adjust_frame_glyphs.
799 * font.c (font_open_entity): Use fonts_changed.
800 * frame.c (set_menu_bar_lines, Fmake_terminal_frame):
801 * w32fns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip):
802 * window.c (Fdelete_other_windows_internal, Fwindow_resize_apply)
803 (Fsplit_window_internal, Fdelete_window_internal, grow_mini_window)
804 (shrink_mini_window, Fresize_mini_window_internal)
805 (window_scroll_pixel_based, Fset_window_configuration)
806 (apply_window_adjustment, Fset_window_vscroll):
807 * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip):
808 Use adjust_frame_glyphs.
809 * xdisp.c (redisplay_tool_bar, redisplay_window, try_window)
810 (try_window_reusing_current_matrix, try_window_id, display_line)
811 (IT_EXPAND_MATRIX_WIDTH): Use fonts_changed.
812 (redisplay_internal): Consider fonts_changed and adjust frame
813 matrices for each frame only if the frame is visible. If font
814 has been changed on some frame during full redisplay, retry
815 only visible frames where the font has been actually changed.
816
8172013-09-05 Dmitry Antipov <dmantipov@yandex.ru>
818
819 Cache current header and mode line height for each window.
820 * window.h (struct window): New fields mode_line_height
821 and header_line_height.
822 * window.c (make_window): Initialize them.
823 * dispextern.h (CURRENT_MODE_LINE_HEIGHT)
824 (CURRENT_HEADER_LINE_HEIGHT): Use them. Adjust comment.
825 (current_mode_line_height, current_header_line_height):
826 Remove declaration.
827 * xdisp.c (current_mode_line_height, current_header_line_height):
828 Remove.
829 (pos_visible_p, init_xdisp): Adjust user.
830 (redisplay_window): Invalidate mode_line_height and
831 header_line_height if current and desired matrices do not agree.
832
8332013-09-05 Dmitry Antipov <dmantipov@yandex.ru>
834
835 * fontset.c, window.c, xdisp.c (toplevel): Use TERM_HEADER.
836 * xfaces.c (toplevel) [HAVE_X_WINDOWS]: Do not include xterm.h twice.
837
12013-09-05 Dmitry Antipov <dmantipov@yandex.ru> 8382013-09-05 Dmitry Antipov <dmantipov@yandex.ru>
2 839
3 Make --without-x compatible with --enable-gcc-warnings. 840 Make --without-x compatible with --enable-gcc-warnings.
diff --git a/src/Makefile.in b/src/Makefile.in
index fe8d2d13ce0..254aa175d49 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -266,7 +266,7 @@ MSDOS_OBJ =
266MSDOS_X_OBJ = 266MSDOS_X_OBJ =
267 267
268NS_OBJ=@NS_OBJ@ 268NS_OBJ=@NS_OBJ@
269## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o if HAVE_NS. 269## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o if HAVE_NS.
270NS_OBJC_OBJ=@NS_OBJC_OBJ@ 270NS_OBJC_OBJ=@NS_OBJC_OBJ@
271## Only set if NS_IMPL_GNUSTEP. 271## Only set if NS_IMPL_GNUSTEP.
272GNU_OBJC_CFLAGS=@GNU_OBJC_CFLAGS@ 272GNU_OBJC_CFLAGS=@GNU_OBJC_CFLAGS@
@@ -388,7 +388,7 @@ obj = $(base_obj) $(NS_OBJC_OBJ)
388SOME_MACHINE_OBJECTS = dosfns.o msdos.o \ 388SOME_MACHINE_OBJECTS = dosfns.o msdos.o \
389 xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ 389 xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
390 fontset.o dbusbind.o cygw32.o \ 390 fontset.o dbusbind.o cygw32.o \
391 nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o \ 391 nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o \
392 w32.o w32console.o w32fns.o w32heap.o w32inevt.o w32notify.o \ 392 w32.o w32console.o w32fns.o w32heap.o w32inevt.o w32notify.o \
393 w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \ 393 w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \
394 w16select.o widget.o xfont.o ftfont.o xftfont.o ftxfont.o gtkutil.o \ 394 w16select.o widget.o xfont.o ftfont.o xftfont.o ftxfont.o gtkutil.o \
diff --git a/src/alloc.c b/src/alloc.c
index a8cbee1cf36..621693fc096 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -20,8 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define LISP_INLINE EXTERN_INLINE
24
25#include <stdio.h> 23#include <stdio.h>
26#include <limits.h> /* For CHAR_BIT. */ 24#include <limits.h> /* For CHAR_BIT. */
27 25
@@ -47,6 +45,18 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
47 45
48#include <verify.h> 46#include <verify.h>
49 47
48#if (defined ENABLE_CHECKING \
49 && defined HAVE_VALGRIND_VALGRIND_H \
50 && !defined USE_VALGRIND)
51# define USE_VALGRIND 1
52#endif
53
54#if USE_VALGRIND
55#include <valgrind/valgrind.h>
56#include <valgrind/memcheck.h>
57static bool valgrind_p;
58#endif
59
50/* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. 60/* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects.
51 Doable only if GC_MARK_STACK. */ 61 Doable only if GC_MARK_STACK. */
52#if ! GC_MARK_STACK 62#if ! GC_MARK_STACK
@@ -971,7 +981,7 @@ struct ablocks
971#define ABLOCKS_BASE(abase) (abase) 981#define ABLOCKS_BASE(abase) (abase)
972#else 982#else
973#define ABLOCKS_BASE(abase) \ 983#define ABLOCKS_BASE(abase) \
974 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void**)abase)[-1]) 984 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void **)abase)[-1])
975#endif 985#endif
976 986
977/* The list of free ablock. */ 987/* The list of free ablock. */
@@ -1026,7 +1036,7 @@ lisp_align_malloc (size_t nbytes, enum mem_type type)
1026 1036
1027 aligned = (base == abase); 1037 aligned = (base == abase);
1028 if (!aligned) 1038 if (!aligned)
1029 ((void**)abase)[-1] = base; 1039 ((void **) abase)[-1] = base;
1030 1040
1031#ifdef DOUG_LEA_MALLOC 1041#ifdef DOUG_LEA_MALLOC
1032 /* Back to a reasonable maximum of mmap'ed areas. */ 1042 /* Back to a reasonable maximum of mmap'ed areas. */
@@ -2003,6 +2013,34 @@ INIT must be an integer that represents a character. */)
2003 return val; 2013 return val;
2004} 2014}
2005 2015
2016verify (sizeof (size_t) * CHAR_BIT == BITS_PER_SIZE_T);
2017verify ((BITS_PER_SIZE_T & (BITS_PER_SIZE_T - 1)) == 0);
2018
2019static ptrdiff_t
2020bool_vector_payload_bytes (ptrdiff_t nr_bits,
2021 ptrdiff_t *exact_needed_bytes_out)
2022{
2023 ptrdiff_t exact_needed_bytes;
2024 ptrdiff_t needed_bytes;
2025
2026 eassert_and_assume (nr_bits >= 0);
2027
2028 exact_needed_bytes = ROUNDUP ((size_t) nr_bits, CHAR_BIT) / CHAR_BIT;
2029 needed_bytes = ROUNDUP ((size_t) nr_bits, BITS_PER_SIZE_T) / CHAR_BIT;
2030
2031 if (needed_bytes == 0)
2032 {
2033 /* Always allocate at least one machine word of payload so that
2034 bool-vector operations in data.c don't need a special case
2035 for empty vectors. */
2036 needed_bytes = sizeof (size_t);
2037 }
2038
2039 if (exact_needed_bytes_out != NULL)
2040 *exact_needed_bytes_out = exact_needed_bytes;
2041
2042 return needed_bytes;
2043}
2006 2044
2007DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0, 2045DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2008 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element. 2046 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
@@ -2011,37 +2049,43 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2011{ 2049{
2012 register Lisp_Object val; 2050 register Lisp_Object val;
2013 struct Lisp_Bool_Vector *p; 2051 struct Lisp_Bool_Vector *p;
2014 ptrdiff_t length_in_chars; 2052 ptrdiff_t exact_payload_bytes;
2015 EMACS_INT length_in_elts; 2053 ptrdiff_t total_payload_bytes;
2016 int bits_per_value; 2054 ptrdiff_t needed_elements;
2017 int extra_bool_elts = ((bool_header_size - header_size + word_size - 1)
2018 / word_size);
2019 2055
2020 CHECK_NATNUM (length); 2056 CHECK_NATNUM (length);
2057 if (PTRDIFF_MAX < XFASTINT (length))
2058 memory_full (SIZE_MAX);
2021 2059
2022 bits_per_value = sizeof (EMACS_INT) * BOOL_VECTOR_BITS_PER_CHAR; 2060 total_payload_bytes = bool_vector_payload_bytes
2061 (XFASTINT (length), &exact_payload_bytes);
2023 2062
2024 length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value; 2063 eassert_and_assume (exact_payload_bytes <= total_payload_bytes);
2064 eassert_and_assume (0 <= exact_payload_bytes);
2025 2065
2026 val = Fmake_vector (make_number (length_in_elts + extra_bool_elts), Qnil); 2066 needed_elements = ROUNDUP ((size_t) ((bool_header_size - header_size)
2067 + total_payload_bytes),
2068 word_size) / word_size;
2027 2069
2028 /* No Lisp_Object to trace in there. */ 2070 p = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements);
2071 XSETVECTOR (val, p);
2029 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0); 2072 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0);
2030 2073
2031 p = XBOOL_VECTOR (val);
2032 p->size = XFASTINT (length); 2074 p->size = XFASTINT (length);
2033 2075 if (exact_payload_bytes)
2034 length_in_chars = ((XFASTINT (length) + BOOL_VECTOR_BITS_PER_CHAR - 1)
2035 / BOOL_VECTOR_BITS_PER_CHAR);
2036 if (length_in_chars)
2037 { 2076 {
2038 memset (p->data, ! NILP (init) ? -1 : 0, length_in_chars); 2077 memset (p->data, ! NILP (init) ? -1 : 0, exact_payload_bytes);
2039 2078
2040 /* Clear any extraneous bits in the last byte. */ 2079 /* Clear any extraneous bits in the last byte. */
2041 p->data[length_in_chars - 1] 2080 p->data[exact_payload_bytes - 1]
2042 &= (1 << ((XFASTINT (length) - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1)) - 1; 2081 &= (1 << ((XFASTINT (length) - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1)) - 1;
2043 } 2082 }
2044 2083
2084 /* Clear padding at the end. */
2085 memset (p->data + exact_payload_bytes,
2086 0,
2087 total_payload_bytes - exact_payload_bytes);
2088
2045 return val; 2089 return val;
2046} 2090}
2047 2091
@@ -2567,24 +2611,22 @@ enum
2567 roundup_size = COMMON_MULTIPLE (word_size, USE_LSB_TAG ? GCALIGNMENT : 1) 2611 roundup_size = COMMON_MULTIPLE (word_size, USE_LSB_TAG ? GCALIGNMENT : 1)
2568 }; 2612 };
2569 2613
2570/* ROUNDUP_SIZE must be a power of 2. */
2571verify ((roundup_size & (roundup_size - 1)) == 0);
2572
2573/* Verify assumptions described above. */ 2614/* Verify assumptions described above. */
2574verify ((VECTOR_BLOCK_SIZE % roundup_size) == 0); 2615verify ((VECTOR_BLOCK_SIZE % roundup_size) == 0);
2575verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS)); 2616verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2576 2617
2577/* Round up X to nearest mult-of-ROUNDUP_SIZE. */ 2618/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
2578 2619#define vroundup_ct(x) ROUNDUP ((size_t) (x), roundup_size)
2579#define vroundup(x) (((x) + (roundup_size - 1)) & ~(roundup_size - 1)) 2620/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
2621#define vroundup(x) (assume ((x) >= 0), vroundup_ct (x))
2580 2622
2581/* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */ 2623/* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
2582 2624
2583#define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup (sizeof (void *))) 2625#define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *)))
2584 2626
2585/* Size of the minimal vector allocated from block. */ 2627/* Size of the minimal vector allocated from block. */
2586 2628
2587#define VBLOCK_BYTES_MIN vroundup (header_size + sizeof (Lisp_Object)) 2629#define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object))
2588 2630
2589/* Size of the largest vector allocated from block. */ 2631/* Size of the largest vector allocated from block. */
2590 2632
@@ -2605,22 +2647,6 @@ verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2605 2647
2606#define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size) 2648#define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size)
2607 2649
2608/* Get and set the next field in block-allocated vectorlike objects on
2609 the free list. Doing it this way respects C's aliasing rules.
2610 We could instead make 'contents' a union, but that would mean
2611 changes everywhere that the code uses 'contents'. */
2612static struct Lisp_Vector *
2613next_in_free_list (struct Lisp_Vector *v)
2614{
2615 intptr_t i = XLI (v->contents[0]);
2616 return (struct Lisp_Vector *) i;
2617}
2618static void
2619set_next_in_free_list (struct Lisp_Vector *v, struct Lisp_Vector *next)
2620{
2621 v->contents[0] = XIL ((intptr_t) next);
2622}
2623
2624/* Common shortcut to setup vector on a free list. */ 2650/* Common shortcut to setup vector on a free list. */
2625 2651
2626#define SETUP_ON_FREE_LIST(v, nbytes, tmp) \ 2652#define SETUP_ON_FREE_LIST(v, nbytes, tmp) \
@@ -2630,7 +2656,7 @@ set_next_in_free_list (struct Lisp_Vector *v, struct Lisp_Vector *next)
2630 eassert ((nbytes) % roundup_size == 0); \ 2656 eassert ((nbytes) % roundup_size == 0); \
2631 (tmp) = VINDEX (nbytes); \ 2657 (tmp) = VINDEX (nbytes); \
2632 eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \ 2658 eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \
2633 set_next_in_free_list (v, vector_free_lists[tmp]); \ 2659 v->u.next = vector_free_lists[tmp]; \
2634 vector_free_lists[tmp] = (v); \ 2660 vector_free_lists[tmp] = (v); \
2635 total_free_vector_slots += (nbytes) / word_size; \ 2661 total_free_vector_slots += (nbytes) / word_size; \
2636 } while (0) 2662 } while (0)
@@ -2644,7 +2670,7 @@ struct large_vector
2644 struct large_vector *vector; 2670 struct large_vector *vector;
2645#if USE_LSB_TAG 2671#if USE_LSB_TAG
2646 /* We need to maintain ROUNDUP_SIZE alignment for the vector member. */ 2672 /* We need to maintain ROUNDUP_SIZE alignment for the vector member. */
2647 unsigned char c[vroundup (sizeof (struct large_vector *))]; 2673 unsigned char c[vroundup_ct (sizeof (struct large_vector *))];
2648#endif 2674#endif
2649 } next; 2675 } next;
2650 struct Lisp_Vector v; 2676 struct Lisp_Vector v;
@@ -2727,7 +2753,7 @@ allocate_vector_from_block (size_t nbytes)
2727 if (vector_free_lists[index]) 2753 if (vector_free_lists[index])
2728 { 2754 {
2729 vector = vector_free_lists[index]; 2755 vector = vector_free_lists[index];
2730 vector_free_lists[index] = next_in_free_list (vector); 2756 vector_free_lists[index] = vector->u.next;
2731 total_free_vector_slots -= nbytes / word_size; 2757 total_free_vector_slots -= nbytes / word_size;
2732 return vector; 2758 return vector;
2733 } 2759 }
@@ -2741,7 +2767,7 @@ allocate_vector_from_block (size_t nbytes)
2741 { 2767 {
2742 /* This vector is larger than requested. */ 2768 /* This vector is larger than requested. */
2743 vector = vector_free_lists[index]; 2769 vector = vector_free_lists[index];
2744 vector_free_lists[index] = next_in_free_list (vector); 2770 vector_free_lists[index] = vector->u.next;
2745 total_free_vector_slots -= nbytes / word_size; 2771 total_free_vector_slots -= nbytes / word_size;
2746 2772
2747 /* Excess bytes are used for the smaller vector, 2773 /* Excess bytes are used for the smaller vector,
@@ -2785,10 +2811,14 @@ vector_nbytes (struct Lisp_Vector *v)
2785 if (size & PSEUDOVECTOR_FLAG) 2811 if (size & PSEUDOVECTOR_FLAG)
2786 { 2812 {
2787 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR)) 2813 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR))
2788 size = (bool_header_size 2814 {
2789 + (((struct Lisp_Bool_Vector *) v)->size 2815 struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v;
2790 + BOOL_VECTOR_BITS_PER_CHAR - 1) 2816 ptrdiff_t payload_bytes =
2791 / BOOL_VECTOR_BITS_PER_CHAR); 2817 bool_vector_payload_bytes (bv->size, NULL);
2818
2819 eassert_and_assume (payload_bytes >= 0);
2820 size = bool_header_size + ROUNDUP (payload_bytes, word_size);
2821 }
2792 else 2822 else
2793 size = (header_size 2823 size = (header_size
2794 + ((size & PSEUDOVECTOR_SIZE_MASK) 2824 + ((size & PSEUDOVECTOR_SIZE_MASK)
@@ -2859,7 +2889,7 @@ sweep_vectors (void)
2859 free_this_block = 1; 2889 free_this_block = 1;
2860 else 2890 else
2861 { 2891 {
2862 int tmp; 2892 size_t tmp;
2863 SETUP_ON_FREE_LIST (vector, total_bytes, tmp); 2893 SETUP_ON_FREE_LIST (vector, total_bytes, tmp);
2864 } 2894 }
2865 } 2895 }
@@ -2888,17 +2918,11 @@ sweep_vectors (void)
2888 total_vectors++; 2918 total_vectors++;
2889 if (vector->header.size & PSEUDOVECTOR_FLAG) 2919 if (vector->header.size & PSEUDOVECTOR_FLAG)
2890 { 2920 {
2891 struct Lisp_Bool_Vector *b = (struct Lisp_Bool_Vector *) vector;
2892
2893 /* All non-bool pseudovectors are small enough to be allocated 2921 /* All non-bool pseudovectors are small enough to be allocated
2894 from vector blocks. This code should be redesigned if some 2922 from vector blocks. This code should be redesigned if some
2895 pseudovector type grows beyond VBLOCK_BYTES_MAX. */ 2923 pseudovector type grows beyond VBLOCK_BYTES_MAX. */
2896 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR)); 2924 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR));
2897 2925 total_vector_slots += vector_nbytes (vector) / word_size;
2898 total_vector_slots
2899 += (bool_header_size
2900 + ((b->size + BOOL_VECTOR_BITS_PER_CHAR - 1)
2901 / BOOL_VECTOR_BITS_PER_CHAR)) / word_size;
2902 } 2926 }
2903 else 2927 else
2904 total_vector_slots 2928 total_vector_slots
@@ -2941,7 +2965,7 @@ allocate_vectorlike (ptrdiff_t len)
2941 else 2965 else
2942 { 2966 {
2943 struct large_vector *lv 2967 struct large_vector *lv
2944 = lisp_malloc ((offsetof (struct large_vector, v.contents) 2968 = lisp_malloc ((offsetof (struct large_vector, v.u.contents)
2945 + len * word_size), 2969 + len * word_size),
2946 MEM_TYPE_VECTORLIKE); 2970 MEM_TYPE_VECTORLIKE);
2947 lv->next.vector = large_vectors; 2971 lv->next.vector = large_vectors;
@@ -2995,7 +3019,7 @@ allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag)
2995 3019
2996 /* Only the first lisplen slots will be traced normally by the GC. */ 3020 /* Only the first lisplen slots will be traced normally by the GC. */
2997 for (i = 0; i < lisplen; ++i) 3021 for (i = 0; i < lisplen; ++i)
2998 v->contents[i] = Qnil; 3022 v->u.contents[i] = Qnil;
2999 3023
3000 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); 3024 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3001 return v; 3025 return v;
@@ -3083,7 +3107,7 @@ See also the function `vector'. */)
3083 p = allocate_vector (XFASTINT (length)); 3107 p = allocate_vector (XFASTINT (length));
3084 sizei = XFASTINT (length); 3108 sizei = XFASTINT (length);
3085 for (i = 0; i < sizei; i++) 3109 for (i = 0; i < sizei; i++)
3086 p->contents[i] = init; 3110 p->u.contents[i] = init;
3087 3111
3088 XSETVECTOR (vector, p); 3112 XSETVECTOR (vector, p);
3089 return vector; 3113 return vector;
@@ -3101,21 +3125,23 @@ usage: (vector &rest OBJECTS) */)
3101 register struct Lisp_Vector *p = XVECTOR (val); 3125 register struct Lisp_Vector *p = XVECTOR (val);
3102 3126
3103 for (i = 0; i < nargs; i++) 3127 for (i = 0; i < nargs; i++)
3104 p->contents[i] = args[i]; 3128 p->u.contents[i] = args[i];
3105 return val; 3129 return val;
3106} 3130}
3107 3131
3108void 3132void
3109make_byte_code (struct Lisp_Vector *v) 3133make_byte_code (struct Lisp_Vector *v)
3110{ 3134{
3111 if (v->header.size > 1 && STRINGP (v->contents[1]) 3135 /* Don't allow the global zero_vector to become a byte code object. */
3112 && STRING_MULTIBYTE (v->contents[1])) 3136 eassert(0 < v->header.size);
3137 if (v->header.size > 1 && STRINGP (v->u.contents[1])
3138 && STRING_MULTIBYTE (v->u.contents[1]))
3113 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the 3139 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3114 earlier because they produced a raw 8-bit string for byte-code 3140 earlier because they produced a raw 8-bit string for byte-code
3115 and now such a byte-code string is loaded as multibyte while 3141 and now such a byte-code string is loaded as multibyte while
3116 raw 8-bit characters converted to multibyte form. Thus, now we 3142 raw 8-bit characters converted to multibyte form. Thus, now we
3117 must convert them back to the original unibyte form. */ 3143 must convert them back to the original unibyte form. */
3118 v->contents[1] = Fstring_as_unibyte (v->contents[1]); 3144 v->u.contents[1] = Fstring_as_unibyte (v->u.contents[1]);
3119 XSETPVECTYPE (v, PVEC_COMPILED); 3145 XSETPVECTYPE (v, PVEC_COMPILED);
3120} 3146}
3121 3147
@@ -3150,7 +3176,7 @@ usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INT
3150 to be setcar'd). */ 3176 to be setcar'd). */
3151 3177
3152 for (i = 0; i < nargs; i++) 3178 for (i = 0; i < nargs; i++)
3153 p->contents[i] = args[i]; 3179 p->u.contents[i] = args[i];
3154 make_byte_code (p); 3180 make_byte_code (p);
3155 XSETCOMPILED (val, p); 3181 XSETCOMPILED (val, p);
3156 return val; 3182 return val;
@@ -4296,6 +4322,11 @@ mark_maybe_object (Lisp_Object obj)
4296 void *po; 4322 void *po;
4297 struct mem_node *m; 4323 struct mem_node *m;
4298 4324
4325#if USE_VALGRIND
4326 if (valgrind_p)
4327 VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
4328#endif
4329
4299 if (INTEGERP (obj)) 4330 if (INTEGERP (obj))
4300 return; 4331 return;
4301 4332
@@ -4364,6 +4395,11 @@ mark_maybe_pointer (void *p)
4364{ 4395{
4365 struct mem_node *m; 4396 struct mem_node *m;
4366 4397
4398#if USE_VALGRIND
4399 if (valgrind_p)
4400 VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
4401#endif
4402
4367 /* Quickly rule out some values which can't point to Lisp data. 4403 /* Quickly rule out some values which can't point to Lisp data.
4368 USE_LSB_TAG needs Lisp data to be aligned on multiples of GCALIGNMENT. 4404 USE_LSB_TAG needs Lisp data to be aligned on multiples of GCALIGNMENT.
4369 Otherwise, assume that Lisp data is aligned on even addresses. */ 4405 Otherwise, assume that Lisp data is aligned on even addresses. */
@@ -5131,7 +5167,7 @@ Does not copy symbols. Copies strings without text properties. */)
5131 size &= PSEUDOVECTOR_SIZE_MASK; 5167 size &= PSEUDOVECTOR_SIZE_MASK;
5132 vec = XVECTOR (make_pure_vector (size)); 5168 vec = XVECTOR (make_pure_vector (size));
5133 for (i = 0; i < size; i++) 5169 for (i = 0; i < size; i++)
5134 vec->contents[i] = Fpurecopy (AREF (obj, i)); 5170 vec->u.contents[i] = Fpurecopy (AREF (obj, i));
5135 if (COMPILEDP (obj)) 5171 if (COMPILEDP (obj))
5136 { 5172 {
5137 XSETPVECTYPE (vec, PVEC_COMPILED); 5173 XSETPVECTYPE (vec, PVEC_COMPILED);
@@ -5622,7 +5658,7 @@ mark_vectorlike (struct Lisp_Vector *ptr)
5622 The distinction is used e.g. by Lisp_Process which places extra 5658 The distinction is used e.g. by Lisp_Process which places extra
5623 non-Lisp_Object fields at the end of the structure... */ 5659 non-Lisp_Object fields at the end of the structure... */
5624 for (i = 0; i < size; i++) /* ...and then mark its elements. */ 5660 for (i = 0; i < size; i++) /* ...and then mark its elements. */
5625 mark_object (ptr->contents[i]); 5661 mark_object (ptr->u.contents[i]);
5626} 5662}
5627 5663
5628/* Like mark_vectorlike but optimized for char-tables (and 5664/* Like mark_vectorlike but optimized for char-tables (and
@@ -5639,7 +5675,7 @@ mark_char_table (struct Lisp_Vector *ptr)
5639 VECTOR_MARK (ptr); 5675 VECTOR_MARK (ptr);
5640 for (i = 0; i < size; i++) 5676 for (i = 0; i < size; i++)
5641 { 5677 {
5642 Lisp_Object val = ptr->contents[i]; 5678 Lisp_Object val = ptr->u.contents[i];
5643 5679
5644 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit)) 5680 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit))
5645 continue; 5681 continue;
@@ -5844,10 +5880,10 @@ mark_object (Lisp_Object arg)
5844 VECTOR_MARK (ptr); 5880 VECTOR_MARK (ptr);
5845 for (i = 0; i < size; i++) 5881 for (i = 0; i < size; i++)
5846 if (i != COMPILED_CONSTANTS) 5882 if (i != COMPILED_CONSTANTS)
5847 mark_object (ptr->contents[i]); 5883 mark_object (ptr->u.contents[i]);
5848 if (size > COMPILED_CONSTANTS) 5884 if (size > COMPILED_CONSTANTS)
5849 { 5885 {
5850 obj = ptr->contents[COMPILED_CONSTANTS]; 5886 obj = ptr->u.contents[COMPILED_CONSTANTS];
5851 goto loop; 5887 goto loop;
5852 } 5888 }
5853 } 5889 }
@@ -6612,6 +6648,10 @@ init_alloc (void)
6612#endif 6648#endif
6613 Vgc_elapsed = make_float (0.0); 6649 Vgc_elapsed = make_float (0.0);
6614 gcs_done = 0; 6650 gcs_done = 0;
6651
6652#if USE_VALGRIND
6653 valgrind_p = RUNNING_ON_VALGRIND != 0;
6654#endif
6615} 6655}
6616 6656
6617void 6657void
diff --git a/src/bidi.c b/src/bidi.c
index 7d082a94997..dc905cd9e5f 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -870,8 +870,8 @@ bidi_line_init (struct bidi_it *bidi_it)
870 are zero-based character positions in S, BEGBYTE is byte position 870 are zero-based character positions in S, BEGBYTE is byte position
871 corresponding to BEG. UNIBYTE means S is a unibyte string. */ 871 corresponding to BEG. UNIBYTE means S is a unibyte string. */
872static ptrdiff_t 872static ptrdiff_t
873bidi_count_bytes (const unsigned char *s, const ptrdiff_t beg, 873bidi_count_bytes (const unsigned char *s, ptrdiff_t beg,
874 const ptrdiff_t begbyte, const ptrdiff_t end, bool unibyte) 874 ptrdiff_t begbyte, ptrdiff_t end, bool unibyte)
875{ 875{
876 ptrdiff_t pos = beg; 876 ptrdiff_t pos = beg;
877 const unsigned char *p = s + begbyte, *start = p; 877 const unsigned char *p = s + begbyte, *start = p;
diff --git a/src/blockinput.h b/src/blockinput.h
index 6dc22c6f5dd..8f1b1e18985 100644
--- a/src/blockinput.h
+++ b/src/blockinput.h
@@ -20,9 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20#define EMACS_BLOCKINPUT_H 20#define EMACS_BLOCKINPUT_H
21 21
22INLINE_HEADER_BEGIN 22INLINE_HEADER_BEGIN
23#ifndef BLOCKINPUT_INLINE
24# define BLOCKINPUT_INLINE INLINE
25#endif
26 23
27/* Emacs should avoid doing anything hairy in a signal handler, because 24/* Emacs should avoid doing anything hairy in a signal handler, because
28 so many system functions are non-reentrant. For example, malloc 25 so many system functions are non-reentrant. For example, malloc
@@ -52,7 +49,7 @@ extern volatile int interrupt_input_blocked;
52 49
53/* Begin critical section. */ 50/* Begin critical section. */
54 51
55BLOCKINPUT_INLINE void 52INLINE void
56block_input (void) 53block_input (void)
57{ 54{
58 interrupt_input_blocked++; 55 interrupt_input_blocked++;
@@ -64,7 +61,7 @@ extern void unblock_input_to (int);
64 61
65/* In critical section ? */ 62/* In critical section ? */
66 63
67BLOCKINPUT_INLINE bool 64INLINE bool
68input_blocked_p (void) 65input_blocked_p (void)
69{ 66{
70 return interrupt_input_blocked > 0; 67 return interrupt_input_blocked > 0;
diff --git a/src/buffer.c b/src/buffer.c
index 0bcb608dbd3..1570f3831ac 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -20,8 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define BUFFER_INLINE EXTERN_INLINE
24
25#include <sys/types.h> 23#include <sys/types.h>
26#include <sys/stat.h> 24#include <sys/stat.h>
27#include <sys/param.h> 25#include <sys/param.h>
@@ -4536,7 +4534,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, bool after,
4536 Lisp_Object *copy = alloca (size * sizeof *copy); 4534 Lisp_Object *copy = alloca (size * sizeof *copy);
4537 ptrdiff_t i; 4535 ptrdiff_t i;
4538 4536
4539 memcpy (copy, XVECTOR (last_overlay_modification_hooks)->contents, 4537 memcpy (copy, XVECTOR (last_overlay_modification_hooks)->u.contents,
4540 size * word_size); 4538 size * word_size);
4541 gcpro1.var = copy; 4539 gcpro1.var = copy;
4542 gcpro1.nvars = size; 4540 gcpro1.nvars = size;
@@ -5900,7 +5898,7 @@ See also the functions `display-table-slot' and `set-display-table-slot'. */);
5900 5898
5901 DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer, left_margin_cols), 5899 DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer, left_margin_cols),
5902 Qintegerp, 5900 Qintegerp,
5903 doc: /* Width of left marginal area for display of a buffer. 5901 doc: /* Width in columns of left marginal area for display of a buffer.
5904A value of nil means no marginal area. 5902A value of nil means no marginal area.
5905 5903
5906Setting this variable does not take effect until a new buffer is displayed 5904Setting this variable does not take effect until a new buffer is displayed
@@ -5908,7 +5906,7 @@ in a window. To make the change take effect, call `set-window-buffer'. */);
5908 5906
5909 DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer, right_margin_cols), 5907 DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer, right_margin_cols),
5910 Qintegerp, 5908 Qintegerp,
5911 doc: /* Width of right marginal area for display of a buffer. 5909 doc: /* Width in columns of right marginal area for display of a buffer.
5912A value of nil means no marginal area. 5910A value of nil means no marginal area.
5913 5911
5914Setting this variable does not take effect until a new buffer is displayed 5912Setting this variable does not take effect until a new buffer is displayed
diff --git a/src/buffer.h b/src/buffer.h
index 169a15c7d0f..a36c0d13c9e 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -22,9 +22,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
22#include <time.h> 22#include <time.h>
23 23
24INLINE_HEADER_BEGIN 24INLINE_HEADER_BEGIN
25#ifndef BUFFER_INLINE
26# define BUFFER_INLINE INLINE
27#endif
28 25
29/* Accessing the parameters of the current buffer. */ 26/* Accessing the parameters of the current buffer. */
30 27
@@ -875,97 +872,97 @@ struct buffer
875 872
876/* Most code should use these functions to set Lisp fields in struct 873/* Most code should use these functions to set Lisp fields in struct
877 buffer. */ 874 buffer. */
878BUFFER_INLINE void 875INLINE void
879bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val) 876bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val)
880{ 877{
881 b->INTERNAL_FIELD (bidi_paragraph_direction) = val; 878 b->INTERNAL_FIELD (bidi_paragraph_direction) = val;
882} 879}
883BUFFER_INLINE void 880INLINE void
884bset_case_canon_table (struct buffer *b, Lisp_Object val) 881bset_case_canon_table (struct buffer *b, Lisp_Object val)
885{ 882{
886 b->INTERNAL_FIELD (case_canon_table) = val; 883 b->INTERNAL_FIELD (case_canon_table) = val;
887} 884}
888BUFFER_INLINE void 885INLINE void
889bset_case_eqv_table (struct buffer *b, Lisp_Object val) 886bset_case_eqv_table (struct buffer *b, Lisp_Object val)
890{ 887{
891 b->INTERNAL_FIELD (case_eqv_table) = val; 888 b->INTERNAL_FIELD (case_eqv_table) = val;
892} 889}
893BUFFER_INLINE void 890INLINE void
894bset_directory (struct buffer *b, Lisp_Object val) 891bset_directory (struct buffer *b, Lisp_Object val)
895{ 892{
896 b->INTERNAL_FIELD (directory) = val; 893 b->INTERNAL_FIELD (directory) = val;
897} 894}
898BUFFER_INLINE void 895INLINE void
899bset_display_count (struct buffer *b, Lisp_Object val) 896bset_display_count (struct buffer *b, Lisp_Object val)
900{ 897{
901 b->INTERNAL_FIELD (display_count) = val; 898 b->INTERNAL_FIELD (display_count) = val;
902} 899}
903BUFFER_INLINE void 900INLINE void
904bset_display_time (struct buffer *b, Lisp_Object val) 901bset_display_time (struct buffer *b, Lisp_Object val)
905{ 902{
906 b->INTERNAL_FIELD (display_time) = val; 903 b->INTERNAL_FIELD (display_time) = val;
907} 904}
908BUFFER_INLINE void 905INLINE void
909bset_downcase_table (struct buffer *b, Lisp_Object val) 906bset_downcase_table (struct buffer *b, Lisp_Object val)
910{ 907{
911 b->INTERNAL_FIELD (downcase_table) = val; 908 b->INTERNAL_FIELD (downcase_table) = val;
912} 909}
913BUFFER_INLINE void 910INLINE void
914bset_enable_multibyte_characters (struct buffer *b, Lisp_Object val) 911bset_enable_multibyte_characters (struct buffer *b, Lisp_Object val)
915{ 912{
916 b->INTERNAL_FIELD (enable_multibyte_characters) = val; 913 b->INTERNAL_FIELD (enable_multibyte_characters) = val;
917} 914}
918BUFFER_INLINE void 915INLINE void
919bset_filename (struct buffer *b, Lisp_Object val) 916bset_filename (struct buffer *b, Lisp_Object val)
920{ 917{
921 b->INTERNAL_FIELD (filename) = val; 918 b->INTERNAL_FIELD (filename) = val;
922} 919}
923BUFFER_INLINE void 920INLINE void
924bset_keymap (struct buffer *b, Lisp_Object val) 921bset_keymap (struct buffer *b, Lisp_Object val)
925{ 922{
926 b->INTERNAL_FIELD (keymap) = val; 923 b->INTERNAL_FIELD (keymap) = val;
927} 924}
928BUFFER_INLINE void 925INLINE void
929bset_last_selected_window (struct buffer *b, Lisp_Object val) 926bset_last_selected_window (struct buffer *b, Lisp_Object val)
930{ 927{
931 b->INTERNAL_FIELD (last_selected_window) = val; 928 b->INTERNAL_FIELD (last_selected_window) = val;
932} 929}
933BUFFER_INLINE void 930INLINE void
934bset_local_var_alist (struct buffer *b, Lisp_Object val) 931bset_local_var_alist (struct buffer *b, Lisp_Object val)
935{ 932{
936 b->INTERNAL_FIELD (local_var_alist) = val; 933 b->INTERNAL_FIELD (local_var_alist) = val;
937} 934}
938BUFFER_INLINE void 935INLINE void
939bset_mark_active (struct buffer *b, Lisp_Object val) 936bset_mark_active (struct buffer *b, Lisp_Object val)
940{ 937{
941 b->INTERNAL_FIELD (mark_active) = val; 938 b->INTERNAL_FIELD (mark_active) = val;
942} 939}
943BUFFER_INLINE void 940INLINE void
944bset_point_before_scroll (struct buffer *b, Lisp_Object val) 941bset_point_before_scroll (struct buffer *b, Lisp_Object val)
945{ 942{
946 b->INTERNAL_FIELD (point_before_scroll) = val; 943 b->INTERNAL_FIELD (point_before_scroll) = val;
947} 944}
948BUFFER_INLINE void 945INLINE void
949bset_read_only (struct buffer *b, Lisp_Object val) 946bset_read_only (struct buffer *b, Lisp_Object val)
950{ 947{
951 b->INTERNAL_FIELD (read_only) = val; 948 b->INTERNAL_FIELD (read_only) = val;
952} 949}
953BUFFER_INLINE void 950INLINE void
954bset_truncate_lines (struct buffer *b, Lisp_Object val) 951bset_truncate_lines (struct buffer *b, Lisp_Object val)
955{ 952{
956 b->INTERNAL_FIELD (truncate_lines) = val; 953 b->INTERNAL_FIELD (truncate_lines) = val;
957} 954}
958BUFFER_INLINE void 955INLINE void
959bset_undo_list (struct buffer *b, Lisp_Object val) 956bset_undo_list (struct buffer *b, Lisp_Object val)
960{ 957{
961 b->INTERNAL_FIELD (undo_list) = val; 958 b->INTERNAL_FIELD (undo_list) = val;
962} 959}
963BUFFER_INLINE void 960INLINE void
964bset_upcase_table (struct buffer *b, Lisp_Object val) 961bset_upcase_table (struct buffer *b, Lisp_Object val)
965{ 962{
966 b->INTERNAL_FIELD (upcase_table) = val; 963 b->INTERNAL_FIELD (upcase_table) = val;
967} 964}
968BUFFER_INLINE void 965INLINE void
969bset_width_table (struct buffer *b, Lisp_Object val) 966bset_width_table (struct buffer *b, Lisp_Object val)
970{ 967{
971 b->INTERNAL_FIELD (width_table) = val; 968 b->INTERNAL_FIELD (width_table) = val;
@@ -1089,7 +1086,7 @@ extern void set_buffer_if_live (Lisp_Object);
1089 windows than the selected one requires a select_window at some 1086 windows than the selected one requires a select_window at some
1090 time, and that increments windows_or_buffers_changed. */ 1087 time, and that increments windows_or_buffers_changed. */
1091 1088
1092BUFFER_INLINE void 1089INLINE void
1093set_buffer_internal (struct buffer *b) 1090set_buffer_internal (struct buffer *b)
1094{ 1091{
1095 if (current_buffer != b) 1092 if (current_buffer != b)
@@ -1099,7 +1096,7 @@ set_buffer_internal (struct buffer *b)
1099/* Arrange to go back to the original buffer after the next 1096/* Arrange to go back to the original buffer after the next
1100 call to unbind_to if the original buffer is still alive. */ 1097 call to unbind_to if the original buffer is still alive. */
1101 1098
1102BUFFER_INLINE void 1099INLINE void
1103record_unwind_current_buffer (void) 1100record_unwind_current_buffer (void)
1104{ 1101{
1105 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ()); 1102 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
@@ -1138,7 +1135,7 @@ extern Lisp_Object Qpriority, Qbefore_string, Qafter_string;
1138 1135
1139/* Get text properties of B. */ 1136/* Get text properties of B. */
1140 1137
1141BUFFER_INLINE INTERVAL 1138INLINE INTERVAL
1142buffer_intervals (struct buffer *b) 1139buffer_intervals (struct buffer *b)
1143{ 1140{
1144 eassert (b->text != NULL); 1141 eassert (b->text != NULL);
@@ -1147,7 +1144,7 @@ buffer_intervals (struct buffer *b)
1147 1144
1148/* Set text properties of B to I. */ 1145/* Set text properties of B to I. */
1149 1146
1150BUFFER_INLINE void 1147INLINE void
1151set_buffer_intervals (struct buffer *b, INTERVAL i) 1148set_buffer_intervals (struct buffer *b, INTERVAL i)
1152{ 1149{
1153 eassert (b->text != NULL); 1150 eassert (b->text != NULL);
@@ -1156,7 +1153,7 @@ set_buffer_intervals (struct buffer *b, INTERVAL i)
1156 1153
1157/* Non-zero if current buffer has overlays. */ 1154/* Non-zero if current buffer has overlays. */
1158 1155
1159BUFFER_INLINE bool 1156INLINE bool
1160buffer_has_overlays (void) 1157buffer_has_overlays (void)
1161{ 1158{
1162 return current_buffer->overlays_before || current_buffer->overlays_after; 1159 return current_buffer->overlays_before || current_buffer->overlays_after;
@@ -1176,7 +1173,7 @@ buffer_has_overlays (void)
1176 the buffer to the next character after fetching this one. Instead, 1173 the buffer to the next character after fetching this one. Instead,
1177 use either FETCH_CHAR_ADVANCE or STRING_CHAR_AND_LENGTH. */ 1174 use either FETCH_CHAR_ADVANCE or STRING_CHAR_AND_LENGTH. */
1178 1175
1179BUFFER_INLINE int 1176INLINE int
1180FETCH_MULTIBYTE_CHAR (ptrdiff_t pos) 1177FETCH_MULTIBYTE_CHAR (ptrdiff_t pos)
1181{ 1178{
1182 unsigned char *p = ((pos >= GPT_BYTE ? GAP_SIZE : 0) 1179 unsigned char *p = ((pos >= GPT_BYTE ? GAP_SIZE : 0)
@@ -1188,7 +1185,7 @@ FETCH_MULTIBYTE_CHAR (ptrdiff_t pos)
1188 If POS doesn't point the head of valid multi-byte form, only the byte at 1185 If POS doesn't point the head of valid multi-byte form, only the byte at
1189 POS is returned. No range checking. */ 1186 POS is returned. No range checking. */
1190 1187
1191BUFFER_INLINE int 1188INLINE int
1192BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos) 1189BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos)
1193{ 1190{
1194 unsigned char *p 1191 unsigned char *p
@@ -1199,7 +1196,7 @@ BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos)
1199 1196
1200/* Return number of windows showing B. */ 1197/* Return number of windows showing B. */
1201 1198
1202BUFFER_INLINE int 1199INLINE int
1203buffer_window_count (struct buffer *b) 1200buffer_window_count (struct buffer *b)
1204{ 1201{
1205 if (b->base_buffer) 1202 if (b->base_buffer)
@@ -1306,13 +1303,13 @@ extern int last_per_buffer_idx;
1306/* Functions to get and set default value of the per-buffer 1303/* Functions to get and set default value of the per-buffer
1307 variable at offset OFFSET in the buffer structure. */ 1304 variable at offset OFFSET in the buffer structure. */
1308 1305
1309BUFFER_INLINE Lisp_Object 1306INLINE Lisp_Object
1310per_buffer_default (int offset) 1307per_buffer_default (int offset)
1311{ 1308{
1312 return *(Lisp_Object *)(offset + (char *) &buffer_defaults); 1309 return *(Lisp_Object *)(offset + (char *) &buffer_defaults);
1313} 1310}
1314 1311
1315BUFFER_INLINE void 1312INLINE void
1316set_per_buffer_default (int offset, Lisp_Object value) 1313set_per_buffer_default (int offset, Lisp_Object value)
1317{ 1314{
1318 *(Lisp_Object *)(offset + (char *) &buffer_defaults) = value; 1315 *(Lisp_Object *)(offset + (char *) &buffer_defaults) = value;
@@ -1321,20 +1318,20 @@ set_per_buffer_default (int offset, Lisp_Object value)
1321/* Functions to get and set buffer-local value of the per-buffer 1318/* Functions to get and set buffer-local value of the per-buffer
1322 variable at offset OFFSET in the buffer structure. */ 1319 variable at offset OFFSET in the buffer structure. */
1323 1320
1324BUFFER_INLINE Lisp_Object 1321INLINE Lisp_Object
1325per_buffer_value (struct buffer *b, int offset) 1322per_buffer_value (struct buffer *b, int offset)
1326{ 1323{
1327 return *(Lisp_Object *)(offset + (char *) b); 1324 return *(Lisp_Object *)(offset + (char *) b);
1328} 1325}
1329 1326
1330BUFFER_INLINE void 1327INLINE void
1331set_per_buffer_value (struct buffer *b, int offset, Lisp_Object value) 1328set_per_buffer_value (struct buffer *b, int offset, Lisp_Object value)
1332{ 1329{
1333 *(Lisp_Object *)(offset + (char *) b) = value; 1330 *(Lisp_Object *)(offset + (char *) b) = value;
1334} 1331}
1335 1332
1336/* Downcase a character C, or make no change if that cannot be done. */ 1333/* Downcase a character C, or make no change if that cannot be done. */
1337BUFFER_INLINE int 1334INLINE int
1338downcase (int c) 1335downcase (int c)
1339{ 1336{
1340 Lisp_Object downcase_table = BVAR (current_buffer, downcase_table); 1337 Lisp_Object downcase_table = BVAR (current_buffer, downcase_table);
@@ -1343,10 +1340,10 @@ downcase (int c)
1343} 1340}
1344 1341
1345/* 1 if C is upper case. */ 1342/* 1 if C is upper case. */
1346BUFFER_INLINE bool uppercasep (int c) { return downcase (c) != c; } 1343INLINE bool uppercasep (int c) { return downcase (c) != c; }
1347 1344
1348/* Upcase a character C known to be not upper case. */ 1345/* Upcase a character C known to be not upper case. */
1349BUFFER_INLINE int 1346INLINE int
1350upcase1 (int c) 1347upcase1 (int c)
1351{ 1348{
1352 Lisp_Object upcase_table = BVAR (current_buffer, upcase_table); 1349 Lisp_Object upcase_table = BVAR (current_buffer, upcase_table);
@@ -1355,13 +1352,13 @@ upcase1 (int c)
1355} 1352}
1356 1353
1357/* 1 if C is lower case. */ 1354/* 1 if C is lower case. */
1358BUFFER_INLINE bool 1355INLINE bool
1359lowercasep (int c) 1356lowercasep (int c)
1360{ 1357{
1361 return !uppercasep (c) && upcase1 (c) != c; 1358 return !uppercasep (c) && upcase1 (c) != c;
1362} 1359}
1363 1360
1364/* Upcase a character C, or make no change if that cannot be done. */ 1361/* Upcase a character C, or make no change if that cannot be done. */
1365BUFFER_INLINE int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); } 1362INLINE int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); }
1366 1363
1367INLINE_HEADER_END 1364INLINE_HEADER_END
diff --git a/src/bytecode.c b/src/bytecode.c
index e0e7b22ea13..23e50826633 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -536,7 +536,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
536#ifdef BYTE_CODE_SAFE 536#ifdef BYTE_CODE_SAFE
537 bytestr_length = SBYTES (bytestr); 537 bytestr_length = SBYTES (bytestr);
538#endif 538#endif
539 vectorp = XVECTOR (vector)->contents; 539 vectorp = XVECTOR (vector)->u.contents;
540 540
541 stack.byte_string = bytestr; 541 stack.byte_string = bytestr;
542 stack.pc = stack.byte_string_start = SDATA (bytestr); 542 stack.pc = stack.byte_string_start = SDATA (bytestr);
@@ -1367,7 +1367,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1367 Lisp_Object v1; 1367 Lisp_Object v1;
1368 BEFORE_POTENTIAL_GC (); 1368 BEFORE_POTENTIAL_GC ();
1369 v1 = POP; 1369 v1 = POP;
1370 TOP = Fgtr (TOP, v1); 1370 TOP = arithcompare (TOP, v1, ARITH_GRTR);
1371 AFTER_POTENTIAL_GC (); 1371 AFTER_POTENTIAL_GC ();
1372 NEXT; 1372 NEXT;
1373 } 1373 }
@@ -1377,7 +1377,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1377 Lisp_Object v1; 1377 Lisp_Object v1;
1378 BEFORE_POTENTIAL_GC (); 1378 BEFORE_POTENTIAL_GC ();
1379 v1 = POP; 1379 v1 = POP;
1380 TOP = Flss (TOP, v1); 1380 TOP = arithcompare (TOP, v1, ARITH_LESS);
1381 AFTER_POTENTIAL_GC (); 1381 AFTER_POTENTIAL_GC ();
1382 NEXT; 1382 NEXT;
1383 } 1383 }
@@ -1387,7 +1387,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1387 Lisp_Object v1; 1387 Lisp_Object v1;
1388 BEFORE_POTENTIAL_GC (); 1388 BEFORE_POTENTIAL_GC ();
1389 v1 = POP; 1389 v1 = POP;
1390 TOP = Fleq (TOP, v1); 1390 TOP = arithcompare (TOP, v1, ARITH_LESS_OR_EQUAL);
1391 AFTER_POTENTIAL_GC (); 1391 AFTER_POTENTIAL_GC ();
1392 NEXT; 1392 NEXT;
1393 } 1393 }
@@ -1397,7 +1397,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1397 Lisp_Object v1; 1397 Lisp_Object v1;
1398 BEFORE_POTENTIAL_GC (); 1398 BEFORE_POTENTIAL_GC ();
1399 v1 = POP; 1399 v1 = POP;
1400 TOP = Fgeq (TOP, v1); 1400 TOP = arithcompare (TOP, v1, ARITH_GRTR_OR_EQUAL);
1401 AFTER_POTENTIAL_GC (); 1401 AFTER_POTENTIAL_GC ();
1402 NEXT; 1402 NEXT;
1403 } 1403 }
diff --git a/src/casetab.c b/src/casetab.c
index b6b1c99c39f..69cd784f4cc 100644
--- a/src/casetab.c
+++ b/src/casetab.c
@@ -205,7 +205,7 @@ set_identity (Lisp_Object table, Lisp_Object c, Lisp_Object elt)
205 from = to = XINT (c); 205 from = to = XINT (c);
206 206
207 to++; 207 to++;
208 lint_assume (to <= MAX_CHAR + 1); 208 assume (to <= MAX_CHAR + 1);
209 for (; from < to; from++) 209 for (; from < to; from++)
210 CHAR_TABLE_SET (table, from, make_number (from)); 210 CHAR_TABLE_SET (table, from, make_number (from));
211 } 211 }
@@ -232,7 +232,7 @@ shuffle (Lisp_Object table, Lisp_Object c, Lisp_Object elt)
232 from = to = XINT (c); 232 from = to = XINT (c);
233 233
234 to++; 234 to++;
235 lint_assume (to <= MAX_CHAR + 1); 235 assume (to <= MAX_CHAR + 1);
236 for (; from < to; from++) 236 for (; from < to; from++)
237 { 237 {
238 Lisp_Object tem = Faref (table, elt); 238 Lisp_Object tem = Faref (table, elt);
diff --git a/src/category.c b/src/category.c
index b28978fb721..da5e81e4709 100644
--- a/src/category.c
+++ b/src/category.c
@@ -30,8 +30,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
30 30
31#include <config.h> 31#include <config.h>
32 32
33#define CATEGORY_INLINE EXTERN_INLINE
34
35#include "lisp.h" 33#include "lisp.h"
36#include "character.h" 34#include "character.h"
37#include "buffer.h" 35#include "buffer.h"
diff --git a/src/category.h b/src/category.h
index 17cd203db45..828dcd1f325 100644
--- a/src/category.h
+++ b/src/category.h
@@ -54,9 +54,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
54 But, for the moment, we are not using this slot. */ 54 But, for the moment, we are not using this slot. */
55 55
56INLINE_HEADER_BEGIN 56INLINE_HEADER_BEGIN
57#ifndef CATEGORY_INLINE
58# define CATEGORY_INLINE INLINE
59#endif
60 57
61#define CATEGORYP(x) RANGED_INTEGERP (0x20, x, 0x7E) 58#define CATEGORYP(x) RANGED_INTEGERP (0x20, x, 0x7E)
62 59
@@ -84,7 +81,7 @@ INLINE_HEADER_BEGIN
84 >> ((category) % 8)) & 1) 81 >> ((category) % 8)) & 1)
85 82
86/* Return true if category set of CH contains CATEGORY. */ 83/* Return true if category set of CH contains CATEGORY. */
87CATEGORY_INLINE bool 84INLINE bool
88CHAR_HAS_CATEGORY (int ch, int category) 85CHAR_HAS_CATEGORY (int ch, int category)
89{ 86{
90 Lisp_Object category_set = CATEGORY_SET (ch); 87 Lisp_Object category_set = CATEGORY_SET (ch);
diff --git a/src/ccl.c b/src/ccl.c
index 8fec18296a6..d1783c25718 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1094,7 +1094,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1094 ccl_prog_stack_struct[stack_idx].ic = ic; 1094 ccl_prog_stack_struct[stack_idx].ic = ic;
1095 ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic; 1095 ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic;
1096 stack_idx++; 1096 stack_idx++;
1097 ccl_prog = XVECTOR (AREF (slot, 1))->contents; 1097 ccl_prog = XVECTOR (AREF (slot, 1))->u.contents;
1098 ic = CCL_HEADER_MAIN; 1098 ic = CCL_HEADER_MAIN;
1099 eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]); 1099 eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]);
1100 } 1100 }
@@ -1936,9 +1936,9 @@ setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog)
1936 return -1; 1936 return -1;
1937 vp = XVECTOR (ccl_prog); 1937 vp = XVECTOR (ccl_prog);
1938 ccl->size = vp->header.size; 1938 ccl->size = vp->header.size;
1939 ccl->prog = vp->contents; 1939 ccl->prog = vp->u.contents;
1940 ccl->eof_ic = XINT (vp->contents[CCL_HEADER_EOF]); 1940 ccl->eof_ic = XINT (vp->u.contents[CCL_HEADER_EOF]);
1941 ccl->buf_magnification = XINT (vp->contents[CCL_HEADER_BUF_MAG]); 1941 ccl->buf_magnification = XINT (vp->u.contents[CCL_HEADER_BUF_MAG]);
1942 if (ccl->idx >= 0) 1942 if (ccl->idx >= 0)
1943 { 1943 {
1944 Lisp_Object slot; 1944 Lisp_Object slot;
diff --git a/src/character.c b/src/character.c
index 6fefb6e8824..9807339a61e 100644
--- a/src/character.c
+++ b/src/character.c
@@ -29,8 +29,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
29#include <config.h> 29#include <config.h>
30#endif 30#endif
31 31
32#define CHARACTER_INLINE EXTERN_INLINE
33
34#include <stdio.h> 32#include <stdio.h>
35 33
36#ifdef emacs 34#ifdef emacs
diff --git a/src/character.h b/src/character.h
index b2cdcb76699..d1b781caa53 100644
--- a/src/character.h
+++ b/src/character.h
@@ -26,9 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
26#include <verify.h> 26#include <verify.h>
27 27
28INLINE_HEADER_BEGIN 28INLINE_HEADER_BEGIN
29#ifndef CHARACTER_INLINE
30# define CHARACTER_INLINE INLINE
31#endif
32 29
33/* character code 1st byte byte sequence 30/* character code 1st byte byte sequence
34 -------------- -------- ------------- 31 -------------- -------- -------------
@@ -558,7 +555,7 @@ INLINE_HEADER_BEGIN
558 555
559#define SANE_TAB_WIDTH(buf) \ 556#define SANE_TAB_WIDTH(buf) \
560 sanitize_tab_width (XFASTINT (BVAR (buf, tab_width))) 557 sanitize_tab_width (XFASTINT (BVAR (buf, tab_width)))
561CHARACTER_INLINE int 558INLINE int
562sanitize_tab_width (EMACS_INT width) 559sanitize_tab_width (EMACS_INT width)
563{ 560{
564 return 0 < width && width <= 1000 ? width : 8; 561 return 0 < width && width <= 1000 ? width : 8;
@@ -579,7 +576,7 @@ sanitize_tab_width (EMACS_INT width)
579 576
580/* Return a non-outlandish value for a character width. */ 577/* Return a non-outlandish value for a character width. */
581 578
582CHARACTER_INLINE int 579INLINE int
583sanitize_char_width (EMACS_INT width) 580sanitize_char_width (EMACS_INT width)
584{ 581{
585 return 0 <= width && width <= 1000 ? width : 1000; 582 return 0 <= width && width <= 1000 ? width : 1000;
@@ -680,7 +677,7 @@ extern Lisp_Object string_escape_byte8 (Lisp_Object);
680 677
681/* Return a translation table of id number ID. */ 678/* Return a translation table of id number ID. */
682#define GET_TRANSLATION_TABLE(id) \ 679#define GET_TRANSLATION_TABLE(id) \
683 (XCDR(XVECTOR(Vtranslation_table_vector)->contents[(id)])) 680 (XCDR (XVECTOR (Vtranslation_table_vector)->u.contents[(id)]))
684 681
685INLINE_HEADER_END 682INLINE_HEADER_END
686 683
diff --git a/src/charset.c b/src/charset.c
index eedf65faa6c..ef040a94605 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -26,8 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
26 26
27#include <config.h> 27#include <config.h>
28 28
29#define CHARSET_INLINE EXTERN_INLINE
30
31#include <errno.h> 29#include <errno.h>
32#include <stdio.h> 30#include <stdio.h>
33#include <unistd.h> 31#include <unistd.h>
@@ -2053,6 +2051,8 @@ CH in the charset. */)
2053 2051
2054DEFUN ("char-charset", Fchar_charset, Schar_charset, 1, 2, 0, 2052DEFUN ("char-charset", Fchar_charset, Schar_charset, 1, 2, 0,
2055 doc: /* Return the charset of highest priority that contains CH. 2053 doc: /* Return the charset of highest priority that contains CH.
2054ASCII characters are an exception: for them, this function always
2055returns `ascii'.
2056If optional 2nd arg RESTRICTION is non-nil, it is a list of charsets 2056If optional 2nd arg RESTRICTION is non-nil, it is a list of charsets
2057from which to find the charset. It may also be a coding system. In 2057from which to find the charset. It may also be a coding system. In
2058that case, find the charset from what supported by that coding system. */) 2058that case, find the charset from what supported by that coding system. */)
diff --git a/src/charset.h b/src/charset.h
index d9a5662e520..6e6a8891b4a 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -30,9 +30,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
30#include <verify.h> 30#include <verify.h>
31 31
32INLINE_HEADER_BEGIN 32INLINE_HEADER_BEGIN
33#ifndef CHARSET_INLINE
34# define CHARSET_INLINE INLINE
35#endif
36 33
37/* Index to arguments of Fdefine_charset_internal. */ 34/* Index to arguments of Fdefine_charset_internal. */
38 35
@@ -331,7 +328,7 @@ extern int emacs_mule_charset[256];
331#define CHARSET_DEUNIFIER(charset) \ 328#define CHARSET_DEUNIFIER(charset) \
332 (CHARSET_ATTR_DEUNIFIER (CHARSET_ATTRIBUTES (charset))) 329 (CHARSET_ATTR_DEUNIFIER (CHARSET_ATTRIBUTES (charset)))
333 330
334CHARSET_INLINE void 331INLINE void
335set_charset_attr (struct charset *charset, enum charset_attr_index idx, 332set_charset_attr (struct charset *charset, enum charset_attr_index idx,
336 Lisp_Object val) 333 Lisp_Object val)
337{ 334{
diff --git a/src/chartab.c b/src/chartab.c
index b7b9590a538..089c4254da6 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -1258,7 +1258,7 @@ uniprop_encode_value_character (Lisp_Object table, Lisp_Object value)
1258static Lisp_Object 1258static Lisp_Object
1259uniprop_encode_value_run_length (Lisp_Object table, Lisp_Object value) 1259uniprop_encode_value_run_length (Lisp_Object table, Lisp_Object value)
1260{ 1260{
1261 Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->contents; 1261 Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->u.contents;
1262 int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]); 1262 int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]);
1263 1263
1264 for (i = 0; i < size; i++) 1264 for (i = 0; i < size; i++)
@@ -1276,7 +1276,7 @@ uniprop_encode_value_run_length (Lisp_Object table, Lisp_Object value)
1276static Lisp_Object 1276static Lisp_Object
1277uniprop_encode_value_numeric (Lisp_Object table, Lisp_Object value) 1277uniprop_encode_value_numeric (Lisp_Object table, Lisp_Object value)
1278{ 1278{
1279 Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->contents; 1279 Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->u.contents;
1280 int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]); 1280 int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]);
1281 1281
1282 CHECK_NUMBER (value); 1282 CHECK_NUMBER (value);
diff --git a/src/composite.c b/src/composite.c
index 28942fe4f74..4f125522e38 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -24,8 +24,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
24 24
25#include <config.h> 25#include <config.h>
26 26
27#define COMPOSITE_INLINE EXTERN_INLINE
28
29#include "lisp.h" 27#include "lisp.h"
30#include "character.h" 28#include "character.h"
31#include "buffer.h" 29#include "buffer.h"
@@ -268,7 +266,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
268 composition_table = xpalloc (composition_table, &composition_table_size, 266 composition_table = xpalloc (composition_table, &composition_table_size,
269 1, -1, sizeof *composition_table); 267 1, -1, sizeof *composition_table);
270 268
271 key_contents = XVECTOR (key)->contents; 269 key_contents = XVECTOR (key)->u.contents;
272 270
273 /* Check if the contents of COMPONENTS are valid if COMPONENTS is a 271 /* Check if the contents of COMPONENTS are valid if COMPONENTS is a
274 vector or a list. It should be a sequence of: 272 vector or a list. It should be a sequence of:
@@ -676,7 +674,7 @@ composition_gstring_put_cache (Lisp_Object gstring, ptrdiff_t len)
676 len = j; 674 len = j;
677 } 675 }
678 676
679 lint_assume (len <= TYPE_MAXIMUM (ptrdiff_t) - 2); 677 assume (len <= TYPE_MAXIMUM (ptrdiff_t) - 2);
680 copy = Fmake_vector (make_number (len + 2), Qnil); 678 copy = Fmake_vector (make_number (len + 2), Qnil);
681 LGSTRING_SET_HEADER (copy, Fcopy_sequence (header)); 679 LGSTRING_SET_HEADER (copy, Fcopy_sequence (header));
682 for (i = 0; i < len; i++) 680 for (i = 0; i < len; i++)
diff --git a/src/composite.h b/src/composite.h
index df170093797..b3ea5cd1ed8 100644
--- a/src/composite.h
+++ b/src/composite.h
@@ -28,9 +28,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
28#include "font.h" 28#include "font.h"
29 29
30INLINE_HEADER_BEGIN 30INLINE_HEADER_BEGIN
31#ifndef COMPOSITE_INLINE
32# define COMPOSITE_INLINE INLINE
33#endif
34 31
35/* Methods to display a sequence of components of a composition. */ 32/* Methods to display a sequence of components of a composition. */
36enum composition_method { 33enum composition_method {
@@ -59,7 +56,7 @@ enum composition_method {
59 They don't check validity of PROP. */ 56 They don't check validity of PROP. */
60 57
61/* Return true if PROP is already registered. */ 58/* Return true if PROP is already registered. */
62COMPOSITE_INLINE bool 59INLINE bool
63composition_registered_p (Lisp_Object prop) 60composition_registered_p (Lisp_Object prop)
64{ 61{
65 return INTEGERP (XCAR (prop)); 62 return INTEGERP (XCAR (prop));
@@ -91,8 +88,8 @@ composition_registered_p (Lisp_Object prop)
91#define COMPOSITION_GLYPH(cmp, n) \ 88#define COMPOSITION_GLYPH(cmp, n) \
92 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ 89 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \
93 ->key_and_value) \ 90 ->key_and_value) \
94 ->contents[cmp->hash_index * 2]) \ 91 ->u.contents[cmp->hash_index * 2]) \
95 ->contents[cmp->method == COMPOSITION_WITH_RULE_ALTCHARS \ 92 ->u.contents[cmp->method == COMPOSITION_WITH_RULE_ALTCHARS \
96 ? (n) * 2 : (n)]) 93 ? (n) * 2 : (n)])
97 94
98/* Return the encoded composition rule to compose the Nth glyph of 95/* Return the encoded composition rule to compose the Nth glyph of
@@ -101,8 +98,8 @@ composition_registered_p (Lisp_Object prop)
101#define COMPOSITION_RULE(cmp, n) \ 98#define COMPOSITION_RULE(cmp, n) \
102 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ 99 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \
103 ->key_and_value) \ 100 ->key_and_value) \
104 ->contents[cmp->hash_index * 2]) \ 101 ->u.contents[cmp->hash_index * 2]) \
105 ->contents[(n) * 2 - 1]) 102 ->u.contents[(n) * 2 - 1])
106 103
107/* Decode encoded composition rule RULE_CODE into GREF (global 104/* Decode encoded composition rule RULE_CODE into GREF (global
108 reference point code), NREF (new ref. point code). Don't check RULE_CODE; 105 reference point code), NREF (new ref. point code). Don't check RULE_CODE;
@@ -207,7 +204,7 @@ extern void compose_text (ptrdiff_t, ptrdiff_t, Lisp_Object, Lisp_Object,
207 204
208/* Return the method of a composition with property PROP. */ 205/* Return the method of a composition with property PROP. */
209 206
210COMPOSITE_INLINE enum composition_method 207INLINE enum composition_method
211composition_method (Lisp_Object prop) 208composition_method (Lisp_Object prop)
212{ 209{
213 if (composition_registered_p (prop)) 210 if (composition_registered_p (prop))
@@ -226,7 +223,7 @@ composition_method (Lisp_Object prop)
226/* Given offsets START and END, return true if PROP is a valid composition 223/* Given offsets START and END, return true if PROP is a valid composition
227 property with length END - START. */ 224 property with length END - START. */
228 225
229COMPOSITE_INLINE bool 226INLINE bool
230composition_valid_p (ptrdiff_t start, ptrdiff_t end, Lisp_Object prop) 227composition_valid_p (ptrdiff_t start, ptrdiff_t end, Lisp_Object prop)
231{ 228{
232 return (CONSP (prop) 229 return (CONSP (prop)
@@ -262,7 +259,7 @@ composition_valid_p (ptrdiff_t start, ptrdiff_t end, Lisp_Object prop)
262#define LGSTRING_GLYPH_LEN(lgs) (ASIZE ((lgs)) - 2) 259#define LGSTRING_GLYPH_LEN(lgs) (ASIZE ((lgs)) - 2)
263#define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 2) 260#define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 2)
264#define LGSTRING_SET_GLYPH(lgs, idx, val) ASET ((lgs), (idx) + 2, (val)) 261#define LGSTRING_SET_GLYPH(lgs, idx, val) ASET ((lgs), (idx) + 2, (val))
265COMPOSITE_INLINE Lisp_Object * 262INLINE Lisp_Object *
266lgstring_glyph_addr (Lisp_Object lgs, ptrdiff_t idx) 263lgstring_glyph_addr (Lisp_Object lgs, ptrdiff_t idx)
267{ 264{
268 return aref_addr (lgs, idx + 2); 265 return aref_addr (lgs, idx + 2);
diff --git a/src/conf_post.h b/src/conf_post.h
index 16714076f6f..0786bdfeb33 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -208,11 +208,8 @@ extern void _DebPrint (const char *fmt, ...);
208 [#include any other .h files first.] 208 [#include any other .h files first.]
209 ... 209 ...
210 INLINE_HEADER_BEGIN 210 INLINE_HEADER_BEGIN
211 #ifndef FOO_INLINE
212 # define FOO_INLINE INLINE
213 #endif
214 ... 211 ...
215 FOO_INLINE int 212 INLINE int
216 incr (int i) 213 incr (int i)
217 { 214 {
218 return i + 1; 215 return i + 1;
@@ -220,19 +217,22 @@ extern void _DebPrint (const char *fmt, ...);
220 ... 217 ...
221 INLINE_HEADER_END 218 INLINE_HEADER_END
222 219
223 The corresponding foo.c file should do this: 220 For every executable, exactly one file that includes the header
221 should do this:
224 222
225 #define FOO_INLINE EXTERN_INLINE 223 #define INLINE EXTERN_INLINE
226 224
227 before including any .h file other than config.h. 225 before including config.h or any other .h file.
228 Other .c files should not define FOO_INLINE. 226 Other .c files should not define INLINE.
229 227
230 C99 compilers compile functions like 'incr' as C99-style extern 228 C99 compilers compile functions like 'incr' as C99-style extern
231 inline functions. Pre-C99 GCCs do something similar with 229 inline functions. Pre-C99 GCCs do something similar with
232 GNU-specific keywords. Pre-C99 non-GCC compilers use static 230 GNU-specific keywords. Pre-C99 non-GCC compilers use static
233 functions, which bloats the code but is good enough. */ 231 functions, which bloats the code but is good enough. */
234 232
235#define INLINE _GL_INLINE 233#ifndef INLINE
234# define INLINE _GL_INLINE
235#endif
236#define EXTERN_INLINE _GL_EXTERN_INLINE 236#define EXTERN_INLINE _GL_EXTERN_INLINE
237#define INLINE_HEADER_BEGIN _GL_INLINE_HEADER_BEGIN 237#define INLINE_HEADER_BEGIN _GL_INLINE_HEADER_BEGIN
238#define INLINE_HEADER_END _GL_INLINE_HEADER_END 238#define INLINE_HEADER_END _GL_INLINE_HEADER_END
@@ -248,16 +248,29 @@ extern void _DebPrint (const char *fmt, ...);
248# define FLEXIBLE_ARRAY_MEMBER 1 248# define FLEXIBLE_ARRAY_MEMBER 1
249#endif 249#endif
250 250
251#ifndef __has_builtin
252# define __has_builtin(x) 0
253#endif
254
255/* Tell the compiler (and lint) that COND will always hold, and that
256 it should optimize (or check) accordingly. */
257#if (__has_builtin (__builtin_unreachable) \
258 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4)
259# define assume(cond) ((cond) ? (void) 0 : __builtin_unreachable ())
260#elif defined _MSC_VER
261# define assume(cond) __assume (cond)
262#elif defined lint
263# define assume(cond) ((cond) ? (void) 0 : abort ())
264#else
265# define assume(cond) ((void) (0 && (cond)))
266#endif
267
251/* Use this to suppress gcc's `...may be used before initialized' warnings. */ 268/* Use this to suppress gcc's `...may be used before initialized' warnings. */
252#ifdef lint 269#ifdef lint
253/* Use CODE only if lint checking is in effect. */ 270/* Use CODE only if lint checking is in effect. */
254# define IF_LINT(Code) Code 271# define IF_LINT(Code) Code
255/* Assume that the expression COND is true. This differs in intent
256 from 'assert', as it is a message from the programmer to the compiler. */
257# define lint_assume(cond) ((cond) ? (void) 0 : abort ())
258#else 272#else
259# define IF_LINT(Code) /* empty */ 273# define IF_LINT(Code) /* empty */
260# define lint_assume(cond) ((void) (0 && (cond)))
261#endif 274#endif
262 275
263/* conf_post.h ends here */ 276/* conf_post.h ends here */
diff --git a/src/data.c b/src/data.c
index 9f4bd1f1c02..79679bae444 100644
--- a/src/data.c
+++ b/src/data.c
@@ -54,6 +54,7 @@ Lisp_Object Qintegerp, Qwholenump, Qsymbolp, Qlistp, Qconsp;
54static Lisp_Object Qnatnump; 54static Lisp_Object Qnatnump;
55Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp; 55Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
56Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp; 56Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp;
57Lisp_Object Qbool_vector_p;
57Lisp_Object Qbuffer_or_string_p; 58Lisp_Object Qbuffer_or_string_p;
58static Lisp_Object Qkeywordp, Qboundp; 59static Lisp_Object Qkeywordp, Qboundp;
59Lisp_Object Qfboundp; 60Lisp_Object Qfboundp;
@@ -616,7 +617,7 @@ global value outside of any lexical scope. */)
616 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); 617 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym);
617 if (blv->fwd) 618 if (blv->fwd)
618 /* In set_internal, we un-forward vars when their value is 619 /* In set_internal, we un-forward vars when their value is
619 set to Qunbound. */ 620 set to Qunbound. */
620 return Qt; 621 return Qt;
621 else 622 else
622 { 623 {
@@ -627,7 +628,7 @@ global value outside of any lexical scope. */)
627 } 628 }
628 case SYMBOL_FORWARDED: 629 case SYMBOL_FORWARDED:
629 /* In set_internal, we un-forward vars when their value is 630 /* In set_internal, we un-forward vars when their value is
630 set to Qunbound. */ 631 set to Qunbound. */
631 return Qt; 632 return Qt;
632 default: emacs_abort (); 633 default: emacs_abort ();
633 } 634 }
@@ -1995,7 +1996,7 @@ If the current binding is global (the default), the value is nil. */)
1995} 1996}
1996 1997
1997/* This code is disabled now that we use the selected frame to return 1998/* This code is disabled now that we use the selected frame to return
1998 keyboard-local-values. */ 1999 keyboard-local-values. */
1999#if 0 2000#if 0
2000extern struct terminal *get_terminal (Lisp_Object display, int); 2001extern struct terminal *get_terminal (Lisp_Object display, int);
2001 2002
@@ -2255,10 +2256,8 @@ bool-vector. IDX starts at 0. */)
2255 2256
2256/* Arithmetic functions */ 2257/* Arithmetic functions */
2257 2258
2258enum comparison { equal, notequal, less, grtr, less_or_equal, grtr_or_equal }; 2259Lisp_Object
2259 2260arithcompare (Lisp_Object num1, Lisp_Object num2, enum Arith_Comparison comparison)
2260static Lisp_Object
2261arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison)
2262{ 2261{
2263 double f1 = 0, f2 = 0; 2262 double f1 = 0, f2 = 0;
2264 bool floatp = 0; 2263 bool floatp = 0;
@@ -2275,32 +2274,32 @@ arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison)
2275 2274
2276 switch (comparison) 2275 switch (comparison)
2277 { 2276 {
2278 case equal: 2277 case ARITH_EQUAL:
2279 if (floatp ? f1 == f2 : XINT (num1) == XINT (num2)) 2278 if (floatp ? f1 == f2 : XINT (num1) == XINT (num2))
2280 return Qt; 2279 return Qt;
2281 return Qnil; 2280 return Qnil;
2282 2281
2283 case notequal: 2282 case ARITH_NOTEQUAL:
2284 if (floatp ? f1 != f2 : XINT (num1) != XINT (num2)) 2283 if (floatp ? f1 != f2 : XINT (num1) != XINT (num2))
2285 return Qt; 2284 return Qt;
2286 return Qnil; 2285 return Qnil;
2287 2286
2288 case less: 2287 case ARITH_LESS:
2289 if (floatp ? f1 < f2 : XINT (num1) < XINT (num2)) 2288 if (floatp ? f1 < f2 : XINT (num1) < XINT (num2))
2290 return Qt; 2289 return Qt;
2291 return Qnil; 2290 return Qnil;
2292 2291
2293 case less_or_equal: 2292 case ARITH_LESS_OR_EQUAL:
2294 if (floatp ? f1 <= f2 : XINT (num1) <= XINT (num2)) 2293 if (floatp ? f1 <= f2 : XINT (num1) <= XINT (num2))
2295 return Qt; 2294 return Qt;
2296 return Qnil; 2295 return Qnil;
2297 2296
2298 case grtr: 2297 case ARITH_GRTR:
2299 if (floatp ? f1 > f2 : XINT (num1) > XINT (num2)) 2298 if (floatp ? f1 > f2 : XINT (num1) > XINT (num2))
2300 return Qt; 2299 return Qt;
2301 return Qnil; 2300 return Qnil;
2302 2301
2303 case grtr_or_equal: 2302 case ARITH_GRTR_OR_EQUAL:
2304 if (floatp ? f1 >= f2 : XINT (num1) >= XINT (num2)) 2303 if (floatp ? f1 >= f2 : XINT (num1) >= XINT (num2))
2305 return Qt; 2304 return Qt;
2306 return Qnil; 2305 return Qnil;
@@ -2310,48 +2309,65 @@ arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison)
2310 } 2309 }
2311} 2310}
2312 2311
2313DEFUN ("=", Feqlsign, Seqlsign, 2, 2, 0, 2312static Lisp_Object
2314 doc: /* Return t if two args, both numbers or markers, are equal. */) 2313arithcompare_driver (ptrdiff_t nargs, Lisp_Object *args,
2315 (register Lisp_Object num1, Lisp_Object num2) 2314 enum Arith_Comparison comparison)
2316{ 2315{
2317 return arithcompare (num1, num2, equal); 2316 for (ptrdiff_t argnum = 1; argnum < nargs; ++argnum)
2317 {
2318 if (EQ (Qnil, arithcompare (args[argnum-1], args[argnum], comparison)))
2319 return Qnil;
2320 }
2321 return Qt;
2318} 2322}
2319 2323
2320DEFUN ("<", Flss, Slss, 2, 2, 0, 2324DEFUN ("=", Feqlsign, Seqlsign, 1, MANY, 0,
2321 doc: /* Return t if first arg is less than second arg. Both must be numbers or markers. */) 2325 doc: /* Return t if args, all numbers or markers, are equal.
2322 (register Lisp_Object num1, Lisp_Object num2) 2326usage: (= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */)
2327 (ptrdiff_t nargs, Lisp_Object *args)
2323{ 2328{
2324 return arithcompare (num1, num2, less); 2329 return arithcompare_driver (nargs, args, ARITH_EQUAL);
2325} 2330}
2326 2331
2327DEFUN (">", Fgtr, Sgtr, 2, 2, 0, 2332DEFUN ("<", Flss, Slss, 1, MANY, 0,
2328 doc: /* Return t if first arg is greater than second arg. Both must be numbers or markers. */) 2333 doc: /* Return t if each arg is less than the next arg. All must be numbers or markers.
2329 (register Lisp_Object num1, Lisp_Object num2) 2334usage: (< NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */)
2335 (ptrdiff_t nargs, Lisp_Object *args)
2330{ 2336{
2331 return arithcompare (num1, num2, grtr); 2337 return arithcompare_driver (nargs, args, ARITH_LESS);
2332} 2338}
2333 2339
2334DEFUN ("<=", Fleq, Sleq, 2, 2, 0, 2340DEFUN (">", Fgtr, Sgtr, 1, MANY, 0,
2335 doc: /* Return t if first arg is less than or equal to second arg. 2341 doc: /* Return t if each arg is greater than the next arg. All must be numbers or markers.
2336Both must be numbers or markers. */) 2342usage: (> NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */)
2337 (register Lisp_Object num1, Lisp_Object num2) 2343 (ptrdiff_t nargs, Lisp_Object *args)
2338{ 2344{
2339 return arithcompare (num1, num2, less_or_equal); 2345 return arithcompare_driver (nargs, args, ARITH_GRTR);
2340} 2346}
2341 2347
2342DEFUN (">=", Fgeq, Sgeq, 2, 2, 0, 2348DEFUN ("<=", Fleq, Sleq, 1, MANY, 0,
2343 doc: /* Return t if first arg is greater than or equal to second arg. 2349 doc: /* Return t if each arg is less than or equal to the next arg.
2344Both must be numbers or markers. */) 2350All must be numbers or markers.
2345 (register Lisp_Object num1, Lisp_Object num2) 2351usage: (<= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */)
2352 (ptrdiff_t nargs, Lisp_Object *args)
2353{
2354 return arithcompare_driver (nargs, args, ARITH_LESS_OR_EQUAL);
2355}
2356
2357DEFUN (">=", Fgeq, Sgeq, 1, MANY, 0,
2358 doc: /* Return t if each arg is greater than or equal to the next arg.
2359All must be numbers or markers.
2360usage: (= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */)
2361 (ptrdiff_t nargs, Lisp_Object *args)
2346{ 2362{
2347 return arithcompare (num1, num2, grtr_or_equal); 2363 return arithcompare_driver (nargs, args, ARITH_GRTR_OR_EQUAL);
2348} 2364}
2349 2365
2350DEFUN ("/=", Fneq, Sneq, 2, 2, 0, 2366DEFUN ("/=", Fneq, Sneq, 2, 2, 0,
2351 doc: /* Return t if first arg is not equal to second arg. Both must be numbers or markers. */) 2367 doc: /* Return t if first arg is not equal to second arg. Both must be numbers or markers. */)
2352 (register Lisp_Object num1, Lisp_Object num2) 2368 (register Lisp_Object num1, Lisp_Object num2)
2353{ 2369{
2354 return arithcompare (num1, num2, notequal); 2370 return arithcompare (num1, num2, ARITH_NOTEQUAL);
2355} 2371}
2356 2372
2357DEFUN ("zerop", Fzerop, Szerop, 1, 1, 0, 2373DEFUN ("zerop", Fzerop, Szerop, 1, 1, 0,
@@ -2941,6 +2957,453 @@ lowercase l) for small endian machines. */)
2941 return make_number (order); 2957 return make_number (order);
2942} 2958}
2943 2959
2960/* Because we round up the bool vector allocate size to word_size
2961 units, we can safely read past the "end" of the vector in the
2962 operations below. These extra bits are always zero. Also, we
2963 always allocate bool vectors with at least one size_t of storage so
2964 that we don't have to special-case empty bit vectors. */
2965
2966static size_t
2967bool_vector_spare_mask (ptrdiff_t nr_bits)
2968{
2969 eassert_and_assume (nr_bits > 0);
2970 return (((size_t) 1) << (nr_bits % BITS_PER_SIZE_T)) - 1;
2971}
2972
2973#if _MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64)
2974# define USE_MSC_POPCOUNT
2975# define POPCOUNT_STATIC_INLINE static inline
2976#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
2977# define USE_GCC_POPCOUNT
2978# if 199901L <= __STDC_VERSION__ || !__STRICT_ANSI__
2979# define POPCOUNT_STATIC_INLINE static inline
2980# endif
2981#else
2982# define NEED_GENERIC_POPCOUNT
2983#endif
2984#ifndef POPCOUNT_STATIC_INLINE
2985# define POPCOUNT_STATIC_INLINE static
2986#endif
2987
2988#ifdef USE_MSC_POPCOUNT
2989# define NEED_GENERIC_POPCOUNT
2990#endif
2991
2992#ifdef NEED_GENERIC_POPCOUNT
2993POPCOUNT_STATIC_INLINE unsigned int
2994popcount_size_t_generic (size_t val)
2995{
2996 unsigned short j;
2997 unsigned int count = 0;
2998
2999 for (j = 0; j < BITS_PER_SIZE_T; ++j)
3000 count += !!((((size_t) 1) << j) & val);
3001
3002 return count;
3003}
3004#endif
3005
3006#ifdef USE_MSC_POPCOUNT
3007POPCOUNT_STATIC_INLINE unsigned int
3008popcount_size_t_msc (size_t val)
3009{
3010 unsigned int count;
3011
3012#pragma intrinsic __cpuid
3013 /* While gcc falls back to its own generic code if the machine on
3014 which it's running doesn't support popcount, we need to perform the
3015 detection and fallback ourselves when compiling with Microsoft's
3016 compiler. */
3017
3018 static enum {
3019 popcount_unknown_support,
3020 popcount_use_generic,
3021 popcount_use_intrinsic
3022 } popcount_state;
3023
3024 if (popcount_state == popcount_unknown_support)
3025 {
3026 int cpu_info[4];
3027 __cpuid (cpu_info, 1);
3028 if (cpu_info[2] & (1<<23)) /* See MSDN. */
3029 popcount_state = popcount_use_intrinsic;
3030 else
3031 popcount_state = popcount_use_generic;
3032 }
3033
3034 if (popcount_state == popcount_use_intrinsic)
3035 {
3036# if BITS_PER_SIZE_T == 64
3037# pragma intrinsic __popcnt64
3038 count = __popcnt64 (val);
3039# else
3040# pragma intrinsic __popcnt
3041 count = __popcnt (val);
3042# endif
3043 }
3044 else
3045 count = popcount_size_t_generic (val);
3046
3047 return count;
3048}
3049#endif /* USE_MSC_POPCOUNT */
3050
3051#ifdef USE_GCC_POPCOUNT
3052POPCOUNT_STATIC_INLINE unsigned int
3053popcount_size_t_gcc (size_t val)
3054{
3055# if BITS_PER_SIZE_T == 64
3056 return __builtin_popcountll (val);
3057# else
3058 return __builtin_popcount (val);
3059# endif
3060}
3061#endif /* USE_GCC_POPCOUNT */
3062
3063POPCOUNT_STATIC_INLINE unsigned int
3064popcount_size_t (size_t val)
3065{
3066#if defined USE_MSC_POPCOUNT
3067 return popcount_size_t_msc (val);
3068#elif defined USE_GCC_POPCOUNT
3069 return popcount_size_t_gcc (val);
3070#else
3071 return popcount_size_t_generic (val);
3072#endif
3073}
3074
3075enum bool_vector_op { bool_vector_exclusive_or,
3076 bool_vector_union,
3077 bool_vector_intersection,
3078 bool_vector_set_difference,
3079 bool_vector_subsetp };
3080
3081static Lisp_Object
3082bool_vector_binop_driver (Lisp_Object op1,
3083 Lisp_Object op2,
3084 Lisp_Object dest,
3085 enum bool_vector_op op)
3086{
3087 EMACS_INT nr_bits;
3088 size_t *adata, *bdata, *cdata;
3089 ptrdiff_t i;
3090 size_t changed = 0;
3091 size_t mword;
3092 ptrdiff_t nr_words;
3093
3094 CHECK_BOOL_VECTOR (op1);
3095 CHECK_BOOL_VECTOR (op2);
3096
3097 nr_bits = min (XBOOL_VECTOR (op1)->size,
3098 XBOOL_VECTOR (op2)->size);
3099
3100 if (NILP (dest))
3101 {
3102 dest = Fmake_bool_vector (make_number (nr_bits), Qnil);
3103 changed = 1;
3104 }
3105 else
3106 {
3107 CHECK_BOOL_VECTOR (dest);
3108 nr_bits = min (nr_bits, XBOOL_VECTOR (dest)->size);
3109 }
3110
3111 eassert_and_assume (nr_bits >= 0);
3112 nr_words = ROUNDUP (nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T;
3113
3114 adata = (size_t *) XBOOL_VECTOR (dest)->data;
3115 bdata = (size_t *) XBOOL_VECTOR (op1)->data;
3116 cdata = (size_t *) XBOOL_VECTOR (op2)->data;
3117 i = 0;
3118 do
3119 {
3120 if (op == bool_vector_exclusive_or)
3121 mword = bdata[i] ^ cdata[i];
3122 else if (op == bool_vector_union || op == bool_vector_subsetp)
3123 mword = bdata[i] | cdata[i];
3124 else if (op == bool_vector_intersection)
3125 mword = bdata[i] & cdata[i];
3126 else if (op == bool_vector_set_difference)
3127 mword = bdata[i] &~ cdata[i];
3128 else
3129 abort ();
3130
3131 changed |= adata[i] ^ mword;
3132
3133 if (op != bool_vector_subsetp)
3134 adata[i] = mword;
3135
3136 i++;
3137 }
3138 while (i < nr_words);
3139
3140 return changed ? dest : Qnil;
3141}
3142
3143/* Compute the number of trailing zero bits in val. If val is zero,
3144 return the number of bits in val. */
3145static unsigned int
3146count_trailing_zero_bits (size_t val)
3147{
3148 if (val == 0)
3149 return CHAR_BIT * sizeof (val);
3150
3151#if defined USE_GCC_POPCOUNT && BITS_PER_SIZE_T == 64
3152 return __builtin_ctzll (val);
3153#elif defined USE_GCC_POPCOUNT && BITS_PER_SIZE_T == 32
3154 return __builtin_ctz (val);
3155#elif _MSC_VER && BITS_PER_SIZE_T == 64
3156# pragma intrinsic _BitScanForward64
3157 {
3158 /* No support test needed: support since 386. */
3159 unsigned long result;
3160 _BitScanForward64 (&result, val);
3161 return (unsigned int) result;
3162 }
3163#elif _MSC_VER && BITS_PER_SIZE_T == 32
3164# pragma intrinsic _BitScanForward
3165 {
3166 /* No support test needed: support since 386. */
3167 unsigned long result;
3168 _BitScanForward (&result, val);
3169 return (unsigned int) result;
3170 }
3171#else
3172 {
3173 unsigned int count;
3174 count = 0;
3175 for (val = ~val; val & 1; val >>= 1)
3176 ++count;
3177
3178 return count;
3179 }
3180#endif
3181}
3182
3183static size_t
3184size_t_to_host_endian (size_t val)
3185{
3186#ifdef WORDS_BIGENDIAN
3187# if BITS_PER_SIZE_T == 64
3188 return swap64 (val);
3189# else
3190 return swap32 (val);
3191# endif
3192#else
3193 return val;
3194#endif
3195}
3196
3197DEFUN ("bool-vector-exclusive-or", Fbool_vector_exclusive_or,
3198 Sbool_vector_exclusive_or, 2, 3, 0,
3199 doc: /* Compute C = A ^ B, bitwise exclusive or.
3200A, B, and C must be bool vectors. If C is nil, allocate a new bool
3201vector in which to store the result. Return the destination vector if
3202it changed or nil otherwise. */
3203 )
3204 (Lisp_Object a, Lisp_Object b, Lisp_Object c)
3205{
3206 return bool_vector_binop_driver (a, b, c, bool_vector_exclusive_or);
3207}
3208
3209DEFUN ("bool-vector-union", Fbool_vector_union,
3210 Sbool_vector_union, 2, 3, 0,
3211 doc: /* Compute C = A | B, bitwise or.
3212A, B, and C must be bool vectors. If C is nil, allocate a new bool
3213vector in which to store the result. Return the destination vector if
3214it changed or nil otherwise. */)
3215 (Lisp_Object a, Lisp_Object b, Lisp_Object c)
3216{
3217 return bool_vector_binop_driver (a, b, c, bool_vector_union);
3218}
3219
3220DEFUN ("bool-vector-intersection", Fbool_vector_intersection,
3221 Sbool_vector_intersection, 2, 3, 0,
3222 doc: /* Compute C = A & B, bitwise and.
3223A, B, and C must be bool vectors. If C is nil, allocate a new bool
3224vector in which to store the result. Return the destination vector if
3225it changed or nil otherwise. */)
3226 (Lisp_Object a, Lisp_Object b, Lisp_Object c)
3227{
3228 return bool_vector_binop_driver (a, b, c, bool_vector_intersection);
3229}
3230
3231DEFUN ("bool-vector-set-difference", Fbool_vector_set_difference,
3232 Sbool_vector_set_difference, 2, 3, 0,
3233 doc: /* Compute C = A &~ B, set difference.
3234A, B, and C must be bool vectors. If C is nil, allocate a new bool
3235vector in which to store the result. Return the destination vector if
3236it changed or nil otherwise. */)
3237 (Lisp_Object a, Lisp_Object b, Lisp_Object c)
3238{
3239 return bool_vector_binop_driver (a, b, c, bool_vector_set_difference);
3240}
3241
3242DEFUN ("bool-vector-subsetp", Fbool_vector_subsetp,
3243 Sbool_vector_subsetp, 2, 2, 0,
3244 doc: )
3245 (Lisp_Object a, Lisp_Object b)
3246{
3247 /* Like bool_vector_union, but doesn't modify b. */
3248 return bool_vector_binop_driver (b, a, b, bool_vector_subsetp);
3249}
3250
3251DEFUN ("bool-vector-not", Fbool_vector_not,
3252 Sbool_vector_not, 1, 2, 0,
3253 doc: /* Compute B = ~A.
3254B must be a bool vector. A must be a bool vector or nil.
3255If A is nil, allocate a new bool vector in which to store the result.
3256Return the destination vector. */)
3257 (Lisp_Object a, Lisp_Object b)
3258{
3259 EMACS_INT nr_bits;
3260 size_t *bdata, *adata;
3261 ptrdiff_t i;
3262 size_t mword;
3263
3264 CHECK_BOOL_VECTOR (a);
3265 nr_bits = XBOOL_VECTOR (a)->size;
3266
3267 if (NILP (b))
3268 b = Fmake_bool_vector (make_number (nr_bits), Qnil);
3269 else
3270 {
3271 CHECK_BOOL_VECTOR (b);
3272 nr_bits = min (nr_bits, XBOOL_VECTOR (b)->size);
3273 }
3274
3275 bdata = (size_t *) XBOOL_VECTOR (b)->data;
3276 adata = (size_t *) XBOOL_VECTOR (a)->data;
3277
3278 eassert_and_assume (nr_bits >= 0);
3279
3280 for (i = 0; i < nr_bits / BITS_PER_SIZE_T; i++)
3281 bdata[i] = ~adata[i];
3282
3283 if (nr_bits % BITS_PER_SIZE_T)
3284 {
3285 mword = size_t_to_host_endian (adata[i]);
3286 mword = ~mword;
3287 mword &= bool_vector_spare_mask (nr_bits);
3288 bdata[i] = size_t_to_host_endian (mword);
3289 }
3290
3291 return b;
3292}
3293
3294DEFUN ("bool-vector-count-matches", Fbool_vector_count_matches,
3295 Sbool_vector_count_matches, 2, 2, 0,
3296 doc: /* Count how many elements in A equal B.
3297A must be a bool vector. B is a generalized bool. */)
3298 (Lisp_Object a, Lisp_Object b)
3299{
3300 ptrdiff_t count;
3301 EMACS_INT nr_bits;
3302 size_t *adata;
3303 size_t match;
3304 ptrdiff_t i;
3305
3306 CHECK_BOOL_VECTOR (a);
3307
3308 nr_bits = XBOOL_VECTOR (a)->size;
3309 count = 0;
3310 match = NILP (b) ? (size_t) -1 : 0;
3311 adata = (size_t *) XBOOL_VECTOR (a)->data;
3312
3313 eassert_and_assume (nr_bits >= 0);
3314
3315 for (i = 0; i < nr_bits / BITS_PER_SIZE_T; ++i)
3316 count += popcount_size_t (adata[i] ^ match);
3317
3318 /* Mask out trailing parts of final mword. */
3319 if (nr_bits % BITS_PER_SIZE_T)
3320 {
3321 size_t mword = adata[i] ^ match;
3322 mword = size_t_to_host_endian (mword);
3323 count += popcount_size_t (mword & bool_vector_spare_mask (nr_bits));
3324 }
3325
3326 return make_number (count);
3327}
3328
3329DEFUN ("bool-vector-count-matches-at",
3330 Fbool_vector_count_matches_at,
3331 Sbool_vector_count_matches_at, 3, 3, 0,
3332 doc: /* Count how many consecutive elements in A equal B at i.
3333A must be a bool vector. B is a generalized boolean. i is an
3334index into the vector. */)
3335 (Lisp_Object a, Lisp_Object b, Lisp_Object i)
3336{
3337 ptrdiff_t count;
3338 EMACS_INT nr_bits;
3339 ptrdiff_t offset;
3340 size_t *adata;
3341 size_t twiddle;
3342 size_t mword; /* Machine word. */
3343 ptrdiff_t pos;
3344 ptrdiff_t nr_words;
3345
3346 CHECK_BOOL_VECTOR (a);
3347 CHECK_NATNUM (i);
3348
3349 nr_bits = XBOOL_VECTOR (a)->size;
3350 if (XFASTINT (i) > nr_bits) /* Allow one past the end for convenience */
3351 args_out_of_range (a, i);
3352
3353 adata = (size_t *) XBOOL_VECTOR (a)->data;
3354
3355 assume (nr_bits >= 0);
3356 nr_words = ROUNDUP (nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T;
3357
3358 pos = XFASTINT (i) / BITS_PER_SIZE_T;
3359 offset = XFASTINT (i) % BITS_PER_SIZE_T;
3360 count = 0;
3361
3362 /* By XORing with twiddle, we transform the problem of "count
3363 consecutive equal values" into "count the zero bits". The latter
3364 operation usually has hardware support. */
3365 twiddle = NILP (b) ? 0 : (size_t) -1;
3366
3367 /* Scan the remainder of the mword at the current offset. */
3368 if (pos < nr_words && offset != 0)
3369 {
3370 mword = size_t_to_host_endian (adata[pos]);
3371 mword ^= twiddle;
3372 mword >>= offset;
3373 count = count_trailing_zero_bits (mword);
3374 count = min (count, BITS_PER_SIZE_T - offset);
3375 pos++;
3376 if (count + offset < BITS_PER_SIZE_T)
3377 return make_number (count);
3378 }
3379
3380 /* Scan whole words until we either reach the end of the vector or
3381 find an mword that doesn't completely match. twiddle is
3382 endian-independent. */
3383 while (pos < nr_words && adata[pos] == twiddle)
3384 {
3385 count += BITS_PER_SIZE_T;
3386 ++pos;
3387 }
3388
3389 if (pos < nr_words)
3390 {
3391 /* If we stopped because of a mismatch, see how many bits match
3392 in the current mword. */
3393 mword = size_t_to_host_endian (adata[pos]);
3394 mword ^= twiddle;
3395 count += count_trailing_zero_bits (mword);
3396 }
3397 else if (nr_bits % BITS_PER_SIZE_T != 0)
3398 {
3399 /* If we hit the end, we might have overshot our count. Reduce
3400 the total by the number of spare bits at the end of the
3401 vector. */
3402 count -= BITS_PER_SIZE_T - nr_bits % BITS_PER_SIZE_T;
3403 }
3404
3405 return make_number (count);
3406}
2944 3407
2945 3408
2946void 3409void
@@ -2990,6 +3453,7 @@ syms_of_data (void)
2990 DEFSYM (Qsequencep, "sequencep"); 3453 DEFSYM (Qsequencep, "sequencep");
2991 DEFSYM (Qbufferp, "bufferp"); 3454 DEFSYM (Qbufferp, "bufferp");
2992 DEFSYM (Qvectorp, "vectorp"); 3455 DEFSYM (Qvectorp, "vectorp");
3456 DEFSYM (Qbool_vector_p, "bool-vector-p");
2993 DEFSYM (Qchar_or_string_p, "char-or-string-p"); 3457 DEFSYM (Qchar_or_string_p, "char-or-string-p");
2994 DEFSYM (Qmarkerp, "markerp"); 3458 DEFSYM (Qmarkerp, "markerp");
2995 DEFSYM (Qbuffer_or_string_p, "buffer-or-string-p"); 3459 DEFSYM (Qbuffer_or_string_p, "buffer-or-string-p");
@@ -3207,6 +3671,15 @@ syms_of_data (void)
3207 defsubr (&Ssubr_arity); 3671 defsubr (&Ssubr_arity);
3208 defsubr (&Ssubr_name); 3672 defsubr (&Ssubr_name);
3209 3673
3674 defsubr (&Sbool_vector_exclusive_or);
3675 defsubr (&Sbool_vector_union);
3676 defsubr (&Sbool_vector_intersection);
3677 defsubr (&Sbool_vector_set_difference);
3678 defsubr (&Sbool_vector_not);
3679 defsubr (&Sbool_vector_subsetp);
3680 defsubr (&Sbool_vector_count_matches);
3681 defsubr (&Sbool_vector_count_matches_at);
3682
3210 set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->function); 3683 set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->function);
3211 3684
3212 DEFVAR_LISP ("most-positive-fixnum", Vmost_positive_fixnum, 3685 DEFVAR_LISP ("most-positive-fixnum", Vmost_positive_fixnum,
diff --git a/src/dired.c b/src/dired.c
index 2b79b54f2a4..1bdb171c4d0 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -278,7 +278,7 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
278 memcpy (SDATA (fullname) + directory_nbytes + needsep, 278 memcpy (SDATA (fullname) + directory_nbytes + needsep,
279 SDATA (name), len); 279 SDATA (name), len);
280 280
281 nchars = chars_in_text (SDATA (fullname), nbytes); 281 nchars = multibyte_chars_in_text (SDATA (fullname), nbytes);
282 282
283 /* Some bug somewhere. */ 283 /* Some bug somewhere. */
284 if (nchars > nbytes) 284 if (nchars > nbytes)
diff --git a/src/dispextern.h b/src/dispextern.h
index f70b1f8092e..af9efe660d9 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -49,18 +49,16 @@ typedef struct {
49#endif 49#endif
50 50
51INLINE_HEADER_BEGIN 51INLINE_HEADER_BEGIN
52#ifndef DISPEXTERN_INLINE
53# define DISPEXTERN_INLINE INLINE
54#endif
55 52
56#include <c-strcase.h> 53#include <c-strcase.h>
57DISPEXTERN_INLINE int 54INLINE int
58xstrcasecmp (char const *a, char const *b) 55xstrcasecmp (char const *a, char const *b)
59{ 56{
60 return c_strcasecmp (a, b); 57 return c_strcasecmp (a, b);
61} 58}
62 59
63#ifdef HAVE_X_WINDOWS 60#ifdef HAVE_X_WINDOWS
61#include <X11/Xresource.h> /* for XrmDatabase */
64typedef struct x_display_info Display_Info; 62typedef struct x_display_info Display_Info;
65typedef XImage * XImagePtr; 63typedef XImage * XImagePtr;
66typedef XImagePtr XImagePtr_or_DC; 64typedef XImagePtr XImagePtr_or_DC;
@@ -288,10 +286,10 @@ typedef struct {
288} GLYPH; 286} GLYPH;
289 287
290/* Return a glyph's character code. */ 288/* Return a glyph's character code. */
291DISPEXTERN_INLINE int GLYPH_CHAR (GLYPH glyph) { return glyph.ch; } 289INLINE int GLYPH_CHAR (GLYPH glyph) { return glyph.ch; }
292 290
293/* Return a glyph's face ID. */ 291/* Return a glyph's face ID. */
294DISPEXTERN_INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; } 292INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; }
295 293
296#define SET_GLYPH_CHAR(glyph, char) ((glyph).ch = (char)) 294#define SET_GLYPH_CHAR(glyph, char) ((glyph).ch = (char))
297#define SET_GLYPH_FACE(glyph, face) ((glyph).face_id = (face)) 295#define SET_GLYPH_FACE(glyph, face) ((glyph).face_id = (face))
@@ -300,7 +298,7 @@ DISPEXTERN_INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; }
300 298
301/* The following are valid only if GLYPH_CODE_P (gc). */ 299/* The following are valid only if GLYPH_CODE_P (gc). */
302 300
303DISPEXTERN_INLINE int 301INLINE int
304GLYPH_CODE_CHAR (Lisp_Object gc) 302GLYPH_CODE_CHAR (Lisp_Object gc)
305{ 303{
306 return (CONSP (gc) 304 return (CONSP (gc)
@@ -308,7 +306,7 @@ GLYPH_CODE_CHAR (Lisp_Object gc)
308 : XINT (gc) & MAX_CHAR); 306 : XINT (gc) & MAX_CHAR);
309} 307}
310 308
311DISPEXTERN_INLINE int 309INLINE int
312GLYPH_CODE_FACE (Lisp_Object gc) 310GLYPH_CODE_FACE (Lisp_Object gc)
313{ 311{
314 return CONSP (gc) ? XINT (XCDR (gc)) : XINT (gc) >> CHARACTERBITS; 312 return CONSP (gc) ? XINT (XCDR (gc)) : XINT (gc) >> CHARACTERBITS;
@@ -794,7 +792,10 @@ enum glyph_row_area
794 Rows in window matrices on frames having no frame matrices point to 792 Rows in window matrices on frames having no frame matrices point to
795 glyphs allocated from the heap via xmalloc; 793 glyphs allocated from the heap via xmalloc;
796 glyphs[LEFT_MARGIN_AREA] is the start address of the allocated 794 glyphs[LEFT_MARGIN_AREA] is the start address of the allocated
797 glyph structure array. */ 795 glyph structure array.
796
797 NOTE: layout of first four members of this structure is important,
798 see clear_glyph_row and copy_row_except_pointers to check why. */
798 799
799struct glyph_row 800struct glyph_row
800{ 801{
@@ -814,8 +815,13 @@ struct glyph_row
814 removed some day, so don't use it in new code. */ 815 removed some day, so don't use it in new code. */
815 struct glyph *glyphs[1 + LAST_AREA]; 816 struct glyph *glyphs[1 + LAST_AREA];
816 817
817 /* Number of glyphs actually filled in areas. */ 818 /* Number of glyphs actually filled in areas. This could have size
818 short used[LAST_AREA]; 819 LAST_AREA, but it's 1 + LAST_AREA to simplify offset calculations. */
820 short used[1 + LAST_AREA];
821
822 /* Hash code. This hash code is available as soon as the row
823 is constructed, i.e. after a call to display_line. */
824 unsigned hash;
819 825
820 /* Window-relative x and y-position of the top-left corner of this 826 /* Window-relative x and y-position of the top-left corner of this
821 row. If y < 0, this means that eabs (y) pixels of the row are 827 row. If y < 0, this means that eabs (y) pixels of the row are
@@ -848,10 +854,6 @@ struct glyph_row
848 in last row when checking if row is fully visible. */ 854 in last row when checking if row is fully visible. */
849 int extra_line_spacing; 855 int extra_line_spacing;
850 856
851 /* Hash code. This hash code is available as soon as the row
852 is constructed, i.e. after a call to display_line. */
853 unsigned hash;
854
855 /* First position in this row. This is the text position, including 857 /* First position in this row. This is the text position, including
856 overlay position information etc, where the display of this row 858 overlay position information etc, where the display of this row
857 started, and can thus be less than the position of the first 859 started, and can thus be less than the position of the first
@@ -1195,12 +1197,6 @@ struct glyph_row *matrix_row (struct glyph_matrix *, int);
1195 ((ROW)->phys_height - (ROW)->phys_ascent \ 1197 ((ROW)->phys_height - (ROW)->phys_ascent \
1196 > (ROW)->height - (ROW)->ascent) 1198 > (ROW)->height - (ROW)->ascent)
1197 1199
1198/* True means that fonts have been loaded since the last glyph
1199 matrix adjustments. The function redisplay_internal adjusts glyph
1200 matrices when this flag is true. */
1201
1202extern bool fonts_changed_p;
1203
1204/* A glyph for a space. */ 1200/* A glyph for a space. */
1205 1201
1206extern struct glyph space_glyph; 1202extern struct glyph space_glyph;
@@ -1428,31 +1424,31 @@ struct glyph_string
1428#define CURRENT_MODE_LINE_FACE_ID(W) \ 1424#define CURRENT_MODE_LINE_FACE_ID(W) \
1429 (CURRENT_MODE_LINE_FACE_ID_3((W), XWINDOW (selected_window), (W))) 1425 (CURRENT_MODE_LINE_FACE_ID_3((W), XWINDOW (selected_window), (W)))
1430 1426
1431/* Return the current height of the mode line of window W. If not 1427/* Return the current height of the mode line of window W. If not known
1432 known from current_mode_line_height, look at W's current glyph 1428 from W->mode_line_height, look at W's current glyph matrix, or return
1433 matrix, or return a default based on the height of the font of the 1429 a default based on the height of the font of the face `mode-line'. */
1434 face `mode-line'. */
1435 1430
1436#define CURRENT_MODE_LINE_HEIGHT(W) \ 1431#define CURRENT_MODE_LINE_HEIGHT(W) \
1437 (current_mode_line_height >= 0 \ 1432 (W->mode_line_height >= 0 \
1438 ? current_mode_line_height \ 1433 ? W->mode_line_height \
1439 : (MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \ 1434 : (W->mode_line_height \
1440 ? MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \ 1435 = (MATRIX_MODE_LINE_HEIGHT (W->current_matrix) \
1441 : estimate_mode_line_height (XFRAME ((W)->frame), \ 1436 ? MATRIX_MODE_LINE_HEIGHT (W->current_matrix) \
1442 CURRENT_MODE_LINE_FACE_ID (W)))) 1437 : estimate_mode_line_height \
1438 (XFRAME (W->frame), CURRENT_MODE_LINE_FACE_ID (W)))))
1443 1439
1444/* Return the current height of the header line of window W. If not 1440/* Return the current height of the header line of window W. If not known
1445 known from current_header_line_height, look at W's current glyph 1441 from W->header_line_height, look at W's current glyph matrix, or return
1446 matrix, or return an estimation based on the height of the font of 1442 an estimation based on the height of the font of the face `header-line'. */
1447 the face `header-line'. */
1448 1443
1449#define CURRENT_HEADER_LINE_HEIGHT(W) \ 1444#define CURRENT_HEADER_LINE_HEIGHT(W) \
1450 (current_header_line_height >= 0 \ 1445 (W->header_line_height >= 0 \
1451 ? current_header_line_height \ 1446 ? W->header_line_height \
1452 : (MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \ 1447 : (W->header_line_height \
1453 ? MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \ 1448 = (MATRIX_HEADER_LINE_HEIGHT (W->current_matrix) \
1454 : estimate_mode_line_height (XFRAME ((W)->frame), \ 1449 ? MATRIX_HEADER_LINE_HEIGHT (W->current_matrix) \
1455 HEADER_LINE_FACE_ID))) 1450 : estimate_mode_line_height \
1451 (XFRAME (W->frame), HEADER_LINE_FACE_ID))))
1456 1452
1457/* Return the height of the desired mode line of window W. */ 1453/* Return the height of the desired mode line of window W. */
1458 1454
@@ -1829,7 +1825,7 @@ struct face_cache
1829#endif /* not HAVE_WINDOW_SYSTEM */ 1825#endif /* not HAVE_WINDOW_SYSTEM */
1830 1826
1831/* Return true if G contains a valid character code. */ 1827/* Return true if G contains a valid character code. */
1832DISPEXTERN_INLINE bool 1828INLINE bool
1833GLYPH_CHAR_VALID_P (GLYPH g) 1829GLYPH_CHAR_VALID_P (GLYPH g)
1834{ 1830{
1835 return CHAR_VALID_P (GLYPH_CHAR (g)); 1831 return CHAR_VALID_P (GLYPH_CHAR (g));
@@ -1839,7 +1835,7 @@ GLYPH_CHAR_VALID_P (GLYPH g)
1839 encodes a char code in the lower CHARACTERBITS bits and a (very small) 1835 encodes a char code in the lower CHARACTERBITS bits and a (very small)
1840 face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */ 1836 face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */
1841 1837
1842DISPEXTERN_INLINE bool 1838INLINE bool
1843GLYPH_CODE_P (Lisp_Object gc) 1839GLYPH_CODE_P (Lisp_Object gc)
1844{ 1840{
1845 return (CONSP (gc) 1841 return (CONSP (gc)
@@ -2710,7 +2706,7 @@ typedef struct {
2710 unsigned mouse_face_hidden : 1; 2706 unsigned mouse_face_hidden : 1;
2711} Mouse_HLInfo; 2707} Mouse_HLInfo;
2712 2708
2713DISPEXTERN_INLINE void 2709INLINE void
2714reset_mouse_highlight (Mouse_HLInfo *hlinfo) 2710reset_mouse_highlight (Mouse_HLInfo *hlinfo)
2715{ 2711{
2716 2712
@@ -2802,11 +2798,6 @@ struct redisplay_interface
2802 /* Flush the display of frame F. For X, this is XFlush. */ 2798 /* Flush the display of frame F. For X, this is XFlush. */
2803 void (*flush_display) (struct frame *f); 2799 void (*flush_display) (struct frame *f);
2804 2800
2805 /* Flush the display of frame F if non-NULL. This is called
2806 during redisplay, and should be NULL on systems which flush
2807 automatically before reading input. */
2808 void (*flush_display_optional) (struct frame *f);
2809
2810 /* Clear the mouse highlight in window W, if there is any. */ 2801 /* Clear the mouse highlight in window W, if there is any. */
2811 void (*clear_window_mouse_face) (struct window *w); 2802 void (*clear_window_mouse_face) (struct window *w);
2812 2803
@@ -3200,12 +3191,10 @@ int in_display_vector_p (struct it *);
3200int frame_mode_line_height (struct frame *); 3191int frame_mode_line_height (struct frame *);
3201extern Lisp_Object Qtool_bar; 3192extern Lisp_Object Qtool_bar;
3202extern bool redisplaying_p; 3193extern bool redisplaying_p;
3203extern int help_echo_showing_p; 3194extern bool help_echo_showing_p;
3204extern int current_mode_line_height, current_header_line_height;
3205extern Lisp_Object help_echo_string, help_echo_window; 3195extern Lisp_Object help_echo_string, help_echo_window;
3206extern Lisp_Object help_echo_object, previous_help_echo_string; 3196extern Lisp_Object help_echo_object, previous_help_echo_string;
3207extern ptrdiff_t help_echo_pos; 3197extern ptrdiff_t help_echo_pos;
3208extern struct frame *last_mouse_frame;
3209extern int last_tool_bar_item; 3198extern int last_tool_bar_item;
3210extern void reseat_at_previous_visible_line_start (struct it *); 3199extern void reseat_at_previous_visible_line_start (struct it *);
3211extern Lisp_Object lookup_glyphless_char_display (int, struct it *); 3200extern Lisp_Object lookup_glyphless_char_display (int, struct it *);
@@ -3215,6 +3204,7 @@ extern ptrdiff_t compute_display_string_pos (struct text_pos *,
3215extern ptrdiff_t compute_display_string_end (ptrdiff_t, 3204extern ptrdiff_t compute_display_string_end (ptrdiff_t,
3216 struct bidi_string_data *); 3205 struct bidi_string_data *);
3217extern void produce_stretch_glyph (struct it *); 3206extern void produce_stretch_glyph (struct it *);
3207extern int merge_glyphless_glyph_face (struct it *);
3218 3208
3219#ifdef HAVE_WINDOW_SYSTEM 3209#ifdef HAVE_WINDOW_SYSTEM
3220 3210
@@ -3404,7 +3394,7 @@ extern frame_parm_handler x_frame_parm_handlers[];
3404 3394
3405extern void start_hourglass (void); 3395extern void start_hourglass (void);
3406extern void cancel_hourglass (void); 3396extern void cancel_hourglass (void);
3407extern int hourglass_shown_p; 3397extern bool hourglass_shown_p;
3408/* If non-null, an asynchronous timer that, when it expires, displays 3398/* If non-null, an asynchronous timer that, when it expires, displays
3409 an hourglass cursor on all frames. */ 3399 an hourglass cursor on all frames. */
3410extern struct atimer *hourglass_atimer; 3400extern struct atimer *hourglass_atimer;
@@ -3454,13 +3444,10 @@ extern Lisp_Object marginal_area_string (struct window *, enum window_part,
3454 Lisp_Object *, 3444 Lisp_Object *,
3455 int *, int *, int *, int *); 3445 int *, int *, int *, int *);
3456extern void redraw_frame (struct frame *); 3446extern void redraw_frame (struct frame *);
3457extern void cancel_line (int, struct frame *);
3458extern void init_desired_glyphs (struct frame *);
3459extern bool update_frame (struct frame *, bool, bool); 3447extern bool update_frame (struct frame *, bool, bool);
3460extern void update_frame_with_menu (struct frame *); 3448extern void update_frame_with_menu (struct frame *);
3461extern void bitch_at_user (void); 3449extern void bitch_at_user (void);
3462void adjust_glyphs (struct frame *); 3450extern void adjust_frame_glyphs (struct frame *);
3463struct glyph_matrix *save_current_matrix (struct frame *);
3464void free_glyphs (struct frame *); 3451void free_glyphs (struct frame *);
3465void free_window_matrices (struct window *); 3452void free_window_matrices (struct window *);
3466void check_glyph_memory (void); 3453void check_glyph_memory (void);
@@ -3546,6 +3533,7 @@ enum resource_types
3546 RES_TYPE_BOOLEAN_NUMBER 3533 RES_TYPE_BOOLEAN_NUMBER
3547}; 3534};
3548 3535
3536extern Display_Info *check_x_display_info (Lisp_Object);
3549extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object, 3537extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object,
3550 Lisp_Object, const char *, const char *class, 3538 Lisp_Object, const char *, const char *class,
3551 enum resource_types); 3539 enum resource_types);
@@ -3557,6 +3545,13 @@ extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object,
3557 Lisp_Object, Lisp_Object, 3545 Lisp_Object, Lisp_Object,
3558 const char *, const char *, 3546 const char *, const char *,
3559 enum resource_types); 3547 enum resource_types);
3548extern char *x_get_string_resource (XrmDatabase, const char *,
3549 const char *);
3550
3551#ifndef HAVE_NS /* These both used on W32 and X only. */
3552extern bool x_mouse_grabbed (Display_Info *);
3553extern void x_redo_mouse_highlight (Display_Info *);
3554#endif /* HAVE_NS */
3560 3555
3561#endif /* HAVE_WINDOW_SYSTEM */ 3556#endif /* HAVE_WINDOW_SYSTEM */
3562 3557
diff --git a/src/dispnew.c b/src/dispnew.c
index 0a9ce116ebb..b1384a6feb3 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -20,8 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define DISPEXTERN_INLINE EXTERN_INLINE
24
25#include "sysstdio.h" 23#include "sysstdio.h"
26#include <unistd.h> 24#include <unistd.h>
27 25
@@ -77,7 +75,6 @@ struct dim
77static void update_frame_line (struct frame *, int); 75static void update_frame_line (struct frame *, int);
78static int required_matrix_height (struct window *); 76static int required_matrix_height (struct window *);
79static int required_matrix_width (struct window *); 77static int required_matrix_width (struct window *);
80static void adjust_frame_glyphs (struct frame *);
81static void change_frame_size_1 (struct frame *, int, int, bool, bool, bool); 78static void change_frame_size_1 (struct frame *, int, int, bool, bool, bool);
82static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t); 79static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t);
83static void fill_up_frame_row_with_spaces (struct glyph_row *, int); 80static void fill_up_frame_row_with_spaces (struct glyph_row *, int);
@@ -105,30 +102,12 @@ static void set_window_cursor_after_update (struct window *);
105static void adjust_frame_glyphs_for_window_redisplay (struct frame *); 102static void adjust_frame_glyphs_for_window_redisplay (struct frame *);
106static void adjust_frame_glyphs_for_frame_redisplay (struct frame *); 103static void adjust_frame_glyphs_for_frame_redisplay (struct frame *);
107 104
108/* True upon entry to redisplay means do not assume anything about
109 current contents of actual terminal frame; clear and redraw it. */
110
111bool frame_garbaged;
112
113/* True means last display completed. False means it was preempted. */ 105/* True means last display completed. False means it was preempted. */
114 106
115bool display_completed; 107bool display_completed;
116 108
117Lisp_Object Qdisplay_table, Qredisplay_dont_pause; 109Lisp_Object Qdisplay_table, Qredisplay_dont_pause;
118 110
119
120/* The currently selected frame. In a single-frame version, this
121 variable always equals the_only_frame. */
122
123Lisp_Object selected_frame;
124
125/* A frame which is not just a mini-buffer, or 0 if there are no such
126 frames. This is usually the most recent such frame that was
127 selected. In a single-frame version, this variable always holds
128 the address of the_only_frame. */
129
130struct frame *last_nonminibuf_frame;
131
132/* True means SIGWINCH happened when not safe. */ 111/* True means SIGWINCH happened when not safe. */
133 112
134static bool delayed_size_change; 113static bool delayed_size_change;
@@ -152,16 +131,6 @@ static int glyph_pool_count;
152 131
153static struct frame *frame_matrix_frame; 132static struct frame *frame_matrix_frame;
154 133
155/* True means that fonts have been loaded since the last glyph
156 matrix adjustments. Redisplay must stop, and glyph matrices must
157 be adjusted when this flag becomes true during display. The
158 reason fonts can be loaded so late is that fonts of fontsets are
159 loaded on demand. Another reason is that a line contains many
160 characters displayed by zero width or very narrow glyphs of
161 variable-width fonts. */
162
163bool fonts_changed_p;
164
165/* Convert vpos and hpos from frame to window and vice versa. 134/* Convert vpos and hpos from frame to window and vice versa.
166 This may only be used for terminal frames. */ 135 This may only be used for terminal frames. */
167 136
@@ -433,7 +402,7 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
433 || right != matrix->right_margin_glyphs); 402 || right != matrix->right_margin_glyphs);
434 403
435 if (!marginal_areas_changed_p 404 if (!marginal_areas_changed_p
436 && !fonts_changed_p 405 && !XFRAME (w->frame)->fonts_changed
437 && !header_line_changed_p 406 && !header_line_changed_p
438 && matrix->window_left_col == WINDOW_LEFT_EDGE_COL (w) 407 && matrix->window_left_col == WINDOW_LEFT_EDGE_COL (w)
439 && matrix->window_top_line == WINDOW_TOP_EDGE_LINE (w) 408 && matrix->window_top_line == WINDOW_TOP_EDGE_LINE (w)
@@ -794,9 +763,11 @@ clear_current_matrices (register struct frame *f)
794 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix); 763 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);
795#endif 764#endif
796 765
766#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
797 /* Clear the matrix of the tool-bar window, if any. */ 767 /* Clear the matrix of the tool-bar window, if any. */
798 if (WINDOWP (f->tool_bar_window)) 768 if (WINDOWP (f->tool_bar_window))
799 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix); 769 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix);
770#endif
800 771
801 /* Clear current window matrices. */ 772 /* Clear current window matrices. */
802 eassert (WINDOWP (FRAME_ROOT_WINDOW (f))); 773 eassert (WINDOWP (FRAME_ROOT_WINDOW (f)));
@@ -817,8 +788,10 @@ clear_desired_matrices (register struct frame *f)
817 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->desired_matrix); 788 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->desired_matrix);
818#endif 789#endif
819 790
791#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
820 if (WINDOWP (f->tool_bar_window)) 792 if (WINDOWP (f->tool_bar_window))
821 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->desired_matrix); 793 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->desired_matrix);
794#endif
822 795
823 /* Do it for window matrices. */ 796 /* Do it for window matrices. */
824 eassert (WINDOWP (FRAME_ROOT_WINDOW (f))); 797 eassert (WINDOWP (FRAME_ROOT_WINDOW (f)));
@@ -859,41 +832,16 @@ clear_window_matrices (struct window *w, bool desired_p)
859 See dispextern.h for an overall explanation of glyph rows. 832 See dispextern.h for an overall explanation of glyph rows.
860 ***********************************************************************/ 833 ***********************************************************************/
861 834
862/* Clear glyph row ROW. Do it in a way that makes it robust against 835/* Clear glyph row ROW. NOTE: this code relies on the current
863 changes in the glyph_row structure, i.e. addition or removal of 836 layout of `glyphs' and `used' fields of `struct glyph_row'. */
864 structure members. */
865
866static struct glyph_row null_row;
867 837
868void 838void
869clear_glyph_row (struct glyph_row *row) 839clear_glyph_row (struct glyph_row *row)
870{ 840{
871 struct glyph *p[1 + LAST_AREA]; 841 enum { off = offsetof (struct glyph_row, used) };
872 842
873 /* Save pointers. */ 843 /* Zero everything except pointers in `glyphs'. */
874 p[LEFT_MARGIN_AREA] = row->glyphs[LEFT_MARGIN_AREA]; 844 memset (row->used, 0, sizeof *row - off);
875 p[TEXT_AREA] = row->glyphs[TEXT_AREA];
876 p[RIGHT_MARGIN_AREA] = row->glyphs[RIGHT_MARGIN_AREA];
877 p[LAST_AREA] = row->glyphs[LAST_AREA];
878
879 /* Clear. */
880 *row = null_row;
881
882 /* Restore pointers. */
883 row->glyphs[LEFT_MARGIN_AREA] = p[LEFT_MARGIN_AREA];
884 row->glyphs[TEXT_AREA] = p[TEXT_AREA];
885 row->glyphs[RIGHT_MARGIN_AREA] = p[RIGHT_MARGIN_AREA];
886 row->glyphs[LAST_AREA] = p[LAST_AREA];
887
888#if 0 /* At some point, some bit-fields of struct glyph were not set,
889 which made glyphs unequal when compared with GLYPH_EQUAL_P.
890 Redisplay outputs such glyphs, and flickering effects were
891 the result. This also depended on the contents of memory
892 returned by xmalloc. If flickering happens again, activate
893 the code below. If the flickering is gone with that, chances
894 are that the flickering has the same reason as here. */
895 memset (p[0], 0, (char *) p[LAST_AREA] - (char *) p[0]);
896#endif
897} 845}
898 846
899 847
@@ -1032,29 +980,17 @@ swap_glyph_pointers (struct glyph_row *a, struct glyph_row *b)
1032} 980}
1033 981
1034 982
1035/* Copy glyph row structure FROM to glyph row structure TO, except 983/* Copy glyph row structure FROM to glyph row structure TO, except that
1036 that glyph pointers, the `used' counts, and the hash values in the 984 glyph pointers, the `used' counts, and the hash values in the structures
1037 structures are left unchanged. */ 985 are left unchanged. NOTE: this code relies on the current layout of
986 `glyphs', `used', `hash' and `x' fields of `struct glyph_row'. */
1038 987
1039static void 988static void
1040copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) 989copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from)
1041{ 990{
1042 struct glyph *pointers[1 + LAST_AREA]; 991 enum { off = offsetof (struct glyph_row, x) };
1043 short used[LAST_AREA]; 992
1044 unsigned hashval; 993 memcpy (&to->x, &from->x, sizeof *to - off);
1045
1046 /* Save glyph pointers of TO. */
1047 memcpy (pointers, to->glyphs, sizeof to->glyphs);
1048 memcpy (used, to->used, sizeof to->used);
1049 hashval = to->hash;
1050
1051 /* Do a structure assignment. */
1052 *to = *from;
1053
1054 /* Restore original pointers of TO. */
1055 memcpy (to->glyphs, pointers, sizeof to->glyphs);
1056 memcpy (to->used, used, sizeof to->used);
1057 to->hash = hashval;
1058} 994}
1059 995
1060 996
@@ -1799,37 +1735,17 @@ allocate_matrices_for_window_redisplay (struct window *w)
1799 } 1735 }
1800} 1736}
1801 1737
1802 1738/* Allocate/reallocate glyph matrices of a single frame F.
1803/* Re-allocate/ re-compute glyph matrices on frame F. If F is null, 1739 This function must be called when a new frame is created,
1804 do it for all frames; otherwise do it just for the given frame. 1740 its size changes, or its window configuration changes. */
1805 This function must be called when a new frame is created, its size
1806 changes, or its window configuration changes. */
1807 1741
1808void 1742void
1809adjust_glyphs (struct frame *f) 1743adjust_frame_glyphs (struct frame *f)
1810{ 1744{
1811 /* Block input so that expose events and other events that access 1745 /* Block input so that expose events and other events that access
1812 glyph matrices are not processed while we are changing them. */ 1746 glyph matrices are not processed while we are changing them. */
1813 block_input (); 1747 block_input ();
1814 1748
1815 if (f)
1816 adjust_frame_glyphs (f);
1817 else
1818 {
1819 Lisp_Object tail, lisp_frame;
1820
1821 FOR_EACH_FRAME (tail, lisp_frame)
1822 adjust_frame_glyphs (XFRAME (lisp_frame));
1823 }
1824
1825 unblock_input ();
1826}
1827
1828/* Allocate/reallocate glyph matrices of a single frame F. */
1829
1830static void
1831adjust_frame_glyphs (struct frame *f)
1832{
1833 if (FRAME_WINDOW_P (f)) 1749 if (FRAME_WINDOW_P (f))
1834 adjust_frame_glyphs_for_window_redisplay (f); 1750 adjust_frame_glyphs_for_window_redisplay (f);
1835 else 1751 else
@@ -1839,6 +1755,8 @@ adjust_frame_glyphs (struct frame *f)
1839 adjust_decode_mode_spec_buffer (f); 1755 adjust_decode_mode_spec_buffer (f);
1840 1756
1841 f->glyphs_initialized_p = 1; 1757 f->glyphs_initialized_p = 1;
1758
1759 unblock_input ();
1842} 1760}
1843 1761
1844/* Return true if any window in the tree has nonzero window margins. See 1762/* Return true if any window in the tree has nonzero window margins. See
@@ -1913,7 +1831,7 @@ fake_current_matrices (Lisp_Object window)
1913/* Save away the contents of frame F's current frame matrix. Value is 1831/* Save away the contents of frame F's current frame matrix. Value is
1914 a glyph matrix holding the contents of F's current frame matrix. */ 1832 a glyph matrix holding the contents of F's current frame matrix. */
1915 1833
1916struct glyph_matrix * 1834static struct glyph_matrix *
1917save_current_matrix (struct frame *f) 1835save_current_matrix (struct frame *f)
1918{ 1836{
1919 int i; 1837 int i;
@@ -2110,10 +2028,9 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f)
2110 /* Allocate/reallocate window matrices. */ 2028 /* Allocate/reallocate window matrices. */
2111 allocate_matrices_for_window_redisplay (XWINDOW (FRAME_ROOT_WINDOW (f))); 2029 allocate_matrices_for_window_redisplay (XWINDOW (FRAME_ROOT_WINDOW (f)));
2112 2030
2113#ifdef HAVE_X_WINDOWS 2031#if defined (HAVE_X_WINDOWS) && ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
2114 /* Allocate/ reallocate matrices of the dummy window used to display 2032 /* Allocate/ reallocate matrices of the dummy window used to display
2115 the menu bar under X when no X toolkit support is available. */ 2033 the menu bar under X when no X toolkit support is available. */
2116#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
2117 { 2034 {
2118 /* Allocate a dummy window if not already done. */ 2035 /* Allocate a dummy window if not already done. */
2119 struct window *w; 2036 struct window *w;
@@ -2137,10 +2054,9 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f)
2137 w->total_cols = FRAME_TOTAL_COLS (f); 2054 w->total_cols = FRAME_TOTAL_COLS (f);
2138 allocate_matrices_for_window_redisplay (w); 2055 allocate_matrices_for_window_redisplay (w);
2139 } 2056 }
2140#endif /* not USE_X_TOOLKIT && not USE_GTK */ 2057#endif
2141#endif /* HAVE_X_WINDOWS */
2142 2058
2143#ifndef USE_GTK 2059#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
2144 { 2060 {
2145 /* Allocate/ reallocate matrices of the tool bar window. If we 2061 /* Allocate/ reallocate matrices of the tool bar window. If we
2146 don't have a tool bar window yet, make one. */ 2062 don't have a tool bar window yet, make one. */
@@ -2214,6 +2130,7 @@ free_glyphs (struct frame *f)
2214 } 2130 }
2215#endif 2131#endif
2216 2132
2133#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
2217 /* Free the tool bar window and its glyph matrices. */ 2134 /* Free the tool bar window and its glyph matrices. */
2218 if (!NILP (f->tool_bar_window)) 2135 if (!NILP (f->tool_bar_window))
2219 { 2136 {
@@ -2223,6 +2140,7 @@ free_glyphs (struct frame *f)
2223 w->desired_matrix = w->current_matrix = NULL; 2140 w->desired_matrix = w->current_matrix = NULL;
2224 fset_tool_bar_window (f, Qnil); 2141 fset_tool_bar_window (f, Qnil);
2225 } 2142 }
2143#endif
2226 2144
2227 /* Release frame glyph matrices. Reset fields to zero in 2145 /* Release frame glyph matrices. Reset fields to zero in
2228 case we are called a second time. */ 2146 case we are called a second time. */
@@ -3105,6 +3023,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p)
3105 update_window (XWINDOW (f->menu_bar_window), 1); 3023 update_window (XWINDOW (f->menu_bar_window), 1);
3106#endif 3024#endif
3107 3025
3026#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
3108 /* Update the tool-bar window, if present. */ 3027 /* Update the tool-bar window, if present. */
3109 if (WINDOWP (f->tool_bar_window)) 3028 if (WINDOWP (f->tool_bar_window))
3110 { 3029 {
@@ -3125,21 +3044,11 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p)
3125 fset_desired_tool_bar_string (f, tem); 3044 fset_desired_tool_bar_string (f, tem);
3126 } 3045 }
3127 } 3046 }
3128 3047#endif
3129 3048
3130 /* Update windows. */ 3049 /* Update windows. */
3131 paused_p = update_window_tree (root_window, force_p); 3050 paused_p = update_window_tree (root_window, force_p);
3132 update_end (f); 3051 update_end (f);
3133
3134 /* This flush is a performance bottleneck under X,
3135 and it doesn't seem to be necessary anyway (in general).
3136 It is necessary when resizing the window with the mouse, or
3137 at least the fringes are not redrawn in a timely manner. ++kfs */
3138 if (f->force_flush_display_p)
3139 {
3140 FRAME_RIF (f)->flush_display (f);
3141 f->force_flush_display_p = 0;
3142 }
3143 } 3052 }
3144 else 3053 else
3145 { 3054 {
@@ -4568,7 +4477,7 @@ update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p)
4568 } 4477 }
4569 } 4478 }
4570 4479
4571 lint_assume (0 <= FRAME_LINES (f)); 4480 assume (0 <= FRAME_LINES (f));
4572 pause_p = 0 < i && i < FRAME_LINES (f) - 1; 4481 pause_p = 0 < i && i < FRAME_LINES (f) - 1;
4573 4482
4574 /* Now just clean up termcap drivers and set cursor, etc. */ 4483 /* Now just clean up termcap drivers and set cursor, etc. */
@@ -5608,8 +5517,10 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth,
5608 if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f)) 5517 if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f))
5609 FrameCols (FRAME_TTY (f)) = newwidth; 5518 FrameCols (FRAME_TTY (f)) = newwidth;
5610 5519
5520#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
5611 if (WINDOWP (f->tool_bar_window)) 5521 if (WINDOWP (f->tool_bar_window))
5612 XWINDOW (f->tool_bar_window)->total_cols = newwidth; 5522 XWINDOW (f->tool_bar_window)->total_cols = newwidth;
5523#endif
5613 } 5524 }
5614 5525
5615 FRAME_LINES (f) = newheight; 5526 FRAME_LINES (f) = newheight;
@@ -5627,7 +5538,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth,
5627 w->cursor.vpos = w->cursor.y = 0; 5538 w->cursor.vpos = w->cursor.y = 0;
5628 } 5539 }
5629 5540
5630 adjust_glyphs (f); 5541 adjust_frame_glyphs (f);
5631 calculate_costs (f); 5542 calculate_costs (f);
5632 SET_FRAME_GARBAGED (f); 5543 SET_FRAME_GARBAGED (f);
5633 f->resized_p = 1; 5544 f->resized_p = 1;
diff --git a/src/disptab.h b/src/disptab.h
index e02bab04bbc..87dc5a22a68 100644
--- a/src/disptab.h
+++ b/src/disptab.h
@@ -59,7 +59,7 @@ extern Lisp_Object Qdisplay_table;
59/* Return the current base (for indexing) of the GLYPH table, 59/* Return the current base (for indexing) of the GLYPH table,
60 or 0 if the table isn't currently valid. */ 60 or 0 if the table isn't currently valid. */
61#define GLYPH_TABLE_BASE \ 61#define GLYPH_TABLE_BASE \
62 ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->contents : 0) 62 ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->u.contents : 0)
63 63
64/* Given BASE and LEN returned by the two previous macros, 64/* Given BASE and LEN returned by the two previous macros,
65 return nonzero if the GLYPH code G should be output as a single 65 return nonzero if the GLYPH code G should be output as a single
diff --git a/src/emacs.c b/src/emacs.c
index 05384145330..79f759cd5b5 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1,7 +1,7 @@
1/* Fully extensible Emacs, running on Unix, intended for GNU. 1/* Fully extensible Emacs, running on Unix, intended for GNU.
2 2
3Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2013 Free Software 3Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2013
4Foundation, Inc. 4 Free Software Foundation, Inc.
5 5
6This file is part of GNU Emacs. 6This file is part of GNU Emacs.
7 7
@@ -18,8 +18,9 @@ GNU General Public License for more details.
18You should have received a copy of the GNU General Public License 18You should have received a copy of the GNU General Public License
19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ 19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21 21#define INLINE EXTERN_INLINE
22#include <config.h> 22#include <config.h>
23
23#include <errno.h> 24#include <errno.h>
24#include <stdio.h> 25#include <stdio.h>
25 26
@@ -72,6 +73,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
72#include "termhooks.h" 73#include "termhooks.h"
73#include "keyboard.h" 74#include "keyboard.h"
74#include "keymap.h" 75#include "keymap.h"
76#include "category.h"
77#include "charset.h"
78#include "composite.h"
79#include "dispextern.h"
80#include "syntax.h"
81#include "systime.h"
75 82
76#ifdef HAVE_GNUTLS 83#ifdef HAVE_GNUTLS
77#include "gnutls.h" 84#include "gnutls.h"
@@ -310,7 +317,7 @@ example, -batch as well as --batch. You can use any unambiguous\n\
310abbreviation for a --option.\n\ 317abbreviation for a --option.\n\
311\n\ 318\n\
312Various environment variables and window system resources also affect\n\ 319Various environment variables and window system resources also affect\n\
313Emacs' operation. See the main documentation.\n\ 320the operation of Emacs. See the main documentation.\n\
314\n\ 321\n\
315Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs\n\ 322Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs\n\
316section of the Emacs manual or the file BUGS.\n" 323section of the Emacs manual or the file BUGS.\n"
diff --git a/src/eval.c b/src/eval.c
index 1ce14ae94a6..6e964f6604b 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2033,7 +2033,9 @@ it is defines a macro. */)
2033 2033
2034DEFUN ("eval", Feval, Seval, 1, 2, 0, 2034DEFUN ("eval", Feval, Seval, 1, 2, 0,
2035 doc: /* Evaluate FORM and return its value. 2035 doc: /* Evaluate FORM and return its value.
2036If LEXICAL is t, evaluate using lexical scoping. */) 2036If LEXICAL is t, evaluate using lexical scoping.
2037LEXICAL can also be an actual lexical environment, in the form of an
2038alist mapping symbols to their value. */)
2037 (Lisp_Object form, Lisp_Object lexical) 2039 (Lisp_Object form, Lisp_Object lexical)
2038{ 2040{
2039 ptrdiff_t count = SPECPDL_INDEX (); 2041 ptrdiff_t count = SPECPDL_INDEX ();
@@ -2146,11 +2148,10 @@ eval_sub (Lisp_Object form)
2146 2148
2147 /* Optimize for no indirection. */ 2149 /* Optimize for no indirection. */
2148 fun = original_fun; 2150 fun = original_fun;
2149 if (SYMBOLP (fun) && !NILP (fun) 2151 if (!SYMBOLP (fun))
2150 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2151 fun = indirect_function (fun);
2152 else
2153 fun = Ffunction (Fcons (fun, Qnil)); 2152 fun = Ffunction (Fcons (fun, Qnil));
2153 else if (!NILP (fun) && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2154 fun = indirect_function (fun);
2154 2155
2155 if (SUBRP (fun)) 2156 if (SUBRP (fun))
2156 { 2157 {
diff --git a/src/fileio.c b/src/fileio.c
index 0e6113f349d..1a2bdfa237c 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5121,7 +5121,8 @@ DEFUN ("car-less-than-car", Fcar_less_than_car, Scar_less_than_car, 2, 2, 0,
5121 doc: /* Return t if (car A) is numerically less than (car B). */) 5121 doc: /* Return t if (car A) is numerically less than (car B). */)
5122 (Lisp_Object a, Lisp_Object b) 5122 (Lisp_Object a, Lisp_Object b)
5123{ 5123{
5124 return Flss (Fcar (a), Fcar (b)); 5124 Lisp_Object args[2] = { Fcar (a), Fcar (b), };
5125 return Flss (2, args);
5125} 5126}
5126 5127
5127/* Build the complete list of annotations appropriate for writing out 5128/* Build the complete list of annotations appropriate for writing out
diff --git a/src/filelock.c b/src/filelock.c
index df72eff5950..2f53047f526 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -459,10 +459,18 @@ lock_file_1 (char *lfname, bool force)
459 char lock_info_str[MAX_LFINFO + 1]; 459 char lock_info_str[MAX_LFINFO + 1];
460 printmax_t pid = getpid (); 460 printmax_t pid = getpid ();
461 461
462 if (sizeof lock_info_str 462 if (boot)
463 <= snprintf (lock_info_str, sizeof lock_info_str, 463 {
464 boot ? "%s@%s.%"pMd":%"pMd : "%s@%s.%"pMd, 464 if (sizeof lock_info_str
465 user_name, host_name, pid, boot)) 465 <= snprintf (lock_info_str, sizeof lock_info_str,
466 "%s@%s.%"pMd":%"pMd,
467 user_name, host_name, pid, boot))
468 return ENAMETOOLONG;
469 }
470 else if (sizeof lock_info_str
471 <= snprintf (lock_info_str, sizeof lock_info_str,
472 "%s@%s.%"pMd,
473 user_name, host_name, pid))
466 return ENAMETOOLONG; 474 return ENAMETOOLONG;
467 475
468 return create_lock_file (lfname, lock_info_str, force); 476 return create_lock_file (lfname, lock_info_str, force);
diff --git a/src/fns.c b/src/fns.c
index de90fd731fb..e4618919640 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1604,7 +1604,7 @@ changing the value of a sequence `foo'. */)
1604 1604
1605 for (i = n = 0; i < ASIZE (seq); ++i) 1605 for (i = n = 0; i < ASIZE (seq); ++i)
1606 if (NILP (Fequal (AREF (seq, i), elt))) 1606 if (NILP (Fequal (AREF (seq, i), elt)))
1607 p->contents[n++] = AREF (seq, i); 1607 p->u.contents[n++] = AREF (seq, i);
1608 1608
1609 XSETVECTOR (seq, p); 1609 XSETVECTOR (seq, p);
1610 } 1610 }
@@ -3450,7 +3450,7 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
3450{ 3450{
3451 struct Lisp_Vector *v; 3451 struct Lisp_Vector *v;
3452 ptrdiff_t i, incr, incr_max, old_size, new_size; 3452 ptrdiff_t i, incr, incr_max, old_size, new_size;
3453 ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->contents; 3453 ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->u.contents;
3454 ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max 3454 ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max
3455 ? nitems_max : C_language_max); 3455 ? nitems_max : C_language_max);
3456 eassert (VECTORP (vec)); 3456 eassert (VECTORP (vec));
@@ -3462,9 +3462,9 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
3462 memory_full (SIZE_MAX); 3462 memory_full (SIZE_MAX);
3463 new_size = old_size + incr; 3463 new_size = old_size + incr;
3464 v = allocate_vector (new_size); 3464 v = allocate_vector (new_size);
3465 memcpy (v->contents, XVECTOR (vec)->contents, old_size * sizeof *v->contents); 3465 memcpy (v->u.contents, XVECTOR (vec)->u.contents, old_size * sizeof *v->u.contents);
3466 for (i = old_size; i < new_size; ++i) 3466 for (i = old_size; i < new_size; ++i)
3467 v->contents[i] = Qnil; 3467 v->u.contents[i] = Qnil;
3468 XSETVECTOR (vec, v); 3468 XSETVECTOR (vec, v);
3469 return vec; 3469 return vec;
3470} 3470}
diff --git a/src/font.c b/src/font.c
index 49398e1b876..68db9f2ef2d 100644
--- a/src/font.c
+++ b/src/font.c
@@ -2861,19 +2861,19 @@ font_open_entity (struct frame *f, Lisp_Object entity, int pixel_size)
2861 : 1); 2861 : 1);
2862 height = (font->height ? font->height : 1); 2862 height = (font->height ? font->height : 1);
2863#ifdef HAVE_WINDOW_SYSTEM 2863#ifdef HAVE_WINDOW_SYSTEM
2864 FRAME_X_DISPLAY_INFO (f)->n_fonts++; 2864 FRAME_DISPLAY_INFO (f)->n_fonts++;
2865 if (FRAME_X_DISPLAY_INFO (f)->n_fonts == 1) 2865 if (FRAME_DISPLAY_INFO (f)->n_fonts == 1)
2866 { 2866 {
2867 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width; 2867 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width;
2868 FRAME_SMALLEST_FONT_HEIGHT (f) = height; 2868 FRAME_SMALLEST_FONT_HEIGHT (f) = height;
2869 fonts_changed_p = 1; 2869 f->fonts_changed = 1;
2870 } 2870 }
2871 else 2871 else
2872 { 2872 {
2873 if (FRAME_SMALLEST_CHAR_WIDTH (f) > min_width) 2873 if (FRAME_SMALLEST_CHAR_WIDTH (f) > min_width)
2874 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width, fonts_changed_p = 1; 2874 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width, f->fonts_changed = 1;
2875 if (FRAME_SMALLEST_FONT_HEIGHT (f) > height) 2875 if (FRAME_SMALLEST_FONT_HEIGHT (f) > height)
2876 FRAME_SMALLEST_FONT_HEIGHT (f) = height, fonts_changed_p = 1; 2876 FRAME_SMALLEST_FONT_HEIGHT (f) = height, f->fonts_changed = 1;
2877 } 2877 }
2878#endif 2878#endif
2879 2879
@@ -2894,8 +2894,8 @@ font_close_object (struct frame *f, Lisp_Object font_object)
2894 FONT_ADD_LOG ("close", font_object, Qnil); 2894 FONT_ADD_LOG ("close", font_object, Qnil);
2895 font->driver->close (f, font); 2895 font->driver->close (f, font);
2896#ifdef HAVE_WINDOW_SYSTEM 2896#ifdef HAVE_WINDOW_SYSTEM
2897 eassert (FRAME_X_DISPLAY_INFO (f)->n_fonts); 2897 eassert (FRAME_DISPLAY_INFO (f)->n_fonts);
2898 FRAME_X_DISPLAY_INFO (f)->n_fonts--; 2898 FRAME_DISPLAY_INFO (f)->n_fonts--;
2899#endif 2899#endif
2900} 2900}
2901 2901
@@ -5197,9 +5197,6 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */);
5197#ifdef HAVE_NTGUI 5197#ifdef HAVE_NTGUI
5198 syms_of_w32font (); 5198 syms_of_w32font ();
5199#endif /* HAVE_NTGUI */ 5199#endif /* HAVE_NTGUI */
5200#ifdef HAVE_NS
5201 syms_of_nsfont ();
5202#endif /* HAVE_NS */
5203#endif /* HAVE_WINDOW_SYSTEM */ 5200#endif /* HAVE_WINDOW_SYSTEM */
5204} 5201}
5205 5202
diff --git a/src/font.h b/src/font.h
index 3e0d97baaac..0ec56590916 100644
--- a/src/font.h
+++ b/src/font.h
@@ -825,6 +825,7 @@ extern void syms_of_w32font (void);
825extern Lisp_Object Qfontsize; 825extern Lisp_Object Qfontsize;
826extern struct font_driver nsfont_driver; 826extern struct font_driver nsfont_driver;
827extern void syms_of_nsfont (void); 827extern void syms_of_nsfont (void);
828extern void syms_of_macfont (void);
828#endif /* HAVE_NS */ 829#endif /* HAVE_NS */
829 830
830#ifndef FONT_DEBUG 831#ifndef FONT_DEBUG
diff --git a/src/fontset.c b/src/fontset.c
index a6277b050d5..15fdf9f41a0 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -39,17 +39,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
39#include "intervals.h" 39#include "intervals.h"
40#include "fontset.h" 40#include "fontset.h"
41#include "window.h" 41#include "window.h"
42#ifdef HAVE_X_WINDOWS 42#ifdef HAVE_WINDOW_SYSTEM
43#include "xterm.h" 43#include TERM_HEADER
44#endif 44#endif /* HAVE_WINDOW_SYSTEM */
45#ifdef HAVE_NTGUI
46#include "w32term.h"
47#endif
48#ifdef HAVE_NS
49#include "nsterm.h"
50#endif
51#include "termhooks.h" 45#include "termhooks.h"
52
53#include "font.h" 46#include "font.h"
54 47
55/* FONTSET 48/* FONTSET
@@ -460,7 +453,7 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
460 } 453 }
461 454
462 if (score_changed) 455 if (score_changed)
463 qsort (XVECTOR (vec)->contents, size, word_size, 456 qsort (XVECTOR (vec)->u.contents, size, word_size,
464 fontset_compare_rfontdef); 457 fontset_compare_rfontdef);
465 XSETCAR (font_group, make_number (charset_ordered_list_tick)); 458 XSETCAR (font_group, make_number (charset_ordered_list_tick));
466} 459}
diff --git a/src/frame.c b/src/frame.c
index b4638ed53c8..2e90713b6c3 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -19,8 +19,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
19 19
20#include <config.h> 20#include <config.h>
21 21
22#define FRAME_INLINE EXTERN_INLINE
23
24#include <stdio.h> 22#include <stdio.h>
25#include <errno.h> 23#include <errno.h>
26#include <limits.h> 24#include <limits.h>
@@ -115,6 +113,19 @@ static Lisp_Object Qdelete_frame_functions;
115 113
116static Lisp_Object Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource; 114static Lisp_Object Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource;
117 115
116/* The currently selected frame. */
117
118Lisp_Object selected_frame;
119
120/* A frame which is not just a mini-buffer, or NULL if there are no such
121 frames. This is usually the most recent such frame that was selected. */
122
123static struct frame *last_nonminibuf_frame;
124
125/* Nonzero means there is at least one garbaged frame. */
126
127bool frame_garbaged;
128
118#ifdef HAVE_WINDOW_SYSTEM 129#ifdef HAVE_WINDOW_SYSTEM
119static void x_report_frame_params (struct frame *, Lisp_Object *); 130static void x_report_frame_params (struct frame *, Lisp_Object *);
120#endif 131#endif
@@ -224,7 +235,7 @@ set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
224 FRAME_WINDOW_SIZES_CHANGED (f) = 1; 235 FRAME_WINDOW_SIZES_CHANGED (f) = 1;
225 FRAME_MENU_BAR_LINES (f) = nlines; 236 FRAME_MENU_BAR_LINES (f) = nlines;
226 set_menu_bar_lines_1 (f->root_window, nlines - olines); 237 set_menu_bar_lines_1 (f->root_window, nlines - olines);
227 adjust_glyphs (f); 238 adjust_frame_glyphs (f);
228 } 239 }
229} 240}
230 241
@@ -548,6 +559,8 @@ make_initial_frame (void)
548 if (!noninteractive) 559 if (!noninteractive)
549 init_frame_faces (f); 560 init_frame_faces (f);
550 561
562 last_nonminibuf_frame = f;
563
551 return f; 564 return f;
552} 565}
553 566
@@ -712,7 +725,7 @@ affects all frames on the same terminal device. */)
712 change_frame_size (f, height, width, 0, 0, 0); 725 change_frame_size (f, height, width, 0, 0, 0);
713 } 726 }
714 727
715 adjust_glyphs (f); 728 adjust_frame_glyphs (f);
716 calculate_costs (f); 729 calculate_costs (f);
717 XSETFRAME (frame, f); 730 XSETFRAME (frame, f);
718 731
@@ -1108,7 +1121,7 @@ other_visible_frames (struct frame *f)
1108 1121
1109 /* Verify that we can still talk to the frame's X window, 1122 /* Verify that we can still talk to the frame's X window,
1110 and note any recent change in visibility. */ 1123 and note any recent change in visibility. */
1111#ifdef HAVE_WINDOW_SYSTEM 1124#ifdef HAVE_X_WINDOWS
1112 if (FRAME_WINDOW_P (XFRAME (this))) 1125 if (FRAME_WINDOW_P (XFRAME (this)))
1113 x_sync (XFRAME (this)); 1126 x_sync (XFRAME (this));
1114#endif 1127#endif
@@ -1901,6 +1914,17 @@ See `redirect-frame-focus'. */)
1901 return FRAME_FOCUS_FRAME (decode_live_frame (frame)); 1914 return FRAME_FOCUS_FRAME (decode_live_frame (frame));
1902} 1915}
1903 1916
1917DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
1918 doc: /* Set the input focus to FRAME.
1919FRAME nil means use the selected frame.
1920If there is no window system support, this function does nothing. */)
1921 (Lisp_Object frame)
1922{
1923#ifdef HAVE_WINDOW_SYSTEM
1924 x_focus_frame (decode_window_system_frame (frame));
1925#endif
1926 return Qnil;
1927}
1904 1928
1905 1929
1906/* Return the value of frame parameter PROP in frame FRAME. */ 1930/* Return the value of frame parameter PROP in frame FRAME. */
@@ -2207,7 +2231,7 @@ If FRAME is nil, describe the currently selected frame. */)
2207 value = f->name; 2231 value = f->name;
2208#ifdef HAVE_X_WINDOWS 2232#ifdef HAVE_X_WINDOWS
2209 else if (EQ (parameter, Qdisplay) && FRAME_X_P (f)) 2233 else if (EQ (parameter, Qdisplay) && FRAME_X_P (f))
2210 value = XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element); 2234 value = XCAR (FRAME_DISPLAY_INFO (f)->name_list_element);
2211#endif /* HAVE_X_WINDOWS */ 2235#endif /* HAVE_X_WINDOWS */
2212 else if (EQ (parameter, Qbackground_color) 2236 else if (EQ (parameter, Qbackground_color)
2213 || EQ (parameter, Qforeground_color)) 2237 || EQ (parameter, Qforeground_color))
@@ -2598,7 +2622,7 @@ x_fullscreen_adjust (struct frame *f, int *width, int *height, int *top_pos, int
2598{ 2622{
2599 int newwidth = FRAME_COLS (f); 2623 int newwidth = FRAME_COLS (f);
2600 int newheight = FRAME_LINES (f); 2624 int newheight = FRAME_LINES (f);
2601 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2625 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
2602 2626
2603 *top_pos = f->top_pos; 2627 *top_pos = f->top_pos;
2604 *left_pos = f->left_pos; 2628 *left_pos = f->left_pos;
@@ -2973,9 +2997,9 @@ x_report_frame_params (struct frame *f, Lisp_Object *alistptr)
2973 (FRAME_VISIBLE_P (f) ? Qt 2997 (FRAME_VISIBLE_P (f) ? Qt
2974 : FRAME_ICONIFIED_P (f) ? Qicon : Qnil)); 2998 : FRAME_ICONIFIED_P (f) ? Qicon : Qnil));
2975 store_in_alist (alistptr, Qdisplay, 2999 store_in_alist (alistptr, Qdisplay,
2976 XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element)); 3000 XCAR (FRAME_DISPLAY_INFO (f)->name_list_element));
2977 3001
2978 if (FRAME_X_OUTPUT (f)->parent_desc == FRAME_X_DISPLAY_INFO (f)->root_window) 3002 if (FRAME_X_OUTPUT (f)->parent_desc == FRAME_DISPLAY_INFO (f)->root_window)
2979 tem = Qnil; 3003 tem = Qnil;
2980 else 3004 else
2981 tem = make_natnum ((uintptr_t) FRAME_X_OUTPUT (f)->parent_desc); 3005 tem = make_natnum ((uintptr_t) FRAME_X_OUTPUT (f)->parent_desc);
@@ -3358,9 +3382,6 @@ x_set_scroll_bar_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
3358 else if (RANGED_INTEGERP (1, arg, INT_MAX) 3382 else if (RANGED_INTEGERP (1, arg, INT_MAX)
3359 && XFASTINT (arg) != FRAME_CONFIG_SCROLL_BAR_WIDTH (f)) 3383 && XFASTINT (arg) != FRAME_CONFIG_SCROLL_BAR_WIDTH (f))
3360 { 3384 {
3361 if (XFASTINT (arg) <= 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM)
3362 XSETINT (arg, 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM + 1);
3363
3364 FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = XFASTINT (arg); 3385 FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = XFASTINT (arg);
3365 FRAME_CONFIG_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid; 3386 FRAME_CONFIG_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid;
3366 if (FRAME_X_WINDOW (f)) 3387 if (FRAME_X_WINDOW (f))
@@ -3373,22 +3394,6 @@ x_set_scroll_bar_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
3373 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0; 3394 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0;
3374} 3395}
3375 3396
3376
3377
3378/* Return non-nil if frame F wants a bitmap icon. */
3379
3380Lisp_Object
3381x_icon_type (struct frame *f)
3382{
3383 Lisp_Object tem;
3384
3385 tem = assq_no_quit (Qicon_type, f->param_alist);
3386 if (CONSP (tem))
3387 return XCDR (tem);
3388 else
3389 return Qnil;
3390}
3391
3392void 3397void
3393x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval) 3398x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
3394{ 3399{
@@ -3440,7 +3445,33 @@ x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
3440 return; 3445 return;
3441} 3446}
3442 3447
3443 3448#ifndef HAVE_NS
3449
3450/* Non-zero if mouse is grabbed on DPYINFO
3451 and we know the frame where it is. */
3452
3453bool x_mouse_grabbed (Display_Info *dpyinfo)
3454{
3455 return (dpyinfo->grabbed
3456 && dpyinfo->last_mouse_frame
3457 && FRAME_LIVE_P (dpyinfo->last_mouse_frame));
3458}
3459
3460/* Re-highlight something with mouse-face properties
3461 on DPYINFO using saved frame and mouse position. */
3462
3463void
3464x_redo_mouse_highlight (Display_Info *dpyinfo)
3465{
3466 if (dpyinfo->last_mouse_motion_frame
3467 && FRAME_LIVE_P (dpyinfo->last_mouse_motion_frame))
3468 note_mouse_highlight (dpyinfo->last_mouse_motion_frame,
3469 dpyinfo->last_mouse_motion_x,
3470 dpyinfo->last_mouse_motion_y);
3471}
3472
3473#endif /* HAVE_NS */
3474
3444/* Subroutines of creating an X frame. */ 3475/* Subroutines of creating an X frame. */
3445 3476
3446/* Make sure that Vx_resource_name is set to a reasonable value. 3477/* Make sure that Vx_resource_name is set to a reasonable value.
@@ -3512,11 +3543,6 @@ validate_x_resource_name (void)
3512 } 3543 }
3513} 3544}
3514 3545
3515
3516extern char *x_get_string_resource (XrmDatabase, const char *, const char *);
3517extern Display_Info *check_x_display_info (Lisp_Object);
3518
3519
3520/* Get specified attribute from resource database RDB. 3546/* Get specified attribute from resource database RDB.
3521 See Fx_get_resource below for other parameters. */ 3547 See Fx_get_resource below for other parameters. */
3522 3548
@@ -3631,7 +3657,7 @@ x_get_resource_string (const char *attribute, const char *class)
3631 esprintf (name_key, "%s.%s", SSDATA (Vinvocation_name), attribute); 3657 esprintf (name_key, "%s.%s", SSDATA (Vinvocation_name), attribute);
3632 sprintf (class_key, "%s.%s", EMACS_CLASS, class); 3658 sprintf (class_key, "%s.%s", EMACS_CLASS, class);
3633 3659
3634 result = x_get_string_resource (FRAME_X_DISPLAY_INFO (sf)->xrdb, 3660 result = x_get_string_resource (FRAME_DISPLAY_INFO (sf)->xrdb,
3635 name_key, class_key); 3661 name_key, class_key);
3636 SAFE_FREE (); 3662 SAFE_FREE ();
3637 return result; 3663 return result;
@@ -3753,7 +3779,7 @@ x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param,
3753 const char *attribute, const char *class, 3779 const char *attribute, const char *class,
3754 enum resource_types type) 3780 enum resource_types type)
3755{ 3781{
3756 return x_get_arg (FRAME_X_DISPLAY_INFO (f), 3782 return x_get_arg (FRAME_DISPLAY_INFO (f),
3757 alist, param, attribute, class, type); 3783 alist, param, attribute, class, type);
3758} 3784}
3759 3785
@@ -3767,7 +3793,7 @@ x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist,
3767{ 3793{
3768 Lisp_Object value; 3794 Lisp_Object value;
3769 3795
3770 value = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, param, 3796 value = x_get_arg (FRAME_DISPLAY_INFO (f), alist, param,
3771 attribute, class, type); 3797 attribute, class, type);
3772 if (! NILP (value) && ! EQ (value, Qunbound)) 3798 if (! NILP (value) && ! EQ (value, Qunbound))
3773 store_frame_param (f, param, value); 3799 store_frame_param (f, param, value);
@@ -3971,7 +3997,7 @@ x_figure_window_size (struct frame *f, Lisp_Object parms, bool toolbar_p)
3971{ 3997{
3972 register Lisp_Object tem0, tem1, tem2; 3998 register Lisp_Object tem0, tem1, tem2;
3973 long window_prompting = 0; 3999 long window_prompting = 0;
3974 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 4000 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
3975 4001
3976 /* Default values if we fall through. 4002 /* Default values if we fall through.
3977 Actually, if that happens we should get 4003 Actually, if that happens we should get
@@ -4524,6 +4550,7 @@ automatically. See also `mouse-autoselect-window'. */);
4524 defsubr (&Svisible_frame_list); 4550 defsubr (&Svisible_frame_list);
4525 defsubr (&Sraise_frame); 4551 defsubr (&Sraise_frame);
4526 defsubr (&Slower_frame); 4552 defsubr (&Slower_frame);
4553 defsubr (&Sx_focus_frame);
4527 defsubr (&Sredirect_frame_focus); 4554 defsubr (&Sredirect_frame_focus);
4528 defsubr (&Sframe_focus); 4555 defsubr (&Sframe_focus);
4529 defsubr (&Sframe_parameters); 4556 defsubr (&Sframe_parameters);
diff --git a/src/frame.h b/src/frame.h
index 17b6089120a..09e4112d3a2 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -27,9 +27,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
27#include "termhooks.h" 27#include "termhooks.h"
28 28
29INLINE_HEADER_BEGIN 29INLINE_HEADER_BEGIN
30#ifndef FRAME_INLINE
31# define FRAME_INLINE INLINE
32#endif
33 30
34enum vertical_scroll_bar_type 31enum vertical_scroll_bar_type
35{ 32{
@@ -145,9 +142,15 @@ struct frame
145 Lisp_Object menu_bar_window; 142 Lisp_Object menu_bar_window;
146#endif 143#endif
147 144
145#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
148 /* A window used to display the tool-bar of a frame. */ 146 /* A window used to display the tool-bar of a frame. */
149 Lisp_Object tool_bar_window; 147 Lisp_Object tool_bar_window;
150 148
149 /* Desired and current contents displayed in that window. */
150 Lisp_Object desired_tool_bar_string;
151 Lisp_Object current_tool_bar_string;
152#endif
153
151 /* Desired and current tool-bar items. */ 154 /* Desired and current tool-bar items. */
152 Lisp_Object tool_bar_items; 155 Lisp_Object tool_bar_items;
153 156
@@ -155,10 +158,6 @@ struct frame
155 tool bar only supports top. */ 158 tool bar only supports top. */
156 Lisp_Object tool_bar_position; 159 Lisp_Object tool_bar_position;
157 160
158 /* Desired and current contents displayed in tool_bar_window. */
159 Lisp_Object desired_tool_bar_string;
160 Lisp_Object current_tool_bar_string;
161
162 /* Beyond here, there should be no more Lisp_Object components. */ 161 /* Beyond here, there should be no more Lisp_Object components. */
163 162
164 /* Cache of realized faces. */ 163 /* Cache of realized faces. */
@@ -185,10 +184,6 @@ struct frame
185 Clear the frame in clear_garbaged_frames if set. */ 184 Clear the frame in clear_garbaged_frames if set. */
186 unsigned resized_p : 1; 185 unsigned resized_p : 1;
187 186
188 /* Set to non-zero in when we want for force a flush_display in
189 update_frame, usually after resizing the frame. */
190 unsigned force_flush_display_p : 1;
191
192 /* Set to non-zero if the default face for the frame has been 187 /* Set to non-zero if the default face for the frame has been
193 realized. Reset to zero whenever the default face changes. 188 realized. Reset to zero whenever the default face changes.
194 Used to see the difference between a font change and face change. */ 189 Used to see the difference between a font change and face change. */
@@ -201,15 +196,24 @@ struct frame
201 /* Set to non-zero when current redisplay has updated frame. */ 196 /* Set to non-zero when current redisplay has updated frame. */
202 unsigned updated_p : 1; 197 unsigned updated_p : 1;
203 198
199#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
204 /* Set to non-zero to minimize tool-bar height even when 200 /* Set to non-zero to minimize tool-bar height even when
205 auto-resize-tool-bar is set to grow-only. */ 201 auto-resize-tool-bar is set to grow-only. */
206 unsigned minimize_tool_bar_window_p : 1; 202 unsigned minimize_tool_bar_window_p : 1;
203#endif
207 204
208#if defined (USE_GTK) || defined (HAVE_NS) 205#if defined (USE_GTK) || defined (HAVE_NS)
209 /* Nonzero means using a tool bar that comes from the toolkit. */ 206 /* Nonzero means using a tool bar that comes from the toolkit. */
210 unsigned external_tool_bar : 1; 207 unsigned external_tool_bar : 1;
211#endif 208#endif
212 209
210 /* Nonzero means that fonts have been loaded since the last glyph
211 matrix adjustments. */
212 unsigned fonts_changed : 1;
213
214 /* Nonzero means that cursor type has been changed. */
215 unsigned cursor_type_changed : 1;
216
213 /* Margin at the top of the frame. Used to display the tool-bar. */ 217 /* Margin at the top of the frame. Used to display the tool-bar. */
214 int tool_bar_lines; 218 int tool_bar_lines;
215 219
@@ -321,6 +325,11 @@ struct frame
321 unsigned int external_menu_bar : 1; 325 unsigned int external_menu_bar : 1;
322#endif 326#endif
323 327
328#if defined (HAVE_X_WINDOWS)
329 /* Used by x_wait_for_event when watching for an X event on this frame. */
330 int wait_event_type;
331#endif
332
324 /* Next two bitfields are mutually exclusive. They might both be 333 /* Next two bitfields are mutually exclusive. They might both be
325 zero if the frame has been made invisible without an icon. */ 334 zero if the frame has been made invisible without an icon. */
326 335
@@ -436,112 +445,114 @@ struct frame
436 445
437/* Most code should use these functions to set Lisp fields in struct frame. */ 446/* Most code should use these functions to set Lisp fields in struct frame. */
438 447
439FRAME_INLINE void 448INLINE void
440fset_buffer_list (struct frame *f, Lisp_Object val) 449fset_buffer_list (struct frame *f, Lisp_Object val)
441{ 450{
442 f->buffer_list = val; 451 f->buffer_list = val;
443} 452}
444FRAME_INLINE void 453INLINE void
445fset_buried_buffer_list (struct frame *f, Lisp_Object val) 454fset_buried_buffer_list (struct frame *f, Lisp_Object val)
446{ 455{
447 f->buried_buffer_list = val; 456 f->buried_buffer_list = val;
448} 457}
449FRAME_INLINE void 458INLINE void
450fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) 459fset_condemned_scroll_bars (struct frame *f, Lisp_Object val)
451{ 460{
452 f->condemned_scroll_bars = val; 461 f->condemned_scroll_bars = val;
453} 462}
454FRAME_INLINE void 463INLINE void
455fset_current_tool_bar_string (struct frame *f, Lisp_Object val)
456{
457 f->current_tool_bar_string = val;
458}
459FRAME_INLINE void
460fset_desired_tool_bar_string (struct frame *f, Lisp_Object val)
461{
462 f->desired_tool_bar_string = val;
463}
464FRAME_INLINE void
465fset_face_alist (struct frame *f, Lisp_Object val) 464fset_face_alist (struct frame *f, Lisp_Object val)
466{ 465{
467 f->face_alist = val; 466 f->face_alist = val;
468} 467}
469FRAME_INLINE void 468INLINE void
470fset_focus_frame (struct frame *f, Lisp_Object val) 469fset_focus_frame (struct frame *f, Lisp_Object val)
471{ 470{
472 f->focus_frame = val; 471 f->focus_frame = val;
473} 472}
474FRAME_INLINE void 473INLINE void
475fset_icon_name (struct frame *f, Lisp_Object val) 474fset_icon_name (struct frame *f, Lisp_Object val)
476{ 475{
477 f->icon_name = val; 476 f->icon_name = val;
478} 477}
479FRAME_INLINE void 478INLINE void
480fset_menu_bar_items (struct frame *f, Lisp_Object val) 479fset_menu_bar_items (struct frame *f, Lisp_Object val)
481{ 480{
482 f->menu_bar_items = val; 481 f->menu_bar_items = val;
483} 482}
484FRAME_INLINE void 483INLINE void
485fset_menu_bar_vector (struct frame *f, Lisp_Object val) 484fset_menu_bar_vector (struct frame *f, Lisp_Object val)
486{ 485{
487 f->menu_bar_vector = val; 486 f->menu_bar_vector = val;
488} 487}
489#if defined (HAVE_X_WINDOWS) && ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) 488#if defined (HAVE_X_WINDOWS) && ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
490FRAME_INLINE void 489INLINE void
491fset_menu_bar_window (struct frame *f, Lisp_Object val) 490fset_menu_bar_window (struct frame *f, Lisp_Object val)
492{ 491{
493 f->menu_bar_window = val; 492 f->menu_bar_window = val;
494} 493}
495#endif 494#endif
496FRAME_INLINE void 495INLINE void
497fset_name (struct frame *f, Lisp_Object val) 496fset_name (struct frame *f, Lisp_Object val)
498{ 497{
499 f->name = val; 498 f->name = val;
500} 499}
501FRAME_INLINE void 500INLINE void
502fset_param_alist (struct frame *f, Lisp_Object val) 501fset_param_alist (struct frame *f, Lisp_Object val)
503{ 502{
504 f->param_alist = val; 503 f->param_alist = val;
505} 504}
506FRAME_INLINE void 505INLINE void
507fset_root_window (struct frame *f, Lisp_Object val) 506fset_root_window (struct frame *f, Lisp_Object val)
508{ 507{
509 f->root_window = val; 508 f->root_window = val;
510} 509}
511FRAME_INLINE void 510INLINE void
512fset_scroll_bars (struct frame *f, Lisp_Object val) 511fset_scroll_bars (struct frame *f, Lisp_Object val)
513{ 512{
514 f->scroll_bars = val; 513 f->scroll_bars = val;
515} 514}
516FRAME_INLINE void 515INLINE void
517fset_selected_window (struct frame *f, Lisp_Object val) 516fset_selected_window (struct frame *f, Lisp_Object val)
518{ 517{
519 f->selected_window = val; 518 f->selected_window = val;
520} 519}
521FRAME_INLINE void 520INLINE void
522fset_title (struct frame *f, Lisp_Object val) 521fset_title (struct frame *f, Lisp_Object val)
523{ 522{
524 f->title = val; 523 f->title = val;
525} 524}
526FRAME_INLINE void 525INLINE void
527fset_tool_bar_items (struct frame *f, Lisp_Object val) 526fset_tool_bar_items (struct frame *f, Lisp_Object val)
528{ 527{
529 f->tool_bar_items = val; 528 f->tool_bar_items = val;
530} 529}
531FRAME_INLINE void 530INLINE void
532fset_tool_bar_position (struct frame *f, Lisp_Object val) 531fset_tool_bar_position (struct frame *f, Lisp_Object val)
533{ 532{
534 f->tool_bar_position = val; 533 f->tool_bar_position = val;
535} 534}
536FRAME_INLINE void 535#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
536INLINE void
537fset_tool_bar_window (struct frame *f, Lisp_Object val) 537fset_tool_bar_window (struct frame *f, Lisp_Object val)
538{ 538{
539 f->tool_bar_window = val; 539 f->tool_bar_window = val;
540} 540}
541INLINE void
542fset_current_tool_bar_string (struct frame *f, Lisp_Object val)
543{
544 f->current_tool_bar_string = val;
545}
546INLINE void
547fset_desired_tool_bar_string (struct frame *f, Lisp_Object val)
548{
549 f->desired_tool_bar_string = val;
550}
551#endif /* HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS */
541 552
542#define NUMVAL(X) ((INTEGERP (X) || FLOATP (X)) ? XFLOATINT (X) : -1) 553#define NUMVAL(X) ((INTEGERP (X) || FLOATP (X)) ? XFLOATINT (X) : -1)
543 554
544FRAME_INLINE double 555INLINE double
545default_pixels_per_inch_x (void) 556default_pixels_per_inch_x (void)
546{ 557{
547 Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch) 558 Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch)
@@ -550,7 +561,7 @@ default_pixels_per_inch_x (void)
550 return NUMVAL (v) > 0 ? NUMVAL (v) : 72.0; 561 return NUMVAL (v) > 0 ? NUMVAL (v) : 72.0;
551} 562}
552 563
553FRAME_INLINE double 564INLINE double
554default_pixels_per_inch_y (void) 565default_pixels_per_inch_y (void)
555{ 566{
556 Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch) 567 Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch)
@@ -591,36 +602,6 @@ default_pixels_per_inch_y (void)
591#define FRAME_NS_P(f) ((f)->output_method == output_ns) 602#define FRAME_NS_P(f) ((f)->output_method == output_ns)
592#endif 603#endif
593 604
594/* Dots per inch of the screen the frame F is on. */
595
596#ifdef HAVE_X_WINDOWS
597#define FRAME_RES_X(f) \
598 (eassert (FRAME_X_P (f)), FRAME_X_DISPLAY_INFO (f)->resx)
599#define FRAME_RES_Y(f) \
600 (eassert (FRAME_X_P (f)), FRAME_X_DISPLAY_INFO (f)->resy)
601#endif
602
603#ifdef HAVE_NTGUI
604#define FRAME_RES_X(f) \
605 (eassert (FRAME_W32_P (f)), FRAME_W32_DISPLAY_INFO (f)->resx)
606#define FRAME_RES_Y(f) \
607 (eassert (FRAME_W32_P (f)), FRAME_W32_DISPLAY_INFO (f)->resy)
608#endif
609
610#ifdef HAVE_NS
611#define FRAME_RES_X(f) \
612 (eassert (FRAME_NS_P (f)), FRAME_NS_DISPLAY_INFO (f)->resx)
613#define FRAME_RES_Y(f) \
614 (eassert (FRAME_NS_P (f)), FRAME_NS_DISPLAY_INFO (f)->resy)
615#endif
616
617/* Defaults when no window system available. */
618
619#ifndef FRAME_RES_X
620#define FRAME_RES_X(f) default_pixels_per_inch_x ()
621#define FRAME_RES_Y(f) default_pixels_per_inch_y ()
622#endif
623
624/* FRAME_WINDOW_P tests whether the frame is a window, and is 605/* FRAME_WINDOW_P tests whether the frame is a window, and is
625 defined to be the predicate for the window system being used. */ 606 defined to be the predicate for the window system being used. */
626 607
@@ -637,14 +618,32 @@ default_pixels_per_inch_y (void)
637#define FRAME_WINDOW_P(f) ((void) (f), 0) 618#define FRAME_WINDOW_P(f) ((void) (f), 0)
638#endif 619#endif
639 620
621/* Dots per inch of the screen the frame F is on. */
622
623#ifdef HAVE_WINDOW_SYSTEM
624
625#define FRAME_RES_X(f) \
626 (eassert (FRAME_WINDOW_P (f)), FRAME_DISPLAY_INFO (f)->resx)
627#define FRAME_RES_Y(f) \
628 (eassert (FRAME_WINDOW_P (f)), FRAME_DISPLAY_INFO (f)->resy)
629
630#else /* !HAVE_WINDOW_SYSTEM */
631
632/* Defaults when no window system available. */
633
634#define FRAME_RES_X(f) default_pixels_per_inch_x ()
635#define FRAME_RES_Y(f) default_pixels_per_inch_y ()
636
637#endif /* HAVE_WINDOW_SYSTEM */
638
640/* Return a pointer to the structure holding information about the 639/* Return a pointer to the structure holding information about the
641 region of text, if any, that is currently shown in mouse-face on 640 region of text, if any, that is currently shown in mouse-face on
642 frame F. We need to define two versions because a TTY-only build 641 frame F. We need to define two versions because a TTY-only build
643 does not have FRAME_X_DISPLAY_INFO. */ 642 does not have FRAME_DISPLAY_INFO. */
644#ifdef HAVE_WINDOW_SYSTEM 643#ifdef HAVE_WINDOW_SYSTEM
645# define MOUSE_HL_INFO(F) \ 644# define MOUSE_HL_INFO(F) \
646 (FRAME_WINDOW_P(F) \ 645 (FRAME_WINDOW_P(F) \
647 ? &FRAME_X_DISPLAY_INFO(F)->mouse_highlight \ 646 ? &FRAME_DISPLAY_INFO(F)->mouse_highlight \
648 : &(F)->output_data.tty->display_info->mouse_highlight) 647 : &(F)->output_data.tty->display_info->mouse_highlight)
649#else 648#else
650# define MOUSE_HL_INFO(F) \ 649# define MOUSE_HL_INFO(F) \
@@ -926,6 +925,7 @@ default_pixels_per_inch_y (void)
926#define SET_FRAME_ICONIFIED(f, i) \ 925#define SET_FRAME_ICONIFIED(f, i) \
927 (f)->iconified = (eassert (0 <= (i) && (i) <= 1), (i)) 926 (f)->iconified = (eassert (0 <= (i) && (i) <= 1), (i))
928 927
928extern Lisp_Object selected_frame;
929extern Lisp_Object Qframep, Qframe_live_p; 929extern Lisp_Object Qframep, Qframe_live_p;
930extern Lisp_Object Qtty, Qtty_type; 930extern Lisp_Object Qtty, Qtty_type;
931extern Lisp_Object Qtty_color_mode; 931extern Lisp_Object Qtty_color_mode;
@@ -935,8 +935,6 @@ extern Lisp_Object Qnoelisp;
935/* Nonzero means there is at least one garbaged frame. */ 935/* Nonzero means there is at least one garbaged frame. */
936extern bool frame_garbaged; 936extern bool frame_garbaged;
937 937
938extern struct frame *last_nonminibuf_frame;
939
940extern void set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object); 938extern void set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object);
941extern struct frame *decode_window_system_frame (Lisp_Object); 939extern struct frame *decode_window_system_frame (Lisp_Object);
942extern struct frame *decode_live_frame (Lisp_Object); 940extern struct frame *decode_live_frame (Lisp_Object);
@@ -956,10 +954,6 @@ extern void frame_make_pointer_visible (void);
956extern Lisp_Object delete_frame (Lisp_Object, Lisp_Object); 954extern Lisp_Object delete_frame (Lisp_Object, Lisp_Object);
957 955
958extern Lisp_Object Vframe_list; 956extern Lisp_Object Vframe_list;
959
960/* The currently selected frame. */
961
962extern Lisp_Object selected_frame;
963 957
964/* Value is a pointer to the selected frame. If the selected frame 958/* Value is a pointer to the selected frame. If the selected frame
965 isn't live, abort. */ 959 isn't live, abort. */
@@ -1134,6 +1128,15 @@ extern Lisp_Object selected_frame;
1134 (FRAME_PIXEL_Y_TO_LINE (f, ((height) \ 1128 (FRAME_PIXEL_Y_TO_LINE (f, ((height) \
1135 - FRAME_INTERNAL_BORDER_WIDTH (f)))) 1129 - FRAME_INTERNAL_BORDER_WIDTH (f))))
1136 1130
1131/* Value is the smallest width of any character in any font on frame F. */
1132
1133#define FRAME_SMALLEST_CHAR_WIDTH(f) \
1134 FRAME_DISPLAY_INFO (f)->smallest_char_width
1135
1136/* Value is the smallest height of any font on frame F. */
1137
1138#define FRAME_SMALLEST_FONT_HEIGHT(f) \
1139 FRAME_DISPLAY_INFO (f)->smallest_font_height
1137 1140
1138/*********************************************************************** 1141/***********************************************************************
1139 Frame Parameters 1142 Frame Parameters
@@ -1219,8 +1222,6 @@ extern void x_set_vertical_scroll_bars (struct frame *, Lisp_Object,
1219extern void x_set_scroll_bar_width (struct frame *, Lisp_Object, 1222extern void x_set_scroll_bar_width (struct frame *, Lisp_Object,
1220 Lisp_Object); 1223 Lisp_Object);
1221 1224
1222extern Lisp_Object x_icon_type (struct frame *);
1223
1224extern long x_figure_window_size (struct frame *, Lisp_Object, bool); 1225extern long x_figure_window_size (struct frame *, Lisp_Object, bool);
1225 1226
1226extern void x_set_alpha (struct frame *, Lisp_Object, Lisp_Object); 1227extern void x_set_alpha (struct frame *, Lisp_Object, Lisp_Object);
@@ -1236,7 +1237,6 @@ extern Lisp_Object display_x_get_resource (Display_Info *,
1236extern void set_frame_menubar (struct frame *f, bool first_time, bool deep_p); 1237extern void set_frame_menubar (struct frame *f, bool first_time, bool deep_p);
1237extern void x_set_window_size (struct frame *f, int change_grav, 1238extern void x_set_window_size (struct frame *f, int change_grav,
1238 int cols, int rows); 1239 int cols, int rows);
1239extern void x_sync (struct frame *);
1240extern Lisp_Object x_get_focus_frame (struct frame *); 1240extern Lisp_Object x_get_focus_frame (struct frame *);
1241extern void x_set_mouse_position (struct frame *f, int h, int v); 1241extern void x_set_mouse_position (struct frame *f, int h, int v);
1242extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); 1242extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
@@ -1250,7 +1250,6 @@ extern void x_set_tool_bar_lines (struct frame *f,
1250 Lisp_Object oldval); 1250 Lisp_Object oldval);
1251extern void x_activate_menubar (struct frame *); 1251extern void x_activate_menubar (struct frame *);
1252extern void x_real_positions (struct frame *, int *, int *); 1252extern void x_real_positions (struct frame *, int *, int *);
1253extern int x_bitmap_icon (struct frame *, Lisp_Object);
1254extern void x_set_menu_bar_lines (struct frame *, 1253extern void x_set_menu_bar_lines (struct frame *,
1255 Lisp_Object, 1254 Lisp_Object,
1256 Lisp_Object); 1255 Lisp_Object);
@@ -1262,13 +1261,41 @@ extern void x_wm_set_icon_position (struct frame *, int, int);
1262#if !defined USE_X_TOOLKIT 1261#if !defined USE_X_TOOLKIT
1263extern char *x_get_resource_string (const char *, const char *); 1262extern char *x_get_resource_string (const char *, const char *);
1264#endif 1263#endif
1265#endif 1264extern void x_sync (struct frame *);
1265#endif /* HAVE_X_WINDOWS */
1266 1266
1267extern void x_query_colors (struct frame *f, XColor *, int); 1267extern void x_query_colors (struct frame *f, XColor *, int);
1268extern void x_query_color (struct frame *f, XColor *); 1268extern void x_query_color (struct frame *f, XColor *);
1269extern void x_focus_frame (struct frame *);
1270
1271#ifndef HAVE_NS
1272
1273extern int x_bitmap_icon (struct frame *, Lisp_Object);
1274
1275/* Set F's bitmap icon, if specified among F's parameters. */
1276
1277INLINE void
1278x_set_bitmap_icon (struct frame *f)
1279{
1280 Lisp_Object obj = assq_no_quit (Qicon_type, f->param_alist);
1281
1282 if (CONSP (obj))
1283 x_bitmap_icon (f, XCDR (obj));
1284}
1285
1286#endif /* !HAVE_NS */
1269 1287
1270#endif /* HAVE_WINDOW_SYSTEM */ 1288#endif /* HAVE_WINDOW_SYSTEM */
1271 1289
1290INLINE void
1291flush_frame (struct frame *f)
1292{
1293 struct redisplay_interface *rif = FRAME_RIF (f);
1294
1295 if (rif && rif->flush_display)
1296 rif->flush_display (f);
1297}
1298
1272/*********************************************************************** 1299/***********************************************************************
1273 Multimonitor data 1300 Multimonitor data
1274 ***********************************************************************/ 1301 ***********************************************************************/
diff --git a/src/ftfont.c b/src/ftfont.c
index 3636f86f5c4..4e58d83fd64 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2425,7 +2425,7 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font,
2425 } 2425 }
2426 2426
2427 len = i; 2427 len = i;
2428 lint_assume (len <= STRING_BYTES_BOUND); 2428 assume (len <= STRING_BYTES_BOUND);
2429 2429
2430 if (with_variation_selector) 2430 if (with_variation_selector)
2431 { 2431 {
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 8f13c72df81..7415c3a2413 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -249,7 +249,9 @@ WATCH-DESCRIPTOR should be an object returned by `gfile-add-watch'. */)
249void 249void
250globals_of_gfilenotify (void) 250globals_of_gfilenotify (void)
251{ 251{
252#if ! GLIB_CHECK_VERSION (2, 36, 0)
252 g_type_init (); 253 g_type_init ();
254#endif
253 watch_list = Qnil; 255 watch_list = Qnil;
254} 256}
255 257
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 6228f2150f5..e20d01521f0 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -2737,7 +2737,7 @@ xg_create_widget (const char *type, const char *name, struct frame *f,
2737 { 2737 {
2738 /* Must realize so the GdkWindow inside the widget is created. */ 2738 /* Must realize so the GdkWindow inside the widget is created. */
2739 gtk_widget_realize (w); 2739 gtk_widget_realize (w);
2740 xg_set_cursor (w, FRAME_X_DISPLAY_INFO (f)->xg_cursor); 2740 xg_set_cursor (w, FRAME_DISPLAY_INFO (f)->xg_cursor);
2741 } 2741 }
2742 } 2742 }
2743 else 2743 else
@@ -3409,7 +3409,7 @@ free_frame_menubar (struct frame *f)
3409} 3409}
3410 3410
3411bool 3411bool
3412xg_event_is_for_menubar (struct frame *f, XEvent *event) 3412xg_event_is_for_menubar (struct frame *f, const XEvent *event)
3413{ 3413{
3414 struct x_output *x = f->output_data.x; 3414 struct x_output *x = f->output_data.x;
3415 GList *iter; 3415 GList *iter;
@@ -3676,7 +3676,7 @@ xg_create_scroll_bar (struct frame *f,
3676 3676
3677 3677
3678 /* Set the cursor to an arrow. */ 3678 /* Set the cursor to an arrow. */
3679 xg_set_cursor (webox, FRAME_X_DISPLAY_INFO (f)->xg_cursor); 3679 xg_set_cursor (webox, FRAME_DISPLAY_INFO (f)->xg_cursor);
3680 3680
3681 bar->x_window = scroll_id; 3681 bar->x_window = scroll_id;
3682} 3682}
@@ -3861,7 +3861,7 @@ xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar,
3861 frame. This function does additional checks. */ 3861 frame. This function does additional checks. */
3862 3862
3863bool 3863bool
3864xg_event_is_for_scrollbar (struct frame *f, XEvent *event) 3864xg_event_is_for_scrollbar (struct frame *f, const XEvent *event)
3865{ 3865{
3866 bool retval = 0; 3866 bool retval = 0;
3867 3867
@@ -3972,12 +3972,12 @@ xg_tool_bar_callback (GtkWidget *w, gpointer client_data)
3972 /* Convert between the modifier bits GDK uses and the modifier bits 3972 /* Convert between the modifier bits GDK uses and the modifier bits
3973 Emacs uses. This assumes GDK and X masks are the same, which they are when 3973 Emacs uses. This assumes GDK and X masks are the same, which they are when
3974 this is written. */ 3974 this is written. */
3975 event.modifiers = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), mod); 3975 event.modifiers = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), mod);
3976 kbd_buffer_store_event (&event); 3976 kbd_buffer_store_event (&event);
3977 3977
3978 /* Return focus to the frame after we have clicked on a detached 3978 /* Return focus to the frame after we have clicked on a detached
3979 tool bar button. */ 3979 tool bar button. */
3980 Fx_focus_frame (frame); 3980 x_focus_frame (f);
3981} 3981}
3982 3982
3983/* Callback function invoked when a tool bar item is pressed in a detached 3983/* Callback function invoked when a tool bar item is pressed in a detached
diff --git a/src/gtkutil.h b/src/gtkutil.h
index fc959862fd3..1c26d2aa44b 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -105,7 +105,7 @@ extern void xg_modify_menubar_widgets (GtkWidget *menubar,
105 105
106extern void xg_update_frame_menubar (struct frame *f); 106extern void xg_update_frame_menubar (struct frame *f);
107 107
108extern bool xg_event_is_for_menubar (struct frame *f, XEvent *event); 108extern bool xg_event_is_for_menubar (struct frame *, const XEvent *);
109 109
110extern bool xg_have_tear_offs (void); 110extern bool xg_have_tear_offs (void);
111 111
@@ -129,7 +129,7 @@ extern void xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar,
129 int portion, 129 int portion,
130 int position, 130 int position,
131 int whole); 131 int whole);
132extern bool xg_event_is_for_scrollbar (struct frame *f, XEvent *event); 132extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent *);
133extern int xg_get_default_scrollbar_width (void); 133extern int xg_get_default_scrollbar_width (void);
134 134
135extern void update_frame_tool_bar (struct frame *f); 135extern void update_frame_tool_bar (struct frame *f);
diff --git a/src/image.c b/src/image.c
index 1271376bcab..e429830cc96 100644
--- a/src/image.c
+++ b/src/image.c
@@ -161,13 +161,13 @@ XPutPixel (XImagePtr ximage, int x, int y, unsigned long pixel)
161int 161int
162x_bitmap_height (struct frame *f, ptrdiff_t id) 162x_bitmap_height (struct frame *f, ptrdiff_t id)
163{ 163{
164 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height; 164 return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].height;
165} 165}
166 166
167int 167int
168x_bitmap_width (struct frame *f, ptrdiff_t id) 168x_bitmap_width (struct frame *f, ptrdiff_t id)
169{ 169{
170 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width; 170 return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].width;
171} 171}
172 172
173#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) 173#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI)
@@ -175,7 +175,7 @@ ptrdiff_t
175x_bitmap_pixmap (struct frame *f, ptrdiff_t id) 175x_bitmap_pixmap (struct frame *f, ptrdiff_t id)
176{ 176{
177 /* HAVE_NTGUI needs the explicit cast here. */ 177 /* HAVE_NTGUI needs the explicit cast here. */
178 return (ptrdiff_t) FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; 178 return (ptrdiff_t) FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap;
179} 179}
180#endif 180#endif
181 181
@@ -183,7 +183,7 @@ x_bitmap_pixmap (struct frame *f, ptrdiff_t id)
183int 183int
184x_bitmap_mask (struct frame *f, ptrdiff_t id) 184x_bitmap_mask (struct frame *f, ptrdiff_t id)
185{ 185{
186 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].mask; 186 return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].mask;
187} 187}
188#endif 188#endif
189 189
@@ -192,7 +192,7 @@ x_bitmap_mask (struct frame *f, ptrdiff_t id)
192static ptrdiff_t 192static ptrdiff_t
193x_allocate_bitmap_record (struct frame *f) 193x_allocate_bitmap_record (struct frame *f)
194{ 194{
195 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 195 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
196 ptrdiff_t i; 196 ptrdiff_t i;
197 197
198 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size) 198 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size)
@@ -213,7 +213,7 @@ x_allocate_bitmap_record (struct frame *f)
213void 213void
214x_reference_bitmap (struct frame *f, ptrdiff_t id) 214x_reference_bitmap (struct frame *f, ptrdiff_t id)
215{ 215{
216 ++FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; 216 ++FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].refcount;
217} 217}
218 218
219/* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ 219/* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */
@@ -221,7 +221,7 @@ x_reference_bitmap (struct frame *f, ptrdiff_t id)
221ptrdiff_t 221ptrdiff_t
222x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsigned int height) 222x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsigned int height)
223{ 223{
224 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 224 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
225 ptrdiff_t id; 225 ptrdiff_t id;
226 226
227#ifdef HAVE_X_WINDOWS 227#ifdef HAVE_X_WINDOWS
@@ -235,8 +235,8 @@ x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsi
235#ifdef HAVE_NTGUI 235#ifdef HAVE_NTGUI
236 Pixmap bitmap; 236 Pixmap bitmap;
237 bitmap = CreateBitmap (width, height, 237 bitmap = CreateBitmap (width, height,
238 FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_planes, 238 FRAME_DISPLAY_INFO (XFRAME (frame))->n_planes,
239 FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_cbits, 239 FRAME_DISPLAY_INFO (XFRAME (frame))->n_cbits,
240 bits); 240 bits);
241 if (! bitmap) 241 if (! bitmap)
242 return -1; 242 return -1;
@@ -280,7 +280,7 @@ x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsi
280ptrdiff_t 280ptrdiff_t
281x_create_bitmap_from_file (struct frame *f, Lisp_Object file) 281x_create_bitmap_from_file (struct frame *f, Lisp_Object file)
282{ 282{
283 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 283 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
284 284
285#ifdef HAVE_NTGUI 285#ifdef HAVE_NTGUI
286 return -1; /* W32_TODO : bitmap support */ 286 return -1; /* W32_TODO : bitmap support */
@@ -379,7 +379,7 @@ free_bitmap_record (Display_Info *dpyinfo, Bitmap_Record *bm)
379void 379void
380x_destroy_bitmap (struct frame *f, ptrdiff_t id) 380x_destroy_bitmap (struct frame *f, ptrdiff_t id)
381{ 381{
382 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 382 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
383 383
384 if (id > 0) 384 if (id > 0)
385 { 385 {
@@ -454,7 +454,7 @@ x_create_bitmap_mask (struct frame *f, ptrdiff_t id)
454 unsigned long x, y, xp, xm, yp, ym; 454 unsigned long x, y, xp, xm, yp, ym;
455 GC gc; 455 GC gc;
456 456
457 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 457 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
458 458
459 if (!(id > 0)) 459 if (!(id > 0))
460 return; 460 return;
@@ -3421,7 +3421,7 @@ xpm_image_p (Lisp_Object object)
3421ptrdiff_t 3421ptrdiff_t
3422x_create_bitmap_from_xpm_data (struct frame *f, const char **bits) 3422x_create_bitmap_from_xpm_data (struct frame *f, const char **bits)
3423{ 3423{
3424 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 3424 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
3425 ptrdiff_t id; 3425 ptrdiff_t id;
3426 int rc; 3426 int rc;
3427 XpmAttributes attrs; 3427 XpmAttributes attrs;
@@ -4325,7 +4325,7 @@ lookup_rgb_color (struct frame *f, int r, int g, int b)
4325 two orders of magnitude. Freeing colors on TrueColor visuals is 4325 two orders of magnitude. Freeing colors on TrueColor visuals is
4326 a nop, and pixel colors specify RGB values directly. See also 4326 a nop, and pixel colors specify RGB values directly. See also
4327 the Xlib spec, chapter 3.1. */ 4327 the Xlib spec, chapter 3.1. */
4328 dpyinfo = FRAME_X_DISPLAY_INFO (f); 4328 dpyinfo = FRAME_DISPLAY_INFO (f);
4329 if (dpyinfo->red_bits > 0) 4329 if (dpyinfo->red_bits > 0)
4330 { 4330 {
4331 unsigned long pr, pg, pb; 4331 unsigned long pr, pg, pb;
@@ -4820,7 +4820,7 @@ x_edge_detection (struct frame *f, struct image *img, Lisp_Object matrix,
4820static void 4820static void
4821x_disable_image (struct frame *f, struct image *img) 4821x_disable_image (struct frame *f, struct image *img)
4822{ 4822{
4823 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 4823 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
4824#ifdef HAVE_NTGUI 4824#ifdef HAVE_NTGUI
4825 int n_planes = dpyinfo->n_planes * dpyinfo->n_cbits; 4825 int n_planes = dpyinfo->n_planes * dpyinfo->n_cbits;
4826#else 4826#else
@@ -7523,7 +7523,7 @@ gif_load (struct frame *f, struct image *img)
7523 { 7523 {
7524 while (subimg_height <= row) 7524 while (subimg_height <= row)
7525 { 7525 {
7526 lint_assume (pass < 3); 7526 assume (pass < 3);
7527 row = interlace_start[++pass]; 7527 row = interlace_start[++pass];
7528 } 7528 }
7529 7529
@@ -8590,7 +8590,9 @@ DEF_IMGLIB_FN (int, gdk_pixbuf_get_n_channels, (const GdkPixbuf *));
8590DEF_IMGLIB_FN (gboolean, gdk_pixbuf_get_has_alpha, (const GdkPixbuf *)); 8590DEF_IMGLIB_FN (gboolean, gdk_pixbuf_get_has_alpha, (const GdkPixbuf *));
8591DEF_IMGLIB_FN (int, gdk_pixbuf_get_bits_per_sample, (const GdkPixbuf *)); 8591DEF_IMGLIB_FN (int, gdk_pixbuf_get_bits_per_sample, (const GdkPixbuf *));
8592 8592
8593#if ! GLIB_CHECK_VERSION (2, 36, 0)
8593DEF_IMGLIB_FN (void, g_type_init, (void)); 8594DEF_IMGLIB_FN (void, g_type_init, (void));
8595#endif
8594DEF_IMGLIB_FN (void, g_object_unref, (gpointer)); 8596DEF_IMGLIB_FN (void, g_object_unref, (gpointer));
8595DEF_IMGLIB_FN (void, g_error_free, (GError *)); 8597DEF_IMGLIB_FN (void, g_error_free, (GError *));
8596 8598
@@ -8622,7 +8624,9 @@ init_svg_functions (void)
8622 LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_has_alpha); 8624 LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_has_alpha);
8623 LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_bits_per_sample); 8625 LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_bits_per_sample);
8624 8626
8627#if ! GLIB_CHECK_VERSION (2, 36, 0)
8625 LOAD_IMGLIB_FN (gobject, g_type_init); 8628 LOAD_IMGLIB_FN (gobject, g_type_init);
8629#endif
8626 LOAD_IMGLIB_FN (gobject, g_object_unref); 8630 LOAD_IMGLIB_FN (gobject, g_object_unref);
8627 LOAD_IMGLIB_FN (glib, g_error_free); 8631 LOAD_IMGLIB_FN (glib, g_error_free);
8628 8632
@@ -8647,7 +8651,9 @@ init_svg_functions (void)
8647#define fn_gdk_pixbuf_get_has_alpha gdk_pixbuf_get_has_alpha 8651#define fn_gdk_pixbuf_get_has_alpha gdk_pixbuf_get_has_alpha
8648#define fn_gdk_pixbuf_get_bits_per_sample gdk_pixbuf_get_bits_per_sample 8652#define fn_gdk_pixbuf_get_bits_per_sample gdk_pixbuf_get_bits_per_sample
8649 8653
8654#if ! GLIB_CHECK_VERSION (2, 36, 0)
8650#define fn_g_type_init g_type_init 8655#define fn_g_type_init g_type_init
8656#endif
8651#define fn_g_object_unref g_object_unref 8657#define fn_g_object_unref g_object_unref
8652#define fn_g_error_free g_error_free 8658#define fn_g_error_free g_error_free
8653#endif /* !WINDOWSNT */ 8659#endif /* !WINDOWSNT */
@@ -8732,9 +8738,12 @@ svg_load_image (struct frame *f, /* Pointer to emacs frame structure. *
8732 int x; 8738 int x;
8733 int y; 8739 int y;
8734 8740
8735 /* g_type_init is a glib function that must be called prior to using 8741#if ! GLIB_CHECK_VERSION (2, 36, 0)
8736 gnome type library functions. */ 8742 /* g_type_init is a glib function that must be called prior to
8743 using gnome type library functions (obsolete since 2.36.0). */
8737 fn_g_type_init (); 8744 fn_g_type_init ();
8745#endif
8746
8738 /* Make a handle to a new rsvg object. */ 8747 /* Make a handle to a new rsvg object. */
8739 rsvg_handle = fn_rsvg_handle_new (); 8748 rsvg_handle = fn_rsvg_handle_new ();
8740 8749
diff --git a/src/indent.c b/src/indent.c
index 891b42788ed..d956e627ba9 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -118,7 +118,7 @@ disptab_matches_widthtab (struct Lisp_Char_Table *disptab, struct Lisp_Vector *w
118 118
119 for (i = 0; i < 256; i++) 119 for (i = 0; i < 256; i++)
120 if (character_width (i, disptab) 120 if (character_width (i, disptab)
121 != XFASTINT (widthtab->contents[i])) 121 != XFASTINT (widthtab->u.contents[i]))
122 return 0; 122 return 0;
123 123
124 return 1; 124 return 1;
@@ -138,7 +138,7 @@ recompute_width_table (struct buffer *buf, struct Lisp_Char_Table *disptab)
138 eassert (widthtab->header.size == 256); 138 eassert (widthtab->header.size == 256);
139 139
140 for (i = 0; i < 256; i++) 140 for (i = 0; i < 256; i++)
141 XSETFASTINT (widthtab->contents[i], character_width (i, disptab)); 141 XSETFASTINT (widthtab->u.contents[i], character_width (i, disptab));
142} 142}
143 143
144/* Allocate or free the width run cache, as requested by the 144/* Allocate or free the width run cache, as requested by the
@@ -1136,7 +1136,7 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos,
1136 width_run_cache_on_off (); 1136 width_run_cache_on_off ();
1137 if (dp == buffer_display_table ()) 1137 if (dp == buffer_display_table ())
1138 width_table = (VECTORP (BVAR (current_buffer, width_table)) 1138 width_table = (VECTORP (BVAR (current_buffer, width_table))
1139 ? XVECTOR (BVAR (current_buffer, width_table))->contents 1139 ? XVECTOR (BVAR (current_buffer, width_table))->u.contents
1140 : 0); 1140 : 0);
1141 else 1141 else
1142 /* If the window has its own display table, we can't use the width 1142 /* If the window has its own display table, we can't use the width
diff --git a/src/insdel.c b/src/insdel.c
index f746fd34330..ebd096a2927 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -1057,6 +1057,9 @@ insert_from_buffer_1 (struct buffer *buf,
1057 ptrdiff_t outgoing_nbytes = incoming_nbytes; 1057 ptrdiff_t outgoing_nbytes = incoming_nbytes;
1058 INTERVAL intervals; 1058 INTERVAL intervals;
1059 1059
1060 if (nchars == 0)
1061 return;
1062
1060 /* Make OUTGOING_NBYTES describe the text 1063 /* Make OUTGOING_NBYTES describe the text
1061 as it will be inserted in this buffer. */ 1064 as it will be inserted in this buffer. */
1062 1065
diff --git a/src/intervals.c b/src/intervals.c
index ded536ca3c8..69a33867283 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -40,8 +40,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
40 40
41#include <config.h> 41#include <config.h>
42 42
43#define INTERVALS_INLINE EXTERN_INLINE
44
45#include <intprops.h> 43#include <intprops.h>
46#include "lisp.h" 44#include "lisp.h"
47#include "intervals.h" 45#include "intervals.h"
@@ -1407,7 +1405,7 @@ offset_intervals (struct buffer *buffer, ptrdiff_t start, ptrdiff_t length)
1407 start, length); 1405 start, length);
1408 else 1406 else
1409 { 1407 {
1410 lint_assume (- TYPE_MAXIMUM (ptrdiff_t) <= length); 1408 assume (- TYPE_MAXIMUM (ptrdiff_t) <= length);
1411 adjust_intervals_for_deletion (buffer, start, -length); 1409 adjust_intervals_for_deletion (buffer, start, -length);
1412 } 1410 }
1413} 1411}
diff --git a/src/intervals.h b/src/intervals.h
index a38e83cf10e..51dfa09c5c4 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -19,9 +19,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
19#include "dispextern.h" 19#include "dispextern.h"
20 20
21INLINE_HEADER_BEGIN 21INLINE_HEADER_BEGIN
22#ifndef INTERVALS_INLINE
23# define INTERVALS_INLINE INLINE
24#endif
25 22
26/* Basic data type for use of intervals. */ 23/* Basic data type for use of intervals. */
27 24
@@ -136,14 +133,14 @@ struct interval
136/* Use these functions to set Lisp_Object 133/* Use these functions to set Lisp_Object
137 or pointer slots of struct interval. */ 134 or pointer slots of struct interval. */
138 135
139INTERVALS_INLINE void 136INLINE void
140set_interval_parent (INTERVAL i, INTERVAL parent) 137set_interval_parent (INTERVAL i, INTERVAL parent)
141{ 138{
142 i->up_obj = 0; 139 i->up_obj = 0;
143 i->up.interval = parent; 140 i->up.interval = parent;
144} 141}
145 142
146INTERVALS_INLINE void 143INLINE void
147set_interval_plist (INTERVAL i, Lisp_Object plist) 144set_interval_plist (INTERVAL i, Lisp_Object plist)
148{ 145{
149 i->plist = plist; 146 i->plist = plist;
diff --git a/src/keyboard.c b/src/keyboard.c
index fad04920e2e..a595742ace8 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -20,9 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define BLOCKINPUT_INLINE EXTERN_INLINE
24#define KEYBOARD_INLINE EXTERN_INLINE
25
26#include "sysstdio.h" 23#include "sysstdio.h"
27 24
28#include "lisp.h" 25#include "lisp.h"
@@ -2624,10 +2621,8 @@ read_char (int commandflag, Lisp_Object map,
2624 2621
2625 if (/* There currently is something in the echo area. */ 2622 if (/* There currently is something in the echo area. */
2626 !NILP (echo_area_buffer[0]) 2623 !NILP (echo_area_buffer[0])
2627 && (/* And it's either not from echoing. */ 2624 && (/* It's an echo from a different kboard. */
2628 !EQ (echo_area_buffer[0], echo_message_buffer) 2625 echo_kboard != current_kboard
2629 /* Or it's an echo from a different kboard. */
2630 || echo_kboard != current_kboard
2631 /* Or we explicitly allow overwriting whatever there is. */ 2626 /* Or we explicitly allow overwriting whatever there is. */
2632 || ok_to_echo_at_next_pause == NULL)) 2627 || ok_to_echo_at_next_pause == NULL))
2633 cancel_echoing (); 2628 cancel_echoing ();
@@ -4389,7 +4384,7 @@ decode_timer (Lisp_Object timer, struct timespec *result)
4389 4384
4390 if (! (VECTORP (timer) && ASIZE (timer) == 9)) 4385 if (! (VECTORP (timer) && ASIZE (timer) == 9))
4391 return 0; 4386 return 0;
4392 vector = XVECTOR (timer)->contents; 4387 vector = XVECTOR (timer)->u.contents;
4393 if (! NILP (vector[0])) 4388 if (! NILP (vector[0]))
4394 return 0; 4389 return 0;
4395 4390
@@ -8046,7 +8041,7 @@ process_tool_bar_item (Lisp_Object key, Lisp_Object def, Lisp_Object data, void
8046 discard any previously made item. */ 8041 discard any previously made item. */
8047 for (i = 0; i < ntool_bar_items; i += TOOL_BAR_ITEM_NSLOTS) 8042 for (i = 0; i < ntool_bar_items; i += TOOL_BAR_ITEM_NSLOTS)
8048 { 8043 {
8049 Lisp_Object *v = XVECTOR (tool_bar_items_vector)->contents + i; 8044 Lisp_Object *v = XVECTOR (tool_bar_items_vector)->u.contents + i;
8050 8045
8051 if (EQ (key, v[TOOL_BAR_ITEM_KEY])) 8046 if (EQ (key, v[TOOL_BAR_ITEM_KEY]))
8052 { 8047 {
@@ -8370,7 +8365,7 @@ append_tool_bar_item (void)
8370 /* Append entries from tool_bar_item_properties to the end of 8365 /* Append entries from tool_bar_item_properties to the end of
8371 tool_bar_items_vector. */ 8366 tool_bar_items_vector. */
8372 vcopy (tool_bar_items_vector, ntool_bar_items, 8367 vcopy (tool_bar_items_vector, ntool_bar_items,
8373 XVECTOR (tool_bar_item_properties)->contents, TOOL_BAR_ITEM_NSLOTS); 8368 XVECTOR (tool_bar_item_properties)->u.contents, TOOL_BAR_ITEM_NSLOTS);
8374 ntool_bar_items += TOOL_BAR_ITEM_NSLOTS; 8369 ntool_bar_items += TOOL_BAR_ITEM_NSLOTS;
8375} 8370}
8376 8371
@@ -9921,20 +9916,7 @@ detect_input_pending_run_timers (bool do_display)
9921 get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW); 9916 get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW);
9922 9917
9923 if (old_timers_run != timers_run && do_display) 9918 if (old_timers_run != timers_run && do_display)
9924 { 9919 redisplay_preserve_echo_area (8);
9925 redisplay_preserve_echo_area (8);
9926 /* The following fixes a bug when using lazy-lock with
9927 lazy-lock-defer-on-the-fly set to t, i.e. when fontifying
9928 from an idle timer function. The symptom of the bug is that
9929 the cursor sometimes doesn't become visible until the next X
9930 event is processed. --gerd. */
9931 {
9932 Lisp_Object tail, frame;
9933 FOR_EACH_FRAME (tail, frame)
9934 if (FRAME_RIF (XFRAME (frame)))
9935 FRAME_RIF (XFRAME (frame))->flush_display (XFRAME (frame));
9936 }
9937 }
9938 9920
9939 return input_pending; 9921 return input_pending;
9940} 9922}
@@ -9985,7 +9967,7 @@ DEFUN ("recent-keys", Frecent_keys, Srecent_keys, 0, 0, 0,
9985 doc: /* Return vector of last 300 events, not counting those from keyboard macros. */) 9967 doc: /* Return vector of last 300 events, not counting those from keyboard macros. */)
9986 (void) 9968 (void)
9987{ 9969{
9988 Lisp_Object *keys = XVECTOR (recent_keys)->contents; 9970 Lisp_Object *keys = XVECTOR (recent_keys)->u.contents;
9989 Lisp_Object val; 9971 Lisp_Object val;
9990 9972
9991 if (total_keys < NUM_RECENT_KEYS) 9973 if (total_keys < NUM_RECENT_KEYS)
@@ -10011,7 +9993,7 @@ See also `this-command-keys-vector'. */)
10011 (void) 9993 (void)
10012{ 9994{
10013 return make_event_array (this_command_key_count, 9995 return make_event_array (this_command_key_count,
10014 XVECTOR (this_command_keys)->contents); 9996 XVECTOR (this_command_keys)->u.contents);
10015} 9997}
10016 9998
10017DEFUN ("this-command-keys-vector", Fthis_command_keys_vector, Sthis_command_keys_vector, 0, 0, 0, 9999DEFUN ("this-command-keys-vector", Fthis_command_keys_vector, Sthis_command_keys_vector, 0, 0, 0,
@@ -10023,7 +10005,7 @@ See also `this-command-keys'. */)
10023 (void) 10005 (void)
10024{ 10006{
10025 return Fvector (this_command_key_count, 10007 return Fvector (this_command_key_count,
10026 XVECTOR (this_command_keys)->contents); 10008 XVECTOR (this_command_keys)->u.contents);
10027} 10009}
10028 10010
10029DEFUN ("this-single-command-keys", Fthis_single_command_keys, 10011DEFUN ("this-single-command-keys", Fthis_single_command_keys,
@@ -10038,7 +10020,7 @@ The value is always a vector. */)
10038{ 10020{
10039 return Fvector (this_command_key_count 10021 return Fvector (this_command_key_count
10040 - this_single_command_key_start, 10022 - this_single_command_key_start,
10041 (XVECTOR (this_command_keys)->contents 10023 (XVECTOR (this_command_keys)->u.contents
10042 + this_single_command_key_start)); 10024 + this_single_command_key_start));
10043} 10025}
10044 10026
@@ -10052,8 +10034,7 @@ shows the events before all translations (except for input methods).
10052The value is always a vector. */) 10034The value is always a vector. */)
10053 (void) 10035 (void)
10054{ 10036{
10055 return Fvector (raw_keybuf_count, 10037 return Fvector (raw_keybuf_count, XVECTOR (raw_keybuf)->u.contents);
10056 (XVECTOR (raw_keybuf)->contents));
10057} 10038}
10058 10039
10059DEFUN ("reset-this-command-lengths", Freset_this_command_lengths, 10040DEFUN ("reset-this-command-lengths", Freset_this_command_lengths,
diff --git a/src/keyboard.h b/src/keyboard.h
index b015f3fe4d3..8a8505e406b 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -22,9 +22,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
22#include "termhooks.h" 22#include "termhooks.h"
23 23
24INLINE_HEADER_BEGIN 24INLINE_HEADER_BEGIN
25#ifndef KEYBOARD_INLINE
26# define KEYBOARD_INLINE INLINE
27#endif
28 25
29/* Most code should use this macro to access Lisp fields in struct kboard. */ 26/* Most code should use this macro to access Lisp fields in struct kboard. */
30 27
@@ -179,42 +176,42 @@ struct kboard
179 ptrdiff_t echo_after_prompt; 176 ptrdiff_t echo_after_prompt;
180 }; 177 };
181 178
182KEYBOARD_INLINE void 179INLINE void
183kset_default_minibuffer_frame (struct kboard *kb, Lisp_Object val) 180kset_default_minibuffer_frame (struct kboard *kb, Lisp_Object val)
184{ 181{
185 kb->INTERNAL_FIELD (Vdefault_minibuffer_frame) = val; 182 kb->INTERNAL_FIELD (Vdefault_minibuffer_frame) = val;
186} 183}
187KEYBOARD_INLINE void 184INLINE void
188kset_defining_kbd_macro (struct kboard *kb, Lisp_Object val) 185kset_defining_kbd_macro (struct kboard *kb, Lisp_Object val)
189{ 186{
190 kb->INTERNAL_FIELD (defining_kbd_macro) = val; 187 kb->INTERNAL_FIELD (defining_kbd_macro) = val;
191} 188}
192KEYBOARD_INLINE void 189INLINE void
193kset_input_decode_map (struct kboard *kb, Lisp_Object val) 190kset_input_decode_map (struct kboard *kb, Lisp_Object val)
194{ 191{
195 kb->INTERNAL_FIELD (Vinput_decode_map) = val; 192 kb->INTERNAL_FIELD (Vinput_decode_map) = val;
196} 193}
197KEYBOARD_INLINE void 194INLINE void
198kset_last_command (struct kboard *kb, Lisp_Object val) 195kset_last_command (struct kboard *kb, Lisp_Object val)
199{ 196{
200 kb->INTERNAL_FIELD (Vlast_command) = val; 197 kb->INTERNAL_FIELD (Vlast_command) = val;
201} 198}
202KEYBOARD_INLINE void 199INLINE void
203kset_last_kbd_macro (struct kboard *kb, Lisp_Object val) 200kset_last_kbd_macro (struct kboard *kb, Lisp_Object val)
204{ 201{
205 kb->INTERNAL_FIELD (Vlast_kbd_macro) = val; 202 kb->INTERNAL_FIELD (Vlast_kbd_macro) = val;
206} 203}
207KEYBOARD_INLINE void 204INLINE void
208kset_prefix_arg (struct kboard *kb, Lisp_Object val) 205kset_prefix_arg (struct kboard *kb, Lisp_Object val)
209{ 206{
210 kb->INTERNAL_FIELD (Vprefix_arg) = val; 207 kb->INTERNAL_FIELD (Vprefix_arg) = val;
211} 208}
212KEYBOARD_INLINE void 209INLINE void
213kset_system_key_alist (struct kboard *kb, Lisp_Object val) 210kset_system_key_alist (struct kboard *kb, Lisp_Object val)
214{ 211{
215 kb->INTERNAL_FIELD (Vsystem_key_alist) = val; 212 kb->INTERNAL_FIELD (Vsystem_key_alist) = val;
216} 213}
217KEYBOARD_INLINE void 214INLINE void
218kset_window_system (struct kboard *kb, Lisp_Object val) 215kset_window_system (struct kboard *kb, Lisp_Object val)
219{ 216{
220 kb->INTERNAL_FIELD (Vwindow_system) = val; 217 kb->INTERNAL_FIELD (Vwindow_system) = val;
diff --git a/src/lisp.h b/src/lisp.h
index 27359ffeb3f..63597e86be6 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -33,9 +33,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
33#include <intprops.h> 33#include <intprops.h>
34 34
35INLINE_HEADER_BEGIN 35INLINE_HEADER_BEGIN
36#ifndef LISP_INLINE
37# define LISP_INLINE INLINE
38#endif
39 36
40/* The ubiquitous max and min macros. */ 37/* The ubiquitous max and min macros. */
41#undef min 38#undef min
@@ -134,6 +131,13 @@ extern bool suppress_checking EXTERNALLY_VISIBLE;
134 ? (void) 0 \ 131 ? (void) 0 \
135 : die (# cond, __FILE__, __LINE__)) 132 : die (# cond, __FILE__, __LINE__))
136#endif /* ENABLE_CHECKING */ 133#endif /* ENABLE_CHECKING */
134
135/* When checking is enabled, identical to eassert. When checking is
136 * disabled, instruct the compiler (when the compiler has such
137 * capability) to assume that cond is true and optimize
138 * accordingly. */
139#define eassert_and_assume(cond) (eassert (cond), assume (cond))
140
137 141
138/* Use the configure flag --enable-check-lisp-object-type to make 142/* Use the configure flag --enable-check-lisp-object-type to make
139 Lisp_Object use a struct type instead of the default int. The flag 143 Lisp_Object use a struct type instead of the default int. The flag
@@ -345,11 +349,11 @@ enum enum_USE_LSB_TAG { USE_LSB_TAG = 0 };
345 ARGS should be parenthesized. Implement the function by calling 349 ARGS should be parenthesized. Implement the function by calling
346 lisp_h_NAME ARGS. */ 350 lisp_h_NAME ARGS. */
347#define LISP_MACRO_DEFUN(name, type, argdecls, args) \ 351#define LISP_MACRO_DEFUN(name, type, argdecls, args) \
348 LISP_INLINE type (name) argdecls { return lisp_h_##name args; } 352 INLINE type (name) argdecls { return lisp_h_##name args; }
349 353
350/* like LISP_MACRO_DEFUN, except NAME returns void. */ 354/* like LISP_MACRO_DEFUN, except NAME returns void. */
351#define LISP_MACRO_DEFUN_VOID(name, argdecls, args) \ 355#define LISP_MACRO_DEFUN_VOID(name, argdecls, args) \
352 LISP_INLINE void (name) argdecls { lisp_h_##name args; } 356 INLINE void (name) argdecls { lisp_h_##name args; }
353 357
354 358
355/* Define the fundamental Lisp data structures. */ 359/* Define the fundamental Lisp data structures. */
@@ -610,14 +614,14 @@ LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
610 614
611/* Make a Lisp integer representing the value of the low order 615/* Make a Lisp integer representing the value of the low order
612 bits of N. */ 616 bits of N. */
613LISP_INLINE Lisp_Object 617INLINE Lisp_Object
614make_number (EMACS_INT n) 618make_number (EMACS_INT n)
615{ 619{
616 return XIL (USE_LSB_TAG ? n << INTTYPEBITS : n & INTMASK); 620 return XIL (USE_LSB_TAG ? n << INTTYPEBITS : n & INTMASK);
617} 621}
618 622
619/* Extract A's value as a signed integer. */ 623/* Extract A's value as a signed integer. */
620LISP_INLINE EMACS_INT 624INLINE EMACS_INT
621XINT (Lisp_Object a) 625XINT (Lisp_Object a)
622{ 626{
623 EMACS_INT i = XLI (a); 627 EMACS_INT i = XLI (a);
@@ -627,7 +631,7 @@ XINT (Lisp_Object a)
627/* Like XINT (A), but may be faster. A must be nonnegative. 631/* Like XINT (A), but may be faster. A must be nonnegative.
628 If ! USE_LSB_TAG, this takes advantage of the fact that Lisp 632 If ! USE_LSB_TAG, this takes advantage of the fact that Lisp
629 integers have zero-bits in their tags. */ 633 integers have zero-bits in their tags. */
630LISP_INLINE EMACS_INT 634INLINE EMACS_INT
631XFASTINT (Lisp_Object a) 635XFASTINT (Lisp_Object a)
632{ 636{
633 EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a); 637 EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a);
@@ -636,7 +640,7 @@ XFASTINT (Lisp_Object a)
636} 640}
637 641
638/* Extract A's type. */ 642/* Extract A's type. */
639LISP_INLINE enum Lisp_Type 643INLINE enum Lisp_Type
640XTYPE (Lisp_Object a) 644XTYPE (Lisp_Object a)
641{ 645{
642 EMACS_UINT i = XLI (a); 646 EMACS_UINT i = XLI (a);
@@ -644,7 +648,7 @@ XTYPE (Lisp_Object a)
644} 648}
645 649
646/* Extract A's pointer value, assuming A's type is TYPE. */ 650/* Extract A's pointer value, assuming A's type is TYPE. */
647LISP_INLINE void * 651INLINE void *
648XUNTAG (Lisp_Object a, int type) 652XUNTAG (Lisp_Object a, int type)
649{ 653{
650 if (USE_LSB_TAG) 654 if (USE_LSB_TAG)
@@ -658,7 +662,7 @@ XUNTAG (Lisp_Object a, int type)
658#endif /* ! USE_LSB_TAG */ 662#endif /* ! USE_LSB_TAG */
659 663
660/* Extract A's value as an unsigned integer. */ 664/* Extract A's value as an unsigned integer. */
661LISP_INLINE EMACS_UINT 665INLINE EMACS_UINT
662XUINT (Lisp_Object a) 666XUINT (Lisp_Object a)
663{ 667{
664 EMACS_UINT i = XLI (a); 668 EMACS_UINT i = XLI (a);
@@ -671,7 +675,7 @@ XUINT (Lisp_Object a)
671LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a), (a)) 675LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a), (a))
672 676
673/* Like make_number (N), but may be faster. N must be in nonnegative range. */ 677/* Like make_number (N), but may be faster. N must be in nonnegative range. */
674LISP_INLINE Lisp_Object 678INLINE Lisp_Object
675make_natnum (EMACS_INT n) 679make_natnum (EMACS_INT n)
676{ 680{
677 eassert (0 <= n && n <= MOST_POSITIVE_FIXNUM); 681 eassert (0 <= n && n <= MOST_POSITIVE_FIXNUM);
@@ -688,7 +692,7 @@ LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_Object y), (x, y))
688#define FIXNUM_OVERFLOW_P(i) \ 692#define FIXNUM_OVERFLOW_P(i) \
689 (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= MOST_POSITIVE_FIXNUM)) 693 (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= MOST_POSITIVE_FIXNUM))
690 694
691LISP_INLINE ptrdiff_t 695INLINE ptrdiff_t
692clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper) 696clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper)
693{ 697{
694 return num < lower ? lower : num <= upper ? num : upper; 698 return num < lower ? lower : num <= upper ? num : upper;
@@ -698,31 +702,31 @@ clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper)
698 702
699/* Defined in this file. */ 703/* Defined in this file. */
700union Lisp_Fwd; 704union Lisp_Fwd;
701LISP_INLINE bool BOOL_VECTOR_P (Lisp_Object); 705INLINE bool BOOL_VECTOR_P (Lisp_Object);
702LISP_INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *); 706INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *);
703LISP_INLINE bool BUFFERP (Lisp_Object); 707INLINE bool BUFFERP (Lisp_Object);
704LISP_INLINE bool CHAR_TABLE_P (Lisp_Object); 708INLINE bool CHAR_TABLE_P (Lisp_Object);
705LISP_INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t); 709INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t);
706LISP_INLINE bool (CONSP) (Lisp_Object); 710INLINE bool (CONSP) (Lisp_Object);
707LISP_INLINE bool (FLOATP) (Lisp_Object); 711INLINE bool (FLOATP) (Lisp_Object);
708LISP_INLINE bool functionp (Lisp_Object); 712INLINE bool functionp (Lisp_Object);
709LISP_INLINE bool (INTEGERP) (Lisp_Object); 713INLINE bool (INTEGERP) (Lisp_Object);
710LISP_INLINE bool (MARKERP) (Lisp_Object); 714INLINE bool (MARKERP) (Lisp_Object);
711LISP_INLINE bool (MISCP) (Lisp_Object); 715INLINE bool (MISCP) (Lisp_Object);
712LISP_INLINE bool (NILP) (Lisp_Object); 716INLINE bool (NILP) (Lisp_Object);
713LISP_INLINE bool OVERLAYP (Lisp_Object); 717INLINE bool OVERLAYP (Lisp_Object);
714LISP_INLINE bool PROCESSP (Lisp_Object); 718INLINE bool PROCESSP (Lisp_Object);
715LISP_INLINE bool PSEUDOVECTORP (Lisp_Object, int); 719INLINE bool PSEUDOVECTORP (Lisp_Object, int);
716LISP_INLINE bool SAVE_VALUEP (Lisp_Object); 720INLINE bool SAVE_VALUEP (Lisp_Object);
717LISP_INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t, 721INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t,
718 Lisp_Object); 722 Lisp_Object);
719LISP_INLINE bool STRINGP (Lisp_Object); 723INLINE bool STRINGP (Lisp_Object);
720LISP_INLINE bool SUB_CHAR_TABLE_P (Lisp_Object); 724INLINE bool SUB_CHAR_TABLE_P (Lisp_Object);
721LISP_INLINE bool SUBRP (Lisp_Object); 725INLINE bool SUBRP (Lisp_Object);
722LISP_INLINE bool (SYMBOLP) (Lisp_Object); 726INLINE bool (SYMBOLP) (Lisp_Object);
723LISP_INLINE bool (VECTORLIKEP) (Lisp_Object); 727INLINE bool (VECTORLIKEP) (Lisp_Object);
724LISP_INLINE bool WINDOWP (Lisp_Object); 728INLINE bool WINDOWP (Lisp_Object);
725LISP_INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); 729INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
726 730
727/* Defined in chartab.c. */ 731/* Defined in chartab.c. */
728extern Lisp_Object char_table_ref (Lisp_Object, int); 732extern Lisp_Object char_table_ref (Lisp_Object, int);
@@ -733,6 +737,7 @@ extern int char_table_translate (Lisp_Object, int);
733extern Lisp_Object Qarrayp, Qbufferp, Qbuffer_or_string_p, Qchar_table_p; 737extern Lisp_Object Qarrayp, Qbufferp, Qbuffer_or_string_p, Qchar_table_p;
734extern Lisp_Object Qconsp, Qfloatp, Qintegerp, Qlambda, Qlistp, Qmarkerp, Qnil; 738extern Lisp_Object Qconsp, Qfloatp, Qintegerp, Qlambda, Qlistp, Qmarkerp, Qnil;
735extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qvectorp; 739extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qvectorp;
740extern Lisp_Object Qbool_vector_p;
736extern Lisp_Object Qvector_or_char_table_p, Qwholenump; 741extern Lisp_Object Qvector_or_char_table_p, Qwholenump;
737extern Lisp_Object Qwindow; 742extern Lisp_Object Qwindow;
738extern Lisp_Object Ffboundp (Lisp_Object); 743extern Lisp_Object Ffboundp (Lisp_Object);
@@ -761,14 +766,14 @@ extern Lisp_Object Qimage;
761 766
762LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp_Object a), (a)) 767LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp_Object a), (a))
763 768
764LISP_INLINE struct Lisp_Vector * 769INLINE struct Lisp_Vector *
765XVECTOR (Lisp_Object a) 770XVECTOR (Lisp_Object a)
766{ 771{
767 eassert (VECTORLIKEP (a)); 772 eassert (VECTORLIKEP (a));
768 return XUNTAG (a, Lisp_Vectorlike); 773 return XUNTAG (a, Lisp_Vectorlike);
769} 774}
770 775
771LISP_INLINE struct Lisp_String * 776INLINE struct Lisp_String *
772XSTRING (Lisp_Object a) 777XSTRING (Lisp_Object a)
773{ 778{
774 eassert (STRINGP (a)); 779 eassert (STRINGP (a));
@@ -777,7 +782,7 @@ XSTRING (Lisp_Object a)
777 782
778LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a)) 783LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a))
779 784
780LISP_INLINE struct Lisp_Float * 785INLINE struct Lisp_Float *
781XFLOAT (Lisp_Object a) 786XFLOAT (Lisp_Object a)
782{ 787{
783 eassert (FLOATP (a)); 788 eassert (FLOATP (a));
@@ -786,55 +791,55 @@ XFLOAT (Lisp_Object a)
786 791
787/* Pseudovector types. */ 792/* Pseudovector types. */
788 793
789LISP_INLINE struct Lisp_Process * 794INLINE struct Lisp_Process *
790XPROCESS (Lisp_Object a) 795XPROCESS (Lisp_Object a)
791{ 796{
792 eassert (PROCESSP (a)); 797 eassert (PROCESSP (a));
793 return XUNTAG (a, Lisp_Vectorlike); 798 return XUNTAG (a, Lisp_Vectorlike);
794} 799}
795 800
796LISP_INLINE struct window * 801INLINE struct window *
797XWINDOW (Lisp_Object a) 802XWINDOW (Lisp_Object a)
798{ 803{
799 eassert (WINDOWP (a)); 804 eassert (WINDOWP (a));
800 return XUNTAG (a, Lisp_Vectorlike); 805 return XUNTAG (a, Lisp_Vectorlike);
801} 806}
802 807
803LISP_INLINE struct terminal * 808INLINE struct terminal *
804XTERMINAL (Lisp_Object a) 809XTERMINAL (Lisp_Object a)
805{ 810{
806 return XUNTAG (a, Lisp_Vectorlike); 811 return XUNTAG (a, Lisp_Vectorlike);
807} 812}
808 813
809LISP_INLINE struct Lisp_Subr * 814INLINE struct Lisp_Subr *
810XSUBR (Lisp_Object a) 815XSUBR (Lisp_Object a)
811{ 816{
812 eassert (SUBRP (a)); 817 eassert (SUBRP (a));
813 return XUNTAG (a, Lisp_Vectorlike); 818 return XUNTAG (a, Lisp_Vectorlike);
814} 819}
815 820
816LISP_INLINE struct buffer * 821INLINE struct buffer *
817XBUFFER (Lisp_Object a) 822XBUFFER (Lisp_Object a)
818{ 823{
819 eassert (BUFFERP (a)); 824 eassert (BUFFERP (a));
820 return XUNTAG (a, Lisp_Vectorlike); 825 return XUNTAG (a, Lisp_Vectorlike);
821} 826}
822 827
823LISP_INLINE struct Lisp_Char_Table * 828INLINE struct Lisp_Char_Table *
824XCHAR_TABLE (Lisp_Object a) 829XCHAR_TABLE (Lisp_Object a)
825{ 830{
826 eassert (CHAR_TABLE_P (a)); 831 eassert (CHAR_TABLE_P (a));
827 return XUNTAG (a, Lisp_Vectorlike); 832 return XUNTAG (a, Lisp_Vectorlike);
828} 833}
829 834
830LISP_INLINE struct Lisp_Sub_Char_Table * 835INLINE struct Lisp_Sub_Char_Table *
831XSUB_CHAR_TABLE (Lisp_Object a) 836XSUB_CHAR_TABLE (Lisp_Object a)
832{ 837{
833 eassert (SUB_CHAR_TABLE_P (a)); 838 eassert (SUB_CHAR_TABLE_P (a));
834 return XUNTAG (a, Lisp_Vectorlike); 839 return XUNTAG (a, Lisp_Vectorlike);
835} 840}
836 841
837LISP_INLINE struct Lisp_Bool_Vector * 842INLINE struct Lisp_Bool_Vector *
838XBOOL_VECTOR (Lisp_Object a) 843XBOOL_VECTOR (Lisp_Object a)
839{ 844{
840 eassert (BOOL_VECTOR_P (a)); 845 eassert (BOOL_VECTOR_P (a));
@@ -843,7 +848,7 @@ XBOOL_VECTOR (Lisp_Object a)
843 848
844/* Construct a Lisp_Object from a value or address. */ 849/* Construct a Lisp_Object from a value or address. */
845 850
846LISP_INLINE Lisp_Object 851INLINE Lisp_Object
847make_lisp_ptr (void *ptr, enum Lisp_Type type) 852make_lisp_ptr (void *ptr, enum Lisp_Type type)
848{ 853{
849 EMACS_UINT utype = type; 854 EMACS_UINT utype = type;
@@ -853,7 +858,7 @@ make_lisp_ptr (void *ptr, enum Lisp_Type type)
853 return a; 858 return a;
854} 859}
855 860
856LISP_INLINE Lisp_Object 861INLINE Lisp_Object
857make_lisp_proc (struct Lisp_Process *p) 862make_lisp_proc (struct Lisp_Process *p)
858{ 863{
859 return make_lisp_ptr (p, Lisp_Vectorlike); 864 return make_lisp_ptr (p, Lisp_Vectorlike);
@@ -937,12 +942,12 @@ struct Lisp_Cons
937 fields are not accessible. (What if we want to switch to 942 fields are not accessible. (What if we want to switch to
938 a copying collector someday? Cached cons cell field addresses may be 943 a copying collector someday? Cached cons cell field addresses may be
939 invalidated at arbitrary points.) */ 944 invalidated at arbitrary points.) */
940LISP_INLINE Lisp_Object * 945INLINE Lisp_Object *
941xcar_addr (Lisp_Object c) 946xcar_addr (Lisp_Object c)
942{ 947{
943 return &XCONS (c)->car; 948 return &XCONS (c)->car;
944} 949}
945LISP_INLINE Lisp_Object * 950INLINE Lisp_Object *
946xcdr_addr (Lisp_Object c) 951xcdr_addr (Lisp_Object c)
947{ 952{
948 return &XCONS (c)->u.cdr; 953 return &XCONS (c)->u.cdr;
@@ -956,26 +961,26 @@ LISP_MACRO_DEFUN (XCDR, Lisp_Object, (Lisp_Object c), (c))
956 961
957 Note that both arguments may refer to the same object, so 'n' 962 Note that both arguments may refer to the same object, so 'n'
958 should not be read after 'c' is first modified. */ 963 should not be read after 'c' is first modified. */
959LISP_INLINE void 964INLINE void
960XSETCAR (Lisp_Object c, Lisp_Object n) 965XSETCAR (Lisp_Object c, Lisp_Object n)
961{ 966{
962 *xcar_addr (c) = n; 967 *xcar_addr (c) = n;
963} 968}
964LISP_INLINE void 969INLINE void
965XSETCDR (Lisp_Object c, Lisp_Object n) 970XSETCDR (Lisp_Object c, Lisp_Object n)
966{ 971{
967 *xcdr_addr (c) = n; 972 *xcdr_addr (c) = n;
968} 973}
969 974
970/* Take the car or cdr of something whose type is not known. */ 975/* Take the car or cdr of something whose type is not known. */
971LISP_INLINE Lisp_Object 976INLINE Lisp_Object
972CAR (Lisp_Object c) 977CAR (Lisp_Object c)
973{ 978{
974 return (CONSP (c) ? XCAR (c) 979 return (CONSP (c) ? XCAR (c)
975 : NILP (c) ? Qnil 980 : NILP (c) ? Qnil
976 : wrong_type_argument (Qlistp, c)); 981 : wrong_type_argument (Qlistp, c));
977} 982}
978LISP_INLINE Lisp_Object 983INLINE Lisp_Object
979CDR (Lisp_Object c) 984CDR (Lisp_Object c)
980{ 985{
981 return (CONSP (c) ? XCDR (c) 986 return (CONSP (c) ? XCDR (c)
@@ -984,12 +989,12 @@ CDR (Lisp_Object c)
984} 989}
985 990
986/* Take the car or cdr of something whose type is not known. */ 991/* Take the car or cdr of something whose type is not known. */
987LISP_INLINE Lisp_Object 992INLINE Lisp_Object
988CAR_SAFE (Lisp_Object c) 993CAR_SAFE (Lisp_Object c)
989{ 994{
990 return CONSP (c) ? XCAR (c) : Qnil; 995 return CONSP (c) ? XCAR (c) : Qnil;
991} 996}
992LISP_INLINE Lisp_Object 997INLINE Lisp_Object
993CDR_SAFE (Lisp_Object c) 998CDR_SAFE (Lisp_Object c)
994{ 999{
995 return CONSP (c) ? XCDR (c) : Qnil; 1000 return CONSP (c) ? XCDR (c) : Qnil;
@@ -1006,7 +1011,7 @@ struct Lisp_String
1006 }; 1011 };
1007 1012
1008/* True if STR is a multibyte string. */ 1013/* True if STR is a multibyte string. */
1009LISP_INLINE bool 1014INLINE bool
1010STRING_MULTIBYTE (Lisp_Object str) 1015STRING_MULTIBYTE (Lisp_Object str)
1011{ 1016{
1012 return 0 <= XSTRING (str)->size_byte; 1017 return 0 <= XSTRING (str)->size_byte;
@@ -1043,28 +1048,28 @@ STRING_MULTIBYTE (Lisp_Object str)
1043 1048
1044/* Convenience functions for dealing with Lisp strings. */ 1049/* Convenience functions for dealing with Lisp strings. */
1045 1050
1046LISP_INLINE unsigned char * 1051INLINE unsigned char *
1047SDATA (Lisp_Object string) 1052SDATA (Lisp_Object string)
1048{ 1053{
1049 return XSTRING (string)->data; 1054 return XSTRING (string)->data;
1050} 1055}
1051LISP_INLINE char * 1056INLINE char *
1052SSDATA (Lisp_Object string) 1057SSDATA (Lisp_Object string)
1053{ 1058{
1054 /* Avoid "differ in sign" warnings. */ 1059 /* Avoid "differ in sign" warnings. */
1055 return (char *) SDATA (string); 1060 return (char *) SDATA (string);
1056} 1061}
1057LISP_INLINE unsigned char 1062INLINE unsigned char
1058SREF (Lisp_Object string, ptrdiff_t index) 1063SREF (Lisp_Object string, ptrdiff_t index)
1059{ 1064{
1060 return SDATA (string)[index]; 1065 return SDATA (string)[index];
1061} 1066}
1062LISP_INLINE void 1067INLINE void
1063SSET (Lisp_Object string, ptrdiff_t index, unsigned char new) 1068SSET (Lisp_Object string, ptrdiff_t index, unsigned char new)
1064{ 1069{
1065 SDATA (string)[index] = new; 1070 SDATA (string)[index] = new;
1066} 1071}
1067LISP_INLINE ptrdiff_t 1072INLINE ptrdiff_t
1068SCHARS (Lisp_Object string) 1073SCHARS (Lisp_Object string)
1069{ 1074{
1070 return XSTRING (string)->size; 1075 return XSTRING (string)->size;
@@ -1073,7 +1078,7 @@ SCHARS (Lisp_Object string)
1073#ifdef GC_CHECK_STRING_BYTES 1078#ifdef GC_CHECK_STRING_BYTES
1074extern ptrdiff_t string_bytes (struct Lisp_String *); 1079extern ptrdiff_t string_bytes (struct Lisp_String *);
1075#endif 1080#endif
1076LISP_INLINE ptrdiff_t 1081INLINE ptrdiff_t
1077STRING_BYTES (struct Lisp_String *s) 1082STRING_BYTES (struct Lisp_String *s)
1078{ 1083{
1079#ifdef GC_CHECK_STRING_BYTES 1084#ifdef GC_CHECK_STRING_BYTES
@@ -1083,17 +1088,17 @@ STRING_BYTES (struct Lisp_String *s)
1083#endif 1088#endif
1084} 1089}
1085 1090
1086LISP_INLINE ptrdiff_t 1091INLINE ptrdiff_t
1087SBYTES (Lisp_Object string) 1092SBYTES (Lisp_Object string)
1088{ 1093{
1089 return STRING_BYTES (XSTRING (string)); 1094 return STRING_BYTES (XSTRING (string));
1090} 1095}
1091LISP_INLINE void 1096INLINE void
1092STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize) 1097STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize)
1093{ 1098{
1094 XSTRING (string)->size = newsize; 1099 XSTRING (string)->size = newsize;
1095} 1100}
1096LISP_INLINE void 1101INLINE void
1097STRING_COPYIN (Lisp_Object string, ptrdiff_t index, char const *new, 1102STRING_COPYIN (Lisp_Object string, ptrdiff_t index, char const *new,
1098 ptrdiff_t count) 1103 ptrdiff_t count)
1099{ 1104{
@@ -1131,12 +1136,19 @@ struct vectorlike_header
1131 ptrdiff_t size; 1136 ptrdiff_t size;
1132 }; 1137 };
1133 1138
1134/* Regular vector is just a header plus array of Lisp_Objects. */ 1139/* Regular vector is just a header plus array of Lisp_Objects... */
1135 1140
1136struct Lisp_Vector 1141struct Lisp_Vector
1137 { 1142 {
1138 struct vectorlike_header header; 1143 struct vectorlike_header header;
1139 Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER]; 1144 union {
1145 /* ...but sometimes there is also a pointer internally used in
1146 vector allocation code. Usually you don't want to touch this. */
1147 struct Lisp_Vector *next;
1148
1149 /* We can't use FLEXIBLE_ARRAY_MEMBER here. */
1150 Lisp_Object contents[1];
1151 } u;
1140 }; 1152 };
1141 1153
1142/* A boolvector is a kind of vectorlike, with contents are like a string. */ 1154/* A boolvector is a kind of vectorlike, with contents are like a string. */
@@ -1157,45 +1169,45 @@ struct Lisp_Bool_Vector
1157 1169
1158enum 1170enum
1159 { 1171 {
1160 header_size = offsetof (struct Lisp_Vector, contents), 1172 header_size = offsetof (struct Lisp_Vector, u.contents),
1161 bool_header_size = offsetof (struct Lisp_Bool_Vector, data), 1173 bool_header_size = offsetof (struct Lisp_Bool_Vector, data),
1162 word_size = sizeof (Lisp_Object) 1174 word_size = sizeof (Lisp_Object)
1163 }; 1175 };
1164 1176
1165/* Conveniences for dealing with Lisp arrays. */ 1177/* Conveniences for dealing with Lisp arrays. */
1166 1178
1167LISP_INLINE Lisp_Object 1179INLINE Lisp_Object
1168AREF (Lisp_Object array, ptrdiff_t idx) 1180AREF (Lisp_Object array, ptrdiff_t idx)
1169{ 1181{
1170 return XVECTOR (array)->contents[idx]; 1182 return XVECTOR (array)->u.contents[idx];
1171} 1183}
1172 1184
1173LISP_INLINE Lisp_Object * 1185INLINE Lisp_Object *
1174aref_addr (Lisp_Object array, ptrdiff_t idx) 1186aref_addr (Lisp_Object array, ptrdiff_t idx)
1175{ 1187{
1176 return & XVECTOR (array)->contents[idx]; 1188 return & XVECTOR (array)->u.contents[idx];
1177} 1189}
1178 1190
1179LISP_INLINE ptrdiff_t 1191INLINE ptrdiff_t
1180ASIZE (Lisp_Object array) 1192ASIZE (Lisp_Object array)
1181{ 1193{
1182 return XVECTOR (array)->header.size; 1194 return XVECTOR (array)->header.size;
1183} 1195}
1184 1196
1185LISP_INLINE void 1197INLINE void
1186ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) 1198ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
1187{ 1199{
1188 eassert (0 <= idx && idx < ASIZE (array)); 1200 eassert (0 <= idx && idx < ASIZE (array));
1189 XVECTOR (array)->contents[idx] = val; 1201 XVECTOR (array)->u.contents[idx] = val;
1190} 1202}
1191 1203
1192LISP_INLINE void 1204INLINE void
1193gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) 1205gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
1194{ 1206{
1195 /* Like ASET, but also can be used in the garbage collector: 1207 /* Like ASET, but also can be used in the garbage collector:
1196 sweep_weak_table calls set_hash_key etc. while the table is marked. */ 1208 sweep_weak_table calls set_hash_key etc. while the table is marked. */
1197 eassert (0 <= idx && idx < (ASIZE (array) & ~ARRAY_MARK_FLAG)); 1209 eassert (0 <= idx && idx < (ASIZE (array) & ~ARRAY_MARK_FLAG));
1198 XVECTOR (array)->contents[idx] = val; 1210 XVECTOR (array)->u.contents[idx] = val;
1199} 1211}
1200 1212
1201/* If a struct is made to look like a vector, this macro returns the length 1213/* If a struct is made to look like a vector, this macro returns the length
@@ -1296,7 +1308,7 @@ struct Lisp_Sub_Char_Table
1296 Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER]; 1308 Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER];
1297 }; 1309 };
1298 1310
1299LISP_INLINE Lisp_Object 1311INLINE Lisp_Object
1300CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx) 1312CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx)
1301{ 1313{
1302 struct Lisp_Char_Table *tbl = NULL; 1314 struct Lisp_Char_Table *tbl = NULL;
@@ -1316,7 +1328,7 @@ CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx)
1316 1328
1317/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 1329/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
1318 characters. Do not check validity of CT. */ 1330 characters. Do not check validity of CT. */
1319LISP_INLINE Lisp_Object 1331INLINE Lisp_Object
1320CHAR_TABLE_REF (Lisp_Object ct, int idx) 1332CHAR_TABLE_REF (Lisp_Object ct, int idx)
1321{ 1333{
1322 return (ASCII_CHAR_P (idx) 1334 return (ASCII_CHAR_P (idx)
@@ -1326,7 +1338,7 @@ CHAR_TABLE_REF (Lisp_Object ct, int idx)
1326 1338
1327/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and 1339/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
1328 8-bit European characters. Do not check validity of CT. */ 1340 8-bit European characters. Do not check validity of CT. */
1329LISP_INLINE void 1341INLINE void
1330CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Object val) 1342CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Object val)
1331{ 1343{
1332 if (ASCII_CHAR_P (idx) && SUB_CHAR_TABLE_P (XCHAR_TABLE (ct)->ascii)) 1344 if (ASCII_CHAR_P (idx) && SUB_CHAR_TABLE_P (XCHAR_TABLE (ct)->ascii))
@@ -1371,7 +1383,7 @@ enum CHAR_TABLE_STANDARD_SLOTS
1371 1383
1372/* Return the number of "extra" slots in the char table CT. */ 1384/* Return the number of "extra" slots in the char table CT. */
1373 1385
1374LISP_INLINE int 1386INLINE int
1375CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct) 1387CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct)
1376{ 1388{
1377 return ((ct->header.size & PSEUDOVECTOR_SIZE_MASK) 1389 return ((ct->header.size & PSEUDOVECTOR_SIZE_MASK)
@@ -1450,19 +1462,19 @@ struct Lisp_Symbol
1450 1462
1451LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct Lisp_Symbol *sym), (sym)) 1463LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct Lisp_Symbol *sym), (sym))
1452 1464
1453LISP_INLINE struct Lisp_Symbol * 1465INLINE struct Lisp_Symbol *
1454SYMBOL_ALIAS (struct Lisp_Symbol *sym) 1466SYMBOL_ALIAS (struct Lisp_Symbol *sym)
1455{ 1467{
1456 eassert (sym->redirect == SYMBOL_VARALIAS); 1468 eassert (sym->redirect == SYMBOL_VARALIAS);
1457 return sym->val.alias; 1469 return sym->val.alias;
1458} 1470}
1459LISP_INLINE struct Lisp_Buffer_Local_Value * 1471INLINE struct Lisp_Buffer_Local_Value *
1460SYMBOL_BLV (struct Lisp_Symbol *sym) 1472SYMBOL_BLV (struct Lisp_Symbol *sym)
1461{ 1473{
1462 eassert (sym->redirect == SYMBOL_LOCALIZED); 1474 eassert (sym->redirect == SYMBOL_LOCALIZED);
1463 return sym->val.blv; 1475 return sym->val.blv;
1464} 1476}
1465LISP_INLINE union Lisp_Fwd * 1477INLINE union Lisp_Fwd *
1466SYMBOL_FWD (struct Lisp_Symbol *sym) 1478SYMBOL_FWD (struct Lisp_Symbol *sym)
1467{ 1479{
1468 eassert (sym->redirect == SYMBOL_FORWARDED); 1480 eassert (sym->redirect == SYMBOL_FORWARDED);
@@ -1472,26 +1484,26 @@ SYMBOL_FWD (struct Lisp_Symbol *sym)
1472LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL, 1484LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,
1473 (struct Lisp_Symbol *sym, Lisp_Object v), (sym, v)) 1485 (struct Lisp_Symbol *sym, Lisp_Object v), (sym, v))
1474 1486
1475LISP_INLINE void 1487INLINE void
1476SET_SYMBOL_ALIAS (struct Lisp_Symbol *sym, struct Lisp_Symbol *v) 1488SET_SYMBOL_ALIAS (struct Lisp_Symbol *sym, struct Lisp_Symbol *v)
1477{ 1489{
1478 eassert (sym->redirect == SYMBOL_VARALIAS); 1490 eassert (sym->redirect == SYMBOL_VARALIAS);
1479 sym->val.alias = v; 1491 sym->val.alias = v;
1480} 1492}
1481LISP_INLINE void 1493INLINE void
1482SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Lisp_Buffer_Local_Value *v) 1494SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Lisp_Buffer_Local_Value *v)
1483{ 1495{
1484 eassert (sym->redirect == SYMBOL_LOCALIZED); 1496 eassert (sym->redirect == SYMBOL_LOCALIZED);
1485 sym->val.blv = v; 1497 sym->val.blv = v;
1486} 1498}
1487LISP_INLINE void 1499INLINE void
1488SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lisp_Fwd *v) 1500SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lisp_Fwd *v)
1489{ 1501{
1490 eassert (sym->redirect == SYMBOL_FORWARDED); 1502 eassert (sym->redirect == SYMBOL_FORWARDED);
1491 sym->val.fwd = v; 1503 sym->val.fwd = v;
1492} 1504}
1493 1505
1494LISP_INLINE Lisp_Object 1506INLINE Lisp_Object
1495SYMBOL_NAME (Lisp_Object sym) 1507SYMBOL_NAME (Lisp_Object sym)
1496{ 1508{
1497 return XSYMBOL (sym)->name; 1509 return XSYMBOL (sym)->name;
@@ -1499,7 +1511,7 @@ SYMBOL_NAME (Lisp_Object sym)
1499 1511
1500/* Value is true if SYM is an interned symbol. */ 1512/* Value is true if SYM is an interned symbol. */
1501 1513
1502LISP_INLINE bool 1514INLINE bool
1503SYMBOL_INTERNED_P (Lisp_Object sym) 1515SYMBOL_INTERNED_P (Lisp_Object sym)
1504{ 1516{
1505 return XSYMBOL (sym)->interned != SYMBOL_UNINTERNED; 1517 return XSYMBOL (sym)->interned != SYMBOL_UNINTERNED;
@@ -1507,7 +1519,7 @@ SYMBOL_INTERNED_P (Lisp_Object sym)
1507 1519
1508/* Value is true if SYM is interned in initial_obarray. */ 1520/* Value is true if SYM is interned in initial_obarray. */
1509 1521
1510LISP_INLINE bool 1522INLINE bool
1511SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym) 1523SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym)
1512{ 1524{
1513 return XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY; 1525 return XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY;
@@ -1603,7 +1615,7 @@ struct Lisp_Hash_Table
1603}; 1615};
1604 1616
1605 1617
1606LISP_INLINE struct Lisp_Hash_Table * 1618INLINE struct Lisp_Hash_Table *
1607XHASH_TABLE (Lisp_Object a) 1619XHASH_TABLE (Lisp_Object a)
1608{ 1620{
1609 return XUNTAG (a, Lisp_Vectorlike); 1621 return XUNTAG (a, Lisp_Vectorlike);
@@ -1612,21 +1624,21 @@ XHASH_TABLE (Lisp_Object a)
1612#define XSET_HASH_TABLE(VAR, PTR) \ 1624#define XSET_HASH_TABLE(VAR, PTR) \
1613 (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE)) 1625 (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE))
1614 1626
1615LISP_INLINE bool 1627INLINE bool
1616HASH_TABLE_P (Lisp_Object a) 1628HASH_TABLE_P (Lisp_Object a)
1617{ 1629{
1618 return PSEUDOVECTORP (a, PVEC_HASH_TABLE); 1630 return PSEUDOVECTORP (a, PVEC_HASH_TABLE);
1619} 1631}
1620 1632
1621/* Value is the key part of entry IDX in hash table H. */ 1633/* Value is the key part of entry IDX in hash table H. */
1622LISP_INLINE Lisp_Object 1634INLINE Lisp_Object
1623HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx) 1635HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1624{ 1636{
1625 return AREF (h->key_and_value, 2 * idx); 1637 return AREF (h->key_and_value, 2 * idx);
1626} 1638}
1627 1639
1628/* Value is the value part of entry IDX in hash table H. */ 1640/* Value is the value part of entry IDX in hash table H. */
1629LISP_INLINE Lisp_Object 1641INLINE Lisp_Object
1630HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx) 1642HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1631{ 1643{
1632 return AREF (h->key_and_value, 2 * idx + 1); 1644 return AREF (h->key_and_value, 2 * idx + 1);
@@ -1634,14 +1646,14 @@ HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1634 1646
1635/* Value is the index of the next entry following the one at IDX 1647/* Value is the index of the next entry following the one at IDX
1636 in hash table H. */ 1648 in hash table H. */
1637LISP_INLINE Lisp_Object 1649INLINE Lisp_Object
1638HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t idx) 1650HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1639{ 1651{
1640 return AREF (h->next, idx); 1652 return AREF (h->next, idx);
1641} 1653}
1642 1654
1643/* Value is the hash code computed for entry IDX in hash table H. */ 1655/* Value is the hash code computed for entry IDX in hash table H. */
1644LISP_INLINE Lisp_Object 1656INLINE Lisp_Object
1645HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx) 1657HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1646{ 1658{
1647 return AREF (h->hash, idx); 1659 return AREF (h->hash, idx);
@@ -1649,14 +1661,14 @@ HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1649 1661
1650/* Value is the index of the element in hash table H that is the 1662/* Value is the index of the element in hash table H that is the
1651 start of the collision list at index IDX in the index vector of H. */ 1663 start of the collision list at index IDX in the index vector of H. */
1652LISP_INLINE Lisp_Object 1664INLINE Lisp_Object
1653HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t idx) 1665HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t idx)
1654{ 1666{
1655 return AREF (h->index, idx); 1667 return AREF (h->index, idx);
1656} 1668}
1657 1669
1658/* Value is the size of hash table H. */ 1670/* Value is the size of hash table H. */
1659LISP_INLINE ptrdiff_t 1671INLINE ptrdiff_t
1660HASH_TABLE_SIZE (struct Lisp_Hash_Table *h) 1672HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)
1661{ 1673{
1662 return ASIZE (h->next); 1674 return ASIZE (h->next);
@@ -1679,7 +1691,7 @@ static double const DEFAULT_REHASH_SIZE = 1.5;
1679/* Combine two integers X and Y for hashing. The result might not fit 1691/* Combine two integers X and Y for hashing. The result might not fit
1680 into a Lisp integer. */ 1692 into a Lisp integer. */
1681 1693
1682LISP_INLINE EMACS_UINT 1694INLINE EMACS_UINT
1683sxhash_combine (EMACS_UINT x, EMACS_UINT y) 1695sxhash_combine (EMACS_UINT x, EMACS_UINT y)
1684{ 1696{
1685 return (x << 4) + (x >> (BITS_PER_EMACS_INT - 4)) + y; 1697 return (x << 4) + (x >> (BITS_PER_EMACS_INT - 4)) + y;
@@ -1687,7 +1699,7 @@ sxhash_combine (EMACS_UINT x, EMACS_UINT y)
1687 1699
1688/* Hash X, returning a value that fits into a fixnum. */ 1700/* Hash X, returning a value that fits into a fixnum. */
1689 1701
1690LISP_INLINE EMACS_UINT 1702INLINE EMACS_UINT
1691SXHASH_REDUCE (EMACS_UINT x) 1703SXHASH_REDUCE (EMACS_UINT x)
1692{ 1704{
1693 return (x ^ x >> (BITS_PER_EMACS_INT - FIXNUM_BITS)) & INTMASK; 1705 return (x ^ x >> (BITS_PER_EMACS_INT - FIXNUM_BITS)) & INTMASK;
@@ -1857,7 +1869,7 @@ struct Lisp_Save_Value
1857 }; 1869 };
1858 1870
1859/* Return the type of V's Nth saved value. */ 1871/* Return the type of V's Nth saved value. */
1860LISP_INLINE int 1872INLINE int
1861save_type (struct Lisp_Save_Value *v, int n) 1873save_type (struct Lisp_Save_Value *v, int n)
1862{ 1874{
1863 eassert (0 <= n && n < SAVE_VALUE_SLOTS); 1875 eassert (0 <= n && n < SAVE_VALUE_SLOTS);
@@ -1866,19 +1878,19 @@ save_type (struct Lisp_Save_Value *v, int n)
1866 1878
1867/* Get and set the Nth saved pointer. */ 1879/* Get and set the Nth saved pointer. */
1868 1880
1869LISP_INLINE void * 1881INLINE void *
1870XSAVE_POINTER (Lisp_Object obj, int n) 1882XSAVE_POINTER (Lisp_Object obj, int n)
1871{ 1883{
1872 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER); 1884 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER);
1873 return XSAVE_VALUE (obj)->data[n].pointer; 1885 return XSAVE_VALUE (obj)->data[n].pointer;
1874} 1886}
1875LISP_INLINE void 1887INLINE void
1876set_save_pointer (Lisp_Object obj, int n, void *val) 1888set_save_pointer (Lisp_Object obj, int n, void *val)
1877{ 1889{
1878 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER); 1890 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER);
1879 XSAVE_VALUE (obj)->data[n].pointer = val; 1891 XSAVE_VALUE (obj)->data[n].pointer = val;
1880} 1892}
1881LISP_INLINE voidfuncptr 1893INLINE voidfuncptr
1882XSAVE_FUNCPOINTER (Lisp_Object obj, int n) 1894XSAVE_FUNCPOINTER (Lisp_Object obj, int n)
1883{ 1895{
1884 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_FUNCPOINTER); 1896 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_FUNCPOINTER);
@@ -1887,13 +1899,13 @@ XSAVE_FUNCPOINTER (Lisp_Object obj, int n)
1887 1899
1888/* Likewise for the saved integer. */ 1900/* Likewise for the saved integer. */
1889 1901
1890LISP_INLINE ptrdiff_t 1902INLINE ptrdiff_t
1891XSAVE_INTEGER (Lisp_Object obj, int n) 1903XSAVE_INTEGER (Lisp_Object obj, int n)
1892{ 1904{
1893 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER); 1905 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER);
1894 return XSAVE_VALUE (obj)->data[n].integer; 1906 return XSAVE_VALUE (obj)->data[n].integer;
1895} 1907}
1896LISP_INLINE void 1908INLINE void
1897set_save_integer (Lisp_Object obj, int n, ptrdiff_t val) 1909set_save_integer (Lisp_Object obj, int n, ptrdiff_t val)
1898{ 1910{
1899 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER); 1911 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER);
@@ -1902,7 +1914,7 @@ set_save_integer (Lisp_Object obj, int n, ptrdiff_t val)
1902 1914
1903/* Extract Nth saved object. */ 1915/* Extract Nth saved object. */
1904 1916
1905LISP_INLINE Lisp_Object 1917INLINE Lisp_Object
1906XSAVE_OBJECT (Lisp_Object obj, int n) 1918XSAVE_OBJECT (Lisp_Object obj, int n)
1907{ 1919{
1908 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_OBJECT); 1920 eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_OBJECT);
@@ -1930,40 +1942,40 @@ union Lisp_Misc
1930 struct Lisp_Save_Value u_save_value; 1942 struct Lisp_Save_Value u_save_value;
1931 }; 1943 };
1932 1944
1933LISP_INLINE union Lisp_Misc * 1945INLINE union Lisp_Misc *
1934XMISC (Lisp_Object a) 1946XMISC (Lisp_Object a)
1935{ 1947{
1936 return XUNTAG (a, Lisp_Misc); 1948 return XUNTAG (a, Lisp_Misc);
1937} 1949}
1938 1950
1939LISP_INLINE struct Lisp_Misc_Any * 1951INLINE struct Lisp_Misc_Any *
1940XMISCANY (Lisp_Object a) 1952XMISCANY (Lisp_Object a)
1941{ 1953{
1942 eassert (MISCP (a)); 1954 eassert (MISCP (a));
1943 return & XMISC (a)->u_any; 1955 return & XMISC (a)->u_any;
1944} 1956}
1945 1957
1946LISP_INLINE enum Lisp_Misc_Type 1958INLINE enum Lisp_Misc_Type
1947XMISCTYPE (Lisp_Object a) 1959XMISCTYPE (Lisp_Object a)
1948{ 1960{
1949 return XMISCANY (a)->type; 1961 return XMISCANY (a)->type;
1950} 1962}
1951 1963
1952LISP_INLINE struct Lisp_Marker * 1964INLINE struct Lisp_Marker *
1953XMARKER (Lisp_Object a) 1965XMARKER (Lisp_Object a)
1954{ 1966{
1955 eassert (MARKERP (a)); 1967 eassert (MARKERP (a));
1956 return & XMISC (a)->u_marker; 1968 return & XMISC (a)->u_marker;
1957} 1969}
1958 1970
1959LISP_INLINE struct Lisp_Overlay * 1971INLINE struct Lisp_Overlay *
1960XOVERLAY (Lisp_Object a) 1972XOVERLAY (Lisp_Object a)
1961{ 1973{
1962 eassert (OVERLAYP (a)); 1974 eassert (OVERLAYP (a));
1963 return & XMISC (a)->u_overlay; 1975 return & XMISC (a)->u_overlay;
1964} 1976}
1965 1977
1966LISP_INLINE struct Lisp_Save_Value * 1978INLINE struct Lisp_Save_Value *
1967XSAVE_VALUE (Lisp_Object a) 1979XSAVE_VALUE (Lisp_Object a)
1968{ 1980{
1969 eassert (SAVE_VALUEP (a)); 1981 eassert (SAVE_VALUEP (a));
@@ -2077,13 +2089,13 @@ union Lisp_Fwd
2077 struct Lisp_Kboard_Objfwd u_kboard_objfwd; 2089 struct Lisp_Kboard_Objfwd u_kboard_objfwd;
2078 }; 2090 };
2079 2091
2080LISP_INLINE enum Lisp_Fwd_Type 2092INLINE enum Lisp_Fwd_Type
2081XFWDTYPE (union Lisp_Fwd *a) 2093XFWDTYPE (union Lisp_Fwd *a)
2082{ 2094{
2083 return a->u_intfwd.type; 2095 return a->u_intfwd.type;
2084} 2096}
2085 2097
2086LISP_INLINE struct Lisp_Buffer_Objfwd * 2098INLINE struct Lisp_Buffer_Objfwd *
2087XBUFFER_OBJFWD (union Lisp_Fwd *a) 2099XBUFFER_OBJFWD (union Lisp_Fwd *a)
2088{ 2100{
2089 eassert (BUFFER_OBJFWDP (a)); 2101 eassert (BUFFER_OBJFWDP (a));
@@ -2100,7 +2112,7 @@ struct Lisp_Float
2100 } u; 2112 } u;
2101 }; 2113 };
2102 2114
2103LISP_INLINE double 2115INLINE double
2104XFLOAT_DATA (Lisp_Object f) 2116XFLOAT_DATA (Lisp_Object f)
2105{ 2117{
2106 return XFLOAT (f)->u.data; 2118 return XFLOAT (f)->u.data;
@@ -2164,18 +2176,18 @@ enum char_bits
2164 2176
2165LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)) 2177LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x))
2166 2178
2167LISP_INLINE bool 2179INLINE bool
2168NUMBERP (Lisp_Object x) 2180NUMBERP (Lisp_Object x)
2169{ 2181{
2170 return INTEGERP (x) || FLOATP (x); 2182 return INTEGERP (x) || FLOATP (x);
2171} 2183}
2172LISP_INLINE bool 2184INLINE bool
2173NATNUMP (Lisp_Object x) 2185NATNUMP (Lisp_Object x)
2174{ 2186{
2175 return INTEGERP (x) && 0 <= XINT (x); 2187 return INTEGERP (x) && 0 <= XINT (x);
2176} 2188}
2177 2189
2178LISP_INLINE bool 2190INLINE bool
2179RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intmax_t hi) 2191RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intmax_t hi)
2180{ 2192{
2181 return INTEGERP (x) && lo <= XINT (x) && XINT (x) <= hi; 2193 return INTEGERP (x) && lo <= XINT (x) && XINT (x) <= hi;
@@ -2194,40 +2206,40 @@ LISP_MACRO_DEFUN (INTEGERP, bool, (Lisp_Object x), (x))
2194LISP_MACRO_DEFUN (VECTORLIKEP, bool, (Lisp_Object x), (x)) 2206LISP_MACRO_DEFUN (VECTORLIKEP, bool, (Lisp_Object x), (x))
2195LISP_MACRO_DEFUN (MARKERP, bool, (Lisp_Object x), (x)) 2207LISP_MACRO_DEFUN (MARKERP, bool, (Lisp_Object x), (x))
2196 2208
2197LISP_INLINE bool 2209INLINE bool
2198STRINGP (Lisp_Object x) 2210STRINGP (Lisp_Object x)
2199{ 2211{
2200 return XTYPE (x) == Lisp_String; 2212 return XTYPE (x) == Lisp_String;
2201} 2213}
2202LISP_INLINE bool 2214INLINE bool
2203VECTORP (Lisp_Object x) 2215VECTORP (Lisp_Object x)
2204{ 2216{
2205 return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG); 2217 return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG);
2206} 2218}
2207LISP_INLINE bool 2219INLINE bool
2208OVERLAYP (Lisp_Object x) 2220OVERLAYP (Lisp_Object x)
2209{ 2221{
2210 return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay; 2222 return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay;
2211} 2223}
2212LISP_INLINE bool 2224INLINE bool
2213SAVE_VALUEP (Lisp_Object x) 2225SAVE_VALUEP (Lisp_Object x)
2214{ 2226{
2215 return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value; 2227 return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value;
2216} 2228}
2217 2229
2218LISP_INLINE bool 2230INLINE bool
2219AUTOLOADP (Lisp_Object x) 2231AUTOLOADP (Lisp_Object x)
2220{ 2232{
2221 return CONSP (x) && EQ (Qautoload, XCAR (x)); 2233 return CONSP (x) && EQ (Qautoload, XCAR (x));
2222} 2234}
2223 2235
2224LISP_INLINE bool 2236INLINE bool
2225BUFFER_OBJFWDP (union Lisp_Fwd *a) 2237BUFFER_OBJFWDP (union Lisp_Fwd *a)
2226{ 2238{
2227 return XFWDTYPE (a) == Lisp_Fwd_Buffer_Obj; 2239 return XFWDTYPE (a) == Lisp_Fwd_Buffer_Obj;
2228} 2240}
2229 2241
2230LISP_INLINE bool 2242INLINE bool
2231PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code) 2243PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code)
2232{ 2244{
2233 return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) 2245 return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK))
@@ -2235,7 +2247,7 @@ PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code)
2235} 2247}
2236 2248
2237/* True if A is a pseudovector whose code is CODE. */ 2249/* True if A is a pseudovector whose code is CODE. */
2238LISP_INLINE bool 2250INLINE bool
2239PSEUDOVECTORP (Lisp_Object a, int code) 2251PSEUDOVECTORP (Lisp_Object a, int code)
2240{ 2252{
2241 if (! VECTORLIKEP (a)) 2253 if (! VECTORLIKEP (a))
@@ -2251,87 +2263,87 @@ PSEUDOVECTORP (Lisp_Object a, int code)
2251 2263
2252/* Test for specific pseudovector types. */ 2264/* Test for specific pseudovector types. */
2253 2265
2254LISP_INLINE bool 2266INLINE bool
2255WINDOW_CONFIGURATIONP (Lisp_Object a) 2267WINDOW_CONFIGURATIONP (Lisp_Object a)
2256{ 2268{
2257 return PSEUDOVECTORP (a, PVEC_WINDOW_CONFIGURATION); 2269 return PSEUDOVECTORP (a, PVEC_WINDOW_CONFIGURATION);
2258} 2270}
2259 2271
2260LISP_INLINE bool 2272INLINE bool
2261PROCESSP (Lisp_Object a) 2273PROCESSP (Lisp_Object a)
2262{ 2274{
2263 return PSEUDOVECTORP (a, PVEC_PROCESS); 2275 return PSEUDOVECTORP (a, PVEC_PROCESS);
2264} 2276}
2265 2277
2266LISP_INLINE bool 2278INLINE bool
2267WINDOWP (Lisp_Object a) 2279WINDOWP (Lisp_Object a)
2268{ 2280{
2269 return PSEUDOVECTORP (a, PVEC_WINDOW); 2281 return PSEUDOVECTORP (a, PVEC_WINDOW);
2270} 2282}
2271 2283
2272LISP_INLINE bool 2284INLINE bool
2273TERMINALP (Lisp_Object a) 2285TERMINALP (Lisp_Object a)
2274{ 2286{
2275 return PSEUDOVECTORP (a, PVEC_TERMINAL); 2287 return PSEUDOVECTORP (a, PVEC_TERMINAL);
2276} 2288}
2277 2289
2278LISP_INLINE bool 2290INLINE bool
2279SUBRP (Lisp_Object a) 2291SUBRP (Lisp_Object a)
2280{ 2292{
2281 return PSEUDOVECTORP (a, PVEC_SUBR); 2293 return PSEUDOVECTORP (a, PVEC_SUBR);
2282} 2294}
2283 2295
2284LISP_INLINE bool 2296INLINE bool
2285COMPILEDP (Lisp_Object a) 2297COMPILEDP (Lisp_Object a)
2286{ 2298{
2287 return PSEUDOVECTORP (a, PVEC_COMPILED); 2299 return PSEUDOVECTORP (a, PVEC_COMPILED);
2288} 2300}
2289 2301
2290LISP_INLINE bool 2302INLINE bool
2291BUFFERP (Lisp_Object a) 2303BUFFERP (Lisp_Object a)
2292{ 2304{
2293 return PSEUDOVECTORP (a, PVEC_BUFFER); 2305 return PSEUDOVECTORP (a, PVEC_BUFFER);
2294} 2306}
2295 2307
2296LISP_INLINE bool 2308INLINE bool
2297CHAR_TABLE_P (Lisp_Object a) 2309CHAR_TABLE_P (Lisp_Object a)
2298{ 2310{
2299 return PSEUDOVECTORP (a, PVEC_CHAR_TABLE); 2311 return PSEUDOVECTORP (a, PVEC_CHAR_TABLE);
2300} 2312}
2301 2313
2302LISP_INLINE bool 2314INLINE bool
2303SUB_CHAR_TABLE_P (Lisp_Object a) 2315SUB_CHAR_TABLE_P (Lisp_Object a)
2304{ 2316{
2305 return PSEUDOVECTORP (a, PVEC_SUB_CHAR_TABLE); 2317 return PSEUDOVECTORP (a, PVEC_SUB_CHAR_TABLE);
2306} 2318}
2307 2319
2308LISP_INLINE bool 2320INLINE bool
2309BOOL_VECTOR_P (Lisp_Object a) 2321BOOL_VECTOR_P (Lisp_Object a)
2310{ 2322{
2311 return PSEUDOVECTORP (a, PVEC_BOOL_VECTOR); 2323 return PSEUDOVECTORP (a, PVEC_BOOL_VECTOR);
2312} 2324}
2313 2325
2314LISP_INLINE bool 2326INLINE bool
2315FRAMEP (Lisp_Object a) 2327FRAMEP (Lisp_Object a)
2316{ 2328{
2317 return PSEUDOVECTORP (a, PVEC_FRAME); 2329 return PSEUDOVECTORP (a, PVEC_FRAME);
2318} 2330}
2319 2331
2320/* Test for image (image . spec) */ 2332/* Test for image (image . spec) */
2321LISP_INLINE bool 2333INLINE bool
2322IMAGEP (Lisp_Object x) 2334IMAGEP (Lisp_Object x)
2323{ 2335{
2324 return CONSP (x) && EQ (XCAR (x), Qimage); 2336 return CONSP (x) && EQ (XCAR (x), Qimage);
2325} 2337}
2326 2338
2327/* Array types. */ 2339/* Array types. */
2328LISP_INLINE bool 2340INLINE bool
2329ARRAYP (Lisp_Object x) 2341ARRAYP (Lisp_Object x)
2330{ 2342{
2331 return VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x); 2343 return VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x);
2332} 2344}
2333 2345
2334LISP_INLINE void 2346INLINE void
2335CHECK_LIST (Lisp_Object x) 2347CHECK_LIST (Lisp_Object x)
2336{ 2348{
2337 CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x); 2349 CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x);
@@ -2341,52 +2353,57 @@ LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Object x, Lisp_Object y), (x, y))
2341LISP_MACRO_DEFUN_VOID (CHECK_SYMBOL, (Lisp_Object x), (x)) 2353LISP_MACRO_DEFUN_VOID (CHECK_SYMBOL, (Lisp_Object x), (x))
2342LISP_MACRO_DEFUN_VOID (CHECK_NUMBER, (Lisp_Object x), (x)) 2354LISP_MACRO_DEFUN_VOID (CHECK_NUMBER, (Lisp_Object x), (x))
2343 2355
2344LISP_INLINE void 2356INLINE void
2345CHECK_STRING (Lisp_Object x) 2357CHECK_STRING (Lisp_Object x)
2346{ 2358{
2347 CHECK_TYPE (STRINGP (x), Qstringp, x); 2359 CHECK_TYPE (STRINGP (x), Qstringp, x);
2348} 2360}
2349LISP_INLINE void 2361INLINE void
2350CHECK_STRING_CAR (Lisp_Object x) 2362CHECK_STRING_CAR (Lisp_Object x)
2351{ 2363{
2352 CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x)); 2364 CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x));
2353} 2365}
2354LISP_INLINE void 2366INLINE void
2355CHECK_CONS (Lisp_Object x) 2367CHECK_CONS (Lisp_Object x)
2356{ 2368{
2357 CHECK_TYPE (CONSP (x), Qconsp, x); 2369 CHECK_TYPE (CONSP (x), Qconsp, x);
2358} 2370}
2359LISP_INLINE void 2371INLINE void
2360CHECK_VECTOR (Lisp_Object x) 2372CHECK_VECTOR (Lisp_Object x)
2361{ 2373{
2362 CHECK_TYPE (VECTORP (x), Qvectorp, x); 2374 CHECK_TYPE (VECTORP (x), Qvectorp, x);
2363} 2375}
2364LISP_INLINE void 2376INLINE void
2377CHECK_BOOL_VECTOR (Lisp_Object x)
2378{
2379 CHECK_TYPE (BOOL_VECTOR_P (x), Qbool_vector_p, x);
2380}
2381INLINE void
2365CHECK_VECTOR_OR_STRING (Lisp_Object x) 2382CHECK_VECTOR_OR_STRING (Lisp_Object x)
2366{ 2383{
2367 CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x); 2384 CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x);
2368} 2385}
2369LISP_INLINE void 2386INLINE void
2370CHECK_ARRAY (Lisp_Object x, Lisp_Object Qxxxp) 2387CHECK_ARRAY (Lisp_Object x, Lisp_Object Qxxxp)
2371{ 2388{
2372 CHECK_TYPE (ARRAYP (x), Qxxxp, x); 2389 CHECK_TYPE (ARRAYP (x), Qxxxp, x);
2373} 2390}
2374LISP_INLINE void 2391INLINE void
2375CHECK_BUFFER (Lisp_Object x) 2392CHECK_BUFFER (Lisp_Object x)
2376{ 2393{
2377 CHECK_TYPE (BUFFERP (x), Qbufferp, x); 2394 CHECK_TYPE (BUFFERP (x), Qbufferp, x);
2378} 2395}
2379LISP_INLINE void 2396INLINE void
2380CHECK_WINDOW (Lisp_Object x) 2397CHECK_WINDOW (Lisp_Object x)
2381{ 2398{
2382 CHECK_TYPE (WINDOWP (x), Qwindowp, x); 2399 CHECK_TYPE (WINDOWP (x), Qwindowp, x);
2383} 2400}
2384LISP_INLINE void 2401INLINE void
2385CHECK_PROCESS (Lisp_Object x) 2402CHECK_PROCESS (Lisp_Object x)
2386{ 2403{
2387 CHECK_TYPE (PROCESSP (x), Qprocessp, x); 2404 CHECK_TYPE (PROCESSP (x), Qprocessp, x);
2388} 2405}
2389LISP_INLINE void 2406INLINE void
2390CHECK_NATNUM (Lisp_Object x) 2407CHECK_NATNUM (Lisp_Object x)
2391{ 2408{
2392 CHECK_TYPE (NATNUMP (x), Qwholenump, x); 2409 CHECK_TYPE (NATNUMP (x), Qwholenump, x);
@@ -2415,13 +2432,13 @@ CHECK_NATNUM (Lisp_Object x)
2415 do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \ 2432 do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \
2416 else CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x); } while (0) 2433 else CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x); } while (0)
2417 2434
2418LISP_INLINE double 2435INLINE double
2419XFLOATINT (Lisp_Object n) 2436XFLOATINT (Lisp_Object n)
2420{ 2437{
2421 return extract_float (n); 2438 return extract_float (n);
2422} 2439}
2423 2440
2424LISP_INLINE void 2441INLINE void
2425CHECK_NUMBER_OR_FLOAT (Lisp_Object x) 2442CHECK_NUMBER_OR_FLOAT (Lisp_Object x)
2426{ 2443{
2427 CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x); 2444 CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x);
@@ -2433,7 +2450,7 @@ CHECK_NUMBER_OR_FLOAT (Lisp_Object x)
2433 2450
2434/* Since we can't assign directly to the CAR or CDR fields of a cons 2451/* Since we can't assign directly to the CAR or CDR fields of a cons
2435 cell, use these when checking that those fields contain numbers. */ 2452 cell, use these when checking that those fields contain numbers. */
2436LISP_INLINE void 2453INLINE void
2437CHECK_NUMBER_CAR (Lisp_Object x) 2454CHECK_NUMBER_CAR (Lisp_Object x)
2438{ 2455{
2439 Lisp_Object tmp = XCAR (x); 2456 Lisp_Object tmp = XCAR (x);
@@ -2441,7 +2458,7 @@ CHECK_NUMBER_CAR (Lisp_Object x)
2441 XSETCAR (x, tmp); 2458 XSETCAR (x, tmp);
2442} 2459}
2443 2460
2444LISP_INLINE void 2461INLINE void
2445CHECK_NUMBER_CDR (Lisp_Object x) 2462CHECK_NUMBER_CDR (Lisp_Object x)
2446{ 2463{
2447 Lisp_Object tmp = XCDR (x); 2464 Lisp_Object tmp = XCDR (x);
@@ -2519,7 +2536,7 @@ CHECK_NUMBER_CDR (Lisp_Object x)
2519 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object) 2536 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
2520 2537
2521/* True if OBJ is a Lisp function. */ 2538/* True if OBJ is a Lisp function. */
2522LISP_INLINE bool 2539INLINE bool
2523FUNCTIONP (Lisp_Object obj) 2540FUNCTIONP (Lisp_Object obj)
2524{ 2541{
2525 return functionp (obj); 2542 return functionp (obj);
@@ -2686,7 +2703,7 @@ extern union specbinding *specpdl;
2686extern union specbinding *specpdl_ptr; 2703extern union specbinding *specpdl_ptr;
2687extern ptrdiff_t specpdl_size; 2704extern ptrdiff_t specpdl_size;
2688 2705
2689LISP_INLINE ptrdiff_t 2706INLINE ptrdiff_t
2690SPECPDL_INDEX (void) 2707SPECPDL_INDEX (void)
2691{ 2708{
2692 return specpdl_ptr - specpdl; 2709 return specpdl_ptr - specpdl;
@@ -3014,22 +3031,22 @@ struct frame;
3014 3031
3015/* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET. */ 3032/* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET. */
3016 3033
3017LISP_INLINE void 3034INLINE void
3018vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count) 3035vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count)
3019{ 3036{
3020 eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v)); 3037 eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v));
3021 memcpy (XVECTOR (v)->contents + offset, args, count * sizeof *args); 3038 memcpy (XVECTOR (v)->u.contents + offset, args, count * sizeof *args);
3022} 3039}
3023 3040
3024/* Functions to modify hash tables. */ 3041/* Functions to modify hash tables. */
3025 3042
3026LISP_INLINE void 3043INLINE void
3027set_hash_key_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) 3044set_hash_key_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
3028{ 3045{
3029 gc_aset (h->key_and_value, 2 * idx, val); 3046 gc_aset (h->key_and_value, 2 * idx, val);
3030} 3047}
3031 3048
3032LISP_INLINE void 3049INLINE void
3033set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) 3050set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
3034{ 3051{
3035 gc_aset (h->key_and_value, 2 * idx + 1, val); 3052 gc_aset (h->key_and_value, 2 * idx + 1, val);
@@ -3038,19 +3055,19 @@ set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
3038/* Use these functions to set Lisp_Object 3055/* Use these functions to set Lisp_Object
3039 or pointer slots of struct Lisp_Symbol. */ 3056 or pointer slots of struct Lisp_Symbol. */
3040 3057
3041LISP_INLINE void 3058INLINE void
3042set_symbol_function (Lisp_Object sym, Lisp_Object function) 3059set_symbol_function (Lisp_Object sym, Lisp_Object function)
3043{ 3060{
3044 XSYMBOL (sym)->function = function; 3061 XSYMBOL (sym)->function = function;
3045} 3062}
3046 3063
3047LISP_INLINE void 3064INLINE void
3048set_symbol_plist (Lisp_Object sym, Lisp_Object plist) 3065set_symbol_plist (Lisp_Object sym, Lisp_Object plist)
3049{ 3066{
3050 XSYMBOL (sym)->plist = plist; 3067 XSYMBOL (sym)->plist = plist;
3051} 3068}
3052 3069
3053LISP_INLINE void 3070INLINE void
3054set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next) 3071set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next)
3055{ 3072{
3056 XSYMBOL (sym)->next = next; 3073 XSYMBOL (sym)->next = next;
@@ -3058,7 +3075,7 @@ set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next)
3058 3075
3059/* Buffer-local (also frame-local) variable access functions. */ 3076/* Buffer-local (also frame-local) variable access functions. */
3060 3077
3061LISP_INLINE int 3078INLINE int
3062blv_found (struct Lisp_Buffer_Local_Value *blv) 3079blv_found (struct Lisp_Buffer_Local_Value *blv)
3063{ 3080{
3064 eassert (blv->found == !EQ (blv->defcell, blv->valcell)); 3081 eassert (blv->found == !EQ (blv->defcell, blv->valcell));
@@ -3067,7 +3084,7 @@ blv_found (struct Lisp_Buffer_Local_Value *blv)
3067 3084
3068/* Set overlay's property list. */ 3085/* Set overlay's property list. */
3069 3086
3070LISP_INLINE void 3087INLINE void
3071set_overlay_plist (Lisp_Object overlay, Lisp_Object plist) 3088set_overlay_plist (Lisp_Object overlay, Lisp_Object plist)
3072{ 3089{
3073 XOVERLAY (overlay)->plist = plist; 3090 XOVERLAY (overlay)->plist = plist;
@@ -3075,7 +3092,7 @@ set_overlay_plist (Lisp_Object overlay, Lisp_Object plist)
3075 3092
3076/* Get text properties of S. */ 3093/* Get text properties of S. */
3077 3094
3078LISP_INLINE INTERVAL 3095INLINE INTERVAL
3079string_intervals (Lisp_Object s) 3096string_intervals (Lisp_Object s)
3080{ 3097{
3081 return XSTRING (s)->intervals; 3098 return XSTRING (s)->intervals;
@@ -3083,7 +3100,7 @@ string_intervals (Lisp_Object s)
3083 3100
3084/* Set text properties of S to I. */ 3101/* Set text properties of S to I. */
3085 3102
3086LISP_INLINE void 3103INLINE void
3087set_string_intervals (Lisp_Object s, INTERVAL i) 3104set_string_intervals (Lisp_Object s, INTERVAL i)
3088{ 3105{
3089 XSTRING (s)->intervals = i; 3106 XSTRING (s)->intervals = i;
@@ -3092,12 +3109,12 @@ set_string_intervals (Lisp_Object s, INTERVAL i)
3092/* Set a Lisp slot in TABLE to VAL. Most code should use this instead 3109/* Set a Lisp slot in TABLE to VAL. Most code should use this instead
3093 of setting slots directly. */ 3110 of setting slots directly. */
3094 3111
3095LISP_INLINE void 3112INLINE void
3096set_char_table_defalt (Lisp_Object table, Lisp_Object val) 3113set_char_table_defalt (Lisp_Object table, Lisp_Object val)
3097{ 3114{
3098 XCHAR_TABLE (table)->defalt = val; 3115 XCHAR_TABLE (table)->defalt = val;
3099} 3116}
3100LISP_INLINE void 3117INLINE void
3101set_char_table_purpose (Lisp_Object table, Lisp_Object val) 3118set_char_table_purpose (Lisp_Object table, Lisp_Object val)
3102{ 3119{
3103 XCHAR_TABLE (table)->purpose = val; 3120 XCHAR_TABLE (table)->purpose = val;
@@ -3105,21 +3122,21 @@ set_char_table_purpose (Lisp_Object table, Lisp_Object val)
3105 3122
3106/* Set different slots in (sub)character tables. */ 3123/* Set different slots in (sub)character tables. */
3107 3124
3108LISP_INLINE void 3125INLINE void
3109set_char_table_extras (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) 3126set_char_table_extras (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
3110{ 3127{
3111 eassert (0 <= idx && idx < CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (table))); 3128 eassert (0 <= idx && idx < CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (table)));
3112 XCHAR_TABLE (table)->extras[idx] = val; 3129 XCHAR_TABLE (table)->extras[idx] = val;
3113} 3130}
3114 3131
3115LISP_INLINE void 3132INLINE void
3116set_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) 3133set_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
3117{ 3134{
3118 eassert (0 <= idx && idx < (1 << CHARTAB_SIZE_BITS_0)); 3135 eassert (0 <= idx && idx < (1 << CHARTAB_SIZE_BITS_0));
3119 XCHAR_TABLE (table)->contents[idx] = val; 3136 XCHAR_TABLE (table)->contents[idx] = val;
3120} 3137}
3121 3138
3122LISP_INLINE void 3139INLINE void
3123set_sub_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) 3140set_sub_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
3124{ 3141{
3125 XSUB_CHAR_TABLE (table)->contents[idx] = val; 3142 XSUB_CHAR_TABLE (table)->contents[idx] = val;
@@ -3160,6 +3177,16 @@ EXFUN (Fbyteorder, 0) ATTRIBUTE_CONST;
3160/* Defined in data.c. */ 3177/* Defined in data.c. */
3161extern Lisp_Object indirect_function (Lisp_Object); 3178extern Lisp_Object indirect_function (Lisp_Object);
3162extern Lisp_Object find_symbol_value (Lisp_Object); 3179extern Lisp_Object find_symbol_value (Lisp_Object);
3180enum Arith_Comparison {
3181 ARITH_EQUAL,
3182 ARITH_NOTEQUAL,
3183 ARITH_LESS,
3184 ARITH_GRTR,
3185 ARITH_LESS_OR_EQUAL,
3186 ARITH_GRTR_OR_EQUAL
3187};
3188extern Lisp_Object arithcompare (Lisp_Object num1, Lisp_Object num2,
3189 enum Arith_Comparison comparison);
3163 3190
3164/* Convert the integer I to an Emacs representation, either the integer 3191/* Convert the integer I to an Emacs representation, either the integer
3165 itself, or a cons of two or three integers, or if all else fails a float. 3192 itself, or a cons of two or three integers, or if all else fails a float.
@@ -3339,7 +3366,6 @@ extern void syms_of_insdel (void);
3339 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__)) 3366 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__))
3340_Noreturn void __executable_start (void); 3367_Noreturn void __executable_start (void);
3341#endif 3368#endif
3342extern Lisp_Object selected_frame;
3343extern Lisp_Object Vwindow_system; 3369extern Lisp_Object Vwindow_system;
3344extern Lisp_Object sit_for (Lisp_Object, bool, int); 3370extern Lisp_Object sit_for (Lisp_Object, bool, int);
3345extern void init_display (void); 3371extern void init_display (void);
@@ -3359,10 +3385,7 @@ extern Lisp_Object Qglyphless_char;
3359extern Lisp_Object QCdata, QCfile; 3385extern Lisp_Object QCdata, QCfile;
3360extern Lisp_Object QCmap; 3386extern Lisp_Object QCmap;
3361extern Lisp_Object Qrisky_local_variable; 3387extern Lisp_Object Qrisky_local_variable;
3362extern struct frame *last_glyphless_glyph_frame; 3388extern bool noninteractive_need_newline;
3363extern int last_glyphless_glyph_face_id;
3364extern int last_glyphless_glyph_merged_face_id;
3365extern int noninteractive_need_newline;
3366extern Lisp_Object echo_area_buffer[2]; 3389extern Lisp_Object echo_area_buffer[2];
3367extern void add_to_log (const char *, Lisp_Object, Lisp_Object); 3390extern void add_to_log (const char *, Lisp_Object, Lisp_Object);
3368extern void check_message_stack (void); 3391extern void check_message_stack (void);
@@ -3429,19 +3452,19 @@ extern Lisp_Object listn (enum constype, ptrdiff_t, Lisp_Object, ...);
3429 3452
3430/* Build a frequently used 2/3/4-integer lists. */ 3453/* Build a frequently used 2/3/4-integer lists. */
3431 3454
3432LISP_INLINE Lisp_Object 3455INLINE Lisp_Object
3433list2i (EMACS_INT x, EMACS_INT y) 3456list2i (EMACS_INT x, EMACS_INT y)
3434{ 3457{
3435 return list2 (make_number (x), make_number (y)); 3458 return list2 (make_number (x), make_number (y));
3436} 3459}
3437 3460
3438LISP_INLINE Lisp_Object 3461INLINE Lisp_Object
3439list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w) 3462list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)
3440{ 3463{
3441 return list3 (make_number (x), make_number (y), make_number (w)); 3464 return list3 (make_number (x), make_number (y), make_number (w));
3442} 3465}
3443 3466
3444LISP_INLINE Lisp_Object 3467INLINE Lisp_Object
3445list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMACS_INT h) 3468list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMACS_INT h)
3446{ 3469{
3447 return list4 (make_number (x), make_number (y), 3470 return list4 (make_number (x), make_number (y),
@@ -3456,7 +3479,7 @@ extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
3456 3479
3457/* Make unibyte string from C string when the length isn't known. */ 3480/* Make unibyte string from C string when the length isn't known. */
3458 3481
3459LISP_INLINE Lisp_Object 3482INLINE Lisp_Object
3460build_unibyte_string (const char *str) 3483build_unibyte_string (const char *str)
3461{ 3484{
3462 return make_unibyte_string (str, strlen (str)); 3485 return make_unibyte_string (str, strlen (str));
@@ -3474,7 +3497,7 @@ extern Lisp_Object make_pure_c_string (const char *, ptrdiff_t);
3474 3497
3475/* Make a string allocated in pure space, use STR as string data. */ 3498/* Make a string allocated in pure space, use STR as string data. */
3476 3499
3477LISP_INLINE Lisp_Object 3500INLINE Lisp_Object
3478build_pure_c_string (const char *str) 3501build_pure_c_string (const char *str)
3479{ 3502{
3480 return make_pure_c_string (str, strlen (str)); 3503 return make_pure_c_string (str, strlen (str));
@@ -3483,7 +3506,7 @@ build_pure_c_string (const char *str)
3483/* Make a string from the data at STR, treating it as multibyte if the 3506/* Make a string from the data at STR, treating it as multibyte if the
3484 data warrants. */ 3507 data warrants. */
3485 3508
3486LISP_INLINE Lisp_Object 3509INLINE Lisp_Object
3487build_string (const char *str) 3510build_string (const char *str)
3488{ 3511{
3489 return make_string (str, strlen (str)); 3512 return make_string (str, strlen (str));
@@ -3504,7 +3527,7 @@ extern struct Lisp_Vector *allocate_vector (EMACS_INT);
3504 ASET (v, 1, Ffunction_can_gc ()); 3527 ASET (v, 1, Ffunction_can_gc ());
3505 ASET (v, 2, obj1); */ 3528 ASET (v, 2, obj1); */
3506 3529
3507LISP_INLINE Lisp_Object 3530INLINE Lisp_Object
3508make_uninit_vector (ptrdiff_t size) 3531make_uninit_vector (ptrdiff_t size)
3509{ 3532{
3510 Lisp_Object v; 3533 Lisp_Object v;
@@ -3551,7 +3574,7 @@ extern int valid_lisp_object_p (Lisp_Object);
3551#ifdef GC_CHECK_CONS_LIST 3574#ifdef GC_CHECK_CONS_LIST
3552extern void check_cons_list (void); 3575extern void check_cons_list (void);
3553#else 3576#else
3554LISP_INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); } 3577INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); }
3555#endif 3578#endif
3556 3579
3557#ifdef REL_ALLOC 3580#ifdef REL_ALLOC
@@ -3619,7 +3642,7 @@ extern Lisp_Object check_obarray (Lisp_Object);
3619extern Lisp_Object intern_1 (const char *, ptrdiff_t); 3642extern Lisp_Object intern_1 (const char *, ptrdiff_t);
3620extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t); 3643extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t);
3621extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t); 3644extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t);
3622LISP_INLINE void 3645INLINE void
3623LOADHIST_ATTACH (Lisp_Object x) 3646LOADHIST_ATTACH (Lisp_Object x)
3624{ 3647{
3625 if (initialized) 3648 if (initialized)
@@ -3635,13 +3658,13 @@ extern void init_obarray (void);
3635extern void init_lread (void); 3658extern void init_lread (void);
3636extern void syms_of_lread (void); 3659extern void syms_of_lread (void);
3637 3660
3638LISP_INLINE Lisp_Object 3661INLINE Lisp_Object
3639intern (const char *str) 3662intern (const char *str)
3640{ 3663{
3641 return intern_1 (str, strlen (str)); 3664 return intern_1 (str, strlen (str));
3642} 3665}
3643 3666
3644LISP_INLINE Lisp_Object 3667INLINE Lisp_Object
3645intern_c_string (const char *str) 3668intern_c_string (const char *str)
3646{ 3669{
3647 return intern_c_string_1 (str, strlen (str)); 3670 return intern_c_string_1 (str, strlen (str));
@@ -3920,9 +3943,9 @@ void fixup_locale (void);
3920void synchronize_system_messages_locale (void); 3943void synchronize_system_messages_locale (void);
3921void synchronize_system_time_locale (void); 3944void synchronize_system_time_locale (void);
3922#else 3945#else
3923LISP_INLINE void fixup_locale (void) {} 3946INLINE void fixup_locale (void) {}
3924LISP_INLINE void synchronize_system_messages_locale (void) {} 3947INLINE void synchronize_system_messages_locale (void) {}
3925LISP_INLINE void synchronize_system_time_locale (void) {} 3948INLINE void synchronize_system_time_locale (void) {}
3926#endif 3949#endif
3927extern void shut_down_emacs (int, Lisp_Object); 3950extern void shut_down_emacs (int, Lisp_Object);
3928 3951
@@ -4301,7 +4324,7 @@ extern void *record_xmalloc (size_t);
4301 4324
4302/* Check whether it's time for GC, and run it if so. */ 4325/* Check whether it's time for GC, and run it if so. */
4303 4326
4304LISP_INLINE void 4327INLINE void
4305maybe_gc (void) 4328maybe_gc (void)
4306{ 4329{
4307 if ((consing_since_gc > gc_cons_threshold 4330 if ((consing_since_gc > gc_cons_threshold
@@ -4311,7 +4334,7 @@ maybe_gc (void)
4311 Fgarbage_collect (); 4334 Fgarbage_collect ();
4312} 4335}
4313 4336
4314LISP_INLINE bool 4337INLINE bool
4315functionp (Lisp_Object object) 4338functionp (Lisp_Object object)
4316{ 4339{
4317 if (SYMBOLP (object) && !NILP (Ffboundp (object))) 4340 if (SYMBOLP (object) && !NILP (Ffboundp (object)))
@@ -4343,6 +4366,40 @@ functionp (Lisp_Object object)
4343 return 0; 4366 return 0;
4344} 4367}
4345 4368
4369INLINE uint16_t
4370swap16 (uint16_t val)
4371{
4372 return (val << 8) | (val & 0xFF);
4373}
4374
4375INLINE uint32_t
4376swap32 (uint32_t val)
4377{
4378 uint32_t low = swap16 (val & 0xFFFF);
4379 uint32_t high = swap16 (val >> 16);
4380 return (low << 16) | high;
4381}
4382
4383#ifdef UINT64_MAX
4384INLINE uint64_t
4385swap64 (uint64_t val)
4386{
4387 uint64_t low = swap32 (val & 0xFFFFFFFF);
4388 uint64_t high = swap32 (val >> 32);
4389 return (low << 32) | high;
4390}
4391#endif
4392
4393#if ((SIZE_MAX >> 31) >> 1) & 1
4394# define BITS_PER_SIZE_T 64
4395#else
4396# define BITS_PER_SIZE_T 32
4397#endif
4398
4399/* Round x to the next multiple of y. Does not overflow. Evaluates
4400 arguments repeatedly. */
4401#define ROUNDUP(x,y) ((y)*((x)/(y) + ((x)%(y)!=0)))
4402
4346INLINE_HEADER_END 4403INLINE_HEADER_END
4347 4404
4348#endif /* EMACS_LISP_H */ 4405#endif /* EMACS_LISP_H */
diff --git a/src/lisp.mk b/src/lisp.mk
index a9a661ea3a8..c12deebd893 100644
--- a/src/lisp.mk
+++ b/src/lisp.mk
@@ -152,6 +152,7 @@ lisp = \
152 $(lispsource)/term/w32-win.elc \ 152 $(lispsource)/term/w32-win.elc \
153 $(lispsource)/ls-lisp.elc \ 153 $(lispsource)/ls-lisp.elc \
154 $(lispsource)/disp-table.elc \ 154 $(lispsource)/disp-table.elc \
155 $(lispsource)/w32-common-fns.elc \
155 $(lispsource)/dos-w32.elc \ 156 $(lispsource)/dos-w32.elc \
156 $(lispsource)/w32-fns.elc \ 157 $(lispsource)/w32-fns.elc \
157 $(lispsource)/dos-fns.elc \ 158 $(lispsource)/dos-fns.elc \
diff --git a/src/lread.c b/src/lread.c
index 9518631ba6d..fe2b92a34b3 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2597,7 +2597,10 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
2597 build them using function calls. */ 2597 build them using function calls. */
2598 Lisp_Object tmp; 2598 Lisp_Object tmp;
2599 tmp = read_vector (readcharfun, 1); 2599 tmp = read_vector (readcharfun, 1);
2600 make_byte_code (XVECTOR (tmp)); 2600 struct Lisp_Vector* vec = XVECTOR (tmp);
2601 if (vec->header.size==0)
2602 invalid_syntax ("Empty byte-code object");
2603 make_byte_code (vec);
2601 return tmp; 2604 return tmp;
2602 } 2605 }
2603 if (c == '(') 2606 if (c == '(')
@@ -3459,7 +3462,7 @@ read_vector (Lisp_Object readcharfun, bool bytecodeflag)
3459 vector = Fmake_vector (len, Qnil); 3462 vector = Fmake_vector (len, Qnil);
3460 3463
3461 size = ASIZE (vector); 3464 size = ASIZE (vector);
3462 ptr = XVECTOR (vector)->contents; 3465 ptr = XVECTOR (vector)->u.contents;
3463 for (i = 0; i < size; i++) 3466 for (i = 0; i < size; i++)
3464 { 3467 {
3465 item = Fcar (tem); 3468 item = Fcar (tem);
diff --git a/src/macfont.h b/src/macfont.h
new file mode 100644
index 00000000000..141d60bfb0a
--- /dev/null
+++ b/src/macfont.h
@@ -0,0 +1,144 @@
1/* Interface definition for Mac OSX Core text font backend.
2 Copyright (C) 2009-2013 Free Software Foundation, Inc.
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
18
19Original author: YAMAMOTO Mitsuharu
20*/
21
22/* Structure used by Mac `shape' functions for storing layout
23 information for each glyph. */
24struct mac_glyph_layout
25{
26 /* Range of indices of the characters composed into the group of
27 glyphs that share the cursor position with this glyph. The
28 members `location' and `length' are in UTF-16 indices. */
29 CFRange comp_range;
30
31 /* UTF-16 index in the source string for the first character
32 associated with this glyph. */
33 CFIndex string_index;
34
35 /* Horizontal and vertical adjustments of glyph position. The
36 coordinate space is that of Core Text. So, the `baseline_delta'
37 value is negative if the glyph should be placed below the
38 baseline. */
39 CGFloat advance_delta, baseline_delta;
40
41 /* Typographical width of the glyph. */
42 CGFloat advance;
43
44 /* Glyph ID of the glyph. */
45 CGGlyph glyph_id;
46};
47
48typedef CTFontDescriptorRef FontDescriptorRef;
49typedef CTFontRef FontRef;
50typedef CTFontSymbolicTraits FontSymbolicTraits;
51typedef CTCharacterCollection CharacterCollection;
52
53#define MAC_FONT_NAME_ATTRIBUTE kCTFontNameAttribute
54#define MAC_FONT_FAMILY_NAME_ATTRIBUTE kCTFontFamilyNameAttribute
55#define MAC_FONT_TRAITS_ATTRIBUTE kCTFontTraitsAttribute
56#define MAC_FONT_SIZE_ATTRIBUTE kCTFontSizeAttribute
57#define MAC_FONT_CASCADE_LIST_ATTRIBUTE kCTFontCascadeListAttribute
58#define MAC_FONT_CHARACTER_SET_ATTRIBUTE kCTFontCharacterSetAttribute
59#define MAC_FONT_LANGUAGES_ATTRIBUTE kCTFontLanguagesAttribute
60#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
61#define MAC_FONT_FORMAT_ATTRIBUTE kCTFontFormatAttribute
62#else
63#define MAC_FONT_FORMAT_ATTRIBUTE (CFSTR ("NSCTFontFormatAttribute"))
64#endif
65#define MAC_FONT_SYMBOLIC_TRAIT kCTFontSymbolicTrait
66#define MAC_FONT_WEIGHT_TRAIT kCTFontWeightTrait
67#define MAC_FONT_WIDTH_TRAIT kCTFontWidthTrait
68#define MAC_FONT_SLANT_TRAIT kCTFontSlantTrait
69
70enum {
71 MAC_FONT_TRAIT_ITALIC = kCTFontItalicTrait,
72 MAC_FONT_TRAIT_BOLD = kCTFontBoldTrait,
73 MAC_FONT_TRAIT_MONO_SPACE = kCTFontMonoSpaceTrait,
74#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
75 MAC_FONT_TRAIT_COLOR_GLYPHS = kCTFontColorGlyphsTrait
76#else
77 MAC_FONT_TRAIT_COLOR_GLYPHS = (1 << 13)
78#endif
79};
80
81enum {
82#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
83 MAC_FONT_FORMAT_BITMAP = kCTFontFormatBitmap
84#else
85 MAC_FONT_FORMAT_BITMAP = 5
86#endif
87};
88
89enum {
90 MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING = kCTIdentityMappingCharacterCollection,
91 MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1 = kCTAdobeJapan1CharacterCollection
92};
93
94#define mac_font_descriptor_create_with_attributes \
95 CTFontDescriptorCreateWithAttributes
96#define mac_font_descriptor_create_matching_font_descriptors \
97 CTFontDescriptorCreateMatchingFontDescriptors
98#define mac_font_descriptor_create_matching_font_descriptor \
99 CTFontDescriptorCreateMatchingFontDescriptor
100#define mac_font_descriptor_copy_attribute CTFontDescriptorCopyAttribute
101#define mac_font_descriptor_supports_languages \
102 mac_ctfont_descriptor_supports_languages
103#define mac_font_create_with_name(name, size) \
104 CTFontCreateWithName (name, size, NULL)
105#define mac_font_get_size CTFontGetSize
106#define mac_font_copy_family_name CTFontCopyFamilyName
107#define mac_font_copy_character_set CTFontCopyCharacterSet
108#define mac_font_get_glyphs_for_characters CTFontGetGlyphsForCharacters
109#define mac_font_get_ascent CTFontGetAscent
110#define mac_font_get_descent CTFontGetDescent
111#define mac_font_get_leading CTFontGetLeading
112#define mac_font_get_underline_position CTFontGetUnderlinePosition
113#define mac_font_get_underline_thickness CTFontGetUnderlineThickness
114#define mac_font_copy_graphics_font(font) CTFontCopyGraphicsFont (font, NULL)
115#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
116#define mac_font_copy_non_synthetic_table(font, table) \
117 CTFontCopyTable (font, table, kCTFontTableOptionNoOptions)
118#else
119#define mac_font_copy_non_synthetic_table(font, table) \
120 CTFontCopyTable (font, table, kCTFontTableOptionExcludeSynthetic)
121#endif
122
123#define mac_font_create_preferred_family_for_attributes \
124 mac_ctfont_create_preferred_family_for_attributes
125#define mac_font_get_advance_width_for_glyph \
126 mac_ctfont_get_advance_width_for_glyph
127#define mac_font_get_bounding_rect_for_glyph \
128 mac_ctfont_get_bounding_rect_for_glyph
129#define mac_font_create_available_families mac_ctfont_create_available_families
130#define mac_font_shape mac_ctfont_shape
131#if USE_CT_GLYPH_INFO
132#define mac_font_get_glyph_for_cid mac_ctfont_get_glyph_for_cid
133#endif
134
135#define mac_nsctfont_copy_font_descriptor CTFontCopyFontDescriptor
136
137#define MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE \
138 (CFSTR ("MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE"))
139
140typedef const struct _EmacsScreenFont *ScreenFontRef; /* opaque */
141
142extern void mac_register_font_driver (struct frame *f);
143extern void *macfont_get_nsctfont (struct font *font);
144
diff --git a/src/macfont.m b/src/macfont.m
new file mode 100644
index 00000000000..ab5029743ef
--- /dev/null
+++ b/src/macfont.m
@@ -0,0 +1,3858 @@
1/* Font driver on Mac OSX Core text.
2 Copyright (C) 2009-2013 Free Software Foundation, Inc.
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
18
19Original author: YAMAMOTO Mitsuharu
20*/
21
22#include <config.h>
23
24#include "lisp.h"
25#include "dispextern.h"
26#include "frame.h"
27#include "blockinput.h"
28#include "character.h"
29#include "charset.h"
30#include "composite.h"
31#include "fontset.h"
32#include "font.h"
33#include "nsgui.h"
34#include "nsterm.h"
35#include "macfont.h"
36#include "macuvs.h"
37
38#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
39
40#include <libkern/OSByteOrder.h>
41
42static struct font_driver macfont_driver;
43
44/* Core Text, for Mac OS X 10.5 and later. */
45static Lisp_Object Qmac_ct;
46
47static double mac_ctfont_get_advance_width_for_glyph (CTFontRef, CGGlyph);
48static CGRect mac_ctfont_get_bounding_rect_for_glyph (CTFontRef, CGGlyph);
49static CFArrayRef mac_ctfont_create_available_families (void);
50static Boolean mac_ctfont_equal_in_postscript_name (CTFontRef, CTFontRef);
51static CTLineRef mac_ctfont_create_line_with_string_and_font (CFStringRef,
52 CTFontRef);
53static CFComparisonResult mac_font_family_compare (const void *,
54 const void *, void *);
55static Boolean mac_ctfont_descriptor_supports_languages (CTFontDescriptorRef,
56 CFArrayRef);
57static CFStringRef mac_ctfont_create_preferred_family_for_attributes (CFDictionaryRef);
58static CFIndex mac_ctfont_shape (CTFontRef, CFStringRef,
59 struct mac_glyph_layout *, CFIndex);
60#if USE_CT_GLYPH_INFO
61static CGGlyph mac_ctfont_get_glyph_for_cid (CTFontRef,
62 CTCharacterCollection,
63 CGFontIndex);
64#endif
65
66/* The font property key specifying the font design destination. The
67 value is an unsigned integer code: 0 for WYSIWIG, and 1 for Video
68 text. (See the documentation of X Logical Font Description
69 Conventions.) In the Mac font driver, 1 means the screen font is
70 used for calculating some glyph metrics. You can see the
71 difference with Monaco 8pt or 9pt, for example. */
72static Lisp_Object QCdestination;
73
74/* The boolean-valued font property key specifying the use of
75 leading. */
76static Lisp_Object QCminspace;
77
78struct macfont_metrics;
79
80/* The actual structure for Mac font that can be casted to struct font. */
81
82struct macfont_info
83{
84 struct font font;
85 FontRef macfont;
86 CGFontRef cgfont;
87 ScreenFontRef screen_font;
88 struct macfont_cache *cache;
89 struct macfont_metrics **metrics;
90 short metrics_nrows;
91 unsigned synthetic_italic_p : 1;
92 unsigned synthetic_bold_p : 1;
93 unsigned spacing : 2;
94 unsigned antialias : 2;
95 unsigned color_bitmap_p : 1;
96};
97
98/* Values for the `spacing' member in `struct macfont_info'. */
99
100enum
101 {
102 MACFONT_SPACING_PROPORTIONAL,
103 MACFONT_SPACING_MONO,
104 MACFONT_SPACING_SYNTHETIC_MONO,
105 };
106
107/* Values for the `antialias' member in `struct macfont_info'. */
108
109enum
110 {
111 MACFONT_ANTIALIAS_DEFAULT,
112 MACFONT_ANTIALIAS_OFF,
113 MACFONT_ANTIALIAS_ON,
114 };
115
116enum {FONT_SLANT_SYNTHETIC_ITALIC = 200}; /* FC_SLANT_ITALIC + 100 */
117enum {FONT_WEIGHT_SYNTHETIC_BOLD = 200}; /* FC_WEIGHT_BOLD */
118enum {FONT_SPACING_SYNTHETIC_MONO = FONT_SPACING_MONO};
119
120static const CGAffineTransform synthetic_italic_atfm = {1, 0, 0.25, 1, 0, 0};
121static const CGFloat synthetic_bold_factor = 0.024;
122
123static Boolean cfnumber_get_font_symbolic_traits_value (CFNumberRef,
124 FontSymbolicTraits *);
125static void macfont_store_descriptor_attributes (FontDescriptorRef,
126 Lisp_Object);
127static Lisp_Object macfont_descriptor_entity (FontDescriptorRef,
128 Lisp_Object,
129 FontSymbolicTraits);
130static CFStringRef macfont_create_family_with_symbol (Lisp_Object);
131static int macfont_glyph_extents (struct font *, CGGlyph,
132 struct font_metrics *, CGFloat *, int);
133static CFMutableDictionaryRef macfont_create_attributes_with_spec (Lisp_Object);
134static Boolean macfont_supports_charset_and_languages_p (FontDescriptorRef,
135 CFCharacterSetRef,
136 Lisp_Object,
137 CFArrayRef);
138static CFIndex macfont_closest_traits_index (CFArrayRef,
139 FontSymbolicTraits);
140static CFDataRef mac_font_copy_uvs_table (FontRef);
141static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char,
142 const UTF32Char [],
143 CGGlyph [], CFIndex);
144
145/* From CFData to a lisp string. Always returns a unibyte string. */
146
147static Lisp_Object
148cfdata_to_lisp (CFDataRef data)
149{
150 CFIndex len = CFDataGetLength (data);
151 Lisp_Object result = make_uninit_string (len);
152
153 CFDataGetBytes (data, CFRangeMake (0, len), SDATA (result));
154
155 return result;
156}
157
158
159
160/* From CFString to a lisp string. Returns a unibyte string
161 containing a UTF-8 byte sequence. */
162
163static Lisp_Object
164cfstring_to_lisp_nodecode (CFStringRef string)
165{
166 Lisp_Object result = Qnil;
167 CFDataRef data;
168 const char *s = CFStringGetCStringPtr (string, kCFStringEncodingUTF8);
169
170 if (s)
171 {
172 CFIndex i, length = CFStringGetLength (string);
173
174 for (i = 0; i < length; i++)
175 if (CFStringGetCharacterAtIndex (string, i) == 0)
176 break;
177
178 if (i == length)
179 return make_unibyte_string (s, strlen (s));
180 }
181
182 data = CFStringCreateExternalRepresentation (NULL, string,
183 kCFStringEncodingUTF8, '?');
184 if (data)
185 {
186 result = cfdata_to_lisp (data);
187 CFRelease (data);
188 }
189
190 return result;
191}
192
193/* Lisp string containing a UTF-8 byte sequence to CFString. Unlike
194 cfstring_create_with_utf8_cstring, this function preserves NUL
195 characters. */
196
197static CFStringRef
198cfstring_create_with_string_noencode (Lisp_Object s)
199{
200 CFStringRef string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s),
201 kCFStringEncodingUTF8, false);
202
203 if (string == NULL)
204 /* Failed to interpret as UTF 8. Fall back on Mac Roman. */
205 string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s),
206 kCFStringEncodingMacRoman, false);
207
208 return string;
209}
210
211static CGFloat
212mac_screen_font_get_advance_width_for_glyph (ScreenFontRef font, CGGlyph glyph)
213{
214 NSSize advancement = [(NSFont *)font advancementForGlyph:glyph];
215
216 return advancement.width;
217}
218
219static CGGlyph
220mac_font_get_glyph_for_cid (FontRef font, CharacterCollection collection,
221 CGFontIndex cid)
222{
223#if USE_CT_GLYPH_INFO
224 return mac_ctfont_get_glyph_for_cid ((CTFontRef) font, collection, cid);
225#else
226 {
227 CGGlyph result = kCGFontIndexInvalid;
228 NSFont *nsFont = (NSFont *) font;
229 unichar characters[] = {0xfffd};
230 NSString *string =
231 [NSString stringWithCharacters:characters
232 length:(sizeof (characters)
233 / sizeof (characters[0]))];
234 NSGlyphInfo *glyphInfo =
235 [NSGlyphInfo glyphInfoWithCharacterIdentifier:cid
236 collection:collection
237 baseString:string];
238 NSDictionary *attributes =
239 [NSDictionary dictionaryWithObjectsAndKeys:nsFont,NSFontAttributeName,
240 glyphInfo,NSGlyphInfoAttributeName,nil];
241 NSTextStorage *textStorage =
242 [[NSTextStorage alloc] initWithString:string
243 attributes:attributes];
244 NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
245 NSTextContainer *textContainer = [[NSTextContainer alloc] init];
246 NSFont *fontInTextStorage;
247
248 [layoutManager addTextContainer:textContainer];
249 [textContainer release];
250 [textStorage addLayoutManager:layoutManager];
251 [layoutManager release];
252
253 /* Force layout. */
254 (void) [layoutManager glyphRangeForTextContainer:textContainer];
255
256 fontInTextStorage = [textStorage attribute:NSFontAttributeName atIndex:0
257 effectiveRange:NULL];
258 if (fontInTextStorage == nsFont
259 || [[fontInTextStorage fontName] isEqualToString:[nsFont fontName]])
260 {
261 NSGlyph glyph = [layoutManager glyphAtIndex:0];
262
263 if (glyph < [nsFont numberOfGlyphs])
264 result = glyph;
265 }
266
267 [textStorage release];
268
269 return result;
270 }
271}
272#endif
273
274static ScreenFontRef
275mac_screen_font_create_with_name (CFStringRef name, CGFloat size)
276{
277 NSFont *result, *font;
278
279 font = [NSFont fontWithName:((NSString *) name) size:size];
280 result = [font screenFont];
281
282 return (ScreenFontRef)[result retain];
283}
284
285
286static Boolean
287mac_screen_font_get_metrics (ScreenFontRef font, CGFloat *ascent,
288 CGFloat *descent, CGFloat *leading)
289{
290 NSFont *nsFont = [(NSFont *)font printerFont];
291 NSTextStorage *textStorage;
292 NSLayoutManager *layoutManager;
293 NSTextContainer *textContainer;
294 NSRect usedRect;
295 NSPoint spaceLocation;
296 CGFloat descender;
297
298 textStorage = [[NSTextStorage alloc] initWithString:@" "];
299 layoutManager = [[NSLayoutManager alloc] init];
300 textContainer = [[NSTextContainer alloc] init];
301
302 [textStorage setFont:nsFont];
303 [textContainer setLineFragmentPadding:0];
304 [layoutManager setUsesScreenFonts:YES];
305
306 [layoutManager addTextContainer:textContainer];
307 [textContainer release];
308 [textStorage addLayoutManager:layoutManager];
309 [layoutManager release];
310
311 if (!(textStorage && layoutManager && textContainer))
312 {
313 [textStorage release];
314
315 return false;
316 }
317
318 usedRect = [layoutManager lineFragmentUsedRectForGlyphAtIndex:0
319 effectiveRange:NULL];
320 spaceLocation = [layoutManager locationForGlyphAtIndex:0];
321 [textStorage release];
322
323 *ascent = spaceLocation.y;
324 *descent = NSHeight (usedRect) - spaceLocation.y;
325 *leading = 0;
326 descender = [nsFont descender];
327 if (- descender < *descent)
328 {
329 *leading = *descent + descender;
330 *descent = - descender;
331 }
332
333 return true;
334}
335
336static CFIndex
337mac_font_shape_1 (NSFont *font, NSString *string,
338 struct mac_glyph_layout *glyph_layouts, CFIndex glyph_len,
339 BOOL screen_font_p)
340{
341 NSUInteger i;
342 CFIndex result = 0;
343 NSTextStorage *textStorage;
344 NSLayoutManager *layoutManager;
345 NSTextContainer *textContainer;
346 NSUInteger stringLength;
347 NSPoint spaceLocation;
348 NSUInteger used, numberOfGlyphs;
349
350 textStorage = [[NSTextStorage alloc] initWithString:string];
351 layoutManager = [[NSLayoutManager alloc] init];
352 textContainer = [[NSTextContainer alloc] init];
353
354 /* Append a trailing space to measure baseline position. */
355 [textStorage appendAttributedString:([[[NSAttributedString alloc]
356 initWithString:@" "] autorelease])];
357 [textStorage setFont:font];
358 [textContainer setLineFragmentPadding:0];
359 [layoutManager setUsesScreenFonts:screen_font_p];
360
361 [layoutManager addTextContainer:textContainer];
362 [textContainer release];
363 [textStorage addLayoutManager:layoutManager];
364 [layoutManager release];
365
366 if (!(textStorage && layoutManager && textContainer))
367 {
368 [textStorage release];
369
370 return 0;
371 }
372
373 stringLength = [string length];
374
375 /* Force layout. */
376 (void) [layoutManager glyphRangeForTextContainer:textContainer];
377
378 spaceLocation = [layoutManager locationForGlyphAtIndex:stringLength];
379
380 /* Remove the appended trailing space because otherwise it may
381 generate a wrong result for a right-to-left text. */
382 [textStorage beginEditing];
383 [textStorage deleteCharactersInRange:(NSMakeRange (stringLength, 1))];
384 [textStorage endEditing];
385 (void) [layoutManager glyphRangeForTextContainer:textContainer];
386
387 i = 0;
388 while (i < stringLength)
389 {
390 NSRange range;
391 NSFont *fontInTextStorage =
392 [textStorage attribute:NSFontAttributeName atIndex:i
393 longestEffectiveRange:&range
394 inRange:(NSMakeRange (0, stringLength))];
395
396 if (!(fontInTextStorage == font
397 || [[fontInTextStorage fontName] isEqualToString:[font fontName]]))
398 break;
399 i = NSMaxRange (range);
400 }
401 if (i < stringLength)
402 /* Make the test `used <= glyph_len' below fail if textStorage
403 contained some fonts other than the specified one. */
404 used = glyph_len + 1;
405 else
406 {
407 NSRange range = NSMakeRange (0, stringLength);
408
409 range = [layoutManager glyphRangeForCharacterRange:range
410 actualCharacterRange:NULL];
411 numberOfGlyphs = NSMaxRange (range);
412 used = numberOfGlyphs;
413 for (i = 0; i < numberOfGlyphs; i++)
414 if ([layoutManager notShownAttributeForGlyphAtIndex:i])
415 used--;
416 }
417
418 if (0 < used && used <= glyph_len)
419 {
420 NSUInteger glyphIndex, prevGlyphIndex;
421 unsigned char bidiLevel;
422 NSUInteger *permutation;
423 NSRange compRange, range;
424 CGFloat totalAdvance;
425
426 glyphIndex = 0;
427 while ([layoutManager notShownAttributeForGlyphAtIndex:glyphIndex])
428 glyphIndex++;
429
430 /* For now we assume the direction is not changed within the
431 string. */
432 [layoutManager getGlyphsInRange:(NSMakeRange (glyphIndex, 1))
433 glyphs:NULL characterIndexes:NULL
434 glyphInscriptions:NULL elasticBits:NULL
435 bidiLevels:&bidiLevel];
436 if (bidiLevel & 1)
437 permutation = xmalloc (sizeof (NSUInteger) * used);
438 else
439 permutation = NULL;
440
441#define RIGHT_TO_LEFT_P permutation
442
443 /* Fill the `comp_range' member of struct mac_glyph_layout, and
444 setup a permutation for right-to-left text. */
445 compRange = NSMakeRange (0, 0);
446 for (range = NSMakeRange (0, 0); NSMaxRange (range) < used;
447 range.length++)
448 {
449 struct mac_glyph_layout *gl = glyph_layouts + NSMaxRange (range);
450 NSUInteger characterIndex =
451 [layoutManager characterIndexForGlyphAtIndex:glyphIndex];
452
453 gl->string_index = characterIndex;
454
455 if (characterIndex >= NSMaxRange (compRange))
456 {
457 compRange.location = NSMaxRange (compRange);
458 do
459 {
460 NSRange characterRange =
461 [string
462 rangeOfComposedCharacterSequenceAtIndex:characterIndex];
463
464 compRange.length =
465 NSMaxRange (characterRange) - compRange.location;
466 [layoutManager glyphRangeForCharacterRange:compRange
467 actualCharacterRange:&characterRange];
468 characterIndex = NSMaxRange (characterRange) - 1;
469 }
470 while (characterIndex >= NSMaxRange (compRange));
471
472 if (RIGHT_TO_LEFT_P)
473 for (i = 0; i < range.length; i++)
474 permutation[range.location + i] = NSMaxRange (range) - i - 1;
475
476 range = NSMakeRange (NSMaxRange (range), 0);
477 }
478
479 gl->comp_range.location = compRange.location;
480 gl->comp_range.length = compRange.length;
481
482 while (++glyphIndex < numberOfGlyphs)
483 if (![layoutManager notShownAttributeForGlyphAtIndex:glyphIndex])
484 break;
485 }
486 if (RIGHT_TO_LEFT_P)
487 for (i = 0; i < range.length; i++)
488 permutation[range.location + i] = NSMaxRange (range) - i - 1;
489
490 /* Then fill the remaining members. */
491 glyphIndex = prevGlyphIndex = 0;
492 while ([layoutManager notShownAttributeForGlyphAtIndex:glyphIndex])
493 glyphIndex++;
494
495 if (!RIGHT_TO_LEFT_P)
496 totalAdvance = 0;
497 else
498 {
499 NSUInteger nrects;
500 NSRect *glyphRects =
501 [layoutManager
502 rectArrayForGlyphRange:(NSMakeRange (0, numberOfGlyphs))
503 withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0))
504 inTextContainer:textContainer rectCount:&nrects];
505
506 totalAdvance = NSMaxX (glyphRects[0]);
507 }
508
509 for (i = 0; i < used; i++)
510 {
511 struct mac_glyph_layout *gl;
512 NSPoint location;
513 NSUInteger nextGlyphIndex;
514 NSRange glyphRange;
515 NSRect *glyphRects;
516 NSUInteger nrects;
517
518 if (!RIGHT_TO_LEFT_P)
519 gl = glyph_layouts + i;
520 else
521 {
522 NSUInteger dest = permutation[i];
523
524 gl = glyph_layouts + dest;
525 if (i < dest)
526 {
527 CFIndex tmp = gl->string_index;
528
529 gl->string_index = glyph_layouts[i].string_index;
530 glyph_layouts[i].string_index = tmp;
531 }
532 }
533 gl->glyph_id = [layoutManager glyphAtIndex:glyphIndex];
534
535 location = [layoutManager locationForGlyphAtIndex:glyphIndex];
536 gl->baseline_delta = spaceLocation.y - location.y;
537
538 for (nextGlyphIndex = glyphIndex + 1; nextGlyphIndex < numberOfGlyphs;
539 nextGlyphIndex++)
540 if (![layoutManager
541 notShownAttributeForGlyphAtIndex:nextGlyphIndex])
542 break;
543
544 if (!RIGHT_TO_LEFT_P)
545 {
546 CGFloat maxX;
547
548 if (prevGlyphIndex == 0)
549 glyphRange = NSMakeRange (0, nextGlyphIndex);
550 else
551 glyphRange = NSMakeRange (glyphIndex,
552 nextGlyphIndex - glyphIndex);
553 glyphRects =
554 [layoutManager
555 rectArrayForGlyphRange:glyphRange
556 withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0))
557 inTextContainer:textContainer rectCount:&nrects];
558 maxX = max (NSMaxX (glyphRects[0]), totalAdvance);
559 gl->advance_delta = location.x - totalAdvance;
560 gl->advance = maxX - totalAdvance;
561 totalAdvance = maxX;
562 }
563 else
564 {
565 CGFloat minX;
566
567 if (nextGlyphIndex == numberOfGlyphs)
568 glyphRange = NSMakeRange (prevGlyphIndex,
569 numberOfGlyphs - prevGlyphIndex);
570 else
571 glyphRange = NSMakeRange (prevGlyphIndex,
572 glyphIndex + 1 - prevGlyphIndex);
573 glyphRects =
574 [layoutManager
575 rectArrayForGlyphRange:glyphRange
576 withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0))
577 inTextContainer:textContainer rectCount:&nrects];
578 minX = min (NSMinX (glyphRects[0]), totalAdvance);
579 gl->advance = totalAdvance - minX;
580 totalAdvance = minX;
581 gl->advance_delta = location.x - totalAdvance;
582 }
583
584 prevGlyphIndex = glyphIndex + 1;
585 glyphIndex = nextGlyphIndex;
586 }
587
588 if (RIGHT_TO_LEFT_P)
589 xfree (permutation);
590
591#undef RIGHT_TO_LEFT_P
592
593 result = used;
594 }
595 [textStorage release];
596
597 return result;
598}
599
600static CFIndex
601mac_screen_font_shape (ScreenFontRef font, CFStringRef string,
602 struct mac_glyph_layout *glyph_layouts,
603 CFIndex glyph_len)
604{
605 return mac_font_shape_1 ([(NSFont *)font printerFont],
606 (NSString *) string,
607 glyph_layouts, glyph_len, YES);
608}
609
610static CGColorRef
611get_cgcolor(unsigned long idx, struct frame *f)
612{
613 NSColor *nsColor = ns_lookup_indexed_color (idx, f);
614 [nsColor set];
615 CGColorSpaceRef colorSpace = [[nsColor colorSpace] CGColorSpace];
616 NSInteger noc = [nsColor numberOfComponents];
617 CGFloat *components = xmalloc (sizeof(CGFloat)*(1+noc));
618 CGColorRef cgColor;
619
620 [nsColor getComponents: components];
621 cgColor = CGColorCreate (colorSpace, components);
622 xfree (components);
623 return cgColor;
624}
625
626#define CG_SET_FILL_COLOR_WITH_GC_FOREGROUND(context, s) \
627 CGContextSetFillColorWithColor (context, \
628 get_cgcolor (NS_FACE_FOREGROUND (s->face), \
629 s->f))
630
631#define CG_SET_FILL_COLOR_WITH_GC_BACKGROUND(context, s) \
632 CGContextSetFillColorWithColor (context, \
633 get_cgcolor (NS_FACE_BACKGROUND (s->face), \
634 s->f))
635
636#define CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND(context, s) \
637 CGContextSetStrokeColorWithColor (context, \
638 get_cgcolor (NS_FACE_FOREGROUND (s->face),\
639 s->f))
640
641
642/* Mac font driver. */
643
644static struct
645{
646 /* registry name */
647 const char *name;
648 /* characters to distinguish the charset from the others */
649 int uniquifier[6];
650 /* additional constraint by language */
651 CFStringRef lang;
652 /* set on demand */
653 CFCharacterSetRef cf_charset;
654 CFStringRef cf_charset_string;
655} cf_charset_table[] =
656 { { "iso8859-1", { 0x00A0, 0x00A1, 0x00B4, 0x00BC, 0x00D0 } },
657 { "iso8859-2", { 0x00A0, 0x010E }},
658 { "iso8859-3", { 0x00A0, 0x0108 }},
659 { "iso8859-4", { 0x00A0, 0x00AF, 0x0128, 0x0156, 0x02C7 }},
660 { "iso8859-5", { 0x00A0, 0x0401 }},
661 { "iso8859-6", { 0x00A0, 0x060C }},
662 { "iso8859-7", { 0x00A0, 0x0384 }},
663 { "iso8859-8", { 0x00A0, 0x05D0 }},
664 { "iso8859-9", { 0x00A0, 0x00A1, 0x00BC, 0x011E }},
665 { "iso8859-10", { 0x00A0, 0x00D0, 0x0128, 0x2015 }},
666 { "iso8859-11", { 0x00A0, 0x0E01 }},
667 { "iso8859-13", { 0x00A0, 0x201C }},
668 { "iso8859-14", { 0x00A0, 0x0174 }},
669 { "iso8859-15", { 0x00A0, 0x00A1, 0x00D0, 0x0152 }},
670 { "iso8859-16", { 0x00A0, 0x0218}},
671 { "gb2312.1980-0", { 0x4E13 }, CFSTR ("zh-Hans")},
672 { "big5-0", { /* 0xF6B1 in ftfont.c */ 0xF7E5 }, CFSTR ("zh-Hant") },
673 { "jisx0208.1983-0", { 0x4E55 }, CFSTR ("ja")},
674 { "ksc5601.1987-0", { 0xAC00 }, CFSTR ("ko")},
675 { "cns11643.1992-1", { 0xFE32 }, CFSTR ("zh-Hant")},
676 { "cns11643.1992-2", { 0x4E33, 0x7934 }},
677 { "cns11643.1992-3", { 0x201A9 }},
678 { "cns11643.1992-4", { 0x20057 }},
679 { "cns11643.1992-5", { 0x20000 }},
680 { "cns11643.1992-6", { 0x20003 }},
681 { "cns11643.1992-7", { 0x20055 }},
682 { "gbk-0", { 0x4E06 }, CFSTR ("zh-Hans")},
683 { "jisx0212.1990-0", { 0x4E44 }},
684 { "jisx0213.2000-1", { 0xFA10 }, CFSTR ("ja")},
685 { "jisx0213.2000-2", { 0xFA49 }},
686 { "jisx0213.2004-1", { 0x20B9F }},
687 { "viscii1.1-1", { 0x1EA0, 0x1EAE, 0x1ED2 }, CFSTR ("vi")},
688 { "tis620.2529-1", { 0x0E01 }, CFSTR ("th")},
689 { "windows-1251", { 0x0401, 0x0490 }, CFSTR ("ru")},
690 { "koi8-r", { 0x0401, 0x2219 }, CFSTR ("ru")},
691 { "mulelao-1", { 0x0E81 }, CFSTR ("lo")},
692 { "unicode-sip", { 0x20000 }},
693 { NULL }
694 };
695
696static CGFloat macfont_antialias_threshold;
697
698void
699macfont_update_antialias_threshold (void)
700{
701 int threshold;
702 Boolean valid_p;
703
704 threshold =
705 CFPreferencesGetAppIntegerValue (CFSTR ("AppleAntiAliasingThreshold"),
706 kCFPreferencesCurrentApplication,
707 &valid_p);
708 if (valid_p)
709 macfont_antialias_threshold = threshold;
710}
711
712static inline Lisp_Object
713macfont_intern_prop_cfstring (CFStringRef cfstring)
714{
715 Lisp_Object string = cfstring_to_lisp_nodecode (cfstring);
716
717 return font_intern_prop (SSDATA (string), SBYTES (string), 1);
718}
719
720static inline CFIndex
721macfont_store_utf32char_to_unichars (UTF32Char c, UniChar *unichars)
722{
723 if (c < 0x10000)
724 {
725 unichars[0] = c;
726
727 return 1;
728 }
729 else
730 {
731 c -= 0x10000;
732 unichars[0] = (c >> 10) + 0xD800;
733 unichars[1] = (c & 0x3FF) + 0xDC00;
734
735 return 2;
736 }
737}
738
739static Boolean
740cfnumber_get_font_symbolic_traits_value (CFNumberRef number,
741 FontSymbolicTraits *sym_traits)
742{
743 SInt64 sint64_value;
744
745 /* Getting symbolic traits with kCFNumberSInt32Type is lossy on Mac
746 OS 10.6 when the value is greater than or equal to 1 << 31. */
747 if (CFNumberGetValue (number, kCFNumberSInt64Type, &sint64_value))
748 {
749 *sym_traits = (FontSymbolicTraits) sint64_value;
750
751 return true;
752 }
753
754 return false;
755}
756
757static void
758macfont_store_descriptor_attributes (FontDescriptorRef desc,
759 Lisp_Object spec_or_entity)
760{
761 CFStringRef str;
762 CFDictionaryRef dict;
763 CFNumberRef num;
764 CGFloat floatval;
765
766 str = mac_font_descriptor_copy_attribute (desc,
767 MAC_FONT_FAMILY_NAME_ATTRIBUTE);
768 if (str)
769 {
770 ASET (spec_or_entity, FONT_FAMILY_INDEX,
771 macfont_intern_prop_cfstring (str));
772 CFRelease (str);
773 }
774 dict = mac_font_descriptor_copy_attribute (desc, MAC_FONT_TRAITS_ATTRIBUTE);
775 if (dict)
776 {
777 struct {
778 enum font_property_index index;
779 CFStringRef trait;
780 CGPoint points[6];
781 } numeric_traits[] =
782 {{FONT_WEIGHT_INDEX, MAC_FONT_WEIGHT_TRAIT,
783 {{-0.4, 50}, /* light */
784 {-0.24, 87.5}, /* (semi-light + normal) / 2 */
785 {0, 100}, /* normal */
786 {0.24, 140}, /* (semi-bold + normal) / 2 */
787 {0.4, 200}, /* bold */
788 {CGFLOAT_MAX, CGFLOAT_MAX}}},
789 {FONT_SLANT_INDEX, MAC_FONT_SLANT_TRAIT,
790 {{0, 100}, {0.1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}},
791 {FONT_WIDTH_INDEX, MAC_FONT_WIDTH_TRAIT,
792 {{0, 100}, {1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}};
793 int i;
794
795 for (i = 0; i < sizeof (numeric_traits) / sizeof (numeric_traits[0]); i++)
796 {
797 num = CFDictionaryGetValue (dict, numeric_traits[i].trait);
798 if (num && CFNumberGetValue (num, kCFNumberCGFloatType, &floatval))
799 {
800 CGPoint *point = numeric_traits[i].points;
801
802 while (point->x < floatval)
803 point++;
804 if (point == numeric_traits[i].points)
805 point++;
806 else if (point->x == CGFLOAT_MAX)
807 point--;
808 floatval = (point - 1)->y + ((floatval - (point - 1)->x)
809 * ((point->y - (point - 1)->y)
810 / (point->x - (point - 1)->x)));
811 FONT_SET_STYLE (spec_or_entity, numeric_traits[i].index,
812 make_number (lround (floatval)));
813 }
814 }
815
816 num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT);
817 if (num)
818 {
819 FontSymbolicTraits sym_traits;
820 int spacing;
821
822 cfnumber_get_font_symbolic_traits_value (num, &sym_traits);
823 spacing = (sym_traits & MAC_FONT_TRAIT_MONO_SPACE
824 ? FONT_SPACING_MONO : FONT_SPACING_PROPORTIONAL);
825 ASET (spec_or_entity, FONT_SPACING_INDEX, make_number (spacing));
826 }
827
828 CFRelease (dict);
829 }
830 num = mac_font_descriptor_copy_attribute (desc, MAC_FONT_SIZE_ATTRIBUTE);
831 if (num && CFNumberGetValue (num, kCFNumberCGFloatType, &floatval))
832 ASET (spec_or_entity, FONT_SIZE_INDEX, make_number (floatval));
833 else
834 ASET (spec_or_entity, FONT_SIZE_INDEX, make_number (0));
835 if (num)
836 CFRelease (num);
837}
838
839static Lisp_Object
840macfont_descriptor_entity (FontDescriptorRef desc, Lisp_Object extra,
841 FontSymbolicTraits synth_sym_traits)
842{
843 Lisp_Object entity;
844 CFDictionaryRef dict;
845 FontSymbolicTraits sym_traits = 0;
846 CFStringRef name;
847
848 entity = font_make_entity ();
849
850 ASET (entity, FONT_TYPE_INDEX, macfont_driver.type);
851 ASET (entity, FONT_REGISTRY_INDEX, Qiso10646_1);
852
853 macfont_store_descriptor_attributes (desc, entity);
854
855 dict = mac_font_descriptor_copy_attribute (desc, MAC_FONT_TRAITS_ATTRIBUTE);
856 if (dict)
857 {
858 CFNumberRef num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT);
859
860 if (num)
861 cfnumber_get_font_symbolic_traits_value (num, &sym_traits);
862 CFRelease (dict);
863 }
864 if (EQ (AREF (entity, FONT_SIZE_INDEX), make_number (0)))
865 ASET (entity, FONT_AVGWIDTH_INDEX, make_number (0));
866 ASET (entity, FONT_EXTRA_INDEX, Fcopy_sequence (extra));
867 name = mac_font_descriptor_copy_attribute (desc, MAC_FONT_NAME_ATTRIBUTE);
868 font_put_extra (entity, QCfont_entity,
869 make_save_ptr_int ((void *) name, sym_traits));
870 if (synth_sym_traits & MAC_FONT_TRAIT_ITALIC)
871 FONT_SET_STYLE (entity, FONT_SLANT_INDEX,
872 make_number (FONT_SLANT_SYNTHETIC_ITALIC));
873 if (synth_sym_traits & MAC_FONT_TRAIT_BOLD)
874 FONT_SET_STYLE (entity, FONT_WEIGHT_INDEX,
875 make_number (FONT_WEIGHT_SYNTHETIC_BOLD));
876 if (synth_sym_traits & MAC_FONT_TRAIT_MONO_SPACE)
877 ASET (entity, FONT_SPACING_INDEX,
878 make_number (FONT_SPACING_SYNTHETIC_MONO));
879
880 return entity;
881}
882
883static CFStringRef
884macfont_create_family_with_symbol (Lisp_Object symbol)
885{
886 static CFArrayRef families = NULL;
887 CFStringRef result = NULL, family_name;
888 int using_cache_p = 1;
889 CFComparatorFunction family_name_comparator;
890
891 family_name = cfstring_create_with_string_noencode (SYMBOL_NAME (symbol));
892 if (family_name == NULL)
893 return NULL;
894
895#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
896#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
897 if (CTFontManagerCompareFontFamilyNames != NULL)
898#endif
899 {
900 family_name_comparator = CTFontManagerCompareFontFamilyNames;
901 }
902#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
903 else /* CTFontManagerCompareFontFamilyNames == NULL */
904#endif
905#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 */
906#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
907 {
908 family_name_comparator = mac_font_family_compare;
909 }
910#endif
911
912 if ((*family_name_comparator) (family_name, CFSTR ("LastResort"), NULL)
913 == kCFCompareEqualTo)
914 result = CFSTR ("LastResort");
915 else
916 while (1)
917 {
918 CFIndex i, count;
919
920 if (families == NULL)
921 {
922 families = mac_font_create_available_families ();
923 using_cache_p = 0;
924 if (families == NULL)
925 break;
926 }
927
928 count = CFArrayGetCount (families);
929 i = CFArrayBSearchValues (families, CFRangeMake (0, count),
930 (const void *) family_name,
931 family_name_comparator, NULL);
932 if (i < count)
933 {
934 CFStringRef name = CFArrayGetValueAtIndex (families, i);
935
936 if ((*family_name_comparator) (name, family_name, NULL)
937 == kCFCompareEqualTo)
938 result = CFRetain (name);
939 }
940
941 if (result || !using_cache_p)
942 break;
943 else
944 {
945 CFRelease (families);
946 families = NULL;
947 }
948 }
949
950 CFRelease (family_name);
951
952 return result;
953}
954
955#define WIDTH_FRAC_BITS (4)
956#define WIDTH_FRAC_SCALE (2 * ((1 << (WIDTH_FRAC_BITS - 1)) - 1))
957
958struct macfont_metrics
959{
960 unsigned char lbearing_low, rbearing_low;
961 signed lbearing_high : 4, rbearing_high : 4;
962 unsigned char ascent_low, descent_low;
963 signed ascent_high : 4, descent_high : 4;
964
965 /* These two members are used for fixed-point representation of
966 glyph width. The `width_int' member is an integer that is
967 closest to the width. The `width_frac' member is the fractional
968 adjustment representing a value in [-.5, .5], multiplied by
969 WIDTH_FRAC_SCALE. For synthetic monospace fonts, they represent
970 the advance delta for centering instead of the glyph width. */
971 signed width_frac : WIDTH_FRAC_BITS, width_int : 16 - WIDTH_FRAC_BITS;
972};
973
974#define METRICS_VALUE(metrics, member) \
975 (((metrics)->member##_high << 8) | (metrics)->member##_low)
976#define METRICS_SET_VALUE(metrics, member, value) \
977 do {short tmp = (value); (metrics)->member##_low = tmp & 0xff; \
978 (metrics)->member##_high = tmp >> 8;} while (0)
979
980enum metrics_status
981 {
982 METRICS_INVALID = -1, /* metrics entry is invalid */
983 METRICS_WIDTH_VALID = -2 /* width is valid but others are invalid */
984 };
985
986#define METRICS_STATUS(metrics) \
987 (METRICS_VALUE (metrics, ascent) + METRICS_VALUE (metrics, descent))
988#define METRICS_SET_STATUS(metrics, status) \
989 do {METRICS_SET_VALUE (metrics, ascent, 0); \
990 METRICS_SET_VALUE (metrics, descent, status);} while (0)
991
992#define METRICS_NCOLS_PER_ROW (128)
993#define LCD_FONT_SMOOTHING_LEFT_MARGIN (0.396f)
994#define LCD_FONT_SMOOTHING_RIGHT_MARGIN (0.396f)
995
996static int
997macfont_glyph_extents (struct font *font, CGGlyph glyph,
998 struct font_metrics *metrics, CGFloat *advance_delta,
999 int force_integral_p)
1000{
1001 struct macfont_info *macfont_info = (struct macfont_info *) font;
1002 FontRef macfont = macfont_info->macfont;
1003 int row, col;
1004 struct macfont_metrics *cache;
1005 int width;
1006
1007 row = glyph / METRICS_NCOLS_PER_ROW;
1008 col = glyph % METRICS_NCOLS_PER_ROW;
1009 if (row >= macfont_info->metrics_nrows)
1010 {
1011 macfont_info->metrics =
1012 xrealloc (macfont_info->metrics,
1013 sizeof (struct macfont_metrics *) * (row + 1));
1014 memset (macfont_info->metrics + macfont_info->metrics_nrows, 0,
1015 (sizeof (struct macfont_metrics *)
1016 * (row + 1 - macfont_info->metrics_nrows)));
1017 macfont_info->metrics_nrows = row + 1;
1018 }
1019 if (macfont_info->metrics[row] == NULL)
1020 {
1021 struct macfont_metrics *new;
1022 int i;
1023
1024 new = xmalloc (sizeof (struct macfont_metrics) * METRICS_NCOLS_PER_ROW);
1025 for (i = 0; i < METRICS_NCOLS_PER_ROW; i++)
1026 METRICS_SET_STATUS (new + i, METRICS_INVALID);
1027 macfont_info->metrics[row] = new;
1028 }
1029 cache = macfont_info->metrics[row] + col;
1030
1031 if (METRICS_STATUS (cache) == METRICS_INVALID)
1032 {
1033 CGFloat fwidth;
1034
1035 if (macfont_info->screen_font)
1036 fwidth = mac_screen_font_get_advance_width_for_glyph (macfont_info->screen_font, glyph);
1037 else
1038 fwidth = mac_font_get_advance_width_for_glyph (macfont, glyph);
1039
1040 /* For synthetic mono fonts, cache->width_{int,frac} holds the
1041 advance delta value. */
1042 if (macfont_info->spacing == MACFONT_SPACING_SYNTHETIC_MONO)
1043 fwidth = (font->pixel_size - fwidth) / 2;
1044 cache->width_int = lround (fwidth);
1045 cache->width_frac = lround ((fwidth - cache->width_int)
1046 * WIDTH_FRAC_SCALE);
1047 METRICS_SET_STATUS (cache, METRICS_WIDTH_VALID);
1048 }
1049 if (macfont_info->spacing == MACFONT_SPACING_SYNTHETIC_MONO)
1050 width = font->pixel_size;
1051 else
1052 width = cache->width_int;
1053
1054 if (metrics)
1055 {
1056 if (METRICS_STATUS (cache) == METRICS_WIDTH_VALID)
1057 {
1058 CGRect bounds = mac_font_get_bounding_rect_for_glyph (macfont, glyph);
1059
1060 if (macfont_info->synthetic_italic_p)
1061 {
1062 /* We assume the members a, b, c, and d in
1063 synthetic_italic_atfm are non-negative. */
1064 bounds.origin =
1065 CGPointApplyAffineTransform (bounds.origin,
1066 synthetic_italic_atfm);
1067 bounds.size =
1068 CGSizeApplyAffineTransform (bounds.size, synthetic_italic_atfm);
1069 }
1070 if (macfont_info->synthetic_bold_p)
1071 {
1072 CGFloat d =
1073 - synthetic_bold_factor * mac_font_get_size (macfont) / 2;
1074
1075 bounds = CGRectInset (bounds, d, d);
1076 }
1077 switch (macfont_info->spacing)
1078 {
1079 case MACFONT_SPACING_PROPORTIONAL:
1080 bounds.origin.x += - (cache->width_frac
1081 / (CGFloat) (WIDTH_FRAC_SCALE * 2));
1082 break;
1083 case MACFONT_SPACING_MONO:
1084 break;
1085 case MACFONT_SPACING_SYNTHETIC_MONO:
1086 bounds.origin.x += (cache->width_int
1087 + (cache->width_frac
1088 / (CGFloat) WIDTH_FRAC_SCALE));
1089 break;
1090 }
1091 if (bounds.size.width > 0)
1092 {
1093 bounds.origin.x -= LCD_FONT_SMOOTHING_LEFT_MARGIN;
1094 bounds.size.width += (LCD_FONT_SMOOTHING_LEFT_MARGIN
1095 + LCD_FONT_SMOOTHING_RIGHT_MARGIN);
1096 }
1097 bounds = CGRectIntegral (bounds);
1098 METRICS_SET_VALUE (cache, lbearing, CGRectGetMinX (bounds));
1099 METRICS_SET_VALUE (cache, rbearing, CGRectGetMaxX (bounds));
1100 METRICS_SET_VALUE (cache, ascent, CGRectGetMaxY (bounds));
1101 METRICS_SET_VALUE (cache, descent, -CGRectGetMinY (bounds));
1102 }
1103 metrics->lbearing = METRICS_VALUE (cache, lbearing);
1104 metrics->rbearing = METRICS_VALUE (cache, rbearing);
1105 metrics->width = width;
1106 metrics->ascent = METRICS_VALUE (cache, ascent);
1107 metrics->descent = METRICS_VALUE (cache, descent);
1108 }
1109
1110 if (advance_delta)
1111 {
1112 switch (macfont_info->spacing)
1113 {
1114 case MACFONT_SPACING_PROPORTIONAL:
1115 *advance_delta = (force_integral_p ? 0
1116 : - (cache->width_frac
1117 / (CGFloat) (WIDTH_FRAC_SCALE * 2)));
1118 break;
1119 case MACFONT_SPACING_MONO:
1120 *advance_delta = 0;
1121 break;
1122 case MACFONT_SPACING_SYNTHETIC_MONO:
1123 *advance_delta = (force_integral_p ? cache->width_int
1124 : (cache->width_int
1125 + (cache->width_frac
1126 / (CGFloat) WIDTH_FRAC_SCALE)));
1127 break;
1128 }
1129 }
1130
1131 return width;
1132}
1133
1134static CFMutableDictionaryRef macfont_cache_dictionary;
1135
1136/* Threshold used in row_nkeys_or_perm. This must be less than or
1137 equal to the number of rows that are invalid as BMP (i.e., from
1138 U+D800 to U+DFFF). */
1139#define ROW_PERM_OFFSET (8)
1140
1141/* The number of glyphs that can be stored in a value for a single
1142 entry of CFDictionary. */
1143#define NGLYPHS_IN_VALUE (sizeof (void *) / sizeof (CGGlyph))
1144
1145struct macfont_cache
1146{
1147 int reference_count;
1148 CFCharacterSetRef cf_charset;
1149 struct {
1150 /* The cached glyph for a BMP character c is stored in
1151 matrix[row_nkeys_or_perm[c / 256] - ROW_PERM_OFFSET][c % 256]
1152 if row_nkeys_or_perm[c / 256] >= ROW_PERM_OFFSET. */
1153 unsigned char row_nkeys_or_perm[256];
1154 CGGlyph **matrix;
1155
1156 /* Number of rows for which the BMP cache is allocated so far.
1157 I.e., matrix[0] ... matrix[nrows - 1] are non-NULL. */
1158 int nrows;
1159
1160 /* The cached glyph for a character c is stored as the (c %
1161 NGLYPHS_IN_VALUE)-th CGGlyph block of a value for the key (c /
1162 NGLYPHS_IN_VALUE). However, the glyph for a BMP characrer c is
1163 not stored here if row_nkeys_or_perm[c / 256] >=
1164 ROW_PERM_OFFSET. */
1165 CFMutableDictionaryRef dictionary;
1166 } glyph;
1167
1168 struct {
1169 /* UVS (Unicode Variation Sequence) subtable data, which is of
1170 type CFDataRef if available. NULL means it is not initialized
1171 yet. kCFNull means the subtable is not found and there is no
1172 suitable fallback table for this font. */
1173 CFTypeRef table;
1174
1175 /* Character collection specifying the destination of the mapping
1176 provided by `table' above. If `table' is obtained from the UVS
1177 subtable in the font cmap table, then the value of this member
1178 should be MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING. */
1179 CharacterCollection collection;
1180 } uvs;
1181};
1182
1183static struct macfont_cache *macfont_lookup_cache (CFStringRef);
1184static struct macfont_cache *macfont_retain_cache (struct macfont_cache *);
1185static void macfont_release_cache (struct macfont_cache *);
1186static CFCharacterSetRef macfont_get_cf_charset (struct font *);
1187static CFCharacterSetRef macfont_get_cf_charset_for_name (CFStringRef);
1188static CGGlyph macfont_get_glyph_for_character (struct font *, UTF32Char);
1189static CGGlyph macfont_get_glyph_for_cid (struct font *font,
1190 CharacterCollection, CGFontIndex);
1191static CFDataRef macfont_get_uvs_table (struct font *, CharacterCollection *);
1192
1193static struct macfont_cache *
1194macfont_lookup_cache (CFStringRef key)
1195{
1196 struct macfont_cache *cache;
1197
1198 if (macfont_cache_dictionary == NULL)
1199 {
1200 macfont_cache_dictionary =
1201 CFDictionaryCreateMutable (NULL, 0,
1202 &kCFTypeDictionaryKeyCallBacks, NULL);
1203 cache = NULL;
1204 }
1205 else
1206 cache = ((struct macfont_cache *)
1207 CFDictionaryGetValue (macfont_cache_dictionary, key));
1208
1209 if (cache == NULL)
1210 {
1211 FontRef macfont = mac_font_create_with_name (key, 0);
1212
1213 if (macfont)
1214 {
1215 cache = xzalloc (sizeof (struct macfont_cache));
1216 /* Treat the LastResort font as if it contained glyphs for
1217 all characters. This may look too rough, but neither
1218 CTFontCopyCharacterSet nor -[NSFont coveredCharacterSet]
1219 for this font is correct for non-BMP characters on Mac OS
1220 X 10.5, anyway. */
1221 if (CFStringCompare (key, CFSTR ("LastResort"), 0)
1222 == kCFCompareEqualTo)
1223 {
1224 CFRange range = CFRangeMake (0, MAX_UNICODE_CHAR + 1);
1225
1226 cache->cf_charset =
1227 CFCharacterSetCreateWithCharactersInRange (NULL, range);
1228 }
1229 if (cache->cf_charset == NULL)
1230 cache->cf_charset = mac_font_copy_character_set (macfont);
1231 CFDictionaryAddValue (macfont_cache_dictionary, key,
1232 (const void *) cache);
1233 CFRelease (macfont);
1234 }
1235 }
1236
1237 return cache;
1238}
1239
1240static struct macfont_cache *
1241macfont_retain_cache (struct macfont_cache *cache)
1242{
1243 cache->reference_count++;
1244
1245 return cache;
1246}
1247
1248static void
1249macfont_release_cache (struct macfont_cache *cache)
1250{
1251 if (--cache->reference_count == 0)
1252 {
1253 int i;
1254
1255 for (i = 0; i < cache->glyph.nrows; i++)
1256 xfree (cache->glyph.matrix[i]);
1257 xfree (cache->glyph.matrix);
1258 if (cache->glyph.dictionary)
1259 CFRelease (cache->glyph.dictionary);
1260 memset (&cache->glyph, 0, sizeof (cache->glyph));
1261 if (cache->uvs.table)
1262 CFRelease (cache->uvs.table);
1263 memset (&cache->uvs, 0, sizeof (cache->uvs));
1264 }
1265}
1266
1267static CFCharacterSetRef
1268macfont_get_cf_charset (struct font *font)
1269{
1270 struct macfont_info *macfont_info = (struct macfont_info *) font;
1271
1272 return macfont_info->cache->cf_charset;
1273}
1274
1275static CFCharacterSetRef
1276macfont_get_cf_charset_for_name (CFStringRef name)
1277{
1278 struct macfont_cache *cache = macfont_lookup_cache (name);
1279
1280 return cache->cf_charset;
1281}
1282
1283static CGGlyph
1284macfont_get_glyph_for_character (struct font *font, UTF32Char c)
1285{
1286 struct macfont_info *macfont_info = (struct macfont_info *) font;
1287 FontRef macfont = macfont_info->macfont;
1288 struct macfont_cache *cache = macfont_info->cache;
1289
1290 if (c < 0xD800 || (c > 0xDFFF && c < 0x10000))
1291 {
1292 int row = c / 256;
1293 int nkeys_or_perm = cache->glyph.row_nkeys_or_perm[row];
1294
1295 if (nkeys_or_perm < ROW_PERM_OFFSET)
1296 {
1297 UniChar unichars[256], ch;
1298 CGGlyph *glyphs;
1299 int i, len;
1300 int nrows;
1301#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
1302 dispatch_queue_t queue;
1303 dispatch_group_t group = NULL;
1304#else
1305 int nkeys;
1306#endif
1307
1308 if (row != 0)
1309 {
1310 CFMutableDictionaryRef dictionary;
1311 uintptr_t key, value;
1312 int nshifts;
1313 CGGlyph glyph;
1314
1315 if (cache->glyph.dictionary == NULL)
1316 cache->glyph.dictionary =
1317 CFDictionaryCreateMutable (NULL, 0, NULL, NULL);
1318 dictionary = cache->glyph.dictionary;
1319 key = c / NGLYPHS_IN_VALUE;
1320 nshifts = ((c % NGLYPHS_IN_VALUE) * sizeof (CGGlyph) * 8);
1321 value = ((uintptr_t)
1322 CFDictionaryGetValue (dictionary, (const void *) key));
1323 glyph = (value >> nshifts);
1324 if (glyph)
1325 return glyph;
1326
1327 if (nkeys_or_perm + 1 != ROW_PERM_OFFSET)
1328 {
1329 ch = c;
1330 if (!mac_font_get_glyphs_for_characters (macfont, &ch,
1331 &glyph, 1)
1332 || glyph == 0)
1333 glyph = kCGFontIndexInvalid;
1334
1335 if (value == 0)
1336 cache->glyph.row_nkeys_or_perm[row] = nkeys_or_perm + 1;
1337 value |= ((uintptr_t) glyph << nshifts);
1338 CFDictionarySetValue (dictionary, (const void *) key,
1339 (const void *) value);
1340
1341 return glyph;
1342 }
1343
1344#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
1345 queue =
1346 dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
1347 group = dispatch_group_create ();
1348 dispatch_group_async (group, queue, ^{
1349 int nkeys;
1350 uintptr_t key;
1351#endif
1352 nkeys = nkeys_or_perm;
1353 for (key = row * (256 / NGLYPHS_IN_VALUE); ; key++)
1354 if (CFDictionaryContainsKey (dictionary,
1355 (const void *) key))
1356 {
1357 CFDictionaryRemoveValue (dictionary,
1358 (const void *) key);
1359 if (--nkeys == 0)
1360 break;
1361 }
1362#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
1363 });
1364#endif
1365 }
1366
1367 len = 0;
1368 for (i = 0; i < 256; i++)
1369 {
1370 ch = row * 256 + i;
1371 if (CFCharacterSetIsLongCharacterMember (cache->cf_charset, ch))
1372 unichars[len++] = ch;
1373 }
1374
1375 glyphs = xmalloc (sizeof (CGGlyph) * 256);
1376 if (len > 0)
1377 {
1378 mac_font_get_glyphs_for_characters (macfont, unichars,
1379 glyphs, len);
1380 while (i > len)
1381 {
1382 int next = unichars[len - 1] % 256;
1383
1384 while (--i > next)
1385 glyphs[i] = kCGFontIndexInvalid;
1386
1387 len--;
1388 glyphs[i] = glyphs[len];
1389 if (len == 0)
1390 break;
1391 }
1392 }
1393 if (i > len)
1394 while (i-- > 0)
1395 glyphs[i] = kCGFontIndexInvalid;
1396
1397 nrows = cache->glyph.nrows;
1398 nkeys_or_perm = nrows + ROW_PERM_OFFSET;
1399 cache->glyph.row_nkeys_or_perm[row] = nkeys_or_perm;
1400 nrows++;
1401 cache->glyph.matrix = xrealloc (cache->glyph.matrix,
1402 sizeof (CGGlyph *) * nrows);
1403 cache->glyph.matrix[nrows - 1] = glyphs;
1404 cache->glyph.nrows = nrows;
1405
1406#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
1407 if (group)
1408 {
1409 dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
1410 dispatch_release (group);
1411 }
1412#endif
1413 }
1414
1415 return cache->glyph.matrix[nkeys_or_perm - ROW_PERM_OFFSET][c % 256];
1416 }
1417 else
1418 {
1419 uintptr_t key, value;
1420 int nshifts;
1421 CGGlyph glyph;
1422
1423 if (cache->glyph.dictionary == NULL)
1424 cache->glyph.dictionary =
1425 CFDictionaryCreateMutable (NULL, 0, NULL, NULL);
1426 key = c / NGLYPHS_IN_VALUE;
1427 nshifts = ((c % NGLYPHS_IN_VALUE) * sizeof (CGGlyph) * 8);
1428 value = (uintptr_t) CFDictionaryGetValue (cache->glyph.dictionary,
1429 (const void *) key);
1430 glyph = (value >> nshifts);
1431 if (glyph == 0)
1432 {
1433 UniChar unichars[2];
1434 CGGlyph glyphs[2];
1435 CFIndex count = macfont_store_utf32char_to_unichars (c, unichars);
1436
1437 if (mac_font_get_glyphs_for_characters (macfont, unichars, glyphs,
1438 count))
1439 glyph = glyphs[0];
1440 if (glyph == 0)
1441 glyph = kCGFontIndexInvalid;
1442
1443 value |= ((uintptr_t) glyph << nshifts);
1444 CFDictionarySetValue (cache->glyph.dictionary,
1445 (const void *) key, (const void *) value);
1446 }
1447
1448 return glyph;
1449 }
1450}
1451
1452static CGGlyph
1453macfont_get_glyph_for_cid (struct font *font, CharacterCollection collection,
1454 CGFontIndex cid)
1455{
1456 struct macfont_info *macfont_info = (struct macfont_info *) font;
1457 FontRef macfont = macfont_info->macfont;
1458
1459 /* Cache it? */
1460 return mac_font_get_glyph_for_cid (macfont, collection, cid);
1461}
1462
1463static CFDataRef
1464macfont_get_uvs_table (struct font *font, CharacterCollection *collection)
1465{
1466 struct macfont_info *macfont_info = (struct macfont_info *) font;
1467 FontRef macfont = macfont_info->macfont;
1468 struct macfont_cache *cache = macfont_info->cache;
1469 CFDataRef result = NULL;
1470
1471 if (cache->uvs.table == NULL)
1472 {
1473 CFDataRef uvs_table = mac_font_copy_uvs_table (macfont);
1474 CharacterCollection uvs_collection =
1475 MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING;
1476
1477 if (uvs_table == NULL
1478 && mac_font_get_glyph_for_cid (macfont,
1479 MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1,
1480 6480) != kCGFontIndexInvalid)
1481 {
1482 /* If the glyph for U+4E55 is accessible via its CID 6480,
1483 then we use the Adobe-Japan1 UVS table, which maps a
1484 variation sequence to a CID, as a fallback. */
1485 static CFDataRef mac_uvs_table_adobe_japan1 = NULL;
1486
1487 if (mac_uvs_table_adobe_japan1 == NULL)
1488 mac_uvs_table_adobe_japan1 =
1489 CFDataCreateWithBytesNoCopy (NULL,
1490 mac_uvs_table_adobe_japan1_bytes,
1491 sizeof (mac_uvs_table_adobe_japan1_bytes),
1492 kCFAllocatorNull);
1493 if (mac_uvs_table_adobe_japan1)
1494 {
1495 uvs_table = CFRetain (mac_uvs_table_adobe_japan1);
1496 uvs_collection = MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1;
1497 }
1498 }
1499 if (uvs_table == NULL)
1500 cache->uvs.table = kCFNull;
1501 else
1502 cache->uvs.table = uvs_table;
1503 cache->uvs.collection = uvs_collection;
1504 }
1505
1506 if (cache->uvs.table != kCFNull)
1507 {
1508 result = cache->uvs.table;
1509 *collection = cache->uvs.collection;
1510 }
1511
1512 return result;
1513}
1514
1515static Lisp_Object macfont_get_cache (struct frame *);
1516static Lisp_Object macfont_list (struct frame *, Lisp_Object);
1517static Lisp_Object macfont_match (struct frame *, Lisp_Object);
1518static Lisp_Object macfont_list_family (struct frame *);
1519static void macfont_free_entity (Lisp_Object);
1520static Lisp_Object macfont_open (struct frame *, Lisp_Object, int);
1521static void macfont_close (struct frame *, struct font *);
1522static int macfont_has_char (Lisp_Object, int);
1523static unsigned macfont_encode_char (struct font *, int);
1524static int macfont_text_extents (struct font *, unsigned int *, int,
1525 struct font_metrics *);
1526static int macfont_draw (struct glyph_string *, int, int, int, int, bool);
1527static Lisp_Object macfont_shape (Lisp_Object);
1528static int macfont_variation_glyphs (struct font *, int c,
1529 unsigned variations[256]);
1530static void macfont_filter_properties (Lisp_Object, Lisp_Object);
1531
1532static struct font_driver macfont_driver =
1533 {
1534 LISP_INITIALLY_ZERO, /* Qmac_ct */
1535 0, /* case insensitive */
1536 macfont_get_cache,
1537 macfont_list,
1538 macfont_match,
1539 macfont_list_family,
1540 macfont_free_entity,
1541 macfont_open,
1542 macfont_close,
1543 NULL, /* prepare_face */
1544 NULL, /* done_face */
1545 macfont_has_char,
1546 macfont_encode_char,
1547 macfont_text_extents,
1548 macfont_draw,
1549 NULL, /* get_bitmap */
1550 NULL, /* free_bitmap */
1551 NULL, /* get_outline */
1552 NULL, /* free_outline */
1553 NULL, /* anchor_point */
1554 NULL, /* otf_capability */
1555 NULL, /* otf_drive */
1556 NULL, /* start_for_frame */
1557 NULL, /* end_for_frame */
1558 macfont_shape,
1559 NULL, /* check */
1560 macfont_variation_glyphs,
1561 macfont_filter_properties,
1562 };
1563
1564static Lisp_Object
1565macfont_get_cache (struct frame * f)
1566{
1567 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
1568
1569 return (dpyinfo->name_list_element);
1570}
1571
1572static int
1573macfont_get_charset (Lisp_Object registry)
1574{
1575 char *str = SSDATA (SYMBOL_NAME (registry));
1576 char *re = alloca (SBYTES (SYMBOL_NAME (registry)) * 2 + 1);
1577 Lisp_Object regexp;
1578 int i, j;
1579
1580 for (i = j = 0; i < SBYTES (SYMBOL_NAME (registry)); i++, j++)
1581 {
1582 if (str[i] == '.')
1583 re[j++] = '\\';
1584 else if (str[i] == '*')
1585 re[j++] = '.';
1586 re[j] = str[i];
1587 if (re[j] == '?')
1588 re[j] = '.';
1589 }
1590 re[j] = '\0';
1591 regexp = make_unibyte_string (re, j);
1592 for (i = 0; cf_charset_table[i].name; i++)
1593 if (fast_c_string_match_ignore_case
1594 (regexp, cf_charset_table[i].name,
1595 strlen (cf_charset_table[i].name)) >= 0)
1596 break;
1597 if (! cf_charset_table[i].name)
1598 return -1;
1599 if (! cf_charset_table[i].cf_charset)
1600 {
1601 int *uniquifier = cf_charset_table[i].uniquifier;
1602 UniChar *unichars = alloca (sizeof (cf_charset_table[i].uniquifier));
1603 CFIndex count = 0;
1604 CFStringRef string;
1605 CFMutableCharacterSetRef charset = CFCharacterSetCreateMutable (NULL);
1606
1607 if (! charset)
1608 return -1;
1609 for (j = 0; uniquifier[j]; j++)
1610 {
1611 count += macfont_store_utf32char_to_unichars (uniquifier[j],
1612 unichars + count);
1613 CFCharacterSetAddCharactersInRange (charset,
1614 CFRangeMake (uniquifier[j], 1));
1615 }
1616
1617 string = CFStringCreateWithCharacters (NULL, unichars, count);
1618 if (! string)
1619 {
1620 CFRelease (charset);
1621 return -1;
1622 }
1623 cf_charset_table[i].cf_charset = CFCharacterSetCreateCopy (NULL,
1624 charset);
1625 CFRelease (charset);
1626 /* CFCharacterSetCreateWithCharactersInString does not handle
1627 surrogate pairs properly as of Mac OS X 10.5. */
1628 cf_charset_table[i].cf_charset_string = string;
1629 }
1630 return i;
1631}
1632
1633struct OpenTypeSpec
1634{
1635 Lisp_Object script;
1636 unsigned int script_tag, langsys_tag;
1637 int nfeatures[2];
1638 unsigned int *features[2];
1639};
1640
1641#define OTF_SYM_TAG(SYM, TAG) \
1642 do { \
1643 unsigned char *p = SDATA (SYMBOL_NAME (SYM)); \
1644 TAG = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; \
1645 } while (0)
1646
1647#define OTF_TAG_STR(TAG, P) \
1648 do { \
1649 (P)[0] = (char) (TAG >> 24); \
1650 (P)[1] = (char) ((TAG >> 16) & 0xFF); \
1651 (P)[2] = (char) ((TAG >> 8) & 0xFF); \
1652 (P)[3] = (char) (TAG & 0xFF); \
1653 (P)[4] = '\0'; \
1654 } while (0)
1655
1656static struct OpenTypeSpec *
1657macfont_get_open_type_spec (Lisp_Object otf_spec)
1658{
1659 struct OpenTypeSpec *spec = xmalloc (sizeof *spec);
1660 Lisp_Object val;
1661 int i, j;
1662 bool negative;
1663
1664 if (! spec)
1665 return NULL;
1666 spec->script = XCAR (otf_spec);
1667 if (! NILP (spec->script))
1668 {
1669 OTF_SYM_TAG (spec->script, spec->script_tag);
1670 val = assq_no_quit (spec->script, Votf_script_alist);
1671 if (CONSP (val) && SYMBOLP (XCDR (val)))
1672 spec->script = XCDR (val);
1673 else
1674 spec->script = Qnil;
1675 }
1676 else
1677 spec->script_tag = 0x44464C54; /* "DFLT" */
1678 otf_spec = XCDR (otf_spec);
1679 spec->langsys_tag = 0;
1680 if (! NILP (otf_spec))
1681 {
1682 val = XCAR (otf_spec);
1683 if (! NILP (val))
1684 OTF_SYM_TAG (val, spec->langsys_tag);
1685 otf_spec = XCDR (otf_spec);
1686 }
1687 spec->nfeatures[0] = spec->nfeatures[1] = 0;
1688 for (i = 0; i < 2 && ! NILP (otf_spec); i++, otf_spec = XCDR (otf_spec))
1689 {
1690 Lisp_Object len;
1691
1692 val = XCAR (otf_spec);
1693 if (NILP (val))
1694 continue;
1695 len = Flength (val);
1696 spec->features[i] =
1697 (min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < XINT (len)
1698 ? 0
1699 : malloc (XINT (len) * sizeof *spec->features[i]));
1700 if (! spec->features[i])
1701 {
1702 if (i > 0 && spec->features[0])
1703 free (spec->features[0]);
1704 free (spec);
1705 return NULL;
1706 }
1707 for (j = 0, negative = 0; CONSP (val); val = XCDR (val))
1708 {
1709 if (NILP (XCAR (val)))
1710 negative = 1;
1711 else
1712 {
1713 unsigned int tag;
1714
1715 OTF_SYM_TAG (XCAR (val), tag);
1716 spec->features[i][j++] = negative ? tag & 0x80000000 : tag;
1717 }
1718 }
1719 spec->nfeatures[i] = j;
1720 }
1721 return spec;
1722}
1723
1724static CFMutableDictionaryRef
1725macfont_create_attributes_with_spec (Lisp_Object spec)
1726{
1727 Lisp_Object tmp, extra;
1728 CFMutableArrayRef langarray = NULL;
1729 CFCharacterSetRef charset = NULL;
1730 CFStringRef charset_string = NULL;
1731 CFMutableDictionaryRef attributes = NULL, traits = NULL;
1732 Lisp_Object script = Qnil;
1733 Lisp_Object registry;
1734 int cf_charset_idx, i;
1735 struct OpenTypeSpec *otspec = NULL;
1736 struct {
1737 enum font_property_index index;
1738 CFStringRef trait;
1739 CGPoint points[6];
1740 } numeric_traits[] =
1741 {{FONT_WEIGHT_INDEX, MAC_FONT_WEIGHT_TRAIT,
1742 {{-0.4, 50}, /* light */
1743 {-0.24, 87.5}, /* (semi-light + normal) / 2 */
1744 {0, 100}, /* normal */
1745 {0.24, 140}, /* (semi-bold + normal) / 2 */
1746 {0.4, 200}, /* bold */
1747 {CGFLOAT_MAX, CGFLOAT_MAX}}},
1748 {FONT_SLANT_INDEX, MAC_FONT_SLANT_TRAIT,
1749 {{0, 100}, {0.1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}},
1750 {FONT_WIDTH_INDEX, MAC_FONT_WIDTH_TRAIT,
1751 {{0, 100}, {1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}};
1752
1753 registry = AREF (spec, FONT_REGISTRY_INDEX);
1754 if (NILP (registry)
1755 || EQ (registry, Qascii_0)
1756 || EQ (registry, Qiso10646_1)
1757 || EQ (registry, Qunicode_bmp))
1758 cf_charset_idx = -1;
1759 else
1760 {
1761 CFStringRef lang;
1762
1763 cf_charset_idx = macfont_get_charset (registry);
1764 if (cf_charset_idx < 0)
1765 goto err;
1766 charset = cf_charset_table[cf_charset_idx].cf_charset;
1767 charset_string = cf_charset_table[cf_charset_idx].cf_charset_string;
1768 lang = cf_charset_table[cf_charset_idx].lang;
1769 if (lang)
1770 {
1771 langarray = CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks);
1772 if (! langarray)
1773 goto err;
1774 CFArrayAppendValue (langarray, lang);
1775 }
1776 }
1777
1778 for (extra = AREF (spec, FONT_EXTRA_INDEX);
1779 CONSP (extra); extra = XCDR (extra))
1780 {
1781 Lisp_Object key, val;
1782
1783 tmp = XCAR (extra);
1784 key = XCAR (tmp), val = XCDR (tmp);
1785 if (EQ (key, QClang))
1786 {
1787 if (! langarray)
1788 langarray = CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks);
1789 if (! langarray)
1790 goto err;
1791 if (SYMBOLP (val))
1792 val = list1 (val);
1793 for (; CONSP (val); val = XCDR (val))
1794 if (SYMBOLP (XCAR (val)))
1795 {
1796 CFStringRef lang =
1797 cfstring_create_with_string_noencode (SYMBOL_NAME
1798 (XCAR (val)));
1799
1800 if (lang == NULL)
1801 goto err;
1802 CFArrayAppendValue (langarray, lang);
1803 CFRelease (lang);
1804 }
1805 }
1806 else if (EQ (key, QCotf))
1807 {
1808 otspec = macfont_get_open_type_spec (val);
1809 if (! otspec)
1810 goto err;
1811 script = otspec->script;
1812 }
1813 else if (EQ (key, QCscript))
1814 script = val;
1815 }
1816
1817 if (! NILP (script) && ! charset)
1818 {
1819 Lisp_Object chars = assq_no_quit (script, Vscript_representative_chars);
1820
1821 if (CONSP (chars) && CONSP (CDR (chars)))
1822 {
1823 CFMutableStringRef string = CFStringCreateMutable (NULL, 0);
1824 CFMutableCharacterSetRef cs = CFCharacterSetCreateMutable (NULL);
1825
1826 if (! string || !cs)
1827 {
1828 if (string)
1829 CFRelease (string);
1830 else if (cs)
1831 CFRelease (cs);
1832 goto err;
1833 }
1834 for (chars = XCDR (chars); CONSP (chars); chars = XCDR (chars))
1835 if (CHARACTERP (XCAR (chars)))
1836 {
1837 UniChar unichars[2];
1838 CFIndex count =
1839 macfont_store_utf32char_to_unichars (XFASTINT (XCAR (chars)),
1840 unichars);
1841 CFRange range = CFRangeMake (XFASTINT (XCAR (chars)), 1);
1842
1843 CFStringAppendCharacters (string, unichars, count);
1844 CFCharacterSetAddCharactersInRange (cs, range);
1845 }
1846 charset = cs;
1847 /* CFCharacterSetCreateWithCharactersInString does not
1848 handle surrogate pairs properly as of Mac OS X 10.5. */
1849 charset_string = string;
1850 }
1851 }
1852
1853 attributes = CFDictionaryCreateMutable (NULL, 0,
1854 &kCFTypeDictionaryKeyCallBacks,
1855 &kCFTypeDictionaryValueCallBacks);
1856 if (! attributes)
1857 goto err;
1858
1859 tmp = AREF (spec, FONT_FAMILY_INDEX);
1860 if (SYMBOLP (tmp) && ! NILP (tmp))
1861 {
1862 CFStringRef family = macfont_create_family_with_symbol (tmp);
1863
1864 if (! family)
1865 goto err;
1866 CFDictionaryAddValue (attributes, MAC_FONT_FAMILY_NAME_ATTRIBUTE,
1867 family);
1868 CFRelease (family);
1869 }
1870
1871 traits = CFDictionaryCreateMutable (NULL, 4,
1872 &kCFTypeDictionaryKeyCallBacks,
1873 &kCFTypeDictionaryValueCallBacks);
1874 if (! traits)
1875 goto err;
1876
1877 for (i = 0; i < sizeof (numeric_traits) / sizeof (numeric_traits[0]); i++)
1878 {
1879 tmp = AREF (spec, numeric_traits[i].index);
1880 if (INTEGERP (tmp))
1881 {
1882 CGPoint *point = numeric_traits[i].points;
1883 CGFloat floatval = (XINT (tmp) >> 8); // XXX
1884 CFNumberRef num;
1885
1886 while (point->y < floatval)
1887 point++;
1888 if (point == numeric_traits[i].points)
1889 point++;
1890 else if (point->y == CGFLOAT_MAX)
1891 point--;
1892 floatval = (point - 1)->x + ((floatval - (point - 1)->y)
1893 * ((point->x - (point - 1)->x)
1894 / (point->y - (point - 1)->y)));
1895 if (floatval > 1.0)
1896 floatval = 1.0;
1897 else if (floatval < -1.0)
1898 floatval = -1.0;
1899 num = CFNumberCreate (NULL, kCFNumberCGFloatType, &floatval);
1900 if (! num)
1901 goto err;
1902 CFDictionaryAddValue (traits, numeric_traits[i].trait, num);
1903 CFRelease (num);
1904 }
1905 }
1906 if (CFDictionaryGetCount (traits))
1907 CFDictionaryAddValue (attributes, MAC_FONT_TRAITS_ATTRIBUTE, traits);
1908
1909 if (charset)
1910 CFDictionaryAddValue (attributes, MAC_FONT_CHARACTER_SET_ATTRIBUTE,
1911 charset);
1912 if (charset_string)
1913 CFDictionaryAddValue (attributes, MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE,
1914 charset_string);
1915 if (langarray)
1916 CFDictionaryAddValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE, langarray);
1917
1918 goto finish;
1919
1920 err:
1921 if (attributes)
1922 {
1923 CFRelease (attributes);
1924 attributes = NULL;
1925 }
1926
1927 finish:
1928 if (langarray) CFRelease (langarray);
1929 if (charset && cf_charset_idx < 0) CFRelease (charset);
1930 if (charset_string && cf_charset_idx < 0) CFRelease (charset_string);
1931 if (traits) CFRelease (traits);
1932 if (otspec)
1933 {
1934 if (otspec->nfeatures[0] > 0)
1935 free (otspec->features[0]);
1936 if (otspec->nfeatures[1] > 0)
1937 free (otspec->features[1]);
1938 free (otspec);
1939 }
1940
1941 return attributes;
1942}
1943
1944static Boolean
1945macfont_supports_charset_and_languages_p (FontDescriptorRef desc,
1946 CFCharacterSetRef charset,
1947 Lisp_Object chars,
1948 CFArrayRef languages)
1949{
1950 Boolean result = true;
1951
1952 if (charset || VECTORP (chars))
1953 {
1954 CFCharacterSetRef desc_charset =
1955 mac_font_descriptor_copy_attribute (desc,
1956 MAC_FONT_CHARACTER_SET_ATTRIBUTE);
1957
1958 if (desc_charset == NULL)
1959 result = false;
1960 else
1961 {
1962 if (charset)
1963 result = CFCharacterSetIsSupersetOfSet (desc_charset, charset);
1964 else /* VECTORP (chars) */
1965 {
1966 ptrdiff_t j;
1967
1968 for (j = 0; j < ASIZE (chars); j++)
1969 if (TYPE_RANGED_INTEGERP (UTF32Char, AREF (chars, j))
1970 && CFCharacterSetIsLongCharacterMember (desc_charset,
1971 XFASTINT (AREF (chars, j))))
1972 break;
1973 if (j == ASIZE (chars))
1974 result = false;
1975 }
1976 CFRelease (desc_charset);
1977 }
1978 }
1979 if (result && languages)
1980 result = mac_font_descriptor_supports_languages (desc, languages);
1981
1982 return result;
1983}
1984
1985static CFIndex
1986macfont_closest_traits_index (CFArrayRef traits_array,
1987 FontSymbolicTraits target)
1988{
1989 CFIndex i, result = -1, count = CFArrayGetCount (traits_array);
1990 int min_distance = (1 << 3);
1991
1992 for (i = 0; i < count; i++)
1993 {
1994 FontSymbolicTraits traits, diff;
1995 int distance = 0;
1996
1997 traits = ((FontSymbolicTraits) (uintptr_t)
1998 CFArrayGetValueAtIndex (traits_array, i));
1999 diff = (target ^ traits);
2000 /* We prefer synthetic bold of italic to synthetic italic of
2001 bold when both bold and italic are available but bold-italic
2002 is not available. */
2003 if (diff & MAC_FONT_TRAIT_BOLD)
2004 distance |= (1 << 0);
2005 if (diff & MAC_FONT_TRAIT_ITALIC)
2006 distance |= (1 << 1);
2007 if (diff & MAC_FONT_TRAIT_MONO_SPACE)
2008 distance |= (1 << 2);
2009 if (distance < min_distance)
2010 {
2011 min_distance = distance;
2012 result = i;
2013 }
2014 }
2015
2016 return result;
2017}
2018
2019static Lisp_Object
2020macfont_list (struct frame *f, Lisp_Object spec)
2021{
2022 Lisp_Object val = Qnil, family, extra;
2023 int i, n;
2024 CFStringRef family_name = NULL;
2025 CFMutableDictionaryRef attributes = NULL, traits;
2026 Lisp_Object chars = Qnil;
2027 int spacing = -1;
2028 FontSymbolicTraits synth_sym_traits = 0;
2029 CFArrayRef families;
2030 CFIndex families_count;
2031 CFCharacterSetRef charset = NULL;
2032 CFArrayRef languages = NULL;
2033
2034 block_input ();
2035
2036 family = AREF (spec, FONT_FAMILY_INDEX);
2037 if (! NILP (family))
2038 {
2039 family_name = macfont_create_family_with_symbol (family);
2040 if (family_name == NULL)
2041 goto finish;
2042 }
2043
2044 attributes = macfont_create_attributes_with_spec (spec);
2045 if (! attributes)
2046 goto finish;
2047
2048 charset = ((CFCharacterSetRef)
2049 CFDictionaryGetValue (attributes,
2050 MAC_FONT_CHARACTER_SET_ATTRIBUTE));
2051 if (charset)
2052 {
2053 CFRetain (charset);
2054 CFDictionaryRemoveValue (attributes, MAC_FONT_CHARACTER_SET_ATTRIBUTE);
2055 }
2056 else
2057 {
2058 val = assq_no_quit (QCscript, AREF (spec, FONT_EXTRA_INDEX));
2059 if (! NILP (val))
2060 {
2061 val = assq_no_quit (XCDR (val), Vscript_representative_chars);
2062 if (CONSP (val) && VECTORP (XCDR (val)))
2063 chars = XCDR (val);
2064 }
2065 val = Qnil;
2066 }
2067
2068 languages = ((CFArrayRef)
2069 CFDictionaryGetValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE));
2070 if (languages)
2071 {
2072 CFRetain (languages);
2073 CFDictionaryRemoveValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE);
2074 }
2075
2076 if (INTEGERP (AREF (spec, FONT_SPACING_INDEX)))
2077 spacing = XINT (AREF (spec, FONT_SPACING_INDEX));
2078
2079 traits = ((CFMutableDictionaryRef)
2080 CFDictionaryGetValue (attributes, MAC_FONT_TRAITS_ATTRIBUTE));
2081
2082 n = FONT_SLANT_NUMERIC (spec);
2083 if (n < 0 || n == FONT_SLANT_SYNTHETIC_ITALIC)
2084 {
2085 synth_sym_traits |= MAC_FONT_TRAIT_ITALIC;
2086 if (traits)
2087 CFDictionaryRemoveValue (traits, MAC_FONT_SLANT_TRAIT);
2088 }
2089
2090 n = FONT_WEIGHT_NUMERIC (spec);
2091 if (n < 0 || n == FONT_WEIGHT_SYNTHETIC_BOLD)
2092 {
2093 synth_sym_traits |= MAC_FONT_TRAIT_BOLD;
2094 if (traits)
2095 CFDictionaryRemoveValue (traits, MAC_FONT_WEIGHT_TRAIT);
2096 }
2097
2098 if (languages
2099 && (spacing < 0 || spacing == FONT_SPACING_SYNTHETIC_MONO))
2100 {
2101 CFStringRef language = CFArrayGetValueAtIndex (languages, 0);
2102
2103 if (CFStringHasPrefix (language, CFSTR ("ja"))
2104 || CFStringHasPrefix (language, CFSTR ("ko"))
2105 || CFStringHasPrefix (language, CFSTR ("zh")))
2106 synth_sym_traits |= MAC_FONT_TRAIT_MONO_SPACE;
2107 }
2108
2109 /* Create array of families. */
2110 if (family_name)
2111 families = CFArrayCreate (NULL, (const void **) &family_name,
2112 1, &kCFTypeArrayCallBacks);
2113 else
2114 {
2115 CFStringRef pref_family;
2116 CFIndex families_count, pref_family_index = -1;
2117
2118 families = mac_font_create_available_families ();
2119 if (families == NULL)
2120 goto err;
2121
2122 families_count = CFArrayGetCount (families);
2123
2124 /* Move preferred family to the front if exists. */
2125 pref_family =
2126 mac_font_create_preferred_family_for_attributes (attributes);
2127 if (pref_family)
2128 {
2129 pref_family_index =
2130 CFArrayGetFirstIndexOfValue (families,
2131 CFRangeMake (0, families_count),
2132 pref_family);
2133 CFRelease (pref_family);
2134 }
2135 if (pref_family_index > 0)
2136 {
2137 CFMutableArrayRef mutable_families =
2138 CFArrayCreateMutable (NULL, families_count, &kCFTypeArrayCallBacks);
2139
2140 if (mutable_families)
2141 {
2142 CFArrayAppendValue (mutable_families,
2143 CFArrayGetValueAtIndex (families,
2144 pref_family_index));
2145 CFArrayAppendArray (mutable_families, families,
2146 CFRangeMake (0, pref_family_index));
2147 if (pref_family_index + 1 < families_count)
2148 CFArrayAppendArray (mutable_families, families,
2149 CFRangeMake (pref_family_index + 1,
2150 families_count
2151 - (pref_family_index + 1)));
2152 CFRelease (families);
2153 families = mutable_families;
2154 }
2155 }
2156 }
2157
2158 val = Qnil;
2159 extra = AREF (spec, FONT_EXTRA_INDEX);
2160 families_count = CFArrayGetCount (families);
2161 for (i = 0; i < families_count; i++)
2162 {
2163 CFStringRef family_name = CFArrayGetValueAtIndex (families, i);
2164 FontDescriptorRef pat_desc;
2165 CFArrayRef descs;
2166 CFIndex descs_count;
2167 CFMutableArrayRef filtered_descs, traits_array;
2168 Lisp_Object entity;
2169 int j;
2170
2171 CFDictionarySetValue (attributes, MAC_FONT_FAMILY_NAME_ATTRIBUTE,
2172 family_name);
2173 pat_desc = mac_font_descriptor_create_with_attributes (attributes);
2174 if (! pat_desc)
2175 goto err;
2176
2177 /* CTFontDescriptorCreateMatchingFontDescriptors on Mac OS X
2178 10.7 returns NULL if pat_desc represents the LastResort font.
2179 So we use CTFontDescriptorCreateMatchingFontDescriptor (no
2180 trailing "s") for such a font. */
2181 if (CFStringCompare (family_name, CFSTR ("LastResort"), 0)
2182 != kCFCompareEqualTo)
2183 descs = mac_font_descriptor_create_matching_font_descriptors (pat_desc,
2184 NULL);
2185 else
2186 {
2187 FontDescriptorRef lr_desc =
2188 mac_font_descriptor_create_matching_font_descriptor (pat_desc,
2189 NULL);
2190 if (lr_desc)
2191 {
2192 descs = CFArrayCreate (NULL, (const void **) &lr_desc, 1,
2193 &kCFTypeArrayCallBacks);
2194 CFRelease (lr_desc);
2195 }
2196 else
2197 descs = NULL;
2198 }
2199 CFRelease (pat_desc);
2200 if (! descs)
2201 goto err;
2202
2203 descs_count = CFArrayGetCount (descs);
2204 if (descs_count == 0
2205 || !macfont_supports_charset_and_languages_p (CFArrayGetValueAtIndex (descs, 0),
2206 charset, chars,
2207 languages))
2208 {
2209 CFRelease (descs);
2210 continue;
2211 }
2212
2213 filtered_descs =
2214 CFArrayCreateMutable (NULL, descs_count, &kCFTypeArrayCallBacks);
2215 traits_array = CFArrayCreateMutable (NULL, descs_count, NULL);
2216 for (j = 0; j < descs_count; j++)
2217 {
2218 FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, j);
2219 CFDictionaryRef dict;
2220 CFNumberRef num;
2221 FontSymbolicTraits sym_traits;
2222
2223 dict = mac_font_descriptor_copy_attribute (desc,
2224 MAC_FONT_TRAITS_ATTRIBUTE);
2225 if (dict == NULL)
2226 continue;
2227
2228 num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT);
2229 CFRelease (dict);
2230 if (num == NULL
2231 || !cfnumber_get_font_symbolic_traits_value (num, &sym_traits))
2232 continue;
2233
2234 if (spacing >= 0
2235 && !(synth_sym_traits & MAC_FONT_TRAIT_MONO_SPACE)
2236 && (((sym_traits & MAC_FONT_TRAIT_MONO_SPACE) != 0)
2237 != (spacing >= FONT_SPACING_MONO)))
2238 continue;
2239
2240 /* Don't use a color bitmap font unless its family is
2241 explicitly specified. */
2242 if ((sym_traits & MAC_FONT_TRAIT_COLOR_GLYPHS) && NILP (family))
2243 continue;
2244
2245 if (j > 0
2246 && !macfont_supports_charset_and_languages_p (desc, charset,
2247 chars, languages))
2248 continue;
2249
2250 CFArrayAppendValue (filtered_descs, desc);
2251 CFArrayAppendValue (traits_array,
2252 (const void *) (uintptr_t) sym_traits);
2253 }
2254
2255 CFRelease (descs);
2256 descs = filtered_descs;
2257 descs_count = CFArrayGetCount (descs);
2258
2259 for (j = 0; j < descs_count; j++)
2260 {
2261 FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, j);
2262 FontSymbolicTraits sym_traits =
2263 ((FontSymbolicTraits) (uintptr_t)
2264 CFArrayGetValueAtIndex (traits_array, j));
2265 FontSymbolicTraits mask_min, mask_max, imask, bmask, mmask;
2266
2267 mask_min = ((synth_sym_traits ^ sym_traits)
2268 & (MAC_FONT_TRAIT_ITALIC | MAC_FONT_TRAIT_BOLD));
2269 if (FONT_SLANT_NUMERIC (spec) < 0)
2270 mask_min &= ~MAC_FONT_TRAIT_ITALIC;
2271 if (FONT_WEIGHT_NUMERIC (spec) < 0)
2272 mask_min &= ~MAC_FONT_TRAIT_BOLD;
2273
2274 mask_max = (synth_sym_traits & ~sym_traits);
2275 /* Synthetic bold does not work for bitmap-only fonts on Mac
2276 OS X 10.6. */
2277 if ((mask_min ^ mask_max) & MAC_FONT_TRAIT_BOLD)
2278 {
2279 CFNumberRef format =
2280 mac_font_descriptor_copy_attribute (desc,
2281 MAC_FONT_FORMAT_ATTRIBUTE);
2282
2283 if (format)
2284 {
2285 uint32_t format_val;
2286
2287 if (CFNumberGetValue (format, kCFNumberSInt32Type,
2288 &format_val)
2289 && format_val == MAC_FONT_FORMAT_BITMAP)
2290 mask_max &= ~MAC_FONT_TRAIT_BOLD;
2291 }
2292 }
2293 if (spacing >= 0)
2294 mask_min |= (mask_max & MAC_FONT_TRAIT_MONO_SPACE);
2295
2296 for (mmask = (mask_min & MAC_FONT_TRAIT_MONO_SPACE);
2297 mmask <= (mask_max & MAC_FONT_TRAIT_MONO_SPACE);
2298 mmask += MAC_FONT_TRAIT_MONO_SPACE)
2299 for (bmask = (mask_min & MAC_FONT_TRAIT_BOLD);
2300 bmask <= (mask_max & MAC_FONT_TRAIT_BOLD);
2301 bmask += MAC_FONT_TRAIT_BOLD)
2302 for (imask = (mask_min & MAC_FONT_TRAIT_ITALIC);
2303 imask <= (mask_max & MAC_FONT_TRAIT_ITALIC);
2304 imask += MAC_FONT_TRAIT_ITALIC)
2305 {
2306 FontSymbolicTraits synth = (imask | bmask | mmask);
2307
2308 if (synth == 0
2309 || j == macfont_closest_traits_index (traits_array,
2310 (sym_traits | synth)))
2311 {
2312 entity = macfont_descriptor_entity (desc, extra, synth);
2313 if (! NILP (entity))
2314 val = Fcons (entity, val);
2315 }
2316 }
2317 }
2318
2319 CFRelease (traits_array);
2320 CFRelease (descs);
2321 }
2322
2323 CFRelease (families);
2324 val = Fnreverse (val);
2325 goto finish;
2326 err:
2327 val = Qnil;
2328
2329 finish:
2330 FONT_ADD_LOG ("macfont-list", spec, val);
2331 if (charset) CFRelease (charset);
2332 if (languages) CFRelease (languages);
2333 if (attributes) CFRelease (attributes);
2334 if (family_name) CFRelease (family_name);
2335
2336 unblock_input ();
2337
2338 return val;
2339}
2340
2341static Lisp_Object
2342macfont_match (struct frame * frame, Lisp_Object spec)
2343{
2344 Lisp_Object entity = Qnil;
2345 CFMutableDictionaryRef attributes;
2346 FontDescriptorRef pat_desc = NULL, desc = NULL;
2347
2348 block_input ();
2349
2350 attributes = macfont_create_attributes_with_spec (spec);
2351 if (attributes)
2352 {
2353 pat_desc = mac_font_descriptor_create_with_attributes (attributes);
2354 CFRelease (attributes);
2355 }
2356 if (pat_desc)
2357 {
2358 desc = mac_font_descriptor_create_matching_font_descriptor (pat_desc,
2359 NULL);
2360 CFRelease (pat_desc);
2361 }
2362 if (desc)
2363 {
2364 entity = macfont_descriptor_entity (desc, AREF (spec, FONT_EXTRA_INDEX),
2365 0);
2366 CFRelease (desc);
2367 }
2368 unblock_input ();
2369
2370 FONT_ADD_LOG ("macfont-match", spec, entity);
2371 return entity;
2372}
2373
2374static Lisp_Object
2375macfont_list_family (struct frame *frame)
2376{
2377 Lisp_Object list = Qnil;
2378 CFArrayRef families;
2379
2380 block_input ();
2381
2382 families = mac_font_create_available_families ();
2383 if (families)
2384 {
2385 CFIndex i, count = CFArrayGetCount (families);
2386
2387 for (i = 0; i < count; i++)
2388 list = Fcons (macfont_intern_prop_cfstring (CFArrayGetValueAtIndex (families, i)), list);
2389 CFRelease (families);
2390 }
2391
2392 unblock_input ();
2393
2394 return list;
2395}
2396
2397static void
2398macfont_free_entity (Lisp_Object entity)
2399{
2400 Lisp_Object val = assq_no_quit (QCfont_entity,
2401 AREF (entity, FONT_EXTRA_INDEX));
2402 CFStringRef name = XSAVE_POINTER (XCDR (val), 0);
2403
2404 block_input ();
2405 CFRelease (name);
2406 unblock_input ();
2407}
2408
2409static Lisp_Object
2410macfont_open (struct frame * f, Lisp_Object entity, int pixel_size)
2411{
2412 Lisp_Object val, font_object;
2413 CFStringRef font_name;
2414 struct macfont_info *macfont_info = NULL;
2415 struct font *font;
2416 int size;
2417 FontRef macfont;
2418 FontSymbolicTraits sym_traits;
2419 char name[256];
2420 int len, i, total_width;
2421 CGGlyph glyph;
2422 CGFloat ascent, descent, leading;
2423
2424 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX));
2425 if (! CONSP (val)
2426 || XTYPE (XCDR (val)) != Lisp_Misc
2427 || XMISCTYPE (XCDR (val)) != Lisp_Misc_Save_Value)
2428 return Qnil;
2429 font_name = XSAVE_POINTER (XCDR (val), 0);
2430 sym_traits = XSAVE_INTEGER (XCDR (val), 1);
2431
2432 size = XINT (AREF (entity, FONT_SIZE_INDEX));
2433 if (size == 0)
2434 size = pixel_size;
2435
2436 block_input ();
2437 macfont = mac_font_create_with_name (font_name, size);
2438 if (macfont)
2439 {
2440 int fontsize = (int) [((NSFont *) macfont) pointSize];
2441 if (fontsize != size) size = fontsize;
2442 }
2443 unblock_input ();
2444 if (! macfont)
2445 return Qnil;
2446
2447 font_object = font_make_object (VECSIZE (struct macfont_info), entity, size);
2448 ASET (font_object, FONT_TYPE_INDEX, macfont_driver.type);
2449 len = font_unparse_xlfd (entity, size, name, 256);
2450 if (len > 0)
2451 ASET (font_object, FONT_NAME_INDEX, make_string (name, len));
2452 len = font_unparse_fcname (entity, size, name, 256);
2453 if (len > 0)
2454 ASET (font_object, FONT_FULLNAME_INDEX, make_string (name, len));
2455 else
2456 ASET (font_object, FONT_FULLNAME_INDEX,
2457 AREF (font_object, FONT_NAME_INDEX));
2458 font = XFONT_OBJECT (font_object);
2459 font->pixel_size = size;
2460 font->driver = &macfont_driver;
2461 font->encoding_charset = font->repertory_charset = -1;
2462
2463 block_input ();
2464
2465 macfont_info = (struct macfont_info *) font;
2466 macfont_info->macfont = macfont;
2467 macfont_info->cgfont = mac_font_copy_graphics_font (macfont);
2468
2469 val = assq_no_quit (QCdestination, AREF (entity, FONT_EXTRA_INDEX));
2470 if (CONSP (val) && EQ (XCDR (val), make_number (1)))
2471 macfont_info->screen_font = mac_screen_font_create_with_name (font_name,
2472 size);
2473 else
2474 macfont_info->screen_font = NULL;
2475 macfont_info->cache = macfont_lookup_cache (font_name);
2476 macfont_retain_cache (macfont_info->cache);
2477 macfont_info->metrics = NULL;
2478 macfont_info->metrics_nrows = 0;
2479 macfont_info->synthetic_italic_p = 0;
2480 macfont_info->synthetic_bold_p = 0;
2481 macfont_info->spacing = MACFONT_SPACING_PROPORTIONAL;
2482 macfont_info->antialias = MACFONT_ANTIALIAS_DEFAULT;
2483 if (!(sym_traits & MAC_FONT_TRAIT_ITALIC)
2484 && FONT_SLANT_NUMERIC (entity) == FONT_SLANT_SYNTHETIC_ITALIC)
2485 macfont_info->synthetic_italic_p = 1;
2486 if (!(sym_traits & MAC_FONT_TRAIT_BOLD)
2487 && FONT_WEIGHT_NUMERIC (entity) == FONT_WEIGHT_SYNTHETIC_BOLD)
2488 macfont_info->synthetic_bold_p = 1;
2489 if (sym_traits & MAC_FONT_TRAIT_MONO_SPACE)
2490 macfont_info->spacing = MACFONT_SPACING_MONO;
2491 else if (INTEGERP (AREF (entity, FONT_SPACING_INDEX))
2492 && (XINT (AREF (entity, FONT_SPACING_INDEX))
2493 == FONT_SPACING_SYNTHETIC_MONO))
2494 macfont_info->spacing = MACFONT_SPACING_SYNTHETIC_MONO;
2495 if (macfont_info->synthetic_italic_p || macfont_info->synthetic_bold_p)
2496 macfont_info->antialias = MACFONT_ANTIALIAS_ON;
2497 else
2498 {
2499 val = assq_no_quit (QCantialias, AREF (entity, FONT_EXTRA_INDEX));
2500 if (CONSP (val))
2501 macfont_info->antialias =
2502 NILP (XCDR (val)) ? MACFONT_ANTIALIAS_OFF : MACFONT_ANTIALIAS_ON;
2503 }
2504 macfont_info->color_bitmap_p = 0;
2505 if (sym_traits & MAC_FONT_TRAIT_COLOR_GLYPHS)
2506 macfont_info->color_bitmap_p = 1;
2507
2508 glyph = macfont_get_glyph_for_character (font, ' ');
2509 if (glyph != kCGFontIndexInvalid)
2510 font->space_width = macfont_glyph_extents (font, glyph, NULL, NULL, 0);
2511 else
2512 /* dirty workaround */
2513 font->space_width = pixel_size;
2514
2515 total_width = font->space_width;
2516 for (i = 1; i < 95; i++)
2517 {
2518 glyph = macfont_get_glyph_for_character (font, ' ' + i);
2519 if (glyph == kCGFontIndexInvalid)
2520 break;
2521 total_width += macfont_glyph_extents (font, glyph, NULL, NULL, 0);
2522 }
2523 if (i == 95)
2524 font->average_width = total_width / 95;
2525 else
2526 font->average_width = font->space_width; /* XXX */
2527
2528 if (!(macfont_info->screen_font
2529 && mac_screen_font_get_metrics (macfont_info->screen_font,
2530 &ascent, &descent, &leading)))
2531 {
2532 CFStringRef family_name;
2533
2534 ascent = mac_font_get_ascent (macfont);
2535 descent = mac_font_get_descent (macfont);
2536 leading = mac_font_get_leading (macfont);
2537 /* AppKit and WebKit do some adjustment to the heights of
2538 Courier, Helvetica, and Times. */
2539 family_name = mac_font_copy_family_name (macfont);
2540 if (family_name)
2541 {
2542 if ((CFStringCompare (family_name, CFSTR ("Courier"), 0)
2543 == kCFCompareEqualTo)
2544 || (CFStringCompare (family_name, CFSTR ("Helvetica"), 0)
2545 == kCFCompareEqualTo)
2546 || (CFStringCompare (family_name, CFSTR ("Times"), 0)
2547 == kCFCompareEqualTo))
2548 ascent += (ascent + descent) * .15f;
2549 else if (CFStringHasPrefix (family_name, CFSTR ("Hiragino")))
2550 {
2551 leading *= .25f;
2552 ascent += leading;
2553 }
2554 CFRelease (family_name);
2555 }
2556 }
2557 font->ascent = ascent + 0.5f;
2558 val = assq_no_quit (QCminspace, AREF (entity, FONT_EXTRA_INDEX));
2559 if (CONSP (val) && !NILP (XCDR (val)))
2560 font->descent = descent + 0.5f;
2561 else
2562 font->descent = descent + leading + 0.5f;
2563 font->height = font->ascent + font->descent;
2564
2565 font->underline_position = - mac_font_get_underline_position (macfont) + 0.5f;
2566 font->underline_thickness = mac_font_get_underline_thickness (macfont) + 0.5f;
2567
2568 unblock_input ();
2569
2570 /* Unfortunately Xft doesn't provide a way to get minimum char
2571 width. So, we use space_width instead. */
2572 font->min_width = font->max_width = font->space_width; /* XXX */
2573
2574 font->baseline_offset = 0;
2575 font->relative_compose = 0;
2576 font->default_ascent = 0;
2577 font->vertical_centering = 0;
2578
2579 return font_object;
2580}
2581
2582static void
2583macfont_close (struct frame * f, struct font *font)
2584{
2585 struct macfont_info *macfont_info = (struct macfont_info *) font;
2586 int i;
2587
2588 block_input ();
2589 CFRelease (macfont_info->macfont);
2590 CGFontRelease (macfont_info->cgfont);
2591 if (macfont_info->screen_font)
2592 CFRelease (macfont_info->screen_font);
2593 macfont_release_cache (macfont_info->cache);
2594 for (i = 0; i < macfont_info->metrics_nrows; i++)
2595 if (macfont_info->metrics[i])
2596 xfree (macfont_info->metrics[i]);
2597 if (macfont_info->metrics)
2598 xfree (macfont_info->metrics);
2599 unblock_input ();
2600}
2601
2602static int
2603macfont_has_char (Lisp_Object font, int c)
2604{
2605 int result;
2606 CFCharacterSetRef charset;
2607
2608 block_input ();
2609 if (FONT_ENTITY_P (font))
2610 {
2611 Lisp_Object val;
2612 CFStringRef name;
2613
2614 val = assq_no_quit (QCfont_entity, AREF (font, FONT_EXTRA_INDEX));
2615 val = XCDR (val);
2616 name = XSAVE_POINTER (val, 0);
2617 charset = macfont_get_cf_charset_for_name (name);
2618 }
2619 else
2620 charset = macfont_get_cf_charset (XFONT_OBJECT (font));
2621
2622 result = CFCharacterSetIsLongCharacterMember (charset, c);
2623 unblock_input ();
2624
2625 return result;
2626}
2627
2628static unsigned
2629macfont_encode_char (struct font *font, int c)
2630{
2631 struct macfont_info *macfont_info = (struct macfont_info *) font;
2632 CGGlyph glyph;
2633
2634 block_input ();
2635 glyph = macfont_get_glyph_for_character (font, c);
2636 unblock_input ();
2637
2638 return glyph != kCGFontIndexInvalid ? glyph : FONT_INVALID_CODE;
2639}
2640
2641static int
2642macfont_text_extents (struct font *font, unsigned int *code, int nglyphs,
2643 struct font_metrics *metrics)
2644{
2645 int width, i;
2646
2647 block_input ();
2648 width = macfont_glyph_extents (font, code[0], metrics, NULL, 0);
2649 for (i = 1; i < nglyphs; i++)
2650 {
2651 struct font_metrics m;
2652 int w = macfont_glyph_extents (font, code[i], metrics ? &m : NULL,
2653 NULL, 0);
2654
2655 if (metrics)
2656 {
2657 if (width + m.lbearing < metrics->lbearing)
2658 metrics->lbearing = width + m.lbearing;
2659 if (width + m.rbearing > metrics->rbearing)
2660 metrics->rbearing = width + m.rbearing;
2661 if (m.ascent > metrics->ascent)
2662 metrics->ascent = m.ascent;
2663 if (m.descent > metrics->descent)
2664 metrics->descent = m.descent;
2665 }
2666 width += w;
2667 }
2668 unblock_input ();
2669
2670 if (metrics)
2671 metrics->width = width;
2672
2673 return width;
2674}
2675
2676static int
2677macfont_draw (struct glyph_string *s, int from, int to, int x, int y,
2678 bool with_background)
2679{
2680 struct frame * f = s->f;
2681 struct macfont_info *macfont_info = (struct macfont_info *) s->font;
2682 FontRef macfont = macfont_info->macfont;
2683 CGContextRef context;
2684 BOOL isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
2685 int end = isComposite ? s->cmp_to : s->nchars;
2686 int len = end - s->cmp_from;
2687 int i;
2688
2689 block_input ();
2690
2691 context = [[NSGraphicsContext currentContext] graphicsPort];
2692 CGContextSaveGState (context);
2693
2694#if 0
2695 if (s->num_clips > 0)
2696 {
2697 CGRect clips[2];
2698
2699 for (i = 0; i < s->num_clips; i++)
2700 clips[i] = mac_rect_make (f, s->clip[i].left, s->clip[i].top,
2701 s->clip[i].right - s->clip[i].left,
2702 s->clip[i].bottom - s->clip[i].top);
2703 CGContextClipToRects (context, clips, s->num_clips);
2704 }
2705#endif
2706
2707 if (with_background)
2708 {
2709 CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, s);
2710 CGContextFillRect (context,
2711 NSMakeRect (x, y,
2712 s->width, FONT_HEIGHT (s->font)));
2713 }
2714
2715 if (macfont_info->cgfont)
2716 {
2717 CGGlyph *glyphs = alloca (sizeof (CGGlyph) * len);
2718 CGPoint *positions = alloca (sizeof (CGPoint) * len);
2719 CGFloat total_width = 0;
2720 CGFloat font_size = mac_font_get_size (macfont);
2721 CGAffineTransform atfm;
2722 CGFloat advance_delta = 0;
2723 int y_draw = -y-FONT_BASE (s->font);
2724 int no_antialias_p =
2725 (macfont_info->antialias == MACFONT_ANTIALIAS_OFF
2726 || (macfont_info->antialias == MACFONT_ANTIALIAS_DEFAULT
2727 && font_size <= macfont_antialias_threshold));
2728
2729 for (i = 0; i < len; i++)
2730 {
2731 int width;
2732
2733 glyphs[i] = *(s->char2b + s->cmp_from + i);
2734 width = (s->padding_p ? 1
2735 : macfont_glyph_extents (s->font, glyphs[i],
2736 NULL, &advance_delta,
2737 no_antialias_p));
2738 positions[i].x = total_width + advance_delta;
2739 positions[i].y = 0;
2740 total_width += width;
2741 }
2742
2743 CGContextScaleCTM (context, 1, -1);
2744 CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, s);
2745 if (macfont_info->synthetic_italic_p)
2746 atfm = synthetic_italic_atfm;
2747 else
2748 atfm = CGAffineTransformIdentity;
2749 if (macfont_info->synthetic_bold_p)
2750 {
2751 CGContextSetTextDrawingMode (context, kCGTextFillStroke);
2752 CGContextSetLineWidth (context, synthetic_bold_factor * font_size);
2753 CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND (context, s);
2754 }
2755 if (no_antialias_p)
2756 CGContextSetShouldAntialias (context, false);
2757
2758 CGContextSetTextMatrix (context, atfm);
2759 CGContextSetTextPosition (context, x, y_draw);
2760
2761#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
2762 if (macfont_info->color_bitmap_p
2763#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
2764 && CTFontDrawGlyphs != NULL
2765#endif
2766 )
2767 {
2768 if (len > 0)
2769 {
2770 CTFontDrawGlyphs (macfont, glyphs, positions, len, context);
2771 }
2772 }
2773 else
2774#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */
2775 {
2776 CGContextSetFont (context, macfont_info->cgfont);
2777 CGContextSetFontSize (context, font_size);
2778 CGContextShowGlyphsAtPositions (context, glyphs, positions, len);
2779 }
2780 }
2781
2782 CGContextRestoreGState (context);
2783
2784 unblock_input ();
2785
2786 return len;
2787}
2788
2789Lisp_Object
2790macfont_shape (Lisp_Object lgstring)
2791{
2792 struct font *font;
2793 struct macfont_info *macfont_info;
2794 FontRef macfont;
2795 ptrdiff_t glyph_len, len, i, j;
2796 CFIndex nonbmp_len;
2797 UniChar *unichars;
2798 CFIndex *nonbmp_indices;
2799 CFStringRef string;
2800 CFIndex used = 0;
2801 struct mac_glyph_layout *glyph_layouts;
2802
2803 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
2804 macfont_info = (struct macfont_info *) font;
2805 macfont = macfont_info->macfont;
2806
2807 glyph_len = LGSTRING_GLYPH_LEN (lgstring);
2808 nonbmp_len = 0;
2809 for (i = 0; i < glyph_len; i++)
2810 {
2811 Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i);
2812
2813 if (NILP (lglyph))
2814 break;
2815 if (LGLYPH_CHAR (lglyph) >= 0x10000)
2816 nonbmp_len++;
2817 }
2818
2819 len = i;
2820 assume (len <= TYPE_MAXIMUM (EMACS_INT) - 2);
2821
2822 if (INT_MAX / 2 < len)
2823 memory_full (SIZE_MAX);
2824
2825 unichars = alloca (sizeof (UniChar) * (len + nonbmp_len));
2826 nonbmp_indices = alloca (sizeof (CFIndex) * (nonbmp_len + 1));
2827 for (i = j = 0; i < len; i++)
2828 {
2829 UTF32Char c = LGLYPH_CHAR (LGSTRING_GLYPH (lgstring, i));
2830
2831 if (macfont_store_utf32char_to_unichars (c, unichars + i + j) > 1)
2832 {
2833 nonbmp_indices[j] = i + j;
2834 j++;
2835 }
2836 }
2837 nonbmp_indices[j] = len + j; /* sentinel */
2838
2839 block_input ();
2840
2841 string = CFStringCreateWithCharactersNoCopy (NULL, unichars, len + nonbmp_len,
2842 kCFAllocatorNull);
2843 if (string)
2844 {
2845 glyph_layouts = alloca (sizeof (struct mac_glyph_layout) * glyph_len);
2846 if (macfont_info->screen_font)
2847 used = mac_screen_font_shape (macfont_info->screen_font, string,
2848 glyph_layouts, glyph_len);
2849 else
2850 used = mac_font_shape (macfont, string, glyph_layouts, glyph_len);
2851 CFRelease (string);
2852 }
2853
2854 unblock_input ();
2855
2856 if (used == 0)
2857 return Qnil;
2858
2859 block_input ();
2860
2861 for (i = 0; i < used; i++)
2862 {
2863 Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i);
2864 struct mac_glyph_layout *gl = glyph_layouts + i;
2865 EMACS_INT from, to;
2866 struct font_metrics metrics;
2867 int xoff, yoff, wadjust;
2868
2869 if (NILP (lglyph))
2870 {
2871 lglyph = Fmake_vector (make_number (LGLYPH_SIZE), Qnil);
2872 LGSTRING_SET_GLYPH (lgstring, i, lglyph);
2873 }
2874
2875 from = gl->comp_range.location;
2876 /* Convert UTF-16 index to UTF-32. */
2877 j = 0;
2878 while (nonbmp_indices[j] < from)
2879 j++;
2880 from -= j;
2881 LGLYPH_SET_FROM (lglyph, from);
2882
2883 to = gl->comp_range.location + gl->comp_range.length;
2884 /* Convert UTF-16 index to UTF-32. */
2885 while (nonbmp_indices[j] < to)
2886 j++;
2887 to -= j;
2888 LGLYPH_SET_TO (lglyph, to - 1);
2889
2890 /* LGLYPH_CHAR is used in `describe-char' for checking whether
2891 the composition is trivial. */
2892 {
2893 UTF32Char c;
2894
2895 if (unichars[gl->string_index] >= 0xD800
2896 && unichars[gl->string_index] < 0xDC00)
2897 c = (((unichars[gl->string_index] - 0xD800) << 10)
2898 + (unichars[gl->string_index + 1] - 0xDC00) + 0x10000);
2899 else
2900 c = unichars[gl->string_index];
2901 if (macfont_get_glyph_for_character (font, c) != gl->glyph_id)
2902 c = 0;
2903 LGLYPH_SET_CHAR (lglyph, c);
2904 }
2905
2906 {
2907 unsigned long cc = gl->glyph_id;
2908 LGLYPH_SET_CODE (lglyph, cc);
2909 }
2910
2911 macfont_glyph_extents (font, gl->glyph_id, &metrics, NULL, 0);
2912 LGLYPH_SET_WIDTH (lglyph, metrics.width);
2913 LGLYPH_SET_LBEARING (lglyph, metrics.lbearing);
2914 LGLYPH_SET_RBEARING (lglyph, metrics.rbearing);
2915 LGLYPH_SET_ASCENT (lglyph, metrics.ascent);
2916 LGLYPH_SET_DESCENT (lglyph, metrics.descent);
2917
2918 xoff = lround (gl->advance_delta);
2919 yoff = lround (- gl->baseline_delta);
2920 wadjust = lround (gl->advance);
2921 if (xoff != 0 || yoff != 0 || wadjust != metrics.width)
2922 {
2923 Lisp_Object vec;
2924
2925 vec = Fmake_vector (make_number (3), Qnil);
2926 ASET (vec, 0, make_number (xoff));
2927 ASET (vec, 1, make_number (yoff));
2928 ASET (vec, 2, make_number (wadjust));
2929 LGLYPH_SET_ADJUSTMENT (lglyph, vec);
2930 }
2931 }
2932
2933 unblock_input ();
2934
2935 return make_number (used);
2936}
2937
2938/* Structures for the UVS subtable (format 14) in the cmap table. */
2939typedef UInt8 UINT24[3];
2940
2941#pragma pack(push, 1)
2942struct variation_selector_record
2943{
2944 UINT24 var_selector;
2945 UInt32 default_uvs_offset, non_default_uvs_offset;
2946};
2947struct uvs_table
2948{
2949 UInt16 format;
2950 UInt32 length, num_var_selector_records;
2951 struct variation_selector_record variation_selector_records[1];
2952};
2953#define SIZEOF_UVS_TABLE_HEADER \
2954 (sizeof (struct uvs_table) - sizeof (struct variation_selector_record))
2955
2956struct unicode_value_range
2957{
2958 UINT24 start_unicode_value;
2959 UInt8 additional_count;
2960};
2961struct default_uvs_table {
2962 UInt32 num_unicode_value_ranges;
2963 struct unicode_value_range unicode_value_ranges[1];
2964};
2965#define SIZEOF_DEFAULT_UVS_TABLE_HEADER \
2966 (sizeof (struct default_uvs_table) - sizeof (struct unicode_value_range))
2967
2968struct uvs_mapping
2969{
2970 UINT24 unicode_value;
2971 UInt16 glyph_id;
2972};
2973struct non_default_uvs_table
2974{
2975 UInt32 num_uvs_mappings;
2976 struct uvs_mapping uvs_mappings[1];
2977};
2978#define SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER \
2979 (sizeof (struct non_default_uvs_table) - sizeof (struct uvs_mapping))
2980#pragma pack(pop)
2981
2982/* Read big endian values. The argument LVAL must be an lvalue. */
2983/* I suppose OSReadBigInt* takes care of unaligned data. At least, we
2984 can find "... = OSReadBigInt32(cdb, 2);" followed by "... =
2985 OSReadBigInt16(cdb, 7);" in a sample code by Apple. */
2986#define BUINT8_VALUE(lval) (*((UInt8 *) &(lval)))
2987#define BUINT16_VALUE(lval) OSReadBigInt16 (&(lval), 0)
2988/* Succeeding one byte should also be accessible. */
2989#define BUINT24_VALUE(lval) (OSReadBigInt32 (&(lval), 0) >> 8)
2990#define BUINT32_VALUE(lval) OSReadBigInt32 (&(lval), 0)
2991
2992/* Return UVS subtable for the specified FONT. If the subtable is not
2993 found or ill-formated, then return NULL. */
2994
2995static CFDataRef
2996mac_font_copy_uvs_table (FontRef font)
2997{
2998 CFDataRef cmap_table, uvs_table = NULL;
2999
3000 cmap_table = mac_font_copy_non_synthetic_table (font, cmapFontTableTag);
3001 if (cmap_table)
3002 {
3003 sfntCMapHeader *cmap = (sfntCMapHeader *) CFDataGetBytePtr (cmap_table);
3004 struct uvs_table *uvs;
3005 struct variation_selector_record *records;
3006 UInt32 cmap_len, ntables, i, uvs_offset, uvs_len, nrecords;
3007
3008#if __LP64__
3009 if (CFDataGetLength (cmap_table) > UINT32_MAX)
3010 goto finish;
3011#endif
3012
3013 cmap_len = CFDataGetLength (cmap_table);
3014 if (sizeof_sfntCMapHeader > cmap_len)
3015 goto finish;
3016
3017 ntables = BUINT16_VALUE (cmap->numTables);
3018 if (ntables > ((cmap_len - sizeof_sfntCMapHeader)
3019 / sizeof_sfntCMapEncoding))
3020 goto finish;
3021
3022 for (i = 0; i < ntables; i++)
3023 if ((BUINT16_VALUE (cmap->encoding[i].platformID)
3024 == kFontUnicodePlatform)
3025 && (BUINT16_VALUE (cmap->encoding[i].scriptID)
3026 == 5)) /* kFontUnicodeV4_0VariationSequenceSemantics */
3027 {
3028 uvs_offset = BUINT32_VALUE (cmap->encoding[i].offset);
3029 break;
3030 }
3031 if (i == ntables
3032 || uvs_offset > cmap_len
3033 || SIZEOF_UVS_TABLE_HEADER > cmap_len - uvs_offset)
3034 goto finish;
3035
3036 uvs = (struct uvs_table *) ((UInt8 *) cmap + uvs_offset);
3037 uvs_len = BUINT32_VALUE (uvs->length);
3038 if (uvs_len > cmap_len - uvs_offset
3039 || SIZEOF_UVS_TABLE_HEADER > uvs_len)
3040 goto finish;
3041
3042 if (BUINT16_VALUE (uvs->format) != 14)
3043 goto finish;
3044
3045 nrecords = BUINT32_VALUE (uvs->num_var_selector_records);
3046 if (nrecords > ((uvs_len - SIZEOF_UVS_TABLE_HEADER)
3047 / sizeof (struct variation_selector_record)))
3048 goto finish;
3049
3050 records = uvs->variation_selector_records;
3051 for (i = 0; i < nrecords; i++)
3052 {
3053 UInt32 default_uvs_offset, non_default_uvs_offset;
3054
3055 default_uvs_offset = BUINT32_VALUE (records[i].default_uvs_offset);
3056 if (default_uvs_offset)
3057 {
3058 struct default_uvs_table *default_uvs;
3059 UInt32 nranges;
3060
3061 if (default_uvs_offset > uvs_len
3062 || (SIZEOF_DEFAULT_UVS_TABLE_HEADER
3063 > uvs_len - default_uvs_offset))
3064 goto finish;
3065
3066 default_uvs = ((struct default_uvs_table *)
3067 ((UInt8 *) uvs + default_uvs_offset));
3068 nranges = BUINT32_VALUE (default_uvs->num_unicode_value_ranges);
3069 if (nranges > ((uvs_len - default_uvs_offset
3070 - SIZEOF_DEFAULT_UVS_TABLE_HEADER)
3071 / sizeof (struct unicode_value_range)))
3072 goto finish;
3073 /* Now 2 * nranges can't overflow, so we can safely use
3074 `(lo + hi) / 2' instead of `lo + (hi - lo) / 2' in
3075 mac_font_get_glyphs_for_variants. */
3076 }
3077
3078 non_default_uvs_offset =
3079 BUINT32_VALUE (records[i].non_default_uvs_offset);
3080 if (non_default_uvs_offset)
3081 {
3082 struct non_default_uvs_table *non_default_uvs;
3083 UInt32 nmappings;
3084
3085 if (non_default_uvs_offset > uvs_len
3086 || (SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER
3087 > uvs_len - non_default_uvs_offset))
3088 goto finish;
3089
3090 non_default_uvs = ((struct non_default_uvs_table *)
3091 ((UInt8 *) uvs + non_default_uvs_offset));
3092 nmappings = BUINT32_VALUE (non_default_uvs->num_uvs_mappings);
3093 if (nmappings > ((uvs_len - non_default_uvs_offset
3094 - SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER)
3095 / sizeof (struct uvs_mapping)))
3096 goto finish;
3097 /* Now 2 * nmappings can't overflow, so we can safely
3098 use `(lo + hi) / 2' instead of `lo + (hi - lo) / 2'
3099 in mac_font_get_glyphs_for_variants. */
3100 }
3101 }
3102
3103 uvs_table = CFDataCreate (NULL, (UInt8 *) uvs, uvs_len);
3104
3105 finish:
3106 CFRelease (cmap_table);
3107 }
3108
3109 return uvs_table;
3110}
3111
3112/* Find an entry in the given UVS subtable UVS_TABLE for a variation
3113 sequence consisting of the given base character C and each
3114 variation selector SELECTORS[i] for 0 <= i < COUNT, and store the
3115 result (explained below) into the corresponding GLYPHS[i]. If the
3116 entry is found in the Default UVS Table, then the result is 0. If
3117 the entry is found in the Non-Default UVS Table, then the result is
3118 the associated glyph ID. Otherwise, kCGFontIndexInvalid. The
3119 elements in SELECTORS must be sorted in strictly increasing
3120 order. */
3121
3122static void
3123mac_font_get_glyphs_for_variants (CFDataRef uvs_table, UTF32Char c,
3124 const UTF32Char selectors[], CGGlyph glyphs[],
3125 CFIndex count)
3126{
3127 struct uvs_table *uvs = (struct uvs_table *) CFDataGetBytePtr (uvs_table);
3128 struct variation_selector_record *records = uvs->variation_selector_records;
3129 CFIndex i;
3130 UInt32 ir, nrecords;
3131#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
3132 dispatch_queue_t queue =
3133 dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
3134 dispatch_group_t group = dispatch_group_create ();
3135#endif
3136
3137 nrecords = BUINT32_VALUE (uvs->num_var_selector_records);
3138 i = 0;
3139 ir = 0;
3140 while (i < count && ir < nrecords)
3141 {
3142 UInt32 default_uvs_offset, non_default_uvs_offset;
3143
3144 if (selectors[i] < BUINT24_VALUE (records[ir].var_selector))
3145 {
3146 glyphs[i++] = kCGFontIndexInvalid;
3147 continue;
3148 }
3149 else if (selectors[i] > BUINT24_VALUE (records[ir].var_selector))
3150 {
3151 ir++;
3152 continue;
3153 }
3154
3155 /* selectors[i] == BUINT24_VALUE (records[ir].var_selector) */
3156 default_uvs_offset = BUINT32_VALUE (records[ir].default_uvs_offset);
3157 non_default_uvs_offset =
3158 BUINT32_VALUE (records[ir].non_default_uvs_offset);
3159#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
3160 dispatch_group_async (group, queue, ^{
3161#endif
3162 glyphs[i] = kCGFontIndexInvalid;
3163
3164 if (default_uvs_offset)
3165 {
3166 struct default_uvs_table *default_uvs =
3167 (struct default_uvs_table *) ((UInt8 *) uvs
3168 + default_uvs_offset);
3169 struct unicode_value_range *ranges =
3170 default_uvs->unicode_value_ranges;
3171 UInt32 lo, hi;
3172
3173 lo = 0;
3174 hi = BUINT32_VALUE (default_uvs->num_unicode_value_ranges);
3175 while (lo < hi)
3176 {
3177 UInt32 mid = (lo + hi) / 2;
3178
3179 if (c < BUINT24_VALUE (ranges[mid].start_unicode_value))
3180 hi = mid;
3181 else
3182 lo = mid + 1;
3183 }
3184 if (hi > 0
3185 && (c <= (BUINT24_VALUE (ranges[hi - 1].start_unicode_value)
3186 + BUINT8_VALUE (ranges[hi - 1].additional_count))))
3187 glyphs[i] = 0;
3188 }
3189
3190 if (glyphs[i] == kCGFontIndexInvalid && non_default_uvs_offset)
3191 {
3192 struct non_default_uvs_table *non_default_uvs =
3193 (struct non_default_uvs_table *) ((UInt8 *) uvs
3194 + non_default_uvs_offset);
3195 struct uvs_mapping *mappings = non_default_uvs->uvs_mappings;
3196 UInt32 lo, hi;
3197
3198 lo = 0;
3199 hi = BUINT32_VALUE (non_default_uvs->num_uvs_mappings);
3200 while (lo < hi)
3201 {
3202 UInt32 mid = (lo + hi) / 2;
3203
3204 if (c < BUINT24_VALUE (mappings[mid].unicode_value))
3205 hi = mid;
3206 else
3207 lo = mid + 1;
3208 }
3209 if (hi > 0 &&
3210 BUINT24_VALUE (mappings[hi - 1].unicode_value) == c)
3211 glyphs[i] = BUINT16_VALUE (mappings[hi - 1].glyph_id);
3212 }
3213#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
3214 });
3215#endif
3216 i++;
3217 ir++;
3218 }
3219 while (i < count)
3220 glyphs[i++] = kCGFontIndexInvalid;
3221#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
3222 dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
3223 dispatch_release (group);
3224#endif
3225}
3226
3227static int
3228macfont_variation_glyphs (struct font *font, int c, unsigned variations[256])
3229{
3230 CFDataRef uvs_table;
3231 CharacterCollection uvs_collection;
3232 int i, n = 0;
3233
3234 block_input ();
3235 uvs_table = macfont_get_uvs_table (font, &uvs_collection);
3236
3237 if (uvs_table)
3238 {
3239 UTF32Char selectors[256];
3240 CGGlyph glyphs[256];
3241
3242 for (i = 0; i < 16; i++)
3243 selectors[i] = 0xFE00 + i;
3244 for (; i < 256; i++)
3245 selectors[i] = 0xE0100 + (i - 16);
3246 mac_font_get_glyphs_for_variants (uvs_table, c, selectors, glyphs, 256);
3247 for (i = 0; i < 256; i++)
3248 {
3249 CGGlyph glyph = glyphs[i];
3250
3251 if (uvs_collection != MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING
3252 && glyph != kCGFontIndexInvalid)
3253 glyph = macfont_get_glyph_for_cid (font, uvs_collection, glyph);
3254 if (glyph == kCGFontIndexInvalid)
3255 variations[i] = 0;
3256 else
3257 {
3258 variations[i] = (glyph ? glyph
3259 : macfont_get_glyph_for_character (font, c));
3260 n++;
3261 }
3262 }
3263 }
3264 unblock_input ();
3265
3266 return n;
3267}
3268
3269static const char *const macfont_booleans[] = {
3270 ":antialias",
3271 ":minspace",
3272 NULL,
3273};
3274
3275static const char *const macfont_non_booleans[] = {
3276 ":lang",
3277 ":script",
3278 ":destination",
3279 NULL,
3280};
3281
3282static void
3283macfont_filter_properties (Lisp_Object font, Lisp_Object alist)
3284{
3285 font_filter_properties (font, alist, macfont_booleans, macfont_non_booleans);
3286}
3287
3288static Boolean
3289mac_ctfont_descriptor_supports_languages (CTFontDescriptorRef descriptor,
3290 CFArrayRef languages)
3291{
3292 Boolean result = true;
3293 CFArrayRef desc_languages =
3294 CTFontDescriptorCopyAttribute (descriptor, kCTFontLanguagesAttribute);
3295
3296 if (desc_languages == NULL)
3297 result = false;
3298 else
3299 {
3300 CFIndex desc_languages_count, i, languages_count;
3301
3302 desc_languages_count = CFArrayGetCount (desc_languages);
3303 languages_count = CFArrayGetCount (languages);
3304 for (i = 0; i < languages_count; i++)
3305 if (!CFArrayContainsValue (desc_languages,
3306 CFRangeMake (0, desc_languages_count),
3307 CFArrayGetValueAtIndex (languages, i)))
3308 {
3309 result = false;
3310 break;
3311 }
3312 CFRelease (desc_languages);
3313 }
3314
3315 return result;
3316}
3317
3318static CFStringRef
3319mac_ctfont_create_preferred_family_for_attributes (CFDictionaryRef attributes)
3320{
3321 CFStringRef result = NULL;
3322 CFStringRef charset_string =
3323 CFDictionaryGetValue (attributes, MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE);
3324 CFIndex length;
3325
3326 if (charset_string
3327 && (length = CFStringGetLength (charset_string)) > 0)
3328 {
3329 CFAttributedStringRef attr_string = NULL;
3330 CTLineRef ctline = NULL;
3331 CFDictionaryRef attrs =
3332 CFDictionaryCreate (NULL, NULL, NULL, 0,
3333 &kCFTypeDictionaryKeyCallBacks,
3334 &kCFTypeDictionaryValueCallBacks);
3335
3336 if (attrs)
3337 {
3338 attr_string = CFAttributedStringCreate (NULL, charset_string, attrs);
3339 CFRelease (attrs);
3340 }
3341 if (attr_string)
3342 {
3343 ctline = CTLineCreateWithAttributedString (attr_string);
3344 CFRelease (attr_string);
3345 }
3346 if (ctline)
3347 {
3348 CFArrayRef runs = CTLineGetGlyphRuns (ctline);
3349 CFIndex i, nruns = CFArrayGetCount (runs);
3350 CTFontRef font;
3351
3352 for (i = 0; i < nruns; i++)
3353 {
3354 CTRunRef run = CFArrayGetValueAtIndex (runs, i);
3355 CFDictionaryRef attributes = CTRunGetAttributes (run);
3356 CTFontRef font_in_run;
3357
3358 if (attributes == NULL)
3359 break;
3360 font_in_run =
3361 CFDictionaryGetValue (attributes, kCTFontAttributeName);
3362 if (font_in_run == NULL)
3363 break;
3364 if (i == 0)
3365 font = font_in_run;
3366 else if (!mac_ctfont_equal_in_postscript_name (font, font_in_run))
3367 break;
3368 }
3369 if (nruns > 0 && i == nruns)
3370 result = CTFontCopyAttribute (font, kCTFontFamilyNameAttribute);
3371 CFRelease (ctline);
3372 }
3373 }
3374
3375 return result;
3376}
3377
3378static inline double
3379mac_ctfont_get_advance_width_for_glyph (CTFontRef font, CGGlyph glyph)
3380{
3381 return CTFontGetAdvancesForGlyphs (font, kCTFontDefaultOrientation,
3382 &glyph, NULL, 1);
3383}
3384
3385static inline CGRect
3386mac_ctfont_get_bounding_rect_for_glyph (CTFontRef font, CGGlyph glyph)
3387{
3388 return CTFontGetBoundingRectsForGlyphs (font, kCTFontDefaultOrientation,
3389 &glyph, NULL, 1);
3390}
3391
3392static CFArrayRef
3393mac_ctfont_create_available_families (void)
3394{
3395 CFMutableArrayRef families = NULL;
3396
3397#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
3398#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
3399 if (CTFontManagerCopyAvailableFontFamilyNames != NULL)
3400#endif
3401 {
3402 CFArrayRef orig_families = CTFontManagerCopyAvailableFontFamilyNames ();
3403
3404 if (orig_families)
3405 {
3406 CFIndex i, count = CFArrayGetCount (orig_families);
3407
3408 families = CFArrayCreateMutable (NULL, count, &kCFTypeArrayCallBacks);
3409 if (families)
3410 for (i = 0; i < count; i++)
3411 {
3412 CFStringRef family = CFArrayGetValueAtIndex (orig_families, i);
3413
3414 if (!CFStringHasPrefix (family, CFSTR ("."))
3415 && (CTFontManagerCompareFontFamilyNames (family,
3416 CFSTR ("LastResort"),
3417 NULL)
3418 != kCFCompareEqualTo))
3419 CFArrayAppendValue (families, family);
3420 }
3421 CFRelease (orig_families);
3422 }
3423 }
3424#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
3425 else /* CTFontManagerCopyAvailableFontFamilyNames == NULL */
3426#endif
3427#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 */
3428#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
3429 {
3430 CTFontCollectionRef collection;
3431 CFArrayRef descs = NULL;
3432
3433 collection = CTFontCollectionCreateFromAvailableFonts (NULL);
3434 if (collection)
3435 {
3436 descs = CTFontCollectionCreateMatchingFontDescriptors (collection);
3437 CFRelease (collection);
3438 }
3439 if (descs)
3440 {
3441 CFIndex i, count = CFArrayGetCount (descs);
3442
3443 families = CFArrayCreateMutable (NULL, count, &kCFTypeArrayCallBacks);
3444 if (families)
3445 for (i = 0; i < count; i++)
3446 {
3447 FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, i);
3448 CFStringRef name =
3449 mac_font_descriptor_copy_attribute (desc,
3450 MAC_FONT_FAMILY_NAME_ATTRIBUTE);
3451
3452 if (name)
3453 {
3454 CFIndex p, limit = CFArrayGetCount (families);
3455
3456 p = CFArrayBSearchValues (families, CFRangeMake (0, limit),
3457 (const void *) name,
3458 mac_font_family_compare, NULL);
3459 if (p >= limit)
3460 CFArrayAppendValue (families, name);
3461 else if (mac_font_family_compare
3462 (CFArrayGetValueAtIndex (families, p),
3463 name, NULL) != kCFCompareEqualTo)
3464 CFArrayInsertValueAtIndex (families, p, name);
3465 CFRelease (name);
3466 }
3467 }
3468 CFRelease (descs);
3469 }
3470 }
3471#endif
3472
3473 return families;
3474}
3475
3476static Boolean
3477mac_ctfont_equal_in_postscript_name (CTFontRef font1, CTFontRef font2)
3478{
3479 Boolean result;
3480 CFStringRef name1, name2;
3481
3482 if (font1 == font2)
3483 return true;
3484
3485 result = false;
3486 name1 = CTFontCopyPostScriptName (font1);
3487 if (name1)
3488 {
3489 name2 = CTFontCopyPostScriptName (font2);
3490 if (name2)
3491 {
3492 result = (CFStringCompare (name1, name2, 0) == kCFCompareEqualTo);
3493 CFRelease (name2);
3494 }
3495 CFRelease (name1);
3496 }
3497
3498 return result;
3499}
3500
3501static CTLineRef
3502mac_ctfont_create_line_with_string_and_font (CFStringRef string,
3503 CTFontRef macfont)
3504{
3505 CFStringRef keys[] = {kCTFontAttributeName, kCTKernAttributeName};
3506 CFTypeRef values[] = {NULL, NULL};
3507 CFDictionaryRef attributes = NULL;
3508 CFAttributedStringRef attr_string = NULL;
3509 CTLineRef ctline = NULL;
3510 float float_zero = 0.0f;
3511
3512 values[0] = macfont;
3513 values[1] = CFNumberCreate (NULL, kCFNumberFloatType, &float_zero);
3514 if (values[1])
3515 {
3516 attributes = CFDictionaryCreate (NULL, (const void **) keys,
3517 (const void **) values,
3518 sizeof (keys) / sizeof (keys[0]),
3519 &kCFTypeDictionaryKeyCallBacks,
3520 &kCFTypeDictionaryValueCallBacks);
3521 CFRelease (values[1]);
3522 }
3523 if (attributes)
3524 {
3525 attr_string = CFAttributedStringCreate (NULL, string, attributes);
3526 CFRelease (attributes);
3527 }
3528 if (attr_string)
3529 {
3530 ctline = CTLineCreateWithAttributedString (attr_string);
3531 CFRelease (attr_string);
3532 }
3533 if (ctline)
3534 {
3535 /* Abandon if ctline contains some fonts other than the
3536 specified one. */
3537 CFArrayRef runs = CTLineGetGlyphRuns (ctline);
3538 CFIndex i, nruns = CFArrayGetCount (runs);
3539
3540 for (i = 0; i < nruns; i++)
3541 {
3542 CTRunRef run = CFArrayGetValueAtIndex (runs, i);
3543 CFDictionaryRef attributes = CTRunGetAttributes (run);
3544 CTFontRef font_in_run;
3545
3546 if (attributes == NULL)
3547 break;
3548 font_in_run =
3549 CFDictionaryGetValue (attributes, kCTFontAttributeName);
3550 if (font_in_run == NULL)
3551 break;
3552 if (!mac_ctfont_equal_in_postscript_name (macfont, font_in_run))
3553 break;
3554 }
3555 if (i < nruns)
3556 {
3557 CFRelease (ctline);
3558 ctline = NULL;
3559 }
3560 }
3561
3562 return ctline;
3563}
3564
3565CFIndex
3566mac_ctfont_shape (CTFontRef font, CFStringRef string,
3567 struct mac_glyph_layout *glyph_layouts, CFIndex glyph_len)
3568{
3569 CFIndex used, result = 0;
3570 CTLineRef ctline = mac_ctfont_create_line_with_string_and_font (string, font);
3571
3572 if (ctline == NULL)
3573 return 0;
3574
3575 used = CTLineGetGlyphCount (ctline);
3576 if (used <= glyph_len)
3577 {
3578 CFArrayRef ctruns = CTLineGetGlyphRuns (ctline);
3579 CFIndex k, ctrun_count = CFArrayGetCount (ctruns);
3580 CGFloat total_advance = 0;
3581 CFIndex total_glyph_count = 0;
3582
3583 for (k = 0; k < ctrun_count; k++)
3584 {
3585 CTRunRef ctrun = CFArrayGetValueAtIndex (ctruns, k);
3586 CFIndex i, min_location, glyph_count = CTRunGetGlyphCount (ctrun);
3587 struct mac_glyph_layout *glbuf = glyph_layouts + total_glyph_count;
3588 CFRange string_range, comp_range, range;
3589 CFIndex *permutation;
3590
3591 if (CTRunGetStatus (ctrun) & kCTRunStatusRightToLeft)
3592 permutation = xmalloc (sizeof (CFIndex) * glyph_count);
3593 else
3594 permutation = NULL;
3595
3596#define RIGHT_TO_LEFT_P permutation
3597
3598 /* Now the `comp_range' member of struct mac_glyph_layout is
3599 temporarily used as a work area such that:
3600 glbuf[i].comp_range.location =
3601 min {compRange[i + 1].location, ...,
3602 compRange[glyph_count - 1].location,
3603 maxRange (stringRangeForCTRun)}
3604 glbuf[i].comp_range.length = maxRange (compRange[i])
3605 where compRange[i] is the range of composed characters
3606 containing i-th glyph. */
3607 string_range = CTRunGetStringRange (ctrun);
3608 min_location = string_range.location + string_range.length;
3609 for (i = 0; i < glyph_count; i++)
3610 {
3611 struct mac_glyph_layout *gl = glbuf + glyph_count - i - 1;
3612 CFIndex glyph_index;
3613 CFRange rng;
3614
3615 if (!RIGHT_TO_LEFT_P)
3616 glyph_index = glyph_count - i - 1;
3617 else
3618 glyph_index = i;
3619 CTRunGetStringIndices (ctrun, CFRangeMake (glyph_index, 1),
3620 &gl->string_index);
3621 rng =
3622 CFStringGetRangeOfComposedCharactersAtIndex (string,
3623 gl->string_index);
3624 gl->comp_range.location = min_location;
3625 gl->comp_range.length = rng.location + rng.length;
3626 if (rng.location < min_location)
3627 min_location = rng.location;
3628 }
3629
3630 /* Fill the `comp_range' member of struct mac_glyph_layout,
3631 and setup a permutation for right-to-left text. */
3632 comp_range = CFRangeMake (string_range.location, 0);
3633 range = CFRangeMake (0, 0);
3634 while (1)
3635 {
3636 struct mac_glyph_layout *gl =
3637 glbuf + range.location + range.length;
3638
3639 if (gl->comp_range.length
3640 > comp_range.location + comp_range.length)
3641 comp_range.length = gl->comp_range.length - comp_range.location;
3642 min_location = gl->comp_range.location;
3643 range.length++;
3644
3645 if (min_location >= comp_range.location + comp_range.length)
3646 {
3647 comp_range.length = min_location - comp_range.location;
3648 for (i = 0; i < range.length; i++)
3649 {
3650 glbuf[range.location + i].comp_range = comp_range;
3651 if (RIGHT_TO_LEFT_P)
3652 permutation[range.location + i] =
3653 range.location + range.length - i - 1;
3654 }
3655
3656 comp_range = CFRangeMake (min_location, 0);
3657 range.location += range.length;
3658 range.length = 0;
3659 if (range.location == glyph_count)
3660 break;
3661 }
3662 }
3663
3664 /* Then fill the remaining members. */
3665 for (range = CFRangeMake (0, 1); range.location < glyph_count;
3666 range.location++)
3667 {
3668 struct mac_glyph_layout *gl;
3669 CGPoint position;
3670
3671 if (!RIGHT_TO_LEFT_P)
3672 gl = glbuf + range.location;
3673 else
3674 {
3675 CFIndex src, dest;
3676
3677 src = glyph_count - 1 - range.location;
3678 dest = permutation[src];
3679 gl = glbuf + dest;
3680 if (src < dest)
3681 {
3682 CFIndex tmp = gl->string_index;
3683
3684 gl->string_index = glbuf[src].string_index;
3685 glbuf[src].string_index = tmp;
3686 }
3687 }
3688 CTRunGetGlyphs (ctrun, range, &gl->glyph_id);
3689
3690 CTRunGetPositions (ctrun, range, &position);
3691 gl->advance_delta = position.x - total_advance;
3692 gl->baseline_delta = position.y;
3693 gl->advance = (gl->advance_delta
3694 + CTRunGetTypographicBounds (ctrun, range,
3695 NULL, NULL, NULL));
3696 total_advance += gl->advance;
3697 }
3698
3699 if (RIGHT_TO_LEFT_P)
3700 xfree (permutation);
3701
3702#undef RIGHT_TO_LEFT_P
3703
3704 total_glyph_count += glyph_count;
3705 }
3706
3707 result = used;
3708 }
3709 CFRelease (ctline);
3710
3711 return result;
3712}
3713
3714/* The function below seems to cause a memory leak for the CFString
3715 created by CFStringCreateWithCharacters as of Mac OS X 10.5.8 and
3716 10.6.3. For now, we use the NSGlyphInfo version instead. */
3717#if USE_CT_GLYPH_INFO
3718CGGlyph
3719mac_ctfont_get_glyph_for_cid (CTFontRef font, CTCharacterCollection collection,
3720 CGFontIndex cid)
3721{
3722 CGGlyph result = kCGFontIndexInvalid;
3723 UniChar characters[] = {0xfffd};
3724 CFStringRef string;
3725 CFAttributedStringRef attr_string = NULL;
3726 CTLineRef ctline = NULL;
3727
3728 string = CFStringCreateWithCharacters (NULL, characters,
3729 sizeof (characters)
3730 / sizeof (characters[0]));
3731 if (string)
3732 {
3733 CTGlyphInfoRef glyph_info =
3734 CTGlyphInfoCreateWithCharacterIdentifier (cid, collection, string);
3735 CFDictionaryRef attributes = NULL;
3736
3737 if (glyph_info)
3738 {
3739 CFStringRef keys[] = {kCTFontAttributeName,
3740 kCTGlyphInfoAttributeName};
3741 CFTypeRef values[] = {font, glyph_info};
3742
3743 attributes = CFDictionaryCreate (NULL, (const void **) keys,
3744 (const void **) values,
3745 sizeof (keys) / sizeof (keys[0]),
3746 &kCFTypeDictionaryKeyCallBacks,
3747 &kCFTypeDictionaryValueCallBacks);
3748 CFRelease (glyph_info);
3749 }
3750 if (attributes)
3751 {
3752 attr_string = CFAttributedStringCreate (NULL, string, attributes);
3753 CFRelease (attributes);
3754 }
3755 CFRelease (string);
3756 }
3757 if (attr_string)
3758 {
3759 ctline = CTLineCreateWithAttributedString (attr_string);
3760 CFRelease (attr_string);
3761 }
3762 if (ctline)
3763 {
3764 CFArrayRef runs = CTLineGetGlyphRuns (ctline);
3765
3766 if (CFArrayGetCount (runs) > 0)
3767 {
3768 CTRunRef run = CFArrayGetValueAtIndex (runs, 0);
3769 CFDictionaryRef attributes = CTRunGetAttributes (run);
3770
3771 if (attributes)
3772 {
3773 CTFontRef font_in_run =
3774 CFDictionaryGetValue (attributes, kCTFontAttributeName);
3775
3776 if (font_in_run
3777 && mac_ctfont_equal_in_postscript_name (font_in_run, font))
3778 {
3779 CTRunGetGlyphs (run, CFRangeMake (0, 1), &result);
3780 if (result >= CTFontGetGlyphCount (font))
3781 result = kCGFontIndexInvalid;
3782 }
3783 }
3784 }
3785 CFRelease (ctline);
3786 }
3787
3788 return result;
3789}
3790#endif
3791
3792#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
3793static inline int
3794mac_font_family_group (CFStringRef family)
3795{
3796 if (CFStringHasPrefix (family, CFSTR ("#")))
3797 return 2;
3798 else
3799 {
3800 CFRange range;
3801
3802 range = CFStringFind (family, CFSTR ("Apple"),
3803 kCFCompareCaseInsensitive | kCFCompareAnchored);
3804 if (range.location != kCFNotFound)
3805 return 1;
3806
3807 return 0;
3808 }
3809}
3810
3811CFComparisonResult
3812mac_font_family_compare (const void *val1, const void *val2, void *context)
3813{
3814 CFStringRef family1 = (CFStringRef) val1, family2 = (CFStringRef) val2;
3815 int group1, group2;
3816
3817 group1 = mac_font_family_group (family1);
3818 group2 = mac_font_family_group (family2);
3819 if (group1 < group2)
3820 return kCFCompareLessThan;
3821 if (group1 > group2)
3822 return kCFCompareGreaterThan;
3823 return CFStringCompare (family1, family2, kCFCompareCaseInsensitive);
3824}
3825#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */
3826
3827void *
3828macfont_get_nsctfont (struct font *font)
3829{
3830 struct macfont_info *macfont_info = (struct macfont_info *) font;
3831 FontRef macfont = macfont_info->macfont;
3832
3833 return (void *) macfont;
3834}
3835
3836void
3837mac_register_font_driver (struct frame *f)
3838{
3839 register_font_driver (&macfont_driver, f);
3840}
3841
3842#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
3843
3844
3845void
3846syms_of_macfont (void)
3847{
3848#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
3849 static struct font_driver mac_font_driver;
3850
3851 DEFSYM (Qmac_ct, "mac-ct");
3852 macfont_driver.type = Qmac_ct;
3853 register_font_driver (&macfont_driver, NULL);
3854
3855 DEFSYM (QCdestination, ":destination");
3856 DEFSYM (QCminspace, ":minspace");
3857#endif
3858}
diff --git a/src/macuvs.h b/src/macuvs.h
new file mode 100644
index 00000000000..20879888f9a
--- /dev/null
+++ b/src/macuvs.h
@@ -0,0 +1,9215 @@
1/* UVS (Unicode Variation Sequence) table definitions.
2
3This file is part of GNU Emacs. */
4
5/* This was generated from the Ideographic Variation Database file at
6 http://www.unicode.org/ivd/data/2012-03-02/IVD_Sequences.txt
7 using admin/mac/uvs.el in GNU Emacs, and distributed under
8 the Terms of Use in http://www.unicode.org/terms_of_use.html. */
9static const unsigned char mac_uvs_table_adobe_japan1_bytes[] =
10 {
11 0x00, 0x0e, 0x00, 0x01, 0x1f, 0x9e, 0x00, 0x00,
12 0x00, 0x0f, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00,
13 0x00, 0x00, 0x00, 0x00, 0xaf, 0x0e, 0x01, 0x01,
14 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x9a,
15 0x0e, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
16 0x01, 0x1c, 0x31, 0x0e, 0x01, 0x03, 0x00, 0x00,
17 0x00, 0x00, 0x00, 0x01, 0x1e, 0xb0, 0x0e, 0x01,
18 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f,
19 0x09, 0x0e, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00,
20 0x00, 0x01, 0x1f, 0x2b, 0x0e, 0x01, 0x06, 0x00,
21 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x43, 0x0e,
22 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
23 0x1f, 0x51, 0x0e, 0x01, 0x08, 0x00, 0x00, 0x00,
24 0x00, 0x00, 0x01, 0x1f, 0x5f, 0x0e, 0x01, 0x09,
25 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x68,
26 0x0e, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
27 0x01, 0x1f, 0x71, 0x0e, 0x01, 0x0b, 0x00, 0x00,
28 0x00, 0x00, 0x00, 0x01, 0x1f, 0x7a, 0x0e, 0x01,
29 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f,
30 0x83, 0x0e, 0x01, 0x0d, 0x00, 0x00, 0x00, 0x00,
31 0x00, 0x01, 0x1f, 0x8c, 0x0e, 0x01, 0x0e, 0x00,
32 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x95, 0x00,
33 0x00, 0x33, 0xfb, 0x00, 0x34, 0x02, 0x35, 0x82,
34 0x00, 0x34, 0x05, 0x3c, 0x1b, 0x00, 0x34, 0x06,
35 0x43, 0x5a, 0x00, 0x34, 0x27, 0x36, 0x56, 0x00,
36 0x34, 0x2c, 0x43, 0x5e, 0x00, 0x34, 0x2e, 0x37,
37 0x88, 0x00, 0x34, 0x68, 0x36, 0xdf, 0x00, 0x34,
38 0x6a, 0x43, 0x75, 0x00, 0x34, 0x88, 0x3c, 0x52,
39 0x00, 0x34, 0x92, 0x43, 0x8e, 0x00, 0x34, 0xb5,
40 0x41, 0x99, 0x00, 0x34, 0xbc, 0x43, 0x97, 0x00,
41 0x34, 0xc1, 0x47, 0xd0, 0x00, 0x34, 0xc7, 0x43,
42 0x9b, 0x00, 0x34, 0xdb, 0x3c, 0x41, 0x00, 0x35,
43 0x1f, 0x36, 0x29, 0x00, 0x35, 0x3e, 0x37, 0x1e,
44 0x00, 0x35, 0x5d, 0x43, 0xbd, 0x00, 0x35, 0x5e,
45 0x43, 0xbe, 0x00, 0x35, 0x63, 0x43, 0xc0, 0x00,
46 0x35, 0x6e, 0x43, 0xc4, 0x00, 0x35, 0xa6, 0x43,
47 0xd9, 0x00, 0x35, 0xa8, 0x43, 0xdb, 0x00, 0x35,
48 0xc5, 0x43, 0xe1, 0x00, 0x35, 0xda, 0x43, 0xea,
49 0x00, 0x35, 0xde, 0x4e, 0x63, 0x00, 0x35, 0xf4,
50 0x43, 0xf3, 0x00, 0x36, 0x05, 0x43, 0xfa, 0x00,
51 0x36, 0x14, 0x4a, 0xbb, 0x00, 0x36, 0x4a, 0x44,
52 0x21, 0x00, 0x36, 0x91, 0x44, 0x41, 0x00, 0x36,
53 0x96, 0x44, 0x45, 0x00, 0x36, 0x99, 0x44, 0x43,
54 0x00, 0x36, 0xcf, 0x44, 0x56, 0x00, 0x37, 0x61,
55 0x44, 0x78, 0x00, 0x37, 0x62, 0x44, 0x79, 0x00,
56 0x37, 0x6b, 0x44, 0x7d, 0x00, 0x37, 0x6c, 0x44,
57 0x7c, 0x00, 0x37, 0x75, 0x44, 0x80, 0x00, 0x37,
58 0x8d, 0x36, 0x1a, 0x00, 0x37, 0xc1, 0x44, 0x8e,
59 0x00, 0x37, 0xe2, 0x37, 0x2b, 0x00, 0x37, 0xe8,
60 0x44, 0xa2, 0x00, 0x37, 0xf4, 0x44, 0xa5, 0x00,
61 0x37, 0xfd, 0x44, 0xa8, 0x00, 0x38, 0x00, 0x44,
62 0xaa, 0x00, 0x38, 0x2f, 0x44, 0xb4, 0x00, 0x38,
63 0x36, 0x44, 0xb5, 0x00, 0x38, 0x40, 0x44, 0xb6,
64 0x00, 0x38, 0x5c, 0x44, 0xba, 0x00, 0x38, 0x61,
65 0x44, 0xbc, 0x00, 0x38, 0xa1, 0x4e, 0xcb, 0x00,
66 0x38, 0xad, 0x4a, 0xbc, 0x00, 0x38, 0xfa, 0x36,
67 0x1c, 0x00, 0x39, 0x17, 0x44, 0xd9, 0x00, 0x39,
68 0x1a, 0x44, 0xdc, 0x00, 0x39, 0x6f, 0x44, 0xeb,
69 0x00, 0x39, 0xa4, 0x4e, 0x9a, 0x00, 0x39, 0xb8,
70 0x4e, 0x9b, 0x00, 0x3a, 0x5c, 0x4e, 0x9f, 0x00,
71 0x3a, 0x6e, 0x45, 0x31, 0x00, 0x3a, 0x73, 0x45,
72 0x34, 0x00, 0x3a, 0x85, 0x4e, 0xae, 0x00, 0x3a,
73 0xc4, 0x4e, 0xa7, 0x00, 0x3a, 0xcb, 0x4e, 0xa8,
74 0x00, 0x3a, 0xd6, 0x45, 0x43, 0x00, 0x3a, 0xd7,
75 0x45, 0x5e, 0x00, 0x3a, 0xea, 0x45, 0x4d, 0x00,
76 0x3a, 0xf3, 0x3c, 0x40, 0x00, 0x3b, 0x0e, 0x45,
77 0x58, 0x00, 0x3b, 0x1a, 0x45, 0x5c, 0x00, 0x3b,
78 0x1c, 0x45, 0x5d, 0x00, 0x3b, 0x22, 0x3c, 0x49,
79 0x00, 0x3b, 0x6d, 0x45, 0x8c, 0x00, 0x3b, 0x77,
80 0x45, 0x85, 0x00, 0x3b, 0x87, 0x45, 0xa2, 0x00,
81 0x3b, 0x88, 0x36, 0x8d, 0x00, 0x3b, 0x8d, 0x45,
82 0xa4, 0x00, 0x3b, 0xa4, 0x45, 0xaa, 0x00, 0x3b,
83 0xb6, 0x42, 0x0e, 0x00, 0x3b, 0xc3, 0x42, 0x0f,
84 0x00, 0x3b, 0xcd, 0x45, 0xb8, 0x00, 0x3b, 0xf0,
85 0x45, 0xc9, 0x00, 0x3b, 0xf3, 0x4e, 0xb7, 0x00,
86 0x3c, 0x0f, 0x42, 0x17, 0x00, 0x3c, 0x26, 0x45,
87 0xdf, 0x00, 0x3c, 0xc3, 0x45, 0xfc, 0x00, 0x3c,
88 0xd2, 0x46, 0x01, 0x00, 0x3d, 0x11, 0x46, 0x25,
89 0x00, 0x3d, 0x1e, 0x46, 0x30, 0x00, 0x3d, 0x31,
90 0x4e, 0xbe, 0x00, 0x3d, 0x4e, 0x1d, 0xe7, 0x00,
91 0x3d, 0x64, 0x46, 0x4a, 0x00, 0x3d, 0x9a, 0x46,
92 0x58, 0x00, 0x3d, 0xc0, 0x46, 0x6a, 0x00, 0x3d,
93 0xcc, 0x4a, 0xbd, 0x00, 0x3d, 0xd4, 0x46, 0x6f,
94 0x00, 0x3e, 0x05, 0x46, 0x7b, 0x00, 0x3e, 0x3f,
95 0x42, 0x48, 0x00, 0x3e, 0x40, 0x4e, 0xca, 0x00,
96 0x3e, 0x60, 0x46, 0x8b, 0x00, 0x3e, 0x66, 0x46,
97 0x8d, 0x00, 0x3e, 0x68, 0x46, 0x8e, 0x00, 0x3e,
98 0x83, 0x46, 0x95, 0x00, 0x3e, 0x8a, 0x3c, 0x43,
99 0x00, 0x3e, 0x94, 0x46, 0x9b, 0x00, 0x3e, 0xda,
100 0x3c, 0x48, 0x00, 0x3f, 0x57, 0x46, 0xcb, 0x00,
101 0x3f, 0x72, 0x42, 0x58, 0x00, 0x3f, 0x75, 0x46,
102 0xd9, 0x00, 0x3f, 0x77, 0x46, 0xdb, 0x00, 0x3f,
103 0xae, 0x46, 0xed, 0x00, 0x3f, 0xb1, 0x37, 0x54,
104 0x00, 0x3f, 0xc9, 0x46, 0xf8, 0x00, 0x3f, 0xd7,
105 0x46, 0xfd, 0x00, 0x3f, 0xdc, 0x4a, 0xbe, 0x00,
106 0x40, 0x39, 0x47, 0x0f, 0x00, 0x40, 0x58, 0x47,
107 0x16, 0x00, 0x40, 0x93, 0x3c, 0x4c, 0x00, 0x41,
108 0x03, 0x3c, 0x4f, 0x00, 0x41, 0x05, 0x47, 0x3b,
109 0x00, 0x41, 0x48, 0x47, 0x47, 0x00, 0x41, 0x4f,
110 0x47, 0x4a, 0x00, 0x41, 0x63, 0x47, 0x4e, 0x00,
111 0x41, 0xb4, 0x47, 0x5d, 0x00, 0x41, 0xbf, 0x47,
112 0x60, 0x00, 0x41, 0xe6, 0x47, 0x6b, 0x00, 0x41,
113 0xee, 0x47, 0x6f, 0x00, 0x41, 0xf3, 0x47, 0x6c,
114 0x00, 0x42, 0x07, 0x47, 0x76, 0x00, 0x42, 0x0e,
115 0x47, 0x79, 0x00, 0x42, 0x64, 0x37, 0x60, 0x00,
116 0x42, 0x93, 0x3c, 0x50, 0x00, 0x42, 0xc6, 0x47,
117 0x9f, 0x00, 0x42, 0xd6, 0x47, 0xaa, 0x00, 0x42,
118 0xdd, 0x47, 0xae, 0x00, 0x43, 0x02, 0x47, 0xbc,
119 0x00, 0x43, 0x2b, 0x47, 0xc9, 0x00, 0x43, 0x43,
120 0x47, 0xcb, 0x00, 0x43, 0xee, 0x47, 0xf7, 0x00,
121 0x43, 0xf0, 0x47, 0xfa, 0x00, 0x44, 0x08, 0x48,
122 0x00, 0x00, 0x44, 0x0c, 0x3c, 0x42, 0x00, 0x44,
123 0x17, 0x48, 0x02, 0x00, 0x44, 0x1c, 0x48, 0x03,
124 0x00, 0x44, 0x22, 0x48, 0x05, 0x00, 0x44, 0x53,
125 0x37, 0x73, 0x00, 0x44, 0x5b, 0x42, 0xa4, 0x00,
126 0x44, 0x76, 0x48, 0x1c, 0x00, 0x44, 0x7a, 0x48,
127 0x1d, 0x00, 0x44, 0x91, 0x48, 0x23, 0x00, 0x44,
128 0xb3, 0x48, 0x3e, 0x00, 0x44, 0xbe, 0x48, 0x3c,
129 0x00, 0x44, 0xd4, 0x48, 0x3d, 0x00, 0x45, 0x08,
130 0x48, 0x5c, 0x00, 0x45, 0x0d, 0x48, 0x58, 0x00,
131 0x45, 0x25, 0x37, 0x7e, 0x00, 0x45, 0x43, 0x48,
132 0x6c, 0x00, 0x45, 0x7a, 0x3c, 0x4b, 0x00, 0x45,
133 0x9d, 0x42, 0xd4, 0x00, 0x45, 0xb8, 0x48, 0xa0,
134 0x00, 0x45, 0xbe, 0x4a, 0xbf, 0x00, 0x45, 0xe5,
135 0x48, 0xba, 0x00, 0x45, 0xea, 0x42, 0xd9, 0x00,
136 0x46, 0x0f, 0x48, 0xca, 0x00, 0x46, 0x10, 0x4a,
137 0xc0, 0x00, 0x46, 0x41, 0x48, 0xd8, 0x00, 0x46,
138 0x65, 0x3c, 0x4e, 0x00, 0x46, 0xa1, 0x48, 0xe9,
139 0x00, 0x46, 0xae, 0x3c, 0x51, 0x00, 0x46, 0xaf,
140 0x48, 0xed, 0x00, 0x47, 0x0c, 0x49, 0x02, 0x00,
141 0x47, 0x1f, 0x4e, 0xfb, 0x00, 0x47, 0x64, 0x49,
142 0x18, 0x00, 0x47, 0xe6, 0x37, 0x90, 0x00, 0x47,
143 0xfd, 0x49, 0x24, 0x00, 0x48, 0x16, 0x49, 0x2e,
144 0x00, 0x48, 0x1e, 0x4f, 0x01, 0x00, 0x48, 0x44,
145 0x42, 0xf5, 0x00, 0x48, 0x4e, 0x49, 0x3a, 0x00,
146 0x48, 0xb5, 0x49, 0x5b, 0x00, 0x49, 0xb0, 0x43,
147 0x1f, 0x00, 0x49, 0xe7, 0x49, 0xd2, 0x00, 0x49,
148 0xfa, 0x49, 0xd6, 0x00, 0x4a, 0x04, 0x49, 0xdb,
149 0x00, 0x4a, 0x29, 0x49, 0xde, 0x00, 0x4a, 0xbc,
150 0x49, 0xf6, 0x00, 0x4b, 0x38, 0x35, 0xdf, 0x00,
151 0x4b, 0x3b, 0x4a, 0x0e, 0x00, 0x4b, 0x7e, 0x4a,
152 0xc1, 0x00, 0x4b, 0xc2, 0x4a, 0x33, 0x00, 0x4b,
153 0xca, 0x4a, 0x35, 0x00, 0x4b, 0xd2, 0x4a, 0x37,
154 0x00, 0x4b, 0xe8, 0x3c, 0x46, 0x00, 0x4c, 0x17,
155 0x43, 0x34, 0x00, 0x4c, 0x20, 0x4a, 0x48, 0x00,
156 0x4c, 0x38, 0x4a, 0xc2, 0x00, 0x4c, 0xc4, 0x4a,
157 0x84, 0x00, 0x4c, 0xd1, 0x4a, 0x87, 0x00, 0x4c,
158 0xe1, 0x4a, 0xc3, 0x00, 0x4d, 0x07, 0x4a, 0x9b,
159 0x00, 0x4d, 0x77, 0x4a, 0xab, 0x00, 0x4e, 0x00,
160 0x04, 0xb0, 0x00, 0x4e, 0x01, 0x0b, 0xb8, 0x00,
161 0x4e, 0x02, 0x43, 0x52, 0x00, 0x4e, 0x03, 0x08,
162 0xe3, 0x00, 0x4e, 0x04, 0x37, 0xd8, 0x00, 0x4e,
163 0x05, 0x37, 0xd9, 0x00, 0x4e, 0x07, 0x0e, 0xaa,
164 0x00, 0x4e, 0x08, 0x09, 0xce, 0x00, 0x4e, 0x09,
165 0x08, 0x7e, 0x00, 0x4e, 0x0a, 0x09, 0xcd, 0x00,
166 0x4e, 0x0b, 0x05, 0x3c, 0x00, 0x4e, 0x0c, 0x4a,
167 0xc4, 0x00, 0x4e, 0x0d, 0x0d, 0xc6, 0x00, 0x4e,
168 0x0e, 0x0f, 0x29, 0x00, 0x4e, 0x0f, 0x43, 0x53,
169 0x00, 0x4e, 0x10, 0x0f, 0xfb, 0x00, 0x4e, 0x11,
170 0x04, 0xd1, 0x00, 0x4e, 0x12, 0x43, 0x54, 0x00,
171 0x4e, 0x14, 0x05, 0xcc, 0x00, 0x4e, 0x15, 0x0f,
172 0xfc, 0x00, 0x4e, 0x16, 0x0a, 0x48, 0x00, 0x4e,
173 0x17, 0x10, 0xd7, 0x00, 0x4e, 0x18, 0x06, 0x70,
174 0x00, 0x4e, 0x19, 0x0e, 0x0a, 0x00, 0x4e, 0x1e,
175 0x09, 0xcf, 0x00, 0x4e, 0x1f, 0x37, 0xda, 0x00,
176 0x4e, 0x21, 0x0f, 0x86, 0x00, 0x4e, 0x23, 0x4a,
177 0xc5, 0x00, 0x4e, 0x24, 0x4a, 0xc6, 0x00, 0x4e,
178 0x26, 0x0e, 0x12, 0x00, 0x4e, 0x28, 0x20, 0xb3,
179 0x00, 0x4e, 0x29, 0x43, 0x55, 0x00, 0x4e, 0x2a,
180 0x0f, 0xfd, 0x00, 0x4e, 0x2b, 0x37, 0xdb, 0x00,
181 0x4e, 0x2c, 0x37, 0x4d, 0x00, 0x4e, 0x2d, 0x0b,
182 0xa4, 0x00, 0x4e, 0x2e, 0x43, 0x56, 0x00, 0x4e,
183 0x2f, 0x37, 0xdc, 0x00, 0x4e, 0x30, 0x37, 0xdd,
184 0x00, 0x4e, 0x31, 0x0f, 0xfe, 0x00, 0x4e, 0x32,
185 0x06, 0xf2, 0x00, 0x4e, 0x35, 0x52, 0x53, 0x00,
186 0x4e, 0x36, 0x0f, 0xff, 0x00, 0x4e, 0x37, 0x36,
187 0x9d, 0x00, 0x4e, 0x38, 0x06, 0x19, 0x00, 0x4e,
188 0x39, 0x0b, 0x6e, 0x00, 0x4e, 0x3b, 0x09, 0x13,
189 0x00, 0x4e, 0x3c, 0x10, 0x00, 0x00, 0x4e, 0x3f,
190 0x10, 0x01, 0x00, 0x4e, 0x40, 0x37, 0xde, 0x00,
191 0x4e, 0x41, 0x37, 0xdf, 0x00, 0x4e, 0x42, 0x10,
192 0x02, 0x00, 0x4e, 0x43, 0x0c, 0xeb, 0x00, 0x4e,
193 0x44, 0x37, 0xe0, 0x00, 0x4e, 0x45, 0x06, 0x71,
194 0x00, 0x4e, 0x47, 0x43, 0x57, 0x00, 0x4e, 0x48,
195 0x37, 0x2e, 0x00, 0x4e, 0x4b, 0x0c, 0xed, 0x00,
196 0x4e, 0x4d, 0x0c, 0xbb, 0x00, 0x4e, 0x4e, 0x07,
197 0x77, 0x00, 0x4e, 0x4f, 0x0e, 0x61, 0x00, 0x4e,
198 0x51, 0x43, 0x59, 0x00, 0x4e, 0x55, 0x19, 0x50,
199 0x00, 0x4e, 0x56, 0x10, 0x03, 0x00, 0x4e, 0x57,
200 0x09, 0xd0, 0x00, 0x4e, 0x58, 0x10, 0x04, 0x00,
201 0x4e, 0x59, 0x05, 0x35, 0x00, 0x4e, 0x5a, 0x37,
202 0xe1, 0x00, 0x4e, 0x5c, 0x52, 0x54, 0x00, 0x4e,
203 0x5d, 0x06, 0xdd, 0x00, 0x4e, 0x5e, 0x07, 0xa4,
204 0x00, 0x4e, 0x5f, 0x0e, 0xf5, 0x00, 0x4e, 0x62,
205 0x12, 0x33, 0x00, 0x4e, 0x63, 0x52, 0x55, 0x00,
206 0x4e, 0x68, 0x52, 0x56, 0x00, 0x4e, 0x69, 0x43,
207 0x5c, 0x00, 0x4e, 0x71, 0x0f, 0x5a, 0x00, 0x4e,
208 0x73, 0x0c, 0xd5, 0x00, 0x4e, 0x74, 0x52, 0x57,
209 0x00, 0x4e, 0x75, 0x52, 0x58, 0x00, 0x4e, 0x79,
210 0x4a, 0xc7, 0x00, 0x4e, 0x7e, 0x05, 0xe1, 0x00,
211 0x4e, 0x7f, 0x37, 0xe2, 0x00, 0x4e, 0x80, 0x06,
212 0x4f, 0x00, 0x4e, 0x82, 0x10, 0x05, 0x00, 0x4e,
213 0x85, 0x10, 0x06, 0x00, 0x4e, 0x86, 0x0f, 0x83,
214 0x00, 0x4e, 0x88, 0x0f, 0x27, 0x00, 0x4e, 0x89,
215 0x0a, 0xea, 0x00, 0x4e, 0x8a, 0x10, 0x08, 0x00,
216 0x4e, 0x8b, 0x08, 0xc4, 0x00, 0x4e, 0x8c, 0x0c,
217 0xcb, 0x00, 0x4e, 0x8d, 0x37, 0xe3, 0x00, 0x4e,
218 0x8e, 0x10, 0x0b, 0x00, 0x4e, 0x91, 0x04, 0xe0,
219 0x00, 0x4e, 0x92, 0x07, 0x93, 0x00, 0x4e, 0x94,
220 0x07, 0x92, 0x00, 0x4e, 0x95, 0x04, 0xaa, 0x00,
221 0x4e, 0x96, 0x37, 0xe4, 0x00, 0x4e, 0x97, 0x52,
222 0x59, 0x00, 0x4e, 0x98, 0x0f, 0xf1, 0x00, 0x4e,
223 0x99, 0x0f, 0xf0, 0x00, 0x4e, 0x9b, 0x08, 0x23,
224 0x00, 0x4e, 0x9c, 0x04, 0x65, 0x00, 0x4e, 0x9d,
225 0x43, 0x5d, 0x00, 0x4e, 0x9e, 0x10, 0x0c, 0x00,
226 0x4e, 0x9f, 0x10, 0x0d, 0x00, 0x4e, 0xa0, 0x10,
227 0x0e, 0x00, 0x4e, 0xa1, 0x0e, 0x62, 0x00, 0x4e,
228 0xa2, 0x10, 0x0f, 0x00, 0x4e, 0xa4, 0x07, 0xa6,
229 0x00, 0x4e, 0xa5, 0x04, 0xab, 0x00, 0x4e, 0xa6,
230 0x0e, 0xa0, 0x00, 0x4e, 0xa8, 0x06, 0x96, 0x00,
231 0x4e, 0xab, 0x06, 0x97, 0x00, 0x4e, 0xac, 0x06,
232 0x98, 0x00, 0x4e, 0xad, 0x0b, 0xfe, 0x00, 0x4e,
233 0xae, 0x0f, 0x84, 0x00, 0x4e, 0xaf, 0x52, 0x5a,
234 0x00, 0x4e, 0xb0, 0x10, 0x10, 0x00, 0x4e, 0xb3,
235 0x10, 0x11, 0x00, 0x4e, 0xb6, 0x10, 0x12, 0x00,
236 0x4e, 0xb9, 0x37, 0xe5, 0x00, 0x4e, 0xba, 0x0a,
237 0x13, 0x00, 0x4e, 0xbb, 0x36, 0x20, 0x00, 0x4e,
238 0xbc, 0x43, 0x5f, 0x00, 0x4e, 0xc0, 0x09, 0x44,
239 0x00, 0x4e, 0xc1, 0x0a, 0x14, 0x00, 0x4e, 0xc2,
240 0x10, 0x17, 0x00, 0x4e, 0xc3, 0x43, 0x60, 0x00,
241 0x4e, 0xc4, 0x10, 0x15, 0x00, 0x4e, 0xc6, 0x10,
242 0x16, 0x00, 0x4e, 0xc7, 0x06, 0x72, 0x00, 0x4e,
243 0xc8, 0x43, 0x61, 0x00, 0x4e, 0xca, 0x08, 0x13,
244 0x00, 0x4e, 0xcb, 0x05, 0x70, 0x00, 0x4e, 0xcd,
245 0x10, 0x14, 0x00, 0x4e, 0xce, 0x10, 0x13, 0x00,
246 0x4e, 0xcf, 0x0d, 0xf9, 0x00, 0x4e, 0xd0, 0x37,
247 0xe6, 0x00, 0x4e, 0xd4, 0x08, 0x94, 0x00, 0x4e,
248 0xd5, 0x08, 0x93, 0x00, 0x4e, 0xd6, 0x0b, 0x1e,
249 0x00, 0x4e, 0xd7, 0x10, 0x18, 0x00, 0x4e, 0xd8,
250 0x0d, 0xc7, 0x00, 0x4e, 0xd9, 0x0a, 0x8b, 0x00,
251 0x4e, 0xda, 0x43, 0x63, 0x00, 0x4e, 0xdb, 0x52,
252 0x5b, 0x00, 0x4e, 0xdd, 0x02, 0x90, 0x00, 0x4e,
253 0xde, 0x10, 0x19, 0x00, 0x4e, 0xdf, 0x10, 0x1b,
254 0x00, 0x4e, 0xe0, 0x37, 0xe7, 0x00, 0x4e, 0xe1,
255 0x20, 0xb4, 0x00, 0x4e, 0xe2, 0x52, 0x5c, 0x00,
256 0x4e, 0xe3, 0x0b, 0x45, 0x00, 0x4e, 0xe4, 0x0f,
257 0xa9, 0x00, 0x4e, 0xe5, 0x04, 0x8e, 0x00, 0x4e,
258 0xe8, 0x52, 0x5d, 0x00, 0x4e, 0xeb, 0x43, 0x62,
259 0x00, 0x4e, 0xed, 0x10, 0x1a, 0x00, 0x4e, 0xee,
260 0x05, 0x3e, 0x00, 0x4e, 0xef, 0x52, 0x5e, 0x00,
261 0x4e, 0xf0, 0x06, 0xbc, 0x00, 0x4e, 0xf1, 0x43,
262 0x64, 0x00, 0x4e, 0xf2, 0x0b, 0xa5, 0x00, 0x4e,
263 0xf3, 0x4a, 0xc8, 0x00, 0x4e, 0xf5, 0x43, 0x65,
264 0x00, 0x4e, 0xf6, 0x07, 0x45, 0x00, 0x4e, 0xf7,
265 0x10, 0x1c, 0x00, 0x4e, 0xfb, 0x0c, 0xda, 0x00,
266 0x4e, 0xfc, 0x20, 0xb5, 0x00, 0x4e, 0xfd, 0x37,
267 0xe8, 0x00, 0x4e, 0xfe, 0x52, 0x5f, 0x00, 0x4e,
268 0xff, 0x37, 0xe9, 0x00, 0x4f, 0x00, 0x20, 0xb6,
269 0x00, 0x4f, 0x01, 0x06, 0x27, 0x00, 0x4f, 0x02,
270 0x52, 0x60, 0x00, 0x4f, 0x03, 0x20, 0xb7, 0x00,
271 0x4f, 0x08, 0x52, 0x61, 0x00, 0x4f, 0x09, 0x10,
272 0x1d, 0x00, 0x4f, 0x0a, 0x04, 0x8f, 0x00, 0x4f,
273 0x0b, 0x37, 0xea, 0x00, 0x4f, 0x0c, 0x4a, 0xc9,
274 0x00, 0x4f, 0x0d, 0x07, 0x94, 0x00, 0x4f, 0x0e,
275 0x06, 0x28, 0x00, 0x4f, 0x0f, 0x0d, 0xec, 0x00,
276 0x4f, 0x10, 0x0d, 0x46, 0x00, 0x4f, 0x11, 0x06,
277 0x73, 0x00, 0x4f, 0x12, 0x52, 0x62, 0x00, 0x4f,
278 0x15, 0x37, 0xeb, 0x00, 0x4f, 0x16, 0x43, 0x66,
279 0x00, 0x4f, 0x17, 0x52, 0x63, 0x00, 0x4f, 0x19,
280 0x4a, 0xca, 0x00, 0x4f, 0x1a, 0x05, 0x71, 0x00,
281 0x4f, 0x1c, 0x10, 0x40, 0x00, 0x4f, 0x1d, 0x0c,
282 0x3b, 0x00, 0x4f, 0x2b, 0x4a, 0xcb, 0x00, 0x4f,
283 0x2e, 0x4a, 0xcc, 0x00, 0x4f, 0x2f, 0x0d, 0x22,
284 0x00, 0x4f, 0x30, 0x10, 0x1f, 0x00, 0x4f, 0x31,
285 0x4a, 0xcd, 0x00, 0x4f, 0x33, 0x52, 0x64, 0x00,
286 0x4f, 0x34, 0x0d, 0x50, 0x00, 0x4f, 0x35, 0x52,
287 0x65, 0x00, 0x4f, 0x36, 0x0f, 0xaa, 0x00, 0x4f,
288 0x37, 0x43, 0x68, 0x00, 0x4f, 0x38, 0x09, 0xf3,
289 0x00, 0x4f, 0x39, 0x20, 0xb8, 0x00, 0x4f, 0x3a,
290 0x08, 0x95, 0x00, 0x4f, 0x3b, 0x37, 0xed, 0x00,
291 0x4f, 0x3c, 0x08, 0xc5, 0x00, 0x4f, 0x3d, 0x05,
292 0x40, 0x00, 0x4f, 0x3e, 0x43, 0x69, 0x00, 0x4f,
293 0x40, 0x52, 0x66, 0x00, 0x4f, 0x42, 0x52, 0x67,
294 0x00, 0x4f, 0x43, 0x0b, 0xed, 0x00, 0x4f, 0x46,
295 0x0b, 0x60, 0x00, 0x4f, 0x47, 0x10, 0x23, 0x00,
296 0x4f, 0x48, 0x41, 0x8b, 0x00, 0x4f, 0x49, 0x37,
297 0xee, 0x00, 0x4f, 0x4b, 0x52, 0x68, 0x00, 0x4f,
298 0x4c, 0x52, 0x69, 0x00, 0x4f, 0x4d, 0x04, 0x90,
299 0x00, 0x4f, 0x4e, 0x0b, 0xff, 0x00, 0x4f, 0x4f,
300 0x09, 0x45, 0x00, 0x4f, 0x50, 0x08, 0x24, 0x00,
301 0x4f, 0x51, 0x0f, 0x0e, 0x00, 0x4f, 0x52, 0x52,
302 0x6a, 0x00, 0x4f, 0x53, 0x0b, 0x2e, 0x00, 0x4f,
303 0x54, 0x37, 0xef, 0x00, 0x4f, 0x55, 0x05, 0x3f,
304 0x00, 0x4f, 0x56, 0x20, 0xb9, 0x00, 0x4f, 0x57,
305 0x10, 0x22, 0x00, 0x4f, 0x58, 0x43, 0x6a, 0x00,
306 0x4f, 0x59, 0x0f, 0x28, 0x00, 0x4f, 0x5a, 0x10,
307 0x1e, 0x00, 0x4f, 0x5b, 0x10, 0x20, 0x00, 0x4f,
308 0x5c, 0x08, 0x5e, 0x00, 0x4f, 0x5d, 0x10, 0x21,
309 0x00, 0x4f, 0x5e, 0x11, 0xd3, 0x00, 0x4f, 0x5f,
310 0x41, 0x8c, 0x00, 0x4f, 0x60, 0x37, 0xec, 0x00,
311 0x4f, 0x63, 0x52, 0x6b, 0x00, 0x4f, 0x64, 0x43,
312 0x67, 0x00, 0x4f, 0x69, 0x10, 0x29, 0x00, 0x4f,
313 0x6a, 0x41, 0x8d, 0x00, 0x4f, 0x6c, 0x41, 0x8e,
314 0x00, 0x4f, 0x6e, 0x52, 0x6c, 0x00, 0x4f, 0x6f,
315 0x10, 0x2c, 0x00, 0x4f, 0x70, 0x10, 0x2a, 0x00,
316 0x4f, 0x71, 0x52, 0x6d, 0x00, 0x4f, 0x73, 0x05,
317 0x42, 0x00, 0x4f, 0x75, 0x0e, 0x0b, 0x00, 0x4f,
318 0x76, 0x10, 0x24, 0x00, 0x4f, 0x77, 0x43, 0x6c,
319 0x00, 0x4f, 0x78, 0x43, 0x6d, 0x00, 0x4f, 0x79,
320 0x52, 0x6e, 0x00, 0x4f, 0x7a, 0x37, 0xf0, 0x00,
321 0x4f, 0x7b, 0x10, 0x28, 0x00, 0x4f, 0x7c, 0x07,
322 0xa7, 0x00, 0x4f, 0x7d, 0x37, 0xf1, 0x00, 0x4f,
323 0x7e, 0x37, 0xf2, 0x00, 0x4f, 0x7f, 0x08, 0x96,
324 0x00, 0x4f, 0x81, 0x52, 0x6f, 0x00, 0x4f, 0x82,
325 0x43, 0x6e, 0x00, 0x4f, 0x83, 0x05, 0xe2, 0x00,
326 0x4f, 0x84, 0x4a, 0xce, 0x00, 0x4f, 0x85, 0x43,
327 0x6f, 0x00, 0x4f, 0x86, 0x10, 0x2d, 0x00, 0x4f,
328 0x88, 0x10, 0x25, 0x00, 0x4f, 0x89, 0x52, 0x70,
329 0x00, 0x4f, 0x8a, 0x20, 0xbb, 0x00, 0x4f, 0x8b,
330 0x0f, 0xab, 0x00, 0x4f, 0x8c, 0x52, 0x71, 0x00,
331 0x4f, 0x8d, 0x08, 0xc6, 0x00, 0x4f, 0x8e, 0x52,
332 0x72, 0x00, 0x4f, 0x8f, 0x10, 0x26, 0x00, 0x4f,
333 0x90, 0x52, 0x73, 0x00, 0x4f, 0x91, 0x10, 0x2b,
334 0x00, 0x4f, 0x92, 0x20, 0xba, 0x00, 0x4f, 0x93,
335 0x52, 0x74, 0x00, 0x4f, 0x94, 0x20, 0xbd, 0x00,
336 0x4f, 0x96, 0x10, 0x2e, 0x00, 0x4f, 0x97, 0x37,
337 0xf3, 0x00, 0x4f, 0x98, 0x10, 0x27, 0x00, 0x4f,
338 0x99, 0x52, 0x75, 0x00, 0x4f, 0x9a, 0x20, 0xbc,
339 0x00, 0x4f, 0x9b, 0x06, 0x99, 0x00, 0x4f, 0x9d,
340 0x04, 0x91, 0x00, 0x4f, 0x9e, 0x4a, 0xcf, 0x00,
341 0x4f, 0x9f, 0x52, 0x76, 0x00, 0x4f, 0xa0, 0x06,
342 0x9a, 0x00, 0x4f, 0xa1, 0x05, 0x41, 0x00, 0x4f,
343 0xab, 0x11, 0xd4, 0x00, 0x4f, 0xad, 0x0e, 0xa7,
344 0x00, 0x4f, 0xae, 0x0d, 0xe0, 0x00, 0x4f, 0xaf,
345 0x07, 0xa8, 0x00, 0x4f, 0xb2, 0x43, 0x71, 0x00,
346 0x4f, 0xb5, 0x09, 0xf5, 0x00, 0x4f, 0xb6, 0x0f,
347 0x7f, 0x00, 0x4f, 0xb7, 0x4a, 0xd0, 0x00, 0x4f,
348 0xb9, 0x52, 0x77, 0x00, 0x4f, 0xbb, 0x52, 0x78,
349 0x00, 0x4f, 0xbc, 0x52, 0x79, 0x00, 0x4f, 0xbd,
350 0x52, 0x7a, 0x00, 0x4f, 0xbe, 0x37, 0xf4, 0x00,
351 0x4f, 0xbf, 0x0e, 0x28, 0x00, 0x4f, 0xc0, 0x52,
352 0x7b, 0x00, 0x4f, 0xc1, 0x52, 0x7c, 0x00, 0x4f,
353 0xc2, 0x07, 0x0e, 0x00, 0x4f, 0xc3, 0x0b, 0x05,
354 0x00, 0x4f, 0xc4, 0x05, 0x64, 0x00, 0x4f, 0xc5,
355 0x43, 0x72, 0x00, 0x4f, 0xc6, 0x52, 0x7d, 0x00,
356 0x4f, 0xc8, 0x52, 0x7e, 0x00, 0x4f, 0xc9, 0x20,
357 0xac, 0x00, 0x4f, 0xca, 0x09, 0x5d, 0x00, 0x4f,
358 0xcb, 0x43, 0x73, 0x00, 0x4f, 0xcc, 0x52, 0x7f,
359 0x00, 0x4f, 0xcd, 0x20, 0xbe, 0x00, 0x4f, 0xce,
360 0x10, 0x32, 0x00, 0x4f, 0xcf, 0x37, 0xf5, 0x00,
361 0x4f, 0xd0, 0x10, 0x37, 0x00, 0x4f, 0xd1, 0x10,
362 0x35, 0x00, 0x4f, 0xd2, 0x43, 0x74, 0x00, 0x4f,
363 0xd3, 0x3c, 0x2f, 0x00, 0x4f, 0xd4, 0x10, 0x30,
364 0x00, 0x4f, 0xd7, 0x0b, 0x0f, 0x00, 0x4f, 0xd8,
365 0x10, 0x33, 0x00, 0x4f, 0xda, 0x10, 0x36, 0x00,
366 0x4f, 0xdb, 0x10, 0x34, 0x00, 0x4f, 0xdc, 0x52,
367 0x80, 0x00, 0x4f, 0xdd, 0x0e, 0x2d, 0x00, 0x4f,
368 0xdf, 0x10, 0x31, 0x00, 0x4f, 0xe0, 0x1d, 0xec,
369 0x00, 0x4f, 0xe1, 0x09, 0xf4, 0x00, 0x4f, 0xe2,
370 0x52, 0x81, 0x00, 0x4f, 0xe3, 0x0e, 0xa1, 0x00,
371 0x4f, 0xe4, 0x10, 0x38, 0x00, 0x4f, 0xe5, 0x10,
372 0x39, 0x00, 0x4f, 0xe6, 0x43, 0x70, 0x00, 0x4f,
373 0xee, 0x09, 0x2e, 0x00, 0x4f, 0xef, 0x10, 0x46,
374 0x00, 0x4f, 0xf0, 0x52, 0x82, 0x00, 0x4f, 0xf1,
375 0x35, 0xa3, 0x00, 0x4f, 0xf2, 0x43, 0x76, 0x00,
376 0x4f, 0xf3, 0x0d, 0x06, 0x00, 0x4f, 0xf5, 0x0d,
377 0xa8, 0x00, 0x4f, 0xf6, 0x10, 0x41, 0x00, 0x4f,
378 0xf8, 0x0e, 0x40, 0x00, 0x4f, 0xfa, 0x05, 0x36,
379 0x00, 0x4f, 0xfc, 0x52, 0x83, 0x00, 0x4f, 0xfd,
380 0x37, 0xf6, 0x00, 0x4f, 0xfe, 0x10, 0x45, 0x00,
381 0x4f, 0xff, 0x20, 0xc1, 0x00, 0x50, 0x00, 0x37,
382 0xf7, 0x00, 0x50, 0x01, 0x37, 0xf8, 0x00, 0x50,
383 0x02, 0x4f, 0x4b, 0x00, 0x50, 0x04, 0x4a, 0xd1,
384 0x00, 0x50, 0x05, 0x10, 0x3f, 0x00, 0x50, 0x06,
385 0x10, 0x48, 0x00, 0x50, 0x07, 0x52, 0x84, 0x00,
386 0x50, 0x09, 0x0a, 0xd4, 0x00, 0x50, 0x0a, 0x52,
387 0x85, 0x00, 0x50, 0x0b, 0x07, 0x78, 0x00, 0x50,
388 0x0c, 0x4a, 0xd2, 0x00, 0x50, 0x0d, 0x0d, 0x12,
389 0x00, 0x50, 0x0e, 0x41, 0x8f, 0x00, 0x50, 0x0f,
390 0x16, 0x00, 0x00, 0x50, 0x10, 0x37, 0xf9, 0x00,
391 0x50, 0x11, 0x10, 0x47, 0x00, 0x50, 0x12, 0x0c,
392 0x57, 0x00, 0x50, 0x13, 0x43, 0x77, 0x00, 0x50,
393 0x14, 0x10, 0x3c, 0x00, 0x50, 0x16, 0x07, 0xaa,
394 0x00, 0x50, 0x17, 0x52, 0x86, 0x00, 0x50, 0x18,
395 0x41, 0x90, 0x00, 0x50, 0x19, 0x07, 0xa9, 0x00,
396 0x50, 0x1a, 0x10, 0x3a, 0x00, 0x50, 0x1b, 0x37,
397 0xfa, 0x00, 0x50, 0x1c, 0x43, 0x78, 0x00, 0x50,
398 0x1d, 0x52, 0x87, 0x00, 0x50, 0x1e, 0x20, 0xc2,
399 0x00, 0x50, 0x1f, 0x09, 0x06, 0x00, 0x50, 0x21,
400 0x10, 0x42, 0x00, 0x50, 0x22, 0x20, 0xc0, 0x00,
401 0x50, 0x23, 0x0e, 0x3f, 0x00, 0x50, 0x24, 0x0b,
402 0x8b, 0x00, 0x50, 0x25, 0x10, 0x3e, 0x00, 0x50,
403 0x26, 0x07, 0x47, 0x00, 0x50, 0x27, 0x37, 0xfb,
404 0x00, 0x50, 0x28, 0x10, 0x3b, 0x00, 0x50, 0x29,
405 0x10, 0x43, 0x00, 0x50, 0x2a, 0x10, 0x3d, 0x00,
406 0x50, 0x2b, 0x0f, 0x99, 0x00, 0x50, 0x2c, 0x10,
407 0x44, 0x00, 0x50, 0x2d, 0x0f, 0xe7, 0x00, 0x50,
408 0x2e, 0x37, 0xfc, 0x00, 0x50, 0x30, 0x52, 0x88,
409 0x00, 0x50, 0x32, 0x52, 0x89, 0x00, 0x50, 0x33,
410 0x52, 0x8a, 0x00, 0x50, 0x35, 0x52, 0x8b, 0x00,
411 0x50, 0x36, 0x06, 0xde, 0x00, 0x50, 0x39, 0x07,
412 0x46, 0x00, 0x50, 0x3b, 0x38, 0x00, 0x00, 0x50,
413 0x40, 0x20, 0xbf, 0x00, 0x50, 0x41, 0x41, 0x91,
414 0x00, 0x50, 0x42, 0x20, 0xc5, 0x00, 0x50, 0x43,
415 0x10, 0x49, 0x00, 0x50, 0x45, 0x52, 0x8c, 0x00,
416 0x50, 0x46, 0x20, 0xc3, 0x00, 0x50, 0x47, 0x10,
417 0x4a, 0x00, 0x50, 0x48, 0x10, 0x4e, 0x00, 0x50,
418 0x49, 0x04, 0x92, 0x00, 0x50, 0x4a, 0x52, 0x8d,
419 0x00, 0x50, 0x4c, 0x4a, 0xd3, 0x00, 0x50, 0x4e,
420 0x43, 0x79, 0x00, 0x50, 0x4f, 0x0e, 0x20, 0x00,
421 0x50, 0x50, 0x10, 0x4d, 0x00, 0x50, 0x51, 0x52,
422 0x8e, 0x00, 0x50, 0x52, 0x52, 0x8f, 0x00, 0x50,
423 0x53, 0x43, 0x7a, 0x00, 0x50, 0x55, 0x10, 0x4c,
424 0x00, 0x50, 0x56, 0x10, 0x50, 0x00, 0x50, 0x57,
425 0x37, 0xfd, 0x00, 0x50, 0x59, 0x52, 0x90, 0x00,
426 0x50, 0x5a, 0x10, 0x4f, 0x00, 0x50, 0x5c, 0x0c,
427 0x00, 0x00, 0x50, 0x5f, 0x4a, 0xd4, 0x00, 0x50,
428 0x60, 0x52, 0x91, 0x00, 0x50, 0x62, 0x4a, 0xd5,
429 0x00, 0x50, 0x63, 0x43, 0x7b, 0x00, 0x50, 0x65,
430 0x07, 0x48, 0x00, 0x50, 0x66, 0x37, 0xfe, 0x00,
431 0x50, 0x67, 0x52, 0x92, 0x00, 0x50, 0x6a, 0x37,
432 0xff, 0x00, 0x50, 0x6c, 0x10, 0x51, 0x00, 0x50,
433 0x6d, 0x52, 0x93, 0x00, 0x50, 0x70, 0x20, 0xc4,
434 0x00, 0x50, 0x71, 0x52, 0x94, 0x00, 0x50, 0x72,
435 0x08, 0xf1, 0x00, 0x50, 0x74, 0x0b, 0x06, 0x00,
436 0x50, 0x75, 0x0c, 0x01, 0x00, 0x50, 0x76, 0x06,
437 0xee, 0x00, 0x50, 0x77, 0x4a, 0xd6, 0x00, 0x50,
438 0x78, 0x10, 0x52, 0x00, 0x50, 0x7d, 0x06, 0x50,
439 0x00, 0x50, 0x80, 0x10, 0x53, 0x00, 0x50, 0x81,
440 0x52, 0x95, 0x00, 0x50, 0x83, 0x52, 0x96, 0x00,
441 0x50, 0x84, 0x52, 0x97, 0x00, 0x50, 0x85, 0x10,
442 0x55, 0x00, 0x50, 0x86, 0x52, 0x98, 0x00, 0x50,
443 0x88, 0x43, 0x7d, 0x00, 0x50, 0x8a, 0x52, 0x99,
444 0x00, 0x50, 0x8d, 0x0e, 0x63, 0x00, 0x50, 0x8e,
445 0x4a, 0xd7, 0x00, 0x50, 0x8f, 0x38, 0x01, 0x00,
446 0x50, 0x90, 0x52, 0x9a, 0x00, 0x50, 0x91, 0x07,
447 0x3c, 0x00, 0x50, 0x92, 0x43, 0x7e, 0x00, 0x50,
448 0x93, 0x43, 0x7f, 0x00, 0x50, 0x94, 0x20, 0xc6,
449 0x00, 0x50, 0x95, 0x43, 0x80, 0x00, 0x50, 0x96,
450 0x38, 0x02, 0x00, 0x50, 0x98, 0x08, 0x7f, 0x00,
451 0x50, 0x99, 0x0d, 0x8b, 0x00, 0x50, 0x9a, 0x10,
452 0x54, 0x00, 0x50, 0x9b, 0x52, 0x9b, 0x00, 0x50,
453 0x9c, 0x38, 0x03, 0x00, 0x50, 0x9e, 0x4a, 0xd8,
454 0x00, 0x50, 0x9f, 0x52, 0x9c, 0x00, 0x50, 0xa0,
455 0x52, 0x9d, 0x00, 0x50, 0xa1, 0x52, 0x9e, 0x00,
456 0x50, 0xa2, 0x4a, 0xd9, 0x00, 0x50, 0xa3, 0x43,
457 0x7c, 0x00, 0x50, 0xaa, 0x43, 0x81, 0x00, 0x50,
458 0xac, 0x08, 0x35, 0x00, 0x50, 0xad, 0x0f, 0x2d,
459 0x00, 0x50, 0xaf, 0x52, 0x9f, 0x00, 0x50, 0xb0,
460 0x52, 0xa0, 0x00, 0x50, 0xb1, 0x43, 0x83, 0x00,
461 0x50, 0xb2, 0x10, 0x57, 0x00, 0x50, 0xb3, 0x10,
462 0x5a, 0x00, 0x50, 0xb4, 0x10, 0x56, 0x00, 0x50,
463 0xb5, 0x08, 0x34, 0x00, 0x50, 0xb7, 0x09, 0x87,
464 0x00, 0x50, 0xb9, 0x52, 0xa1, 0x00, 0x50, 0xba,
465 0x43, 0x84, 0x00, 0x50, 0xbb, 0x43, 0x85, 0x00,
466 0x50, 0xbd, 0x52, 0xa2, 0x00, 0x50, 0xbe, 0x07,
467 0x0f, 0x00, 0x50, 0xc0, 0x52, 0xa3, 0x00, 0x50,
468 0xc2, 0x10, 0x5b, 0x00, 0x50, 0xc3, 0x4a, 0xda,
469 0x00, 0x50, 0xc4, 0x43, 0x86, 0x00, 0x50, 0xc5,
470 0x06, 0xc7, 0x00, 0x50, 0xc7, 0x43, 0x87, 0x00,
471 0x50, 0xc9, 0x10, 0x58, 0x00, 0x50, 0xca, 0x10,
472 0x59, 0x00, 0x50, 0xcc, 0x38, 0x04, 0x00, 0x50,
473 0xcd, 0x0c, 0x87, 0x00, 0x50, 0xce, 0x43, 0x8a,
474 0x00, 0x50, 0xcf, 0x0a, 0xfe, 0x00, 0x50, 0xd0,
475 0x41, 0x93, 0x00, 0x50, 0xd1, 0x06, 0x9b, 0x00,
476 0x50, 0xd3, 0x52, 0xa4, 0x00, 0x50, 0xd4, 0x43,
477 0x8c, 0x00, 0x50, 0xd5, 0x0e, 0x7b, 0x00, 0x50,
478 0xd6, 0x10, 0x5c, 0x00, 0x50, 0xd8, 0x20, 0xc8,
479 0x00, 0x50, 0xd9, 0x3c, 0x30, 0x00, 0x50, 0xda,
480 0x0f, 0x85, 0x00, 0x50, 0xdc, 0x52, 0xa5, 0x00,
481 0x50, 0xdd, 0x52, 0xa6, 0x00, 0x50, 0xde, 0x10,
482 0x5d, 0x00, 0x50, 0xdf, 0x52, 0xa7, 0x00, 0x50,
483 0xe1, 0x43, 0x8d, 0x00, 0x50, 0xe2, 0x52, 0xa8,
484 0x00, 0x50, 0xe3, 0x10, 0x60, 0x00, 0x50, 0xe4,
485 0x52, 0xa9, 0x00, 0x50, 0xe5, 0x10, 0x5e, 0x00,
486 0x50, 0xe6, 0x38, 0x05, 0x00, 0x50, 0xe7, 0x0a,
487 0xd0, 0x00, 0x50, 0xe8, 0x4a, 0xdb, 0x00, 0x50,
488 0xe9, 0x38, 0x06, 0x00, 0x50, 0xed, 0x10, 0x5f,
489 0x00, 0x50, 0xee, 0x10, 0x61, 0x00, 0x50, 0xef,
490 0x38, 0x07, 0x00, 0x50, 0xf0, 0x3c, 0x31, 0x00,
491 0x50, 0xf1, 0x4a, 0xdc, 0x00, 0x50, 0xf2, 0x41,
492 0x92, 0x00, 0x50, 0xf3, 0x43, 0x88, 0x00, 0x50,
493 0xf4, 0x20, 0xc7, 0x00, 0x50, 0xf5, 0x10, 0x63,
494 0x00, 0x50, 0xf6, 0x52, 0xaa, 0x00, 0x50, 0xf9,
495 0x10, 0x62, 0x00, 0x50, 0xfa, 0x52, 0xab, 0x00,
496 0x50, 0xfb, 0x0e, 0x18, 0x00, 0x50, 0xfe, 0x4a,
497 0xdd, 0x00, 0x51, 0x00, 0x06, 0x51, 0x00, 0x51,
498 0x01, 0x10, 0x65, 0x00, 0x51, 0x02, 0x10, 0x66,
499 0x00, 0x51, 0x03, 0x41, 0x95, 0x00, 0x51, 0x04,
500 0x05, 0x2f, 0x00, 0x51, 0x06, 0x41, 0x94, 0x00,
501 0x51, 0x07, 0x4a, 0xde, 0x00, 0x51, 0x08, 0x38,
502 0x08, 0x00, 0x51, 0x09, 0x10, 0x64, 0x00, 0x51,
503 0x0b, 0x38, 0x09, 0x00, 0x51, 0x0c, 0x4a, 0xdf,
504 0x00, 0x51, 0x0d, 0x4a, 0xe0, 0x00, 0x51, 0x0e,
505 0x4a, 0xe1, 0x00, 0x51, 0x10, 0x38, 0x0a, 0x00,
506 0x51, 0x12, 0x09, 0x20, 0x00, 0x51, 0x14, 0x10,
507 0x69, 0x00, 0x51, 0x15, 0x10, 0x68, 0x00, 0x51,
508 0x16, 0x10, 0x67, 0x00, 0x51, 0x17, 0x43, 0x90,
509 0x00, 0x51, 0x18, 0x10, 0x2f, 0x00, 0x51, 0x19,
510 0x52, 0xad, 0x00, 0x51, 0x1a, 0x10, 0x6a, 0x00,
511 0x51, 0x1b, 0x38, 0x0b, 0x00, 0x51, 0x1c, 0x52,
512 0xae, 0x00, 0x51, 0x1d, 0x52, 0xaf, 0x00, 0x51,
513 0x1e, 0x38, 0x0c, 0x00, 0x51, 0x1f, 0x09, 0x88,
514 0x00, 0x51, 0x21, 0x10, 0x6b, 0x00, 0x51, 0x23,
515 0x52, 0xb0, 0x00, 0x51, 0x27, 0x52, 0xb1, 0x00,
516 0x51, 0x28, 0x52, 0xb2, 0x00, 0x51, 0x2a, 0x0f,
517 0x0f, 0x00, 0x51, 0x2c, 0x52, 0xb3, 0x00, 0x51,
518 0x2d, 0x52, 0xb4, 0x00, 0x51, 0x2f, 0x52, 0xb5,
519 0x00, 0x51, 0x31, 0x52, 0xb6, 0x00, 0x51, 0x32,
520 0x0e, 0xe5, 0x00, 0x51, 0x33, 0x4a, 0xe2, 0x00,
521 0x51, 0x34, 0x52, 0xb7, 0x00, 0x51, 0x35, 0x41,
522 0x96, 0x00, 0x51, 0x37, 0x10, 0x6d, 0x00, 0x51,
523 0x38, 0x4a, 0xe3, 0x00, 0x51, 0x39, 0x52, 0xb8,
524 0x00, 0x51, 0x3a, 0x10, 0x6c, 0x00, 0x51, 0x3b,
525 0x10, 0x6f, 0x00, 0x51, 0x3c, 0x10, 0x6e, 0x00,
526 0x51, 0x3f, 0x10, 0x70, 0x00, 0x51, 0x40, 0x10,
527 0x71, 0x00, 0x51, 0x41, 0x04, 0xb8, 0x00, 0x51,
528 0x42, 0x52, 0xb9, 0x00, 0x51, 0x43, 0x07, 0x69,
529 0x00, 0x51, 0x44, 0x07, 0x11, 0x00, 0x51, 0x45,
530 0x09, 0x46, 0x00, 0x51, 0x46, 0x0b, 0xb9, 0x00,
531 0x51, 0x47, 0x06, 0x9c, 0x00, 0x51, 0x48, 0x0a,
532 0x8c, 0x00, 0x51, 0x49, 0x07, 0xab, 0x00, 0x51,
533 0x4a, 0x20, 0xc9, 0x00, 0x51, 0x4b, 0x08, 0x00,
534 0x00, 0x51, 0x4c, 0x10, 0x73, 0x00, 0x51, 0x4d,
535 0x0e, 0xd4, 0x00, 0x51, 0x4e, 0x0c, 0x40, 0x00,
536 0x51, 0x4f, 0x52, 0xba, 0x00, 0x51, 0x50, 0x08,
537 0xc7, 0x00, 0x51, 0x52, 0x10, 0x72, 0x00, 0x51,
538 0x53, 0x52, 0xbb, 0x00, 0x51, 0x54, 0x1e, 0x86,
539 0x00, 0x51, 0x55, 0x41, 0x97, 0x00, 0x51, 0x57,
540 0x41, 0x98, 0x00, 0x51, 0x58, 0x52, 0xbc, 0x00,
541 0x51, 0x5a, 0x0c, 0x58, 0x00, 0x51, 0x5c, 0x05,
542 0xd3, 0x00, 0x51, 0x5f, 0x38, 0x0d, 0x00, 0x51,
543 0x60, 0x43, 0x92, 0x00, 0x51, 0x62, 0x10, 0x75,
544 0x00, 0x51, 0x64, 0x20, 0xca, 0x00, 0x51, 0x65,
545 0x0c, 0xd6, 0x00, 0x51, 0x66, 0x52, 0xbd, 0x00,
546 0x51, 0x67, 0x36, 0x8e, 0x00, 0x51, 0x68, 0x0a,
547 0xb6, 0x00, 0x51, 0x69, 0x10, 0x77, 0x00, 0x51,
548 0x6a, 0x10, 0x78, 0x00, 0x51, 0x6b, 0x0d, 0x40,
549 0x00, 0x51, 0x6c, 0x07, 0xac, 0x00, 0x51, 0x6d,
550 0x0f, 0xe1, 0x00, 0x51, 0x6e, 0x10, 0x79, 0x00,
551 0x51, 0x71, 0x06, 0x9e, 0x00, 0x51, 0x73, 0x43,
552 0x94, 0x00, 0x51, 0x74, 0x4a, 0xe4, 0x00, 0x51,
553 0x75, 0x0e, 0x0c, 0x00, 0x51, 0x76, 0x0b, 0x16,
554 0x00, 0x51, 0x77, 0x06, 0xe9, 0x00, 0x51, 0x78,
555 0x0c, 0x2f, 0x00, 0x51, 0x79, 0x37, 0x79, 0x00,
556 0x51, 0x7b, 0x47, 0xd9, 0x00, 0x51, 0x7c, 0x07,
557 0x49, 0x00, 0x51, 0x7e, 0x52, 0xbe, 0x00, 0x51,
558 0x80, 0x10, 0x7a, 0x00, 0x51, 0x82, 0x10, 0x7b,
559 0x00, 0x51, 0x83, 0x43, 0x95, 0x00, 0x51, 0x84,
560 0x4a, 0xe5, 0x00, 0x51, 0x85, 0x0c, 0xba, 0x00,
561 0x51, 0x86, 0x05, 0x01, 0x00, 0x51, 0x89, 0x10,
562 0x7e, 0x00, 0x51, 0x8a, 0x08, 0x6d, 0x00, 0x51,
563 0x8b, 0x43, 0x96, 0x00, 0x51, 0x8c, 0x10, 0x7d,
564 0x00, 0x51, 0x8d, 0x4e, 0x5d, 0x00, 0x51, 0x8e,
565 0x52, 0xbf, 0x00, 0x51, 0x8f, 0x10, 0x7f, 0x00,
566 0x51, 0x90, 0x18, 0x5b, 0x00, 0x51, 0x91, 0x10,
567 0x80, 0x00, 0x51, 0x92, 0x0e, 0x6f, 0x00, 0x51,
568 0x93, 0x10, 0x81, 0x00, 0x51, 0x95, 0x1e, 0x88,
569 0x00, 0x51, 0x96, 0x10, 0x83, 0x00, 0x51, 0x97,
570 0x09, 0xd1, 0x00, 0x51, 0x98, 0x43, 0x98, 0x00,
571 0x51, 0x99, 0x08, 0xf8, 0x00, 0x51, 0x9d, 0x20,
572 0xcb, 0x00, 0x51, 0xa0, 0x05, 0xe3, 0x00, 0x51,
573 0xa1, 0x38, 0x0e, 0x00, 0x51, 0xa2, 0x10, 0x86,
574 0x00, 0x51, 0xa3, 0x43, 0x99, 0x00, 0x51, 0xa4,
575 0x10, 0x84, 0x00, 0x51, 0xa5, 0x0e, 0xc9, 0x00,
576 0x51, 0xa6, 0x10, 0x85, 0x00, 0x51, 0xa8, 0x0d,
577 0xcc, 0x00, 0x51, 0xa9, 0x10, 0x87, 0x00, 0x51,
578 0xaa, 0x10, 0x88, 0x00, 0x51, 0xab, 0x10, 0x89,
579 0x00, 0x51, 0xac, 0x36, 0x82, 0x00, 0x51, 0xad,
580 0x43, 0x9a, 0x00, 0x51, 0xb0, 0x10, 0x8d, 0x00,
581 0x51, 0xb1, 0x10, 0x8b, 0x00, 0x51, 0xb2, 0x10,
582 0x8c, 0x00, 0x51, 0xb3, 0x10, 0x8a, 0x00, 0x51,
583 0xb4, 0x08, 0x53, 0x00, 0x51, 0xb5, 0x10, 0x8e,
584 0x00, 0x51, 0xb6, 0x0e, 0xf6, 0x00, 0x51, 0xb7,
585 0x0f, 0xac, 0x00, 0x51, 0xb8, 0x4a, 0xe6, 0x00,
586 0x51, 0xba, 0x4a, 0xe7, 0x00, 0x51, 0xbc, 0x38,
587 0x0f, 0x00, 0x51, 0xbd, 0x10, 0x8f, 0x00, 0x51,
588 0xbe, 0x20, 0xcc, 0x00, 0x51, 0xbf, 0x52, 0xc0,
589 0x00, 0x51, 0xc2, 0x52, 0xc1, 0x00, 0x51, 0xc3,
590 0x3c, 0x32, 0x00, 0x51, 0xc4, 0x0a, 0x4c, 0x00,
591 0x51, 0xc5, 0x10, 0x90, 0x00, 0x51, 0xc6, 0x09,
592 0x64, 0x00, 0x51, 0xc8, 0x4a, 0xe8, 0x00, 0x51,
593 0xc9, 0x10, 0x91, 0x00, 0x51, 0xca, 0x41, 0x9a,
594 0x00, 0x51, 0xcb, 0x0b, 0xba, 0x00, 0x51, 0xcc,
595 0x0f, 0x87, 0x00, 0x51, 0xcd, 0x0c, 0x5a, 0x00,
596 0x51, 0xcf, 0x4a, 0xe9, 0x00, 0x51, 0xd1, 0x4a,
597 0xea, 0x00, 0x51, 0xd2, 0x52, 0xc2, 0x00, 0x51,
598 0xd3, 0x4a, 0xeb, 0x00, 0x51, 0xd4, 0x4a, 0xec,
599 0x00, 0x51, 0xd5, 0x52, 0xc3, 0x00, 0x51, 0xd6,
600 0x10, 0xda, 0x00, 0x51, 0xd8, 0x4a, 0xed, 0x00,
601 0x51, 0xdb, 0x10, 0x92, 0x00, 0x51, 0xdc, 0x20,
602 0x5c, 0x00, 0x51, 0xdd, 0x06, 0xbd, 0x00, 0x51,
603 0xde, 0x4f, 0x4c, 0x00, 0x51, 0xdf, 0x4a, 0xee,
604 0x00, 0x51, 0xe0, 0x10, 0x93, 0x00, 0x51, 0xe1,
605 0x0e, 0x8c, 0x00, 0x51, 0xe2, 0x41, 0x9b, 0x00,
606 0x51, 0xe5, 0x52, 0xc4, 0x00, 0x51, 0xe6, 0x09,
607 0x72, 0x00, 0x51, 0xe7, 0x0b, 0x5c, 0x00, 0x51,
608 0xe9, 0x10, 0x95, 0x00, 0x51, 0xea, 0x0c, 0xbc,
609 0x00, 0x51, 0xec, 0x20, 0xcd, 0x00, 0x51, 0xed,
610 0x10, 0x96, 0x00, 0x51, 0xee, 0x38, 0x11, 0x00,
611 0x51, 0xf0, 0x10, 0x97, 0x00, 0x51, 0xf1, 0x05,
612 0x8c, 0x00, 0x51, 0xf2, 0x52, 0xc5, 0x00, 0x51,
613 0xf3, 0x43, 0x9d, 0x00, 0x51, 0xf4, 0x38, 0x12,
614 0x00, 0x51, 0xf5, 0x10, 0x98, 0x00, 0x51, 0xf6,
615 0x06, 0x9f, 0x00, 0x51, 0xf7, 0x52, 0xc6, 0x00,
616 0x51, 0xf8, 0x0c, 0xa4, 0x00, 0x51, 0xf9, 0x05,
617 0x1c, 0x00, 0x51, 0xfa, 0x09, 0x5a, 0x00, 0x51,
618 0xfd, 0x0d, 0x35, 0x00, 0x51, 0xfe, 0x10, 0x99,
619 0x00, 0x52, 0x00, 0x0c, 0x5b, 0x00, 0x52, 0x01,
620 0x38, 0x13, 0x00, 0x52, 0x02, 0x38, 0x14, 0x00,
621 0x52, 0x03, 0x0a, 0x15, 0x00, 0x52, 0x04, 0x10,
622 0x9a, 0x00, 0x52, 0x05, 0x4a, 0xef, 0x00, 0x52,
623 0x06, 0x0d, 0xfc, 0x00, 0x52, 0x07, 0x0a, 0x7e,
624 0x00, 0x52, 0x08, 0x05, 0xde, 0x00, 0x52, 0x0a,
625 0x05, 0xe5, 0x00, 0x52, 0x0b, 0x10, 0x9b, 0x00,
626 0x52, 0x0e, 0x10, 0x9d, 0x00, 0x52, 0x11, 0x07,
627 0x10, 0x00, 0x52, 0x12, 0x43, 0x9e, 0x00, 0x52,
628 0x13, 0x38, 0x15, 0x00, 0x52, 0x14, 0x10, 0x9c,
629 0x00, 0x52, 0x15, 0x20, 0xce, 0x00, 0x52, 0x16,
630 0x43, 0x9f, 0x00, 0x52, 0x17, 0x0f, 0xbb, 0x00,
631 0x52, 0x18, 0x52, 0xc7, 0x00, 0x52, 0x1d, 0x09,
632 0x73, 0x00, 0x52, 0x22, 0x52, 0xc8, 0x00, 0x52,
633 0x24, 0x0d, 0x51, 0x00, 0x52, 0x25, 0x0e, 0x1c,
634 0x00, 0x52, 0x26, 0x4a, 0xf0, 0x00, 0x52, 0x27,
635 0x10, 0x9e, 0x00, 0x52, 0x28, 0x4a, 0xf1, 0x00,
636 0x52, 0x29, 0x0f, 0x62, 0x00, 0x52, 0x2a, 0x10,
637 0x9f, 0x00, 0x52, 0x2b, 0x4a, 0xf2, 0x00, 0x52,
638 0x2e, 0x10, 0xa0, 0x00, 0x52, 0x30, 0x0c, 0x78,
639 0x00, 0x52, 0x31, 0x4a, 0xf3, 0x00, 0x52, 0x32,
640 0x4a, 0xf4, 0x00, 0x52, 0x33, 0x10, 0xa1, 0x00,
641 0x52, 0x35, 0x4a, 0xf5, 0x00, 0x52, 0x36, 0x0a,
642 0x4d, 0x00, 0x52, 0x37, 0x08, 0x6e, 0x00, 0x52,
643 0x38, 0x07, 0x4a, 0x00, 0x52, 0x39, 0x10, 0xa2,
644 0x00, 0x52, 0x3a, 0x08, 0x97, 0x00, 0x52, 0x3b,
645 0x08, 0x01, 0x00, 0x52, 0x3c, 0x4a, 0xf6, 0x00,
646 0x52, 0x43, 0x0c, 0x02, 0x00, 0x52, 0x44, 0x10,
647 0xa4, 0x00, 0x52, 0x45, 0x52, 0xc9, 0x00, 0x52,
648 0x47, 0x0b, 0x07, 0x00, 0x52, 0x49, 0x38, 0x16,
649 0x00, 0x52, 0x4a, 0x08, 0x5f, 0x00, 0x52, 0x4b,
650 0x10, 0xa5, 0x00, 0x52, 0x4c, 0x10, 0xa6, 0x00,
651 0x52, 0x4d, 0x0a, 0xb2, 0x00, 0x52, 0x4f, 0x10,
652 0xa3, 0x00, 0x52, 0x54, 0x10, 0xa8, 0x00, 0x52,
653 0x55, 0x43, 0xa1, 0x00, 0x52, 0x56, 0x0e, 0x64,
654 0x00, 0x52, 0x57, 0x41, 0x9c, 0x00, 0x52, 0x58,
655 0x52, 0xca, 0x00, 0x52, 0x5a, 0x4a, 0xf7, 0x00,
656 0x52, 0x5b, 0x07, 0xf6, 0x00, 0x52, 0x5c, 0x43,
657 0xa2, 0x00, 0x52, 0x5d, 0x1e, 0x5e, 0x00, 0x52,
658 0x5e, 0x10, 0xa7, 0x00, 0x52, 0x5f, 0x52, 0xcb,
659 0x00, 0x52, 0x60, 0x4a, 0xf8, 0x00, 0x52, 0x61,
660 0x38, 0x17, 0x00, 0x52, 0x63, 0x07, 0x4b, 0x00,
661 0x52, 0x64, 0x08, 0x4e, 0x00, 0x52, 0x65, 0x0d,
662 0x23, 0x00, 0x52, 0x66, 0x38, 0x18, 0x00, 0x52,
663 0x69, 0x10, 0xab, 0x00, 0x52, 0x6a, 0x10, 0xa9,
664 0x00, 0x52, 0x6c, 0x43, 0xa3, 0x00, 0x52, 0x6e,
665 0x4a, 0xf9, 0x00, 0x52, 0x6f, 0x0d, 0xed, 0x00,
666 0x52, 0x70, 0x09, 0xd2, 0x00, 0x52, 0x71, 0x10,
667 0xb2, 0x00, 0x52, 0x72, 0x35, 0x74, 0x00, 0x52,
668 0x73, 0x10, 0xac, 0x00, 0x52, 0x74, 0x10, 0xaa,
669 0x00, 0x52, 0x75, 0x0a, 0xd1, 0x00, 0x52, 0x77,
670 0x43, 0xa4, 0x00, 0x52, 0x78, 0x4a, 0xfa, 0x00,
671 0x52, 0x79, 0x4a, 0xfb, 0x00, 0x52, 0x7d, 0x10,
672 0xae, 0x00, 0x52, 0x7f, 0x10, 0xad, 0x00, 0x52,
673 0x80, 0x52, 0xcc, 0x00, 0x52, 0x82, 0x43, 0xa6,
674 0x00, 0x52, 0x83, 0x05, 0xa2, 0x00, 0x52, 0x84,
675 0x43, 0xa5, 0x00, 0x52, 0x85, 0x52, 0xcd, 0x00,
676 0x52, 0x87, 0x07, 0x36, 0x00, 0x52, 0x88, 0x10,
677 0xb3, 0x00, 0x52, 0x89, 0x0f, 0x75, 0x00, 0x52,
678 0x8a, 0x4a, 0xfc, 0x00, 0x52, 0x8c, 0x4a, 0xfd,
679 0x00, 0x52, 0x8d, 0x10, 0xaf, 0x00, 0x52, 0x91,
680 0x10, 0xb4, 0x00, 0x52, 0x92, 0x10, 0xb1, 0x00,
681 0x52, 0x93, 0x38, 0x19, 0x00, 0x52, 0x94, 0x10,
682 0xb0, 0x00, 0x52, 0x95, 0x52, 0xce, 0x00, 0x52,
683 0x96, 0x52, 0xcf, 0x00, 0x52, 0x97, 0x52, 0xd0,
684 0x00, 0x52, 0x98, 0x43, 0xa8, 0x00, 0x52, 0x9a,
685 0x52, 0xd1, 0x00, 0x52, 0x9b, 0x0f, 0x97, 0x00,
686 0x52, 0x9c, 0x20, 0xcf, 0x00, 0x52, 0x9f, 0x07,
687 0xad, 0x00, 0x52, 0xa0, 0x05, 0x43, 0x00, 0x52,
688 0xa3, 0x0f, 0xbc, 0x00, 0x52, 0xa4, 0x43, 0xaa,
689 0x00, 0x52, 0xa5, 0x52, 0xd2, 0x00, 0x52, 0xa6,
690 0x20, 0xd0, 0x00, 0x52, 0xa7, 0x52, 0xd3, 0x00,
691 0x52, 0xa9, 0x09, 0x7f, 0x00, 0x52, 0xaa, 0x0c,
692 0x52, 0x00, 0x52, 0xab, 0x07, 0xf7, 0x00, 0x52,
693 0xac, 0x10, 0xb7, 0x00, 0x52, 0xad, 0x10, 0xb8,
694 0x00, 0x52, 0xaf, 0x21, 0x7d, 0x00, 0x52, 0xb0,
695 0x52, 0xd4, 0x00, 0x52, 0xb1, 0x0f, 0xad, 0x00,
696 0x52, 0xb4, 0x0f, 0xd1, 0x00, 0x52, 0xb5, 0x10,
697 0xba, 0x00, 0x52, 0xb6, 0x52, 0xd5, 0x00, 0x52,
698 0xb7, 0x52, 0xd6, 0x00, 0x52, 0xb8, 0x52, 0xd7,
699 0x00, 0x52, 0xb9, 0x07, 0xae, 0x00, 0x52, 0xba,
700 0x43, 0xab, 0x00, 0x52, 0xbb, 0x43, 0xac, 0x00,
701 0x52, 0xbc, 0x10, 0xb9, 0x00, 0x52, 0xbd, 0x52,
702 0xd8, 0x00, 0x52, 0xbe, 0x05, 0x8d, 0x00, 0x52,
703 0xc0, 0x20, 0xd1, 0x00, 0x52, 0xc1, 0x10, 0xbb,
704 0x00, 0x52, 0xc3, 0x0e, 0x84, 0x00, 0x52, 0xc4,
705 0x52, 0xd9, 0x00, 0x52, 0xc5, 0x0b, 0xd8, 0x00,
706 0x52, 0xc6, 0x52, 0xda, 0x00, 0x52, 0xc7, 0x0f,
707 0x10, 0x00, 0x52, 0xc8, 0x38, 0x1a, 0x00, 0x52,
708 0xc9, 0x34, 0x49, 0x00, 0x52, 0xca, 0x43, 0xad,
709 0x00, 0x52, 0xcc, 0x41, 0x9d, 0x00, 0x52, 0xcd,
710 0x10, 0xbc, 0x00, 0x52, 0xcf, 0x52, 0xdb, 0x00,
711 0x52, 0xd0, 0x36, 0xe8, 0x00, 0x52, 0xd1, 0x43,
712 0xae, 0x00, 0x52, 0xd2, 0x1b, 0xee, 0x00, 0x52,
713 0xd4, 0x52, 0xdc, 0x00, 0x52, 0xd5, 0x0c, 0x88,
714 0x00, 0x52, 0xd6, 0x41, 0x9e, 0x00, 0x52, 0xd7,
715 0x10, 0xbd, 0x00, 0x52, 0xd8, 0x05, 0xe6, 0x00,
716 0x52, 0xd9, 0x0e, 0xbf, 0x00, 0x52, 0xdb, 0x20,
717 0xd2, 0x00, 0x52, 0xdc, 0x52, 0xdd, 0x00, 0x52,
718 0xdd, 0x09, 0x89, 0x00, 0x52, 0xde, 0x10, 0xbe,
719 0x00, 0x52, 0xdf, 0x0e, 0x37, 0x00, 0x52, 0xe0,
720 0x10, 0xc2, 0x00, 0x52, 0xe1, 0x4a, 0xfe, 0x00,
721 0x52, 0xe2, 0x0a, 0x4e, 0x00, 0x52, 0xe3, 0x10,
722 0xbf, 0x00, 0x52, 0xe4, 0x06, 0xc8, 0x00, 0x52,
723 0xe5, 0x52, 0xde, 0x00, 0x52, 0xe6, 0x10, 0xc0,
724 0x00, 0x52, 0xe7, 0x05, 0xe7, 0x00, 0x52, 0xe8,
725 0x52, 0xdf, 0x00, 0x52, 0xe9, 0x4a, 0xff, 0x00,
726 0x52, 0xea, 0x52, 0xe0, 0x00, 0x52, 0xec, 0x52,
727 0xe1, 0x00, 0x52, 0xf0, 0x38, 0x1b, 0x00, 0x52,
728 0xf1, 0x4b, 0x00, 0x00, 0x52, 0xf2, 0x07, 0x04,
729 0x00, 0x52, 0xf3, 0x10, 0xc3, 0x00, 0x52, 0xf4,
730 0x52, 0xe2, 0x00, 0x52, 0xf5, 0x10, 0xc4, 0x00,
731 0x52, 0xf6, 0x52, 0xe3, 0x00, 0x52, 0xf7, 0x43,
732 0xb0, 0x00, 0x52, 0xf8, 0x10, 0xc5, 0x00, 0x52,
733 0xf9, 0x10, 0xc6, 0x00, 0x52, 0xfa, 0x35, 0xef,
734 0x00, 0x52, 0xfb, 0x41, 0x9f, 0x00, 0x52, 0xfe,
735 0x07, 0xaf, 0x00, 0x52, 0xff, 0x0e, 0xea, 0x00,
736 0x53, 0x00, 0x20, 0xd3, 0x00, 0x53, 0x01, 0x0e,
737 0xf4, 0x00, 0x53, 0x02, 0x0c, 0xcf, 0x00, 0x53,
738 0x03, 0x4b, 0x01, 0x00, 0x53, 0x05, 0x0e, 0x41,
739 0x00, 0x53, 0x06, 0x10, 0xc7, 0x00, 0x53, 0x07,
740 0x4f, 0x4d, 0x00, 0x53, 0x08, 0x10, 0xc8, 0x00,
741 0x53, 0x0a, 0x38, 0x1c, 0x00, 0x53, 0x0b, 0x38,
742 0x1d, 0x00, 0x53, 0x0c, 0x52, 0xe4, 0x00, 0x53,
743 0x0d, 0x10, 0xca, 0x00, 0x53, 0x0f, 0x10, 0xcc,
744 0x00, 0x53, 0x10, 0x10, 0xcb, 0x00, 0x53, 0x11,
745 0x4b, 0x02, 0x00, 0x53, 0x13, 0x52, 0xe5, 0x00,
746 0x53, 0x15, 0x10, 0xcd, 0x00, 0x53, 0x16, 0x05,
747 0x3d, 0x00, 0x53, 0x17, 0x0e, 0x7a, 0x00, 0x53,
748 0x18, 0x52, 0xe6, 0x00, 0x53, 0x19, 0x08, 0x6c,
749 0x00, 0x53, 0x1a, 0x10, 0xce, 0x00, 0x53, 0x1b,
750 0x52, 0xe7, 0x00, 0x53, 0x1c, 0x41, 0xa0, 0x00,
751 0x53, 0x1d, 0x0a, 0xdb, 0x00, 0x53, 0x1e, 0x52,
752 0xe8, 0x00, 0x53, 0x1f, 0x4b, 0x03, 0x00, 0x53,
753 0x20, 0x09, 0x8a, 0x00, 0x53, 0x21, 0x06, 0xa1,
754 0x00, 0x53, 0x23, 0x10, 0xcf, 0x00, 0x53, 0x24,
755 0x20, 0xd5, 0x00, 0x53, 0x25, 0x52, 0xe9, 0x00,
756 0x53, 0x27, 0x52, 0xea, 0x00, 0x53, 0x28, 0x52,
757 0xeb, 0x00, 0x53, 0x29, 0x52, 0xec, 0x00, 0x53,
758 0x2a, 0x0d, 0x6f, 0x00, 0x53, 0x2b, 0x52, 0xed,
759 0x00, 0x53, 0x2c, 0x52, 0xee, 0x00, 0x53, 0x2d,
760 0x4b, 0x04, 0x00, 0x53, 0x2f, 0x10, 0xd0, 0x00,
761 0x53, 0x30, 0x52, 0xef, 0x00, 0x53, 0x31, 0x10,
762 0xd1, 0x00, 0x53, 0x32, 0x4b, 0x05, 0x00, 0x53,
763 0x33, 0x10, 0xd2, 0x00, 0x53, 0x35, 0x43, 0xb1,
764 0x00, 0x53, 0x38, 0x10, 0xd3, 0x00, 0x53, 0x39,
765 0x0d, 0x96, 0x00, 0x53, 0x3a, 0x06, 0xe0, 0x00,
766 0x53, 0x3b, 0x04, 0xa9, 0x00, 0x53, 0x3c, 0x52,
767 0xf0, 0x00, 0x53, 0x3d, 0x4b, 0x06, 0x00, 0x53,
768 0x3e, 0x38, 0x1e, 0x00, 0x53, 0x3f, 0x0c, 0x97,
769 0x00, 0x53, 0x40, 0x10, 0xd4, 0x00, 0x53, 0x41,
770 0x09, 0x47, 0x00, 0x53, 0x42, 0x43, 0xb2, 0x00,
771 0x53, 0x43, 0x0a, 0x8d, 0x00, 0x53, 0x45, 0x10,
772 0xd6, 0x00, 0x53, 0x46, 0x10, 0xd5, 0x00, 0x53,
773 0x47, 0x09, 0x8b, 0x00, 0x53, 0x48, 0x07, 0x95,
774 0x00, 0x53, 0x49, 0x10, 0xd8, 0x00, 0x53, 0x4a,
775 0x0d, 0x52, 0x00, 0x53, 0x4b, 0x38, 0x20, 0x00,
776 0x53, 0x4c, 0x38, 0x1f, 0x00, 0x53, 0x4d, 0x10,
777 0xd9, 0x00, 0x53, 0x51, 0x34, 0x42, 0x00, 0x53,
778 0x52, 0x0b, 0x14, 0x00, 0x53, 0x53, 0x0b, 0x4e,
779 0x00, 0x53, 0x54, 0x06, 0xa0, 0x00, 0x53, 0x57,
780 0x0c, 0xc6, 0x00, 0x53, 0x58, 0x0b, 0x6f, 0x00,
781 0x53, 0x59, 0x52, 0xf1, 0x00, 0x53, 0x5a, 0x0d,
782 0x24, 0x00, 0x53, 0x5b, 0x52, 0xf2, 0x00, 0x53,
783 0x5c, 0x0e, 0x7c, 0x00, 0x53, 0x5e, 0x10, 0xdb,
784 0x00, 0x53, 0x60, 0x0a, 0x8e, 0x00, 0x53, 0x61,
785 0x38, 0x21, 0x00, 0x53, 0x63, 0x41, 0xa1, 0x00,
786 0x53, 0x65, 0x4b, 0x07, 0x00, 0x53, 0x66, 0x07,
787 0x0b, 0x00, 0x53, 0x67, 0x43, 0xb5, 0x00, 0x53,
788 0x69, 0x10, 0xdc, 0x00, 0x53, 0x6c, 0x38, 0x22,
789 0x00, 0x53, 0x6d, 0x4b, 0x08, 0x00, 0x53, 0x6e,
790 0x10, 0xdd, 0x00, 0x53, 0x6f, 0x04, 0xce, 0x00,
791 0x53, 0x70, 0x04, 0xb9, 0x00, 0x53, 0x71, 0x06,
792 0x29, 0x00, 0x53, 0x72, 0x20, 0xd6, 0x00, 0x53,
793 0x73, 0x0b, 0x08, 0x00, 0x53, 0x74, 0x06, 0x6b,
794 0x00, 0x53, 0x75, 0x0f, 0x5b, 0x00, 0x53, 0x77,
795 0x10, 0xe0, 0x00, 0x53, 0x78, 0x05, 0x37, 0x00,
796 0x53, 0x79, 0x4b, 0x09, 0x00, 0x53, 0x7a, 0x43,
797 0xb6, 0x00, 0x53, 0x7b, 0x10, 0xdf, 0x00, 0x53,
798 0x7d, 0x34, 0x35, 0x00, 0x53, 0x7e, 0x4b, 0x0a,
799 0x00, 0x53, 0x7f, 0x35, 0x97, 0x00, 0x53, 0x82,
800 0x10, 0xe1, 0x00, 0x53, 0x83, 0x52, 0xf4, 0x00,
801 0x53, 0x84, 0x0e, 0xfd, 0x00, 0x53, 0x87, 0x52,
802 0xf5, 0x00, 0x53, 0x88, 0x52, 0xf6, 0x00, 0x53,
803 0x89, 0x37, 0xd0, 0x00, 0x53, 0x8e, 0x52, 0xf7,
804 0x00, 0x53, 0x93, 0x20, 0xd7, 0x00, 0x53, 0x94,
805 0x4b, 0x0b, 0x00, 0x53, 0x96, 0x10, 0xe2, 0x00,
806 0x53, 0x98, 0x0f, 0x9a, 0x00, 0x53, 0x99, 0x4b,
807 0x0c, 0x00, 0x53, 0x9a, 0x07, 0xb0, 0x00, 0x53,
808 0x9d, 0x41, 0xa2, 0x00, 0x53, 0x9f, 0x07, 0x6a,
809 0x00, 0x53, 0xa0, 0x10, 0xe3, 0x00, 0x53, 0xa1,
810 0x52, 0xf8, 0x00, 0x53, 0xa4, 0x43, 0xb7, 0x00,
811 0x53, 0xa5, 0x10, 0xe5, 0x00, 0x53, 0xa6, 0x10,
812 0xe4, 0x00, 0x53, 0xa8, 0x0a, 0x25, 0x00, 0x53,
813 0xa9, 0x04, 0xdb, 0x00, 0x53, 0xaa, 0x4b, 0x0d,
814 0x00, 0x53, 0xab, 0x38, 0x23, 0x00, 0x53, 0xad,
815 0x05, 0x00, 0x00, 0x53, 0xae, 0x10, 0xe6, 0x00,
816 0x53, 0xaf, 0x4b, 0x0e, 0x00, 0x53, 0xb0, 0x10,
817 0xe7, 0x00, 0x53, 0xb2, 0x20, 0xd8, 0x00, 0x53,
818 0xb3, 0x07, 0x6b, 0x00, 0x53, 0xb4, 0x43, 0xb8,
819 0x00, 0x53, 0xb5, 0x52, 0xf9, 0x00, 0x53, 0xb6,
820 0x10, 0xe8, 0x00, 0x53, 0xb7, 0x43, 0xba, 0x00,
821 0x53, 0xb8, 0x52, 0xfa, 0x00, 0x53, 0xba, 0x4b,
822 0x0f, 0x00, 0x53, 0xbb, 0x06, 0x88, 0x00, 0x53,
823 0xbd, 0x52, 0xfb, 0x00, 0x53, 0xc0, 0x43, 0xbb,
824 0x00, 0x53, 0xc1, 0x4b, 0x10, 0x00, 0x53, 0xc2,
825 0x08, 0x80, 0x00, 0x53, 0xc3, 0x10, 0xe9, 0x00,
826 0x53, 0xc4, 0x4b, 0x11, 0x00, 0x53, 0xc5, 0x4b,
827 0x12, 0x00, 0x53, 0xc8, 0x0e, 0xa2, 0x00, 0x53,
828 0xc9, 0x08, 0x25, 0x00, 0x53, 0xca, 0x06, 0x74,
829 0x00, 0x53, 0xcb, 0x0f, 0x11, 0x00, 0x53, 0xcc,
830 0x0a, 0xd2, 0x00, 0x53, 0xcd, 0x0d, 0x53, 0x00,
831 0x53, 0xce, 0x09, 0x29, 0x00, 0x53, 0xcf, 0x52,
832 0xfc, 0x00, 0x53, 0xd2, 0x52, 0xfd, 0x00, 0x53,
833 0xd3, 0x52, 0xfe, 0x00, 0x53, 0xd4, 0x09, 0x51,
834 0x00, 0x53, 0xd5, 0x43, 0xbf, 0x00, 0x53, 0xd6,
835 0x09, 0x14, 0x00, 0x53, 0xd7, 0x09, 0x21, 0x00,
836 0x53, 0xd9, 0x09, 0x80, 0x00, 0x53, 0xda, 0x38,
837 0x24, 0x00, 0x53, 0xdb, 0x0d, 0x54, 0x00, 0x53,
838 0xdd, 0x20, 0xd9, 0x00, 0x53, 0xde, 0x52, 0xff,
839 0x00, 0x53, 0xdf, 0x10, 0xec, 0x00, 0x53, 0xe0,
840 0x4b, 0x13, 0x00, 0x53, 0xe1, 0x04, 0xe5, 0x00,
841 0x53, 0xe2, 0x0a, 0xd3, 0x00, 0x53, 0xe3, 0x07,
842 0xb1, 0x00, 0x53, 0xe4, 0x07, 0x79, 0x00, 0x53,
843 0xe5, 0x06, 0xdf, 0x00, 0x53, 0xe6, 0x38, 0x25,
844 0x00, 0x53, 0xe7, 0x53, 0x01, 0x00, 0x53, 0xe8,
845 0x10, 0xf0, 0x00, 0x53, 0xe9, 0x0b, 0x5f, 0x00,
846 0x53, 0xea, 0x0b, 0x5e, 0x00, 0x53, 0xeb, 0x06,
847 0xa3, 0x00, 0x53, 0xec, 0x09, 0x8c, 0x00, 0x53,
848 0xed, 0x10, 0xf1, 0x00, 0x53, 0xee, 0x10, 0xef,
849 0x00, 0x53, 0xef, 0x05, 0x44, 0x00, 0x53, 0xf0,
850 0x0b, 0x46, 0x00, 0x53, 0xf1, 0x08, 0xe4, 0x00,
851 0x53, 0xf2, 0x08, 0x99, 0x00, 0x53, 0xf3, 0x04,
852 0xc8, 0x00, 0x53, 0xf4, 0x43, 0xc1, 0x00, 0x53,
853 0xf5, 0x38, 0x26, 0x00, 0x53, 0xf6, 0x05, 0xce,
854 0x00, 0x53, 0xf7, 0x07, 0xf8, 0x00, 0x53, 0xf8,
855 0x08, 0x98, 0x00, 0x53, 0xfa, 0x10, 0xf2, 0x00,
856 0x54, 0x01, 0x10, 0xf3, 0x00, 0x54, 0x02, 0x53,
857 0x02, 0x00, 0x54, 0x03, 0x06, 0x63, 0x00, 0x54,
858 0x04, 0x05, 0xa4, 0x00, 0x54, 0x08, 0x07, 0xf9,
859 0x00, 0x54, 0x09, 0x06, 0x62, 0x00, 0x54, 0x0a,
860 0x0b, 0xfb, 0x00, 0x54, 0x0b, 0x04, 0xc7, 0x00,
861 0x54, 0x0c, 0x0c, 0x89, 0x00, 0x54, 0x0d, 0x0e,
862 0xca, 0x00, 0x54, 0x0e, 0x07, 0xb3, 0x00, 0x54,
863 0x0f, 0x0f, 0x63, 0x00, 0x54, 0x10, 0x0c, 0x41,
864 0x00, 0x54, 0x11, 0x07, 0xb2, 0x00, 0x54, 0x12,
865 0x41, 0xa3, 0x00, 0x54, 0x13, 0x4b, 0x14, 0x00,
866 0x54, 0x1a, 0x53, 0x03, 0x00, 0x54, 0x1b, 0x07,
867 0x05, 0x00, 0x54, 0x1d, 0x10, 0xfc, 0x00, 0x54,
868 0x1e, 0x36, 0x8c, 0x00, 0x54, 0x1f, 0x06, 0xdb,
869 0x00, 0x54, 0x20, 0x0e, 0x78, 0x00, 0x54, 0x21,
870 0x53, 0x04, 0x00, 0x54, 0x24, 0x43, 0xc2, 0x00,
871 0x54, 0x26, 0x0d, 0x71, 0x00, 0x54, 0x27, 0x38,
872 0x27, 0x00, 0x54, 0x28, 0x43, 0xc3, 0x00, 0x54,
873 0x29, 0x10, 0xfb, 0x00, 0x54, 0x2a, 0x4b, 0x15,
874 0x00, 0x54, 0x2b, 0x06, 0x1a, 0x00, 0x54, 0x2c,
875 0x10, 0xf6, 0x00, 0x54, 0x2d, 0x10, 0xf7, 0x00,
876 0x54, 0x2e, 0x10, 0xf9, 0x00, 0x54, 0x2f, 0x53,
877 0x05, 0x00, 0x54, 0x31, 0x4b, 0x16, 0x00, 0x54,
878 0x33, 0x35, 0xc0, 0x00, 0x54, 0x34, 0x4b, 0x17,
879 0x00, 0x54, 0x35, 0x4b, 0x18, 0x00, 0x54, 0x36,
880 0x10, 0xfa, 0x00, 0x54, 0x38, 0x06, 0x75, 0x00,
881 0x54, 0x39, 0x0a, 0x27, 0x00, 0x54, 0x3b, 0x0d,
882 0xfd, 0x00, 0x54, 0x3c, 0x10, 0xf8, 0x00, 0x54,
883 0x3d, 0x10, 0xf4, 0x00, 0x54, 0x3e, 0x07, 0x97,
884 0x00, 0x54, 0x3f, 0x35, 0xcf, 0x00, 0x54, 0x40,
885 0x10, 0xf5, 0x00, 0x54, 0x42, 0x0f, 0xca, 0x00,
886 0x54, 0x43, 0x43, 0xc5, 0x00, 0x54, 0x44, 0x53,
887 0x06, 0x00, 0x54, 0x46, 0x0e, 0x42, 0x00, 0x54,
888 0x47, 0x53, 0x07, 0x00, 0x54, 0x48, 0x0c, 0x04,
889 0x00, 0x54, 0x49, 0x07, 0x96, 0x00, 0x54, 0x4a,
890 0x08, 0x02, 0x00, 0x54, 0x4c, 0x4b, 0x19, 0x00,
891 0x54, 0x4d, 0x38, 0x28, 0x00, 0x54, 0x4e, 0x10,
892 0xfd, 0x00, 0x54, 0x4f, 0x53, 0x08, 0x00, 0x54,
893 0x51, 0x0c, 0xb5, 0x00, 0x54, 0x55, 0x37, 0x23,
894 0x00, 0x54, 0x5e, 0x53, 0x09, 0x00, 0x54, 0x5f,
895 0x11, 0x01, 0x00, 0x54, 0x62, 0x43, 0xc6, 0x00,
896 0x54, 0x64, 0x53, 0x0a, 0x00, 0x54, 0x66, 0x38,
897 0x29, 0x00, 0x54, 0x67, 0x53, 0x0b, 0x00, 0x54,
898 0x68, 0x35, 0xf7, 0x00, 0x54, 0x69, 0x53, 0x0c,
899 0x00, 0x54, 0x6a, 0x09, 0x22, 0x00, 0x54, 0x6b,
900 0x38, 0x2a, 0x00, 0x54, 0x6c, 0x43, 0xc7, 0x00,
901 0x54, 0x6d, 0x53, 0x0d, 0x00, 0x54, 0x6e, 0x53,
902 0x0e, 0x00, 0x54, 0x70, 0x11, 0x04, 0x00, 0x54,
903 0x71, 0x11, 0x02, 0x00, 0x54, 0x73, 0x0e, 0xaf,
904 0x00, 0x54, 0x74, 0x38, 0x2b, 0x00, 0x54, 0x75,
905 0x10, 0xff, 0x00, 0x54, 0x76, 0x11, 0x08, 0x00,
906 0x54, 0x77, 0x11, 0x03, 0x00, 0x54, 0x7b, 0x11,
907 0x06, 0x00, 0x54, 0x7c, 0x07, 0x7a, 0x00, 0x54,
908 0x7d, 0x0e, 0xcb, 0x00, 0x54, 0x7f, 0x41, 0xa4,
909 0x00, 0x54, 0x80, 0x11, 0x07, 0x00, 0x54, 0x81,
910 0x53, 0x0f, 0x00, 0x54, 0x83, 0x53, 0x10, 0x00,
911 0x54, 0x84, 0x11, 0x09, 0x00, 0x54, 0x85, 0x53,
912 0x11, 0x00, 0x54, 0x86, 0x11, 0x0b, 0x00, 0x54,
913 0x88, 0x41, 0xa5, 0x00, 0x54, 0x89, 0x53, 0x12,
914 0x00, 0x54, 0x8a, 0x20, 0xdc, 0x00, 0x54, 0x8b,
915 0x08, 0x60, 0x00, 0x54, 0x8c, 0x0f, 0xe8, 0x00,
916 0x54, 0x8d, 0x38, 0x2c, 0x00, 0x54, 0x8e, 0x11,
917 0x00, 0x00, 0x54, 0x8f, 0x10, 0xfe, 0x00, 0x54,
918 0x90, 0x11, 0x0a, 0x00, 0x54, 0x91, 0x53, 0x13,
919 0x00, 0x54, 0x92, 0x11, 0x05, 0x00, 0x54, 0x95,
920 0x43, 0xc8, 0x00, 0x54, 0x96, 0x38, 0x2d, 0x00,
921 0x54, 0x9c, 0x20, 0xdb, 0x00, 0x54, 0x9f, 0x53,
922 0x14, 0x00, 0x54, 0xa0, 0x43, 0xc9, 0x00, 0x54,
923 0xa1, 0x38, 0x2e, 0x00, 0x54, 0xa2, 0x11, 0x0d,
924 0x00, 0x54, 0xa4, 0x11, 0x16, 0x00, 0x54, 0xa5,
925 0x11, 0x0f, 0x00, 0x54, 0xa6, 0x43, 0xca, 0x00,
926 0x54, 0xa7, 0x4b, 0x1a, 0x00, 0x54, 0xa8, 0x11,
927 0x13, 0x00, 0x54, 0xa9, 0x20, 0xdd, 0x00, 0x54,
928 0xaa, 0x4b, 0x1b, 0x00, 0x54, 0xab, 0x11, 0x14,
929 0x00, 0x54, 0xac, 0x11, 0x10, 0x00, 0x54, 0xad,
930 0x38, 0x2f, 0x00, 0x54, 0xae, 0x43, 0xcb, 0x00,
931 0x54, 0xaf, 0x11, 0x31, 0x00, 0x54, 0xb1, 0x4b,
932 0x1c, 0x00, 0x54, 0xb2, 0x08, 0x59, 0x00, 0x54,
933 0xb3, 0x05, 0x8f, 0x00, 0x54, 0xb7, 0x43, 0xcc,
934 0x00, 0x54, 0xb8, 0x11, 0x0e, 0x00, 0x54, 0xb9,
935 0x38, 0x30, 0x00, 0x54, 0xba, 0x43, 0xcd, 0x00,
936 0x54, 0xbb, 0x4b, 0x1d, 0x00, 0x54, 0xbc, 0x11,
937 0x18, 0x00, 0x54, 0xbd, 0x04, 0xba, 0x00, 0x54,
938 0xbe, 0x11, 0x17, 0x00, 0x54, 0xbf, 0x38, 0x31,
939 0x00, 0x54, 0xc0, 0x04, 0x69, 0x00, 0x54, 0xc1,
940 0x0d, 0xbc, 0x00, 0x54, 0xc2, 0x11, 0x15, 0x00,
941 0x54, 0xc3, 0x43, 0xce, 0x00, 0x54, 0xc4, 0x11,
942 0x11, 0x00, 0x54, 0xc6, 0x38, 0x32, 0x00, 0x54,
943 0xc7, 0x11, 0x0c, 0x00, 0x54, 0xc8, 0x11, 0x12,
944 0x00, 0x54, 0xc9, 0x08, 0x38, 0x00, 0x54, 0xca,
945 0x53, 0x15, 0x00, 0x54, 0xcd, 0x38, 0x33, 0x00,
946 0x54, 0xce, 0x4b, 0x1e, 0x00, 0x54, 0xd8, 0x11,
947 0x19, 0x00, 0x54, 0xe0, 0x53, 0x16, 0x00, 0x54,
948 0xe1, 0x04, 0xbb, 0x00, 0x54, 0xe2, 0x11, 0x22,
949 0x00, 0x54, 0xe5, 0x11, 0x1a, 0x00, 0x54, 0xe6,
950 0x11, 0x1b, 0x00, 0x54, 0xe8, 0x09, 0x8d, 0x00,
951 0x54, 0xe9, 0x0e, 0x97, 0x00, 0x54, 0xea, 0x4b,
952 0x1f, 0x00, 0x54, 0xec, 0x43, 0xd0, 0x00, 0x54,
953 0xed, 0x11, 0x20, 0x00, 0x54, 0xee, 0x11, 0x1f,
954 0x00, 0x54, 0xef, 0x43, 0xd1, 0x00, 0x54, 0xf1,
955 0x43, 0xd2, 0x00, 0x54, 0xf2, 0x0c, 0x29, 0x00,
956 0x54, 0xf3, 0x43, 0xd3, 0x00, 0x54, 0xf6, 0x53,
957 0x17, 0x00, 0x54, 0xfa, 0x11, 0x21, 0x00, 0x54,
958 0xfc, 0x4b, 0x20, 0x00, 0x54, 0xfd, 0x11, 0x1e,
959 0x00, 0x54, 0xfe, 0x53, 0x18, 0x00, 0x54, 0xff,
960 0x20, 0xde, 0x00, 0x55, 0x00, 0x43, 0xd4, 0x00,
961 0x55, 0x01, 0x43, 0xd5, 0x00, 0x55, 0x04, 0x04,
962 0xd6, 0x00, 0x55, 0x05, 0x4b, 0x21, 0x00, 0x55,
963 0x06, 0x08, 0x26, 0x00, 0x55, 0x07, 0x09, 0xf6,
964 0x00, 0x55, 0x08, 0x4b, 0x22, 0x00, 0x55, 0x09,
965 0x43, 0xd6, 0x00, 0x55, 0x0c, 0x53, 0x19, 0x00,
966 0x55, 0x0d, 0x53, 0x1a, 0x00, 0x55, 0x0e, 0x38,
967 0x34, 0x00, 0x55, 0x0f, 0x11, 0x1c, 0x00, 0x55,
968 0x10, 0x0c, 0x5c, 0x00, 0x55, 0x14, 0x11, 0x1d,
969 0x00, 0x55, 0x15, 0x4b, 0x23, 0x00, 0x55, 0x16,
970 0x04, 0x66, 0x00, 0x55, 0x27, 0x4b, 0x24, 0x00,
971 0x55, 0x2a, 0x4b, 0x25, 0x00, 0x55, 0x2b, 0x38,
972 0x35, 0x00, 0x55, 0x2e, 0x11, 0x27, 0x00, 0x55,
973 0x2f, 0x0f, 0x0d, 0x00, 0x55, 0x31, 0x09, 0x8f,
974 0x00, 0x55, 0x32, 0x53, 0x1b, 0x00, 0x55, 0x33,
975 0x11, 0x2d, 0x00, 0x55, 0x35, 0x38, 0x36, 0x00,
976 0x55, 0x36, 0x4b, 0x26, 0x00, 0x55, 0x38, 0x11,
977 0x2c, 0x00, 0x55, 0x39, 0x11, 0x23, 0x00, 0x55,
978 0x3b, 0x53, 0x1c, 0x00, 0x55, 0x3c, 0x43, 0xd7,
979 0x00, 0x55, 0x3d, 0x53, 0x1d, 0x00, 0x55, 0x3e,
980 0x0b, 0x23, 0x00, 0x55, 0x40, 0x11, 0x24, 0x00,
981 0x55, 0x41, 0x43, 0xd8, 0x00, 0x55, 0x44, 0x0b,
982 0x4f, 0x00, 0x55, 0x45, 0x11, 0x29, 0x00, 0x55,
983 0x46, 0x09, 0x8e, 0x00, 0x55, 0x47, 0x43, 0xda,
984 0x00, 0x55, 0x49, 0x53, 0x1e, 0x00, 0x55, 0x4a,
985 0x38, 0x37, 0x00, 0x55, 0x4c, 0x11, 0x26, 0x00,
986 0x55, 0x4d, 0x53, 0x1f, 0x00, 0x55, 0x4f, 0x0e,
987 0xf0, 0x00, 0x55, 0x50, 0x41, 0xa6, 0x00, 0x55,
988 0x51, 0x4b, 0x27, 0x00, 0x55, 0x53, 0x07, 0x12,
989 0x00, 0x55, 0x56, 0x11, 0x2a, 0x00, 0x55, 0x57,
990 0x11, 0x2b, 0x00, 0x55, 0x58, 0x53, 0x20, 0x00,
991 0x55, 0x5a, 0x53, 0x21, 0x00, 0x55, 0x5b, 0x53,
992 0x22, 0x00, 0x55, 0x5c, 0x11, 0x28, 0x00, 0x55,
993 0x5d, 0x11, 0x2e, 0x00, 0x55, 0x5e, 0x1d, 0xd1,
994 0x00, 0x55, 0x60, 0x38, 0x38, 0x00, 0x55, 0x61,
995 0x4f, 0x54, 0x00, 0x55, 0x63, 0x11, 0x25, 0x00,
996 0x55, 0x64, 0x43, 0xdc, 0x00, 0x55, 0x66, 0x4b,
997 0x28, 0x00, 0x55, 0x7b, 0x11, 0x34, 0x00, 0x55,
998 0x7c, 0x11, 0x39, 0x00, 0x55, 0x7d, 0x43, 0xde,
999 0x00, 0x55, 0x7e, 0x11, 0x35, 0x00, 0x55, 0x7f,
1000 0x53, 0x23, 0x00, 0x55, 0x80, 0x11, 0x30, 0x00,
1001 0x55, 0x81, 0x41, 0xa7, 0x00, 0x55, 0x82, 0x43,
1002 0xdf, 0x00, 0x55, 0x83, 0x11, 0x3a, 0x00, 0x55,
1003 0x84, 0x0a, 0xb3, 0x00, 0x55, 0x86, 0x20, 0xdf,
1004 0x00, 0x55, 0x87, 0x11, 0x3c, 0x00, 0x55, 0x88,
1005 0x38, 0x3a, 0x00, 0x55, 0x89, 0x07, 0xb4, 0x00,
1006 0x55, 0x8a, 0x11, 0x32, 0x00, 0x55, 0x8b, 0x0b,
1007 0xbb, 0x00, 0x55, 0x8e, 0x38, 0x3b, 0x00, 0x55,
1008 0x8f, 0x4b, 0x29, 0x00, 0x55, 0x91, 0x43, 0xe0,
1009 0x00, 0x55, 0x92, 0x4b, 0x2a, 0x00, 0x55, 0x93,
1010 0x53, 0x24, 0x00, 0x55, 0x94, 0x4b, 0x2b, 0x00,
1011 0x55, 0x97, 0x53, 0x25, 0x00, 0x55, 0x98, 0x11,
1012 0x36, 0x00, 0x55, 0x99, 0x11, 0x2f, 0x00, 0x55,
1013 0x9a, 0x05, 0xe9, 0x00, 0x55, 0x9c, 0x06, 0x2a,
1014 0x00, 0x55, 0x9d, 0x05, 0xc3, 0x00, 0x55, 0x9e,
1015 0x11, 0x37, 0x00, 0x55, 0x9f, 0x11, 0x33, 0x00,
1016 0x55, 0xa3, 0x53, 0x26, 0x00, 0x55, 0xa4, 0x4b,
1017 0x2c, 0x00, 0x55, 0xa7, 0x07, 0x4c, 0x00, 0x55,
1018 0xa8, 0x11, 0x3d, 0x00, 0x55, 0xa9, 0x11, 0x3b,
1019 0x00, 0x55, 0xaa, 0x0a, 0xd5, 0x00, 0x55, 0xab,
1020 0x06, 0x64, 0x00, 0x55, 0xac, 0x06, 0xa4, 0x00,
1021 0x55, 0xad, 0x41, 0xa8, 0x00, 0x55, 0xae, 0x11,
1022 0x38, 0x00, 0x55, 0xb0, 0x06, 0xec, 0x00, 0x55,
1023 0xb2, 0x4b, 0x2d, 0x00, 0x55, 0xb6, 0x04, 0xe6,
1024 0x00, 0x55, 0xbf, 0x43, 0xe5, 0x00, 0x55, 0xc1,
1025 0x53, 0x27, 0x00, 0x55, 0xc3, 0x4b, 0x2e, 0x00,
1026 0x55, 0xc4, 0x11, 0x41, 0x00, 0x55, 0xc5, 0x11,
1027 0x3f, 0x00, 0x55, 0xc6, 0x4b, 0x2f, 0x00, 0x55,
1028 0xc7, 0x11, 0x78, 0x00, 0x55, 0xc9, 0x43, 0xe6,
1029 0x00, 0x55, 0xcb, 0x53, 0x28, 0x00, 0x55, 0xcc,
1030 0x43, 0xe7, 0x00, 0x55, 0xce, 0x41, 0xa9, 0x00,
1031 0x55, 0xd1, 0x43, 0xe8, 0x00, 0x55, 0xd2, 0x43,
1032 0xe2, 0x00, 0x55, 0xd3, 0x4b, 0x30, 0x00, 0x55,
1033 0xd4, 0x11, 0x44, 0x00, 0x55, 0xd7, 0x53, 0x29,
1034 0x00, 0x55, 0xd8, 0x53, 0x2a, 0x00, 0x55, 0xda,
1035 0x11, 0x3e, 0x00, 0x55, 0xdb, 0x4b, 0x31, 0x00,
1036 0x55, 0xdc, 0x11, 0x42, 0x00, 0x55, 0xdd, 0x43,
1037 0xe9, 0x00, 0x55, 0xde, 0x53, 0x2b, 0x00, 0x55,
1038 0xdf, 0x11, 0x40, 0x00, 0x55, 0xe2, 0x43, 0xeb,
1039 0x00, 0x55, 0xe3, 0x08, 0x9a, 0x00, 0x55, 0xe4,
1040 0x11, 0x43, 0x00, 0x55, 0xe9, 0x43, 0xed, 0x00,
1041 0x55, 0xec, 0x4b, 0x32, 0x00, 0x55, 0xee, 0x4b,
1042 0x33, 0x00, 0x55, 0xf1, 0x4b, 0x34, 0x00, 0x55,
1043 0xf6, 0x4b, 0x35, 0x00, 0x55, 0xf7, 0x11, 0x46,
1044 0x00, 0x55, 0xf8, 0x4b, 0x36, 0x00, 0x55, 0xf9,
1045 0x11, 0x4b, 0x00, 0x55, 0xfd, 0x11, 0x49, 0x00,
1046 0x55, 0xfe, 0x11, 0x48, 0x00, 0x55, 0xff, 0x53,
1047 0x2c, 0x00, 0x56, 0x05, 0x4b, 0x37, 0x00, 0x56,
1048 0x06, 0x34, 0x36, 0x00, 0x56, 0x07, 0x43, 0xf0,
1049 0x00, 0x56, 0x08, 0x38, 0x3c, 0x00, 0x56, 0x09,
1050 0x05, 0x45, 0x00, 0x56, 0x0a, 0x53, 0x2e, 0x00,
1051 0x56, 0x0d, 0x4b, 0x38, 0x00, 0x56, 0x0e, 0x38,
1052 0x3d, 0x00, 0x56, 0x0f, 0x38, 0x3e, 0x00, 0x56,
1053 0x10, 0x43, 0xf1, 0x00, 0x56, 0x11, 0x4b, 0x39,
1054 0x00, 0x56, 0x12, 0x4b, 0x3a, 0x00, 0x56, 0x14,
1055 0x11, 0x45, 0x00, 0x56, 0x16, 0x11, 0x47, 0x00,
1056 0x56, 0x17, 0x09, 0x90, 0x00, 0x56, 0x18, 0x04,
1057 0xd5, 0x00, 0x56, 0x19, 0x53, 0x2f, 0x00, 0x56,
1058 0x1b, 0x11, 0x4a, 0x00, 0x56, 0x20, 0x3c, 0x1d,
1059 0x00, 0x56, 0x28, 0x43, 0xee, 0x00, 0x56, 0x29,
1060 0x05, 0x5e, 0x00, 0x56, 0x2c, 0x4b, 0x3b, 0x00,
1061 0x56, 0x2f, 0x11, 0x55, 0x00, 0x56, 0x30, 0x43,
1062 0xf2, 0x00, 0x56, 0x31, 0x09, 0xe4, 0x00, 0x56,
1063 0x32, 0x11, 0x51, 0x00, 0x56, 0x33, 0x53, 0x30,
1064 0x00, 0x56, 0x34, 0x11, 0x4f, 0x00, 0x56, 0x35,
1065 0x4b, 0x3c, 0x00, 0x56, 0x36, 0x11, 0x50, 0x00,
1066 0x56, 0x37, 0x38, 0x3f, 0x00, 0x56, 0x38, 0x11,
1067 0x52, 0x00, 0x56, 0x39, 0x4b, 0x3d, 0x00, 0x56,
1068 0x3b, 0x41, 0xaa, 0x00, 0x56, 0x3c, 0x53, 0x31,
1069 0x00, 0x56, 0x3d, 0x43, 0xf4, 0x00, 0x56, 0x3f,
1070 0x38, 0x40, 0x00, 0x56, 0x40, 0x43, 0xf5, 0x00,
1071 0x56, 0x41, 0x53, 0x32, 0x00, 0x56, 0x42, 0x04,
1072 0xdf, 0x00, 0x56, 0x43, 0x53, 0x33, 0x00, 0x56,
1073 0x44, 0x53, 0x34, 0x00, 0x56, 0x46, 0x53, 0x35,
1074 0x00, 0x56, 0x47, 0x43, 0xf6, 0x00, 0x56, 0x49,
1075 0x38, 0x41, 0x00, 0x56, 0x4b, 0x38, 0x42, 0x00,
1076 0x56, 0x4c, 0x0a, 0xbb, 0x00, 0x56, 0x4d, 0x4b,
1077 0x3e, 0x00, 0x56, 0x4e, 0x11, 0x4c, 0x00, 0x56,
1078 0x4f, 0x38, 0x43, 0x00, 0x56, 0x50, 0x11, 0x4d,
1079 0x00, 0x56, 0x53, 0x1f, 0x1b, 0x00, 0x56, 0x54,
1080 0x4b, 0x3f, 0x00, 0x56, 0x5b, 0x05, 0xd8, 0x00,
1081 0x56, 0x5e, 0x43, 0xf7, 0x00, 0x56, 0x60, 0x43,
1082 0xf8, 0x00, 0x56, 0x61, 0x53, 0x36, 0x00, 0x56,
1083 0x62, 0x53, 0x37, 0x00, 0x56, 0x63, 0x53, 0x38,
1084 0x00, 0x56, 0x64, 0x11, 0x54, 0x00, 0x56, 0x66,
1085 0x38, 0x44, 0x00, 0x56, 0x68, 0x06, 0x2b, 0x00,
1086 0x56, 0x69, 0x38, 0x45, 0x00, 0x56, 0x6a, 0x11,
1087 0x57, 0x00, 0x56, 0x6b, 0x11, 0x53, 0x00, 0x56,
1088 0x6c, 0x11, 0x56, 0x00, 0x56, 0x6d, 0x43, 0xf9,
1089 0x00, 0x56, 0x6f, 0x38, 0x46, 0x00, 0x56, 0x71,
1090 0x38, 0x47, 0x00, 0x56, 0x72, 0x38, 0x48, 0x00,
1091 0x56, 0x74, 0x0d, 0xfe, 0x00, 0x56, 0x75, 0x53,
1092 0x39, 0x00, 0x56, 0x76, 0x3c, 0x33, 0x00, 0x56,
1093 0x78, 0x0c, 0xad, 0x00, 0x56, 0x7a, 0x0d, 0x4c,
1094 0x00, 0x56, 0x80, 0x11, 0x59, 0x00, 0x56, 0x84,
1095 0x53, 0x3a, 0x00, 0x56, 0x85, 0x4b, 0x40, 0x00,
1096 0x56, 0x86, 0x11, 0x58, 0x00, 0x56, 0x87, 0x05,
1097 0xa3, 0x00, 0x56, 0x88, 0x43, 0xfb, 0x00, 0x56,
1098 0x8a, 0x11, 0x5a, 0x00, 0x56, 0x8b, 0x53, 0x3b,
1099 0x00, 0x56, 0x8c, 0x43, 0xfc, 0x00, 0x56, 0x8f,
1100 0x11, 0x5d, 0x00, 0x56, 0x94, 0x11, 0x5c, 0x00,
1101 0x56, 0x95, 0x38, 0x49, 0x00, 0x56, 0x99, 0x1d,
1102 0xe6, 0x00, 0x56, 0x9a, 0x38, 0x4a, 0x00, 0x56,
1103 0x9d, 0x43, 0xfd, 0x00, 0x56, 0x9e, 0x41, 0xab,
1104 0x00, 0x56, 0x9f, 0x4b, 0x41, 0x00, 0x56, 0xa0,
1105 0x11, 0x5b, 0x00, 0x56, 0xa2, 0x0c, 0xef, 0x00,
1106 0x56, 0xa5, 0x11, 0x5e, 0x00, 0x56, 0xa6, 0x4b,
1107 0x42, 0x00, 0x56, 0xa7, 0x53, 0x3c, 0x00, 0x56,
1108 0xa8, 0x43, 0xfe, 0x00, 0x56, 0xa9, 0x41, 0xac,
1109 0x00, 0x56, 0xab, 0x53, 0x3d, 0x00, 0x56, 0xac,
1110 0x38, 0x4b, 0x00, 0x56, 0xad, 0x38, 0x4c, 0x00,
1111 0x56, 0xae, 0x11, 0x5f, 0x00, 0x56, 0xb1, 0x38,
1112 0x4d, 0x00, 0x56, 0xb2, 0x43, 0xff, 0x00, 0x56,
1113 0xb3, 0x41, 0xad, 0x00, 0x56, 0xb4, 0x11, 0x61,
1114 0x00, 0x56, 0xb6, 0x11, 0x60, 0x00, 0x56, 0xb7,
1115 0x4b, 0x43, 0x00, 0x56, 0xbc, 0x11, 0x63, 0x00,
1116 0x56, 0xbe, 0x53, 0x3e, 0x00, 0x56, 0xc0, 0x11,
1117 0x66, 0x00, 0x56, 0xc1, 0x11, 0x64, 0x00, 0x56,
1118 0xc2, 0x11, 0x62, 0x00, 0x56, 0xc3, 0x11, 0x65,
1119 0x00, 0x56, 0xc5, 0x44, 0x00, 0x00, 0x56, 0xc8,
1120 0x11, 0x67, 0x00, 0x56, 0xc9, 0x38, 0x4e, 0x00,
1121 0x56, 0xca, 0x1e, 0x5a, 0x00, 0x56, 0xcb, 0x53,
1122 0x3f, 0x00, 0x56, 0xcc, 0x4b, 0x44, 0x00, 0x56,
1123 0xcd, 0x44, 0x01, 0x00, 0x56, 0xce, 0x11, 0x68,
1124 0x00, 0x56, 0xcf, 0x4b, 0x45, 0x00, 0x56, 0xd0,
1125 0x53, 0x40, 0x00, 0x56, 0xd1, 0x11, 0x69, 0x00,
1126 0x56, 0xd3, 0x11, 0x6a, 0x00, 0x56, 0xd7, 0x11,
1127 0x6b, 0x00, 0x56, 0xd8, 0x10, 0x7c, 0x00, 0x56,
1128 0xd9, 0x4b, 0x46, 0x00, 0x56, 0xda, 0x09, 0x28,
1129 0x00, 0x56, 0xdb, 0x08, 0x9b, 0x00, 0x56, 0xdc,
1130 0x53, 0x41, 0x00, 0x56, 0xdd, 0x38, 0x4f, 0x00,
1131 0x56, 0xde, 0x05, 0x73, 0x00, 0x56, 0xdf, 0x44,
1132 0x02, 0x00, 0x56, 0xe0, 0x04, 0xbc, 0x00, 0x56,
1133 0xe1, 0x4b, 0x47, 0x00, 0x56, 0xe3, 0x0b, 0x82,
1134 0x00, 0x56, 0xe4, 0x38, 0x50, 0x00, 0x56, 0xe5,
1135 0x53, 0x42, 0x00, 0x56, 0xe6, 0x53, 0x43, 0x00,
1136 0x56, 0xe7, 0x53, 0x44, 0x00, 0x56, 0xe8, 0x44,
1137 0x03, 0x00, 0x56, 0xeb, 0x4b, 0x48, 0x00, 0x56,
1138 0xed, 0x4b, 0x49, 0x00, 0x56, 0xee, 0x11, 0x6c,
1139 0x00, 0x56, 0xf0, 0x08, 0x14, 0x00, 0x56, 0xf1,
1140 0x4b, 0x4a, 0x00, 0x56, 0xf2, 0x04, 0x93, 0x00,
1141 0x56, 0xf3, 0x0a, 0x24, 0x00, 0x56, 0xf6, 0x44,
1142 0x04, 0x00, 0x56, 0xf7, 0x44, 0x05, 0x00, 0x56,
1143 0xf9, 0x11, 0x6d, 0x00, 0x56, 0xfa, 0x07, 0x7b,
1144 0x00, 0x56, 0xfd, 0x08, 0x03, 0x00, 0x56, 0xff,
1145 0x11, 0x6f, 0x00, 0x57, 0x00, 0x11, 0x6e, 0x00,
1146 0x57, 0x01, 0x53, 0x45, 0x00, 0x57, 0x02, 0x53,
1147 0x46, 0x00, 0x57, 0x03, 0x0e, 0x30, 0x00, 0x57,
1148 0x04, 0x11, 0x70, 0x00, 0x57, 0x07, 0x4b, 0x4b,
1149 0x00, 0x57, 0x08, 0x11, 0x72, 0x00, 0x57, 0x09,
1150 0x11, 0x71, 0x00, 0x57, 0x0a, 0x38, 0x51, 0x00,
1151 0x57, 0x0b, 0x11, 0x73, 0x00, 0x57, 0x0c, 0x4b,
1152 0x4c, 0x00, 0x57, 0x0d, 0x11, 0x74, 0x00, 0x57,
1153 0x0f, 0x07, 0x4d, 0x00, 0x57, 0x11, 0x53, 0x47,
1154 0x00, 0x57, 0x12, 0x05, 0x02, 0x00, 0x57, 0x13,
1155 0x11, 0x75, 0x00, 0x57, 0x15, 0x38, 0x52, 0x00,
1156 0x57, 0x16, 0x11, 0x77, 0x00, 0x57, 0x18, 0x11,
1157 0x76, 0x00, 0x57, 0x1a, 0x4b, 0x4d, 0x00, 0x57,
1158 0x1b, 0x4b, 0x4e, 0x00, 0x57, 0x1c, 0x11, 0x79,
1159 0x00, 0x57, 0x1d, 0x4b, 0x4f, 0x00, 0x57, 0x1f,
1160 0x0c, 0x54, 0x00, 0x57, 0x20, 0x53, 0x48, 0x00,
1161 0x57, 0x21, 0x36, 0x80, 0x00, 0x57, 0x22, 0x53,
1162 0x49, 0x00, 0x57, 0x23, 0x38, 0x53, 0x00, 0x57,
1163 0x24, 0x53, 0x4a, 0x00, 0x57, 0x25, 0x53, 0x4b,
1164 0x00, 0x57, 0x26, 0x11, 0x7a, 0x00, 0x57, 0x27,
1165 0x04, 0x79, 0x00, 0x57, 0x28, 0x08, 0x4f, 0x00,
1166 0x57, 0x29, 0x44, 0x08, 0x00, 0x57, 0x2a, 0x53,
1167 0x4c, 0x00, 0x57, 0x2c, 0x4b, 0x50, 0x00, 0x57,
1168 0x2d, 0x07, 0x13, 0x00, 0x57, 0x2e, 0x4b, 0x51,
1169 0x00, 0x57, 0x2f, 0x38, 0x54, 0x00, 0x57, 0x30,
1170 0x0b, 0x8d, 0x00, 0x57, 0x33, 0x38, 0x55, 0x00,
1171 0x57, 0x34, 0x38, 0x56, 0x00, 0x57, 0x37, 0x11,
1172 0x7b, 0x00, 0x57, 0x38, 0x11, 0x7c, 0x00, 0x57,
1173 0x3b, 0x11, 0x7e, 0x00, 0x57, 0x3d, 0x4b, 0x52,
1174 0x00, 0x57, 0x3e, 0x4b, 0x53, 0x00, 0x57, 0x3f,
1175 0x53, 0x4d, 0x00, 0x57, 0x40, 0x11, 0x7f, 0x00,
1176 0x57, 0x42, 0x08, 0x54, 0x00, 0x57, 0x45, 0x44,
1177 0x0a, 0x00, 0x57, 0x46, 0x44, 0x0b, 0x00, 0x57,
1178 0x47, 0x06, 0xc9, 0x00, 0x57, 0x4a, 0x0e, 0x65,
1179 0x00, 0x57, 0x4c, 0x38, 0x57, 0x00, 0x57, 0x4d,
1180 0x44, 0x0c, 0x00, 0x57, 0x4e, 0x11, 0x7d, 0x00,
1181 0x57, 0x4f, 0x11, 0x80, 0x00, 0x57, 0x50, 0x08,
1182 0x31, 0x00, 0x57, 0x51, 0x07, 0xb5, 0x00, 0x57,
1183 0x52, 0x53, 0x4e, 0x00, 0x57, 0x59, 0x20, 0xe0,
1184 0x00, 0x57, 0x5f, 0x4b, 0x54, 0x00, 0x57, 0x61,
1185 0x11, 0x84, 0x00, 0x57, 0x62, 0x53, 0x4f, 0x00,
1186 0x57, 0x64, 0x08, 0x15, 0x00, 0x57, 0x65, 0x20,
1187 0xe1, 0x00, 0x57, 0x66, 0x0b, 0x71, 0x00, 0x57,
1188 0x67, 0x53, 0x50, 0x00, 0x57, 0x68, 0x44, 0x0e,
1189 0x00, 0x57, 0x69, 0x11, 0x81, 0x00, 0x57, 0x6a,
1190 0x0b, 0xf6, 0x00, 0x57, 0x6b, 0x4b, 0x55, 0x00,
1191 0x57, 0x6d, 0x4b, 0x56, 0x00, 0x57, 0x6e, 0x53,
1192 0x51, 0x00, 0x57, 0x6f, 0x44, 0x0f, 0x00, 0x57,
1193 0x70, 0x38, 0x58, 0x00, 0x57, 0x71, 0x53, 0x52,
1194 0x00, 0x57, 0x73, 0x44, 0x10, 0x00, 0x57, 0x74,
1195 0x44, 0x11, 0x00, 0x57, 0x75, 0x44, 0x12, 0x00,
1196 0x57, 0x77, 0x41, 0xae, 0x00, 0x57, 0x79, 0x53,
1197 0x53, 0x00, 0x57, 0x7a, 0x4b, 0x57, 0x00, 0x57,
1198 0x7b, 0x44, 0x13, 0x00, 0x57, 0x7c, 0x41, 0xaf,
1199 0x00, 0x57, 0x7e, 0x53, 0x54, 0x00, 0x57, 0x7f,
1200 0x11, 0x85, 0x00, 0x57, 0x81, 0x53, 0x55, 0x00,
1201 0x57, 0x82, 0x0a, 0x28, 0x00, 0x57, 0x83, 0x4b,
1202 0x58, 0x00, 0x57, 0x88, 0x11, 0x83, 0x00, 0x57,
1203 0x89, 0x11, 0x86, 0x00, 0x57, 0x8b, 0x07, 0x15,
1204 0x00, 0x57, 0x8c, 0x38, 0x59, 0x00, 0x57, 0x93,
1205 0x11, 0x87, 0x00, 0x57, 0x94, 0x53, 0x56, 0x00,
1206 0x57, 0x95, 0x53, 0x5a, 0x00, 0x57, 0x97, 0x4b,
1207 0x59, 0x00, 0x57, 0x99, 0x53, 0x57, 0x00, 0x57,
1208 0x9a, 0x44, 0x16, 0x00, 0x57, 0x9c, 0x38, 0x5a,
1209 0x00, 0x57, 0x9d, 0x44, 0x17, 0x00, 0x57, 0x9e,
1210 0x44, 0x18, 0x00, 0x57, 0x9f, 0x53, 0x58, 0x00,
1211 0x57, 0xa0, 0x11, 0x88, 0x00, 0x57, 0xa1, 0x53,
1212 0x59, 0x00, 0x57, 0xa2, 0x07, 0xb6, 0x00, 0x57,
1213 0xa3, 0x05, 0x9e, 0x00, 0x57, 0xa4, 0x11, 0x8a,
1214 0x00, 0x57, 0xa7, 0x53, 0x5b, 0x00, 0x57, 0xa8,
1215 0x44, 0x19, 0x00, 0x57, 0xa9, 0x53, 0x5c, 0x00,
1216 0x57, 0xaa, 0x11, 0x8b, 0x00, 0x57, 0xac, 0x20,
1217 0xe2, 0x00, 0x57, 0xae, 0x4b, 0x5a, 0x00, 0x57,
1218 0xb0, 0x11, 0x8c, 0x00, 0x57, 0xb3, 0x11, 0x89,
1219 0x00, 0x57, 0xb8, 0x38, 0x5b, 0x00, 0x57, 0xbd,
1220 0x53, 0x5d, 0x00, 0x57, 0xc0, 0x11, 0x82, 0x00,
1221 0x57, 0xc3, 0x11, 0x8d, 0x00, 0x57, 0xc6, 0x11,
1222 0x8e, 0x00, 0x57, 0xc7, 0x20, 0xe4, 0x00, 0x57,
1223 0xc8, 0x20, 0xe3, 0x00, 0x57, 0xcb, 0x0e, 0x92,
1224 0x00, 0x57, 0xcc, 0x44, 0x1c, 0x00, 0x57, 0xce,
1225 0x36, 0x11, 0x00, 0x57, 0xcf, 0x41, 0xb1, 0x00,
1226 0x57, 0xd2, 0x11, 0x90, 0x00, 0x57, 0xd3, 0x11,
1227 0x91, 0x00, 0x57, 0xd4, 0x11, 0x8f, 0x00, 0x57,
1228 0xd5, 0x4b, 0x5b, 0x00, 0x57, 0xd6, 0x11, 0x93,
1229 0x00, 0x57, 0xd7, 0x44, 0x1a, 0x00, 0x57, 0xdc,
1230 0x0c, 0xee, 0x00, 0x57, 0xdd, 0x53, 0x5e, 0x00,
1231 0x57, 0xde, 0x44, 0x1f, 0x00, 0x57, 0xdf, 0x04,
1232 0xac, 0x00, 0x57, 0xe0, 0x0d, 0xc8, 0x00, 0x57,
1233 0xe1, 0x53, 0x63, 0x00, 0x57, 0xe3, 0x11, 0x94,
1234 0x00, 0x57, 0xe4, 0x41, 0xb2, 0x00, 0x57, 0xe6,
1235 0x38, 0x5c, 0x00, 0x57, 0xe7, 0x4b, 0x5c, 0x00,
1236 0x57, 0xe9, 0x53, 0x5f, 0x00, 0x57, 0xed, 0x38,
1237 0x5d, 0x00, 0x57, 0xf0, 0x44, 0x20, 0x00, 0x57,
1238 0xf4, 0x09, 0xe5, 0x00, 0x57, 0xf5, 0x38, 0x5e,
1239 0x00, 0x57, 0xf6, 0x38, 0x5f, 0x00, 0x57, 0xf7,
1240 0x08, 0xe5, 0x00, 0x57, 0xf8, 0x44, 0x22, 0x00,
1241 0x57, 0xf9, 0x0d, 0x13, 0x00, 0x57, 0xfa, 0x06,
1242 0x2c, 0x00, 0x57, 0xfb, 0x44, 0x23, 0x00, 0x57,
1243 0xfc, 0x08, 0x5b, 0x00, 0x57, 0xfd, 0x44, 0x24,
1244 0x00, 0x57, 0xfe, 0x53, 0x60, 0x00, 0x57, 0xff,
1245 0x38, 0x60, 0x00, 0x58, 0x00, 0x0e, 0x87, 0x00,
1246 0x58, 0x02, 0x0c, 0x8a, 0x00, 0x58, 0x03, 0x53,
1247 0x61, 0x00, 0x58, 0x04, 0x44, 0x25, 0x00, 0x58,
1248 0x05, 0x07, 0x4e, 0x00, 0x58, 0x06, 0x0b, 0x2f,
1249 0x00, 0x58, 0x08, 0x53, 0x62, 0x00, 0x58, 0x09,
1250 0x38, 0x61, 0x00, 0x58, 0x0a, 0x11, 0x92, 0x00,
1251 0x58, 0x0b, 0x11, 0x95, 0x00, 0x58, 0x0c, 0x53,
1252 0x64, 0x00, 0x58, 0x0d, 0x4b, 0x5d, 0x00, 0x58,
1253 0x15, 0x0b, 0x24, 0x00, 0x58, 0x19, 0x11, 0x96,
1254 0x00, 0x58, 0x1b, 0x53, 0x65, 0x00, 0x58, 0x1d,
1255 0x11, 0x97, 0x00, 0x58, 0x1e, 0x44, 0x26, 0x00,
1256 0x58, 0x1f, 0x53, 0x66, 0x00, 0x58, 0x20, 0x38,
1257 0x62, 0x00, 0x58, 0x21, 0x11, 0x99, 0x00, 0x58,
1258 0x24, 0x0c, 0x05, 0x00, 0x58, 0x26, 0x4b, 0x5e,
1259 0x00, 0x58, 0x27, 0x44, 0x27, 0x00, 0x58, 0x2a,
1260 0x05, 0xea, 0x00, 0x58, 0x2d, 0x53, 0x67, 0x00,
1261 0x58, 0x2f, 0x1d, 0x32, 0x00, 0x58, 0x30, 0x05,
1262 0x03, 0x00, 0x58, 0x31, 0x0e, 0x43, 0x00, 0x58,
1263 0x32, 0x38, 0x63, 0x00, 0x58, 0x34, 0x09, 0xd4,
1264 0x00, 0x58, 0x35, 0x0c, 0x42, 0x00, 0x58, 0x39,
1265 0x44, 0x28, 0x00, 0x58, 0x3a, 0x08, 0x56, 0x00,
1266 0x58, 0x3d, 0x11, 0x9f, 0x00, 0x58, 0x3f, 0x53,
1267 0x68, 0x00, 0x58, 0x40, 0x0e, 0x0d, 0x00, 0x58,
1268 0x41, 0x0f, 0xa5, 0x00, 0x58, 0x49, 0x44, 0x2a,
1269 0x00, 0x58, 0x4a, 0x05, 0x74, 0x00, 0x58, 0x4b,
1270 0x11, 0x9b, 0x00, 0x58, 0x4c, 0x44, 0x2b, 0x00,
1271 0x58, 0x4d, 0x4b, 0x5f, 0x00, 0x58, 0x4f, 0x4b,
1272 0x60, 0x00, 0x58, 0x50, 0x53, 0x69, 0x00, 0x58,
1273 0x51, 0x0a, 0xbc, 0x00, 0x58, 0x52, 0x11, 0x9e,
1274 0x00, 0x58, 0x54, 0x0c, 0x5d, 0x00, 0x58, 0x55,
1275 0x53, 0x6a, 0x00, 0x58, 0x57, 0x0c, 0x43, 0x00,
1276 0x58, 0x58, 0x0c, 0x5e, 0x00, 0x58, 0x59, 0x0d,
1277 0x4d, 0x00, 0x58, 0x5a, 0x0b, 0xe9, 0x00, 0x58,
1278 0x5e, 0x08, 0x39, 0x00, 0x58, 0x5f, 0x4b, 0x61,
1279 0x00, 0x58, 0x61, 0x1e, 0x47, 0x00, 0x58, 0x62,
1280 0x11, 0x9a, 0x00, 0x58, 0x64, 0x41, 0xb3, 0x00,
1281 0x58, 0x67, 0x44, 0x2c, 0x00, 0x58, 0x68, 0x53,
1282 0x6b, 0x00, 0x58, 0x69, 0x05, 0x18, 0x00, 0x58,
1283 0x6b, 0x0c, 0x30, 0x00, 0x58, 0x6d, 0x4b, 0x62,
1284 0x00, 0x58, 0x70, 0x11, 0x9c, 0x00, 0x58, 0x72,
1285 0x11, 0x98, 0x00, 0x58, 0x75, 0x0a, 0x16, 0x00,
1286 0x58, 0x78, 0x53, 0x6c, 0x00, 0x58, 0x79, 0x11,
1287 0xa0, 0x00, 0x58, 0x7c, 0x38, 0x64, 0x00, 0x58,
1288 0x7e, 0x09, 0x58, 0x00, 0x58, 0x7f, 0x4b, 0x63,
1289 0x00, 0x58, 0x80, 0x38, 0x65, 0x00, 0x58, 0x81,
1290 0x4b, 0x64, 0x00, 0x58, 0x83, 0x06, 0xa5, 0x00,
1291 0x58, 0x85, 0x11, 0xa1, 0x00, 0x58, 0x87, 0x53,
1292 0x6d, 0x00, 0x58, 0x88, 0x53, 0x6e, 0x00, 0x58,
1293 0x89, 0x41, 0xb4, 0x00, 0x58, 0x8a, 0x44, 0x2d,
1294 0x00, 0x58, 0x8b, 0x44, 0x2e, 0x00, 0x58, 0x8c,
1295 0x53, 0x6f, 0x00, 0x58, 0x8d, 0x44, 0x2f, 0x00,
1296 0x58, 0x8f, 0x44, 0x30, 0x00, 0x58, 0x90, 0x44,
1297 0x31, 0x00, 0x58, 0x93, 0x0e, 0x38, 0x00, 0x58,
1298 0x94, 0x44, 0x32, 0x00, 0x58, 0x96, 0x53, 0x70,
1299 0x00, 0x58, 0x97, 0x0a, 0xff, 0x00, 0x58, 0x98,
1300 0x4b, 0x65, 0x00, 0x58, 0x9c, 0x0b, 0xe2, 0x00,
1301 0x58, 0x9d, 0x44, 0x33, 0x00, 0x58, 0x9e, 0x20,
1302 0xe7, 0x00, 0x58, 0x9f, 0x11, 0xa3, 0x00, 0x58,
1303 0xa0, 0x53, 0x71, 0x00, 0x58, 0xa1, 0x53, 0x72,
1304 0x00, 0x58, 0xa2, 0x53, 0x73, 0x00, 0x58, 0xa6,
1305 0x53, 0x74, 0x00, 0x58, 0xa8, 0x34, 0x4b, 0x00,
1306 0x58, 0xa9, 0x38, 0x66, 0x00, 0x58, 0xaa, 0x44,
1307 0x34, 0x00, 0x58, 0xab, 0x11, 0xa4, 0x00, 0x58,
1308 0xae, 0x11, 0xa9, 0x00, 0x58, 0xb1, 0x44, 0x35,
1309 0x00, 0x58, 0xb2, 0x20, 0xe8, 0x00, 0x58, 0xb3,
1310 0x0d, 0xff, 0x00, 0x58, 0xb8, 0x11, 0xa8, 0x00,
1311 0x58, 0xb9, 0x11, 0xa2, 0x00, 0x58, 0xba, 0x11,
1312 0xa5, 0x00, 0x58, 0xbb, 0x11, 0xa7, 0x00, 0x58,
1313 0xbc, 0x4b, 0x66, 0x00, 0x58, 0xbe, 0x08, 0x16,
1314 0x00, 0x58, 0xc1, 0x0e, 0x19, 0x00, 0x58, 0xc2,
1315 0x53, 0x76, 0x00, 0x58, 0xc3, 0x44, 0x37, 0x00,
1316 0x58, 0xc4, 0x53, 0x75, 0x00, 0x58, 0xc5, 0x11,
1317 0xaa, 0x00, 0x58, 0xc7, 0x0b, 0x83, 0x00, 0x58,
1318 0xc8, 0x53, 0x77, 0x00, 0x58, 0xca, 0x05, 0x75,
1319 0x00, 0x58, 0xcc, 0x09, 0xd5, 0x00, 0x58, 0xcd,
1320 0x44, 0x38, 0x00, 0x58, 0xce, 0x38, 0x67, 0x00,
1321 0x58, 0xd0, 0x38, 0x68, 0x00, 0x58, 0xd1, 0x11,
1322 0xac, 0x00, 0x58, 0xd2, 0x41, 0xb6, 0x00, 0x58,
1323 0xd3, 0x11, 0xab, 0x00, 0x58, 0xd4, 0x38, 0x69,
1324 0x00, 0x58, 0xd5, 0x07, 0xfa, 0x00, 0x58, 0xd6,
1325 0x53, 0x78, 0x00, 0x58, 0xd7, 0x11, 0xad, 0x00,
1326 0x58, 0xd8, 0x11, 0xaf, 0x00, 0x58, 0xd9, 0x11,
1327 0xae, 0x00, 0x58, 0xda, 0x38, 0x6a, 0x00, 0x58,
1328 0xdc, 0x11, 0xb1, 0x00, 0x58, 0xdd, 0x53, 0x79,
1329 0x00, 0x58, 0xde, 0x11, 0xa6, 0x00, 0x58, 0xdf,
1330 0x11, 0xb3, 0x00, 0x58, 0xe0, 0x41, 0xb7, 0x00,
1331 0x58, 0xe1, 0x53, 0x7a, 0x00, 0x58, 0xe2, 0x44,
1332 0x39, 0x00, 0x58, 0xe4, 0x11, 0xb2, 0x00, 0x58,
1333 0xe5, 0x11, 0xb0, 0x00, 0x58, 0xe9, 0x38, 0x6b,
1334 0x00, 0x58, 0xeb, 0x08, 0x9c, 0x00, 0x58, 0xec,
1335 0x0a, 0x17, 0x00, 0x58, 0xee, 0x0a, 0xd6, 0x00,
1336 0x58, 0xef, 0x11, 0xb4, 0x00, 0x58, 0xf0, 0x0a,
1337 0x60, 0x00, 0x58, 0xf1, 0x04, 0xb1, 0x00, 0x58,
1338 0xf2, 0x0d, 0x1a, 0x00, 0x58, 0xf3, 0x44, 0x3a,
1339 0x00, 0x58, 0xf4, 0x44, 0x3b, 0x00, 0x58, 0xf7,
1340 0x0b, 0xf7, 0x00, 0x58, 0xf9, 0x11, 0xb6, 0x00,
1341 0x58, 0xfa, 0x11, 0xb5, 0x00, 0x58, 0xfb, 0x11,
1342 0xb7, 0x00, 0x58, 0xfc, 0x11, 0xb8, 0x00, 0x58,
1343 0xfd, 0x11, 0xb9, 0x00, 0x59, 0x02, 0x11, 0xba,
1344 0x00, 0x59, 0x05, 0x44, 0x3c, 0x00, 0x59, 0x06,
1345 0x44, 0x3d, 0x00, 0x59, 0x09, 0x0e, 0x21, 0x00,
1346 0x59, 0x0a, 0x11, 0xbb, 0x00, 0x59, 0x0b, 0x20,
1347 0xe9, 0x00, 0x59, 0x0c, 0x38, 0x6c, 0x00, 0x59,
1348 0x0d, 0x44, 0x3e, 0x00, 0x59, 0x0f, 0x05, 0x46,
1349 0x00, 0x59, 0x10, 0x11, 0xbc, 0x00, 0x59, 0x12,
1350 0x53, 0x7c, 0x00, 0x59, 0x13, 0x53, 0x7d, 0x00,
1351 0x59, 0x14, 0x44, 0x3f, 0x00, 0x59, 0x15, 0x0f,
1352 0x26, 0x00, 0x59, 0x16, 0x05, 0x8e, 0x00, 0x59,
1353 0x18, 0x10, 0xde, 0x00, 0x59, 0x19, 0x09, 0x52,
1354 0x00, 0x59, 0x1a, 0x0b, 0x1f, 0x00, 0x59, 0x1b,
1355 0x11, 0xbd, 0x00, 0x59, 0x1c, 0x0e, 0xf7, 0x00,
1356 0x59, 0x1d, 0x53, 0x7e, 0x00, 0x59, 0x1f, 0x4b,
1357 0x67, 0x00, 0x59, 0x21, 0x53, 0x7f, 0x00, 0x59,
1358 0x22, 0x0e, 0xc0, 0x00, 0x59, 0x23, 0x4b, 0x68,
1359 0x00, 0x59, 0x24, 0x38, 0x6d, 0x00, 0x59, 0x25,
1360 0x11, 0xbf, 0x00, 0x59, 0x27, 0x0b, 0x47, 0x00,
1361 0x59, 0x28, 0x53, 0x80, 0x00, 0x59, 0x29, 0x0c,
1362 0x31, 0x00, 0x59, 0x2a, 0x0b, 0x20, 0x00, 0x59,
1363 0x2b, 0x0d, 0xc9, 0x00, 0x59, 0x2c, 0x11, 0xc0,
1364 0x00, 0x59, 0x2d, 0x11, 0xc1, 0x00, 0x59, 0x2e,
1365 0x05, 0x1d, 0x00, 0x59, 0x2f, 0x38, 0x6e, 0x00,
1366 0x59, 0x30, 0x53, 0x81, 0x00, 0x59, 0x31, 0x08,
1367 0xe6, 0x00, 0x59, 0x32, 0x11, 0xc2, 0x00, 0x59,
1368 0x33, 0x53, 0x82, 0x00, 0x59, 0x35, 0x53, 0x83,
1369 0x00, 0x59, 0x36, 0x53, 0x84, 0x00, 0x59, 0x37,
1370 0x04, 0x94, 0x00, 0x59, 0x38, 0x11, 0xc3, 0x00,
1371 0x59, 0x39, 0x37, 0x25, 0x00, 0x59, 0x3d, 0x44,
1372 0x42, 0x00, 0x59, 0x3e, 0x11, 0xc4, 0x00, 0x59,
1373 0x3f, 0x53, 0x85, 0x00, 0x59, 0x43, 0x53, 0x86,
1374 0x00, 0x59, 0x44, 0x05, 0x04, 0x00, 0x59, 0x46,
1375 0x44, 0x44, 0x00, 0x59, 0x47, 0x06, 0x2d, 0x00,
1376 0x59, 0x48, 0x0c, 0xb8, 0x00, 0x59, 0x49, 0x0e,
1377 0x44, 0x00, 0x59, 0x4e, 0x11, 0xc8, 0x00, 0x59,
1378 0x4f, 0x0a, 0xd7, 0x00, 0x59, 0x50, 0x11, 0xc7,
1379 0x00, 0x59, 0x51, 0x07, 0x16, 0x00, 0x59, 0x52,
1380 0x53, 0x87, 0x00, 0x59, 0x53, 0x20, 0xea, 0x00,
1381 0x59, 0x54, 0x0e, 0x89, 0x00, 0x59, 0x55, 0x11,
1382 0xc6, 0x00, 0x59, 0x57, 0x0c, 0x5f, 0x00, 0x59,
1383 0x58, 0x11, 0xca, 0x00, 0x59, 0x59, 0x4b, 0x69,
1384 0x00, 0x59, 0x5a, 0x11, 0xc9, 0x00, 0x59, 0x5b,
1385 0x20, 0xeb, 0x00, 0x59, 0x5d, 0x20, 0xec, 0x00,
1386 0x59, 0x5e, 0x53, 0x88, 0x00, 0x59, 0x5f, 0x44,
1387 0x47, 0x00, 0x59, 0x60, 0x11, 0xcc, 0x00, 0x59,
1388 0x61, 0x38, 0x6f, 0x00, 0x59, 0x62, 0x11, 0xcb,
1389 0x00, 0x59, 0x63, 0x20, 0xed, 0x00, 0x59, 0x65,
1390 0x05, 0x1e, 0x00, 0x59, 0x67, 0x11, 0xcd, 0x00,
1391 0x59, 0x68, 0x09, 0x91, 0x00, 0x59, 0x69, 0x11,
1392 0xcf, 0x00, 0x59, 0x6a, 0x0b, 0x63, 0x00, 0x59,
1393 0x6b, 0x53, 0x89, 0x00, 0x59, 0x6c, 0x11, 0xce,
1394 0x00, 0x59, 0x6d, 0x38, 0x70, 0x00, 0x59, 0x6e,
1395 0x0e, 0x03, 0x00, 0x59, 0x6f, 0x53, 0x8a, 0x00,
1396 0x59, 0x72, 0x53, 0x8b, 0x00, 0x59, 0x73, 0x09,
1397 0x81, 0x00, 0x59, 0x74, 0x0c, 0x55, 0x00, 0x59,
1398 0x75, 0x44, 0x49, 0x00, 0x59, 0x76, 0x44, 0x4a,
1399 0x00, 0x59, 0x78, 0x11, 0xd0, 0x00, 0x59, 0x79,
1400 0x4b, 0x6a, 0x00, 0x59, 0x7b, 0x53, 0x8c, 0x00,
1401 0x59, 0x7c, 0x44, 0x4b, 0x00, 0x59, 0x7d, 0x07,
1402 0xb7, 0x00, 0x59, 0x81, 0x11, 0xd1, 0x00, 0x59,
1403 0x82, 0x0c, 0xd7, 0x00, 0x59, 0x83, 0x0d, 0x72,
1404 0x00, 0x59, 0x84, 0x0e, 0xdd, 0x00, 0x59, 0x8a,
1405 0x0c, 0xdb, 0x00, 0x59, 0x8b, 0x41, 0xb9, 0x00,
1406 0x59, 0x8c, 0x53, 0x8d, 0x00, 0x59, 0x8d, 0x11,
1407 0xda, 0x00, 0x59, 0x8e, 0x53, 0x8e, 0x00, 0x59,
1408 0x92, 0x41, 0xba, 0x00, 0x59, 0x93, 0x06, 0x52,
1409 0x00, 0x59, 0x95, 0x53, 0x8f, 0x00, 0x59, 0x96,
1410 0x0f, 0x2f, 0x00, 0x59, 0x97, 0x4b, 0x6b, 0x00,
1411 0x59, 0x99, 0x0e, 0xbb, 0x00, 0x59, 0x9b, 0x12,
1412 0x39, 0x00, 0x59, 0x9d, 0x11, 0xd2, 0x00, 0x59,
1413 0x9f, 0x44, 0x4c, 0x00, 0x59, 0xa3, 0x11, 0xd5,
1414 0x00, 0x59, 0xa4, 0x20, 0xee, 0x00, 0x59, 0xa5,
1415 0x0b, 0x25, 0x00, 0x59, 0xa7, 0x53, 0x90, 0x00,
1416 0x59, 0xa8, 0x0e, 0x66, 0x00, 0x59, 0xac, 0x0c,
1417 0x44, 0x00, 0x59, 0xad, 0x53, 0x91, 0x00, 0x59,
1418 0xae, 0x44, 0x4d, 0x00, 0x59, 0xaf, 0x4b, 0x6c,
1419 0x00, 0x59, 0xb0, 0x53, 0x92, 0x00, 0x59, 0xb2,
1420 0x11, 0xd6, 0x00, 0x59, 0xb3, 0x4b, 0x6d, 0x00,
1421 0x59, 0xb7, 0x53, 0x93, 0x00, 0x59, 0xb9, 0x0e,
1422 0x93, 0x00, 0x59, 0xba, 0x20, 0xef, 0x00, 0x59,
1423 0xbb, 0x08, 0x3a, 0x00, 0x59, 0xbc, 0x44, 0x4e,
1424 0x00, 0x59, 0xbe, 0x09, 0x92, 0x00, 0x59, 0xc1,
1425 0x53, 0x94, 0x00, 0x59, 0xc3, 0x41, 0xbb, 0x00,
1426 0x59, 0xc4, 0x53, 0x95, 0x00, 0x59, 0xc6, 0x11,
1427 0xd7, 0x00, 0x59, 0xc8, 0x44, 0x4f, 0x00, 0x59,
1428 0xc9, 0x08, 0x9e, 0x00, 0x59, 0xca, 0x38, 0x71,
1429 0x00, 0x59, 0xcb, 0x08, 0x9d, 0x00, 0x59, 0xcd,
1430 0x44, 0x50, 0x00, 0x59, 0xd0, 0x04, 0x7d, 0x00,
1431 0x59, 0xd1, 0x07, 0x7c, 0x00, 0x59, 0xd2, 0x38,
1432 0x72, 0x00, 0x59, 0xd3, 0x0a, 0x4f, 0x00, 0x59,
1433 0xd4, 0x04, 0x95, 0x00, 0x59, 0xd9, 0x11, 0xdb,
1434 0x00, 0x59, 0xda, 0x11, 0xdc, 0x00, 0x59, 0xdc,
1435 0x11, 0xd9, 0x00, 0x59, 0xdd, 0x38, 0x73, 0x00,
1436 0x59, 0xde, 0x44, 0x51, 0x00, 0x59, 0xdf, 0x4b,
1437 0x6e, 0x00, 0x59, 0xe3, 0x38, 0x74, 0x00, 0x59,
1438 0xe4, 0x38, 0x75, 0x00, 0x59, 0xe5, 0x04, 0xda,
1439 0x00, 0x59, 0xe6, 0x05, 0xeb, 0x00, 0x59, 0xe7,
1440 0x44, 0x52, 0x00, 0x59, 0xe8, 0x11, 0xd8, 0x00,
1441 0x59, 0xea, 0x0e, 0xd1, 0x00, 0x59, 0xeb, 0x0d,
1442 0xa3, 0x00, 0x59, 0xec, 0x36, 0xad, 0x00, 0x59,
1443 0xee, 0x44, 0x53, 0x00, 0x59, 0xef, 0x53, 0x96,
1444 0x00, 0x59, 0xf1, 0x4b, 0x6f, 0x00, 0x59, 0xf2,
1445 0x53, 0x97, 0x00, 0x59, 0xf4, 0x53, 0x98, 0x00,
1446 0x59, 0xf6, 0x04, 0x6c, 0x00, 0x59, 0xf7, 0x53,
1447 0x99, 0x00, 0x59, 0xf8, 0x4b, 0x70, 0x00, 0x59,
1448 0xfb, 0x04, 0xbd, 0x00, 0x59, 0xff, 0x08, 0x9f,
1449 0x00, 0x5a, 0x00, 0x53, 0x9a, 0x00, 0x5a, 0x01,
1450 0x04, 0x96, 0x00, 0x5a, 0x03, 0x04, 0x67, 0x00,
1451 0x5a, 0x04, 0x38, 0x76, 0x00, 0x5a, 0x09, 0x11,
1452 0xe1, 0x00, 0x5a, 0x0c, 0x38, 0x77, 0x00, 0x5a,
1453 0x0d, 0x44, 0x57, 0x00, 0x5a, 0x0e, 0x53, 0x9b,
1454 0x00, 0x5a, 0x11, 0x11, 0xdf, 0x00, 0x5a, 0x12,
1455 0x53, 0x9c, 0x00, 0x5a, 0x13, 0x41, 0xbc, 0x00,
1456 0x5a, 0x17, 0x44, 0x58, 0x00, 0x5a, 0x18, 0x0e,
1457 0xc8, 0x00, 0x5a, 0x1a, 0x11, 0xe2, 0x00, 0x5a,
1458 0x1b, 0x35, 0xc1, 0x00, 0x5a, 0x1c, 0x11, 0xe0,
1459 0x00, 0x5a, 0x1e, 0x53, 0x9d, 0x00, 0x5a, 0x1f,
1460 0x11, 0xde, 0x00, 0x5a, 0x20, 0x09, 0xf7, 0x00,
1461 0x5a, 0x23, 0x38, 0x78, 0x00, 0x5a, 0x24, 0x53,
1462 0x9e, 0x00, 0x5a, 0x25, 0x11, 0xdd, 0x00, 0x5a,
1463 0x27, 0x44, 0x59, 0x00, 0x5a, 0x28, 0x53, 0x9f,
1464 0x00, 0x5a, 0x29, 0x0e, 0x2a, 0x00, 0x5a, 0x2a,
1465 0x53, 0xa0, 0x00, 0x5a, 0x2d, 0x44, 0x5a, 0x00,
1466 0x5a, 0x2f, 0x07, 0x98, 0x00, 0x5a, 0x30, 0x53,
1467 0xa1, 0x00, 0x5a, 0x35, 0x11, 0xe6, 0x00, 0x5a,
1468 0x36, 0x11, 0xe7, 0x00, 0x5a, 0x3c, 0x09, 0x93,
1469 0x00, 0x5a, 0x40, 0x11, 0xe3, 0x00, 0x5a, 0x41,
1470 0x0f, 0xd2, 0x00, 0x5a, 0x44, 0x53, 0xa2, 0x00,
1471 0x5a, 0x45, 0x53, 0xa3, 0x00, 0x5a, 0x46, 0x0d,
1472 0x02, 0x00, 0x5a, 0x47, 0x38, 0x79, 0x00, 0x5a,
1473 0x48, 0x53, 0xa4, 0x00, 0x5a, 0x49, 0x11, 0xe5,
1474 0x00, 0x5a, 0x4c, 0x53, 0xa5, 0x00, 0x5a, 0x50,
1475 0x53, 0xa6, 0x00, 0x5a, 0x55, 0x38, 0x7a, 0x00,
1476 0x5a, 0x5a, 0x08, 0x17, 0x00, 0x5a, 0x5e, 0x53,
1477 0xa7, 0x00, 0x5a, 0x62, 0x11, 0xe8, 0x00, 0x5a,
1478 0x63, 0x38, 0x7b, 0x00, 0x5a, 0x65, 0x44, 0x5b,
1479 0x00, 0x5a, 0x66, 0x0d, 0xca, 0x00, 0x5a, 0x67,
1480 0x41, 0xbd, 0x00, 0x5a, 0x6a, 0x11, 0xe9, 0x00,
1481 0x5a, 0x6c, 0x11, 0xe4, 0x00, 0x5a, 0x6d, 0x38,
1482 0x7c, 0x00, 0x5a, 0x77, 0x41, 0xbe, 0x00, 0x5a,
1483 0x7a, 0x44, 0x5c, 0x00, 0x5a, 0x7b, 0x53, 0xa8,
1484 0x00, 0x5a, 0x7e, 0x38, 0x7d, 0x00, 0x5a, 0x7f,
1485 0x0e, 0xc7, 0x00, 0x5a, 0x84, 0x41, 0xbf, 0x00,
1486 0x5a, 0x8b, 0x44, 0x5d, 0x00, 0x5a, 0x90, 0x53,
1487 0xa9, 0x00, 0x5a, 0x92, 0x0d, 0x14, 0x00, 0x5a,
1488 0x93, 0x53, 0xaa, 0x00, 0x5a, 0x96, 0x53, 0xab,
1489 0x00, 0x5a, 0x99, 0x53, 0xac, 0x00, 0x5a, 0x9a,
1490 0x11, 0xea, 0x00, 0x5a, 0x9b, 0x0d, 0xa4, 0x00,
1491 0x5a, 0x9c, 0x44, 0x5e, 0x00, 0x5a, 0x9e, 0x38,
1492 0x7e, 0x00, 0x5a, 0x9f, 0x44, 0x5f, 0x00, 0x5a,
1493 0xa0, 0x44, 0x60, 0x00, 0x5a, 0xa2, 0x44, 0x61,
1494 0x00, 0x5a, 0xa7, 0x38, 0x7f, 0x00, 0x5a, 0xac,
1495 0x38, 0x80, 0x00, 0x5a, 0xb1, 0x44, 0x62, 0x00,
1496 0x5a, 0xb2, 0x4b, 0x71, 0x00, 0x5a, 0xb3, 0x38,
1497 0x81, 0x00, 0x5a, 0xb5, 0x44, 0x63, 0x00, 0x5a,
1498 0xb8, 0x4b, 0x72, 0x00, 0x5a, 0xba, 0x44, 0x64,
1499 0x00, 0x5a, 0xbb, 0x53, 0xad, 0x00, 0x5a, 0xbc,
1500 0x11, 0xeb, 0x00, 0x5a, 0xbd, 0x11, 0xef, 0x00,
1501 0x5a, 0xbe, 0x11, 0xec, 0x00, 0x5a, 0xbf, 0x44,
1502 0x65, 0x00, 0x5a, 0xc1, 0x05, 0x47, 0x00, 0x5a,
1503 0xc2, 0x11, 0xee, 0x00, 0x5a, 0xc4, 0x41, 0xc0,
1504 0x00, 0x5a, 0xc6, 0x53, 0xae, 0x00, 0x5a, 0xc8,
1505 0x53, 0xaf, 0x00, 0x5a, 0xc9, 0x08, 0xe7, 0x00,
1506 0x5a, 0xcb, 0x11, 0xed, 0x00, 0x5a, 0xcc, 0x07,
1507 0x4f, 0x00, 0x5a, 0xcf, 0x53, 0xb0, 0x00, 0x5a,
1508 0xd0, 0x11, 0xfb, 0x00, 0x5a, 0xd6, 0x11, 0xf4,
1509 0x00, 0x5a, 0xd7, 0x11, 0xf1, 0x00, 0x5a, 0xda,
1510 0x44, 0x66, 0x00, 0x5a, 0xdc, 0x44, 0x67, 0x00,
1511 0x5a, 0xe0, 0x38, 0x82, 0x00, 0x5a, 0xe1, 0x0b,
1512 0xa2, 0x00, 0x5a, 0xe3, 0x11, 0xf0, 0x00, 0x5a,
1513 0xe5, 0x44, 0x68, 0x00, 0x5a, 0xe6, 0x11, 0xf2,
1514 0x00, 0x5a, 0xe9, 0x11, 0xf3, 0x00, 0x5a, 0xea,
1515 0x4b, 0x73, 0x00, 0x5a, 0xee, 0x44, 0x6a, 0x00,
1516 0x5a, 0xf0, 0x44, 0x69, 0x00, 0x5a, 0xf5, 0x44,
1517 0x6b, 0x00, 0x5a, 0xf6, 0x4b, 0x74, 0x00, 0x5a,
1518 0xfa, 0x11, 0xf5, 0x00, 0x5a, 0xfb, 0x11, 0xf6,
1519 0x00, 0x5a, 0xfd, 0x53, 0xb1, 0x00, 0x5b, 0x00,
1520 0x38, 0x83, 0x00, 0x5b, 0x01, 0x53, 0xb2, 0x00,
1521 0x5b, 0x08, 0x44, 0x6c, 0x00, 0x5b, 0x09, 0x06,
1522 0x2e, 0x00, 0x5b, 0x0b, 0x11, 0xf8, 0x00, 0x5b,
1523 0x0c, 0x11, 0xf7, 0x00, 0x5b, 0x16, 0x11, 0xf9,
1524 0x00, 0x5b, 0x17, 0x44, 0x6d, 0x00, 0x5b, 0x19,
1525 0x38, 0x84, 0x00, 0x5b, 0x1b, 0x4b, 0x75, 0x00,
1526 0x5b, 0x1d, 0x4b, 0x76, 0x00, 0x5b, 0x21, 0x4b,
1527 0x77, 0x00, 0x5b, 0x22, 0x09, 0xd6, 0x00, 0x5b,
1528 0x25, 0x38, 0x85, 0x00, 0x5b, 0x2a, 0x11, 0xfc,
1529 0x00, 0x5b, 0x2c, 0x0b, 0xf8, 0x00, 0x5b, 0x2d,
1530 0x38, 0x86, 0x00, 0x5b, 0x30, 0x04, 0xe7, 0x00,
1531 0x5b, 0x32, 0x11, 0xfa, 0x00, 0x5b, 0x34, 0x44,
1532 0x6e, 0x00, 0x5b, 0x36, 0x11, 0xfd, 0x00, 0x5b,
1533 0x38, 0x4b, 0x78, 0x00, 0x5b, 0x3e, 0x11, 0xfe,
1534 0x00, 0x5b, 0x40, 0x12, 0x01, 0x00, 0x5b, 0x41,
1535 0x38, 0x87, 0x00, 0x5b, 0x43, 0x11, 0xff, 0x00,
1536 0x5b, 0x45, 0x12, 0x00, 0x00, 0x5b, 0x4b, 0x53,
1537 0xb3, 0x00, 0x5b, 0x4c, 0x44, 0x6f, 0x00, 0x5b,
1538 0x50, 0x08, 0xa0, 0x00, 0x5b, 0x51, 0x12, 0x02,
1539 0x00, 0x5b, 0x52, 0x44, 0x70, 0x00, 0x5b, 0x54,
1540 0x07, 0xb8, 0x00, 0x5b, 0x55, 0x12, 0x03, 0x00,
1541 0x5b, 0x56, 0x20, 0xf0, 0x00, 0x5b, 0x57, 0x08,
1542 0xc8, 0x00, 0x5b, 0x58, 0x0b, 0x18, 0x00, 0x5b,
1543 0x5a, 0x12, 0x04, 0x00, 0x5b, 0x5b, 0x12, 0x05,
1544 0x00, 0x5b, 0x5c, 0x08, 0xa8, 0x00, 0x5b, 0x5d,
1545 0x07, 0xb9, 0x00, 0x5b, 0x5e, 0x53, 0xb4, 0x00,
1546 0x5b, 0x5f, 0x0e, 0xde, 0x00, 0x5b, 0x63, 0x06,
1547 0x42, 0x00, 0x5b, 0x64, 0x07, 0x7d, 0x00, 0x5b,
1548 0x65, 0x12, 0x06, 0x00, 0x5b, 0x66, 0x05, 0xb6,
1549 0x00, 0x5b, 0x68, 0x44, 0x71, 0x00, 0x5b, 0x69,
1550 0x12, 0x07, 0x00, 0x5b, 0x6b, 0x0b, 0x19, 0x00,
1551 0x5b, 0x6e, 0x53, 0xb5, 0x00, 0x5b, 0x6f, 0x44,
1552 0x72, 0x00, 0x5b, 0x70, 0x12, 0x08, 0x00, 0x5b,
1553 0x71, 0x12, 0x30, 0x00, 0x5b, 0x73, 0x12, 0x09,
1554 0x00, 0x5b, 0x75, 0x12, 0x0a, 0x00, 0x5b, 0x76,
1555 0x37, 0x28, 0x00, 0x5b, 0x78, 0x12, 0x0b, 0x00,
1556 0x5b, 0x7a, 0x12, 0x0d, 0x00, 0x5b, 0x7c, 0x38,
1557 0x88, 0x00, 0x5b, 0x7d, 0x41, 0xc2, 0x00, 0x5b,
1558 0x7e, 0x38, 0x89, 0x00, 0x5b, 0x7f, 0x38, 0x8a,
1559 0x00, 0x5b, 0x80, 0x12, 0x0e, 0x00, 0x5b, 0x81,
1560 0x44, 0x73, 0x00, 0x5b, 0x82, 0x36, 0x10, 0x00,
1561 0x5b, 0x83, 0x12, 0x0f, 0x00, 0x5b, 0x84, 0x44,
1562 0x74, 0x00, 0x5b, 0x85, 0x0b, 0x50, 0x00, 0x5b,
1563 0x86, 0x53, 0xb6, 0x00, 0x5b, 0x87, 0x04, 0xc9,
1564 0x00, 0x5b, 0x88, 0x09, 0x15, 0x00, 0x5b, 0x89,
1565 0x04, 0x86, 0x00, 0x5b, 0x8a, 0x38, 0x8b, 0x00,
1566 0x5b, 0x8b, 0x0a, 0xd9, 0x00, 0x5b, 0x8c, 0x05,
1567 0xec, 0x00, 0x5b, 0x8d, 0x08, 0xe1, 0x00, 0x5b,
1568 0x8e, 0x53, 0xb7, 0x00, 0x5b, 0x8f, 0x07, 0xba,
1569 0x00, 0x5b, 0x90, 0x53, 0xb8, 0x00, 0x5b, 0x91,
1570 0x53, 0xb9, 0x00, 0x5b, 0x93, 0x41, 0xc3, 0x00,
1571 0x5b, 0x94, 0x53, 0xba, 0x00, 0x5b, 0x95, 0x0c,
1572 0x60, 0x00, 0x5b, 0x96, 0x44, 0x76, 0x00, 0x5b,
1573 0x97, 0x09, 0x2b, 0x00, 0x5b, 0x98, 0x05, 0xed,
1574 0x00, 0x5b, 0x99, 0x0b, 0xa6, 0x00, 0x5b, 0x9a,
1575 0x0c, 0x06, 0x00, 0x5b, 0x9b, 0x04, 0x7c, 0x00,
1576 0x5b, 0x9c, 0x06, 0x53, 0x00, 0x5b, 0x9d, 0x0e,
1577 0x45, 0x00, 0x5b, 0x9f, 0x08, 0xee, 0x00, 0x5b,
1578 0xa2, 0x06, 0x6c, 0x00, 0x5b, 0xa3, 0x0a, 0x8f,
1579 0x00, 0x5b, 0xa4, 0x08, 0xe8, 0x00, 0x5b, 0xa5,
1580 0x0f, 0x12, 0x00, 0x5b, 0xa6, 0x12, 0x10, 0x00,
1581 0x5b, 0xa8, 0x53, 0xbb, 0x00, 0x5b, 0xa9, 0x53,
1582 0xbc, 0x00, 0x5b, 0xac, 0x44, 0x77, 0x00, 0x5b,
1583 0xad, 0x53, 0xbd, 0x00, 0x5b, 0xae, 0x06, 0x76,
1584 0x00, 0x5b, 0xaf, 0x53, 0xbe, 0x00, 0x5b, 0xb0,
1585 0x08, 0x3b, 0x00, 0x5b, 0xb1, 0x53, 0xbf, 0x00,
1586 0x5b, 0xb2, 0x53, 0xc0, 0x00, 0x5b, 0xb3, 0x05,
1587 0x90, 0x00, 0x5b, 0xb4, 0x05, 0x05, 0x00, 0x5b,
1588 0xb5, 0x09, 0x94, 0x00, 0x5b, 0xb6, 0x05, 0x48,
1589 0x00, 0x5b, 0xb7, 0x4b, 0x79, 0x00, 0x5b, 0xb8,
1590 0x12, 0x11, 0x00, 0x5b, 0xb9, 0x0f, 0x30, 0x00,
1591 0x5b, 0xba, 0x53, 0xc1, 0x00, 0x5b, 0xbc, 0x53,
1592 0xc2, 0x00, 0x5b, 0xbf, 0x09, 0x53, 0x00, 0x5b,
1593 0xc0, 0x20, 0xf1, 0x00, 0x5b, 0xc1, 0x53, 0xc3,
1594 0x00, 0x5b, 0xc2, 0x09, 0x10, 0x00, 0x5b, 0xc3,
1595 0x12, 0x12, 0x00, 0x5b, 0xc4, 0x06, 0x2f, 0x00,
1596 0x5b, 0xc5, 0x0c, 0xaa, 0x00, 0x5b, 0xc6, 0x0e,
1597 0xb5, 0x00, 0x5b, 0xc7, 0x12, 0x13, 0x00, 0x5b,
1598 0xc9, 0x12, 0x14, 0x00, 0x5b, 0xcc, 0x0d, 0xcb,
1599 0x00, 0x5b, 0xcd, 0x53, 0xc4, 0x00, 0x5b, 0xce,
1600 0x44, 0x7a, 0x00, 0x5b, 0xcf, 0x53, 0xc5, 0x00,
1601 0x5b, 0xd0, 0x12, 0x16, 0x00, 0x5b, 0xd2, 0x05,
1602 0xe4, 0x00, 0x5b, 0xd3, 0x06, 0xef, 0x00, 0x5b,
1603 0xd4, 0x12, 0x15, 0x00, 0x5b, 0xd6, 0x44, 0x7b,
1604 0x00, 0x5b, 0xd7, 0x4b, 0x7a, 0x00, 0x5b, 0xd8,
1605 0x20, 0xf3, 0x00, 0x5b, 0xd9, 0x53, 0xc6, 0x00,
1606 0x5b, 0xda, 0x53, 0xc7, 0x00, 0x5b, 0xdb, 0x05,
1607 0xee, 0x00, 0x5b, 0xdd, 0x09, 0xf8, 0x00, 0x5b,
1608 0xde, 0x12, 0x1a, 0x00, 0x5b, 0xdf, 0x08, 0x6f,
1609 0x00, 0x5b, 0xe0, 0x4b, 0x7b, 0x00, 0x5b, 0xe1,
1610 0x05, 0x49, 0x00, 0x5b, 0xe2, 0x12, 0x19, 0x00,
1611 0x5b, 0xe4, 0x12, 0x17, 0x00, 0x5b, 0xe5, 0x12,
1612 0x1b, 0x00, 0x5b, 0xe6, 0x12, 0x18, 0x00, 0x5b,
1613 0xe7, 0x36, 0x93, 0x00, 0x5b, 0xe8, 0x14, 0x8e,
1614 0x00, 0x5b, 0xe9, 0x09, 0xf9, 0x00, 0x5b, 0xeb,
1615 0x12, 0x1c, 0x00, 0x5b, 0xec, 0x4f, 0x4e, 0x00,
1616 0x5b, 0xee, 0x0f, 0x88, 0x00, 0x5b, 0xef, 0x53,
1617 0xc8, 0x00, 0x5b, 0xf0, 0x12, 0x1d, 0x00, 0x5b,
1618 0xf1, 0x44, 0x7e, 0x00, 0x5b, 0xf3, 0x12, 0x1f,
1619 0x00, 0x5b, 0xf4, 0x53, 0xc9, 0x00, 0x5b, 0xf5,
1620 0x0b, 0xbc, 0x00, 0x5b, 0xf6, 0x12, 0x1e, 0x00,
1621 0x5b, 0xf8, 0x0a, 0x47, 0x00, 0x5b, 0xfa, 0x08,
1622 0xc9, 0x00, 0x5b, 0xfd, 0x44, 0x7f, 0x00, 0x5b,
1623 0xfe, 0x0b, 0x30, 0x00, 0x5b, 0xff, 0x09, 0x23,
1624 0x00, 0x5c, 0x01, 0x0d, 0xe7, 0x00, 0x5c, 0x02,
1625 0x0a, 0x90, 0x00, 0x5c, 0x03, 0x44, 0x81, 0x00,
1626 0x5c, 0x04, 0x08, 0xf9, 0x00, 0x5c, 0x05, 0x12,
1627 0x20, 0x00, 0x5c, 0x06, 0x36, 0x08, 0x00, 0x5c,
1628 0x07, 0x12, 0x21, 0x00, 0x5c, 0x08, 0x12, 0x22,
1629 0x00, 0x5c, 0x09, 0x04, 0x97, 0x00, 0x5c, 0x0a,
1630 0x0b, 0x1a, 0x00, 0x5c, 0x0b, 0x0a, 0x18, 0x00,
1631 0x5c, 0x0c, 0x53, 0xca, 0x00, 0x5c, 0x0d, 0x12,
1632 0x23, 0x00, 0x5c, 0x0e, 0x0c, 0x8b, 0x00, 0x5c,
1633 0x0f, 0x09, 0x96, 0x00, 0x5c, 0x11, 0x09, 0x97,
1634 0x00, 0x5c, 0x12, 0x41, 0xc4, 0x00, 0x5c, 0x13,
1635 0x12, 0x24, 0x00, 0x5c, 0x14, 0x37, 0x2a, 0x00,
1636 0x5c, 0x16, 0x0a, 0x91, 0x00, 0x5c, 0x17, 0x53,
1637 0xcb, 0x00, 0x5c, 0x19, 0x36, 0x0b, 0x00, 0x5c,
1638 0x1a, 0x09, 0x98, 0x00, 0x5c, 0x1e, 0x20, 0xf5,
1639 0x00, 0x5c, 0x1f, 0x4b, 0x7c, 0x00, 0x5c, 0x20,
1640 0x12, 0x25, 0x00, 0x5c, 0x22, 0x12, 0x26, 0x00,
1641 0x5c, 0x23, 0x38, 0x8c, 0x00, 0x5c, 0x24, 0x0e,
1642 0xec, 0x00, 0x5c, 0x26, 0x53, 0xcc, 0x00, 0x5c,
1643 0x28, 0x12, 0x27, 0x00, 0x5c, 0x29, 0x44, 0x82,
1644 0x00, 0x5c, 0x2a, 0x4b, 0x7d, 0x00, 0x5c, 0x2b,
1645 0x38, 0x8d, 0x00, 0x5c, 0x2c, 0x4b, 0x7e, 0x00,
1646 0x5c, 0x2d, 0x06, 0xbe, 0x00, 0x5c, 0x2e, 0x53,
1647 0xcd, 0x00, 0x5c, 0x30, 0x38, 0x8e, 0x00, 0x5c,
1648 0x31, 0x09, 0x2c, 0x00, 0x5c, 0x32, 0x53, 0xce,
1649 0x00, 0x5c, 0x35, 0x53, 0xcf, 0x00, 0x5c, 0x36,
1650 0x4b, 0x7f, 0x00, 0x5c, 0x38, 0x12, 0x28, 0x00,
1651 0x5c, 0x39, 0x12, 0x29, 0x00, 0x5c, 0x3a, 0x09,
1652 0x08, 0x00, 0x5c, 0x3b, 0x09, 0xf2, 0x00, 0x5c,
1653 0x3c, 0x0c, 0xcc, 0x00, 0x5c, 0x3d, 0x0a, 0x1a,
1654 0x00, 0x5c, 0x3e, 0x0d, 0x8c, 0x00, 0x5c, 0x3f,
1655 0x0c, 0xd8, 0x00, 0x5c, 0x40, 0x06, 0xc1, 0x00,
1656 0x5c, 0x41, 0x12, 0x2a, 0x00, 0x5c, 0x45, 0x06,
1657 0x89, 0x00, 0x5c, 0x46, 0x12, 0x2b, 0x00, 0x5c,
1658 0x48, 0x06, 0xf6, 0x00, 0x5c, 0x4a, 0x0c, 0xa7,
1659 0x00, 0x5c, 0x4b, 0x05, 0x30, 0x00, 0x5c, 0x4d,
1660 0x08, 0xa1, 0x00, 0x5c, 0x4e, 0x12, 0x2c, 0x00,
1661 0x5c, 0x4f, 0x12, 0x2f, 0x00, 0x5c, 0x50, 0x12,
1662 0x2e, 0x00, 0x5c, 0x51, 0x06, 0xf5, 0x00, 0x5c,
1663 0x53, 0x12, 0x2d, 0x00, 0x5c, 0x55, 0x0c, 0x32,
1664 0x00, 0x5c, 0x59, 0x4b, 0x80, 0x00, 0x5c, 0x5a,
1665 0x53, 0xd0, 0x00, 0x5c, 0x5b, 0x1e, 0x92, 0x00,
1666 0x5c, 0x5c, 0x4b, 0x81, 0x00, 0x5c, 0x5e, 0x0b,
1667 0x10, 0x00, 0x5c, 0x5f, 0x44, 0x84, 0x00, 0x5c,
1668 0x60, 0x0c, 0x45, 0x00, 0x5c, 0x61, 0x08, 0xf4,
1669 0x00, 0x5c, 0x62, 0x1e, 0x0d, 0x00, 0x5c, 0x63,
1670 0x38, 0x8f, 0x00, 0x5c, 0x64, 0x0a, 0xda, 0x00,
1671 0x5c, 0x65, 0x0f, 0x64, 0x00, 0x5c, 0x67, 0x44,
1672 0x85, 0x00, 0x5c, 0x68, 0x44, 0x86, 0x00, 0x5c,
1673 0x69, 0x38, 0x90, 0x00, 0x5c, 0x6c, 0x12, 0x31,
1674 0x00, 0x5c, 0x6d, 0x4b, 0x82, 0x00, 0x5c, 0x6e,
1675 0x41, 0xc5, 0x00, 0x5c, 0x6f, 0x0c, 0xae, 0x00,
1676 0x5c, 0x70, 0x44, 0x87, 0x00, 0x5c, 0x71, 0x08,
1677 0x81, 0x00, 0x5c, 0x74, 0x53, 0xd1, 0x00, 0x5c,
1678 0x75, 0x53, 0xd2, 0x00, 0x5c, 0x76, 0x12, 0x34,
1679 0x00, 0x5c, 0x79, 0x12, 0x35, 0x00, 0x5c, 0x7a,
1680 0x41, 0xc7, 0x00, 0x5c, 0x7b, 0x53, 0xd3, 0x00,
1681 0x5c, 0x7c, 0x38, 0x91, 0x00, 0x5c, 0x7d, 0x53,
1682 0xd4, 0x00, 0x5c, 0x87, 0x53, 0xd5, 0x00, 0x5c,
1683 0x88, 0x44, 0x8c, 0x00, 0x5c, 0x8a, 0x44, 0x8d,
1684 0x00, 0x5c, 0x8c, 0x12, 0x36, 0x00, 0x5c, 0x8f,
1685 0x41, 0xc8, 0x00, 0x5c, 0x90, 0x06, 0x30, 0x00,
1686 0x5c, 0x91, 0x12, 0x37, 0x00, 0x5c, 0x92, 0x53,
1687 0xd6, 0x00, 0x5c, 0x94, 0x12, 0x38, 0x00, 0x5c,
1688 0x9d, 0x53, 0xd7, 0x00, 0x5c, 0x9f, 0x41, 0xc9,
1689 0x00, 0x5c, 0xa0, 0x44, 0x91, 0x00, 0x5c, 0xa1,
1690 0x05, 0x2c, 0x00, 0x5c, 0xa2, 0x44, 0x92, 0x00,
1691 0x5c, 0xa3, 0x41, 0xca, 0x00, 0x5c, 0xa6, 0x20,
1692 0xf6, 0x00, 0x5c, 0xa7, 0x44, 0x93, 0x00, 0x5c,
1693 0xa8, 0x0a, 0xbd, 0x00, 0x5c, 0xa9, 0x06, 0x20,
1694 0x00, 0x5c, 0xaa, 0x41, 0xcb, 0x00, 0x5c, 0xab,
1695 0x12, 0x3a, 0x00, 0x5c, 0xac, 0x0e, 0xb4, 0x00,
1696 0x5c, 0xad, 0x44, 0x95, 0x00, 0x5c, 0xb1, 0x0b,
1697 0x32, 0x00, 0x5c, 0xb2, 0x53, 0xd8, 0x00, 0x5c,
1698 0xb3, 0x05, 0xb7, 0x00, 0x5c, 0xb4, 0x53, 0xd9,
1699 0x00, 0x5c, 0xb5, 0x44, 0x96, 0x00, 0x5c, 0xb6,
1700 0x12, 0x3c, 0x00, 0x5c, 0xb7, 0x12, 0x3e, 0x00,
1701 0x5c, 0xb8, 0x06, 0x1b, 0x00, 0x5c, 0xba, 0x20,
1702 0xf7, 0x00, 0x5c, 0xbb, 0x12, 0x3b, 0x00, 0x5c,
1703 0xbc, 0x12, 0x3d, 0x00, 0x5c, 0xbe, 0x12, 0x40,
1704 0x00, 0x5c, 0xc5, 0x12, 0x3f, 0x00, 0x5c, 0xc7,
1705 0x12, 0x41, 0x00, 0x5c, 0xc9, 0x44, 0x98, 0x00,
1706 0x5c, 0xcb, 0x38, 0x92, 0x00, 0x5c, 0xd0, 0x41,
1707 0xcc, 0x00, 0x5c, 0xd2, 0x38, 0x93, 0x00, 0x5c,
1708 0xd7, 0x53, 0xda, 0x00, 0x5c, 0xd9, 0x12, 0x42,
1709 0x00, 0x5c, 0xdd, 0x4b, 0x83, 0x00, 0x5c, 0xe0,
1710 0x0c, 0x95, 0x00, 0x5c, 0xe1, 0x06, 0xa6, 0x00,
1711 0x5c, 0xe6, 0x37, 0x2c, 0x00, 0x5c, 0xe8, 0x05,
1712 0x65, 0x00, 0x5c, 0xe9, 0x12, 0x43, 0x00, 0x5c,
1713 0xea, 0x12, 0x48, 0x00, 0x5c, 0xed, 0x12, 0x46,
1714 0x00, 0x5c, 0xee, 0x53, 0xdb, 0x00, 0x5c, 0xef,
1715 0x0e, 0x47, 0x00, 0x5c, 0xf0, 0x0e, 0x46, 0x00,
1716 0x5c, 0xf1, 0x53, 0xdc, 0x00, 0x5c, 0xf2, 0x53,
1717 0xdd, 0x00, 0x5c, 0xf4, 0x38, 0x94, 0x00, 0x5c,
1718 0xf5, 0x20, 0xf8, 0x00, 0x5c, 0xf6, 0x0c, 0x61,
1719 0x00, 0x5c, 0xfa, 0x12, 0x45, 0x00, 0x5c, 0xfb,
1720 0x09, 0x5e, 0x00, 0x5c, 0xfd, 0x12, 0x44, 0x00,
1721 0x5d, 0x01, 0x4b, 0x84, 0x00, 0x5d, 0x06, 0x44,
1722 0x9b, 0x00, 0x5d, 0x07, 0x0a, 0x38, 0x00, 0x5d,
1723 0x0b, 0x12, 0x49, 0x00, 0x5d, 0x0d, 0x41, 0xce,
1724 0x00, 0x5d, 0x0e, 0x08, 0x5a, 0x00, 0x5d, 0x10,
1725 0x44, 0x9c, 0x00, 0x5d, 0x11, 0x12, 0x4f, 0x00,
1726 0x5d, 0x12, 0x53, 0xde, 0x00, 0x5d, 0x14, 0x12,
1727 0x50, 0x00, 0x5d, 0x15, 0x12, 0x4a, 0x00, 0x5d,
1728 0x16, 0x05, 0x91, 0x00, 0x5d, 0x17, 0x12, 0x4b,
1729 0x00, 0x5d, 0x18, 0x12, 0x54, 0x00, 0x5d, 0x19,
1730 0x12, 0x53, 0x00, 0x5d, 0x1a, 0x12, 0x52, 0x00,
1731 0x5d, 0x1b, 0x12, 0x4e, 0x00, 0x5d, 0x1d, 0x44,
1732 0x9e, 0x00, 0x5d, 0x1f, 0x12, 0x4d, 0x00, 0x5d,
1733 0x20, 0x44, 0x9f, 0x00, 0x5d, 0x22, 0x12, 0x51,
1734 0x00, 0x5d, 0x23, 0x53, 0xdf, 0x00, 0x5d, 0x24,
1735 0x38, 0x95, 0x00, 0x5d, 0x26, 0x38, 0x96, 0x00,
1736 0x5d, 0x27, 0x20, 0xf9, 0x00, 0x5d, 0x29, 0x0e,
1737 0x48, 0x00, 0x5d, 0x2b, 0x44, 0x9d, 0x00, 0x5d,
1738 0x31, 0x44, 0xa0, 0x00, 0x5d, 0x34, 0x4b, 0x85,
1739 0x00, 0x5d, 0x39, 0x44, 0xa1, 0x00, 0x5d, 0x3d,
1740 0x4b, 0x86, 0x00, 0x5d, 0x3f, 0x53, 0xe0, 0x00,
1741 0x5d, 0x42, 0x20, 0xfc, 0x00, 0x5d, 0x43, 0x38,
1742 0x97, 0x00, 0x5d, 0x46, 0x38, 0x98, 0x00, 0x5d,
1743 0x47, 0x41, 0xcf, 0x00, 0x5d, 0x48, 0x53, 0xe1,
1744 0x00, 0x5d, 0x4a, 0x38, 0x99, 0x00, 0x5d, 0x4b,
1745 0x12, 0x58, 0x00, 0x5d, 0x4c, 0x12, 0x55, 0x00,
1746 0x5d, 0x4e, 0x12, 0x57, 0x00, 0x5d, 0x50, 0x0f,
1747 0x5c, 0x00, 0x5d, 0x51, 0x53, 0xe3, 0x00, 0x5d,
1748 0x52, 0x12, 0x56, 0x00, 0x5d, 0x53, 0x20, 0xfa,
1749 0x00, 0x5d, 0x55, 0x53, 0xe2, 0x00, 0x5d, 0x59,
1750 0x4b, 0x87, 0x00, 0x5d, 0x5c, 0x12, 0x4c, 0x00,
1751 0x5d, 0x5f, 0x53, 0xe4, 0x00, 0x5d, 0x60, 0x53,
1752 0xe5, 0x00, 0x5d, 0x61, 0x44, 0xa3, 0x00, 0x5d,
1753 0x62, 0x53, 0xe6, 0x00, 0x5d, 0x64, 0x53, 0xe7,
1754 0x00, 0x5d, 0x69, 0x0a, 0x39, 0x00, 0x5d, 0x6a,
1755 0x44, 0xa4, 0x00, 0x5d, 0x6c, 0x12, 0x59, 0x00,
1756 0x5d, 0x6d, 0x20, 0xfd, 0x00, 0x5d, 0x6f, 0x08,
1757 0x27, 0x00, 0x5d, 0x70, 0x44, 0xa6, 0x00, 0x5d,
1758 0x73, 0x12, 0x5a, 0x00, 0x5d, 0x76, 0x12, 0x5b,
1759 0x00, 0x5d, 0x79, 0x53, 0xe8, 0x00, 0x5d, 0x7a,
1760 0x53, 0xe9, 0x00, 0x5d, 0x7e, 0x4b, 0x88, 0x00,
1761 0x5d, 0x7f, 0x53, 0xea, 0x00, 0x5d, 0x81, 0x41,
1762 0xd0, 0x00, 0x5d, 0x82, 0x12, 0x5e, 0x00, 0x5d,
1763 0x83, 0x4b, 0x89, 0x00, 0x5d, 0x84, 0x12, 0x5d,
1764 0x00, 0x5d, 0x87, 0x12, 0x5c, 0x00, 0x5d, 0x88,
1765 0x44, 0xa9, 0x00, 0x5d, 0x8a, 0x53, 0xeb, 0x00,
1766 0x5d, 0x8b, 0x0c, 0x62, 0x00, 0x5d, 0x8c, 0x12,
1767 0x47, 0x00, 0x5d, 0x90, 0x12, 0x64, 0x00, 0x5d,
1768 0x92, 0x38, 0x9a, 0x00, 0x5d, 0x93, 0x53, 0xec,
1769 0x00, 0x5d, 0x94, 0x38, 0x9b, 0x00, 0x5d, 0x95,
1770 0x53, 0xed, 0x00, 0x5d, 0x97, 0x44, 0xab, 0x00,
1771 0x5d, 0x99, 0x38, 0x9c, 0x00, 0x5d, 0x9b, 0x53,
1772 0xee, 0x00, 0x5d, 0x9d, 0x12, 0x60, 0x00, 0x5d,
1773 0x9f, 0x53, 0xef, 0x00, 0x5d, 0xa0, 0x38, 0x9d,
1774 0x00, 0x5d, 0xa2, 0x12, 0x5f, 0x00, 0x5d, 0xa4,
1775 0x41, 0xd1, 0x00, 0x5d, 0xa7, 0x41, 0xd2, 0x00,
1776 0x5d, 0xab, 0x53, 0xf0, 0x00, 0x5d, 0xac, 0x12,
1777 0x61, 0x00, 0x5d, 0xae, 0x12, 0x62, 0x00, 0x5d,
1778 0xb0, 0x44, 0xac, 0x00, 0x5d, 0xb2, 0x3b, 0xa5,
1779 0x00, 0x5d, 0xb4, 0x44, 0xad, 0x00, 0x5d, 0xb7,
1780 0x12, 0x65, 0x00, 0x5d, 0xb8, 0x20, 0xfe, 0x00,
1781 0x5d, 0xb9, 0x20, 0xff, 0x00, 0x5d, 0xba, 0x0f,
1782 0xae, 0x00, 0x5d, 0xbc, 0x12, 0x66, 0x00, 0x5d,
1783 0xbd, 0x12, 0x63, 0x00, 0x5d, 0xc3, 0x53, 0xf1,
1784 0x00, 0x5d, 0xc7, 0x4b, 0x8a, 0x00, 0x5d, 0xc9,
1785 0x12, 0x67, 0x00, 0x5d, 0xcb, 0x41, 0xd3, 0x00,
1786 0x5d, 0xcc, 0x06, 0x1c, 0x00, 0x5d, 0xcd, 0x12,
1787 0x68, 0x00, 0x5d, 0xce, 0x53, 0xf2, 0x00, 0x5d,
1788 0xd0, 0x21, 0x00, 0x00, 0x5d, 0xd1, 0x44, 0xaf,
1789 0x00, 0x5d, 0xd2, 0x12, 0x6a, 0x00, 0x5d, 0xd3,
1790 0x12, 0x69, 0x00, 0x5d, 0xd6, 0x12, 0x6b, 0x00,
1791 0x5d, 0xd7, 0x44, 0xb0, 0x00, 0x5d, 0xd8, 0x38,
1792 0x9e, 0x00, 0x5d, 0xd9, 0x53, 0xf3, 0x00, 0x5d,
1793 0xdb, 0x12, 0x6c, 0x00, 0x5d, 0xdd, 0x0a, 0x92,
1794 0x00, 0x5d, 0xde, 0x09, 0x2d, 0x00, 0x5d, 0xe0,
1795 0x38, 0x9f, 0x00, 0x5d, 0xe1, 0x09, 0x6e, 0x00,
1796 0x5d, 0xe2, 0x34, 0x32, 0x00, 0x5d, 0xe3, 0x0a,
1797 0xe5, 0x00, 0x5d, 0xe4, 0x44, 0xb2, 0x00, 0x5d,
1798 0xe5, 0x07, 0xbb, 0x00, 0x5d, 0xe6, 0x08, 0x28,
1799 0x00, 0x5d, 0xe7, 0x07, 0xbc, 0x00, 0x5d, 0xe8,
1800 0x06, 0x8a, 0x00, 0x5d, 0xe9, 0x44, 0xb3, 0x00,
1801 0x5d, 0xeb, 0x12, 0x6d, 0x00, 0x5d, 0xee, 0x08,
1802 0x29, 0x00, 0x5d, 0xf1, 0x07, 0x7e, 0x00, 0x5d,
1803 0xf2, 0x12, 0x6e, 0x00, 0x5d, 0xf3, 0x0e, 0xb2,
1804 0x00, 0x5d, 0xf4, 0x0c, 0xf9, 0x00, 0x5d, 0xf5,
1805 0x12, 0x6f, 0x00, 0x5d, 0xf7, 0x07, 0xbd, 0x00,
1806 0x5d, 0xf8, 0x38, 0xa0, 0x00, 0x5d, 0xf9, 0x4b,
1807 0x8b, 0x00, 0x5d, 0xfb, 0x05, 0xe8, 0x00, 0x5d,
1808 0xfd, 0x1e, 0x36, 0x00, 0x5d, 0xfe, 0x06, 0xca,
1809 0x00, 0x5d, 0xff, 0x35, 0xe2, 0x00, 0x5e, 0x00,
1810 0x38, 0xa1, 0x00, 0x5e, 0x02, 0x08, 0xa2, 0x00,
1811 0x5e, 0x03, 0x0d, 0xcd, 0x00, 0x5e, 0x06, 0x0d,
1812 0x55, 0x00, 0x5e, 0x07, 0x53, 0xf4, 0x00, 0x5e,
1813 0x0b, 0x12, 0x70, 0x00, 0x5e, 0x0c, 0x06, 0x31,
1814 0x00, 0x5e, 0x0d, 0x53, 0xf5, 0x00, 0x5e, 0x11,
1815 0x12, 0x73, 0x00, 0x5e, 0x12, 0x38, 0xa2, 0x00,
1816 0x5e, 0x14, 0x38, 0xa3, 0x00, 0x5e, 0x15, 0x38,
1817 0xa4, 0x00, 0x5e, 0x16, 0x0b, 0xbd, 0x00, 0x5e,
1818 0x18, 0x38, 0xa5, 0x00, 0x5e, 0x19, 0x12, 0x72,
1819 0x00, 0x5e, 0x1a, 0x12, 0x71, 0x00, 0x5e, 0x1b,
1820 0x12, 0x74, 0x00, 0x5e, 0x1d, 0x0c, 0x07, 0x00,
1821 0x5e, 0x1f, 0x44, 0xb7, 0x00, 0x5e, 0x20, 0x53,
1822 0xf6, 0x00, 0x5e, 0x25, 0x0a, 0x29, 0x00, 0x5e,
1823 0x28, 0x4b, 0x8c, 0x00, 0x5e, 0x2b, 0x08, 0xa3,
1824 0x00, 0x5e, 0x2d, 0x0a, 0x6e, 0x00, 0x5e, 0x2e,
1825 0x38, 0xa6, 0x00, 0x5e, 0x2f, 0x0b, 0x33, 0x00,
1826 0x5e, 0x30, 0x06, 0x3c, 0x00, 0x5e, 0x32, 0x4b,
1827 0x8d, 0x00, 0x5e, 0x33, 0x0b, 0xbe, 0x00, 0x5e,
1828 0x35, 0x4b, 0x8e, 0x00, 0x5e, 0x36, 0x12, 0x75,
1829 0x00, 0x5e, 0x37, 0x12, 0x76, 0x00, 0x5e, 0x38,
1830 0x09, 0xd7, 0x00, 0x5e, 0x3d, 0x0e, 0x67, 0x00,
1831 0x5e, 0x3e, 0x44, 0xb8, 0x00, 0x5e, 0x40, 0x12,
1832 0x79, 0x00, 0x5e, 0x43, 0x12, 0x78, 0x00, 0x5e,
1833 0x44, 0x12, 0x77, 0x00, 0x5e, 0x45, 0x0d, 0xef,
1834 0x00, 0x5e, 0x47, 0x12, 0x80, 0x00, 0x5e, 0x49,
1835 0x44, 0xb9, 0x00, 0x5e, 0x4b, 0x53, 0xf7, 0x00,
1836 0x5e, 0x4c, 0x0e, 0x88, 0x00, 0x5e, 0x4e, 0x12,
1837 0x7a, 0x00, 0x5e, 0x50, 0x53, 0xf8, 0x00, 0x5e,
1838 0x51, 0x53, 0xf9, 0x00, 0x5e, 0x54, 0x12, 0x7c,
1839 0x00, 0x5e, 0x55, 0x0e, 0x99, 0x00, 0x5e, 0x56,
1840 0x44, 0xbb, 0x00, 0x5e, 0x57, 0x12, 0x7b, 0x00,
1841 0x5e, 0x58, 0x38, 0xa7, 0x00, 0x5e, 0x5b, 0x4b,
1842 0x8f, 0x00, 0x5e, 0x5c, 0x53, 0xfa, 0x00, 0x5e,
1843 0x5e, 0x41, 0xd4, 0x00, 0x5e, 0x5f, 0x12, 0x7d,
1844 0x00, 0x5e, 0x61, 0x0d, 0x3c, 0x00, 0x5e, 0x62,
1845 0x12, 0x7e, 0x00, 0x5e, 0x63, 0x0e, 0x0e, 0x00,
1846 0x5e, 0x64, 0x12, 0x7f, 0x00, 0x5e, 0x68, 0x4b,
1847 0x90, 0x00, 0x5e, 0x6a, 0x4b, 0x91, 0x00, 0x5e,
1848 0x6b, 0x38, 0xa8, 0x00, 0x5e, 0x6c, 0x38, 0xa9,
1849 0x00, 0x5e, 0x6d, 0x44, 0xbd, 0x00, 0x5e, 0x6e,
1850 0x44, 0xbe, 0x00, 0x5e, 0x70, 0x53, 0xfb, 0x00,
1851 0x5e, 0x72, 0x05, 0xef, 0x00, 0x5e, 0x73, 0x0e,
1852 0x0f, 0x00, 0x5e, 0x74, 0x0c, 0xe5, 0x00, 0x5e,
1853 0x75, 0x12, 0x81, 0x00, 0x5e, 0x76, 0x12, 0x82,
1854 0x00, 0x5e, 0x77, 0x4b, 0x92, 0x00, 0x5e, 0x78,
1855 0x07, 0xbe, 0x00, 0x5e, 0x79, 0x05, 0xf0, 0x00,
1856 0x5e, 0x7a, 0x12, 0x83, 0x00, 0x5e, 0x7b, 0x07,
1857 0x6c, 0x00, 0x5e, 0x7c, 0x0f, 0x2e, 0x00, 0x5e,
1858 0x7d, 0x0f, 0x13, 0x00, 0x5e, 0x7e, 0x06, 0x32,
1859 0x00, 0x5e, 0x7f, 0x12, 0x85, 0x00, 0x5e, 0x80,
1860 0x4b, 0x93, 0x00, 0x5e, 0x81, 0x0b, 0xbf, 0x00,
1861 0x5e, 0x83, 0x07, 0xbf, 0x00, 0x5e, 0x84, 0x09,
1862 0x99, 0x00, 0x5e, 0x87, 0x0d, 0x73, 0x00, 0x5e,
1863 0x8a, 0x09, 0x9a, 0x00, 0x5e, 0x8b, 0x4b, 0x94,
1864 0x00, 0x5e, 0x8e, 0x53, 0xfc, 0x00, 0x5e, 0x8f,
1865 0x09, 0x82, 0x00, 0x5e, 0x95, 0x0c, 0x08, 0x00,
1866 0x5e, 0x96, 0x0e, 0x49, 0x00, 0x5e, 0x97, 0x0c,
1867 0x33, 0x00, 0x5e, 0x99, 0x36, 0xb0, 0x00, 0x5e,
1868 0x9a, 0x07, 0xc0, 0x00, 0x5e, 0x9c, 0x0d, 0xce,
1869 0x00, 0x5e, 0xa0, 0x12, 0x86, 0x00, 0x5e, 0xa2,
1870 0x53, 0xfd, 0x00, 0x5e, 0xa4, 0x53, 0xfe, 0x00,
1871 0x5e, 0xa5, 0x44, 0xc0, 0x00, 0x5e, 0xa6, 0x0c,
1872 0x53, 0x00, 0x5e, 0xa7, 0x08, 0x32, 0x00, 0x5e,
1873 0xa8, 0x38, 0xaa, 0x00, 0x5e, 0xaa, 0x38, 0xab,
1874 0x00, 0x5e, 0xab, 0x07, 0x7f, 0x00, 0x5e, 0xac,
1875 0x44, 0xc1, 0x00, 0x5e, 0xad, 0x0c, 0x09, 0x00,
1876 0x5e, 0xb1, 0x53, 0xff, 0x00, 0x5e, 0xb3, 0x4b,
1877 0x95, 0x00, 0x5e, 0xb5, 0x04, 0x87, 0x00, 0x5e,
1878 0xb6, 0x09, 0x78, 0x00, 0x5e, 0xb7, 0x07, 0xc1,
1879 0x00, 0x5e, 0xb8, 0x0f, 0x31, 0x00, 0x5e, 0xb9,
1880 0x44, 0xc2, 0x00, 0x5e, 0xbd, 0x4b, 0x96, 0x00,
1881 0x5e, 0xbe, 0x38, 0xac, 0x00, 0x5e, 0xbf, 0x38,
1882 0xad, 0x00, 0x5e, 0xc1, 0x12, 0x87, 0x00, 0x5e,
1883 0xc2, 0x12, 0x88, 0x00, 0x5e, 0xc3, 0x0d, 0x07,
1884 0x00, 0x5e, 0xc6, 0x44, 0xc3, 0x00, 0x5e, 0xc8,
1885 0x12, 0x89, 0x00, 0x5e, 0xc9, 0x37, 0x0f, 0x00,
1886 0x5e, 0xca, 0x0f, 0xd3, 0x00, 0x5e, 0xcb, 0x3c,
1887 0x1e, 0x00, 0x5e, 0xcc, 0x54, 0x00, 0x00, 0x5e,
1888 0xce, 0x54, 0x01, 0x00, 0x5e, 0xcf, 0x12, 0x8b,
1889 0x00, 0x5e, 0xd0, 0x12, 0x8a, 0x00, 0x5e, 0xd1,
1890 0x4b, 0x97, 0x00, 0x5e, 0xd2, 0x38, 0xaf, 0x00,
1891 0x5e, 0xd3, 0x05, 0xa5, 0x00, 0x5e, 0xd4, 0x4b,
1892 0x98, 0x00, 0x5e, 0xd5, 0x4b, 0x99, 0x00, 0x5e,
1893 0xd6, 0x12, 0x8c, 0x00, 0x5e, 0xd9, 0x44, 0xc4,
1894 0x00, 0x5e, 0xda, 0x12, 0x8f, 0x00, 0x5e, 0xdb,
1895 0x12, 0x90, 0x00, 0x5e, 0xdc, 0x54, 0x02, 0x00,
1896 0x5e, 0xdd, 0x12, 0x8e, 0x00, 0x5e, 0xde, 0x54,
1897 0x03, 0x00, 0x5e, 0xdf, 0x0d, 0xb2, 0x00, 0x5e,
1898 0xe0, 0x09, 0x9b, 0x00, 0x5e, 0xe1, 0x12, 0x92,
1899 0x00, 0x5e, 0xe2, 0x12, 0x91, 0x00, 0x5e, 0xe3,
1900 0x12, 0x8d, 0x00, 0x5e, 0xe5, 0x54, 0x04, 0x00,
1901 0x5e, 0xe8, 0x12, 0x93, 0x00, 0x5e, 0xe9, 0x12,
1902 0x94, 0x00, 0x5e, 0xeb, 0x54, 0x05, 0x00, 0x5e,
1903 0xec, 0x12, 0x95, 0x00, 0x5e, 0xf0, 0x12, 0x98,
1904 0x00, 0x5e, 0xf1, 0x12, 0x96, 0x00, 0x5e, 0xf3,
1905 0x12, 0x97, 0x00, 0x5e, 0xf4, 0x12, 0x99, 0x00,
1906 0x5e, 0xf6, 0x05, 0x06, 0x00, 0x5e, 0xf7, 0x0c,
1907 0x0a, 0x00, 0x5e, 0xf8, 0x12, 0x9a, 0x00, 0x5e,
1908 0xf9, 0x41, 0xd5, 0x00, 0x5e, 0xfa, 0x07, 0x50,
1909 0x00, 0x5e, 0xfb, 0x05, 0x76, 0x00, 0x5e, 0xfc,
1910 0x0c, 0xec, 0x00, 0x5e, 0xfd, 0x44, 0xc6, 0x00,
1911 0x5e, 0xfe, 0x12, 0x9b, 0x00, 0x5e, 0xff, 0x0c,
1912 0xd3, 0x00, 0x5f, 0x00, 0x41, 0xd6, 0x00, 0x5f,
1913 0x01, 0x0e, 0x2b, 0x00, 0x5f, 0x02, 0x41, 0xd7,
1914 0x00, 0x5f, 0x03, 0x12, 0x9c, 0x00, 0x5f, 0x04,
1915 0x0f, 0xd4, 0x00, 0x5f, 0x06, 0x54, 0x06, 0x00,
1916 0x5f, 0x07, 0x38, 0xb0, 0x00, 0x5f, 0x08, 0x44,
1917 0xc7, 0x00, 0x5f, 0x09, 0x12, 0x9d, 0x00, 0x5f,
1918 0x0a, 0x0e, 0x10, 0x00, 0x5f, 0x0b, 0x12, 0xa0,
1919 0x00, 0x5f, 0x0c, 0x0f, 0xfa, 0x00, 0x5f, 0x0d,
1920 0x10, 0x0a, 0x00, 0x5f, 0x0e, 0x38, 0xb1, 0x00,
1921 0x5f, 0x0f, 0x08, 0xdc, 0x00, 0x5f, 0x10, 0x0c,
1922 0xcd, 0x00, 0x5f, 0x11, 0x12, 0xa1, 0x00, 0x5f,
1923 0x13, 0x06, 0x77, 0x00, 0x5f, 0x14, 0x0b, 0xc0,
1924 0x00, 0x5f, 0x15, 0x04, 0xbe, 0x00, 0x5f, 0x16,
1925 0x12, 0xa2, 0x00, 0x5f, 0x17, 0x0d, 0xf6, 0x00,
1926 0x5f, 0x18, 0x07, 0xc2, 0x00, 0x5f, 0x19, 0x54,
1927 0x07, 0x00, 0x5f, 0x1b, 0x0b, 0x8e, 0x00, 0x5f,
1928 0x1c, 0x38, 0xb2, 0x00, 0x5f, 0x1d, 0x38, 0xb3,
1929 0x00, 0x5f, 0x1e, 0x44, 0xc9, 0x00, 0x5f, 0x1f,
1930 0x0c, 0x0b, 0x00, 0x5f, 0x21, 0x21, 0x01, 0x00,
1931 0x5f, 0x22, 0x38, 0xb4, 0x00, 0x5f, 0x23, 0x41,
1932 0xd8, 0x00, 0x5f, 0x24, 0x54, 0x08, 0x00, 0x5f,
1933 0x25, 0x0e, 0xfb, 0x00, 0x5f, 0x26, 0x07, 0x6d,
1934 0x00, 0x5f, 0x27, 0x07, 0x80, 0x00, 0x5f, 0x28,
1935 0x38, 0xb5, 0x00, 0x5f, 0x29, 0x12, 0xa3, 0x00,
1936 0x5f, 0x2b, 0x54, 0x09, 0x00, 0x5f, 0x2c, 0x54,
1937 0x0a, 0x00, 0x5f, 0x2d, 0x12, 0xa4, 0x00, 0x5f,
1938 0x2e, 0x54, 0x0b, 0x00, 0x5f, 0x2f, 0x12, 0xaa,
1939 0x00, 0x5f, 0x30, 0x54, 0x0c, 0x00, 0x5f, 0x31,
1940 0x09, 0x11, 0x00, 0x5f, 0x34, 0x21, 0x02, 0x00,
1941 0x5f, 0x35, 0x0b, 0xc1, 0x00, 0x5f, 0x36, 0x38,
1942 0xb6, 0x00, 0x5f, 0x37, 0x06, 0xa7, 0x00, 0x5f,
1943 0x38, 0x12, 0xa5, 0x00, 0x5f, 0x3a, 0x35, 0x98,
1944 0x00, 0x5f, 0x3b, 0x38, 0xb7, 0x00, 0x5f, 0x3c,
1945 0x0d, 0x9d, 0x00, 0x5f, 0x3d, 0x41, 0xd9, 0x00,
1946 0x5f, 0x3e, 0x0b, 0x84, 0x00, 0x5f, 0x3f, 0x54,
1947 0x0d, 0x00, 0x5f, 0x40, 0x38, 0xb8, 0x00, 0x5f,
1948 0x41, 0x12, 0xa6, 0x00, 0x5f, 0x44, 0x54, 0x0e,
1949 0x00, 0x5f, 0x45, 0x20, 0xb2, 0x00, 0x5f, 0x47,
1950 0x44, 0xca, 0x00, 0x5f, 0x48, 0x12, 0xa7, 0x00,
1951 0x5f, 0x4a, 0x06, 0xa8, 0x00, 0x5f, 0x4c, 0x12,
1952 0xa8, 0x00, 0x5f, 0x4d, 0x4b, 0x9a, 0x00, 0x5f,
1953 0x4e, 0x12, 0xa9, 0x00, 0x5f, 0x50, 0x38, 0xb9,
1954 0x00, 0x5f, 0x51, 0x12, 0xab, 0x00, 0x5f, 0x53,
1955 0x0c, 0x70, 0x00, 0x5f, 0x54, 0x41, 0xda, 0x00,
1956 0x5f, 0x56, 0x12, 0xac, 0x00, 0x5f, 0x57, 0x12,
1957 0xad, 0x00, 0x5f, 0x58, 0x38, 0xba, 0x00, 0x5f,
1958 0x59, 0x12, 0xae, 0x00, 0x5f, 0x5b, 0x54, 0x0f,
1959 0x00, 0x5f, 0x5c, 0x12, 0x9f, 0x00, 0x5f, 0x5d,
1960 0x12, 0x9e, 0x00, 0x5f, 0x60, 0x54, 0x10, 0x00,
1961 0x5f, 0x61, 0x12, 0xaf, 0x00, 0x5f, 0x62, 0x07,
1962 0x17, 0x00, 0x5f, 0x63, 0x44, 0xcb, 0x00, 0x5f,
1963 0x64, 0x38, 0xbb, 0x00, 0x5f, 0x65, 0x36, 0xac,
1964 0x00, 0x5f, 0x66, 0x0d, 0x99, 0x00, 0x5f, 0x67,
1965 0x21, 0x03, 0x00, 0x5f, 0x69, 0x08, 0x3c, 0x00,
1966 0x5f, 0x6a, 0x0d, 0xa9, 0x00, 0x5f, 0x6b, 0x0b,
1967 0xc2, 0x00, 0x5f, 0x6c, 0x0d, 0xbd, 0x00, 0x5f,
1968 0x6d, 0x12, 0xb0, 0x00, 0x5f, 0x6f, 0x54, 0x11,
1969 0x00, 0x5f, 0x70, 0x09, 0x9c, 0x00, 0x5f, 0x71,
1970 0x04, 0xe8, 0x00, 0x5f, 0x72, 0x44, 0xcc, 0x00,
1971 0x5f, 0x73, 0x12, 0xb1, 0x00, 0x5f, 0x74, 0x54,
1972 0x12, 0x00, 0x5f, 0x75, 0x54, 0x13, 0x00, 0x5f,
1973 0x77, 0x12, 0xb2, 0x00, 0x5f, 0x78, 0x54, 0x14,
1974 0x00, 0x5f, 0x79, 0x0e, 0xfe, 0x00, 0x5f, 0x7a,
1975 0x54, 0x15, 0x00, 0x5f, 0x7c, 0x0d, 0x74, 0x00,
1976 0x5f, 0x7d, 0x41, 0xdb, 0x00, 0x5f, 0x7e, 0x44,
1977 0xcd, 0x00, 0x5f, 0x7f, 0x12, 0xb5, 0x00, 0x5f,
1978 0x80, 0x05, 0x1f, 0x00, 0x5f, 0x81, 0x0a, 0x50,
1979 0x00, 0x5f, 0x82, 0x12, 0xb4, 0x00, 0x5f, 0x83,
1980 0x12, 0xb3, 0x00, 0x5f, 0x84, 0x07, 0x18, 0x00,
1981 0x5f, 0x85, 0x0b, 0x34, 0x00, 0x5f, 0x87, 0x12,
1982 0xb9, 0x00, 0x5f, 0x88, 0x12, 0xb7, 0x00, 0x5f,
1983 0x89, 0x38, 0xbc, 0x00, 0x5f, 0x8a, 0x12, 0xb6,
1984 0x00, 0x5f, 0x8b, 0x0f, 0x6f, 0x00, 0x5f, 0x8c,
1985 0x07, 0x99, 0x00, 0x5f, 0x8d, 0x54, 0x16, 0x00,
1986 0x5f, 0x8f, 0x44, 0xce, 0x00, 0x5f, 0x90, 0x09,
1987 0x83, 0x00, 0x5f, 0x91, 0x12, 0xb8, 0x00, 0x5f,
1988 0x92, 0x0c, 0x46, 0x00, 0x5f, 0x93, 0x09, 0x48,
1989 0x00, 0x5f, 0x96, 0x54, 0x17, 0x00, 0x5f, 0x97,
1990 0x0c, 0x98, 0x00, 0x5f, 0x98, 0x12, 0xbc, 0x00,
1991 0x5f, 0x99, 0x12, 0xbb, 0x00, 0x5f, 0x9c, 0x38,
1992 0xbd, 0x00, 0x5f, 0x9d, 0x54, 0x18, 0x00, 0x5f,
1993 0x9e, 0x12, 0xba, 0x00, 0x5f, 0xa0, 0x12, 0xbd,
1994 0x00, 0x5f, 0xa1, 0x07, 0x9a, 0x00, 0x5f, 0xa2,
1995 0x44, 0xcf, 0x00, 0x5f, 0xa4, 0x38, 0xbf, 0x00,
1996 0x5f, 0xa7, 0x38, 0xbe, 0x00, 0x5f, 0xa8, 0x12,
1997 0xbe, 0x00, 0x5f, 0xa9, 0x0d, 0xee, 0x00, 0x5f,
1998 0xaa, 0x09, 0x65, 0x00, 0x5f, 0xab, 0x54, 0x19,
1999 0x00, 0x5f, 0xac, 0x4b, 0x9b, 0x00, 0x5f, 0xad,
2000 0x12, 0xbf, 0x00, 0x5f, 0xae, 0x0d, 0x8d, 0x00,
2001 0x5f, 0xaf, 0x38, 0xc0, 0x00, 0x5f, 0xb0, 0x54,
2002 0x1a, 0x00, 0x5f, 0xb1, 0x54, 0x1b, 0x00, 0x5f,
2003 0xb3, 0x0c, 0x99, 0x00, 0x5f, 0xb4, 0x0b, 0xc3,
2004 0x00, 0x5f, 0xb5, 0x34, 0x38, 0x00, 0x5f, 0xb7,
2005 0x21, 0x04, 0x00, 0x5f, 0xb8, 0x38, 0xc1, 0x00,
2006 0x5f, 0xb9, 0x0c, 0x2a, 0x00, 0x5f, 0xbc, 0x12,
2007 0xc0, 0x00, 0x5f, 0xbd, 0x06, 0x45, 0x00, 0x5f,
2008 0xc3, 0x09, 0xfa, 0x00, 0x5f, 0xc4, 0x38, 0xc2,
2009 0x00, 0x5f, 0xc5, 0x0d, 0x9e, 0x00, 0x5f, 0xc7,
2010 0x44, 0xd0, 0x00, 0x5f, 0xc8, 0x54, 0x1c, 0x00,
2011 0x5f, 0xc9, 0x38, 0xc3, 0x00, 0x5f, 0xcb, 0x44,
2012 0xd1, 0x00, 0x5f, 0xcc, 0x06, 0x33, 0x00, 0x5f,
2013 0xcd, 0x0c, 0xdc, 0x00, 0x5f, 0xd0, 0x54, 0x1d,
2014 0x00, 0x5f, 0xd1, 0x54, 0x1e, 0x00, 0x5f, 0xd2,
2015 0x44, 0xd2, 0x00, 0x5f, 0xd3, 0x44, 0xd3, 0x00,
2016 0x5f, 0xd4, 0x44, 0xd4, 0x00, 0x5f, 0xd6, 0x12,
2017 0xc1, 0x00, 0x5f, 0xd7, 0x08, 0xa4, 0x00, 0x5f,
2018 0xd8, 0x0e, 0x68, 0x00, 0x5f, 0xd9, 0x0e, 0x69,
2019 0x00, 0x5f, 0xdc, 0x05, 0x20, 0x00, 0x5f, 0xdd,
2020 0x12, 0xc6, 0x00, 0x5f, 0xde, 0x21, 0x05, 0x00,
2021 0x5f, 0xe0, 0x0b, 0xa7, 0x00, 0x5f, 0xe1, 0x38,
2022 0xc4, 0x00, 0x5f, 0xe2, 0x44, 0xd5, 0x00, 0x5f,
2023 0xe4, 0x12, 0xc3, 0x00, 0x5f, 0xe8, 0x54, 0x1f,
2024 0x00, 0x5f, 0xe9, 0x38, 0xc5, 0x00, 0x5f, 0xea,
2025 0x4b, 0x9c, 0x00, 0x5f, 0xeb, 0x05, 0x77, 0x00,
2026 0x5f, 0xec, 0x54, 0x20, 0x00, 0x5f, 0xed, 0x38,
2027 0xc6, 0x00, 0x5f, 0xee, 0x44, 0xd6, 0x00, 0x5f,
2028 0xef, 0x44, 0xd7, 0x00, 0x5f, 0xf0, 0x12, 0xf6,
2029 0x00, 0x5f, 0xf1, 0x12, 0xc5, 0x00, 0x5f, 0xf2,
2030 0x54, 0x21, 0x00, 0x5f, 0xf3, 0x44, 0xd8, 0x00,
2031 0x5f, 0xf5, 0x0c, 0xe6, 0x00, 0x5f, 0xf6, 0x54,
2032 0x22, 0x00, 0x5f, 0xf8, 0x12, 0xc4, 0x00, 0x5f,
2033 0xfa, 0x54, 0x23, 0x00, 0x5f, 0xfb, 0x12, 0xc2,
2034 0x00, 0x5f, 0xfc, 0x38, 0xc7, 0x00, 0x5f, 0xfd,
2035 0x08, 0x0c, 0x00, 0x5f, 0xff, 0x12, 0xc8, 0x00,
2036 0x60, 0x07, 0x4b, 0x9d, 0x00, 0x60, 0x0a, 0x54,
2037 0x24, 0x00, 0x60, 0x0d, 0x41, 0xdc, 0x00, 0x60,
2038 0x0e, 0x12, 0xce, 0x00, 0x60, 0x0f, 0x12, 0xd4,
2039 0x00, 0x60, 0x10, 0x12, 0xcc, 0x00, 0x60, 0x12,
2040 0x0c, 0x56, 0x00, 0x60, 0x13, 0x54, 0x25, 0x00,
2041 0x60, 0x14, 0x41, 0xdd, 0x00, 0x60, 0x15, 0x12,
2042 0xd1, 0x00, 0x60, 0x16, 0x0d, 0xcf, 0x00, 0x60,
2043 0x17, 0x38, 0xc8, 0x00, 0x60, 0x18, 0x41, 0xde,
2044 0x00, 0x60, 0x19, 0x12, 0xcb, 0x00, 0x60, 0x1a,
2045 0x38, 0xc9, 0x00, 0x60, 0x1b, 0x12, 0xd0, 0x00,
2046 0x60, 0x1c, 0x0f, 0xaf, 0x00, 0x60, 0x1d, 0x08,
2047 0xa5, 0x00, 0x60, 0x1f, 0x54, 0x26, 0x00, 0x60,
2048 0x20, 0x0b, 0x35, 0x00, 0x60, 0x21, 0x12, 0xc9,
2049 0x00, 0x60, 0x22, 0x44, 0xda, 0x00, 0x60, 0x24,
2050 0x44, 0xdb, 0x00, 0x60, 0x25, 0x06, 0x78, 0x00,
2051 0x60, 0x26, 0x12, 0xd3, 0x00, 0x60, 0x27, 0x0a,
2052 0x51, 0x00, 0x60, 0x28, 0x05, 0x07, 0x00, 0x60,
2053 0x29, 0x12, 0xcd, 0x00, 0x60, 0x2a, 0x05, 0x78,
2054 0x00, 0x60, 0x2b, 0x12, 0xd2, 0x00, 0x60, 0x2d,
2055 0x54, 0x27, 0x00, 0x60, 0x2f, 0x06, 0xa9, 0x00,
2056 0x60, 0x31, 0x12, 0xcf, 0x00, 0x60, 0x33, 0x38,
2057 0xca, 0x00, 0x60, 0x35, 0x41, 0xdf, 0x00, 0x60,
2058 0x3a, 0x12, 0xd5, 0x00, 0x60, 0x40, 0x54, 0x28,
2059 0x00, 0x60, 0x41, 0x12, 0xd7, 0x00, 0x60, 0x42,
2060 0x12, 0xe1, 0x00, 0x60, 0x43, 0x12, 0xdf, 0x00,
2061 0x60, 0x46, 0x12, 0xdc, 0x00, 0x60, 0x47, 0x41,
2062 0xe0, 0x00, 0x60, 0x48, 0x54, 0x29, 0x00, 0x60,
2063 0x49, 0x4b, 0x9e, 0x00, 0x60, 0x4a, 0x12, 0xdb,
2064 0x00, 0x60, 0x4b, 0x0f, 0xc0, 0x00, 0x60, 0x4c,
2065 0x44, 0xdd, 0x00, 0x60, 0x4d, 0x12, 0xdd, 0x00,
2066 0x60, 0x50, 0x06, 0xaa, 0x00, 0x60, 0x51, 0x54,
2067 0x2a, 0x00, 0x60, 0x52, 0x07, 0xc3, 0x00, 0x60,
2068 0x54, 0x4b, 0x9f, 0x00, 0x60, 0x55, 0x09, 0x84,
2069 0x00, 0x60, 0x56, 0x54, 0x2b, 0x00, 0x60, 0x57,
2070 0x54, 0x2c, 0x00, 0x60, 0x59, 0x12, 0xe4, 0x00,
2071 0x60, 0x5a, 0x12, 0xd6, 0x00, 0x60, 0x5d, 0x21,
2072 0x06, 0x00, 0x60, 0x5f, 0x12, 0xda, 0x00, 0x60,
2073 0x60, 0x12, 0xca, 0x00, 0x60, 0x61, 0x38, 0xcb,
2074 0x00, 0x60, 0x62, 0x05, 0x7a, 0x00, 0x60, 0x63,
2075 0x12, 0xde, 0x00, 0x60, 0x64, 0x12, 0xe0, 0x00,
2076 0x60, 0x65, 0x0b, 0x8f, 0x00, 0x60, 0x67, 0x4b,
2077 0xa0, 0x00, 0x60, 0x68, 0x08, 0x18, 0x00, 0x60,
2078 0x69, 0x05, 0x38, 0x00, 0x60, 0x6a, 0x12, 0xd8,
2079 0x00, 0x60, 0x6b, 0x12, 0xe3, 0x00, 0x60, 0x6c,
2080 0x12, 0xe2, 0x00, 0x60, 0x6d, 0x06, 0xab, 0x00,
2081 0x60, 0x6f, 0x0b, 0x09, 0x00, 0x60, 0x70, 0x05,
2082 0xc4, 0x00, 0x60, 0x71, 0x54, 0x2d, 0x00, 0x60,
2083 0x75, 0x07, 0x19, 0x00, 0x60, 0x77, 0x12, 0xd9,
2084 0x00, 0x60, 0x7e, 0x54, 0x2e, 0x00, 0x60, 0x7f,
2085 0x38, 0xcc, 0x00, 0x60, 0x81, 0x12, 0xe5, 0x00,
2086 0x60, 0x82, 0x54, 0x2f, 0x00, 0x60, 0x83, 0x12,
2087 0xe8, 0x00, 0x60, 0x84, 0x12, 0xea, 0x00, 0x60,
2088 0x85, 0x21, 0x07, 0x00, 0x60, 0x86, 0x54, 0x30,
2089 0x00, 0x60, 0x88, 0x54, 0x31, 0x00, 0x60, 0x89,
2090 0x08, 0xe9, 0x00, 0x60, 0x8a, 0x21, 0x08, 0x00,
2091 0x60, 0x8b, 0x12, 0xf0, 0x00, 0x60, 0x8c, 0x0c,
2092 0x0c, 0x00, 0x60, 0x8d, 0x12, 0xe6, 0x00, 0x60,
2093 0x8e, 0x54, 0x32, 0x00, 0x60, 0x91, 0x54, 0x33,
2094 0x00, 0x60, 0x92, 0x12, 0xee, 0x00, 0x60, 0x93,
2095 0x54, 0x34, 0x00, 0x60, 0x94, 0x34, 0x0e, 0x00,
2096 0x60, 0x95, 0x44, 0xde, 0x00, 0x60, 0x96, 0x12,
2097 0xec, 0x00, 0x60, 0x97, 0x12, 0xed, 0x00, 0x60,
2098 0x98, 0x54, 0x35, 0x00, 0x60, 0x9a, 0x12, 0xe9,
2099 0x00, 0x60, 0x9b, 0x12, 0xeb, 0x00, 0x60, 0x9d,
2100 0x41, 0xe1, 0x00, 0x60, 0x9e, 0x38, 0xcd, 0x00,
2101 0x60, 0x9f, 0x07, 0x9b, 0x00, 0x60, 0xa0, 0x0f,
2102 0x14, 0x00, 0x60, 0xa2, 0x54, 0x37, 0x00, 0x60,
2103 0xa3, 0x05, 0xf1, 0x00, 0x60, 0xa4, 0x38, 0xce,
2104 0x00, 0x60, 0xa5, 0x54, 0x38, 0x00, 0x60, 0xa6,
2105 0x04, 0xfb, 0x00, 0x60, 0xa7, 0x12, 0xef, 0x00,
2106 0x60, 0xa8, 0x44, 0xdf, 0x00, 0x60, 0xa9, 0x0c,
2107 0xf0, 0x00, 0x60, 0xaa, 0x04, 0x71, 0x00, 0x60,
2108 0xb0, 0x38, 0xcf, 0x00, 0x60, 0xb1, 0x44, 0xe1,
2109 0x00, 0x60, 0xb2, 0x0d, 0x75, 0x00, 0x60, 0xb3,
2110 0x12, 0xc7, 0x00, 0x60, 0xb4, 0x12, 0xf5, 0x00,
2111 0x60, 0xb5, 0x12, 0xf9, 0x00, 0x60, 0xb6, 0x0e,
2112 0xf1, 0x00, 0x60, 0xb7, 0x54, 0x39, 0x00, 0x60,
2113 0xb8, 0x12, 0xf2, 0x00, 0x60, 0xbb, 0x4b, 0xa1,
2114 0x00, 0x60, 0xbc, 0x0c, 0x63, 0x00, 0x60, 0xbd,
2115 0x12, 0xf7, 0x00, 0x60, 0xbe, 0x44, 0xe2, 0x00,
2116 0x60, 0xc2, 0x54, 0x3a, 0x00, 0x60, 0xc4, 0x4b,
2117 0xa2, 0x00, 0x60, 0xc5, 0x09, 0xd8, 0x00, 0x60,
2118 0xc6, 0x12, 0xf8, 0x00, 0x60, 0xc7, 0x0c, 0xaf,
2119 0x00, 0x60, 0xc8, 0x44, 0xe3, 0x00, 0x60, 0xc9,
2120 0x54, 0x3b, 0x00, 0x60, 0xca, 0x54, 0x3c, 0x00,
2121 0x60, 0xcb, 0x38, 0xd0, 0x00, 0x60, 0xce, 0x54,
2122 0x3d, 0x00, 0x60, 0xcf, 0x54, 0x3e, 0x00, 0x60,
2123 0xd1, 0x0f, 0xed, 0x00, 0x60, 0xd3, 0x12, 0xf4,
2124 0x00, 0x60, 0xd4, 0x41, 0xe2, 0x00, 0x60, 0xd5,
2125 0x21, 0x0a, 0x00, 0x60, 0xd8, 0x12, 0xfa, 0x00,
2126 0x60, 0xd9, 0x44, 0xe4, 0x00, 0x60, 0xda, 0x08,
2127 0x0d, 0x00, 0x60, 0xdb, 0x38, 0xd1, 0x00, 0x60,
2128 0xdc, 0x0a, 0x6f, 0x00, 0x60, 0xdd, 0x41, 0xe3,
2129 0x00, 0x60, 0xde, 0x21, 0x09, 0x00, 0x60, 0xdf,
2130 0x04, 0x98, 0x00, 0x60, 0xe0, 0x12, 0xf3, 0x00,
2131 0x60, 0xe1, 0x12, 0xf1, 0x00, 0x60, 0xe2, 0x54,
2132 0x3f, 0x00, 0x60, 0xe3, 0x0a, 0xdc, 0x00, 0x60,
2133 0xe5, 0x54, 0x40, 0x00, 0x60, 0xe7, 0x12, 0xe7,
2134 0x00, 0x60, 0xe8, 0x08, 0x82, 0x00, 0x60, 0xee,
2135 0x44, 0xe5, 0x00, 0x60, 0xf0, 0x0b, 0x26, 0x00,
2136 0x60, 0xf1, 0x13, 0x06, 0x00, 0x60, 0xf2, 0x21,
2137 0x0c, 0x00, 0x60, 0xf3, 0x0a, 0xdd, 0x00, 0x60,
2138 0xf4, 0x13, 0x01, 0x00, 0x60, 0xf5, 0x44, 0xe6,
2139 0x00, 0x60, 0xf6, 0x12, 0xfe, 0x00, 0x60, 0xf7,
2140 0x12, 0xff, 0x00, 0x60, 0xf8, 0x38, 0xd2, 0x00,
2141 0x60, 0xf9, 0x09, 0x12, 0x00, 0x60, 0xfa, 0x13,
2142 0x02, 0x00, 0x60, 0xfb, 0x13, 0x05, 0x00, 0x60,
2143 0xfc, 0x54, 0x41, 0x00, 0x60, 0xfd, 0x4b, 0xa3,
2144 0x00, 0x61, 0x00, 0x13, 0x00, 0x00, 0x61, 0x01,
2145 0x09, 0x2f, 0x00, 0x61, 0x02, 0x54, 0x42, 0x00,
2146 0x61, 0x03, 0x13, 0x03, 0x00, 0x61, 0x06, 0x12,
2147 0xfd, 0x00, 0x61, 0x07, 0x54, 0x43, 0x00, 0x61,
2148 0x08, 0x0f, 0x08, 0x00, 0x61, 0x09, 0x0f, 0x07,
2149 0x00, 0x61, 0x0a, 0x4b, 0xa4, 0x00, 0x61, 0x0c,
2150 0x54, 0x44, 0x00, 0x61, 0x0d, 0x13, 0x07, 0x00,
2151 0x61, 0x0e, 0x13, 0x08, 0x00, 0x61, 0x0f, 0x04,
2152 0x99, 0x00, 0x61, 0x10, 0x44, 0xe7, 0x00, 0x61,
2153 0x11, 0x21, 0x0d, 0x00, 0x61, 0x12, 0x38, 0xd3,
2154 0x00, 0x61, 0x13, 0x38, 0xd4, 0x00, 0x61, 0x14,
2155 0x38, 0xd5, 0x00, 0x61, 0x15, 0x12, 0xfc, 0x00,
2156 0x61, 0x16, 0x4b, 0xa5, 0x00, 0x61, 0x17, 0x54,
2157 0x45, 0x00, 0x61, 0x19, 0x44, 0xe8, 0x00, 0x61,
2158 0x1a, 0x06, 0xea, 0x00, 0x61, 0x1b, 0x04, 0x6a,
2159 0x00, 0x61, 0x1c, 0x38, 0xd6, 0x00, 0x61, 0x1e,
2160 0x44, 0xe9, 0x00, 0x61, 0x1f, 0x05, 0xf2, 0x00,
2161 0x61, 0x20, 0x21, 0x0b, 0x00, 0x61, 0x21, 0x13,
2162 0x04, 0x00, 0x61, 0x22, 0x54, 0x46, 0x00, 0x61,
2163 0x27, 0x13, 0x0c, 0x00, 0x61, 0x28, 0x13, 0x0b,
2164 0x00, 0x61, 0x2a, 0x4b, 0xa6, 0x00, 0x61, 0x2b,
2165 0x41, 0xe4, 0x00, 0x61, 0x2c, 0x13, 0x10, 0x00,
2166 0x61, 0x30, 0x21, 0x0f, 0x00, 0x61, 0x31, 0x54,
2167 0x47, 0x00, 0x61, 0x34, 0x13, 0x11, 0x00, 0x61,
2168 0x35, 0x54, 0x48, 0x00, 0x61, 0x36, 0x4b, 0xa7,
2169 0x00, 0x61, 0x37, 0x21, 0x0e, 0x00, 0x61, 0x39,
2170 0x54, 0x49, 0x00, 0x61, 0x3a, 0x44, 0xea, 0x00,
2171 0x61, 0x3c, 0x13, 0x0f, 0x00, 0x61, 0x3d, 0x13,
2172 0x12, 0x00, 0x61, 0x3e, 0x13, 0x0a, 0x00, 0x61,
2173 0x3f, 0x13, 0x0e, 0x00, 0x61, 0x41, 0x44, 0xec,
2174 0x00, 0x61, 0x42, 0x13, 0x13, 0x00, 0x61, 0x44,
2175 0x13, 0x14, 0x00, 0x61, 0x45, 0x54, 0x4a, 0x00,
2176 0x61, 0x46, 0x44, 0xed, 0x00, 0x61, 0x47, 0x13,
2177 0x09, 0x00, 0x61, 0x48, 0x08, 0xca, 0x00, 0x61,
2178 0x49, 0x54, 0x4b, 0x00, 0x61, 0x4a, 0x13, 0x0d,
2179 0x00, 0x61, 0x4b, 0x0b, 0x36, 0x00, 0x61, 0x4c,
2180 0x07, 0xc4, 0x00, 0x61, 0x4d, 0x12, 0xfb, 0x00,
2181 0x61, 0x4e, 0x09, 0xfb, 0x00, 0x61, 0x53, 0x13,
2182 0x21, 0x00, 0x61, 0x55, 0x0e, 0x39, 0x00, 0x61,
2183 0x58, 0x13, 0x17, 0x00, 0x61, 0x59, 0x13, 0x18,
2184 0x00, 0x61, 0x5a, 0x13, 0x19, 0x00, 0x61, 0x5d,
2185 0x13, 0x20, 0x00, 0x61, 0x5e, 0x4b, 0xa8, 0x00,
2186 0x61, 0x5f, 0x13, 0x1f, 0x00, 0x61, 0x60, 0x44,
2187 0xee, 0x00, 0x61, 0x62, 0x0e, 0xab, 0x00, 0x61,
2188 0x63, 0x05, 0xf3, 0x00, 0x61, 0x64, 0x4b, 0xa9,
2189 0x00, 0x61, 0x65, 0x13, 0x1d, 0x00, 0x61, 0x67,
2190 0x07, 0x1b, 0x00, 0x61, 0x68, 0x05, 0x92, 0x00,
2191 0x61, 0x6b, 0x13, 0x1a, 0x00, 0x61, 0x6c, 0x54,
2192 0x4c, 0x00, 0x61, 0x6e, 0x0f, 0x80, 0x00, 0x61,
2193 0x6f, 0x13, 0x1c, 0x00, 0x61, 0x70, 0x04, 0x9a,
2194 0x00, 0x61, 0x71, 0x13, 0x1e, 0x00, 0x61, 0x72,
2195 0x54, 0x4d, 0x00, 0x61, 0x73, 0x13, 0x15, 0x00,
2196 0x61, 0x74, 0x13, 0x1b, 0x00, 0x61, 0x75, 0x13,
2197 0x22, 0x00, 0x61, 0x76, 0x07, 0x1a, 0x00, 0x61,
2198 0x77, 0x13, 0x16, 0x00, 0x61, 0x78, 0x54, 0x4e,
2199 0x00, 0x61, 0x7b, 0x4b, 0xaa, 0x00, 0x61, 0x7c,
2200 0x38, 0xd7, 0x00, 0x61, 0x7d, 0x4b, 0xab, 0x00,
2201 0x61, 0x7e, 0x0f, 0x47, 0x00, 0x61, 0x7f, 0x4b,
2202 0xac, 0x00, 0x61, 0x80, 0x54, 0x4f, 0x00, 0x61,
2203 0x81, 0x54, 0x50, 0x00, 0x61, 0x82, 0x0f, 0x15,
2204 0x00, 0x61, 0x83, 0x54, 0x51, 0x00, 0x61, 0x84,
2205 0x54, 0x52, 0x00, 0x61, 0x87, 0x13, 0x25, 0x00,
2206 0x61, 0x8a, 0x13, 0x29, 0x00, 0x61, 0x8b, 0x54,
2207 0x53, 0x00, 0x61, 0x8d, 0x38, 0xd8, 0x00, 0x61,
2208 0x8e, 0x34, 0x33, 0x00, 0x61, 0x90, 0x0f, 0xc1,
2209 0x00, 0x61, 0x91, 0x13, 0x2a, 0x00, 0x61, 0x92,
2210 0x44, 0xf0, 0x00, 0x61, 0x93, 0x44, 0xf1, 0x00,
2211 0x61, 0x94, 0x13, 0x27, 0x00, 0x61, 0x96, 0x13,
2212 0x24, 0x00, 0x61, 0x97, 0x44, 0xf2, 0x00, 0x61,
2213 0x98, 0x21, 0x10, 0x00, 0x61, 0x99, 0x13, 0x23,
2214 0x00, 0x61, 0x9a, 0x13, 0x28, 0x00, 0x61, 0x9c,
2215 0x54, 0x54, 0x00, 0x61, 0x9d, 0x4b, 0xad, 0x00,
2216 0x61, 0x9f, 0x38, 0xd9, 0x00, 0x61, 0xa0, 0x54,
2217 0x55, 0x00, 0x61, 0xa4, 0x0e, 0x00, 0x00, 0x61,
2218 0xa5, 0x44, 0xf3, 0x00, 0x61, 0xa7, 0x0c, 0x8c,
2219 0x00, 0x61, 0xa8, 0x38, 0xda, 0x00, 0x61, 0xa9,
2220 0x07, 0x1c, 0x00, 0x61, 0xaa, 0x54, 0x56, 0x00,
2221 0x61, 0xab, 0x13, 0x2b, 0x00, 0x61, 0xac, 0x13,
2222 0x26, 0x00, 0x61, 0xad, 0x44, 0xf4, 0x00, 0x61,
2223 0xae, 0x13, 0x2c, 0x00, 0x61, 0xb2, 0x07, 0x51,
2224 0x00, 0x61, 0xb6, 0x05, 0x31, 0x00, 0x61, 0xb8,
2225 0x4b, 0xae, 0x00, 0x61, 0xb9, 0x41, 0xe6, 0x00,
2226 0x61, 0xba, 0x13, 0x34, 0x00, 0x61, 0xbc, 0x41,
2227 0xe5, 0x00, 0x61, 0xbe, 0x05, 0xf4, 0x00, 0x61,
2228 0xc0, 0x54, 0x57, 0x00, 0x61, 0xc1, 0x54, 0x58,
2229 0x00, 0x61, 0xc2, 0x38, 0xdb, 0x00, 0x61, 0xc3,
2230 0x13, 0x32, 0x00, 0x61, 0xc6, 0x13, 0x33, 0x00,
2231 0x61, 0xc7, 0x08, 0x19, 0x00, 0x61, 0xc8, 0x13,
2232 0x31, 0x00, 0x61, 0xc9, 0x13, 0x2f, 0x00, 0x61,
2233 0xca, 0x13, 0x2e, 0x00, 0x61, 0xcb, 0x13, 0x35,
2234 0x00, 0x61, 0xcc, 0x13, 0x2d, 0x00, 0x61, 0xcd,
2235 0x13, 0x37, 0x00, 0x61, 0xce, 0x54, 0x59, 0x00,
2236 0x61, 0xcf, 0x54, 0x5a, 0x00, 0x61, 0xd0, 0x05,
2237 0x7b, 0x00, 0x61, 0xd5, 0x44, 0xf6, 0x00, 0x61,
2238 0xdc, 0x4b, 0xaf, 0x00, 0x61, 0xdd, 0x44, 0xf7,
2239 0x00, 0x61, 0xde, 0x54, 0x5b, 0x00, 0x61, 0xdf,
2240 0x38, 0xdc, 0x00, 0x61, 0xe1, 0x54, 0x5c, 0x00,
2241 0x61, 0xe2, 0x4b, 0xb0, 0x00, 0x61, 0xe3, 0x13,
2242 0x39, 0x00, 0x61, 0xe5, 0x4b, 0xb1, 0x00, 0x61,
2243 0xe6, 0x13, 0x38, 0x00, 0x61, 0xe7, 0x54, 0x5d,
2244 0x00, 0x61, 0xe8, 0x4b, 0xb2, 0x00, 0x61, 0xe9,
2245 0x54, 0x5e, 0x00, 0x61, 0xec, 0x54, 0x5f, 0x00,
2246 0x61, 0xed, 0x54, 0x60, 0x00, 0x61, 0xef, 0x54,
2247 0x61, 0x00, 0x61, 0xf2, 0x0b, 0xc4, 0x00, 0x61,
2248 0xf4, 0x13, 0x3c, 0x00, 0x61, 0xf5, 0x44, 0xf8,
2249 0x00, 0x61, 0xf6, 0x13, 0x3a, 0x00, 0x61, 0xf7,
2250 0x13, 0x30, 0x00, 0x61, 0xf8, 0x07, 0x52, 0x00,
2251 0x61, 0xfa, 0x13, 0x3b, 0x00, 0x61, 0xfc, 0x13,
2252 0x3f, 0x00, 0x61, 0xfd, 0x13, 0x3e, 0x00, 0x61,
2253 0xfe, 0x13, 0x40, 0x00, 0x61, 0xff, 0x13, 0x3d,
2254 0x00, 0x62, 0x00, 0x13, 0x41, 0x00, 0x62, 0x01,
2255 0x54, 0x62, 0x00, 0x62, 0x03, 0x54, 0x63, 0x00,
2256 0x62, 0x04, 0x4b, 0xb3, 0x00, 0x62, 0x07, 0x4b,
2257 0xb4, 0x00, 0x62, 0x08, 0x13, 0x42, 0x00, 0x62,
2258 0x09, 0x13, 0x43, 0x00, 0x62, 0x0a, 0x0e, 0x3a,
2259 0x00, 0x62, 0x0c, 0x13, 0x45, 0x00, 0x62, 0x0d,
2260 0x13, 0x44, 0x00, 0x62, 0x0e, 0x09, 0x49, 0x00,
2261 0x62, 0x10, 0x0a, 0x52, 0x00, 0x62, 0x11, 0x05,
2262 0x66, 0x00, 0x62, 0x12, 0x05, 0x7c, 0x00, 0x62,
2263 0x13, 0x21, 0x11, 0x00, 0x62, 0x14, 0x13, 0x46,
2264 0x00, 0x62, 0x15, 0x38, 0xdd, 0x00, 0x62, 0x16,
2265 0x04, 0x83, 0x00, 0x62, 0x1a, 0x0a, 0x70, 0x00,
2266 0x62, 0x1b, 0x13, 0x47, 0x00, 0x62, 0x1c, 0x54,
2267 0x64, 0x00, 0x62, 0x1d, 0x1a, 0x64, 0x00, 0x62,
2268 0x1e, 0x13, 0x48, 0x00, 0x62, 0x1f, 0x07, 0x37,
2269 0x00, 0x62, 0x20, 0x54, 0x65, 0x00, 0x62, 0x21,
2270 0x13, 0x49, 0x00, 0x62, 0x22, 0x41, 0xe7, 0x00,
2271 0x62, 0x23, 0x44, 0xfa, 0x00, 0x62, 0x26, 0x0a,
2272 0x93, 0x00, 0x62, 0x27, 0x54, 0x66, 0x00, 0x62,
2273 0x29, 0x38, 0xde, 0x00, 0x62, 0x2a, 0x13, 0x4a,
2274 0x00, 0x62, 0x2b, 0x54, 0x67, 0x00, 0x62, 0x2e,
2275 0x13, 0x4b, 0x00, 0x62, 0x2f, 0x06, 0x54, 0x00,
2276 0x62, 0x30, 0x13, 0x4c, 0x00, 0x62, 0x31, 0x4b,
2277 0xb5, 0x00, 0x62, 0x32, 0x13, 0x4d, 0x00, 0x62,
2278 0x33, 0x13, 0x4e, 0x00, 0x62, 0x34, 0x0b, 0x37,
2279 0x00, 0x62, 0x36, 0x35, 0xbd, 0x00, 0x62, 0x38,
2280 0x07, 0x81, 0x00, 0x62, 0x39, 0x4b, 0xb6, 0x00,
2281 0x62, 0x3b, 0x0e, 0xed, 0x00, 0x62, 0x3d, 0x4b,
2282 0xb7, 0x00, 0x62, 0x3e, 0x34, 0x4e, 0x00, 0x62,
2283 0x3f, 0x0e, 0x6a, 0x00, 0x62, 0x40, 0x09, 0x74,
2284 0x00, 0x62, 0x41, 0x13, 0x4f, 0x00, 0x62, 0x42,
2285 0x54, 0x68, 0x00, 0x62, 0x43, 0x38, 0xdf, 0x00,
2286 0x62, 0x44, 0x54, 0x69, 0x00, 0x62, 0x46, 0x38,
2287 0xe0, 0x00, 0x62, 0x47, 0x0a, 0x94, 0x00, 0x62,
2288 0x48, 0x1b, 0x1a, 0x00, 0x62, 0x49, 0x0d, 0x76,
2289 0x00, 0x62, 0x4b, 0x09, 0x16, 0x00, 0x62, 0x4c,
2290 0x38, 0xe1, 0x00, 0x62, 0x4d, 0x08, 0x3d, 0x00,
2291 0x62, 0x4e, 0x13, 0x50, 0x00, 0x62, 0x50, 0x54,
2292 0x6a, 0x00, 0x62, 0x51, 0x38, 0xe2, 0x00, 0x62,
2293 0x52, 0x44, 0xfb, 0x00, 0x62, 0x53, 0x0b, 0x27,
2294 0x00, 0x62, 0x54, 0x54, 0x6b, 0x00, 0x62, 0x55,
2295 0x0d, 0xf7, 0x00, 0x62, 0x56, 0x38, 0xe3, 0x00,
2296 0x62, 0x58, 0x0b, 0x51, 0x00, 0x62, 0x5a, 0x41,
2297 0xe8, 0x00, 0x62, 0x5b, 0x13, 0x53, 0x00, 0x62,
2298 0x5c, 0x54, 0x6c, 0x00, 0x62, 0x5e, 0x13, 0x51,
2299 0x00, 0x62, 0x60, 0x13, 0x54, 0x00, 0x62, 0x61,
2300 0x44, 0xfc, 0x00, 0x62, 0x63, 0x13, 0x52, 0x00,
2301 0x62, 0x64, 0x44, 0xfd, 0x00, 0x62, 0x68, 0x13,
2302 0x55, 0x00, 0x62, 0x6d, 0x44, 0xff, 0x00, 0x62,
2303 0x6e, 0x0e, 0x01, 0x00, 0x62, 0x6f, 0x41, 0xe9,
2304 0x00, 0x62, 0x71, 0x04, 0x7b, 0x00, 0x62, 0x73,
2305 0x45, 0x00, 0x00, 0x62, 0x76, 0x0d, 0xd0, 0x00,
2306 0x62, 0x79, 0x0d, 0x77, 0x00, 0x62, 0x7a, 0x4b,
2307 0xb8, 0x00, 0x62, 0x7b, 0x44, 0xfe, 0x00, 0x62,
2308 0x7c, 0x13, 0x56, 0x00, 0x62, 0x7d, 0x54, 0x6d,
2309 0x00, 0x62, 0x7e, 0x13, 0x59, 0x00, 0x62, 0x7f,
2310 0x09, 0x9d, 0x00, 0x62, 0x80, 0x06, 0x55, 0x00,
2311 0x62, 0x82, 0x13, 0x57, 0x00, 0x62, 0x83, 0x13,
2312 0x5e, 0x00, 0x62, 0x84, 0x09, 0x9e, 0x00, 0x62,
2313 0x85, 0x35, 0xc5, 0x00, 0x62, 0x89, 0x13, 0x58,
2314 0x00, 0x62, 0x8a, 0x0c, 0xfa, 0x00, 0x62, 0x8d,
2315 0x54, 0x6e, 0x00, 0x62, 0x8e, 0x54, 0x6f, 0x00,
2316 0x62, 0x8f, 0x54, 0x70, 0x00, 0x62, 0x90, 0x4b,
2317 0xb9, 0x00, 0x62, 0x91, 0x0f, 0x48, 0x00, 0x62,
2318 0x92, 0x13, 0x5a, 0x00, 0x62, 0x93, 0x13, 0x5b,
2319 0x00, 0x62, 0x94, 0x13, 0x5f, 0x00, 0x62, 0x95,
2320 0x0c, 0x64, 0x00, 0x62, 0x96, 0x13, 0x5c, 0x00,
2321 0x62, 0x97, 0x07, 0xc5, 0x00, 0x62, 0x98, 0x0a,
2322 0x82, 0x00, 0x62, 0x99, 0x45, 0x01, 0x00, 0x62,
2323 0x9b, 0x13, 0x6d, 0x00, 0x62, 0x9c, 0x0d, 0x48,
2324 0x00, 0x62, 0x9e, 0x0b, 0x52, 0x00, 0x62, 0xa6,
2325 0x21, 0x12, 0x00, 0x62, 0xa8, 0x4b, 0xba, 0x00,
2326 0x62, 0xab, 0x0d, 0x78, 0x00, 0x62, 0xac, 0x13,
2327 0xb2, 0x00, 0x62, 0xb1, 0x0e, 0x4a, 0x00, 0x62,
2328 0xb3, 0x54, 0x71, 0x00, 0x62, 0xb5, 0x0c, 0x0d,
2329 0x00, 0x62, 0xb6, 0x54, 0x72, 0x00, 0x62, 0xb7,
2330 0x54, 0x73, 0x00, 0x62, 0xb9, 0x0e, 0xa3, 0x00,
2331 0x62, 0xba, 0x54, 0x74, 0x00, 0x62, 0xbb, 0x13,
2332 0x62, 0x00, 0x62, 0xbc, 0x05, 0x21, 0x00, 0x62,
2333 0xbd, 0x0b, 0xa8, 0x00, 0x62, 0xbe, 0x54, 0x75,
2334 0x00, 0x62, 0xbf, 0x54, 0x76, 0x00, 0x62, 0xc2,
2335 0x13, 0x6b, 0x00, 0x62, 0xc4, 0x38, 0xe4, 0x00,
2336 0x62, 0xc5, 0x0b, 0x72, 0x00, 0x62, 0xc6, 0x13,
2337 0x65, 0x00, 0x62, 0xc7, 0x13, 0x6c, 0x00, 0x62,
2338 0xc8, 0x13, 0x67, 0x00, 0x62, 0xc9, 0x13, 0x6e,
2339 0x00, 0x62, 0xca, 0x13, 0x6a, 0x00, 0x62, 0xcc,
2340 0x13, 0x69, 0x00, 0x62, 0xcd, 0x0d, 0x25, 0x00,
2341 0x62, 0xce, 0x54, 0x77, 0x00, 0x62, 0xcf, 0x13,
2342 0x63, 0x00, 0x62, 0xd0, 0x05, 0x7d, 0x00, 0x62,
2343 0xd1, 0x13, 0x61, 0x00, 0x62, 0xd2, 0x06, 0x8b,
2344 0x00, 0x62, 0xd3, 0x0b, 0x53, 0x00, 0x62, 0xd4,
2345 0x37, 0x31, 0x00, 0x62, 0xd5, 0x45, 0x02, 0x00,
2346 0x62, 0xd6, 0x41, 0xea, 0x00, 0x62, 0xd7, 0x13,
2347 0x60, 0x00, 0x62, 0xd8, 0x07, 0xc6, 0x00, 0x62,
2348 0xd9, 0x0a, 0x7f, 0x00, 0x62, 0xda, 0x4b, 0xbb,
2349 0x00, 0x62, 0xdb, 0x09, 0x9f, 0x00, 0x62, 0xdc,
2350 0x13, 0x68, 0x00, 0x62, 0xdd, 0x0d, 0x08, 0x00,
2351 0x62, 0xe0, 0x06, 0x8c, 0x00, 0x62, 0xe1, 0x05,
2352 0xa6, 0x00, 0x62, 0xea, 0x54, 0x78, 0x00, 0x62,
2353 0xec, 0x05, 0xc5, 0x00, 0x62, 0xed, 0x09, 0xe7,
2354 0x00, 0x62, 0xee, 0x13, 0x70, 0x00, 0x62, 0xef,
2355 0x13, 0x75, 0x00, 0x62, 0xf1, 0x13, 0x71, 0x00,
2356 0x62, 0xf2, 0x54, 0x79, 0x00, 0x62, 0xf3, 0x07,
2357 0x53, 0x00, 0x62, 0xf4, 0x4b, 0xbc, 0x00, 0x62,
2358 0xf5, 0x13, 0x76, 0x00, 0x62, 0xf6, 0x08, 0x70,
2359 0x00, 0x62, 0xf7, 0x07, 0xfb, 0x00, 0x62, 0xfc,
2360 0x38, 0xe5, 0x00, 0x62, 0xfd, 0x45, 0x04, 0x00,
2361 0x62, 0xfe, 0x09, 0x30, 0x00, 0x62, 0xff, 0x13,
2362 0x64, 0x00, 0x63, 0x01, 0x08, 0xcb, 0x00, 0x63,
2363 0x02, 0x13, 0x73, 0x00, 0x63, 0x03, 0x45, 0x05,
2364 0x00, 0x63, 0x04, 0x54, 0x7a, 0x00, 0x63, 0x07,
2365 0x08, 0xa6, 0x00, 0x63, 0x08, 0x13, 0x74, 0x00,
2366 0x63, 0x09, 0x04, 0x88, 0x00, 0x63, 0x0a, 0x38,
2367 0xe6, 0x00, 0x63, 0x0b, 0x54, 0x7b, 0x00, 0x63,
2368 0x0c, 0x13, 0x6f, 0x00, 0x63, 0x0d, 0x38, 0xe7,
2369 0x00, 0x63, 0x10, 0x45, 0x06, 0x00, 0x63, 0x11,
2370 0x0b, 0xc5, 0x00, 0x63, 0x13, 0x54, 0x7c, 0x00,
2371 0x63, 0x16, 0x4b, 0xbd, 0x00, 0x63, 0x18, 0x38,
2372 0xe8, 0x00, 0x63, 0x19, 0x06, 0x8d, 0x00, 0x63,
2373 0x1b, 0x37, 0x37, 0x00, 0x63, 0x1f, 0x06, 0xac,
2374 0x00, 0x63, 0x27, 0x13, 0x72, 0x00, 0x63, 0x28,
2375 0x04, 0x6b, 0x00, 0x63, 0x29, 0x54, 0x7d, 0x00,
2376 0x63, 0x2a, 0x4b, 0xbe, 0x00, 0x63, 0x2b, 0x08,
2377 0x33, 0x00, 0x63, 0x2d, 0x54, 0x7e, 0x00, 0x63,
2378 0x2f, 0x09, 0xfc, 0x00, 0x63, 0x32, 0x45, 0x09,
2379 0x00, 0x63, 0x35, 0x45, 0x0a, 0x00, 0x63, 0x36,
2380 0x4b, 0xbf, 0x00, 0x63, 0x39, 0x38, 0xe9, 0x00,
2381 0x63, 0x3a, 0x0c, 0x0e, 0x00, 0x63, 0x3b, 0x45,
2382 0x0b, 0x00, 0x63, 0x3c, 0x45, 0x0c, 0x00, 0x63,
2383 0x3d, 0x0d, 0x68, 0x00, 0x63, 0x3e, 0x13, 0x78,
2384 0x00, 0x63, 0x3f, 0x0a, 0xe0, 0x00, 0x63, 0x41,
2385 0x45, 0x0d, 0x00, 0x63, 0x42, 0x38, 0xea, 0x00,
2386 0x63, 0x43, 0x38, 0xeb, 0x00, 0x63, 0x44, 0x45,
2387 0x0e, 0x00, 0x63, 0x46, 0x4b, 0xc0, 0x00, 0x63,
2388 0x49, 0x0b, 0x0a, 0x00, 0x63, 0x4a, 0x54, 0x7f,
2389 0x00, 0x63, 0x4b, 0x4b, 0xc1, 0x00, 0x63, 0x4c,
2390 0x08, 0x79, 0x00, 0x63, 0x4d, 0x13, 0x79, 0x00,
2391 0x63, 0x4e, 0x45, 0x0f, 0x00, 0x63, 0x4f, 0x13,
2392 0x7b, 0x00, 0x63, 0x50, 0x13, 0x77, 0x00, 0x63,
2393 0x52, 0x54, 0x80, 0x00, 0x63, 0x53, 0x4b, 0xc2,
2394 0x00, 0x63, 0x54, 0x54, 0x81, 0x00, 0x63, 0x55,
2395 0x0e, 0x31, 0x00, 0x63, 0x57, 0x0b, 0xd9, 0x00,
2396 0x63, 0x58, 0x54, 0x82, 0x00, 0x63, 0x59, 0x45,
2397 0x11, 0x00, 0x63, 0x5b, 0x54, 0x83, 0x00, 0x63,
2398 0x5c, 0x0a, 0xde, 0x00, 0x63, 0x65, 0x38, 0xec,
2399 0x00, 0x63, 0x66, 0x54, 0x84, 0x00, 0x63, 0x67,
2400 0x0e, 0x4b, 0x00, 0x63, 0x68, 0x08, 0xfa, 0x00,
2401 0x63, 0x69, 0x13, 0x87, 0x00, 0x63, 0x6b, 0x13,
2402 0x86, 0x00, 0x63, 0x6c, 0x45, 0x14, 0x00, 0x63,
2403 0x6d, 0x54, 0x85, 0x00, 0x63, 0x6e, 0x0a, 0x3e,
2404 0x00, 0x63, 0x71, 0x4b, 0xc3, 0x00, 0x63, 0x72,
2405 0x07, 0x54, 0x00, 0x63, 0x74, 0x38, 0xed, 0x00,
2406 0x63, 0x75, 0x4b, 0xc4, 0x00, 0x63, 0x76, 0x13,
2407 0x80, 0x00, 0x63, 0x77, 0x09, 0xa1, 0x00, 0x63,
2408 0x78, 0x54, 0x86, 0x00, 0x63, 0x7a, 0x0c, 0xc0,
2409 0x00, 0x63, 0x7b, 0x0c, 0xe7, 0x00, 0x63, 0x7c,
2410 0x41, 0xeb, 0x00, 0x63, 0x7d, 0x38, 0xee, 0x00,
2411 0x63, 0x7f, 0x4b, 0xc5, 0x00, 0x63, 0x80, 0x13,
2412 0x7e, 0x00, 0x63, 0x82, 0x4b, 0xc6, 0x00, 0x63,
2413 0x83, 0x0a, 0xdf, 0x00, 0x63, 0x84, 0x38, 0xef,
2414 0x00, 0x63, 0x87, 0x38, 0xf0, 0x00, 0x63, 0x88,
2415 0x09, 0x24, 0x00, 0x63, 0x89, 0x13, 0x83, 0x00,
2416 0x63, 0x8a, 0x4b, 0xc7, 0x00, 0x63, 0x8c, 0x09,
2417 0xa0, 0x00, 0x63, 0x8e, 0x13, 0x7d, 0x00, 0x63,
2418 0x8f, 0x13, 0x82, 0x00, 0x63, 0x90, 0x38, 0xf1,
2419 0x00, 0x63, 0x92, 0x0d, 0x09, 0x00, 0x63, 0x94,
2420 0x45, 0x17, 0x00, 0x63, 0x95, 0x54, 0x87, 0x00,
2421 0x63, 0x96, 0x13, 0x7c, 0x00, 0x63, 0x98, 0x06,
2422 0xf7, 0x00, 0x63, 0x99, 0x45, 0x15, 0x00, 0x63,
2423 0x9a, 0x54, 0x88, 0x00, 0x63, 0x9b, 0x05, 0xbb,
2424 0x00, 0x63, 0x9e, 0x38, 0xf2, 0x00, 0x63, 0x9f,
2425 0x13, 0x84, 0x00, 0x63, 0xa0, 0x0f, 0x73, 0x00,
2426 0x63, 0xa1, 0x08, 0x3e, 0x00, 0x63, 0xa2, 0x0b,
2427 0x73, 0x00, 0x63, 0xa3, 0x13, 0x81, 0x00, 0x63,
2428 0xa4, 0x54, 0x89, 0x00, 0x63, 0xa5, 0x0a, 0x80,
2429 0x00, 0x63, 0xa6, 0x54, 0x8a, 0x00, 0x63, 0xa7,
2430 0x07, 0xc7, 0x00, 0x63, 0xa8, 0x0a, 0x2a, 0x00,
2431 0x63, 0xa9, 0x05, 0x08, 0x00, 0x63, 0xaa, 0x0a,
2432 0xbe, 0x00, 0x63, 0xab, 0x13, 0x7f, 0x00, 0x63,
2433 0xac, 0x06, 0x5f, 0x00, 0x63, 0xad, 0x54, 0x8b,
2434 0x00, 0x63, 0xae, 0x4b, 0xc8, 0x00, 0x63, 0xaf,
2435 0x4b, 0xc9, 0x00, 0x63, 0xb2, 0x07, 0x1d, 0x00,
2436 0x63, 0xb4, 0x0b, 0xeb, 0x00, 0x63, 0xb5, 0x13,
2437 0x85, 0x00, 0x63, 0xbb, 0x0a, 0xe1, 0x00, 0x63,
2438 0xbd, 0x45, 0x18, 0x00, 0x63, 0xbe, 0x13, 0x88,
2439 0x00, 0x63, 0xc0, 0x13, 0x8a, 0x00, 0x63, 0xc1,
2440 0x54, 0x8c, 0x00, 0x63, 0xc3, 0x0b, 0x17, 0x00,
2441 0x63, 0xc4, 0x13, 0x90, 0x00, 0x63, 0xc5, 0x54,
2442 0x8d, 0x00, 0x63, 0xc6, 0x13, 0x8b, 0x00, 0x63,
2443 0xc8, 0x54, 0x8e, 0x00, 0x63, 0xc9, 0x13, 0x8d,
2444 0x00, 0x63, 0xce, 0x54, 0x8f, 0x00, 0x63, 0xcf,
2445 0x0d, 0xb3, 0x00, 0x63, 0xd0, 0x0c, 0x0f, 0x00,
2446 0x63, 0xd1, 0x38, 0xf3, 0x00, 0x63, 0xd2, 0x13,
2447 0x8e, 0x00, 0x63, 0xd3, 0x54, 0x90, 0x00, 0x63,
2448 0xd4, 0x45, 0x19, 0x00, 0x63, 0xd5, 0x45, 0x1a,
2449 0x00, 0x63, 0xd6, 0x0f, 0x16, 0x00, 0x63, 0xda,
2450 0x0f, 0x32, 0x00, 0x63, 0xdb, 0x05, 0xf5, 0x00,
2451 0x63, 0xdc, 0x38, 0xf4, 0x00, 0x63, 0xe0, 0x45,
2452 0x1b, 0x00, 0x63, 0xe1, 0x04, 0x72, 0x00, 0x63,
2453 0xe3, 0x13, 0x8c, 0x00, 0x63, 0xe5, 0x41, 0xec,
2454 0x00, 0x63, 0xe9, 0x13, 0x89, 0x00, 0x63, 0xea,
2455 0x4b, 0xca, 0x00, 0x63, 0xeb, 0x45, 0x1c, 0x00,
2456 0x63, 0xec, 0x45, 0x1d, 0x00, 0x63, 0xed, 0x34,
2457 0x1c, 0x00, 0x63, 0xee, 0x06, 0x34, 0x00, 0x63,
2458 0xf2, 0x45, 0x1e, 0x00, 0x63, 0xf3, 0x54, 0x91,
2459 0x00, 0x63, 0xf4, 0x05, 0x09, 0x00, 0x63, 0xf5,
2460 0x21, 0x13, 0x00, 0x63, 0xf6, 0x13, 0x8f, 0x00,
2461 0x63, 0xf7, 0x36, 0x44, 0x00, 0x63, 0xf8, 0x4b,
2462 0xcb, 0x00, 0x63, 0xf9, 0x4b, 0xcc, 0x00, 0x63,
2463 0xfa, 0x0f, 0x33, 0x00, 0x64, 0x06, 0x13, 0x93,
2464 0x00, 0x64, 0x09, 0x38, 0xf5, 0x00, 0x64, 0x0a,
2465 0x54, 0x92, 0x00, 0x64, 0x0d, 0x0b, 0x1b, 0x00,
2466 0x64, 0x0f, 0x13, 0x9a, 0x00, 0x64, 0x10, 0x38,
2467 0xf6, 0x00, 0x64, 0x12, 0x4b, 0xcd, 0x00, 0x64,
2468 0x13, 0x13, 0x94, 0x00, 0x64, 0x14, 0x1e, 0x2c,
2469 0x00, 0x64, 0x16, 0x13, 0x91, 0x00, 0x64, 0x17,
2470 0x13, 0x98, 0x00, 0x64, 0x18, 0x4b, 0xce, 0x00,
2471 0x64, 0x1c, 0x13, 0x7a, 0x00, 0x64, 0x1e, 0x45,
2472 0x1f, 0x00, 0x64, 0x20, 0x4b, 0xcf, 0x00, 0x64,
2473 0x22, 0x38, 0xf7, 0x00, 0x64, 0x24, 0x4b, 0xd0,
2474 0x00, 0x64, 0x25, 0x45, 0x20, 0x00, 0x64, 0x26,
2475 0x13, 0x95, 0x00, 0x64, 0x28, 0x13, 0x99, 0x00,
2476 0x64, 0x29, 0x45, 0x21, 0x00, 0x64, 0x2a, 0x4b,
2477 0xd1, 0x00, 0x64, 0x2c, 0x0d, 0x56, 0x00, 0x64,
2478 0x2d, 0x0c, 0x65, 0x00, 0x64, 0x2f, 0x45, 0x22,
2479 0x00, 0x64, 0x30, 0x54, 0x93, 0x00, 0x64, 0x34,
2480 0x13, 0x92, 0x00, 0x64, 0x35, 0x4b, 0xd2, 0x00,
2481 0x64, 0x36, 0x13, 0x96, 0x00, 0x64, 0x3a, 0x07,
2482 0x1e, 0x00, 0x64, 0x3d, 0x4b, 0xd3, 0x00, 0x64,
2483 0x3e, 0x08, 0x61, 0x00, 0x64, 0x3f, 0x4b, 0xd4,
2484 0x00, 0x64, 0x42, 0x0a, 0x81, 0x00, 0x64, 0x4b,
2485 0x54, 0x94, 0x00, 0x64, 0x4e, 0x13, 0x9e, 0x00,
2486 0x64, 0x4f, 0x54, 0x95, 0x00, 0x64, 0x51, 0x1e,
2487 0x43, 0x00, 0x64, 0x52, 0x4b, 0xd5, 0x00, 0x64,
2488 0x53, 0x54, 0x96, 0x00, 0x64, 0x54, 0x38, 0xf8,
2489 0x00, 0x64, 0x58, 0x0c, 0x20, 0x00, 0x64, 0x5a,
2490 0x45, 0x23, 0x00, 0x64, 0x5b, 0x38, 0xf9, 0x00,
2491 0x64, 0x5c, 0x54, 0x97, 0x00, 0x64, 0x5d, 0x45,
2492 0x24, 0x00, 0x64, 0x5f, 0x4b, 0xd6, 0x00, 0x64,
2493 0x60, 0x21, 0x14, 0x00, 0x64, 0x61, 0x54, 0x98,
2494 0x00, 0x64, 0x63, 0x54, 0x99, 0x00, 0x64, 0x67,
2495 0x13, 0x9b, 0x00, 0x64, 0x69, 0x0e, 0x8e, 0x00,
2496 0x64, 0x6d, 0x38, 0xfa, 0x00, 0x64, 0x6f, 0x13,
2497 0x9c, 0x00, 0x64, 0x73, 0x45, 0x25, 0x00, 0x64,
2498 0x74, 0x4b, 0xd7, 0x00, 0x64, 0x76, 0x13, 0x9d,
2499 0x00, 0x64, 0x78, 0x0e, 0xda, 0x00, 0x64, 0x79,
2500 0x41, 0xed, 0x00, 0x64, 0x7a, 0x0a, 0x46, 0x00,
2501 0x64, 0x7b, 0x38, 0xfb, 0x00, 0x64, 0x7d, 0x45,
2502 0x26, 0x00, 0x64, 0x83, 0x07, 0x38, 0x00, 0x64,
2503 0x85, 0x54, 0x9a, 0x00, 0x64, 0x87, 0x45, 0x27,
2504 0x00, 0x64, 0x88, 0x13, 0xa4, 0x00, 0x64, 0x8f,
2505 0x54, 0x9b, 0x00, 0x64, 0x90, 0x4b, 0xd8, 0x00,
2506 0x64, 0x91, 0x45, 0x28, 0x00, 0x64, 0x92, 0x08,
2507 0x83, 0x00, 0x64, 0x93, 0x13, 0xa1, 0x00, 0x64,
2508 0x95, 0x13, 0xa0, 0x00, 0x64, 0x98, 0x4b, 0xd9,
2509 0x00, 0x64, 0x99, 0x4b, 0xda, 0x00, 0x64, 0x9a,
2510 0x0c, 0xe8, 0x00, 0x64, 0x9b, 0x54, 0x9c, 0x00,
2511 0x64, 0x9d, 0x21, 0x15, 0x00, 0x64, 0x9e, 0x0c,
2512 0x8d, 0x00, 0x64, 0x9f, 0x45, 0x29, 0x00, 0x64,
2513 0xa1, 0x54, 0x9d, 0x00, 0x64, 0xa3, 0x54, 0x9e,
2514 0x00, 0x64, 0xa4, 0x0c, 0x2b, 0x00, 0x64, 0xa5,
2515 0x13, 0xa2, 0x00, 0x64, 0xa6, 0x54, 0x9f, 0x00,
2516 0x64, 0xa8, 0x54, 0xa0, 0x00, 0x64, 0xa9, 0x13,
2517 0xa3, 0x00, 0x64, 0xab, 0x0d, 0xe1, 0x00, 0x64,
2518 0xac, 0x4b, 0xdb, 0x00, 0x64, 0xad, 0x0c, 0xfb,
2519 0x00, 0x64, 0xae, 0x08, 0x71, 0x00, 0x64, 0xb0,
2520 0x0a, 0x95, 0x00, 0x64, 0xb2, 0x0e, 0x7e, 0x00,
2521 0x64, 0xb3, 0x4b, 0xdc, 0x00, 0x64, 0xb9, 0x05,
2522 0xa7, 0x00, 0x64, 0xbb, 0x13, 0xaa, 0x00, 0x64,
2523 0xbc, 0x13, 0xa5, 0x00, 0x64, 0xbd, 0x54, 0xa1,
2524 0x00, 0x64, 0xbe, 0x38, 0xfc, 0x00, 0x64, 0xbf,
2525 0x38, 0xfd, 0x00, 0x64, 0xc1, 0x0f, 0x34, 0x00,
2526 0x64, 0xc2, 0x13, 0xac, 0x00, 0x64, 0xc4, 0x41,
2527 0xee, 0x00, 0x64, 0xc5, 0x13, 0xa8, 0x00, 0x64,
2528 0xc7, 0x13, 0xa9, 0x00, 0x64, 0xc9, 0x54, 0xa2,
2529 0x00, 0x64, 0xca, 0x34, 0x1d, 0x00, 0x64, 0xcb,
2530 0x45, 0x2a, 0x00, 0x64, 0xcc, 0x45, 0x2b, 0x00,
2531 0x64, 0xcd, 0x0a, 0xe2, 0x00, 0x64, 0xce, 0x21,
2532 0x16, 0x00, 0x64, 0xd0, 0x41, 0xef, 0x00, 0x64,
2533 0xd1, 0x54, 0xa3, 0x00, 0x64, 0xd2, 0x13, 0xa7,
2534 0x00, 0x64, 0xd4, 0x13, 0x66, 0x00, 0x64, 0xd5,
2535 0x45, 0x2c, 0x00, 0x64, 0xd7, 0x45, 0x2d, 0x00,
2536 0x64, 0xd8, 0x13, 0xab, 0x00, 0x64, 0xda, 0x13,
2537 0xa6, 0x00, 0x64, 0xe0, 0x13, 0xb0, 0x00, 0x64,
2538 0xe1, 0x13, 0xb1, 0x00, 0x64, 0xe2, 0x0c, 0x21,
2539 0x00, 0x64, 0xe3, 0x13, 0xb3, 0x00, 0x64, 0xe4,
2540 0x45, 0x2f, 0x00, 0x64, 0xe5, 0x38, 0xfe, 0x00,
2541 0x64, 0xe6, 0x08, 0x72, 0x00, 0x64, 0xe7, 0x13,
2542 0xae, 0x00, 0x64, 0xe9, 0x54, 0xa4, 0x00, 0x64,
2543 0xea, 0x54, 0xa5, 0x00, 0x64, 0xec, 0x06, 0x56,
2544 0x00, 0x64, 0xed, 0x4b, 0xdd, 0x00, 0x64, 0xef,
2545 0x13, 0xb4, 0x00, 0x64, 0xf0, 0x4b, 0xde, 0x00,
2546 0x64, 0xf1, 0x13, 0xad, 0x00, 0x64, 0xf2, 0x13,
2547 0xb8, 0x00, 0x64, 0xf4, 0x13, 0xb7, 0x00, 0x64,
2548 0xf5, 0x54, 0xa6, 0x00, 0x64, 0xf6, 0x13, 0xb6,
2549 0x00, 0x64, 0xf7, 0x38, 0xff, 0x00, 0x64, 0xfa,
2550 0x13, 0xb9, 0x00, 0x64, 0xfb, 0x39, 0x00, 0x00,
2551 0x64, 0xfd, 0x13, 0xbb, 0x00, 0x64, 0xfe, 0x09,
2552 0xd9, 0x00, 0x64, 0xff, 0x45, 0x30, 0x00, 0x65,
2553 0x00, 0x13, 0xba, 0x00, 0x65, 0x01, 0x54, 0xa7,
2554 0x00, 0x65, 0x04, 0x39, 0x01, 0x00, 0x65, 0x05,
2555 0x13, 0xbe, 0x00, 0x65, 0x08, 0x54, 0xa8, 0x00,
2556 0x65, 0x09, 0x54, 0xa9, 0x00, 0x65, 0x0a, 0x54,
2557 0xaa, 0x00, 0x65, 0x0f, 0x45, 0x32, 0x00, 0x65,
2558 0x13, 0x54, 0xab, 0x00, 0x65, 0x14, 0x45, 0x33,
2559 0x00, 0x65, 0x16, 0x39, 0x02, 0x00, 0x65, 0x18,
2560 0x13, 0xbc, 0x00, 0x65, 0x19, 0x39, 0x03, 0x00,
2561 0x65, 0x1b, 0x4b, 0xdf, 0x00, 0x65, 0x1c, 0x13,
2562 0xbd, 0x00, 0x65, 0x1d, 0x13, 0x97, 0x00, 0x65,
2563 0x1e, 0x45, 0x35, 0x00, 0x65, 0x1f, 0x4b, 0xe0,
2564 0x00, 0x65, 0x22, 0x1e, 0x97, 0x00, 0x65, 0x23,
2565 0x13, 0xc0, 0x00, 0x65, 0x24, 0x13, 0xbf, 0x00,
2566 0x65, 0x26, 0x54, 0xac, 0x00, 0x65, 0x29, 0x41,
2567 0xf0, 0x00, 0x65, 0x2a, 0x13, 0x9f, 0x00, 0x65,
2568 0x2b, 0x13, 0xc1, 0x00, 0x65, 0x2c, 0x13, 0xb5,
2569 0x00, 0x65, 0x2e, 0x4b, 0xe1, 0x00, 0x65, 0x2f,
2570 0x08, 0xa7, 0x00, 0x65, 0x31, 0x54, 0xad, 0x00,
2571 0x65, 0x32, 0x45, 0x36, 0x00, 0x65, 0x34, 0x13,
2572 0xc2, 0x00, 0x65, 0x35, 0x13, 0xc3, 0x00, 0x65,
2573 0x36, 0x13, 0xc5, 0x00, 0x65, 0x37, 0x13, 0xc4,
2574 0x00, 0x65, 0x38, 0x13, 0xc6, 0x00, 0x65, 0x39,
2575 0x05, 0x7e, 0x00, 0x65, 0x3a, 0x54, 0xae, 0x00,
2576 0x65, 0x3b, 0x07, 0xc8, 0x00, 0x65, 0x3c, 0x54,
2577 0xaf, 0x00, 0x65, 0x3d, 0x54, 0xb0, 0x00, 0x65,
2578 0x3e, 0x0e, 0x4c, 0x00, 0x65, 0x3f, 0x0a, 0x53,
2579 0x00, 0x65, 0x43, 0x54, 0xb1, 0x00, 0x65, 0x44,
2580 0x45, 0x37, 0x00, 0x65, 0x45, 0x07, 0x82, 0x00,
2581 0x65, 0x47, 0x39, 0x04, 0x00, 0x65, 0x48, 0x13,
2582 0xc8, 0x00, 0x65, 0x49, 0x4b, 0xe2, 0x00, 0x65,
2583 0x4d, 0x13, 0xcb, 0x00, 0x65, 0x4e, 0x21, 0x17,
2584 0x00, 0x65, 0x4f, 0x34, 0x45, 0x00, 0x65, 0x50,
2585 0x54, 0xb2, 0x00, 0x65, 0x51, 0x06, 0x79, 0x00,
2586 0x65, 0x52, 0x54, 0xb3, 0x00, 0x65, 0x54, 0x45,
2587 0x38, 0x00, 0x65, 0x55, 0x13, 0xca, 0x00, 0x65,
2588 0x56, 0x13, 0xc9, 0x00, 0x65, 0x57, 0x0d, 0x0a,
2589 0x00, 0x65, 0x58, 0x13, 0xcc, 0x00, 0x65, 0x59,
2590 0x06, 0xad, 0x00, 0x65, 0x5d, 0x13, 0xce, 0x00,
2591 0x65, 0x5e, 0x13, 0xcd, 0x00, 0x65, 0x5f, 0x54,
2592 0xb4, 0x00, 0x65, 0x60, 0x4b, 0xe3, 0x00, 0x65,
2593 0x62, 0x05, 0xf6, 0x00, 0x65, 0x63, 0x08, 0x84,
2594 0x00, 0x65, 0x66, 0x0c, 0xb0, 0x00, 0x65, 0x67,
2595 0x39, 0x05, 0x00, 0x65, 0x6b, 0x45, 0x39, 0x00,
2596 0x65, 0x6c, 0x07, 0x1f, 0x00, 0x65, 0x70, 0x0a,
2597 0x3a, 0x00, 0x65, 0x72, 0x13, 0xcf, 0x00, 0x65,
2598 0x74, 0x0a, 0x54, 0x00, 0x65, 0x75, 0x0c, 0x22,
2599 0x00, 0x65, 0x77, 0x0d, 0xd1, 0x00, 0x65, 0x78,
2600 0x13, 0xd0, 0x00, 0x65, 0x7a, 0x45, 0x3a, 0x00,
2601 0x65, 0x7d, 0x54, 0xb5, 0x00, 0x65, 0x81, 0x39,
2602 0x06, 0x00, 0x65, 0x82, 0x13, 0xd1, 0x00, 0x65,
2603 0x83, 0x13, 0xd2, 0x00, 0x65, 0x84, 0x45, 0x3b,
2604 0x00, 0x65, 0x85, 0x39, 0x07, 0x00, 0x65, 0x87,
2605 0x0e, 0x08, 0x00, 0x65, 0x88, 0x12, 0x0c, 0x00,
2606 0x65, 0x89, 0x0a, 0x6a, 0x00, 0x65, 0x8a, 0x45,
2607 0x3c, 0x00, 0x65, 0x8c, 0x0d, 0xbe, 0x00, 0x65,
2608 0x8e, 0x08, 0x48, 0x00, 0x65, 0x90, 0x0d, 0x79,
2609 0x00, 0x65, 0x91, 0x0d, 0x57, 0x00, 0x65, 0x92,
2610 0x4b, 0xe4, 0x00, 0x65, 0x95, 0x4b, 0xe5, 0x00,
2611 0x65, 0x97, 0x0c, 0x47, 0x00, 0x65, 0x98, 0x54,
2612 0xb6, 0x00, 0x65, 0x99, 0x0f, 0x89, 0x00, 0x65,
2613 0x9b, 0x13, 0xd4, 0x00, 0x65, 0x9c, 0x08, 0xfc,
2614 0x00, 0x65, 0x9d, 0x41, 0xf1, 0x00, 0x65, 0x9f,
2615 0x13, 0xd5, 0x00, 0x65, 0xa0, 0x54, 0xb7, 0x00,
2616 0x65, 0xa1, 0x04, 0x7a, 0x00, 0x65, 0xa3, 0x54,
2617 0xb8, 0x00, 0x65, 0xa4, 0x06, 0xcc, 0x00, 0x65,
2618 0xa5, 0x0a, 0x71, 0x00, 0x65, 0xa6, 0x54, 0xb9,
2619 0x00, 0x65, 0xa7, 0x0d, 0xd2, 0x00, 0x65, 0xab,
2620 0x13, 0xd6, 0x00, 0x65, 0xac, 0x08, 0x90, 0x00,
2621 0x65, 0xad, 0x0b, 0x85, 0x00, 0x65, 0xae, 0x54,
2622 0xba, 0x00, 0x65, 0xaf, 0x08, 0xa9, 0x00, 0x65,
2623 0xb0, 0x09, 0xfd, 0x00, 0x65, 0xb2, 0x45, 0x3d,
2624 0x00, 0x65, 0xb3, 0x54, 0xbb, 0x00, 0x65, 0xb4,
2625 0x4b, 0xe6, 0x00, 0x65, 0xb5, 0x45, 0x3e, 0x00,
2626 0x65, 0xb7, 0x13, 0xd7, 0x00, 0x65, 0xb8, 0x45,
2627 0x3f, 0x00, 0x65, 0xb9, 0x0e, 0x4d, 0x00, 0x65,
2628 0xbc, 0x05, 0x19, 0x00, 0x65, 0xbd, 0x08, 0xaa,
2629 0x00, 0x65, 0xbe, 0x4b, 0xe7, 0x00, 0x65, 0xbf,
2630 0x45, 0x40, 0x00, 0x65, 0xc1, 0x13, 0xda, 0x00,
2631 0x65, 0xc2, 0x39, 0x08, 0x00, 0x65, 0xc3, 0x13,
2632 0xd8, 0x00, 0x65, 0xc4, 0x13, 0xdb, 0x00, 0x65,
2633 0xc5, 0x0f, 0x81, 0x00, 0x65, 0xc6, 0x13, 0xd9,
2634 0x00, 0x65, 0xc8, 0x4b, 0xe8, 0x00, 0x65, 0xc9,
2635 0x45, 0x41, 0x00, 0x65, 0xcb, 0x0a, 0x9f, 0x00,
2636 0x65, 0xcc, 0x13, 0xdc, 0x00, 0x65, 0xce, 0x4b,
2637 0xe9, 0x00, 0x65, 0xcf, 0x0b, 0x12, 0x00, 0x65,
2638 0xd0, 0x4b, 0xea, 0x00, 0x65, 0xd2, 0x13, 0xdd,
2639 0x00, 0x65, 0xd4, 0x45, 0x42, 0x00, 0x65, 0xd6,
2640 0x54, 0xbc, 0x00, 0x65, 0xd7, 0x06, 0x36, 0x00,
2641 0x65, 0xd8, 0x54, 0xbd, 0x00, 0x65, 0xd9, 0x13,
2642 0xdf, 0x00, 0x65, 0xdb, 0x13, 0xde, 0x00, 0x65,
2643 0xdf, 0x4b, 0xeb, 0x00, 0x65, 0xe0, 0x13, 0xe0,
2644 0x00, 0x65, 0xe1, 0x13, 0xe1, 0x00, 0x65, 0xe2,
2645 0x34, 0x16, 0x00, 0x65, 0xe3, 0x35, 0x85, 0x00,
2646 0x65, 0xe5, 0x0c, 0xd4, 0x00, 0x65, 0xe6, 0x0b,
2647 0x74, 0x00, 0x65, 0xe7, 0x06, 0x86, 0x00, 0x65,
2648 0xe8, 0x08, 0xab, 0x00, 0x65, 0xe9, 0x0a, 0xe3,
2649 0x00, 0x65, 0xec, 0x09, 0x66, 0x00, 0x65, 0xed,
2650 0x04, 0x74, 0x00, 0x65, 0xf0, 0x39, 0x09, 0x00,
2651 0x65, 0xf1, 0x13, 0xe2, 0x00, 0x65, 0xf2, 0x39,
2652 0x0a, 0x00, 0x65, 0xf4, 0x54, 0xbf, 0x00, 0x65,
2653 0xf5, 0x54, 0xc0, 0x00, 0x65, 0xf9, 0x45, 0x44,
2654 0x00, 0x65, 0xfa, 0x05, 0x22, 0x00, 0x65, 0xfb,
2655 0x13, 0xe6, 0x00, 0x65, 0xfc, 0x45, 0x45, 0x00,
2656 0x65, 0xfe, 0x54, 0xc1, 0x00, 0x65, 0xff, 0x54,
2657 0xc2, 0x00, 0x66, 0x00, 0x21, 0x18, 0x00, 0x66,
2658 0x02, 0x07, 0xc9, 0x00, 0x66, 0x03, 0x13, 0xe5,
2659 0x00, 0x66, 0x04, 0x45, 0x46, 0x00, 0x66, 0x06,
2660 0x08, 0x1b, 0x00, 0x66, 0x07, 0x09, 0xa2, 0x00,
2661 0x66, 0x08, 0x45, 0x47, 0x00, 0x66, 0x09, 0x21,
2662 0x1a, 0x00, 0x66, 0x0a, 0x13, 0xe4, 0x00, 0x66,
2663 0x0c, 0x09, 0xa3, 0x00, 0x66, 0x0d, 0x54, 0xc3,
2664 0x00, 0x66, 0x0e, 0x0e, 0xcc, 0x00, 0x66, 0x0f,
2665 0x08, 0x1a, 0x00, 0x66, 0x11, 0x54, 0xc4, 0x00,
2666 0x66, 0x12, 0x54, 0xc5, 0x00, 0x66, 0x13, 0x04,
2667 0x9b, 0x00, 0x66, 0x14, 0x0a, 0x72, 0x00, 0x66,
2668 0x15, 0x21, 0x19, 0x00, 0x66, 0x16, 0x54, 0xc6,
2669 0x00, 0x66, 0x1c, 0x13, 0xeb, 0x00, 0x66, 0x1d,
2670 0x54, 0xc7, 0x00, 0x66, 0x1e, 0x4f, 0x50, 0x00,
2671 0x66, 0x1f, 0x0a, 0x55, 0x00, 0x66, 0x20, 0x04,
2672 0xe9, 0x00, 0x66, 0x21, 0x45, 0x48, 0x00, 0x66,
2673 0x22, 0x41, 0xf3, 0x00, 0x66, 0x23, 0x54, 0xc8,
2674 0x00, 0x66, 0x24, 0x21, 0x1d, 0x00, 0x66, 0x25,
2675 0x09, 0x5f, 0x00, 0x66, 0x26, 0x54, 0xc9, 0x00,
2676 0x66, 0x27, 0x0e, 0x94, 0x00, 0x66, 0x28, 0x08,
2677 0x62, 0x00, 0x66, 0x29, 0x54, 0xca, 0x00, 0x66,
2678 0x2a, 0x45, 0x49, 0x00, 0x66, 0x2b, 0x41, 0xf4,
2679 0x00, 0x66, 0x2c, 0x39, 0x0b, 0x00, 0x66, 0x2d,
2680 0x09, 0xa4, 0x00, 0x66, 0x2e, 0x21, 0x1b, 0x00,
2681 0x66, 0x2f, 0x0a, 0x4b, 0x00, 0x66, 0x30, 0x41,
2682 0xf5, 0x00, 0x66, 0x31, 0x20, 0xae, 0x00, 0x66,
2683 0x33, 0x41, 0xf6, 0x00, 0x66, 0x34, 0x13, 0xea,
2684 0x00, 0x66, 0x35, 0x13, 0xe8, 0x00, 0x66, 0x36,
2685 0x13, 0xe9, 0x00, 0x66, 0x37, 0x54, 0xcc, 0x00,
2686 0x66, 0x39, 0x54, 0xcb, 0x00, 0x66, 0x3a, 0x41,
2687 0xf2, 0x00, 0x66, 0x3b, 0x1e, 0x00, 0x00, 0x66,
2688 0x3c, 0x0b, 0xa9, 0x00, 0x66, 0x3f, 0x14, 0x09,
2689 0x00, 0x66, 0x40, 0x54, 0xcd, 0x00, 0x66, 0x41,
2690 0x13, 0xef, 0x00, 0x66, 0x42, 0x08, 0xcc, 0x00,
2691 0x66, 0x43, 0x07, 0xca, 0x00, 0x66, 0x44, 0x13,
2692 0xed, 0x00, 0x66, 0x45, 0x45, 0x4a, 0x00, 0x66,
2693 0x46, 0x54, 0xce, 0x00, 0x66, 0x48, 0x41, 0xf7,
2694 0x00, 0x66, 0x49, 0x13, 0xee, 0x00, 0x66, 0x4a,
2695 0x54, 0xcf, 0x00, 0x66, 0x4b, 0x09, 0xfe, 0x00,
2696 0x66, 0x4c, 0x39, 0x0c, 0x00, 0x66, 0x4e, 0x45,
2697 0x4c, 0x00, 0x66, 0x4f, 0x13, 0xec, 0x00, 0x66,
2698 0x51, 0x45, 0x4b, 0x00, 0x66, 0x52, 0x08, 0x7d,
2699 0x00, 0x66, 0x57, 0x21, 0x1f, 0x00, 0x66, 0x58,
2700 0x54, 0xd0, 0x00, 0x66, 0x59, 0x21, 0x20, 0x00,
2701 0x66, 0x5a, 0x34, 0x41, 0x00, 0x66, 0x5b, 0x39,
2702 0x0d, 0x00, 0x66, 0x5c, 0x39, 0x0e, 0x00, 0x66,
2703 0x5d, 0x13, 0xf1, 0x00, 0x66, 0x5e, 0x13, 0xf0,
2704 0x00, 0x66, 0x5f, 0x13, 0xf5, 0x00, 0x66, 0x60,
2705 0x54, 0xd1, 0x00, 0x66, 0x61, 0x39, 0x0f, 0x00,
2706 0x66, 0x62, 0x13, 0xf6, 0x00, 0x66, 0x63, 0x37,
2707 0x3a, 0x00, 0x66, 0x64, 0x13, 0xf2, 0x00, 0x66,
2708 0x65, 0x21, 0x1e, 0x00, 0x66, 0x66, 0x05, 0x80,
2709 0x00, 0x66, 0x67, 0x13, 0xf3, 0x00, 0x66, 0x68,
2710 0x13, 0xf4, 0x00, 0x66, 0x69, 0x0d, 0x69, 0x00,
2711 0x66, 0x6a, 0x45, 0x51, 0x00, 0x66, 0x6b, 0x39,
2712 0x10, 0x00, 0x66, 0x6c, 0x45, 0x52, 0x00, 0x66,
2713 0x6d, 0x45, 0x53, 0x00, 0x66, 0x6e, 0x0d, 0xd3,
2714 0x00, 0x66, 0x6f, 0x07, 0x20, 0x00, 0x66, 0x70,
2715 0x13, 0xf7, 0x00, 0x66, 0x73, 0x21, 0x22, 0x00,
2716 0x66, 0x74, 0x21, 0x21, 0x00, 0x66, 0x75, 0x54,
2717 0xd2, 0x00, 0x66, 0x76, 0x09, 0xa5, 0x00, 0x66,
2718 0x77, 0x41, 0xf9, 0x00, 0x66, 0x78, 0x41, 0xfa,
2719 0x00, 0x66, 0x79, 0x54, 0xd4, 0x00, 0x66, 0x7a,
2720 0x0b, 0x90, 0x00, 0x66, 0x7b, 0x45, 0x54, 0x00,
2721 0x66, 0x7c, 0x54, 0xd5, 0x00, 0x66, 0x7e, 0x4b,
2722 0xec, 0x00, 0x66, 0x7f, 0x54, 0xd3, 0x00, 0x66,
2723 0x80, 0x45, 0x55, 0x00, 0x66, 0x81, 0x06, 0xbf,
2724 0x00, 0x66, 0x83, 0x13, 0xf8, 0x00, 0x66, 0x84,
2725 0x13, 0xfc, 0x00, 0x66, 0x87, 0x05, 0x4b, 0x00,
2726 0x66, 0x88, 0x13, 0xf9, 0x00, 0x66, 0x89, 0x13,
2727 0xfb, 0x00, 0x66, 0x8b, 0x4b, 0xed, 0x00, 0x66,
2728 0x8c, 0x4b, 0xee, 0x00, 0x66, 0x8d, 0x41, 0xfb,
2729 0x00, 0x66, 0x8e, 0x13, 0xfa, 0x00, 0x66, 0x90,
2730 0x45, 0x56, 0x00, 0x66, 0x91, 0x09, 0x75, 0x00,
2731 0x66, 0x92, 0x45, 0x57, 0x00, 0x66, 0x96, 0x0b,
2732 0x86, 0x00, 0x66, 0x97, 0x04, 0x89, 0x00, 0x66,
2733 0x98, 0x13, 0xfd, 0x00, 0x66, 0x99, 0x21, 0x23,
2734 0x00, 0x66, 0x9a, 0x54, 0xd6, 0x00, 0x66, 0x9b,
2735 0x54, 0xd7, 0x00, 0x66, 0x9c, 0x54, 0xd8, 0x00,
2736 0x66, 0x9d, 0x13, 0xfe, 0x00, 0x66, 0x9f, 0x54,
2737 0xd9, 0x00, 0x66, 0xa0, 0x21, 0x24, 0x00, 0x66,
2738 0xa2, 0x0b, 0xc6, 0x00, 0x66, 0xa4, 0x39, 0x12,
2739 0x00, 0x66, 0xa6, 0x0f, 0xb9, 0x00, 0x66, 0xab,
2740 0x08, 0x91, 0x00, 0x66, 0xad, 0x45, 0x59, 0x00,
2741 0x66, 0xae, 0x0e, 0x3b, 0x00, 0x66, 0xb1, 0x45,
2742 0x5a, 0x00, 0x66, 0xb2, 0x21, 0x25, 0x00, 0x66,
2743 0xb3, 0x4b, 0xef, 0x00, 0x66, 0xb4, 0x0e, 0x6b,
2744 0x00, 0x66, 0xb5, 0x45, 0x5b, 0x00, 0x66, 0xb8,
2745 0x14, 0x05, 0x00, 0x66, 0xb9, 0x14, 0x00, 0x00,
2746 0x66, 0xbb, 0x41, 0xfc, 0x00, 0x66, 0xbc, 0x14,
2747 0x03, 0x00, 0x66, 0xbe, 0x14, 0x02, 0x00, 0x66,
2748 0xbf, 0x21, 0x26, 0x00, 0x66, 0xc0, 0x4b, 0xf0,
2749 0x00, 0x66, 0xc1, 0x13, 0xff, 0x00, 0x66, 0xc2,
2750 0x54, 0xdb, 0x00, 0x66, 0xc3, 0x54, 0xdc, 0x00,
2751 0x66, 0xc4, 0x14, 0x04, 0x00, 0x66, 0xc6, 0x34,
2752 0x55, 0x00, 0x66, 0xc7, 0x0c, 0xb6, 0x00, 0x66,
2753 0xc8, 0x39, 0x13, 0x00, 0x66, 0xc9, 0x14, 0x01,
2754 0x00, 0x66, 0xcc, 0x54, 0xdd, 0x00, 0x66, 0xce,
2755 0x54, 0xde, 0x00, 0x66, 0xcf, 0x4b, 0xf1, 0x00,
2756 0x66, 0xd4, 0x54, 0xdf, 0x00, 0x66, 0xd6, 0x14,
2757 0x06, 0x00, 0x66, 0xd9, 0x09, 0x76, 0x00, 0x66,
2758 0xda, 0x14, 0x07, 0x00, 0x66, 0xdb, 0x41, 0xfd,
2759 0x00, 0x66, 0xdc, 0x0f, 0x35, 0x00, 0x66, 0xdd,
2760 0x0d, 0x2e, 0x00, 0x66, 0xdf, 0x54, 0xe0, 0x00,
2761 0x66, 0xe0, 0x14, 0x08, 0x00, 0x66, 0xe6, 0x14,
2762 0x0a, 0x00, 0x66, 0xe8, 0x41, 0xfe, 0x00, 0x66,
2763 0xe9, 0x14, 0x0b, 0x00, 0x66, 0xeb, 0x54, 0xe1,
2764 0x00, 0x66, 0xec, 0x39, 0x14, 0x00, 0x66, 0xee,
2765 0x54, 0xe2, 0x00, 0x66, 0xf0, 0x14, 0x0c, 0x00,
2766 0x66, 0xf2, 0x06, 0xc2, 0x00, 0x66, 0xf3, 0x04,
2767 0xea, 0x00, 0x66, 0xf4, 0x07, 0xcb, 0x00, 0x66,
2768 0xf5, 0x14, 0x0d, 0x00, 0x66, 0xf7, 0x14, 0x0e,
2769 0x00, 0x66, 0xf8, 0x09, 0x7b, 0x00, 0x66, 0xf9,
2770 0x0a, 0xe4, 0x00, 0x66, 0xfa, 0x21, 0x27, 0x00,
2771 0x66, 0xfb, 0x20, 0xb1, 0x00, 0x66, 0xfc, 0x10,
2772 0xed, 0x00, 0x66, 0xfd, 0x0a, 0xc0, 0x00, 0x66,
2773 0xfe, 0x0a, 0xbf, 0x00, 0x66, 0xff, 0x0b, 0x38,
2774 0x00, 0x67, 0x00, 0x08, 0x37, 0x00, 0x67, 0x01,
2775 0x45, 0x5f, 0x00, 0x67, 0x03, 0x10, 0x4b, 0x00,
2776 0x67, 0x05, 0x39, 0x15, 0x00, 0x67, 0x07, 0x54,
2777 0xe3, 0x00, 0x67, 0x08, 0x07, 0x44, 0x00, 0x67,
2778 0x09, 0x0f, 0x17, 0x00, 0x67, 0x0b, 0x0e, 0x4e,
2779 0x00, 0x67, 0x0d, 0x0d, 0xf0, 0x00, 0x67, 0x0e,
2780 0x21, 0x28, 0x00, 0x67, 0x0f, 0x14, 0x0f, 0x00,
2781 0x67, 0x12, 0x45, 0x60, 0x00, 0x67, 0x13, 0x39,
2782 0x16, 0x00, 0x67, 0x14, 0x08, 0x63, 0x00, 0x67,
2783 0x15, 0x0b, 0xdb, 0x00, 0x67, 0x16, 0x14, 0x10,
2784 0x00, 0x67, 0x17, 0x4f, 0x51, 0x00, 0x67, 0x19,
2785 0x45, 0x62, 0x00, 0x67, 0x1b, 0x0e, 0x6c, 0x00,
2786 0x67, 0x1c, 0x54, 0xe4, 0x00, 0x67, 0x1d, 0x0b,
2787 0xc7, 0x00, 0x67, 0x1e, 0x14, 0x11, 0x00, 0x67,
2788 0x1f, 0x06, 0x38, 0x00, 0x67, 0x20, 0x54, 0xe5,
2789 0x00, 0x67, 0x22, 0x54, 0xe6, 0x00, 0x67, 0x25,
2790 0x4b, 0xf2, 0x00, 0x67, 0x26, 0x14, 0x12, 0x00,
2791 0x67, 0x27, 0x14, 0x13, 0x00, 0x67, 0x28, 0x0e,
2792 0xe6, 0x00, 0x67, 0x2a, 0x0e, 0xb0, 0x00, 0x67,
2793 0x2b, 0x0e, 0xa4, 0x00, 0x67, 0x2c, 0x0e, 0x8a,
2794 0x00, 0x67, 0x2d, 0x08, 0x73, 0x00, 0x67, 0x2e,
2795 0x14, 0x15, 0x00, 0x67, 0x31, 0x09, 0x17, 0x00,
2796 0x67, 0x33, 0x39, 0x17, 0x00, 0x67, 0x34, 0x0e,
2797 0x7f, 0x00, 0x67, 0x35, 0x4b, 0xf3, 0x00, 0x67,
2798 0x36, 0x14, 0x17, 0x00, 0x67, 0x37, 0x14, 0x1a,
2799 0x00, 0x67, 0x38, 0x14, 0x19, 0x00, 0x67, 0x3a,
2800 0x06, 0x35, 0x00, 0x67, 0x3d, 0x06, 0x7a, 0x00,
2801 0x67, 0x3e, 0x54, 0xe7, 0x00, 0x67, 0x3f, 0x14,
2802 0x16, 0x00, 0x67, 0x41, 0x14, 0x18, 0x00, 0x67,
2803 0x43, 0x35, 0xb7, 0x00, 0x67, 0x45, 0x54, 0xe8,
2804 0x00, 0x67, 0x46, 0x14, 0x1b, 0x00, 0x67, 0x47,
2805 0x41, 0xff, 0x00, 0x67, 0x48, 0x39, 0x18, 0x00,
2806 0x67, 0x49, 0x0a, 0x3f, 0x00, 0x67, 0x4c, 0x39,
2807 0x19, 0x00, 0x67, 0x4d, 0x45, 0x65, 0x00, 0x67,
2808 0x4e, 0x0f, 0x65, 0x00, 0x67, 0x4f, 0x04, 0x8d,
2809 0x00, 0x67, 0x50, 0x08, 0x50, 0x00, 0x67, 0x51,
2810 0x0b, 0x1c, 0x00, 0x67, 0x53, 0x09, 0x09, 0x00,
2811 0x67, 0x54, 0x45, 0x66, 0x00, 0x67, 0x55, 0x4b,
2812 0xf4, 0x00, 0x67, 0x56, 0x09, 0xdb, 0x00, 0x67,
2813 0x59, 0x14, 0x1e, 0x00, 0x67, 0x5c, 0x0c, 0x48,
2814 0x00, 0x67, 0x5d, 0x45, 0x67, 0x00, 0x67, 0x5e,
2815 0x14, 0x1c, 0x00, 0x67, 0x5f, 0x0b, 0x0b, 0x00,
2816 0x67, 0x60, 0x14, 0x1d, 0x00, 0x67, 0x61, 0x09,
2817 0xda, 0x00, 0x67, 0x62, 0x0e, 0xe9, 0x00, 0x67,
2818 0x63, 0x14, 0x1f, 0x00, 0x67, 0x64, 0x14, 0x20,
2819 0x00, 0x67, 0x65, 0x0f, 0x52, 0x00, 0x67, 0x66,
2820 0x21, 0x2a, 0x00, 0x67, 0x6a, 0x14, 0x25, 0x00,
2821 0x67, 0x6c, 0x54, 0xe9, 0x00, 0x67, 0x6d, 0x07,
2822 0xcc, 0x00, 0x67, 0x6e, 0x35, 0x71, 0x00, 0x67,
2823 0x6f, 0x0d, 0x0b, 0x00, 0x67, 0x70, 0x14, 0x22,
2824 0x00, 0x67, 0x71, 0x0c, 0x66, 0x00, 0x67, 0x72,
2825 0x13, 0xe3, 0x00, 0x67, 0x73, 0x13, 0xe7, 0x00,
2826 0x67, 0x74, 0x45, 0x6b, 0x00, 0x67, 0x75, 0x06,
2827 0x69, 0x00, 0x67, 0x76, 0x39, 0x1a, 0x00, 0x67,
2828 0x77, 0x0c, 0xfd, 0x00, 0x67, 0x7b, 0x39, 0x1b,
2829 0x00, 0x67, 0x7c, 0x14, 0x24, 0x00, 0x67, 0x7e,
2830 0x09, 0xa6, 0x00, 0x67, 0x7f, 0x0d, 0x58, 0x00,
2831 0x67, 0x80, 0x4b, 0xf5, 0x00, 0x67, 0x81, 0x42,
2832 0x00, 0x00, 0x67, 0x84, 0x54, 0xea, 0x00, 0x67,
2833 0x85, 0x14, 0x2a, 0x00, 0x67, 0x87, 0x0d, 0x8e,
2834 0x00, 0x67, 0x89, 0x14, 0x21, 0x00, 0x67, 0x8b,
2835 0x14, 0x27, 0x00, 0x67, 0x8c, 0x14, 0x26, 0x00,
2836 0x67, 0x8e, 0x54, 0xeb, 0x00, 0x67, 0x8f, 0x4b,
2837 0xf6, 0x00, 0x67, 0x90, 0x0a, 0x73, 0x00, 0x67,
2838 0x91, 0x4b, 0xf7, 0x00, 0x67, 0x92, 0x45, 0x6d,
2839 0x00, 0x67, 0x93, 0x42, 0x01, 0x00, 0x67, 0x95,
2840 0x0e, 0x9b, 0x00, 0x67, 0x96, 0x54, 0xec, 0x00,
2841 0x67, 0x97, 0x0f, 0x9b, 0x00, 0x67, 0x98, 0x42,
2842 0x02, 0x00, 0x67, 0x99, 0x54, 0xed, 0x00, 0x67,
2843 0x9a, 0x0e, 0x95, 0x00, 0x67, 0x9b, 0x42, 0x03,
2844 0x00, 0x67, 0x9c, 0x05, 0x4c, 0x00, 0x67, 0x9d,
2845 0x08, 0xac, 0x00, 0x67, 0xa0, 0x0f, 0xee, 0x00,
2846 0x67, 0xa1, 0x14, 0x29, 0x00, 0x67, 0xa2, 0x0a,
2847 0x3b, 0x00, 0x67, 0xa4, 0x4b, 0xf8, 0x00, 0x67,
2848 0xa6, 0x14, 0x28, 0x00, 0x67, 0xa9, 0x14, 0x23,
2849 0x00, 0x67, 0xaf, 0x07, 0x83, 0x00, 0x67, 0xb0,
2850 0x39, 0x1c, 0x00, 0x67, 0xb1, 0x4b, 0xf9, 0x00,
2851 0x67, 0xb2, 0x39, 0x1d, 0x00, 0x67, 0xb3, 0x14,
2852 0x2f, 0x00, 0x67, 0xb4, 0x14, 0x2d, 0x00, 0x67,
2853 0xb5, 0x4b, 0xfa, 0x00, 0x67, 0xb6, 0x05, 0x4d,
2854 0x00, 0x67, 0xb7, 0x14, 0x2b, 0x00, 0x67, 0xb8,
2855 0x14, 0x31, 0x00, 0x67, 0xb9, 0x14, 0x37, 0x00,
2856 0x67, 0xbb, 0x21, 0x2b, 0x00, 0x67, 0xbc, 0x54,
2857 0xee, 0x00, 0x67, 0xbd, 0x54, 0xef, 0x00, 0x67,
2858 0xbe, 0x4b, 0xfb, 0x00, 0x67, 0xc0, 0x21, 0x2d,
2859 0x00, 0x67, 0xc1, 0x0b, 0x28, 0x00, 0x67, 0xc2,
2860 0x54, 0xf0, 0x00, 0x67, 0xc3, 0x45, 0x71, 0x00,
2861 0x67, 0xc4, 0x0e, 0x11, 0x00, 0x67, 0xc5, 0x54,
2862 0xf1, 0x00, 0x67, 0xc6, 0x14, 0x39, 0x00, 0x67,
2863 0xc8, 0x45, 0x72, 0x00, 0x67, 0xc9, 0x54, 0xf2,
2864 0x00, 0x67, 0xca, 0x0d, 0x94, 0x00, 0x67, 0xce,
2865 0x14, 0x38, 0x00, 0x67, 0xcf, 0x0d, 0x26, 0x00,
2866 0x67, 0xd0, 0x0e, 0x6d, 0x00, 0x67, 0xd1, 0x05,
2867 0xf7, 0x00, 0x67, 0xd2, 0x45, 0x73, 0x00, 0x67,
2868 0xd3, 0x0a, 0x9b, 0x00, 0x67, 0xd4, 0x09, 0x4a,
2869 0x00, 0x67, 0xd7, 0x39, 0x1f, 0x00, 0x67, 0xd8,
2870 0x0b, 0xef, 0x00, 0x67, 0xd9, 0x39, 0x20, 0x00,
2871 0x67, 0xda, 0x0f, 0x18, 0x00, 0x67, 0xdb, 0x45,
2872 0x74, 0x00, 0x67, 0xdc, 0x54, 0xf3, 0x00, 0x67,
2873 0xdd, 0x14, 0x34, 0x00, 0x67, 0xde, 0x14, 0x33,
2874 0x00, 0x67, 0xe1, 0x54, 0xf4, 0x00, 0x67, 0xe2,
2875 0x14, 0x35, 0x00, 0x67, 0xe4, 0x14, 0x32, 0x00,
2876 0x67, 0xe6, 0x54, 0xf5, 0x00, 0x67, 0xe7, 0x14,
2877 0x3a, 0x00, 0x67, 0xe9, 0x14, 0x30, 0x00, 0x67,
2878 0xec, 0x14, 0x2e, 0x00, 0x67, 0xee, 0x14, 0x36,
2879 0x00, 0x67, 0xef, 0x14, 0x2c, 0x00, 0x67, 0xf0,
2880 0x39, 0x21, 0x00, 0x67, 0xf1, 0x0b, 0xaa, 0x00,
2881 0x67, 0xf2, 0x54, 0xf6, 0x00, 0x67, 0xf3, 0x0f,
2882 0x04, 0x00, 0x67, 0xf4, 0x08, 0xf2, 0x00, 0x67,
2883 0xf5, 0x08, 0x64, 0x00, 0x67, 0xf6, 0x54, 0xf7,
2884 0x00, 0x67, 0xf7, 0x45, 0x75, 0x00, 0x67, 0xf9,
2885 0x39, 0x1e, 0x00, 0x67, 0xfa, 0x1e, 0x9a, 0x00,
2886 0x67, 0xfb, 0x08, 0x2a, 0x00, 0x67, 0xfc, 0x42,
2887 0x04, 0x00, 0x67, 0xfe, 0x0e, 0x9d, 0x00, 0x67,
2888 0xff, 0x05, 0x9f, 0x00, 0x68, 0x01, 0x36, 0xf2,
2889 0x00, 0x68, 0x02, 0x0b, 0xea, 0x00, 0x68, 0x03,
2890 0x0c, 0xa2, 0x00, 0x68, 0x04, 0x04, 0xeb, 0x00,
2891 0x68, 0x05, 0x1e, 0x07, 0x00, 0x68, 0x10, 0x45,
2892 0x70, 0x00, 0x68, 0x13, 0x0a, 0x96, 0x00, 0x68,
2893 0x14, 0x54, 0xf8, 0x00, 0x68, 0x16, 0x0a, 0x58,
2894 0x00, 0x68, 0x17, 0x07, 0x00, 0x00, 0x68, 0x18,
2895 0x45, 0x79, 0x00, 0x68, 0x19, 0x54, 0xf9, 0x00,
2896 0x68, 0x1d, 0x42, 0x05, 0x00, 0x68, 0x1e, 0x14,
2897 0x3c, 0x00, 0x68, 0x1f, 0x45, 0x7a, 0x00, 0x68,
2898 0x21, 0x07, 0xcd, 0x00, 0x68, 0x22, 0x05, 0xda,
2899 0x00, 0x68, 0x27, 0x54, 0xfa, 0x00, 0x68, 0x28,
2900 0x4b, 0xfc, 0x00, 0x68, 0x29, 0x14, 0x3e, 0x00,
2901 0x68, 0x2a, 0x05, 0xd2, 0x00, 0x68, 0x2b, 0x14,
2902 0x44, 0x00, 0x68, 0x2c, 0x39, 0x22, 0x00, 0x68,
2903 0x2d, 0x45, 0x7b, 0x00, 0x68, 0x2f, 0x54, 0xfb,
2904 0x00, 0x68, 0x30, 0x39, 0x23, 0x00, 0x68, 0x31,
2905 0x39, 0x24, 0x00, 0x68, 0x32, 0x14, 0x41, 0x00,
2906 0x68, 0x33, 0x45, 0x7d, 0x00, 0x68, 0x34, 0x0a,
2907 0x97, 0x00, 0x68, 0x38, 0x05, 0xa9, 0x00, 0x68,
2908 0x39, 0x08, 0x1c, 0x00, 0x68, 0x3b, 0x45, 0x7e,
2909 0x00, 0x68, 0x3c, 0x05, 0xa8, 0x00, 0x68, 0x3d,
2910 0x08, 0x3f, 0x00, 0x68, 0x3e, 0x45, 0x7f, 0x00,
2911 0x68, 0x3f, 0x54, 0xfc, 0x00, 0x68, 0x40, 0x14,
2912 0x3f, 0x00, 0x68, 0x41, 0x07, 0x3b, 0x00, 0x68,
2913 0x42, 0x07, 0x21, 0x00, 0x68, 0x43, 0x0c, 0x67,
2914 0x00, 0x68, 0x44, 0x21, 0x2f, 0x00, 0x68, 0x45,
2915 0x45, 0x80, 0x00, 0x68, 0x46, 0x14, 0x3d, 0x00,
2916 0x68, 0x48, 0x04, 0x8a, 0x00, 0x68, 0x49, 0x45,
2917 0x81, 0x00, 0x68, 0x4a, 0x54, 0xfd, 0x00, 0x68,
2918 0x4c, 0x45, 0x82, 0x00, 0x68, 0x4d, 0x14, 0x40,
2919 0x00, 0x68, 0x4e, 0x14, 0x42, 0x00, 0x68, 0x50,
2920 0x06, 0xc5, 0x00, 0x68, 0x51, 0x07, 0x02, 0x00,
2921 0x68, 0x52, 0x37, 0xd3, 0x00, 0x68, 0x53, 0x05,
2922 0xf8, 0x00, 0x68, 0x54, 0x06, 0x65, 0x00, 0x68,
2923 0x55, 0x45, 0x83, 0x00, 0x68, 0x57, 0x45, 0x84,
2924 0x00, 0x68, 0x58, 0x54, 0xfe, 0x00, 0x68, 0x59,
2925 0x14, 0x45, 0x00, 0x68, 0x5b, 0x39, 0x25, 0x00,
2926 0x68, 0x5c, 0x08, 0x69, 0x00, 0x68, 0x5d, 0x0e,
2927 0x9f, 0x00, 0x68, 0x5f, 0x08, 0x85, 0x00, 0x68,
2928 0x63, 0x14, 0x46, 0x00, 0x68, 0x67, 0x0d, 0xa2,
2929 0x00, 0x68, 0x6b, 0x45, 0x86, 0x00, 0x68, 0x6e,
2930 0x45, 0x87, 0x00, 0x68, 0x6f, 0x54, 0xff, 0x00,
2931 0x68, 0x70, 0x55, 0x00, 0x00, 0x68, 0x71, 0x55,
2932 0x01, 0x00, 0x68, 0x72, 0x39, 0x26, 0x00, 0x68,
2933 0x74, 0x14, 0x52, 0x00, 0x68, 0x75, 0x39, 0x27,
2934 0x00, 0x68, 0x76, 0x05, 0x33, 0x00, 0x68, 0x77,
2935 0x14, 0x47, 0x00, 0x68, 0x79, 0x55, 0x02, 0x00,
2936 0x68, 0x7a, 0x39, 0x28, 0x00, 0x68, 0x7b, 0x55,
2937 0x03, 0x00, 0x68, 0x7c, 0x45, 0x88, 0x00, 0x68,
2938 0x7e, 0x14, 0x58, 0x00, 0x68, 0x7f, 0x14, 0x48,
2939 0x00, 0x68, 0x81, 0x0f, 0x8a, 0x00, 0x68, 0x82,
2940 0x45, 0x89, 0x00, 0x68, 0x83, 0x14, 0x4f, 0x00,
2941 0x68, 0x84, 0x39, 0x29, 0x00, 0x68, 0x85, 0x34,
2942 0x3f, 0x00, 0x68, 0x86, 0x4b, 0xfd, 0x00, 0x68,
2943 0x88, 0x55, 0x04, 0x00, 0x68, 0x8d, 0x14, 0x57,
2944 0x00, 0x68, 0x8e, 0x1e, 0x9c, 0x00, 0x68, 0x8f,
2945 0x14, 0x4a, 0x00, 0x68, 0x90, 0x45, 0x8a, 0x00,
2946 0x68, 0x93, 0x04, 0x78, 0x00, 0x68, 0x94, 0x14,
2947 0x4c, 0x00, 0x68, 0x96, 0x45, 0x8b, 0x00, 0x68,
2948 0x97, 0x07, 0xce, 0x00, 0x68, 0x98, 0x45, 0x8d,
2949 0x00, 0x68, 0x99, 0x45, 0x8e, 0x00, 0x68, 0x9a,
2950 0x45, 0x8f, 0x00, 0x68, 0x9b, 0x14, 0x4e, 0x00,
2951 0x68, 0x9c, 0x45, 0x90, 0x00, 0x68, 0x9d, 0x14,
2952 0x4d, 0x00, 0x68, 0x9f, 0x14, 0x49, 0x00, 0x68,
2953 0xa0, 0x14, 0x54, 0x00, 0x68, 0xa1, 0x55, 0x05,
2954 0x00, 0x68, 0xa2, 0x09, 0xa7, 0x00, 0x68, 0xa3,
2955 0x42, 0x06, 0x00, 0x68, 0xa5, 0x39, 0x2a, 0x00,
2956 0x68, 0xa6, 0x11, 0xbe, 0x00, 0x68, 0xa7, 0x07,
2957 0x9c, 0x00, 0x68, 0xa8, 0x0f, 0x66, 0x00, 0x68,
2958 0xa9, 0x55, 0x06, 0x00, 0x68, 0xaa, 0x45, 0x91,
2959 0x00, 0x68, 0xab, 0x45, 0x92, 0x00, 0x68, 0xad,
2960 0x14, 0x4b, 0x00, 0x68, 0xae, 0x55, 0x07, 0x00,
2961 0x68, 0xaf, 0x0c, 0x10, 0x00, 0x68, 0xb0, 0x05,
2962 0x81, 0x00, 0x68, 0xb1, 0x08, 0x1d, 0x00, 0x68,
2963 0xb2, 0x39, 0x2b, 0x00, 0x68, 0xb3, 0x14, 0x43,
2964 0x00, 0x68, 0xb4, 0x45, 0x93, 0x00, 0x68, 0xb5,
2965 0x14, 0x53, 0x00, 0x68, 0xb6, 0x05, 0xbf, 0x00,
2966 0x68, 0xb9, 0x14, 0x51, 0x00, 0x68, 0xba, 0x14,
2967 0x55, 0x00, 0x68, 0xbb, 0x45, 0x94, 0x00, 0x68,
2968 0xbc, 0x0c, 0x68, 0x00, 0x68, 0xc3, 0x45, 0x98,
2969 0x00, 0x68, 0xc4, 0x06, 0x3a, 0x00, 0x68, 0xc5,
2970 0x45, 0x99, 0x00, 0x68, 0xc6, 0x14, 0x73, 0x00,
2971 0x68, 0xc8, 0x20, 0xaf, 0x00, 0x68, 0xc9, 0x0e,
2972 0xd5, 0x00, 0x68, 0xca, 0x14, 0x5a, 0x00, 0x68,
2973 0xcb, 0x06, 0x39, 0x00, 0x68, 0xcc, 0x45, 0x9a,
2974 0x00, 0x68, 0xcd, 0x14, 0x61, 0x00, 0x68, 0xcf,
2975 0x21, 0x30, 0x00, 0x68, 0xd0, 0x39, 0x2c, 0x00,
2976 0x68, 0xd1, 0x55, 0x08, 0x00, 0x68, 0xd2, 0x0e,
2977 0x6e, 0x00, 0x68, 0xd3, 0x55, 0x09, 0x00, 0x68,
2978 0xd4, 0x14, 0x62, 0x00, 0x68, 0xd5, 0x14, 0x64,
2979 0x00, 0x68, 0xd6, 0x39, 0x2d, 0x00, 0x68, 0xd7,
2980 0x14, 0x68, 0x00, 0x68, 0xd8, 0x14, 0x5c, 0x00,
2981 0x68, 0xd9, 0x45, 0x9b, 0x00, 0x68, 0xda, 0x0b,
2982 0x68, 0x00, 0x68, 0xdc, 0x55, 0x0a, 0x00, 0x68,
2983 0xdd, 0x55, 0x0b, 0x00, 0x68, 0xdf, 0x0c, 0x69,
2984 0x00, 0x68, 0xe0, 0x14, 0x6c, 0x00, 0x68, 0xe1,
2985 0x14, 0x5f, 0x00, 0x68, 0xe3, 0x14, 0x69, 0x00,
2986 0x68, 0xe4, 0x45, 0x9c, 0x00, 0x68, 0xe5, 0x45,
2987 0x9d, 0x00, 0x68, 0xe7, 0x14, 0x63, 0x00, 0x68,
2988 0xe8, 0x39, 0x2e, 0x00, 0x68, 0xea, 0x55, 0x0c,
2989 0x00, 0x68, 0xeb, 0x4b, 0xfe, 0x00, 0x68, 0xec,
2990 0x45, 0x9e, 0x00, 0x68, 0xed, 0x39, 0x2f, 0x00,
2991 0x68, 0xee, 0x09, 0xff, 0x00, 0x68, 0xef, 0x14,
2992 0x6d, 0x00, 0x68, 0xf0, 0x39, 0x30, 0x00, 0x68,
2993 0xf1, 0x39, 0x31, 0x00, 0x68, 0xf2, 0x0a, 0x57,
2994 0x00, 0x68, 0xf5, 0x4b, 0xff, 0x00, 0x68, 0xf6,
2995 0x55, 0x0d, 0x00, 0x68, 0xf7, 0x45, 0x9f, 0x00,
2996 0x68, 0xf9, 0x14, 0x6b, 0x00, 0x68, 0xfa, 0x05,
2997 0xf9, 0x00, 0x68, 0xfb, 0x45, 0x95, 0x00, 0x68,
2998 0xfc, 0x39, 0x32, 0x00, 0x68, 0xfd, 0x55, 0x0e,
2999 0x00, 0x69, 0x00, 0x0f, 0xf6, 0x00, 0x69, 0x01,
3000 0x14, 0x59, 0x00, 0x69, 0x03, 0x45, 0xa0, 0x00,
3001 0x69, 0x04, 0x14, 0x67, 0x00, 0x69, 0x05, 0x04,
3002 0x9c, 0x00, 0x69, 0x06, 0x55, 0x0f, 0x00, 0x69,
3003 0x07, 0x45, 0xa1, 0x00, 0x69, 0x08, 0x14, 0x5b,
3004 0x00, 0x69, 0x09, 0x55, 0x10, 0x00, 0x69, 0x0a,
3005 0x42, 0x07, 0x00, 0x69, 0x0b, 0x0e, 0xc6, 0x00,
3006 0x69, 0x0c, 0x14, 0x60, 0x00, 0x69, 0x0d, 0x09,
3007 0xe8, 0x00, 0x69, 0x0e, 0x0b, 0xe3, 0x00, 0x69,
3008 0x0f, 0x14, 0x56, 0x00, 0x69, 0x10, 0x55, 0x11,
3009 0x00, 0x69, 0x11, 0x39, 0x33, 0x00, 0x69, 0x12,
3010 0x14, 0x66, 0x00, 0x69, 0x13, 0x39, 0x34, 0x00,
3011 0x69, 0x16, 0x55, 0x12, 0x00, 0x69, 0x17, 0x4c,
3012 0x00, 0x00, 0x69, 0x19, 0x0a, 0x40, 0x00, 0x69,
3013 0x1a, 0x14, 0x70, 0x00, 0x69, 0x1b, 0x05, 0xcf,
3014 0x00, 0x69, 0x1c, 0x07, 0x55, 0x00, 0x69, 0x21,
3015 0x14, 0x72, 0x00, 0x69, 0x22, 0x14, 0x5d, 0x00,
3016 0x69, 0x23, 0x14, 0x71, 0x00, 0x69, 0x25, 0x14,
3017 0x6a, 0x00, 0x69, 0x26, 0x14, 0x5e, 0x00, 0x69,
3018 0x28, 0x14, 0x6e, 0x00, 0x69, 0x2a, 0x14, 0x6f,
3019 0x00, 0x69, 0x30, 0x14, 0x80, 0x00, 0x69, 0x31,
3020 0x55, 0x13, 0x00, 0x69, 0x33, 0x4c, 0x01, 0x00,
3021 0x69, 0x34, 0x0c, 0xa6, 0x00, 0x69, 0x35, 0x39,
3022 0x35, 0x00, 0x69, 0x36, 0x14, 0x65, 0x00, 0x69,
3023 0x38, 0x4c, 0x02, 0x00, 0x69, 0x39, 0x14, 0x7c,
3024 0x00, 0x69, 0x3b, 0x39, 0x36, 0x00, 0x69, 0x3d,
3025 0x14, 0x7e, 0x00, 0x69, 0x3f, 0x0b, 0xf4, 0x00,
3026 0x69, 0x42, 0x42, 0x0a, 0x00, 0x69, 0x45, 0x55,
3027 0x14, 0x00, 0x69, 0x46, 0x45, 0xa5, 0x00, 0x69,
3028 0x49, 0x42, 0x08, 0x00, 0x69, 0x4a, 0x0f, 0x36,
3029 0x00, 0x69, 0x4e, 0x55, 0x15, 0x00, 0x69, 0x53,
3030 0x0d, 0xe8, 0x00, 0x69, 0x54, 0x14, 0x79, 0x00,
3031 0x69, 0x55, 0x0b, 0x2a, 0x00, 0x69, 0x57, 0x39,
3032 0x37, 0x00, 0x69, 0x59, 0x14, 0x7f, 0x00, 0x69,
3033 0x5a, 0x0a, 0xc1, 0x00, 0x69, 0x5b, 0x4c, 0x03,
3034 0x00, 0x69, 0x5c, 0x14, 0x76, 0x00, 0x69, 0x5d,
3035 0x14, 0x83, 0x00, 0x69, 0x5e, 0x14, 0x82, 0x00,
3036 0x69, 0x60, 0x0c, 0xc7, 0x00, 0x69, 0x61, 0x14,
3037 0x81, 0x00, 0x69, 0x62, 0x0c, 0xc2, 0x00, 0x69,
3038 0x63, 0x39, 0x38, 0x00, 0x69, 0x64, 0x42, 0x0b,
3039 0x00, 0x69, 0x65, 0x4c, 0x04, 0x00, 0x69, 0x66,
3040 0x55, 0x16, 0x00, 0x69, 0x68, 0x21, 0x32, 0x00,
3041 0x69, 0x69, 0x45, 0xa6, 0x00, 0x69, 0x6a, 0x14,
3042 0x85, 0x00, 0x69, 0x6b, 0x14, 0x78, 0x00, 0x69,
3043 0x6c, 0x45, 0xa7, 0x00, 0x69, 0x6d, 0x06, 0xc0,
3044 0x00, 0x69, 0x6e, 0x14, 0x7b, 0x00, 0x69, 0x6f,
3045 0x09, 0x67, 0x00, 0x69, 0x70, 0x55, 0x17, 0x00,
3046 0x69, 0x71, 0x55, 0x18, 0x00, 0x69, 0x72, 0x39,
3047 0x39, 0x00, 0x69, 0x73, 0x0d, 0x16, 0x00, 0x69,
3048 0x74, 0x14, 0x7d, 0x00, 0x69, 0x75, 0x06, 0xc3,
3049 0x00, 0x69, 0x77, 0x14, 0x75, 0x00, 0x69, 0x78,
3050 0x14, 0x77, 0x00, 0x69, 0x79, 0x14, 0x74, 0x00,
3051 0x69, 0x7a, 0x45, 0xa8, 0x00, 0x69, 0x7b, 0x55,
3052 0x19, 0x00, 0x69, 0x7c, 0x0f, 0xd6, 0x00, 0x69,
3053 0x7d, 0x05, 0xb8, 0x00, 0x69, 0x7e, 0x14, 0x7a,
3054 0x00, 0x69, 0x7f, 0x39, 0x3a, 0x00, 0x69, 0x80,
3055 0x39, 0x3b, 0x00, 0x69, 0x81, 0x14, 0x84, 0x00,
3056 0x69, 0x82, 0x05, 0x93, 0x00, 0x69, 0x86, 0x37,
3057 0x40, 0x00, 0x69, 0x8a, 0x08, 0x57, 0x00, 0x69,
3058 0x8d, 0x55, 0x1a, 0x00, 0x69, 0x8e, 0x04, 0xff,
3059 0x00, 0x69, 0x91, 0x14, 0x95, 0x00, 0x69, 0x92,
3060 0x45, 0xa9, 0x00, 0x69, 0x94, 0x0f, 0xd7, 0x00,
3061 0x69, 0x95, 0x14, 0x98, 0x00, 0x69, 0x96, 0x45,
3062 0xab, 0x00, 0x69, 0x98, 0x21, 0x34, 0x00, 0x69,
3063 0x9b, 0x0a, 0x00, 0x00, 0x69, 0x9c, 0x14, 0x97,
3064 0x00, 0x69, 0xa0, 0x14, 0x96, 0x00, 0x69, 0xa1,
3065 0x55, 0x1b, 0x00, 0x69, 0xa5, 0x42, 0x0c, 0x00,
3066 0x69, 0xa6, 0x39, 0x3c, 0x00, 0x69, 0xa7, 0x14,
3067 0x93, 0x00, 0x69, 0xa8, 0x4c, 0x05, 0x00, 0x69,
3068 0xab, 0x4c, 0x06, 0x00, 0x69, 0xad, 0x39, 0x3d,
3069 0x00, 0x69, 0xae, 0x14, 0x87, 0x00, 0x69, 0xaf,
3070 0x4c, 0x07, 0x00, 0x69, 0xb0, 0x45, 0xac, 0x00,
3071 0x69, 0xb1, 0x14, 0xa4, 0x00, 0x69, 0xb2, 0x14,
3072 0x86, 0x00, 0x69, 0xb4, 0x14, 0x99, 0x00, 0x69,
3073 0xb7, 0x39, 0x3e, 0x00, 0x69, 0xb8, 0x55, 0x1c,
3074 0x00, 0x69, 0xba, 0x45, 0xad, 0x00, 0x69, 0xbb,
3075 0x14, 0x91, 0x00, 0x69, 0xbc, 0x45, 0xae, 0x00,
3076 0x69, 0xbe, 0x14, 0x8c, 0x00, 0x69, 0xbf, 0x14,
3077 0x89, 0x00, 0x69, 0xc0, 0x45, 0xaf, 0x00, 0x69,
3078 0xc1, 0x14, 0x8a, 0x00, 0x69, 0xc3, 0x14, 0x92,
3079 0x00, 0x69, 0xc5, 0x55, 0x1d, 0x00, 0x69, 0xc7,
3080 0x1d, 0x33, 0x00, 0x69, 0xc8, 0x55, 0x1e, 0x00,
3081 0x69, 0xca, 0x14, 0x8f, 0x00, 0x69, 0xcb, 0x07,
3082 0xcf, 0x00, 0x69, 0xcc, 0x0b, 0xe4, 0x00, 0x69,
3083 0xcd, 0x0a, 0xe6, 0x00, 0x69, 0xce, 0x14, 0x8d,
3084 0x00, 0x69, 0xcf, 0x42, 0x0d, 0x00, 0x69, 0xd0,
3085 0x14, 0x88, 0x00, 0x69, 0xd1, 0x45, 0xb0, 0x00,
3086 0x69, 0xd3, 0x14, 0x8b, 0x00, 0x69, 0xd6, 0x39,
3087 0x3f, 0x00, 0x69, 0xd7, 0x39, 0x40, 0x00, 0x69,
3088 0xd8, 0x0f, 0x37, 0x00, 0x69, 0xd9, 0x0e, 0x98,
3089 0x00, 0x69, 0xdd, 0x14, 0x90, 0x00, 0x69, 0xde,
3090 0x14, 0x9a, 0x00, 0x69, 0xe2, 0x21, 0x35, 0x00,
3091 0x69, 0xe3, 0x45, 0xb4, 0x00, 0x69, 0xe5, 0x4c,
3092 0x08, 0x00, 0x69, 0xe7, 0x14, 0xa2, 0x00, 0x69,
3093 0xe8, 0x14, 0x9b, 0x00, 0x69, 0xe9, 0x42, 0x10,
3094 0x00, 0x69, 0xea, 0x34, 0x11, 0x00, 0x69, 0xeb,
3095 0x14, 0xa8, 0x00, 0x69, 0xed, 0x14, 0xa6, 0x00,
3096 0x69, 0xee, 0x45, 0xb5, 0x00, 0x69, 0xef, 0x45,
3097 0xb6, 0x00, 0x69, 0xf1, 0x4c, 0x09, 0x00, 0x69,
3098 0xf2, 0x14, 0xa1, 0x00, 0x69, 0xf3, 0x45, 0xb7,
3099 0x00, 0x69, 0xf4, 0x45, 0xb9, 0x00, 0x69, 0xf5,
3100 0x42, 0x11, 0x00, 0x69, 0xf6, 0x37, 0x3f, 0x00,
3101 0x69, 0xf9, 0x14, 0xa0, 0x00, 0x69, 0xfb, 0x0b,
3102 0xec, 0x00, 0x69, 0xfd, 0x0a, 0xe7, 0x00, 0x69,
3103 0xfe, 0x45, 0xba, 0x00, 0x69, 0xff, 0x14, 0x9e,
3104 0x00, 0x6a, 0x00, 0x55, 0x20, 0x00, 0x6a, 0x01,
3105 0x39, 0x41, 0x00, 0x6a, 0x02, 0x14, 0x9c, 0x00,
3106 0x6a, 0x03, 0x55, 0x21, 0x00, 0x6a, 0x05, 0x14,
3107 0xa3, 0x00, 0x6a, 0x0a, 0x14, 0xa9, 0x00, 0x6a,
3108 0x0b, 0x0d, 0x89, 0x00, 0x6a, 0x0c, 0x14, 0xaf,
3109 0x00, 0x6a, 0x0f, 0x39, 0x42, 0x00, 0x6a, 0x11,
3110 0x45, 0xbb, 0x00, 0x6a, 0x12, 0x14, 0xaa, 0x00,
3111 0x6a, 0x13, 0x14, 0xad, 0x00, 0x6a, 0x14, 0x14,
3112 0xa7, 0x00, 0x6a, 0x15, 0x39, 0x43, 0x00, 0x6a,
3113 0x17, 0x0b, 0xb2, 0x00, 0x6a, 0x19, 0x0d, 0xaa,
3114 0x00, 0x6a, 0x1a, 0x45, 0xbc, 0x00, 0x6a, 0x1b,
3115 0x14, 0x9d, 0x00, 0x6a, 0x1d, 0x45, 0xbd, 0x00,
3116 0x6a, 0x1e, 0x14, 0xa5, 0x00, 0x6a, 0x1f, 0x09,
3117 0xa8, 0x00, 0x6a, 0x20, 0x55, 0x22, 0x00, 0x6a,
3118 0x21, 0x0e, 0xdb, 0x00, 0x6a, 0x22, 0x14, 0xb9,
3119 0x00, 0x6a, 0x23, 0x14, 0xac, 0x00, 0x6a, 0x24,
3120 0x55, 0x23, 0x00, 0x6a, 0x28, 0x39, 0x44, 0x00,
3121 0x6a, 0x29, 0x07, 0x56, 0x00, 0x6a, 0x2a, 0x05,
3122 0x23, 0x00, 0x6a, 0x2b, 0x05, 0xbd, 0x00, 0x6a,
3123 0x2e, 0x14, 0x94, 0x00, 0x6a, 0x30, 0x21, 0x36,
3124 0x00, 0x6a, 0x32, 0x45, 0xbf, 0x00, 0x6a, 0x33,
3125 0x45, 0xc0, 0x00, 0x6a, 0x34, 0x39, 0x45, 0x00,
3126 0x6a, 0x35, 0x09, 0xa9, 0x00, 0x6a, 0x36, 0x14,
3127 0xb1, 0x00, 0x6a, 0x37, 0x55, 0x24, 0x00, 0x6a,
3128 0x38, 0x14, 0xb8, 0x00, 0x6a, 0x39, 0x09, 0x25,
3129 0x00, 0x6a, 0x3a, 0x05, 0xd0, 0x00, 0x6a, 0x3b,
3130 0x42, 0x13, 0x00, 0x6a, 0x3d, 0x0b, 0x6c, 0x00,
3131 0x6a, 0x3e, 0x39, 0x46, 0x00, 0x6a, 0x3f, 0x45,
3132 0xc1, 0x00, 0x6a, 0x44, 0x14, 0xae, 0x00, 0x6a,
3133 0x45, 0x39, 0x47, 0x00, 0x6a, 0x46, 0x21, 0x38,
3134 0x00, 0x6a, 0x47, 0x14, 0xb3, 0x00, 0x6a, 0x48,
3135 0x14, 0xb7, 0x00, 0x6a, 0x49, 0x45, 0xc2, 0x00,
3136 0x6a, 0x4a, 0x4c, 0x0a, 0x00, 0x6a, 0x4b, 0x06,
3137 0xae, 0x00, 0x6a, 0x4e, 0x45, 0xc4, 0x00, 0x6a,
3138 0x50, 0x39, 0x48, 0x00, 0x6a, 0x51, 0x39, 0x49,
3139 0x00, 0x6a, 0x52, 0x45, 0xc5, 0x00, 0x6a, 0x54,
3140 0x3c, 0x34, 0x00, 0x6a, 0x55, 0x4c, 0x0b, 0x00,
3141 0x6a, 0x56, 0x39, 0x4a, 0x00, 0x6a, 0x58, 0x06,
3142 0x66, 0x00, 0x6a, 0x59, 0x14, 0xb5, 0x00, 0x6a,
3143 0x5b, 0x39, 0x4b, 0x00, 0x6a, 0x5f, 0x06, 0x3b,
3144 0x00, 0x6a, 0x61, 0x0c, 0xa3, 0x00, 0x6a, 0x62,
3145 0x14, 0xb4, 0x00, 0x6a, 0x64, 0x45, 0xc6, 0x00,
3146 0x6a, 0x66, 0x14, 0xb6, 0x00, 0x6a, 0x67, 0x4c,
3147 0x0c, 0x00, 0x6a, 0x6a, 0x55, 0x26, 0x00, 0x6a,
3148 0x6b, 0x21, 0x37, 0x00, 0x6a, 0x71, 0x4c, 0x0d,
3149 0x00, 0x6a, 0x72, 0x14, 0xb0, 0x00, 0x6a, 0x73,
3150 0x21, 0x39, 0x00, 0x6a, 0x78, 0x14, 0xb2, 0x00,
3151 0x6a, 0x7a, 0x45, 0xc3, 0x00, 0x6a, 0x7e, 0x21,
3152 0x3a, 0x00, 0x6a, 0x7f, 0x05, 0xbe, 0x00, 0x6a,
3153 0x80, 0x0b, 0x87, 0x00, 0x6a, 0x81, 0x55, 0x27,
3154 0x00, 0x6a, 0x83, 0x39, 0x4c, 0x00, 0x6a, 0x84,
3155 0x14, 0xbd, 0x00, 0x6a, 0x86, 0x55, 0x28, 0x00,
3156 0x6a, 0x87, 0x55, 0x29, 0x00, 0x6a, 0x89, 0x39,
3157 0x4d, 0x00, 0x6a, 0x8b, 0x45, 0xc8, 0x00, 0x6a,
3158 0x8d, 0x14, 0xbb, 0x00, 0x6a, 0x8e, 0x07, 0x9d,
3159 0x00, 0x6a, 0x90, 0x14, 0xba, 0x00, 0x6a, 0x91,
3160 0x39, 0x4e, 0x00, 0x6a, 0x94, 0x42, 0x15, 0x00,
3161 0x6a, 0x97, 0x14, 0xc0, 0x00, 0x6a, 0x9b, 0x55,
3162 0x2a, 0x00, 0x6a, 0x9c, 0x14, 0x3b, 0x00, 0x6a,
3163 0x9d, 0x39, 0x4f, 0x00, 0x6a, 0x9e, 0x39, 0x50,
3164 0x00, 0x6a, 0x9f, 0x39, 0x51, 0x00, 0x6a, 0xa0,
3165 0x14, 0xbc, 0x00, 0x6a, 0xa1, 0x45, 0xca, 0x00,
3166 0x6a, 0xa2, 0x14, 0xbe, 0x00, 0x6a, 0xa3, 0x14,
3167 0xbf, 0x00, 0x6a, 0xa5, 0x42, 0x16, 0x00, 0x6a,
3168 0xaa, 0x14, 0xcb, 0x00, 0x6a, 0xab, 0x45, 0xcc,
3169 0x00, 0x6a, 0xac, 0x14, 0xc7, 0x00, 0x6a, 0xae,
3170 0x14, 0x50, 0x00, 0x6a, 0xaf, 0x4c, 0x0e, 0x00,
3171 0x6a, 0xb0, 0x55, 0x2b, 0x00, 0x6a, 0xb1, 0x55,
3172 0x2c, 0x00, 0x6a, 0xb3, 0x14, 0xc6, 0x00, 0x6a,
3173 0xb4, 0x55, 0x2d, 0x00, 0x6a, 0xb8, 0x14, 0xc5,
3174 0x00, 0x6a, 0xbb, 0x14, 0xc2, 0x00, 0x6a, 0xbd,
3175 0x45, 0xcd, 0x00, 0x6a, 0xbe, 0x55, 0x2e, 0x00,
3176 0x6a, 0xbf, 0x55, 0x2f, 0x00, 0x6a, 0xc1, 0x14,
3177 0xab, 0x00, 0x6a, 0xc2, 0x14, 0xc4, 0x00, 0x6a,
3178 0xc3, 0x14, 0xc3, 0x00, 0x6a, 0xc6, 0x45, 0xce,
3179 0x00, 0x6a, 0xc8, 0x4c, 0x0f, 0x00, 0x6a, 0xc9,
3180 0x4c, 0x10, 0x00, 0x6a, 0xcc, 0x55, 0x30, 0x00,
3181 0x6a, 0xd0, 0x45, 0xd0, 0x00, 0x6a, 0xd1, 0x14,
3182 0xc9, 0x00, 0x6a, 0xd3, 0x0f, 0xcc, 0x00, 0x6a,
3183 0xd4, 0x45, 0xcf, 0x00, 0x6a, 0xd5, 0x55, 0x31,
3184 0x00, 0x6a, 0xd6, 0x55, 0x32, 0x00, 0x6a, 0xda,
3185 0x14, 0xcc, 0x00, 0x6a, 0xdb, 0x1d, 0xf1, 0x00,
3186 0x6a, 0xdc, 0x39, 0x52, 0x00, 0x6a, 0xdd, 0x45,
3187 0xd1, 0x00, 0x6a, 0xde, 0x14, 0xc8, 0x00, 0x6a,
3188 0xdf, 0x14, 0xca, 0x00, 0x6a, 0xe2, 0x21, 0x3b,
3189 0x00, 0x6a, 0xe4, 0x21, 0x3c, 0x00, 0x6a, 0xe7,
3190 0x39, 0x53, 0x00, 0x6a, 0xe8, 0x0d, 0x3b, 0x00,
3191 0x6a, 0xea, 0x14, 0xcd, 0x00, 0x6a, 0xec, 0x39,
3192 0x54, 0x00, 0x6a, 0xf0, 0x55, 0x33, 0x00, 0x6a,
3193 0xf1, 0x45, 0xd4, 0x00, 0x6a, 0xf2, 0x45, 0xd5,
3194 0x00, 0x6a, 0xf3, 0x45, 0xd6, 0x00, 0x6a, 0xf8,
3195 0x4e, 0xb8, 0x00, 0x6a, 0xfa, 0x14, 0xd1, 0x00,
3196 0x6a, 0xfb, 0x14, 0xce, 0x00, 0x6a, 0xfc, 0x55,
3197 0x34, 0x00, 0x6a, 0xfd, 0x45, 0xd7, 0x00, 0x6b,
3198 0x02, 0x55, 0x35, 0x00, 0x6b, 0x03, 0x4c, 0x11,
3199 0x00, 0x6b, 0x04, 0x34, 0x50, 0x00, 0x6b, 0x05,
3200 0x14, 0xcf, 0x00, 0x6b, 0x06, 0x55, 0x36, 0x00,
3201 0x6b, 0x07, 0x55, 0x37, 0x00, 0x6b, 0x09, 0x55,
3202 0x38, 0x00, 0x6b, 0x0a, 0x14, 0x9f, 0x00, 0x6b,
3203 0x0b, 0x45, 0xd9, 0x00, 0x6b, 0x0f, 0x45, 0xda,
3204 0x00, 0x6b, 0x10, 0x45, 0xdb, 0x00, 0x6b, 0x11,
3205 0x45, 0xdc, 0x00, 0x6b, 0x12, 0x14, 0xd2, 0x00,
3206 0x6b, 0x16, 0x14, 0xd3, 0x00, 0x6b, 0x17, 0x45,
3207 0xde, 0x00, 0x6b, 0x1b, 0x42, 0x18, 0x00, 0x6b,
3208 0x1d, 0x04, 0xd7, 0x00, 0x6b, 0x1e, 0x39, 0x55,
3209 0x00, 0x6b, 0x1f, 0x14, 0xd5, 0x00, 0x6b, 0x20,
3210 0x07, 0x3d, 0x00, 0x6b, 0x21, 0x08, 0xcd, 0x00,
3211 0x6b, 0x23, 0x06, 0xcd, 0x00, 0x6b, 0x24, 0x39,
3212 0x56, 0x00, 0x6b, 0x27, 0x05, 0x24, 0x00, 0x6b,
3213 0x28, 0x55, 0x39, 0x00, 0x6b, 0x2b, 0x55, 0x3a,
3214 0x00, 0x6b, 0x2c, 0x42, 0x19, 0x00, 0x6b, 0x2f,
3215 0x45, 0xe0, 0x00, 0x6b, 0x32, 0x0f, 0x49, 0x00,
3216 0x6b, 0x35, 0x39, 0x57, 0x00, 0x6b, 0x36, 0x55,
3217 0x3b, 0x00, 0x6b, 0x37, 0x14, 0xd7, 0x00, 0x6b,
3218 0x38, 0x14, 0xd6, 0x00, 0x6b, 0x39, 0x14, 0xd9,
3219 0x00, 0x6b, 0x3a, 0x06, 0x57, 0x00, 0x6b, 0x3b,
3220 0x4c, 0x12, 0x00, 0x6b, 0x3d, 0x06, 0xce, 0x00,
3221 0x6b, 0x3e, 0x05, 0xfa, 0x00, 0x6b, 0x3f, 0x4c,
3222 0x13, 0x00, 0x6b, 0x43, 0x14, 0xdc, 0x00, 0x6b,
3223 0x46, 0x39, 0x58, 0x00, 0x6b, 0x47, 0x14, 0xdb,
3224 0x00, 0x6b, 0x49, 0x14, 0xdd, 0x00, 0x6b, 0x4a,
3225 0x45, 0xe1, 0x00, 0x6b, 0x4c, 0x05, 0x4e, 0x00,
3226 0x6b, 0x4d, 0x55, 0x3c, 0x00, 0x6b, 0x4e, 0x0b,
3227 0x75, 0x00, 0x6b, 0x50, 0x14, 0xde, 0x00, 0x6b,
3228 0x52, 0x55, 0x3d, 0x00, 0x6b, 0x53, 0x05, 0xfb,
3229 0x00, 0x6b, 0x54, 0x14, 0xe0, 0x00, 0x6b, 0x56,
3230 0x39, 0x59, 0x00, 0x6b, 0x58, 0x45, 0xe2, 0x00,
3231 0x6b, 0x59, 0x14, 0xdf, 0x00, 0x6b, 0x5b, 0x14,
3232 0xe1, 0x00, 0x6b, 0x5d, 0x55, 0x3e, 0x00, 0x6b,
3233 0x5f, 0x14, 0xe2, 0x00, 0x6b, 0x60, 0x39, 0x5a,
3234 0x00, 0x6b, 0x61, 0x14, 0xe3, 0x00, 0x6b, 0x62,
3235 0x08, 0xad, 0x00, 0x6b, 0x63, 0x0a, 0x59, 0x00,
3236 0x6b, 0x64, 0x08, 0x11, 0x00, 0x6b, 0x65, 0x34,
3237 0x4a, 0x00, 0x6b, 0x66, 0x0d, 0xe2, 0x00, 0x6b,
3238 0x67, 0x42, 0x1a, 0x00, 0x6b, 0x69, 0x0e, 0x32,
3239 0x00, 0x6b, 0x6a, 0x0f, 0xea, 0x00, 0x6b, 0x6b,
3240 0x55, 0x3f, 0x00, 0x6b, 0x6c, 0x45, 0xe3, 0x00,
3241 0x6b, 0x6e, 0x55, 0x40, 0x00, 0x6b, 0x6f, 0x08,
3242 0xc3, 0x00, 0x6b, 0x70, 0x55, 0x41, 0x00, 0x6b,
3243 0x72, 0x35, 0xd9, 0x00, 0x6b, 0x73, 0x08, 0x40,
3244 0x00, 0x6b, 0x74, 0x0f, 0xba, 0x00, 0x6b, 0x75,
3245 0x45, 0xe4, 0x00, 0x6b, 0x77, 0x34, 0x56, 0x00,
3246 0x6b, 0x78, 0x14, 0xe4, 0x00, 0x6b, 0x79, 0x14,
3247 0xe5, 0x00, 0x6b, 0x7a, 0x45, 0xe5, 0x00, 0x6b,
3248 0x7b, 0x08, 0xae, 0x00, 0x6b, 0x7d, 0x4c, 0x14,
3249 0x00, 0x6b, 0x7e, 0x4c, 0x15, 0x00, 0x6b, 0x7f,
3250 0x14, 0xe6, 0x00, 0x6b, 0x80, 0x14, 0xe7, 0x00,
3251 0x6b, 0x81, 0x45, 0xe6, 0x00, 0x6b, 0x82, 0x39,
3252 0x5b, 0x00, 0x6b, 0x83, 0x14, 0xe9, 0x00, 0x6b,
3253 0x84, 0x14, 0xe8, 0x00, 0x6b, 0x85, 0x55, 0x42,
3254 0x00, 0x6b, 0x86, 0x0e, 0x86, 0x00, 0x6b, 0x89,
3255 0x09, 0x68, 0x00, 0x6b, 0x8a, 0x09, 0x18, 0x00,
3256 0x6b, 0x8b, 0x08, 0x92, 0x00, 0x6b, 0x8d, 0x14,
3257 0xea, 0x00, 0x6b, 0x95, 0x14, 0xec, 0x00, 0x6b,
3258 0x96, 0x09, 0xe9, 0x00, 0x6b, 0x97, 0x55, 0x43,
3259 0x00, 0x6b, 0x98, 0x14, 0xeb, 0x00, 0x6b, 0x9b,
3260 0x45, 0xe7, 0x00, 0x6b, 0x9e, 0x14, 0xed, 0x00,
3261 0x6b, 0x9f, 0x55, 0x44, 0x00, 0x6b, 0xa0, 0x55,
3262 0x45, 0x00, 0x6b, 0xa2, 0x55, 0x46, 0x00, 0x6b,
3263 0xa3, 0x55, 0x47, 0x00, 0x6b, 0xa4, 0x14, 0xee,
3264 0x00, 0x6b, 0xa8, 0x55, 0x48, 0x00, 0x6b, 0xa9,
3265 0x42, 0x1b, 0x00, 0x6b, 0xaa, 0x14, 0xef, 0x00,
3266 0x6b, 0xab, 0x14, 0xf0, 0x00, 0x6b, 0xac, 0x55,
3267 0x49, 0x00, 0x6b, 0xad, 0x42, 0x1c, 0x00, 0x6b,
3268 0xae, 0x45, 0xe8, 0x00, 0x6b, 0xaf, 0x14, 0xf1,
3269 0x00, 0x6b, 0xb0, 0x4c, 0x16, 0x00, 0x6b, 0xb1,
3270 0x14, 0xf3, 0x00, 0x6b, 0xb2, 0x14, 0xf2, 0x00,
3271 0x6b, 0xb3, 0x14, 0xf4, 0x00, 0x6b, 0xb4, 0x05,
3272 0x25, 0x00, 0x6b, 0xb5, 0x0b, 0x88, 0x00, 0x6b,
3273 0xb7, 0x14, 0xf5, 0x00, 0x6b, 0xb8, 0x55, 0x4a,
3274 0x00, 0x6b, 0xb9, 0x55, 0x4b, 0x00, 0x6b, 0xba,
3275 0x34, 0x20, 0x00, 0x6b, 0xbb, 0x05, 0xaa, 0x00,
3276 0x6b, 0xbc, 0x14, 0xf6, 0x00, 0x6b, 0xbd, 0x45,
3277 0xea, 0x00, 0x6b, 0xbe, 0x39, 0x5c, 0x00, 0x6b,
3278 0xbf, 0x0c, 0x3c, 0x00, 0x6b, 0xc0, 0x11, 0x9d,
3279 0x00, 0x6b, 0xc3, 0x55, 0x4c, 0x00, 0x6b, 0xc4,
3280 0x55, 0x4d, 0x00, 0x6b, 0xc5, 0x06, 0x3d, 0x00,
3281 0x6b, 0xc6, 0x14, 0xf7, 0x00, 0x6b, 0xc7, 0x45,
3282 0xeb, 0x00, 0x6b, 0xc8, 0x45, 0xec, 0x00, 0x6b,
3283 0xc9, 0x45, 0xed, 0x00, 0x6b, 0xcb, 0x14, 0xf8,
3284 0x00, 0x6b, 0xcc, 0x37, 0x44, 0x00, 0x6b, 0xcd,
3285 0x0e, 0x3c, 0x00, 0x6b, 0xce, 0x0e, 0x96, 0x00,
3286 0x6b, 0xcf, 0x34, 0x4c, 0x00, 0x6b, 0xd2, 0x0c,
3287 0x9f, 0x00, 0x6b, 0xd3, 0x14, 0xf9, 0x00, 0x6b,
3288 0xd4, 0x0d, 0x7a, 0x00, 0x6b, 0xd6, 0x21, 0x3d,
3289 0x00, 0x6b, 0xd7, 0x42, 0x1d, 0x00, 0x6b, 0xd8,
3290 0x0d, 0x8f, 0x00, 0x6b, 0xda, 0x45, 0xee, 0x00,
3291 0x6b, 0xdb, 0x0e, 0xdf, 0x00, 0x6b, 0xdf, 0x14,
3292 0xfa, 0x00, 0x6b, 0xe1, 0x39, 0x5d, 0x00, 0x6b,
3293 0xe3, 0x55, 0x4e, 0x00, 0x6b, 0xe6, 0x45, 0xef,
3294 0x00, 0x6b, 0xe7, 0x45, 0xf0, 0x00, 0x6b, 0xeb,
3295 0x14, 0xfc, 0x00, 0x6b, 0xec, 0x14, 0xfb, 0x00,
3296 0x6b, 0xee, 0x45, 0xf1, 0x00, 0x6b, 0xef, 0x14,
3297 0xfe, 0x00, 0x6b, 0xf1, 0x39, 0x5e, 0x00, 0x6b,
3298 0xf3, 0x14, 0xfd, 0x00, 0x6b, 0xf7, 0x4c, 0x17,
3299 0x00, 0x6b, 0xf9, 0x4c, 0x18, 0x00, 0x6b, 0xff,
3300 0x42, 0x1e, 0x00, 0x6c, 0x02, 0x45, 0xf2, 0x00,
3301 0x6c, 0x04, 0x4c, 0x19, 0x00, 0x6c, 0x05, 0x42,
3302 0x1f, 0x00, 0x6c, 0x08, 0x15, 0x00, 0x00, 0x6c,
3303 0x09, 0x4c, 0x1a, 0x00, 0x6c, 0x0a, 0x45, 0xf3,
3304 0x00, 0x6c, 0x0d, 0x4c, 0x1b, 0x00, 0x6c, 0x0e,
3305 0x45, 0xf4, 0x00, 0x6c, 0x0f, 0x08, 0xaf, 0x00,
3306 0x6c, 0x10, 0x39, 0x5f, 0x00, 0x6c, 0x11, 0x0e,
3307 0xbd, 0x00, 0x6c, 0x12, 0x55, 0x4f, 0x00, 0x6c,
3308 0x13, 0x15, 0x01, 0x00, 0x6c, 0x14, 0x15, 0x02,
3309 0x00, 0x6c, 0x17, 0x06, 0x3e, 0x00, 0x6c, 0x19,
3310 0x55, 0x50, 0x00, 0x6c, 0x1b, 0x15, 0x03, 0x00,
3311 0x6c, 0x1f, 0x55, 0x51, 0x00, 0x6c, 0x23, 0x15,
3312 0x05, 0x00, 0x6c, 0x24, 0x15, 0x04, 0x00, 0x6c,
3313 0x26, 0x55, 0x52, 0x00, 0x6c, 0x27, 0x55, 0x53,
3314 0x00, 0x6c, 0x28, 0x55, 0x54, 0x00, 0x6c, 0x2c,
3315 0x4c, 0x1c, 0x00, 0x6c, 0x2e, 0x55, 0x55, 0x00,
3316 0x6c, 0x33, 0x39, 0x60, 0x00, 0x6c, 0x34, 0x0a,
3317 0x2b, 0x00, 0x6c, 0x35, 0x39, 0x61, 0x00, 0x6c,
3318 0x36, 0x45, 0xf5, 0x00, 0x6c, 0x37, 0x0d, 0xab,
3319 0x00, 0x6c, 0x38, 0x04, 0xec, 0x00, 0x6c, 0x3a,
3320 0x4f, 0x55, 0x00, 0x6c, 0x3b, 0x55, 0x56, 0x00,
3321 0x6c, 0x3e, 0x0d, 0x59, 0x00, 0x6c, 0x3f, 0x21,
3322 0x3e, 0x00, 0x6c, 0x40, 0x0c, 0x11, 0x00, 0x6c,
3323 0x41, 0x09, 0x4b, 0x00, 0x6c, 0x42, 0x06, 0x7b,
3324 0x00, 0x6c, 0x4a, 0x4c, 0x1d, 0x00, 0x6c, 0x4b,
3325 0x55, 0x57, 0x00, 0x6c, 0x4d, 0x45, 0xf7, 0x00,
3326 0x6c, 0x4e, 0x0d, 0x5a, 0x00, 0x6c, 0x4f, 0x55,
3327 0x58, 0x00, 0x6c, 0x50, 0x08, 0xda, 0x00, 0x6c,
3328 0x52, 0x4c, 0x1e, 0x00, 0x6c, 0x54, 0x4c, 0x1f,
3329 0x00, 0x6c, 0x55, 0x15, 0x07, 0x00, 0x6c, 0x57,
3330 0x05, 0xfc, 0x00, 0x6c, 0x59, 0x39, 0x63, 0x00,
3331 0x6c, 0x5a, 0x05, 0x1a, 0x00, 0x6c, 0x5b, 0x45,
3332 0xf8, 0x00, 0x6c, 0x5c, 0x21, 0x3f, 0x00, 0x6c,
3333 0x5d, 0x0c, 0xca, 0x00, 0x6c, 0x5e, 0x15, 0x06,
3334 0x00, 0x6c, 0x5f, 0x07, 0xd0, 0x00, 0x6c, 0x60,
3335 0x0b, 0x91, 0x00, 0x6c, 0x62, 0x15, 0x08, 0x00,
3336 0x6c, 0x67, 0x46, 0x0a, 0x00, 0x6c, 0x68, 0x15,
3337 0x10, 0x00, 0x6c, 0x6a, 0x15, 0x09, 0x00, 0x6c,
3338 0x6b, 0x55, 0x59, 0x00, 0x6c, 0x6d, 0x45, 0xf9,
3339 0x00, 0x6c, 0x6f, 0x21, 0x41, 0x00, 0x6c, 0x70,
3340 0x0b, 0x21, 0x00, 0x6c, 0x72, 0x06, 0x7c, 0x00,
3341 0x6c, 0x73, 0x15, 0x11, 0x00, 0x6c, 0x74, 0x42,
3342 0x20, 0x00, 0x6c, 0x76, 0x39, 0x64, 0x00, 0x6c,
3343 0x78, 0x55, 0x5a, 0x00, 0x6c, 0x79, 0x4c, 0x20,
3344 0x00, 0x6c, 0x7a, 0x07, 0x3e, 0x00, 0x6c, 0x7b,
3345 0x39, 0x65, 0x00, 0x6c, 0x7d, 0x06, 0x3f, 0x00,
3346 0x6c, 0x7e, 0x15, 0x0f, 0x00, 0x6c, 0x81, 0x15,
3347 0x0d, 0x00, 0x6c, 0x82, 0x15, 0x0a, 0x00, 0x6c,
3348 0x83, 0x0f, 0x4a, 0x00, 0x6c, 0x84, 0x45, 0xfa,
3349 0x00, 0x6c, 0x85, 0x39, 0x66, 0x00, 0x6c, 0x86,
3350 0x21, 0x40, 0x00, 0x6c, 0x87, 0x55, 0x5b, 0x00,
3351 0x6c, 0x88, 0x0b, 0xdc, 0x00, 0x6c, 0x89, 0x45,
3352 0xfb, 0x00, 0x6c, 0x8c, 0x0c, 0xb1, 0x00, 0x6c,
3353 0x8d, 0x15, 0x0b, 0x00, 0x6c, 0x90, 0x15, 0x13,
3354 0x00, 0x6c, 0x92, 0x15, 0x12, 0x00, 0x6c, 0x93,
3355 0x06, 0xf9, 0x00, 0x6c, 0x94, 0x45, 0xfd, 0x00,
3356 0x6c, 0x95, 0x39, 0x67, 0x00, 0x6c, 0x96, 0x05,
3357 0x2d, 0x00, 0x6c, 0x97, 0x45, 0xfe, 0x00, 0x6c,
3358 0x98, 0x42, 0x21, 0x00, 0x6c, 0x99, 0x08, 0x2b,
3359 0x00, 0x6c, 0x9a, 0x15, 0x0c, 0x00, 0x6c, 0x9b,
3360 0x15, 0x0e, 0x00, 0x6c, 0x9c, 0x39, 0x68, 0x00,
3361 0x6c, 0x9f, 0x55, 0x5c, 0x00, 0x6c, 0xa1, 0x0e,
3362 0x85, 0x00, 0x6c, 0xa2, 0x0b, 0x54, 0x00, 0x6c,
3363 0xaa, 0x37, 0x49, 0x00, 0x6c, 0xab, 0x0e, 0xa5,
3364 0x00, 0x6c, 0xac, 0x4c, 0x21, 0x00, 0x6c, 0xad,
3365 0x45, 0xff, 0x00, 0x6c, 0xae, 0x15, 0x1b, 0x00,
3366 0x6c, 0xb0, 0x55, 0x5d, 0x00, 0x6c, 0xb1, 0x15,
3367 0x1c, 0x00, 0x6c, 0xb2, 0x55, 0x5e, 0x00, 0x6c,
3368 0xb3, 0x05, 0x4f, 0x00, 0x6c, 0xb4, 0x4c, 0x22,
3369 0x00, 0x6c, 0xb8, 0x0d, 0xf8, 0x00, 0x6c, 0xb9,
3370 0x0f, 0x09, 0x00, 0x6c, 0xba, 0x15, 0x1e, 0x00,
3371 0x6c, 0xbb, 0x08, 0xcf, 0x00, 0x6c, 0xbc, 0x09,
3372 0xaa, 0x00, 0x6c, 0xbd, 0x15, 0x17, 0x00, 0x6c,
3373 0xbe, 0x15, 0x1d, 0x00, 0x6c, 0xbf, 0x35, 0x58,
3374 0x00, 0x6c, 0xc1, 0x06, 0xaf, 0x00, 0x6c, 0xc2,
3375 0x46, 0x00, 0x00, 0x6c, 0xc4, 0x15, 0x14, 0x00,
3376 0x6c, 0xc5, 0x15, 0x19, 0x00, 0x6c, 0xc6, 0x42,
3377 0x23, 0x00, 0x6c, 0xc9, 0x0a, 0x98, 0x00, 0x6c,
3378 0xca, 0x0d, 0x27, 0x00, 0x6c, 0xcc, 0x0d, 0x7b,
3379 0x00, 0x6c, 0xcd, 0x55, 0x5f, 0x00, 0x6c, 0xcf,
3380 0x55, 0x60, 0x00, 0x6c, 0xd0, 0x39, 0x69, 0x00,
3381 0x6c, 0xd1, 0x55, 0x61, 0x00, 0x6c, 0xd2, 0x4c,
3382 0x23, 0x00, 0x6c, 0xd3, 0x15, 0x16, 0x00, 0x6c,
3383 0xd4, 0x39, 0x6a, 0x00, 0x6c, 0xd5, 0x0e, 0x4f,
3384 0x00, 0x6c, 0xd6, 0x39, 0x6b, 0x00, 0x6c, 0xd7,
3385 0x15, 0x18, 0x00, 0x6c, 0xd9, 0x15, 0x21, 0x00,
3386 0x6c, 0xda, 0x21, 0x42, 0x00, 0x6c, 0xdb, 0x15,
3387 0x1f, 0x00, 0x6c, 0xdc, 0x46, 0x02, 0x00, 0x6c,
3388 0xdd, 0x15, 0x1a, 0x00, 0x6c, 0xe0, 0x39, 0x6c,
3389 0x00, 0x6c, 0xe1, 0x0e, 0x50, 0x00, 0x6c, 0xe2,
3390 0x0c, 0xfe, 0x00, 0x6c, 0xe3, 0x06, 0x7d, 0x00,
3391 0x6c, 0xe5, 0x0c, 0x1f, 0x00, 0x6c, 0xe7, 0x55,
3392 0x62, 0x00, 0x6c, 0xe8, 0x0b, 0xab, 0x00, 0x6c,
3393 0xe9, 0x46, 0x03, 0x00, 0x6c, 0xea, 0x15, 0x22,
3394 0x00, 0x6c, 0xeb, 0x39, 0x6d, 0x00, 0x6c, 0xec,
3395 0x39, 0x6e, 0x00, 0x6c, 0xed, 0x46, 0x04, 0x00,
3396 0x6c, 0xee, 0x39, 0x6f, 0x00, 0x6c, 0xef, 0x15,
3397 0x20, 0x00, 0x6c, 0xf0, 0x0b, 0x39, 0x00, 0x6c,
3398 0xf1, 0x15, 0x15, 0x00, 0x6c, 0xf2, 0x55, 0x63,
3399 0x00, 0x6c, 0xf3, 0x04, 0xed, 0x00, 0x6c, 0xf4,
3400 0x55, 0x64, 0x00, 0x6c, 0xfb, 0x42, 0x22, 0x00,
3401 0x6d, 0x00, 0x46, 0x06, 0x00, 0x6d, 0x01, 0x3c,
3402 0x35, 0x00, 0x6d, 0x04, 0x21, 0x43, 0x00, 0x6d,
3403 0x07, 0x55, 0x65, 0x00, 0x6d, 0x0a, 0x39, 0x70,
3404 0x00, 0x6d, 0x0b, 0x0f, 0x38, 0x00, 0x6d, 0x0c,
3405 0x15, 0x2d, 0x00, 0x6d, 0x0e, 0x39, 0x71, 0x00,
3406 0x6d, 0x0f, 0x55, 0x66, 0x00, 0x6d, 0x11, 0x39,
3407 0x72, 0x00, 0x6d, 0x12, 0x15, 0x2c, 0x00, 0x6d,
3408 0x13, 0x55, 0x67, 0x00, 0x6d, 0x17, 0x0a, 0x9a,
3409 0x00, 0x6d, 0x19, 0x15, 0x29, 0x00, 0x6d, 0x1a,
3410 0x55, 0x68, 0x00, 0x6d, 0x1b, 0x0f, 0x56, 0x00,
3411 0x6d, 0x1e, 0x0c, 0x8e, 0x00, 0x6d, 0x1f, 0x15,
3412 0x23, 0x00, 0x6d, 0x24, 0x46, 0x07, 0x00, 0x6d,
3413 0x25, 0x0b, 0xe1, 0x00, 0x6d, 0x26, 0x46, 0x08,
3414 0x00, 0x6d, 0x27, 0x46, 0x09, 0x00, 0x6d, 0x28,
3415 0x55, 0x69, 0x00, 0x6d, 0x29, 0x04, 0xee, 0x00,
3416 0x6d, 0x2a, 0x07, 0xd1, 0x00, 0x6d, 0x2b, 0x15,
3417 0x26, 0x00, 0x6d, 0x2e, 0x39, 0x73, 0x00, 0x6d,
3418 0x2f, 0x46, 0x0b, 0x00, 0x6d, 0x31, 0x42, 0x24,
3419 0x00, 0x6d, 0x32, 0x09, 0x31, 0x00, 0x6d, 0x33,
3420 0x15, 0x2b, 0x00, 0x6d, 0x34, 0x46, 0x1e, 0x00,
3421 0x6d, 0x35, 0x15, 0x2a, 0x00, 0x6d, 0x36, 0x15,
3422 0x25, 0x00, 0x6d, 0x38, 0x15, 0x28, 0x00, 0x6d,
3423 0x39, 0x42, 0x25, 0x00, 0x6d, 0x3b, 0x05, 0xc6,
3424 0x00, 0x6d, 0x3c, 0x46, 0x0c, 0x00, 0x6d, 0x3d,
3425 0x15, 0x27, 0x00, 0x6d, 0x3e, 0x0c, 0xff, 0x00,
3426 0x6d, 0x3f, 0x42, 0x26, 0x00, 0x6d, 0x41, 0x0f,
3427 0x76, 0x00, 0x6d, 0x44, 0x09, 0xdc, 0x00, 0x6d,
3428 0x45, 0x0a, 0x99, 0x00, 0x6d, 0x57, 0x39, 0x74,
3429 0x00, 0x6d, 0x58, 0x42, 0x27, 0x00, 0x6d, 0x59,
3430 0x15, 0x33, 0x00, 0x6d, 0x5a, 0x15, 0x31, 0x00,
3431 0x6d, 0x5b, 0x46, 0x0d, 0x00, 0x6d, 0x5c, 0x0d,
3432 0xbf, 0x00, 0x6d, 0x5e, 0x39, 0x75, 0x00, 0x6d,
3433 0x5f, 0x55, 0x6a, 0x00, 0x6d, 0x60, 0x46, 0x0e,
3434 0x00, 0x6d, 0x61, 0x4c, 0x24, 0x00, 0x6d, 0x63,
3435 0x15, 0x2e, 0x00, 0x6d, 0x64, 0x15, 0x30, 0x00,
3436 0x6d, 0x65, 0x39, 0x76, 0x00, 0x6d, 0x66, 0x04,
3437 0xdc, 0x00, 0x6d, 0x67, 0x55, 0x6b, 0x00, 0x6d,
3438 0x69, 0x07, 0xd2, 0x00, 0x6d, 0x6a, 0x0f, 0xd8,
3439 0x00, 0x6d, 0x6c, 0x05, 0x9b, 0x00, 0x6d, 0x6e,
3440 0x0d, 0xd4, 0x00, 0x6d, 0x6f, 0x21, 0x45, 0x00,
3441 0x6d, 0x70, 0x46, 0x0f, 0x00, 0x6d, 0x74, 0x0f,
3442 0x4b, 0x00, 0x6d, 0x77, 0x34, 0x0f, 0x00, 0x6d,
3443 0x78, 0x0a, 0x01, 0x00, 0x6d, 0x79, 0x15, 0x32,
3444 0x00, 0x6d, 0x7c, 0x4c, 0x25, 0x00, 0x6d, 0x80,
3445 0x46, 0x10, 0x00, 0x6d, 0x81, 0x46, 0x11, 0x00,
3446 0x6d, 0x82, 0x39, 0x77, 0x00, 0x6d, 0x85, 0x15,
3447 0x37, 0x00, 0x6d, 0x87, 0x21, 0x44, 0x00, 0x6d,
3448 0x88, 0x09, 0xab, 0x00, 0x6d, 0x89, 0x34, 0x2a,
3449 0x00, 0x6d, 0x8a, 0x46, 0x12, 0x00, 0x6d, 0x8c,
3450 0x0f, 0x1a, 0x00, 0x6d, 0x8d, 0x46, 0x13, 0x00,
3451 0x6d, 0x8e, 0x15, 0x34, 0x00, 0x6d, 0x91, 0x46,
3452 0x14, 0x00, 0x6d, 0x92, 0x55, 0x6c, 0x00, 0x6d,
3453 0x93, 0x15, 0x2f, 0x00, 0x6d, 0x94, 0x42, 0x28,
3454 0x00, 0x6d, 0x95, 0x15, 0x35, 0x00, 0x6d, 0x96,
3455 0x21, 0x46, 0x00, 0x6d, 0x97, 0x55, 0x6d, 0x00,
3456 0x6d, 0x98, 0x46, 0x15, 0x00, 0x6d, 0x99, 0x0f,
3457 0xa6, 0x00, 0x6d, 0x9b, 0x0c, 0x6d, 0x00, 0x6d,
3458 0x9c, 0x0c, 0x9a, 0x00, 0x6d, 0xaa, 0x42, 0x29,
3459 0x00, 0x6d, 0xab, 0x46, 0x1a, 0x00, 0x6d, 0xac,
3460 0x21, 0x47, 0x00, 0x6d, 0xae, 0x46, 0x1b, 0x00,
3461 0x6d, 0xaf, 0x05, 0x94, 0x00, 0x6d, 0xb2, 0x04,
3462 0xf7, 0x00, 0x6d, 0xb4, 0x46, 0x1c, 0x00, 0x6d,
3463 0xb5, 0x15, 0x3b, 0x00, 0x6d, 0xb7, 0x55, 0x6e,
3464 0x00, 0x6d, 0xb8, 0x15, 0x3e, 0x00, 0x6d, 0xb9,
3465 0x4c, 0x26, 0x00, 0x6d, 0xbc, 0x0f, 0x8b, 0x00,
3466 0x6d, 0xbd, 0x55, 0x6f, 0x00, 0x6d, 0xbf, 0x39,
3467 0x78, 0x00, 0x6d, 0xc0, 0x0f, 0x4e, 0x00, 0x6d,
3468 0xc2, 0x46, 0x1d, 0x00, 0x6d, 0xc4, 0x39, 0x79,
3469 0x00, 0x6d, 0xc5, 0x15, 0x45, 0x00, 0x6d, 0xc6,
3470 0x15, 0x3f, 0x00, 0x6d, 0xc7, 0x15, 0x3c, 0x00,
3471 0x6d, 0xc8, 0x46, 0x1f, 0x00, 0x6d, 0xca, 0x39,
3472 0x7a, 0x00, 0x6d, 0xcb, 0x0f, 0x9c, 0x00, 0x6d,
3473 0xcc, 0x15, 0x42, 0x00, 0x6d, 0xce, 0x46, 0x20,
3474 0x00, 0x6d, 0xcf, 0x21, 0x48, 0x00, 0x6d, 0xd0,
3475 0x3c, 0x36, 0x00, 0x6d, 0xd1, 0x09, 0x54, 0x00,
3476 0x6d, 0xd2, 0x15, 0x44, 0x00, 0x6d, 0xd5, 0x15,
3477 0x49, 0x00, 0x6d, 0xd6, 0x39, 0x7b, 0x00, 0x6d,
3478 0xd8, 0x0c, 0x6b, 0x00, 0x6d, 0xd9, 0x15, 0x47,
3479 0x00, 0x6d, 0xda, 0x34, 0x53, 0x00, 0x6d, 0xdb,
3480 0x42, 0x2a, 0x00, 0x6d, 0xdd, 0x42, 0x2b, 0x00,
3481 0x6d, 0xde, 0x15, 0x41, 0x00, 0x6d, 0xdf, 0x46,
3482 0x21, 0x00, 0x6d, 0xe0, 0x55, 0x70, 0x00, 0x6d,
3483 0xe1, 0x0b, 0x76, 0x00, 0x6d, 0xe2, 0x55, 0x71,
3484 0x00, 0x6d, 0xe4, 0x15, 0x48, 0x00, 0x6d, 0xe5,
3485 0x55, 0x72, 0x00, 0x6d, 0xe6, 0x15, 0x3d, 0x00,
3486 0x6d, 0xe8, 0x15, 0x43, 0x00, 0x6d, 0xe9, 0x39,
3487 0x7c, 0x00, 0x6d, 0xea, 0x15, 0x4a, 0x00, 0x6d,
3488 0xeb, 0x04, 0xc0, 0x00, 0x6d, 0xec, 0x15, 0x40,
3489 0x00, 0x6d, 0xee, 0x15, 0x4b, 0x00, 0x6d, 0xef,
3490 0x55, 0x73, 0x00, 0x6d, 0xf0, 0x4c, 0x27, 0x00,
3491 0x6d, 0xf1, 0x0a, 0x02, 0x00, 0x6d, 0xf2, 0x21,
3492 0x4a, 0x00, 0x6d, 0xf3, 0x09, 0x69, 0x00, 0x6d,
3493 0xf4, 0x55, 0x74, 0x00, 0x6d, 0xf5, 0x0d, 0xf5,
3494 0x00, 0x6d, 0xf6, 0x46, 0x22, 0x00, 0x6d, 0xf7,
3495 0x08, 0x1e, 0x00, 0x6d, 0xf8, 0x21, 0x49, 0x00,
3496 0x6d, 0xf9, 0x15, 0x38, 0x00, 0x6d, 0xfa, 0x15,
3497 0x46, 0x00, 0x6d, 0xfb, 0x0c, 0x34, 0x00, 0x6d,
3498 0xfc, 0x21, 0x4b, 0x00, 0x6e, 0x00, 0x55, 0x75,
3499 0x00, 0x6e, 0x04, 0x55, 0x76, 0x00, 0x6e, 0x05,
3500 0x0a, 0x5a, 0x00, 0x6e, 0x07, 0x05, 0xc7, 0x00,
3501 0x6e, 0x08, 0x08, 0x41, 0x00, 0x6e, 0x09, 0x09,
3502 0xac, 0x00, 0x6e, 0x0a, 0x15, 0x3a, 0x00, 0x6e,
3503 0x0b, 0x09, 0x4c, 0x00, 0x6e, 0x13, 0x07, 0x22,
3504 0x00, 0x6e, 0x15, 0x15, 0x39, 0x00, 0x6e, 0x17,
3505 0x37, 0x46, 0x00, 0x6e, 0x19, 0x15, 0x4f, 0x00,
3506 0x6e, 0x1a, 0x1e, 0x14, 0x00, 0x6e, 0x1b, 0x07,
3507 0x6e, 0x00, 0x6e, 0x1d, 0x15, 0x5e, 0x00, 0x6e,
3508 0x1e, 0x46, 0x24, 0x00, 0x6e, 0x1f, 0x15, 0x58,
3509 0x00, 0x6e, 0x20, 0x06, 0x8e, 0x00, 0x6e, 0x21,
3510 0x0c, 0x49, 0x00, 0x6e, 0x22, 0x39, 0x7d, 0x00,
3511 0x6e, 0x23, 0x15, 0x53, 0x00, 0x6e, 0x24, 0x15,
3512 0x5c, 0x00, 0x6e, 0x25, 0x04, 0x73, 0x00, 0x6e,
3513 0x26, 0x04, 0xd4, 0x00, 0x6e, 0x27, 0x21, 0x4e,
3514 0x00, 0x6e, 0x29, 0x05, 0x39, 0x00, 0x6e, 0x2b,
3515 0x15, 0x55, 0x00, 0x6e, 0x2c, 0x0b, 0x0c, 0x00,
3516 0x6e, 0x2d, 0x15, 0x4c, 0x00, 0x6e, 0x2e, 0x15,
3517 0x4e, 0x00, 0x6e, 0x2f, 0x07, 0xd3, 0x00, 0x6e,
3518 0x32, 0x46, 0x26, 0x00, 0x6e, 0x34, 0x34, 0x12,
3519 0x00, 0x6e, 0x36, 0x46, 0x23, 0x00, 0x6e, 0x38,
3520 0x15, 0x5f, 0x00, 0x6e, 0x39, 0x21, 0x4c, 0x00,
3521 0x6e, 0x3a, 0x15, 0x5a, 0x00, 0x6e, 0x3b, 0x55,
3522 0x77, 0x00, 0x6e, 0x3c, 0x21, 0x4f, 0x00, 0x6e,
3523 0x3e, 0x15, 0x52, 0x00, 0x6e, 0x42, 0x3c, 0x37,
3524 0x00, 0x6e, 0x43, 0x15, 0x59, 0x00, 0x6e, 0x44,
3525 0x42, 0x2c, 0x00, 0x6e, 0x45, 0x4c, 0x28, 0x00,
3526 0x6e, 0x48, 0x46, 0x27, 0x00, 0x6e, 0x49, 0x46,
3527 0x28, 0x00, 0x6e, 0x4a, 0x0e, 0xb7, 0x00, 0x6e,
3528 0x4b, 0x46, 0x29, 0x00, 0x6e, 0x4c, 0x46, 0x2a,
3529 0x00, 0x6e, 0x4d, 0x15, 0x57, 0x00, 0x6e, 0x4e,
3530 0x15, 0x5b, 0x00, 0x6e, 0x4f, 0x46, 0x2b, 0x00,
3531 0x6e, 0x51, 0x39, 0x7e, 0x00, 0x6e, 0x52, 0x55,
3532 0x78, 0x00, 0x6e, 0x53, 0x46, 0x2c, 0x00, 0x6e,
3533 0x54, 0x46, 0x2d, 0x00, 0x6e, 0x56, 0x07, 0x84,
3534 0x00, 0x6e, 0x57, 0x46, 0x2e, 0x00, 0x6e, 0x58,
3535 0x09, 0xad, 0x00, 0x6e, 0x5b, 0x0b, 0x77, 0x00,
3536 0x6e, 0x5c, 0x21, 0x4d, 0x00, 0x6e, 0x5d, 0x55,
3537 0x79, 0x00, 0x6e, 0x5e, 0x42, 0x2d, 0x00, 0x6e,
3538 0x5f, 0x15, 0x51, 0x00, 0x6e, 0x62, 0x55, 0x7a,
3539 0x00, 0x6e, 0x63, 0x46, 0x2f, 0x00, 0x6e, 0x67,
3540 0x0f, 0x19, 0x00, 0x6e, 0x68, 0x55, 0x7b, 0x00,
3541 0x6e, 0x6b, 0x15, 0x54, 0x00, 0x6e, 0x6e, 0x15,
3542 0x4d, 0x00, 0x6e, 0x6f, 0x0c, 0x6c, 0x00, 0x6e,
3543 0x72, 0x15, 0x50, 0x00, 0x6e, 0x73, 0x4c, 0x29,
3544 0x00, 0x6e, 0x76, 0x15, 0x56, 0x00, 0x6e, 0x7b,
3545 0x4c, 0x2a, 0x00, 0x6e, 0x7d, 0x4c, 0x2b, 0x00,
3546 0x6e, 0x7e, 0x0f, 0xf7, 0x00, 0x6e, 0x7f, 0x08,
3547 0xea, 0x00, 0x6e, 0x80, 0x0e, 0xac, 0x00, 0x6e,
3548 0x82, 0x15, 0x60, 0x00, 0x6e, 0x89, 0x4c, 0x2c,
3549 0x00, 0x6e, 0x8c, 0x0d, 0x42, 0x00, 0x6e, 0x8d,
3550 0x55, 0x7c, 0x00, 0x6e, 0x8f, 0x15, 0x6c, 0x00,
3551 0x6e, 0x90, 0x07, 0x6f, 0x00, 0x6e, 0x93, 0x46,
3552 0x31, 0x00, 0x6e, 0x96, 0x09, 0x6a, 0x00, 0x6e,
3553 0x98, 0x15, 0x62, 0x00, 0x6e, 0x99, 0x55, 0x7d,
3554 0x00, 0x6e, 0x9c, 0x0f, 0x77, 0x00, 0x6e, 0x9d,
3555 0x07, 0xd4, 0x00, 0x6e, 0x9f, 0x15, 0x6f, 0x00,
3556 0x6e, 0xa0, 0x55, 0x7e, 0x00, 0x6e, 0xa2, 0x04,
3557 0xb2, 0x00, 0x6e, 0xa5, 0x15, 0x6d, 0x00, 0x6e,
3558 0xa7, 0x46, 0x32, 0x00, 0x6e, 0xaa, 0x15, 0x61,
3559 0x00, 0x6e, 0xab, 0x34, 0x0c, 0x00, 0x6e, 0xad,
3560 0x55, 0x7f, 0x00, 0x6e, 0xae, 0x55, 0x80, 0x00,
3561 0x6e, 0xaf, 0x15, 0x67, 0x00, 0x6e, 0xb1, 0x42,
3562 0x2e, 0x00, 0x6e, 0xb2, 0x15, 0x69, 0x00, 0x6e,
3563 0xb3, 0x55, 0x81, 0x00, 0x6e, 0xb4, 0x46, 0x33,
3564 0x00, 0x6e, 0xb6, 0x0f, 0x39, 0x00, 0x6e, 0xb7,
3565 0x15, 0x64, 0x00, 0x6e, 0xba, 0x0c, 0x28, 0x00,
3566 0x6e, 0xbb, 0x55, 0x82, 0x00, 0x6e, 0xbc, 0x4c,
3567 0x2d, 0x00, 0x6e, 0xbd, 0x15, 0x66, 0x00, 0x6e,
3568 0xbf, 0x21, 0x50, 0x00, 0x6e, 0xc0, 0x55, 0x83,
3569 0x00, 0x6e, 0xc1, 0x42, 0x2f, 0x00, 0x6e, 0xc2,
3570 0x15, 0x6e, 0x00, 0x6e, 0xc3, 0x46, 0x34, 0x00,
3571 0x6e, 0xc4, 0x15, 0x68, 0x00, 0x6e, 0xc5, 0x0e,
3572 0xd3, 0x00, 0x6e, 0xc7, 0x39, 0x7f, 0x00, 0x6e,
3573 0xc8, 0x55, 0x84, 0x00, 0x6e, 0xc9, 0x15, 0x63,
3574 0x00, 0x6e, 0xca, 0x39, 0x80, 0x00, 0x6e, 0xcb,
3575 0x08, 0xce, 0x00, 0x6e, 0xcc, 0x15, 0x7b, 0x00,
3576 0x6e, 0xcd, 0x55, 0x85, 0x00, 0x6e, 0xce, 0x39,
3577 0x81, 0x00, 0x6e, 0xcf, 0x55, 0x86, 0x00, 0x6e,
3578 0xd1, 0x05, 0xc8, 0x00, 0x6e, 0xd3, 0x15, 0x65,
3579 0x00, 0x6e, 0xd4, 0x15, 0x6a, 0x00, 0x6e, 0xd5,
3580 0x15, 0x6b, 0x00, 0x6e, 0xd9, 0x3c, 0x38, 0x00,
3581 0x6e, 0xda, 0x4c, 0x2e, 0x00, 0x6e, 0xdb, 0x4c,
3582 0x2f, 0x00, 0x6e, 0xdd, 0x0b, 0x4c, 0x00, 0x6e,
3583 0xde, 0x0b, 0x3a, 0x00, 0x6e, 0xe6, 0x3c, 0x24,
3584 0x00, 0x6e, 0xeb, 0x46, 0x36, 0x00, 0x6e, 0xec,
3585 0x15, 0x73, 0x00, 0x6e, 0xed, 0x55, 0x87, 0x00,
3586 0x6e, 0xee, 0x55, 0x88, 0x00, 0x6e, 0xef, 0x15,
3587 0x79, 0x00, 0x6e, 0xf2, 0x15, 0x77, 0x00, 0x6e,
3588 0xf4, 0x0c, 0x23, 0x00, 0x6e, 0xf7, 0x15, 0x7e,
3589 0x00, 0x6e, 0xf8, 0x15, 0x74, 0x00, 0x6e, 0xf9,
3590 0x46, 0x37, 0x00, 0x6e, 0xfb, 0x46, 0x38, 0x00,
3591 0x6e, 0xfd, 0x39, 0x82, 0x00, 0x6e, 0xfe, 0x15,
3592 0x75, 0x00, 0x6e, 0xff, 0x15, 0x5d, 0x00, 0x6f,
3593 0x01, 0x06, 0x93, 0x00, 0x6f, 0x02, 0x0d, 0xac,
3594 0x00, 0x6f, 0x04, 0x55, 0x89, 0x00, 0x6f, 0x06,
3595 0x08, 0xeb, 0x00, 0x6f, 0x08, 0x55, 0x8a, 0x00,
3596 0x6f, 0x09, 0x08, 0x09, 0x00, 0x6f, 0x0a, 0x46,
3597 0x39, 0x00, 0x6f, 0x0c, 0x46, 0x3a, 0x00, 0x6f,
3598 0x0d, 0x55, 0x8b, 0x00, 0x6f, 0x0f, 0x0f, 0xd9,
3599 0x00, 0x6f, 0x10, 0x42, 0x30, 0x00, 0x6f, 0x11,
3600 0x15, 0x71, 0x00, 0x6f, 0x13, 0x15, 0x7d, 0x00,
3601 0x6f, 0x14, 0x05, 0x0b, 0x00, 0x6f, 0x15, 0x0a,
3602 0xe8, 0x00, 0x6f, 0x16, 0x55, 0x8c, 0x00, 0x6f,
3603 0x18, 0x46, 0x3b, 0x00, 0x6f, 0x1a, 0x39, 0x83,
3604 0x00, 0x6f, 0x1b, 0x55, 0x8d, 0x00, 0x6f, 0x20,
3605 0x0d, 0x2f, 0x00, 0x6f, 0x22, 0x05, 0xfd, 0x00,
3606 0x6f, 0x23, 0x1e, 0x81, 0x00, 0x6f, 0x25, 0x46,
3607 0x3c, 0x00, 0x6f, 0x26, 0x4c, 0x30, 0x00, 0x6f,
3608 0x29, 0x4c, 0x31, 0x00, 0x6f, 0x2a, 0x39, 0x84,
3609 0x00, 0x6f, 0x2b, 0x0e, 0xad, 0x00, 0x6f, 0x2c,
3610 0x0b, 0xee, 0x00, 0x6f, 0x2d, 0x55, 0x8f, 0x00,
3611 0x6f, 0x2f, 0x39, 0x85, 0x00, 0x6f, 0x30, 0x4c,
3612 0x32, 0x00, 0x6f, 0x31, 0x15, 0x78, 0x00, 0x6f,
3613 0x32, 0x15, 0x7a, 0x00, 0x6f, 0x33, 0x39, 0x86,
3614 0x00, 0x6f, 0x35, 0x46, 0x35, 0x00, 0x6f, 0x36,
3615 0x46, 0x3d, 0x00, 0x6f, 0x38, 0x0a, 0xb4, 0x00,
3616 0x6f, 0x3b, 0x55, 0x8e, 0x00, 0x6f, 0x3c, 0x46,
3617 0x3e, 0x00, 0x6f, 0x3e, 0x15, 0x7c, 0x00, 0x6f,
3618 0x3f, 0x15, 0x76, 0x00, 0x6f, 0x41, 0x15, 0x70,
3619 0x00, 0x6f, 0x45, 0x05, 0xff, 0x00, 0x6f, 0x4f,
3620 0x55, 0x90, 0x00, 0x6f, 0x51, 0x1e, 0x60, 0x00,
3621 0x6f, 0x52, 0x46, 0x40, 0x00, 0x6f, 0x53, 0x55,
3622 0x91, 0x00, 0x6f, 0x54, 0x07, 0x3f, 0x00, 0x6f,
3623 0x57, 0x46, 0x41, 0x00, 0x6f, 0x58, 0x15, 0x8a,
3624 0x00, 0x6f, 0x59, 0x42, 0x31, 0x00, 0x6f, 0x5a,
3625 0x39, 0x87, 0x00, 0x6f, 0x5b, 0x15, 0x85, 0x00,
3626 0x6f, 0x5c, 0x0a, 0x9c, 0x00, 0x6f, 0x5d, 0x55,
3627 0x92, 0x00, 0x6f, 0x5e, 0x39, 0x88, 0x00, 0x6f,
3628 0x5f, 0x05, 0xc1, 0x00, 0x6f, 0x60, 0x46, 0x42,
3629 0x00, 0x6f, 0x61, 0x42, 0x32, 0x00, 0x6f, 0x62,
3630 0x39, 0x89, 0x00, 0x6f, 0x64, 0x09, 0x6b, 0x00,
3631 0x6f, 0x66, 0x15, 0x8e, 0x00, 0x6f, 0x68, 0x46,
3632 0x43, 0x00, 0x6f, 0x6c, 0x55, 0x93, 0x00, 0x6f,
3633 0x6d, 0x15, 0x87, 0x00, 0x6f, 0x6e, 0x36, 0x6c,
3634 0x00, 0x6f, 0x6f, 0x15, 0x84, 0x00, 0x6f, 0x70,
3635 0x0b, 0xf5, 0x00, 0x6f, 0x74, 0x15, 0xa7, 0x00,
3636 0x6f, 0x78, 0x15, 0x81, 0x00, 0x6f, 0x7a, 0x15,
3637 0x80, 0x00, 0x6f, 0x7c, 0x15, 0x89, 0x00, 0x6f,
3638 0x7d, 0x39, 0x8a, 0x00, 0x6f, 0x7e, 0x42, 0x33,
3639 0x00, 0x6f, 0x80, 0x15, 0x83, 0x00, 0x6f, 0x81,
3640 0x15, 0x82, 0x00, 0x6f, 0x82, 0x15, 0x88, 0x00,
3641 0x6f, 0x83, 0x55, 0x94, 0x00, 0x6f, 0x84, 0x0a,
3642 0x45, 0x00, 0x6f, 0x86, 0x15, 0x7f, 0x00, 0x6f,
3643 0x87, 0x4c, 0x33, 0x00, 0x6f, 0x88, 0x21, 0x51,
3644 0x00, 0x6f, 0x8b, 0x39, 0x8b, 0x00, 0x6f, 0x8c,
3645 0x42, 0x34, 0x00, 0x6f, 0x8d, 0x39, 0x8c, 0x00,
3646 0x6f, 0x8e, 0x15, 0x8b, 0x00, 0x6f, 0x90, 0x46,
3647 0x44, 0x00, 0x6f, 0x91, 0x15, 0x8c, 0x00, 0x6f,
3648 0x92, 0x39, 0x8d, 0x00, 0x6f, 0x93, 0x55, 0x95,
3649 0x00, 0x6f, 0x94, 0x39, 0x8e, 0x00, 0x6f, 0x96,
3650 0x46, 0x45, 0x00, 0x6f, 0x97, 0x05, 0xfe, 0x00,
3651 0x6f, 0x98, 0x36, 0x3c, 0x00, 0x6f, 0x9a, 0x39,
3652 0x8f, 0x00, 0x6f, 0x9d, 0x4c, 0x34, 0x00, 0x6f,
3653 0x9f, 0x46, 0x47, 0x00, 0x6f, 0xa0, 0x42, 0x35,
3654 0x00, 0x6f, 0xa1, 0x15, 0x91, 0x00, 0x6f, 0xa3,
3655 0x15, 0x90, 0x00, 0x6f, 0xa4, 0x15, 0x92, 0x00,
3656 0x6f, 0xa5, 0x46, 0x48, 0x00, 0x6f, 0xa6, 0x55,
3657 0x96, 0x00, 0x6f, 0xa7, 0x39, 0x90, 0x00, 0x6f,
3658 0xa8, 0x39, 0x91, 0x00, 0x6f, 0xaa, 0x15, 0x95,
3659 0x00, 0x6f, 0xae, 0x4c, 0x35, 0x00, 0x6f, 0xaf,
3660 0x46, 0x49, 0x00, 0x6f, 0xb0, 0x55, 0x97, 0x00,
3661 0x6f, 0xb1, 0x0c, 0x3d, 0x00, 0x6f, 0xb3, 0x15,
3662 0x8f, 0x00, 0x6f, 0xb5, 0x21, 0x52, 0x00, 0x6f,
3663 0xb6, 0x39, 0x92, 0x00, 0x6f, 0xb7, 0x4c, 0x36,
3664 0x00, 0x6f, 0xb9, 0x15, 0x93, 0x00, 0x6f, 0xbc,
3665 0x42, 0x36, 0x00, 0x6f, 0xbe, 0x46, 0x46, 0x00,
3666 0x6f, 0xc0, 0x07, 0x39, 0x00, 0x6f, 0xc1, 0x0b,
3667 0x59, 0x00, 0x6f, 0xc2, 0x15, 0x8d, 0x00, 0x6f,
3668 0xc3, 0x0c, 0xf1, 0x00, 0x6f, 0xc5, 0x55, 0x98,
3669 0x00, 0x6f, 0xc6, 0x15, 0x94, 0x00, 0x6f, 0xc7,
3670 0x42, 0x37, 0x00, 0x6f, 0xc8, 0x46, 0x4b, 0x00,
3671 0x6f, 0xc9, 0x46, 0x4c, 0x00, 0x6f, 0xca, 0x42,
3672 0x38, 0x00, 0x6f, 0xd4, 0x15, 0x99, 0x00, 0x6f,
3673 0xd5, 0x15, 0x97, 0x00, 0x6f, 0xd8, 0x15, 0x9a,
3674 0x00, 0x6f, 0xda, 0x39, 0x93, 0x00, 0x6f, 0xdb,
3675 0x15, 0x9d, 0x00, 0x6f, 0xde, 0x39, 0x94, 0x00,
3676 0x6f, 0xdf, 0x15, 0x96, 0x00, 0x6f, 0xe0, 0x07,
3677 0xfc, 0x00, 0x6f, 0xe1, 0x0c, 0xde, 0x00, 0x6f,
3678 0xe4, 0x15, 0x36, 0x00, 0x6f, 0xe8, 0x55, 0x99,
3679 0x00, 0x6f, 0xe9, 0x46, 0x4d, 0x00, 0x6f, 0xeb,
3680 0x0f, 0x5e, 0x00, 0x6f, 0xec, 0x15, 0x98, 0x00,
3681 0x6f, 0xee, 0x15, 0x9c, 0x00, 0x6f, 0xef, 0x0b,
3682 0x55, 0x00, 0x6f, 0xf0, 0x42, 0x39, 0x00, 0x6f,
3683 0xf1, 0x15, 0x9b, 0x00, 0x6f, 0xf3, 0x15, 0x86,
3684 0x00, 0x6f, 0xf5, 0x21, 0x53, 0x00, 0x6f, 0xf6,
3685 0x1b, 0xa4, 0x00, 0x6f, 0xf9, 0x3c, 0x23, 0x00,
3686 0x6f, 0xfa, 0x15, 0xa0, 0x00, 0x6f, 0xfc, 0x46,
3687 0x4f, 0x00, 0x6f, 0xfd, 0x55, 0x9a, 0x00, 0x6f,
3688 0xfe, 0x15, 0xa4, 0x00, 0x70, 0x00, 0x46, 0x50,
3689 0x00, 0x70, 0x01, 0x15, 0xa2, 0x00, 0x70, 0x05,
3690 0x21, 0x54, 0x00, 0x70, 0x06, 0x1e, 0x50, 0x00,
3691 0x70, 0x07, 0x21, 0x55, 0x00, 0x70, 0x09, 0x15,
3692 0x9e, 0x00, 0x70, 0x0a, 0x46, 0x51, 0x00, 0x70,
3693 0x0b, 0x15, 0x9f, 0x00, 0x70, 0x0d, 0x4c, 0x37,
3694 0x00, 0x70, 0x0f, 0x15, 0xa3, 0x00, 0x70, 0x11,
3695 0x15, 0xa1, 0x00, 0x70, 0x15, 0x0d, 0xc0, 0x00,
3696 0x70, 0x17, 0x55, 0x9b, 0x00, 0x70, 0x18, 0x15,
3697 0xa9, 0x00, 0x70, 0x1a, 0x15, 0xa6, 0x00, 0x70,
3698 0x1b, 0x15, 0xa5, 0x00, 0x70, 0x1d, 0x15, 0xa8,
3699 0x00, 0x70, 0x1e, 0x0c, 0xac, 0x00, 0x70, 0x1f,
3700 0x15, 0xaa, 0x00, 0x70, 0x20, 0x4c, 0x38, 0x00,
3701 0x70, 0x23, 0x46, 0x52, 0x00, 0x70, 0x26, 0x0b,
3702 0xb3, 0x00, 0x70, 0x27, 0x0b, 0x4d, 0x00, 0x70,
3703 0x28, 0x21, 0x56, 0x00, 0x70, 0x2c, 0x0a, 0x49,
3704 0x00, 0x70, 0x2f, 0x55, 0x9c, 0x00, 0x70, 0x30,
3705 0x15, 0xab, 0x00, 0x70, 0x32, 0x15, 0xad, 0x00,
3706 0x70, 0x34, 0x55, 0x9d, 0x00, 0x70, 0x37, 0x55,
3707 0x9e, 0x00, 0x70, 0x39, 0x39, 0x96, 0x00, 0x70,
3708 0x3a, 0x46, 0x54, 0x00, 0x70, 0x3c, 0x39, 0x97,
3709 0x00, 0x70, 0x3e, 0x15, 0xac, 0x00, 0x70, 0x43,
3710 0x46, 0x55, 0x00, 0x70, 0x44, 0x55, 0x9f, 0x00,
3711 0x70, 0x47, 0x46, 0x56, 0x00, 0x70, 0x48, 0x55,
3712 0xa0, 0x00, 0x70, 0x49, 0x4c, 0x39, 0x00, 0x70,
3713 0x4a, 0x4f, 0x52, 0x00, 0x70, 0x4b, 0x46, 0x57,
3714 0x00, 0x70, 0x4c, 0x15, 0x72, 0x00, 0x70, 0x4e,
3715 0x42, 0x3a, 0x00, 0x70, 0x51, 0x15, 0xae, 0x00,
3716 0x70, 0x54, 0x39, 0x99, 0x00, 0x70, 0x55, 0x55,
3717 0xa1, 0x00, 0x70, 0x58, 0x0c, 0xbf, 0x00, 0x70,
3718 0x5d, 0x39, 0x9a, 0x00, 0x70, 0x5e, 0x39, 0x9b,
3719 0x00, 0x70, 0x63, 0x15, 0xaf, 0x00, 0x70, 0x64,
3720 0x39, 0x9c, 0x00, 0x70, 0x65, 0x46, 0x59, 0x00,
3721 0x70, 0x69, 0x46, 0x5a, 0x00, 0x70, 0x6b, 0x05,
3722 0x50, 0x00, 0x70, 0x6c, 0x39, 0x9d, 0x00, 0x70,
3723 0x6e, 0x46, 0x5b, 0x00, 0x70, 0x6f, 0x0c, 0x6e,
3724 0x00, 0x70, 0x70, 0x05, 0x83, 0x00, 0x70, 0x75,
3725 0x42, 0x3b, 0x00, 0x70, 0x76, 0x46, 0x5c, 0x00,
3726 0x70, 0x78, 0x06, 0x7e, 0x00, 0x70, 0x7c, 0x09,
3727 0x0a, 0x00, 0x70, 0x7d, 0x08, 0x42, 0x00, 0x70,
3728 0x7e, 0x39, 0x9e, 0x00, 0x70, 0x81, 0x39, 0x9f,
3729 0x00, 0x70, 0x85, 0x21, 0x57, 0x00, 0x70, 0x86,
3730 0x46, 0x5d, 0x00, 0x70, 0x89, 0x0f, 0xcd, 0x00,
3731 0x70, 0x8a, 0x0a, 0x2c, 0x00, 0x70, 0x8e, 0x05,
3732 0x0c, 0x00, 0x70, 0x92, 0x15, 0xb1, 0x00, 0x70,
3733 0x94, 0x55, 0xa2, 0x00, 0x70, 0x95, 0x39, 0xa0,
3734 0x00, 0x70, 0x96, 0x55, 0xa3, 0x00, 0x70, 0x97,
3735 0x46, 0x5e, 0x00, 0x70, 0x98, 0x4c, 0x3a, 0x00,
3736 0x70, 0x99, 0x15, 0xb0, 0x00, 0x70, 0x9b, 0x55,
3737 0xa4, 0x00, 0x70, 0x9f, 0x46, 0x60, 0x00, 0x70,
3738 0xa4, 0x42, 0x3c, 0x00, 0x70, 0xab, 0x21, 0x58,
3739 0x00, 0x70, 0xac, 0x15, 0xb4, 0x00, 0x70, 0xad,
3740 0x0b, 0x78, 0x00, 0x70, 0xae, 0x15, 0xb7, 0x00,
3741 0x70, 0xaf, 0x15, 0xb2, 0x00, 0x70, 0xb0, 0x4c,
3742 0x3b, 0x00, 0x70, 0xb1, 0x46, 0x61, 0x00, 0x70,
3743 0xb3, 0x15, 0xb6, 0x00, 0x70, 0xb4, 0x55, 0xa5,
3744 0x00, 0x70, 0xb7, 0x39, 0xa1, 0x00, 0x70, 0xb8,
3745 0x15, 0xb5, 0x00, 0x70, 0xb9, 0x0c, 0x3a, 0x00,
3746 0x70, 0xba, 0x04, 0x9d, 0x00, 0x70, 0xbb, 0x20,
3747 0xad, 0x00, 0x70, 0xc8, 0x0f, 0xbd, 0x00, 0x70,
3748 0xca, 0x46, 0x64, 0x00, 0x70, 0xcb, 0x15, 0xb9,
3749 0x00, 0x70, 0xcf, 0x04, 0xca, 0x00, 0x70, 0xd1,
3750 0x46, 0x65, 0x00, 0x70, 0xd3, 0x39, 0xa2, 0x00,
3751 0x70, 0xd4, 0x39, 0xa3, 0x00, 0x70, 0xd5, 0x4c,
3752 0x3c, 0x00, 0x70, 0xd6, 0x4c, 0x3d, 0x00, 0x70,
3753 0xd8, 0x39, 0xa4, 0x00, 0x70, 0xd9, 0x15, 0xbb,
3754 0x00, 0x70, 0xdc, 0x39, 0xa5, 0x00, 0x70, 0xdd,
3755 0x15, 0xba, 0x00, 0x70, 0xdf, 0x15, 0xb8, 0x00,
3756 0x70, 0xe4, 0x42, 0x3d, 0x00, 0x70, 0xec, 0x46,
3757 0x63, 0x00, 0x70, 0xf1, 0x15, 0xb3, 0x00, 0x70,
3758 0xf9, 0x0e, 0x51, 0x00, 0x70, 0xfa, 0x55, 0xa6,
3759 0x00, 0x70, 0xfd, 0x15, 0xbd, 0x00, 0x71, 0x03,
3760 0x46, 0x66, 0x00, 0x71, 0x04, 0x21, 0x5a, 0x00,
3761 0x71, 0x05, 0x55, 0xa7, 0x00, 0x71, 0x06, 0x46,
3762 0x67, 0x00, 0x71, 0x07, 0x39, 0xa6, 0x00, 0x71,
3763 0x08, 0x46, 0x68, 0x00, 0x71, 0x09, 0x15, 0xbc,
3764 0x00, 0x71, 0x0b, 0x55, 0xa8, 0x00, 0x71, 0x0c,
3765 0x46, 0x69, 0x00, 0x71, 0x0f, 0x21, 0x59, 0x00,
3766 0x71, 0x14, 0x05, 0x0d, 0x00, 0x71, 0x19, 0x15,
3767 0xbf, 0x00, 0x71, 0x1a, 0x0e, 0x02, 0x00, 0x71,
3768 0x1c, 0x15, 0xbe, 0x00, 0x71, 0x1e, 0x42, 0x3f,
3769 0x00, 0x71, 0x20, 0x39, 0xa7, 0x00, 0x71, 0x21,
3770 0x0e, 0xc1, 0x00, 0x71, 0x26, 0x09, 0xaf, 0x00,
3771 0x71, 0x2b, 0x42, 0x3e, 0x00, 0x71, 0x2d, 0x55,
3772 0xa9, 0x00, 0x71, 0x2e, 0x42, 0x40, 0x00, 0x71,
3773 0x2f, 0x46, 0x6b, 0x00, 0x71, 0x30, 0x1d, 0xdc,
3774 0x00, 0x71, 0x31, 0x39, 0xa8, 0x00, 0x71, 0x36,
3775 0x0a, 0xb5, 0x00, 0x71, 0x38, 0x55, 0xaa, 0x00,
3776 0x71, 0x3c, 0x09, 0xae, 0x00, 0x71, 0x41, 0x55,
3777 0xab, 0x00, 0x71, 0x45, 0x4c, 0x3e, 0x00, 0x71,
3778 0x46, 0x21, 0x5c, 0x00, 0x71, 0x47, 0x21, 0x5d,
3779 0x00, 0x71, 0x49, 0x1e, 0x82, 0x00, 0x71, 0x4a,
3780 0x39, 0xa9, 0x00, 0x71, 0x4b, 0x55, 0xac, 0x00,
3781 0x71, 0x4c, 0x15, 0xc5, 0x00, 0x71, 0x4e, 0x0a,
3782 0x9d, 0x00, 0x71, 0x50, 0x46, 0x6c, 0x00, 0x71,
3783 0x51, 0x42, 0x41, 0x00, 0x71, 0x52, 0x39, 0xaa,
3784 0x00, 0x71, 0x53, 0x46, 0x6d, 0x00, 0x71, 0x55,
3785 0x15, 0xc1, 0x00, 0x71, 0x56, 0x15, 0xc6, 0x00,
3786 0x71, 0x57, 0x55, 0xae, 0x00, 0x71, 0x59, 0x05,
3787 0x0e, 0x00, 0x71, 0x5a, 0x55, 0xaf, 0x00, 0x71,
3788 0x5c, 0x21, 0x5b, 0x00, 0x71, 0x5e, 0x46, 0x6e,
3789 0x00, 0x71, 0x60, 0x39, 0xab, 0x00, 0x71, 0x62,
3790 0x15, 0xc4, 0x00, 0x71, 0x64, 0x0d, 0x17, 0x00,
3791 0x71, 0x65, 0x15, 0xc0, 0x00, 0x71, 0x66, 0x15,
3792 0xc3, 0x00, 0x71, 0x67, 0x09, 0xb0, 0x00, 0x71,
3793 0x68, 0x42, 0x42, 0x00, 0x71, 0x69, 0x0d, 0x65,
3794 0x00, 0x71, 0x6c, 0x15, 0xc7, 0x00, 0x71, 0x6e,
3795 0x34, 0x23, 0x00, 0x71, 0x79, 0x39, 0xac, 0x00,
3796 0x71, 0x7d, 0x0a, 0x9e, 0x00, 0x71, 0x80, 0x46,
3797 0x71, 0x00, 0x71, 0x84, 0x15, 0xca, 0x00, 0x71,
3798 0x85, 0x42, 0x43, 0x00, 0x71, 0x87, 0x42, 0x44,
3799 0x00, 0x71, 0x88, 0x15, 0xc2, 0x00, 0x71, 0x8a,
3800 0x06, 0xfd, 0x00, 0x71, 0x8c, 0x55, 0xb0, 0x00,
3801 0x71, 0x8f, 0x15, 0xc8, 0x00, 0x71, 0x92, 0x39,
3802 0xad, 0x00, 0x71, 0x94, 0x0f, 0x3a, 0x00, 0x71,
3803 0x95, 0x15, 0xcb, 0x00, 0x71, 0x96, 0x46, 0x70,
3804 0x00, 0x71, 0x99, 0x20, 0x5d, 0x00, 0x71, 0x9a,
3805 0x55, 0xb1, 0x00, 0x71, 0x9b, 0x46, 0x72, 0x00,
3806 0x71, 0x9f, 0x09, 0x59, 0x00, 0x71, 0xa0, 0x46,
3807 0x73, 0x00, 0x71, 0xa2, 0x46, 0x74, 0x00, 0x71,
3808 0xa8, 0x15, 0xcc, 0x00, 0x71, 0xac, 0x15, 0xcd,
3809 0x00, 0x71, 0xae, 0x46, 0x75, 0x00, 0x71, 0xaf,
3810 0x46, 0x76, 0x00, 0x71, 0xb0, 0x55, 0xb2, 0x00,
3811 0x71, 0xb1, 0x0c, 0xe4, 0x00, 0x71, 0xb2, 0x4c,
3812 0x3f, 0x00, 0x71, 0xb3, 0x3c, 0x25, 0x00, 0x71,
3813 0xb9, 0x15, 0xcf, 0x00, 0x71, 0xba, 0x42, 0x45,
3814 0x00, 0x71, 0xbe, 0x15, 0xd0, 0x00, 0x71, 0xbf,
3815 0x55, 0xb3, 0x00, 0x71, 0xc0, 0x55, 0xb4, 0x00,
3816 0x71, 0xc1, 0x21, 0x5f, 0x00, 0x71, 0xc3, 0x0c,
3817 0xe9, 0x00, 0x71, 0xc4, 0x42, 0x46, 0x00, 0x71,
3818 0xc8, 0x0c, 0x6f, 0x00, 0x71, 0xc9, 0x15, 0xd2,
3819 0x00, 0x71, 0xcb, 0x39, 0xaf, 0x00, 0x71, 0xcc,
3820 0x55, 0xb5, 0x00, 0x71, 0xce, 0x15, 0xd4, 0x00,
3821 0x71, 0xd0, 0x0f, 0x9d, 0x00, 0x71, 0xd2, 0x15,
3822 0xd1, 0x00, 0x71, 0xd3, 0x39, 0xb0, 0x00, 0x71,
3823 0xd4, 0x15, 0xd3, 0x00, 0x71, 0xd5, 0x05, 0x0f,
3824 0x00, 0x71, 0xd6, 0x39, 0xb1, 0x00, 0x71, 0xd7,
3825 0x15, 0xce, 0x00, 0x71, 0xd9, 0x46, 0x78, 0x00,
3826 0x71, 0xda, 0x55, 0xb6, 0x00, 0x71, 0xdc, 0x46,
3827 0x79, 0x00, 0x71, 0xdf, 0x11, 0x4e, 0x00, 0x71,
3828 0xe0, 0x15, 0xd5, 0x00, 0x71, 0xe5, 0x0a, 0xe9,
3829 0x00, 0x71, 0xe6, 0x08, 0x86, 0x00, 0x71, 0xe7,
3830 0x15, 0xd7, 0x00, 0x71, 0xec, 0x15, 0xd6, 0x00,
3831 0x71, 0xed, 0x09, 0xea, 0x00, 0x71, 0xee, 0x10,
3832 0xee, 0x00, 0x71, 0xf4, 0x4c, 0x40, 0x00, 0x71,
3833 0xf5, 0x15, 0xd8, 0x00, 0x71, 0xf8, 0x55, 0xb7,
3834 0x00, 0x71, 0xf9, 0x15, 0xda, 0x00, 0x71, 0xfb,
3835 0x15, 0xc9, 0x00, 0x71, 0xfc, 0x15, 0xd9, 0x00,
3836 0x71, 0xfe, 0x21, 0x60, 0x00, 0x71, 0xff, 0x15,
3837 0xdb, 0x00, 0x72, 0x00, 0x39, 0xb2, 0x00, 0x72,
3838 0x06, 0x0d, 0x30, 0x00, 0x72, 0x07, 0x46, 0x7a,
3839 0x00, 0x72, 0x08, 0x55, 0xb8, 0x00, 0x72, 0x09,
3840 0x55, 0xb9, 0x00, 0x72, 0x0d, 0x15, 0xdc, 0x00,
3841 0x72, 0x10, 0x15, 0xdd, 0x00, 0x72, 0x13, 0x55,
3842 0xba, 0x00, 0x72, 0x15, 0x42, 0x47, 0x00, 0x72,
3843 0x17, 0x4c, 0x41, 0x00, 0x72, 0x1a, 0x55, 0xbb,
3844 0x00, 0x72, 0x1b, 0x15, 0xde, 0x00, 0x72, 0x1d,
3845 0x39, 0xb3, 0x00, 0x72, 0x1f, 0x4c, 0x42, 0x00,
3846 0x72, 0x24, 0x55, 0xbc, 0x00, 0x72, 0x28, 0x1e,
3847 0x9f, 0x00, 0x72, 0x2a, 0x0b, 0xfa, 0x00, 0x72,
3848 0x2b, 0x39, 0xb4, 0x00, 0x72, 0x2c, 0x15, 0xe1,
3849 0x00, 0x72, 0x2d, 0x15, 0xe0, 0x00, 0x72, 0x2f,
3850 0x55, 0xbd, 0x00, 0x72, 0x30, 0x15, 0xe2, 0x00,
3851 0x72, 0x32, 0x15, 0xe3, 0x00, 0x72, 0x34, 0x46,
3852 0x7c, 0x00, 0x72, 0x35, 0x35, 0xf1, 0x00, 0x72,
3853 0x36, 0x0d, 0xd5, 0x00, 0x72, 0x38, 0x39, 0xb5,
3854 0x00, 0x72, 0x39, 0x46, 0x7d, 0x00, 0x72, 0x3a,
3855 0x0e, 0xf8, 0x00, 0x72, 0x3b, 0x15, 0xe4, 0x00,
3856 0x72, 0x3c, 0x15, 0xe5, 0x00, 0x72, 0x3d, 0x0a,
3857 0xd8, 0x00, 0x72, 0x3e, 0x08, 0xd0, 0x00, 0x72,
3858 0x3f, 0x15, 0xe6, 0x00, 0x72, 0x40, 0x15, 0xe7,
3859 0x00, 0x72, 0x41, 0x39, 0xb6, 0x00, 0x72, 0x42,
3860 0x46, 0x7e, 0x00, 0x72, 0x43, 0x4c, 0x43, 0x00,
3861 0x72, 0x45, 0x55, 0xbe, 0x00, 0x72, 0x46, 0x15,
3862 0xe8, 0x00, 0x72, 0x47, 0x0e, 0x22, 0x00, 0x72,
3863 0x48, 0x0d, 0x5b, 0x00, 0x72, 0x4b, 0x15, 0xe9,
3864 0x00, 0x72, 0x4c, 0x0d, 0x0d, 0x00, 0x72, 0x4e,
3865 0x55, 0xbf, 0x00, 0x72, 0x4f, 0x4c, 0x44, 0x00,
3866 0x72, 0x50, 0x4c, 0x45, 0x00, 0x72, 0x52, 0x0b,
3867 0xc9, 0x00, 0x72, 0x53, 0x39, 0xb7, 0x00, 0x72,
3868 0x55, 0x39, 0xb8, 0x00, 0x72, 0x56, 0x39, 0xb9,
3869 0x00, 0x72, 0x57, 0x46, 0x7f, 0x00, 0x72, 0x58,
3870 0x15, 0xea, 0x00, 0x72, 0x59, 0x05, 0x67, 0x00,
3871 0x72, 0x5a, 0x4c, 0x46, 0x00, 0x72, 0x5b, 0x06,
3872 0x87, 0x00, 0x72, 0x5c, 0x39, 0xba, 0x00, 0x72,
3873 0x5d, 0x0e, 0xd2, 0x00, 0x72, 0x5e, 0x55, 0xc0,
3874 0x00, 0x72, 0x5f, 0x0e, 0xc2, 0x00, 0x72, 0x60,
3875 0x4c, 0x47, 0x00, 0x72, 0x61, 0x05, 0x34, 0x00,
3876 0x72, 0x62, 0x0f, 0xda, 0x00, 0x72, 0x63, 0x46,
3877 0x80, 0x00, 0x72, 0x67, 0x0e, 0x80, 0x00, 0x72,
3878 0x68, 0x4c, 0x48, 0x00, 0x72, 0x69, 0x0d, 0xfa,
3879 0x00, 0x72, 0x6b, 0x55, 0xc1, 0x00, 0x72, 0x6e,
3880 0x46, 0x82, 0x00, 0x72, 0x6f, 0x46, 0x83, 0x00,
3881 0x72, 0x71, 0x55, 0xc2, 0x00, 0x72, 0x72, 0x0a,
3882 0x5b, 0x00, 0x72, 0x74, 0x15, 0xeb, 0x00, 0x72,
3883 0x77, 0x4c, 0x49, 0x00, 0x72, 0x78, 0x46, 0x84,
3884 0x00, 0x72, 0x79, 0x0c, 0x9b, 0x00, 0x72, 0x7b,
3885 0x55, 0xc3, 0x00, 0x72, 0x7c, 0x55, 0xc4, 0x00,
3886 0x72, 0x7d, 0x07, 0x57, 0x00, 0x72, 0x7e, 0x15,
3887 0xec, 0x00, 0x72, 0x7f, 0x46, 0x85, 0x00, 0x72,
3888 0x80, 0x08, 0x44, 0x00, 0x72, 0x81, 0x15, 0xee,
3889 0x00, 0x72, 0x82, 0x15, 0xed, 0x00, 0x72, 0x84,
3890 0x4c, 0x4a, 0x00, 0x72, 0x87, 0x15, 0xef, 0x00,
3891 0x72, 0x89, 0x55, 0xc5, 0x00, 0x72, 0x8d, 0x39,
3892 0xbb, 0x00, 0x72, 0x8e, 0x46, 0x86, 0x00, 0x72,
3893 0x92, 0x15, 0xf0, 0x00, 0x72, 0x93, 0x55, 0xc6,
3894 0x00, 0x72, 0x96, 0x15, 0xf1, 0x00, 0x72, 0x9b,
3895 0x42, 0x49, 0x00, 0x72, 0xa0, 0x06, 0x58, 0x00,
3896 0x72, 0xa2, 0x15, 0xf2, 0x00, 0x72, 0xa7, 0x15,
3897 0xf3, 0x00, 0x72, 0xa8, 0x55, 0xc7, 0x00, 0x72,
3898 0xac, 0x07, 0x58, 0x00, 0x72, 0xad, 0x39, 0xbc,
3899 0x00, 0x72, 0xae, 0x46, 0x88, 0x00, 0x72, 0xaf,
3900 0x0d, 0x5c, 0x00, 0x72, 0xb0, 0x46, 0x89, 0x00,
3901 0x72, 0xb1, 0x21, 0x61, 0x00, 0x72, 0xb2, 0x15,
3902 0xf5, 0x00, 0x72, 0xb4, 0x39, 0xbd, 0x00, 0x72,
3903 0xb6, 0x09, 0xdd, 0x00, 0x72, 0xb9, 0x15, 0xf4,
3904 0x00, 0x72, 0xbe, 0x21, 0x62, 0x00, 0x72, 0xc0,
3905 0x34, 0x2b, 0x00, 0x72, 0xc1, 0x46, 0x8a, 0x00,
3906 0x72, 0xc2, 0x06, 0xb0, 0x00, 0x72, 0xc3, 0x15,
3907 0xf6, 0x00, 0x72, 0xc4, 0x15, 0xf8, 0x00, 0x72,
3908 0xc6, 0x15, 0xf7, 0x00, 0x72, 0xc7, 0x39, 0xbe,
3909 0x00, 0x72, 0xc9, 0x4c, 0x4b, 0x00, 0x72, 0xcc,
3910 0x46, 0x8c, 0x00, 0x72, 0xce, 0x15, 0xf9, 0x00,
3911 0x72, 0xd0, 0x07, 0x85, 0x00, 0x72, 0xd2, 0x15,
3912 0xfa, 0x00, 0x72, 0xd5, 0x55, 0xc8, 0x00, 0x72,
3913 0xd6, 0x55, 0xc9, 0x00, 0x72, 0xd7, 0x06, 0xe1,
3914 0x00, 0x72, 0xd8, 0x55, 0xca, 0x00, 0x72, 0xd9,
3915 0x0a, 0xc2, 0x00, 0x72, 0xdb, 0x08, 0x0f, 0x00,
3916 0x72, 0xdf, 0x55, 0xcb, 0x00, 0x72, 0xe0, 0x15,
3917 0xfc, 0x00, 0x72, 0xe1, 0x15, 0xfd, 0x00, 0x72,
3918 0xe2, 0x15, 0xfb, 0x00, 0x72, 0xe5, 0x4c, 0x4c,
3919 0x00, 0x72, 0xe9, 0x09, 0x19, 0x00, 0x72, 0xec,
3920 0x0c, 0xa0, 0x00, 0x72, 0xed, 0x06, 0xb1, 0x00,
3921 0x72, 0xf3, 0x46, 0x8f, 0x00, 0x72, 0xf4, 0x4c,
3922 0x4d, 0x00, 0x72, 0xf7, 0x15, 0xff, 0x00, 0x72,
3923 0xf8, 0x0b, 0x6a, 0x00, 0x72, 0xf9, 0x15, 0xfe,
3924 0x00, 0x72, 0xfa, 0x46, 0x90, 0x00, 0x72, 0xfb,
3925 0x39, 0xbf, 0x00, 0x72, 0xfc, 0x0f, 0xdb, 0x00,
3926 0x72, 0xfd, 0x0d, 0x18, 0x00, 0x72, 0xfe, 0x55,
3927 0xcc, 0x00, 0x73, 0x02, 0x4c, 0x4e, 0x00, 0x73,
3928 0x04, 0x39, 0xc0, 0x00, 0x73, 0x05, 0x39, 0xc1,
3929 0x00, 0x73, 0x07, 0x46, 0x91, 0x00, 0x73, 0x0a,
3930 0x16, 0x02, 0x00, 0x73, 0x0b, 0x4c, 0x4f, 0x00,
3931 0x73, 0x0d, 0x55, 0xcd, 0x00, 0x73, 0x12, 0x46,
3932 0x92, 0x00, 0x73, 0x13, 0x55, 0xce, 0x00, 0x73,
3933 0x16, 0x16, 0x04, 0x00, 0x73, 0x17, 0x16, 0x01,
3934 0x00, 0x73, 0x18, 0x46, 0x93, 0x00, 0x73, 0x19,
3935 0x46, 0x94, 0x00, 0x73, 0x1b, 0x0e, 0xe0, 0x00,
3936 0x73, 0x1c, 0x16, 0x03, 0x00, 0x73, 0x1d, 0x16,
3937 0x05, 0x00, 0x73, 0x1e, 0x4c, 0x50, 0x00, 0x73,
3938 0x1f, 0x0f, 0x8c, 0x00, 0x73, 0x22, 0x4c, 0x51,
3939 0x00, 0x73, 0x24, 0x21, 0x63, 0x00, 0x73, 0x25,
3940 0x16, 0x09, 0x00, 0x73, 0x27, 0x42, 0x4b, 0x00,
3941 0x73, 0x28, 0x39, 0xc2, 0x00, 0x73, 0x29, 0x16,
3942 0x08, 0x00, 0x73, 0x2a, 0x21, 0x64, 0x00, 0x73,
3943 0x2b, 0x0c, 0xe3, 0x00, 0x73, 0x2c, 0x46, 0x97,
3944 0x00, 0x73, 0x2e, 0x07, 0x59, 0x00, 0x73, 0x2f,
3945 0x16, 0x07, 0x00, 0x73, 0x31, 0x39, 0xc3, 0x00,
3946 0x73, 0x32, 0x55, 0xcf, 0x00, 0x73, 0x33, 0x46,
3947 0x98, 0x00, 0x73, 0x34, 0x16, 0x06, 0x00, 0x73,
3948 0x35, 0x55, 0xd0, 0x00, 0x73, 0x36, 0x0f, 0x1b,
3949 0x00, 0x73, 0x37, 0x0f, 0x1c, 0x00, 0x73, 0x39,
3950 0x46, 0x96, 0x00, 0x73, 0x3a, 0x4c, 0x52, 0x00,
3951 0x73, 0x3b, 0x4c, 0x53, 0x00, 0x73, 0x3d, 0x46,
3952 0x99, 0x00, 0x73, 0x3e, 0x16, 0x0a, 0x00, 0x73,
3953 0x3f, 0x05, 0x10, 0x00, 0x73, 0x43, 0x39, 0xc4,
3954 0x00, 0x73, 0x44, 0x08, 0x08, 0x00, 0x73, 0x45,
3955 0x08, 0xb0, 0x00, 0x73, 0x4d, 0x4c, 0x54, 0x00,
3956 0x73, 0x4e, 0x16, 0x0b, 0x00, 0x73, 0x4f, 0x16,
3957 0x0c, 0x00, 0x73, 0x50, 0x42, 0x4c, 0x00, 0x73,
3958 0x52, 0x46, 0x9a, 0x00, 0x73, 0x56, 0x55, 0xd1,
3959 0x00, 0x73, 0x57, 0x16, 0x0e, 0x00, 0x73, 0x58,
3960 0x4c, 0x55, 0x00, 0x73, 0x5d, 0x55, 0xd2, 0x00,
3961 0x73, 0x5e, 0x55, 0xd3, 0x00, 0x73, 0x5f, 0x55,
3962 0xd4, 0x00, 0x73, 0x60, 0x55, 0xd5, 0x00, 0x73,
3963 0x63, 0x09, 0x4d, 0x00, 0x73, 0x66, 0x42, 0x4d,
3964 0x00, 0x73, 0x67, 0x4c, 0x56, 0x00, 0x73, 0x68,
3965 0x16, 0x10, 0x00, 0x73, 0x69, 0x55, 0xd6, 0x00,
3966 0x73, 0x6a, 0x16, 0x0f, 0x00, 0x73, 0x6b, 0x46,
3967 0x9c, 0x00, 0x73, 0x6c, 0x39, 0xc5, 0x00, 0x73,
3968 0x6e, 0x46, 0x9e, 0x00, 0x73, 0x6f, 0x46, 0x9f,
3969 0x00, 0x73, 0x70, 0x16, 0x11, 0x00, 0x73, 0x71,
3970 0x46, 0xa0, 0x00, 0x73, 0x72, 0x05, 0xab, 0x00,
3971 0x73, 0x75, 0x16, 0x13, 0x00, 0x73, 0x77, 0x21,
3972 0x65, 0x00, 0x73, 0x78, 0x16, 0x12, 0x00, 0x73,
3973 0x79, 0x55, 0xd7, 0x00, 0x73, 0x7a, 0x16, 0x15,
3974 0x00, 0x73, 0x7b, 0x16, 0x14, 0x00, 0x73, 0x7c,
3975 0x39, 0xc6, 0x00, 0x73, 0x80, 0x55, 0xd8, 0x00,
3976 0x73, 0x81, 0x46, 0xa1, 0x00, 0x73, 0x83, 0x39,
3977 0xc7, 0x00, 0x73, 0x84, 0x07, 0x70, 0x00, 0x73,
3978 0x85, 0x39, 0xc8, 0x00, 0x73, 0x86, 0x39, 0xc9,
3979 0x00, 0x73, 0x87, 0x0f, 0x70, 0x00, 0x73, 0x89,
3980 0x06, 0xc4, 0x00, 0x73, 0x8a, 0x46, 0xa2, 0x00,
3981 0x73, 0x8b, 0x05, 0x26, 0x00, 0x73, 0x8e, 0x55,
3982 0xd9, 0x00, 0x73, 0x90, 0x55, 0xda, 0x00, 0x73,
3983 0x93, 0x55, 0xdb, 0x00, 0x73, 0x94, 0x46, 0xa3,
3984 0x00, 0x73, 0x95, 0x39, 0xca, 0x00, 0x73, 0x96,
3985 0x06, 0xe2, 0x00, 0x73, 0x97, 0x55, 0xdc, 0x00,
3986 0x73, 0x98, 0x46, 0xa4, 0x00, 0x73, 0x9c, 0x46,
3987 0xa5, 0x00, 0x73, 0x9e, 0x39, 0xcb, 0x00, 0x73,
3988 0x9f, 0x39, 0xcc, 0x00, 0x73, 0xa0, 0x39, 0xcd,
3989 0x00, 0x73, 0xa2, 0x42, 0x4e, 0x00, 0x73, 0xa5,
3990 0x46, 0xa6, 0x00, 0x73, 0xa6, 0x39, 0xce, 0x00,
3991 0x73, 0xa8, 0x3c, 0x3f, 0x00, 0x73, 0xa9, 0x06,
3992 0x1d, 0x00, 0x73, 0xaa, 0x55, 0xdd, 0x00, 0x73,
3993 0xab, 0x39, 0xcf, 0x00, 0x73, 0xad, 0x55, 0xde,
3994 0x00, 0x73, 0xb2, 0x0f, 0xb0, 0x00, 0x73, 0xb3,
3995 0x16, 0x17, 0x00, 0x73, 0xb5, 0x39, 0xd0, 0x00,
3996 0x73, 0xb7, 0x39, 0xd1, 0x00, 0x73, 0xb9, 0x46,
3997 0xa7, 0x00, 0x73, 0xba, 0x35, 0xea, 0x00, 0x73,
3998 0xbb, 0x16, 0x19, 0x00, 0x73, 0xbc, 0x39, 0xd2,
3999 0x00, 0x73, 0xbd, 0x21, 0x66, 0x00, 0x73, 0xbf,
4000 0x46, 0xa8, 0x00, 0x73, 0xc0, 0x16, 0x1a, 0x00,
4001 0x73, 0xc2, 0x05, 0x51, 0x00, 0x73, 0xc5, 0x46,
4002 0xa9, 0x00, 0x73, 0xc6, 0x55, 0xdf, 0x00, 0x73,
4003 0xc8, 0x16, 0x16, 0x00, 0x73, 0xc9, 0x21, 0x67,
4004 0x00, 0x73, 0xca, 0x08, 0x87, 0x00, 0x73, 0xcb,
4005 0x46, 0xaa, 0x00, 0x73, 0xcc, 0x55, 0xe0, 0x00,
4006 0x73, 0xcd, 0x0b, 0xdd, 0x00, 0x73, 0xce, 0x16,
4007 0x18, 0x00, 0x73, 0xcf, 0x39, 0xd3, 0x00, 0x73,
4008 0xd2, 0x21, 0x6a, 0x00, 0x73, 0xd3, 0x55, 0xe1,
4009 0x00, 0x73, 0xd6, 0x21, 0x68, 0x00, 0x73, 0xd9,
4010 0x39, 0xd4, 0x00, 0x73, 0xdd, 0x55, 0xe2, 0x00,
4011 0x73, 0xde, 0x16, 0x1d, 0x00, 0x73, 0xe0, 0x09,
4012 0x1a, 0x00, 0x73, 0xe1, 0x46, 0xab, 0x00, 0x73,
4013 0xe3, 0x21, 0x69, 0x00, 0x73, 0xe4, 0x3c, 0x39,
4014 0x00, 0x73, 0xe5, 0x16, 0x1b, 0x00, 0x73, 0xe6,
4015 0x55, 0xe3, 0x00, 0x73, 0xe7, 0x46, 0xac, 0x00,
4016 0x73, 0xe9, 0x39, 0xd5, 0x00, 0x73, 0xea, 0x07,
4017 0x14, 0x00, 0x73, 0xed, 0x0d, 0x5d, 0x00, 0x73,
4018 0xee, 0x16, 0x1c, 0x00, 0x73, 0xf1, 0x16, 0x37,
4019 0x00, 0x73, 0xf4, 0x39, 0xd6, 0x00, 0x73, 0xf5,
4020 0x21, 0x6c, 0x00, 0x73, 0xf7, 0x55, 0xe4, 0x00,
4021 0x73, 0xf8, 0x16, 0x22, 0x00, 0x73, 0xf9, 0x46,
4022 0xad, 0x00, 0x73, 0xfa, 0x46, 0xaf, 0x00, 0x73,
4023 0xfb, 0x55, 0xe5, 0x00, 0x73, 0xfd, 0x39, 0xd7,
4024 0x00, 0x73, 0xfe, 0x07, 0x71, 0x00, 0x73, 0xff,
4025 0x55, 0xe6, 0x00, 0x74, 0x00, 0x55, 0xe7, 0x00,
4026 0x74, 0x01, 0x46, 0xb0, 0x00, 0x74, 0x03, 0x06,
4027 0x7f, 0x00, 0x74, 0x04, 0x39, 0xd8, 0x00, 0x74,
4028 0x05, 0x16, 0x1f, 0x00, 0x74, 0x06, 0x0f, 0x67,
4029 0x00, 0x74, 0x07, 0x21, 0x6b, 0x00, 0x74, 0x09,
4030 0x0f, 0x78, 0x00, 0x74, 0x0a, 0x39, 0xd9, 0x00,
4031 0x74, 0x11, 0x55, 0xe8, 0x00, 0x74, 0x13, 0x46,
4032 0xae, 0x00, 0x74, 0x1a, 0x39, 0xda, 0x00, 0x74,
4033 0x1b, 0x39, 0xdb, 0x00, 0x74, 0x21, 0x3c, 0x3a,
4034 0x00, 0x74, 0x22, 0x1e, 0x34, 0x00, 0x74, 0x24,
4035 0x39, 0xdc, 0x00, 0x74, 0x25, 0x16, 0x21, 0x00,
4036 0x74, 0x26, 0x21, 0x6d, 0x00, 0x74, 0x28, 0x39,
4037 0xdd, 0x00, 0x74, 0x29, 0x21, 0x6f, 0x00, 0x74,
4038 0x2a, 0x21, 0x6e, 0x00, 0x74, 0x2b, 0x42, 0x4f,
4039 0x00, 0x74, 0x2c, 0x39, 0xde, 0x00, 0x74, 0x2d,
4040 0x55, 0xe9, 0x00, 0x74, 0x2e, 0x21, 0x70, 0x00,
4041 0x74, 0x2f, 0x39, 0xdf, 0x00, 0x74, 0x30, 0x39,
4042 0xe0, 0x00, 0x74, 0x31, 0x39, 0xe1, 0x00, 0x74,
4043 0x32, 0x16, 0x23, 0x00, 0x74, 0x33, 0x0f, 0x9e,
4044 0x00, 0x74, 0x34, 0x06, 0xcf, 0x00, 0x74, 0x35,
4045 0x0d, 0x90, 0x00, 0x74, 0x36, 0x0d, 0x00, 0x00,
4046 0x74, 0x39, 0x39, 0xe2, 0x00, 0x74, 0x3a, 0x16,
4047 0x24, 0x00, 0x74, 0x3f, 0x16, 0x26, 0x00, 0x74,
4048 0x40, 0x46, 0xb2, 0x00, 0x74, 0x41, 0x16, 0x29,
4049 0x00, 0x74, 0x43, 0x46, 0xb3, 0x00, 0x74, 0x44,
4050 0x39, 0xe3, 0x00, 0x74, 0x46, 0x42, 0x50, 0x00,
4051 0x74, 0x47, 0x39, 0xe4, 0x00, 0x74, 0x4b, 0x39,
4052 0xe5, 0x00, 0x74, 0x4d, 0x39, 0xe6, 0x00, 0x74,
4053 0x51, 0x39, 0xe7, 0x00, 0x74, 0x52, 0x46, 0xb4,
4054 0x00, 0x74, 0x53, 0x46, 0xb1, 0x00, 0x74, 0x55,
4055 0x16, 0x25, 0x00, 0x74, 0x57, 0x39, 0xe8, 0x00,
4056 0x74, 0x59, 0x16, 0x28, 0x00, 0x74, 0x5a, 0x07,
4057 0x9e, 0x00, 0x74, 0x5b, 0x04, 0xef, 0x00, 0x74,
4058 0x5c, 0x16, 0x2a, 0x00, 0x74, 0x5d, 0x46, 0xb5,
4059 0x00, 0x74, 0x5e, 0x0a, 0x36, 0x00, 0x74, 0x5f,
4060 0x16, 0x27, 0x00, 0x74, 0x60, 0x0f, 0xa4, 0x00,
4061 0x74, 0x62, 0x42, 0x51, 0x00, 0x74, 0x63, 0x16,
4062 0x2d, 0x00, 0x74, 0x64, 0x1d, 0x35, 0x00, 0x74,
4063 0x66, 0x39, 0xe9, 0x00, 0x74, 0x67, 0x55, 0xea,
4064 0x00, 0x74, 0x68, 0x55, 0xeb, 0x00, 0x74, 0x69,
4065 0x16, 0x2b, 0x00, 0x74, 0x6a, 0x16, 0x2e, 0x00,
4066 0x74, 0x6b, 0x39, 0xea, 0x00, 0x74, 0x6d, 0x42,
4067 0x52, 0x00, 0x74, 0x6e, 0x55, 0xec, 0x00, 0x74,
4068 0x6f, 0x16, 0x20, 0x00, 0x74, 0x70, 0x16, 0x2c,
4069 0x00, 0x74, 0x71, 0x39, 0xeb, 0x00, 0x74, 0x72,
4070 0x4c, 0x57, 0x00, 0x74, 0x73, 0x08, 0x2c, 0x00,
4071 0x74, 0x76, 0x16, 0x2f, 0x00, 0x74, 0x7e, 0x16,
4072 0x30, 0x00, 0x74, 0x80, 0x39, 0xec, 0x00, 0x74,
4073 0x81, 0x46, 0xb6, 0x00, 0x74, 0x83, 0x0f, 0x68,
4074 0x00, 0x74, 0x85, 0x39, 0xed, 0x00, 0x74, 0x86,
4075 0x39, 0xee, 0x00, 0x74, 0x87, 0x39, 0xef, 0x00,
4076 0x74, 0x88, 0x46, 0xb7, 0x00, 0x74, 0x89, 0x21,
4077 0x72, 0x00, 0x74, 0x8b, 0x16, 0x31, 0x00, 0x74,
4078 0x8f, 0x55, 0xed, 0x00, 0x74, 0x90, 0x39, 0xf0,
4079 0x00, 0x74, 0x91, 0x55, 0xee, 0x00, 0x74, 0x92,
4080 0x46, 0xb9, 0x00, 0x74, 0x97, 0x46, 0xba, 0x00,
4081 0x74, 0x98, 0x39, 0xf1, 0x00, 0x74, 0x99, 0x46,
4082 0xbb, 0x00, 0x74, 0x9a, 0x55, 0xef, 0x00, 0x74,
4083 0x9c, 0x39, 0xf2, 0x00, 0x74, 0x9e, 0x16, 0x32,
4084 0x00, 0x74, 0x9f, 0x21, 0x73, 0x00, 0x74, 0xa0,
4085 0x39, 0xf3, 0x00, 0x74, 0xa1, 0x46, 0xbc, 0x00,
4086 0x74, 0xa2, 0x16, 0x1e, 0x00, 0x74, 0xa3, 0x39,
4087 0xf4, 0x00, 0x74, 0xa5, 0x46, 0xbd, 0x00, 0x74,
4088 0xa6, 0x42, 0x53, 0x00, 0x74, 0xa7, 0x16, 0x33,
4089 0x00, 0x74, 0xa8, 0x39, 0xf5, 0x00, 0x74, 0xa9,
4090 0x42, 0x54, 0x00, 0x74, 0xaa, 0x46, 0xbe, 0x00,
4091 0x74, 0xab, 0x39, 0xf6, 0x00, 0x74, 0xae, 0x55,
4092 0xf0, 0x00, 0x74, 0xaf, 0x4c, 0x58, 0x00, 0x74,
4093 0xb0, 0x06, 0x00, 0x00, 0x74, 0xb1, 0x55, 0xf1,
4094 0x00, 0x74, 0xb2, 0x55, 0xf2, 0x00, 0x74, 0xb5,
4095 0x39, 0xf7, 0x00, 0x74, 0xb9, 0x46, 0xbf, 0x00,
4096 0x74, 0xba, 0x46, 0xc1, 0x00, 0x74, 0xbb, 0x46,
4097 0xc0, 0x00, 0x74, 0xbd, 0x08, 0xd1, 0x00, 0x74,
4098 0xbf, 0x39, 0xf8, 0x00, 0x74, 0xc8, 0x39, 0xf9,
4099 0x00, 0x74, 0xc9, 0x42, 0x55, 0x00, 0x74, 0xca,
4100 0x16, 0x34, 0x00, 0x74, 0xcc, 0x55, 0xf3, 0x00,
4101 0x74, 0xcf, 0x16, 0x35, 0x00, 0x74, 0xd0, 0x55,
4102 0xf4, 0x00, 0x74, 0xd3, 0x55, 0xf5, 0x00, 0x74,
4103 0xd4, 0x16, 0x36, 0x00, 0x74, 0xd6, 0x46, 0xc2,
4104 0x00, 0x74, 0xd8, 0x46, 0xc3, 0x00, 0x74, 0xda,
4105 0x39, 0xfa, 0x00, 0x74, 0xdb, 0x55, 0xf7, 0x00,
4106 0x74, 0xdc, 0x04, 0xdd, 0x00, 0x74, 0xde, 0x39,
4107 0xfb, 0x00, 0x74, 0xdf, 0x4c, 0x59, 0x00, 0x74,
4108 0xe0, 0x16, 0x38, 0x00, 0x74, 0xe2, 0x0d, 0xad,
4109 0x00, 0x74, 0xe3, 0x16, 0x39, 0x00, 0x74, 0xe4,
4110 0x4c, 0x5a, 0x00, 0x74, 0xe6, 0x05, 0xe0, 0x00,
4111 0x74, 0xe7, 0x16, 0x3a, 0x00, 0x74, 0xe8, 0x55,
4112 0xf8, 0x00, 0x74, 0xe9, 0x16, 0x3b, 0x00, 0x74,
4113 0xea, 0x55, 0xf9, 0x00, 0x74, 0xeb, 0x46, 0xc4,
4114 0x00, 0x74, 0xee, 0x16, 0x3c, 0x00, 0x74, 0xef,
4115 0x37, 0x50, 0x00, 0x74, 0xf0, 0x16, 0x3e, 0x00,
4116 0x74, 0xf1, 0x16, 0x3f, 0x00, 0x74, 0xf2, 0x16,
4117 0x3d, 0x00, 0x74, 0xf4, 0x4c, 0x5b, 0x00, 0x74,
4118 0xf6, 0x0d, 0xc5, 0x00, 0x74, 0xf7, 0x16, 0x41,
4119 0x00, 0x74, 0xf8, 0x16, 0x40, 0x00, 0x74, 0xfa,
4120 0x46, 0xc6, 0x00, 0x74, 0xfb, 0x4c, 0x5c, 0x00,
4121 0x74, 0xfc, 0x55, 0xfb, 0x00, 0x74, 0xff, 0x42,
4122 0x56, 0x00, 0x75, 0x01, 0x21, 0x74, 0x00, 0x75,
4123 0x03, 0x16, 0x43, 0x00, 0x75, 0x04, 0x16, 0x42,
4124 0x00, 0x75, 0x05, 0x16, 0x44, 0x00, 0x75, 0x06,
4125 0x55, 0xfc, 0x00, 0x75, 0x0c, 0x16, 0x45, 0x00,
4126 0x75, 0x0d, 0x16, 0x47, 0x00, 0x75, 0x0e, 0x16,
4127 0x46, 0x00, 0x75, 0x11, 0x08, 0x0b, 0x00, 0x75,
4128 0x12, 0x55, 0xfd, 0x00, 0x75, 0x13, 0x16, 0x49,
4129 0x00, 0x75, 0x15, 0x16, 0x48, 0x00, 0x75, 0x16,
4130 0x4c, 0x5d, 0x00, 0x75, 0x17, 0x42, 0x57, 0x00,
4131 0x75, 0x18, 0x06, 0x01, 0x00, 0x75, 0x1a, 0x0a,
4132 0x19, 0x00, 0x75, 0x1c, 0x0c, 0x36, 0x00, 0x75,
4133 0x1e, 0x16, 0x4a, 0x00, 0x75, 0x1f, 0x0a, 0x5c,
4134 0x00, 0x75, 0x20, 0x46, 0xc8, 0x00, 0x75, 0x21,
4135 0x4c, 0x5e, 0x00, 0x75, 0x22, 0x35, 0xde, 0x00,
4136 0x75, 0x23, 0x08, 0x88, 0x00, 0x75, 0x24, 0x46,
4137 0xc9, 0x00, 0x75, 0x25, 0x05, 0x1b, 0x00, 0x75,
4138 0x26, 0x16, 0x4b, 0x00, 0x75, 0x27, 0x55, 0xfe,
4139 0x00, 0x75, 0x28, 0x0f, 0x3b, 0x00, 0x75, 0x29,
4140 0x55, 0xff, 0x00, 0x75, 0x2a, 0x46, 0xca, 0x00,
4141 0x75, 0x2b, 0x0e, 0x33, 0x00, 0x75, 0x2c, 0x16,
4142 0x4c, 0x00, 0x75, 0x2f, 0x20, 0xf2, 0x00, 0x75,
4143 0x30, 0x0c, 0x3e, 0x00, 0x75, 0x31, 0x0f, 0x1d,
4144 0x00, 0x75, 0x32, 0x07, 0xd5, 0x00, 0x75, 0x33,
4145 0x0a, 0x03, 0x00, 0x75, 0x36, 0x56, 0x00, 0x00,
4146 0x75, 0x37, 0x0b, 0x89, 0x00, 0x75, 0x38, 0x10,
4147 0xc9, 0x00, 0x75, 0x39, 0x56, 0x01, 0x00, 0x75,
4148 0x3a, 0x0b, 0xca, 0x00, 0x75, 0x3b, 0x05, 0x68,
4149 0x00, 0x75, 0x3c, 0x16, 0x4d, 0x00, 0x75, 0x3d,
4150 0x46, 0xcd, 0x00, 0x75, 0x3e, 0x46, 0xce, 0x00,
4151 0x75, 0x3f, 0x4c, 0x5f, 0x00, 0x75, 0x40, 0x46,
4152 0xcf, 0x00, 0x75, 0x43, 0x56, 0x02, 0x00, 0x75,
4153 0x44, 0x16, 0x4e, 0x00, 0x75, 0x46, 0x16, 0x53,
4154 0x00, 0x75, 0x47, 0x56, 0x03, 0x00, 0x75, 0x48,
4155 0x46, 0xd0, 0x00, 0x75, 0x49, 0x16, 0x51, 0x00,
4156 0x75, 0x4a, 0x16, 0x50, 0x00, 0x75, 0x4b, 0x13,
4157 0xc7, 0x00, 0x75, 0x4c, 0x05, 0x84, 0x00, 0x75,
4158 0x4d, 0x16, 0x4f, 0x00, 0x75, 0x4e, 0x39, 0xfc,
4159 0x00, 0x75, 0x4f, 0x04, 0x9e, 0x00, 0x75, 0x50,
4160 0x46, 0xd1, 0x00, 0x75, 0x51, 0x0d, 0x3e, 0x00,
4161 0x75, 0x52, 0x46, 0xd2, 0x00, 0x75, 0x54, 0x0d,
4162 0x5e, 0x00, 0x75, 0x57, 0x56, 0x04, 0x00, 0x75,
4163 0x59, 0x0f, 0x79, 0x00, 0x75, 0x5a, 0x16, 0x54,
4164 0x00, 0x75, 0x5b, 0x16, 0x52, 0x00, 0x75, 0x5c,
4165 0x0b, 0x9a, 0x00, 0x75, 0x5d, 0x0a, 0x4a, 0x00,
4166 0x75, 0x5e, 0x4c, 0x60, 0x00, 0x75, 0x5f, 0x56,
4167 0x05, 0x00, 0x75, 0x60, 0x0d, 0x3f, 0x00, 0x75,
4168 0x61, 0x56, 0x06, 0x00, 0x75, 0x62, 0x0d, 0x9f,
4169 0x00, 0x75, 0x64, 0x16, 0x56, 0x00, 0x75, 0x65,
4170 0x0f, 0x74, 0x00, 0x75, 0x66, 0x07, 0x23, 0x00,
4171 0x75, 0x67, 0x16, 0x57, 0x00, 0x75, 0x69, 0x16,
4172 0x55, 0x00, 0x75, 0x6a, 0x0d, 0x6a, 0x00, 0x75,
4173 0x6b, 0x16, 0x58, 0x00, 0x75, 0x6c, 0x3c, 0x3b,
4174 0x00, 0x75, 0x6d, 0x16, 0x59, 0x00, 0x75, 0x6f,
4175 0x21, 0x75, 0x00, 0x75, 0x70, 0x04, 0x9f, 0x00,
4176 0x75, 0x71, 0x46, 0xd4, 0x00, 0x75, 0x72, 0x46,
4177 0xd3, 0x00, 0x75, 0x73, 0x09, 0xde, 0x00, 0x75,
4178 0x74, 0x16, 0x5e, 0x00, 0x75, 0x75, 0x37, 0x51,
4179 0x00, 0x75, 0x76, 0x16, 0x5b, 0x00, 0x75, 0x77,
4180 0x0c, 0xc5, 0x00, 0x75, 0x78, 0x16, 0x5a, 0x00,
4181 0x75, 0x79, 0x39, 0xfd, 0x00, 0x75, 0x7a, 0x46,
4182 0xd5, 0x00, 0x75, 0x7b, 0x56, 0x07, 0x00, 0x75,
4183 0x7c, 0x56, 0x08, 0x00, 0x75, 0x7d, 0x46, 0xd6,
4184 0x00, 0x75, 0x7e, 0x46, 0xd7, 0x00, 0x75, 0x7f,
4185 0x06, 0x40, 0x00, 0x75, 0x81, 0x39, 0xfe, 0x00,
4186 0x75, 0x82, 0x16, 0x61, 0x00, 0x75, 0x85, 0x56,
4187 0x09, 0x00, 0x75, 0x86, 0x16, 0x5c, 0x00, 0x75,
4188 0x87, 0x16, 0x5d, 0x00, 0x75, 0x89, 0x16, 0x60,
4189 0x00, 0x75, 0x8a, 0x16, 0x5f, 0x00, 0x75, 0x8b,
4190 0x0d, 0x97, 0x00, 0x75, 0x8c, 0x46, 0xd8, 0x00,
4191 0x75, 0x8e, 0x0a, 0xc4, 0x00, 0x75, 0x8f, 0x0a,
4192 0xc3, 0x00, 0x75, 0x90, 0x39, 0xff, 0x00, 0x75,
4193 0x91, 0x06, 0x59, 0x00, 0x75, 0x92, 0x3a, 0x00,
4194 0x00, 0x75, 0x93, 0x3a, 0x01, 0x00, 0x75, 0x94,
4195 0x16, 0x62, 0x00, 0x75, 0x95, 0x56, 0x0a, 0x00,
4196 0x75, 0x99, 0x4c, 0x61, 0x00, 0x75, 0x9a, 0x16,
4197 0x63, 0x00, 0x75, 0x9c, 0x56, 0x0b, 0x00, 0x75,
4198 0x9d, 0x16, 0x64, 0x00, 0x75, 0xa2, 0x46, 0xda,
4199 0x00, 0x75, 0xa3, 0x16, 0x66, 0x00, 0x75, 0xa4,
4200 0x4c, 0x62, 0x00, 0x75, 0xa5, 0x16, 0x65, 0x00,
4201 0x75, 0xab, 0x04, 0xf8, 0x00, 0x75, 0xb0, 0x46,
4202 0xdc, 0x00, 0x75, 0xb1, 0x16, 0x6e, 0x00, 0x75,
4203 0xb2, 0x0d, 0x7c, 0x00, 0x75, 0xb3, 0x16, 0x68,
4204 0x00, 0x75, 0xb4, 0x3a, 0x02, 0x00, 0x75, 0xb5,
4205 0x16, 0x6a, 0x00, 0x75, 0xb7, 0x46, 0xdd, 0x00,
4206 0x75, 0xb8, 0x16, 0x6c, 0x00, 0x75, 0xb9, 0x0a,
4207 0x04, 0x00, 0x75, 0xba, 0x56, 0x0c, 0x00, 0x75,
4208 0xbc, 0x16, 0x6d, 0x00, 0x75, 0xbd, 0x16, 0x6b,
4209 0x00, 0x75, 0xbe, 0x08, 0xec, 0x00, 0x75, 0xbf,
4210 0x46, 0xde, 0x00, 0x75, 0xc0, 0x46, 0xdf, 0x00,
4211 0x75, 0xc1, 0x4c, 0x63, 0x00, 0x75, 0xc2, 0x16,
4212 0x67, 0x00, 0x75, 0xc3, 0x16, 0x69, 0x00, 0x75,
4213 0xc4, 0x4c, 0x64, 0x00, 0x75, 0xc5, 0x0d, 0xb4,
4214 0x00, 0x75, 0xc6, 0x46, 0xe0, 0x00, 0x75, 0xc7,
4215 0x09, 0xb1, 0x00, 0x75, 0xca, 0x16, 0x70, 0x00,
4216 0x75, 0xcc, 0x4c, 0x65, 0x00, 0x75, 0xcd, 0x16,
4217 0x6f, 0x00, 0x75, 0xce, 0x42, 0x59, 0x00, 0x75,
4218 0xcf, 0x46, 0xe1, 0x00, 0x75, 0xd2, 0x16, 0x71,
4219 0x00, 0x75, 0xd3, 0x46, 0xe2, 0x00, 0x75, 0xd4,
4220 0x08, 0xd2, 0x00, 0x75, 0xd5, 0x08, 0x1f, 0x00,
4221 0x75, 0xd7, 0x4c, 0x66, 0x00, 0x75, 0xd8, 0x0c,
4222 0x71, 0x00, 0x75, 0xd9, 0x16, 0x72, 0x00, 0x75,
4223 0xdb, 0x0b, 0xe7, 0x00, 0x75, 0xdc, 0x4c, 0x67,
4224 0x00, 0x75, 0xdd, 0x46, 0xe3, 0x00, 0x75, 0xde,
4225 0x16, 0x74, 0x00, 0x75, 0xdf, 0x46, 0xe4, 0x00,
4226 0x75, 0xe0, 0x46, 0xe5, 0x00, 0x75, 0xe1, 0x4c,
4227 0x68, 0x00, 0x75, 0xe2, 0x0f, 0x69, 0x00, 0x75,
4228 0xe3, 0x16, 0x73, 0x00, 0x75, 0xe4, 0x3a, 0x03,
4229 0x00, 0x75, 0xe7, 0x46, 0xe6, 0x00, 0x75, 0xe9,
4230 0x0a, 0xeb, 0x00, 0x75, 0xec, 0x37, 0x52, 0x00,
4231 0x75, 0xee, 0x46, 0xe7, 0x00, 0x75, 0xef, 0x4c,
4232 0x69, 0x00, 0x75, 0xf0, 0x16, 0x79, 0x00, 0x75,
4233 0xf1, 0x46, 0xe8, 0x00, 0x75, 0xf2, 0x16, 0x7b,
4234 0x00, 0x75, 0xf3, 0x16, 0x7c, 0x00, 0x75, 0xf4,
4235 0x0b, 0x92, 0x00, 0x75, 0xf9, 0x3a, 0x04, 0x00,
4236 0x75, 0xfa, 0x16, 0x7a, 0x00, 0x75, 0xfc, 0x16,
4237 0x77, 0x00, 0x75, 0xfe, 0x16, 0x75, 0x00, 0x75,
4238 0xff, 0x16, 0x76, 0x00, 0x76, 0x00, 0x3a, 0x05,
4239 0x00, 0x76, 0x01, 0x16, 0x78, 0x00, 0x76, 0x02,
4240 0x42, 0x5a, 0x00, 0x76, 0x03, 0x46, 0xe9, 0x00,
4241 0x76, 0x04, 0x4c, 0x6a, 0x00, 0x76, 0x07, 0x46,
4242 0xeb, 0x00, 0x76, 0x08, 0x42, 0x5b, 0x00, 0x76,
4243 0x09, 0x16, 0x7f, 0x00, 0x76, 0x0a, 0x3a, 0x06,
4244 0x00, 0x76, 0x0b, 0x16, 0x7d, 0x00, 0x76, 0x0c,
4245 0x4c, 0x6b, 0x00, 0x76, 0x0d, 0x16, 0x7e, 0x00,
4246 0x76, 0x0f, 0x46, 0xec, 0x00, 0x76, 0x12, 0x56,
4247 0x0d, 0x00, 0x76, 0x13, 0x46, 0xef, 0x00, 0x76,
4248 0x15, 0x3a, 0x07, 0x00, 0x76, 0x16, 0x3a, 0x08,
4249 0x00, 0x76, 0x18, 0x46, 0xea, 0x00, 0x76, 0x19,
4250 0x3a, 0x09, 0x00, 0x76, 0x1b, 0x46, 0xf0, 0x00,
4251 0x76, 0x1c, 0x46, 0xf1, 0x00, 0x76, 0x1d, 0x4c,
4252 0x6c, 0x00, 0x76, 0x1e, 0x3a, 0x0a, 0x00, 0x76,
4253 0x1f, 0x16, 0x80, 0x00, 0x76, 0x20, 0x16, 0x82,
4254 0x00, 0x76, 0x21, 0x16, 0x83, 0x00, 0x76, 0x22,
4255 0x16, 0x84, 0x00, 0x76, 0x23, 0x56, 0x0e, 0x00,
4256 0x76, 0x24, 0x16, 0x85, 0x00, 0x76, 0x25, 0x46,
4257 0xf3, 0x00, 0x76, 0x26, 0x36, 0x45, 0x00, 0x76,
4258 0x27, 0x16, 0x81, 0x00, 0x76, 0x28, 0x46, 0xf4,
4259 0x00, 0x76, 0x29, 0x56, 0x0f, 0x00, 0x76, 0x2d,
4260 0x3a, 0x0b, 0x00, 0x76, 0x30, 0x16, 0x87, 0x00,
4261 0x76, 0x32, 0x4c, 0x6d, 0x00, 0x76, 0x33, 0x46,
4262 0xf6, 0x00, 0x76, 0x34, 0x16, 0x86, 0x00, 0x76,
4263 0x35, 0x3a, 0x0c, 0x00, 0x76, 0x38, 0x4c, 0x6e,
4264 0x00, 0x76, 0x39, 0x56, 0x10, 0x00, 0x76, 0x3a,
4265 0x56, 0x11, 0x00, 0x76, 0x3b, 0x16, 0x88, 0x00,
4266 0x76, 0x3c, 0x46, 0xf5, 0x00, 0x76, 0x40, 0x56,
4267 0x12, 0x00, 0x76, 0x41, 0x46, 0xf9, 0x00, 0x76,
4268 0x42, 0x0f, 0x8d, 0x00, 0x76, 0x43, 0x3a, 0x0d,
4269 0x00, 0x76, 0x44, 0x56, 0x13, 0x00, 0x76, 0x45,
4270 0x4c, 0x6f, 0x00, 0x76, 0x46, 0x16, 0x8b, 0x00,
4271 0x76, 0x47, 0x16, 0x89, 0x00, 0x76, 0x48, 0x16,
4272 0x8a, 0x00, 0x76, 0x49, 0x46, 0xfb, 0x00, 0x76,
4273 0x4a, 0x4c, 0x70, 0x00, 0x76, 0x4b, 0x3a, 0x0e,
4274 0x00, 0x76, 0x4c, 0x06, 0x1e, 0x00, 0x76, 0x4e,
4275 0x37, 0x53, 0x00, 0x76, 0x52, 0x0f, 0x0a, 0x00,
4276 0x76, 0x55, 0x46, 0xfc, 0x00, 0x76, 0x56, 0x0e,
4277 0x1a, 0x00, 0x76, 0x58, 0x16, 0x8d, 0x00, 0x76,
4278 0x59, 0x56, 0x14, 0x00, 0x76, 0x5c, 0x16, 0x8c,
4279 0x00, 0x76, 0x5f, 0x4c, 0x71, 0x00, 0x76, 0x61,
4280 0x16, 0x8e, 0x00, 0x76, 0x62, 0x16, 0x8f, 0x00,
4281 0x76, 0x64, 0x42, 0x5c, 0x00, 0x76, 0x65, 0x3a,
4282 0x0f, 0x00, 0x76, 0x67, 0x16, 0x93, 0x00, 0x76,
4283 0x68, 0x16, 0x90, 0x00, 0x76, 0x69, 0x16, 0x91,
4284 0x00, 0x76, 0x6a, 0x16, 0x92, 0x00, 0x76, 0x6c,
4285 0x16, 0x94, 0x00, 0x76, 0x6d, 0x3a, 0x10, 0x00,
4286 0x76, 0x6e, 0x46, 0xfe, 0x00, 0x76, 0x6f, 0x3a,
4287 0x11, 0x00, 0x76, 0x70, 0x16, 0x95, 0x00, 0x76,
4288 0x71, 0x3a, 0x12, 0x00, 0x76, 0x72, 0x16, 0x96,
4289 0x00, 0x76, 0x74, 0x3a, 0x13, 0x00, 0x76, 0x76,
4290 0x16, 0x97, 0x00, 0x76, 0x78, 0x16, 0x98, 0x00,
4291 0x76, 0x7a, 0x0d, 0x43, 0x00, 0x76, 0x7b, 0x0c,
4292 0x4a, 0x00, 0x76, 0x7c, 0x16, 0x99, 0x00, 0x76,
4293 0x7d, 0x0d, 0x28, 0x00, 0x76, 0x7e, 0x0d, 0xa6,
4294 0x00, 0x76, 0x80, 0x16, 0x9a, 0x00, 0x76, 0x81,
4295 0x42, 0x5d, 0x00, 0x76, 0x82, 0x21, 0x76, 0x00,
4296 0x76, 0x83, 0x16, 0x9b, 0x00, 0x76, 0x84, 0x0c,
4297 0x24, 0x00, 0x76, 0x85, 0x56, 0x15, 0x00, 0x76,
4298 0x86, 0x05, 0x85, 0x00, 0x76, 0x87, 0x07, 0xd6,
4299 0x00, 0x76, 0x88, 0x16, 0x9c, 0x00, 0x76, 0x8b,
4300 0x16, 0x9d, 0x00, 0x76, 0x8c, 0x56, 0x16, 0x00,
4301 0x76, 0x8d, 0x56, 0x17, 0x00, 0x76, 0x8e, 0x16,
4302 0x9e, 0x00, 0x76, 0x90, 0x08, 0x77, 0x00, 0x76,
4303 0x93, 0x16, 0xa0, 0x00, 0x76, 0x95, 0x46, 0xff,
4304 0x00, 0x76, 0x96, 0x16, 0x9f, 0x00, 0x76, 0x99,
4305 0x16, 0xa1, 0x00, 0x76, 0x9a, 0x16, 0xa2, 0x00,
4306 0x76, 0x9b, 0x21, 0x79, 0x00, 0x76, 0x9c, 0x21,
4307 0x77, 0x00, 0x76, 0x9d, 0x42, 0x5e, 0x00, 0x76,
4308 0x9e, 0x21, 0x78, 0x00, 0x76, 0x9f, 0x56, 0x18,
4309 0x00, 0x76, 0xa0, 0x47, 0x01, 0x00, 0x76, 0xa1,
4310 0x47, 0x00, 0x00, 0x76, 0xa2, 0x56, 0x19, 0x00,
4311 0x76, 0xa3, 0x56, 0x1a, 0x00, 0x76, 0xa4, 0x3a,
4312 0x14, 0x00, 0x76, 0xa5, 0x3a, 0x15, 0x00, 0x76,
4313 0xa6, 0x21, 0x7a, 0x00, 0x76, 0xa7, 0x47, 0x02,
4314 0x00, 0x76, 0xa8, 0x47, 0x03, 0x00, 0x76, 0xaa,
4315 0x42, 0x5f, 0x00, 0x76, 0xad, 0x4c, 0x72, 0x00,
4316 0x76, 0xae, 0x0d, 0x7d, 0x00, 0x76, 0xaf, 0x47,
4317 0x04, 0x00, 0x76, 0xb0, 0x16, 0xa3, 0x00, 0x76,
4318 0xb4, 0x16, 0xa4, 0x00, 0x76, 0xb6, 0x42, 0x60,
4319 0x00, 0x76, 0xb7, 0x1d, 0x1c, 0x00, 0x76, 0xb8,
4320 0x16, 0xa5, 0x00, 0x76, 0xb9, 0x16, 0xa6, 0x00,
4321 0x76, 0xba, 0x16, 0xa7, 0x00, 0x76, 0xbd, 0x4c,
4322 0x73, 0x00, 0x76, 0xbf, 0x08, 0x7c, 0x00, 0x76,
4323 0xc1, 0x56, 0x1b, 0x00, 0x76, 0xc2, 0x16, 0xa8,
4324 0x00, 0x76, 0xc3, 0x0d, 0x0c, 0x00, 0x76, 0xc5,
4325 0x3a, 0x16, 0x00, 0x76, 0xc6, 0x0e, 0x8d, 0x00,
4326 0x76, 0xc8, 0x04, 0xf0, 0x00, 0x76, 0xc9, 0x47,
4327 0x06, 0x00, 0x76, 0xca, 0x04, 0xf9, 0x00, 0x76,
4328 0xcb, 0x56, 0x1c, 0x00, 0x76, 0xcc, 0x3a, 0x17,
4329 0x00, 0x76, 0xcd, 0x16, 0xa9, 0x00, 0x76, 0xce,
4330 0x42, 0x61, 0x00, 0x76, 0xd2, 0x16, 0xab, 0x00,
4331 0x76, 0xd4, 0x42, 0x62, 0x00, 0x76, 0xd6, 0x16,
4332 0xaa, 0x00, 0x76, 0xd7, 0x0c, 0x6a, 0x00, 0x76,
4333 0xd9, 0x4c, 0x74, 0x00, 0x76, 0xdb, 0x0a, 0x5d,
4334 0x00, 0x76, 0xdc, 0x14, 0xd8, 0x00, 0x76, 0xde,
4335 0x16, 0xac, 0x00, 0x76, 0xdf, 0x0e, 0xcd, 0x00,
4336 0x76, 0xe0, 0x56, 0x1e, 0x00, 0x76, 0xe1, 0x16,
4337 0xad, 0x00, 0x76, 0xe3, 0x06, 0x02, 0x00, 0x76,
4338 0xe4, 0x0d, 0x6b, 0x00, 0x76, 0xe5, 0x16, 0xae,
4339 0x00, 0x76, 0xe6, 0x42, 0x63, 0x00, 0x76, 0xe7,
4340 0x16, 0xaf, 0x00, 0x76, 0xe8, 0x47, 0x08, 0x00,
4341 0x76, 0xea, 0x16, 0xb0, 0x00, 0x76, 0xeb, 0x4c,
4342 0x75, 0x00, 0x76, 0xec, 0x3a, 0x18, 0x00, 0x76,
4343 0xee, 0x0e, 0xe8, 0x00, 0x76, 0xf0, 0x4c, 0x76,
4344 0x00, 0x76, 0xf1, 0x42, 0x64, 0x00, 0x76, 0xf2,
4345 0x0e, 0xe1, 0x00, 0x76, 0xf4, 0x0b, 0xda, 0x00,
4346 0x76, 0xf6, 0x56, 0x1f, 0x00, 0x76, 0xf8, 0x0a,
4347 0xec, 0x00, 0x76, 0xf9, 0x4c, 0x77, 0x00, 0x76,
4348 0xfb, 0x16, 0xb2, 0x00, 0x76, 0xfc, 0x3a, 0x19,
4349 0x00, 0x76, 0xfe, 0x09, 0x6c, 0x00, 0x77, 0x00,
4350 0x4c, 0x78, 0x00, 0x77, 0x01, 0x09, 0xb2, 0x00,
4351 0x77, 0x04, 0x16, 0xb5, 0x00, 0x77, 0x06, 0x56,
4352 0x20, 0x00, 0x77, 0x07, 0x16, 0xb4, 0x00, 0x77,
4353 0x08, 0x16, 0xb3, 0x00, 0x77, 0x09, 0x0d, 0x91,
4354 0x00, 0x77, 0x0a, 0x42, 0x65, 0x00, 0x77, 0x0b,
4355 0x06, 0x03, 0x00, 0x77, 0x0c, 0x07, 0x5d, 0x00,
4356 0x77, 0x0e, 0x4c, 0x79, 0x00, 0x77, 0x12, 0x56,
4357 0x21, 0x00, 0x77, 0x14, 0x56, 0x22, 0x00, 0x77,
4358 0x15, 0x56, 0x23, 0x00, 0x77, 0x17, 0x47, 0x0a,
4359 0x00, 0x77, 0x19, 0x42, 0x66, 0x00, 0x77, 0x1a,
4360 0x47, 0x0b, 0x00, 0x77, 0x1b, 0x16, 0xbb, 0x00,
4361 0x77, 0x1c, 0x56, 0x24, 0x00, 0x77, 0x1e, 0x34,
4362 0x2d, 0x00, 0x77, 0x1f, 0x0a, 0x05, 0x00, 0x77,
4363 0x20, 0x0e, 0xbe, 0x00, 0x77, 0x22, 0x4c, 0x7a,
4364 0x00, 0x77, 0x24, 0x16, 0xb7, 0x00, 0x77, 0x25,
4365 0x16, 0xb9, 0x00, 0x77, 0x26, 0x16, 0xba, 0x00,
4366 0x77, 0x28, 0x4c, 0x7b, 0x00, 0x77, 0x29, 0x16,
4367 0xb6, 0x00, 0x77, 0x2d, 0x47, 0x0c, 0x00, 0x77,
4368 0x2e, 0x56, 0x25, 0x00, 0x77, 0x2f, 0x4c, 0x7c,
4369 0x00, 0x77, 0x34, 0x3a, 0x1a, 0x00, 0x77, 0x35,
4370 0x47, 0x0d, 0x00, 0x77, 0x36, 0x3a, 0x1b, 0x00,
4371 0x77, 0x37, 0x16, 0xbc, 0x00, 0x77, 0x38, 0x16,
4372 0xbd, 0x00, 0x77, 0x39, 0x4c, 0x7d, 0x00, 0x77,
4373 0x3a, 0x0b, 0xcb, 0x00, 0x77, 0x3c, 0x06, 0x1f,
4374 0x00, 0x77, 0x3d, 0x56, 0x26, 0x00, 0x77, 0x3e,
4375 0x4c, 0x7e, 0x00, 0x77, 0x40, 0x0b, 0xa3, 0x00,
4376 0x77, 0x42, 0x56, 0x27, 0x00, 0x77, 0x45, 0x4c,
4377 0x7f, 0x00, 0x77, 0x46, 0x21, 0x7c, 0x00, 0x77,
4378 0x47, 0x16, 0xbe, 0x00, 0x77, 0x4a, 0x4c, 0x80,
4379 0x00, 0x77, 0x4d, 0x42, 0x67, 0x00, 0x77, 0x4e,
4380 0x42, 0x68, 0x00, 0x77, 0x4f, 0x4c, 0x81, 0x00,
4381 0x77, 0x52, 0x56, 0x28, 0x00, 0x77, 0x56, 0x56,
4382 0x29, 0x00, 0x77, 0x57, 0x56, 0x2a, 0x00, 0x77,
4383 0x58, 0x47, 0x12, 0x00, 0x77, 0x5a, 0x16, 0xbf,
4384 0x00, 0x77, 0x5b, 0x16, 0xc2, 0x00, 0x77, 0x5c,
4385 0x3a, 0x1c, 0x00, 0x77, 0x5e, 0x4c, 0x82, 0x00,
4386 0x77, 0x5f, 0x3a, 0x1d, 0x00, 0x77, 0x60, 0x3a,
4387 0x1e, 0x00, 0x77, 0x61, 0x0a, 0x2d, 0x00, 0x77,
4388 0x62, 0x1e, 0xc5, 0x00, 0x77, 0x63, 0x0c, 0x9c,
4389 0x00, 0x77, 0x64, 0x4c, 0x83, 0x00, 0x77, 0x65,
4390 0x16, 0xc3, 0x00, 0x77, 0x66, 0x0e, 0x81, 0x00,
4391 0x77, 0x67, 0x4c, 0x84, 0x00, 0x77, 0x68, 0x16,
4392 0xc0, 0x00, 0x77, 0x6a, 0x37, 0x55, 0x00, 0x77,
4393 0x6b, 0x16, 0xc1, 0x00, 0x77, 0x6c, 0x4c, 0x85,
4394 0x00, 0x77, 0x70, 0x56, 0x2b, 0x00, 0x77, 0x72,
4395 0x3a, 0x1f, 0x00, 0x77, 0x73, 0x56, 0x2c, 0x00,
4396 0x77, 0x74, 0x56, 0x2d, 0x00, 0x77, 0x79, 0x16,
4397 0xc6, 0x00, 0x77, 0x7a, 0x42, 0x69, 0x00, 0x77,
4398 0x7c, 0x47, 0x14, 0x00, 0x77, 0x7d, 0x3a, 0x20,
4399 0x00, 0x77, 0x7e, 0x16, 0xc5, 0x00, 0x77, 0x7f,
4400 0x16, 0xc4, 0x00, 0x77, 0x80, 0x42, 0x6a, 0x00,
4401 0x77, 0x84, 0x4c, 0x86, 0x00, 0x77, 0x8b, 0x16,
4402 0xc8, 0x00, 0x77, 0x8c, 0x4c, 0x87, 0x00, 0x77,
4403 0x8d, 0x4c, 0x88, 0x00, 0x77, 0x8e, 0x16, 0xc7,
4404 0x00, 0x77, 0x91, 0x16, 0xc9, 0x00, 0x77, 0x94,
4405 0x42, 0x6b, 0x00, 0x77, 0x95, 0x3a, 0x21, 0x00,
4406 0x77, 0x96, 0x4c, 0x89, 0x00, 0x77, 0x9a, 0x47,
4407 0x17, 0x00, 0x77, 0x9e, 0x16, 0xcb, 0x00, 0x77,
4408 0x9f, 0x47, 0x18, 0x00, 0x77, 0xa0, 0x16, 0xca,
4409 0x00, 0x77, 0xa2, 0x47, 0x19, 0x00, 0x77, 0xa4,
4410 0x47, 0x1a, 0x00, 0x77, 0xa5, 0x0e, 0x1d, 0x00,
4411 0x77, 0xa7, 0x4c, 0x8a, 0x00, 0x77, 0xa9, 0x37,
4412 0x56, 0x00, 0x77, 0xaa, 0x3a, 0x22, 0x00, 0x77,
4413 0xac, 0x09, 0x60, 0x00, 0x77, 0xad, 0x0f, 0x8e,
4414 0x00, 0x77, 0xae, 0x56, 0x30, 0x00, 0x77, 0xaf,
4415 0x4c, 0x8b, 0x00, 0x77, 0xb0, 0x16, 0xcc, 0x00,
4416 0x77, 0xb1, 0x56, 0x31, 0x00, 0x77, 0xb3, 0x0c,
4417 0x8f, 0x00, 0x77, 0xb5, 0x56, 0x32, 0x00, 0x77,
4418 0xb6, 0x16, 0xcd, 0x00, 0x77, 0xb7, 0x4c, 0x8c,
4419 0x00, 0x77, 0xb9, 0x16, 0xce, 0x00, 0x77, 0xbb,
4420 0x16, 0xd2, 0x00, 0x77, 0xbc, 0x16, 0xd0, 0x00,
4421 0x77, 0xbd, 0x16, 0xd1, 0x00, 0x77, 0xbe, 0x4c,
4422 0x8d, 0x00, 0x77, 0xbf, 0x16, 0xcf, 0x00, 0x77,
4423 0xc3, 0x56, 0x33, 0x00, 0x77, 0xc7, 0x16, 0xd3,
4424 0x00, 0x77, 0xc9, 0x4c, 0x8e, 0x00, 0x77, 0xcd,
4425 0x16, 0xd4, 0x00, 0x77, 0xd1, 0x4c, 0x8f, 0x00,
4426 0x77, 0xd2, 0x56, 0x34, 0x00, 0x77, 0xd5, 0x56,
4427 0x35, 0x00, 0x77, 0xd7, 0x16, 0xd5, 0x00, 0x77,
4428 0xd9, 0x4c, 0x90, 0x00, 0x77, 0xda, 0x16, 0xd6,
4429 0x00, 0x77, 0xdb, 0x0e, 0xc3, 0x00, 0x77, 0xdc,
4430 0x16, 0xd7, 0x00, 0x77, 0xde, 0x47, 0x1b, 0x00,
4431 0x77, 0xdf, 0x47, 0x1c, 0x00, 0x77, 0xe0, 0x42,
4432 0x6c, 0x00, 0x77, 0xe2, 0x0e, 0xfc, 0x00, 0x77,
4433 0xe3, 0x16, 0xd8, 0x00, 0x77, 0xe4, 0x47, 0x1d,
4434 0x00, 0x77, 0xe5, 0x0b, 0x8c, 0x00, 0x77, 0xe6,
4435 0x3a, 0x23, 0x00, 0x77, 0xe7, 0x0d, 0x20, 0x00,
4436 0x77, 0xe9, 0x06, 0xe3, 0x00, 0x77, 0xea, 0x47,
4437 0x1e, 0x00, 0x77, 0xec, 0x47, 0x1f, 0x00, 0x77,
4438 0xed, 0x0b, 0x79, 0x00, 0x77, 0xee, 0x16, 0xd9,
4439 0x00, 0x77, 0xef, 0x06, 0xb2, 0x00, 0x77, 0xf0,
4440 0x3a, 0x24, 0x00, 0x77, 0xf1, 0x4c, 0x91, 0x00,
4441 0x77, 0xf3, 0x0a, 0x74, 0x00, 0x77, 0xf4, 0x3a,
4442 0x25, 0x00, 0x77, 0xf8, 0x56, 0x36, 0x00, 0x77,
4443 0xfb, 0x47, 0x20, 0x00, 0x77, 0xfc, 0x16, 0xda,
4444 0x00, 0x78, 0x02, 0x08, 0x2d, 0x00, 0x78, 0x05,
4445 0x47, 0x22, 0x00, 0x78, 0x06, 0x3a, 0x26, 0x00,
4446 0x78, 0x09, 0x47, 0x23, 0x00, 0x78, 0x0c, 0x16,
4447 0xdb, 0x00, 0x78, 0x0d, 0x47, 0x24, 0x00, 0x78,
4448 0x0e, 0x56, 0x37, 0x00, 0x78, 0x11, 0x56, 0x38,
4449 0x00, 0x78, 0x12, 0x16, 0xdc, 0x00, 0x78, 0x14,
4450 0x07, 0x5a, 0x00, 0x78, 0x15, 0x08, 0x45, 0x00,
4451 0x78, 0x19, 0x47, 0x25, 0x00, 0x78, 0x1d, 0x56,
4452 0x39, 0x00, 0x78, 0x20, 0x16, 0xde, 0x00, 0x78,
4453 0x21, 0x21, 0x7e, 0x00, 0x78, 0x22, 0x3a, 0x27,
4454 0x00, 0x78, 0x23, 0x56, 0x3a, 0x00, 0x78, 0x25,
4455 0x0c, 0x50, 0x00, 0x78, 0x26, 0x08, 0x46, 0x00,
4456 0x78, 0x27, 0x06, 0x68, 0x00, 0x78, 0x2c, 0x47,
4457 0x26, 0x00, 0x78, 0x2d, 0x3a, 0x28, 0x00, 0x78,
4458 0x2e, 0x3a, 0x29, 0x00, 0x78, 0x30, 0x3a, 0x2a,
4459 0x00, 0x78, 0x32, 0x0e, 0x52, 0x00, 0x78, 0x34,
4460 0x0d, 0x01, 0x00, 0x78, 0x35, 0x3a, 0x2b, 0x00,
4461 0x78, 0x37, 0x4c, 0x92, 0x00, 0x78, 0x3a, 0x0c,
4462 0x51, 0x00, 0x78, 0x3f, 0x07, 0xee, 0x00, 0x78,
4463 0x43, 0x42, 0x6e, 0x00, 0x78, 0x44, 0x56, 0x3b,
4464 0x00, 0x78, 0x45, 0x16, 0xe0, 0x00, 0x78, 0x47,
4465 0x47, 0x27, 0x00, 0x78, 0x48, 0x56, 0x3c, 0x00,
4466 0x78, 0x4c, 0x56, 0x3d, 0x00, 0x78, 0x4e, 0x21,
4467 0x7f, 0x00, 0x78, 0x4f, 0x34, 0x1e, 0x00, 0x78,
4468 0x51, 0x3c, 0x3c, 0x00, 0x78, 0x52, 0x56, 0x3e,
4469 0x00, 0x78, 0x5c, 0x4c, 0x93, 0x00, 0x78, 0x5d,
4470 0x09, 0xb3, 0x00, 0x78, 0x5e, 0x56, 0x3f, 0x00,
4471 0x78, 0x60, 0x56, 0x40, 0x00, 0x78, 0x61, 0x56,
4472 0x41, 0x00, 0x78, 0x63, 0x56, 0x42, 0x00, 0x78,
4473 0x64, 0x21, 0x80, 0x00, 0x78, 0x68, 0x3a, 0x2c,
4474 0x00, 0x78, 0x6a, 0x47, 0x28, 0x00, 0x78, 0x6b,
4475 0x0f, 0x7a, 0x00, 0x78, 0x6c, 0x07, 0xd7, 0x00,
4476 0x78, 0x6e, 0x42, 0x6f, 0x00, 0x78, 0x6f, 0x07,
4477 0x5b, 0x00, 0x78, 0x72, 0x0d, 0x37, 0x00, 0x78,
4478 0x74, 0x16, 0xe2, 0x00, 0x78, 0x7a, 0x21, 0x81,
4479 0x00, 0x78, 0x7c, 0x16, 0xe4, 0x00, 0x78, 0x7e,
4480 0x4c, 0x94, 0x00, 0x78, 0x81, 0x07, 0x9f, 0x00,
4481 0x78, 0x86, 0x16, 0xe3, 0x00, 0x78, 0x87, 0x0c,
4482 0x12, 0x00, 0x78, 0x8a, 0x47, 0x2a, 0x00, 0x78,
4483 0x8c, 0x16, 0xe6, 0x00, 0x78, 0x8d, 0x05, 0x95,
4484 0x00, 0x78, 0x8e, 0x16, 0xe1, 0x00, 0x78, 0x8f,
4485 0x56, 0x43, 0x00, 0x78, 0x91, 0x34, 0x43, 0x00,
4486 0x78, 0x93, 0x04, 0xd2, 0x00, 0x78, 0x94, 0x47,
4487 0x2b, 0x00, 0x78, 0x95, 0x08, 0x5c, 0x00, 0x78,
4488 0x97, 0x0f, 0xf8, 0x00, 0x78, 0x98, 0x4c, 0x95,
4489 0x00, 0x78, 0x9a, 0x16, 0xe5, 0x00, 0x78, 0x9d,
4490 0x47, 0x2d, 0x00, 0x78, 0x9e, 0x3a, 0x2d, 0x00,
4491 0x78, 0x9f, 0x47, 0x2e, 0x00, 0x78, 0xa1, 0x4c,
4492 0x96, 0x00, 0x78, 0xa3, 0x16, 0xe7, 0x00, 0x78,
4493 0xa4, 0x47, 0x2c, 0x00, 0x78, 0xa7, 0x0e, 0x1b,
4494 0x00, 0x78, 0xa8, 0x56, 0x44, 0x00, 0x78, 0xa9,
4495 0x0a, 0x7d, 0x00, 0x78, 0xaa, 0x16, 0xe9, 0x00,
4496 0x78, 0xac, 0x56, 0x45, 0x00, 0x78, 0xad, 0x42,
4497 0x72, 0x00, 0x78, 0xaf, 0x16, 0xea, 0x00, 0x78,
4498 0xb0, 0x42, 0x70, 0x00, 0x78, 0xb1, 0x4c, 0x97,
4499 0x00, 0x78, 0xb2, 0x56, 0x46, 0x00, 0x78, 0xb3,
4500 0x4c, 0x98, 0x00, 0x78, 0xb5, 0x16, 0xe8, 0x00,
4501 0x78, 0xba, 0x05, 0xac, 0x00, 0x78, 0xbb, 0x47,
4502 0x2f, 0x00, 0x78, 0xbc, 0x16, 0xf0, 0x00, 0x78,
4503 0xbd, 0x56, 0x47, 0x00, 0x78, 0xbe, 0x16, 0xef,
4504 0x00, 0x78, 0xbf, 0x56, 0x48, 0x00, 0x78, 0xc1,
4505 0x08, 0xd3, 0x00, 0x78, 0xc5, 0x16, 0xf1, 0x00,
4506 0x78, 0xc6, 0x16, 0xec, 0x00, 0x78, 0xc7, 0x56,
4507 0x49, 0x00, 0x78, 0xc8, 0x3a, 0x2e, 0x00, 0x78,
4508 0xc9, 0x4c, 0x99, 0x00, 0x78, 0xca, 0x16, 0xf2,
4509 0x00, 0x78, 0xcb, 0x16, 0xed, 0x00, 0x78, 0xcc,
4510 0x3a, 0x2f, 0x00, 0x78, 0xce, 0x3a, 0x30, 0x00,
4511 0x78, 0xd0, 0x0d, 0x6c, 0x00, 0x78, 0xd1, 0x16,
4512 0xeb, 0x00, 0x78, 0xd2, 0x56, 0x4a, 0x00, 0x78,
4513 0xd3, 0x4c, 0x9a, 0x00, 0x78, 0xd4, 0x16, 0xee,
4514 0x00, 0x78, 0xd5, 0x47, 0x30, 0x00, 0x78, 0xd6,
4515 0x56, 0x4b, 0x00, 0x78, 0xda, 0x16, 0xf5, 0x00,
4516 0x78, 0xdb, 0x56, 0x4c, 0x00, 0x78, 0xdf, 0x56,
4517 0x4d, 0x00, 0x78, 0xe0, 0x3a, 0x32, 0x00, 0x78,
4518 0xe1, 0x3a, 0x33, 0x00, 0x78, 0xe4, 0x3a, 0x31,
4519 0x00, 0x78, 0xe6, 0x47, 0x31, 0x00, 0x78, 0xe7,
4520 0x16, 0xf4, 0x00, 0x78, 0xe8, 0x0e, 0x8f, 0x00,
4521 0x78, 0xea, 0x56, 0x4e, 0x00, 0x78, 0xec, 0x16,
4522 0xf3, 0x00, 0x78, 0xef, 0x04, 0xaf, 0x00, 0x78,
4523 0xf2, 0x3a, 0x34, 0x00, 0x78, 0xf3, 0x56, 0x4f,
4524 0x00, 0x78, 0xf4, 0x16, 0xf7, 0x00, 0x78, 0xf6,
4525 0x56, 0x50, 0x00, 0x78, 0xf7, 0x3a, 0x35, 0x00,
4526 0x78, 0xf9, 0x47, 0x32, 0x00, 0x78, 0xfa, 0x47,
4527 0x33, 0x00, 0x78, 0xfb, 0x3a, 0x36, 0x00, 0x78,
4528 0xfd, 0x16, 0xf6, 0x00, 0x78, 0xfe, 0x47, 0x34,
4529 0x00, 0x78, 0xff, 0x56, 0x51, 0x00, 0x79, 0x00,
4530 0x42, 0x73, 0x00, 0x79, 0x01, 0x09, 0xb4, 0x00,
4531 0x79, 0x06, 0x56, 0x52, 0x00, 0x79, 0x07, 0x16,
4532 0xf8, 0x00, 0x79, 0x0c, 0x4c, 0x9b, 0x00, 0x79,
4533 0x0e, 0x0a, 0xc5, 0x00, 0x79, 0x10, 0x47, 0x36,
4534 0x00, 0x79, 0x11, 0x16, 0xfa, 0x00, 0x79, 0x12,
4535 0x16, 0xf9, 0x00, 0x79, 0x19, 0x16, 0xfb, 0x00,
4536 0x79, 0x1a, 0x56, 0x53, 0x00, 0x79, 0x1b, 0x47,
4537 0x37, 0x00, 0x79, 0x1c, 0x42, 0x74, 0x00, 0x79,
4538 0x1e, 0x56, 0x54, 0x00, 0x79, 0x1f, 0x4c, 0x9c,
4539 0x00, 0x79, 0x20, 0x56, 0x55, 0x00, 0x79, 0x25,
4540 0x47, 0x38, 0x00, 0x79, 0x26, 0x16, 0xdd, 0x00,
4541 0x79, 0x27, 0x4c, 0x9d, 0x00, 0x79, 0x28, 0x4c,
4542 0x9e, 0x00, 0x79, 0x29, 0x56, 0x56, 0x00, 0x79,
4543 0x2a, 0x16, 0xdf, 0x00, 0x79, 0x2b, 0x16, 0xfd,
4544 0x00, 0x79, 0x2c, 0x16, 0xfc, 0x00, 0x79, 0x2d,
4545 0x56, 0x57, 0x00, 0x79, 0x2e, 0x42, 0x75, 0x00,
4546 0x79, 0x30, 0x21, 0x82, 0x00, 0x79, 0x31, 0x3a,
4547 0x37, 0x00, 0x79, 0x34, 0x42, 0x76, 0x00, 0x79,
4548 0x35, 0x56, 0x58, 0x00, 0x79, 0x3a, 0x4a, 0xba,
4549 0x00, 0x79, 0x3b, 0x3a, 0x39, 0x00, 0x79, 0x3c,
4550 0x0f, 0xb1, 0x00, 0x79, 0x3d, 0x3a, 0x3a, 0x00,
4551 0x79, 0x3e, 0x08, 0xfe, 0x00, 0x79, 0x3f, 0x4c,
4552 0x9f, 0x00, 0x79, 0x40, 0x16, 0xfe, 0x00, 0x79,
4553 0x41, 0x07, 0x0d, 0x00, 0x79, 0x42, 0x4c, 0xa0,
4554 0x00, 0x79, 0x44, 0x56, 0x59, 0x00, 0x79, 0x45,
4555 0x3a, 0x3b, 0x00, 0x79, 0x46, 0x42, 0x77, 0x00,
4556 0x79, 0x47, 0x06, 0x5a, 0x00, 0x79, 0x48, 0x34,
4557 0x17, 0x00, 0x79, 0x49, 0x08, 0xb1, 0x00, 0x79,
4558 0x4a, 0x47, 0x39, 0x00, 0x79, 0x4b, 0x56, 0x5a,
4559 0x00, 0x79, 0x4f, 0x56, 0x5b, 0x00, 0x79, 0x50,
4560 0x34, 0x4f, 0x00, 0x79, 0x51, 0x56, 0x5c, 0x00,
4561 0x79, 0x53, 0x17, 0x04, 0x00, 0x79, 0x54, 0x4c,
4562 0xa1, 0x00, 0x79, 0x55, 0x17, 0x03, 0x00, 0x79,
4563 0x56, 0x0a, 0xc6, 0x00, 0x79, 0x57, 0x17, 0x00,
4564 0x00, 0x79, 0x58, 0x47, 0x3a, 0x00, 0x79, 0x5a,
4565 0x17, 0x02, 0x00, 0x79, 0x5b, 0x3a, 0x3c, 0x00,
4566 0x79, 0x5c, 0x3a, 0x3d, 0x00, 0x79, 0x5d, 0x34,
4567 0x27, 0x00, 0x79, 0x5e, 0x21, 0x84, 0x00, 0x79,
4568 0x5f, 0x17, 0x01, 0x00, 0x79, 0x60, 0x16, 0xff,
4569 0x00, 0x79, 0x62, 0x0c, 0xe0, 0x00, 0x79, 0x65,
4570 0x21, 0x85, 0x00, 0x79, 0x67, 0x47, 0x3c, 0x00,
4571 0x79, 0x68, 0x0d, 0xae, 0x00, 0x79, 0x69, 0x56,
4572 0x5d, 0x00, 0x79, 0x6b, 0x4c, 0xa2, 0x00, 0x79,
4573 0x6d, 0x08, 0x47, 0x00, 0x79, 0x72, 0x47, 0x3d,
4574 0x00, 0x79, 0x77, 0x0c, 0x72, 0x00, 0x79, 0x79,
4575 0x42, 0x78, 0x00, 0x79, 0x7a, 0x17, 0x05, 0x00,
4576 0x79, 0x7b, 0x56, 0x5e, 0x00, 0x79, 0x7c, 0x4c,
4577 0xa3, 0x00, 0x79, 0x7e, 0x56, 0x5f, 0x00, 0x79,
4578 0x7f, 0x17, 0x06, 0x00, 0x79, 0x80, 0x17, 0x1c,
4579 0x00, 0x79, 0x81, 0x06, 0xd0, 0x00, 0x79, 0x84,
4580 0x0f, 0xe3, 0x00, 0x79, 0x85, 0x0a, 0xb7, 0x00,
4581 0x79, 0x8a, 0x17, 0x07, 0x00, 0x79, 0x8b, 0x3a,
4582 0x3e, 0x00, 0x79, 0x8c, 0x56, 0x60, 0x00, 0x79,
4583 0x8d, 0x34, 0x0d, 0x00, 0x79, 0x8e, 0x0c, 0x13,
4584 0x00, 0x79, 0x8f, 0x0d, 0xf1, 0x00, 0x79, 0x91,
4585 0x56, 0x61, 0x00, 0x79, 0x93, 0x56, 0x62, 0x00,
4586 0x79, 0x94, 0x21, 0x86, 0x00, 0x79, 0x95, 0x47,
4587 0x3e, 0x00, 0x79, 0x96, 0x3a, 0x3f, 0x00, 0x79,
4588 0x98, 0x3a, 0x40, 0x00, 0x79, 0x9b, 0x21, 0x88,
4589 0x00, 0x79, 0x9c, 0x56, 0x63, 0x00, 0x79, 0x9d,
4590 0x17, 0x08, 0x00, 0x79, 0xa1, 0x47, 0x3f, 0x00,
4591 0x79, 0xa6, 0x06, 0x94, 0x00, 0x79, 0xa7, 0x17,
4592 0x09, 0x00, 0x79, 0xa8, 0x56, 0x64, 0x00, 0x79,
4593 0xa9, 0x47, 0x40, 0x00, 0x79, 0xaa, 0x17, 0x0b,
4594 0x00, 0x79, 0xab, 0x4c, 0xa4, 0x00, 0x79, 0xae,
4595 0x17, 0x0c, 0x00, 0x79, 0xaf, 0x56, 0x65, 0x00,
4596 0x79, 0xb0, 0x0c, 0xdf, 0x00, 0x79, 0xb1, 0x1e,
4597 0x4e, 0x00, 0x79, 0xb3, 0x17, 0x0d, 0x00, 0x79,
4598 0xb4, 0x47, 0x41, 0x00, 0x79, 0xb8, 0x3a, 0x41,
4599 0x00, 0x79, 0xb9, 0x17, 0x0e, 0x00, 0x79, 0xba,
4600 0x17, 0x0f, 0x00, 0x79, 0xbb, 0x3a, 0x42, 0x00,
4601 0x79, 0xbd, 0x06, 0xd1, 0x00, 0x79, 0xbe, 0x05,
4602 0x53, 0x00, 0x79, 0xbf, 0x0c, 0x9d, 0x00, 0x79,
4603 0xc0, 0x09, 0x32, 0x00, 0x79, 0xc1, 0x08, 0xb2,
4604 0x00, 0x79, 0xc2, 0x47, 0x42, 0x00, 0x79, 0xc4,
4605 0x4c, 0xa5, 0x00, 0x79, 0xc7, 0x47, 0x43, 0x00,
4606 0x79, 0xc8, 0x42, 0x79, 0x00, 0x79, 0xc9, 0x17,
4607 0x10, 0x00, 0x79, 0xca, 0x3a, 0x43, 0x00, 0x79,
4608 0xcb, 0x09, 0x33, 0x00, 0x79, 0xcc, 0x47, 0x44,
4609 0x00, 0x79, 0xcd, 0x47, 0x45, 0x00, 0x79, 0xcf,
4610 0x56, 0x66, 0x00, 0x79, 0xd1, 0x05, 0x4a, 0x00,
4611 0x79, 0xd2, 0x0d, 0xb5, 0x00, 0x79, 0xd4, 0x42,
4612 0x7b, 0x00, 0x79, 0xd5, 0x17, 0x11, 0x00, 0x79,
4613 0xd6, 0x47, 0x46, 0x00, 0x79, 0xd8, 0x0d, 0x7f,
4614 0x00, 0x79, 0xda, 0x3a, 0x44, 0x00, 0x79, 0xdd,
4615 0x56, 0x67, 0x00, 0x79, 0xde, 0x42, 0x7c, 0x00,
4616 0x79, 0xdf, 0x0a, 0xc7, 0x00, 0x79, 0xe0, 0x56,
4617 0x68, 0x00, 0x79, 0xe1, 0x17, 0x14, 0x00, 0x79,
4618 0xe2, 0x56, 0x69, 0x00, 0x79, 0xe3, 0x17, 0x15,
4619 0x00, 0x79, 0xe4, 0x0d, 0x1f, 0x00, 0x79, 0xe5,
4620 0x56, 0x6a, 0x00, 0x79, 0xe6, 0x0a, 0x07, 0x00,
4621 0x79, 0xe7, 0x17, 0x12, 0x00, 0x79, 0xe9, 0x0b,
4622 0x9f, 0x00, 0x79, 0xea, 0x4c, 0xa6, 0x00, 0x79,
4623 0xeb, 0x42, 0x7d, 0x00, 0x79, 0xec, 0x17, 0x13,
4624 0x00, 0x79, 0xed, 0x42, 0x7e, 0x00, 0x79, 0xf0,
4625 0x09, 0xb6, 0x00, 0x79, 0xf1, 0x56, 0x6b, 0x00,
4626 0x79, 0xf8, 0x56, 0x6c, 0x00, 0x79, 0xfb, 0x04,
4627 0xa0, 0x00, 0x79, 0xfc, 0x56, 0x6d, 0x00, 0x7a,
4628 0x00, 0x06, 0x43, 0x00, 0x7a, 0x02, 0x4c, 0xa7,
4629 0x00, 0x7a, 0x03, 0x3a, 0x45, 0x00, 0x7a, 0x05,
4630 0x36, 0x33, 0x00, 0x7a, 0x07, 0x56, 0x6e, 0x00,
4631 0x7a, 0x08, 0x17, 0x16, 0x00, 0x7a, 0x09, 0x3a,
4632 0x46, 0x00, 0x7a, 0x0a, 0x47, 0x4b, 0x00, 0x7a,
4633 0x0b, 0x0c, 0x14, 0x00, 0x7a, 0x0c, 0x4c, 0xa8,
4634 0x00, 0x7a, 0x0d, 0x17, 0x17, 0x00, 0x7a, 0x0e,
4635 0x0a, 0x6b, 0x00, 0x7a, 0x11, 0x3a, 0x47, 0x00,
4636 0x7a, 0x14, 0x0e, 0xb9, 0x00, 0x7a, 0x15, 0x47,
4637 0x4c, 0x00, 0x7a, 0x17, 0x0d, 0x95, 0x00, 0x7a,
4638 0x18, 0x17, 0x18, 0x00, 0x7a, 0x19, 0x17, 0x19,
4639 0x00, 0x7a, 0x1a, 0x0b, 0x93, 0x00, 0x7a, 0x1b,
4640 0x47, 0x4d, 0x00, 0x7a, 0x1c, 0x0f, 0x8f, 0x00,
4641 0x7a, 0x1e, 0x3a, 0x48, 0x00, 0x7a, 0x1f, 0x17,
4642 0x1b, 0x00, 0x7a, 0x20, 0x17, 0x1a, 0x00, 0x7a,
4643 0x21, 0x56, 0x6f, 0x00, 0x7a, 0x27, 0x56, 0x70,
4644 0x00, 0x7a, 0x2b, 0x56, 0x71, 0x00, 0x7a, 0x2d,
4645 0x3a, 0x49, 0x00, 0x7a, 0x2e, 0x09, 0x1b, 0x00,
4646 0x7a, 0x2f, 0x56, 0x72, 0x00, 0x7a, 0x30, 0x4c,
4647 0xa9, 0x00, 0x7a, 0x31, 0x17, 0x1d, 0x00, 0x7a,
4648 0x32, 0x04, 0xb4, 0x00, 0x7a, 0x34, 0x56, 0x73,
4649 0x00, 0x7a, 0x35, 0x56, 0x74, 0x00, 0x7a, 0x37,
4650 0x17, 0x20, 0x00, 0x7a, 0x38, 0x47, 0x4f, 0x00,
4651 0x7a, 0x39, 0x3a, 0x4a, 0x00, 0x7a, 0x3a, 0x4c,
4652 0xaa, 0x00, 0x7a, 0x3b, 0x17, 0x1e, 0x00, 0x7a,
4653 0x3c, 0x05, 0x54, 0x00, 0x7a, 0x3d, 0x07, 0x24,
4654 0x00, 0x7a, 0x3e, 0x17, 0x1f, 0x00, 0x7a, 0x3f,
4655 0x07, 0xd8, 0x00, 0x7a, 0x40, 0x34, 0x1f, 0x00,
4656 0x7a, 0x42, 0x0e, 0x36, 0x00, 0x7a, 0x43, 0x17,
4657 0x21, 0x00, 0x7a, 0x44, 0x4c, 0xab, 0x00, 0x7a,
4658 0x45, 0x3a, 0x4b, 0x00, 0x7a, 0x46, 0x0e, 0x82,
4659 0x00, 0x7a, 0x47, 0x47, 0x50, 0x00, 0x7a, 0x48,
4660 0x56, 0x75, 0x00, 0x7a, 0x49, 0x17, 0x23, 0x00,
4661 0x7a, 0x4c, 0x3a, 0x4c, 0x00, 0x7a, 0x4d, 0x0a,
4662 0x75, 0x00, 0x7a, 0x4e, 0x04, 0xf1, 0x00, 0x7a,
4663 0x4f, 0x05, 0x3a, 0x00, 0x7a, 0x50, 0x04, 0x70,
4664 0x00, 0x7a, 0x55, 0x56, 0x76, 0x00, 0x7a, 0x56,
4665 0x47, 0x51, 0x00, 0x7a, 0x57, 0x17, 0x22, 0x00,
4666 0x7a, 0x59, 0x47, 0x52, 0x00, 0x7a, 0x5c, 0x47,
4667 0x53, 0x00, 0x7a, 0x5d, 0x3a, 0x4d, 0x00, 0x7a,
4668 0x5f, 0x47, 0x54, 0x00, 0x7a, 0x60, 0x4f, 0x56,
4669 0x00, 0x7a, 0x61, 0x17, 0x24, 0x00, 0x7a, 0x62,
4670 0x17, 0x25, 0x00, 0x7a, 0x63, 0x09, 0xdf, 0x00,
4671 0x7a, 0x65, 0x56, 0x77, 0x00, 0x7a, 0x67, 0x47,
4672 0x55, 0x00, 0x7a, 0x69, 0x17, 0x26, 0x00, 0x7a,
4673 0x6a, 0x47, 0x56, 0x00, 0x7a, 0x6b, 0x05, 0xad,
4674 0x00, 0x7a, 0x6d, 0x3a, 0x4f, 0x00, 0x7a, 0x70,
4675 0x17, 0x28, 0x00, 0x7a, 0x74, 0x07, 0x40, 0x00,
4676 0x7a, 0x75, 0x47, 0x57, 0x00, 0x7a, 0x76, 0x06,
4677 0x80, 0x00, 0x7a, 0x78, 0x3a, 0x50, 0x00, 0x7a,
4678 0x79, 0x17, 0x29, 0x00, 0x7a, 0x7a, 0x06, 0xed,
4679 0x00, 0x7a, 0x7d, 0x17, 0x2a, 0x00, 0x7a, 0x7e,
4680 0x56, 0x78, 0x00, 0x7a, 0x7f, 0x0a, 0xa0, 0x00,
4681 0x7a, 0x80, 0x4c, 0xac, 0x00, 0x7a, 0x81, 0x0c,
4682 0xa5, 0x00, 0x7a, 0x82, 0x47, 0x58, 0x00, 0x7a,
4683 0x83, 0x0a, 0x84, 0x00, 0x7a, 0x84, 0x08, 0x65,
4684 0x00, 0x7a, 0x85, 0x42, 0x7f, 0x00, 0x7a, 0x86,
4685 0x4c, 0xad, 0x00, 0x7a, 0x88, 0x17, 0x2b, 0x00,
4686 0x7a, 0x8a, 0x47, 0x59, 0x00, 0x7a, 0x8b, 0x56,
4687 0x79, 0x00, 0x7a, 0x90, 0x47, 0x5a, 0x00, 0x7a,
4688 0x91, 0x56, 0x7a, 0x00, 0x7a, 0x92, 0x0b, 0xa0,
4689 0x00, 0x7a, 0x93, 0x0a, 0xed, 0x00, 0x7a, 0x94,
4690 0x4c, 0xae, 0x00, 0x7a, 0x95, 0x17, 0x2d, 0x00,
4691 0x7a, 0x96, 0x17, 0x2f, 0x00, 0x7a, 0x97, 0x17,
4692 0x2c, 0x00, 0x7a, 0x98, 0x17, 0x2e, 0x00, 0x7a,
4693 0x9e, 0x56, 0x7b, 0x00, 0x7a, 0x9f, 0x06, 0xf8,
4694 0x00, 0x7a, 0xa0, 0x3a, 0x51, 0x00, 0x7a, 0xa3,
4695 0x3a, 0x52, 0x00, 0x7a, 0xa9, 0x17, 0x30, 0x00,
4696 0x7a, 0xaa, 0x06, 0xfc, 0x00, 0x7a, 0xac, 0x47,
4697 0x5b, 0x00, 0x7a, 0xae, 0x06, 0x81, 0x00, 0x7a,
4698 0xaf, 0x0f, 0x3c, 0x00, 0x7a, 0xb0, 0x17, 0x32,
4699 0x00, 0x7a, 0xb3, 0x3a, 0x53, 0x00, 0x7a, 0xb5,
4700 0x4c, 0xaf, 0x00, 0x7a, 0xb6, 0x17, 0x33, 0x00,
4701 0x7a, 0xb9, 0x47, 0x5e, 0x00, 0x7a, 0xba, 0x04,
4702 0xd0, 0x00, 0x7a, 0xbb, 0x3a, 0x54, 0x00, 0x7a,
4703 0xbc, 0x3a, 0x55, 0x00, 0x7a, 0xbd, 0x4c, 0xb0,
4704 0x00, 0x7a, 0xbe, 0x47, 0x5f, 0x00, 0x7a, 0xbf,
4705 0x17, 0x36, 0x00, 0x7a, 0xc3, 0x05, 0xd4, 0x00,
4706 0x7a, 0xc4, 0x17, 0x35, 0x00, 0x7a, 0xc5, 0x17,
4707 0x34, 0x00, 0x7a, 0xc6, 0x3a, 0x56, 0x00, 0x7a,
4708 0xc7, 0x17, 0x38, 0x00, 0x7a, 0xc8, 0x17, 0x31,
4709 0x00, 0x7a, 0xc9, 0x56, 0x7c, 0x00, 0x7a, 0xca,
4710 0x17, 0x39, 0x00, 0x7a, 0xcb, 0x0f, 0x71, 0x00,
4711 0x7a, 0xcc, 0x47, 0x61, 0x00, 0x7a, 0xcd, 0x17,
4712 0x3a, 0x00, 0x7a, 0xce, 0x42, 0x81, 0x00, 0x7a,
4713 0xcf, 0x17, 0x3b, 0x00, 0x7a, 0xd1, 0x21, 0x89,
4714 0x00, 0x7a, 0xd2, 0x11, 0xc5, 0x00, 0x7a, 0xd3,
4715 0x17, 0x3d, 0x00, 0x7a, 0xd5, 0x17, 0x3c, 0x00,
4716 0x7a, 0xd9, 0x17, 0x3e, 0x00, 0x7a, 0xda, 0x17,
4717 0x3f, 0x00, 0x7a, 0xdb, 0x56, 0x7d, 0x00, 0x7a,
4718 0xdc, 0x0f, 0x7d, 0x00, 0x7a, 0xdd, 0x17, 0x40,
4719 0x00, 0x7a, 0xdf, 0x1c, 0x08, 0x00, 0x7a, 0xe0,
4720 0x09, 0xb7, 0x00, 0x7a, 0xe1, 0x17, 0x41, 0x00,
4721 0x7a, 0xe2, 0x17, 0x42, 0x00, 0x7a, 0xe3, 0x09,
4722 0x61, 0x00, 0x7a, 0xe5, 0x0c, 0x90, 0x00, 0x7a,
4723 0xe6, 0x17, 0x43, 0x00, 0x7a, 0xe7, 0x21, 0x8a,
4724 0x00, 0x7a, 0xe8, 0x47, 0x62, 0x00, 0x7a, 0xe9,
4725 0x56, 0x7e, 0x00, 0x7a, 0xea, 0x0b, 0x66, 0x00,
4726 0x7a, 0xeb, 0x21, 0x8c, 0x00, 0x7a, 0xec, 0x56,
4727 0x7f, 0x00, 0x7a, 0xed, 0x17, 0x44, 0x00, 0x7a,
4728 0xef, 0x0b, 0x7a, 0x00, 0x7a, 0xf0, 0x17, 0x45,
4729 0x00, 0x7a, 0xf1, 0x56, 0x80, 0x00, 0x7a, 0xf4,
4730 0x47, 0x63, 0x00, 0x7a, 0xf6, 0x06, 0x9d, 0x00,
4731 0x7a, 0xf8, 0x10, 0x76, 0x00, 0x7a, 0xf9, 0x0b,
4732 0x9b, 0x00, 0x7a, 0xfa, 0x08, 0xdf, 0x00, 0x7a,
4733 0xfb, 0x56, 0x81, 0x00, 0x7a, 0xfd, 0x42, 0x82,
4734 0x00, 0x7a, 0xfe, 0x4c, 0xb1, 0x00, 0x7a, 0xff,
4735 0x06, 0x04, 0x00, 0x7b, 0x02, 0x17, 0x46, 0x00,
4736 0x7b, 0x04, 0x17, 0x53, 0x00, 0x7b, 0x06, 0x17,
4737 0x49, 0x00, 0x7b, 0x07, 0x3a, 0x57, 0x00, 0x7b,
4738 0x08, 0x06, 0x82, 0x00, 0x7b, 0x0a, 0x17, 0x48,
4739 0x00, 0x7b, 0x0b, 0x17, 0x55, 0x00, 0x7b, 0x0f,
4740 0x17, 0x47, 0x00, 0x7b, 0x11, 0x09, 0xb8, 0x00,
4741 0x7b, 0x12, 0x42, 0x83, 0x00, 0x7b, 0x14, 0x3a,
4742 0x58, 0x00, 0x7b, 0x18, 0x17, 0x4b, 0x00, 0x7b,
4743 0x19, 0x17, 0x4c, 0x00, 0x7b, 0x1b, 0x0c, 0x25,
4744 0x00, 0x7b, 0x1e, 0x17, 0x4d, 0x00, 0x7b, 0x1f,
4745 0x56, 0x82, 0x00, 0x7b, 0x20, 0x05, 0xbc, 0x00,
4746 0x7b, 0x23, 0x56, 0x83, 0x00, 0x7b, 0x25, 0x0a,
4747 0x20, 0x00, 0x7b, 0x26, 0x0d, 0xd6, 0x00, 0x7b,
4748 0x27, 0x3a, 0x59, 0x00, 0x7b, 0x28, 0x17, 0x4f,
4749 0x00, 0x7b, 0x29, 0x56, 0x84, 0x00, 0x7b, 0x2a,
4750 0x47, 0x68, 0x00, 0x7b, 0x2b, 0x4c, 0xb2, 0x00,
4751 0x7b, 0x2c, 0x0b, 0x48, 0x00, 0x7b, 0x2d, 0x42,
4752 0x84, 0x00, 0x7b, 0x2e, 0x47, 0x69, 0x00, 0x7b,
4753 0x2f, 0x47, 0x6a, 0x00, 0x7b, 0x30, 0x56, 0x85,
4754 0x00, 0x7b, 0x31, 0x3a, 0x5a, 0x00, 0x7b, 0x33,
4755 0x17, 0x4a, 0x00, 0x7b, 0x34, 0x56, 0x86, 0x00,
4756 0x7b, 0x35, 0x17, 0x4e, 0x00, 0x7b, 0x36, 0x17,
4757 0x50, 0x00, 0x7b, 0x39, 0x08, 0x6b, 0x00, 0x7b,
4758 0x3b, 0x42, 0x85, 0x00, 0x7b, 0x3d, 0x47, 0x67,
4759 0x00, 0x7b, 0x3f, 0x56, 0x87, 0x00, 0x7b, 0x40,
4760 0x56, 0x88, 0x00, 0x7b, 0x41, 0x47, 0x6e, 0x00,
4761 0x7b, 0x45, 0x17, 0x57, 0x00, 0x7b, 0x46, 0x0d,
4762 0xa0, 0x00, 0x7b, 0x47, 0x3a, 0x5b, 0x00, 0x7b,
4763 0x48, 0x0d, 0x3a, 0x00, 0x7b, 0x49, 0x0c, 0x73,
4764 0x00, 0x7b, 0x4b, 0x06, 0xd2, 0x00, 0x7b, 0x4c,
4765 0x17, 0x56, 0x00, 0x7b, 0x4d, 0x17, 0x54, 0x00,
4766 0x7b, 0x4e, 0x3a, 0x5c, 0x00, 0x7b, 0x4f, 0x0d,
4767 0x49, 0x00, 0x7b, 0x50, 0x17, 0x51, 0x00, 0x7b,
4768 0x51, 0x0b, 0x9c, 0x00, 0x7b, 0x52, 0x0c, 0x75,
4769 0x00, 0x7b, 0x53, 0x37, 0x5d, 0x00, 0x7b, 0x54,
4770 0x0c, 0x74, 0x00, 0x7b, 0x55, 0x47, 0x70, 0x00,
4771 0x7b, 0x56, 0x08, 0x66, 0x00, 0x7b, 0x5d, 0x17,
4772 0x69, 0x00, 0x7b, 0x60, 0x3a, 0x5d, 0x00, 0x7b,
4773 0x64, 0x47, 0x72, 0x00, 0x7b, 0x65, 0x17, 0x59,
4774 0x00, 0x7b, 0x66, 0x47, 0x73, 0x00, 0x7b, 0x67,
4775 0x17, 0x5b, 0x00, 0x7b, 0x69, 0x3a, 0x5e, 0x00,
4776 0x7b, 0x6a, 0x56, 0x89, 0x00, 0x7b, 0x6c, 0x17,
4777 0x5e, 0x00, 0x7b, 0x6d, 0x3a, 0x5f, 0x00, 0x7b,
4778 0x6e, 0x17, 0x5f, 0x00, 0x7b, 0x6f, 0x42, 0x86,
4779 0x00, 0x7b, 0x70, 0x17, 0x5c, 0x00, 0x7b, 0x71,
4780 0x17, 0x5d, 0x00, 0x7b, 0x72, 0x3a, 0x60, 0x00,
4781 0x7b, 0x73, 0x47, 0x74, 0x00, 0x7b, 0x74, 0x17,
4782 0x5a, 0x00, 0x7b, 0x75, 0x17, 0x58, 0x00, 0x7b,
4783 0x77, 0x4c, 0xb3, 0x00, 0x7b, 0x79, 0x47, 0x71,
4784 0x00, 0x7b, 0x7a, 0x17, 0x52, 0x00, 0x7b, 0x7f,
4785 0x47, 0x6d, 0x00, 0x7b, 0x84, 0x56, 0x8a, 0x00,
4786 0x7b, 0x86, 0x0e, 0x1f, 0x00, 0x7b, 0x87, 0x05,
4787 0x55, 0x00, 0x7b, 0x89, 0x56, 0x8b, 0x00, 0x7b,
4788 0x8b, 0x17, 0x66, 0x00, 0x7b, 0x8d, 0x17, 0x63,
4789 0x00, 0x7b, 0x8e, 0x56, 0x8c, 0x00, 0x7b, 0x8f,
4790 0x17, 0x68, 0x00, 0x7b, 0x90, 0x47, 0x77, 0x00,
4791 0x7b, 0x91, 0x3a, 0x61, 0x00, 0x7b, 0x92, 0x17,
4792 0x67, 0x00, 0x7b, 0x94, 0x0d, 0x29, 0x00, 0x7b,
4793 0x95, 0x0e, 0xb3, 0x00, 0x7b, 0x96, 0x56, 0x8d,
4794 0x00, 0x7b, 0x97, 0x08, 0x89, 0x00, 0x7b, 0x98,
4795 0x17, 0x61, 0x00, 0x7b, 0x99, 0x17, 0x6a, 0x00,
4796 0x7b, 0x9a, 0x17, 0x65, 0x00, 0x7b, 0x9b, 0x47,
4797 0x78, 0x00, 0x7b, 0x9c, 0x17, 0x64, 0x00, 0x7b,
4798 0x9d, 0x17, 0x60, 0x00, 0x7b, 0x9e, 0x21, 0x8d,
4799 0x00, 0x7b, 0x9f, 0x17, 0x62, 0x00, 0x7b, 0xa0,
4800 0x4c, 0xb4, 0x00, 0x7b, 0xa1, 0x06, 0x05, 0x00,
4801 0x7b, 0xa5, 0x56, 0x8e, 0x00, 0x7b, 0xaa, 0x0b,
4802 0x7b, 0x00, 0x7b, 0xac, 0x4c, 0xb5, 0x00, 0x7b,
4803 0xad, 0x0a, 0xa1, 0x00, 0x7b, 0xaf, 0x3a, 0x62,
4804 0x00, 0x7b, 0xb0, 0x4c, 0xb6, 0x00, 0x7b, 0xb1,
4805 0x0d, 0x36, 0x00, 0x7b, 0xb2, 0x56, 0x8f, 0x00,
4806 0x7b, 0xb4, 0x17, 0x6f, 0x00, 0x7b, 0xb5, 0x47,
4807 0x7a, 0x00, 0x7b, 0xb6, 0x56, 0x90, 0x00, 0x7b,
4808 0xb8, 0x0d, 0x38, 0x00, 0x7b, 0xba, 0x56, 0x91,
4809 0x00, 0x7b, 0xbb, 0x56, 0x92, 0x00, 0x7b, 0xbc,
4810 0x47, 0x7b, 0x00, 0x7b, 0xbd, 0x56, 0x93, 0x00,
4811 0x7b, 0xc0, 0x0a, 0x85, 0x00, 0x7b, 0xc1, 0x17,
4812 0x6c, 0x00, 0x7b, 0xc2, 0x56, 0x94, 0x00, 0x7b,
4813 0xc4, 0x0d, 0x63, 0x00, 0x7b, 0xc5, 0x47, 0x7c,
4814 0x00, 0x7b, 0xc6, 0x17, 0x70, 0x00, 0x7b, 0xc7,
4815 0x0e, 0x23, 0x00, 0x7b, 0xc8, 0x56, 0x95, 0x00,
4816 0x7b, 0xc9, 0x0b, 0x99, 0x00, 0x7b, 0xca, 0x47,
4817 0x7d, 0x00, 0x7b, 0xcb, 0x17, 0x6b, 0x00, 0x7b,
4818 0xcc, 0x17, 0x6d, 0x00, 0x7b, 0xcf, 0x17, 0x6e,
4819 0x00, 0x7b, 0xd4, 0x47, 0x80, 0x00, 0x7b, 0xd6,
4820 0x47, 0x81, 0x00, 0x7b, 0xd7, 0x3a, 0x63, 0x00,
4821 0x7b, 0xd9, 0x3a, 0x64, 0x00, 0x7b, 0xda, 0x47,
4822 0x82, 0x00, 0x7b, 0xdb, 0x56, 0x96, 0x00, 0x7b,
4823 0xdd, 0x17, 0x71, 0x00, 0x7b, 0xe0, 0x08, 0xf0,
4824 0x00, 0x7b, 0xe4, 0x0c, 0x9e, 0x00, 0x7b, 0xe5,
4825 0x17, 0x76, 0x00, 0x7b, 0xe6, 0x17, 0x75, 0x00,
4826 0x7b, 0xe8, 0x4c, 0xb7, 0x00, 0x7b, 0xe9, 0x17,
4827 0x72, 0x00, 0x7b, 0xea, 0x47, 0x83, 0x00, 0x7b,
4828 0xed, 0x0f, 0xdc, 0x00, 0x7b, 0xf0, 0x47, 0x84,
4829 0x00, 0x7b, 0xf2, 0x4c, 0xb8, 0x00, 0x7b, 0xf3,
4830 0x17, 0x7b, 0x00, 0x7b, 0xf4, 0x56, 0x97, 0x00,
4831 0x7b, 0xf5, 0x56, 0x98, 0x00, 0x7b, 0xf6, 0x17,
4832 0x7f, 0x00, 0x7b, 0xf7, 0x17, 0x7c, 0x00, 0x7b,
4833 0xf8, 0x4c, 0xb9, 0x00, 0x7b, 0xf9, 0x56, 0x99,
4834 0x00, 0x7b, 0xfa, 0x56, 0x9a, 0x00, 0x7b, 0xfc,
4835 0x4c, 0xba, 0x00, 0x7b, 0xfe, 0x4c, 0xbb, 0x00,
4836 0x7c, 0x00, 0x17, 0x78, 0x00, 0x7c, 0x01, 0x42,
4837 0x87, 0x00, 0x7c, 0x02, 0x56, 0x9b, 0x00, 0x7c,
4838 0x03, 0x47, 0x85, 0x00, 0x7c, 0x04, 0x56, 0x9c,
4839 0x00, 0x7c, 0x06, 0x56, 0x9d, 0x00, 0x7c, 0x07,
4840 0x17, 0x79, 0x00, 0x7c, 0x09, 0x4c, 0xbc, 0x00,
4841 0x7c, 0x0b, 0x3a, 0x65, 0x00, 0x7c, 0x0c, 0x56,
4842 0x9e, 0x00, 0x7c, 0x0d, 0x17, 0x7e, 0x00, 0x7c,
4843 0x0e, 0x47, 0x86, 0x00, 0x7c, 0x0f, 0x3a, 0x66,
4844 0x00, 0x7c, 0x11, 0x17, 0x73, 0x00, 0x7c, 0x12,
4845 0x10, 0xea, 0x00, 0x7c, 0x13, 0x17, 0x7a, 0x00,
4846 0x7c, 0x14, 0x17, 0x74, 0x00, 0x7c, 0x17, 0x17,
4847 0x7d, 0x00, 0x7c, 0x19, 0x56, 0x9f, 0x00, 0x7c,
4848 0x1b, 0x56, 0xa0, 0x00, 0x7c, 0x1e, 0x1e, 0x3b,
4849 0x00, 0x7c, 0x1f, 0x17, 0x83, 0x00, 0x7c, 0x20,
4850 0x3a, 0x67, 0x00, 0x7c, 0x21, 0x06, 0x06, 0x00,
4851 0x7c, 0x23, 0x17, 0x80, 0x00, 0x7c, 0x25, 0x56,
4852 0xa1, 0x00, 0x7c, 0x26, 0x3a, 0x68, 0x00, 0x7c,
4853 0x27, 0x17, 0x81, 0x00, 0x7c, 0x28, 0x4c, 0xbd,
4854 0x00, 0x7c, 0x2a, 0x17, 0x82, 0x00, 0x7c, 0x2b,
4855 0x17, 0x85, 0x00, 0x7c, 0x2c, 0x56, 0xa2, 0x00,
4856 0x7c, 0x2f, 0x4c, 0xbe, 0x00, 0x7c, 0x31, 0x3a,
4857 0x69, 0x00, 0x7c, 0x33, 0x42, 0x88, 0x00, 0x7c,
4858 0x34, 0x56, 0xa3, 0x00, 0x7c, 0x36, 0x3a, 0x6a,
4859 0x00, 0x7c, 0x37, 0x17, 0x84, 0x00, 0x7c, 0x38,
4860 0x0d, 0x8a, 0x00, 0x7c, 0x39, 0x56, 0xa4, 0x00,
4861 0x7c, 0x3a, 0x56, 0xa5, 0x00, 0x7c, 0x3d, 0x17,
4862 0x86, 0x00, 0x7c, 0x3e, 0x0f, 0xc4, 0x00, 0x7c,
4863 0x3f, 0x0e, 0x3d, 0x00, 0x7c, 0x40, 0x17, 0x8b,
4864 0x00, 0x7c, 0x42, 0x4c, 0xbf, 0x00, 0x7c, 0x43,
4865 0x17, 0x88, 0x00, 0x7c, 0x45, 0x47, 0x87, 0x00,
4866 0x7c, 0x46, 0x56, 0xa6, 0x00, 0x7c, 0x4a, 0x47,
4867 0x88, 0x00, 0x7c, 0x4c, 0x17, 0x87, 0x00, 0x7c,
4868 0x4d, 0x0a, 0x76, 0x00, 0x7c, 0x4f, 0x17, 0x8a,
4869 0x00, 0x7c, 0x50, 0x17, 0x8c, 0x00, 0x7c, 0x51,
4870 0x3a, 0x6b, 0x00, 0x7c, 0x52, 0x4c, 0xc0, 0x00,
4871 0x7c, 0x53, 0x4c, 0xc1, 0x00, 0x7c, 0x54, 0x17,
4872 0x89, 0x00, 0x7c, 0x55, 0x56, 0xa7, 0x00, 0x7c,
4873 0x56, 0x17, 0x90, 0x00, 0x7c, 0x57, 0x47, 0x89,
4874 0x00, 0x7c, 0x58, 0x17, 0x8d, 0x00, 0x7c, 0x59,
4875 0x3a, 0x6c, 0x00, 0x7c, 0x5a, 0x56, 0xa8, 0x00,
4876 0x7c, 0x5b, 0x4c, 0xc2, 0x00, 0x7c, 0x5c, 0x4c,
4877 0xc3, 0x00, 0x7c, 0x5d, 0x4c, 0xc4, 0x00, 0x7c,
4878 0x5e, 0x47, 0x8a, 0x00, 0x7c, 0x5f, 0x17, 0x8e,
4879 0x00, 0x7c, 0x60, 0x17, 0x77, 0x00, 0x7c, 0x61,
4880 0x47, 0x8b, 0x00, 0x7c, 0x63, 0x56, 0xa9, 0x00,
4881 0x7c, 0x64, 0x17, 0x8f, 0x00, 0x7c, 0x65, 0x17,
4882 0x91, 0x00, 0x7c, 0x67, 0x3a, 0x6d, 0x00, 0x7c,
4883 0x69, 0x47, 0x8c, 0x00, 0x7c, 0x6c, 0x17, 0x92,
4884 0x00, 0x7c, 0x6d, 0x42, 0x8a, 0x00, 0x7c, 0x6e,
4885 0x3a, 0x6e, 0x00, 0x7c, 0x6f, 0x47, 0x8d, 0x00,
4886 0x7c, 0x70, 0x3a, 0x6f, 0x00, 0x7c, 0x72, 0x4c,
4887 0xc5, 0x00, 0x7c, 0x73, 0x0e, 0x16, 0x00, 0x7c,
4888 0x75, 0x17, 0x93, 0x00, 0x7c, 0x79, 0x42, 0x8b,
4889 0x00, 0x7c, 0x7b, 0x37, 0x0e, 0x00, 0x7c, 0x7c,
4890 0x56, 0xab, 0x00, 0x7c, 0x7d, 0x4c, 0xc6, 0x00,
4891 0x7c, 0x7e, 0x0e, 0xee, 0x00, 0x7c, 0x81, 0x06,
4892 0xc6, 0x00, 0x7c, 0x82, 0x06, 0xff, 0x00, 0x7c,
4893 0x83, 0x17, 0x94, 0x00, 0x7c, 0x86, 0x56, 0xac,
4894 0x00, 0x7c, 0x87, 0x4c, 0xc7, 0x00, 0x7c, 0x89,
4895 0x0e, 0x04, 0x00, 0x7c, 0x8b, 0x0a, 0x2e, 0x00,
4896 0x7c, 0x8d, 0x0e, 0xbc, 0x00, 0x7c, 0x8f, 0x42,
4897 0x8c, 0x00, 0x7c, 0x90, 0x17, 0x95, 0x00, 0x7c,
4898 0x92, 0x0f, 0x7b, 0x00, 0x7c, 0x94, 0x42, 0x8d,
4899 0x00, 0x7c, 0x95, 0x0d, 0x2a, 0x00, 0x7c, 0x97,
4900 0x0a, 0xc8, 0x00, 0x7c, 0x98, 0x0c, 0xea, 0x00,
4901 0x7c, 0x9b, 0x09, 0x57, 0x00, 0x7c, 0x9e, 0x4c,
4902 0xc8, 0x00, 0x7c, 0x9f, 0x04, 0x84, 0x00, 0x7c,
4903 0xa0, 0x42, 0x8e, 0x00, 0x7c, 0xa1, 0x17, 0x9a,
4904 0x00, 0x7c, 0xa2, 0x17, 0x98, 0x00, 0x7c, 0xa4,
4905 0x17, 0x96, 0x00, 0x7c, 0xa5, 0x05, 0xdd, 0x00,
4906 0x7c, 0xa6, 0x47, 0x91, 0x00, 0x7c, 0xa7, 0x09,
4907 0xb9, 0x00, 0x7c, 0xa8, 0x17, 0x9b, 0x00, 0x7c,
4908 0xab, 0x17, 0x99, 0x00, 0x7c, 0xad, 0x17, 0x97,
4909 0x00, 0x7c, 0xae, 0x17, 0x9f, 0x00, 0x7c, 0xb0,
4910 0x56, 0xad, 0x00, 0x7c, 0xb1, 0x17, 0x9e, 0x00,
4911 0x7c, 0xb2, 0x17, 0x9d, 0x00, 0x7c, 0xb3, 0x17,
4912 0x9c, 0x00, 0x7c, 0xb6, 0x47, 0x93, 0x00, 0x7c,
4913 0xb7, 0x47, 0x94, 0x00, 0x7c, 0xb9, 0x17, 0xa0,
4914 0x00, 0x7c, 0xba, 0x4c, 0xc9, 0x00, 0x7c, 0xbb,
4915 0x56, 0xae, 0x00, 0x7c, 0xbc, 0x3a, 0x70, 0x00,
4916 0x7c, 0xbd, 0x17, 0xa1, 0x00, 0x7c, 0xbe, 0x21,
4917 0x8e, 0x00, 0x7c, 0xbf, 0x3a, 0x71, 0x00, 0x7c,
4918 0xc0, 0x17, 0xa2, 0x00, 0x7c, 0xc2, 0x17, 0xa4,
4919 0x00, 0x7c, 0xc4, 0x47, 0x96, 0x00, 0x7c, 0xc5,
4920 0x17, 0xa3, 0x00, 0x7c, 0xc7, 0x4c, 0xca, 0x00,
4921 0x7c, 0xc8, 0x3a, 0x72, 0x00, 0x7c, 0xc9, 0x3a,
4922 0x73, 0x00, 0x7c, 0xca, 0x07, 0x86, 0x00, 0x7c,
4923 0xcd, 0x47, 0x98, 0x00, 0x7c, 0xce, 0x0a, 0xba,
4924 0x00, 0x7c, 0xcf, 0x56, 0xaf, 0x00, 0x7c, 0xd2,
4925 0x17, 0xa6, 0x00, 0x7c, 0xd3, 0x4c, 0xcb, 0x00,
4926 0x7c, 0xd4, 0x56, 0xb0, 0x00, 0x7c, 0xd5, 0x42,
4927 0x8f, 0x00, 0x7c, 0xd6, 0x36, 0x84, 0x00, 0x7c,
4928 0xd7, 0x3a, 0x74, 0x00, 0x7c, 0xd8, 0x17, 0xa5,
4929 0x00, 0x7c, 0xd9, 0x3a, 0x75, 0x00, 0x7c, 0xda,
4930 0x4c, 0xcc, 0x00, 0x7c, 0xdc, 0x17, 0xa7, 0x00,
4931 0x7c, 0xdd, 0x3a, 0x76, 0x00, 0x7c, 0xde, 0x0e,
4932 0x05, 0x00, 0x7c, 0xdf, 0x0a, 0xee, 0x00, 0x7c,
4933 0xe0, 0x07, 0xd9, 0x00, 0x7c, 0xe2, 0x17, 0xa8,
4934 0x00, 0x7c, 0xe6, 0x47, 0x9b, 0x00, 0x7c, 0xe7,
4935 0x0f, 0x90, 0x00, 0x7c, 0xe9, 0x56, 0xb1, 0x00,
4936 0x7c, 0xeb, 0x3a, 0x77, 0x00, 0x7c, 0xef, 0x17,
4937 0xaa, 0x00, 0x7c, 0xf2, 0x17, 0xab, 0x00, 0x7c,
4938 0xf4, 0x17, 0xac, 0x00, 0x7c, 0xf5, 0x47, 0x9d,
4939 0x00, 0x7c, 0xf6, 0x17, 0xad, 0x00, 0x7c, 0xf8,
4940 0x08, 0xb3, 0x00, 0x7c, 0xfa, 0x17, 0xae, 0x00,
4941 0x7c, 0xfb, 0x07, 0x25, 0x00, 0x7c, 0xfe, 0x06,
4942 0x84, 0x00, 0x7d, 0x00, 0x06, 0x44, 0x00, 0x7d,
4943 0x02, 0x17, 0xb0, 0x00, 0x7d, 0x03, 0x47, 0x9e,
4944 0x00, 0x7d, 0x04, 0x0e, 0xff, 0x00, 0x7d, 0x05,
4945 0x07, 0xda, 0x00, 0x7d, 0x06, 0x17, 0xaf, 0x00,
4946 0x7d, 0x07, 0x3a, 0x78, 0x00, 0x7d, 0x08, 0x3a,
4947 0x79, 0x00, 0x7d, 0x09, 0x3a, 0x7a, 0x00, 0x7d,
4948 0x0a, 0x17, 0xb3, 0x00, 0x7d, 0x0b, 0x0e, 0xf2,
4949 0x00, 0x7d, 0x0d, 0x0c, 0xf2, 0x00, 0x7d, 0x0f,
4950 0x56, 0xb2, 0x00, 0x7d, 0x10, 0x0d, 0xa5, 0x00,
4951 0x7d, 0x11, 0x56, 0xb3, 0x00, 0x7d, 0x12, 0x47,
4952 0xa0, 0x00, 0x7d, 0x13, 0x3a, 0x7b, 0x00, 0x7d,
4953 0x14, 0x09, 0x6d, 0x00, 0x7d, 0x15, 0x17, 0xb2,
4954 0x00, 0x7d, 0x16, 0x56, 0xb4, 0x00, 0x7d, 0x17,
4955 0x08, 0xff, 0x00, 0x7d, 0x18, 0x07, 0xdb, 0x00,
4956 0x7d, 0x19, 0x08, 0xb4, 0x00, 0x7d, 0x1a, 0x06,
4957 0x83, 0x00, 0x7d, 0x1b, 0x0e, 0x06, 0x00, 0x7d,
4958 0x1c, 0x17, 0xb1, 0x00, 0x7d, 0x1d, 0x3a, 0x7c,
4959 0x00, 0x7d, 0x1e, 0x47, 0xa1, 0x00, 0x7d, 0x20,
4960 0x0a, 0xc9, 0x00, 0x7d, 0x21, 0x0e, 0x70, 0x00,
4961 0x7d, 0x22, 0x08, 0x67, 0x00, 0x7d, 0x23, 0x3a,
4962 0x7d, 0x00, 0x7d, 0x26, 0x56, 0xb5, 0x00, 0x7d,
4963 0x2a, 0x56, 0xb6, 0x00, 0x7d, 0x2b, 0x08, 0xb5,
4964 0x00, 0x7d, 0x2c, 0x0b, 0xf9, 0x00, 0x7d, 0x2d,
4965 0x56, 0xb7, 0x00, 0x7d, 0x2e, 0x17, 0xb6, 0x00,
4966 0x7d, 0x2f, 0x0f, 0xa7, 0x00, 0x7d, 0x30, 0x08,
4967 0x49, 0x00, 0x7d, 0x31, 0x42, 0x90, 0x00, 0x7d,
4968 0x32, 0x17, 0xb7, 0x00, 0x7d, 0x33, 0x0a, 0x08,
4969 0x00, 0x7d, 0x35, 0x17, 0xb9, 0x00, 0x7d, 0x39,
4970 0x09, 0xba, 0x00, 0x7d, 0x3a, 0x08, 0x20, 0x00,
4971 0x7d, 0x3c, 0x4c, 0xcd, 0x00, 0x7d, 0x3d, 0x47,
4972 0xa4, 0x00, 0x7d, 0x3e, 0x47, 0xa5, 0x00, 0x7d,
4973 0x3f, 0x17, 0xb8, 0x00, 0x7d, 0x40, 0x47, 0xa6,
4974 0x00, 0x7d, 0x41, 0x3a, 0x7e, 0x00, 0x7d, 0x42,
4975 0x09, 0x34, 0x00, 0x7d, 0x43, 0x07, 0x72, 0x00,
4976 0x7d, 0x44, 0x0a, 0xca, 0x00, 0x7d, 0x45, 0x17,
4977 0xb4, 0x00, 0x7d, 0x46, 0x17, 0xba, 0x00, 0x7d,
4978 0x47, 0x47, 0xa7, 0x00, 0x7d, 0x48, 0x21, 0x8f,
4979 0x00, 0x7d, 0x4b, 0x17, 0xb5, 0x00, 0x7d, 0x4c,
4980 0x07, 0x26, 0x00, 0x7d, 0x4d, 0x4c, 0xce, 0x00,
4981 0x7d, 0x4e, 0x17, 0xbd, 0x00, 0x7d, 0x4f, 0x17,
4982 0xc1, 0x00, 0x7d, 0x50, 0x07, 0x41, 0x00, 0x7d,
4983 0x51, 0x56, 0xb8, 0x00, 0x7d, 0x53, 0x3a, 0x7f,
4984 0x00, 0x7d, 0x55, 0x36, 0x3a, 0x00, 0x7d, 0x56,
4985 0x17, 0xbc, 0x00, 0x7d, 0x57, 0x56, 0xb9, 0x00,
4986 0x7d, 0x59, 0x3a, 0x80, 0x00, 0x7d, 0x5a, 0x47,
4987 0xab, 0x00, 0x7d, 0x5b, 0x17, 0xc5, 0x00, 0x7d,
4988 0x5c, 0x42, 0x91, 0x00, 0x7d, 0x5d, 0x3a, 0x81,
4989 0x00, 0x7d, 0x5e, 0x07, 0xdc, 0x00, 0x7d, 0x61,
4990 0x0f, 0x57, 0x00, 0x7d, 0x62, 0x04, 0x80, 0x00,
4991 0x7d, 0x63, 0x17, 0xc2, 0x00, 0x7d, 0x65, 0x56,
4992 0xba, 0x00, 0x7d, 0x66, 0x06, 0x85, 0x00, 0x7d,
4993 0x67, 0x56, 0xbb, 0x00, 0x7d, 0x68, 0x17, 0xbf,
4994 0x00, 0x7d, 0x6a, 0x47, 0xac, 0x00, 0x7d, 0x6e,
4995 0x17, 0xc0, 0x00, 0x7d, 0x70, 0x47, 0xad, 0x00,
4996 0x7d, 0x71, 0x0c, 0x77, 0x00, 0x7d, 0x72, 0x17,
4997 0xbe, 0x00, 0x7d, 0x73, 0x17, 0xbb, 0x00, 0x7d,
4998 0x75, 0x05, 0x86, 0x00, 0x7d, 0x76, 0x0a, 0x88,
4999 0x00, 0x7d, 0x78, 0x56, 0xbc, 0x00, 0x7d, 0x79,
5000 0x07, 0x5c, 0x00, 0x7d, 0x7a, 0x3a, 0x82, 0x00,
5001 0x7d, 0x7b, 0x56, 0xbd, 0x00, 0x7d, 0x7d, 0x17,
5002 0xc7, 0x00, 0x7d, 0x7f, 0x47, 0xaf, 0x00, 0x7d,
5003 0x81, 0x56, 0xbe, 0x00, 0x7d, 0x82, 0x4c, 0xcf,
5004 0x00, 0x7d, 0x83, 0x42, 0x92, 0x00, 0x7d, 0x85,
5005 0x4c, 0xd0, 0x00, 0x7d, 0x86, 0x3a, 0x83, 0x00,
5006 0x7d, 0x88, 0x47, 0xb1, 0x00, 0x7d, 0x89, 0x17,
5007 0xc4, 0x00, 0x7d, 0x8b, 0x3a, 0x84, 0x00, 0x7d,
5008 0x8c, 0x3a, 0x85, 0x00, 0x7d, 0x8d, 0x4c, 0xd1,
5009 0x00, 0x7d, 0x8f, 0x17, 0xc6, 0x00, 0x7d, 0x91,
5010 0x4c, 0xd2, 0x00, 0x7d, 0x93, 0x17, 0xc3, 0x00,
5011 0x7d, 0x96, 0x56, 0xbf, 0x00, 0x7d, 0x97, 0x47,
5012 0xb2, 0x00, 0x7d, 0x99, 0x07, 0x27, 0x00, 0x7d,
5013 0x9a, 0x0b, 0x13, 0x00, 0x7d, 0x9b, 0x17, 0xc8,
5014 0x00, 0x7d, 0x9c, 0x0a, 0xf0, 0x00, 0x7d, 0x9d,
5015 0x47, 0xb4, 0x00, 0x7d, 0x9e, 0x4c, 0xd3, 0x00,
5016 0x7d, 0x9f, 0x17, 0xd5, 0x00, 0x7d, 0xa0, 0x21,
5017 0x92, 0x00, 0x7d, 0xa2, 0x17, 0xd1, 0x00, 0x7d,
5018 0xa3, 0x17, 0xcb, 0x00, 0x7d, 0xa6, 0x42, 0x93,
5019 0x00, 0x7d, 0xa7, 0x47, 0xb5, 0x00, 0x7d, 0xaa,
5020 0x47, 0xb6, 0x00, 0x7d, 0xab, 0x17, 0xcf, 0x00,
5021 0x7d, 0xac, 0x09, 0x26, 0x00, 0x7d, 0xad, 0x04,
5022 0xa1, 0x00, 0x7d, 0xae, 0x17, 0xca, 0x00, 0x7d,
5023 0xaf, 0x17, 0xd2, 0x00, 0x7d, 0xb0, 0x17, 0xd6,
5024 0x00, 0x7d, 0xb1, 0x07, 0xdd, 0x00, 0x7d, 0xb2,
5025 0x0e, 0xe2, 0x00, 0x7d, 0xb3, 0x4c, 0xd4, 0x00,
5026 0x7d, 0xb4, 0x0b, 0xf2, 0x00, 0x7d, 0xb5, 0x17,
5027 0xcc, 0x00, 0x7d, 0xb6, 0x47, 0xb7, 0x00, 0x7d,
5028 0xb7, 0x21, 0x91, 0x00, 0x7d, 0xb8, 0x17, 0xd4,
5029 0x00, 0x7d, 0xb9, 0x4c, 0xd5, 0x00, 0x7d, 0xba,
5030 0x17, 0xc9, 0x00, 0x7d, 0xbb, 0x0b, 0x7c, 0x00,
5031 0x7d, 0xbd, 0x17, 0xce, 0x00, 0x7d, 0xbe, 0x04,
5032 0x81, 0x00, 0x7d, 0xbf, 0x0e, 0xd6, 0x00, 0x7d,
5033 0xc0, 0x47, 0xb8, 0x00, 0x7d, 0xc2, 0x42, 0x94,
5034 0x00, 0x7d, 0xc3, 0x56, 0xc0, 0x00, 0x7d, 0xc4,
5035 0x56, 0xc1, 0x00, 0x7d, 0xc5, 0x56, 0xc2, 0x00,
5036 0x7d, 0xc6, 0x56, 0xc3, 0x00, 0x7d, 0xc7, 0x17,
5037 0xcd, 0x00, 0x7d, 0xca, 0x06, 0xd3, 0x00, 0x7d,
5038 0xcb, 0x0d, 0x80, 0x00, 0x7d, 0xcc, 0x3a, 0x86,
5039 0x00, 0x7d, 0xcd, 0x56, 0xc4, 0x00, 0x7d, 0xce,
5040 0x56, 0xc5, 0x00, 0x7d, 0xcf, 0x0a, 0xef, 0x00,
5041 0x7d, 0xd0, 0x4c, 0xd6, 0x00, 0x7d, 0xd1, 0x0f,
5042 0x98, 0x00, 0x7d, 0xd2, 0x09, 0x79, 0x00, 0x7d,
5043 0xd5, 0x17, 0xfd, 0x00, 0x7d, 0xd6, 0x21, 0x93,
5044 0x00, 0x7d, 0xd7, 0x47, 0xb9, 0x00, 0x7d, 0xd8,
5045 0x17, 0xd7, 0x00, 0x7d, 0xd9, 0x47, 0xba, 0x00,
5046 0x7d, 0xda, 0x0a, 0xa2, 0x00, 0x7d, 0xdc, 0x17,
5047 0xd3, 0x00, 0x7d, 0xdd, 0x17, 0xd8, 0x00, 0x7d,
5048 0xde, 0x17, 0xda, 0x00, 0x7d, 0xe0, 0x0c, 0x15,
5049 0x00, 0x7d, 0xe1, 0x17, 0xdd, 0x00, 0x7d, 0xe2,
5050 0x56, 0xc7, 0x00, 0x7d, 0xe3, 0x34, 0x0a, 0x00,
5051 0x7d, 0xe4, 0x17, 0xd9, 0x00, 0x7d, 0xe5, 0x4c,
5052 0xd7, 0x00, 0x7d, 0xe6, 0x47, 0xbb, 0x00, 0x7d,
5053 0xe8, 0x0e, 0x24, 0x00, 0x7d, 0xe9, 0x06, 0x07,
5054 0x00, 0x7d, 0xea, 0x56, 0xc8, 0x00, 0x7d, 0xeb,
5055 0x3a, 0x87, 0x00, 0x7d, 0xec, 0x0e, 0xd7, 0x00,
5056 0x7d, 0xed, 0x56, 0xc9, 0x00, 0x7d, 0xef, 0x04,
5057 0xa2, 0x00, 0x7d, 0xf1, 0x3a, 0x88, 0x00, 0x7d,
5058 0xf2, 0x17, 0xdc, 0x00, 0x7d, 0xf4, 0x34, 0x57,
5059 0x00, 0x7d, 0xf5, 0x4c, 0xd8, 0x00, 0x7d, 0xf6,
5060 0x4c, 0xd9, 0x00, 0x7d, 0xf9, 0x3a, 0x89, 0x00,
5061 0x7d, 0xfa, 0x56, 0xca, 0x00, 0x7d, 0xfb, 0x17,
5062 0xdb, 0x00, 0x7e, 0x00, 0x56, 0xc6, 0x00, 0x7e,
5063 0x01, 0x05, 0x11, 0x00, 0x7e, 0x04, 0x0c, 0xc4,
5064 0x00, 0x7e, 0x05, 0x17, 0xde, 0x00, 0x7e, 0x08,
5065 0x3a, 0x8a, 0x00, 0x7e, 0x09, 0x17, 0xe5, 0x00,
5066 0x7e, 0x0a, 0x17, 0xdf, 0x00, 0x7e, 0x0b, 0x17,
5067 0xe6, 0x00, 0x7e, 0x10, 0x47, 0xbf, 0x00, 0x7e,
5068 0x11, 0x3a, 0x8b, 0x00, 0x7e, 0x12, 0x17, 0xe2,
5069 0x00, 0x7e, 0x15, 0x3a, 0x8c, 0x00, 0x7e, 0x17,
5070 0x47, 0xc0, 0x00, 0x7e, 0x1b, 0x0d, 0x31, 0x00,
5071 0x7e, 0x1c, 0x56, 0xcb, 0x00, 0x7e, 0x1d, 0x47,
5072 0xc1, 0x00, 0x7e, 0x1e, 0x08, 0xf6, 0x00, 0x7e,
5073 0x1f, 0x17, 0xe4, 0x00, 0x7e, 0x20, 0x3a, 0x8d,
5074 0x00, 0x7e, 0x21, 0x17, 0xe1, 0x00, 0x7e, 0x22,
5075 0x17, 0xe7, 0x00, 0x7e, 0x23, 0x17, 0xe0, 0x00,
5076 0x7e, 0x26, 0x09, 0x4e, 0x00, 0x7e, 0x27, 0x47,
5077 0xc2, 0x00, 0x7e, 0x28, 0x42, 0x95, 0x00, 0x7e,
5078 0x2b, 0x0e, 0x53, 0x00, 0x7e, 0x2c, 0x47, 0xc3,
5079 0x00, 0x7e, 0x2d, 0x56, 0xcc, 0x00, 0x7e, 0x2e,
5080 0x09, 0x56, 0x00, 0x7e, 0x2f, 0x4c, 0xda, 0x00,
5081 0x7e, 0x31, 0x17, 0xe3, 0x00, 0x7e, 0x32, 0x17,
5082 0xef, 0x00, 0x7e, 0x33, 0x56, 0xcd, 0x00, 0x7e,
5083 0x35, 0x17, 0xeb, 0x00, 0x7e, 0x36, 0x4c, 0xdb,
5084 0x00, 0x7e, 0x37, 0x17, 0xee, 0x00, 0x7e, 0x39,
5085 0x17, 0xec, 0x00, 0x7e, 0x3a, 0x17, 0xf0, 0x00,
5086 0x7e, 0x3b, 0x17, 0xea, 0x00, 0x7e, 0x3d, 0x17,
5087 0xd0, 0x00, 0x7e, 0x3e, 0x0a, 0x77, 0x00, 0x7e,
5088 0x3f, 0x56, 0xce, 0x00, 0x7e, 0x41, 0x0d, 0x5f,
5089 0x00, 0x7e, 0x43, 0x17, 0xed, 0x00, 0x7e, 0x44,
5090 0x4c, 0xdc, 0x00, 0x7e, 0x45, 0x47, 0xc4, 0x00,
5091 0x7e, 0x46, 0x17, 0xe8, 0x00, 0x7e, 0x47, 0x3a,
5092 0x8e, 0x00, 0x7e, 0x48, 0x37, 0x67, 0x00, 0x7e,
5093 0x4a, 0x0a, 0xa3, 0x00, 0x7e, 0x4b, 0x07, 0x28,
5094 0x00, 0x7e, 0x4d, 0x09, 0x35, 0x00, 0x7e, 0x4e,
5095 0x56, 0xcf, 0x00, 0x7e, 0x50, 0x56, 0xd0, 0x00,
5096 0x7e, 0x52, 0x21, 0x94, 0x00, 0x7e, 0x54, 0x09,
5097 0xeb, 0x00, 0x7e, 0x55, 0x0a, 0xb8, 0x00, 0x7e,
5098 0x56, 0x17, 0xf3, 0x00, 0x7e, 0x58, 0x56, 0xd1,
5099 0x00, 0x7e, 0x59, 0x17, 0xf5, 0x00, 0x7e, 0x5a,
5100 0x17, 0xf6, 0x00, 0x7e, 0x5d, 0x17, 0xf2, 0x00,
5101 0x7e, 0x5e, 0x17, 0xf4, 0x00, 0x7e, 0x5f, 0x56,
5102 0xd2, 0x00, 0x7e, 0x61, 0x1e, 0x11, 0x00, 0x7e,
5103 0x62, 0x3a, 0x8f, 0x00, 0x7e, 0x65, 0x56, 0xd3,
5104 0x00, 0x7e, 0x66, 0x17, 0xe9, 0x00, 0x7e, 0x67,
5105 0x17, 0xf1, 0x00, 0x7e, 0x69, 0x17, 0xf9, 0x00,
5106 0x7e, 0x6a, 0x17, 0xf8, 0x00, 0x7e, 0x6b, 0x1d,
5107 0xf7, 0x00, 0x7e, 0x6d, 0x0e, 0xa8, 0x00, 0x7e,
5108 0x6e, 0x3a, 0x90, 0x00, 0x7e, 0x6f, 0x4c, 0xdd,
5109 0x00, 0x7e, 0x70, 0x07, 0x01, 0x00, 0x7e, 0x73,
5110 0x3a, 0x91, 0x00, 0x7e, 0x75, 0x47, 0xc5, 0x00,
5111 0x7e, 0x78, 0x4c, 0xde, 0x00, 0x7e, 0x79, 0x17,
5112 0xf7, 0x00, 0x7e, 0x7b, 0x17, 0xfb, 0x00, 0x7e,
5113 0x7c, 0x17, 0xfa, 0x00, 0x7e, 0x7d, 0x17, 0xfe,
5114 0x00, 0x7e, 0x7e, 0x47, 0xc6, 0x00, 0x7e, 0x7f,
5115 0x18, 0x00, 0x00, 0x7e, 0x81, 0x4c, 0xdf, 0x00,
5116 0x7e, 0x82, 0x08, 0x8a, 0x00, 0x7e, 0x83, 0x17,
5117 0xfc, 0x00, 0x7e, 0x86, 0x47, 0xc7, 0x00, 0x7e,
5118 0x87, 0x47, 0xc8, 0x00, 0x7e, 0x88, 0x18, 0x01,
5119 0x00, 0x7e, 0x89, 0x18, 0x02, 0x00, 0x7e, 0x8a,
5120 0x20, 0xa7, 0x00, 0x7e, 0x8c, 0x18, 0x03, 0x00,
5121 0x7e, 0x8d, 0x3a, 0x92, 0x00, 0x7e, 0x8e, 0x18,
5122 0x09, 0x00, 0x7e, 0x8f, 0x0c, 0x35, 0x00, 0x7e,
5123 0x90, 0x18, 0x05, 0x00, 0x7e, 0x91, 0x3a, 0x93,
5124 0x00, 0x7e, 0x92, 0x18, 0x04, 0x00, 0x7e, 0x93,
5125 0x18, 0x06, 0x00, 0x7e, 0x94, 0x18, 0x07, 0x00,
5126 0x7e, 0x95, 0x56, 0xd4, 0x00, 0x7e, 0x96, 0x18,
5127 0x08, 0x00, 0x7e, 0x98, 0x3a, 0x94, 0x00, 0x7e,
5128 0x9a, 0x47, 0xca, 0x00, 0x7e, 0x9b, 0x18, 0x0a,
5129 0x00, 0x7e, 0x9c, 0x18, 0x0b, 0x00, 0x7e, 0x9d,
5130 0x56, 0xd5, 0x00, 0x7e, 0x9e, 0x56, 0xd6, 0x00,
5131 0x7f, 0x36, 0x06, 0x08, 0x00, 0x7f, 0x38, 0x18,
5132 0x0c, 0x00, 0x7f, 0x3a, 0x18, 0x0d, 0x00, 0x7f,
5133 0x3b, 0x47, 0xcd, 0x00, 0x7f, 0x3c, 0x47, 0xcc,
5134 0x00, 0x7f, 0x3d, 0x4c, 0xe0, 0x00, 0x7f, 0x3e,
5135 0x47, 0xce, 0x00, 0x7f, 0x3f, 0x56, 0xd7, 0x00,
5136 0x7f, 0x43, 0x47, 0xcf, 0x00, 0x7f, 0x44, 0x3a,
5137 0x95, 0x00, 0x7f, 0x45, 0x18, 0x0e, 0x00, 0x7f,
5138 0x47, 0x21, 0x95, 0x00, 0x7f, 0x4c, 0x18, 0x0f,
5139 0x00, 0x7f, 0x4d, 0x18, 0x10, 0x00, 0x7f, 0x4e,
5140 0x18, 0x11, 0x00, 0x7f, 0x4f, 0x3a, 0x96, 0x00,
5141 0x7f, 0x50, 0x18, 0x12, 0x00, 0x7f, 0x51, 0x18,
5142 0x13, 0x00, 0x7f, 0x52, 0x3a, 0x97, 0x00, 0x7f,
5143 0x53, 0x3a, 0x98, 0x00, 0x7f, 0x54, 0x18, 0x15,
5144 0x00, 0x7f, 0x55, 0x18, 0x14, 0x00, 0x7f, 0x58,
5145 0x18, 0x16, 0x00, 0x7f, 0x5b, 0x4c, 0xe1, 0x00,
5146 0x7f, 0x5c, 0x56, 0xd8, 0x00, 0x7f, 0x5d, 0x4c,
5147 0xe2, 0x00, 0x7f, 0x5f, 0x18, 0x17, 0x00, 0x7f,
5148 0x60, 0x18, 0x18, 0x00, 0x7f, 0x61, 0x3a, 0x99,
5149 0x00, 0x7f, 0x63, 0x47, 0xd3, 0x00, 0x7f, 0x64,
5150 0x47, 0xd4, 0x00, 0x7f, 0x65, 0x4c, 0xe3, 0x00,
5151 0x7f, 0x66, 0x56, 0xd9, 0x00, 0x7f, 0x67, 0x18,
5152 0x1b, 0x00, 0x7f, 0x68, 0x18, 0x19, 0x00, 0x7f,
5153 0x69, 0x18, 0x1a, 0x00, 0x7f, 0x6a, 0x08, 0x51,
5154 0x00, 0x7f, 0x6b, 0x07, 0x29, 0x00, 0x7f, 0x6d,
5155 0x47, 0xd5, 0x00, 0x7f, 0x6e, 0x0b, 0x94, 0x00,
5156 0x7f, 0x70, 0x0d, 0x47, 0x00, 0x7f, 0x71, 0x4c,
5157 0xe4, 0x00, 0x7f, 0x72, 0x34, 0x29, 0x00, 0x7f,
5158 0x75, 0x0d, 0x03, 0x00, 0x7f, 0x77, 0x0d, 0x81,
5159 0x00, 0x7f, 0x78, 0x18, 0x1c, 0x00, 0x7f, 0x79,
5160 0x13, 0x36, 0x00, 0x7f, 0x7d, 0x47, 0xd6, 0x00,
5161 0x7f, 0x7e, 0x47, 0xd7, 0x00, 0x7f, 0x7f, 0x4c,
5162 0xe5, 0x00, 0x7f, 0x80, 0x4c, 0xe6, 0x00, 0x7f,
5163 0x82, 0x18, 0x1d, 0x00, 0x7f, 0x83, 0x18, 0x1f,
5164 0x00, 0x7f, 0x85, 0x0f, 0x4f, 0x00, 0x7f, 0x86,
5165 0x18, 0x1e, 0x00, 0x7f, 0x87, 0x18, 0x21, 0x00,
5166 0x7f, 0x88, 0x18, 0x20, 0x00, 0x7f, 0x8a, 0x36,
5167 0xfe, 0x00, 0x7f, 0x8b, 0x4c, 0xe7, 0x00, 0x7f,
5168 0x8c, 0x18, 0x22, 0x00, 0x7f, 0x8d, 0x56, 0xdb,
5169 0x00, 0x7f, 0x8e, 0x0d, 0x92, 0x00, 0x7f, 0x8f,
5170 0x56, 0xdc, 0x00, 0x7f, 0x90, 0x47, 0xd8, 0x00,
5171 0x7f, 0x91, 0x3a, 0x9a, 0x00, 0x7f, 0x94, 0x18,
5172 0x23, 0x00, 0x7f, 0x96, 0x47, 0xdb, 0x00, 0x7f,
5173 0x97, 0x42, 0x96, 0x00, 0x7f, 0x9a, 0x18, 0x26,
5174 0x00, 0x7f, 0x9c, 0x47, 0xdc, 0x00, 0x7f, 0x9d,
5175 0x18, 0x25, 0x00, 0x7f, 0x9e, 0x18, 0x24, 0x00,
5176 0x7f, 0xa1, 0x21, 0x96, 0x00, 0x7f, 0xa2, 0x4c,
5177 0xe8, 0x00, 0x7f, 0xa3, 0x18, 0x27, 0x00, 0x7f,
5178 0xa4, 0x07, 0x08, 0x00, 0x7f, 0xa6, 0x56, 0xdd,
5179 0x00, 0x7f, 0xa8, 0x0a, 0xa4, 0x00, 0x7f, 0xa9,
5180 0x06, 0x5b, 0x00, 0x7f, 0xaa, 0x56, 0xde, 0x00,
5181 0x7f, 0xad, 0x47, 0xdd, 0x00, 0x7f, 0xae, 0x18,
5182 0x2b, 0x00, 0x7f, 0xaf, 0x18, 0x28, 0x00, 0x7f,
5183 0xb2, 0x18, 0x29, 0x00, 0x7f, 0xb4, 0x56, 0xdf,
5184 0x00, 0x7f, 0xb6, 0x18, 0x2c, 0x00, 0x7f, 0xb8,
5185 0x18, 0x2d, 0x00, 0x7f, 0xb9, 0x18, 0x2a, 0x00,
5186 0x7f, 0xbc, 0x56, 0xe0, 0x00, 0x7f, 0xbd, 0x21,
5187 0x97, 0x00, 0x7f, 0xbf, 0x3a, 0x9b, 0x00, 0x7f,
5188 0xc0, 0x56, 0xe1, 0x00, 0x7f, 0xc1, 0x05, 0x27,
5189 0x00, 0x7f, 0xc3, 0x47, 0xdf, 0x00, 0x7f, 0xc5,
5190 0x18, 0x2f, 0x00, 0x7f, 0xc6, 0x18, 0x30, 0x00,
5191 0x7f, 0xc8, 0x56, 0xe2, 0x00, 0x7f, 0xca, 0x18,
5192 0x31, 0x00, 0x7f, 0xcc, 0x0f, 0x4c, 0x00, 0x7f,
5193 0xce, 0x3a, 0x9c, 0x00, 0x7f, 0xcf, 0x47, 0xe0,
5194 0x00, 0x7f, 0xd2, 0x09, 0x36, 0x00, 0x7f, 0xd4,
5195 0x18, 0x33, 0x00, 0x7f, 0xd5, 0x18, 0x32, 0x00,
5196 0x7f, 0xdb, 0x42, 0x97, 0x00, 0x7f, 0xdf, 0x3a,
5197 0x9d, 0x00, 0x7f, 0xe0, 0x0a, 0x2f, 0x00, 0x7f,
5198 0xe1, 0x18, 0x34, 0x00, 0x7f, 0xe3, 0x47, 0xe1,
5199 0x00, 0x7f, 0xe5, 0x3a, 0x9e, 0x00, 0x7f, 0xe6,
5200 0x18, 0x35, 0x00, 0x7f, 0xe8, 0x56, 0xe3, 0x00,
5201 0x7f, 0xe9, 0x18, 0x36, 0x00, 0x7f, 0xeb, 0x06,
5202 0x21, 0x00, 0x7f, 0xec, 0x3a, 0x9f, 0x00, 0x7f,
5203 0xee, 0x3a, 0xa0, 0x00, 0x7f, 0xef, 0x3a, 0xa1,
5204 0x00, 0x7f, 0xf0, 0x06, 0x09, 0x00, 0x7f, 0xf2,
5205 0x47, 0xe2, 0x00, 0x7f, 0xf3, 0x18, 0x37, 0x00,
5206 0x7f, 0xf9, 0x18, 0x38, 0x00, 0x7f, 0xfa, 0x3a,
5207 0xa2, 0x00, 0x7f, 0xfb, 0x0e, 0x8b, 0x00, 0x7f,
5208 0xfc, 0x0f, 0x4d, 0x00, 0x7f, 0xfd, 0x4c, 0xe9,
5209 0x00, 0x7f, 0xfe, 0x4c, 0xea, 0x00, 0x7f, 0xff,
5210 0x4c, 0xeb, 0x00, 0x80, 0x00, 0x0f, 0x3e, 0x00,
5211 0x80, 0x01, 0x0f, 0xdd, 0x00, 0x80, 0x02, 0x37,
5212 0x13, 0x00, 0x80, 0x03, 0x07, 0xdf, 0x00, 0x80,
5213 0x04, 0x18, 0x3b, 0x00, 0x80, 0x05, 0x09, 0x00,
5214 0x00, 0x80, 0x06, 0x18, 0x3a, 0x00, 0x80, 0x07,
5215 0x4c, 0xec, 0x00, 0x80, 0x08, 0x47, 0xe4, 0x00,
5216 0x80, 0x0a, 0x47, 0xe3, 0x00, 0x80, 0x0b, 0x18,
5217 0x3c, 0x00, 0x80, 0x0c, 0x08, 0xd5, 0x00, 0x80,
5218 0x0d, 0x4c, 0xed, 0x00, 0x80, 0x0e, 0x3a, 0xa3,
5219 0x00, 0x80, 0x0f, 0x56, 0xe4, 0x00, 0x80, 0x10,
5220 0x0b, 0x31, 0x00, 0x80, 0x11, 0x3a, 0xa4, 0x00,
5221 0x80, 0x12, 0x18, 0x3d, 0x00, 0x80, 0x13, 0x56,
5222 0xe5, 0x00, 0x80, 0x14, 0x3a, 0xa5, 0x00, 0x80,
5223 0x15, 0x07, 0xde, 0x00, 0x80, 0x16, 0x47, 0xe5,
5224 0x00, 0x80, 0x17, 0x0e, 0xe3, 0x00, 0x80, 0x18,
5225 0x18, 0x3e, 0x00, 0x80, 0x19, 0x18, 0x3f, 0x00,
5226 0x80, 0x1c, 0x18, 0x40, 0x00, 0x80, 0x1d, 0x56,
5227 0xe6, 0x00, 0x80, 0x1e, 0x4c, 0xee, 0x00, 0x80,
5228 0x1f, 0x56, 0xe7, 0x00, 0x80, 0x20, 0x56, 0xe8,
5229 0x00, 0x80, 0x21, 0x18, 0x41, 0x00, 0x80, 0x24,
5230 0x3a, 0xa6, 0x00, 0x80, 0x26, 0x3a, 0xa7, 0x00,
5231 0x80, 0x28, 0x18, 0x42, 0x00, 0x80, 0x2c, 0x47,
5232 0xe6, 0x00, 0x80, 0x2e, 0x56, 0xe9, 0x00, 0x80,
5233 0x30, 0x47, 0xe7, 0x00, 0x80, 0x33, 0x08, 0xd6,
5234 0x00, 0x80, 0x34, 0x56, 0xea, 0x00, 0x80, 0x35,
5235 0x42, 0x98, 0x00, 0x80, 0x36, 0x0e, 0xf9, 0x00,
5236 0x80, 0x37, 0x42, 0x99, 0x00, 0x80, 0x39, 0x4c,
5237 0xef, 0x00, 0x80, 0x3a, 0x3a, 0xa8, 0x00, 0x80,
5238 0x3b, 0x18, 0x44, 0x00, 0x80, 0x3c, 0x3a, 0xa9,
5239 0x00, 0x80, 0x3d, 0x0b, 0x7d, 0x00, 0x80, 0x3e,
5240 0x56, 0xeb, 0x00, 0x80, 0x3f, 0x18, 0x43, 0x00,
5241 0x80, 0x40, 0x56, 0xec, 0x00, 0x80, 0x43, 0x47,
5242 0xe8, 0x00, 0x80, 0x44, 0x56, 0xed, 0x00, 0x80,
5243 0x46, 0x18, 0x46, 0x00, 0x80, 0x4a, 0x18, 0x45,
5244 0x00, 0x80, 0x52, 0x18, 0x47, 0x00, 0x80, 0x56,
5245 0x0a, 0x5f, 0x00, 0x80, 0x58, 0x18, 0x48, 0x00,
5246 0x80, 0x5a, 0x18, 0x49, 0x00, 0x80, 0x5e, 0x0e,
5247 0x09, 0x00, 0x80, 0x5f, 0x18, 0x4a, 0x00, 0x80,
5248 0x60, 0x3a, 0xaa, 0x00, 0x80, 0x61, 0x0a, 0xf1,
5249 0x00, 0x80, 0x62, 0x18, 0x4b, 0x00, 0x80, 0x64,
5250 0x56, 0xee, 0x00, 0x80, 0x66, 0x47, 0xe9, 0x00,
5251 0x80, 0x68, 0x18, 0x4c, 0x00, 0x80, 0x6d, 0x56,
5252 0xef, 0x00, 0x80, 0x6f, 0x0f, 0xc6, 0x00, 0x80,
5253 0x70, 0x18, 0x4f, 0x00, 0x80, 0x71, 0x3a, 0xab,
5254 0x00, 0x80, 0x72, 0x18, 0x4e, 0x00, 0x80, 0x73,
5255 0x18, 0x4d, 0x00, 0x80, 0x74, 0x0b, 0xcc, 0x00,
5256 0x80, 0x75, 0x3a, 0xac, 0x00, 0x80, 0x76, 0x18,
5257 0x50, 0x00, 0x80, 0x77, 0x09, 0xec, 0x00, 0x80,
5258 0x79, 0x18, 0x51, 0x00, 0x80, 0x7b, 0x47, 0xea,
5259 0x00, 0x80, 0x7d, 0x18, 0x52, 0x00, 0x80, 0x7e,
5260 0x0f, 0xde, 0x00, 0x80, 0x7f, 0x18, 0x53, 0x00,
5261 0x80, 0x81, 0x56, 0xf0, 0x00, 0x80, 0x84, 0x18,
5262 0x54, 0x00, 0x80, 0x85, 0x18, 0x56, 0x00, 0x80,
5263 0x86, 0x18, 0x55, 0x00, 0x80, 0x87, 0x0d, 0x39,
5264 0x00, 0x80, 0x88, 0x4c, 0xf0, 0x00, 0x80, 0x89,
5265 0x0c, 0xd1, 0x00, 0x80, 0x8b, 0x0f, 0xe4, 0x00,
5266 0x80, 0x8c, 0x0d, 0x3d, 0x00, 0x80, 0x8e, 0x4c,
5267 0xf1, 0x00, 0x80, 0x93, 0x18, 0x58, 0x00, 0x80,
5268 0x96, 0x09, 0xbb, 0x00, 0x80, 0x98, 0x0d, 0x9c,
5269 0x00, 0x80, 0x99, 0x47, 0xeb, 0x00, 0x80, 0x9a,
5270 0x18, 0x59, 0x00, 0x80, 0x9b, 0x18, 0x57, 0x00,
5271 0x80, 0x9c, 0x47, 0xec, 0x00, 0x80, 0x9d, 0x06,
5272 0x0a, 0x00, 0x80, 0x9e, 0x3a, 0xad, 0x00, 0x80,
5273 0xa1, 0x07, 0x88, 0x00, 0x80, 0xa2, 0x08, 0xb6,
5274 0x00, 0x80, 0xa4, 0x47, 0xed, 0x00, 0x80, 0xa5,
5275 0x0d, 0x82, 0x00, 0x80, 0xa6, 0x3a, 0xae, 0x00,
5276 0x80, 0xa7, 0x47, 0xee, 0x00, 0x80, 0xa9, 0x07,
5277 0x5e, 0x00, 0x80, 0xaa, 0x0e, 0x71, 0x00, 0x80,
5278 0xab, 0x3a, 0xaf, 0x00, 0x80, 0xac, 0x18, 0x5c,
5279 0x00, 0x80, 0xad, 0x18, 0x5a, 0x00, 0x80, 0xaf,
5280 0x07, 0xe0, 0x00, 0x80, 0xb1, 0x07, 0xe1, 0x00,
5281 0x80, 0xb2, 0x04, 0xad, 0x00, 0x80, 0xb4, 0x08,
5282 0x58, 0x00, 0x80, 0xb8, 0x47, 0xef, 0x00, 0x80,
5283 0xb9, 0x56, 0xf1, 0x00, 0x80, 0xba, 0x0d, 0x0f,
5284 0x00, 0x80, 0xc3, 0x04, 0xa3, 0x00, 0x80, 0xc4,
5285 0x18, 0x61, 0x00, 0x80, 0xc5, 0x47, 0xf1, 0x00,
5286 0x80, 0xc6, 0x0b, 0x7e, 0x00, 0x80, 0xc8, 0x56,
5287 0xf2, 0x00, 0x80, 0xca, 0x42, 0x9a, 0x00, 0x80,
5288 0xcc, 0x0d, 0x0e, 0x00, 0x80, 0xcd, 0x56, 0xf3,
5289 0x00, 0x80, 0xce, 0x0b, 0x3b, 0x00, 0x80, 0xcf,
5290 0x4c, 0xf2, 0x00, 0x80, 0xd2, 0x56, 0xf4, 0x00,
5291 0x80, 0xd4, 0x4c, 0xf3, 0x00, 0x80, 0xd5, 0x47,
5292 0xf2, 0x00, 0x80, 0xd6, 0x18, 0x63, 0x00, 0x80,
5293 0xd7, 0x3a, 0xb0, 0x00, 0x80, 0xd8, 0x3a, 0xb1,
5294 0x00, 0x80, 0xd9, 0x18, 0x5f, 0x00, 0x80, 0xda,
5295 0x18, 0x62, 0x00, 0x80, 0xdb, 0x18, 0x5d, 0x00,
5296 0x80, 0xdd, 0x18, 0x60, 0x00, 0x80, 0xde, 0x0e,
5297 0x54, 0x00, 0x80, 0xe0, 0x42, 0x9b, 0x00, 0x80,
5298 0xe1, 0x07, 0x89, 0x00, 0x80, 0xe4, 0x04, 0xc1,
5299 0x00, 0x80, 0xe5, 0x18, 0x5e, 0x00, 0x80, 0xe6,
5300 0x47, 0xf3, 0x00, 0x80, 0xed, 0x4c, 0xf4, 0x00,
5301 0x80, 0xee, 0x56, 0xf5, 0x00, 0x80, 0xef, 0x18,
5302 0x65, 0x00, 0x80, 0xf0, 0x4c, 0xf5, 0x00, 0x80,
5303 0xf1, 0x18, 0x66, 0x00, 0x80, 0xf2, 0x56, 0xf6,
5304 0x00, 0x80, 0xf3, 0x42, 0x9c, 0x00, 0x80, 0xf4,
5305 0x0c, 0x91, 0x00, 0x80, 0xf5, 0x47, 0xf5, 0x00,
5306 0x80, 0xf6, 0x56, 0xf7, 0x00, 0x80, 0xf7, 0x4c,
5307 0xf6, 0x00, 0x80, 0xf8, 0x06, 0xb3, 0x00, 0x80,
5308 0xf9, 0x56, 0xf8, 0x00, 0x80, 0xfa, 0x4c, 0xf7,
5309 0x00, 0x80, 0xfb, 0x47, 0xf6, 0x00, 0x80, 0xfc,
5310 0x18, 0x71, 0x00, 0x80, 0xfd, 0x0c, 0xf3, 0x00,
5311 0x80, 0xfe, 0x4c, 0xf8, 0x00, 0x81, 0x02, 0x08,
5312 0xb7, 0x00, 0x81, 0x03, 0x4c, 0xf9, 0x00, 0x81,
5313 0x05, 0x06, 0xb4, 0x00, 0x81, 0x06, 0x0a, 0x6c,
5314 0x00, 0x81, 0x07, 0x0f, 0xec, 0x00, 0x81, 0x08,
5315 0x0e, 0xba, 0x00, 0x81, 0x09, 0x18, 0x64, 0x00,
5316 0x81, 0x0a, 0x0a, 0x78, 0x00, 0x81, 0x0b, 0x56,
5317 0xf9, 0x00, 0x81, 0x0d, 0x47, 0xf4, 0x00, 0x81,
5318 0x16, 0x3a, 0xb2, 0x00, 0x81, 0x17, 0x4c, 0xfa,
5319 0x00, 0x81, 0x18, 0x3a, 0xb3, 0x00, 0x81, 0x1a,
5320 0x06, 0x6d, 0x00, 0x81, 0x1b, 0x18, 0x67, 0x00,
5321 0x81, 0x1c, 0x56, 0xfa, 0x00, 0x81, 0x1e, 0x47,
5322 0xf9, 0x00, 0x81, 0x20, 0x56, 0xfb, 0x00, 0x81,
5323 0x23, 0x18, 0x69, 0x00, 0x81, 0x24, 0x47, 0xfb,
5324 0x00, 0x81, 0x27, 0x47, 0xfc, 0x00, 0x81, 0x29,
5325 0x18, 0x68, 0x00, 0x81, 0x2b, 0x36, 0x59, 0x00,
5326 0x81, 0x2c, 0x47, 0xfd, 0x00, 0x81, 0x2f, 0x18,
5327 0x6a, 0x00, 0x81, 0x30, 0x4c, 0xfb, 0x00, 0x81,
5328 0x31, 0x0b, 0x64, 0x00, 0x81, 0x33, 0x0c, 0xf4,
5329 0x00, 0x81, 0x35, 0x47, 0xf8, 0x00, 0x81, 0x39,
5330 0x0b, 0xcd, 0x00, 0x81, 0x3a, 0x3a, 0xb4, 0x00,
5331 0x81, 0x3c, 0x56, 0xfc, 0x00, 0x81, 0x3d, 0x47,
5332 0xff, 0x00, 0x81, 0x3e, 0x18, 0x6e, 0x00, 0x81,
5333 0x41, 0x37, 0x72, 0x00, 0x81, 0x45, 0x56, 0xfd,
5334 0x00, 0x81, 0x46, 0x18, 0x6d, 0x00, 0x81, 0x47,
5335 0x56, 0xfe, 0x00, 0x81, 0x4a, 0x3a, 0xb5, 0x00,
5336 0x81, 0x4b, 0x18, 0x6b, 0x00, 0x81, 0x4c, 0x3a,
5337 0xb6, 0x00, 0x81, 0x4e, 0x0a, 0x1b, 0x00, 0x81,
5338 0x50, 0x0d, 0xd7, 0x00, 0x81, 0x51, 0x18, 0x70,
5339 0x00, 0x81, 0x52, 0x56, 0xff, 0x00, 0x81, 0x53,
5340 0x18, 0x6f, 0x00, 0x81, 0x54, 0x07, 0xe2, 0x00,
5341 0x81, 0x55, 0x0f, 0xf9, 0x00, 0x81, 0x57, 0x4c,
5342 0xfc, 0x00, 0x81, 0x5f, 0x18, 0x80, 0x00, 0x81,
5343 0x60, 0x42, 0x9d, 0x00, 0x81, 0x61, 0x57, 0x00,
5344 0x00, 0x81, 0x65, 0x18, 0x74, 0x00, 0x81, 0x66,
5345 0x18, 0x75, 0x00, 0x81, 0x67, 0x42, 0x9e, 0x00,
5346 0x81, 0x68, 0x42, 0x9f, 0x00, 0x81, 0x69, 0x48,
5347 0x01, 0x00, 0x81, 0x6b, 0x09, 0x1c, 0x00, 0x81,
5348 0x6d, 0x42, 0xa0, 0x00, 0x81, 0x6e, 0x18, 0x73,
5349 0x00, 0x81, 0x6f, 0x4c, 0xfd, 0x00, 0x81, 0x70,
5350 0x08, 0x0a, 0x00, 0x81, 0x71, 0x18, 0x72, 0x00,
5351 0x81, 0x73, 0x4c, 0xfe, 0x00, 0x81, 0x74, 0x18,
5352 0x76, 0x00, 0x81, 0x77, 0x57, 0x01, 0x00, 0x81,
5353 0x78, 0x0b, 0xce, 0x00, 0x81, 0x79, 0x0d, 0xf2,
5354 0x00, 0x81, 0x7a, 0x0a, 0xa5, 0x00, 0x81, 0x7f,
5355 0x0b, 0x3c, 0x00, 0x81, 0x80, 0x18, 0x7a, 0x00,
5356 0x81, 0x81, 0x3a, 0xb7, 0x00, 0x81, 0x82, 0x18,
5357 0x7b, 0x00, 0x81, 0x83, 0x18, 0x77, 0x00, 0x81,
5358 0x84, 0x3a, 0xb8, 0x00, 0x81, 0x85, 0x48, 0x04,
5359 0x00, 0x81, 0x86, 0x57, 0x02, 0x00, 0x81, 0x88,
5360 0x18, 0x78, 0x00, 0x81, 0x8a, 0x18, 0x79, 0x00,
5361 0x81, 0x8b, 0x4c, 0xff, 0x00, 0x81, 0x8e, 0x57,
5362 0x03, 0x00, 0x81, 0x8f, 0x07, 0xe3, 0x00, 0x81,
5363 0x90, 0x4d, 0x00, 0x00, 0x81, 0x93, 0x18, 0x81,
5364 0x00, 0x81, 0x95, 0x18, 0x7d, 0x00, 0x81, 0x96,
5365 0x57, 0x04, 0x00, 0x81, 0x98, 0x48, 0x06, 0x00,
5366 0x81, 0x9a, 0x0d, 0xd8, 0x00, 0x81, 0x9b, 0x4d,
5367 0x01, 0x00, 0x81, 0x9c, 0x0e, 0x9a, 0x00, 0x81,
5368 0x9d, 0x0d, 0x9a, 0x00, 0x81, 0x9e, 0x4d, 0x02,
5369 0x00, 0x81, 0xa0, 0x18, 0x7c, 0x00, 0x81, 0xa2,
5370 0x57, 0x05, 0x00, 0x81, 0xa3, 0x18, 0x7f, 0x00,
5371 0x81, 0xa4, 0x18, 0x7e, 0x00, 0x81, 0xa8, 0x0e,
5372 0x72, 0x00, 0x81, 0xa9, 0x18, 0x82, 0x00, 0x81,
5373 0xae, 0x57, 0x06, 0x00, 0x81, 0xb0, 0x18, 0x83,
5374 0x00, 0x81, 0xb2, 0x48, 0x07, 0x00, 0x81, 0xb3,
5375 0x0a, 0xb9, 0x00, 0x81, 0xb4, 0x3a, 0xb9, 0x00,
5376 0x81, 0xb5, 0x18, 0x84, 0x00, 0x81, 0xb8, 0x18,
5377 0x86, 0x00, 0x81, 0xba, 0x18, 0x8a, 0x00, 0x81,
5378 0xbb, 0x42, 0xa1, 0x00, 0x81, 0xbd, 0x18, 0x87,
5379 0x00, 0x81, 0xbe, 0x18, 0x85, 0x00, 0x81, 0xbf,
5380 0x0c, 0xf5, 0x00, 0x81, 0xc0, 0x18, 0x88, 0x00,
5381 0x81, 0xc1, 0x48, 0x08, 0x00, 0x81, 0xc2, 0x18,
5382 0x89, 0x00, 0x81, 0xc3, 0x48, 0x09, 0x00, 0x81,
5383 0xc5, 0x57, 0x07, 0x00, 0x81, 0xc6, 0x05, 0x32,
5384 0x00, 0x81, 0xc8, 0x18, 0x90, 0x00, 0x81, 0xc9,
5385 0x18, 0x8b, 0x00, 0x81, 0xca, 0x42, 0xa2, 0x00,
5386 0x81, 0xcb, 0x4d, 0x03, 0x00, 0x81, 0xcd, 0x18,
5387 0x8c, 0x00, 0x81, 0xce, 0x57, 0x08, 0x00, 0x81,
5388 0xcf, 0x3a, 0xba, 0x00, 0x81, 0xd1, 0x18, 0x8d,
5389 0x00, 0x81, 0xd3, 0x0b, 0x01, 0x00, 0x81, 0xd5,
5390 0x4d, 0x04, 0x00, 0x81, 0xd6, 0x48, 0x0a, 0x00,
5391 0x81, 0xd7, 0x42, 0xa3, 0x00, 0x81, 0xd8, 0x18,
5392 0x8f, 0x00, 0x81, 0xd9, 0x18, 0x8e, 0x00, 0x81,
5393 0xda, 0x18, 0x91, 0x00, 0x81, 0xdb, 0x48, 0x0b,
5394 0x00, 0x81, 0xdd, 0x4d, 0x05, 0x00, 0x81, 0xde,
5395 0x4d, 0x06, 0x00, 0x81, 0xdf, 0x18, 0x92, 0x00,
5396 0x81, 0xe0, 0x18, 0x93, 0x00, 0x81, 0xe1, 0x4d,
5397 0x07, 0x00, 0x81, 0xe3, 0x0a, 0x09, 0x00, 0x81,
5398 0xe4, 0x48, 0x0d, 0x00, 0x81, 0xe5, 0x05, 0x69,
5399 0x00, 0x81, 0xe7, 0x18, 0x94, 0x00, 0x81, 0xe8,
5400 0x0f, 0x9f, 0x00, 0x81, 0xea, 0x08, 0xd7, 0x00,
5401 0x81, 0xeb, 0x57, 0x09, 0x00, 0x81, 0xec, 0x48,
5402 0x0f, 0x00, 0x81, 0xed, 0x09, 0x37, 0x00, 0x81,
5403 0xef, 0x4d, 0x08, 0x00, 0x81, 0xf0, 0x57, 0x0a,
5404 0x00, 0x81, 0xf1, 0x57, 0x0b, 0x00, 0x81, 0xf2,
5405 0x57, 0x0c, 0x00, 0x81, 0xf3, 0x08, 0xb8, 0x00,
5406 0x81, 0xf4, 0x0b, 0x95, 0x00, 0x81, 0xf5, 0x57,
5407 0x0d, 0x00, 0x81, 0xf6, 0x4d, 0x09, 0x00, 0x81,
5408 0xf8, 0x57, 0x0e, 0x00, 0x81, 0xf9, 0x3a, 0xbb,
5409 0x00, 0x81, 0xfa, 0x18, 0x95, 0x00, 0x81, 0xfb,
5410 0x18, 0x96, 0x00, 0x81, 0xfc, 0x04, 0xd3, 0x00,
5411 0x81, 0xfd, 0x48, 0x10, 0x00, 0x81, 0xfe, 0x18,
5412 0x97, 0x00, 0x81, 0xff, 0x48, 0x11, 0x00, 0x82,
5413 0x00, 0x4d, 0x0a, 0x00, 0x82, 0x01, 0x18, 0x98,
5414 0x00, 0x82, 0x02, 0x18, 0x99, 0x00, 0x82, 0x03,
5415 0x3a, 0xbc, 0x00, 0x82, 0x04, 0x48, 0x13, 0x00,
5416 0x82, 0x05, 0x18, 0x9a, 0x00, 0x82, 0x07, 0x18,
5417 0x9b, 0x00, 0x82, 0x08, 0x06, 0xb5, 0x00, 0x82,
5418 0x09, 0x13, 0xaf, 0x00, 0x82, 0x0a, 0x18, 0x9c,
5419 0x00, 0x82, 0x0b, 0x4d, 0x0b, 0x00, 0x82, 0x0c,
5420 0x0a, 0x89, 0x00, 0x82, 0x0d, 0x18, 0x9d, 0x00,
5421 0x82, 0x0e, 0x08, 0xf7, 0x00, 0x82, 0x0f, 0x57,
5422 0x10, 0x00, 0x82, 0x10, 0x18, 0x9e, 0x00, 0x82,
5423 0x12, 0x10, 0x09, 0x00, 0x82, 0x13, 0x4d, 0x0c,
5424 0x00, 0x82, 0x14, 0x4d, 0x0d, 0x00, 0x82, 0x16,
5425 0x18, 0x9f, 0x00, 0x82, 0x17, 0x0e, 0x2e, 0x00,
5426 0x82, 0x18, 0x06, 0x18, 0x00, 0x82, 0x19, 0x48,
5427 0x15, 0x00, 0x82, 0x1a, 0x4d, 0x0e, 0x00, 0x82,
5428 0x1b, 0x0a, 0xa6, 0x00, 0x82, 0x1c, 0x09, 0x62,
5429 0x00, 0x82, 0x1d, 0x57, 0x11, 0x00, 0x82, 0x1e,
5430 0x0d, 0xe3, 0x00, 0x82, 0x1f, 0x09, 0x38, 0x00,
5431 0x82, 0x21, 0x3a, 0xbd, 0x00, 0x82, 0x22, 0x48,
5432 0x16, 0x00, 0x82, 0x28, 0x57, 0x12, 0x00, 0x82,
5433 0x29, 0x18, 0xa0, 0x00, 0x82, 0x2a, 0x07, 0xe4,
5434 0x00, 0x82, 0x2b, 0x18, 0xa1, 0x00, 0x82, 0x2c,
5435 0x0d, 0x60, 0x00, 0x82, 0x2e, 0x18, 0xaf, 0x00,
5436 0x82, 0x32, 0x3a, 0xbe, 0x00, 0x82, 0x33, 0x18,
5437 0xa3, 0x00, 0x82, 0x34, 0x3a, 0xbf, 0x00, 0x82,
5438 0x35, 0x0b, 0x29, 0x00, 0x82, 0x36, 0x0d, 0x2b,
5439 0x00, 0x82, 0x37, 0x07, 0x73, 0x00, 0x82, 0x38,
5440 0x18, 0xa2, 0x00, 0x82, 0x39, 0x0a, 0xa7, 0x00,
5441 0x82, 0x3a, 0x4d, 0x0f, 0x00, 0x82, 0x3c, 0x48,
5442 0x18, 0x00, 0x82, 0x40, 0x18, 0xa4, 0x00, 0x82,
5443 0x43, 0x57, 0x13, 0x00, 0x82, 0x44, 0x4d, 0x10,
5444 0x00, 0x82, 0x45, 0x48, 0x1a, 0x00, 0x82, 0x46,
5445 0x3a, 0xc0, 0x00, 0x82, 0x47, 0x0c, 0x16, 0x00,
5446 0x82, 0x49, 0x48, 0x19, 0x00, 0x82, 0x4b, 0x3a,
5447 0xc1, 0x00, 0x82, 0x4e, 0x57, 0x14, 0x00, 0x82,
5448 0x4f, 0x3a, 0xc2, 0x00, 0x82, 0x51, 0x57, 0x15,
5449 0x00, 0x82, 0x56, 0x57, 0x16, 0x00, 0x82, 0x57,
5450 0x48, 0x1e, 0x00, 0x82, 0x58, 0x18, 0xa6, 0x00,
5451 0x82, 0x59, 0x18, 0xa5, 0x00, 0x82, 0x5a, 0x18,
5452 0xa8, 0x00, 0x82, 0x5c, 0x48, 0x20, 0x00, 0x82,
5453 0x5d, 0x18, 0xa7, 0x00, 0x82, 0x5f, 0x18, 0xa9,
5454 0x00, 0x82, 0x60, 0x42, 0xa5, 0x00, 0x82, 0x62,
5455 0x18, 0xab, 0x00, 0x82, 0x63, 0x48, 0x21, 0x00,
5456 0x82, 0x64, 0x18, 0xaa, 0x00, 0x82, 0x66, 0x06,
5457 0x0b, 0x00, 0x82, 0x67, 0x57, 0x17, 0x00, 0x82,
5458 0x68, 0x18, 0xac, 0x00, 0x82, 0x6a, 0x18, 0xad,
5459 0x00, 0x82, 0x6b, 0x18, 0xae, 0x00, 0x82, 0x6d,
5460 0x4d, 0x11, 0x00, 0x82, 0x6e, 0x08, 0x21, 0x00,
5461 0x82, 0x6f, 0x0f, 0x91, 0x00, 0x82, 0x71, 0x18,
5462 0xb0, 0x00, 0x82, 0x72, 0x09, 0xed, 0x00, 0x82,
5463 0x74, 0x42, 0xa6, 0x00, 0x82, 0x76, 0x05, 0x12,
5464 0x00, 0x82, 0x77, 0x18, 0xb1, 0x00, 0x82, 0x78,
5465 0x18, 0xb2, 0x00, 0x82, 0x79, 0x37, 0x75, 0x00,
5466 0x82, 0x7b, 0x57, 0x18, 0x00, 0x82, 0x7d, 0x48,
5467 0x24, 0x00, 0x82, 0x7e, 0x18, 0xb3, 0x00, 0x82,
5468 0x7f, 0x48, 0x25, 0x00, 0x82, 0x80, 0x57, 0x19,
5469 0x00, 0x82, 0x81, 0x57, 0x1a, 0x00, 0x82, 0x83,
5470 0x48, 0x26, 0x00, 0x82, 0x84, 0x4d, 0x12, 0x00,
5471 0x82, 0x87, 0x57, 0x1b, 0x00, 0x82, 0x89, 0x4d,
5472 0x13, 0x00, 0x82, 0x8a, 0x48, 0x27, 0x00, 0x82,
5473 0x8b, 0x04, 0xb6, 0x00, 0x82, 0x8d, 0x18, 0xb4,
5474 0x00, 0x82, 0x8e, 0x3a, 0xc3, 0x00, 0x82, 0x91,
5475 0x4d, 0x14, 0x00, 0x82, 0x92, 0x18, 0xb5, 0x00,
5476 0x82, 0x93, 0x48, 0x28, 0x00, 0x82, 0x94, 0x57,
5477 0x1c, 0x00, 0x82, 0x96, 0x57, 0x1d, 0x00, 0x82,
5478 0x98, 0x57, 0x1e, 0x00, 0x82, 0x99, 0x0d, 0xd9,
5479 0x00, 0x82, 0x9a, 0x57, 0x1f, 0x00, 0x82, 0x9b,
5480 0x57, 0x20, 0x00, 0x82, 0x9d, 0x08, 0xf3, 0x00,
5481 0x82, 0x9f, 0x18, 0xb7, 0x00, 0x82, 0xa0, 0x57,
5482 0x21, 0x00, 0x82, 0xa1, 0x42, 0xa8, 0x00, 0x82,
5483 0xa3, 0x42, 0xa9, 0x00, 0x82, 0xa4, 0x42, 0xaa,
5484 0x00, 0x82, 0xa5, 0x05, 0x87, 0x00, 0x82, 0xa6,
5485 0x04, 0x76, 0x00, 0x82, 0xa7, 0x48, 0x29, 0x00,
5486 0x82, 0xa8, 0x48, 0x2a, 0x00, 0x82, 0xa9, 0x42,
5487 0xab, 0x00, 0x82, 0xaa, 0x4d, 0x15, 0x00, 0x82,
5488 0xab, 0x18, 0xb6, 0x00, 0x82, 0xac, 0x18, 0xb9,
5489 0x00, 0x82, 0xad, 0x0d, 0x04, 0x00, 0x82, 0xae,
5490 0x3a, 0xc4, 0x00, 0x82, 0xaf, 0x0a, 0x0a, 0x00,
5491 0x82, 0xb0, 0x4d, 0x16, 0x00, 0x82, 0xb1, 0x05,
5492 0x56, 0x00, 0x82, 0xb2, 0x48, 0x2b, 0x00, 0x82,
5493 0xb3, 0x0e, 0x55, 0x00, 0x82, 0xb4, 0x48, 0x2c,
5494 0x00, 0x82, 0xb7, 0x3a, 0xc5, 0x00, 0x82, 0xb8,
5495 0x07, 0x33, 0x00, 0x82, 0xb9, 0x06, 0xd4, 0x00,
5496 0x82, 0xba, 0x48, 0x2d, 0x00, 0x82, 0xbb, 0x18,
5497 0xb8, 0x00, 0x82, 0xbc, 0x48, 0x2e, 0x00, 0x82,
5498 0xbd, 0x35, 0x66, 0x00, 0x82, 0xbe, 0x3a, 0xc6,
5499 0x00, 0x82, 0xbf, 0x42, 0xac, 0x00, 0x82, 0xc5,
5500 0x05, 0xdf, 0x00, 0x82, 0xc6, 0x3a, 0xc7, 0x00,
5501 0x82, 0xd0, 0x4d, 0x17, 0x00, 0x82, 0xd1, 0x05,
5502 0x13, 0x00, 0x82, 0xd2, 0x18, 0xbd, 0x00, 0x82,
5503 0xd3, 0x0f, 0xb2, 0x00, 0x82, 0xd4, 0x0b, 0x3d,
5504 0x00, 0x82, 0xd5, 0x42, 0xad, 0x00, 0x82, 0xd7,
5505 0x0d, 0xb6, 0x00, 0x82, 0xd9, 0x18, 0xc9, 0x00,
5506 0x82, 0xda, 0x57, 0x22, 0x00, 0x82, 0xdb, 0x05,
5507 0x57, 0x00, 0x82, 0xdc, 0x18, 0xc7, 0x00, 0x82,
5508 0xde, 0x18, 0xc5, 0x00, 0x82, 0xdf, 0x18, 0xbc,
5509 0x00, 0x82, 0xe0, 0x57, 0x23, 0x00, 0x82, 0xe1,
5510 0x18, 0xba, 0x00, 0x82, 0xe2, 0x48, 0x2f, 0x00,
5511 0x82, 0xe3, 0x18, 0xbb, 0x00, 0x82, 0xe4, 0x57,
5512 0x24, 0x00, 0x82, 0xe5, 0x09, 0x0f, 0x00, 0x82,
5513 0xe6, 0x06, 0xe4, 0x00, 0x82, 0xe7, 0x0b, 0xb5,
5514 0x00, 0x82, 0xe8, 0x48, 0x30, 0x00, 0x82, 0xea,
5515 0x4d, 0x18, 0x00, 0x82, 0xeb, 0x0c, 0xa9, 0x00,
5516 0x82, 0xed, 0x57, 0x25, 0x00, 0x82, 0xef, 0x4d,
5517 0x19, 0x00, 0x82, 0xf1, 0x04, 0xf3, 0x00, 0x82,
5518 0xf3, 0x18, 0xbf, 0x00, 0x82, 0xf4, 0x18, 0xbe,
5519 0x00, 0x82, 0xf6, 0x4d, 0x1a, 0x00, 0x82, 0xf7,
5520 0x48, 0x31, 0x00, 0x82, 0xf9, 0x18, 0xc4, 0x00,
5521 0x82, 0xfa, 0x18, 0xc0, 0x00, 0x82, 0xfb, 0x18,
5522 0xc3, 0x00, 0x82, 0xfd, 0x42, 0xae, 0x00, 0x82,
5523 0xfe, 0x3a, 0xc8, 0x00, 0x83, 0x00, 0x42, 0xaf,
5524 0x00, 0x83, 0x01, 0x21, 0x98, 0x00, 0x83, 0x02,
5525 0x0e, 0xdc, 0x00, 0x83, 0x03, 0x18, 0xc2, 0x00,
5526 0x83, 0x04, 0x05, 0x58, 0x00, 0x83, 0x05, 0x05,
5527 0xdb, 0x00, 0x83, 0x06, 0x18, 0xc6, 0x00, 0x83,
5528 0x07, 0x48, 0x32, 0x00, 0x83, 0x08, 0x48, 0x33,
5529 0x00, 0x83, 0x09, 0x18, 0xc8, 0x00, 0x83, 0x0a,
5530 0x57, 0x26, 0x00, 0x83, 0x0b, 0x57, 0x27, 0x00,
5531 0x83, 0x0c, 0x48, 0x34, 0x00, 0x83, 0x0e, 0x07,
5532 0x2a, 0x00, 0x83, 0x16, 0x18, 0xcc, 0x00, 0x83,
5533 0x17, 0x18, 0xd5, 0x00, 0x83, 0x18, 0x18, 0xd6,
5534 0x00, 0x83, 0x1b, 0x48, 0x36, 0x00, 0x83, 0x1c,
5535 0x04, 0x6f, 0x00, 0x83, 0x1d, 0x48, 0x37, 0x00,
5536 0x83, 0x1e, 0x57, 0x28, 0x00, 0x83, 0x1f, 0x57,
5537 0x29, 0x00, 0x83, 0x21, 0x57, 0x2a, 0x00, 0x83,
5538 0x22, 0x42, 0xb0, 0x00, 0x83, 0x23, 0x18, 0xdd,
5539 0x00, 0x83, 0x28, 0x04, 0xb5, 0x00, 0x83, 0x2b,
5540 0x18, 0xd4, 0x00, 0x83, 0x2c, 0x57, 0x2b, 0x00,
5541 0x83, 0x2d, 0x42, 0xb1, 0x00, 0x83, 0x2e, 0x57,
5542 0x2c, 0x00, 0x83, 0x2f, 0x18, 0xd3, 0x00, 0x83,
5543 0x30, 0x48, 0x38, 0x00, 0x83, 0x31, 0x18, 0xce,
5544 0x00, 0x83, 0x32, 0x18, 0xcd, 0x00, 0x83, 0x33,
5545 0x57, 0x2d, 0x00, 0x83, 0x34, 0x18, 0xcb, 0x00,
5546 0x83, 0x35, 0x18, 0xca, 0x00, 0x83, 0x36, 0x0b,
5547 0xa1, 0x00, 0x83, 0x37, 0x57, 0x2e, 0x00, 0x83,
5548 0x38, 0x0b, 0x5b, 0x00, 0x83, 0x39, 0x18, 0xd0,
5549 0x00, 0x83, 0x3a, 0x42, 0xb2, 0x00, 0x83, 0x3c,
5550 0x48, 0x39, 0x00, 0x83, 0x3d, 0x57, 0x2f, 0x00,
5551 0x83, 0x40, 0x18, 0xcf, 0x00, 0x83, 0x42, 0x57,
5552 0x30, 0x00, 0x83, 0x43, 0x3a, 0xc9, 0x00, 0x83,
5553 0x44, 0x48, 0x3a, 0x00, 0x83, 0x45, 0x18, 0xd2,
5554 0x00, 0x83, 0x46, 0x1d, 0xf8, 0x00, 0x83, 0x47,
5555 0x42, 0xb3, 0x00, 0x83, 0x49, 0x0a, 0xf2, 0x00,
5556 0x83, 0x4a, 0x07, 0x2b, 0x00, 0x83, 0x4d, 0x57,
5557 0x31, 0x00, 0x83, 0x4e, 0x57, 0x32, 0x00, 0x83,
5558 0x4f, 0x04, 0xe3, 0x00, 0x83, 0x50, 0x18, 0xd1,
5559 0x00, 0x83, 0x51, 0x3a, 0xca, 0x00, 0x83, 0x52,
5560 0x07, 0xe5, 0x00, 0x83, 0x53, 0x57, 0x3c, 0x00,
5561 0x83, 0x54, 0x48, 0x35, 0x00, 0x83, 0x55, 0x3a,
5562 0xcb, 0x00, 0x83, 0x56, 0x4d, 0x1b, 0x00, 0x83,
5563 0x57, 0x48, 0x3b, 0x00, 0x83, 0x58, 0x0a, 0xf3,
5564 0x00, 0x83, 0x5a, 0x37, 0x7a, 0x00, 0x83, 0x62,
5565 0x21, 0x99, 0x00, 0x83, 0x63, 0x45, 0x6f, 0x00,
5566 0x83, 0x70, 0x57, 0x33, 0x00, 0x83, 0x73, 0x18,
5567 0xe3, 0x00, 0x83, 0x75, 0x18, 0xe4, 0x00, 0x83,
5568 0x77, 0x05, 0x59, 0x00, 0x83, 0x78, 0x4d, 0x1c,
5569 0x00, 0x83, 0x7b, 0x05, 0x2e, 0x00, 0x83, 0x7c,
5570 0x18, 0xe1, 0x00, 0x83, 0x7d, 0x42, 0xb4, 0x00,
5571 0x83, 0x7f, 0x21, 0x9a, 0x00, 0x83, 0x80, 0x57,
5572 0x34, 0x00, 0x83, 0x82, 0x57, 0x35, 0x00, 0x83,
5573 0x84, 0x57, 0x36, 0x00, 0x83, 0x85, 0x18, 0xd7,
5574 0x00, 0x83, 0x86, 0x3a, 0xcc, 0x00, 0x83, 0x87,
5575 0x18, 0xdf, 0x00, 0x83, 0x89, 0x18, 0xe6, 0x00,
5576 0x83, 0x8a, 0x18, 0xe0, 0x00, 0x83, 0x8d, 0x3a,
5577 0xcd, 0x00, 0x83, 0x8e, 0x18, 0xde, 0x00, 0x83,
5578 0x92, 0x3a, 0xce, 0x00, 0x83, 0x93, 0x18, 0xc1,
5579 0x00, 0x83, 0x94, 0x48, 0x3f, 0x00, 0x83, 0x95,
5580 0x48, 0x40, 0x00, 0x83, 0x96, 0x18, 0xdc, 0x00,
5581 0x83, 0x98, 0x3a, 0xcf, 0x00, 0x83, 0x99, 0x57,
5582 0x37, 0x00, 0x83, 0x9a, 0x18, 0xd8, 0x00, 0x83,
5583 0x9b, 0x48, 0x41, 0x00, 0x83, 0x9c, 0x57, 0x38,
5584 0x00, 0x83, 0x9d, 0x48, 0x42, 0x00, 0x83, 0x9e,
5585 0x06, 0x0c, 0x00, 0x83, 0x9f, 0x18, 0xda, 0x00,
5586 0x83, 0xa0, 0x18, 0xe5, 0x00, 0x83, 0xa2, 0x18,
5587 0xdb, 0x00, 0x83, 0xa6, 0x57, 0x39, 0x00, 0x83,
5588 0xa7, 0x42, 0xb5, 0x00, 0x83, 0xa8, 0x18, 0xe7,
5589 0x00, 0x83, 0xa9, 0x3a, 0xd0, 0x00, 0x83, 0xaa,
5590 0x18, 0xd9, 0x00, 0x83, 0xab, 0x0d, 0x32, 0x00,
5591 0x83, 0xac, 0x57, 0x3a, 0x00, 0x83, 0xad, 0x57,
5592 0x3f, 0x00, 0x83, 0xb1, 0x0f, 0x53, 0x00, 0x83,
5593 0xb5, 0x18, 0xe2, 0x00, 0x83, 0xbd, 0x18, 0xf8,
5594 0x00, 0x83, 0xbe, 0x57, 0x3b, 0x00, 0x83, 0xbf,
5595 0x3a, 0xd1, 0x00, 0x83, 0xc0, 0x3a, 0xd2, 0x00,
5596 0x83, 0xc1, 0x18, 0xf0, 0x00, 0x83, 0xc5, 0x0a,
5597 0x41, 0x00, 0x83, 0xc7, 0x21, 0x9b, 0x00, 0x83,
5598 0xc9, 0x48, 0x43, 0x00, 0x83, 0xca, 0x06, 0x60,
5599 0x00, 0x83, 0xcc, 0x06, 0xd5, 0x00, 0x83, 0xce,
5600 0x18, 0xeb, 0x00, 0x83, 0xcf, 0x42, 0xb6, 0x00,
5601 0x83, 0xd0, 0x48, 0x44, 0x00, 0x83, 0xd1, 0x42,
5602 0xb7, 0x00, 0x83, 0xd3, 0x05, 0x5b, 0x00, 0x83,
5603 0xd4, 0x48, 0x45, 0x00, 0x83, 0xd6, 0x09, 0xbc,
5604 0x00, 0x83, 0xd8, 0x18, 0xee, 0x00, 0x83, 0xdc,
5605 0x08, 0x4a, 0x00, 0x83, 0xdd, 0x48, 0x46, 0x00,
5606 0x83, 0xdf, 0x0c, 0x4b, 0x00, 0x83, 0xe0, 0x18,
5607 0xf3, 0x00, 0x83, 0xe1, 0x42, 0xb8, 0x00, 0x83,
5608 0xe5, 0x48, 0x47, 0x00, 0x83, 0xe8, 0x57, 0x3d,
5609 0x00, 0x83, 0xe9, 0x0e, 0x3e, 0x00, 0x83, 0xea,
5610 0x3a, 0xd3, 0x00, 0x83, 0xeb, 0x18, 0xea, 0x00,
5611 0x83, 0xef, 0x05, 0x5a, 0x00, 0x83, 0xf0, 0x07,
5612 0x8a, 0x00, 0x83, 0xf1, 0x0d, 0x9b, 0x00, 0x83,
5613 0xf2, 0x18, 0xf4, 0x00, 0x83, 0xf4, 0x18, 0xe8,
5614 0x00, 0x83, 0xf6, 0x21, 0x9c, 0x00, 0x83, 0xf7,
5615 0x18, 0xf1, 0x00, 0x83, 0xf8, 0x4d, 0x1d, 0x00,
5616 0x83, 0xf9, 0x48, 0x48, 0x00, 0x83, 0xfb, 0x18,
5617 0xfb, 0x00, 0x83, 0xfc, 0x4d, 0x1e, 0x00, 0x83,
5618 0xfd, 0x18, 0xec, 0x00, 0x84, 0x01, 0x42, 0xb9,
5619 0x00, 0x84, 0x03, 0x18, 0xed, 0x00, 0x84, 0x04,
5620 0x0c, 0x92, 0x00, 0x84, 0x06, 0x42, 0xba, 0x00,
5621 0x84, 0x07, 0x18, 0xf2, 0x00, 0x84, 0x0a, 0x1e,
5622 0x7f, 0x00, 0x84, 0x0b, 0x18, 0xef, 0x00, 0x84,
5623 0x0c, 0x0e, 0x56, 0x00, 0x84, 0x0d, 0x18, 0xf5,
5624 0x00, 0x84, 0x0e, 0x04, 0xa4, 0x00, 0x84, 0x0f,
5625 0x3a, 0xd4, 0x00, 0x84, 0x11, 0x3a, 0xd5, 0x00,
5626 0x84, 0x13, 0x18, 0xe9, 0x00, 0x84, 0x15, 0x48,
5627 0x49, 0x00, 0x84, 0x17, 0x48, 0x4b, 0x00, 0x84,
5628 0x19, 0x57, 0x3e, 0x00, 0x84, 0x20, 0x18, 0xf7,
5629 0x00, 0x84, 0x22, 0x18, 0xf6, 0x00, 0x84, 0x29,
5630 0x0d, 0x21, 0x00, 0x84, 0x2a, 0x18, 0xfd, 0x00,
5631 0x84, 0x2c, 0x19, 0x08, 0x00, 0x84, 0x2f, 0x57,
5632 0x40, 0x00, 0x84, 0x31, 0x05, 0xdc, 0x00, 0x84,
5633 0x35, 0x19, 0x0b, 0x00, 0x84, 0x38, 0x18, 0xf9,
5634 0x00, 0x84, 0x39, 0x48, 0x4c, 0x00, 0x84, 0x3c,
5635 0x18, 0xfe, 0x00, 0x84, 0x3d, 0x0f, 0x58, 0x00,
5636 0x84, 0x45, 0x57, 0x41, 0x00, 0x84, 0x46, 0x19,
5637 0x07, 0x00, 0x84, 0x47, 0x57, 0x42, 0x00, 0x84,
5638 0x48, 0x21, 0x9d, 0x00, 0x84, 0x49, 0x0f, 0x3f,
5639 0x00, 0x84, 0x4a, 0x3a, 0xd6, 0x00, 0x84, 0x4d,
5640 0x57, 0x43, 0x00, 0x84, 0x4e, 0x0f, 0x72, 0x00,
5641 0x84, 0x4f, 0x48, 0x4d, 0x00, 0x84, 0x51, 0x48,
5642 0x4e, 0x00, 0x84, 0x52, 0x48, 0x4f, 0x00, 0x84,
5643 0x56, 0x57, 0x44, 0x00, 0x84, 0x57, 0x0b, 0xb6,
5644 0x00, 0x84, 0x58, 0x4d, 0x1f, 0x00, 0x84, 0x59,
5645 0x48, 0x50, 0x00, 0x84, 0x5a, 0x48, 0x51, 0x00,
5646 0x84, 0x5b, 0x05, 0xc9, 0x00, 0x84, 0x5c, 0x48,
5647 0x52, 0x00, 0x84, 0x5f, 0x42, 0xbb, 0x00, 0x84,
5648 0x60, 0x57, 0x46, 0x00, 0x84, 0x61, 0x0d, 0xe4,
5649 0x00, 0x84, 0x62, 0x19, 0x0d, 0x00, 0x84, 0x63,
5650 0x0c, 0x79, 0x00, 0x84, 0x64, 0x57, 0x47, 0x00,
5651 0x84, 0x65, 0x48, 0x54, 0x00, 0x84, 0x66, 0x04,
5652 0x75, 0x00, 0x84, 0x67, 0x57, 0x48, 0x00, 0x84,
5653 0x69, 0x19, 0x06, 0x00, 0x84, 0x6a, 0x57, 0x49,
5654 0x00, 0x84, 0x6b, 0x19, 0x02, 0x00, 0x84, 0x6c,
5655 0x0a, 0xf4, 0x00, 0x84, 0x6d, 0x18, 0xfc, 0x00,
5656 0x84, 0x6e, 0x19, 0x04, 0x00, 0x84, 0x6f, 0x19,
5657 0x09, 0x00, 0x84, 0x70, 0x42, 0xbc, 0x00, 0x84,
5658 0x71, 0x0c, 0xe2, 0x00, 0x84, 0x73, 0x42, 0xbd,
5659 0x00, 0x84, 0x74, 0x57, 0x4a, 0x00, 0x84, 0x75,
5660 0x04, 0x6e, 0x00, 0x84, 0x76, 0x3a, 0xd7, 0x00,
5661 0x84, 0x77, 0x19, 0x01, 0x00, 0x84, 0x78, 0x48,
5662 0x55, 0x00, 0x84, 0x79, 0x19, 0x0a, 0x00, 0x84,
5663 0x7a, 0x0d, 0xea, 0x00, 0x84, 0x7c, 0x48, 0x56,
5664 0x00, 0x84, 0x7d, 0x57, 0x4b, 0x00, 0x84, 0x81,
5665 0x48, 0x57, 0x00, 0x84, 0x82, 0x19, 0x05, 0x00,
5666 0x84, 0x84, 0x19, 0x00, 0x00, 0x84, 0x85, 0x42,
5667 0xbe, 0x00, 0x84, 0x8b, 0x09, 0xbd, 0x00, 0x84,
5668 0x90, 0x09, 0x39, 0x00, 0x84, 0x92, 0x57, 0x4c,
5669 0x00, 0x84, 0x93, 0x4d, 0x20, 0x00, 0x84, 0x94,
5670 0x08, 0xd8, 0x00, 0x84, 0x95, 0x57, 0x4d, 0x00,
5671 0x84, 0x97, 0x48, 0x59, 0x00, 0x84, 0x99, 0x0e,
5672 0xe4, 0x00, 0x84, 0x9c, 0x0d, 0xb9, 0x00, 0x84,
5673 0x9e, 0x42, 0xbf, 0x00, 0x84, 0x9f, 0x19, 0x10,
5674 0x00, 0x84, 0xa1, 0x19, 0x19, 0x00, 0x84, 0xa6,
5675 0x48, 0x5a, 0x00, 0x84, 0xa8, 0x3a, 0xd8, 0x00,
5676 0x84, 0xa9, 0x57, 0x4e, 0x00, 0x84, 0xaa, 0x57,
5677 0x4f, 0x00, 0x84, 0xad, 0x19, 0x03, 0x00, 0x84,
5678 0xaf, 0x3a, 0xd9, 0x00, 0x84, 0xb1, 0x4d, 0x21,
5679 0x00, 0x84, 0xb2, 0x05, 0xd5, 0x00, 0x84, 0xb4,
5680 0x21, 0x9e, 0x00, 0x84, 0xb8, 0x09, 0xe0, 0x00,
5681 0x84, 0xb9, 0x19, 0x0e, 0x00, 0x84, 0xba, 0x42,
5682 0xc0, 0x00, 0x84, 0xbb, 0x19, 0x13, 0x00, 0x84,
5683 0xbc, 0x0a, 0xf5, 0x00, 0x84, 0xbd, 0x4d, 0x22,
5684 0x00, 0x84, 0xbe, 0x48, 0x5b, 0x00, 0x84, 0xbf,
5685 0x19, 0x0f, 0x00, 0x84, 0xc0, 0x3a, 0xda, 0x00,
5686 0x84, 0xc1, 0x19, 0x16, 0x00, 0x84, 0xc2, 0x3a,
5687 0xdb, 0x00, 0x84, 0xc4, 0x0b, 0x9d, 0x00, 0x84,
5688 0xc6, 0x19, 0x17, 0x00, 0x84, 0xc7, 0x57, 0x50,
5689 0x00, 0x84, 0xc8, 0x57, 0x51, 0x00, 0x84, 0xc9,
5690 0x0f, 0x40, 0x00, 0x84, 0xca, 0x19, 0x0c, 0x00,
5691 0x84, 0xcb, 0x05, 0x96, 0x00, 0x84, 0xcc, 0x57,
5692 0x52, 0x00, 0x84, 0xcd, 0x19, 0x12, 0x00, 0x84,
5693 0xce, 0x48, 0x5d, 0x00, 0x84, 0xcf, 0x48, 0x5e,
5694 0x00, 0x84, 0xd0, 0x19, 0x15, 0x00, 0x84, 0xd1,
5695 0x0e, 0xb8, 0x00, 0x84, 0xd3, 0x48, 0x5f, 0x00,
5696 0x84, 0xd6, 0x19, 0x18, 0x00, 0x84, 0xd9, 0x19,
5697 0x11, 0x00, 0x84, 0xda, 0x19, 0x14, 0x00, 0x84,
5698 0xdc, 0x20, 0xab, 0x00, 0x84, 0xe7, 0x48, 0x61,
5699 0x00, 0x84, 0xea, 0x48, 0x62, 0x00, 0x84, 0xec,
5700 0x0e, 0x57, 0x00, 0x84, 0xee, 0x1e, 0x83, 0x00,
5701 0x84, 0xef, 0x48, 0x63, 0x00, 0x84, 0xf0, 0x3a,
5702 0xdc, 0x00, 0x84, 0xf1, 0x48, 0x64, 0x00, 0x84,
5703 0xf2, 0x57, 0x53, 0x00, 0x84, 0xf4, 0x19, 0x1c,
5704 0x00, 0x84, 0xf7, 0x57, 0x54, 0x00, 0x84, 0xfa,
5705 0x48, 0x65, 0x00, 0x84, 0xfb, 0x4d, 0x23, 0x00,
5706 0x84, 0xfc, 0x19, 0x23, 0x00, 0x84, 0xfd, 0x3a,
5707 0xdd, 0x00, 0x84, 0xff, 0x19, 0x1b, 0x00, 0x85,
5708 0x00, 0x08, 0xef, 0x00, 0x85, 0x02, 0x57, 0x55,
5709 0x00, 0x85, 0x03, 0x57, 0x56, 0x00, 0x85, 0x06,
5710 0x18, 0xfa, 0x00, 0x85, 0x07, 0x57, 0x57, 0x00,
5711 0x85, 0x0c, 0x3a, 0xde, 0x00, 0x85, 0x0e, 0x57,
5712 0x58, 0x00, 0x85, 0x10, 0x57, 0x59, 0x00, 0x85,
5713 0x11, 0x0e, 0x1e, 0x00, 0x85, 0x13, 0x0e, 0xae,
5714 0x00, 0x85, 0x14, 0x19, 0x22, 0x00, 0x85, 0x15,
5715 0x19, 0x21, 0x00, 0x85, 0x17, 0x19, 0x1d, 0x00,
5716 0x85, 0x18, 0x19, 0x1e, 0x00, 0x85, 0x1a, 0x04,
5717 0xd8, 0x00, 0x85, 0x1b, 0x48, 0x66, 0x00, 0x85,
5718 0x1c, 0x57, 0x5a, 0x00, 0x85, 0x1e, 0x42, 0xc3,
5719 0x00, 0x85, 0x1f, 0x19, 0x20, 0x00, 0x85, 0x21,
5720 0x19, 0x1a, 0x00, 0x85, 0x22, 0x57, 0x5b, 0x00,
5721 0x85, 0x23, 0x1e, 0x1a, 0x00, 0x85, 0x24, 0x48,
5722 0x67, 0x00, 0x85, 0x25, 0x48, 0x68, 0x00, 0x85,
5723 0x26, 0x0b, 0xf1, 0x00, 0x85, 0x27, 0x57, 0x5c,
5724 0x00, 0x85, 0x2a, 0x57, 0x5d, 0x00, 0x85, 0x2b,
5725 0x48, 0x69, 0x00, 0x85, 0x2c, 0x19, 0x1f, 0x00,
5726 0x85, 0x2d, 0x04, 0xc2, 0x00, 0x85, 0x2f, 0x42,
5727 0xc4, 0x00, 0x85, 0x32, 0x42, 0xc2, 0x00, 0x85,
5728 0x33, 0x57, 0x5e, 0x00, 0x85, 0x34, 0x3a, 0xdf,
5729 0x00, 0x85, 0x35, 0x0b, 0x02, 0x00, 0x85, 0x36,
5730 0x57, 0x5f, 0x00, 0x85, 0x3d, 0x0e, 0x13, 0x00,
5731 0x85, 0x3e, 0x1e, 0xb5, 0x00, 0x85, 0x3f, 0x57,
5732 0x60, 0x00, 0x85, 0x40, 0x19, 0x24, 0x00, 0x85,
5733 0x41, 0x19, 0x28, 0x00, 0x85, 0x43, 0x0d, 0x6d,
5734 0x00, 0x85, 0x46, 0x4d, 0x24, 0x00, 0x85, 0x48,
5735 0x19, 0x27, 0x00, 0x85, 0x49, 0x09, 0xbe, 0x00,
5736 0x85, 0x4a, 0x08, 0xf5, 0x00, 0x85, 0x4b, 0x19,
5737 0x2a, 0x00, 0x85, 0x4e, 0x06, 0xb6, 0x00, 0x85,
5738 0x4f, 0x48, 0x6a, 0x00, 0x85, 0x50, 0x57, 0x61,
5739 0x00, 0x85, 0x51, 0x48, 0x6d, 0x00, 0x85, 0x52,
5740 0x57, 0x62, 0x00, 0x85, 0x53, 0x21, 0x9f, 0x00,
5741 0x85, 0x55, 0x19, 0x2b, 0x00, 0x85, 0x56, 0x4d,
5742 0x25, 0x00, 0x85, 0x57, 0x0d, 0xeb, 0x00, 0x85,
5743 0x58, 0x19, 0x26, 0x00, 0x85, 0x59, 0x21, 0xa0,
5744 0x00, 0x85, 0x5a, 0x18, 0xff, 0x00, 0x85, 0x5c,
5745 0x57, 0x63, 0x00, 0x85, 0x5d, 0x4d, 0x26, 0x00,
5746 0x85, 0x5e, 0x3a, 0xe0, 0x00, 0x85, 0x5f, 0x57,
5747 0x65, 0x00, 0x85, 0x60, 0x57, 0x66, 0x00, 0x85,
5748 0x61, 0x48, 0x6e, 0x00, 0x85, 0x62, 0x48, 0x6f,
5749 0x00, 0x85, 0x63, 0x19, 0x25, 0x00, 0x85, 0x64,
5750 0x42, 0xc5, 0x00, 0x85, 0x68, 0x0f, 0xf5, 0x00,
5751 0x85, 0x69, 0x0c, 0x7a, 0x00, 0x85, 0x6a, 0x0d,
5752 0xe5, 0x00, 0x85, 0x6b, 0x21, 0xa1, 0x00, 0x85,
5753 0x6d, 0x19, 0x32, 0x00, 0x85, 0x6f, 0x48, 0x6b,
5754 0x00, 0x85, 0x77, 0x19, 0x38, 0x00, 0x85, 0x79,
5755 0x57, 0x67, 0x00, 0x85, 0x7a, 0x42, 0xc6, 0x00,
5756 0x85, 0x7b, 0x48, 0x71, 0x00, 0x85, 0x7d, 0x48,
5757 0x72, 0x00, 0x85, 0x7e, 0x19, 0x39, 0x00, 0x85,
5758 0x7f, 0x48, 0x73, 0x00, 0x85, 0x80, 0x19, 0x2c,
5759 0x00, 0x85, 0x81, 0x48, 0x74, 0x00, 0x85, 0x84,
5760 0x0d, 0x2c, 0x00, 0x85, 0x85, 0x4d, 0x27, 0x00,
5761 0x85, 0x86, 0x48, 0x75, 0x00, 0x85, 0x87, 0x19,
5762 0x36, 0x00, 0x85, 0x88, 0x19, 0x2e, 0x00, 0x85,
5763 0x89, 0x57, 0x68, 0x00, 0x85, 0x8a, 0x19, 0x30,
5764 0x00, 0x85, 0x8b, 0x57, 0x69, 0x00, 0x85, 0x8c,
5765 0x42, 0xc7, 0x00, 0x85, 0x8f, 0x3a, 0xe1, 0x00,
5766 0x85, 0x90, 0x19, 0x3a, 0x00, 0x85, 0x91, 0x19,
5767 0x2f, 0x00, 0x85, 0x93, 0x48, 0x76, 0x00, 0x85,
5768 0x94, 0x19, 0x33, 0x00, 0x85, 0x97, 0x05, 0x14,
5769 0x00, 0x85, 0x98, 0x4d, 0x28, 0x00, 0x85, 0x99,
5770 0x0c, 0xbd, 0x00, 0x85, 0x9b, 0x19, 0x34, 0x00,
5771 0x85, 0x9c, 0x19, 0x37, 0x00, 0x85, 0x9d, 0x48,
5772 0x77, 0x00, 0x85, 0x9f, 0x48, 0x78, 0x00, 0x85,
5773 0xa0, 0x57, 0x6a, 0x00, 0x85, 0xa2, 0x42, 0xc8,
5774 0x00, 0x85, 0xa4, 0x19, 0x2d, 0x00, 0x85, 0xa5,
5775 0x57, 0x6b, 0x00, 0x85, 0xa6, 0x0a, 0xa8, 0x00,
5776 0x85, 0xa7, 0x57, 0x6c, 0x00, 0x85, 0xa8, 0x19,
5777 0x31, 0x00, 0x85, 0xa9, 0x08, 0x75, 0x00, 0x85,
5778 0xaa, 0x0a, 0x0b, 0x00, 0x85, 0xab, 0x07, 0x06,
5779 0x00, 0x85, 0xac, 0x0f, 0x00, 0x00, 0x85, 0xad,
5780 0x3a, 0xe4, 0x00, 0x85, 0xae, 0x0f, 0x05, 0x00,
5781 0x85, 0xaf, 0x09, 0x7c, 0x00, 0x85, 0xb0, 0x21,
5782 0xa3, 0x00, 0x85, 0xb4, 0x57, 0x6d, 0x00, 0x85,
5783 0xb6, 0x57, 0x6e, 0x00, 0x85, 0xb7, 0x3a, 0xe2,
5784 0x00, 0x85, 0xb8, 0x57, 0x6f, 0x00, 0x85, 0xb9,
5785 0x19, 0x3e, 0x00, 0x85, 0xba, 0x19, 0x3c, 0x00,
5786 0x85, 0xbc, 0x48, 0x7c, 0x00, 0x85, 0xbd, 0x57,
5787 0x70, 0x00, 0x85, 0xbe, 0x57, 0x71, 0x00, 0x85,
5788 0xbf, 0x57, 0x72, 0x00, 0x85, 0xc1, 0x0f, 0xf4,
5789 0x00, 0x85, 0xc2, 0x57, 0x73, 0x00, 0x85, 0xc7,
5790 0x48, 0x7d, 0x00, 0x85, 0xc9, 0x19, 0x3b, 0x00,
5791 0x85, 0xca, 0x48, 0x7e, 0x00, 0x85, 0xcb, 0x42,
5792 0xc9, 0x00, 0x85, 0xcd, 0x0f, 0x5f, 0x00, 0x85,
5793 0xce, 0x3a, 0xe3, 0x00, 0x85, 0xcf, 0x19, 0x3d,
5794 0x00, 0x85, 0xd0, 0x19, 0x3f, 0x00, 0x85, 0xd5,
5795 0x19, 0x40, 0x00, 0x85, 0xd8, 0x48, 0x7f, 0x00,
5796 0x85, 0xd9, 0x48, 0x80, 0x00, 0x85, 0xda, 0x57,
5797 0x74, 0x00, 0x85, 0xdc, 0x19, 0x43, 0x00, 0x85,
5798 0xdd, 0x19, 0x41, 0x00, 0x85, 0xdf, 0x48, 0x81,
5799 0x00, 0x85, 0xe0, 0x57, 0x75, 0x00, 0x85, 0xe1,
5800 0x48, 0x82, 0x00, 0x85, 0xe4, 0x0c, 0x7b, 0x00,
5801 0x85, 0xe5, 0x19, 0x42, 0x00, 0x85, 0xe6, 0x48,
5802 0x83, 0x00, 0x85, 0xe8, 0x57, 0x76, 0x00, 0x85,
5803 0xe9, 0x0d, 0x61, 0x00, 0x85, 0xea, 0x19, 0x35,
5804 0x00, 0x85, 0xed, 0x42, 0xca, 0x00, 0x85, 0xf3,
5805 0x57, 0x77, 0x00, 0x85, 0xf4, 0x37, 0x80, 0x00,
5806 0x85, 0xf6, 0x48, 0x84, 0x00, 0x85, 0xf7, 0x09,
5807 0x7d, 0x00, 0x85, 0xf9, 0x19, 0x44, 0x00, 0x85,
5808 0xfa, 0x19, 0x49, 0x00, 0x85, 0xfb, 0x0a, 0xf6,
5809 0x00, 0x85, 0xfc, 0x57, 0x78, 0x00, 0x85, 0xfe,
5810 0x19, 0x48, 0x00, 0x85, 0xff, 0x42, 0xcb, 0x00,
5811 0x86, 0x00, 0x48, 0x85, 0x00, 0x86, 0x02, 0x19,
5812 0x29, 0x00, 0x86, 0x04, 0x42, 0xcc, 0x00, 0x86,
5813 0x05, 0x42, 0xcd, 0x00, 0x86, 0x06, 0x19, 0x4a,
5814 0x00, 0x86, 0x07, 0x0a, 0xcb, 0x00, 0x86, 0x0a,
5815 0x19, 0x45, 0x00, 0x86, 0x0b, 0x19, 0x47, 0x00,
5816 0x86, 0x0d, 0x57, 0x79, 0x00, 0x86, 0x0e, 0x57,
5817 0x7a, 0x00, 0x86, 0x10, 0x42, 0xce, 0x00, 0x86,
5818 0x11, 0x48, 0x86, 0x00, 0x86, 0x12, 0x3a, 0xe5,
5819 0x00, 0x86, 0x13, 0x19, 0x46, 0x00, 0x86, 0x16,
5820 0x14, 0xd0, 0x00, 0x86, 0x17, 0x14, 0xc1, 0x00,
5821 0x86, 0x18, 0x42, 0xd0, 0x00, 0x86, 0x19, 0x57,
5822 0x7b, 0x00, 0x86, 0x1a, 0x19, 0x4c, 0x00, 0x86,
5823 0x1b, 0x57, 0x7c, 0x00, 0x86, 0x1e, 0x48, 0x87,
5824 0x00, 0x86, 0x21, 0x48, 0x88, 0x00, 0x86, 0x22,
5825 0x19, 0x4b, 0x00, 0x86, 0x24, 0x48, 0x89, 0x00,
5826 0x86, 0x27, 0x48, 0x8a, 0x00, 0x86, 0x29, 0x3a,
5827 0xe6, 0x00, 0x86, 0x2d, 0x0f, 0x60, 0x00, 0x86,
5828 0x2f, 0x16, 0xb1, 0x00, 0x86, 0x30, 0x19, 0x4d,
5829 0x00, 0x86, 0x36, 0x57, 0x7d, 0x00, 0x86, 0x38,
5830 0x42, 0xd1, 0x00, 0x86, 0x39, 0x48, 0x8c, 0x00,
5831 0x86, 0x3a, 0x57, 0x7e, 0x00, 0x86, 0x3c, 0x48,
5832 0x8d, 0x00, 0x86, 0x3d, 0x57, 0x7f, 0x00, 0x86,
5833 0x3f, 0x19, 0x4e, 0x00, 0x86, 0x40, 0x48, 0x8f,
5834 0x00, 0x86, 0x41, 0x41, 0xb8, 0x00, 0x86, 0x42,
5835 0x4d, 0x29, 0x00, 0x86, 0x46, 0x4d, 0x2a, 0x00,
5836 0x86, 0x4d, 0x19, 0x4f, 0x00, 0x86, 0x4e, 0x07,
5837 0x8b, 0x00, 0x86, 0x50, 0x06, 0x6e, 0x00, 0x86,
5838 0x52, 0x3a, 0xe7, 0x00, 0x86, 0x53, 0x48, 0x90,
5839 0x00, 0x86, 0x54, 0x19, 0x51, 0x00, 0x86, 0x55,
5840 0x10, 0x94, 0x00, 0x86, 0x56, 0x48, 0x91, 0x00,
5841 0x86, 0x57, 0x42, 0xd2, 0x00, 0x86, 0x58, 0x57,
5842 0x80, 0x00, 0x86, 0x59, 0x57, 0x81, 0x00, 0x86,
5843 0x5a, 0x06, 0x8f, 0x00, 0x86, 0x5b, 0x34, 0x18,
5844 0x00, 0x86, 0x5c, 0x34, 0x52, 0x00, 0x86, 0x5d,
5845 0x57, 0x82, 0x00, 0x86, 0x5e, 0x06, 0xeb, 0x00,
5846 0x86, 0x5f, 0x19, 0x52, 0x00, 0x86, 0x60, 0x57,
5847 0x83, 0x00, 0x86, 0x61, 0x57, 0x84, 0x00, 0x86,
5848 0x62, 0x42, 0xd3, 0x00, 0x86, 0x63, 0x3a, 0xe8,
5849 0x00, 0x86, 0x64, 0x57, 0x85, 0x00, 0x86, 0x67,
5850 0x19, 0x53, 0x00, 0x86, 0x69, 0x57, 0x86, 0x00,
5851 0x86, 0x6b, 0x0b, 0xac, 0x00, 0x86, 0x6c, 0x3a,
5852 0xe9, 0x00, 0x86, 0x6f, 0x3a, 0xea, 0x00, 0x86,
5853 0x71, 0x19, 0x54, 0x00, 0x86, 0x75, 0x42, 0xd5,
5854 0x00, 0x86, 0x76, 0x57, 0x87, 0x00, 0x86, 0x77,
5855 0x48, 0x92, 0x00, 0x86, 0x79, 0x0c, 0xd2, 0x00,
5856 0x86, 0x7a, 0x3a, 0xeb, 0x00, 0x86, 0x7b, 0x04,
5857 0x7e, 0x00, 0x86, 0x7d, 0x37, 0x86, 0x00, 0x86,
5858 0x87, 0x48, 0x93, 0x00, 0x86, 0x88, 0x57, 0x99,
5859 0x00, 0x86, 0x89, 0x48, 0x94, 0x00, 0x86, 0x8a,
5860 0x05, 0x63, 0x00, 0x86, 0x8b, 0x19, 0x59, 0x00,
5861 0x86, 0x8c, 0x19, 0x5a, 0x00, 0x86, 0x8d, 0x3a,
5862 0xec, 0x00, 0x86, 0x91, 0x3a, 0xed, 0x00, 0x86,
5863 0x93, 0x19, 0x55, 0x00, 0x86, 0x95, 0x08, 0x8b,
5864 0x00, 0x86, 0x96, 0x57, 0x88, 0x00, 0x86, 0x98,
5865 0x3a, 0xee, 0x00, 0x86, 0x9a, 0x57, 0x89, 0x00,
5866 0x86, 0x9c, 0x48, 0x95, 0x00, 0x86, 0x9d, 0x48,
5867 0x96, 0x00, 0x86, 0xa1, 0x57, 0x8a, 0x00, 0x86,
5868 0xa3, 0x19, 0x56, 0x00, 0x86, 0xa4, 0x0c, 0xf8,
5869 0x00, 0x86, 0xa6, 0x57, 0x8b, 0x00, 0x86, 0xa7,
5870 0x3a, 0xef, 0x00, 0x86, 0xa8, 0x3a, 0xf0, 0x00,
5871 0x86, 0xa9, 0x19, 0x57, 0x00, 0x86, 0xaa, 0x19,
5872 0x58, 0x00, 0x86, 0xab, 0x19, 0x62, 0x00, 0x86,
5873 0xad, 0x57, 0x8c, 0x00, 0x86, 0xaf, 0x19, 0x5c,
5874 0x00, 0x86, 0xb0, 0x19, 0x5f, 0x00, 0x86, 0xb1,
5875 0x48, 0x97, 0x00, 0x86, 0xb3, 0x48, 0x98, 0x00,
5876 0x86, 0xb4, 0x57, 0x8d, 0x00, 0x86, 0xb5, 0x57,
5877 0x8e, 0x00, 0x86, 0xb6, 0x19, 0x5b, 0x00, 0x86,
5878 0xb7, 0x57, 0x8f, 0x00, 0x86, 0xb8, 0x42, 0xd6,
5879 0x00, 0x86, 0xb9, 0x57, 0x90, 0x00, 0x86, 0xbf,
5880 0x57, 0x91, 0x00, 0x86, 0xc0, 0x4d, 0x2b, 0x00,
5881 0x86, 0xc1, 0x48, 0x99, 0x00, 0x86, 0xc3, 0x48,
5882 0x9a, 0x00, 0x86, 0xc4, 0x19, 0x5d, 0x00, 0x86,
5883 0xc5, 0x57, 0x92, 0x00, 0x86, 0xc6, 0x19, 0x5e,
5884 0x00, 0x86, 0xc7, 0x09, 0x04, 0x00, 0x86, 0xc9,
5885 0x19, 0x60, 0x00, 0x86, 0xcb, 0x0b, 0x7f, 0x00,
5886 0x86, 0xcd, 0x07, 0x2c, 0x00, 0x86, 0xce, 0x05,
5887 0xa0, 0x00, 0x86, 0xd1, 0x48, 0x9b, 0x00, 0x86,
5888 0xd2, 0x57, 0x93, 0x00, 0x86, 0xd4, 0x19, 0x63,
5889 0x00, 0x86, 0xd5, 0x48, 0x9c, 0x00, 0x86, 0xd7,
5890 0x48, 0x9d, 0x00, 0x86, 0xd9, 0x05, 0x9d, 0x00,
5891 0x86, 0xda, 0x57, 0x94, 0x00, 0x86, 0xdb, 0x19,
5892 0x68, 0x00, 0x86, 0xdc, 0x57, 0x95, 0x00, 0x86,
5893 0xde, 0x19, 0x64, 0x00, 0x86, 0xdf, 0x19, 0x67,
5894 0x00, 0x86, 0xe0, 0x57, 0x96, 0x00, 0x86, 0xe3,
5895 0x48, 0x9e, 0x00, 0x86, 0xe4, 0x0d, 0x4e, 0x00,
5896 0x86, 0xe5, 0x57, 0x97, 0x00, 0x86, 0xe6, 0x48,
5897 0x9f, 0x00, 0x86, 0xe7, 0x57, 0x98, 0x00, 0x86,
5898 0xe9, 0x19, 0x65, 0x00, 0x86, 0xec, 0x19, 0x66,
5899 0x00, 0x86, 0xed, 0x0d, 0xba, 0x00, 0x86, 0xee,
5900 0x0d, 0x6e, 0x00, 0x86, 0xef, 0x19, 0x69, 0x00,
5901 0x86, 0xf8, 0x0b, 0x5d, 0x00, 0x86, 0xf9, 0x19,
5902 0x73, 0x00, 0x86, 0xfa, 0x3a, 0xf1, 0x00, 0x86,
5903 0xfb, 0x19, 0x6f, 0x00, 0x86, 0xfc, 0x42, 0xd7,
5904 0x00, 0x86, 0xfd, 0x3a, 0xf2, 0x00, 0x86, 0xfe,
5905 0x05, 0x6b, 0x00, 0x87, 0x00, 0x19, 0x6d, 0x00,
5906 0x87, 0x02, 0x0e, 0x58, 0x00, 0x87, 0x03, 0x19,
5907 0x6e, 0x00, 0x87, 0x04, 0x57, 0x9a, 0x00, 0x87,
5908 0x05, 0x48, 0xa1, 0x00, 0x87, 0x06, 0x19, 0x6b,
5909 0x00, 0x87, 0x07, 0x48, 0xa2, 0x00, 0x87, 0x08,
5910 0x19, 0x6c, 0x00, 0x87, 0x09, 0x19, 0x71, 0x00,
5911 0x87, 0x0a, 0x19, 0x74, 0x00, 0x87, 0x0b, 0x3a,
5912 0xf3, 0x00, 0x87, 0x0d, 0x19, 0x72, 0x00, 0x87,
5913 0x0e, 0x48, 0xa3, 0x00, 0x87, 0x0f, 0x57, 0x9b,
5914 0x00, 0x87, 0x10, 0x48, 0xa4, 0x00, 0x87, 0x11,
5915 0x19, 0x70, 0x00, 0x87, 0x12, 0x19, 0x6a, 0x00,
5916 0x87, 0x13, 0x3a, 0xf4, 0x00, 0x87, 0x14, 0x4d,
5917 0x2c, 0x00, 0x87, 0x18, 0x0b, 0x96, 0x00, 0x87,
5918 0x19, 0x3a, 0xf5, 0x00, 0x87, 0x1a, 0x19, 0x7b,
5919 0x00, 0x87, 0x1c, 0x0e, 0xb6, 0x00, 0x87, 0x1e,
5920 0x3a, 0xf6, 0x00, 0x87, 0x1f, 0x48, 0xa5, 0x00,
5921 0x87, 0x21, 0x48, 0xa6, 0x00, 0x87, 0x22, 0x4d,
5922 0x2d, 0x00, 0x87, 0x23, 0x48, 0xa7, 0x00, 0x87,
5923 0x25, 0x19, 0x79, 0x00, 0x87, 0x28, 0x3a, 0xf7,
5924 0x00, 0x87, 0x29, 0x19, 0x7a, 0x00, 0x87, 0x2e,
5925 0x4d, 0x2e, 0x00, 0x87, 0x2f, 0x57, 0x9c, 0x00,
5926 0x87, 0x31, 0x48, 0xa8, 0x00, 0x87, 0x32, 0x57,
5927 0x9d, 0x00, 0x87, 0x34, 0x19, 0x75, 0x00, 0x87,
5928 0x37, 0x19, 0x77, 0x00, 0x87, 0x39, 0x4d, 0x2f,
5929 0x00, 0x87, 0x3a, 0x48, 0xa9, 0x00, 0x87, 0x3b,
5930 0x19, 0x78, 0x00, 0x87, 0x3c, 0x57, 0x9e, 0x00,
5931 0x87, 0x3d, 0x57, 0x9f, 0x00, 0x87, 0x3e, 0x3a,
5932 0xf8, 0x00, 0x87, 0x3f, 0x19, 0x76, 0x00, 0x87,
5933 0x40, 0x48, 0xaa, 0x00, 0x87, 0x43, 0x48, 0xab,
5934 0x00, 0x87, 0x45, 0x57, 0xa0, 0x00, 0x87, 0x49,
5935 0x0a, 0x8a, 0x00, 0x87, 0x4b, 0x0f, 0xdf, 0x00,
5936 0x87, 0x4c, 0x19, 0x7f, 0x00, 0x87, 0x4d, 0x57,
5937 0xa1, 0x00, 0x87, 0x4e, 0x19, 0x80, 0x00, 0x87,
5938 0x51, 0x48, 0xac, 0x00, 0x87, 0x53, 0x19, 0x86,
5939 0x00, 0x87, 0x55, 0x09, 0xf0, 0x00, 0x87, 0x57,
5940 0x19, 0x82, 0x00, 0x87, 0x58, 0x48, 0xad, 0x00,
5941 0x87, 0x59, 0x19, 0x85, 0x00, 0x87, 0x5d, 0x4d,
5942 0x30, 0x00, 0x87, 0x5f, 0x19, 0x7d, 0x00, 0x87,
5943 0x60, 0x19, 0x7c, 0x00, 0x87, 0x61, 0x57, 0xa2,
5944 0x00, 0x87, 0x63, 0x19, 0x87, 0x00, 0x87, 0x64,
5945 0x48, 0xae, 0x00, 0x87, 0x65, 0x48, 0xaf, 0x00,
5946 0x87, 0x66, 0x05, 0x5c, 0x00, 0x87, 0x68, 0x19,
5947 0x83, 0x00, 0x87, 0x6a, 0x19, 0x88, 0x00, 0x87,
5948 0x6e, 0x19, 0x84, 0x00, 0x87, 0x6f, 0x57, 0xa3,
5949 0x00, 0x87, 0x71, 0x3a, 0xf9, 0x00, 0x87, 0x72,
5950 0x48, 0xb0, 0x00, 0x87, 0x74, 0x19, 0x81, 0x00,
5951 0x87, 0x76, 0x0b, 0xcf, 0x00, 0x87, 0x78, 0x19,
5952 0x7e, 0x00, 0x87, 0x7b, 0x4d, 0x31, 0x00, 0x87,
5953 0x7c, 0x48, 0xb1, 0x00, 0x87, 0x7f, 0x0d, 0x1e,
5954 0x00, 0x87, 0x82, 0x19, 0x8c, 0x00, 0x87, 0x83,
5955 0x57, 0xa4, 0x00, 0x87, 0x84, 0x57, 0xa5, 0x00,
5956 0x87, 0x85, 0x57, 0xa6, 0x00, 0x87, 0x86, 0x57,
5957 0xa7, 0x00, 0x87, 0x87, 0x42, 0xd8, 0x00, 0x87,
5958 0x88, 0x3a, 0xfa, 0x00, 0x87, 0x89, 0x48, 0xb5,
5959 0x00, 0x87, 0x8b, 0x48, 0xb6, 0x00, 0x87, 0x8c,
5960 0x4d, 0x32, 0x00, 0x87, 0x8d, 0x0f, 0x25, 0x00,
5961 0x87, 0x8e, 0x4d, 0x33, 0x00, 0x87, 0x90, 0x57,
5962 0xa8, 0x00, 0x87, 0x93, 0x48, 0xb7, 0x00, 0x87,
5963 0x95, 0x57, 0xa9, 0x00, 0x87, 0x97, 0x4d, 0x34,
5964 0x00, 0x87, 0x98, 0x4d, 0x35, 0x00, 0x87, 0x99,
5965 0x3a, 0xfb, 0x00, 0x87, 0x9e, 0x4d, 0x36, 0x00,
5966 0x87, 0x9f, 0x19, 0x8b, 0x00, 0x87, 0xa0, 0x48,
5967 0xb8, 0x00, 0x87, 0xa2, 0x19, 0x8a, 0x00, 0x87,
5968 0xa3, 0x4d, 0x37, 0x00, 0x87, 0xa7, 0x48, 0xb4,
5969 0x00, 0x87, 0xab, 0x19, 0x93, 0x00, 0x87, 0xac,
5970 0x3a, 0xfc, 0x00, 0x87, 0xad, 0x3a, 0xfd, 0x00,
5971 0x87, 0xae, 0x4d, 0x38, 0x00, 0x87, 0xaf, 0x19,
5972 0x8d, 0x00, 0x87, 0xb1, 0x57, 0xab, 0x00, 0x87,
5973 0xb3, 0x19, 0x95, 0x00, 0x87, 0xb5, 0x3a, 0xfe,
5974 0x00, 0x87, 0xba, 0x0f, 0x50, 0x00, 0x87, 0xbb,
5975 0x19, 0x98, 0x00, 0x87, 0xbd, 0x19, 0x8f, 0x00,
5976 0x87, 0xbe, 0x48, 0xbb, 0x00, 0x87, 0xbf, 0x4d,
5977 0x39, 0x00, 0x87, 0xc0, 0x19, 0x90, 0x00, 0x87,
5978 0xc1, 0x48, 0xbd, 0x00, 0x87, 0xc4, 0x19, 0x94,
5979 0x00, 0x87, 0xc6, 0x19, 0x97, 0x00, 0x87, 0xc7,
5980 0x19, 0x96, 0x00, 0x87, 0xc8, 0x57, 0xac, 0x00,
5981 0x87, 0xc9, 0x4d, 0x3a, 0x00, 0x87, 0xca, 0x57,
5982 0xad, 0x00, 0x87, 0xcb, 0x19, 0x8e, 0x00, 0x87,
5983 0xce, 0x48, 0xbe, 0x00, 0x87, 0xd0, 0x19, 0x91,
5984 0x00, 0x87, 0xd2, 0x19, 0xa2, 0x00, 0x87, 0xd5,
5985 0x57, 0xae, 0x00, 0x87, 0xd6, 0x3a, 0xff, 0x00,
5986 0x87, 0xd9, 0x57, 0xaf, 0x00, 0x87, 0xda, 0x4d,
5987 0x3b, 0x00, 0x87, 0xdc, 0x57, 0xb0, 0x00, 0x87,
5988 0xdf, 0x48, 0xbf, 0x00, 0x87, 0xe0, 0x19, 0x9b,
5989 0x00, 0x87, 0xe2, 0x57, 0xb1, 0x00, 0x87, 0xe3,
5990 0x48, 0xc1, 0x00, 0x87, 0xe4, 0x57, 0xb2, 0x00,
5991 0x87, 0xe5, 0x48, 0xc2, 0x00, 0x87, 0xe6, 0x48,
5992 0xc3, 0x00, 0x87, 0xea, 0x48, 0xc4, 0x00, 0x87,
5993 0xeb, 0x3b, 0x00, 0x00, 0x87, 0xec, 0x1e, 0x23,
5994 0x00, 0x87, 0xed, 0x3b, 0x01, 0x00, 0x87, 0xef,
5995 0x19, 0x99, 0x00, 0x87, 0xf1, 0x57, 0xb3, 0x00,
5996 0x87, 0xf2, 0x19, 0x9a, 0x00, 0x87, 0xf3, 0x57,
5997 0xb4, 0x00, 0x87, 0xf5, 0x3c, 0x3d, 0x00, 0x87,
5998 0xf6, 0x19, 0x9f, 0x00, 0x87, 0xf7, 0x19, 0xa0,
5999 0x00, 0x87, 0xf8, 0x57, 0xb5, 0x00, 0x87, 0xf9,
6000 0x05, 0x88, 0x00, 0x87, 0xfa, 0x57, 0xb6, 0x00,
6001 0x87, 0xfb, 0x06, 0x5c, 0x00, 0x87, 0xfe, 0x19,
6002 0x9e, 0x00, 0x87, 0xff, 0x57, 0xb7, 0x00, 0x88,
6003 0x01, 0x3b, 0x02, 0x00, 0x88, 0x03, 0x4f, 0x58,
6004 0x00, 0x88, 0x05, 0x19, 0x89, 0x00, 0x88, 0x06,
6005 0x3b, 0x04, 0x00, 0x88, 0x07, 0x21, 0xa6, 0x00,
6006 0x88, 0x09, 0x57, 0xb8, 0x00, 0x88, 0x0a, 0x42,
6007 0xda, 0x00, 0x88, 0x0b, 0x3b, 0x05, 0x00, 0x88,
6008 0x0d, 0x19, 0x9d, 0x00, 0x88, 0x0e, 0x19, 0xa1,
6009 0x00, 0x88, 0x0f, 0x19, 0x9c, 0x00, 0x88, 0x10,
6010 0x42, 0xdb, 0x00, 0x88, 0x11, 0x19, 0xa3, 0x00,
6011 0x88, 0x12, 0x57, 0xba, 0x00, 0x88, 0x13, 0x48,
6012 0xc5, 0x00, 0x88, 0x14, 0x3b, 0x06, 0x00, 0x88,
6013 0x15, 0x19, 0xa5, 0x00, 0x88, 0x16, 0x19, 0xa4,
6014 0x00, 0x88, 0x18, 0x4d, 0x3c, 0x00, 0x88, 0x19,
6015 0x57, 0xb9, 0x00, 0x88, 0x1a, 0x57, 0xbb, 0x00,
6016 0x88, 0x1b, 0x4d, 0x3d, 0x00, 0x88, 0x1c, 0x3b,
6017 0x07, 0x00, 0x88, 0x1e, 0x57, 0xbc, 0x00, 0x88,
6018 0x1f, 0x1e, 0x85, 0x00, 0x88, 0x21, 0x19, 0xa7,
6019 0x00, 0x88, 0x22, 0x19, 0xa6, 0x00, 0x88, 0x23,
6020 0x19, 0x61, 0x00, 0x88, 0x27, 0x19, 0xab, 0x00,
6021 0x88, 0x28, 0x48, 0xc6, 0x00, 0x88, 0x2d, 0x4d,
6022 0x3e, 0x00, 0x88, 0x2e, 0x48, 0xc7, 0x00, 0x88,
6023 0x30, 0x57, 0xbd, 0x00, 0x88, 0x31, 0x19, 0xa8,
6024 0x00, 0x88, 0x32, 0x48, 0xc8, 0x00, 0x88, 0x35,
6025 0x57, 0xbe, 0x00, 0x88, 0x36, 0x19, 0xa9, 0x00,
6026 0x88, 0x39, 0x19, 0xaa, 0x00, 0x88, 0x3a, 0x4d,
6027 0x3f, 0x00, 0x88, 0x3b, 0x19, 0xac, 0x00, 0x88,
6028 0x3c, 0x48, 0xc9, 0x00, 0x88, 0x40, 0x07, 0x42,
6029 0x00, 0x88, 0x41, 0x57, 0xbf, 0x00, 0x88, 0x42,
6030 0x19, 0xae, 0x00, 0x88, 0x43, 0x57, 0xc0, 0x00,
6031 0x88, 0x44, 0x19, 0xad, 0x00, 0x88, 0x45, 0x4d,
6032 0x40, 0x00, 0x88, 0x46, 0x09, 0x3a, 0x00, 0x88,
6033 0x48, 0x57, 0xc1, 0x00, 0x88, 0x49, 0x57, 0xc2,
6034 0x00, 0x88, 0x4a, 0x48, 0xcb, 0x00, 0x88, 0x4b,
6035 0x4d, 0x41, 0x00, 0x88, 0x4c, 0x07, 0xe6, 0x00,
6036 0x88, 0x4d, 0x15, 0x24, 0x00, 0x88, 0x4e, 0x4d,
6037 0x42, 0x00, 0x88, 0x51, 0x57, 0xc4, 0x00, 0x88,
6038 0x52, 0x19, 0xaf, 0x00, 0x88, 0x53, 0x09, 0x5b,
6039 0x00, 0x88, 0x55, 0x4d, 0x43, 0x00, 0x88, 0x56,
6040 0x3b, 0x08, 0x00, 0x88, 0x57, 0x05, 0x97, 0x00,
6041 0x88, 0x58, 0x48, 0xcc, 0x00, 0x88, 0x59, 0x19,
6042 0xb0, 0x00, 0x88, 0x5a, 0x4d, 0x44, 0x00, 0x88,
6043 0x5b, 0x04, 0xf4, 0x00, 0x88, 0x5c, 0x57, 0xc5,
6044 0x00, 0x88, 0x5d, 0x09, 0xbf, 0x00, 0x88, 0x5e,
6045 0x19, 0xb1, 0x00, 0x88, 0x5f, 0x3b, 0x09, 0x00,
6046 0x88, 0x60, 0x57, 0xc6, 0x00, 0x88, 0x61, 0x07,
6047 0xe7, 0x00, 0x88, 0x62, 0x19, 0xb2, 0x00, 0x88,
6048 0x63, 0x04, 0xa5, 0x00, 0x88, 0x64, 0x3b, 0x0a,
6049 0x00, 0x88, 0x68, 0x0d, 0xaf, 0x00, 0x88, 0x69,
6050 0x48, 0xcf, 0x00, 0x88, 0x6b, 0x19, 0xb3, 0x00,
6051 0x88, 0x6e, 0x4d, 0x45, 0x00, 0x88, 0x6f, 0x48,
6052 0xd1, 0x00, 0x88, 0x70, 0x0a, 0x30, 0x00, 0x88,
6053 0x71, 0x57, 0xc7, 0x00, 0x88, 0x72, 0x19, 0xba,
6054 0x00, 0x88, 0x75, 0x19, 0xb7, 0x00, 0x88, 0x77,
6055 0x0b, 0xad, 0x00, 0x88, 0x79, 0x57, 0xc8, 0x00,
6056 0x88, 0x7b, 0x57, 0xc9, 0x00, 0x88, 0x7d, 0x19,
6057 0xb8, 0x00, 0x88, 0x7e, 0x19, 0xb5, 0x00, 0x88,
6058 0x7f, 0x06, 0xd6, 0x00, 0x88, 0x80, 0x57, 0xca,
6059 0x00, 0x88, 0x81, 0x19, 0xb4, 0x00, 0x88, 0x82,
6060 0x19, 0xbb, 0x00, 0x88, 0x88, 0x07, 0x0c, 0x00,
6061 0x88, 0x8b, 0x0b, 0x3e, 0x00, 0x88, 0x8d, 0x19,
6062 0xc1, 0x00, 0x88, 0x92, 0x19, 0xbd, 0x00, 0x88,
6063 0x96, 0x0b, 0x15, 0x00, 0x88, 0x97, 0x19, 0xbc,
6064 0x00, 0x88, 0x98, 0x3b, 0x0b, 0x00, 0x88, 0x99,
6065 0x19, 0xbf, 0x00, 0x88, 0x9a, 0x4d, 0x46, 0x00,
6066 0x88, 0x9b, 0x4d, 0x47, 0x00, 0x88, 0x9c, 0x4d,
6067 0x48, 0x00, 0x88, 0x9e, 0x19, 0xb6, 0x00, 0x88,
6068 0x9f, 0x57, 0xcb, 0x00, 0x88, 0xa0, 0x48, 0xd2,
6069 0x00, 0x88, 0xa2, 0x19, 0xc0, 0x00, 0x88, 0xa4,
6070 0x19, 0xc2, 0x00, 0x88, 0xa8, 0x57, 0xcc, 0x00,
6071 0x88, 0xaa, 0x3b, 0x0c, 0x00, 0x88, 0xab, 0x0d,
6072 0x83, 0x00, 0x88, 0xae, 0x19, 0xbe, 0x00, 0x88,
6073 0xb0, 0x19, 0xc3, 0x00, 0x88, 0xb1, 0x19, 0xc5,
6074 0x00, 0x88, 0xb4, 0x07, 0x87, 0x00, 0x88, 0xb5,
6075 0x19, 0xb9, 0x00, 0x88, 0xb7, 0x04, 0x85, 0x00,
6076 0x88, 0xba, 0x57, 0xcd, 0x00, 0x88, 0xbc, 0x48,
6077 0xd3, 0x00, 0x88, 0xbd, 0x3b, 0x0d, 0x00, 0x88,
6078 0xbe, 0x3b, 0x0e, 0x00, 0x88, 0xbf, 0x19, 0xc4,
6079 0x00, 0x88, 0xc0, 0x48, 0xd4, 0x00, 0x88, 0xc1,
6080 0x08, 0x4b, 0x00, 0x88, 0xc2, 0x0f, 0xbe, 0x00,
6081 0x88, 0xc3, 0x19, 0xc6, 0x00, 0x88, 0xc4, 0x19,
6082 0xc7, 0x00, 0x88, 0xc5, 0x0a, 0xf7, 0x00, 0x88,
6083 0xc6, 0x37, 0x89, 0x00, 0x88, 0xca, 0x3b, 0x0f,
6084 0x00, 0x88, 0xcb, 0x57, 0xce, 0x00, 0x88, 0xcc,
6085 0x57, 0xcf, 0x00, 0x88, 0xcd, 0x4d, 0x49, 0x00,
6086 0x88, 0xce, 0x42, 0xdc, 0x00, 0x88, 0xcf, 0x0f,
6087 0x6a, 0x00, 0x88, 0xd1, 0x48, 0xd6, 0x00, 0x88,
6088 0xd2, 0x3b, 0x10, 0x00, 0x88, 0xd3, 0x48, 0xd7,
6089 0x00, 0x88, 0xd4, 0x19, 0xc8, 0x00, 0x88, 0xd5,
6090 0x0f, 0x1f, 0x00, 0x88, 0xd8, 0x19, 0xc9, 0x00,
6091 0x88, 0xd9, 0x19, 0xca, 0x00, 0x88, 0xdb, 0x3b,
6092 0x11, 0x00, 0x88, 0xdc, 0x0e, 0x34, 0x00, 0x88,
6093 0xdd, 0x19, 0xcb, 0x00, 0x88, 0xde, 0x57, 0xd0,
6094 0x00, 0x88, 0xdf, 0x08, 0x30, 0x00, 0x88, 0xe0,
6095 0x4d, 0x4a, 0x00, 0x88, 0xe1, 0x0f, 0x6b, 0x00,
6096 0x88, 0xe7, 0x57, 0xd1, 0x00, 0x88, 0xe8, 0x19,
6097 0xd0, 0x00, 0x88, 0xef, 0x4d, 0x4b, 0x00, 0x88,
6098 0xf0, 0x3b, 0x12, 0x00, 0x88, 0xf1, 0x3b, 0x13,
6099 0x00, 0x88, 0xf2, 0x19, 0xd1, 0x00, 0x88, 0xf3,
6100 0x09, 0xc0, 0x00, 0x88, 0xf4, 0x19, 0xcf, 0x00,
6101 0x88, 0xf5, 0x21, 0xa7, 0x00, 0x88, 0xf7, 0x57,
6102 0xd2, 0x00, 0x88, 0xf8, 0x0f, 0x51, 0x00, 0x88,
6103 0xf9, 0x19, 0xcc, 0x00, 0x88, 0xfc, 0x19, 0xce,
6104 0x00, 0x88, 0xfd, 0x0a, 0x61, 0x00, 0x88, 0xfe,
6105 0x0a, 0x44, 0x00, 0x89, 0x01, 0x48, 0xd9, 0x00,
6106 0x89, 0x02, 0x19, 0xcd, 0x00, 0x89, 0x04, 0x19,
6107 0xd2, 0x00, 0x89, 0x06, 0x3b, 0x14, 0x00, 0x89,
6108 0x07, 0x0d, 0xf3, 0x00, 0x89, 0x0a, 0x19, 0xd4,
6109 0x00, 0x89, 0x0c, 0x19, 0xd3, 0x00, 0x89, 0x0d,
6110 0x57, 0xd3, 0x00, 0x89, 0x0e, 0x4d, 0x4c, 0x00,
6111 0x89, 0x0f, 0x4d, 0x4d, 0x00, 0x89, 0x10, 0x05,
6112 0xca, 0x00, 0x89, 0x12, 0x0e, 0x59, 0x00, 0x89,
6113 0x13, 0x19, 0xd5, 0x00, 0x89, 0x15, 0x57, 0xd4,
6114 0x00, 0x89, 0x16, 0x57, 0xd5, 0x00, 0x89, 0x18,
6115 0x3b, 0x15, 0x00, 0x89, 0x19, 0x3b, 0x16, 0x00,
6116 0x89, 0x1a, 0x3b, 0x17, 0x00, 0x89, 0x1c, 0x20,
6117 0xa8, 0x00, 0x89, 0x1d, 0x19, 0xe1, 0x00, 0x89,
6118 0x1e, 0x19, 0xd7, 0x00, 0x89, 0x20, 0x57, 0xd6,
6119 0x00, 0x89, 0x25, 0x19, 0xd8, 0x00, 0x89, 0x26,
6120 0x4d, 0x4e, 0x00, 0x89, 0x27, 0x3b, 0x18, 0x00,
6121 0x89, 0x28, 0x57, 0xd7, 0x00, 0x89, 0x2a, 0x19,
6122 0xd9, 0x00, 0x89, 0x2b, 0x19, 0xda, 0x00, 0x89,
6123 0x30, 0x3b, 0x19, 0x00, 0x89, 0x31, 0x57, 0xd8,
6124 0x00, 0x89, 0x32, 0x42, 0xde, 0x00, 0x89, 0x35,
6125 0x4d, 0x4f, 0x00, 0x89, 0x36, 0x19, 0xde, 0x00,
6126 0x89, 0x37, 0x48, 0xdb, 0x00, 0x89, 0x38, 0x19,
6127 0xdf, 0x00, 0x89, 0x39, 0x42, 0xdf, 0x00, 0x89,
6128 0x3a, 0x57, 0xd9, 0x00, 0x89, 0x3b, 0x19, 0xdd,
6129 0x00, 0x89, 0x3e, 0x3b, 0x1a, 0x00, 0x89, 0x40,
6130 0x42, 0xe0, 0x00, 0x89, 0x41, 0x19, 0xdb, 0x00,
6131 0x89, 0x42, 0x48, 0xdd, 0x00, 0x89, 0x43, 0x19,
6132 0xd6, 0x00, 0x89, 0x44, 0x19, 0xdc, 0x00, 0x89,
6133 0x45, 0x48, 0xde, 0x00, 0x89, 0x46, 0x57, 0xda,
6134 0x00, 0x89, 0x49, 0x48, 0xdf, 0x00, 0x89, 0x4c,
6135 0x19, 0xe0, 0x00, 0x89, 0x4d, 0x1b, 0xd0, 0x00,
6136 0x89, 0x4f, 0x57, 0xdb, 0x00, 0x89, 0x52, 0x57,
6137 0xdc, 0x00, 0x89, 0x56, 0x05, 0x28, 0x00, 0x89,
6138 0x57, 0x57, 0xdd, 0x00, 0x89, 0x5a, 0x4d, 0x50,
6139 0x00, 0x89, 0x5b, 0x57, 0xde, 0x00, 0x89, 0x5c,
6140 0x4d, 0x51, 0x00, 0x89, 0x5e, 0x19, 0xe3, 0x00,
6141 0x89, 0x5f, 0x06, 0xd7, 0x00, 0x89, 0x60, 0x19,
6142 0xe2, 0x00, 0x89, 0x61, 0x57, 0xdf, 0x00, 0x89,
6143 0x62, 0x48, 0xe1, 0x00, 0x89, 0x63, 0x57, 0xe0,
6144 0x00, 0x89, 0x64, 0x19, 0xe5, 0x00, 0x89, 0x66,
6145 0x19, 0xe4, 0x00, 0x89, 0x6a, 0x19, 0xe7, 0x00,
6146 0x89, 0x6b, 0x4d, 0x52, 0x00, 0x89, 0x6d, 0x19,
6147 0xe6, 0x00, 0x89, 0x6e, 0x57, 0xe1, 0x00, 0x89,
6148 0x6f, 0x19, 0xe8, 0x00, 0x89, 0x70, 0x4d, 0x53,
6149 0x00, 0x89, 0x72, 0x09, 0x3b, 0x00, 0x89, 0x73,
6150 0x57, 0xe2, 0x00, 0x89, 0x74, 0x19, 0xe9, 0x00,
6151 0x89, 0x75, 0x57, 0xe3, 0x00, 0x89, 0x77, 0x19,
6152 0xea, 0x00, 0x89, 0x7a, 0x57, 0xe4, 0x00, 0x89,
6153 0x7b, 0x3b, 0x1b, 0x00, 0x89, 0x7c, 0x4d, 0x54,
6154 0x00, 0x89, 0x7d, 0x57, 0xe5, 0x00, 0x89, 0x7e,
6155 0x19, 0xeb, 0x00, 0x89, 0x7f, 0x0a, 0x62, 0x00,
6156 0x89, 0x80, 0x36, 0x2e, 0x00, 0x89, 0x81, 0x0f,
6157 0x41, 0x00, 0x89, 0x83, 0x19, 0xec, 0x00, 0x89,
6158 0x86, 0x0d, 0xf4, 0x00, 0x89, 0x87, 0x0c, 0xfc,
6159 0x00, 0x89, 0x88, 0x19, 0xed, 0x00, 0x89, 0x89,
6160 0x48, 0xe2, 0x00, 0x89, 0x8a, 0x19, 0xee, 0x00,
6161 0x89, 0x8b, 0x07, 0x5f, 0x00, 0x89, 0x8d, 0x57,
6162 0xe6, 0x00, 0x89, 0x8f, 0x06, 0x46, 0x00, 0x89,
6163 0x90, 0x48, 0xe3, 0x00, 0x89, 0x93, 0x19, 0xef,
6164 0x00, 0x89, 0x94, 0x42, 0xe1, 0x00, 0x89, 0x95,
6165 0x57, 0xe7, 0x00, 0x89, 0x96, 0x08, 0xb9, 0x00,
6166 0x89, 0x97, 0x0c, 0xf7, 0x00, 0x89, 0x98, 0x19,
6167 0xf0, 0x00, 0x89, 0x9a, 0x05, 0xae, 0x00, 0x89,
6168 0x9b, 0x57, 0xe8, 0x00, 0x89, 0x9c, 0x57, 0xe9,
6169 0x00, 0x89, 0x9f, 0x48, 0xe4, 0x00, 0x89, 0xa0,
6170 0x57, 0xea, 0x00, 0x89, 0xa1, 0x19, 0xf1, 0x00,
6171 0x89, 0xa5, 0x4d, 0x55, 0x00, 0x89, 0xa6, 0x19,
6172 0xf3, 0x00, 0x89, 0xa7, 0x0f, 0x61, 0x00, 0x89,
6173 0xa9, 0x19, 0xf2, 0x00, 0x89, 0xaa, 0x0a, 0x0c,
6174 0x00, 0x89, 0xac, 0x19, 0xf4, 0x00, 0x89, 0xaf,
6175 0x19, 0xf5, 0x00, 0x89, 0xb0, 0x48, 0xe5, 0x00,
6176 0x89, 0xb2, 0x19, 0xf6, 0x00, 0x89, 0xb3, 0x06,
6177 0x0d, 0x00, 0x89, 0xb4, 0x57, 0xeb, 0x00, 0x89,
6178 0xb5, 0x4d, 0x56, 0x00, 0x89, 0xb6, 0x57, 0xec,
6179 0x00, 0x89, 0xb7, 0x48, 0xe6, 0x00, 0x89, 0xba,
6180 0x19, 0xf7, 0x00, 0x89, 0xbc, 0x4d, 0x57, 0x00,
6181 0x89, 0xbd, 0x19, 0xf8, 0x00, 0x89, 0xbf, 0x19,
6182 0xf9, 0x00, 0x89, 0xc0, 0x19, 0xfa, 0x00, 0x89,
6183 0xd2, 0x35, 0x72, 0x00, 0x89, 0xd4, 0x3b, 0x1c,
6184 0x00, 0x89, 0xd5, 0x4d, 0x58, 0x00, 0x89, 0xd6,
6185 0x3b, 0x1d, 0x00, 0x89, 0xd7, 0x57, 0xed, 0x00,
6186 0x89, 0xd8, 0x48, 0xe7, 0x00, 0x89, 0xda, 0x19,
6187 0xfb, 0x00, 0x89, 0xdc, 0x19, 0xfc, 0x00, 0x89,
6188 0xdd, 0x19, 0xfd, 0x00, 0x89, 0xe3, 0x05, 0x72,
6189 0x00, 0x89, 0xe5, 0x3b, 0x1e, 0x00, 0x89, 0xe6,
6190 0x09, 0xee, 0x00, 0x89, 0xe7, 0x19, 0xfe, 0x00,
6191 0x89, 0xe9, 0x57, 0xee, 0x00, 0x89, 0xeb, 0x48,
6192 0xe8, 0x00, 0x89, 0xed, 0x57, 0xef, 0x00, 0x89,
6193 0xf1, 0x3b, 0x1f, 0x00, 0x89, 0xf3, 0x48, 0xea,
6194 0x00, 0x89, 0xf4, 0x19, 0xff, 0x00, 0x89, 0xf6,
6195 0x42, 0xe2, 0x00, 0x89, 0xf8, 0x1a, 0x00, 0x00,
6196 0x89, 0xf9, 0x57, 0xf0, 0x00, 0x89, 0xfd, 0x48,
6197 0xeb, 0x00, 0x89, 0xff, 0x48, 0xec, 0x00, 0x8a,
6198 0x00, 0x07, 0x74, 0x00, 0x8a, 0x01, 0x35, 0xbc,
6199 0x00, 0x8a, 0x02, 0x0c, 0x17, 0x00, 0x8a, 0x03,
6200 0x1a, 0x01, 0x00, 0x8a, 0x04, 0x57, 0xf1, 0x00,
6201 0x8a, 0x05, 0x57, 0xf2, 0x00, 0x8a, 0x07, 0x3b,
6202 0x20, 0x00, 0x8a, 0x08, 0x07, 0x2d, 0x00, 0x8a,
6203 0x0a, 0x0a, 0x1c, 0x00, 0x8a, 0x0c, 0x1a, 0x04,
6204 0x00, 0x8a, 0x0e, 0x0c, 0x7c, 0x00, 0x8a, 0x0f,
6205 0x3b, 0x21, 0x00, 0x8a, 0x10, 0x1a, 0x03, 0x00,
6206 0x8a, 0x11, 0x48, 0xee, 0x00, 0x8a, 0x12, 0x21,
6207 0xa8, 0x00, 0x8a, 0x13, 0x07, 0x07, 0x00, 0x8a,
6208 0x14, 0x48, 0xef, 0x00, 0x8a, 0x15, 0x3b, 0x22,
6209 0x00, 0x8a, 0x16, 0x1a, 0x02, 0x00, 0x8a, 0x17,
6210 0x0b, 0x57, 0x00, 0x8a, 0x18, 0x06, 0x47, 0x00,
6211 0x8a, 0x1b, 0x1a, 0x05, 0x00, 0x8a, 0x1d, 0x1a,
6212 0x06, 0x00, 0x8a, 0x1e, 0x57, 0xf3, 0x00, 0x8a,
6213 0x1f, 0x09, 0xc1, 0x00, 0x8a, 0x20, 0x57, 0xf4,
6214 0x00, 0x8a, 0x21, 0x48, 0xf1, 0x00, 0x8a, 0x22,
6215 0x3b, 0x23, 0x00, 0x8a, 0x23, 0x07, 0x43, 0x00,
6216 0x8a, 0x24, 0x57, 0xf5, 0x00, 0x8a, 0x25, 0x1a,
6217 0x07, 0x00, 0x8a, 0x26, 0x57, 0xf6, 0x00, 0x8a,
6218 0x2a, 0x0e, 0x5a, 0x00, 0x8a, 0x2b, 0x57, 0xf7,
6219 0x00, 0x8a, 0x2c, 0x57, 0xf8, 0x00, 0x8a, 0x2d,
6220 0x0a, 0x83, 0x00, 0x8a, 0x2f, 0x57, 0xf9, 0x00,
6221 0x8a, 0x31, 0x06, 0x90, 0x00, 0x8a, 0x33, 0x0f,
6222 0x01, 0x00, 0x8a, 0x34, 0x0a, 0xcc, 0x00, 0x8a,
6223 0x35, 0x48, 0xf2, 0x00, 0x8a, 0x36, 0x1a, 0x08,
6224 0x00, 0x8a, 0x37, 0x21, 0xa9, 0x00, 0x8a, 0x3a,
6225 0x0a, 0x0d, 0x00, 0x8a, 0x3b, 0x0b, 0xae, 0x00,
6226 0x8a, 0x3c, 0x09, 0xc2, 0x00, 0x8a, 0x3d, 0x57,
6227 0xfa, 0x00, 0x8a, 0x3e, 0x48, 0xf3, 0x00, 0x8a,
6228 0x40, 0x57, 0xfb, 0x00, 0x8a, 0x41, 0x1a, 0x09,
6229 0x00, 0x8a, 0x43, 0x57, 0xfc, 0x00, 0x8a, 0x45,
6230 0x48, 0xf4, 0x00, 0x8a, 0x46, 0x1a, 0x0c, 0x00,
6231 0x8a, 0x47, 0x42, 0xe3, 0x00, 0x8a, 0x48, 0x1a,
6232 0x0d, 0x00, 0x8a, 0x49, 0x4d, 0x59, 0x00, 0x8a,
6233 0x4d, 0x48, 0xf5, 0x00, 0x8a, 0x4e, 0x3b, 0x24,
6234 0x00, 0x8a, 0x50, 0x08, 0x2e, 0x00, 0x8a, 0x51,
6235 0x0b, 0x22, 0x00, 0x8a, 0x52, 0x1a, 0x0b, 0x00,
6236 0x8a, 0x53, 0x57, 0xfd, 0x00, 0x8a, 0x54, 0x09,
6237 0xc3, 0x00, 0x8a, 0x55, 0x0d, 0xb0, 0x00, 0x8a,
6238 0x56, 0x57, 0xfe, 0x00, 0x8a, 0x57, 0x4d, 0x5a,
6239 0x00, 0x8a, 0x58, 0x48, 0xf6, 0x00, 0x8a, 0x5b,
6240 0x1a, 0x0a, 0x00, 0x8a, 0x5c, 0x57, 0xff, 0x00,
6241 0x8a, 0x5d, 0x42, 0xe4, 0x00, 0x8a, 0x5e, 0x08,
6242 0xba, 0x00, 0x8a, 0x60, 0x04, 0xf5, 0x00, 0x8a,
6243 0x61, 0x42, 0xe5, 0x00, 0x8a, 0x62, 0x1a, 0x11,
6244 0x00, 0x8a, 0x63, 0x07, 0x2e, 0x00, 0x8a, 0x65,
6245 0x58, 0x00, 0x00, 0x8a, 0x66, 0x08, 0xbc, 0x00,
6246 0x8a, 0x67, 0x4d, 0x5b, 0x00, 0x8a, 0x69, 0x08,
6247 0xbb, 0x00, 0x8a, 0x6b, 0x0f, 0xf3, 0x00, 0x8a,
6248 0x6c, 0x1a, 0x10, 0x00, 0x8a, 0x6d, 0x1a, 0x0f,
6249 0x00, 0x8a, 0x6e, 0x0a, 0xa9, 0x00, 0x8a, 0x70,
6250 0x06, 0x67, 0x00, 0x8a, 0x71, 0x0f, 0xe9, 0x00,
6251 0x8a, 0x72, 0x05, 0x98, 0x00, 0x8a, 0x73, 0x09,
6252 0xc4, 0x00, 0x8a, 0x75, 0x42, 0xe6, 0x00, 0x8a,
6253 0x76, 0x58, 0x01, 0x00, 0x8a, 0x77, 0x58, 0x02,
6254 0x00, 0x8a, 0x79, 0x21, 0xaa, 0x00, 0x8a, 0x7a,
6255 0x58, 0x03, 0x00, 0x8a, 0x7b, 0x58, 0x04, 0x00,
6256 0x8a, 0x7c, 0x1a, 0x0e, 0x00, 0x8a, 0x7e, 0x4d,
6257 0x5c, 0x00, 0x8a, 0x7f, 0x3b, 0x25, 0x00, 0x8a,
6258 0x80, 0x58, 0x05, 0x00, 0x8a, 0x82, 0x1a, 0x13,
6259 0x00, 0x8a, 0x83, 0x58, 0x06, 0x00, 0x8a, 0x84,
6260 0x1a, 0x14, 0x00, 0x8a, 0x85, 0x1a, 0x12, 0x00,
6261 0x8a, 0x86, 0x4d, 0x5d, 0x00, 0x8a, 0x87, 0x07,
6262 0x8c, 0x00, 0x8a, 0x89, 0x0f, 0x2a, 0x00, 0x8a,
6263 0x8b, 0x58, 0x07, 0x00, 0x8a, 0x8c, 0x08, 0xbd,
6264 0x00, 0x8a, 0x8d, 0x0c, 0xdd, 0x00, 0x8a, 0x8f,
6265 0x58, 0x08, 0x00, 0x8a, 0x90, 0x48, 0xf8, 0x00,
6266 0x8a, 0x91, 0x1a, 0x17, 0x00, 0x8a, 0x92, 0x58,
6267 0x09, 0x00, 0x8a, 0x93, 0x0a, 0x64, 0x00, 0x8a,
6268 0x95, 0x0b, 0x80, 0x00, 0x8a, 0x96, 0x4d, 0x5e,
6269 0x00, 0x8a, 0x97, 0x58, 0x0a, 0x00, 0x8a, 0x98,
6270 0x0f, 0x20, 0x00, 0x8a, 0x99, 0x58, 0x0b, 0x00,
6271 0x8a, 0x9a, 0x1a, 0x1a, 0x00, 0x8a, 0x9e, 0x07,
6272 0xa0, 0x00, 0x8a, 0x9f, 0x58, 0x0c, 0x00, 0x8a,
6273 0xa0, 0x0a, 0x63, 0x00, 0x8a, 0xa1, 0x1a, 0x16,
6274 0x00, 0x8a, 0xa3, 0x1a, 0x1b, 0x00, 0x8a, 0xa4,
6275 0x07, 0xa1, 0x00, 0x8a, 0xa5, 0x1a, 0x18, 0x00,
6276 0x8a, 0xa6, 0x1a, 0x19, 0x00, 0x8a, 0xa7, 0x21,
6277 0xab, 0x00, 0x8a, 0xa8, 0x1a, 0x15, 0x00, 0x8a,
6278 0xa9, 0x58, 0x0d, 0x00, 0x8a, 0xaa, 0x36, 0x38,
6279 0x00, 0x8a, 0xac, 0x0a, 0x86, 0x00, 0x8a, 0xad,
6280 0x0c, 0xa1, 0x00, 0x8a, 0xae, 0x48, 0xf7, 0x00,
6281 0x8a, 0xaf, 0x58, 0x0e, 0x00, 0x8a, 0xb0, 0x0b,
6282 0x6d, 0x00, 0x8a, 0xb2, 0x05, 0x5d, 0x00, 0x8a,
6283 0xb3, 0x58, 0x0f, 0x00, 0x8a, 0xb6, 0x4d, 0x5f,
6284 0x00, 0x8a, 0xb7, 0x48, 0xf9, 0x00, 0x8a, 0xb9,
6285 0x0d, 0x84, 0x00, 0x8a, 0xbb, 0x58, 0x10, 0x00,
6286 0x8a, 0xbc, 0x06, 0x5d, 0x00, 0x8a, 0xbe, 0x21,
6287 0xac, 0x00, 0x8a, 0xbf, 0x0b, 0xd0, 0x00, 0x8a,
6288 0xc2, 0x1a, 0x1e, 0x00, 0x8a, 0xc3, 0x58, 0x11,
6289 0x00, 0x8a, 0xc4, 0x1a, 0x1c, 0x00, 0x8a, 0xc6,
6290 0x58, 0x12, 0x00, 0x8a, 0xc7, 0x0b, 0x8a, 0x00,
6291 0x8a, 0xc8, 0x58, 0x13, 0x00, 0x8a, 0xc9, 0x4d,
6292 0x60, 0x00, 0x8a, 0xca, 0x58, 0x14, 0x00, 0x8a,
6293 0xcb, 0x0a, 0x65, 0x00, 0x8a, 0xcc, 0x06, 0x0e,
6294 0x00, 0x8a, 0xcd, 0x1a, 0x1d, 0x00, 0x8a, 0xcf,
6295 0x0a, 0x21, 0x00, 0x8a, 0xd0, 0x42, 0xe7, 0x00,
6296 0x8a, 0xd1, 0x4d, 0x61, 0x00, 0x8a, 0xd2, 0x0f,
6297 0x92, 0x00, 0x8a, 0xd3, 0x58, 0x15, 0x00, 0x8a,
6298 0xd4, 0x58, 0x16, 0x00, 0x8a, 0xd5, 0x58, 0x17,
6299 0x00, 0x8a, 0xd6, 0x0f, 0xe6, 0x00, 0x8a, 0xd7,
6300 0x48, 0xfa, 0x00, 0x8a, 0xda, 0x1a, 0x1f, 0x00,
6301 0x8a, 0xdb, 0x1a, 0x2a, 0x00, 0x8a, 0xdc, 0x0b,
6302 0xd1, 0x00, 0x8a, 0xdd, 0x4d, 0x62, 0x00, 0x8a,
6303 0xde, 0x1a, 0x29, 0x00, 0x8a, 0xdf, 0x21, 0xad,
6304 0x00, 0x8a, 0xe0, 0x1a, 0x26, 0x00, 0x8a, 0xe1,
6305 0x1a, 0x2e, 0x00, 0x8a, 0xe2, 0x1a, 0x27, 0x00,
6306 0x8a, 0xe4, 0x1a, 0x23, 0x00, 0x8a, 0xe6, 0x0c,
6307 0x18, 0x00, 0x8a, 0xe7, 0x1a, 0x22, 0x00, 0x8a,
6308 0xeb, 0x1a, 0x20, 0x00, 0x8a, 0xec, 0x4d, 0x63,
6309 0x00, 0x8a, 0xed, 0x36, 0xf4, 0x00, 0x8a, 0xee,
6310 0x08, 0xbe, 0x00, 0x8a, 0xf0, 0x58, 0x18, 0x00,
6311 0x8a, 0xf1, 0x1a, 0x24, 0x00, 0x8a, 0xf3, 0x1a,
6312 0x21, 0x00, 0x8a, 0xf4, 0x3b, 0x26, 0x00, 0x8a,
6313 0xf5, 0x4d, 0x64, 0x00, 0x8a, 0xf6, 0x21, 0xaf,
6314 0x00, 0x8a, 0xf7, 0x1a, 0x28, 0x00, 0x8a, 0xf8,
6315 0x21, 0xae, 0x00, 0x8a, 0xfa, 0x07, 0x75, 0x00,
6316 0x8a, 0xfc, 0x48, 0xfb, 0x00, 0x8a, 0xfe, 0x0b,
6317 0x5a, 0x00, 0x8a, 0xff, 0x58, 0x19, 0x00, 0x8b,
6318 0x00, 0x0e, 0x73, 0x00, 0x8b, 0x01, 0x34, 0x09,
6319 0x00, 0x8b, 0x02, 0x04, 0xa6, 0x00, 0x8b, 0x04,
6320 0x0c, 0x7d, 0x00, 0x8b, 0x05, 0x48, 0xfe, 0x00,
6321 0x8b, 0x06, 0x4d, 0x65, 0x00, 0x8b, 0x07, 0x1a,
6322 0x2c, 0x00, 0x8b, 0x0a, 0x48, 0xfd, 0x00, 0x8b,
6323 0x0b, 0x58, 0x1a, 0x00, 0x8b, 0x0c, 0x1a, 0x2b,
6324 0x00, 0x8b, 0x0d, 0x48, 0xff, 0x00, 0x8b, 0x0e,
6325 0x0c, 0xbe, 0x00, 0x8b, 0x0f, 0x4d, 0x66, 0x00,
6326 0x8b, 0x10, 0x1a, 0x30, 0x00, 0x8b, 0x11, 0x4d,
6327 0x67, 0x00, 0x8b, 0x14, 0x1a, 0x25, 0x00, 0x8b,
6328 0x16, 0x1a, 0x2f, 0x00, 0x8b, 0x17, 0x1a, 0x31,
6329 0x00, 0x8b, 0x19, 0x07, 0x60, 0x00, 0x8b, 0x1a,
6330 0x1a, 0x2d, 0x00, 0x8b, 0x1b, 0x07, 0xe8, 0x00,
6331 0x8b, 0x1c, 0x49, 0x00, 0x00, 0x8b, 0x1d, 0x09,
6332 0x01, 0x00, 0x8b, 0x1e, 0x58, 0x1b, 0x00, 0x8b,
6333 0x1f, 0x3b, 0x27, 0x00, 0x8b, 0x20, 0x1a, 0x32,
6334 0x00, 0x8b, 0x21, 0x0f, 0x42, 0x00, 0x8b, 0x26,
6335 0x1a, 0x35, 0x00, 0x8b, 0x28, 0x1a, 0x38, 0x00,
6336 0x8b, 0x2b, 0x1a, 0x36, 0x00, 0x8b, 0x2c, 0x0d,
6337 0xa7, 0x00, 0x8b, 0x2d, 0x49, 0x01, 0x00, 0x8b,
6338 0x30, 0x58, 0x1c, 0x00, 0x8b, 0x33, 0x1a, 0x33,
6339 0x00, 0x8b, 0x37, 0x3b, 0x28, 0x00, 0x8b, 0x39,
6340 0x34, 0x1b, 0x00, 0x8b, 0x3c, 0x58, 0x1d, 0x00,
6341 0x8b, 0x3e, 0x1a, 0x37, 0x00, 0x8b, 0x41, 0x1a,
6342 0x39, 0x00, 0x8b, 0x42, 0x58, 0x1e, 0x00, 0x8b,
6343 0x43, 0x3b, 0x29, 0x00, 0x8b, 0x44, 0x3b, 0x2a,
6344 0x00, 0x8b, 0x45, 0x4d, 0x68, 0x00, 0x8b, 0x46,
6345 0x42, 0xe8, 0x00, 0x8b, 0x48, 0x58, 0x1f, 0x00,
6346 0x8b, 0x49, 0x1a, 0x3d, 0x00, 0x8b, 0x4c, 0x1a,
6347 0x3a, 0x00, 0x8b, 0x4d, 0x58, 0x20, 0x00, 0x8b,
6348 0x4e, 0x1a, 0x3c, 0x00, 0x8b, 0x4f, 0x1a, 0x3b,
6349 0x00, 0x8b, 0x51, 0x49, 0x03, 0x00, 0x8b, 0x52,
6350 0x4d, 0x69, 0x00, 0x8b, 0x53, 0x21, 0xb0, 0x00,
6351 0x8b, 0x54, 0x3b, 0x2b, 0x00, 0x8b, 0x56, 0x1a,
6352 0x3e, 0x00, 0x8b, 0x58, 0x08, 0xdd, 0x00, 0x8b,
6353 0x59, 0x42, 0xe9, 0x00, 0x8b, 0x5a, 0x1a, 0x40,
6354 0x00, 0x8b, 0x5b, 0x1a, 0x3f, 0x00, 0x8b, 0x5c,
6355 0x0d, 0xda, 0x00, 0x8b, 0x5e, 0x49, 0x04, 0x00,
6356 0x8b, 0x5f, 0x1a, 0x42, 0x00, 0x8b, 0x63, 0x58,
6357 0x21, 0x00, 0x8b, 0x66, 0x07, 0x2f, 0x00, 0x8b,
6358 0x69, 0x42, 0xea, 0x00, 0x8b, 0x6b, 0x1a, 0x41,
6359 0x00, 0x8b, 0x6c, 0x1a, 0x43, 0x00, 0x8b, 0x6d,
6360 0x4d, 0x6a, 0x00, 0x8b, 0x6f, 0x1a, 0x44, 0x00,
6361 0x8b, 0x70, 0x06, 0x5e, 0x00, 0x8b, 0x71, 0x18,
6362 0x2e, 0x00, 0x8b, 0x72, 0x09, 0xe1, 0x00, 0x8b,
6363 0x74, 0x1a, 0x45, 0x00, 0x8b, 0x76, 0x49, 0x05,
6364 0x00, 0x8b, 0x77, 0x07, 0xa2, 0x00, 0x8b, 0x78,
6365 0x4d, 0x6b, 0x00, 0x8b, 0x79, 0x58, 0x22, 0x00,
6366 0x8b, 0x7c, 0x4d, 0x6c, 0x00, 0x8b, 0x7d, 0x1a,
6367 0x46, 0x00, 0x8b, 0x7e, 0x4d, 0x6d, 0x00, 0x8b,
6368 0x7f, 0x21, 0xb1, 0x00, 0x8b, 0x80, 0x1a, 0x47,
6369 0x00, 0x8b, 0x81, 0x49, 0x06, 0x00, 0x8b, 0x83,
6370 0x08, 0x8c, 0x00, 0x8b, 0x84, 0x58, 0x23, 0x00,
6371 0x8b, 0x85, 0x4d, 0x6e, 0x00, 0x8b, 0x8a, 0x13,
6372 0xd3, 0x00, 0x8b, 0x8b, 0x49, 0x07, 0x00, 0x8b,
6373 0x8c, 0x1a, 0x48, 0x00, 0x8b, 0x8d, 0x58, 0x24,
6374 0x00, 0x8b, 0x8e, 0x1a, 0x49, 0x00, 0x8b, 0x8f,
6375 0x58, 0x25, 0x00, 0x8b, 0x90, 0x09, 0x3c, 0x00,
6376 0x8b, 0x92, 0x1a, 0x4a, 0x00, 0x8b, 0x93, 0x1a,
6377 0x4b, 0x00, 0x8b, 0x94, 0x49, 0x08, 0x00, 0x8b,
6378 0x95, 0x49, 0x09, 0x00, 0x8b, 0x96, 0x1a, 0x4c,
6379 0x00, 0x8b, 0x99, 0x1a, 0x4d, 0x00, 0x8b, 0x9a,
6380 0x1a, 0x4e, 0x00, 0x8b, 0x9c, 0x3b, 0x2c, 0x00,
6381 0x8b, 0x9d, 0x42, 0xeb, 0x00, 0x8b, 0x9e, 0x3b,
6382 0x2d, 0x00, 0x8b, 0x9f, 0x4d, 0x6f, 0x00, 0x8c,
6383 0x37, 0x0b, 0x69, 0x00, 0x8c, 0x38, 0x58, 0x26,
6384 0x00, 0x8c, 0x39, 0x49, 0x0a, 0x00, 0x8c, 0x3a,
6385 0x1a, 0x4f, 0x00, 0x8c, 0x3d, 0x49, 0x0c, 0x00,
6386 0x8c, 0x3e, 0x58, 0x27, 0x00, 0x8c, 0x3f, 0x1a,
6387 0x51, 0x00, 0x8c, 0x41, 0x1a, 0x50, 0x00, 0x8c,
6388 0x45, 0x49, 0x0f, 0x00, 0x8c, 0x46, 0x0c, 0x7e,
6389 0x00, 0x8c, 0x47, 0x3b, 0x2e, 0x00, 0x8c, 0x48,
6390 0x1a, 0x52, 0x00, 0x8c, 0x49, 0x42, 0xec, 0x00,
6391 0x8c, 0x4a, 0x0e, 0x5b, 0x00, 0x8c, 0x4b, 0x4d,
6392 0x70, 0x00, 0x8c, 0x4c, 0x1a, 0x53, 0x00, 0x8c,
6393 0x4e, 0x1a, 0x54, 0x00, 0x8c, 0x4f, 0x49, 0x10,
6394 0x00, 0x8c, 0x50, 0x1a, 0x55, 0x00, 0x8c, 0x51,
6395 0x58, 0x28, 0x00, 0x8c, 0x53, 0x4d, 0x71, 0x00,
6396 0x8c, 0x54, 0x3b, 0x2f, 0x00, 0x8c, 0x55, 0x1a,
6397 0x56, 0x00, 0x8c, 0x57, 0x49, 0x11, 0x00, 0x8c,
6398 0x58, 0x58, 0x29, 0x00, 0x8c, 0x59, 0x58, 0x2c,
6399 0x00, 0x8c, 0x5a, 0x0c, 0xb2, 0x00, 0x8c, 0x5b,
6400 0x58, 0x2a, 0x00, 0x8c, 0x5d, 0x58, 0x2b, 0x00,
6401 0x8c, 0x61, 0x09, 0xc5, 0x00, 0x8c, 0x62, 0x1a,
6402 0x57, 0x00, 0x8c, 0x63, 0x58, 0x2d, 0x00, 0x8c,
6403 0x64, 0x58, 0x2e, 0x00, 0x8c, 0x66, 0x58, 0x2f,
6404 0x00, 0x8c, 0x68, 0x42, 0xed, 0x00, 0x8c, 0x69,
6405 0x49, 0x12, 0x00, 0x8c, 0x6a, 0x07, 0xfd, 0x00,
6406 0x8c, 0x6b, 0x10, 0x07, 0x00, 0x8c, 0x6c, 0x1a,
6407 0x58, 0x00, 0x8c, 0x6d, 0x49, 0x13, 0x00, 0x8c,
6408 0x73, 0x3b, 0x30, 0x00, 0x8c, 0x75, 0x58, 0x30,
6409 0x00, 0x8c, 0x76, 0x58, 0x31, 0x00, 0x8c, 0x78,
6410 0x1a, 0x59, 0x00, 0x8c, 0x79, 0x0d, 0xb1, 0x00,
6411 0x8c, 0x7a, 0x1a, 0x5a, 0x00, 0x8c, 0x7b, 0x4d,
6412 0x72, 0x00, 0x8c, 0x7c, 0x1a, 0x62, 0x00, 0x8c,
6413 0x7e, 0x58, 0x32, 0x00, 0x8c, 0x82, 0x1a, 0x5b,
6414 0x00, 0x8c, 0x85, 0x1a, 0x5d, 0x00, 0x8c, 0x86,
6415 0x58, 0x33, 0x00, 0x8c, 0x87, 0x58, 0x34, 0x00,
6416 0x8c, 0x89, 0x1a, 0x5c, 0x00, 0x8c, 0x8a, 0x1a,
6417 0x5e, 0x00, 0x8c, 0x8b, 0x58, 0x35, 0x00, 0x8c,
6418 0x8c, 0x0e, 0x74, 0x00, 0x8c, 0x8d, 0x1a, 0x5f,
6419 0x00, 0x8c, 0x8e, 0x1a, 0x60, 0x00, 0x8c, 0x90,
6420 0x58, 0x36, 0x00, 0x8c, 0x92, 0x49, 0x16, 0x00,
6421 0x8c, 0x93, 0x49, 0x15, 0x00, 0x8c, 0x94, 0x1a,
6422 0x61, 0x00, 0x8c, 0x98, 0x1a, 0x63, 0x00, 0x8c,
6423 0x99, 0x49, 0x17, 0x00, 0x8c, 0x9b, 0x49, 0x19,
6424 0x00, 0x8c, 0x9c, 0x58, 0x38, 0x00, 0x8c, 0x9d,
6425 0x05, 0x8b, 0x00, 0x8c, 0x9e, 0x0c, 0x03, 0x00,
6426 0x8c, 0x9f, 0x35, 0x4c, 0x00, 0x8c, 0xa0, 0x0d,
6427 0xdb, 0x00, 0x8c, 0xa1, 0x08, 0x52, 0x00, 0x8c,
6428 0xa2, 0x07, 0xe9, 0x00, 0x8c, 0xa4, 0x3b, 0x31,
6429 0x00, 0x8c, 0xa7, 0x0d, 0xc1, 0x00, 0x8c, 0xa8,
6430 0x05, 0x5f, 0x00, 0x8c, 0xa9, 0x0d, 0x62, 0x00,
6431 0x8c, 0xaa, 0x1a, 0x66, 0x00, 0x8c, 0xab, 0x06,
6432 0x0f, 0x00, 0x8c, 0xac, 0x0a, 0x79, 0x00, 0x8c,
6433 0xad, 0x1a, 0x65, 0x00, 0x8c, 0xae, 0x1a, 0x6a,
6434 0x00, 0x8c, 0xaf, 0x0b, 0xb7, 0x00, 0x8c, 0xb0,
6435 0x0e, 0xef, 0x00, 0x8c, 0xb2, 0x1a, 0x68, 0x00,
6436 0x8c, 0xb3, 0x1a, 0x69, 0x00, 0x8c, 0xb4, 0x06,
6437 0x48, 0x00, 0x8c, 0xb6, 0x1a, 0x6b, 0x00, 0x8c,
6438 0xb7, 0x0d, 0x19, 0x00, 0x8c, 0xb8, 0x0b, 0x3f,
6439 0x00, 0x8c, 0xb9, 0x58, 0x39, 0x00, 0x8c, 0xba,
6440 0x4d, 0x73, 0x00, 0x8c, 0xbb, 0x0d, 0x85, 0x00,
6441 0x8c, 0xbc, 0x0c, 0x37, 0x00, 0x8c, 0xbd, 0x1a,
6442 0x67, 0x00, 0x8c, 0xbf, 0x0e, 0x75, 0x00, 0x8c,
6443 0xc0, 0x05, 0x6c, 0x00, 0x8c, 0xc1, 0x1a, 0x6d,
6444 0x00, 0x8c, 0xc2, 0x0f, 0xce, 0x00, 0x8c, 0xc3,
6445 0x0b, 0xde, 0x00, 0x8c, 0xc4, 0x0f, 0xeb, 0x00,
6446 0x8c, 0xc5, 0x4d, 0x74, 0x00, 0x8c, 0xc6, 0x58,
6447 0x3a, 0x00, 0x8c, 0xc7, 0x08, 0xbf, 0x00, 0x8c,
6448 0xc8, 0x1a, 0x6c, 0x00, 0x8c, 0xc9, 0x4d, 0x75,
6449 0x00, 0x8c, 0xca, 0x0b, 0x11, 0x00, 0x8c, 0xcb,
6450 0x58, 0x3b, 0x00, 0x8c, 0xcd, 0x1a, 0x7d, 0x00,
6451 0x8c, 0xce, 0x0a, 0xaa, 0x00, 0x8c, 0xcf, 0x58,
6452 0x3c, 0x00, 0x8c, 0xd1, 0x0c, 0xd0, 0x00, 0x8c,
6453 0xd2, 0x4d, 0x76, 0x00, 0x8c, 0xd3, 0x34, 0x44,
6454 0x00, 0x8c, 0xd5, 0x49, 0x1b, 0x00, 0x8c, 0xd6,
6455 0x49, 0x1a, 0x00, 0x8c, 0xd9, 0x3b, 0x32, 0x00,
6456 0x8c, 0xda, 0x1a, 0x70, 0x00, 0x8c, 0xdb, 0x08,
6457 0x8d, 0x00, 0x8c, 0xdc, 0x08, 0xc0, 0x00, 0x8c,
6458 0xdd, 0x58, 0x3d, 0x00, 0x8c, 0xde, 0x09, 0xc6,
6459 0x00, 0x8c, 0xe0, 0x0d, 0x1b, 0x00, 0x8c, 0xe1,
6460 0x3b, 0x33, 0x00, 0x8c, 0xe2, 0x07, 0x61, 0x00,
6461 0x8c, 0xe3, 0x1a, 0x6f, 0x00, 0x8c, 0xe4, 0x1a,
6462 0x6e, 0x00, 0x8c, 0xe6, 0x0d, 0xdc, 0x00, 0x8c,
6463 0xe8, 0x58, 0x3e, 0x00, 0x8c, 0xea, 0x08, 0xed,
6464 0x00, 0x8c, 0xec, 0x4d, 0x77, 0x00, 0x8c, 0xed,
6465 0x0c, 0x4c, 0x00, 0x8c, 0xef, 0x58, 0x3f, 0x00,
6466 0x8c, 0xf0, 0x21, 0xb2, 0x00, 0x8c, 0xf1, 0x49,
6467 0x1d, 0x00, 0x8c, 0xf2, 0x58, 0x40, 0x00, 0x8c,
6468 0xf4, 0x21, 0xb3, 0x00, 0x8c, 0xf5, 0x4d, 0x78,
6469 0x00, 0x8c, 0xf7, 0x4d, 0x79, 0x00, 0x8c, 0xf8,
6470 0x3b, 0x34, 0x00, 0x8c, 0xfa, 0x1a, 0x72, 0x00,
6471 0x8c, 0xfb, 0x1a, 0x73, 0x00, 0x8c, 0xfc, 0x07,
6472 0xea, 0x00, 0x8c, 0xfd, 0x1a, 0x71, 0x00, 0x8c,
6473 0xfe, 0x3b, 0x35, 0x00, 0x8c, 0xff, 0x58, 0x41,
6474 0x00, 0x8d, 0x01, 0x4d, 0x7a, 0x00, 0x8d, 0x03,
6475 0x4d, 0x7b, 0x00, 0x8d, 0x04, 0x1a, 0x74, 0x00,
6476 0x8d, 0x05, 0x1a, 0x75, 0x00, 0x8d, 0x07, 0x1a,
6477 0x77, 0x00, 0x8d, 0x08, 0x0b, 0x03, 0x00, 0x8d,
6478 0x09, 0x49, 0x1f, 0x00, 0x8d, 0x0a, 0x1a, 0x76,
6479 0x00, 0x8d, 0x0b, 0x06, 0x22, 0x00, 0x8d, 0x0d,
6480 0x1a, 0x79, 0x00, 0x8d, 0x0e, 0x49, 0x20, 0x00,
6481 0x8d, 0x0f, 0x1a, 0x78, 0x00, 0x8d, 0x10, 0x1a,
6482 0x7a, 0x00, 0x8d, 0x12, 0x21, 0xb4, 0x00, 0x8d,
6483 0x13, 0x1a, 0x7c, 0x00, 0x8d, 0x14, 0x1a, 0x7e,
6484 0x00, 0x8d, 0x16, 0x1a, 0x7f, 0x00, 0x8d, 0x17,
6485 0x4d, 0x7c, 0x00, 0x8d, 0x1b, 0x3b, 0x36, 0x00,
6486 0x8d, 0x1c, 0x4d, 0x7d, 0x00, 0x8d, 0x64, 0x0a,
6487 0x7a, 0x00, 0x8d, 0x65, 0x58, 0x42, 0x00, 0x8d,
6488 0x66, 0x08, 0xfb, 0x00, 0x8d, 0x67, 0x1a, 0x80,
6489 0x00, 0x8d, 0x69, 0x3b, 0x37, 0x00, 0x8d, 0x6b,
6490 0x05, 0xb0, 0x00, 0x8d, 0x6c, 0x3b, 0x38, 0x00,
6491 0x8d, 0x6d, 0x1a, 0x81, 0x00, 0x8d, 0x6e, 0x4d,
6492 0x7e, 0x00, 0x8d, 0x70, 0x0a, 0xf8, 0x00, 0x8d,
6493 0x71, 0x1a, 0x82, 0x00, 0x8d, 0x73, 0x1a, 0x83,
6494 0x00, 0x8d, 0x74, 0x0d, 0xdd, 0x00, 0x8d, 0x76,
6495 0x21, 0xb5, 0x00, 0x8d, 0x77, 0x06, 0x49, 0x00,
6496 0x8d, 0x7f, 0x58, 0x43, 0x00, 0x8d, 0x81, 0x1a,
6497 0x84, 0x00, 0x8d, 0x82, 0x58, 0x44, 0x00, 0x8d,
6498 0x84, 0x3b, 0x39, 0x00, 0x8d, 0x85, 0x0b, 0xd2,
6499 0x00, 0x8d, 0x88, 0x58, 0x45, 0x00, 0x8d, 0x8a,
6500 0x04, 0xfd, 0x00, 0x8d, 0x8d, 0x3b, 0x3a, 0x00,
6501 0x8d, 0x90, 0x58, 0x46, 0x00, 0x8d, 0x91, 0x4d,
6502 0x7f, 0x00, 0x8d, 0x95, 0x3b, 0x3b, 0x00, 0x8d,
6503 0x99, 0x1a, 0x85, 0x00, 0x8d, 0x9e, 0x58, 0x47,
6504 0x00, 0x8d, 0x9f, 0x4d, 0x80, 0x00, 0x8d, 0xa0,
6505 0x58, 0x48, 0x00, 0x8d, 0xa3, 0x09, 0x1d, 0x00,
6506 0x8d, 0xa6, 0x3b, 0x3c, 0x00, 0x8d, 0xa8, 0x0a,
6507 0x3c, 0x00, 0x8d, 0xab, 0x4d, 0x81, 0x00, 0x8d,
6508 0xac, 0x58, 0x49, 0x00, 0x8d, 0xaf, 0x42, 0xee,
6509 0x00, 0x8d, 0xb2, 0x4d, 0x82, 0x00, 0x8d, 0xb3,
6510 0x0b, 0x0d, 0x00, 0x8d, 0xb5, 0x58, 0x4a, 0x00,
6511 0x8d, 0xb7, 0x58, 0x4b, 0x00, 0x8d, 0xb9, 0x58,
6512 0x4c, 0x00, 0x8d, 0xba, 0x1a, 0x88, 0x00, 0x8d,
6513 0xbb, 0x58, 0x4d, 0x00, 0x8d, 0xbc, 0x58, 0x55,
6514 0x00, 0x8d, 0xbe, 0x1a, 0x87, 0x00, 0x8d, 0xc0,
6515 0x58, 0x4e, 0x00, 0x8d, 0xc2, 0x1a, 0x86, 0x00,
6516 0x8d, 0xc5, 0x58, 0x4f, 0x00, 0x8d, 0xc6, 0x3b,
6517 0x3d, 0x00, 0x8d, 0xc7, 0x58, 0x50, 0x00, 0x8d,
6518 0xc8, 0x49, 0x21, 0x00, 0x8d, 0xca, 0x58, 0x51,
6519 0x00, 0x8d, 0xcb, 0x1a, 0x8e, 0x00, 0x8d, 0xcc,
6520 0x1a, 0x8c, 0x00, 0x8d, 0xce, 0x3b, 0x3e, 0x00,
6521 0x8d, 0xcf, 0x1a, 0x89, 0x00, 0x8d, 0xd1, 0x42,
6522 0xef, 0x00, 0x8d, 0xd4, 0x58, 0x52, 0x00, 0x8d,
6523 0xd5, 0x4d, 0x83, 0x00, 0x8d, 0xd6, 0x1a, 0x8b,
6524 0x00, 0x8d, 0xd7, 0x42, 0xf0, 0x00, 0x8d, 0xd9,
6525 0x49, 0x22, 0x00, 0x8d, 0xda, 0x1a, 0x8a, 0x00,
6526 0x8d, 0xdb, 0x1a, 0x8d, 0x00, 0x8d, 0xdd, 0x06,
6527 0x91, 0x00, 0x8d, 0xdf, 0x1a, 0x91, 0x00, 0x8d,
6528 0xe1, 0x0a, 0x7b, 0x00, 0x8d, 0xe3, 0x1a, 0x92,
6529 0x00, 0x8d, 0xe4, 0x3b, 0x3f, 0x00, 0x8d, 0xe5,
6530 0x58, 0x53, 0x00, 0x8d, 0xe7, 0x4d, 0x84, 0x00,
6531 0x8d, 0xe8, 0x07, 0x8d, 0x00, 0x8d, 0xea, 0x1a,
6532 0x8f, 0x00, 0x8d, 0xeb, 0x1a, 0x90, 0x00, 0x8d,
6533 0xec, 0x3b, 0x40, 0x00, 0x8d, 0xef, 0x0f, 0xcf,
6534 0x00, 0x8d, 0xf0, 0x58, 0x54, 0x00, 0x8d, 0xf1,
6535 0x4d, 0x85, 0x00, 0x8d, 0xf2, 0x4d, 0x86, 0x00,
6536 0x8d, 0xf3, 0x0b, 0xd3, 0x00, 0x8d, 0xf4, 0x4d,
6537 0x87, 0x00, 0x8d, 0xf5, 0x0a, 0xab, 0x00, 0x8d,
6538 0xfc, 0x1a, 0x93, 0x00, 0x8d, 0xfd, 0x49, 0x25,
6539 0x00, 0x8d, 0xff, 0x1a, 0x96, 0x00, 0x8e, 0x01,
6540 0x4d, 0x88, 0x00, 0x8e, 0x04, 0x58, 0x56, 0x00,
6541 0x8e, 0x05, 0x58, 0x57, 0x00, 0x8e, 0x06, 0x49,
6542 0x26, 0x00, 0x8e, 0x08, 0x1a, 0x94, 0x00, 0x8e,
6543 0x09, 0x1a, 0x95, 0x00, 0x8e, 0x0a, 0x0f, 0x43,
6544 0x00, 0x8e, 0x0b, 0x4d, 0x89, 0x00, 0x8e, 0x0c,
6545 0x49, 0x23, 0x00, 0x8e, 0x0f, 0x0c, 0x7f, 0x00,
6546 0x8e, 0x10, 0x1a, 0x99, 0x00, 0x8e, 0x11, 0x58,
6547 0x58, 0x00, 0x8e, 0x14, 0x49, 0x28, 0x00, 0x8e,
6548 0x16, 0x49, 0x29, 0x00, 0x8e, 0x1d, 0x1a, 0x97,
6549 0x00, 0x8e, 0x1e, 0x1a, 0x98, 0x00, 0x8e, 0x1f,
6550 0x1a, 0x9a, 0x00, 0x8e, 0x20, 0x3b, 0x41, 0x00,
6551 0x8e, 0x21, 0x49, 0x2a, 0x00, 0x8e, 0x22, 0x49,
6552 0x2b, 0x00, 0x8e, 0x23, 0x42, 0xf1, 0x00, 0x8e,
6553 0x26, 0x4d, 0x8a, 0x00, 0x8e, 0x27, 0x49, 0x2c,
6554 0x00, 0x8e, 0x2a, 0x1a, 0xa8, 0x00, 0x8e, 0x30,
6555 0x1a, 0x9d, 0x00, 0x8e, 0x31, 0x4d, 0x8b, 0x00,
6556 0x8e, 0x33, 0x58, 0x59, 0x00, 0x8e, 0x34, 0x1a,
6557 0x9e, 0x00, 0x8e, 0x35, 0x1a, 0x9c, 0x00, 0x8e,
6558 0x36, 0x49, 0x2f, 0x00, 0x8e, 0x37, 0x58, 0x5a,
6559 0x00, 0x8e, 0x38, 0x58, 0x5b, 0x00, 0x8e, 0x39,
6560 0x49, 0x30, 0x00, 0x8e, 0x3d, 0x42, 0xf2, 0x00,
6561 0x8e, 0x40, 0x4d, 0x8c, 0x00, 0x8e, 0x41, 0x4d,
6562 0x8d, 0x00, 0x8e, 0x42, 0x1a, 0x9b, 0x00, 0x8e,
6563 0x44, 0x0c, 0x19, 0x00, 0x8e, 0x47, 0x1a, 0xa0,
6564 0x00, 0x8e, 0x48, 0x1a, 0xa4, 0x00, 0x8e, 0x49,
6565 0x1a, 0xa1, 0x00, 0x8e, 0x4a, 0x1a, 0x9f, 0x00,
6566 0x8e, 0x4b, 0x3b, 0x42, 0x00, 0x8e, 0x4c, 0x1a,
6567 0xa2, 0x00, 0x8e, 0x4d, 0x4d, 0x8e, 0x00, 0x8e,
6568 0x4e, 0x58, 0x5c, 0x00, 0x8e, 0x4f, 0x4d, 0x8f,
6569 0x00, 0x8e, 0x50, 0x1a, 0xa3, 0x00, 0x8e, 0x54,
6570 0x49, 0x31, 0x00, 0x8e, 0x55, 0x1a, 0xaa, 0x00,
6571 0x8e, 0x59, 0x1a, 0xa5, 0x00, 0x8e, 0x5b, 0x58,
6572 0x5d, 0x00, 0x8e, 0x5c, 0x4d, 0x90, 0x00, 0x8e,
6573 0x5d, 0x58, 0x5e, 0x00, 0x8e, 0x5e, 0x58, 0x5f,
6574 0x00, 0x8e, 0x5f, 0x0a, 0x7c, 0x00, 0x8e, 0x60,
6575 0x1a, 0xa7, 0x00, 0x8e, 0x61, 0x4d, 0x91, 0x00,
6576 0x8e, 0x62, 0x49, 0x32, 0x00, 0x8e, 0x63, 0x1a,
6577 0xa9, 0x00, 0x8e, 0x64, 0x1a, 0xa6, 0x00, 0x8e,
6578 0x69, 0x4d, 0x92, 0x00, 0x8e, 0x6c, 0x3b, 0x43,
6579 0x00, 0x8e, 0x6d, 0x49, 0x33, 0x00, 0x8e, 0x6f,
6580 0x49, 0x34, 0x00, 0x8e, 0x70, 0x3b, 0x44, 0x00,
6581 0x8e, 0x71, 0x4d, 0x93, 0x00, 0x8e, 0x72, 0x1a,
6582 0xac, 0x00, 0x8e, 0x74, 0x09, 0x3d, 0x00, 0x8e,
6583 0x75, 0x4d, 0x94, 0x00, 0x8e, 0x76, 0x1a, 0xab,
6584 0x00, 0x8e, 0x77, 0x4d, 0x95, 0x00, 0x8e, 0x79,
6585 0x58, 0x60, 0x00, 0x8e, 0x7a, 0x3b, 0x45, 0x00,
6586 0x8e, 0x7b, 0x42, 0xf3, 0x00, 0x8e, 0x7c, 0x1a,
6587 0xad, 0x00, 0x8e, 0x81, 0x1a, 0xae, 0x00, 0x8e,
6588 0x82, 0x58, 0x61, 0x00, 0x8e, 0x83, 0x58, 0x62,
6589 0x00, 0x8e, 0x84, 0x1a, 0xb1, 0x00, 0x8e, 0x85,
6590 0x1a, 0xb0, 0x00, 0x8e, 0x87, 0x1a, 0xaf, 0x00,
6591 0x8e, 0x89, 0x4d, 0x96, 0x00, 0x8e, 0x8a, 0x1a,
6592 0xb3, 0x00, 0x8e, 0x8b, 0x1a, 0xb2, 0x00, 0x8e,
6593 0x8d, 0x0f, 0x02, 0x00, 0x8e, 0x90, 0x4d, 0x97,
6594 0x00, 0x8e, 0x91, 0x1a, 0xb5, 0x00, 0x8e, 0x92,
6595 0x3b, 0x46, 0x00, 0x8e, 0x93, 0x1a, 0xb4, 0x00,
6596 0x8e, 0x94, 0x1a, 0xb6, 0x00, 0x8e, 0x95, 0x4d,
6597 0x98, 0x00, 0x8e, 0x98, 0x49, 0x35, 0x00, 0x8e,
6598 0x99, 0x1a, 0xb7, 0x00, 0x8e, 0x9a, 0x4d, 0x99,
6599 0x00, 0x8e, 0x9b, 0x58, 0x63, 0x00, 0x8e, 0x9d,
6600 0x58, 0x64, 0x00, 0x8e, 0x9e, 0x49, 0x36, 0x00,
6601 0x8e, 0xa1, 0x1a, 0xb9, 0x00, 0x8e, 0xa2, 0x58,
6602 0x65, 0x00, 0x8e, 0xa7, 0x4d, 0x9a, 0x00, 0x8e,
6603 0xa9, 0x4d, 0x9b, 0x00, 0x8e, 0xaa, 0x1a, 0xb8,
6604 0x00, 0x8e, 0xab, 0x0a, 0x0e, 0x00, 0x8e, 0xac,
6605 0x1a, 0xba, 0x00, 0x8e, 0xad, 0x4d, 0x9c, 0x00,
6606 0x8e, 0xae, 0x3b, 0x47, 0x00, 0x8e, 0xaf, 0x06,
6607 0xe5, 0x00, 0x8e, 0xb0, 0x1a, 0xbb, 0x00, 0x8e,
6608 0xb1, 0x1a, 0xbd, 0x00, 0x8e, 0xb3, 0x3b, 0x48,
6609 0x00, 0x8e, 0xb5, 0x49, 0x37, 0x00, 0x8e, 0xb6,
6610 0x37, 0x03, 0x00, 0x8e, 0xba, 0x58, 0x66, 0x00,
6611 0x8e, 0xbb, 0x49, 0x38, 0x00, 0x8e, 0xbe, 0x1a,
6612 0xbe, 0x00, 0x8e, 0xc0, 0x1d, 0xef, 0x00, 0x8e,
6613 0xc1, 0x58, 0x67, 0x00, 0x8e, 0xc3, 0x58, 0x68,
6614 0x00, 0x8e, 0xc4, 0x58, 0x69, 0x00, 0x8e, 0xc5,
6615 0x1a, 0xbf, 0x00, 0x8e, 0xc6, 0x1a, 0xbc, 0x00,
6616 0x8e, 0xc7, 0x58, 0x6a, 0x00, 0x8e, 0xc8, 0x1a,
6617 0xc0, 0x00, 0x8e, 0xca, 0x09, 0x02, 0x00, 0x8e,
6618 0xcb, 0x1a, 0xc1, 0x00, 0x8e, 0xcc, 0x06, 0x4a,
6619 0x00, 0x8e, 0xcd, 0x07, 0x09, 0x00, 0x8e, 0xcf,
6620 0x21, 0xb7, 0x00, 0x8e, 0xd1, 0x3b, 0x49, 0x00,
6621 0x8e, 0xd2, 0x07, 0x62, 0x00, 0x8e, 0xd4, 0x4e,
6622 0x62, 0x00, 0x8e, 0xdb, 0x1a, 0xc2, 0x00, 0x8e,
6623 0xdc, 0x58, 0x6b, 0x00, 0x8e, 0xdf, 0x0c, 0xc8,
6624 0x00, 0x8e, 0xe2, 0x0c, 0x38, 0x00, 0x8e, 0xe3,
6625 0x1a, 0xc3, 0x00, 0x8e, 0xe8, 0x4d, 0x9d, 0x00,
6626 0x8e, 0xeb, 0x1a, 0xc6, 0x00, 0x8e, 0xed, 0x58,
6627 0x6f, 0x00, 0x8e, 0xee, 0x58, 0x6c, 0x00, 0x8e,
6628 0xf0, 0x4d, 0x9e, 0x00, 0x8e, 0xf1, 0x58, 0x6d,
6629 0x00, 0x8e, 0xf7, 0x58, 0x6e, 0x00, 0x8e, 0xf8,
6630 0x08, 0xe0, 0x00, 0x8e, 0xf9, 0x3b, 0x4b, 0x00,
6631 0x8e, 0xfa, 0x42, 0xf6, 0x00, 0x8e, 0xfb, 0x1a,
6632 0xc5, 0x00, 0x8e, 0xfc, 0x1a, 0xc4, 0x00, 0x8e,
6633 0xfd, 0x07, 0x30, 0x00, 0x8e, 0xfe, 0x1a, 0xc7,
6634 0x00, 0x8f, 0x00, 0x49, 0x3c, 0x00, 0x8f, 0x02,
6635 0x58, 0x70, 0x00, 0x8f, 0x03, 0x05, 0xb1, 0x00,
6636 0x8f, 0x05, 0x1a, 0xc9, 0x00, 0x8f, 0x07, 0x4d,
6637 0x9f, 0x00, 0x8f, 0x08, 0x49, 0x3d, 0x00, 0x8f,
6638 0x09, 0x08, 0x4c, 0x00, 0x8f, 0x0a, 0x1a, 0xc8,
6639 0x00, 0x8f, 0x0c, 0x1a, 0xd1, 0x00, 0x8f, 0x0f,
6640 0x58, 0x71, 0x00, 0x8f, 0x10, 0x58, 0x72, 0x00,
6641 0x8f, 0x12, 0x1a, 0xcb, 0x00, 0x8f, 0x13, 0x1a,
6642 0xcd, 0x00, 0x8f, 0x14, 0x0e, 0x35, 0x00, 0x8f,
6643 0x15, 0x1a, 0xca, 0x00, 0x8f, 0x16, 0x58, 0x73,
6644 0x00, 0x8f, 0x17, 0x3b, 0x4c, 0x00, 0x8f, 0x18,
6645 0x4d, 0xa0, 0x00, 0x8f, 0x19, 0x1a, 0xcc, 0x00,
6646 0x8f, 0x1b, 0x1a, 0xd0, 0x00, 0x8f, 0x1c, 0x1a,
6647 0xce, 0x00, 0x8f, 0x1d, 0x06, 0x4b, 0x00, 0x8f,
6648 0x1e, 0x42, 0xf7, 0x00, 0x8f, 0x1f, 0x1a, 0xcf,
6649 0x00, 0x8f, 0x20, 0x58, 0x74, 0x00, 0x8f, 0x21,
6650 0x58, 0x75, 0x00, 0x8f, 0x23, 0x58, 0x76, 0x00,
6651 0x8f, 0x25, 0x4d, 0xa1, 0x00, 0x8f, 0x26, 0x1a,
6652 0xd2, 0x00, 0x8f, 0x27, 0x4d, 0xa2, 0x00, 0x8f,
6653 0x28, 0x58, 0x77, 0x00, 0x8f, 0x29, 0x0d, 0x10,
6654 0x00, 0x8f, 0x2a, 0x0f, 0xa0, 0x00, 0x8f, 0x2b,
6655 0x49, 0x3e, 0x00, 0x8f, 0x2c, 0x4d, 0xa3, 0x00,
6656 0x8f, 0x2d, 0x42, 0xf8, 0x00, 0x8f, 0x2e, 0x58,
6657 0x78, 0x00, 0x8f, 0x2f, 0x09, 0x3e, 0x00, 0x8f,
6658 0x33, 0x1a, 0xd3, 0x00, 0x8f, 0x34, 0x58, 0x79,
6659 0x00, 0x8f, 0x35, 0x4d, 0xa4, 0x00, 0x8f, 0x36,
6660 0x3b, 0x4d, 0x00, 0x8f, 0x37, 0x58, 0x7a, 0x00,
6661 0x8f, 0x38, 0x0f, 0x0c, 0x00, 0x8f, 0x39, 0x1a,
6662 0xd5, 0x00, 0x8f, 0x3a, 0x4d, 0xa5, 0x00, 0x8f,
6663 0x3b, 0x1a, 0xd4, 0x00, 0x8f, 0x3e, 0x1a, 0xd8,
6664 0x00, 0x8f, 0x3f, 0x0f, 0x2b, 0x00, 0x8f, 0x40,
6665 0x49, 0x3f, 0x00, 0x8f, 0x41, 0x58, 0x7b, 0x00,
6666 0x8f, 0x42, 0x1a, 0xd7, 0x00, 0x8f, 0x43, 0x4d,
6667 0xa6, 0x00, 0x8f, 0x44, 0x05, 0xcb, 0x00, 0x8f,
6668 0x45, 0x1a, 0xd6, 0x00, 0x8f, 0x46, 0x1a, 0xdb,
6669 0x00, 0x8f, 0x47, 0x4d, 0xa7, 0x00, 0x8f, 0x49,
6670 0x1a, 0xda, 0x00, 0x8f, 0x4a, 0x49, 0x40, 0x00,
6671 0x8f, 0x4c, 0x1a, 0xd9, 0x00, 0x8f, 0x4d, 0x0c,
6672 0x2c, 0x00, 0x8f, 0x4e, 0x1a, 0xdc, 0x00, 0x8f,
6673 0x4f, 0x58, 0x7c, 0x00, 0x8f, 0x51, 0x4d, 0xa8,
6674 0x00, 0x8f, 0x52, 0x58, 0x7d, 0x00, 0x8f, 0x53,
6675 0x58, 0x7e, 0x00, 0x8f, 0x54, 0x42, 0xf9, 0x00,
6676 0x8f, 0x55, 0x4d, 0xa9, 0x00, 0x8f, 0x57, 0x1a,
6677 0xdd, 0x00, 0x8f, 0x58, 0x49, 0x41, 0x00, 0x8f,
6678 0x5c, 0x1a, 0xde, 0x00, 0x8f, 0x5d, 0x58, 0x7f,
6679 0x00, 0x8f, 0x5e, 0x58, 0x80, 0x00, 0x8f, 0x5f,
6680 0x07, 0xfe, 0x00, 0x8f, 0x61, 0x06, 0xfb, 0x00,
6681 0x8f, 0x62, 0x1a, 0xdf, 0x00, 0x8f, 0x63, 0x1a,
6682 0xe0, 0x00, 0x8f, 0x64, 0x1a, 0xe1, 0x00, 0x8f,
6683 0x65, 0x58, 0x81, 0x00, 0x8f, 0x9b, 0x0a, 0x0f,
6684 0x00, 0x8f, 0x9c, 0x1a, 0xe2, 0x00, 0x8f, 0x9d,
6685 0x58, 0x82, 0x00, 0x8f, 0x9e, 0x08, 0xd9, 0x00,
6686 0x8f, 0x9f, 0x1a, 0xe3, 0x00, 0x8f, 0xa0, 0x4d,
6687 0xaa, 0x00, 0x8f, 0xa1, 0x4d, 0xab, 0x00, 0x8f,
6688 0xa2, 0x4d, 0xac, 0x00, 0x8f, 0xa3, 0x1a, 0xe4,
6689 0x00, 0x8f, 0xa4, 0x49, 0x43, 0x00, 0x8f, 0xa5,
6690 0x4d, 0xad, 0x00, 0x8f, 0xa6, 0x3b, 0x4e, 0x00,
6691 0x8f, 0xa7, 0x10, 0xb6, 0x00, 0x8f, 0xa8, 0x10,
6692 0xb5, 0x00, 0x8f, 0xad, 0x1a, 0xe5, 0x00, 0x8f,
6693 0xae, 0x17, 0xff, 0x00, 0x8f, 0xaf, 0x1a, 0xe6,
6694 0x00, 0x8f, 0xb0, 0x0b, 0x62, 0x00, 0x8f, 0xb1,
6695 0x09, 0xf1, 0x00, 0x8f, 0xb2, 0x0c, 0xf6, 0x00,
6696 0x8f, 0xb4, 0x49, 0x44, 0x00, 0x8f, 0xb5, 0x3b,
6697 0x4f, 0x00, 0x8f, 0xb6, 0x3b, 0x50, 0x00, 0x8f,
6698 0xb7, 0x1a, 0xe7, 0x00, 0x8f, 0xb8, 0x58, 0x83,
6699 0x00, 0x8f, 0xba, 0x0e, 0x25, 0x00, 0x8f, 0xbb,
6700 0x0b, 0xf0, 0x00, 0x8f, 0xbc, 0x08, 0x10, 0x00,
6701 0x8f, 0xbe, 0x58, 0x84, 0x00, 0x8f, 0xbf, 0x0b,
6702 0x67, 0x00, 0x8f, 0xc0, 0x58, 0x85, 0x00, 0x8f,
6703 0xc1, 0x49, 0x46, 0x00, 0x8f, 0xc2, 0x04, 0xcc,
6704 0x00, 0x8f, 0xc4, 0x0e, 0xa6, 0x00, 0x8f, 0xc5,
6705 0x0a, 0x1d, 0x00, 0x8f, 0xc6, 0x49, 0x47, 0x00,
6706 0x8f, 0xc8, 0x37, 0x99, 0x00, 0x8f, 0xca, 0x49,
6707 0x49, 0x00, 0x8f, 0xcb, 0x58, 0x86, 0x00, 0x8f,
6708 0xcd, 0x49, 0x4a, 0x00, 0x8f, 0xce, 0x07, 0x34,
6709 0x00, 0x8f, 0xd0, 0x58, 0x87, 0x00, 0x8f, 0xd1,
6710 0x06, 0xd9, 0x00, 0x8f, 0xd2, 0x58, 0x88, 0x00,
6711 0x8f, 0xd3, 0x49, 0x4b, 0x00, 0x8f, 0xd4, 0x0e,
6712 0x26, 0x00, 0x8f, 0xd5, 0x49, 0x4c, 0x00, 0x8f,
6713 0xda, 0x1a, 0xe8, 0x00, 0x8f, 0xe0, 0x3b, 0x52,
6714 0x00, 0x8f, 0xe2, 0x1a, 0xea, 0x00, 0x8f, 0xe3,
6715 0x58, 0x89, 0x00, 0x8f, 0xe4, 0x3b, 0x53, 0x00,
6716 0x8f, 0xe5, 0x1a, 0xe9, 0x00, 0x8f, 0xe6, 0x05,
6717 0x60, 0x00, 0x8f, 0xe8, 0x42, 0xfb, 0x00, 0x8f,
6718 0xe9, 0x0c, 0xce, 0x00, 0x8f, 0xea, 0x1a, 0xeb,
6719 0x00, 0x8f, 0xeb, 0x0d, 0x2d, 0x00, 0x8f, 0xed,
6720 0x0c, 0x2d, 0x00, 0x8f, 0xee, 0x42, 0xfc, 0x00,
6721 0x8f, 0xef, 0x1a, 0xec, 0x00, 0x8f, 0xf0, 0x09,
6722 0x5c, 0x00, 0x8f, 0xf1, 0x49, 0x4d, 0x00, 0x8f,
6723 0xf4, 0x1a, 0xee, 0x00, 0x8f, 0xf5, 0x49, 0x4e,
6724 0x00, 0x8f, 0xf6, 0x3b, 0x54, 0x00, 0x8f, 0xf7,
6725 0x0e, 0xce, 0x00, 0x8f, 0xf8, 0x1a, 0xfd, 0x00,
6726 0x8f, 0xf9, 0x1a, 0xf0, 0x00, 0x8f, 0xfa, 0x1a,
6727 0xf1, 0x00, 0x8f, 0xfb, 0x49, 0x4f, 0x00, 0x8f,
6728 0xfd, 0x0b, 0xe5, 0x00, 0x8f, 0xfe, 0x58, 0x8a,
6729 0x00, 0x90, 0x00, 0x0b, 0x40, 0x00, 0x90, 0x01,
6730 0x0a, 0xf9, 0x00, 0x90, 0x02, 0x3b, 0x55, 0x00,
6731 0x90, 0x03, 0x0c, 0x80, 0x00, 0x90, 0x04, 0x4d,
6732 0xae, 0x00, 0x90, 0x05, 0x1a, 0xef, 0x00, 0x90,
6733 0x06, 0x06, 0x6f, 0x00, 0x90, 0x08, 0x42, 0xfd,
6734 0x00, 0x90, 0x0b, 0x1a, 0xf8, 0x00, 0x90, 0x0c,
6735 0x49, 0x50, 0x00, 0x90, 0x0d, 0x1a, 0xf5, 0x00,
6736 0x90, 0x0e, 0x1b, 0x02, 0x00, 0x90, 0x0f, 0x0c,
6737 0x81, 0x00, 0x90, 0x10, 0x0b, 0x9e, 0x00, 0x90,
6738 0x11, 0x1a, 0xf2, 0x00, 0x90, 0x13, 0x0c, 0x1a,
6739 0x00, 0x90, 0x14, 0x0c, 0x4d, 0x00, 0x90, 0x15,
6740 0x1a, 0xf3, 0x00, 0x90, 0x16, 0x1a, 0xf7, 0x00,
6741 0x90, 0x17, 0x0a, 0x26, 0x00, 0x90, 0x18, 0x58,
6742 0x8b, 0x00, 0x90, 0x19, 0x0d, 0x1d, 0x00, 0x90,
6743 0x1a, 0x0b, 0xe8, 0x00, 0x90, 0x1b, 0x4d, 0xaf,
6744 0x00, 0x90, 0x1d, 0x0a, 0x66, 0x00, 0x90, 0x1e,
6745 0x1a, 0xf6, 0x00, 0x90, 0x1f, 0x0b, 0x0e, 0x00,
6746 0x90, 0x20, 0x0b, 0x04, 0x00, 0x90, 0x21, 0x1a,
6747 0xf4, 0x00, 0x90, 0x22, 0x04, 0x6d, 0x00, 0x90,
6748 0x23, 0x37, 0x11, 0x00, 0x90, 0x27, 0x1a, 0xf9,
6749 0x00, 0x90, 0x28, 0x58, 0x8c, 0x00, 0x90, 0x29,
6750 0x58, 0x8d, 0x00, 0x90, 0x2a, 0x58, 0x8e, 0x00,
6751 0x90, 0x2c, 0x3b, 0x56, 0x00, 0x90, 0x2d, 0x42,
6752 0xfe, 0x00, 0x90, 0x2e, 0x0b, 0x41, 0x00, 0x90,
6753 0x2f, 0x4d, 0xb0, 0x00, 0x90, 0x31, 0x09, 0x3f,
6754 0x00, 0x90, 0x32, 0x0a, 0x10, 0x00, 0x90, 0x33,
6755 0x58, 0x8f, 0x00, 0x90, 0x34, 0x58, 0x90, 0x00,
6756 0x90, 0x35, 0x1a, 0xfb, 0x00, 0x90, 0x36, 0x1a,
6757 0xfa, 0x00, 0x90, 0x37, 0x49, 0x51, 0x00, 0x90,
6758 0x38, 0x04, 0xb3, 0x00, 0x90, 0x39, 0x1a, 0xfc,
6759 0x00, 0x90, 0x3c, 0x0d, 0xa1, 0x00, 0x90, 0x3e,
6760 0x1b, 0x04, 0x00, 0x90, 0x3f, 0x58, 0x91, 0x00,
6761 0x90, 0x41, 0x0c, 0xb3, 0x00, 0x90, 0x42, 0x0a,
6762 0x31, 0x00, 0x90, 0x43, 0x49, 0x53, 0x00, 0x90,
6763 0x44, 0x3b, 0x57, 0x00, 0x90, 0x45, 0x0b, 0x97,
6764 0x00, 0x90, 0x47, 0x06, 0xf0, 0x00, 0x90, 0x49,
6765 0x1b, 0x03, 0x00, 0x90, 0x4a, 0x0f, 0x21, 0x00,
6766 0x90, 0x4b, 0x04, 0xe1, 0x00, 0x90, 0x4c, 0x4d,
6767 0xb1, 0x00, 0x90, 0x4d, 0x0e, 0x27, 0x00, 0x90,
6768 0x4e, 0x05, 0x61, 0x00, 0x90, 0x4f, 0x1a, 0xfe,
6769 0x00, 0x90, 0x50, 0x1a, 0xff, 0x00, 0x90, 0x51,
6770 0x1b, 0x00, 0x00, 0x90, 0x52, 0x1b, 0x01, 0x00,
6771 0x90, 0x53, 0x0c, 0x93, 0x00, 0x90, 0x54, 0x0b,
6772 0x61, 0x00, 0x90, 0x55, 0x04, 0xa7, 0x00, 0x90,
6773 0x56, 0x1b, 0x05, 0x00, 0x90, 0x58, 0x1b, 0x06,
6774 0x00, 0x90, 0x59, 0x1d, 0x34, 0x00, 0x90, 0x5b,
6775 0x4d, 0xb2, 0x00, 0x90, 0x5c, 0x0b, 0x1d, 0x00,
6776 0x90, 0x5d, 0x49, 0x54, 0x00, 0x90, 0x5e, 0x1b,
6777 0x07, 0x00, 0x90, 0x60, 0x05, 0x15, 0x00, 0x90,
6778 0x61, 0x0a, 0xce, 0x00, 0x90, 0x62, 0x58, 0x92,
6779 0x00, 0x90, 0x63, 0x07, 0x63, 0x00, 0x90, 0x65,
6780 0x0f, 0x44, 0x00, 0x90, 0x66, 0x58, 0x93, 0x00,
6781 0x90, 0x67, 0x21, 0xba, 0x00, 0x90, 0x68, 0x1b,
6782 0x08, 0x00, 0x90, 0x69, 0x0c, 0x26, 0x00, 0x90,
6783 0x6c, 0x58, 0x94, 0x00, 0x90, 0x6d, 0x0a, 0xfa,
6784 0x00, 0x90, 0x6e, 0x09, 0x03, 0x00, 0x90, 0x6f,
6785 0x1b, 0x09, 0x00, 0x90, 0x70, 0x4d, 0xb3, 0x00,
6786 0x90, 0x72, 0x1b, 0x0c, 0x00, 0x90, 0x74, 0x4d,
6787 0xb4, 0x00, 0x90, 0x75, 0x09, 0x6f, 0x00, 0x90,
6788 0x76, 0x1b, 0x0a, 0x00, 0x90, 0x77, 0x0a, 0xad,
6789 0x00, 0x90, 0x78, 0x0a, 0xac, 0x00, 0x90, 0x79,
6790 0x4d, 0xb5, 0x00, 0x90, 0x7a, 0x04, 0xa8, 0x00,
6791 0x90, 0x7c, 0x0f, 0x93, 0x00, 0x90, 0x7d, 0x1b,
6792 0x0e, 0x00, 0x90, 0x7f, 0x0d, 0x86, 0x00, 0x90,
6793 0x80, 0x1b, 0x10, 0x00, 0x90, 0x81, 0x1b, 0x0f,
6794 0x00, 0x90, 0x82, 0x1b, 0x0d, 0x00, 0x90, 0x83,
6795 0x17, 0x37, 0x00, 0x90, 0x84, 0x06, 0x10, 0x00,
6796 0x90, 0x85, 0x49, 0x57, 0x00, 0x90, 0x87, 0x1a,
6797 0xed, 0x00, 0x90, 0x88, 0x3b, 0x58, 0x00, 0x90,
6798 0x89, 0x1b, 0x12, 0x00, 0x90, 0x8a, 0x1b, 0x11,
6799 0x00, 0x90, 0x8b, 0x4d, 0xb6, 0x00, 0x90, 0x8c,
6800 0x49, 0x58, 0x00, 0x90, 0x8e, 0x58, 0x95, 0x00,
6801 0x90, 0x8f, 0x1b, 0x13, 0x00, 0x90, 0x90, 0x49,
6802 0x59, 0x00, 0x90, 0x91, 0x0f, 0x22, 0x00, 0x90,
6803 0x95, 0x3b, 0x59, 0x00, 0x90, 0x97, 0x42, 0xff,
6804 0x00, 0x90, 0x98, 0x4d, 0xb7, 0x00, 0x90, 0x99,
6805 0x3b, 0x5a, 0x00, 0x90, 0x9b, 0x3b, 0x5b, 0x00,
6806 0x90, 0xa0, 0x4d, 0xb8, 0x00, 0x90, 0xa1, 0x49,
6807 0x5a, 0x00, 0x90, 0xa2, 0x3b, 0x5c, 0x00, 0x90,
6808 0xa3, 0x0c, 0xb9, 0x00, 0x90, 0xa5, 0x58, 0x96,
6809 0x00, 0x90, 0xa6, 0x0e, 0x5c, 0x00, 0x90, 0xa8,
6810 0x1b, 0x14, 0x00, 0x90, 0xaa, 0x09, 0x05, 0x00,
6811 0x90, 0xaf, 0x1b, 0x15, 0x00, 0x90, 0xb0, 0x49,
6812 0x5c, 0x00, 0x90, 0xb1, 0x1b, 0x16, 0x00, 0x90,
6813 0xb2, 0x4d, 0xb9, 0x00, 0x90, 0xb3, 0x43, 0x00,
6814 0x00, 0x90, 0xb4, 0x3b, 0x5d, 0x00, 0x90, 0xb5,
6815 0x1b, 0x17, 0x00, 0x90, 0xb6, 0x49, 0x5d, 0x00,
6816 0x90, 0xb8, 0x0c, 0x1b, 0x00, 0x90, 0xbd, 0x4d,
6817 0xba, 0x00, 0x90, 0xbe, 0x43, 0x01, 0x00, 0x90,
6818 0xc1, 0x04, 0xae, 0x00, 0x90, 0xc3, 0x49, 0x5e,
6819 0x00, 0x90, 0xc4, 0x43, 0x02, 0x00, 0x90, 0xc5,
6820 0x43, 0x03, 0x00, 0x90, 0xc7, 0x43, 0x04, 0x00,
6821 0x90, 0xc8, 0x49, 0x5f, 0x00, 0x90, 0xc9, 0x4d,
6822 0xbb, 0x00, 0x90, 0xca, 0x07, 0xeb, 0x00, 0x90,
6823 0xcc, 0x58, 0x97, 0x00, 0x90, 0xce, 0x0f, 0xe0,
6824 0x00, 0x90, 0xd2, 0x58, 0x9c, 0x00, 0x90, 0xd5,
6825 0x58, 0x98, 0x00, 0x90, 0xd7, 0x3b, 0x5e, 0x00,
6826 0x90, 0xd8, 0x58, 0x99, 0x00, 0x90, 0xd9, 0x58,
6827 0x9a, 0x00, 0x90, 0xdb, 0x1b, 0x1b, 0x00, 0x90,
6828 0xdc, 0x49, 0x61, 0x00, 0x90, 0xdd, 0x3b, 0x5f,
6829 0x00, 0x90, 0xde, 0x21, 0xbb, 0x00, 0x90, 0xdf,
6830 0x49, 0x62, 0x00, 0x90, 0xe1, 0x07, 0x0a, 0x00,
6831 0x90, 0xe2, 0x1b, 0x18, 0x00, 0x90, 0xe4, 0x1b,
6832 0x19, 0x00, 0x90, 0xe5, 0x58, 0x9b, 0x00, 0x90,
6833 0xe8, 0x0d, 0xe6, 0x00, 0x90, 0xeb, 0x49, 0x67,
6834 0x00, 0x90, 0xed, 0x05, 0xb2, 0x00, 0x90, 0xef,
6835 0x43, 0x05, 0x00, 0x90, 0xf0, 0x4d, 0xbc, 0x00,
6836 0x90, 0xf2, 0x49, 0x65, 0x00, 0x90, 0xf4, 0x3b,
6837 0x60, 0x00, 0x90, 0xf5, 0x0f, 0x23, 0x00, 0x90,
6838 0xf6, 0x49, 0x64, 0x00, 0x90, 0xf7, 0x06, 0xb7,
6839 0x00, 0x90, 0xfd, 0x21, 0xbc, 0x00, 0x90, 0xfe,
6840 0x49, 0x68, 0x00, 0x90, 0xff, 0x49, 0x69, 0x00,
6841 0x91, 0x00, 0x49, 0x66, 0x00, 0x91, 0x02, 0x1b,
6842 0x1c, 0x00, 0x91, 0x04, 0x49, 0x6a, 0x00, 0x91,
6843 0x05, 0x4d, 0xbd, 0x00, 0x91, 0x06, 0x49, 0x6b,
6844 0x00, 0x91, 0x08, 0x58, 0x9d, 0x00, 0x91, 0x0d,
6845 0x58, 0x9e, 0x00, 0x91, 0x10, 0x58, 0x9f, 0x00,
6846 0x91, 0x12, 0x1b, 0x1d, 0x00, 0x91, 0x14, 0x43,
6847 0x06, 0x00, 0x91, 0x15, 0x21, 0xbd, 0x00, 0x91,
6848 0x16, 0x43, 0x07, 0x00, 0x91, 0x17, 0x3b, 0x61,
6849 0x00, 0x91, 0x18, 0x49, 0x6c, 0x00, 0x91, 0x19,
6850 0x1b, 0x1e, 0x00, 0x91, 0x1a, 0x58, 0xa0, 0x00,
6851 0x91, 0x1c, 0x3b, 0x62, 0x00, 0x91, 0x1e, 0x49,
6852 0x6d, 0x00, 0x91, 0x20, 0x58, 0xa1, 0x00, 0x91,
6853 0x22, 0x43, 0x08, 0x00, 0x91, 0x23, 0x43, 0x09,
6854 0x00, 0x91, 0x25, 0x4d, 0xbe, 0x00, 0x91, 0x27,
6855 0x21, 0xbe, 0x00, 0x91, 0x29, 0x58, 0xa2, 0x00,
6856 0x91, 0x2d, 0x0c, 0x1c, 0x00, 0x91, 0x2e, 0x58,
6857 0xa3, 0x00, 0x91, 0x2f, 0x43, 0x0a, 0x00, 0x91,
6858 0x30, 0x1b, 0x20, 0x00, 0x91, 0x31, 0x3b, 0x63,
6859 0x00, 0x91, 0x32, 0x1b, 0x1f, 0x00, 0x91, 0x34,
6860 0x43, 0x0b, 0x00, 0x91, 0x36, 0x58, 0xa4, 0x00,
6861 0x91, 0x37, 0x49, 0x6e, 0x00, 0x91, 0x39, 0x49,
6862 0x6f, 0x00, 0x91, 0x3a, 0x3b, 0x64, 0x00, 0x91,
6863 0x3c, 0x58, 0xa5, 0x00, 0x91, 0x3d, 0x3b, 0x65,
6864 0x00, 0x91, 0x43, 0x58, 0xa6, 0x00, 0x91, 0x46,
6865 0x49, 0x70, 0x00, 0x91, 0x47, 0x49, 0x71, 0x00,
6866 0x91, 0x48, 0x3b, 0x66, 0x00, 0x91, 0x49, 0x0c,
6867 0xab, 0x00, 0x91, 0x4a, 0x1b, 0x21, 0x00, 0x91,
6868 0x4b, 0x09, 0x40, 0x00, 0x91, 0x4c, 0x09, 0x0c,
6869 0x00, 0x91, 0x4d, 0x0d, 0x11, 0x00, 0x91, 0x4e,
6870 0x0b, 0xaf, 0x00, 0x91, 0x4f, 0x58, 0xa7, 0x00,
6871 0x91, 0x52, 0x09, 0x1e, 0x00, 0x91, 0x53, 0x58,
6872 0xa8, 0x00, 0x91, 0x54, 0x0a, 0x32, 0x00, 0x91,
6873 0x56, 0x1b, 0x22, 0x00, 0x91, 0x57, 0x49, 0x72,
6874 0x00, 0x91, 0x58, 0x1b, 0x23, 0x00, 0x91, 0x59,
6875 0x49, 0x73, 0x00, 0x91, 0x5a, 0x4d, 0xbf, 0x00,
6876 0x91, 0x5b, 0x3b, 0x67, 0x00, 0x91, 0x61, 0x3b,
6877 0x68, 0x00, 0x91, 0x62, 0x0a, 0x23, 0x00, 0x91,
6878 0x63, 0x1b, 0x24, 0x00, 0x91, 0x64, 0x3b, 0x69,
6879 0x00, 0x91, 0x65, 0x1b, 0x25, 0x00, 0x91, 0x67,
6880 0x4d, 0xc0, 0x00, 0x91, 0x69, 0x1b, 0x26, 0x00,
6881 0x91, 0x6a, 0x0f, 0x59, 0x00, 0x91, 0x6c, 0x09,
6882 0x41, 0x00, 0x91, 0x6d, 0x58, 0xa9, 0x00, 0x91,
6883 0x72, 0x1b, 0x28, 0x00, 0x91, 0x73, 0x1b, 0x27,
6884 0x00, 0x91, 0x74, 0x49, 0x74, 0x00, 0x91, 0x75,
6885 0x07, 0xec, 0x00, 0x91, 0x77, 0x08, 0x05, 0x00,
6886 0x91, 0x78, 0x08, 0x8e, 0x00, 0x91, 0x79, 0x49,
6887 0x75, 0x00, 0x91, 0x7a, 0x4d, 0xc1, 0x00, 0x91,
6888 0x7b, 0x58, 0xaa, 0x00, 0x91, 0x81, 0x58, 0xab,
6889 0x00, 0x91, 0x82, 0x1b, 0x2b, 0x00, 0x91, 0x83,
6890 0x43, 0x0c, 0x00, 0x91, 0x85, 0x49, 0x76, 0x00,
6891 0x91, 0x86, 0x58, 0xac, 0x00, 0x91, 0x87, 0x09,
6892 0x70, 0x00, 0x91, 0x89, 0x1b, 0x2a, 0x00, 0x91,
6893 0x8a, 0x4d, 0xc2, 0x00, 0x91, 0x8b, 0x1b, 0x29,
6894 0x00, 0x91, 0x8d, 0x0b, 0x49, 0x00, 0x91, 0x8e,
6895 0x3b, 0x6a, 0x00, 0x91, 0x90, 0x07, 0xa3, 0x00,
6896 0x91, 0x91, 0x4d, 0xc3, 0x00, 0x91, 0x92, 0x0a,
6897 0x67, 0x00, 0x91, 0x93, 0x58, 0xad, 0x00, 0x91,
6898 0x94, 0x58, 0xae, 0x00, 0x91, 0x95, 0x4d, 0xc4,
6899 0x00, 0x91, 0x97, 0x0d, 0x44, 0x00, 0x91, 0x98,
6900 0x58, 0xaf, 0x00, 0x91, 0x9c, 0x09, 0x43, 0x00,
6901 0x91, 0x9e, 0x3b, 0x6b, 0x00, 0x91, 0xa1, 0x58,
6902 0xb0, 0x00, 0x91, 0xa2, 0x1b, 0x2c, 0x00, 0x91,
6903 0xa4, 0x09, 0xc7, 0x00, 0x91, 0xa6, 0x58, 0xb1,
6904 0x00, 0x91, 0xa8, 0x3b, 0x6c, 0x00, 0x91, 0xaa,
6905 0x1b, 0x2f, 0x00, 0x91, 0xab, 0x1b, 0x2d, 0x00,
6906 0x91, 0xac, 0x1e, 0x1b, 0x00, 0x91, 0xad, 0x3b,
6907 0x6d, 0x00, 0x91, 0xae, 0x3b, 0x6e, 0x00, 0x91,
6908 0xaf, 0x1b, 0x2e, 0x00, 0x91, 0xb0, 0x4d, 0xc5,
6909 0x00, 0x91, 0xb1, 0x1e, 0x61, 0x00, 0x91, 0xb2,
6910 0x3b, 0x6f, 0x00, 0x91, 0xb3, 0x49, 0x77, 0x00,
6911 0x91, 0xb4, 0x1b, 0x31, 0x00, 0x91, 0xb5, 0x1b,
6912 0x30, 0x00, 0x91, 0xb6, 0x49, 0x78, 0x00, 0x91,
6913 0xb8, 0x09, 0xe2, 0x00, 0x91, 0xba, 0x1b, 0x32,
6914 0x00, 0x91, 0xbb, 0x4d, 0xc6, 0x00, 0x91, 0xbc,
6915 0x3b, 0x70, 0x00, 0x91, 0xbd, 0x4d, 0xc7, 0x00,
6916 0x91, 0xbf, 0x58, 0xb2, 0x00, 0x91, 0xc0, 0x1b,
6917 0x33, 0x00, 0x91, 0xc1, 0x1b, 0x34, 0x00, 0x91,
6918 0xc2, 0x4d, 0xc8, 0x00, 0x91, 0xc3, 0x49, 0x79,
6919 0x00, 0x91, 0xc4, 0x49, 0x7a, 0x00, 0x91, 0xc5,
6920 0x4d, 0xc9, 0x00, 0x91, 0xc6, 0x0d, 0x64, 0x00,
6921 0x91, 0xc7, 0x08, 0x43, 0x00, 0x91, 0xc8, 0x09,
6922 0x0d, 0x00, 0x91, 0xc9, 0x1b, 0x35, 0x00, 0x91,
6923 0xcb, 0x1b, 0x36, 0x00, 0x91, 0xcc, 0x0f, 0x6c,
6924 0x00, 0x91, 0xcd, 0x09, 0x4f, 0x00, 0x91, 0xce,
6925 0x0e, 0xfa, 0x00, 0x91, 0xcf, 0x0f, 0x94, 0x00,
6926 0x91, 0xd0, 0x1b, 0x37, 0x00, 0x91, 0xd1, 0x06,
6927 0xda, 0x00, 0x91, 0xd3, 0x58, 0xb3, 0x00, 0x91,
6928 0xd4, 0x58, 0xb4, 0x00, 0x91, 0xd6, 0x1b, 0x38,
6929 0x00, 0x91, 0xd7, 0x21, 0xc0, 0x00, 0x91, 0xd8,
6930 0x0c, 0x1d, 0x00, 0x91, 0xd9, 0x58, 0xb5, 0x00,
6931 0x91, 0xda, 0x21, 0xbf, 0x00, 0x91, 0xdb, 0x1b,
6932 0x3b, 0x00, 0x91, 0xdc, 0x05, 0xd6, 0x00, 0x91,
6933 0xdd, 0x0a, 0x11, 0x00, 0x91, 0xde, 0x21, 0xc1,
6934 0x00, 0x91, 0xdf, 0x1b, 0x39, 0x00, 0x91, 0xe1,
6935 0x1b, 0x3a, 0x00, 0x91, 0xe3, 0x0b, 0xfc, 0x00,
6936 0x91, 0xe4, 0x21, 0xc4, 0x00, 0x91, 0xe5, 0x21,
6937 0xc5, 0x00, 0x91, 0xe6, 0x0e, 0x83, 0x00, 0x91,
6938 0xe7, 0x06, 0xf4, 0x00, 0x91, 0xe9, 0x58, 0xb6,
6939 0x00, 0x91, 0xea, 0x58, 0xb7, 0x00, 0x91, 0xec,
6940 0x49, 0x7d, 0x00, 0x91, 0xed, 0x21, 0xc2, 0x00,
6941 0x91, 0xee, 0x21, 0xc3, 0x00, 0x91, 0xef, 0x58,
6942 0xb8, 0x00, 0x91, 0xf0, 0x3b, 0x71, 0x00, 0x91,
6943 0xf1, 0x43, 0x0d, 0x00, 0x91, 0xf5, 0x1b, 0x3d,
6944 0x00, 0x91, 0xf6, 0x1b, 0x3e, 0x00, 0x91, 0xf7,
6945 0x3b, 0x72, 0x00, 0x91, 0xf9, 0x58, 0xb9, 0x00,
6946 0x91, 0xfb, 0x3b, 0x73, 0x00, 0x91, 0xfc, 0x1b,
6947 0x3c, 0x00, 0x91, 0xfd, 0x58, 0xba, 0x00, 0x91,
6948 0xff, 0x1b, 0x40, 0x00, 0x92, 0x00, 0x4d, 0xca,
6949 0x00, 0x92, 0x01, 0x49, 0x7e, 0x00, 0x92, 0x04,
6950 0x58, 0xbb, 0x00, 0x92, 0x05, 0x58, 0xbc, 0x00,
6951 0x92, 0x06, 0x21, 0xc6, 0x00, 0x92, 0x07, 0x3b,
6952 0x74, 0x00, 0x92, 0x09, 0x4d, 0xcb, 0x00, 0x92,
6953 0x0a, 0x21, 0xc8, 0x00, 0x92, 0x0c, 0x58, 0xbd,
6954 0x00, 0x92, 0x0d, 0x0c, 0xb7, 0x00, 0x92, 0x0e,
6955 0x05, 0xa1, 0x00, 0x92, 0x10, 0x21, 0xc7, 0x00,
6956 0x92, 0x11, 0x1b, 0x44, 0x00, 0x92, 0x12, 0x58,
6957 0xbe, 0x00, 0x92, 0x13, 0x58, 0xbf, 0x00, 0x92,
6958 0x14, 0x1b, 0x41, 0x00, 0x92, 0x15, 0x1b, 0x43,
6959 0x00, 0x92, 0x16, 0x49, 0x7f, 0x00, 0x92, 0x17,
6960 0x49, 0x80, 0x00, 0x92, 0x18, 0x58, 0xc0, 0x00,
6961 0x92, 0x1c, 0x58, 0xc1, 0x00, 0x92, 0x1d, 0x58,
6962 0xc2, 0x00, 0x92, 0x1e, 0x1b, 0x3f, 0x00, 0x92,
6963 0x23, 0x4d, 0xcc, 0x00, 0x92, 0x24, 0x58, 0xc3,
6964 0x00, 0x92, 0x25, 0x58, 0xc4, 0x00, 0x92, 0x26,
6965 0x58, 0xc5, 0x00, 0x92, 0x28, 0x3b, 0x75, 0x00,
6966 0x92, 0x29, 0x1b, 0x8a, 0x00, 0x92, 0x2c, 0x1b,
6967 0x42, 0x00, 0x92, 0x2e, 0x58, 0xc6, 0x00, 0x92,
6968 0x2f, 0x58, 0xc7, 0x00, 0x92, 0x30, 0x58, 0xc8,
6969 0x00, 0x92, 0x33, 0x3b, 0x76, 0x00, 0x92, 0x34,
6970 0x0f, 0xb3, 0x00, 0x92, 0x35, 0x58, 0xc9, 0x00,
6971 0x92, 0x36, 0x58, 0xca, 0x00, 0x92, 0x37, 0x07,
6972 0x8e, 0x00, 0x92, 0x38, 0x3b, 0x77, 0x00, 0x92,
6973 0x39, 0x21, 0xcf, 0x00, 0x92, 0x3a, 0x21, 0xc9,
6974 0x00, 0x92, 0x3c, 0x21, 0xcb, 0x00, 0x92, 0x3e,
6975 0x58, 0xcb, 0x00, 0x92, 0x3f, 0x1b, 0x4c, 0x00,
6976 0x92, 0x40, 0x21, 0xca, 0x00, 0x92, 0x42, 0x49,
6977 0x82, 0x00, 0x92, 0x43, 0x3b, 0x78, 0x00, 0x92,
6978 0x44, 0x0c, 0x2e, 0x00, 0x92, 0x45, 0x1b, 0x47,
6979 0x00, 0x92, 0x46, 0x58, 0xcc, 0x00, 0x92, 0x47,
6980 0x3b, 0x79, 0x00, 0x92, 0x48, 0x1b, 0x4a, 0x00,
6981 0x92, 0x49, 0x1b, 0x48, 0x00, 0x92, 0x4a, 0x49,
6982 0x83, 0x00, 0x92, 0x4b, 0x1b, 0x4d, 0x00, 0x92,
6983 0x4d, 0x58, 0xcd, 0x00, 0x92, 0x4e, 0x21, 0xcc,
6984 0x00, 0x92, 0x4f, 0x3b, 0x7a, 0x00, 0x92, 0x50,
6985 0x1b, 0x4e, 0x00, 0x92, 0x51, 0x21, 0xce, 0x00,
6986 0x92, 0x56, 0x49, 0x84, 0x00, 0x92, 0x57, 0x1b,
6987 0x46, 0x00, 0x92, 0x58, 0x58, 0xce, 0x00, 0x92,
6988 0x59, 0x21, 0xcd, 0x00, 0x92, 0x5a, 0x1b, 0x53,
6989 0x00, 0x92, 0x5b, 0x05, 0x16, 0x00, 0x92, 0x5c,
6990 0x58, 0xcf, 0x00, 0x92, 0x5d, 0x58, 0xd0, 0x00,
6991 0x92, 0x5e, 0x1b, 0x45, 0x00, 0x92, 0x60, 0x3b,
6992 0x7b, 0x00, 0x92, 0x61, 0x49, 0x85, 0x00, 0x92,
6993 0x62, 0x0d, 0x41, 0x00, 0x92, 0x64, 0x1b, 0x49,
6994 0x00, 0x92, 0x65, 0x49, 0x86, 0x00, 0x92, 0x66,
6995 0x09, 0xc8, 0x00, 0x92, 0x67, 0x21, 0xd0, 0x00,
6996 0x92, 0x68, 0x49, 0x87, 0x00, 0x92, 0x69, 0x58,
6997 0xd1, 0x00, 0x92, 0x6e, 0x58, 0xd2, 0x00, 0x92,
6998 0x6f, 0x58, 0xd3, 0x00, 0x92, 0x70, 0x58, 0xd4,
6999 0x00, 0x92, 0x71, 0x07, 0xed, 0x00, 0x92, 0x75,
7000 0x58, 0xd5, 0x00, 0x92, 0x76, 0x4d, 0xcd, 0x00,
7001 0x92, 0x77, 0x21, 0xd2, 0x00, 0x92, 0x78, 0x21,
7002 0xd3, 0x00, 0x92, 0x79, 0x58, 0xd6, 0x00, 0x92,
7003 0x7b, 0x58, 0xd7, 0x00, 0x92, 0x7c, 0x49, 0x89,
7004 0x00, 0x92, 0x7d, 0x49, 0x8a, 0x00, 0x92, 0x7e,
7005 0x0e, 0x76, 0x00, 0x92, 0x7f, 0x49, 0x8b, 0x00,
7006 0x92, 0x80, 0x06, 0xdc, 0x00, 0x92, 0x83, 0x09,
7007 0x50, 0x00, 0x92, 0x85, 0x0c, 0x94, 0x00, 0x92,
7008 0x88, 0x20, 0xaa, 0x00, 0x92, 0x89, 0x49, 0x8c,
7009 0x00, 0x92, 0x8a, 0x58, 0xd8, 0x00, 0x92, 0x8d,
7010 0x49, 0x8d, 0x00, 0x92, 0x8e, 0x4d, 0xce, 0x00,
7011 0x92, 0x91, 0x0a, 0xaf, 0x00, 0x92, 0x92, 0x58,
7012 0xd9, 0x00, 0x92, 0x93, 0x1b, 0x51, 0x00, 0x92,
7013 0x95, 0x1b, 0x4b, 0x00, 0x92, 0x96, 0x1b, 0x50,
7014 0x00, 0x92, 0x97, 0x49, 0x8e, 0x00, 0x92, 0x98,
7015 0x0e, 0xcf, 0x00, 0x92, 0x99, 0x49, 0x8f, 0x00,
7016 0x92, 0x9a, 0x0b, 0xd4, 0x00, 0x92, 0x9b, 0x1b,
7017 0x52, 0x00, 0x92, 0x9c, 0x1b, 0x4f, 0x00, 0x92,
7018 0x9f, 0x49, 0x90, 0x00, 0x92, 0xa0, 0x58, 0xda,
7019 0x00, 0x92, 0xa4, 0x58, 0xdb, 0x00, 0x92, 0xa5,
7020 0x58, 0xdc, 0x00, 0x92, 0xa7, 0x21, 0xd1, 0x00,
7021 0x92, 0xa8, 0x58, 0xdd, 0x00, 0x92, 0xab, 0x49,
7022 0x91, 0x00, 0x92, 0xad, 0x0a, 0xae, 0x00, 0x92,
7023 0xaf, 0x4d, 0xcf, 0x00, 0x92, 0xb2, 0x49, 0x94,
7024 0x00, 0x92, 0xb3, 0x35, 0x54, 0x00, 0x92, 0xb6,
7025 0x58, 0xde, 0x00, 0x92, 0xb7, 0x1b, 0x56, 0x00,
7026 0x92, 0xb8, 0x58, 0xdf, 0x00, 0x92, 0xb9, 0x1b,
7027 0x55, 0x00, 0x92, 0xba, 0x58, 0xe0, 0x00, 0x92,
7028 0xbb, 0x4d, 0xd0, 0x00, 0x92, 0xbc, 0x4d, 0xd1,
7029 0x00, 0x92, 0xbd, 0x58, 0xe1, 0x00, 0x92, 0xbf,
7030 0x49, 0x95, 0x00, 0x92, 0xc0, 0x49, 0x96, 0x00,
7031 0x92, 0xc1, 0x4d, 0xd2, 0x00, 0x92, 0xc2, 0x3b,
7032 0x7c, 0x00, 0x92, 0xc3, 0x4d, 0xd3, 0x00, 0x92,
7033 0xc5, 0x4d, 0xd4, 0x00, 0x92, 0xc6, 0x49, 0x97,
7034 0x00, 0x92, 0xc7, 0x58, 0xe2, 0x00, 0x92, 0xc8,
7035 0x4d, 0xd5, 0x00, 0x92, 0xcb, 0x3b, 0x7d, 0x00,
7036 0x92, 0xcc, 0x3b, 0x7e, 0x00, 0x92, 0xcd, 0x58,
7037 0xe3, 0x00, 0x92, 0xce, 0x49, 0x98, 0x00, 0x92,
7038 0xcf, 0x1b, 0x54, 0x00, 0x92, 0xd0, 0x21, 0xd7,
7039 0x00, 0x92, 0xd2, 0x0e, 0x5d, 0x00, 0x92, 0xd3,
7040 0x21, 0xdb, 0x00, 0x92, 0xd5, 0x21, 0xd9, 0x00,
7041 0x92, 0xd7, 0x21, 0xd5, 0x00, 0x92, 0xd8, 0x58,
7042 0xe4, 0x00, 0x92, 0xd9, 0x21, 0xd6, 0x00, 0x92,
7043 0xdc, 0x58, 0xe5, 0x00, 0x92, 0xdd, 0x58, 0xe6,
7044 0x00, 0x92, 0xdf, 0x3b, 0x7f, 0x00, 0x92, 0xe0,
7045 0x21, 0xda, 0x00, 0x92, 0xe1, 0x58, 0xe7, 0x00,
7046 0x92, 0xe3, 0x58, 0xe8, 0x00, 0x92, 0xe4, 0x09,
7047 0x85, 0x00, 0x92, 0xe5, 0x49, 0x99, 0x00, 0x92,
7048 0xe7, 0x21, 0xd4, 0x00, 0x92, 0xe8, 0x58, 0xe9,
7049 0x00, 0x92, 0xe9, 0x1b, 0x57, 0x00, 0x92, 0xea,
7050 0x0e, 0x2f, 0x00, 0x92, 0xec, 0x58, 0xea, 0x00,
7051 0x92, 0xed, 0x04, 0xf6, 0x00, 0x92, 0xee, 0x58,
7052 0xeb, 0x00, 0x92, 0xf0, 0x58, 0xec, 0x00, 0x92,
7053 0xf2, 0x0d, 0xb8, 0x00, 0x92, 0xf3, 0x0b, 0xb0,
7054 0x00, 0x92, 0xf7, 0x49, 0x9d, 0x00, 0x92, 0xf8,
7055 0x06, 0x92, 0x00, 0x92, 0xf9, 0x20, 0xb0, 0x00,
7056 0x92, 0xfa, 0x1b, 0x59, 0x00, 0x92, 0xfb, 0x21,
7057 0xde, 0x00, 0x92, 0xfc, 0x07, 0xef, 0x00, 0x92,
7058 0xff, 0x21, 0xe1, 0x00, 0x93, 0x00, 0x58, 0xed,
7059 0x00, 0x93, 0x02, 0x21, 0xe3, 0x00, 0x93, 0x04,
7060 0x34, 0x5a, 0x00, 0x93, 0x06, 0x08, 0x7a, 0x00,
7061 0x93, 0x08, 0x58, 0xee, 0x00, 0x93, 0x0d, 0x3b,
7062 0x80, 0x00, 0x93, 0x0f, 0x1b, 0x58, 0x00, 0x93,
7063 0x10, 0x0a, 0x33, 0x00, 0x93, 0x11, 0x49, 0x9a,
7064 0x00, 0x93, 0x14, 0x4d, 0xd6, 0x00, 0x93, 0x15,
7065 0x3b, 0x81, 0x00, 0x93, 0x18, 0x0a, 0x34, 0x00,
7066 0x93, 0x19, 0x1b, 0x5c, 0x00, 0x93, 0x1a, 0x1b,
7067 0x5e, 0x00, 0x93, 0x1c, 0x58, 0xef, 0x00, 0x93,
7068 0x1d, 0x21, 0xe2, 0x00, 0x93, 0x1e, 0x21, 0xe0,
7069 0x00, 0x93, 0x1f, 0x3b, 0x82, 0x00, 0x93, 0x20,
7070 0x09, 0xe3, 0x00, 0x93, 0x21, 0x21, 0xdd, 0x00,
7071 0x93, 0x22, 0x1b, 0x5d, 0x00, 0x93, 0x23, 0x1b,
7072 0x5f, 0x00, 0x93, 0x24, 0x58, 0xf0, 0x00, 0x93,
7073 0x25, 0x21, 0xdc, 0x00, 0x93, 0x26, 0x06, 0xcb,
7074 0x00, 0x93, 0x27, 0x3b, 0x83, 0x00, 0x93, 0x28,
7075 0x0d, 0xb7, 0x00, 0x93, 0x29, 0x49, 0x9e, 0x00,
7076 0x93, 0x2a, 0x58, 0xf1, 0x00, 0x93, 0x2b, 0x09,
7077 0x0e, 0x00, 0x93, 0x2c, 0x0f, 0xc9, 0x00, 0x93,
7078 0x2e, 0x1b, 0x5b, 0x00, 0x93, 0x2f, 0x08, 0x68,
7079 0x00, 0x93, 0x32, 0x0f, 0xe5, 0x00, 0x93, 0x33,
7080 0x4d, 0xd7, 0x00, 0x93, 0x34, 0x58, 0xf2, 0x00,
7081 0x93, 0x35, 0x1b, 0x61, 0x00, 0x93, 0x36, 0x4d,
7082 0xd8, 0x00, 0x93, 0x37, 0x58, 0xf3, 0x00, 0x93,
7083 0x3a, 0x1b, 0x60, 0x00, 0x93, 0x3b, 0x1b, 0x62,
7084 0x00, 0x93, 0x44, 0x1b, 0x5a, 0x00, 0x93, 0x47,
7085 0x3b, 0x84, 0x00, 0x93, 0x48, 0x20, 0xa9, 0x00,
7086 0x93, 0x49, 0x43, 0x0e, 0x00, 0x93, 0x4a, 0x34,
7087 0x58, 0x00, 0x93, 0x4b, 0x0c, 0xc1, 0x00, 0x93,
7088 0x4d, 0x0c, 0x4f, 0x00, 0x93, 0x50, 0x58, 0xf4,
7089 0x00, 0x93, 0x51, 0x49, 0xa1, 0x00, 0x93, 0x52,
7090 0x3b, 0x85, 0x00, 0x93, 0x54, 0x0b, 0xf3, 0x00,
7091 0x93, 0x55, 0x58, 0xf5, 0x00, 0x93, 0x56, 0x1b,
7092 0x67, 0x00, 0x93, 0x57, 0x21, 0xe5, 0x00, 0x93,
7093 0x58, 0x4d, 0xd9, 0x00, 0x93, 0x5a, 0x49, 0xa2,
7094 0x00, 0x93, 0x5b, 0x0b, 0x81, 0x00, 0x93, 0x5c,
7095 0x1b, 0x63, 0x00, 0x93, 0x5e, 0x58, 0xf6, 0x00,
7096 0x93, 0x60, 0x1b, 0x64, 0x00, 0x93, 0x64, 0x43,
7097 0x0f, 0x00, 0x93, 0x65, 0x43, 0x10, 0x00, 0x93,
7098 0x67, 0x58, 0xf7, 0x00, 0x93, 0x69, 0x58, 0xf8,
7099 0x00, 0x93, 0x6a, 0x3b, 0x87, 0x00, 0x93, 0x6b,
7100 0x49, 0xa3, 0x00, 0x93, 0x6c, 0x07, 0x03, 0x00,
7101 0x93, 0x6d, 0x3b, 0x88, 0x00, 0x93, 0x6e, 0x1b,
7102 0x66, 0x00, 0x93, 0x6f, 0x58, 0xf9, 0x00, 0x93,
7103 0x70, 0x21, 0xe4, 0x00, 0x93, 0x71, 0x49, 0xa4,
7104 0x00, 0x93, 0x73, 0x49, 0xa5, 0x00, 0x93, 0x74,
7105 0x58, 0xfa, 0x00, 0x93, 0x75, 0x07, 0x64, 0x00,
7106 0x93, 0x76, 0x58, 0xfb, 0x00, 0x93, 0x7a, 0x58,
7107 0xfc, 0x00, 0x93, 0x7c, 0x1b, 0x65, 0x00, 0x93,
7108 0x7d, 0x58, 0xfd, 0x00, 0x93, 0x7e, 0x09, 0xc9,
7109 0x00, 0x93, 0x7f, 0x4d, 0xda, 0x00, 0x93, 0x80,
7110 0x58, 0xfe, 0x00, 0x93, 0x81, 0x58, 0xff, 0x00,
7111 0x93, 0x82, 0x4d, 0xdb, 0x00, 0x93, 0x88, 0x49,
7112 0xa9, 0x00, 0x93, 0x8a, 0x4d, 0xdc, 0x00, 0x93,
7113 0x8b, 0x49, 0xaa, 0x00, 0x93, 0x8c, 0x05, 0xd7,
7114 0x00, 0x93, 0x8d, 0x59, 0x00, 0x00, 0x93, 0x8f,
7115 0x49, 0xab, 0x00, 0x93, 0x92, 0x59, 0x01, 0x00,
7116 0x93, 0x94, 0x1b, 0x6b, 0x00, 0x93, 0x95, 0x59,
7117 0x02, 0x00, 0x93, 0x96, 0x08, 0x2f, 0x00, 0x93,
7118 0x97, 0x0a, 0xfb, 0x00, 0x93, 0x98, 0x59, 0x03,
7119 0x00, 0x93, 0x9a, 0x0b, 0xe6, 0x00, 0x93, 0x9b,
7120 0x3b, 0x89, 0x00, 0x93, 0x9e, 0x49, 0xac, 0x00,
7121 0x93, 0xa1, 0x49, 0xa6, 0x00, 0x93, 0xa3, 0x43,
7122 0x11, 0x00, 0x93, 0xa4, 0x21, 0xe6, 0x00, 0x93,
7123 0xa6, 0x59, 0x05, 0x00, 0x93, 0xa7, 0x05, 0x99,
7124 0x00, 0x93, 0xa8, 0x59, 0x06, 0x00, 0x93, 0xa9,
7125 0x3b, 0x8b, 0x00, 0x93, 0xab, 0x59, 0x07, 0x00,
7126 0x93, 0xac, 0x1b, 0x69, 0x00, 0x93, 0xad, 0x1b,
7127 0x6a, 0x00, 0x93, 0xae, 0x0b, 0xdf, 0x00, 0x93,
7128 0xb0, 0x1b, 0x68, 0x00, 0x93, 0xb4, 0x59, 0x08,
7129 0x00, 0x93, 0xb5, 0x59, 0x09, 0x00, 0x93, 0xb6,
7130 0x59, 0x0a, 0x00, 0x93, 0xb9, 0x1b, 0x6c, 0x00,
7131 0x93, 0xba, 0x3b, 0x8a, 0x00, 0x93, 0xbb, 0x4d,
7132 0xdd, 0x00, 0x93, 0xc1, 0x3b, 0x8c, 0x00, 0x93,
7133 0xc3, 0x1b, 0x72, 0x00, 0x93, 0xc4, 0x59, 0x0b,
7134 0x00, 0x93, 0xc5, 0x59, 0x0c, 0x00, 0x93, 0xc6,
7135 0x21, 0xe7, 0x00, 0x93, 0xc7, 0x49, 0xb1, 0x00,
7136 0x93, 0xc8, 0x1b, 0x75, 0x00, 0x93, 0xc9, 0x59,
7137 0x0d, 0x00, 0x93, 0xca, 0x3b, 0x8d, 0x00, 0x93,
7138 0xcb, 0x59, 0x0e, 0x00, 0x93, 0xcc, 0x4d, 0xde,
7139 0x00, 0x93, 0xcd, 0x59, 0x0f, 0x00, 0x93, 0xd0,
7140 0x1b, 0x74, 0x00, 0x93, 0xd1, 0x0c, 0x27, 0x00,
7141 0x93, 0xd3, 0x59, 0x10, 0x00, 0x93, 0xd6, 0x1b,
7142 0x6d, 0x00, 0x93, 0xd7, 0x1b, 0x6e, 0x00, 0x93,
7143 0xd8, 0x1b, 0x71, 0x00, 0x93, 0xd9, 0x59, 0x11,
7144 0x00, 0x93, 0xdc, 0x49, 0xb2, 0x00, 0x93, 0xdd,
7145 0x1b, 0x73, 0x00, 0x93, 0xde, 0x21, 0xe8, 0x00,
7146 0x93, 0xdf, 0x43, 0x12, 0x00, 0x93, 0xe1, 0x06,
7147 0xb8, 0x00, 0x93, 0xe2, 0x3b, 0x8e, 0x00, 0x93,
7148 0xe4, 0x1b, 0x76, 0x00, 0x93, 0xe5, 0x1b, 0x70,
7149 0x00, 0x93, 0xe6, 0x4d, 0xdf, 0x00, 0x93, 0xe7,
7150 0x49, 0xb3, 0x00, 0x93, 0xe8, 0x1b, 0x6f, 0x00,
7151 0x93, 0xf1, 0x49, 0xb0, 0x00, 0x93, 0xf5, 0x49,
7152 0xad, 0x00, 0x93, 0xf7, 0x59, 0x12, 0x00, 0x93,
7153 0xf8, 0x21, 0xe9, 0x00, 0x93, 0xf9, 0x4d, 0xe0,
7154 0x00, 0x93, 0xfa, 0x3b, 0x8f, 0x00, 0x93, 0xfb,
7155 0x49, 0xb7, 0x00, 0x93, 0xfd, 0x3b, 0x90, 0x00,
7156 0x94, 0x01, 0x59, 0x13, 0x00, 0x94, 0x02, 0x4d,
7157 0xe1, 0x00, 0x94, 0x03, 0x1b, 0x7a, 0x00, 0x94,
7158 0x04, 0x43, 0x13, 0x00, 0x94, 0x07, 0x1b, 0x7b,
7159 0x00, 0x94, 0x08, 0x59, 0x14, 0x00, 0x94, 0x09,
7160 0x49, 0xb4, 0x00, 0x94, 0x0d, 0x4d, 0xe2, 0x00,
7161 0x94, 0x0e, 0x4d, 0xe3, 0x00, 0x94, 0x0f, 0x3b,
7162 0x91, 0x00, 0x94, 0x10, 0x1b, 0x7c, 0x00, 0x94,
7163 0x13, 0x1b, 0x79, 0x00, 0x94, 0x14, 0x1b, 0x78,
7164 0x00, 0x94, 0x15, 0x59, 0x15, 0x00, 0x94, 0x16,
7165 0x49, 0xb5, 0x00, 0x94, 0x17, 0x49, 0xb6, 0x00,
7166 0x94, 0x18, 0x09, 0xca, 0x00, 0x94, 0x19, 0x0c,
7167 0x82, 0x00, 0x94, 0x1a, 0x1b, 0x77, 0x00, 0x94,
7168 0x1f, 0x59, 0x16, 0x00, 0x94, 0x21, 0x1b, 0x80,
7169 0x00, 0x94, 0x2b, 0x1b, 0x7e, 0x00, 0x94, 0x2e,
7170 0x4d, 0xe4, 0x00, 0x94, 0x2f, 0x59, 0x17, 0x00,
7171 0x94, 0x31, 0x21, 0xea, 0x00, 0x94, 0x32, 0x49,
7172 0xb8, 0x00, 0x94, 0x33, 0x43, 0x14, 0x00, 0x94,
7173 0x34, 0x3b, 0x92, 0x00, 0x94, 0x35, 0x1b, 0x7f,
7174 0x00, 0x94, 0x36, 0x1b, 0x7d, 0x00, 0x94, 0x38,
7175 0x0b, 0x58, 0x00, 0x94, 0x3a, 0x1b, 0x81, 0x00,
7176 0x94, 0x3b, 0x49, 0xb9, 0x00, 0x94, 0x3d, 0x59,
7177 0x18, 0x00, 0x94, 0x3f, 0x3b, 0x93, 0x00, 0x94,
7178 0x41, 0x1b, 0x82, 0x00, 0x94, 0x43, 0x59, 0x19,
7179 0x00, 0x94, 0x44, 0x1b, 0x84, 0x00, 0x94, 0x45,
7180 0x21, 0xeb, 0x00, 0x94, 0x48, 0x21, 0xec, 0x00,
7181 0x94, 0x4a, 0x43, 0x15, 0x00, 0x94, 0x4c, 0x4d,
7182 0xe5, 0x00, 0x94, 0x51, 0x06, 0x11, 0x00, 0x94,
7183 0x52, 0x1b, 0x83, 0x00, 0x94, 0x53, 0x0f, 0x06,
7184 0x00, 0x94, 0x55, 0x3b, 0x94, 0x00, 0x94, 0x59,
7185 0x59, 0x1a, 0x00, 0x94, 0x5a, 0x1b, 0x8f, 0x00,
7186 0x94, 0x5b, 0x1b, 0x85, 0x00, 0x94, 0x5c, 0x59,
7187 0x1b, 0x00, 0x94, 0x5e, 0x1b, 0x88, 0x00, 0x94,
7188 0x5f, 0x59, 0x1c, 0x00, 0x94, 0x60, 0x1b, 0x86,
7189 0x00, 0x94, 0x61, 0x59, 0x1d, 0x00, 0x94, 0x62,
7190 0x1b, 0x87, 0x00, 0x94, 0x63, 0x43, 0x16, 0x00,
7191 0x94, 0x68, 0x59, 0x1e, 0x00, 0x94, 0x6a, 0x1b,
7192 0x89, 0x00, 0x94, 0x6b, 0x3b, 0x95, 0x00, 0x94,
7193 0x6d, 0x49, 0xbc, 0x00, 0x94, 0x6e, 0x59, 0x1f,
7194 0x00, 0x94, 0x6f, 0x49, 0xbd, 0x00, 0x94, 0x70,
7195 0x1b, 0x8b, 0x00, 0x94, 0x71, 0x43, 0x17, 0x00,
7196 0x94, 0x72, 0x3b, 0x96, 0x00, 0x94, 0x75, 0x1b,
7197 0x8c, 0x00, 0x94, 0x77, 0x1b, 0x8d, 0x00, 0x94,
7198 0x7c, 0x1b, 0x90, 0x00, 0x94, 0x7d, 0x1b, 0x8e,
7199 0x00, 0x94, 0x7e, 0x1b, 0x91, 0x00, 0x94, 0x7f,
7200 0x1b, 0x93, 0x00, 0x94, 0x81, 0x1b, 0x92, 0x00,
7201 0x94, 0x83, 0x59, 0x21, 0x00, 0x94, 0x84, 0x59,
7202 0x20, 0x00, 0x95, 0x77, 0x0b, 0xd5, 0x00, 0x95,
7203 0x78, 0x3b, 0x97, 0x00, 0x95, 0x79, 0x49, 0xbe,
7204 0x00, 0x95, 0x7e, 0x59, 0x22, 0x00, 0x95, 0x80,
7205 0x0e, 0xf3, 0x00, 0x95, 0x82, 0x1b, 0x94, 0x00,
7206 0x95, 0x83, 0x0a, 0xb0, 0x00, 0x95, 0x84, 0x59,
7207 0x23, 0x00, 0x95, 0x86, 0x49, 0xbf, 0x00, 0x95,
7208 0x87, 0x1b, 0x95, 0x00, 0x95, 0x88, 0x4d, 0xe6,
7209 0x00, 0x95, 0x89, 0x0e, 0x14, 0x00, 0x95, 0x8a,
7210 0x1b, 0x96, 0x00, 0x95, 0x8b, 0x05, 0x89, 0x00,
7211 0x95, 0x8c, 0x49, 0xc0, 0x00, 0x95, 0x8d, 0x49,
7212 0xc1, 0x00, 0x95, 0x8e, 0x43, 0x18, 0x00, 0x95,
7213 0x8f, 0x04, 0xde, 0x00, 0x95, 0x91, 0x06, 0x13,
7214 0x00, 0x95, 0x92, 0x21, 0xed, 0x00, 0x95, 0x93,
7215 0x06, 0x12, 0x00, 0x95, 0x94, 0x1b, 0x97, 0x00,
7216 0x95, 0x96, 0x1b, 0x98, 0x00, 0x95, 0x98, 0x1b,
7217 0x99, 0x00, 0x95, 0x99, 0x1b, 0x9a, 0x00, 0x95,
7218 0x9d, 0x59, 0x24, 0x00, 0x95, 0x9e, 0x59, 0x25,
7219 0x00, 0x95, 0x9f, 0x43, 0x19, 0x00, 0x95, 0xa0,
7220 0x1b, 0x9b, 0x00, 0x95, 0xa1, 0x4d, 0xe7, 0x00,
7221 0x95, 0xa2, 0x06, 0x14, 0x00, 0x95, 0xa3, 0x05,
7222 0xb3, 0x00, 0x95, 0xa4, 0x07, 0xf0, 0x00, 0x95,
7223 0xa5, 0x0d, 0x4a, 0x00, 0x95, 0xa6, 0x3b, 0x98,
7224 0x00, 0x95, 0xa7, 0x1b, 0x9d, 0x00, 0x95, 0xa8,
7225 0x1b, 0x9c, 0x00, 0x95, 0xa9, 0x3b, 0x99, 0x00,
7226 0x95, 0xab, 0x4f, 0x59, 0x00, 0x95, 0xac, 0x43,
7227 0x1a, 0x00, 0x95, 0xad, 0x1b, 0x9e, 0x00, 0x95,
7228 0xb1, 0x35, 0x55, 0x00, 0x95, 0xb2, 0x04, 0xfe,
7229 0x00, 0x95, 0xb4, 0x3b, 0x9b, 0x00, 0x95, 0xb6,
7230 0x43, 0x1b, 0x00, 0x95, 0xb9, 0x1b, 0xa1, 0x00,
7231 0x95, 0xba, 0x59, 0x26, 0x00, 0x95, 0xbb, 0x1b,
7232 0xa0, 0x00, 0x95, 0xbc, 0x1b, 0x9f, 0x00, 0x95,
7233 0xbd, 0x3b, 0x9c, 0x00, 0x95, 0xbe, 0x1b, 0xa2,
7234 0x00, 0x95, 0xbf, 0x4d, 0xe8, 0x00, 0x95, 0xc3,
7235 0x1b, 0xa5, 0x00, 0x95, 0xc6, 0x4d, 0xe9, 0x00,
7236 0x95, 0xc7, 0x04, 0x8b, 0x00, 0x95, 0xc8, 0x49,
7237 0xc4, 0x00, 0x95, 0xc9, 0x4d, 0xea, 0x00, 0x95,
7238 0xca, 0x1b, 0xa3, 0x00, 0x95, 0xcb, 0x43, 0x1c,
7239 0x00, 0x95, 0xcc, 0x1b, 0xa7, 0x00, 0x95, 0xcd,
7240 0x1b, 0xa6, 0x00, 0x95, 0xd0, 0x43, 0x1d, 0x00,
7241 0x95, 0xd1, 0x4d, 0xeb, 0x00, 0x95, 0xd2, 0x4d,
7242 0xec, 0x00, 0x95, 0xd3, 0x43, 0x1e, 0x00, 0x95,
7243 0xd4, 0x1b, 0xa9, 0x00, 0x95, 0xd5, 0x1b, 0xa8,
7244 0x00, 0x95, 0xd6, 0x1b, 0xaa, 0x00, 0x95, 0xd8,
7245 0x0c, 0x86, 0x00, 0x95, 0xd9, 0x59, 0x27, 0x00,
7246 0x95, 0xda, 0x3b, 0x9d, 0x00, 0x95, 0xdc, 0x1b,
7247 0xab, 0x00, 0x95, 0xdd, 0x59, 0x28, 0x00, 0x95,
7248 0xde, 0x43, 0x20, 0x00, 0x95, 0xdf, 0x59, 0x29,
7249 0x00, 0x95, 0xe0, 0x4d, 0xed, 0x00, 0x95, 0xe1,
7250 0x1b, 0xac, 0x00, 0x95, 0xe2, 0x1b, 0xae, 0x00,
7251 0x95, 0xe4, 0x4d, 0xee, 0x00, 0x95, 0xe5, 0x1b,
7252 0xad, 0x00, 0x95, 0xe6, 0x4d, 0xef, 0x00, 0x95,
7253 0xe8, 0x36, 0xed, 0x00, 0x96, 0x1c, 0x0d, 0xde,
7254 0x00, 0x96, 0x1d, 0x3b, 0x9e, 0x00, 0x96, 0x1e,
7255 0x59, 0x2a, 0x00, 0x96, 0x21, 0x1b, 0xaf, 0x00,
7256 0x96, 0x22, 0x59, 0x2b, 0x00, 0x96, 0x24, 0x4d,
7257 0xf0, 0x00, 0x96, 0x25, 0x59, 0x2c, 0x00, 0x96,
7258 0x26, 0x59, 0x2d, 0x00, 0x96, 0x28, 0x1b, 0xb0,
7259 0x00, 0x96, 0x2a, 0x08, 0x55, 0x00, 0x96, 0x2c,
7260 0x49, 0xc7, 0x00, 0x96, 0x2e, 0x1b, 0xb1, 0x00,
7261 0x96, 0x2f, 0x1b, 0xb2, 0x00, 0x96, 0x31, 0x4d,
7262 0xf1, 0x00, 0x96, 0x32, 0x0e, 0x77, 0x00, 0x96,
7263 0x33, 0x49, 0xc8, 0x00, 0x96, 0x34, 0x49, 0xc9,
7264 0x00, 0x96, 0x37, 0x59, 0x2e, 0x00, 0x96, 0x38,
7265 0x4d, 0xf2, 0x00, 0x96, 0x39, 0x59, 0x2f, 0x00,
7266 0x96, 0x3a, 0x59, 0x30, 0x00, 0x96, 0x3b, 0x0a,
7267 0xcd, 0x00, 0x96, 0x3c, 0x49, 0xcb, 0x00, 0x96,
7268 0x3d, 0x4d, 0xf3, 0x00, 0x96, 0x3f, 0x04, 0x68,
7269 0x00, 0x96, 0x40, 0x0b, 0x2b, 0x00, 0x96, 0x41,
7270 0x3b, 0x9f, 0x00, 0x96, 0x42, 0x1b, 0xb3, 0x00,
7271 0x96, 0x44, 0x0d, 0xdf, 0x00, 0x96, 0x4b, 0x1b,
7272 0xb6, 0x00, 0x96, 0x4c, 0x1b, 0xb4, 0x00, 0x96,
7273 0x4d, 0x07, 0xf1, 0x00, 0x96, 0x4f, 0x1b, 0xb5,
7274 0x00, 0x96, 0x50, 0x07, 0x76, 0x00, 0x96, 0x52,
7275 0x59, 0x31, 0x00, 0x96, 0x54, 0x4d, 0xf4, 0x00,
7276 0x96, 0x56, 0x59, 0x32, 0x00, 0x96, 0x57, 0x59,
7277 0x33, 0x00, 0x96, 0x58, 0x3b, 0xa0, 0x00, 0x96,
7278 0x5b, 0x0e, 0x15, 0x00, 0x96, 0x5c, 0x1b, 0xb8,
7279 0x00, 0x96, 0x5d, 0x1b, 0xba, 0x00, 0x96, 0x5e,
7280 0x1b, 0xb9, 0x00, 0x96, 0x5f, 0x1b, 0xbb, 0x00,
7281 0x96, 0x61, 0x49, 0xcc, 0x00, 0x96, 0x62, 0x04,
7282 0xc3, 0x00, 0x96, 0x63, 0x0a, 0x1e, 0x00, 0x96,
7283 0x64, 0x09, 0x86, 0x00, 0x96, 0x65, 0x06, 0x15,
7284 0x00, 0x96, 0x66, 0x1b, 0xbc, 0x00, 0x96, 0x6a,
7285 0x0d, 0x1c, 0x00, 0x96, 0x6c, 0x1b, 0xbe, 0x00,
7286 0x96, 0x6e, 0x59, 0x34, 0x00, 0x96, 0x70, 0x04,
7287 0xc4, 0x00, 0x96, 0x72, 0x1b, 0xbd, 0x00, 0x96,
7288 0x73, 0x0b, 0xe0, 0x00, 0x96, 0x74, 0x4d, 0xf5,
7289 0x00, 0x96, 0x75, 0x0f, 0x95, 0x00, 0x96, 0x76,
7290 0x0c, 0x83, 0x00, 0x96, 0x77, 0x1b, 0xb7, 0x00,
7291 0x96, 0x78, 0x0f, 0x6e, 0x00, 0x96, 0x7a, 0x07,
7292 0x65, 0x00, 0x96, 0x7b, 0x4d, 0xf6, 0x00, 0x96,
7293 0x7c, 0x59, 0x35, 0x00, 0x96, 0x7d, 0x0f, 0x45,
7294 0x00, 0x96, 0x7e, 0x59, 0x36, 0x00, 0x96, 0x7f,
7295 0x4d, 0xf7, 0x00, 0x96, 0x81, 0x4d, 0xf8, 0x00,
7296 0x96, 0x82, 0x49, 0xce, 0x00, 0x96, 0x83, 0x4d,
7297 0xf9, 0x00, 0x96, 0x84, 0x3b, 0xa1, 0x00, 0x96,
7298 0x85, 0x06, 0xf1, 0x00, 0x96, 0x86, 0x0f, 0x7c,
7299 0x00, 0x96, 0x88, 0x06, 0xfe, 0x00, 0x96, 0x89,
7300 0x4d, 0xfa, 0x00, 0x96, 0x8a, 0x0b, 0x42, 0x00,
7301 0x96, 0x8b, 0x18, 0x6c, 0x00, 0x96, 0x8d, 0x1b,
7302 0xbf, 0x00, 0x96, 0x8e, 0x05, 0x8a, 0x00, 0x96,
7303 0x8f, 0x0a, 0x35, 0x00, 0x96, 0x91, 0x59, 0x37,
7304 0x00, 0x96, 0x94, 0x05, 0xb4, 0x00, 0x96, 0x95,
7305 0x1b, 0xc1, 0x00, 0x96, 0x96, 0x4d, 0xfb, 0x00,
7306 0x96, 0x97, 0x1b, 0xc2, 0x00, 0x96, 0x98, 0x1b,
7307 0xc0, 0x00, 0x96, 0x99, 0x07, 0x3a, 0x00, 0x96,
7308 0x9a, 0x49, 0xd0, 0x00, 0x96, 0x9b, 0x08, 0x4d,
7309 0x00, 0x96, 0x9c, 0x09, 0xcb, 0x00, 0x96, 0x9d,
7310 0x21, 0xf0, 0x00, 0x96, 0x9f, 0x59, 0x38, 0x00,
7311 0x96, 0xa0, 0x04, 0xc5, 0x00, 0x96, 0xa3, 0x0f,
7312 0xa1, 0x00, 0x96, 0xa4, 0x3b, 0xa2, 0x00, 0x96,
7313 0xa5, 0x43, 0x21, 0x00, 0x96, 0xa6, 0x59, 0x39,
7314 0x00, 0x96, 0xa7, 0x1b, 0xc4, 0x00, 0x96, 0xa8,
7315 0x1b, 0x0b, 0x00, 0x96, 0xa9, 0x3b, 0xa3, 0x00,
7316 0x96, 0xaa, 0x1b, 0xc3, 0x00, 0x96, 0xae, 0x4d,
7317 0xfc, 0x00, 0x96, 0xaf, 0x21, 0xf1, 0x00, 0x96,
7318 0xb0, 0x1b, 0xc7, 0x00, 0x96, 0xb1, 0x1b, 0xc5,
7319 0x00, 0x96, 0xb2, 0x1b, 0xc6, 0x00, 0x96, 0xb3,
7320 0x49, 0xd3, 0x00, 0x96, 0xb4, 0x1b, 0xc8, 0x00,
7321 0x96, 0xb6, 0x1b, 0xc9, 0x00, 0x96, 0xb7, 0x0f,
7322 0xb4, 0x00, 0x96, 0xb8, 0x1b, 0xca, 0x00, 0x96,
7323 0xb9, 0x1b, 0xcb, 0x00, 0x96, 0xba, 0x49, 0xd4,
7324 0x00, 0x96, 0xbb, 0x0a, 0x6d, 0x00, 0x96, 0xbc,
7325 0x0d, 0x4f, 0x00, 0x96, 0xbd, 0x49, 0xd5, 0x00,
7326 0x96, 0xc0, 0x0a, 0x43, 0x00, 0x96, 0xc1, 0x06,
7327 0x23, 0x00, 0x96, 0xc4, 0x0f, 0x24, 0x00, 0x96,
7328 0xc5, 0x05, 0x6d, 0x00, 0x96, 0xc6, 0x09, 0x42,
7329 0x00, 0x96, 0xc7, 0x07, 0x8f, 0x00, 0x96, 0xc9,
7330 0x1b, 0xce, 0x00, 0x96, 0xca, 0x59, 0x3a, 0x00,
7331 0x96, 0xcb, 0x1b, 0xcd, 0x00, 0x96, 0xcc, 0x08,
7332 0xc1, 0x00, 0x96, 0xcd, 0x1b, 0xcf, 0x00, 0x96,
7333 0xce, 0x1b, 0xcc, 0x00, 0x96, 0xd1, 0x08, 0x76,
7334 0x00, 0x96, 0xd2, 0x3b, 0xa4, 0x00, 0x96, 0xd5,
7335 0x1b, 0xd3, 0x00, 0x96, 0xd6, 0x19, 0x92, 0x00,
7336 0x96, 0xd8, 0x49, 0xd8, 0x00, 0x96, 0xd9, 0x10,
7337 0xeb, 0x00, 0x96, 0xda, 0x49, 0xd9, 0x00, 0x96,
7338 0xdb, 0x0a, 0x3d, 0x00, 0x96, 0xdc, 0x1b, 0xd1,
7339 0x00, 0x96, 0xdd, 0x49, 0xda, 0x00, 0x96, 0xde,
7340 0x3b, 0xa6, 0x00, 0x96, 0xdf, 0x59, 0x3c, 0x00,
7341 0x96, 0xe2, 0x0f, 0x6d, 0x00, 0x96, 0xe3, 0x34,
7342 0x3e, 0x00, 0x96, 0xe8, 0x04, 0xcd, 0x00, 0x96,
7343 0xe9, 0x3b, 0xa7, 0x00, 0x96, 0xea, 0x0a, 0x87,
7344 0x00, 0x96, 0xeb, 0x08, 0xe2, 0x00, 0x96, 0xef,
7345 0x43, 0x22, 0x00, 0x96, 0xf0, 0x0e, 0x07, 0x00,
7346 0x96, 0xf1, 0x3b, 0xa8, 0x00, 0x96, 0xf2, 0x04,
7347 0xe2, 0x00, 0x96, 0xf6, 0x0f, 0xb5, 0x00, 0x96,
7348 0xf7, 0x0f, 0x55, 0x00, 0x96, 0xf9, 0x1b, 0xd4,
7349 0x00, 0x96, 0xfa, 0x59, 0x3d, 0x00, 0x96, 0xfb,
7350 0x0c, 0x3f, 0x00, 0x97, 0x00, 0x09, 0x27, 0x00,
7351 0x97, 0x02, 0x3b, 0xa9, 0x00, 0x97, 0x03, 0x4d,
7352 0xfd, 0x00, 0x97, 0x04, 0x1b, 0xd5, 0x00, 0x97,
7353 0x05, 0x59, 0x3e, 0x00, 0x97, 0x06, 0x1b, 0xd6,
7354 0x00, 0x97, 0x07, 0x0a, 0x12, 0x00, 0x97, 0x08,
7355 0x1b, 0xd7, 0x00, 0x97, 0x09, 0x3b, 0xaa, 0x00,
7356 0x97, 0x0a, 0x0f, 0xb6, 0x00, 0x97, 0x0d, 0x1b,
7357 0xd2, 0x00, 0x97, 0x0e, 0x1b, 0xd9, 0x00, 0x97,
7358 0x0f, 0x1b, 0xdb, 0x00, 0x97, 0x11, 0x1b, 0xda,
7359 0x00, 0x97, 0x13, 0x1b, 0xd8, 0x00, 0x97, 0x14,
7360 0x49, 0xdc, 0x00, 0x97, 0x16, 0x1b, 0xdc, 0x00,
7361 0x97, 0x19, 0x1b, 0xdd, 0x00, 0x97, 0x1a, 0x59,
7362 0x3f, 0x00, 0x97, 0x1b, 0x4d, 0xfe, 0x00, 0x97,
7363 0x1c, 0x0a, 0xfc, 0x00, 0x97, 0x1d, 0x59, 0x40,
7364 0x00, 0x97, 0x1e, 0x05, 0x62, 0x00, 0x97, 0x21,
7365 0x4d, 0xff, 0x00, 0x97, 0x22, 0x4e, 0x00, 0x00,
7366 0x97, 0x23, 0x49, 0xdd, 0x00, 0x97, 0x24, 0x1b,
7367 0xde, 0x00, 0x97, 0x27, 0x0e, 0xc4, 0x00, 0x97,
7368 0x28, 0x4e, 0x01, 0x00, 0x97, 0x2a, 0x1b, 0xdf,
7369 0x00, 0x97, 0x30, 0x1b, 0xe0, 0x00, 0x97, 0x31,
7370 0x4e, 0x02, 0x00, 0x97, 0x32, 0x0f, 0xd0, 0x00,
7371 0x97, 0x33, 0x21, 0xf2, 0x00, 0x97, 0x36, 0x49,
7372 0xdf, 0x00, 0x97, 0x38, 0x14, 0x14, 0x00, 0x97,
7373 0x39, 0x1b, 0xe1, 0x00, 0x97, 0x3b, 0x21, 0xf3,
7374 0x00, 0x97, 0x3d, 0x1b, 0xe2, 0x00, 0x97, 0x3e,
7375 0x1b, 0xe3, 0x00, 0x97, 0x41, 0x49, 0xe0, 0x00,
7376 0x97, 0x42, 0x1b, 0xe7, 0x00, 0x97, 0x43, 0x21,
7377 0xf4, 0x00, 0x97, 0x44, 0x1b, 0xe4, 0x00, 0x97,
7378 0x46, 0x1b, 0xe5, 0x00, 0x97, 0x47, 0x49, 0xe1,
7379 0x00, 0x97, 0x48, 0x1b, 0xe6, 0x00, 0x97, 0x49,
7380 0x1b, 0xe8, 0x00, 0x97, 0x4a, 0x59, 0x42, 0x00,
7381 0x97, 0x4d, 0x21, 0xf5, 0x00, 0x97, 0x4e, 0x43,
7382 0x23, 0x00, 0x97, 0x4f, 0x21, 0xf6, 0x00, 0x97,
7383 0x51, 0x21, 0xf7, 0x00, 0x97, 0x52, 0x0a, 0x68,
7384 0x00, 0x97, 0x55, 0x4f, 0x5a, 0x00, 0x97, 0x56,
7385 0x0f, 0x03, 0x00, 0x97, 0x57, 0x49, 0xe2, 0x00,
7386 0x97, 0x58, 0x59, 0x43, 0x00, 0x97, 0x59, 0x0a,
7387 0x69, 0x00, 0x97, 0x5a, 0x3b, 0xab, 0x00, 0x97,
7388 0x5b, 0x49, 0xe3, 0x00, 0x97, 0x5c, 0x1b, 0xe9,
7389 0x00, 0x97, 0x5e, 0x0d, 0x87, 0x00, 0x97, 0x60,
7390 0x1b, 0xea, 0x00, 0x97, 0x61, 0x1d, 0x06, 0x00,
7391 0x97, 0x62, 0x0e, 0xd8, 0x00, 0x97, 0x63, 0x3b,
7392 0xac, 0x00, 0x97, 0x64, 0x1b, 0xeb, 0x00, 0x97,
7393 0x66, 0x1b, 0xec, 0x00, 0x97, 0x67, 0x4e, 0x03,
7394 0x00, 0x97, 0x68, 0x1b, 0xed, 0x00, 0x97, 0x69,
7395 0x05, 0xb5, 0x00, 0x97, 0x6a, 0x49, 0xe4, 0x00,
7396 0x97, 0x6b, 0x1b, 0xef, 0x00, 0x97, 0x6d, 0x0a,
7397 0x1f, 0x00, 0x97, 0x6e, 0x3b, 0xad, 0x00, 0x97,
7398 0x71, 0x1b, 0xf0, 0x00, 0x97, 0x73, 0x3b, 0xae,
7399 0x00, 0x97, 0x74, 0x06, 0xfa, 0x00, 0x97, 0x76,
7400 0x4e, 0x04, 0x00, 0x97, 0x77, 0x59, 0x44, 0x00,
7401 0x97, 0x78, 0x59, 0x45, 0x00, 0x97, 0x79, 0x1b,
7402 0xf1, 0x00, 0x97, 0x7a, 0x1b, 0xf5, 0x00, 0x97,
7403 0x7b, 0x59, 0x46, 0x00, 0x97, 0x7c, 0x1b, 0xf3,
7404 0x00, 0x97, 0x7d, 0x4e, 0x05, 0x00, 0x97, 0x7f,
7405 0x4e, 0x06, 0x00, 0x97, 0x80, 0x59, 0x47, 0x00,
7406 0x97, 0x81, 0x1b, 0xf4, 0x00, 0x97, 0x84, 0x05,
7407 0xd1, 0x00, 0x97, 0x85, 0x1b, 0xf2, 0x00, 0x97,
7408 0x86, 0x1b, 0xf6, 0x00, 0x97, 0x89, 0x59, 0x48,
7409 0x00, 0x97, 0x8b, 0x1b, 0xf7, 0x00, 0x97, 0x8d,
7410 0x04, 0x8c, 0x00, 0x97, 0x8f, 0x1b, 0xf8, 0x00,
7411 0x97, 0x90, 0x1b, 0xf9, 0x00, 0x97, 0x95, 0x43,
7412 0x24, 0x00, 0x97, 0x96, 0x49, 0xe7, 0x00, 0x97,
7413 0x97, 0x59, 0x49, 0x00, 0x97, 0x98, 0x09, 0xcc,
7414 0x00, 0x97, 0x99, 0x4e, 0x07, 0x00, 0x97, 0x9a,
7415 0x3b, 0xaf, 0x00, 0x97, 0x9c, 0x1b, 0xfa, 0x00,
7416 0x97, 0x9e, 0x49, 0xe8, 0x00, 0x97, 0x9f, 0x4e,
7417 0x08, 0x00, 0x97, 0xa0, 0x06, 0x61, 0x00, 0x97,
7418 0xa2, 0x3b, 0xb0, 0x00, 0x97, 0xa3, 0x1b, 0xfd,
7419 0x00, 0x97, 0xa6, 0x1b, 0xfc, 0x00, 0x97, 0xa8,
7420 0x1b, 0xfb, 0x00, 0x97, 0xab, 0x1a, 0x34, 0x00,
7421 0x97, 0xac, 0x4e, 0x09, 0x00, 0x97, 0xad, 0x0e,
7422 0x2c, 0x00, 0x97, 0xae, 0x43, 0x25, 0x00, 0x97,
7423 0xb1, 0x49, 0xe9, 0x00, 0x97, 0xb2, 0x49, 0xea,
7424 0x00, 0x97, 0xb3, 0x1b, 0xfe, 0x00, 0x97, 0xb4,
7425 0x1b, 0xff, 0x00, 0x97, 0xb5, 0x3b, 0xb1, 0x00,
7426 0x97, 0xb6, 0x3b, 0xb2, 0x00, 0x97, 0xb8, 0x59,
7427 0x4a, 0x00, 0x97, 0xb9, 0x4e, 0x0a, 0x00, 0x97,
7428 0xba, 0x43, 0x26, 0x00, 0x97, 0xbc, 0x59, 0x4b,
7429 0x00, 0x97, 0xbe, 0x49, 0xeb, 0x00, 0x97, 0xbf,
7430 0x59, 0x4c, 0x00, 0x97, 0xc1, 0x43, 0x27, 0x00,
7431 0x97, 0xc3, 0x1c, 0x00, 0x00, 0x97, 0xc4, 0x59,
7432 0x4d, 0x00, 0x97, 0xc5, 0x59, 0x4e, 0x00, 0x97,
7433 0xc6, 0x1c, 0x01, 0x00, 0x97, 0xc7, 0x59, 0x4f,
7434 0x00, 0x97, 0xc8, 0x1c, 0x02, 0x00, 0x97, 0xc9,
7435 0x43, 0x28, 0x00, 0x97, 0xca, 0x59, 0x50, 0x00,
7436 0x97, 0xcb, 0x1c, 0x03, 0x00, 0x97, 0xcc, 0x49,
7437 0xec, 0x00, 0x97, 0xcd, 0x4e, 0x0b, 0x00, 0x97,
7438 0xce, 0x59, 0x51, 0x00, 0x97, 0xd0, 0x59, 0x52,
7439 0x00, 0x97, 0xd1, 0x49, 0xed, 0x00, 0x97, 0xd3,
7440 0x06, 0x16, 0x00, 0x97, 0xd4, 0x49, 0xee, 0x00,
7441 0x97, 0xd7, 0x59, 0x53, 0x00, 0x97, 0xd8, 0x49,
7442 0xef, 0x00, 0x97, 0xd9, 0x3b, 0xb3, 0x00, 0x97,
7443 0xdb, 0x43, 0x29, 0x00, 0x97, 0xdc, 0x1c, 0x04,
7444 0x00, 0x97, 0xdd, 0x59, 0x54, 0x00, 0x97, 0xde,
7445 0x3b, 0xb4, 0x00, 0x97, 0xe0, 0x4e, 0x0c, 0x00,
7446 0x97, 0xe1, 0x49, 0xf0, 0x00, 0x97, 0xe4, 0x59,
7447 0x55, 0x00, 0x97, 0xed, 0x1c, 0x05, 0x00, 0x97,
7448 0xee, 0x0c, 0xd9, 0x00, 0x97, 0xef, 0x4e, 0x0d,
7449 0x00, 0x97, 0xf1, 0x49, 0xf1, 0x00, 0x97, 0xf2,
7450 0x1c, 0x07, 0x00, 0x97, 0xf3, 0x05, 0x3b, 0x00,
7451 0x97, 0xf4, 0x3b, 0xb5, 0x00, 0x97, 0xf5, 0x1c,
7452 0x0a, 0x00, 0x97, 0xf6, 0x1c, 0x09, 0x00, 0x97,
7453 0xf7, 0x59, 0x56, 0x00, 0x97, 0xf8, 0x59, 0x57,
7454 0x00, 0x97, 0xfa, 0x59, 0x58, 0x00, 0x97, 0xfb,
7455 0x04, 0xc6, 0x00, 0x97, 0xff, 0x06, 0xb9, 0x00,
7456 0x98, 0x01, 0x0e, 0x17, 0x00, 0x98, 0x02, 0x0b,
7457 0xd6, 0x00, 0x98, 0x03, 0x08, 0x12, 0x00, 0x98,
7458 0x04, 0x49, 0xf2, 0x00, 0x98, 0x05, 0x07, 0xf2,
7459 0x00, 0x98, 0x06, 0x09, 0x71, 0x00, 0x98, 0x07,
7460 0x4e, 0x0e, 0x00, 0x98, 0x08, 0x0a, 0x22, 0x00,
7461 0x98, 0x0a, 0x3b, 0xb6, 0x00, 0x98, 0x0c, 0x1c,
7462 0x0c, 0x00, 0x98, 0x0d, 0x49, 0xf3, 0x00, 0x98,
7463 0x0e, 0x3b, 0xb7, 0x00, 0x98, 0x0f, 0x1c, 0x0b,
7464 0x00, 0x98, 0x10, 0x0f, 0x2c, 0x00, 0x98, 0x11,
7465 0x06, 0x24, 0x00, 0x98, 0x12, 0x0d, 0x66, 0x00,
7466 0x98, 0x13, 0x0c, 0xb4, 0x00, 0x98, 0x14, 0x49,
7467 0xf4, 0x00, 0x98, 0x16, 0x49, 0xf5, 0x00, 0x98,
7468 0x17, 0x0a, 0x42, 0x00, 0x98, 0x18, 0x0f, 0x96,
7469 0x00, 0x98, 0x19, 0x59, 0x59, 0x00, 0x98, 0x1a,
7470 0x07, 0x31, 0x00, 0x98, 0x1c, 0x59, 0x5a, 0x00,
7471 0x98, 0x1e, 0x3b, 0xb8, 0x00, 0x98, 0x20, 0x59,
7472 0x5b, 0x00, 0x98, 0x21, 0x1c, 0x0f, 0x00, 0x98,
7473 0x23, 0x3b, 0xb9, 0x00, 0x98, 0x24, 0x1c, 0x0e,
7474 0x00, 0x98, 0x25, 0x49, 0xfa, 0x00, 0x98, 0x26,
7475 0x4e, 0x0f, 0x00, 0x98, 0x2b, 0x3b, 0xba, 0x00,
7476 0x98, 0x2c, 0x0e, 0x79, 0x00, 0x98, 0x2d, 0x0c,
7477 0x84, 0x00, 0x98, 0x2e, 0x4e, 0x10, 0x00, 0x98,
7478 0x2f, 0x59, 0x5c, 0x00, 0x98, 0x30, 0x1e, 0x73,
7479 0x00, 0x98, 0x32, 0x49, 0xf8, 0x00, 0x98, 0x33,
7480 0x49, 0xf9, 0x00, 0x98, 0x34, 0x04, 0xf2, 0x00,
7481 0x98, 0x35, 0x59, 0x5d, 0x00, 0x98, 0x37, 0x1c,
7482 0x10, 0x00, 0x98, 0x38, 0x1c, 0x0d, 0x00, 0x98,
7483 0x39, 0x37, 0xb3, 0x00, 0x98, 0x3b, 0x1e, 0x6c,
7484 0x00, 0x98, 0x3c, 0x0f, 0x54, 0x00, 0x98, 0x3d,
7485 0x1c, 0x11, 0x00, 0x98, 0x3e, 0x3b, 0xbb, 0x00,
7486 0x98, 0x44, 0x59, 0x5e, 0x00, 0x98, 0x46, 0x1c,
7487 0x12, 0x00, 0x98, 0x47, 0x49, 0xfb, 0x00, 0x98,
7488 0x4a, 0x59, 0x5f, 0x00, 0x98, 0x4b, 0x1c, 0x14,
7489 0x00, 0x98, 0x4c, 0x0b, 0x4a, 0x00, 0x98, 0x4d,
7490 0x05, 0xb9, 0x00, 0x98, 0x4e, 0x05, 0xba, 0x00,
7491 0x98, 0x4f, 0x1c, 0x13, 0x00, 0x98, 0x51, 0x59,
7492 0x60, 0x00, 0x98, 0x52, 0x3b, 0xbc, 0x00, 0x98,
7493 0x53, 0x3b, 0xbd, 0x00, 0x98, 0x54, 0x06, 0x25,
7494 0x00, 0x98, 0x55, 0x07, 0x66, 0x00, 0x98, 0x56,
7495 0x43, 0x2a, 0x00, 0x98, 0x57, 0x21, 0xf9, 0x00,
7496 0x98, 0x58, 0x06, 0x26, 0x00, 0x98, 0x59, 0x3b,
7497 0xbe, 0x00, 0x98, 0x5a, 0x1e, 0x48, 0x00, 0x98,
7498 0x5b, 0x0c, 0x39, 0x00, 0x98, 0x5e, 0x34, 0x54,
7499 0x00, 0x98, 0x62, 0x4e, 0x11, 0x00, 0x98, 0x63,
7500 0x4e, 0x12, 0x00, 0x98, 0x65, 0x21, 0xfa, 0x00,
7501 0x98, 0x66, 0x49, 0xfc, 0x00, 0x98, 0x67, 0x07,
7502 0x90, 0x00, 0x98, 0x6a, 0x59, 0x61, 0x00, 0x98,
7503 0x6b, 0x1c, 0x15, 0x00, 0x98, 0x6c, 0x3b, 0xbf,
7504 0x00, 0x98, 0x6f, 0x1c, 0x16, 0x00, 0x98, 0x70,
7505 0x1c, 0x17, 0x00, 0x98, 0x71, 0x1c, 0x18, 0x00,
7506 0x98, 0x73, 0x1c, 0x1a, 0x00, 0x98, 0x74, 0x1c,
7507 0x19, 0x00, 0x98, 0xa8, 0x0d, 0xe9, 0x00, 0x98,
7508 0xaa, 0x1c, 0x1b, 0x00, 0x98, 0xab, 0x49, 0xfd,
7509 0x00, 0x98, 0xad, 0x49, 0xfe, 0x00, 0x98, 0xae,
7510 0x59, 0x62, 0x00, 0x98, 0xaf, 0x1c, 0x1c, 0x00,
7511 0x98, 0xb0, 0x49, 0xff, 0x00, 0x98, 0xb1, 0x1c,
7512 0x1d, 0x00, 0x98, 0xb4, 0x4e, 0x13, 0x00, 0x98,
7513 0xb6, 0x1c, 0x1e, 0x00, 0x98, 0xb7, 0x4a, 0x01,
7514 0x00, 0x98, 0xb8, 0x3b, 0xc0, 0x00, 0x98, 0xba,
7515 0x3b, 0xc1, 0x00, 0x98, 0xbb, 0x4a, 0x02, 0x00,
7516 0x98, 0xbc, 0x4a, 0x03, 0x00, 0x98, 0xbf, 0x3b,
7517 0xc2, 0x00, 0x98, 0xc2, 0x4a, 0x04, 0x00, 0x98,
7518 0xc3, 0x1c, 0x20, 0x00, 0x98, 0xc4, 0x1c, 0x1f,
7519 0x00, 0x98, 0xc5, 0x4e, 0x14, 0x00, 0x98, 0xc6,
7520 0x1c, 0x21, 0x00, 0x98, 0xc7, 0x4a, 0x05, 0x00,
7521 0x98, 0xc8, 0x3b, 0xc3, 0x00, 0x98, 0xcb, 0x4a,
7522 0x06, 0x00, 0x98, 0xcc, 0x59, 0x63, 0x00, 0x98,
7523 0xdb, 0x0d, 0x88, 0x00, 0x98, 0xdc, 0x18, 0x39,
7524 0x00, 0x98, 0xdf, 0x09, 0xef, 0x00, 0x98, 0xe0,
7525 0x36, 0x18, 0x00, 0x98, 0xe1, 0x4a, 0x07, 0x00,
7526 0x98, 0xe2, 0x06, 0x4c, 0x00, 0x98, 0xe3, 0x4a,
7527 0x08, 0x00, 0x98, 0xe5, 0x3b, 0xc4, 0x00, 0x98,
7528 0xe6, 0x59, 0x64, 0x00, 0x98, 0xe7, 0x43, 0x2b,
7529 0x00, 0x98, 0xe9, 0x1c, 0x22, 0x00, 0x98, 0xea,
7530 0x4a, 0x09, 0x00, 0x98, 0xeb, 0x1c, 0x23, 0x00,
7531 0x98, 0xed, 0x10, 0xc1, 0x00, 0x98, 0xee, 0x14,
7532 0xda, 0x00, 0x98, 0xef, 0x21, 0xfb, 0x00, 0x98,
7533 0xf0, 0x4a, 0x0a, 0x00, 0x98, 0xf1, 0x4a, 0x0b,
7534 0x00, 0x98, 0xf2, 0x04, 0xbf, 0x00, 0x98, 0xf3,
7535 0x4a, 0x0c, 0x00, 0x98, 0xf4, 0x04, 0x7f, 0x00,
7536 0x98, 0xf6, 0x59, 0x65, 0x00, 0x98, 0xfc, 0x08,
7537 0xc2, 0x00, 0x98, 0xfd, 0x0e, 0x5e, 0x00, 0x98,
7538 0xfe, 0x09, 0xe6, 0x00, 0x99, 0x02, 0x4e, 0x15,
7539 0x00, 0x99, 0x03, 0x1c, 0x24, 0x00, 0x99, 0x05,
7540 0x0e, 0xeb, 0x00, 0x99, 0x07, 0x59, 0x66, 0x00,
7541 0x99, 0x08, 0x4a, 0x0d, 0x00, 0x99, 0x09, 0x1c,
7542 0x25, 0x00, 0x99, 0x0a, 0x0f, 0x46, 0x00, 0x99,
7543 0x0c, 0x04, 0xe4, 0x00, 0x99, 0x10, 0x08, 0x8f,
7544 0x00, 0x99, 0x11, 0x4e, 0x16, 0x00, 0x99, 0x12,
7545 0x1c, 0x26, 0x00, 0x99, 0x13, 0x05, 0x6e, 0x00,
7546 0x99, 0x14, 0x1c, 0x27, 0x00, 0x99, 0x15, 0x4e,
7547 0x17, 0x00, 0x99, 0x16, 0x4a, 0x10, 0x00, 0x99,
7548 0x17, 0x4a, 0x11, 0x00, 0x99, 0x18, 0x1c, 0x28,
7549 0x00, 0x99, 0x1a, 0x4a, 0x13, 0x00, 0x99, 0x1b,
7550 0x4a, 0x14, 0x00, 0x99, 0x1c, 0x4a, 0x15, 0x00,
7551 0x99, 0x1d, 0x1c, 0x2a, 0x00, 0x99, 0x1e, 0x1c,
7552 0x2b, 0x00, 0x99, 0x1f, 0x59, 0x67, 0x00, 0x99,
7553 0x20, 0x1c, 0x2d, 0x00, 0x99, 0x21, 0x1c, 0x29,
7554 0x00, 0x99, 0x22, 0x59, 0x68, 0x00, 0x99, 0x24,
7555 0x1c, 0x2c, 0x00, 0x99, 0x26, 0x59, 0x69, 0x00,
7556 0x99, 0x27, 0x21, 0xfd, 0x00, 0x99, 0x28, 0x06,
7557 0x17, 0x00, 0x99, 0x2b, 0x59, 0x6a, 0x00, 0x99,
7558 0x2c, 0x1c, 0x2e, 0x00, 0x99, 0x2e, 0x1c, 0x2f,
7559 0x00, 0x99, 0x31, 0x4a, 0x17, 0x00, 0x99, 0x32,
7560 0x3b, 0xc5, 0x00, 0x99, 0x33, 0x3b, 0xc6, 0x00,
7561 0x99, 0x34, 0x59, 0x6b, 0x00, 0x99, 0x35, 0x4e,
7562 0x18, 0x00, 0x99, 0x39, 0x59, 0x6c, 0x00, 0x99,
7563 0x3a, 0x4a, 0x18, 0x00, 0x99, 0x3b, 0x4a, 0x19,
7564 0x00, 0x99, 0x3c, 0x4a, 0x1a, 0x00, 0x99, 0x3d,
7565 0x1c, 0x30, 0x00, 0x99, 0x3e, 0x1c, 0x31, 0x00,
7566 0x99, 0x40, 0x3b, 0xc7, 0x00, 0x99, 0x41, 0x4a,
7567 0x1b, 0x00, 0x99, 0x42, 0x1c, 0x32, 0x00, 0x99,
7568 0x45, 0x1c, 0x34, 0x00, 0x99, 0x46, 0x4a, 0x1c,
7569 0x00, 0x99, 0x47, 0x59, 0x6d, 0x00, 0x99, 0x48,
7570 0x4e, 0x19, 0x00, 0x99, 0x49, 0x1c, 0x33, 0x00,
7571 0x99, 0x4b, 0x1c, 0x36, 0x00, 0x99, 0x4c, 0x1c,
7572 0x39, 0x00, 0x99, 0x4d, 0x3b, 0xc8, 0x00, 0x99,
7573 0x4e, 0x4a, 0x1d, 0x00, 0x99, 0x50, 0x1c, 0x35,
7574 0x00, 0x99, 0x51, 0x1c, 0x37, 0x00, 0x99, 0x52,
7575 0x1c, 0x38, 0x00, 0x99, 0x54, 0x4e, 0x1a, 0x00,
7576 0x99, 0x55, 0x1c, 0x3a, 0x00, 0x99, 0x57, 0x06,
7577 0xba, 0x00, 0x99, 0x58, 0x43, 0x2c, 0x00, 0x99,
7578 0x59, 0x59, 0x6e, 0x00, 0x99, 0x5b, 0x59, 0x6f,
7579 0x00, 0x99, 0x5c, 0x3b, 0xc9, 0x00, 0x99, 0x5e,
7580 0x4e, 0x1b, 0x00, 0x99, 0x5f, 0x3b, 0xca, 0x00,
7581 0x99, 0x60, 0x4a, 0x1e, 0x00, 0x99, 0x96, 0x09,
7582 0x1f, 0x00, 0x99, 0x97, 0x1c, 0x3b, 0x00, 0x99,
7583 0x98, 0x1c, 0x3c, 0x00, 0x99, 0x99, 0x07, 0xf3,
7584 0x00, 0x99, 0x9b, 0x59, 0x70, 0x00, 0x99, 0x9d,
7585 0x59, 0x71, 0x00, 0x99, 0x9e, 0x21, 0xff, 0x00,
7586 0x99, 0x9f, 0x59, 0x72, 0x00, 0x99, 0xa3, 0x4a,
7587 0x1f, 0x00, 0x99, 0xa5, 0x1c, 0x3d, 0x00, 0x99,
7588 0xa6, 0x4a, 0x20, 0x00, 0x99, 0xa8, 0x05, 0x9c,
7589 0x00, 0x99, 0xac, 0x0d, 0x05, 0x00, 0x99, 0xad,
7590 0x1c, 0x3e, 0x00, 0x99, 0xae, 0x1c, 0x3f, 0x00,
7591 0x99, 0xb0, 0x59, 0x73, 0x00, 0x99, 0xb1, 0x3b,
7592 0xcb, 0x00, 0x99, 0xb2, 0x59, 0x74, 0x00, 0x99,
7593 0xb3, 0x0b, 0x98, 0x00, 0x99, 0xb4, 0x0c, 0xc3,
7594 0x00, 0x99, 0xb5, 0x59, 0x75, 0x00, 0x99, 0xb9,
7595 0x3b, 0xcc, 0x00, 0x99, 0xba, 0x3b, 0xcd, 0x00,
7596 0x99, 0xbc, 0x1c, 0x40, 0x00, 0x99, 0xbd, 0x4a,
7597 0x21, 0x00, 0x99, 0xbf, 0x4a, 0x22, 0x00, 0x99,
7598 0xc1, 0x0d, 0x33, 0x00, 0x99, 0xc3, 0x4a, 0x23,
7599 0x00, 0x99, 0xc4, 0x0b, 0x2c, 0x00, 0x99, 0xc5,
7600 0x04, 0xfa, 0x00, 0x99, 0xc6, 0x06, 0xe6, 0x00,
7601 0x99, 0xc8, 0x06, 0xe7, 0x00, 0x99, 0xc9, 0x3b,
7602 0xce, 0x00, 0x99, 0xd0, 0x0b, 0xb1, 0x00, 0x99,
7603 0xd1, 0x1c, 0x45, 0x00, 0x99, 0xd2, 0x06, 0xe8,
7604 0x00, 0x99, 0xd3, 0x59, 0x76, 0x00, 0x99, 0xd4,
7605 0x4a, 0x24, 0x00, 0x99, 0xd5, 0x05, 0x6f, 0x00,
7606 0x99, 0xd8, 0x1c, 0x44, 0x00, 0x99, 0xd9, 0x4a,
7607 0x25, 0x00, 0x99, 0xda, 0x59, 0x77, 0x00, 0x99,
7608 0xdb, 0x1c, 0x42, 0x00, 0x99, 0xdc, 0x59, 0x78,
7609 0x00, 0x99, 0xdd, 0x1c, 0x43, 0x00, 0x99, 0xde,
7610 0x4a, 0x26, 0x00, 0x99, 0xdf, 0x1c, 0x41, 0x00,
7611 0x99, 0xe1, 0x4e, 0x1c, 0x00, 0x99, 0xe2, 0x1c,
7612 0x4f, 0x00, 0x99, 0xe7, 0x59, 0x79, 0x00, 0x99,
7613 0xea, 0x59, 0x7a, 0x00, 0x99, 0xeb, 0x59, 0x7b,
7614 0x00, 0x99, 0xec, 0x59, 0x7c, 0x00, 0x99, 0xed,
7615 0x1c, 0x46, 0x00, 0x99, 0xee, 0x1c, 0x47, 0x00,
7616 0x99, 0xf0, 0x4a, 0x28, 0x00, 0x99, 0xf1, 0x1c,
7617 0x48, 0x00, 0x99, 0xf2, 0x1c, 0x49, 0x00, 0x99,
7618 0xf4, 0x59, 0x7d, 0x00, 0x99, 0xf5, 0x59, 0x7e,
7619 0x00, 0x99, 0xf8, 0x1c, 0x4b, 0x00, 0x99, 0xf9,
7620 0x4a, 0x29, 0x00, 0x99, 0xfb, 0x1c, 0x4a, 0x00,
7621 0x99, 0xfc, 0x4a, 0x2a, 0x00, 0x99, 0xfd, 0x59,
7622 0x7f, 0x00, 0x99, 0xfe, 0x59, 0x80, 0x00, 0x99,
7623 0xff, 0x09, 0x63, 0x00, 0x9a, 0x01, 0x1c, 0x4c,
7624 0x00, 0x9a, 0x02, 0x3b, 0xcf, 0x00, 0x9a, 0x03,
7625 0x43, 0x2d, 0x00, 0x9a, 0x04, 0x59, 0x81, 0x00,
7626 0x9a, 0x05, 0x1c, 0x4e, 0x00, 0x9a, 0x08, 0x37,
7627 0xba, 0x00, 0x9a, 0x0a, 0x4a, 0x2b, 0x00, 0x9a,
7628 0x0b, 0x59, 0x82, 0x00, 0x9a, 0x0c, 0x4e, 0x1d,
7629 0x00, 0x9a, 0x0e, 0x06, 0x4d, 0x00, 0x9a, 0x0f,
7630 0x1c, 0x4d, 0x00, 0x9a, 0x10, 0x4e, 0x1e, 0x00,
7631 0x9a, 0x11, 0x4a, 0x2c, 0x00, 0x9a, 0x12, 0x0a,
7632 0xfd, 0x00, 0x9a, 0x13, 0x07, 0x67, 0x00, 0x9a,
7633 0x16, 0x3b, 0xd0, 0x00, 0x9a, 0x19, 0x1c, 0x50,
7634 0x00, 0x9a, 0x1a, 0x4a, 0x2d, 0x00, 0x9a, 0x1e,
7635 0x59, 0x83, 0x00, 0x9a, 0x20, 0x4a, 0x2e, 0x00,
7636 0x9a, 0x22, 0x59, 0x84, 0x00, 0x9a, 0x23, 0x4e,
7637 0x1f, 0x00, 0x9a, 0x24, 0x3b, 0xd1, 0x00, 0x9a,
7638 0x27, 0x3b, 0xd2, 0x00, 0x9a, 0x28, 0x0b, 0x2d,
7639 0x00, 0x9a, 0x2b, 0x1c, 0x51, 0x00, 0x9a, 0x2d,
7640 0x3b, 0xd3, 0x00, 0x9a, 0x2e, 0x3b, 0xd4, 0x00,
7641 0x9a, 0x30, 0x0c, 0x85, 0x00, 0x9a, 0x31, 0x4a,
7642 0x2f, 0x00, 0x9a, 0x33, 0x59, 0x85, 0x00, 0x9a,
7643 0x35, 0x59, 0x86, 0x00, 0x9a, 0x36, 0x3b, 0xd5,
7644 0x00, 0x9a, 0x37, 0x1c, 0x52, 0x00, 0x9a, 0x38,
7645 0x3b, 0xd6, 0x00, 0x9a, 0x3e, 0x1c, 0x57, 0x00,
7646 0x9a, 0x40, 0x1c, 0x55, 0x00, 0x9a, 0x41, 0x4e,
7647 0x20, 0x00, 0x9a, 0x42, 0x1c, 0x54, 0x00, 0x9a,
7648 0x43, 0x1c, 0x56, 0x00, 0x9a, 0x44, 0x4a, 0x30,
7649 0x00, 0x9a, 0x45, 0x1c, 0x53, 0x00, 0x9a, 0x47,
7650 0x59, 0x87, 0x00, 0x9a, 0x4a, 0x3b, 0xd7, 0x00,
7651 0x9a, 0x4b, 0x59, 0x89, 0x00, 0x9a, 0x4c, 0x4a,
7652 0x31, 0x00, 0x9a, 0x4d, 0x1c, 0x59, 0x00, 0x9a,
7653 0x4e, 0x22, 0x00, 0x00, 0x9a, 0x51, 0x4e, 0x21,
7654 0x00, 0x9a, 0x52, 0x1e, 0x2f, 0x00, 0x9a, 0x54,
7655 0x59, 0x8a, 0x00, 0x9a, 0x55, 0x1c, 0x58, 0x00,
7656 0x9a, 0x56, 0x3b, 0xd8, 0x00, 0x9a, 0x57, 0x1c,
7657 0x5b, 0x00, 0x9a, 0x58, 0x4a, 0x32, 0x00, 0x9a,
7658 0x5a, 0x06, 0xbb, 0x00, 0x9a, 0x5b, 0x1c, 0x5a,
7659 0x00, 0x9a, 0x5d, 0x59, 0x8b, 0x00, 0x9a, 0x5f,
7660 0x1c, 0x5c, 0x00, 0x9a, 0x62, 0x1c, 0x5d, 0x00,
7661 0x9a, 0x64, 0x1c, 0x5f, 0x00, 0x9a, 0x65, 0x1c,
7662 0x5e, 0x00, 0x9a, 0x69, 0x1c, 0x60, 0x00, 0x9a,
7663 0x6a, 0x1c, 0x62, 0x00, 0x9a, 0x6b, 0x1c, 0x61,
7664 0x00, 0x9a, 0xa8, 0x08, 0x0e, 0x00, 0x9a, 0xaa,
7665 0x59, 0x8c, 0x00, 0x9a, 0xac, 0x59, 0x8d, 0x00,
7666 0x9a, 0xad, 0x1c, 0x63, 0x00, 0x9a, 0xae, 0x59,
7667 0x8e, 0x00, 0x9a, 0xaf, 0x4a, 0x34, 0x00, 0x9a,
7668 0xb0, 0x1c, 0x64, 0x00, 0x9a, 0xb2, 0x59, 0x8f,
7669 0x00, 0x9a, 0xb4, 0x59, 0x90, 0x00, 0x9a, 0xb5,
7670 0x3b, 0xd9, 0x00, 0x9a, 0xb6, 0x3b, 0xda, 0x00,
7671 0x9a, 0xb7, 0x4a, 0x36, 0x00, 0x9a, 0xb8, 0x05,
7672 0x9a, 0x00, 0x9a, 0xb9, 0x4a, 0x38, 0x00, 0x9a,
7673 0xbb, 0x59, 0x91, 0x00, 0x9a, 0xbc, 0x1c, 0x65,
7674 0x00, 0x9a, 0xbd, 0x4e, 0x22, 0x00, 0x9a, 0xbe,
7675 0x4e, 0x23, 0x00, 0x9a, 0xbf, 0x59, 0x92, 0x00,
7676 0x9a, 0xc0, 0x1c, 0x66, 0x00, 0x9a, 0xc1, 0x43,
7677 0x2e, 0x00, 0x9a, 0xc3, 0x43, 0x2f, 0x00, 0x9a,
7678 0xc4, 0x0a, 0x37, 0x00, 0x9a, 0xc6, 0x4a, 0x3a,
7679 0x00, 0x9a, 0xc8, 0x59, 0x93, 0x00, 0x9a, 0xce,
7680 0x43, 0x30, 0x00, 0x9a, 0xcf, 0x1c, 0x67, 0x00,
7681 0x9a, 0xd0, 0x4a, 0x3b, 0x00, 0x9a, 0xd1, 0x1c,
7682 0x68, 0x00, 0x9a, 0xd2, 0x4a, 0x3c, 0x00, 0x9a,
7683 0xd3, 0x1c, 0x69, 0x00, 0x9a, 0xd4, 0x1c, 0x6a,
7684 0x00, 0x9a, 0xd5, 0x4a, 0x3d, 0x00, 0x9a, 0xd6,
7685 0x43, 0x31, 0x00, 0x9a, 0xd7, 0x59, 0x94, 0x00,
7686 0x9a, 0xd8, 0x07, 0xf4, 0x00, 0x9a, 0xd9, 0x22,
7687 0x01, 0x00, 0x9a, 0xdb, 0x59, 0x95, 0x00, 0x9a,
7688 0xdc, 0x22, 0x02, 0x00, 0x9a, 0xde, 0x1c, 0x6b,
7689 0x00, 0x9a, 0xdf, 0x1c, 0x6c, 0x00, 0x9a, 0xe0,
7690 0x4a, 0x3e, 0x00, 0x9a, 0xe2, 0x1c, 0x6d, 0x00,
7691 0x9a, 0xe3, 0x1c, 0x6e, 0x00, 0x9a, 0xe4, 0x59,
7692 0x96, 0x00, 0x9a, 0xe5, 0x4a, 0x3f, 0x00, 0x9a,
7693 0xe6, 0x1c, 0x6f, 0x00, 0x9a, 0xe7, 0x59, 0x97,
7694 0x00, 0x9a, 0xe9, 0x4a, 0x40, 0x00, 0x9a, 0xea,
7695 0x0d, 0x45, 0x00, 0x9a, 0xeb, 0x1c, 0x71, 0x00,
7696 0x9a, 0xec, 0x59, 0x98, 0x00, 0x9a, 0xed, 0x0d,
7697 0x98, 0x00, 0x9a, 0xee, 0x1c, 0x72, 0x00, 0x9a,
7698 0xef, 0x1c, 0x70, 0x00, 0x9a, 0xf1, 0x1c, 0x74,
7699 0x00, 0x9a, 0xf2, 0x59, 0x99, 0x00, 0x9a, 0xf3,
7700 0x59, 0x9a, 0x00, 0x9a, 0xf4, 0x1c, 0x73, 0x00,
7701 0x9a, 0xf5, 0x59, 0x9b, 0x00, 0x9a, 0xf7, 0x1c,
7702 0x75, 0x00, 0x9a, 0xf9, 0x3b, 0xdb, 0x00, 0x9a,
7703 0xfa, 0x59, 0x9c, 0x00, 0x9a, 0xfb, 0x1c, 0x76,
7704 0x00, 0x9a, 0xfd, 0x59, 0x9d, 0x00, 0x9a, 0xff,
7705 0x59, 0x9e, 0x00, 0x9b, 0x00, 0x59, 0x9f, 0x00,
7706 0x9b, 0x01, 0x4e, 0x24, 0x00, 0x9b, 0x02, 0x43,
7707 0x32, 0x00, 0x9b, 0x03, 0x3b, 0xdc, 0x00, 0x9b,
7708 0x04, 0x59, 0xa0, 0x00, 0x9b, 0x05, 0x59, 0xa1,
7709 0x00, 0x9b, 0x06, 0x1c, 0x77, 0x00, 0x9b, 0x08,
7710 0x43, 0x33, 0x00, 0x9b, 0x09, 0x4e, 0x25, 0x00,
7711 0x9b, 0x0b, 0x4e, 0x26, 0x00, 0x9b, 0x0c, 0x4a,
7712 0x41, 0x00, 0x9b, 0x0d, 0x4e, 0x27, 0x00, 0x9b,
7713 0x0e, 0x4e, 0x28, 0x00, 0x9b, 0x10, 0x4a, 0x42,
7714 0x00, 0x9b, 0x12, 0x4a, 0x43, 0x00, 0x9b, 0x16,
7715 0x4a, 0x44, 0x00, 0x9b, 0x18, 0x1c, 0x78, 0x00,
7716 0x9b, 0x19, 0x4e, 0x29, 0x00, 0x9b, 0x1a, 0x1c,
7717 0x79, 0x00, 0x9b, 0x1b, 0x59, 0xa2, 0x00, 0x9b,
7718 0x1c, 0x4a, 0x45, 0x00, 0x9b, 0x1d, 0x4f, 0x49,
7719 0x00, 0x9b, 0x1f, 0x1c, 0x7a, 0x00, 0x9b, 0x20,
7720 0x3b, 0xdd, 0x00, 0x9b, 0x22, 0x1c, 0x7b, 0x00,
7721 0x9b, 0x23, 0x1c, 0x7c, 0x00, 0x9b, 0x25, 0x1c,
7722 0x7d, 0x00, 0x9b, 0x26, 0x59, 0xa3, 0x00, 0x9b,
7723 0x27, 0x1c, 0x7e, 0x00, 0x9b, 0x28, 0x1c, 0x7f,
7724 0x00, 0x9b, 0x29, 0x1c, 0x80, 0x00, 0x9b, 0x2a,
7725 0x1c, 0x81, 0x00, 0x9b, 0x2b, 0x4a, 0x46, 0x00,
7726 0x9b, 0x2c, 0x4f, 0x4a, 0x00, 0x9b, 0x2d, 0x43,
7727 0x35, 0x00, 0x9b, 0x2e, 0x1c, 0x82, 0x00, 0x9b,
7728 0x2f, 0x1c, 0x83, 0x00, 0x9b, 0x31, 0x14, 0xd4,
7729 0x00, 0x9b, 0x32, 0x1c, 0x84, 0x00, 0x9b, 0x33,
7730 0x3b, 0xde, 0x00, 0x9b, 0x34, 0x3b, 0xdf, 0x00,
7731 0x9b, 0x35, 0x4e, 0x2a, 0x00, 0x9b, 0x37, 0x59,
7732 0xa5, 0x00, 0x9b, 0x39, 0x59, 0xa6, 0x00, 0x9b,
7733 0x3a, 0x59, 0xa7, 0x00, 0x9b, 0x3b, 0x17, 0xa9,
7734 0x00, 0x9b, 0x3c, 0x06, 0x4e, 0x00, 0x9b, 0x3d,
7735 0x4a, 0x47, 0x00, 0x9b, 0x41, 0x05, 0x7f, 0x00,
7736 0x9b, 0x42, 0x08, 0x22, 0x00, 0x9b, 0x43, 0x1c,
7737 0x86, 0x00, 0x9b, 0x44, 0x1c, 0x85, 0x00, 0x9b,
7738 0x45, 0x0e, 0xb1, 0x00, 0x9b, 0x48, 0x4e, 0x2b,
7739 0x00, 0x9b, 0x4b, 0x4a, 0x49, 0x00, 0x9b, 0x4c,
7740 0x59, 0xa8, 0x00, 0x9b, 0x4d, 0x1c, 0x88, 0x00,
7741 0x9b, 0x4e, 0x1c, 0x89, 0x00, 0x9b, 0x4f, 0x1c,
7742 0x87, 0x00, 0x9b, 0x51, 0x1c, 0x8a, 0x00, 0x9b,
7743 0x54, 0x0e, 0x90, 0x00, 0x9b, 0x55, 0x4e, 0x2c,
7744 0x00, 0x9b, 0x56, 0x59, 0xa9, 0x00, 0x9b, 0x57,
7745 0x59, 0xaa, 0x00, 0x9b, 0x58, 0x1c, 0x8b, 0x00,
7746 0x9b, 0x5a, 0x06, 0x95, 0x00, 0x9b, 0x5b, 0x59,
7747 0xab, 0x00, 0x9b, 0x5e, 0x43, 0x36, 0x00, 0x9b,
7748 0x61, 0x59, 0xac, 0x00, 0x9b, 0x63, 0x4a, 0x4a,
7749 0x00, 0x9b, 0x65, 0x4a, 0x4b, 0x00, 0x9b, 0x66,
7750 0x43, 0x37, 0x00, 0x9b, 0x68, 0x4e, 0x2d, 0x00,
7751 0x9b, 0x6a, 0x59, 0xad, 0x00, 0x9b, 0x6b, 0x4a,
7752 0x4c, 0x00, 0x9b, 0x6c, 0x4a, 0x4d, 0x00, 0x9b,
7753 0x6d, 0x59, 0xae, 0x00, 0x9b, 0x6e, 0x59, 0xaf,
7754 0x00, 0x9b, 0x6f, 0x0f, 0xcb, 0x00, 0x9b, 0x72,
7755 0x22, 0x04, 0x00, 0x9b, 0x73, 0x3b, 0xe0, 0x00,
7756 0x9b, 0x74, 0x1c, 0x8c, 0x00, 0x9b, 0x75, 0x22,
7757 0x03, 0x00, 0x9b, 0x76, 0x4a, 0x4e, 0x00, 0x9b,
7758 0x77, 0x4a, 0x4f, 0x00, 0x9b, 0x78, 0x59, 0xb0,
7759 0x00, 0x9b, 0x79, 0x3b, 0xe1, 0x00, 0x9b, 0x7f,
7760 0x59, 0xb1, 0x00, 0x9b, 0x80, 0x4e, 0x2e, 0x00,
7761 0x9b, 0x83, 0x1c, 0x8e, 0x00, 0x9b, 0x84, 0x43,
7762 0x38, 0x00, 0x9b, 0x85, 0x59, 0xb2, 0x00, 0x9b,
7763 0x86, 0x4e, 0x2f, 0x00, 0x9b, 0x87, 0x59, 0xb3,
7764 0x00, 0x9b, 0x89, 0x59, 0xb4, 0x00, 0x9b, 0x8a,
7765 0x43, 0x39, 0x00, 0x9b, 0x8b, 0x59, 0xb5, 0x00,
7766 0x9b, 0x8d, 0x59, 0xb6, 0x00, 0x9b, 0x8e, 0x04,
7767 0x82, 0x00, 0x9b, 0x8f, 0x22, 0x05, 0x00, 0x9b,
7768 0x90, 0x4e, 0x30, 0x00, 0x9b, 0x91, 0x1c, 0x8f,
7769 0x00, 0x9b, 0x92, 0x0d, 0xfb, 0x00, 0x9b, 0x93,
7770 0x1c, 0x8d, 0x00, 0x9b, 0x94, 0x59, 0xb7, 0x00,
7771 0x9b, 0x96, 0x1c, 0x90, 0x00, 0x9b, 0x97, 0x1c,
7772 0x91, 0x00, 0x9b, 0x9a, 0x59, 0xb8, 0x00, 0x9b,
7773 0x9d, 0x4e, 0x31, 0x00, 0x9b, 0x9e, 0x43, 0x3a,
7774 0x00, 0x9b, 0x9f, 0x1c, 0x92, 0x00, 0x9b, 0xa0,
7775 0x1c, 0x93, 0x00, 0x9b, 0xa6, 0x4a, 0x50, 0x00,
7776 0x9b, 0xa7, 0x3b, 0xe2, 0x00, 0x9b, 0xa8, 0x1c,
7777 0x94, 0x00, 0x9b, 0xa9, 0x59, 0xb9, 0x00, 0x9b,
7778 0xaa, 0x0e, 0x9c, 0x00, 0x9b, 0xab, 0x08, 0x7b,
7779 0x00, 0x9b, 0xac, 0x4a, 0x51, 0x00, 0x9b, 0xad,
7780 0x08, 0x6a, 0x00, 0x9b, 0xae, 0x0a, 0xb1, 0x00,
7781 0x9b, 0xb0, 0x4e, 0x32, 0x00, 0x9b, 0xb1, 0x22,
7782 0x06, 0x00, 0x9b, 0xb2, 0x4a, 0x53, 0x00, 0x9b,
7783 0xb4, 0x1c, 0x95, 0x00, 0x9b, 0xb7, 0x59, 0xba,
7784 0x00, 0x9b, 0xb8, 0x4a, 0x54, 0x00, 0x9b, 0xb9,
7785 0x1c, 0x98, 0x00, 0x9b, 0xbb, 0x22, 0x07, 0x00,
7786 0x9b, 0xbc, 0x59, 0xbb, 0x00, 0x9b, 0xbe, 0x4a,
7787 0x55, 0x00, 0x9b, 0xbf, 0x4e, 0x33, 0x00, 0x9b,
7788 0xc0, 0x1c, 0x96, 0x00, 0x9b, 0xc1, 0x3b, 0xe3,
7789 0x00, 0x9b, 0xc6, 0x1c, 0x99, 0x00, 0x9b, 0xc7,
7790 0x3b, 0xe4, 0x00, 0x9b, 0xc8, 0x4e, 0x34, 0x00,
7791 0x9b, 0xc9, 0x07, 0xa5, 0x00, 0x9b, 0xca, 0x1c,
7792 0x97, 0x00, 0x9b, 0xce, 0x43, 0x3b, 0x00, 0x9b,
7793 0xcf, 0x1c, 0x9a, 0x00, 0x9b, 0xd0, 0x59, 0xbc,
7794 0x00, 0x9b, 0xd1, 0x1c, 0x9b, 0x00, 0x9b, 0xd2,
7795 0x1c, 0x9c, 0x00, 0x9b, 0xd4, 0x1c, 0xa0, 0x00,
7796 0x9b, 0xd6, 0x08, 0x78, 0x00, 0x9b, 0xd7, 0x3b,
7797 0xe5, 0x00, 0x9b, 0xd8, 0x4a, 0x57, 0x00, 0x9b,
7798 0xdb, 0x0b, 0x44, 0x00, 0x9b, 0xdd, 0x4a, 0x58,
7799 0x00, 0x9b, 0xdf, 0x37, 0xbf, 0x00, 0x9b, 0xe1,
7800 0x1c, 0xa1, 0x00, 0x9b, 0xe2, 0x1c, 0x9e, 0x00,
7801 0x9b, 0xe3, 0x1c, 0x9d, 0x00, 0x9b, 0xe4, 0x1c,
7802 0x9f, 0x00, 0x9b, 0xe5, 0x43, 0x3c, 0x00, 0x9b,
7803 0xe7, 0x3b, 0xe6, 0x00, 0x9b, 0xe8, 0x07, 0x35,
7804 0x00, 0x9b, 0xea, 0x4a, 0x59, 0x00, 0x9b, 0xeb,
7805 0x3b, 0xe7, 0x00, 0x9b, 0xee, 0x4a, 0x5b, 0x00,
7806 0x9b, 0xef, 0x4a, 0x5a, 0x00, 0x9b, 0xf0, 0x1c,
7807 0xa5, 0x00, 0x9b, 0xf1, 0x1c, 0xa4, 0x00, 0x9b,
7808 0xf2, 0x1c, 0xa3, 0x00, 0x9b, 0xf3, 0x4a, 0x56,
7809 0x00, 0x9b, 0xf5, 0x04, 0x77, 0x00, 0x9b, 0xf7,
7810 0x3b, 0xe8, 0x00, 0x9b, 0xf8, 0x43, 0x3d, 0x00,
7811 0x9b, 0xf9, 0x59, 0xbd, 0x00, 0x9b, 0xfa, 0x3b,
7812 0xe9, 0x00, 0x9b, 0xfd, 0x3b, 0xea, 0x00, 0x9b,
7813 0xff, 0x4e, 0x35, 0x00, 0x9c, 0x00, 0x22, 0x08,
7814 0x00, 0x9c, 0x02, 0x4e, 0x36, 0x00, 0x9c, 0x04,
7815 0x1c, 0xaf, 0x00, 0x9c, 0x06, 0x1c, 0xab, 0x00,
7816 0x9c, 0x08, 0x1c, 0xac, 0x00, 0x9c, 0x09, 0x1c,
7817 0xa8, 0x00, 0x9c, 0x0a, 0x1c, 0xae, 0x00, 0x9c,
7818 0x0b, 0x3b, 0xeb, 0x00, 0x9c, 0x0c, 0x1c, 0xaa,
7819 0x00, 0x9c, 0x0d, 0x05, 0xc0, 0x00, 0x9c, 0x0f,
7820 0x59, 0xbe, 0x00, 0x9c, 0x10, 0x0f, 0xf2, 0x00,
7821 0x9c, 0x11, 0x59, 0xbf, 0x00, 0x9c, 0x12, 0x1c,
7822 0xad, 0x00, 0x9c, 0x13, 0x1c, 0xa9, 0x00, 0x9c,
7823 0x14, 0x1c, 0xa7, 0x00, 0x9c, 0x15, 0x1c, 0xa6,
7824 0x00, 0x9c, 0x16, 0x4a, 0x5f, 0x00, 0x9c, 0x18,
7825 0x4a, 0x60, 0x00, 0x9c, 0x19, 0x4a, 0x61, 0x00,
7826 0x9c, 0x1a, 0x4a, 0x62, 0x00, 0x9c, 0x1b, 0x1c,
7827 0xb1, 0x00, 0x9c, 0x1c, 0x4e, 0x37, 0x00, 0x9c,
7828 0x1d, 0x4a, 0x63, 0x00, 0x9c, 0x1e, 0x59, 0xc0,
7829 0x00, 0x9c, 0x21, 0x1c, 0xb4, 0x00, 0x9c, 0x22,
7830 0x4a, 0x64, 0x00, 0x9c, 0x23, 0x43, 0x3e, 0x00,
7831 0x9c, 0x24, 0x1c, 0xb3, 0x00, 0x9c, 0x25, 0x1c,
7832 0xb2, 0x00, 0x9c, 0x26, 0x59, 0xc1, 0x00, 0x9c,
7833 0x27, 0x3b, 0xec, 0x00, 0x9c, 0x28, 0x59, 0xc2,
7834 0x00, 0x9c, 0x29, 0x4a, 0x65, 0x00, 0x9c, 0x2a,
7835 0x3b, 0xed, 0x00, 0x9c, 0x2d, 0x0d, 0xbb, 0x00,
7836 0x9c, 0x2e, 0x1c, 0xb0, 0x00, 0x9c, 0x2f, 0x04,
7837 0xb7, 0x00, 0x9c, 0x30, 0x1c, 0xb5, 0x00, 0x9c,
7838 0x31, 0x4a, 0x67, 0x00, 0x9c, 0x32, 0x1c, 0xb7,
7839 0x00, 0x9c, 0x35, 0x4e, 0x38, 0x00, 0x9c, 0x36,
7840 0x3b, 0xee, 0x00, 0x9c, 0x37, 0x4a, 0x68, 0x00,
7841 0x9c, 0x39, 0x05, 0xcd, 0x00, 0x9c, 0x3a, 0x1c,
7842 0xa2, 0x00, 0x9c, 0x3b, 0x04, 0xd9, 0x00, 0x9c,
7843 0x3d, 0x59, 0xc3, 0x00, 0x9c, 0x3e, 0x1c, 0xb9,
7844 0x00, 0x9c, 0x41, 0x3b, 0xef, 0x00, 0x9c, 0x43,
7845 0x59, 0xc4, 0x00, 0x9c, 0x44, 0x4e, 0x39, 0x00,
7846 0x9c, 0x45, 0x4a, 0x69, 0x00, 0x9c, 0x46, 0x1c,
7847 0xb8, 0x00, 0x9c, 0x47, 0x1c, 0xb6, 0x00, 0x9c,
7848 0x48, 0x0b, 0x6b, 0x00, 0x9c, 0x49, 0x4a, 0x6c,
7849 0x00, 0x9c, 0x4a, 0x4a, 0x6d, 0x00, 0x9c, 0x4e,
7850 0x59, 0xc5, 0x00, 0x9c, 0x4f, 0x43, 0x3f, 0x00,
7851 0x9c, 0x50, 0x43, 0x40, 0x00, 0x9c, 0x52, 0x0e,
7852 0x9e, 0x00, 0x9c, 0x53, 0x3b, 0xf0, 0x00, 0x9c,
7853 0x54, 0x4a, 0x6f, 0x00, 0x9c, 0x56, 0x4e, 0x3a,
7854 0x00, 0x9c, 0x57, 0x0f, 0xa2, 0x00, 0x9c, 0x58,
7855 0x4a, 0x70, 0x00, 0x9c, 0x5a, 0x1c, 0xba, 0x00,
7856 0x9c, 0x5b, 0x4a, 0x71, 0x00, 0x9c, 0x5c, 0x4a,
7857 0x6a, 0x00, 0x9c, 0x5d, 0x4a, 0x72, 0x00, 0x9c,
7858 0x5e, 0x59, 0xc6, 0x00, 0x9c, 0x5f, 0x4a, 0x73,
7859 0x00, 0x9c, 0x60, 0x1c, 0xbb, 0x00, 0x9c, 0x61,
7860 0x4e, 0x3b, 0x00, 0x9c, 0x63, 0x3b, 0xf1, 0x00,
7861 0x9c, 0x65, 0x43, 0x41, 0x00, 0x9c, 0x67, 0x1c,
7862 0xbc, 0x00, 0x9c, 0x68, 0x4e, 0x3c, 0x00, 0x9c,
7863 0x69, 0x4a, 0x74, 0x00, 0x9c, 0x6a, 0x4a, 0x75,
7864 0x00, 0x9c, 0x6b, 0x4a, 0x76, 0x00, 0x9c, 0x6d,
7865 0x4a, 0x77, 0x00, 0x9c, 0x6e, 0x4a, 0x78, 0x00,
7866 0x9c, 0x70, 0x3b, 0xf2, 0x00, 0x9c, 0x72, 0x4a,
7867 0x79, 0x00, 0x9c, 0x75, 0x4a, 0x7a, 0x00, 0x9c,
7868 0x76, 0x1c, 0xbd, 0x00, 0x9c, 0x77, 0x3b, 0xf3,
7869 0x00, 0x9c, 0x78, 0x1c, 0xbe, 0x00, 0x9c, 0x7a,
7870 0x4a, 0x7b, 0x00, 0x9c, 0x7b, 0x59, 0xc7, 0x00,
7871 0x9c, 0xe5, 0x0b, 0xd7, 0x00, 0x9c, 0xe6, 0x4a,
7872 0x7c, 0x00, 0x9c, 0xe7, 0x1c, 0xbf, 0x00, 0x9c,
7873 0xe9, 0x0d, 0x4b, 0x00, 0x9c, 0xeb, 0x1c, 0xc4,
7874 0x00, 0x9c, 0xec, 0x1c, 0xc0, 0x00, 0x9c, 0xf0,
7875 0x1c, 0xc1, 0x00, 0x9c, 0xf2, 0x4a, 0x7d, 0x00,
7876 0x9c, 0xf3, 0x0e, 0x5f, 0x00, 0x9c, 0xf4, 0x0e,
7877 0xd0, 0x00, 0x9c, 0xf6, 0x0c, 0xa8, 0x00, 0x9c,
7878 0xf7, 0x59, 0xc8, 0x00, 0x9c, 0xf9, 0x59, 0xc9,
7879 0x00, 0x9d, 0x02, 0x3b, 0xf4, 0x00, 0x9d, 0x03,
7880 0x1c, 0xc5, 0x00, 0x9d, 0x06, 0x1c, 0xc6, 0x00,
7881 0x9d, 0x07, 0x0c, 0x96, 0x00, 0x9d, 0x08, 0x1c,
7882 0xc3, 0x00, 0x9d, 0x09, 0x1c, 0xc2, 0x00, 0x9d,
7883 0x0b, 0x4a, 0x7e, 0x00, 0x9d, 0x0e, 0x05, 0x2a,
7884 0x00, 0x9d, 0x11, 0x4a, 0x80, 0x00, 0x9d, 0x12,
7885 0x1c, 0xce, 0x00, 0x9d, 0x15, 0x1c, 0xcd, 0x00,
7886 0x9d, 0x17, 0x4a, 0x81, 0x00, 0x9d, 0x18, 0x4a,
7887 0x82, 0x00, 0x9d, 0x1b, 0x05, 0x17, 0x00, 0x9d,
7888 0x1c, 0x59, 0xca, 0x00, 0x9d, 0x1d, 0x43, 0x42,
7889 0x00, 0x9d, 0x1e, 0x43, 0x43, 0x00, 0x9d, 0x1f,
7890 0x1c, 0xcb, 0x00, 0x9d, 0x23, 0x1c, 0xca, 0x00,
7891 0x9d, 0x26, 0x1c, 0xc8, 0x00, 0x9d, 0x28, 0x05,
7892 0xd9, 0x00, 0x9d, 0x2a, 0x1c, 0xc7, 0x00, 0x9d,
7893 0x2b, 0x08, 0xde, 0x00, 0x9d, 0x2c, 0x05, 0x29,
7894 0x00, 0x9d, 0x2f, 0x59, 0xcb, 0x00, 0x9d, 0x30,
7895 0x4e, 0x3d, 0x00, 0x9d, 0x32, 0x4a, 0x86, 0x00,
7896 0x9d, 0x33, 0x59, 0xcc, 0x00, 0x9d, 0x34, 0x59,
7897 0xcd, 0x00, 0x9d, 0x3a, 0x59, 0xce, 0x00, 0x9d,
7898 0x3b, 0x07, 0xf5, 0x00, 0x9d, 0x3c, 0x59, 0xcf,
7899 0x00, 0x9d, 0x3d, 0x4e, 0x3e, 0x00, 0x9d, 0x3e,
7900 0x1c, 0xd1, 0x00, 0x9d, 0x3f, 0x1c, 0xd0, 0x00,
7901 0x9d, 0x41, 0x1c, 0xcf, 0x00, 0x9d, 0x42, 0x3b,
7902 0xf5, 0x00, 0x9d, 0x43, 0x43, 0x44, 0x00, 0x9d,
7903 0x44, 0x1c, 0xcc, 0x00, 0x9d, 0x45, 0x59, 0xd0,
7904 0x00, 0x9d, 0x46, 0x1c, 0xd2, 0x00, 0x9d, 0x47,
7905 0x3b, 0xf6, 0x00, 0x9d, 0x48, 0x1c, 0xd3, 0x00,
7906 0x9d, 0x4a, 0x4a, 0x88, 0x00, 0x9d, 0x50, 0x1c,
7907 0xd8, 0x00, 0x9d, 0x51, 0x1c, 0xd7, 0x00, 0x9d,
7908 0x52, 0x43, 0x45, 0x00, 0x9d, 0x53, 0x59, 0xd1,
7909 0x00, 0x9d, 0x54, 0x59, 0xd2, 0x00, 0x9d, 0x59,
7910 0x1c, 0xd9, 0x00, 0x9d, 0x5c, 0x04, 0xcf, 0x00,
7911 0x9d, 0x5d, 0x1c, 0xd4, 0x00, 0x9d, 0x5e, 0x1c,
7912 0xd5, 0x00, 0x9d, 0x5f, 0x4a, 0x89, 0x00, 0x9d,
7913 0x60, 0x08, 0x06, 0x00, 0x9d, 0x61, 0x0e, 0xc5,
7914 0x00, 0x9d, 0x62, 0x4a, 0x8a, 0x00, 0x9d, 0x63,
7915 0x3b, 0xf7, 0x00, 0x9d, 0x64, 0x1c, 0xd6, 0x00,
7916 0x9d, 0x65, 0x59, 0xd3, 0x00, 0x9d, 0x69, 0x3b,
7917 0xf8, 0x00, 0x9d, 0x6a, 0x4e, 0x3f, 0x00, 0x9d,
7918 0x6b, 0x22, 0x0a, 0x00, 0x9d, 0x6c, 0x0e, 0x60,
7919 0x00, 0x9d, 0x6f, 0x1c, 0xde, 0x00, 0x9d, 0x70,
7920 0x22, 0x09, 0x00, 0x9d, 0x72, 0x1c, 0xda, 0x00,
7921 0x9d, 0x73, 0x4a, 0x8d, 0x00, 0x9d, 0x76, 0x4a,
7922 0x8e, 0x00, 0x9d, 0x77, 0x4a, 0x8f, 0x00, 0x9d,
7923 0x7a, 0x1c, 0xdf, 0x00, 0x9d, 0x7b, 0x4e, 0x40,
7924 0x00, 0x9d, 0x7c, 0x3b, 0xf9, 0x00, 0x9d, 0x7e,
7925 0x3b, 0xfa, 0x00, 0x9d, 0x83, 0x59, 0xd4, 0x00,
7926 0x9d, 0x84, 0x4a, 0x90, 0x00, 0x9d, 0x86, 0x59,
7927 0xd5, 0x00, 0x9d, 0x87, 0x1c, 0xdc, 0x00, 0x9d,
7928 0x89, 0x1c, 0xdb, 0x00, 0x9d, 0x8a, 0x43, 0x46,
7929 0x00, 0x9d, 0x8d, 0x3b, 0xfb, 0x00, 0x9d, 0x8e,
7930 0x59, 0xd6, 0x00, 0x9d, 0x8f, 0x07, 0x32, 0x00,
7931 0x9d, 0x92, 0x59, 0xd7, 0x00, 0x9d, 0x93, 0x59,
7932 0xd8, 0x00, 0x9d, 0x95, 0x59, 0xd9, 0x00, 0x9d,
7933 0x96, 0x43, 0x47, 0x00, 0x9d, 0x97, 0x59, 0xda,
7934 0x00, 0x9d, 0x98, 0x59, 0xdb, 0x00, 0x9d, 0x99,
7935 0x4a, 0x91, 0x00, 0x9d, 0x9a, 0x1c, 0xe0, 0x00,
7936 0x9d, 0xa1, 0x4a, 0x92, 0x00, 0x9d, 0xa4, 0x1c,
7937 0xe1, 0x00, 0x9d, 0xa9, 0x1c, 0xe2, 0x00, 0x9d,
7938 0xaa, 0x59, 0xdc, 0x00, 0x9d, 0xab, 0x1c, 0xdd,
7939 0x00, 0x9d, 0xac, 0x43, 0x49, 0x00, 0x9d, 0xae,
7940 0x59, 0xdd, 0x00, 0x9d, 0xaf, 0x1c, 0xc9, 0x00,
7941 0x9d, 0xb1, 0x3b, 0xfc, 0x00, 0x9d, 0xb2, 0x1c,
7942 0xe3, 0x00, 0x9d, 0xb4, 0x22, 0x0b, 0x00, 0x9d,
7943 0xb5, 0x4a, 0x94, 0x00, 0x9d, 0xb8, 0x1c, 0xe7,
7944 0x00, 0x9d, 0xb9, 0x4a, 0x95, 0x00, 0x9d, 0xba,
7945 0x1c, 0xe8, 0x00, 0x9d, 0xbb, 0x1c, 0xe6, 0x00,
7946 0x9d, 0xbc, 0x43, 0x4a, 0x00, 0x9d, 0xbd, 0x4a,
7947 0x96, 0x00, 0x9d, 0xbf, 0x4a, 0x93, 0x00, 0x9d,
7948 0xc0, 0x43, 0x48, 0x00, 0x9d, 0xc1, 0x1c, 0xe5,
7949 0x00, 0x9d, 0xc2, 0x1c, 0xeb, 0x00, 0x9d, 0xc3,
7950 0x3b, 0xfd, 0x00, 0x9d, 0xc4, 0x1c, 0xe4, 0x00,
7951 0x9d, 0xc6, 0x1c, 0xe9, 0x00, 0x9d, 0xc7, 0x3b,
7952 0xfe, 0x00, 0x9d, 0xc9, 0x4a, 0x97, 0x00, 0x9d,
7953 0xca, 0x59, 0xdf, 0x00, 0x9d, 0xcf, 0x1c, 0xea,
7954 0x00, 0x9d, 0xd3, 0x1c, 0xed, 0x00, 0x9d, 0xd4,
7955 0x59, 0xe0, 0x00, 0x9d, 0xd5, 0x59, 0xe1, 0x00,
7956 0x9d, 0xd6, 0x3b, 0xff, 0x00, 0x9d, 0xd7, 0x1d,
7957 0xde, 0x00, 0x9d, 0xd9, 0x1c, 0xec, 0x00, 0x9d,
7958 0xda, 0x4a, 0x98, 0x00, 0x9d, 0xde, 0x59, 0xe2,
7959 0x00, 0x9d, 0xdf, 0x3c, 0x00, 0x00, 0x9d, 0xe0,
7960 0x4a, 0x99, 0x00, 0x9d, 0xe3, 0x4a, 0x9a, 0x00,
7961 0x9d, 0xe5, 0x4e, 0x41, 0x00, 0x9d, 0xe6, 0x1c,
7962 0xef, 0x00, 0x9d, 0xe7, 0x43, 0x4c, 0x00, 0x9d,
7963 0xe9, 0x4e, 0x42, 0x00, 0x9d, 0xeb, 0x3c, 0x01,
7964 0x00, 0x9d, 0xed, 0x1c, 0xf0, 0x00, 0x9d, 0xee,
7965 0x59, 0xe3, 0x00, 0x9d, 0xef, 0x1c, 0xf1, 0x00,
7966 0x9d, 0xf0, 0x59, 0xe4, 0x00, 0x9d, 0xf2, 0x0f,
7967 0xef, 0x00, 0x9d, 0xf3, 0x4e, 0x43, 0x00, 0x9d,
7968 0xf4, 0x3c, 0x02, 0x00, 0x9d, 0xf8, 0x1c, 0xee,
7969 0x00, 0x9d, 0xf9, 0x0b, 0x4b, 0x00, 0x9d, 0xfa,
7970 0x08, 0x5d, 0x00, 0x9d, 0xfd, 0x1c, 0xf2, 0x00,
7971 0x9d, 0xfe, 0x59, 0xe5, 0x00, 0x9e, 0x02, 0x4a,
7972 0x9d, 0x00, 0x9e, 0x07, 0x43, 0x4d, 0x00, 0x9e,
7973 0x0a, 0x4a, 0x9c, 0x00, 0x9e, 0x0d, 0x4a, 0x9e,
7974 0x00, 0x9e, 0x0e, 0x59, 0xe6, 0x00, 0x9e, 0x10,
7975 0x59, 0xe7, 0x00, 0x9e, 0x11, 0x59, 0xe8, 0x00,
7976 0x9e, 0x12, 0x59, 0xe9, 0x00, 0x9e, 0x15, 0x3c,
7977 0x03, 0x00, 0x9e, 0x16, 0x59, 0xea, 0x00, 0x9e,
7978 0x19, 0x22, 0x0c, 0x00, 0x9e, 0x1a, 0x1c, 0xf3,
7979 0x00, 0x9e, 0x1b, 0x1c, 0xf4, 0x00, 0x9e, 0x1c,
7980 0x4a, 0x9f, 0x00, 0x9e, 0x1d, 0x3c, 0x04, 0x00,
7981 0x9e, 0x1e, 0x1c, 0xf5, 0x00, 0x9e, 0x75, 0x1c,
7982 0xf6, 0x00, 0x9e, 0x78, 0x07, 0x68, 0x00, 0x9e,
7983 0x79, 0x1c, 0xf7, 0x00, 0x9e, 0x7a, 0x4e, 0x44,
7984 0x00, 0x9e, 0x7b, 0x4a, 0xa0, 0x00, 0x9e, 0x7c,
7985 0x1d, 0xfd, 0x00, 0x9e, 0x7d, 0x1c, 0xf8, 0x00,
7986 0x9e, 0x7f, 0x08, 0xdb, 0x00, 0x9e, 0x80, 0x4a,
7987 0xa2, 0x00, 0x9e, 0x81, 0x1c, 0xf9, 0x00, 0x9e,
7988 0x82, 0x4e, 0x45, 0x00, 0x9e, 0x83, 0x4e, 0x46,
7989 0x00, 0x9e, 0x84, 0x4e, 0x47, 0x00, 0x9e, 0x85,
7990 0x4a, 0xa3, 0x00, 0x9e, 0x87, 0x59, 0xeb, 0x00,
7991 0x9e, 0x88, 0x1c, 0xfa, 0x00, 0x9e, 0x8b, 0x1c,
7992 0xfb, 0x00, 0x9e, 0x8c, 0x1c, 0xfc, 0x00, 0x9e,
7993 0x8e, 0x59, 0xec, 0x00, 0x9e, 0x8f, 0x59, 0xed,
7994 0x00, 0x9e, 0x91, 0x1c, 0xff, 0x00, 0x9e, 0x92,
7995 0x1c, 0xfd, 0x00, 0x9e, 0x93, 0x0f, 0xe2, 0x00,
7996 0x9e, 0x95, 0x1c, 0xfe, 0x00, 0x9e, 0x96, 0x59,
7997 0xee, 0x00, 0x9e, 0x97, 0x0f, 0xb7, 0x00, 0x9e,
7998 0x98, 0x59, 0xef, 0x00, 0x9e, 0x9b, 0x4a, 0xa4,
7999 0x00, 0x9e, 0x9d, 0x1d, 0x00, 0x00, 0x9e, 0x9e,
8000 0x43, 0x4e, 0x00, 0x9e, 0x9f, 0x0f, 0xa3, 0x00,
8001 0x9e, 0xa4, 0x3c, 0x05, 0x00, 0x9e, 0xa5, 0x1d,
8002 0x01, 0x00, 0x9e, 0xa6, 0x0d, 0x34, 0x00, 0x9e,
8003 0xa8, 0x3c, 0x06, 0x00, 0x9e, 0xa9, 0x1d, 0x02,
8004 0x00, 0x9e, 0xaa, 0x1d, 0x04, 0x00, 0x9e, 0xac,
8005 0x3c, 0x07, 0x00, 0x9e, 0xad, 0x1d, 0x05, 0x00,
8006 0x9e, 0xae, 0x59, 0xf0, 0x00, 0x9e, 0xaf, 0x43,
8007 0x4f, 0x00, 0x9e, 0xb0, 0x4e, 0x48, 0x00, 0x9e,
8008 0xb3, 0x59, 0xf1, 0x00, 0x9e, 0xb4, 0x1e, 0x02,
8009 0x00, 0x9e, 0xb5, 0x1e, 0x75, 0x00, 0x9e, 0xb8,
8010 0x1d, 0x03, 0x00, 0x9e, 0xb9, 0x07, 0xff, 0x00,
8011 0x9e, 0xba, 0x0e, 0xd9, 0x00, 0x9e, 0xbb, 0x0e,
8012 0x91, 0x00, 0x9e, 0xbc, 0x12, 0x84, 0x00, 0x9e,
8013 0xbd, 0x4a, 0xa6, 0x00, 0x9e, 0xbe, 0x14, 0xff,
8014 0x00, 0x9e, 0xbf, 0x0e, 0xa9, 0x00, 0x9e, 0xc3,
8015 0x34, 0x0b, 0x00, 0x9e, 0xc4, 0x05, 0x2b, 0x00,
8016 0x9e, 0xc6, 0x59, 0xf2, 0x00, 0x9e, 0xc8, 0x59,
8017 0xf3, 0x00, 0x9e, 0xcb, 0x59, 0xf4, 0x00, 0x9e,
8018 0xcc, 0x1d, 0x07, 0x00, 0x9e, 0xcd, 0x06, 0x6a,
8019 0x00, 0x9e, 0xce, 0x1d, 0x08, 0x00, 0x9e, 0xcf,
8020 0x1d, 0x09, 0x00, 0x9e, 0xd0, 0x1d, 0x0a, 0x00,
8021 0x9e, 0xd1, 0x22, 0x0d, 0x00, 0x9e, 0xd2, 0x08,
8022 0x07, 0x00, 0x9e, 0xd4, 0x1d, 0x0b, 0x00, 0x9e,
8023 0xd5, 0x59, 0xf5, 0x00, 0x9e, 0xd8, 0x16, 0x0d,
8024 0x00, 0x9e, 0xd9, 0x0e, 0xe7, 0x00, 0x9e, 0xdb,
8025 0x0b, 0x43, 0x00, 0x9e, 0xdc, 0x1d, 0x0c, 0x00,
8026 0x9e, 0xdd, 0x1d, 0x0e, 0x00, 0x9e, 0xde, 0x1d,
8027 0x0d, 0x00, 0x9e, 0xdf, 0x4a, 0xa8, 0x00, 0x9e,
8028 0xe0, 0x1d, 0x0f, 0x00, 0x9e, 0xe4, 0x4e, 0x49,
8029 0x00, 0x9e, 0xe5, 0x1d, 0x10, 0x00, 0x9e, 0xe7,
8030 0x3c, 0x08, 0x00, 0x9e, 0xe8, 0x1d, 0x11, 0x00,
8031 0x9e, 0xec, 0x59, 0xf6, 0x00, 0x9e, 0xed, 0x59,
8032 0xf7, 0x00, 0x9e, 0xee, 0x3c, 0x09, 0x00, 0x9e,
8033 0xef, 0x1d, 0x12, 0x00, 0x9e, 0xf0, 0x4e, 0x4a,
8034 0x00, 0x9e, 0xf1, 0x59, 0xf8, 0x00, 0x9e, 0xf2,
8035 0x4e, 0x4b, 0x00, 0x9e, 0xf4, 0x1d, 0x13, 0x00,
8036 0x9e, 0xf5, 0x59, 0xf9, 0x00, 0x9e, 0xf6, 0x1d,
8037 0x14, 0x00, 0x9e, 0xf7, 0x1d, 0x15, 0x00, 0x9e,
8038 0xf8, 0x59, 0xfa, 0x00, 0x9e, 0xf9, 0x1d, 0x16,
8039 0x00, 0x9e, 0xfb, 0x1d, 0x17, 0x00, 0x9e, 0xfc,
8040 0x1d, 0x18, 0x00, 0x9e, 0xfd, 0x1d, 0x19, 0x00,
8041 0x9e, 0xff, 0x4a, 0xa9, 0x00, 0x9f, 0x02, 0x4a,
8042 0xaa, 0x00, 0x9f, 0x03, 0x4a, 0xac, 0x00, 0x9f,
8043 0x07, 0x1d, 0x1a, 0x00, 0x9f, 0x08, 0x1d, 0x1b,
8044 0x00, 0x9f, 0x09, 0x4e, 0x4c, 0x00, 0x9f, 0x0e,
8045 0x0c, 0x1e, 0x00, 0x9f, 0x0f, 0x4e, 0x4d, 0x00,
8046 0x9f, 0x10, 0x3c, 0x0a, 0x00, 0x9f, 0x11, 0x59,
8047 0xfb, 0x00, 0x9f, 0x12, 0x3c, 0x0b, 0x00, 0x9f,
8048 0x13, 0x07, 0x91, 0x00, 0x9f, 0x14, 0x4e, 0x4e,
8049 0x00, 0x9f, 0x15, 0x1d, 0x1d, 0x00, 0x9f, 0x16,
8050 0x59, 0xfc, 0x00, 0x9f, 0x17, 0x3c, 0x0c, 0x00,
8051 0x9f, 0x19, 0x3c, 0x0d, 0x00, 0x9f, 0x1a, 0x59,
8052 0xfd, 0x00, 0x9f, 0x1b, 0x4e, 0x4f, 0x00, 0x9f,
8053 0x1f, 0x59, 0xfe, 0x00, 0x9f, 0x20, 0x0a, 0xcf,
8054 0x00, 0x9f, 0x21, 0x1d, 0x1e, 0x00, 0x9f, 0x22,
8055 0x4e, 0x50, 0x00, 0x9f, 0x26, 0x4e, 0x51, 0x00,
8056 0x9f, 0x2a, 0x4e, 0x52, 0x00, 0x9f, 0x2b, 0x4e,
8057 0x53, 0x00, 0x9f, 0x2c, 0x1d, 0x1f, 0x00, 0x9f,
8058 0x2f, 0x3c, 0x0e, 0x00, 0x9f, 0x31, 0x59, 0xff,
8059 0x00, 0x9f, 0x32, 0x5a, 0x00, 0x00, 0x9f, 0x34,
8060 0x4e, 0x54, 0x00, 0x9f, 0x37, 0x3c, 0x0f, 0x00,
8061 0x9f, 0x39, 0x3c, 0x10, 0x00, 0x9f, 0x3a, 0x4a,
8062 0xad, 0x00, 0x9f, 0x3b, 0x0d, 0x93, 0x00, 0x9f,
8063 0x3c, 0x5a, 0x01, 0x00, 0x9f, 0x3d, 0x4a, 0xae,
8064 0x00, 0x9f, 0x3e, 0x1d, 0x20, 0x00, 0x9f, 0x3f,
8065 0x5a, 0x02, 0x00, 0x9f, 0x41, 0x3c, 0x11, 0x00,
8066 0x9f, 0x43, 0x5a, 0x03, 0x00, 0x9f, 0x44, 0x5a,
8067 0x04, 0x00, 0x9f, 0x45, 0x3c, 0x12, 0x00, 0x9f,
8068 0x46, 0x4a, 0xaf, 0x00, 0x9f, 0x47, 0x5a, 0x05,
8069 0x00, 0x9f, 0x4a, 0x1d, 0x21, 0x00, 0x9f, 0x4b,
8070 0x17, 0x0a, 0x00, 0x9f, 0x4e, 0x1a, 0x7b, 0x00,
8071 0x9f, 0x4f, 0x1c, 0x06, 0x00, 0x9f, 0x52, 0x1d,
8072 0x22, 0x00, 0x9f, 0x53, 0x4a, 0xb0, 0x00, 0x9f,
8073 0x54, 0x1d, 0x23, 0x00, 0x9f, 0x55, 0x4a, 0xb1,
8074 0x00, 0x9f, 0x56, 0x5a, 0x06, 0x00, 0x9f, 0x57,
8075 0x3c, 0x13, 0x00, 0x9f, 0x58, 0x4a, 0xb2, 0x00,
8076 0x9f, 0x5a, 0x4e, 0x55, 0x00, 0x9f, 0x5d, 0x4a,
8077 0xb4, 0x00, 0x9f, 0x5e, 0x5a, 0x07, 0x00, 0x9f,
8078 0x5f, 0x1d, 0x25, 0x00, 0x9f, 0x60, 0x1d, 0x26,
8079 0x00, 0x9f, 0x61, 0x1d, 0x27, 0x00, 0x9f, 0x62,
8080 0x0f, 0xb8, 0x00, 0x9f, 0x63, 0x1d, 0x24, 0x00,
8081 0x9f, 0x66, 0x1d, 0x28, 0x00, 0x9f, 0x67, 0x1d,
8082 0x29, 0x00, 0x9f, 0x68, 0x3c, 0x14, 0x00, 0x9f,
8083 0x69, 0x4a, 0xb6, 0x00, 0x9f, 0x6a, 0x1d, 0x2b,
8084 0x00, 0x9f, 0x6c, 0x1d, 0x2a, 0x00, 0x9f, 0x6d,
8085 0x4a, 0xb7, 0x00, 0x9f, 0x6e, 0x5a, 0x08, 0x00,
8086 0x9f, 0x6f, 0x4e, 0x56, 0x00, 0x9f, 0x70, 0x4a,
8087 0xb8, 0x00, 0x9f, 0x71, 0x3c, 0x15, 0x00, 0x9f,
8088 0x72, 0x1d, 0x2d, 0x00, 0x9f, 0x73, 0x5a, 0x09,
8089 0x00, 0x9f, 0x75, 0x3c, 0x16, 0x00, 0x9f, 0x76,
8090 0x1d, 0x2e, 0x00, 0x9f, 0x77, 0x1d, 0x2c, 0x00,
8091 0x9f, 0x7a, 0x5a, 0x0a, 0x00, 0x9f, 0x7d, 0x5a,
8092 0x0b, 0x00, 0x9f, 0x8d, 0x0f, 0x7e, 0x00, 0x9f,
8093 0x8f, 0x5a, 0x0c, 0x00, 0x9f, 0x90, 0x3c, 0x17,
8094 0x00, 0x9f, 0x91, 0x5a, 0x0d, 0x00, 0x9f, 0x92,
8095 0x5a, 0x0e, 0x00, 0x9f, 0x94, 0x3c, 0x18, 0x00,
8096 0x9f, 0x95, 0x1d, 0x2f, 0x00, 0x9f, 0x96, 0x5a,
8097 0x0f, 0x00, 0x9f, 0x97, 0x43, 0x50, 0x00, 0x9f,
8098 0x9c, 0x1d, 0x30, 0x00, 0x9f, 0x9d, 0x17, 0x27,
8099 0x00, 0x9f, 0x9e, 0x4e, 0x57, 0x00, 0x9f, 0xa0,
8100 0x1d, 0x31, 0x00, 0x9f, 0xa1, 0x5a, 0x10, 0x00,
8101 0x9f, 0xa2, 0x3c, 0x19, 0x00, 0x9f, 0xa3, 0x5a,
8102 0x11, 0x00, 0x9f, 0xa5, 0x4e, 0x58, 0x00, 0x9f,
8103 0xb4, 0x36, 0xe0, 0x00, 0x9f, 0xbc, 0x3c, 0x47,
8104 0x00, 0x9f, 0xbd, 0x3c, 0x45, 0x00, 0x9f, 0xbe,
8105 0x3c, 0x4a, 0x00, 0x9f, 0xbf, 0x4e, 0x64, 0x00,
8106 0x9f, 0xc0, 0x4e, 0x65, 0x00, 0x9f, 0xc1, 0x4e,
8107 0x66, 0x00, 0x9f, 0xc2, 0x4e, 0x67, 0x00, 0x9f,
8108 0xc4, 0x37, 0x09, 0x00, 0x9f, 0xc6, 0x37, 0x58,
8109 0x00, 0x9f, 0xcc, 0x4e, 0xbc, 0x00, 0xfa, 0x0e,
8110 0x20, 0xda, 0x00, 0xfa, 0x0f, 0x20, 0xe5, 0x00,
8111 0xfa, 0x11, 0x37, 0xd2, 0x00, 0xfa, 0x13, 0x21,
8112 0x31, 0x00, 0xfa, 0x14, 0x21, 0x33, 0x00, 0xfa,
8113 0x1f, 0x21, 0xa2, 0x00, 0xfa, 0x21, 0x21, 0xa5,
8114 0x00, 0xfa, 0x23, 0x21, 0xb6, 0x00, 0xfa, 0x24,
8115 0x49, 0x48, 0x00, 0xfa, 0x27, 0x21, 0xd8, 0x00,
8116 0xfa, 0x28, 0x21, 0xdf, 0x00, 0xfa, 0x29, 0x21,
8117 0xef, 0x02, 0x00, 0x0b, 0x36, 0x0f, 0x02, 0x00,
8118 0x89, 0x43, 0x51, 0x02, 0x00, 0x8a, 0x37, 0x1c,
8119 0x02, 0x00, 0xa2, 0x43, 0x58, 0x02, 0x00, 0xa4,
8120 0x43, 0x5b, 0x02, 0x00, 0xb0, 0x37, 0x81, 0x02,
8121 0x00, 0xf5, 0x4e, 0x59, 0x02, 0x01, 0x58, 0x4e,
8122 0x6b, 0x02, 0x01, 0xa2, 0x36, 0x21, 0x02, 0x02,
8123 0x13, 0x43, 0x6b, 0x02, 0x03, 0x2b, 0x43, 0x82,
8124 0x02, 0x03, 0x71, 0x43, 0x8b, 0x02, 0x03, 0x81,
8125 0x43, 0x89, 0x02, 0x03, 0xf9, 0x43, 0x8f, 0x02,
8126 0x04, 0x4a, 0x43, 0x91, 0x02, 0x05, 0x09, 0x43,
8127 0x93, 0x02, 0x05, 0x3f, 0x37, 0x6c, 0x02, 0x05,
8128 0xb1, 0x4e, 0x70, 0x02, 0x05, 0xd6, 0x43, 0x9c,
8129 0x02, 0x06, 0x11, 0x37, 0xd6, 0x02, 0x06, 0x28,
8130 0x37, 0x19, 0x02, 0x06, 0xec, 0x4e, 0x73, 0x02,
8131 0x07, 0x4f, 0x43, 0xa0, 0x02, 0x07, 0xc8, 0x4e,
8132 0xa0, 0x02, 0x08, 0x07, 0x43, 0xa7, 0x02, 0x08,
8133 0x3a, 0x43, 0xa9, 0x02, 0x08, 0xb9, 0x43, 0xaf,
8134 0x02, 0x09, 0x0e, 0x34, 0xd3, 0x02, 0x09, 0x7c,
8135 0x43, 0xb3, 0x02, 0x09, 0x84, 0x37, 0x1d, 0x02,
8136 0x09, 0x9d, 0x43, 0xb4, 0x02, 0x0a, 0x64, 0x35,
8137 0xbb, 0x02, 0x0a, 0xd3, 0x43, 0xb9, 0x02, 0x0b,
8138 0x1d, 0x43, 0xbc, 0x02, 0x0b, 0x9f, 0x35, 0xeb,
8139 0x02, 0x0b, 0xb7, 0x35, 0x8a, 0x02, 0x0d, 0x45,
8140 0x43, 0xcf, 0x02, 0x0d, 0x58, 0x4e, 0x7a, 0x02,
8141 0x0d, 0xe1, 0x43, 0xdd, 0x02, 0x0e, 0x64, 0x43,
8142 0xec, 0x02, 0x0e, 0x6d, 0x43, 0xe4, 0x02, 0x0e,
8143 0x95, 0x43, 0xe3, 0x02, 0x0f, 0x5f, 0x43, 0xef,
8144 0x02, 0x12, 0x01, 0x44, 0x06, 0x02, 0x12, 0x3d,
8145 0x36, 0x81, 0x02, 0x12, 0x55, 0x44, 0x07, 0x02,
8146 0x12, 0x74, 0x44, 0x0d, 0x02, 0x12, 0x7b, 0x44,
8147 0x09, 0x02, 0x12, 0xd7, 0x44, 0x15, 0x02, 0x12,
8148 0xe4, 0x44, 0x14, 0x02, 0x12, 0xfd, 0x44, 0x1b,
8149 0x02, 0x13, 0x1b, 0x41, 0xb0, 0x02, 0x13, 0x36,
8150 0x44, 0x1d, 0x02, 0x13, 0x44, 0x44, 0x1e, 0x02,
8151 0x13, 0xc4, 0x44, 0x29, 0x02, 0x14, 0x6d, 0x44,
8152 0x36, 0x02, 0x14, 0x6e, 0x41, 0xb5, 0x02, 0x15,
8153 0xd7, 0x44, 0x40, 0x02, 0x16, 0x47, 0x44, 0x48,
8154 0x02, 0x16, 0xb4, 0x41, 0xc6, 0x02, 0x17, 0x06,
8155 0x44, 0x54, 0x02, 0x17, 0x42, 0x44, 0x55, 0x02,
8156 0x18, 0xbd, 0x41, 0xc1, 0x02, 0x19, 0xc3, 0x44,
8157 0x75, 0x02, 0x1a, 0x1a, 0x1e, 0x91, 0x02, 0x1c,
8158 0x56, 0x44, 0x83, 0x02, 0x1d, 0x2d, 0x44, 0x88,
8159 0x02, 0x1d, 0x45, 0x44, 0x89, 0x02, 0x1d, 0x62,
8160 0x44, 0x8b, 0x02, 0x1d, 0x78, 0x44, 0x8a, 0x02,
8161 0x1d, 0x92, 0x44, 0x94, 0x02, 0x1d, 0x9c, 0x44,
8162 0x90, 0x02, 0x1d, 0xa1, 0x44, 0x8f, 0x02, 0x1d,
8163 0xb7, 0x44, 0x97, 0x02, 0x1d, 0xe0, 0x44, 0x99,
8164 0x02, 0x1e, 0x33, 0x44, 0x9a, 0x02, 0x1e, 0x34,
8165 0x41, 0xcd, 0x02, 0x1f, 0x1e, 0x44, 0xa7, 0x02,
8166 0x1f, 0x76, 0x44, 0xae, 0x02, 0x1f, 0xfa, 0x44,
8167 0xb1, 0x02, 0x21, 0x7b, 0x44, 0xbf, 0x02, 0x22,
8168 0x18, 0x4a, 0xa1, 0x02, 0x23, 0x1e, 0x44, 0xc5,
8169 0x02, 0x23, 0xad, 0x44, 0xc8, 0x02, 0x26, 0x09,
8170 0x3c, 0x53, 0x02, 0x26, 0xf3, 0x44, 0xe0, 0x02,
8171 0x28, 0x5b, 0x44, 0xef, 0x02, 0x28, 0xab, 0x44,
8172 0xf5, 0x02, 0x29, 0x8f, 0x44, 0xf9, 0x02, 0x2a,
8173 0xb8, 0x45, 0x03, 0x02, 0x2b, 0x46, 0x45, 0x10,
8174 0x02, 0x2b, 0x4f, 0x45, 0x07, 0x02, 0x2b, 0x50,
8175 0x45, 0x08, 0x02, 0x2b, 0xa6, 0x45, 0x13, 0x02,
8176 0x2c, 0x1d, 0x45, 0x12, 0x02, 0x2c, 0x24, 0x45,
8177 0x16, 0x02, 0x2d, 0xe1, 0x45, 0x2e, 0x02, 0x2e,
8178 0x42, 0x4e, 0x9c, 0x02, 0x2f, 0xeb, 0x4e, 0xa2,
8179 0x02, 0x31, 0xb6, 0x45, 0x50, 0x02, 0x31, 0xc3,
8180 0x45, 0x4e, 0x02, 0x31, 0xc4, 0x41, 0xf8, 0x02,
8181 0x31, 0xf5, 0x45, 0x4f, 0x02, 0x33, 0x72, 0x45,
8182 0x61, 0x02, 0x33, 0xcc, 0x37, 0x3c, 0x02, 0x33,
8183 0xd0, 0x45, 0x68, 0x02, 0x33, 0xd2, 0x45, 0x64,
8184 0x02, 0x33, 0xd3, 0x45, 0x63, 0x02, 0x33, 0xd5,
8185 0x45, 0x6a, 0x02, 0x33, 0xda, 0x45, 0x6c, 0x02,
8186 0x33, 0xdf, 0x45, 0x6e, 0x02, 0x33, 0xe4, 0x45,
8187 0x69, 0x02, 0x33, 0xfe, 0x3c, 0x3e, 0x02, 0x34,
8188 0x4a, 0x45, 0x76, 0x02, 0x34, 0x4b, 0x45, 0x78,
8189 0x02, 0x34, 0x51, 0x45, 0x77, 0x02, 0x34, 0x65,
8190 0x45, 0x7c, 0x02, 0x34, 0xe4, 0x45, 0x96, 0x02,
8191 0x35, 0x5a, 0x45, 0x97, 0x02, 0x35, 0x94, 0x45,
8192 0xa3, 0x02, 0x35, 0xc4, 0x42, 0x09, 0x02, 0x36,
8193 0x38, 0x45, 0xb3, 0x02, 0x36, 0x39, 0x45, 0xb1,
8194 0x02, 0x36, 0x3a, 0x3c, 0x21, 0x02, 0x36, 0x47,
8195 0x45, 0xb2, 0x02, 0x37, 0x0c, 0x45, 0xc7, 0x02,
8196 0x37, 0x1c, 0x45, 0xbe, 0x02, 0x37, 0x3f, 0x42,
8197 0x12, 0x02, 0x37, 0x63, 0x42, 0x14, 0x02, 0x37,
8198 0x64, 0x45, 0xcb, 0x02, 0x37, 0xe7, 0x45, 0xd3,
8199 0x02, 0x37, 0xf1, 0x4e, 0xb8, 0x02, 0x37, 0xff,
8200 0x45, 0xd2, 0x02, 0x38, 0x24, 0x45, 0xd8, 0x02,
8201 0x38, 0x3d, 0x45, 0xdd, 0x02, 0x3a, 0x98, 0x45,
8202 0xe9, 0x02, 0x3c, 0x7f, 0x45, 0xf6, 0x02, 0x3c,
8203 0xbe, 0x37, 0xd5, 0x02, 0x3c, 0xfe, 0x36, 0x50,
8204 0x02, 0x3d, 0x00, 0x46, 0x05, 0x02, 0x3d, 0x0e,
8205 0x47, 0xda, 0x02, 0x3d, 0x40, 0x46, 0x16, 0x02,
8206 0x3d, 0xd3, 0x46, 0x19, 0x02, 0x3d, 0xf9, 0x46,
8207 0x18, 0x02, 0x3d, 0xfa, 0x46, 0x17, 0x02, 0x3f,
8208 0x7e, 0x46, 0x3f, 0x02, 0x40, 0x4b, 0x4e, 0xc8,
8209 0x02, 0x40, 0x96, 0x46, 0x4e, 0x02, 0x41, 0x03,
8210 0x46, 0x53, 0x02, 0x41, 0xc6, 0x46, 0x5f, 0x02,
8211 0x41, 0xfe, 0x46, 0x62, 0x02, 0x42, 0xee, 0x37,
8212 0xca, 0x02, 0x43, 0xbc, 0x46, 0x77, 0x02, 0x43,
8213 0xd0, 0x1e, 0x9e, 0x02, 0x46, 0x29, 0x46, 0x81,
8214 0x02, 0x46, 0xa5, 0x46, 0x87, 0x02, 0x47, 0xf1,
8215 0x42, 0x4a, 0x02, 0x48, 0x96, 0x46, 0x9d, 0x02,
8216 0x4a, 0x4d, 0x46, 0xb8, 0x02, 0x4b, 0x56, 0x46,
8217 0xc5, 0x02, 0x4b, 0x6f, 0x46, 0xc7, 0x02, 0x4c,
8218 0x16, 0x46, 0xcc, 0x02, 0x4d, 0x14, 0x36, 0xab,
8219 0x02, 0x4e, 0x04, 0x4e, 0x5a, 0x02, 0x4e, 0x0e,
8220 0x46, 0xee, 0x02, 0x4e, 0x37, 0x46, 0xf2, 0x02,
8221 0x4e, 0x6a, 0x46, 0xf7, 0x02, 0x4e, 0x8b, 0x46,
8222 0xfa, 0x02, 0x4f, 0xf2, 0x4e, 0x5b, 0x02, 0x50,
8223 0x4a, 0x47, 0x05, 0x02, 0x50, 0x55, 0x47, 0x07,
8224 0x02, 0x51, 0x22, 0x47, 0x09, 0x02, 0x51, 0xa9,
8225 0x47, 0x0e, 0x02, 0x51, 0xcd, 0x47, 0x11, 0x02,
8226 0x51, 0xe5, 0x47, 0x10, 0x02, 0x52, 0x1e, 0x47,
8227 0x13, 0x02, 0x52, 0x4c, 0x47, 0x15, 0x02, 0x54,
8228 0x2e, 0x47, 0x21, 0x02, 0x54, 0x8e, 0x42, 0x6d,
8229 0x02, 0x54, 0xd9, 0x47, 0x29, 0x02, 0x55, 0x0e,
8230 0x42, 0x71, 0x02, 0x55, 0xa7, 0x47, 0x35, 0x02,
8231 0x56, 0x7f, 0x36, 0xfb, 0x02, 0x57, 0x71, 0x42,
8232 0x7a, 0x02, 0x57, 0xa9, 0x47, 0x48, 0x02, 0x57,
8233 0xb4, 0x47, 0x49, 0x02, 0x58, 0x74, 0x1d, 0xf6,
8234 0x02, 0x59, 0xc4, 0x42, 0x80, 0x02, 0x59, 0xcc,
8235 0x4e, 0x90, 0x02, 0x59, 0xd4, 0x47, 0x5c, 0x02,
8236 0x5a, 0xd7, 0x36, 0x62, 0x02, 0x5a, 0xe3, 0x47,
8237 0x65, 0x02, 0x5a, 0xe4, 0x47, 0x64, 0x02, 0x5a,
8238 0xf1, 0x47, 0x66, 0x02, 0x5b, 0xb2, 0x47, 0x75,
8239 0x02, 0x5c, 0x4b, 0x47, 0x7e, 0x02, 0x5c, 0x64,
8240 0x47, 0x7f, 0x02, 0x5d, 0xa1, 0x42, 0x89, 0x02,
8241 0x5e, 0x2e, 0x47, 0x8e, 0x02, 0x5e, 0x56, 0x47,
8242 0x8f, 0x02, 0x5e, 0x62, 0x47, 0x92, 0x02, 0x5e,
8243 0x65, 0x47, 0x90, 0x02, 0x5e, 0xc2, 0x47, 0x97,
8244 0x02, 0x5e, 0xd8, 0x47, 0x95, 0x02, 0x5e, 0xe8,
8245 0x47, 0x99, 0x02, 0x5f, 0x23, 0x47, 0x9a, 0x02,
8246 0x5f, 0x5c, 0x47, 0x9c, 0x02, 0x5f, 0xd4, 0x47,
8247 0xa3, 0x02, 0x5f, 0xe0, 0x47, 0xa2, 0x02, 0x5f,
8248 0xfb, 0x47, 0xa9, 0x02, 0x60, 0x0c, 0x47, 0xa8,
8249 0x02, 0x60, 0x17, 0x47, 0xb0, 0x02, 0x60, 0x60,
8250 0x47, 0xb3, 0x02, 0x60, 0xed, 0x47, 0xbd, 0x02,
8251 0x62, 0x22, 0x35, 0x7b, 0x02, 0x62, 0x6a, 0x37,
8252 0x6d, 0x02, 0x62, 0x70, 0x47, 0xd1, 0x02, 0x62,
8253 0x86, 0x47, 0xd2, 0x02, 0x63, 0x4c, 0x4f, 0x57,
8254 0x02, 0x64, 0x02, 0x47, 0xde, 0x02, 0x66, 0x7e,
8255 0x47, 0xf0, 0x02, 0x66, 0xb0, 0x37, 0x14, 0x02,
8256 0x67, 0x1d, 0x47, 0xfe, 0x02, 0x68, 0xdd, 0x48,
8257 0x0c, 0x02, 0x68, 0xea, 0x48, 0x0e, 0x02, 0x69,
8258 0x51, 0x35, 0x4e, 0x02, 0x69, 0x6f, 0x48, 0x12,
8259 0x02, 0x69, 0x99, 0x37, 0x36, 0x02, 0x69, 0xdd,
8260 0x48, 0x14, 0x02, 0x6a, 0x1e, 0x48, 0x17, 0x02,
8261 0x6a, 0x58, 0x48, 0x1b, 0x02, 0x6a, 0x8c, 0x48,
8262 0x1f, 0x02, 0x6a, 0xb7, 0x48, 0x22, 0x02, 0x6a,
8263 0xff, 0x42, 0xa7, 0x02, 0x6c, 0x29, 0x44, 0x46,
8264 0x02, 0x6c, 0x73, 0x48, 0x4a, 0x02, 0x6c, 0x9e,
8265 0x4e, 0xee, 0x02, 0x6c, 0xdd, 0x48, 0x53, 0x02,
8266 0x6e, 0x40, 0x42, 0xc1, 0x02, 0x6e, 0x65, 0x48,
8267 0x60, 0x02, 0x6f, 0x94, 0x48, 0x70, 0x02, 0x6f,
8268 0xf6, 0x48, 0x7a, 0x02, 0x6f, 0xf7, 0x48, 0x7b,
8269 0x02, 0x6f, 0xf8, 0x48, 0x79, 0x02, 0x70, 0xf4,
8270 0x42, 0xcf, 0x02, 0x71, 0x0d, 0x48, 0x8b, 0x02,
8271 0x71, 0x39, 0x48, 0x8e, 0x02, 0x73, 0xda, 0x48,
8272 0xb3, 0x02, 0x73, 0xdb, 0x48, 0xb2, 0x02, 0x73,
8273 0xfe, 0x48, 0xb9, 0x02, 0x74, 0x10, 0x48, 0xbc,
8274 0x02, 0x74, 0x49, 0x48, 0xc0, 0x02, 0x76, 0x14,
8275 0x48, 0xce, 0x02, 0x76, 0x15, 0x48, 0xcd, 0x02,
8276 0x76, 0x31, 0x48, 0xd0, 0x02, 0x76, 0x84, 0x42,
8277 0xdd, 0x02, 0x76, 0x93, 0x48, 0xd5, 0x02, 0x77,
8278 0x0e, 0x48, 0xda, 0x02, 0x77, 0x23, 0x48, 0xdc,
8279 0x02, 0x77, 0x52, 0x48, 0xe0, 0x02, 0x79, 0x85,
8280 0x48, 0xf0, 0x02, 0x79, 0xb4, 0x4e, 0xa5, 0x02,
8281 0x7a, 0x84, 0x48, 0xfc, 0x02, 0x7b, 0xb3, 0x49,
8282 0x0b, 0x02, 0x7b, 0xbe, 0x49, 0x0d, 0x02, 0x7b,
8283 0xc7, 0x49, 0x0e, 0x02, 0x7c, 0x3c, 0x4e, 0xfc,
8284 0x02, 0x7c, 0xb8, 0x49, 0x14, 0x02, 0x7d, 0x73,
8285 0x4e, 0x5c, 0x02, 0x7d, 0xa0, 0x49, 0x1c, 0x02,
8286 0x7e, 0x10, 0x49, 0x1e, 0x02, 0x7f, 0xb7, 0x36,
8287 0x4a, 0x02, 0x80, 0x8a, 0x49, 0x27, 0x02, 0x80,
8288 0xbb, 0x49, 0x2d, 0x02, 0x82, 0x77, 0x42, 0xf4,
8289 0x02, 0x82, 0x82, 0x49, 0x39, 0x02, 0x82, 0xf3,
8290 0x49, 0x3b, 0x02, 0x83, 0xcd, 0x42, 0xfa, 0x02,
8291 0x84, 0x0c, 0x49, 0x42, 0x02, 0x84, 0x55, 0x49,
8292 0x45, 0x02, 0x85, 0x6b, 0x49, 0x52, 0x02, 0x85,
8293 0xc8, 0x49, 0x55, 0x02, 0x85, 0xc9, 0x49, 0x56,
8294 0x02, 0x86, 0xd7, 0x49, 0x60, 0x02, 0x86, 0xfa,
8295 0x49, 0x63, 0x02, 0x89, 0x46, 0x49, 0x7c, 0x02,
8296 0x89, 0x49, 0x49, 0x7b, 0x02, 0x89, 0x6b, 0x49,
8297 0x81, 0x02, 0x89, 0x87, 0x37, 0xad, 0x02, 0x89,
8298 0x88, 0x49, 0x88, 0x02, 0x89, 0xba, 0x49, 0x92,
8299 0x02, 0x89, 0xbb, 0x49, 0x93, 0x02, 0x8a, 0x1e,
8300 0x49, 0x9b, 0x02, 0x8a, 0x29, 0x49, 0x9c, 0x02,
8301 0x8a, 0x43, 0x49, 0xa0, 0x02, 0x8a, 0x71, 0x49,
8302 0x9f, 0x02, 0x8a, 0x99, 0x49, 0xa7, 0x02, 0x8a,
8303 0xcd, 0x49, 0xa8, 0x02, 0x8a, 0xdd, 0x49, 0xaf,
8304 0x02, 0x8a, 0xe4, 0x49, 0xae, 0x02, 0x8b, 0xc1,
8305 0x49, 0xba, 0x02, 0x8b, 0xef, 0x49, 0xbb, 0x02,
8306 0x8c, 0xdd, 0x1d, 0xd9, 0x02, 0x8d, 0x10, 0x49,
8307 0xc2, 0x02, 0x8d, 0x71, 0x49, 0xc3, 0x02, 0x8d,
8308 0xfb, 0x49, 0xc5, 0x02, 0x8e, 0x17, 0x37, 0xb0,
8309 0x02, 0x8e, 0x1f, 0x49, 0xc6, 0x02, 0x8e, 0x36,
8310 0x49, 0xca, 0x02, 0x8e, 0x89, 0x49, 0xcd, 0x02,
8311 0x8e, 0xeb, 0x49, 0xcf, 0x02, 0x8e, 0xf6, 0x1d,
8312 0xf9, 0x02, 0x8f, 0x32, 0x49, 0xd1, 0x02, 0x8f,
8313 0xf8, 0x49, 0xd7, 0x02, 0x92, 0xa0, 0x49, 0xe5,
8314 0x02, 0x92, 0xb1, 0x49, 0xe6, 0x02, 0x94, 0x90,
8315 0x49, 0xf7, 0x02, 0x95, 0xcf, 0x4a, 0x00, 0x02,
8316 0x96, 0x7f, 0x36, 0x19, 0x02, 0x96, 0xf0, 0x4a,
8317 0x0f, 0x02, 0x97, 0x19, 0x4a, 0x12, 0x02, 0x97,
8318 0x50, 0x4a, 0x16, 0x02, 0x98, 0xc6, 0x4a, 0x27,
8319 0x02, 0x9a, 0x72, 0x4a, 0x39, 0x02, 0x9d, 0x4b,
8320 0x35, 0x95, 0x02, 0x9d, 0xdb, 0x4a, 0x52, 0x02,
8321 0x9e, 0x15, 0x4a, 0x5c, 0x02, 0x9e, 0x3d, 0x4f,
8322 0x5b, 0x02, 0x9e, 0x49, 0x4a, 0x5e, 0x02, 0x9e,
8323 0x8a, 0x4a, 0x5d, 0x02, 0x9e, 0xc4, 0x4a, 0x66,
8324 0x02, 0x9e, 0xdb, 0x4a, 0x6e, 0x02, 0x9e, 0xe9,
8325 0x4a, 0x6b, 0x02, 0x9f, 0xce, 0x4a, 0x7f, 0x02,
8326 0x9f, 0xd7, 0x4a, 0x7f, 0x02, 0xa0, 0x1a, 0x4a,
8327 0x85, 0x02, 0xa0, 0x2f, 0x4a, 0x83, 0x02, 0xa0,
8328 0x82, 0x4a, 0x8c, 0x02, 0xa0, 0xf9, 0x4a, 0x8b,
8329 0x02, 0xa1, 0x90, 0x43, 0x4b, 0x02, 0xa2, 0xb2,
8330 0x4e, 0x68, 0x02, 0xa3, 0x8c, 0x4a, 0xa5, 0x02,
8331 0xa4, 0x37, 0x4a, 0xa7, 0x02, 0xa5, 0xf1, 0x4a,
8332 0xb3, 0x02, 0xa6, 0x02, 0x4a, 0xb5, 0x02, 0xa6,
8333 0x1a, 0x4f, 0x5c, 0x02, 0xa6, 0xb2, 0x4a, 0xb9,
8334 0x02, 0xa9, 0xe6, 0x37, 0x41, 0x02, 0xb7, 0x46,
8335 0x35, 0xd4, 0x02, 0xb7, 0x51, 0x36, 0x2a, 0x02,
8336 0xb7, 0x53, 0x4e, 0x78, 0x02, 0xb7, 0x5a, 0x4e,
8337 0x80, 0x02, 0xb7, 0x5c, 0x4e, 0x81, 0x02, 0xb7,
8338 0x65, 0x4f, 0x17, 0x02, 0xb7, 0x76, 0x4e, 0x92,
8339 0x02, 0xb7, 0x77, 0x35, 0xd6, 0x02, 0xb7, 0x7c,
8340 0x4e, 0x9d, 0x02, 0xb7, 0x82, 0x4e, 0xad, 0x02,
8341 0xb7, 0x89, 0x36, 0xf0, 0x02, 0xb7, 0x8b, 0x4e,
8342 0xb5, 0x02, 0xb7, 0x8e, 0x35, 0x9c, 0x02, 0xb7,
8343 0x94, 0x4e, 0xb9, 0x02, 0xb7, 0xac, 0x4e, 0xd0,
8344 0x02, 0xb7, 0xaf, 0x4e, 0xd4, 0x02, 0xb7, 0xbd,
8345 0x37, 0x5e, 0x02, 0xb7, 0xc9, 0x4e, 0xe2, 0x02,
8346 0xb7, 0xcf, 0x4e, 0xe9, 0x02, 0xb7, 0xd2, 0x4e,
8347 0xec, 0x02, 0xb7, 0xd8, 0x35, 0x53, 0x02, 0xb7,
8348 0xf0, 0x4f, 0x10, 0x02, 0xb8, 0x0d, 0x4f, 0x20,
8349 0x02, 0xb8, 0x17, 0x4f, 0x24, 0x02, 0xb8, 0x1a,
8350 0x37, 0xc6, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x34,
8351 0x02, 0x35, 0x81, 0x00, 0x4e, 0x08, 0x34, 0x97,
8352 0x00, 0x4e, 0x0e, 0x4e, 0x69, 0x00, 0x4e, 0x19,
8353 0x36, 0xb9, 0x00, 0x4e, 0x26, 0x4e, 0x6a, 0x00,
8354 0x4e, 0x30, 0x3c, 0x1a, 0x00, 0x4e, 0x39, 0x36,
8355 0x5a, 0x00, 0x4e, 0x3b, 0x35, 0xf4, 0x00, 0x4e,
8356 0x73, 0x36, 0x90, 0x00, 0x4e, 0xa1, 0x36, 0xcf,
8357 0x00, 0x4e, 0xa4, 0x34, 0x7f, 0x00, 0x4e, 0xca,
8358 0x35, 0xd4, 0x00, 0x4f, 0x34, 0x36, 0xa0, 0x00,
8359 0x4f, 0x4f, 0x35, 0xfc, 0x00, 0x4f, 0x60, 0x3c,
8360 0x1c, 0x00, 0x4f, 0x73, 0x4e, 0x6c, 0x00, 0x4f,
8361 0x75, 0x34, 0x47, 0x00, 0x4f, 0x7f, 0x34, 0x8a,
8362 0x00, 0x4f, 0xae, 0x34, 0x46, 0x00, 0x4f, 0xb5,
8363 0x36, 0x1b, 0x00, 0x4f, 0xbf, 0x34, 0xc2, 0x00,
8364 0x50, 0x24, 0x36, 0x5f, 0x00, 0x50, 0x26, 0x1d,
8365 0xfa, 0x00, 0x50, 0x49, 0x34, 0x61, 0x00, 0x50,
8366 0x4f, 0x36, 0xbe, 0x00, 0x50, 0x56, 0x4e, 0x6d,
8367 0x00, 0x50, 0x65, 0x34, 0x7b, 0x00, 0x50, 0x85,
8368 0x34, 0xd0, 0x00, 0x50, 0x91, 0x34, 0x79, 0x00,
8369 0x50, 0xc5, 0x1d, 0xee, 0x00, 0x50, 0xca, 0x1f,
8370 0x2e, 0x00, 0x50, 0xcf, 0x34, 0xa2, 0x00, 0x50,
8371 0xe7, 0x34, 0x30, 0x00, 0x50, 0xed, 0x4e, 0x6e,
8372 0x00, 0x50, 0xf2, 0x52, 0xac, 0x00, 0x51, 0x1a,
8373 0x37, 0x16, 0x00, 0x51, 0x32, 0x1e, 0x76, 0x00,
8374 0x51, 0x46, 0x34, 0xa5, 0x00, 0x51, 0x4d, 0x34,
8375 0x4d, 0x00, 0x51, 0x4e, 0x36, 0x7d, 0x00, 0x51,
8376 0x54, 0x10, 0x74, 0x00, 0x51, 0x68, 0x36, 0x42,
8377 0x00, 0x51, 0x6b, 0x4e, 0x6f, 0x00, 0x51, 0x6c,
8378 0x34, 0x80, 0x00, 0x51, 0x77, 0x35, 0xa5, 0x00,
8379 0x51, 0x7c, 0x35, 0xb4, 0x00, 0x51, 0x89, 0x1e,
8380 0x87, 0x00, 0x51, 0x8d, 0x08, 0x36, 0x00, 0x51,
8381 0x92, 0x36, 0xd6, 0x00, 0x51, 0x93, 0x34, 0xd1,
8382 0x00, 0x51, 0x95, 0x10, 0x82, 0x00, 0x51, 0xa4,
8383 0x1e, 0x89, 0x00, 0x51, 0xac, 0x0c, 0x59, 0x00,
8384 0x51, 0xb4, 0x34, 0x5c, 0x00, 0x51, 0xcb, 0x1e,
8385 0x3e, 0x00, 0x51, 0xdb, 0x34, 0xd2, 0x00, 0x51,
8386 0xde, 0x4f, 0x53, 0x00, 0x51, 0xe1, 0x36, 0xd9,
8387 0x00, 0x51, 0xfd, 0x4e, 0x72, 0x00, 0x52, 0x03,
8388 0x36, 0x22, 0x00, 0x52, 0x06, 0x34, 0xbb, 0x00,
8389 0x52, 0x24, 0x36, 0xa1, 0x00, 0x52, 0x38, 0x35,
8390 0xb5, 0x00, 0x52, 0x4a, 0x35, 0xdd, 0x00, 0x52,
8391 0x4d, 0x36, 0x41, 0x00, 0x52, 0x64, 0x4e, 0x74,
8392 0x00, 0x52, 0x71, 0x4e, 0x75, 0x00, 0x52, 0x72,
8393 0x05, 0xc2, 0x00, 0x52, 0x75, 0x1e, 0x2b, 0x00,
8394 0x52, 0x8d, 0x37, 0x1a, 0x00, 0x52, 0xc7, 0x36,
8395 0xf6, 0x00, 0x52, 0xc9, 0x0e, 0x29, 0x00, 0x52,
8396 0xd7, 0x37, 0x1b, 0x00, 0x52, 0xdd, 0x36, 0x05,
8397 0x00, 0x52, 0xe2, 0x36, 0x2a, 0x00, 0x52, 0xe4,
8398 0x34, 0x1a, 0x00, 0x52, 0xfa, 0x09, 0x07, 0x00,
8399 0x53, 0x00, 0x37, 0xcf, 0x00, 0x53, 0x05, 0x36,
8400 0xc3, 0x00, 0x53, 0x07, 0x20, 0xd4, 0x00, 0x53,
8401 0x15, 0x1f, 0x2f, 0x00, 0x53, 0x16, 0x35, 0x61,
8402 0x00, 0x53, 0x39, 0x36, 0xaa, 0x00, 0x53, 0x3f,
8403 0x4e, 0x77, 0x00, 0x53, 0x40, 0x34, 0xd4, 0x00,
8404 0x53, 0x4a, 0x36, 0xa2, 0x00, 0x53, 0x51, 0x0d,
8405 0x70, 0x00, 0x53, 0x5a, 0x36, 0x98, 0x00, 0x53,
8406 0x65, 0x52, 0xf3, 0x00, 0x53, 0x71, 0x35, 0x80,
8407 0x00, 0x53, 0x78, 0x35, 0x5f, 0x00, 0x53, 0x7f,
8408 0x06, 0xa2, 0x00, 0x53, 0xa9, 0x1d, 0xd8, 0x00,
8409 0x53, 0xc9, 0x4f, 0x39, 0x00, 0x53, 0xca, 0x35,
8410 0x8e, 0x00, 0x53, 0xce, 0x34, 0x8f, 0x00, 0x53,
8411 0xd7, 0x35, 0xf5, 0x00, 0x53, 0xdb, 0x1f, 0x2a,
8412 0x00, 0x53, 0xdf, 0x37, 0x1f, 0x00, 0x53, 0xe0,
8413 0x53, 0x00, 0x00, 0x53, 0xf1, 0x1e, 0x0c, 0x00,
8414 0x53, 0xf2, 0x34, 0x8b, 0x00, 0x54, 0x0f, 0x34,
8415 0xc9, 0x00, 0x54, 0x38, 0x35, 0x8f, 0x00, 0x54,
8416 0x40, 0x4e, 0x79, 0x00, 0x54, 0x48, 0x36, 0x76,
8417 0x00, 0x54, 0x68, 0x09, 0x2a, 0x00, 0x54, 0xac,
8418 0x4f, 0x35, 0x00, 0x54, 0xb2, 0x35, 0xdc, 0x00,
8419 0x54, 0xe8, 0x1e, 0x17, 0x00, 0x55, 0x10, 0x36,
8420 0x83, 0x00, 0x55, 0x33, 0x1e, 0x8b, 0x00, 0x55,
8421 0x39, 0x1e, 0x8a, 0x00, 0x55, 0x44, 0x1e, 0x32,
8422 0x00, 0x55, 0x46, 0x36, 0x06, 0x00, 0x55, 0x53,
8423 0x35, 0xaa, 0x00, 0x55, 0x61, 0x38, 0x39, 0x00,
8424 0x55, 0x84, 0x4e, 0x5e, 0x00, 0x55, 0x9c, 0x4e,
8425 0x7b, 0x00, 0x55, 0x9d, 0x1d, 0xe3, 0x00, 0x55,
8426 0xa9, 0x1f, 0x30, 0x00, 0x55, 0xab, 0x35, 0x8b,
8427 0x00, 0x55, 0xb0, 0x1d, 0xf0, 0x00, 0x55, 0xe4,
8428 0x1e, 0x8c, 0x00, 0x56, 0x05, 0x53, 0x2d, 0x00,
8429 0x56, 0x06, 0x0b, 0x70, 0x00, 0x56, 0x09, 0x4e,
8430 0x7d, 0x00, 0x56, 0x32, 0x1e, 0x8d, 0x00, 0x56,
8431 0x42, 0x1d, 0xda, 0x00, 0x56, 0x4c, 0x1e, 0x29,
8432 0x00, 0x56, 0x68, 0x34, 0x15, 0x00, 0x56, 0x74,
8433 0x34, 0xbc, 0x00, 0x56, 0x78, 0x1e, 0x52, 0x00,
8434 0x56, 0xa5, 0x1e, 0x8e, 0x00, 0x56, 0xae, 0x1f,
8435 0x31, 0x00, 0x56, 0xc0, 0x37, 0x24, 0x00, 0x56,
8436 0xc1, 0x34, 0xd7, 0x00, 0x56, 0xce, 0x4e, 0x82,
8437 0x00, 0x56, 0xee, 0x4e, 0x83, 0x00, 0x57, 0x0d,
8438 0x34, 0xd8, 0x00, 0x57, 0x47, 0x34, 0x78, 0x00,
8439 0x57, 0x6a, 0x36, 0x74, 0x00, 0x57, 0xce, 0x09,
8440 0xd3, 0x00, 0x57, 0xd6, 0x4e, 0x84, 0x00, 0x57,
8441 0xf4, 0x34, 0x98, 0x00, 0x58, 0x0b, 0x1e, 0x8f,
8442 0x00, 0x58, 0x19, 0x1f, 0x32, 0x00, 0x58, 0x35,
8443 0x1e, 0x49, 0x00, 0x58, 0x3d, 0x4e, 0x85, 0x00,
8444 0x58, 0x40, 0x34, 0x48, 0x00, 0x58, 0x58, 0x1e,
8445 0x4d, 0x00, 0x58, 0x59, 0x4e, 0x86, 0x00, 0x58,
8446 0x5a, 0x1e, 0x42, 0x00, 0x58, 0x9c, 0x36, 0x71,
8447 0x00, 0x58, 0xa8, 0x0e, 0x7d, 0x00, 0x58, 0xab,
8448 0x34, 0xd9, 0x00, 0x59, 0x06, 0x53, 0x7b, 0x00,
8449 0x59, 0x1b, 0x1f, 0x33, 0x00, 0x59, 0x27, 0x36,
8450 0x55, 0x00, 0x59, 0x4f, 0x4e, 0x87, 0x00, 0x59,
8451 0x51, 0x35, 0xab, 0x00, 0x59, 0x53, 0x37, 0xd1,
8452 0x00, 0x59, 0x60, 0x4e, 0x89, 0x00, 0x59, 0x62,
8453 0x4e, 0x8a, 0x00, 0x59, 0x73, 0x36, 0x04, 0x00,
8454 0x59, 0x84, 0x36, 0xe7, 0x00, 0x59, 0xa5, 0x36,
8455 0x4f, 0x00, 0x59, 0xc9, 0x34, 0x8c, 0x00, 0x59,
8456 0xda, 0x34, 0xda, 0x00, 0x59, 0xec, 0x36, 0xae,
8457 0x00, 0x59, 0xff, 0x35, 0xe0, 0x00, 0x5a, 0x1c,
8458 0x37, 0x26, 0x00, 0x5a, 0x29, 0x1e, 0x6f, 0x00,
8459 0x5a, 0x36, 0x34, 0xdb, 0x00, 0x5a, 0x66, 0x36,
8460 0xb2, 0x00, 0x5a, 0x9b, 0x1e, 0x68, 0x00, 0x5a,
8461 0xbe, 0x1e, 0x90, 0x00, 0x5a, 0xc2, 0x37, 0x27,
8462 0x00, 0x5a, 0xcc, 0x1d, 0xfb, 0x00, 0x5a, 0xda,
8463 0x4e, 0x8b, 0x00, 0x5b, 0x5a, 0x4e, 0x8c, 0x00,
8464 0x5b, 0x73, 0x4e, 0x8d, 0x00, 0x5b, 0x7c, 0x4e,
8465 0x8e, 0x00, 0x5b, 0xb3, 0x34, 0x6d, 0x00, 0x5b,
8466 0xb5, 0x36, 0x07, 0x00, 0x5b, 0xc3, 0x37, 0x29,
8467 0x00, 0x5b, 0xd2, 0x35, 0x78, 0x00, 0x5b, 0xdb,
8468 0x20, 0xf4, 0x00, 0x5b, 0xe7, 0x0c, 0xe1, 0x00,
8469 0x5b, 0xe8, 0x37, 0x42, 0x00, 0x5c, 0x06, 0x09,
8470 0x95, 0x00, 0x5c, 0x0a, 0x36, 0x4d, 0x00, 0x5c,
8471 0x0b, 0x36, 0x23, 0x00, 0x5c, 0x0e, 0x36, 0x8a,
8472 0x00, 0x5c, 0x0f, 0x36, 0x09, 0x00, 0x5c, 0x28,
8473 0x1f, 0x34, 0x00, 0x5c, 0x51, 0x1d, 0xf2, 0x00,
8474 0x5c, 0x60, 0x1e, 0x4a, 0x00, 0x5c, 0x64, 0x34,
8475 0x31, 0x00, 0x5c, 0x6e, 0x12, 0x32, 0x00, 0x5d,
8476 0x29, 0x36, 0xc4, 0x00, 0x5d, 0x4e, 0x34, 0xdd,
8477 0x00, 0x5d, 0x87, 0x34, 0xde, 0x00, 0x5d, 0xb2,
8478 0x3c, 0x2d, 0x00, 0x5d, 0xc9, 0x34, 0xdf, 0x00,
8479 0x5d, 0xcc, 0x34, 0x73, 0x00, 0x5d, 0xd3, 0x34,
8480 0xe0, 0x00, 0x5d, 0xe1, 0x35, 0xff, 0x00, 0x5d,
8481 0xe5, 0x35, 0xc3, 0x00, 0x5d, 0xe8, 0x35, 0x92,
8482 0x00, 0x5d, 0xf7, 0x1d, 0xff, 0x00, 0x5d, 0xfd,
8483 0x0b, 0x65, 0x00, 0x5e, 0x06, 0x36, 0xa3, 0x00,
8484 0x5e, 0x1d, 0x36, 0x77, 0x00, 0x5e, 0x30, 0x34,
8485 0x75, 0x00, 0x5e, 0x3d, 0x36, 0xd0, 0x00, 0x5e,
8486 0x43, 0x4e, 0x91, 0x00, 0x5e, 0x54, 0x37, 0x2d,
8487 0x00, 0x5e, 0x63, 0x36, 0xba, 0x00, 0x5e, 0x64,
8488 0x1e, 0x93, 0x00, 0x5e, 0x73, 0x36, 0xbb, 0x00,
8489 0x5e, 0x7e, 0x35, 0x84, 0x00, 0x5e, 0x96, 0x1e,
8490 0x70, 0x00, 0x5e, 0xa7, 0x4e, 0x92, 0x00, 0x5e,
8491 0xad, 0x34, 0xa9, 0x00, 0x5e, 0xc9, 0x0f, 0xbf,
8492 0x00, 0x5e, 0xca, 0x4f, 0x4f, 0x00, 0x5e, 0xcb,
8493 0x38, 0xae, 0x00, 0x5e, 0xcf, 0x1f, 0x36, 0x00,
8494 0x5e, 0xd0, 0x1f, 0x35, 0x00, 0x5e, 0xdf, 0x1e,
8495 0x6a, 0x00, 0x5e, 0xe0, 0x1e, 0x18, 0x00, 0x5e,
8496 0xe3, 0x37, 0x2f, 0x00, 0x5e, 0xf6, 0x34, 0x67,
8497 0x00, 0x5e, 0xf7, 0x34, 0xaa, 0x00, 0x5e, 0xfa,
8498 0x34, 0x7c, 0x00, 0x5e, 0xfb, 0x35, 0x69, 0x00,
8499 0x5f, 0x0a, 0x36, 0xbc, 0x00, 0x5f, 0x2d, 0x34,
8500 0xe1, 0x00, 0x5f, 0x31, 0x35, 0xf3, 0x00, 0x5f,
8501 0x38, 0x4e, 0x94, 0x00, 0x5f, 0x45, 0x37, 0xce,
8502 0x00, 0x5f, 0x50, 0x3c, 0x1f, 0x00, 0x5f, 0x62,
8503 0x4e, 0x5f, 0x00, 0x5f, 0x69, 0x35, 0xd7, 0x00,
8504 0x5f, 0x6b, 0x36, 0x68, 0x00, 0x5f, 0x80, 0x35,
8505 0x5d, 0x00, 0x5f, 0x98, 0x34, 0xe2, 0x00, 0x5f,
8506 0xa1, 0x4e, 0x95, 0x00, 0x5f, 0xae, 0x36, 0xa8,
8507 0x00, 0x5f, 0xb5, 0x36, 0x69, 0x00, 0x5f, 0xbd,
8508 0x1d, 0xea, 0x00, 0x5f, 0xcd, 0x36, 0x91, 0x00,
8509 0x5f, 0xd8, 0x36, 0xd1, 0x00, 0x5f, 0xd9, 0x36,
8510 0xd2, 0x00, 0x5f, 0xdd, 0x4e, 0x96, 0x00, 0x60,
8511 0x25, 0x35, 0x90, 0x00, 0x60, 0x50, 0x35, 0x99,
8512 0x00, 0x60, 0x62, 0x1d, 0xe0, 0x00, 0x60, 0x65,
8513 0x34, 0xa4, 0x00, 0x60, 0x75, 0x35, 0xac, 0x00,
8514 0x60, 0x94, 0x05, 0x79, 0x00, 0x60, 0x97, 0x1e,
8515 0x94, 0x00, 0x60, 0x9e, 0x54, 0x36, 0x00, 0x60,
8516 0xa4, 0x3c, 0x20, 0x00, 0x60, 0xb2, 0x34, 0xb3,
8517 0x00, 0x60, 0xc5, 0x36, 0x12, 0x00, 0x60, 0xd8,
8518 0x34, 0xe3, 0x00, 0x61, 0x08, 0x1e, 0x7a, 0x00,
8519 0x61, 0x09, 0x36, 0xf3, 0x00, 0x61, 0x0f, 0x35,
8520 0x47, 0x00, 0x61, 0x3d, 0x34, 0xe4, 0x00, 0x61,
8521 0x48, 0x4e, 0x60, 0x00, 0x61, 0x4c, 0x35, 0xc4,
8522 0x00, 0x61, 0x4e, 0x34, 0x2c, 0x00, 0x61, 0x62,
8523 0x4e, 0x97, 0x00, 0x61, 0x67, 0x1d, 0xf5, 0x00,
8524 0x61, 0x68, 0x34, 0x10, 0x00, 0x61, 0x8e, 0x0b,
8525 0x00, 0x00, 0x61, 0x90, 0x37, 0x10, 0x00, 0x61,
8526 0xa4, 0x34, 0xbd, 0x00, 0x61, 0xb2, 0x35, 0xb6,
8527 0x00, 0x61, 0xf2, 0x34, 0x39, 0x00, 0x61, 0xf8,
8528 0x4e, 0x99, 0x00, 0x61, 0xfe, 0x34, 0xe5, 0x00,
8529 0x62, 0x10, 0x36, 0x2b, 0x00, 0x62, 0x3b, 0x36,
8530 0xeb, 0x00, 0x62, 0x3f, 0x36, 0xd3, 0x00, 0x62,
8531 0x40, 0x36, 0x02, 0x00, 0x62, 0x41, 0x1f, 0x37,
8532 0x00, 0x62, 0x47, 0x36, 0x3b, 0x00, 0x62, 0x48,
8533 0x1e, 0xc2, 0x00, 0x62, 0x49, 0x1e, 0x63, 0x00,
8534 0x62, 0x68, 0x34, 0xe6, 0x00, 0x62, 0x71, 0x35,
8535 0x45, 0x00, 0x62, 0xb1, 0x36, 0xc5, 0x00, 0x62,
8536 0xcc, 0x37, 0x32, 0x00, 0x62, 0xcf, 0x34, 0xe7,
8537 0x00, 0x62, 0xd0, 0x1d, 0xe1, 0x00, 0x62, 0xd2,
8538 0x35, 0x93, 0x00, 0x62, 0xd4, 0x13, 0x5d, 0x00,
8539 0x62, 0xf3, 0x1f, 0x21, 0x00, 0x62, 0xf7, 0x34,
8540 0x88, 0x00, 0x63, 0x3a, 0x4f, 0x3e, 0x00, 0x63,
8541 0x3d, 0x1e, 0x62, 0x00, 0x63, 0x4c, 0x34, 0x5d,
8542 0x00, 0x63, 0x57, 0x1e, 0x3f, 0x00, 0x63, 0x67,
8543 0x34, 0xc3, 0x00, 0x63, 0x68, 0x35, 0xec, 0x00,
8544 0x63, 0x69, 0x1e, 0x95, 0x00, 0x63, 0x6e, 0x34,
8545 0x9d, 0x00, 0x63, 0x72, 0x1d, 0xfc, 0x00, 0x63,
8546 0x83, 0x36, 0x43, 0x00, 0x63, 0x88, 0x35, 0xf6,
8547 0x00, 0x63, 0x92, 0x34, 0xaf, 0x00, 0x63, 0xa1,
8548 0x35, 0xd8, 0x00, 0x63, 0xa7, 0x35, 0xc6, 0x00,
8549 0x63, 0xc3, 0x1f, 0x27, 0x00, 0x63, 0xc6, 0x37,
8550 0x34, 0x00, 0x63, 0xf4, 0x35, 0x57, 0x00, 0x64,
8551 0x06, 0x1e, 0x96, 0x00, 0x64, 0x0f, 0x34, 0xe9,
8552 0x00, 0x64, 0x1c, 0x37, 0x33, 0x00, 0x64, 0x28,
8553 0x37, 0x35, 0x00, 0x64, 0x42, 0x34, 0x9e, 0x00,
8554 0x64, 0x69, 0x36, 0xd7, 0x00, 0x64, 0x6f, 0x4f,
8555 0x28, 0x00, 0x64, 0x7a, 0x1e, 0x21, 0x00, 0x64,
8556 0xb0, 0x1e, 0x24, 0x00, 0x64, 0xe2, 0x1e, 0x45,
8557 0x00, 0x64, 0xf2, 0x34, 0xea, 0x00, 0x64, 0xf6,
8558 0x4e, 0x9e, 0x00, 0x65, 0x1d, 0x34, 0xe8, 0x00,
8559 0x65, 0x4f, 0x0d, 0xc4, 0x00, 0x65, 0x5d, 0x34,
8560 0xeb, 0x00, 0x65, 0x5e, 0x4e, 0xa1, 0x00, 0x65,
8561 0x62, 0x34, 0x71, 0x00, 0x65, 0x77, 0x36, 0xb3,
8562 0x00, 0x65, 0x83, 0x1e, 0x98, 0x00, 0x65, 0x87,
8563 0x4e, 0xa3, 0x00, 0x65, 0x89, 0x4e, 0xa4, 0x00,
8564 0x65, 0x8e, 0x4e, 0xa6, 0x00, 0x65, 0x90, 0x34,
8565 0xb5, 0x00, 0x65, 0x9c, 0x35, 0xed, 0x00, 0x65,
8566 0xa7, 0x4f, 0x41, 0x00, 0x65, 0xbc, 0x35, 0x5c,
8567 0x00, 0x65, 0xc5, 0x37, 0x08, 0x00, 0x65, 0xdf,
8568 0x54, 0xbe, 0x00, 0x65, 0xe1, 0x4e, 0xa9, 0x00,
8569 0x65, 0xe2, 0x06, 0x37, 0x00, 0x66, 0x0e, 0x36,
8570 0xe4, 0x00, 0x66, 0x1e, 0x21, 0x1c, 0x00, 0x66,
8571 0x5f, 0x34, 0xec, 0x00, 0x66, 0x66, 0x1d, 0xe2,
8572 0x00, 0x66, 0x67, 0x4e, 0xaa, 0x00, 0x66, 0x69,
8573 0x36, 0xa5, 0x00, 0x66, 0x6e, 0x4e, 0xab, 0x00,
8574 0x66, 0x74, 0x0a, 0x56, 0x00, 0x66, 0x77, 0x39,
8575 0x11, 0x00, 0x66, 0x81, 0x35, 0xa0, 0x00, 0x66,
8576 0x91, 0x34, 0x28, 0x00, 0x66, 0x96, 0x36, 0x5e,
8577 0x00, 0x66, 0x97, 0x35, 0x46, 0x00, 0x66, 0xb5,
8578 0x54, 0xda, 0x00, 0x66, 0xc1, 0x1f, 0x38, 0x00,
8579 0x66, 0xd9, 0x1e, 0x13, 0x00, 0x66, 0xdc, 0x36,
8580 0xfd, 0x00, 0x66, 0xf4, 0x34, 0x81, 0x00, 0x66,
8581 0xf5, 0x37, 0x3b, 0x00, 0x66, 0xf8, 0x36, 0x03,
8582 0x00, 0x66, 0xfb, 0x37, 0xcd, 0x00, 0x66, 0xfc,
8583 0x37, 0x20, 0x00, 0x67, 0x00, 0x4e, 0xaf, 0x00,
8584 0x67, 0x08, 0x35, 0xb2, 0x00, 0x67, 0x09, 0x36,
8585 0xf7, 0x00, 0x67, 0x0b, 0x36, 0xc6, 0x00, 0x67,
8586 0x0d, 0x36, 0xb7, 0x00, 0x67, 0x15, 0x36, 0x6f,
8587 0x00, 0x67, 0x17, 0x0f, 0xd5, 0x00, 0x67, 0x1b,
8588 0x36, 0xd4, 0x00, 0x67, 0x1d, 0x36, 0x6b, 0x00,
8589 0x67, 0x1f, 0x35, 0x86, 0x00, 0x67, 0x53, 0x1e,
8590 0x0f, 0x00, 0x67, 0x56, 0x4f, 0x3a, 0x00, 0x67,
8591 0x5e, 0x37, 0x3c, 0x00, 0x67, 0x61, 0x4e, 0xb0,
8592 0x00, 0x67, 0x7e, 0x34, 0x95, 0x00, 0x67, 0xa6,
8593 0x1e, 0x99, 0x00, 0x67, 0xa9, 0x34, 0xed, 0x00,
8594 0x67, 0xc4, 0x4e, 0xb1, 0x00, 0x67, 0xca, 0x1e,
8595 0x65, 0x00, 0x67, 0xd4, 0x34, 0x91, 0x00, 0x67,
8596 0xe7, 0x34, 0xee, 0x00, 0x67, 0xf1, 0x36, 0x65,
8597 0x00, 0x68, 0x01, 0x21, 0x2e, 0x00, 0x68, 0x02,
8598 0x4e, 0xb2, 0x00, 0x68, 0x13, 0x1e, 0x25, 0x00,
8599 0x68, 0x1f, 0x4e, 0x61, 0x00, 0x68, 0x21, 0x34,
8600 0x82, 0x00, 0x68, 0x43, 0x34, 0xac, 0x00, 0x68,
8601 0x52, 0x21, 0x2c, 0x00, 0x68, 0x5d, 0x34, 0xc5,
8602 0x00, 0x68, 0x7a, 0x36, 0xf0, 0x00, 0x68, 0x81,
8603 0x37, 0x09, 0x00, 0x68, 0x85, 0x0d, 0x15, 0x00,
8604 0x68, 0x8d, 0x37, 0x3e, 0x00, 0x68, 0x97, 0x4f,
8605 0x37, 0x00, 0x68, 0x9b, 0x1e, 0x9b, 0x00, 0x68,
8606 0x9d, 0x37, 0x3d, 0x00, 0x68, 0xa2, 0x1e, 0x19,
8607 0x00, 0x68, 0xc8, 0x37, 0xcc, 0x00, 0x68, 0xda,
8608 0x1e, 0x38, 0x00, 0x69, 0x0d, 0x34, 0x99, 0x00,
8609 0x69, 0x30, 0x34, 0xf0, 0x00, 0x69, 0x3d, 0x4e,
8610 0xb3, 0x00, 0x69, 0x5e, 0x4e, 0xb4, 0x00, 0x69,
8611 0x62, 0x1e, 0x58, 0x00, 0x69, 0x6b, 0x34, 0xef,
8612 0x00, 0x69, 0x6f, 0x34, 0x94, 0x00, 0x69, 0x82,
8613 0x34, 0x5b, 0x00, 0x69, 0x8a, 0x1e, 0x06, 0x00,
8614 0x69, 0x94, 0x1e, 0x84, 0x00, 0x69, 0xa7, 0x34,
8615 0xf1, 0x00, 0x69, 0xbb, 0x37, 0x43, 0x00, 0x69,
8616 0xc1, 0x35, 0x9a, 0x00, 0x69, 0xcb, 0x35, 0xc7,
8617 0x00, 0x69, 0xcc, 0x1e, 0x40, 0x00, 0x69, 0xd9,
8618 0x36, 0xdd, 0x00, 0x69, 0xea, 0x35, 0x6f, 0x00,
8619 0x69, 0xfe, 0x55, 0x1f, 0x00, 0x6a, 0x0b, 0x1e,
8620 0x64, 0x00, 0x6a, 0x3d, 0x1e, 0x3a, 0x00, 0x6a,
8621 0x44, 0x34, 0xf2, 0x00, 0x6a, 0x55, 0x55, 0x25,
8622 0x00, 0x6a, 0x5f, 0x35, 0x87, 0x00, 0x6a, 0x73,
8623 0x37, 0xd4, 0x00, 0x6a, 0x8e, 0x34, 0x7e, 0x00,
8624 0x6a, 0x90, 0x34, 0xf3, 0x00, 0x6a, 0x9c, 0x4e,
8625 0xb6, 0x00, 0x6a, 0xdb, 0x06, 0xf3, 0x00, 0x6b,
8626 0x04, 0x0f, 0x5d, 0x00, 0x6b, 0x1d, 0x1d, 0xd7,
8627 0x00, 0x6b, 0x21, 0x35, 0xe7, 0x00, 0x6b, 0x24,
8628 0x3c, 0x22, 0x00, 0x6b, 0x4e, 0x36, 0x5b, 0x00,
8629 0x6b, 0x96, 0x36, 0x16, 0x00, 0x6b, 0xba, 0x08,
8630 0x74, 0x00, 0x6b, 0xbb, 0x34, 0x70, 0x00, 0x6c,
8631 0x08, 0x1f, 0x39, 0x00, 0x6c, 0x13, 0x34, 0xf5,
8632 0x00, 0x6c, 0x38, 0x4e, 0xba, 0x00, 0x6c, 0x3a,
8633 0x39, 0x62, 0x00, 0x6c, 0x72, 0x1f, 0x1e, 0x00,
8634 0x6c, 0xaa, 0x37, 0x48, 0x00, 0x6c, 0xbf, 0x05,
8635 0x0a, 0x00, 0x6c, 0xe1, 0x1e, 0x71, 0x00, 0x6c,
8636 0xe8, 0x36, 0x66, 0x00, 0x6d, 0x3e, 0x34, 0xae,
8637 0x00, 0x6d, 0x69, 0x35, 0xc8, 0x00, 0x6d, 0x6e,
8638 0x36, 0xb4, 0x00, 0x6d, 0x77, 0x05, 0x82, 0x00,
8639 0x6d, 0x78, 0x36, 0x1d, 0x00, 0x6d, 0x88, 0x36,
8640 0x0c, 0x00, 0x6d, 0xe4, 0x4e, 0xbd, 0x00, 0x6d,
8641 0xeb, 0x1d, 0xd5, 0x00, 0x6d, 0xfb, 0x36, 0x7c,
8642 0x00, 0x6e, 0x08, 0x4e, 0xbf, 0x00, 0x6e, 0x1a,
8643 0x09, 0x77, 0x00, 0x6e, 0x23, 0x1f, 0x3a, 0x00,
8644 0x6e, 0x2f, 0x35, 0xc9, 0x00, 0x6e, 0x6e, 0x1e,
8645 0x9d, 0x00, 0x6e, 0x72, 0x4e, 0xc0, 0x00, 0x6e,
8646 0x7e, 0x34, 0xcf, 0x00, 0x6e, 0x9d, 0x1e, 0x01,
8647 0x00, 0x6e, 0xa2, 0x1d, 0xd3, 0x00, 0x6e, 0xba,
8648 0x1e, 0x46, 0x00, 0x6e, 0xcb, 0x35, 0xe9, 0x00,
8649 0x6e, 0xd5, 0x4e, 0xc2, 0x00, 0x6e, 0xdb, 0x4e,
8650 0xc3, 0x00, 0x6e, 0xec, 0x1f, 0x3b, 0x00, 0x6e,
8651 0xfe, 0x34, 0xf8, 0x00, 0x6f, 0x11, 0x34, 0xf7,
8652 0x00, 0x6f, 0x22, 0x34, 0x14, 0x00, 0x6f, 0x23,
8653 0x0f, 0xc2, 0x00, 0x6f, 0x3e, 0x34, 0xf9, 0x00,
8654 0x6f, 0x51, 0x36, 0x9e, 0x00, 0x6f, 0x54, 0x35,
8655 0xb0, 0x00, 0x6f, 0x5b, 0x4e, 0xc4, 0x00, 0x6f,
8656 0x64, 0x4e, 0xc6, 0x00, 0x6f, 0x6e, 0x0b, 0xc8,
8657 0x00, 0x6f, 0x74, 0x4e, 0xc7, 0x00, 0x6f, 0x98,
8658 0x37, 0x47, 0x00, 0x6f, 0xef, 0x1e, 0x33, 0x00,
8659 0x6f, 0xf9, 0x39, 0x95, 0x00, 0x70, 0x15, 0x1e,
8660 0x6b, 0x00, 0x70, 0x1b, 0x37, 0x4a, 0x00, 0x70,
8661 0x1e, 0x1e, 0x51, 0x00, 0x70, 0x26, 0x1e, 0x3d,
8662 0x00, 0x70, 0x27, 0x36, 0x57, 0x00, 0x70, 0x4a,
8663 0x39, 0x98, 0x00, 0x70, 0x58, 0x1e, 0x57, 0x00,
8664 0x70, 0x70, 0x35, 0x6a, 0x00, 0x70, 0x78, 0x4f,
8665 0x2e, 0x00, 0x70, 0x7c, 0x1e, 0x10, 0x00, 0x70,
8666 0xad, 0x36, 0x5c, 0x00, 0x71, 0x49, 0x0f, 0xc3,
8667 0x00, 0x71, 0x4e, 0x1e, 0x26, 0x00, 0x71, 0x52,
8668 0x55, 0xad, 0x00, 0x71, 0x59, 0x35, 0x59, 0x00,
8669 0x71, 0x62, 0x37, 0x4b, 0x00, 0x71, 0x6e, 0x08,
8670 0xfd, 0x00, 0x71, 0x7d, 0x1e, 0x27, 0x00, 0x71,
8671 0x94, 0x1e, 0x7d, 0x00, 0x71, 0xb3, 0x39, 0xae,
8672 0x00, 0x71, 0xd0, 0x37, 0x0a, 0x00, 0x71, 0xff,
8673 0x34, 0xfa, 0x00, 0x72, 0x28, 0x15, 0xdf, 0x00,
8674 0x72, 0x2b, 0x3c, 0x26, 0x00, 0x72, 0x35, 0x09,
8675 0x0b, 0x00, 0x72, 0x36, 0x34, 0xb9, 0x00, 0x72,
8676 0x3a, 0x4f, 0x46, 0x00, 0x72, 0x3b, 0x37, 0x4c,
8677 0x00, 0x72, 0x3e, 0x4e, 0xc9, 0x00, 0x72, 0x4c,
8678 0x1e, 0x5b, 0x00, 0x72, 0x59, 0x1f, 0x1d, 0x00,
8679 0x72, 0xe1, 0x4f, 0x36, 0x00, 0x73, 0x1c, 0x37,
8680 0x4e, 0x00, 0x73, 0x2a, 0x0b, 0xb4, 0x00, 0x73,
8681 0x36, 0x36, 0xf8, 0x00, 0x73, 0x37, 0x1e, 0x7c,
8682 0x00, 0x73, 0x87, 0x37, 0x05, 0x00, 0x73, 0x8b,
8683 0x35, 0xa1, 0x00, 0x73, 0xca, 0x1e, 0x0b, 0x00,
8684 0x73, 0xce, 0x1e, 0xa0, 0x00, 0x73, 0xe5, 0x34,
8685 0xfb, 0x00, 0x73, 0xed, 0x34, 0xb1, 0x00, 0x74,
8686 0x22, 0x0b, 0x56, 0x00, 0x74, 0x32, 0x34, 0xfc,
8687 0x00, 0x74, 0x5f, 0x34, 0xfd, 0x00, 0x74, 0x62,
8688 0x21, 0x71, 0x00, 0x74, 0xb0, 0x35, 0x79, 0x00,
8689 0x74, 0xbd, 0x4e, 0xcd, 0x00, 0x74, 0xca, 0x37,
8690 0x4f, 0x00, 0x74, 0xd8, 0x55, 0xf6, 0x00, 0x74,
8691 0xdc, 0x35, 0x50, 0x00, 0x74, 0xe0, 0x34, 0xfe,
8692 0x00, 0x74, 0xef, 0x55, 0xfa, 0x00, 0x75, 0x04,
8693 0x1e, 0xa1, 0x00, 0x75, 0x0c, 0x34, 0xff, 0x00,
8694 0x75, 0x0d, 0x1e, 0xa2, 0x00, 0x75, 0x11, 0x1e,
8695 0x04, 0x00, 0x75, 0x15, 0x1e, 0xa3, 0x00, 0x75,
8696 0x26, 0x4f, 0x3b, 0x00, 0x75, 0x54, 0x36, 0xa4,
8697 0x00, 0x75, 0x5d, 0x4e, 0xce, 0x00, 0x75, 0xbc,
8698 0x4e, 0xcf, 0x00, 0x75, 0xc5, 0x36, 0xb1, 0x00,
8699 0x76, 0x08, 0x4e, 0xd1, 0x00, 0x76, 0x26, 0x1e,
8700 0x2d, 0x00, 0x76, 0x52, 0x1e, 0x7b, 0x00, 0x76,
8701 0x64, 0x4e, 0xd2, 0x00, 0x76, 0x69, 0x4e, 0xd3,
8702 0x00, 0x76, 0x72, 0x35, 0x00, 0x00, 0x76, 0x84,
8703 0x36, 0x79, 0x00, 0x76, 0x93, 0x1e, 0xa4, 0x00,
8704 0x76, 0xc6, 0x34, 0xc4, 0x00, 0x76, 0xca, 0x21,
8705 0x7b, 0x00, 0x76, 0xd4, 0x56, 0x1d, 0x00, 0x76,
8706 0xdb, 0x36, 0x2c, 0x00, 0x76, 0xdf, 0x36, 0xe5,
8707 0x00, 0x76, 0xf2, 0x36, 0xe9, 0x00, 0x76, 0xf4,
8708 0x36, 0x6e, 0x00, 0x77, 0x1e, 0x16, 0xb8, 0x00,
8709 0x77, 0x1f, 0x36, 0x1e, 0x00, 0x77, 0x37, 0x4e,
8710 0xd5, 0x00, 0x77, 0x3a, 0x34, 0xa6, 0x00, 0x77,
8711 0x7e, 0x4e, 0xd6, 0x00, 0x77, 0x8d, 0x56, 0x2e,
8712 0x00, 0x77, 0xa2, 0x56, 0x2f, 0x00, 0x77, 0xa5,
8713 0x1e, 0x6e, 0x00, 0x77, 0xac, 0x34, 0x92, 0x00,
8714 0x77, 0xe9, 0x35, 0xa4, 0x00, 0x78, 0x32, 0x36,
8715 0xc7, 0x00, 0x78, 0x3a, 0x36, 0x7f, 0x00, 0x78,
8716 0x5d, 0x36, 0x0d, 0x00, 0x78, 0x6c, 0x34, 0x83,
8717 0x00, 0x78, 0x7c, 0x1e, 0xa5, 0x00, 0x78, 0x91,
8718 0x0d, 0x7e, 0x00, 0x78, 0xd4, 0x35, 0x02, 0x00,
8719 0x78, 0xe8, 0x36, 0xda, 0x00, 0x78, 0xef, 0x35,
8720 0x4b, 0x00, 0x79, 0x2a, 0x35, 0x01, 0x00, 0x79,
8721 0x34, 0x3a, 0x38, 0x00, 0x79, 0x3a, 0x08, 0xd4,
8722 0x00, 0x79, 0x3c, 0x21, 0x83, 0x00, 0x79, 0x3e,
8723 0x34, 0x24, 0x00, 0x79, 0x40, 0x37, 0x57, 0x00,
8724 0x79, 0x41, 0x1d, 0xf4, 0x00, 0x79, 0x47, 0x1d,
8725 0xeb, 0x00, 0x79, 0x48, 0x06, 0x41, 0x00, 0x79,
8726 0x49, 0x34, 0x21, 0x00, 0x79, 0x50, 0x0f, 0x1e,
8727 0x00, 0x79, 0x53, 0x37, 0x58, 0x00, 0x79, 0x56,
8728 0x34, 0x2f, 0x00, 0x79, 0x5d, 0x09, 0x55, 0x00,
8729 0x79, 0x5e, 0x0a, 0x06, 0x00, 0x79, 0x62, 0x1f,
8730 0x29, 0x00, 0x79, 0x65, 0x09, 0xb5, 0x00, 0x79,
8731 0x8d, 0x05, 0x52, 0x00, 0x79, 0x8e, 0x34, 0x3b,
8732 0x00, 0x79, 0x8f, 0x21, 0x87, 0x00, 0x79, 0xa7,
8733 0x4e, 0xd7, 0x00, 0x79, 0xae, 0x37, 0x5b, 0x00,
8734 0x79, 0xb0, 0x1e, 0x59, 0x00, 0x79, 0xb1, 0x4e,
8735 0xd8, 0x00, 0x79, 0xba, 0x35, 0x03, 0x00, 0x79,
8736 0xe4, 0x1e, 0x5d, 0x00, 0x7a, 0x0b, 0x36, 0x78,
8737 0x00, 0x7a, 0x17, 0x1e, 0x66, 0x00, 0x7a, 0x19,
8738 0x35, 0x04, 0x00, 0x7a, 0x31, 0x1e, 0xa6, 0x00,
8739 0x7a, 0x40, 0x08, 0x04, 0x00, 0x7a, 0x60, 0x3a,
8740 0x4e, 0x00, 0x7a, 0x74, 0x34, 0x7a, 0x00, 0x7a,
8741 0x7a, 0x35, 0xa7, 0x00, 0x7a, 0x7f, 0x1f, 0x25,
8742 0x00, 0x7a, 0x81, 0x34, 0x3d, 0x00, 0x7a, 0x95,
8743 0x35, 0x05, 0x00, 0x7a, 0x97, 0x1f, 0x3c, 0x00,
8744 0x7a, 0xae, 0x34, 0x77, 0x00, 0x7a, 0xbe, 0x4e,
8745 0xd9, 0x00, 0x7a, 0xc6, 0x3c, 0x27, 0x00, 0x7a,
8746 0xc8, 0x4f, 0x3d, 0x00, 0x7b, 0x08, 0x1f, 0x1f,
8747 0x00, 0x7b, 0x51, 0x36, 0x63, 0x00, 0x7b, 0x75,
8748 0x4f, 0x2a, 0x00, 0x7b, 0x99, 0x1e, 0xa8, 0x00,
8749 0x7b, 0xad, 0x1f, 0x26, 0x00, 0x7b, 0xb8, 0x1e,
8750 0x5f, 0x00, 0x7b, 0xc0, 0x34, 0x2e, 0x00, 0x7b,
8751 0xc7, 0x1f, 0x2b, 0x00, 0x7b, 0xc9, 0x36, 0x61,
8752 0x00, 0x7b, 0xdd, 0x1f, 0x3d, 0x00, 0x7b, 0xe0,
8753 0x4e, 0xda, 0x00, 0x7c, 0x14, 0x37, 0x5f, 0x00,
8754 0x7c, 0x3e, 0x1f, 0x2d, 0x00, 0x7c, 0x3f, 0x36,
8755 0xc2, 0x00, 0x7c, 0x4d, 0x36, 0x36, 0x00, 0x7c,
8756 0x50, 0x37, 0x61, 0x00, 0x7c, 0x58, 0x37, 0x62,
8757 0x00, 0x7c, 0x69, 0x56, 0xaa, 0x00, 0x7c, 0x7e,
8758 0x1e, 0x78, 0x00, 0x7c, 0x82, 0x4f, 0x30, 0x00,
8759 0x7c, 0x89, 0x34, 0xbe, 0x00, 0x7c, 0x90, 0x1e,
8760 0xa9, 0x00, 0x7c, 0xae, 0x1e, 0xaa, 0x00, 0x7c,
8761 0xbe, 0x0a, 0x5e, 0x00, 0x7c, 0xd6, 0x0c, 0x76,
8762 0x00, 0x7c, 0xf2, 0x35, 0x06, 0x00, 0x7d, 0x04,
8763 0x36, 0xee, 0x00, 0x7d, 0x09, 0x4e, 0xdc, 0x00,
8764 0x7d, 0x0b, 0x36, 0xec, 0x00, 0x7d, 0x0d, 0x36,
8765 0x94, 0x00, 0x7d, 0x1a, 0x35, 0x91, 0x00, 0x7d,
8766 0x1b, 0x34, 0xbf, 0x00, 0x7d, 0x42, 0x35, 0xf8,
8767 0x00, 0x7d, 0x46, 0x37, 0x63, 0x00, 0x7d, 0x5c,
8768 0x21, 0x90, 0x00, 0x7d, 0x5e, 0x34, 0x84, 0x00,
8769 0x7d, 0x63, 0x37, 0x64, 0x00, 0x7d, 0x73, 0x35,
8770 0x07, 0x00, 0x7d, 0x9b, 0x1e, 0xab, 0x00, 0x7d,
8771 0x9f, 0x1e, 0xad, 0x00, 0x7d, 0xae, 0x1e, 0xac,
8772 0x00, 0x7d, 0xb2, 0x4e, 0xdd, 0x00, 0x7d, 0xcb,
8773 0x34, 0xb6, 0x00, 0x7d, 0xcf, 0x34, 0xa0, 0x00,
8774 0x7d, 0xdd, 0x35, 0x08, 0x00, 0x7d, 0xe8, 0x36,
8775 0xbf, 0x00, 0x7d, 0xe9, 0x35, 0x7a, 0x00, 0x7d,
8776 0xef, 0x34, 0x62, 0x00, 0x7d, 0xf4, 0x0f, 0xc5,
8777 0x00, 0x7e, 0x09, 0x47, 0xbe, 0x00, 0x7e, 0x1b,
8778 0x36, 0x9b, 0x00, 0x7e, 0x22, 0x37, 0x65, 0x00,
8779 0x7e, 0x2b, 0x36, 0xc8, 0x00, 0x7e, 0x35, 0x35,
8780 0x09, 0x00, 0x7e, 0x41, 0x34, 0x40, 0x00, 0x7e,
8781 0x43, 0x37, 0x69, 0x00, 0x7e, 0x6d, 0x36, 0xe1,
8782 0x00, 0x7e, 0x8c, 0x37, 0x6a, 0x00, 0x7f, 0x3e,
8783 0x4e, 0xdf, 0x00, 0x7f, 0x50, 0x37, 0x6b, 0x00,
8784 0x7f, 0x61, 0x3c, 0x28, 0x00, 0x7f, 0x6a, 0x34,
8785 0x89, 0x00, 0x7f, 0x6e, 0x36, 0x60, 0x00, 0x7f,
8786 0x72, 0x09, 0x7a, 0x00, 0x7f, 0x80, 0x56, 0xda,
8787 0x00, 0x7f, 0x8a, 0x0f, 0x3d, 0x00, 0x7f, 0xa1,
8788 0x36, 0x3d, 0x00, 0x7f, 0xae, 0x35, 0x0a, 0x00,
8789 0x7f, 0xbd, 0x04, 0xcb, 0x00, 0x7f, 0xc1, 0x34,
8790 0x6a, 0x00, 0x7f, 0xc5, 0x37, 0x6f, 0x00, 0x7f,
8791 0xc6, 0x37, 0x70, 0x00, 0x7f, 0xcc, 0x37, 0x01,
8792 0x00, 0x7f, 0xd2, 0x35, 0xf9, 0x00, 0x7f, 0xd4,
8793 0x1e, 0xae, 0x00, 0x7f, 0xe0, 0x1e, 0x20, 0x00,
8794 0x7f, 0xe1, 0x35, 0x0b, 0x00, 0x7f, 0xe9, 0x1f,
8795 0x3e, 0x00, 0x7f, 0xeb, 0x1d, 0xe9, 0x00, 0x7f,
8796 0xf0, 0x1d, 0xe8, 0x00, 0x7f, 0xfb, 0x36, 0xd8,
8797 0x00, 0x7f, 0xfc, 0x34, 0xc8, 0x00, 0x80, 0x00,
8798 0x1e, 0x7e, 0x00, 0x80, 0x03, 0x34, 0x85, 0x00,
8799 0x80, 0x05, 0x34, 0x25, 0x00, 0x80, 0x12, 0x4e,
8800 0xe1, 0x00, 0x80, 0x15, 0x35, 0xca, 0x00, 0x80,
8801 0x17, 0x36, 0xea, 0x00, 0x80, 0x36, 0x34, 0xc7,
8802 0x00, 0x80, 0x56, 0x36, 0x2d, 0x00, 0x80, 0x5a,
8803 0x35, 0x0c, 0x00, 0x80, 0x5f, 0x35, 0x0d, 0x00,
8804 0x80, 0x61, 0x34, 0xa1, 0x00, 0x80, 0x6f, 0x34,
8805 0xcd, 0x00, 0x80, 0x70, 0x35, 0x0f, 0x00, 0x80,
8806 0x71, 0x3c, 0x29, 0x00, 0x80, 0x73, 0x35, 0x0e,
8807 0x00, 0x80, 0x74, 0x34, 0xa7, 0x00, 0x80, 0x76,
8808 0x35, 0x10, 0x00, 0x80, 0x77, 0x34, 0x9a, 0x00,
8809 0x80, 0x7e, 0x34, 0xce, 0x00, 0x80, 0x87, 0x36,
8810 0x9c, 0x00, 0x80, 0x89, 0x36, 0x8f, 0x00, 0x80,
8811 0x96, 0x36, 0x0e, 0x00, 0x80, 0x9e, 0x3c, 0x2a,
8812 0x00, 0x80, 0xa9, 0x35, 0xb8, 0x00, 0x80, 0xba,
8813 0x36, 0x97, 0x00, 0x80, 0xd6, 0x4e, 0xe3, 0x00,
8814 0x80, 0xde, 0x36, 0xc9, 0x00, 0x81, 0x06, 0x36,
8815 0x34, 0x00, 0x81, 0x08, 0x34, 0xc6, 0x00, 0x81,
8816 0x09, 0x4e, 0xe4, 0x00, 0x81, 0x29, 0x4e, 0xe5,
8817 0x00, 0x81, 0x53, 0x35, 0x11, 0x00, 0x81, 0x54,
8818 0x35, 0xcb, 0x00, 0x81, 0x70, 0x35, 0xd1, 0x00,
8819 0x81, 0x71, 0x4f, 0x33, 0x00, 0x81, 0x7f, 0x1e,
8820 0x30, 0x00, 0x81, 0x8a, 0x35, 0x12, 0x00, 0x81,
8821 0xb5, 0x35, 0x13, 0x00, 0x81, 0xcd, 0x35, 0x14,
8822 0x00, 0x81, 0xed, 0x34, 0x26, 0x00, 0x82, 0x00,
8823 0x57, 0x0f, 0x00, 0x82, 0x0c, 0x4e, 0xe6, 0x00,
8824 0x82, 0x18, 0x35, 0x7f, 0x00, 0x82, 0x1b, 0x4e,
8825 0xe7, 0x00, 0x82, 0x1c, 0x34, 0x93, 0x00, 0x82,
8826 0x1f, 0x35, 0xb3, 0x00, 0x82, 0x2e, 0x1e, 0xaf,
8827 0x00, 0x82, 0x39, 0x34, 0x9f, 0x00, 0x82, 0x40,
8828 0x4e, 0xe8, 0x00, 0x82, 0x47, 0x34, 0xab, 0x00,
8829 0x82, 0x58, 0x37, 0x74, 0x00, 0x82, 0x79, 0x37,
8830 0x77, 0x00, 0x82, 0x8d, 0x1e, 0xb0, 0x00, 0x82,
8831 0x92, 0x4f, 0x44, 0x00, 0x82, 0xa6, 0x1f, 0x19,
8832 0x00, 0x82, 0xb1, 0x35, 0x62, 0x00, 0x82, 0xbd,
8833 0x05, 0x6a, 0x00, 0x82, 0xc5, 0x35, 0x77, 0x00,
8834 0x82, 0xd2, 0x1e, 0xb1, 0x00, 0x82, 0xe3, 0x37,
8835 0x78, 0x00, 0x83, 0x23, 0x1e, 0xb2, 0x00, 0x83,
8836 0x28, 0x1f, 0x1a, 0x00, 0x83, 0x52, 0x35, 0xcc,
8837 0x00, 0x83, 0x75, 0x1e, 0xb3, 0x00, 0x83, 0xbd,
8838 0x37, 0x7c, 0x00, 0x83, 0xd3, 0x35, 0x63, 0x00,
8839 0x83, 0xd4, 0x4e, 0xea, 0x00, 0x83, 0xdc, 0x35,
8840 0xda, 0x00, 0x83, 0xdf, 0x1e, 0x4b, 0x00, 0x83,
8841 0xf2, 0x35, 0x15, 0x00, 0x84, 0x0c, 0x36, 0xca,
8842 0x00, 0x84, 0x0f, 0x4e, 0xeb, 0x00, 0x84, 0x20,
8843 0x37, 0x7b, 0x00, 0x84, 0x22, 0x1f, 0x3f, 0x00,
8844 0x84, 0x57, 0x34, 0x37, 0x00, 0x84, 0x5b, 0x1d,
8845 0xe4, 0x00, 0x84, 0x5c, 0x57, 0x45, 0x00, 0x84,
8846 0x7a, 0x34, 0xba, 0x00, 0x84, 0xea, 0x4e, 0xed,
8847 0x00, 0x84, 0xec, 0x1e, 0x72, 0x00, 0x84, 0xee,
8848 0x0f, 0xc7, 0x00, 0x84, 0xf4, 0x37, 0x7d, 0x00,
8849 0x85, 0x11, 0x36, 0xbd, 0x00, 0x85, 0x17, 0x1e,
8850 0xb4, 0x00, 0x85, 0x3d, 0x1e, 0x6d, 0x00, 0x85,
8851 0x43, 0x36, 0xa6, 0x00, 0x85, 0x51, 0x4e, 0xef,
8852 0x00, 0x85, 0x55, 0x35, 0x16, 0x00, 0x85, 0x5d,
8853 0x57, 0x64, 0x00, 0x85, 0x63, 0x4e, 0xf0, 0x00,
8854 0x85, 0x84, 0x36, 0x99, 0x00, 0x85, 0x87, 0x37,
8855 0x7f, 0x00, 0x85, 0xa9, 0x1e, 0x08, 0x00, 0x85,
8856 0xaf, 0x1e, 0x15, 0x00, 0x85, 0xcf, 0x4e, 0xf1,
8857 0x00, 0x85, 0xd5, 0x35, 0x17, 0x00, 0x85, 0xe4,
8858 0x36, 0x85, 0x00, 0x85, 0xf7, 0x1e, 0x16, 0x00,
8859 0x86, 0x12, 0x21, 0xa4, 0x00, 0x86, 0x2d, 0x37,
8860 0x04, 0x00, 0x86, 0x4e, 0x4e, 0xf2, 0x00, 0x86,
8861 0x50, 0x35, 0x8c, 0x00, 0x86, 0x54, 0x4f, 0x32,
8862 0x00, 0x86, 0x5c, 0x0f, 0x82, 0x00, 0x86, 0x5e,
8863 0x35, 0xa6, 0x00, 0x86, 0x62, 0x4e, 0xf3, 0x00,
8864 0x86, 0x8a, 0x4e, 0xf4, 0x00, 0x86, 0xdb, 0x34,
8865 0x5e, 0x00, 0x86, 0xf8, 0x1e, 0x35, 0x00, 0x87,
8866 0x03, 0x4f, 0x48, 0x00, 0x87, 0x1a, 0x35, 0x18,
8867 0x00, 0x87, 0x37, 0x37, 0x82, 0x00, 0x87, 0x3b,
8868 0x37, 0x83, 0x00, 0x87, 0x55, 0x1e, 0x1d, 0x00,
8869 0x87, 0x59, 0x1f, 0x40, 0x00, 0x87, 0x82, 0x1e,
8870 0xb6, 0x00, 0x87, 0xa3, 0x57, 0xaa, 0x00, 0x87,
8871 0xbd, 0x37, 0x85, 0x00, 0x87, 0xd2, 0x1e, 0xb7,
8872 0x00, 0x88, 0x03, 0x3b, 0x03, 0x00, 0x88, 0x05,
8873 0x37, 0x84, 0x00, 0x88, 0x0e, 0x1f, 0x41, 0x00,
8874 0x88, 0x36, 0x35, 0x19, 0x00, 0x88, 0x42, 0x4e,
8875 0xf5, 0x00, 0x88, 0x46, 0x35, 0xfa, 0x00, 0x88,
8876 0x4b, 0x57, 0xc3, 0x00, 0x88, 0x53, 0x35, 0xfd,
8877 0x00, 0x88, 0x5b, 0x34, 0x66, 0x00, 0x88, 0x5e,
8878 0x35, 0x53, 0x00, 0x88, 0x63, 0x35, 0x48, 0x00,
8879 0x88, 0x70, 0x36, 0x27, 0x00, 0x88, 0x77, 0x4e,
8880 0xf6, 0x00, 0x88, 0x9e, 0x35, 0x1a, 0x00, 0x88,
8881 0xd8, 0x35, 0x1b, 0x00, 0x88, 0xf4, 0x35, 0x1c,
8882 0x00, 0x89, 0x0a, 0x1e, 0xb8, 0x00, 0x89, 0x10,
8883 0x34, 0x13, 0x00, 0x89, 0x1c, 0x37, 0xcb, 0x00,
8884 0x89, 0x2b, 0x35, 0x1d, 0x00, 0x89, 0x3b, 0x35,
8885 0x1e, 0x00, 0x89, 0x41, 0x4e, 0xf7, 0x00, 0x89,
8886 0x56, 0x1d, 0xdd, 0x00, 0x89, 0x6a, 0x35, 0x1f,
8887 0x00, 0x89, 0x6f, 0x35, 0x20, 0x00, 0x89, 0x81,
8888 0x36, 0xff, 0x00, 0x89, 0x86, 0x36, 0xb8, 0x00,
8889 0x89, 0x87, 0x36, 0x95, 0x00, 0x89, 0x96, 0x34,
8890 0x22, 0x00, 0x89, 0xaa, 0x34, 0x9b, 0x00, 0x89,
8891 0xaf, 0x1e, 0xb9, 0x00, 0x89, 0xbd, 0x37, 0x8a,
8892 0x00, 0x89, 0xd2, 0x05, 0xaf, 0x00, 0x8a, 0x0a,
8893 0x36, 0x24, 0x00, 0x8a, 0x12, 0x37, 0xd7, 0x00,
8894 0x8a, 0x1d, 0x35, 0x21, 0x00, 0x8a, 0x1f, 0x34,
8895 0x96, 0x00, 0x8a, 0x3b, 0x1e, 0x3c, 0x00, 0x8a,
8896 0x55, 0x36, 0xaf, 0x00, 0x8a, 0x6e, 0x1e, 0x28,
8897 0x00, 0x8a, 0x8d, 0x36, 0x92, 0x00, 0x8a, 0x95,
8898 0x34, 0xa3, 0x00, 0x8a, 0xa0, 0x36, 0x2f, 0x00,
8899 0x8a, 0xa4, 0x35, 0xc2, 0x00, 0x8a, 0xb9, 0x34,
8900 0xb7, 0x00, 0x8a, 0xbf, 0x36, 0x6d, 0x00, 0x8a,
8901 0xcb, 0x36, 0x30, 0x00, 0x8a, 0xdb, 0x37, 0x8b,
8902 0x00, 0x8a, 0xde, 0x1e, 0xba, 0x00, 0x8a, 0xed,
8903 0x0f, 0x0b, 0x00, 0x8a, 0xee, 0x35, 0xe3, 0x00,
8904 0x8a, 0xf8, 0x09, 0x7e, 0x00, 0x8a, 0xfa, 0x1d,
8905 0xfe, 0x00, 0x8b, 0x01, 0x04, 0xfc, 0x00, 0x8b,
8906 0x04, 0x36, 0x86, 0x00, 0x8b, 0x0e, 0x1e, 0x56,
8907 0x00, 0x8b, 0x19, 0x35, 0xb9, 0x00, 0x8b, 0x1b,
8908 0x35, 0xcd, 0x00, 0x8b, 0x1d, 0x34, 0x8d, 0x00,
8909 0x8b, 0x2c, 0x1e, 0x69, 0x00, 0x8b, 0x39, 0x06,
8910 0xd8, 0x00, 0x8b, 0x3e, 0x37, 0x8c, 0x00, 0x8b,
8911 0x41, 0x1e, 0xbb, 0x00, 0x8b, 0x56, 0x4e, 0xf8,
8912 0x00, 0x8b, 0x5a, 0x37, 0x8d, 0x00, 0x8b, 0x5c,
8913 0x4e, 0xfa, 0x00, 0x8b, 0x7f, 0x52, 0x52, 0x00,
8914 0x8c, 0x6a, 0x4e, 0xfd, 0x00, 0x8c, 0x79, 0x4e,
8915 0xfe, 0x00, 0x8c, 0x9b, 0x58, 0x37, 0x00, 0x8c,
8916 0xa0, 0x36, 0xb5, 0x00, 0x8c, 0xa7, 0x34, 0xb8,
8917 0x00, 0x8c, 0xa8, 0x35, 0x64, 0x00, 0x8c, 0xab,
8918 0x34, 0x72, 0x00, 0x8c, 0xc7, 0x35, 0xe5, 0x00,
8919 0x8c, 0xca, 0x36, 0x4c, 0x00, 0x8c, 0xd3, 0x0d,
8920 0xc2, 0x00, 0x8c, 0xed, 0x1e, 0x4c, 0x00, 0x8c,
8921 0xfc, 0x34, 0x86, 0x00, 0x8d, 0x05, 0x35, 0x22,
8922 0x00, 0x8d, 0x08, 0x34, 0x34, 0x00, 0x8d, 0x0f,
8923 0x35, 0x23, 0x00, 0x8d, 0x67, 0x4f, 0x00, 0x00,
8924 0x8d, 0x70, 0x36, 0x46, 0x00, 0x8d, 0x73, 0x37,
8925 0x8e, 0x00, 0x8d, 0x77, 0x35, 0x88, 0x00, 0x8d,
8926 0x99, 0x37, 0x8f, 0x00, 0x8d, 0xda, 0x1e, 0xbc,
8927 0x00, 0x8d, 0xdd, 0x35, 0x94, 0x00, 0x8d, 0xf3,
8928 0x34, 0xa8, 0x00, 0x8e, 0x09, 0x1e, 0xbd, 0x00,
8929 0x8e, 0x34, 0x37, 0x91, 0x00, 0x8e, 0x4a, 0x37,
8930 0x92, 0x00, 0x8e, 0x8d, 0x36, 0xef, 0x00, 0x8e,
8931 0x91, 0x35, 0x25, 0x00, 0x8e, 0xa1, 0x35, 0x26,
8932 0x00, 0x8e, 0xcc, 0x34, 0x76, 0x00, 0x8e, 0xd4,
8933 0x3b, 0x4a, 0x00, 0x8f, 0x03, 0x4f, 0x02, 0x00,
8934 0x8f, 0x13, 0x1e, 0xbe, 0x00, 0x8f, 0x29, 0x34,
8935 0xb0, 0x00, 0x8f, 0x2f, 0x34, 0x90, 0x00, 0x8f,
8936 0x38, 0x36, 0xf5, 0x00, 0x8f, 0x44, 0x35, 0x75,
8937 0x00, 0x8f, 0xb6, 0x3c, 0x2b, 0x00, 0x8f, 0xbb,
8938 0x20, 0x4b, 0x00, 0x8f, 0xbc, 0x35, 0xd3, 0x00,
8939 0x8f, 0xbf, 0x1e, 0x37, 0x00, 0x8f, 0xc2, 0x1d,
8940 0xd6, 0x00, 0x8f, 0xc4, 0x1f, 0x2c, 0x00, 0x8f,
8941 0xc5, 0x36, 0x26, 0x00, 0x8f, 0xc6, 0x3b, 0x51,
8942 0x00, 0x8f, 0xce, 0x35, 0xae, 0x00, 0x8f, 0xd1,
8943 0x35, 0xa2, 0x00, 0x8f, 0xd4, 0x36, 0xc0, 0x00,
8944 0x8f, 0xe6, 0x1d, 0xdf, 0x00, 0x8f, 0xe9, 0x1e,
8945 0xc0, 0x00, 0x8f, 0xea, 0x1e, 0xbf, 0x00, 0x8f,
8946 0xeb, 0x36, 0x9a, 0x00, 0x8f, 0xed, 0x36, 0x7b,
8947 0x00, 0x8f, 0xef, 0x37, 0x93, 0x00, 0x8f, 0xf0,
8948 0x35, 0xfe, 0x00, 0x8f, 0xf6, 0x4f, 0x06, 0x00,
8949 0x8f, 0xf7, 0x36, 0xe6, 0x00, 0x8f, 0xfa, 0x37,
8950 0x95, 0x00, 0x8f, 0xfd, 0x36, 0x72, 0x00, 0x90,
8951 0x00, 0x36, 0x51, 0x00, 0x90, 0x01, 0x36, 0x47,
8952 0x00, 0x90, 0x03, 0x34, 0xad, 0x00, 0x90, 0x06,
8953 0x35, 0x8d, 0x00, 0x90, 0x0e, 0x35, 0x28, 0x00,
8954 0x90, 0x0f, 0x36, 0x88, 0x00, 0x90, 0x10, 0x36,
8955 0x64, 0x00, 0x90, 0x14, 0x36, 0x7e, 0x00, 0x90,
8956 0x17, 0x1e, 0x1f, 0x00, 0x90, 0x19, 0x1e, 0x5c,
8957 0x00, 0x90, 0x1a, 0x36, 0x73, 0x00, 0x90, 0x1d,
8958 0x1e, 0x22, 0x00, 0x90, 0x1e, 0x37, 0x96, 0x00,
8959 0x90, 0x1f, 0x36, 0x4b, 0x00, 0x90, 0x20, 0x36,
8960 0x49, 0x00, 0x90, 0x22, 0x20, 0x4a, 0x00, 0x90,
8961 0x23, 0x0f, 0xc8, 0x00, 0x90, 0x2e, 0x36, 0x52,
8962 0x00, 0x90, 0x31, 0x35, 0xfb, 0x00, 0x90, 0x32,
8963 0x36, 0x1f, 0x00, 0x90, 0x35, 0x37, 0x97, 0x00,
8964 0x90, 0x38, 0x34, 0x08, 0x00, 0x90, 0x39, 0x36,
8965 0x58, 0x00, 0x90, 0x3c, 0x1e, 0x67, 0x00, 0x90,
8966 0x41, 0x1e, 0x53, 0x00, 0x90, 0x42, 0x34, 0x9c,
8967 0x00, 0x90, 0x47, 0x35, 0xa8, 0x00, 0x90, 0x4a,
8968 0x36, 0xfc, 0x00, 0x90, 0x4b, 0x35, 0x51, 0x00,
8969 0x90, 0x4d, 0x36, 0xc1, 0x00, 0x90, 0x4e, 0x35,
8970 0x65, 0x00, 0x90, 0x50, 0x37, 0x98, 0x00, 0x90,
8971 0x52, 0x35, 0x27, 0x00, 0x90, 0x53, 0x36, 0x8b,
8972 0x00, 0x90, 0x54, 0x36, 0x58, 0x00, 0x90, 0x55,
8973 0x34, 0x63, 0x00, 0x90, 0x58, 0x1e, 0xc1, 0x00,
8974 0x90, 0x5c, 0x1e, 0x2e, 0x00, 0x90, 0x60, 0x35,
8975 0x5a, 0x00, 0x90, 0x61, 0x1e, 0x2a, 0x00, 0x90,
8976 0x63, 0x35, 0xba, 0x00, 0x90, 0x69, 0x36, 0x7a,
8977 0x00, 0x90, 0x6d, 0x36, 0x48, 0x00, 0x90, 0x6e,
8978 0x1e, 0x0e, 0x00, 0x90, 0x75, 0x36, 0x00, 0x00,
8979 0x90, 0x77, 0x36, 0x40, 0x00, 0x90, 0x78, 0x36,
8980 0x3f, 0x00, 0x90, 0x7a, 0x35, 0x4a, 0x00, 0x90,
8981 0x7c, 0x1e, 0x80, 0x00, 0x90, 0x7f, 0x36, 0xa7,
8982 0x00, 0x90, 0x81, 0x37, 0x9a, 0x00, 0x90, 0x83,
8983 0x37, 0x5c, 0x00, 0x90, 0x84, 0x35, 0x7c, 0x00,
8984 0x90, 0x87, 0x37, 0x94, 0x00, 0x90, 0x89, 0x34,
8985 0x5f, 0x00, 0x90, 0x8a, 0x37, 0x9b, 0x00, 0x90,
8986 0xa3, 0x1e, 0x55, 0x00, 0x90, 0xa6, 0x36, 0xcb,
8987 0x00, 0x90, 0xa8, 0x4f, 0x0b, 0x00, 0x90, 0xaa,
8988 0x34, 0x8e, 0x00, 0x90, 0xf7, 0x35, 0x9d, 0x00,
8989 0x90, 0xfd, 0x0c, 0x4e, 0x00, 0x91, 0x2d, 0x1e,
8990 0x44, 0x00, 0x91, 0x30, 0x35, 0x29, 0x00, 0x91,
8991 0x4b, 0x1e, 0x12, 0x00, 0x91, 0x4c, 0x35, 0xf2,
8992 0x00, 0x91, 0x4d, 0x4f, 0x0c, 0x00, 0x91, 0x56,
8993 0x35, 0x2a, 0x00, 0x91, 0x58, 0x35, 0x2b, 0x00,
8994 0x91, 0x65, 0x35, 0x2c, 0x00, 0x91, 0x72, 0x35,
8995 0x2e, 0x00, 0x91, 0x73, 0x35, 0x2d, 0x00, 0x91,
8996 0x77, 0x35, 0xd0, 0x00, 0x91, 0xa2, 0x35, 0x2f,
8997 0x00, 0x91, 0xaa, 0x35, 0x31, 0x00, 0x91, 0xaf,
8998 0x35, 0x30, 0x00, 0x91, 0xb1, 0x36, 0x9f, 0x00,
8999 0x91, 0xb4, 0x35, 0x32, 0x00, 0x91, 0xba, 0x35,
9000 0x33, 0x00, 0x91, 0xc1, 0x1e, 0xc3, 0x00, 0x91,
9001 0xc7, 0x1e, 0x05, 0x00, 0x91, 0xdc, 0x4f, 0x42,
9002 0x00, 0x91, 0xe3, 0x36, 0x75, 0x00, 0x91, 0xfc,
9003 0x3c, 0x2c, 0x00, 0x92, 0x37, 0x34, 0x7d, 0x00,
9004 0x92, 0x5b, 0x34, 0x69, 0x00, 0x92, 0xe9, 0x4f,
9005 0x0d, 0x00, 0x93, 0x06, 0x1e, 0x0a, 0x00, 0x93,
9006 0x35, 0x4f, 0x0e, 0x00, 0x93, 0x65, 0x3b, 0x86,
9007 0x00, 0x93, 0x75, 0x4f, 0x34, 0x00, 0x93, 0x8b,
9008 0x4f, 0x0f, 0x00, 0x93, 0x8c, 0x35, 0x76, 0x00,
9009 0x93, 0x96, 0x35, 0xd5, 0x00, 0x93, 0x9a, 0x1e,
9010 0x41, 0x00, 0x93, 0xa1, 0x59, 0x04, 0x00, 0x93,
9011 0xae, 0x34, 0x3a, 0x00, 0x93, 0xdd, 0x37, 0xae,
9012 0x00, 0x94, 0x3a, 0x4f, 0x10, 0x00, 0x94, 0x53,
9013 0x1e, 0x79, 0x00, 0x94, 0x77, 0x35, 0x34, 0x00,
9014 0x95, 0x92, 0x35, 0x7d, 0x00, 0x95, 0xab, 0x3b,
9015 0x9a, 0x00, 0x95, 0xbb, 0x1e, 0xc4, 0x00, 0x95,
9016 0xbc, 0x37, 0xaf, 0x00, 0x95, 0xcd, 0x4f, 0x11,
9017 0x00, 0x96, 0x2a, 0x4f, 0x12, 0x00, 0x96, 0x4d,
9018 0x34, 0x87, 0x00, 0x96, 0x86, 0x34, 0x51, 0x00,
9019 0x96, 0x8a, 0x36, 0x53, 0x00, 0x96, 0x94, 0x35,
9020 0x73, 0x00, 0x96, 0x98, 0x35, 0x35, 0x00, 0x96,
9021 0x99, 0x4f, 0x31, 0x00, 0x96, 0xa3, 0x34, 0xca,
9022 0x00, 0x96, 0xa7, 0x4f, 0x14, 0x00, 0x96, 0xb2,
9023 0x37, 0xb1, 0x00, 0x96, 0xbb, 0x36, 0x35, 0x00,
9024 0x96, 0xc5, 0x34, 0x6c, 0x00, 0x96, 0xc7, 0x35,
9025 0xbe, 0x00, 0x96, 0xd9, 0x34, 0xd5, 0x00, 0x96,
9026 0xda, 0x59, 0x3b, 0x00, 0x96, 0xe3, 0x0c, 0xc9,
9027 0x00, 0x96, 0xe8, 0x35, 0x4d, 0x00, 0x96, 0xea,
9028 0x36, 0x39, 0x00, 0x96, 0xf0, 0x34, 0xc0, 0x00,
9029 0x97, 0x21, 0x59, 0x41, 0x00, 0x97, 0x24, 0x1e,
9030 0xc6, 0x00, 0x97, 0x3d, 0x35, 0x36, 0x00, 0x97,
9031 0x55, 0x21, 0xf8, 0x00, 0x97, 0x56, 0x21, 0x8b,
9032 0x00, 0x97, 0x59, 0x37, 0xb2, 0x00, 0x97, 0x5c,
9033 0x36, 0x31, 0x00, 0x97, 0x60, 0x1e, 0xc7, 0x00,
9034 0x97, 0x6d, 0x1e, 0xc8, 0x00, 0x97, 0x71, 0x1e,
9035 0x1e, 0x00, 0x97, 0x74, 0x1d, 0xf3, 0x00, 0x97,
9036 0x84, 0x1d, 0xe5, 0x00, 0x97, 0x98, 0x1e, 0x1c,
9037 0x00, 0x97, 0xad, 0x4f, 0x43, 0x00, 0x97, 0xd3,
9038 0x35, 0x7e, 0x00, 0x97, 0xde, 0x3c, 0x2e, 0x00,
9039 0x97, 0xf3, 0x35, 0x60, 0x00, 0x97, 0xff, 0x34,
9040 0x19, 0x00, 0x98, 0x0c, 0x35, 0x39, 0x00, 0x98,
9041 0x11, 0x34, 0x74, 0x00, 0x98, 0x12, 0x34, 0xb2,
9042 0x00, 0x98, 0x13, 0x1e, 0x54, 0x00, 0x98, 0x24,
9043 0x1e, 0xc9, 0x00, 0x98, 0x3b, 0x0d, 0xc3, 0x00,
9044 0x98, 0x5e, 0x0f, 0xa8, 0x00, 0x98, 0x67, 0x35,
9045 0xbf, 0x00, 0x98, 0x73, 0x35, 0x3a, 0x00, 0x98,
9046 0xc3, 0x35, 0x3b, 0x00, 0x98, 0xdf, 0x36, 0x17,
9047 0x00, 0x98, 0xe2, 0x35, 0x89, 0x00, 0x98, 0xeb,
9048 0x37, 0xb4, 0x00, 0x98, 0xef, 0x0d, 0x67, 0x00,
9049 0x98, 0xf4, 0x1d, 0xd2, 0x00, 0x98, 0xfc, 0x21,
9050 0xfc, 0x00, 0x98, 0xfd, 0x36, 0xcd, 0x00, 0x98,
9051 0xfe, 0x36, 0x14, 0x00, 0x99, 0x03, 0x37, 0xb5,
9052 0x00, 0x99, 0x05, 0x1e, 0x77, 0x00, 0x99, 0x09,
9053 0x37, 0xb6, 0x00, 0x99, 0x0a, 0x37, 0x00, 0x00,
9054 0x99, 0x0c, 0x1d, 0xdb, 0x00, 0x99, 0x10, 0x1f,
9055 0x22, 0x00, 0x99, 0x13, 0x35, 0x68, 0x00, 0x99,
9056 0x21, 0x4f, 0x18, 0x00, 0x99, 0x28, 0x21, 0xfe,
9057 0x00, 0x99, 0x45, 0x37, 0xb7, 0x00, 0x99, 0x4b,
9058 0x37, 0xb9, 0x00, 0x99, 0x57, 0x1f, 0x20, 0x00,
9059 0x99, 0xc1, 0x4f, 0x40, 0x00, 0x99, 0xd0, 0x36,
9060 0x67, 0x00, 0x9a, 0x19, 0x1f, 0x43, 0x00, 0x9a,
9061 0x30, 0x36, 0x89, 0x00, 0x9a, 0x45, 0x35, 0x3c,
9062 0x00, 0x9a, 0x4a, 0x59, 0x88, 0x00, 0x9a, 0x5f,
9063 0x37, 0xbb, 0x00, 0x9a, 0x65, 0x37, 0xbc, 0x00,
9064 0x9a, 0xef, 0x37, 0xbd, 0x00, 0x9b, 0x18, 0x37,
9065 0xbe, 0x00, 0x9b, 0x2d, 0x34, 0x3c, 0x00, 0x9b,
9066 0x2e, 0x1e, 0xca, 0x00, 0x9b, 0x35, 0x59, 0xa4,
9067 0x00, 0x9b, 0x4d, 0x35, 0x3d, 0x00, 0x9b, 0x54,
9068 0x36, 0xdb, 0x00, 0x9b, 0x58, 0x35, 0x3e, 0x00,
9069 0x9b, 0x97, 0x1e, 0xcb, 0x00, 0x9b, 0xa8, 0x4f,
9070 0x1a, 0x00, 0x9b, 0xab, 0x4f, 0x38, 0x00, 0x9b,
9071 0xae, 0x4f, 0x1b, 0x00, 0x9b, 0xb9, 0x4f, 0x1c,
9072 0x00, 0x9b, 0xc6, 0x35, 0x3f, 0x00, 0x9b, 0xd6,
9073 0x1e, 0x09, 0x00, 0x9b, 0xdb, 0x36, 0x54, 0x00,
9074 0x9b, 0xe1, 0x35, 0x40, 0x00, 0x9b, 0xf1, 0x35,
9075 0x41, 0x00, 0x9b, 0xf2, 0x1e, 0xcc, 0x00, 0x9c,
9076 0x08, 0x4f, 0x1d, 0x00, 0x9c, 0x24, 0x4f, 0x1e,
9077 0x00, 0x9c, 0x2f, 0x1d, 0xd4, 0x00, 0x9c, 0x3b,
9078 0x4f, 0x1f, 0x00, 0x9c, 0x48, 0x1e, 0x39, 0x00,
9079 0x9c, 0x52, 0x1e, 0x74, 0x00, 0x9c, 0x57, 0x37,
9080 0x0c, 0x00, 0x9c, 0xe6, 0x4f, 0x21, 0x00, 0x9d,
9081 0x07, 0x1e, 0x4f, 0x00, 0x9d, 0x08, 0x37, 0xc1,
9082 0x00, 0x9d, 0x09, 0x37, 0xc0, 0x00, 0x9d, 0x48,
9083 0x35, 0x42, 0x00, 0x9d, 0x60, 0x1e, 0x03, 0x00,
9084 0x9d, 0x6c, 0x36, 0xce, 0x00, 0x9d, 0xb4, 0x0b,
9085 0xfd, 0x00, 0x9d, 0xbf, 0x59, 0xde, 0x00, 0x9d,
9086 0xc0, 0x4f, 0x22, 0x00, 0x9d, 0xc2, 0x4f, 0x23,
9087 0x00, 0x9d, 0xcf, 0x35, 0x43, 0x00, 0x9e, 0x97,
9088 0x34, 0xcc, 0x00, 0x9e, 0x9f, 0x34, 0xcb, 0x00,
9089 0x9e, 0xa5, 0x37, 0xc2, 0x00, 0x9e, 0xaa, 0x1e,
9090 0xcd, 0x00, 0x9e, 0xad, 0x1f, 0x44, 0x00, 0x9e,
9091 0xbb, 0x36, 0xdc, 0x00, 0x9e, 0xbf, 0x36, 0xe2,
9092 0x00, 0x9e, 0xcc, 0x37, 0xc3, 0x00, 0x9e, 0xdb,
9093 0x1e, 0x31, 0x00, 0x9f, 0x08, 0x35, 0x44, 0x00,
9094 0x9f, 0x3b, 0x36, 0xa9, 0x00, 0x9f, 0x4a, 0x37,
9095 0xc5, 0x00, 0x9f, 0x4b, 0x37, 0x5a, 0x00, 0x9f,
9096 0x4e, 0x35, 0x24, 0x00, 0x9f, 0x67, 0x37, 0xc7,
9097 0x00, 0x9f, 0x8d, 0x37, 0x06, 0x00, 0x9f, 0x9c,
9098 0x1e, 0xce, 0x00, 0x9f, 0x9d, 0x1e, 0xa7, 0x00,
9099 0xfa, 0x11, 0x20, 0xfb, 0x00, 0xfa, 0x24, 0x21,
9100 0xb8, 0x02, 0x35, 0xc4, 0x3c, 0x44, 0x02, 0x36,
9101 0x3a, 0x35, 0x9b, 0x02, 0x38, 0x3d, 0x4f, 0x26,
9102 0x02, 0x42, 0xee, 0x37, 0xc9, 0x02, 0x62, 0x70,
9103 0x37, 0x6e, 0x02, 0x9d, 0x4b, 0x35, 0x96, 0x02,
9104 0x9e, 0x3d, 0x3c, 0x4d, 0x02, 0xa6, 0x1a, 0x37,
9105 0xc8, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x34, 0x02,
9106 0x35, 0x83, 0x00, 0x50, 0x91, 0x35, 0xaf, 0x00,
9107 0x50, 0xca, 0x37, 0x15, 0x00, 0x51, 0x54, 0x37,
9108 0x17, 0x00, 0x51, 0x95, 0x37, 0x18, 0x00, 0x51,
9109 0xb4, 0x35, 0xdb, 0x00, 0x51, 0xde, 0x38, 0x10,
9110 0x00, 0x52, 0x72, 0x4e, 0x76, 0x00, 0x53, 0x7f,
9111 0x1d, 0xed, 0x00, 0x53, 0xa9, 0x1f, 0x1c, 0x00,
9112 0x55, 0x33, 0x37, 0x21, 0x00, 0x55, 0xa9, 0x34,
9113 0xd6, 0x00, 0x55, 0xab, 0x4e, 0x7c, 0x00, 0x55,
9114 0xe4, 0x37, 0x22, 0x00, 0x56, 0xae, 0x4e, 0x7e,
9115 0x00, 0x57, 0xf4, 0x36, 0x13, 0x00, 0x58, 0x5a,
9116 0x20, 0xe6, 0x00, 0x59, 0x51, 0x4e, 0x88, 0x00,
9117 0x59, 0xff, 0x35, 0xe1, 0x00, 0x5a, 0xbe, 0x34,
9118 0xdc, 0x00, 0x5b, 0xb3, 0x35, 0x6b, 0x00, 0x5c,
9119 0x0a, 0x36, 0x4e, 0x00, 0x5c, 0x0f, 0x36, 0x0a,
9120 0x00, 0x5e, 0xca, 0x34, 0x59, 0x00, 0x5e, 0xe3,
9121 0x4e, 0x93, 0x00, 0x5e, 0xf6, 0x35, 0x56, 0x00,
9122 0x60, 0x62, 0x4f, 0x2d, 0x00, 0x60, 0x97, 0x37,
9123 0x30, 0x00, 0x61, 0x67, 0x35, 0xad, 0x00, 0x61,
9124 0x68, 0x34, 0x6e, 0x00, 0x61, 0xb2, 0x4e, 0x98,
9125 0x00, 0x61, 0xf2, 0x36, 0x6a, 0x00, 0x62, 0x49,
9126 0x34, 0xb4, 0x00, 0x66, 0x5f, 0x37, 0x38, 0x00,
9127 0x66, 0xc1, 0x4e, 0xac, 0x00, 0x67, 0x15, 0x36,
9128 0x70, 0x00, 0x67, 0x17, 0x21, 0x29, 0x00, 0x67,
9129 0x1b, 0x36, 0xd5, 0x00, 0x68, 0x5d, 0x36, 0xde,
9130 0x00, 0x68, 0x7a, 0x36, 0xf1, 0x00, 0x69, 0x0d,
9131 0x36, 0x15, 0x00, 0x69, 0x82, 0x34, 0x6f, 0x00,
9132 0x6a, 0xdb, 0x35, 0xa9, 0x00, 0x6b, 0x21, 0x35,
9133 0xe8, 0x00, 0x6c, 0x08, 0x34, 0xf4, 0x00, 0x6c,
9134 0xaa, 0x4e, 0xbb, 0x00, 0x6c, 0xbf, 0x34, 0x68,
9135 0x00, 0x6c, 0xe8, 0x32, 0x45, 0x00, 0x6d, 0x3e,
9136 0x36, 0x96, 0x00, 0x6e, 0x23, 0x34, 0xf6, 0x00,
9137 0x6e, 0xa2, 0x52, 0x4f, 0x00, 0x6e, 0xcb, 0x4e,
9138 0xc1, 0x00, 0x6f, 0x11, 0x37, 0x45, 0x00, 0x6f,
9139 0x5b, 0x4e, 0xc5, 0x00, 0x71, 0x7d, 0x1f, 0x24,
9140 0x00, 0x72, 0x35, 0x35, 0xf0, 0x00, 0x73, 0x36,
9141 0x36, 0xf9, 0x00, 0x73, 0x37, 0x36, 0xfa, 0x00,
9142 0x73, 0xca, 0x4e, 0xcc, 0x00, 0x75, 0x11, 0x35,
9143 0xd2, 0x00, 0x75, 0x15, 0x4f, 0x2b, 0x00, 0x79,
9144 0x53, 0x37, 0x59, 0x00, 0x7a, 0x74, 0x35, 0xb1,
9145 0x00, 0x7b, 0x08, 0x4f, 0x27, 0x00, 0x7b, 0xc0,
9146 0x36, 0x37, 0x00, 0x7c, 0x3e, 0x4f, 0x29, 0x00,
9147 0x7c, 0x50, 0x4e, 0xdb, 0x00, 0x7c, 0x7e, 0x4f,
9148 0x45, 0x00, 0x7d, 0xb2, 0x4e, 0xde, 0x00, 0x7e,
9149 0x22, 0x37, 0x66, 0x00, 0x7e, 0x35, 0x37, 0x68,
9150 0x00, 0x7f, 0xc1, 0x35, 0x5e, 0x00, 0x7f, 0xe1,
9151 0x4e, 0xe0, 0x00, 0x7f, 0xe9, 0x37, 0x71, 0x00,
9152 0x7f, 0xfc, 0x37, 0x02, 0x00, 0x81, 0x08, 0x36,
9153 0xe3, 0x00, 0x82, 0x39, 0x36, 0x3e, 0x00, 0x82,
9154 0x79, 0x37, 0x76, 0x00, 0x82, 0xbd, 0x34, 0x6b,
9155 0x00, 0x83, 0xdf, 0x1f, 0x28, 0x00, 0x85, 0x3d,
9156 0x34, 0xc1, 0x00, 0x86, 0x12, 0x52, 0x51, 0x00,
9157 0x87, 0xd2, 0x1f, 0x42, 0x00, 0x88, 0x05, 0x4f,
9158 0x47, 0x00, 0x88, 0x36, 0x37, 0x87, 0x00, 0x8a,
9159 0x0a, 0x36, 0x25, 0x00, 0x8a, 0x1d, 0x4f, 0x2c,
9160 0x00, 0x8a, 0x95, 0x36, 0x5d, 0x00, 0x8a, 0xee,
9161 0x35, 0xe4, 0x00, 0x8b, 0x56, 0x4e, 0xf9, 0x00,
9162 0x8c, 0xa0, 0x36, 0xb6, 0x00, 0x8c, 0xc7, 0x35,
9163 0xe6, 0x00, 0x8c, 0xca, 0x4e, 0xff, 0x00, 0x8c,
9164 0xfc, 0x35, 0xce, 0x00, 0x8f, 0x44, 0x4f, 0x03,
9165 0x00, 0x8f, 0xc5, 0x4f, 0x04, 0x00, 0x8f, 0xd4,
9166 0x4f, 0x05, 0x00, 0x90, 0x03, 0x36, 0x87, 0x00,
9167 0x90, 0x22, 0x34, 0x60, 0x00, 0x90, 0x38, 0x21,
9168 0xb9, 0x00, 0x90, 0x41, 0x4f, 0x3f, 0x00, 0x90,
9169 0x42, 0x36, 0x28, 0x00, 0x90, 0x55, 0x35, 0x49,
9170 0x00, 0x90, 0x75, 0x36, 0x01, 0x00, 0x90, 0x77,
9171 0x4f, 0x07, 0x00, 0x90, 0x89, 0x37, 0xa1, 0x00,
9172 0x90, 0x8a, 0x37, 0x9c, 0x00, 0x90, 0xa6, 0x36,
9173 0xcc, 0x00, 0x90, 0xaa, 0x35, 0xee, 0x00, 0x92,
9174 0x5b, 0x35, 0x5b, 0x00, 0x96, 0x86, 0x21, 0xee,
9175 0x00, 0x96, 0x98, 0x4f, 0x13, 0x00, 0x96, 0xa3,
9176 0x37, 0x0b, 0x00, 0x96, 0xc5, 0x35, 0x67, 0x00,
9177 0x97, 0x5c, 0x36, 0x32, 0x00, 0x97, 0x60, 0x35,
9178 0x37, 0x00, 0x97, 0x6d, 0x1f, 0x23, 0x00, 0x97,
9179 0x71, 0x35, 0x38, 0x00, 0x97, 0xff, 0x35, 0x9e,
9180 0x00, 0x98, 0xef, 0x4f, 0x25, 0x00, 0x99, 0x0c,
9181 0x34, 0x65, 0x00, 0x99, 0x45, 0x37, 0xb8, 0x00,
9182 0x99, 0x57, 0x35, 0x9f, 0x00, 0x9e, 0x9f, 0x37,
9183 0x0d, 0x00, 0x9f, 0x08, 0x37, 0xc4, 0x00, 0x9f,
9184 0x8d, 0x37, 0x07, 0x02, 0x36, 0x3a, 0x35, 0x9c,
9185 0x00, 0x00, 0x00, 0x11, 0x00, 0x51, 0xde, 0x4e,
9186 0x71, 0x00, 0x53, 0xa9, 0x34, 0x64, 0x00, 0x56,
9187 0xae, 0x4e, 0x7f, 0x00, 0x5b, 0xb3, 0x4e, 0x8f,
9188 0x00, 0x61, 0x68, 0x35, 0x6c, 0x00, 0x61, 0xf2,
9189 0x52, 0x50, 0x00, 0x66, 0x5f, 0x37, 0x39, 0x00,
9190 0x67, 0x17, 0x37, 0x12, 0x00, 0x69, 0x82, 0x35,
9191 0x70, 0x00, 0x75, 0x11, 0x4f, 0x3c, 0x00, 0x83,
9192 0xdf, 0x4e, 0xe9, 0x00, 0x90, 0x77, 0x4f, 0x08,
9193 0x00, 0x90, 0x89, 0x37, 0xa2, 0x00, 0x90, 0x8a,
9194 0x37, 0x9d, 0x00, 0x97, 0xff, 0x4f, 0x15, 0x00,
9195 0x99, 0x0c, 0x35, 0x52, 0x00, 0x99, 0x57, 0x4f,
9196 0x19, 0x00, 0x00, 0x00, 0x06, 0x00, 0x51, 0xde,
9197 0x21, 0x5e, 0x00, 0x53, 0xa9, 0x35, 0x4f, 0x00,
9198 0x61, 0x68, 0x35, 0x6d, 0x00, 0x90, 0x89, 0x37,
9199 0xa3, 0x00, 0x90, 0x8a, 0x37, 0x9e, 0x00, 0x97,
9200 0xff, 0x4f, 0x16, 0x00, 0x00, 0x00, 0x04, 0x00,
9201 0x53, 0xa9, 0x4f, 0x2f, 0x00, 0x61, 0x68, 0x35,
9202 0x6e, 0x00, 0x90, 0x89, 0x37, 0xa4, 0x00, 0x90,
9203 0x8a, 0x37, 0x9f, 0x00, 0x00, 0x00, 0x02, 0x00,
9204 0x90, 0x89, 0x37, 0xa5, 0x00, 0x90, 0x8a, 0x37,
9205 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x90, 0x89,
9206 0x37, 0xa6, 0x00, 0x90, 0x8a, 0x4f, 0x0a, 0x00,
9207 0x00, 0x00, 0x01, 0x00, 0x90, 0x89, 0x37, 0xa7,
9208 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, 0x89, 0x37,
9209 0xa8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, 0x89,
9210 0x37, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90,
9211 0x89, 0x37, 0xaa, 0x00, 0x00, 0x00, 0x01, 0x00,
9212 0x90, 0x89, 0x37, 0xab, 0x00, 0x00, 0x00, 0x01,
9213 0x00, 0x90, 0x89, 0x37, 0xac, 0x00, 0x00, 0x00,
9214 0x01, 0x00, 0x90, 0x89, 0x4f, 0x09
9215 };
diff --git a/src/menu.c b/src/menu.c
index bbd0e70fe04..5ca687f3d8a 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1317,7 +1317,7 @@ no quit occurs and `x-popup-menu' returns nil. */)
1317 if (current_popup_menu && FRAME_W32_P (f)) 1317 if (current_popup_menu && FRAME_W32_P (f))
1318 { 1318 {
1319 discard_menu_items (); 1319 discard_menu_items ();
1320 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 1320 FRAME_DISPLAY_INFO (f)->grabbed = 0;
1321 UNGCPRO; 1321 UNGCPRO;
1322 return Qnil; 1322 return Qnil;
1323 } 1323 }
@@ -1365,7 +1365,7 @@ no quit occurs and `x-popup-menu' returns nil. */)
1365 1365
1366#ifdef HAVE_NTGUI /* FIXME: Is it really w32-specific? --Stef */ 1366#ifdef HAVE_NTGUI /* FIXME: Is it really w32-specific? --Stef */
1367 if (FRAME_W32_P (f)) 1367 if (FRAME_W32_P (f))
1368 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 1368 FRAME_DISPLAY_INFO (f)->grabbed = 0;
1369#endif 1369#endif
1370 1370
1371#endif /* HAVE_MENUS */ 1371#endif /* HAVE_MENUS */
diff --git a/src/minibuf.c b/src/minibuf.c
index 7403fc6c32d..cc6f234f7da 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -672,12 +672,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
672 XWINDOW (minibuf_window)->cursor.x = 0; 672 XWINDOW (minibuf_window)->cursor.x = 0;
673 XWINDOW (minibuf_window)->must_be_updated_p = 1; 673 XWINDOW (minibuf_window)->must_be_updated_p = 1;
674 update_frame (XFRAME (selected_frame), 1, 1); 674 update_frame (XFRAME (selected_frame), 1, 1);
675 { 675 flush_frame (XFRAME (XWINDOW (minibuf_window)->frame));
676 struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame);
677 struct redisplay_interface *rif = FRAME_RIF (f);
678 if (rif && rif->flush_display)
679 rif->flush_display (f);
680 }
681 } 676 }
682 677
683 /* Make minibuffer contents into a string. */ 678 /* Make minibuffer contents into a string. */
diff --git a/src/msdos.c b/src/msdos.c
index 5ad227bd67c..2ba7a16a443 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -408,7 +408,7 @@ static int term_setup_done;
408 408
409static unsigned short outside_cursor; 409static unsigned short outside_cursor;
410 410
411/* Similar to the_only_frame. */ 411/* The only display since MS-DOS does not support multiple ones. */
412struct tty_display_info the_only_display_info; 412struct tty_display_info the_only_display_info;
413 413
414/* Support for DOS/V (allows Japanese characters to be displayed on 414/* Support for DOS/V (allows Japanese characters to be displayed on
@@ -1222,7 +1222,7 @@ IT_cmgoto (struct frame *f)
1222static void 1222static void
1223IT_update_begin (struct frame *f) 1223IT_update_begin (struct frame *f)
1224{ 1224{
1225 struct tty_display_info *display_info = FRAME_X_DISPLAY_INFO (f); 1225 struct tty_display_info *display_info = FRAME_DISPLAY_INFO (f);
1226 Mouse_HLInfo *hlinfo = &display_info->mouse_highlight; 1226 Mouse_HLInfo *hlinfo = &display_info->mouse_highlight;
1227 struct frame *mouse_face_frame = hlinfo->mouse_face_mouse_frame; 1227 struct frame *mouse_face_frame = hlinfo->mouse_face_mouse_frame;
1228 1228
@@ -1279,7 +1279,7 @@ IT_update_begin (struct frame *f)
1279static void 1279static void
1280IT_update_end (struct frame *f) 1280IT_update_end (struct frame *f)
1281{ 1281{
1282 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1282 struct tty_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1283 1283
1284 if (dpyinfo->termscript) 1284 if (dpyinfo->termscript)
1285 fprintf (dpyinfo->termscript, "\n<UPDATE_END\n"); 1285 fprintf (dpyinfo->termscript, "\n<UPDATE_END\n");
@@ -2387,7 +2387,7 @@ Each input key receives two values in this vector: first the ASCII code,
2387and then the scan code. */) 2387and then the scan code. */)
2388 (void) 2388 (void)
2389{ 2389{
2390 Lisp_Object val, *keys = XVECTOR (recent_doskeys)->contents; 2390 Lisp_Object val, *keys = XVECTOR (recent_doskeys)->u.contents;
2391 2391
2392 if (total_doskeys < NUM_RECENT_DOSKEYS) 2392 if (total_doskeys < NUM_RECENT_DOSKEYS)
2393 return Fvector (total_doskeys, keys); 2393 return Fvector (total_doskeys, keys);
diff --git a/src/msdos.h b/src/msdos.h
index 6a6fe349131..27090324b44 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -63,7 +63,7 @@ extern struct tty_display_info the_only_display_info;
63 63
64#define FRAME_X_DISPLAY(f) ((Display *) 0) 64#define FRAME_X_DISPLAY(f) ((Display *) 0)
65#define FRAME_FONT(f) ((f)->output_data.tty->font) 65#define FRAME_FONT(f) ((f)->output_data.tty->font)
66#define FRAME_X_DISPLAY_INFO(f) (&the_only_display_info) 66#define FRAME_DISPLAY_INFO(f) (&the_only_display_info)
67 67
68/* Prototypes. */ 68/* Prototypes. */
69 69
diff --git a/src/nsfns.m b/src/nsfns.m
index fc276c2b12d..93b7d12becb 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -46,6 +46,9 @@ GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu)
46 46
47#ifdef NS_IMPL_COCOA 47#ifdef NS_IMPL_COCOA
48#include <IOKit/graphics/IOGraphicsLib.h> 48#include <IOKit/graphics/IOGraphicsLib.h>
49#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
50#include "macfont.h"
51#endif
49#endif 52#endif
50 53
51#if 0 54#if 0
@@ -124,7 +127,7 @@ check_ns_display_info (Lisp_Object object)
124 struct frame *sf = XFRAME (selected_frame); 127 struct frame *sf = XFRAME (selected_frame);
125 128
126 if (FRAME_NS_P (sf) && FRAME_LIVE_P (sf)) 129 if (FRAME_NS_P (sf) && FRAME_LIVE_P (sf))
127 dpyinfo = FRAME_NS_DISPLAY_INFO (sf); 130 dpyinfo = FRAME_DISPLAY_INFO (sf);
128 else if (x_display_list != 0) 131 else if (x_display_list != 0)
129 dpyinfo = x_display_list; 132 dpyinfo = x_display_list;
130 else 133 else
@@ -144,7 +147,7 @@ check_ns_display_info (Lisp_Object object)
144 else 147 else
145 { 148 {
146 struct frame *f = decode_window_system_frame (object); 149 struct frame *f = decode_window_system_frame (object);
147 dpyinfo = FRAME_NS_DISPLAY_INFO (f); 150 dpyinfo = FRAME_DISPLAY_INFO (f);
148 } 151 }
149 152
150 return dpyinfo; 153 return dpyinfo;
@@ -992,7 +995,7 @@ unwind_create_frame (Lisp_Object frame)
992 if (NILP (Fmemq (frame, Vframe_list))) 995 if (NILP (Fmemq (frame, Vframe_list)))
993 { 996 {
994#if defined GLYPH_DEBUG && defined ENABLE_CHECKING 997#if defined GLYPH_DEBUG && defined ENABLE_CHECKING
995 struct ns_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 998 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
996#endif 999#endif
997 1000
998 x_free_frame_resources (f); 1001 x_free_frame_resources (f);
@@ -1139,9 +1142,9 @@ This function is an internal primitive--use `make-frame' instead. */)
1139 if (! STRINGP (f->icon_name)) 1142 if (! STRINGP (f->icon_name))
1140 fset_icon_name (f, Qnil); 1143 fset_icon_name (f, Qnil);
1141 1144
1142 FRAME_NS_DISPLAY_INFO (f) = dpyinfo; 1145 FRAME_DISPLAY_INFO (f) = dpyinfo;
1143 1146
1144 /* With FRAME_NS_DISPLAY_INFO set up, this unwind-protect is safe. */ 1147 /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */
1145 record_unwind_protect (unwind_create_frame, frame); 1148 record_unwind_protect (unwind_create_frame, frame);
1146 1149
1147 f->output_data.ns->window_desc = desc_ctr++; 1150 f->output_data.ns->window_desc = desc_ctr++;
@@ -1152,7 +1155,7 @@ This function is an internal primitive--use `make-frame' instead. */)
1152 } 1155 }
1153 else 1156 else
1154 { 1157 {
1155 f->output_data.ns->parent_desc = FRAME_NS_DISPLAY_INFO (f)->root_window; 1158 f->output_data.ns->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
1156 f->output_data.ns->explicit_parent = 0; 1159 f->output_data.ns->explicit_parent = 0;
1157 } 1160 }
1158 1161
@@ -1171,7 +1174,16 @@ This function is an internal primitive--use `make-frame' instead. */)
1171 } 1174 }
1172 1175
1173 block_input (); 1176 block_input ();
1177
1178#ifdef NS_IMPL_COCOA
1179#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
1180 if (CTGetCoreTextVersion != NULL
1181 && CTGetCoreTextVersion () >= kCTVersionNumber10_5)
1182 mac_register_font_driver (f);
1183#endif
1184#endif
1174 register_font_driver (&nsfont_driver, f); 1185 register_font_driver (&nsfont_driver, f);
1186
1175 x_default_parameter (f, parms, Qfont_backend, Qnil, 1187 x_default_parameter (f, parms, Qfont_backend, Qnil,
1176 "fontBackend", "FontBackend", RES_TYPE_STRING); 1188 "fontBackend", "FontBackend", RES_TYPE_STRING);
1177 1189
@@ -1181,8 +1193,13 @@ This function is an internal primitive--use `make-frame' instead. */)
1181 x_default_parameter (f, parms, Qfontsize, 1193 x_default_parameter (f, parms, Qfontsize,
1182 make_number (0 /*(int)[font pointSize]*/), 1194 make_number (0 /*(int)[font pointSize]*/),
1183 "fontSize", "FontSize", RES_TYPE_NUMBER); 1195 "fontSize", "FontSize", RES_TYPE_NUMBER);
1196 // Remove ' Regular', not handled by backends.
1197 char *fontname = xstrdup ([[font displayName] UTF8String]);
1198 int len = strlen (fontname);
1199 if (len > 8 && strcmp (fontname + len - 8, " Regular") == 0)
1200 fontname[len-8] = '\0';
1184 x_default_parameter (f, parms, Qfont, 1201 x_default_parameter (f, parms, Qfont,
1185 build_string ([[font fontName] UTF8String]), 1202 build_string (fontname),
1186 "font", "Font", RES_TYPE_STRING); 1203 "font", "Font", RES_TYPE_STRING);
1187 } 1204 }
1188 unblock_input (); 1205 unblock_input ();
@@ -1255,7 +1272,7 @@ This function is an internal primitive--use `make-frame' instead. */)
1255 f->output_data.ns->hand_cursor = [NSCursor pointingHandCursor]; 1272 f->output_data.ns->hand_cursor = [NSCursor pointingHandCursor];
1256 f->output_data.ns->hourglass_cursor = [NSCursor disappearingItemCursor]; 1273 f->output_data.ns->hourglass_cursor = [NSCursor disappearingItemCursor];
1257 f->output_data.ns->horizontal_drag_cursor = [NSCursor resizeLeftRightCursor]; 1274 f->output_data.ns->horizontal_drag_cursor = [NSCursor resizeLeftRightCursor];
1258 FRAME_NS_DISPLAY_INFO (f)->vertical_scroll_bar_cursor 1275 FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor
1259 = [NSCursor arrowCursor]; 1276 = [NSCursor arrowCursor];
1260 f->output_data.ns->current_pointer = f->output_data.ns->text_cursor; 1277 f->output_data.ns->current_pointer = f->output_data.ns->text_cursor;
1261 1278
@@ -1339,14 +1356,10 @@ This function is an internal primitive--use `make-frame' instead. */)
1339 return unbind_to (count, frame); 1356 return unbind_to (count, frame);
1340} 1357}
1341 1358
1342 1359void
1343DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, 1360x_focus_frame (struct frame *f)
1344 doc: /* Set the input focus to FRAME.
1345FRAME nil means use the selected frame. */)
1346 (Lisp_Object frame)
1347{ 1361{
1348 struct frame *f = decode_window_system_frame (frame); 1362 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1349 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f);
1350 1363
1351 if (dpyinfo->x_focus_frame != f) 1364 if (dpyinfo->x_focus_frame != f)
1352 { 1365 {
@@ -1356,8 +1369,6 @@ FRAME nil means use the selected frame. */)
1356 [[view window] makeKeyAndOrderFront: view]; 1369 [[view window] makeKeyAndOrderFront: view];
1357 unblock_input (); 1370 unblock_input ();
1358 } 1371 }
1359
1360 return Qnil;
1361} 1372}
1362 1373
1363 1374
@@ -1368,9 +1379,15 @@ DEFUN ("ns-popup-font-panel", Fns_popup_font_panel, Sns_popup_font_panel,
1368{ 1379{
1369 struct frame *f = decode_window_system_frame (frame); 1380 struct frame *f = decode_window_system_frame (frame);
1370 id fm = [NSFontManager sharedFontManager]; 1381 id fm = [NSFontManager sharedFontManager];
1371 1382 struct font *font = f->output_data.ns->font;
1372 [fm setSelectedFont: ((struct nsfont_info *)f->output_data.ns->font)->nsfont 1383 NSFont *nsfont;
1373 isMultiple: NO]; 1384 if (EQ (font->driver->type, Qns))
1385 nsfont = ((struct nsfont_info *)font)->nsfont;
1386#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
1387 else
1388 nsfont = (NSFont *) macfont_get_nsctfont (font);
1389#endif
1390 [fm setSelectedFont: nsfont isMultiple: NO];
1374 [fm orderFrontFontPanel: NSApp]; 1391 [fm orderFrontFontPanel: NSApp];
1375 return Qnil; 1392 return Qnil;
1376} 1393}
@@ -2194,17 +2211,13 @@ x_set_scroll_bar_default_width (struct frame *f)
2194 wid - 1) / wid; 2211 wid - 1) / wid;
2195} 2212}
2196 2213
2197
2198extern const char *x_get_string_resource (XrmDatabase, char *, char *);
2199
2200
2201/* terms impl this instead of x-get-resource directly */ 2214/* terms impl this instead of x-get-resource directly */
2202const char * 2215char *
2203x_get_string_resource (XrmDatabase rdb, char *name, char *class) 2216x_get_string_resource (XrmDatabase rdb, const char *name, const char *class)
2204{ 2217{
2205 /* remove appname prefix; TODO: allow for !="Emacs" */ 2218 /* remove appname prefix; TODO: allow for !="Emacs" */
2206 char *toCheck = class + (!strncmp (class, "Emacs.", 6) ? 6 : 0); 2219 const char *res, *toCheck = class + (!strncmp (class, "Emacs.", 6) ? 6 : 0);
2207 const char *res; 2220
2208 check_window_system (NULL); 2221 check_window_system (NULL);
2209 2222
2210 if (inhibit_x_resources) 2223 if (inhibit_x_resources)
@@ -2212,16 +2225,16 @@ x_get_string_resource (XrmDatabase rdb, char *name, char *class)
2212 return NULL; 2225 return NULL;
2213 2226
2214 res = ns_get_defaults_value (toCheck); 2227 res = ns_get_defaults_value (toCheck);
2215 return !res ? NULL : 2228 return (!res ? NULL :
2216 (!c_strncasecmp (res, "YES", 3) ? "true" : 2229 (!c_strncasecmp (res, "YES", 3) ? "true" :
2217 (!c_strncasecmp (res, "NO", 2) ? "false" : res)); 2230 (!c_strncasecmp (res, "NO", 2) ? "false" : (char *) res)));
2218} 2231}
2219 2232
2220 2233
2221Lisp_Object 2234Lisp_Object
2222x_get_focus_frame (struct frame *frame) 2235x_get_focus_frame (struct frame *frame)
2223{ 2236{
2224 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); 2237 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
2225 Lisp_Object nsfocus; 2238 Lisp_Object nsfocus;
2226 2239
2227 if (!dpyinfo->x_focus_frame) 2240 if (!dpyinfo->x_focus_frame)
@@ -2231,15 +2244,6 @@ x_get_focus_frame (struct frame *frame)
2231 return nsfocus; 2244 return nsfocus;
2232} 2245}
2233 2246
2234void
2235x_sync (struct frame *f)
2236{
2237 /* XXX Not implemented XXX */
2238 return;
2239}
2240
2241
2242
2243/* ========================================================================== 2247/* ==========================================================================
2244 2248
2245 Lisp definitions that, for whatever reason, we can't alias as 'ns-XXX'. 2249 Lisp definitions that, for whatever reason, we can't alias as 'ns-XXX'.
@@ -2560,6 +2564,7 @@ compute_tip_xy (struct frame *f,
2560{ 2564{
2561 Lisp_Object left, top; 2565 Lisp_Object left, top;
2562 EmacsView *view = FRAME_NS_VIEW (f); 2566 EmacsView *view = FRAME_NS_VIEW (f);
2567 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2563 NSPoint pt; 2568 NSPoint pt;
2564 2569
2565 /* Start with user-specified or mouse position. */ 2570 /* Start with user-specified or mouse position. */
@@ -2568,7 +2573,8 @@ compute_tip_xy (struct frame *f,
2568 2573
2569 if (!INTEGERP (left) || !INTEGERP (top)) 2574 if (!INTEGERP (left) || !INTEGERP (top))
2570 { 2575 {
2571 pt = last_mouse_motion_position; 2576 pt.x = dpyinfo->last_mouse_motion_x;
2577 pt.y = dpyinfo->last_mouse_motion_y;
2572 /* Convert to screen coordinates */ 2578 /* Convert to screen coordinates */
2573 pt = [view convertPoint: pt toView: nil]; 2579 pt = [view convertPoint: pt toView: nil];
2574 pt = [[view window] convertBaseToScreen: pt]; 2580 pt = [[view window] convertBaseToScreen: pt];
@@ -2577,7 +2583,7 @@ compute_tip_xy (struct frame *f,
2577 { 2583 {
2578 /* Absolute coordinates. */ 2584 /* Absolute coordinates. */
2579 pt.x = XINT (left); 2585 pt.x = XINT (left);
2580 pt.y = x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f)) - XINT (top) 2586 pt.y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - XINT (top)
2581 - height; 2587 - height;
2582 } 2588 }
2583 2589
@@ -2587,7 +2593,7 @@ compute_tip_xy (struct frame *f,
2587 else if (pt.x + XINT (dx) <= 0) 2593 else if (pt.x + XINT (dx) <= 0)
2588 *root_x = 0; /* Can happen for negative dx */ 2594 *root_x = 0; /* Can happen for negative dx */
2589 else if (pt.x + XINT (dx) + width 2595 else if (pt.x + XINT (dx) + width
2590 <= x_display_pixel_width (FRAME_NS_DISPLAY_INFO (f))) 2596 <= x_display_pixel_width (FRAME_DISPLAY_INFO (f)))
2591 /* It fits to the right of the pointer. */ 2597 /* It fits to the right of the pointer. */
2592 *root_x = pt.x + XINT (dx); 2598 *root_x = pt.x + XINT (dx);
2593 else if (width + XINT (dx) <= pt.x) 2599 else if (width + XINT (dx) <= pt.x)
@@ -2603,12 +2609,12 @@ compute_tip_xy (struct frame *f,
2603 /* It fits below the pointer. */ 2609 /* It fits below the pointer. */
2604 *root_y = pt.y - height - XINT (dy); 2610 *root_y = pt.y - height - XINT (dy);
2605 else if (pt.y + XINT (dy) + height 2611 else if (pt.y + XINT (dy) + height
2606 <= x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f))) 2612 <= x_display_pixel_height (FRAME_DISPLAY_INFO (f)))
2607 /* It fits above the pointer */ 2613 /* It fits above the pointer */
2608 *root_y = pt.y + XINT (dy); 2614 *root_y = pt.y + XINT (dy);
2609 else 2615 else
2610 /* Put it on the top. */ 2616 /* Put it on the top. */
2611 *root_y = x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f)) - height; 2617 *root_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - height;
2612} 2618}
2613 2619
2614 2620
@@ -2903,7 +2909,6 @@ be used as the image of the icon representing the frame. */);
2903 defsubr (&Sns_list_services); 2909 defsubr (&Sns_list_services);
2904 defsubr (&Sns_perform_service); 2910 defsubr (&Sns_perform_service);
2905 defsubr (&Sns_convert_utf8_nfd_to_nfc); 2911 defsubr (&Sns_convert_utf8_nfd_to_nfc);
2906 defsubr (&Sx_focus_frame);
2907 defsubr (&Sns_popup_font_panel); 2912 defsubr (&Sns_popup_font_panel);
2908 defsubr (&Sns_popup_color_panel); 2913 defsubr (&Sns_popup_color_panel);
2909 2914
diff --git a/src/nsfont.m b/src/nsfont.m
index e1c7d32dde0..bd9a2acc983 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -51,8 +51,6 @@ static Lisp_Object Qapple, Qroman, Qmedium;
51static Lisp_Object Qcondensed, Qexpanded; 51static Lisp_Object Qcondensed, Qexpanded;
52extern Lisp_Object Qappend; 52extern Lisp_Object Qappend;
53extern float ns_antialias_threshold; 53extern float ns_antialias_threshold;
54extern int ns_tmp_flags;
55extern struct nsfont_info *ns_tmp_font;
56 54
57 55
58/* font glyph and metrics caching functions, implemented at end */ 56/* font glyph and metrics caching functions, implemented at end */
@@ -528,7 +526,7 @@ static NSSet
528 } 526 }
529 527
530 if (NSFONT_TRACE) 528 if (NSFONT_TRACE)
531 NSLog(@" returning %d families", [families count]); 529 NSLog(@" returning %lu families", (unsigned long)[families count]);
532 return families; 530 return families;
533} 531}
534 532
@@ -566,8 +564,8 @@ ns_findfonts (Lisp_Object font_spec, BOOL isMatch)
566 matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys]; 564 matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys];
567 565
568 if (NSFONT_TRACE) 566 if (NSFONT_TRACE)
569 NSLog(@"Got desc %@ and found %d matching fonts from it: ", fdesc, 567 NSLog(@"Got desc %@ and found %lu matching fonts from it: ", fdesc,
570 [matchingDescs count]); 568 (unsigned long)[matchingDescs count]);
571 569
572 for (dEnum = [matchingDescs objectEnumerator]; (desc = [dEnum nextObject]);) 570 for (dEnum = [matchingDescs objectEnumerator]; (desc = [dEnum nextObject]);)
573 { 571 {
@@ -662,7 +660,7 @@ struct font_driver nsfont_driver =
662static Lisp_Object 660static Lisp_Object
663nsfont_get_cache (struct frame *frame) 661nsfont_get_cache (struct frame *frame)
664{ 662{
665 Display_Info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); 663 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (frame);
666 return (dpyinfo->name_list_element); 664 return (dpyinfo->name_list_element);
667} 665}
668 666
@@ -798,6 +796,7 @@ nsfont_open (struct frame *f, Lisp_Object font_entity, int pixel_size)
798 796
799 font_object = font_make_object (VECSIZE (struct nsfont_info), 797 font_object = font_make_object (VECSIZE (struct nsfont_info),
800 font_entity, pixel_size); 798 font_entity, pixel_size);
799 ASET (font_object, FONT_TYPE_INDEX, nsfont_driver.type);
801 font_info = (struct nsfont_info *) XFONT_OBJECT (font_object); 800 font_info = (struct nsfont_info *) XFONT_OBJECT (font_object);
802 font = (struct font *) font_info; 801 font = (struct font *) font_info;
803 if (!font) 802 if (!font)
@@ -871,10 +870,11 @@ nsfont_open (struct frame *f, Lisp_Object font_entity, int pixel_size)
871 font_info->size = font->pixel_size; 870 font_info->size = font->pixel_size;
872 871
873 /* max bounds */ 872 /* max bounds */
874 font_info->max_bounds.ascent = lrint ([sfont ascender]); 873 font->ascent = font_info->max_bounds.ascent = lrint ([sfont ascender]);
875 /* Descender is usually negative. Use floor to avoid 874 /* Descender is usually negative. Use floor to avoid
876 clipping descenders. */ 875 clipping descenders. */
877 font_info->max_bounds.descent = -lrint (floor(adjusted_descender)); 876 font->descent =
877 font_info->max_bounds.descent = -lrint (floor(adjusted_descender));
878 font_info->height = 878 font_info->height =
879 font_info->max_bounds.ascent + font_info->max_bounds.descent; 879 font_info->max_bounds.ascent + font_info->max_bounds.descent;
880 font_info->max_bounds.width = lrint (font_info->width); 880 font_info->max_bounds.width = lrint (font_info->width);
@@ -1051,16 +1051,26 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1051#endif 1051#endif
1052 struct face *face; 1052 struct face *face;
1053 NSRect r; 1053 NSRect r;
1054 struct nsfont_info *font = ns_tmp_font; 1054 struct nsfont_info *font;
1055 NSColor *col, *bgCol; 1055 NSColor *col, *bgCol;
1056 unsigned short *t = s->char2b; 1056 unsigned short *t = s->char2b;
1057 int i, len; 1057 int i, len, flags;
1058 char isComposite = s->first_glyph->type == COMPOSITE_GLYPH; 1058 char isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
1059 int end = isComposite ? s->cmp_to : s->nchars; 1059 int end = isComposite ? s->cmp_to : s->nchars;
1060 1060
1061 block_input (); 1061 block_input ();
1062
1063 font = (struct nsfont_info *)s->face->font;
1064 if (font == NULL)
1065 font = (struct nsfont_info *)FRAME_FONT (s->f);
1066
1062 /* Select face based on input flags */ 1067 /* Select face based on input flags */
1063 switch (ns_tmp_flags) 1068 flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR :
1069 (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE :
1070 (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND :
1071 NS_DUMPGLYPH_NORMAL));
1072
1073 switch (flags)
1064 { 1074 {
1065 case NS_DUMPGLYPH_CURSOR: 1075 case NS_DUMPGLYPH_CURSOR:
1066 face = s->face; 1076 face = s->face;
@@ -1175,7 +1185,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1175 : FRAME_BACKGROUND_COLOR (s->f)) set]; 1185 : FRAME_BACKGROUND_COLOR (s->f)) set];
1176 else 1186 else
1177 { 1187 {
1178 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (s->f); 1188 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f);
1179 [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set]; 1189 [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set];
1180 } 1190 }
1181 NSRectFill (br); 1191 NSRectFill (br);
@@ -1188,8 +1198,8 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1188 col = (NS_FACE_FOREGROUND (face) != 0 1198 col = (NS_FACE_FOREGROUND (face) != 0
1189 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f) 1199 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f)
1190 : FRAME_FOREGROUND_COLOR (s->f)); 1200 : FRAME_FOREGROUND_COLOR (s->f));
1191 /* FIXME: find another way to pass this */ 1201
1192 bgCol = (ns_tmp_flags != NS_DUMPGLYPH_FOREGROUND ? nil 1202 bgCol = (flags != NS_DUMPGLYPH_FOREGROUND ? nil
1193 : (NS_FACE_BACKGROUND (face) != 0 1203 : (NS_FACE_BACKGROUND (face) != 0
1194 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) 1204 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f)
1195 : FRAME_BACKGROUND_COLOR (s->f))); 1205 : FRAME_BACKGROUND_COLOR (s->f)));
@@ -1239,7 +1249,9 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1239 1249
1240 CGContextSaveGState (gcontext); 1250 CGContextSaveGState (gcontext);
1241 1251
1242 fliptf.c = font->synthItal ? Fix2X (kATSItalicQDSkew) : 0.0; 1252 // Used to be Fix2X (kATSItalicQDSkew), but Fix2X is deprecated
1253 // and kATSItalicQDSkew is 0.25.
1254 fliptf.c = font->synthItal ? 0.25 : 0.0;
1243 1255
1244 CGContextSetFont (gcontext, font->cgfont); 1256 CGContextSetFont (gcontext, font->cgfont);
1245 CGContextSetFontSize (gcontext, font->size); 1257 CGContextSetFontSize (gcontext, font->size);
@@ -1264,22 +1276,19 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1264 1276
1265 CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y); 1277 CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y);
1266 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, 1278 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from,
1267 advances, len); 1279 advances, len);
1268 1280
1269 if (face->overstrike) 1281 if (face->overstrike)
1270 { 1282 {
1271 CGContextSetTextPosition (gcontext, r.origin.x+0.5, r.origin.y); 1283 CGContextSetTextPosition (gcontext, r.origin.x+0.5, r.origin.y);
1272 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, 1284 CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from,
1273 advances, len); 1285 advances, len);
1274 } 1286 }
1275 1287
1276 CGContextRestoreGState (gcontext); 1288 CGContextRestoreGState (gcontext);
1277 } 1289 }
1278#endif /* NS_IMPL_COCOA */ 1290#endif /* NS_IMPL_COCOA */
1279 1291
1280 /* Draw underline, overline, strike-through. */
1281 ns_draw_text_decoration (s, face, col, r.size.width, r.origin.x);
1282
1283 unblock_input (); 1292 unblock_input ();
1284 return to-from; 1293 return to-from;
1285} 1294}
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 697329df675..3ed1734d222 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1242,7 +1242,7 @@ update_frame_tool_bar (struct frame *f)
1242{ 1242{
1243 /* 1) come up w/identifier */ 1243 /* 1) come up w/identifier */
1244 NSString *identifier 1244 NSString *identifier
1245 = [NSString stringWithFormat: @"%u", [img hash]]; 1245 = [NSString stringWithFormat: @"%lu", (unsigned long)[img hash]];
1246 [activeIdentifiers addObject: identifier]; 1246 [activeIdentifiers addObject: identifier];
1247 1247
1248 /* 2) create / reuse item */ 1248 /* 2) create / reuse item */
diff --git a/src/nsterm.h b/src/nsterm.h
index 4e07d796250..9f7767b312e 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -597,6 +597,30 @@ struct ns_display_info
597 597
598 struct frame *x_highlight_frame; 598 struct frame *x_highlight_frame;
599 struct frame *x_focus_frame; 599 struct frame *x_focus_frame;
600
601 /* The frame where the mouse was last time we reported a mouse event. */
602 struct frame *last_mouse_frame;
603
604 /* The frame where the mouse was last time we reported a mouse motion. */
605 struct frame *last_mouse_motion_frame;
606
607 /* Position where the mouse was last time we reported a motion.
608 This is a position on last_mouse_motion_frame. */
609 int last_mouse_motion_x;
610 int last_mouse_motion_y;
611
612 /* Where the mouse was last time we reported a mouse position. */
613 NSRect last_mouse_glyph;
614
615 /* Time of last mouse movement. */
616 Time last_mouse_movement_time;
617
618 /* The scroll bar in which the last motion event occurred. */
619#ifdef __OBJC__
620 EmacsScroller *last_mouse_scroll_bar;
621#else
622 void *last_mouse_scroll_bar;
623#endif
600}; 624};
601 625
602/* This is a chain of structures for all the NS displays currently in use. */ 626/* This is a chain of structures for all the NS displays currently in use. */
@@ -605,8 +629,6 @@ extern struct ns_display_info *x_display_list;
605extern Lisp_Object ns_display_name_list; 629extern Lisp_Object ns_display_name_list;
606extern struct ns_display_info *ns_display_info_for_name (Lisp_Object name); 630extern struct ns_display_info *ns_display_info_for_name (Lisp_Object name);
607 631
608struct ns_display_info *check_x_display_info (Lisp_Object frame);
609
610struct ns_output 632struct ns_output
611{ 633{
612#ifdef __OBJC__ 634#ifdef __OBJC__
@@ -678,9 +700,7 @@ struct x_output
678 700
679 701
680/* This gives the ns_display_info structure for the display F is on. */ 702/* This gives the ns_display_info structure for the display F is on. */
681#define FRAME_NS_DISPLAY_INFO(f) ((f)->output_data.ns->display_info) 703#define FRAME_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
682/* the primacy of X must be constantly worked with... */
683#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
684#define FRAME_X_OUTPUT(f) ((f)->output_data.ns) 704#define FRAME_X_OUTPUT(f) ((f)->output_data.ns)
685#define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc) 705#define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc)
686#define FRAME_X_WINDOW(f) ((f)->output_data.ns->window_desc) 706#define FRAME_X_WINDOW(f) ((f)->output_data.ns->window_desc)
@@ -689,12 +709,12 @@ struct x_output
689#define FRAME_NS_DISPLAY(f) (0) 709#define FRAME_NS_DISPLAY(f) (0)
690#define FRAME_X_DISPLAY(f) (0) 710#define FRAME_X_DISPLAY(f) (0)
691#define FRAME_X_SCREEN(f) (0) 711#define FRAME_X_SCREEN(f) (0)
692#define FRAME_X_VISUAL(f) FRAME_NS_DISPLAY_INFO(f)->visual 712#define FRAME_X_VISUAL(f) FRAME_DISPLAY_INFO(f)->visual
693 713
694#define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color) 714#define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color)
695#define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color) 715#define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color)
696 716
697#define FRAME_X_IMAGE_CACHE(F) FRAME_NS_DISPLAY_INFO ((F))->image_cache 717#define FRAME_X_IMAGE_CACHE(F) FRAME_DISPLAY_INFO ((F))->image_cache
698 718
699#define NS_FACE_FOREGROUND(f) ((f)->foreground) 719#define NS_FACE_FOREGROUND(f) ((f)->foreground)
700#define NS_FACE_BACKGROUND(f) ((f)->background) 720#define NS_FACE_BACKGROUND(f) ((f)->background)
@@ -703,10 +723,8 @@ struct x_output
703 723
704#define FONT_WIDTH(f) ((f)->max_width) 724#define FONT_WIDTH(f) ((f)->max_width)
705#define FONT_HEIGHT(f) ((f)->height) 725#define FONT_HEIGHT(f) ((f)->height)
706/*#define FONT_BASE(f) ((f)->ascent) */ 726#define FONT_BASE(f) ((f)->ascent)
707#define FONT_BASE(f) (((struct nsfont_info *)f)->max_bounds.ascent) 727#define FONT_DESCENT(f) ((f)->descent)
708/*#define FONT_DESCENT(f) ((f)->descent) */
709#define FONT_DESCENT(f) (((struct nsfont_info *)f)->max_bounds.descent)
710 728
711#define FRAME_DEFAULT_FACE(f) FACE_FROM_ID (f, DEFAULT_FACE_ID) 729#define FRAME_DEFAULT_FACE(f) FACE_FROM_ID (f, DEFAULT_FACE_ID)
712 730
@@ -744,14 +762,10 @@ struct x_output
744#define NS_TOP_POS(f) ((f)->top_pos) 762#define NS_TOP_POS(f) ((f)->top_pos)
745#endif 763#endif
746 764
747#define FRAME_NS_FONT_TABLE(f) (FRAME_NS_DISPLAY_INFO (f)->font_table) 765#define FRAME_NS_FONT_TABLE(f) (FRAME_DISPLAY_INFO (f)->font_table)
748 766
749#define FRAME_FONTSET(f) ((f)->output_data.ns->fontset) 767#define FRAME_FONTSET(f) ((f)->output_data.ns->fontset)
750 768
751#define FRAME_SMALLEST_CHAR_WIDTH(f) \
752 (FRAME_NS_DISPLAY_INFO (f)->smallest_char_width)
753#define FRAME_SMALLEST_FONT_HEIGHT(f) \
754 (FRAME_NS_DISPLAY_INFO (f)->smallest_font_height)
755#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset) 769#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset)
756#define BLACK_PIX_DEFAULT(f) 0x000000 770#define BLACK_PIX_DEFAULT(f) 0x000000
757#define WHITE_PIX_DEFAULT(f) 0xFFFFFF 771#define WHITE_PIX_DEFAULT(f) 0xFFFFFF
@@ -876,7 +890,6 @@ extern int ns_select (int nfds, fd_set *readfds, fd_set *writefds,
876 sigset_t const *sigmask); 890 sigset_t const *sigmask);
877extern unsigned long ns_get_rgb_color (struct frame *f, 891extern unsigned long ns_get_rgb_color (struct frame *f,
878 float r, float g, float b, float a); 892 float r, float g, float b, float a);
879extern NSPoint last_mouse_motion_position;
880 893
881/* From nsterm.m, needed in nsfont.m. */ 894/* From nsterm.m, needed in nsfont.m. */
882#ifdef __OBJC__ 895#ifdef __OBJC__
@@ -906,8 +919,4 @@ extern char gnustep_base_version[]; /* version tracking */
906 ? (min) : (((x)>(max)) ? (max) : (x))) 919 ? (min) : (((x)>(max)) ? (max) : (x)))
907#define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX)) 920#define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX))
908 921
909/* needed somewhere... */
910#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
911
912
913#endif /* HAVE_NS */ 922#endif /* HAVE_NS */
diff --git a/src/nsterm.m b/src/nsterm.m
index 31053ca7a0d..65c67eb9b56 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -64,6 +64,12 @@ GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu)
64#include "process.h" 64#include "process.h"
65#endif 65#endif
66 66
67#ifdef NS_IMPL_COCOA
68#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
69#include "macfont.h"
70#endif
71#endif
72
67/* call tracing */ 73/* call tracing */
68#if 0 74#if 0
69int term_trace_num = 0; 75int term_trace_num = 0;
@@ -185,11 +191,6 @@ Lisp_Object ns_display_name_list;
185long context_menu_value = 0; 191long context_menu_value = 0;
186 192
187/* display update */ 193/* display update */
188NSPoint last_mouse_motion_position;
189static NSRect last_mouse_glyph;
190static Time last_mouse_movement_time = 0;
191static Lisp_Object last_mouse_motion_frame;
192static EmacsScroller *last_mouse_scroll_bar = nil;
193static struct frame *ns_updating_frame; 194static struct frame *ns_updating_frame;
194static NSView *focus_view = NULL; 195static NSView *focus_view = NULL;
195static int ns_window_num = 0; 196static int ns_window_num = 0;
@@ -198,8 +199,6 @@ static NSRect uRect;
198#endif 199#endif
199static BOOL gsaved = NO; 200static BOOL gsaved = NO;
200static BOOL ns_fake_keydown = NO; 201static BOOL ns_fake_keydown = NO;
201int ns_tmp_flags; /* FIXME */
202struct nsfont_info *ns_tmp_font; /* FIXME */
203#ifdef NS_IMPL_COCOA 202#ifdef NS_IMPL_COCOA
204static BOOL ns_menu_bar_is_hidden = NO; 203static BOOL ns_menu_bar_is_hidden = NO;
205#endif 204#endif
@@ -801,18 +800,6 @@ ns_update_end (struct frame *f)
801 NSTRACE (ns_update_end); 800 NSTRACE (ns_update_end);
802} 801}
803 802
804
805static void
806ns_flush (struct frame *f)
807/* --------------------------------------------------------------------------
808 external (RIF) call
809 NS impl is no-op since currently we flush in ns_update_end and elsewhere
810 -------------------------------------------------------------------------- */
811{
812 NSTRACE (ns_flush);
813}
814
815
816static void 803static void
817ns_focus (struct frame *f, NSRect *r, int n) 804ns_focus (struct frame *f, NSRect *r, int n)
818/* -------------------------------------------------------------------------- 805/* --------------------------------------------------------------------------
@@ -1019,7 +1006,7 @@ ns_frame_rehighlight (struct frame *frame)
1019 External (hook): called on things like window switching within frame 1006 External (hook): called on things like window switching within frame
1020 -------------------------------------------------------------------------- */ 1007 -------------------------------------------------------------------------- */
1021{ 1008{
1022 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); 1009 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
1023 struct frame *old_highlight = dpyinfo->x_highlight_frame; 1010 struct frame *old_highlight = dpyinfo->x_highlight_frame;
1024 1011
1025 NSTRACE (ns_frame_rehighlight); 1012 NSTRACE (ns_frame_rehighlight);
@@ -1116,7 +1103,7 @@ x_iconify_frame (struct frame *f)
1116 NSTRACE (x_iconify_frame); 1103 NSTRACE (x_iconify_frame);
1117 check_window_system (f); 1104 check_window_system (f);
1118 view = FRAME_NS_VIEW (f); 1105 view = FRAME_NS_VIEW (f);
1119 dpyinfo = FRAME_NS_DISPLAY_INFO (f); 1106 dpyinfo = FRAME_DISPLAY_INFO (f);
1120 1107
1121 if (dpyinfo->x_highlight_frame == f) 1108 if (dpyinfo->x_highlight_frame == f)
1122 dpyinfo->x_highlight_frame = 0; 1109 dpyinfo->x_highlight_frame = 0;
@@ -1148,7 +1135,7 @@ x_free_frame_resources (struct frame *f)
1148 NSTRACE (x_free_frame_resources); 1135 NSTRACE (x_free_frame_resources);
1149 check_window_system (f); 1136 check_window_system (f);
1150 view = FRAME_NS_VIEW (f); 1137 view = FRAME_NS_VIEW (f);
1151 dpyinfo = FRAME_NS_DISPLAY_INFO (f); 1138 dpyinfo = FRAME_DISPLAY_INFO (f);
1152 hlinfo = MOUSE_HL_INFO (f); 1139 hlinfo = MOUSE_HL_INFO (f);
1153 1140
1154 [(EmacsView *)view setWindowClosing: YES]; /* may not have been informed */ 1141 [(EmacsView *)view setWindowClosing: YES]; /* may not have been informed */
@@ -1368,7 +1355,7 @@ ns_fullscreen_hook (struct frame *f)
1368NSColor * 1355NSColor *
1369ns_lookup_indexed_color (unsigned long idx, struct frame *f) 1356ns_lookup_indexed_color (unsigned long idx, struct frame *f)
1370{ 1357{
1371 struct ns_color_table *color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; 1358 struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table;
1372 if (idx < 1 || idx >= color_table->avail) 1359 if (idx < 1 || idx >= color_table->avail)
1373 return nil; 1360 return nil;
1374 return color_table->colors[idx]; 1361 return color_table->colors[idx];
@@ -1378,7 +1365,7 @@ ns_lookup_indexed_color (unsigned long idx, struct frame *f)
1378unsigned long 1365unsigned long
1379ns_index_color (NSColor *color, struct frame *f) 1366ns_index_color (NSColor *color, struct frame *f)
1380{ 1367{
1381 struct ns_color_table *color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; 1368 struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table;
1382 ptrdiff_t idx; 1369 ptrdiff_t idx;
1383 ptrdiff_t i; 1370 ptrdiff_t i;
1384 1371
@@ -1428,7 +1415,7 @@ ns_free_indexed_color (unsigned long idx, struct frame *f)
1428 if (!f) 1415 if (!f)
1429 return; 1416 return;
1430 1417
1431 color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; 1418 color_table = FRAME_DISPLAY_INFO (f)->color_table;
1432 1419
1433 if (idx <= 0 || idx >= color_table->size) { 1420 if (idx <= 0 || idx >= color_table->size) {
1434 message1 ("ns_free_indexed_color: Color index out of range.\n"); 1421 message1 ("ns_free_indexed_color: Color index out of range.\n");
@@ -1663,7 +1650,7 @@ x_set_frame_alpha (struct frame *f)
1663 change the entire-frame transparency 1650 change the entire-frame transparency
1664 -------------------------------------------------------------------------- */ 1651 -------------------------------------------------------------------------- */
1665{ 1652{
1666 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f); 1653 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1667 double alpha = 1.0; 1654 double alpha = 1.0;
1668 double alpha_min = 1.0; 1655 double alpha_min = 1.0;
1669 1656
@@ -1748,24 +1735,26 @@ note_mouse_movement (struct frame *frame, CGFloat x, CGFloat y)
1748 known as last_mouse_glyph. 1735 known as last_mouse_glyph.
1749 ------------------------------------------------------------------------ */ 1736 ------------------------------------------------------------------------ */
1750{ 1737{
1738 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
1739 NSRect *r;
1740
1751// NSTRACE (note_mouse_movement); 1741// NSTRACE (note_mouse_movement);
1752 1742
1753 XSETFRAME (last_mouse_motion_frame, frame); 1743 dpyinfo->last_mouse_motion_frame = frame;
1744 r = &dpyinfo->last_mouse_glyph;
1754 1745
1755 /* Note, this doesn't get called for enter/leave, since we don't have a 1746 /* Note, this doesn't get called for enter/leave, since we don't have a
1756 position. Those are taken care of in the corresponding NSView methods. */ 1747 position. Those are taken care of in the corresponding NSView methods. */
1757 1748
1758 /* has movement gone beyond last rect we were tracking? */ 1749 /* has movement gone beyond last rect we were tracking? */
1759 if (x < last_mouse_glyph.origin.x || 1750 if (x < r->origin.x || x >= r->origin.x + r->size.width
1760 x >= (last_mouse_glyph.origin.x + last_mouse_glyph.size.width) || 1751 || y < r->origin.y || y >= r->origin.y + r->size.height)
1761 y < last_mouse_glyph.origin.y ||
1762 y >= (last_mouse_glyph.origin.y + last_mouse_glyph.size.height))
1763 { 1752 {
1764 ns_update_begin(frame); 1753 ns_update_begin (frame);
1765 frame->mouse_moved = 1; 1754 frame->mouse_moved = 1;
1766 note_mouse_highlight (frame, x, y); 1755 note_mouse_highlight (frame, x, y);
1767 remember_mouse_glyph (frame, x, y, &last_mouse_glyph); 1756 remember_mouse_glyph (frame, x, y, r);
1768 ns_update_end(frame); 1757 ns_update_end (frame);
1769 return 1; 1758 return 1;
1770 } 1759 }
1771 1760
@@ -1798,18 +1787,19 @@ ns_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
1798 return; 1787 return;
1799 } 1788 }
1800 1789
1801 dpyinfo = FRAME_NS_DISPLAY_INFO (*fp); 1790 dpyinfo = FRAME_DISPLAY_INFO (*fp);
1802 1791
1803 block_input (); 1792 block_input ();
1804 1793
1805 if (last_mouse_scroll_bar != nil && insist == 0) 1794 if (dpyinfo->last_mouse_scroll_bar != nil && insist == 0)
1806 { 1795 {
1807 /* TODO: we do not use this path at the moment because drag events will 1796 /* TODO: we do not use this path at the moment because drag events will
1808 go directly to the EmacsScroller. Leaving code in for now. */ 1797 go directly to the EmacsScroller. Leaving code in for now. */
1809 [last_mouse_scroll_bar getMouseMotionPart: (int *)part window: bar_window 1798 [dpyinfo->last_mouse_scroll_bar
1810 x: x y: y]; 1799 getMouseMotionPart: (int *)part window: bar_window x: x y: y];
1811 if (time) *time = last_mouse_movement_time; 1800 if (time)
1812 last_mouse_scroll_bar = nil; 1801 *time = dpyinfo->last_mouse_movement_time;
1802 dpyinfo->last_mouse_scroll_bar = nil;
1813 } 1803 }
1814 else 1804 else
1815 { 1805 {
@@ -1819,9 +1809,10 @@ ns_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
1819 && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp)) 1809 && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp))
1820 XFRAME (frame)->mouse_moved = 0; 1810 XFRAME (frame)->mouse_moved = 0;
1821 1811
1822 last_mouse_scroll_bar = nil; 1812 dpyinfo->last_mouse_scroll_bar = nil;
1823 if (last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) 1813 if (dpyinfo->last_mouse_frame
1824 f = last_mouse_frame; 1814 && FRAME_LIVE_P (dpyinfo->last_mouse_frame))
1815 f = dpyinfo->last_mouse_frame;
1825 else 1816 else
1826 f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame 1817 f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame
1827 : SELECTED_FRAME (); 1818 : SELECTED_FRAME ();
@@ -1832,7 +1823,8 @@ ns_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
1832 1823
1833 position = [[view window] mouseLocationOutsideOfEventStream]; 1824 position = [[view window] mouseLocationOutsideOfEventStream];
1834 position = [view convertPoint: position fromView: nil]; 1825 position = [view convertPoint: position fromView: nil];
1835 remember_mouse_glyph (f, position.x, position.y, &last_mouse_glyph); 1826 remember_mouse_glyph (f, position.x, position.y,
1827 &dpyinfo->last_mouse_glyph);
1836/*fprintf (stderr, "ns_mouse_position: %.0f, %.0f\n", position.x, position.y); */ 1828/*fprintf (stderr, "ns_mouse_position: %.0f, %.0f\n", position.x, position.y); */
1837 1829
1838 if (bar_window) *bar_window = Qnil; 1830 if (bar_window) *bar_window = Qnil;
@@ -1840,7 +1832,8 @@ ns_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
1840 1832
1841 if (x) XSETINT (*x, lrint (position.x)); 1833 if (x) XSETINT (*x, lrint (position.x));
1842 if (y) XSETINT (*y, lrint (position.y)); 1834 if (y) XSETINT (*y, lrint (position.y));
1843 if (time) *time = last_mouse_movement_time; 1835 if (time)
1836 *time = dpyinfo->last_mouse_movement_time;
1844 *fp = f; 1837 *fp = f;
1845 } 1838 }
1846 } 1839 }
@@ -2170,8 +2163,11 @@ ns_compute_glyph_string_overhangs (struct glyph_string *s)
2170 else 2163 else
2171 { 2164 {
2172 s->left_overhang = 0; 2165 s->left_overhang = 0;
2173 s->right_overhang = ((struct nsfont_info *)font)->ital ? 2166 if (EQ (font->driver->type, Qns))
2174 FONT_HEIGHT (font) * 0.2 : 0; 2167 s->right_overhang = ((struct nsfont_info *)font)->ital ?
2168 FONT_HEIGHT (font) * 0.2 : 0;
2169 else
2170 s->right_overhang = 0;
2175 } 2171 }
2176} 2172}
2177 2173
@@ -2889,7 +2885,7 @@ ns_maybe_dumpglyphs_background (struct glyph_string *s, char force_p)
2889 : FRAME_BACKGROUND_COLOR (s->f)) set]; 2885 : FRAME_BACKGROUND_COLOR (s->f)) set];
2890 else 2886 else
2891 { 2887 {
2892 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (s->f); 2888 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f);
2893 [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set]; 2889 [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set];
2894 } 2890 }
2895 2891
@@ -3145,8 +3141,10 @@ ns_draw_glyph_string (struct glyph_string *s)
3145{ 3141{
3146 /* TODO (optimize): focus for box and contents draw */ 3142 /* TODO (optimize): focus for box and contents draw */
3147 NSRect r[2]; 3143 NSRect r[2];
3148 int n; 3144 int n, flags;
3149 char box_drawn_p = 0; 3145 char box_drawn_p = 0;
3146 struct font *font = s->face->font;
3147 if (! font) font = FRAME_FONT (s->f);
3150 3148
3151 NSTRACE (ns_draw_glyph_string); 3149 NSTRACE (ns_draw_glyph_string);
3152 3150
@@ -3213,13 +3211,10 @@ ns_draw_glyph_string (struct glyph_string *s)
3213 ns_maybe_dumpglyphs_background 3211 ns_maybe_dumpglyphs_background
3214 (s, s->first_glyph->type == COMPOSITE_GLYPH); 3212 (s, s->first_glyph->type == COMPOSITE_GLYPH);
3215 3213
3216 ns_tmp_flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR : 3214 flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR :
3217 (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE : 3215 (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE :
3218 (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND : 3216 (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND :
3219 NS_DUMPGLYPH_NORMAL)); 3217 NS_DUMPGLYPH_NORMAL));
3220 ns_tmp_font = (struct nsfont_info *)s->face->font;
3221 if (ns_tmp_font == NULL)
3222 ns_tmp_font = (struct nsfont_info *)FRAME_FONT (s->f);
3223 3218
3224 if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR) 3219 if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR)
3225 { 3220 {
@@ -3228,10 +3223,21 @@ ns_draw_glyph_string (struct glyph_string *s)
3228 NS_FACE_FOREGROUND (s->face) = tmp; 3223 NS_FACE_FOREGROUND (s->face) = tmp;
3229 } 3224 }
3230 3225
3231 ns_tmp_font->font.driver->draw 3226 font->driver->draw
3232 (s, 0, s->nchars, s->x, s->y, 3227 (s, 0, s->nchars, s->x, s->y,
3233 (ns_tmp_flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p) 3228 (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p)
3234 || ns_tmp_flags == NS_DUMPGLYPH_MOUSEFACE); 3229 || flags == NS_DUMPGLYPH_MOUSEFACE);
3230
3231 {
3232 NSColor *col = (NS_FACE_FOREGROUND (s->face) != 0
3233 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (s->face),
3234 s->f)
3235 : FRAME_FOREGROUND_COLOR (s->f));
3236 [col set];
3237
3238 /* Draw underline, overline, strike-through. */
3239 ns_draw_text_decoration (s, s->face, col, s->width, s->x);
3240 }
3235 3241
3236 if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR) 3242 if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR)
3237 { 3243 {
@@ -3963,8 +3969,7 @@ static struct redisplay_interface ns_redisplay_interface =
3963 ns_after_update_window_line, 3969 ns_after_update_window_line,
3964 ns_update_window_begin, 3970 ns_update_window_begin,
3965 ns_update_window_end, 3971 ns_update_window_end,
3966 ns_flush, 3972 0, /* flush_display */
3967 0, /* flush_display_optional */
3968 x_clear_window_mouse_face, 3973 x_clear_window_mouse_face,
3969 x_get_glyph_overhangs, 3974 x_get_glyph_overhangs,
3970 x_fix_overlapping_area, 3975 x_fix_overlapping_area,
@@ -3972,7 +3977,7 @@ static struct redisplay_interface ns_redisplay_interface =
3972 0, /* define_fringe_bitmap */ /* FIXME: simplify ns_draw_fringe_bitmap */ 3977 0, /* define_fringe_bitmap */ /* FIXME: simplify ns_draw_fringe_bitmap */
3973 0, /* destroy_fringe_bitmap */ 3978 0, /* destroy_fringe_bitmap */
3974 ns_compute_glyph_string_overhangs, 3979 ns_compute_glyph_string_overhangs,
3975 ns_draw_glyph_string, /* interface to nsfont.m */ 3980 ns_draw_glyph_string,
3976 ns_define_frame_cursor, 3981 ns_define_frame_cursor,
3977 ns_clear_frame_area, 3982 ns_clear_frame_area,
3978 ns_draw_window_cursor, 3983 ns_draw_window_cursor,
@@ -4822,17 +4827,26 @@ not_in_argv (NSString *arg)
4822/* called on font panel selection */ 4827/* called on font panel selection */
4823- (void)changeFont: (id)sender 4828- (void)changeFont: (id)sender
4824{ 4829{
4825 NSEvent *e =[[self window] currentEvent]; 4830 NSEvent *e = [[self window] currentEvent];
4826 struct face *face =FRAME_DEFAULT_FACE (emacsframe); 4831 struct face *face = FRAME_DEFAULT_FACE (emacsframe);
4832 struct font *font = face->font;
4827 id newFont; 4833 id newFont;
4828 CGFloat size; 4834 CGFloat size;
4835 NSFont *nsfont;
4829 4836
4830 NSTRACE (changeFont); 4837 NSTRACE (changeFont);
4838
4831 if (!emacs_event) 4839 if (!emacs_event)
4832 return; 4840 return;
4833 4841
4834 if ((newFont = [sender convertFont: 4842 if (EQ (font->driver->type, Qns))
4835 ((struct nsfont_info *)face->font)->nsfont])) 4843 nsfont = ((struct nsfont_info *)font)->nsfont;
4844#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
4845 else
4846 nsfont = (NSFont *) macfont_get_nsctfont (font);
4847#endif
4848
4849 if ((newFont = [sender convertFont: nsfont]))
4836 { 4850 {
4837 SET_FRAME_GARBAGED (emacsframe); /* now needed as of 2008/10 */ 4851 SET_FRAME_GARBAGED (emacsframe); /* now needed as of 2008/10 */
4838 4852
@@ -5194,8 +5208,10 @@ not_in_argv (NSString *arg)
5194 NSString *str = [aString respondsToSelector: @selector (string)] ? 5208 NSString *str = [aString respondsToSelector: @selector (string)] ?
5195 [aString string] : aString; 5209 [aString string] : aString;
5196 if (NS_KEYLOG) 5210 if (NS_KEYLOG)
5197 NSLog (@"setMarkedText '%@' len =%d range %d from %d", str, [str length], 5211 NSLog (@"setMarkedText '%@' len =%lu range %lu from %lu",
5198 selRange.length, selRange.location); 5212 str, (unsigned long)[str length],
5213 (unsigned long)selRange.length,
5214 (unsigned long)selRange.location);
5199 5215
5200 if (workingText != nil) 5216 if (workingText != nil)
5201 [self deleteWorkingText]; 5217 [self deleteWorkingText];
@@ -5221,7 +5237,7 @@ not_in_argv (NSString *arg)
5221 if (workingText == nil) 5237 if (workingText == nil)
5222 return; 5238 return;
5223 if (NS_KEYLOG) 5239 if (NS_KEYLOG)
5224 NSLog(@"deleteWorkingText len =%d\n", [workingText length]); 5240 NSLog(@"deleteWorkingText len =%lu\n", (unsigned long)[workingText length]);
5225 [workingText release]; 5241 [workingText release];
5226 workingText = nil; 5242 workingText = nil;
5227 processingCompose = NO; 5243 processingCompose = NO;
@@ -5349,6 +5365,7 @@ not_in_argv (NSString *arg)
5349/* This is what happens when the user presses a mouse button. */ 5365/* This is what happens when the user presses a mouse button. */
5350- (void)mouseDown: (NSEvent *)theEvent 5366- (void)mouseDown: (NSEvent *)theEvent
5351{ 5367{
5368 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe);
5352 NSPoint p = [self convertPoint: [theEvent locationInWindow] fromView: nil]; 5369 NSPoint p = [self convertPoint: [theEvent locationInWindow] fromView: nil];
5353 5370
5354 NSTRACE (mouseDown); 5371 NSTRACE (mouseDown);
@@ -5358,10 +5375,10 @@ not_in_argv (NSString *arg)
5358 if (!emacs_event) 5375 if (!emacs_event)
5359 return; 5376 return;
5360 5377
5361 last_mouse_frame = emacsframe; 5378 dpyinfo->last_mouse_frame = emacsframe;
5362 /* appears to be needed to prevent spurious movement events generated on 5379 /* appears to be needed to prevent spurious movement events generated on
5363 button clicks */ 5380 button clicks */
5364 last_mouse_frame->mouse_moved = 0; 5381 emacsframe->mouse_moved = 0;
5365 5382
5366 if ([theEvent type] == NSScrollWheel) 5383 if ([theEvent type] == NSScrollWheel)
5367 { 5384 {
@@ -5433,13 +5450,16 @@ not_in_argv (NSString *arg)
5433- (void)mouseMoved: (NSEvent *)e 5450- (void)mouseMoved: (NSEvent *)e
5434{ 5451{
5435 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (emacsframe); 5452 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (emacsframe);
5453 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe);
5436 Lisp_Object frame; 5454 Lisp_Object frame;
5455 NSPoint pt;
5437 5456
5438// NSTRACE (mouseMoved); 5457// NSTRACE (mouseMoved);
5439 5458
5440 last_mouse_movement_time = EV_TIMESTAMP (e); 5459 dpyinfo->last_mouse_movement_time = EV_TIMESTAMP (e);
5441 last_mouse_motion_position 5460 pt = [self convertPoint: [e locationInWindow] fromView: nil];
5442 = [self convertPoint: [e locationInWindow] fromView: nil]; 5461 dpyinfo->last_mouse_motion_x = pt.x;
5462 dpyinfo->last_mouse_motion_y = pt.y;
5443 5463
5444 /* update any mouse face */ 5464 /* update any mouse face */
5445 if (hlinfo->mouse_face_hidden) 5465 if (hlinfo->mouse_face_hidden)
@@ -5456,9 +5476,8 @@ not_in_argv (NSString *arg)
5456 { 5476 {
5457 NSTRACE (mouse_autoselect_window); 5477 NSTRACE (mouse_autoselect_window);
5458 static Lisp_Object last_mouse_window; 5478 static Lisp_Object last_mouse_window;
5459 Lisp_Object window = window_from_coordinates 5479 Lisp_Object window
5460 (emacsframe, last_mouse_motion_position.x, 5480 = window_from_coordinates (emacsframe, pt.x, pt.y, 0, 0);
5461 last_mouse_motion_position.y, 0, 0);
5462 5481
5463 if (WINDOWP (window) 5482 if (WINDOWP (window)
5464 && !EQ (window, last_mouse_window) 5483 && !EQ (window, last_mouse_window)
@@ -5476,8 +5495,7 @@ not_in_argv (NSString *arg)
5476 last_mouse_window = window; 5495 last_mouse_window = window;
5477 } 5496 }
5478 5497
5479 if (!note_mouse_movement (emacsframe, last_mouse_motion_position.x, 5498 if (!note_mouse_movement (emacsframe, pt.x, pt.y))
5480 last_mouse_motion_position.y))
5481 help_echo_string = previous_help_echo_string; 5499 help_echo_string = previous_help_echo_string;
5482 5500
5483 XSETFRAME (frame, emacsframe); 5501 XSETFRAME (frame, emacsframe);
@@ -5718,7 +5736,7 @@ if (cols > 0 && rows > 0)
5718- (void)windowDidBecomeKey: (NSNotification *)notification 5736- (void)windowDidBecomeKey: (NSNotification *)notification
5719/* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */ 5737/* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */
5720{ 5738{
5721 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (emacsframe); 5739 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe);
5722 struct frame *old_focus = dpyinfo->x_focus_frame; 5740 struct frame *old_focus = dpyinfo->x_focus_frame;
5723 5741
5724 NSTRACE (windowDidBecomeKey); 5742 NSTRACE (windowDidBecomeKey);
@@ -5739,7 +5757,7 @@ if (cols > 0 && rows > 0)
5739- (void)windowDidResignKey: (NSNotification *)notification 5757- (void)windowDidResignKey: (NSNotification *)notification
5740/* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */ 5758/* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */
5741{ 5759{
5742 struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (emacsframe); 5760 struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe);
5743 BOOL is_focus_frame = dpyinfo->x_focus_frame == emacsframe; 5761 BOOL is_focus_frame = dpyinfo->x_focus_frame == emacsframe;
5744 NSTRACE (windowDidResignKey); 5762 NSTRACE (windowDidResignKey);
5745 5763
@@ -6322,7 +6340,9 @@ if (cols > 0 && rows > 0)
6322- (void)mouseEntered: (NSEvent *)theEvent 6340- (void)mouseEntered: (NSEvent *)theEvent
6323{ 6341{
6324 NSTRACE (mouseEntered); 6342 NSTRACE (mouseEntered);
6325 last_mouse_movement_time = EV_TIMESTAMP (theEvent); 6343 if (emacsframe)
6344 FRAME_DISPLAY_INFO (emacsframe)->last_mouse_movement_time
6345 = EV_TIMESTAMP (theEvent);
6326} 6346}
6327 6347
6328 6348
@@ -6335,7 +6355,8 @@ if (cols > 0 && rows > 0)
6335 if (!hlinfo) 6355 if (!hlinfo)
6336 return; 6356 return;
6337 6357
6338 last_mouse_movement_time = EV_TIMESTAMP (theEvent); 6358 FRAME_DISPLAY_INFO (emacsframe)->last_mouse_movement_time
6359 = EV_TIMESTAMP (theEvent);
6339 6360
6340 if (emacsframe == hlinfo->mouse_face_mouse_frame) 6361 if (emacsframe == hlinfo->mouse_face_mouse_frame)
6341 { 6362 {
@@ -7401,9 +7422,6 @@ allowing it to be used at a lower level for accented character entry.");
7401 staticpro (&ns_display_name_list); 7422 staticpro (&ns_display_name_list);
7402 ns_display_name_list = Qnil; 7423 ns_display_name_list = Qnil;
7403 7424
7404 staticpro (&last_mouse_motion_frame);
7405 last_mouse_motion_frame = Qnil;
7406
7407 DEFVAR_LISP ("ns-auto-hide-menu-bar", ns_auto_hide_menu_bar, 7425 DEFVAR_LISP ("ns-auto-hide-menu-bar", ns_auto_hide_menu_bar,
7408 doc: /* Non-nil means that the menu bar is hidden, but appears when the mouse is near. 7426 doc: /* Non-nil means that the menu bar is hidden, but appears when the mouse is near.
7409Only works on OSX 10.6 or later. */); 7427Only works on OSX 10.6 or later. */);
@@ -7446,6 +7464,14 @@ variable `x-use-underline-position-properties', which is usually at the
7446baseline level. The default value is nil. */); 7464baseline level. The default value is nil. */);
7447 x_underline_at_descent_line = 0; 7465 x_underline_at_descent_line = 0;
7448 7466
7449 /* Tell emacs about this window system. */ 7467 /* Tell Emacs about this window system. */
7450 Fprovide (intern ("ns"), Qnil); 7468 Fprovide (Qns, Qnil);
7469
7470 syms_of_nsfont ();
7471#ifdef NS_IMPL_COCOA
7472#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
7473 syms_of_macfont ();
7474#endif
7475#endif
7476
7451} 7477}
diff --git a/src/process.c b/src/process.c
index 20f84990d6f..2ed8a690193 100644
--- a/src/process.c
+++ b/src/process.c
@@ -21,8 +21,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
21 21
22#include <config.h> 22#include <config.h>
23 23
24#define PROCESS_INLINE EXTERN_INLINE
25
26#include <stdio.h> 24#include <stdio.h>
27#include <errno.h> 25#include <errno.h>
28#include <sys/types.h> /* Some typedefs are used in sys/file.h. */ 26#include <sys/types.h> /* Some typedefs are used in sys/file.h. */
@@ -1335,15 +1333,15 @@ Returns nil if format of ADDRESS is invalid. */)
1335 1333
1336 for (i = 0; i < nargs; i++) 1334 for (i = 0; i < nargs; i++)
1337 { 1335 {
1338 if (! RANGED_INTEGERP (0, p->contents[i], 65535)) 1336 if (! RANGED_INTEGERP (0, p->u.contents[i], 65535))
1339 return Qnil; 1337 return Qnil;
1340 1338
1341 if (nargs <= 5 /* IPv4 */ 1339 if (nargs <= 5 /* IPv4 */
1342 && i < 4 /* host, not port */ 1340 && i < 4 /* host, not port */
1343 && XINT (p->contents[i]) > 255) 1341 && XINT (p->u.contents[i]) > 255)
1344 return Qnil; 1342 return Qnil;
1345 1343
1346 args[i+1] = p->contents[i]; 1344 args[i+1] = p->u.contents[i];
1347 } 1345 }
1348 1346
1349 return Fformat (nargs+1, args); 1347 return Fformat (nargs+1, args);
@@ -1982,7 +1980,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
1982 len = sizeof (sin->sin_addr) + 1; 1980 len = sizeof (sin->sin_addr) + 1;
1983 address = Fmake_vector (make_number (len), Qnil); 1981 address = Fmake_vector (make_number (len), Qnil);
1984 p = XVECTOR (address); 1982 p = XVECTOR (address);
1985 p->contents[--len] = make_number (ntohs (sin->sin_port)); 1983 p->u.contents[--len] = make_number (ntohs (sin->sin_port));
1986 cp = (unsigned char *) &sin->sin_addr; 1984 cp = (unsigned char *) &sin->sin_addr;
1987 break; 1985 break;
1988 } 1986 }
@@ -1994,9 +1992,9 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
1994 len = sizeof (sin6->sin6_addr)/2 + 1; 1992 len = sizeof (sin6->sin6_addr)/2 + 1;
1995 address = Fmake_vector (make_number (len), Qnil); 1993 address = Fmake_vector (make_number (len), Qnil);
1996 p = XVECTOR (address); 1994 p = XVECTOR (address);
1997 p->contents[--len] = make_number (ntohs (sin6->sin6_port)); 1995 p->u.contents[--len] = make_number (ntohs (sin6->sin6_port));
1998 for (i = 0; i < len; i++) 1996 for (i = 0; i < len; i++)
1999 p->contents[i] = make_number (ntohs (ip6[i])); 1997 p->u.contents[i] = make_number (ntohs (ip6[i]));
2000 return address; 1998 return address;
2001 } 1999 }
2002#endif 2000#endif
@@ -2021,7 +2019,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
2021 2019
2022 i = 0; 2020 i = 0;
2023 while (i < len) 2021 while (i < len)
2024 p->contents[i++] = make_number (*cp++); 2022 p->u.contents[i++] = make_number (*cp++);
2025 2023
2026 return address; 2024 return address;
2027} 2025}
@@ -2092,7 +2090,7 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int
2092 { 2090 {
2093 struct sockaddr_in *sin = (struct sockaddr_in *) sa; 2091 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2094 len = sizeof (sin->sin_addr) + 1; 2092 len = sizeof (sin->sin_addr) + 1;
2095 hostport = XINT (p->contents[--len]); 2093 hostport = XINT (p->u.contents[--len]);
2096 sin->sin_port = htons (hostport); 2094 sin->sin_port = htons (hostport);
2097 cp = (unsigned char *)&sin->sin_addr; 2095 cp = (unsigned char *)&sin->sin_addr;
2098 sa->sa_family = family; 2096 sa->sa_family = family;
@@ -2103,12 +2101,12 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int
2103 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; 2101 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2104 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; 2102 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2105 len = sizeof (sin6->sin6_addr) + 1; 2103 len = sizeof (sin6->sin6_addr) + 1;
2106 hostport = XINT (p->contents[--len]); 2104 hostport = XINT (p->u.contents[--len]);
2107 sin6->sin6_port = htons (hostport); 2105 sin6->sin6_port = htons (hostport);
2108 for (i = 0; i < len; i++) 2106 for (i = 0; i < len; i++)
2109 if (INTEGERP (p->contents[i])) 2107 if (INTEGERP (p->u.contents[i]))
2110 { 2108 {
2111 int j = XFASTINT (p->contents[i]) & 0xffff; 2109 int j = XFASTINT (p->u.contents[i]) & 0xffff;
2112 ip6[i] = ntohs (j); 2110 ip6[i] = ntohs (j);
2113 } 2111 }
2114 sa->sa_family = family; 2112 sa->sa_family = family;
@@ -2139,8 +2137,8 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int
2139 } 2137 }
2140 2138
2141 for (i = 0; i < len; i++) 2139 for (i = 0; i < len; i++)
2142 if (INTEGERP (p->contents[i])) 2140 if (INTEGERP (p->u.contents[i]))
2143 *cp++ = XFASTINT (p->contents[i]) & 0xff; 2141 *cp++ = XFASTINT (p->u.contents[i]) & 0xff;
2144} 2142}
2145 2143
2146#ifdef DATAGRAM_SOCKETS 2144#ifdef DATAGRAM_SOCKETS
@@ -3731,7 +3729,7 @@ FLAGS is the current flags of the interface. */)
3731 3729
3732 any = 1; 3730 any = 1;
3733 for (n = 0; n < 6; n++) 3731 for (n = 0; n < 6; n++)
3734 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]); 3732 p->u.contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3735 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr); 3733 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3736 } 3734 }
3737#elif defined (HAVE_GETIFADDRS) && defined (LLADDR) 3735#elif defined (HAVE_GETIFADDRS) && defined (LLADDR)
@@ -3754,7 +3752,7 @@ FLAGS is the current flags of the interface. */)
3754 3752
3755 memcpy (linkaddr, LLADDR (sdl), sdl->sdl_alen); 3753 memcpy (linkaddr, LLADDR (sdl), sdl->sdl_alen);
3756 for (n = 0; n < 6; n++) 3754 for (n = 0; n < 6; n++)
3757 p->contents[n] = make_number (linkaddr[n]); 3755 p->u.contents[n] = make_number (linkaddr[n]);
3758 3756
3759 elt = Fcons (make_number (it->ifa_addr->sa_family), hwaddr); 3757 elt = Fcons (make_number (it->ifa_addr->sa_family), hwaddr);
3760 break; 3758 break;
@@ -4849,7 +4847,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
4849#else 4847#else
4850 { 4848 {
4851 struct sockaddr pname; 4849 struct sockaddr pname;
4852 int pnamelen = sizeof (pname); 4850 socklen_t pnamelen = sizeof (pname);
4853 4851
4854 /* If connection failed, getpeername will fail. */ 4852 /* If connection failed, getpeername will fail. */
4855 xerrno = 0; 4853 xerrno = 0;
diff --git a/src/process.h b/src/process.h
index 6aff95686a2..a9b15f03da4 100644
--- a/src/process.h
+++ b/src/process.h
@@ -27,9 +27,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
27#endif 27#endif
28 28
29INLINE_HEADER_BEGIN 29INLINE_HEADER_BEGIN
30#ifndef PROCESS_INLINE
31# define PROCESS_INLINE INLINE
32#endif
33 30
34/* Bound on number of file descriptors opened on behalf of a process, 31/* Bound on number of file descriptors opened on behalf of a process,
35 that need to be closed. */ 32 that need to be closed. */
@@ -179,14 +176,14 @@ struct Lisp_Process
179/* Most code should use these functions to set Lisp fields in struct 176/* Most code should use these functions to set Lisp fields in struct
180 process. */ 177 process. */
181 178
182PROCESS_INLINE void 179INLINE void
183pset_childp (struct Lisp_Process *p, Lisp_Object val) 180pset_childp (struct Lisp_Process *p, Lisp_Object val)
184{ 181{
185 p->childp = val; 182 p->childp = val;
186} 183}
187 184
188#ifdef HAVE_GNUTLS 185#ifdef HAVE_GNUTLS
189PROCESS_INLINE void 186INLINE void
190pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object val) 187pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object val)
191{ 188{
192 p->gnutls_cred_type = val; 189 p->gnutls_cred_type = val;
diff --git a/src/ralloc.c b/src/ralloc.c
index 5f25ef2c320..5b7d6a512d7 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -85,7 +85,7 @@ static int extra_bytes;
85/* Macros for rounding. Note that rounding to any value is possible 85/* Macros for rounding. Note that rounding to any value is possible
86 by changing the definition of PAGE. */ 86 by changing the definition of PAGE. */
87#define PAGE (getpagesize ()) 87#define PAGE (getpagesize ())
88#define ROUNDUP(size) (((size_t) (size) + page_size - 1) \ 88#define PAGE_ROUNDUP(size) (((size_t) (size) + page_size - 1) \
89 & ~((size_t) (page_size - 1))) 89 & ~((size_t) (page_size - 1)))
90 90
91#define MEM_ALIGN sizeof (double) 91#define MEM_ALIGN sizeof (double)
@@ -281,7 +281,7 @@ obtain (void *address, size_t size)
281 Get some extra, so we can come here less often. */ 281 Get some extra, so we can come here less often. */
282 282
283 get = size + extra_bytes - already_available; 283 get = size + extra_bytes - already_available;
284 get = (char *) ROUNDUP ((char *) last_heap->end + get) 284 get = (char *) PAGE_ROUNDUP ((char *) last_heap->end + get)
285 - (char *) last_heap->end; 285 - (char *) last_heap->end;
286 286
287 if (real_morecore (get) != last_heap->end) 287 if (real_morecore (get) != last_heap->end)
@@ -344,7 +344,7 @@ relinquish (void)
344 else 344 else
345 { 345 {
346 excess = ((char *) last_heap->end 346 excess = ((char *) last_heap->end
347 - (char *) ROUNDUP ((char *) last_heap->end - excess)); 347 - (char *) PAGE_ROUNDUP ((char *) last_heap->end - excess));
348 /* If the system doesn't want that much memory back, leave 348 /* If the system doesn't want that much memory back, leave
349 the end of the last heap unchanged to reflect that. This 349 the end of the last heap unchanged to reflect that. This
350 can occur if break_value is still within the original 350 can occur if break_value is still within the original
@@ -768,9 +768,9 @@ r_alloc_sbrk (ptrdiff_t size)
768 not always find a space which is contiguous to the previous. */ 768 not always find a space which is contiguous to the previous. */
769 void *new_bloc_start; 769 void *new_bloc_start;
770 heap_ptr h = first_heap; 770 heap_ptr h = first_heap;
771 size_t get = ROUNDUP (size); 771 size_t get = PAGE_ROUNDUP (size);
772 772
773 address = (void *) ROUNDUP (virtual_break_value); 773 address = (void *) PAGE_ROUNDUP (virtual_break_value);
774 774
775 /* Search the list upward for a heap which is large enough. */ 775 /* Search the list upward for a heap which is large enough. */
776 while ((char *) h->end < (char *) MEM_ROUNDUP ((char *) address + get)) 776 while ((char *) h->end < (char *) MEM_ROUNDUP ((char *) address + get))
@@ -778,7 +778,7 @@ r_alloc_sbrk (ptrdiff_t size)
778 h = h->next; 778 h = h->next;
779 if (h == NIL_HEAP) 779 if (h == NIL_HEAP)
780 break; 780 break;
781 address = (void *) ROUNDUP (h->start); 781 address = (void *) PAGE_ROUNDUP (h->start);
782 } 782 }
783 783
784 /* If not found, obtain more space. */ 784 /* If not found, obtain more space. */
@@ -790,9 +790,9 @@ r_alloc_sbrk (ptrdiff_t size)
790 return 0; 790 return 0;
791 791
792 if (first_heap == last_heap) 792 if (first_heap == last_heap)
793 address = (void *) ROUNDUP (virtual_break_value); 793 address = (void *) PAGE_ROUNDUP (virtual_break_value);
794 else 794 else
795 address = (void *) ROUNDUP (last_heap->start); 795 address = (void *) PAGE_ROUNDUP (last_heap->start);
796 h = last_heap; 796 h = last_heap;
797 } 797 }
798 798
@@ -1054,7 +1054,7 @@ r_alloc_check (void)
1054 for (h = first_heap; h; h = h->next) 1054 for (h = first_heap; h; h = h->next)
1055 { 1055 {
1056 assert (h->prev == ph); 1056 assert (h->prev == ph);
1057 assert ((void *) ROUNDUP (h->end) == h->end); 1057 assert ((void *) PAGE_ROUNDUP (h->end) == h->end);
1058#if 0 /* ??? The code in ralloc.c does not really try to ensure 1058#if 0 /* ??? The code in ralloc.c does not really try to ensure
1059 the heap start has any sort of alignment. 1059 the heap start has any sort of alignment.
1060 Perhaps it should. */ 1060 Perhaps it should. */
@@ -1190,7 +1190,7 @@ r_alloc_init (void)
1190 if (break_value == NULL) 1190 if (break_value == NULL)
1191 emacs_abort (); 1191 emacs_abort ();
1192 1192
1193 extra_bytes = ROUNDUP (50000); 1193 extra_bytes = PAGE_ROUNDUP (50000);
1194#endif 1194#endif
1195 1195
1196#ifdef DOUG_LEA_MALLOC 1196#ifdef DOUG_LEA_MALLOC
@@ -1212,7 +1212,7 @@ r_alloc_init (void)
1212#endif 1212#endif
1213 1213
1214#ifndef SYSTEM_MALLOC 1214#ifndef SYSTEM_MALLOC
1215 first_heap->end = (void *) ROUNDUP (first_heap->start); 1215 first_heap->end = (void *) PAGE_ROUNDUP (first_heap->start);
1216 1216
1217 /* The extra call to real_morecore guarantees that the end of the 1217 /* The extra call to real_morecore guarantees that the end of the
1218 address space is a multiple of page_size, even if page_size is 1218 address space is a multiple of page_size, even if page_size is
diff --git a/src/regex.c b/src/regex.c
index 1befececd22..4ab98bbf098 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -131,12 +131,12 @@
131# include "character.h" 131# include "character.h"
132# include "buffer.h" 132# include "buffer.h"
133 133
134/* Make syntax table lookup grant data in gl_state. */
135# define SYNTAX_ENTRY_VIA_PROPERTY
136
137# include "syntax.h" 134# include "syntax.h"
138# include "category.h" 135# include "category.h"
139 136
137/* Make syntax table lookup grant data in gl_state. */
138# define SYNTAX(c) syntax_property (c, 1)
139
140# ifdef malloc 140# ifdef malloc
141# undef malloc 141# undef malloc
142# endif 142# endif
diff --git a/src/syntax.c b/src/syntax.c
index 31eb86faed8..e18db029309 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -20,8 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define SYNTAX_INLINE EXTERN_INLINE
24
25#include <sys/types.h> 23#include <sys/types.h>
26 24
27#include "lisp.h" 25#include "lisp.h"
@@ -31,13 +29,15 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
31#include "keymap.h" 29#include "keymap.h"
32#include "regex.h" 30#include "regex.h"
33 31
34/* Make syntax table lookup grant data in gl_state. */
35#define SYNTAX_ENTRY_VIA_PROPERTY
36
37#include "syntax.h" 32#include "syntax.h"
38#include "intervals.h" 33#include "intervals.h"
39#include "category.h" 34#include "category.h"
40 35
36/* Make syntax table lookup grant data in gl_state. */
37#define SYNTAX(c) syntax_property (c, 1)
38#define SYNTAX_ENTRY(c) syntax_property_entry (c, 1)
39#define SYNTAX_WITH_FLAGS(c) syntax_property_with_flags (c, 1)
40
41/* Eight single-bit flags have the following meanings: 41/* Eight single-bit flags have the following meanings:
42 1. This character is the first of a two-character comment-start sequence. 42 1. This character is the first of a two-character comment-start sequence.
43 2. This character is the second of a two-character comment-start sequence. 43 2. This character is the second of a two-character comment-start sequence.
diff --git a/src/syntax.h b/src/syntax.h
index 1b96284af42..73fbb153338 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -19,9 +19,6 @@ You should have received a copy of the GNU General Public License
19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ 19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21INLINE_HEADER_BEGIN 21INLINE_HEADER_BEGIN
22#ifndef SYNTAX_INLINE
23# define SYNTAX_INLINE INLINE
24#endif
25 22
26extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object); 23extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object);
27 24
@@ -86,35 +83,49 @@ struct gl_state_s
86extern struct gl_state_s gl_state; 83extern struct gl_state_s gl_state;
87 84
88/* Fetch the information from the entry for character C 85/* Fetch the information from the entry for character C
89 in syntax table TABLE, or from globally kept data (gl_state). 86 in the current buffer's syntax table,
87 or (if VIA_PROPERTY) from globally kept data (gl_state).
90 Does inheritance. */ 88 Does inheritance. */
91 89
92SYNTAX_INLINE Lisp_Object 90INLINE Lisp_Object
93SYNTAX_ENTRY (int c) 91syntax_property_entry (int c, bool via_property)
94{ 92{
95#ifdef SYNTAX_ENTRY_VIA_PROPERTY 93 if (via_property)
96 return (gl_state.use_global 94 return (gl_state.use_global
97 ? gl_state.global_code 95 ? gl_state.global_code
98 : CHAR_TABLE_REF (gl_state.current_syntax_table, c)); 96 : CHAR_TABLE_REF (gl_state.current_syntax_table, c));
99#else
100 return CHAR_TABLE_REF (BVAR (current_buffer, syntax_table), c); 97 return CHAR_TABLE_REF (BVAR (current_buffer, syntax_table), c);
101#endif 98}
99INLINE Lisp_Object
100SYNTAX_ENTRY (int c)
101{
102 return syntax_property_entry (c, 0);
102} 103}
103 104
104/* Extract the information from the entry for character C 105/* Extract the information from the entry for character C
105 in the current syntax table. */ 106 in the current syntax table. */
106 107
107SYNTAX_INLINE int 108INLINE int
108SYNTAX_WITH_FLAGS (int c) 109syntax_property_with_flags (int c, bool via_property)
109{ 110{
110 Lisp_Object ent = SYNTAX_ENTRY (c); 111 Lisp_Object ent = syntax_property_entry (c, via_property);
111 return CONSP (ent) ? XINT (XCAR (ent)) : Swhitespace; 112 return CONSP (ent) ? XINT (XCAR (ent)) : Swhitespace;
112} 113}
114INLINE int
115SYNTAX_WITH_FLAGS (int c)
116{
117 return syntax_property_with_flags (c, 0);
118}
113 119
114SYNTAX_INLINE enum syntaxcode 120INLINE enum syntaxcode
121syntax_property (int c, bool via_property)
122{
123 return syntax_property_with_flags (c, via_property) & 0xff;
124}
125INLINE enum syntaxcode
115SYNTAX (int c) 126SYNTAX (int c)
116{ 127{
117 return SYNTAX_WITH_FLAGS (c) & 0xff; 128 return syntax_property (c, 0);
118} 129}
119 130
120 131
@@ -137,7 +148,7 @@ extern char const syntax_code_spec[16];
137 The value is meant for use in code that does nothing when 148 The value is meant for use in code that does nothing when
138 parse_sexp_lookup_properties is 0, so return 0 in that case, for speed. */ 149 parse_sexp_lookup_properties is 0, so return 0 in that case, for speed. */
139 150
140SYNTAX_INLINE ptrdiff_t 151INLINE ptrdiff_t
141SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos) 152SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos)
142{ 153{
143 return (! parse_sexp_lookup_properties 154 return (! parse_sexp_lookup_properties
@@ -157,7 +168,7 @@ SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos)
157/* Make syntax table state (gl_state) good for CHARPOS, assuming it is 168/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
158 currently good for a position before CHARPOS. */ 169 currently good for a position before CHARPOS. */
159 170
160SYNTAX_INLINE void 171INLINE void
161UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos) 172UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
162{ 173{
163 if (parse_sexp_lookup_properties && charpos >= gl_state.e_property) 174 if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
@@ -167,7 +178,7 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
167/* Make syntax table state (gl_state) good for CHARPOS, assuming it is 178/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
168 currently good for a position after CHARPOS. */ 179 currently good for a position after CHARPOS. */
169 180
170SYNTAX_INLINE void 181INLINE void
171UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos) 182UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos)
172{ 183{
173 if (parse_sexp_lookup_properties && charpos < gl_state.b_property) 184 if (parse_sexp_lookup_properties && charpos < gl_state.b_property)
@@ -176,7 +187,7 @@ UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos)
176 187
177/* Make syntax table good for CHARPOS. */ 188/* Make syntax table good for CHARPOS. */
178 189
179SYNTAX_INLINE void 190INLINE void
180UPDATE_SYNTAX_TABLE (ptrdiff_t charpos) 191UPDATE_SYNTAX_TABLE (ptrdiff_t charpos)
181{ 192{
182 UPDATE_SYNTAX_TABLE_BACKWARD (charpos); 193 UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
@@ -185,7 +196,7 @@ UPDATE_SYNTAX_TABLE (ptrdiff_t charpos)
185 196
186/* Set up the buffer-global syntax table. */ 197/* Set up the buffer-global syntax table. */
187 198
188SYNTAX_INLINE void 199INLINE void
189SETUP_BUFFER_SYNTAX_TABLE (void) 200SETUP_BUFFER_SYNTAX_TABLE (void)
190{ 201{
191 gl_state.use_global = 0; 202 gl_state.use_global = 0;
diff --git a/src/sysdep.c b/src/sysdep.c
index 6439697501e..84859813249 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -19,8 +19,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
19 19
20#include <config.h> 20#include <config.h>
21 21
22#define SYSTIME_INLINE EXTERN_INLINE
23
24#include <execinfo.h> 22#include <execinfo.h>
25#include "sysstdio.h" 23#include "sysstdio.h"
26#ifdef HAVE_PWD_H 24#ifdef HAVE_PWD_H
diff --git a/src/systime.h b/src/systime.h
index b1c3d940b0e..a9bdf53b09f 100644
--- a/src/systime.h
+++ b/src/systime.h
@@ -22,9 +22,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
22#include <timespec.h> 22#include <timespec.h>
23 23
24INLINE_HEADER_BEGIN 24INLINE_HEADER_BEGIN
25#ifndef SYSTIME_INLINE
26# define SYSTIME_INLINE INLINE
27#endif
28 25
29#ifdef emacs 26#ifdef emacs
30# ifdef HAVE_X_WINDOWS 27# ifdef HAVE_X_WINDOWS
@@ -54,7 +51,7 @@ typedef unsigned long Time;
54 should be an absolute time since the epoch and B a nonnegative offset. */ 51 should be an absolute time since the epoch and B a nonnegative offset. */
55 52
56/* Return an invalid timespec. */ 53/* Return an invalid timespec. */
57SYSTIME_INLINE struct timespec 54INLINE struct timespec
58invalid_timespec (void) 55invalid_timespec (void)
59{ 56{
60 return make_timespec (0, -1); 57 return make_timespec (0, -1);
@@ -63,14 +60,14 @@ invalid_timespec (void)
63/* Return 1 if TIME is a valid timespec. This currently doesn't worry 60/* Return 1 if TIME is a valid timespec. This currently doesn't worry
64 about whether tv_nsec is less than TIMESPEC_RESOLUTION; leap seconds 61 about whether tv_nsec is less than TIMESPEC_RESOLUTION; leap seconds
65 might cause a problem if it did. */ 62 might cause a problem if it did. */
66SYSTIME_INLINE int 63INLINE int
67timespec_valid_p (struct timespec t) 64timespec_valid_p (struct timespec t)
68{ 65{
69 return t.tv_nsec >= 0; 66 return t.tv_nsec >= 0;
70} 67}
71 68
72/* Return current system time. */ 69/* Return current system time. */
73SYSTIME_INLINE struct timespec 70INLINE struct timespec
74current_timespec (void) 71current_timespec (void)
75{ 72{
76 struct timespec r; 73 struct timespec r;
diff --git a/src/term.c b/src/term.c
index 830ecf10dcb..116a2e6bba1 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1810,27 +1810,10 @@ append_glyphless_glyph (struct it *it, int face_id, const char *str)
1810static void 1810static void
1811produce_glyphless_glyph (struct it *it, Lisp_Object acronym) 1811produce_glyphless_glyph (struct it *it, Lisp_Object acronym)
1812{ 1812{
1813 int face_id; 1813 int len, face_id = merge_glyphless_glyph_face (it);
1814 int len;
1815 char buf[sizeof "\\x" + max (6, (sizeof it->c * CHAR_BIT + 3) / 4)]; 1814 char buf[sizeof "\\x" + max (6, (sizeof it->c * CHAR_BIT + 3) / 4)];
1816 char const *str = " "; 1815 char const *str = " ";
1817 1816
1818 /* Get a face ID for the glyph by utilizing a cache (the same way as
1819 done for `escape-glyph' in get_next_display_element). */
1820 if (it->f == last_glyphless_glyph_frame
1821 && it->face_id == last_glyphless_glyph_face_id)
1822 {
1823 face_id = last_glyphless_glyph_merged_face_id;
1824 }
1825 else
1826 {
1827 /* Merge the `glyphless-char' face into the current face. */
1828 face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id);
1829 last_glyphless_glyph_frame = it->f;
1830 last_glyphless_glyph_face_id = it->face_id;
1831 last_glyphless_glyph_merged_face_id = face_id;
1832 }
1833
1834 if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE) 1817 if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE)
1835 { 1818 {
1836 /* As there's no way to produce a thin space, we produce a space 1819 /* As there's no way to produce a thin space, we produce a space
@@ -4061,12 +4044,8 @@ dissociate_if_controlling_tty (int fd)
4061struct terminal * 4044struct terminal *
4062init_tty (const char *name, const char *terminal_type, bool must_succeed) 4045init_tty (const char *name, const char *terminal_type, bool must_succeed)
4063{ 4046{
4064#ifdef TERMINFO
4065 char **address = 0;
4066#else
4067 char *area; 4047 char *area;
4068 char **address = &area; 4048 char **address = &area;
4069#endif
4070 int status; 4049 int status;
4071 struct tty_display_info *tty = NULL; 4050 struct tty_display_info *tty = NULL;
4072 struct terminal *terminal = NULL; 4051 struct terminal *terminal = NULL;
@@ -4157,13 +4136,9 @@ init_tty (const char *name, const char *terminal_type, bool must_succeed)
4157 /* On some systems, tgetent tries to access the controlling 4136 /* On some systems, tgetent tries to access the controlling
4158 terminal. */ 4137 terminal. */
4159 block_tty_out_signal (); 4138 block_tty_out_signal ();
4160#ifdef TERMINFO
4161 status = tgetent (0, terminal_type);
4162#else
4163 status = tgetent (tty->termcap_term_buffer, terminal_type); 4139 status = tgetent (tty->termcap_term_buffer, terminal_type);
4164 if (tty->termcap_term_buffer[TERMCAP_BUFFER_SIZE - 1]) 4140 if (tty->termcap_term_buffer[TERMCAP_BUFFER_SIZE - 1])
4165 emacs_abort (); 4141 emacs_abort ();
4166#endif
4167 unblock_tty_out_signal (); 4142 unblock_tty_out_signal ();
4168 4143
4169 if (status < 0) 4144 if (status < 0)
@@ -4194,9 +4169,7 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
4194 terminal_type); 4169 terminal_type);
4195 } 4170 }
4196 4171
4197#ifndef TERMINFO
4198 area = tty->termcap_strings_buffer; 4172 area = tty->termcap_strings_buffer;
4199#endif
4200 tty->TS_ins_line = tgetstr ("al", address); 4173 tty->TS_ins_line = tgetstr ("al", address);
4201 tty->TS_ins_multi_lines = tgetstr ("AL", address); 4174 tty->TS_ins_multi_lines = tgetstr ("AL", address);
4202 tty->TS_bell = tgetstr ("bl", address); 4175 tty->TS_bell = tgetstr ("bl", address);
diff --git a/src/termchar.h b/src/termchar.h
index 9dea46f0b76..031f4e4034b 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -30,9 +30,7 @@ struct tty_output
30 /* There is nothing else here at the moment... */ 30 /* There is nothing else here at the moment... */
31}; 31};
32 32
33#ifndef TERMINFO
34enum { TERMCAP_BUFFER_SIZE = 4096 }; 33enum { TERMCAP_BUFFER_SIZE = 4096 };
35#endif
36 34
37/* Parameters that are shared between frames on the same tty device. */ 35/* Parameters that are shared between frames on the same tty device. */
38 36
@@ -78,7 +76,6 @@ struct tty_display_info
78 mouse-face. */ 76 mouse-face. */
79 Mouse_HLInfo mouse_highlight; 77 Mouse_HLInfo mouse_highlight;
80 78
81#ifndef TERMINFO
82 /* Buffer used internally by termcap (see tgetent in the Termcap 79 /* Buffer used internally by termcap (see tgetent in the Termcap
83 manual). Only init_tty should use this. */ 80 manual). Only init_tty should use this. */
84 char termcap_term_buffer[TERMCAP_BUFFER_SIZE]; 81 char termcap_term_buffer[TERMCAP_BUFFER_SIZE];
@@ -86,7 +83,6 @@ struct tty_display_info
86 /* Buffer storing terminal description strings (see tgetstr in the 83 /* Buffer storing terminal description strings (see tgetstr in the
87 Termcap manual). Only init_tty should use this. */ 84 Termcap manual). Only init_tty should use this. */
88 char termcap_strings_buffer[TERMCAP_BUFFER_SIZE]; 85 char termcap_strings_buffer[TERMCAP_BUFFER_SIZE];
89#endif
90 86
91 /* Strings, numbers and flags taken from the termcap entry. */ 87 /* Strings, numbers and flags taken from the termcap entry. */
92 88
diff --git a/src/termhooks.h b/src/termhooks.h
index 3e4ec1d7e6d..9cea0c188ec 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -26,11 +26,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
26#include "systime.h" /* for Time */ 26#include "systime.h" /* for Time */
27 27
28INLINE_HEADER_BEGIN 28INLINE_HEADER_BEGIN
29#ifndef TERMHOOKS_INLINE
30# define TERMHOOKS_INLINE INLINE
31#endif
32 29
33enum scroll_bar_part { 30enum scroll_bar_part {
31 scroll_bar_nowhere = -1,
34 scroll_bar_above_handle, 32 scroll_bar_above_handle,
35 scroll_bar_handle, 33 scroll_bar_handle,
36 scroll_bar_below_handle, 34 scroll_bar_below_handle,
@@ -42,11 +40,6 @@ enum scroll_bar_part {
42 scroll_bar_move_ratio 40 scroll_bar_move_ratio
43}; 41};
44 42
45/* If the value of the frame parameter changed, whis hook is called.
46 For example, if going from fullscreen to not fullscreen this hook
47 may do something OS dependent, like extended window manager hints on X11. */
48extern void (*fullscreen_hook) (struct frame *f);
49
50/* Output method of a terminal (and frames on this terminal, respectively). */ 43/* Output method of a terminal (and frames on this terminal, respectively). */
51 44
52enum output_method 45enum output_method
@@ -498,7 +491,7 @@ struct terminal
498 windows. */ 491 windows. */
499 void (*frame_raise_lower_hook) (struct frame *f, int raise_flag); 492 void (*frame_raise_lower_hook) (struct frame *f, int raise_flag);
500 493
501 /* If the value of the frame parameter changed, whis hook is called. 494 /* If the value of the frame parameter changed, this hook is called.
502 For example, if going from fullscreen to not fullscreen this hook 495 For example, if going from fullscreen to not fullscreen this hook
503 may do something OS dependent, like extended window manager hints on X11. */ 496 may do something OS dependent, like extended window manager hints on X11. */
504 void (*fullscreen_hook) (struct frame *f); 497 void (*fullscreen_hook) (struct frame *f);
@@ -612,12 +605,12 @@ struct terminal
612 605
613/* Most code should use these functions to set Lisp fields in struct 606/* Most code should use these functions to set Lisp fields in struct
614 terminal. */ 607 terminal. */
615TERMHOOKS_INLINE void 608INLINE void
616tset_charset_list (struct terminal *t, Lisp_Object val) 609tset_charset_list (struct terminal *t, Lisp_Object val)
617{ 610{
618 t->charset_list = val; 611 t->charset_list = val;
619} 612}
620TERMHOOKS_INLINE void 613INLINE void
621tset_selection_alist (struct terminal *t, Lisp_Object val) 614tset_selection_alist (struct terminal *t, Lisp_Object val)
622{ 615{
623 t->Vselection_alist = val; 616 t->Vselection_alist = val;
diff --git a/src/terminal.c b/src/terminal.c
index 4b5532e3a44..61c5d050945 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -18,8 +18,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
18 18
19#include <config.h> 19#include <config.h>
20 20
21#define TERMHOOKS_INLINE EXTERN_INLINE
22
23#include <stdio.h> 21#include <stdio.h>
24 22
25#include "lisp.h" 23#include "lisp.h"
diff --git a/src/w32console.c b/src/w32console.c
index 94bb5df07a4..285abb310fe 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -630,7 +630,6 @@ void
630initialize_w32_display (struct terminal *term, int *width, int *height) 630initialize_w32_display (struct terminal *term, int *width, int *height)
631{ 631{
632 CONSOLE_SCREEN_BUFFER_INFO info; 632 CONSOLE_SCREEN_BUFFER_INFO info;
633 Mouse_HLInfo *hlinfo;
634 633
635 term->rif = 0; /* No window based redisplay on the console. */ 634 term->rif = 0; /* No window based redisplay on the console. */
636 term->cursor_to_hook = w32con_move_cursor; 635 term->cursor_to_hook = w32con_move_cursor;
diff --git a/src/w32fns.c b/src/w32fns.c
index 8ec911280a0..6e52453caea 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -277,7 +277,7 @@ check_x_display_info (Lisp_Object frame)
277 struct frame *sf = XFRAME (selected_frame); 277 struct frame *sf = XFRAME (selected_frame);
278 278
279 if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf)) 279 if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf))
280 return FRAME_W32_DISPLAY_INFO (sf); 280 return FRAME_DISPLAY_INFO (sf);
281 else 281 else
282 return &one_w32_display_info; 282 return &one_w32_display_info;
283 } 283 }
@@ -291,7 +291,7 @@ check_x_display_info (Lisp_Object frame)
291 f = XFRAME (frame); 291 f = XFRAME (frame);
292 if (! FRAME_W32_P (f)) 292 if (! FRAME_W32_P (f))
293 error ("Non-W32 frame used"); 293 error ("Non-W32 frame used");
294 return FRAME_W32_DISPLAY_INFO (f); 294 return FRAME_DISPLAY_INFO (f);
295 } 295 }
296} 296}
297 297
@@ -307,7 +307,7 @@ x_window_to_frame (struct w32_display_info *dpyinfo, HWND wdesc)
307 FOR_EACH_FRAME (tail, frame) 307 FOR_EACH_FRAME (tail, frame)
308 { 308 {
309 f = XFRAME (frame); 309 f = XFRAME (frame);
310 if (!FRAME_W32_P (f) || FRAME_W32_DISPLAY_INFO (f) != dpyinfo) 310 if (!FRAME_W32_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo)
311 continue; 311 continue;
312 312
313 if (FRAME_W32_WINDOW (f) == wdesc) 313 if (FRAME_W32_WINDOW (f) == wdesc)
@@ -1027,18 +1027,18 @@ w32_regenerate_palette (struct frame *f)
1027 int i; 1027 int i;
1028 1028
1029 /* don't bother trying to create palette if not supported */ 1029 /* don't bother trying to create palette if not supported */
1030 if (! FRAME_W32_DISPLAY_INFO (f)->has_palette) 1030 if (! FRAME_DISPLAY_INFO (f)->has_palette)
1031 return; 1031 return;
1032 1032
1033 log_palette = (LOGPALETTE *) 1033 log_palette = (LOGPALETTE *)
1034 alloca (sizeof (LOGPALETTE) + 1034 alloca (sizeof (LOGPALETTE) +
1035 FRAME_W32_DISPLAY_INFO (f)->num_colors * sizeof (PALETTEENTRY)); 1035 FRAME_DISPLAY_INFO (f)->num_colors * sizeof (PALETTEENTRY));
1036 log_palette->palVersion = 0x300; 1036 log_palette->palVersion = 0x300;
1037 log_palette->palNumEntries = FRAME_W32_DISPLAY_INFO (f)->num_colors; 1037 log_palette->palNumEntries = FRAME_DISPLAY_INFO (f)->num_colors;
1038 1038
1039 list = FRAME_W32_DISPLAY_INFO (f)->color_list; 1039 list = FRAME_DISPLAY_INFO (f)->color_list;
1040 for (i = 0; 1040 for (i = 0;
1041 i < FRAME_W32_DISPLAY_INFO (f)->num_colors; 1041 i < FRAME_DISPLAY_INFO (f)->num_colors;
1042 i++, list = list->next) 1042 i++, list = list->next)
1043 log_palette->palPalEntry[i] = list->entry; 1043 log_palette->palPalEntry[i] = list->entry;
1044 1044
@@ -1046,9 +1046,9 @@ w32_regenerate_palette (struct frame *f)
1046 1046
1047 enter_crit (); 1047 enter_crit ();
1048 1048
1049 if (FRAME_W32_DISPLAY_INFO (f)->palette) 1049 if (FRAME_DISPLAY_INFO (f)->palette)
1050 DeleteObject (FRAME_W32_DISPLAY_INFO (f)->palette); 1050 DeleteObject (FRAME_DISPLAY_INFO (f)->palette);
1051 FRAME_W32_DISPLAY_INFO (f)->palette = new_palette; 1051 FRAME_DISPLAY_INFO (f)->palette = new_palette;
1052 1052
1053 /* Realize display palette and garbage all frames. */ 1053 /* Realize display palette and garbage all frames. */
1054 release_frame_dc (f, get_frame_dc (f)); 1054 release_frame_dc (f, get_frame_dc (f));
@@ -1071,7 +1071,7 @@ w32_regenerate_palette (struct frame *f)
1071void 1071void
1072w32_map_color (struct frame *f, COLORREF color) 1072w32_map_color (struct frame *f, COLORREF color)
1073{ 1073{
1074 struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; 1074 struct w32_palette_entry * list = FRAME_DISPLAY_INFO (f)->color_list;
1075 1075
1076 if (NILP (Vw32_enable_palette)) 1076 if (NILP (Vw32_enable_palette))
1077 return; 1077 return;
@@ -1091,19 +1091,19 @@ w32_map_color (struct frame *f, COLORREF color)
1091 list = xmalloc (sizeof (struct w32_palette_entry)); 1091 list = xmalloc (sizeof (struct w32_palette_entry));
1092 SET_W32_COLOR (list->entry, color); 1092 SET_W32_COLOR (list->entry, color);
1093 list->refcount = 1; 1093 list->refcount = 1;
1094 list->next = FRAME_W32_DISPLAY_INFO (f)->color_list; 1094 list->next = FRAME_DISPLAY_INFO (f)->color_list;
1095 FRAME_W32_DISPLAY_INFO (f)->color_list = list; 1095 FRAME_DISPLAY_INFO (f)->color_list = list;
1096 FRAME_W32_DISPLAY_INFO (f)->num_colors++; 1096 FRAME_DISPLAY_INFO (f)->num_colors++;
1097 1097
1098 /* set flag that palette must be regenerated */ 1098 /* set flag that palette must be regenerated */
1099 FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; 1099 FRAME_DISPLAY_INFO (f)->regen_palette = TRUE;
1100} 1100}
1101 1101
1102void 1102void
1103w32_unmap_color (struct frame *f, COLORREF color) 1103w32_unmap_color (struct frame *f, COLORREF color)
1104{ 1104{
1105 struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; 1105 struct w32_palette_entry * list = FRAME_DISPLAY_INFO (f)->color_list;
1106 struct w32_palette_entry **prev = &FRAME_W32_DISPLAY_INFO (f)->color_list; 1106 struct w32_palette_entry **prev = &FRAME_DISPLAY_INFO (f)->color_list;
1107 1107
1108 if (NILP (Vw32_enable_palette)) 1108 if (NILP (Vw32_enable_palette))
1109 return; 1109 return;
@@ -1117,7 +1117,7 @@ w32_unmap_color (struct frame *f, COLORREF color)
1117 { 1117 {
1118 *prev = list->next; 1118 *prev = list->next;
1119 xfree (list); 1119 xfree (list);
1120 FRAME_W32_DISPLAY_INFO (f)->num_colors--; 1120 FRAME_DISPLAY_INFO (f)->num_colors--;
1121 break; 1121 break;
1122 } 1122 }
1123 else 1123 else
@@ -1128,7 +1128,7 @@ w32_unmap_color (struct frame *f, COLORREF color)
1128 } 1128 }
1129 1129
1130 /* set flag that palette must be regenerated */ 1130 /* set flag that palette must be regenerated */
1131 FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; 1131 FRAME_DISPLAY_INFO (f)->regen_palette = TRUE;
1132} 1132}
1133#endif 1133#endif
1134 1134
@@ -1235,7 +1235,7 @@ x_decode_color (struct frame *f, Lisp_Object arg, int def)
1235 else if (strcmp (SDATA (arg), "white") == 0) 1235 else if (strcmp (SDATA (arg), "white") == 0)
1236 return WHITE_PIX_DEFAULT (f); 1236 return WHITE_PIX_DEFAULT (f);
1237 1237
1238 if ((FRAME_W32_DISPLAY_INFO (f)->n_planes * FRAME_W32_DISPLAY_INFO (f)->n_cbits) == 1) 1238 if ((FRAME_DISPLAY_INFO (f)->n_planes * FRAME_DISPLAY_INFO (f)->n_cbits) == 1)
1239 return def; 1239 return def;
1240 1240
1241 /* w32_defined_color is responsible for coping with failures 1241 /* w32_defined_color is responsible for coping with failures
@@ -1637,7 +1637,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1637 x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f)); 1637 x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f));
1638 do_pending_window_change (0); 1638 do_pending_window_change (0);
1639 } 1639 }
1640 adjust_glyphs (f); 1640 adjust_frame_glyphs (f);
1641} 1641}
1642 1642
1643 1643
@@ -1679,7 +1679,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1679 1679
1680 FRAME_TOOL_BAR_LINES (f) = nlines; 1680 FRAME_TOOL_BAR_LINES (f) = nlines;
1681 resize_frame_windows (f, FRAME_LINES (f), 0); 1681 resize_frame_windows (f, FRAME_LINES (f), 0);
1682 adjust_glyphs (f); 1682 adjust_frame_glyphs (f);
1683 1683
1684 /* We also have to make sure that the internal border at the top of 1684 /* We also have to make sure that the internal border at the top of
1685 the frame, below the menu bar or tool bar, is redrawn when the 1685 the frame, below the menu bar or tool bar, is redrawn when the
@@ -1752,10 +1752,10 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit)
1752 { 1752 {
1753 /* Check for no change needed in this very common case 1753 /* Check for no change needed in this very common case
1754 before we do any consing. */ 1754 before we do any consing. */
1755 if (!strcmp (FRAME_W32_DISPLAY_INFO (f)->w32_id_name, 1755 if (!strcmp (FRAME_DISPLAY_INFO (f)->w32_id_name,
1756 SDATA (f->name))) 1756 SDATA (f->name)))
1757 return; 1757 return;
1758 name = build_string (FRAME_W32_DISPLAY_INFO (f)->w32_id_name); 1758 name = build_string (FRAME_DISPLAY_INFO (f)->w32_id_name);
1759 } 1759 }
1760 else 1760 else
1761 CHECK_STRING (name); 1761 CHECK_STRING (name);
@@ -1890,16 +1890,11 @@ w32_init_class (HINSTANCE hinst)
1890static HWND 1890static HWND
1891w32_createscrollbar (struct frame *f, struct scroll_bar * bar) 1891w32_createscrollbar (struct frame *f, struct scroll_bar * bar)
1892{ 1892{
1893 return (CreateWindow ("SCROLLBAR", "", SBS_VERT | WS_CHILD | WS_VISIBLE, 1893 return CreateWindow ("SCROLLBAR", "", SBS_VERT | WS_CHILD | WS_VISIBLE,
1894 /* Position and size of scroll bar. */ 1894 /* Position and size of scroll bar. */
1895 XINT (bar->left) + VERTICAL_SCROLL_BAR_WIDTH_TRIM, 1895 XINT (bar->left), XINT (bar->top),
1896 XINT (bar->top), 1896 XINT (bar->width), XINT (bar->height),
1897 XINT (bar->width) - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, 1897 FRAME_W32_WINDOW (f), NULL, hinst, NULL);
1898 XINT (bar->height),
1899 FRAME_W32_WINDOW (f),
1900 NULL,
1901 hinst,
1902 NULL));
1903} 1898}
1904 1899
1905static void 1900static void
@@ -4232,7 +4227,7 @@ unwind_create_frame (Lisp_Object frame)
4232 if (NILP (Fmemq (frame, Vframe_list))) 4227 if (NILP (Fmemq (frame, Vframe_list)))
4233 { 4228 {
4234#ifdef GLYPH_DEBUG 4229#ifdef GLYPH_DEBUG
4235 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 4230 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
4236#endif 4231#endif
4237 4232
4238 x_free_frame_resources (f); 4233 x_free_frame_resources (f);
@@ -4258,7 +4253,7 @@ do_unwind_create_frame (Lisp_Object frame)
4258static void 4253static void
4259x_default_font_parameter (struct frame *f, Lisp_Object parms) 4254x_default_font_parameter (struct frame *f, Lisp_Object parms)
4260{ 4255{
4261 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 4256 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
4262 Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL, 4257 Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
4263 RES_TYPE_STRING); 4258 RES_TYPE_STRING);
4264 Lisp_Object font; 4259 Lisp_Object font;
@@ -4392,9 +4387,9 @@ This function is an internal primitive--use `make-frame' instead. */)
4392 if (! STRINGP (f->icon_name)) 4387 if (! STRINGP (f->icon_name))
4393 fset_icon_name (f, Qnil); 4388 fset_icon_name (f, Qnil);
4394 4389
4395/* FRAME_W32_DISPLAY_INFO (f) = dpyinfo; */ 4390/* FRAME_DISPLAY_INFO (f) = dpyinfo; */
4396 4391
4397 /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe. */ 4392 /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */
4398 record_unwind_protect (do_unwind_create_frame, frame); 4393 record_unwind_protect (do_unwind_create_frame, frame);
4399#ifdef GLYPH_DEBUG 4394#ifdef GLYPH_DEBUG
4400 image_cache_refcount = 4395 image_cache_refcount =
@@ -4411,7 +4406,7 @@ This function is an internal primitive--use `make-frame' instead. */)
4411 } 4406 }
4412 else 4407 else
4413 { 4408 {
4414 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; 4409 f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
4415 f->output_data.w32->explicit_parent = 0; 4410 f->output_data.w32->explicit_parent = 0;
4416 } 4411 }
4417 4412
@@ -4506,7 +4501,7 @@ This function is an internal primitive--use `make-frame' instead. */)
4506 "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); 4501 "fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
4507 4502
4508 f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW; 4503 f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW;
4509 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; 4504 f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
4510 4505
4511 f->output_data.w32->text_cursor = w32_load_cursor (IDC_IBEAM); 4506 f->output_data.w32->text_cursor = w32_load_cursor (IDC_IBEAM);
4512 f->output_data.w32->nontext_cursor = w32_load_cursor (IDC_ARROW); 4507 f->output_data.w32->nontext_cursor = w32_load_cursor (IDC_ARROW);
@@ -4529,7 +4524,7 @@ This function is an internal primitive--use `make-frame' instead. */)
4529 4524
4530 /* Now consider the frame official. */ 4525 /* Now consider the frame official. */
4531 f->terminal->reference_count++; 4526 f->terminal->reference_count++;
4532 FRAME_W32_DISPLAY_INFO (f)->reference_count++; 4527 FRAME_DISPLAY_INFO (f)->reference_count++;
4533 Vframe_list = Fcons (frame, Vframe_list); 4528 Vframe_list = Fcons (frame, Vframe_list);
4534 4529
4535 /* We need to do this after creating the window, so that the 4530 /* We need to do this after creating the window, so that the
@@ -4613,7 +4608,7 @@ This function is an internal primitive--use `make-frame' instead. */)
4613Lisp_Object 4608Lisp_Object
4614x_get_focus_frame (struct frame *frame) 4609x_get_focus_frame (struct frame *frame)
4615{ 4610{
4616 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (frame); 4611 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
4617 Lisp_Object xfocus; 4612 Lisp_Object xfocus;
4618 if (! dpyinfo->w32_focus_frame) 4613 if (! dpyinfo->w32_focus_frame)
4619 return Qnil; 4614 return Qnil;
@@ -4622,15 +4617,6 @@ x_get_focus_frame (struct frame *frame)
4622 return xfocus; 4617 return xfocus;
4623} 4618}
4624 4619
4625DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
4626 doc: /* Give FRAME input focus, raising to foreground if necessary. */)
4627 (Lisp_Object frame)
4628{
4629 x_focus_on_frame (decode_window_system_frame (frame));
4630 return Qnil;
4631}
4632
4633
4634DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, 4620DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
4635 doc: /* Internal function called by `color-defined-p', which see. 4621 doc: /* Internal function called by `color-defined-p', which see.
4636\(Note that the Nextstep version of this function ignores FRAME.) */) 4622\(Note that the Nextstep version of this function ignores FRAME.) */)
@@ -5131,7 +5117,7 @@ SOUND is nil to use the normal beep. */)
5131int 5117int
5132x_screen_planes (register struct frame *f) 5118x_screen_planes (register struct frame *f)
5133{ 5119{
5134 return FRAME_W32_DISPLAY_INFO (f)->n_planes; 5120 return FRAME_DISPLAY_INFO (f)->n_planes;
5135} 5121}
5136 5122
5137/* Return the display structure for the display named NAME. 5123/* Return the display structure for the display named NAME.
@@ -5201,11 +5187,6 @@ terminate Emacs if we can't open the connection.
5201 if (! NILP (xrm_string)) 5187 if (! NILP (xrm_string))
5202 CHECK_STRING (xrm_string); 5188 CHECK_STRING (xrm_string);
5203 5189
5204#if 0
5205 if (! EQ (Vwindow_system, intern ("w32")))
5206 error ("Not using Microsoft Windows");
5207#endif
5208
5209 /* Allow color mapping to be defined externally; first look in user's 5190 /* Allow color mapping to be defined externally; first look in user's
5210 HOME directory, then in Emacs etc dir for a file called rgb.txt. */ 5191 HOME directory, then in Emacs etc dir for a file called rgb.txt. */
5211 { 5192 {
@@ -5668,7 +5649,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
5668 dpyinfo_refcount = dpyinfo->reference_count; 5649 dpyinfo_refcount = dpyinfo->reference_count;
5669#endif /* GLYPH_DEBUG */ 5650#endif /* GLYPH_DEBUG */
5670 FRAME_KBOARD (f) = kb; 5651 FRAME_KBOARD (f) = kb;
5671 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; 5652 f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
5672 f->output_data.w32->explicit_parent = 0; 5653 f->output_data.w32->explicit_parent = 0;
5673 5654
5674 /* Set the name; the functions to which we pass f expect the name to 5655 /* Set the name; the functions to which we pass f expect the name to
@@ -5737,7 +5718,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
5737 init_frame_faces (f); 5718 init_frame_faces (f);
5738 5719
5739 f->output_data.w32->dwStyle = WS_BORDER | WS_POPUP | WS_DISABLED; 5720 f->output_data.w32->dwStyle = WS_BORDER | WS_POPUP | WS_DISABLED;
5740 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; 5721 f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
5741 5722
5742 window_prompting = x_figure_window_size (f, parms, 0); 5723 window_prompting = x_figure_window_size (f, parms, 0);
5743 5724
@@ -5804,7 +5785,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
5804 5785
5805 /* Now that the frame is official, it counts as a reference to 5786 /* Now that the frame is official, it counts as a reference to
5806 its display. */ 5787 its display. */
5807 FRAME_W32_DISPLAY_INFO (f)->reference_count++; 5788 FRAME_DISPLAY_INFO (f)->reference_count++;
5808 f->terminal->reference_count++; 5789 f->terminal->reference_count++;
5809 5790
5810 /* It is now ok to make the frame official even if we get an error 5791 /* It is now ok to make the frame official even if we get an error
@@ -5851,8 +5832,8 @@ compute_tip_xy (struct frame *f,
5851 /* Default min and max values. */ 5832 /* Default min and max values. */
5852 min_x = 0; 5833 min_x = 0;
5853 min_y = 0; 5834 min_y = 0;
5854 max_x = x_display_pixel_width (FRAME_W32_DISPLAY_INFO (f)); 5835 max_x = x_display_pixel_width (FRAME_DISPLAY_INFO (f));
5855 max_y = x_display_pixel_height (FRAME_W32_DISPLAY_INFO (f)); 5836 max_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f));
5856 5837
5857 block_input (); 5838 block_input ();
5858 GetCursorPos (&pt); 5839 GetCursorPos (&pt);
@@ -6038,7 +6019,7 @@ Text larger than the specified size is clipped. */)
6038 6019
6039 /* Create a frame for the tooltip, and record it in the global 6020 /* Create a frame for the tooltip, and record it in the global
6040 variable tip_frame. */ 6021 variable tip_frame. */
6041 frame = x_create_tip_frame (FRAME_W32_DISPLAY_INFO (f), parms, string); 6022 frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
6042 f = XFRAME (frame); 6023 f = XFRAME (frame);
6043 6024
6044 /* Set up the frame's root window. */ 6025 /* Set up the frame's root window. */
@@ -6062,7 +6043,7 @@ Text larger than the specified size is clipped. */)
6062 } 6043 }
6063 6044
6064 FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w); 6045 FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w);
6065 adjust_glyphs (f); 6046 adjust_frame_glyphs (f);
6066 w->pseudo_window_p = 1; 6047 w->pseudo_window_p = 1;
6067 6048
6068 /* Display the tooltip text in a temporary buffer. */ 6049 /* Display the tooltip text in a temporary buffer. */
@@ -6131,7 +6112,7 @@ Text larger than the specified size is clipped. */)
6131 width /= WINDOW_FRAME_COLUMN_WIDTH (w); 6112 width /= WINDOW_FRAME_COLUMN_WIDTH (w);
6132 w->total_cols = width; 6113 w->total_cols = width;
6133 FRAME_TOTAL_COLS (f) = width; 6114 FRAME_TOTAL_COLS (f) = width;
6134 adjust_glyphs (f); 6115 adjust_frame_glyphs (f);
6135 w->pseudo_window_p = 1; 6116 w->pseudo_window_p = 1;
6136 clear_glyph_matrix (w->desired_matrix); 6117 clear_glyph_matrix (w->desired_matrix);
6137 clear_glyph_matrix (w->current_matrix); 6118 clear_glyph_matrix (w->current_matrix);
@@ -7865,7 +7846,6 @@ only be necessary if the default setting causes problems. */);
7865 defsubr (&Sx_close_connection); 7846 defsubr (&Sx_close_connection);
7866 defsubr (&Sx_display_list); 7847 defsubr (&Sx_display_list);
7867 defsubr (&Sx_synchronize); 7848 defsubr (&Sx_synchronize);
7868 defsubr (&Sx_focus_frame);
7869 7849
7870 /* W32 specific functions */ 7850 /* W32 specific functions */
7871 7851
diff --git a/src/w32font.c b/src/w32font.c
index 4a97fd90a4e..845df68f09d 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -299,7 +299,7 @@ intern_font_name (char * string)
299Lisp_Object 299Lisp_Object
300w32font_get_cache (struct frame *f) 300w32font_get_cache (struct frame *f)
301{ 301{
302 struct w32_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 302 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
303 303
304 return (dpyinfo->name_list_element); 304 return (dpyinfo->name_list_element);
305} 305}
diff --git a/src/w32menu.c b/src/w32menu.c
index f804e830ac0..ad2eb96495a 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -231,7 +231,7 @@ otherwise it is "Question". */)
231 unblock_input (); 231 unblock_input ();
232 232
233 discard_menu_items (); 233 discard_menu_items ();
234 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 234 FRAME_DISPLAY_INFO (f)->grabbed = 0;
235 235
236 if (error_name) error (error_name); 236 if (error_name) error (error_name);
237 return selection; 237 return selection;
@@ -421,7 +421,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
421 421
422 /* Save the frame's previous menu bar contents data. */ 422 /* Save the frame's previous menu bar contents data. */
423 if (previous_menu_items_used) 423 if (previous_menu_items_used)
424 memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents, 424 memcpy (previous_items, XVECTOR (f->menu_bar_vector)->u.contents,
425 previous_menu_items_used * word_size); 425 previous_menu_items_used * word_size);
426 426
427 /* Fill in menu_items with the current menu bar contents. 427 /* Fill in menu_items with the current menu bar contents.
@@ -885,7 +885,7 @@ w32_menu_show (struct frame *f, int x, int y, int for_click, int keymaps,
885 /* Clean up extraneous mouse events which might have been generated 885 /* Clean up extraneous mouse events which might have been generated
886 during the call. */ 886 during the call. */
887 discard_mouse_events (); 887 discard_mouse_events ();
888 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 888 FRAME_DISPLAY_INFO (f)->grabbed = 0;
889 889
890 /* Free the widget_value objects we used to specify the contents. */ 890 /* Free the widget_value objects we used to specify the contents. */
891 free_menubar_widget_value_tree (first_wv); 891 free_menubar_widget_value_tree (first_wv);
@@ -1130,7 +1130,7 @@ w32_dialog_show (struct frame *f, int keymaps,
1130 lw_pop_up_all_widgets (dialog_id); 1130 lw_pop_up_all_widgets (dialog_id);
1131 1131
1132 /* Process events that apply to the menu. */ 1132 /* Process events that apply to the menu. */
1133 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id); 1133 popup_get_selection ((XEvent *) 0, FRAME_DISPLAY_INFO (f), dialog_id);
1134 1134
1135 lw_destroy_all_widgets (dialog_id); 1135 lw_destroy_all_widgets (dialog_id);
1136 1136
diff --git a/src/w32proc.c b/src/w32proc.c
index dabaa62f71c..221b42fb7b2 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -1144,7 +1144,7 @@ create_child (char *exe, char *cmdline, char *env, int is_gui_app,
1144 return FALSE; 1144 return FALSE;
1145} 1145}
1146 1146
1147/* create_child doesn't know what emacs' file handle will be for waiting 1147/* create_child doesn't know what emacs's file handle will be for waiting
1148 on output from the child, so we need to make this additional call 1148 on output from the child, so we need to make this additional call
1149 to register the handle with the process 1149 to register the handle with the process
1150 This way the select emulator knows how to match file handles with 1150 This way the select emulator knows how to match file handles with
diff --git a/src/w32reg.c b/src/w32reg.c
index e7c4e9ea351..c41675019dd 100644
--- a/src/w32reg.c
+++ b/src/w32reg.c
@@ -56,7 +56,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
56*/ 56*/
57 57
58static char * 58static char *
59w32_get_rdb_resource (char *rdb, char *resource) 59w32_get_rdb_resource (char *rdb, const char *resource)
60{ 60{
61 char *value = rdb; 61 char *value = rdb;
62 int len = strlen (resource); 62 int len = strlen (resource);
@@ -74,7 +74,7 @@ w32_get_rdb_resource (char *rdb, char *resource)
74} 74}
75 75
76static LPBYTE 76static LPBYTE
77w32_get_string_resource (char *name, char *class, DWORD dwexptype) 77w32_get_string_resource (const char *name, const char *class, DWORD dwexptype)
78{ 78{
79 LPBYTE lpvalue = NULL; 79 LPBYTE lpvalue = NULL;
80 HKEY hrootkey = NULL; 80 HKEY hrootkey = NULL;
@@ -92,7 +92,7 @@ w32_get_string_resource (char *name, char *class, DWORD dwexptype)
92 92
93 if (RegOpenKeyEx (hive, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) 93 if (RegOpenKeyEx (hive, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS)
94 { 94 {
95 char *keyname; 95 const char *keyname;
96 96
97 if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS 97 if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS
98 && dwType == dwexptype) 98 && dwType == dwexptype)
@@ -141,7 +141,7 @@ w32_get_string_resource (char *name, char *class, DWORD dwexptype)
141 database RDB. */ 141 database RDB. */
142 142
143char * 143char *
144x_get_string_resource (XrmDatabase rdb, char *name, char *class) 144x_get_string_resource (XrmDatabase rdb, const char *name, const char *class)
145{ 145{
146 if (rdb) 146 if (rdb)
147 { 147 {
diff --git a/src/w32term.c b/src/w32term.c
index 532ded7cdad..be8ebfe6ab6 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -149,9 +149,6 @@ BOOL (WINAPI *pfnSetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD);
149#define SM_CYVIRTUALSCREEN 79 149#define SM_CYVIRTUALSCREEN 79
150#endif 150#endif
151 151
152/* This is a frame waiting to be autoraised, within w32_read_socket. */
153struct frame *pending_autoraise_frame;
154
155/* The handle of the frame that currently owns the system caret. */ 152/* The handle of the frame that currently owns the system caret. */
156HWND w32_system_caret_hwnd; 153HWND w32_system_caret_hwnd;
157int w32_system_caret_height; 154int w32_system_caret_height;
@@ -174,31 +171,6 @@ int last_scroll_bar_drag_pos;
174/* Keyboard code page - may be changed by language-change events. */ 171/* Keyboard code page - may be changed by language-change events. */
175int w32_keyboard_codepage; 172int w32_keyboard_codepage;
176 173
177/* Mouse movement. */
178
179/* Where the mouse was last time we reported a mouse event. */
180static RECT last_mouse_glyph;
181static struct frame *last_mouse_glyph_frame;
182
183/* The scroll bar in which the last motion event occurred.
184
185 If the last motion event occurred in a scroll bar, we set this
186 so w32_mouse_position can know whether to report a scroll bar motion or
187 an ordinary motion.
188
189 If the last motion event didn't occur in a scroll bar, we set this
190 to Qnil, to tell w32_mouse_position to return an ordinary motion event. */
191static Lisp_Object last_mouse_scroll_bar;
192static int last_mouse_scroll_bar_pos;
193
194/* This is a hack. We would really prefer that w32_mouse_position would
195 return the time associated with the position it returns, but there
196 doesn't seem to be any way to wrest the time-stamp from the server
197 along with the position query. So, we just keep track of the time
198 of the last movement we received, and return that in hopes that
199 it's somewhat accurate. */
200static Time last_mouse_movement_time;
201
202/* Incremented by w32_read_socket whenever it really tries to read 174/* Incremented by w32_read_socket whenever it really tries to read
203 events. */ 175 events. */
204static int volatile input_signal_count; 176static int volatile input_signal_count;
@@ -477,7 +449,7 @@ w32_clear_window (struct frame *f)
477void 449void
478x_set_frame_alpha (struct frame *f) 450x_set_frame_alpha (struct frame *f)
479{ 451{
480 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 452 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
481 double alpha = 1.0; 453 double alpha = 1.0;
482 double alpha_min = 1.0; 454 double alpha_min = 1.0;
483 BYTE opac; 455 BYTE opac;
@@ -557,7 +529,7 @@ x_display_pixel_width (struct w32_display_info *dpyinfo)
557static void 529static void
558x_update_begin (struct frame *f) 530x_update_begin (struct frame *f)
559{ 531{
560 struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); 532 struct w32_display_info *display_info = FRAME_DISPLAY_INFO (f);
561 533
562 if (! FRAME_W32_P (f)) 534 if (! FRAME_W32_P (f))
563 return; 535 return;
@@ -1003,14 +975,14 @@ x_set_cursor_gc (struct glyph_string *s)
1003 xgcv.font = s->font; 975 xgcv.font = s->font;
1004 mask = GCForeground | GCBackground | GCFont; 976 mask = GCForeground | GCBackground | GCFont;
1005 977
1006 if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) 978 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
1007 XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, 979 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
1008 mask, &xgcv); 980 mask, &xgcv);
1009 else 981 else
1010 FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc 982 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
1011 = XCreateGC (NULL, s->window, mask, &xgcv); 983 = XCreateGC (NULL, s->window, mask, &xgcv);
1012 984
1013 s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; 985 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
1014 } 986 }
1015} 987}
1016 988
@@ -1052,14 +1024,14 @@ x_set_mouse_face_gc (struct glyph_string *s)
1052 xgcv.font = s->font; 1024 xgcv.font = s->font;
1053 mask = GCForeground | GCBackground | GCFont; 1025 mask = GCForeground | GCBackground | GCFont;
1054 1026
1055 if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) 1027 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
1056 XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, 1028 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
1057 mask, &xgcv); 1029 mask, &xgcv);
1058 else 1030 else
1059 FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc 1031 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
1060 = XCreateGC (NULL, s->window, mask, &xgcv); 1032 = XCreateGC (NULL, s->window, mask, &xgcv);
1061 1033
1062 s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; 1034 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
1063 } 1035 }
1064 1036
1065 eassert (s->gc != 0); 1037 eassert (s->gc != 0);
@@ -1623,7 +1595,7 @@ w32_setup_relief_color (struct frame *f, struct relief *relief, double factor,
1623 unsigned long mask = GCForeground; 1595 unsigned long mask = GCForeground;
1624 COLORREF pixel; 1596 COLORREF pixel;
1625 COLORREF background = di->relief_background; 1597 COLORREF background = di->relief_background;
1626 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 1598 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1627 1599
1628 /* TODO: Free colors (if using palette)? */ 1600 /* TODO: Free colors (if using palette)? */
1629 1601
@@ -2823,9 +2795,9 @@ x_new_focus_frame (struct w32_display_info *dpyinfo, struct frame *frame)
2823 x_lower_frame (old_focus); 2795 x_lower_frame (old_focus);
2824 2796
2825 if (dpyinfo->w32_focus_frame && dpyinfo->w32_focus_frame->auto_raise) 2797 if (dpyinfo->w32_focus_frame && dpyinfo->w32_focus_frame->auto_raise)
2826 pending_autoraise_frame = dpyinfo->w32_focus_frame; 2798 dpyinfo->w32_pending_autoraise_frame = dpyinfo->w32_focus_frame;
2827 else 2799 else
2828 pending_autoraise_frame = 0; 2800 dpyinfo->w32_pending_autoraise_frame = NULL;
2829 } 2801 }
2830 2802
2831 x_frame_rehighlight (dpyinfo); 2803 x_frame_rehighlight (dpyinfo);
@@ -2930,7 +2902,7 @@ w32_frame_rehighlight (struct frame *frame)
2930{ 2902{
2931 if (! FRAME_W32_P (frame)) 2903 if (! FRAME_W32_P (frame))
2932 return; 2904 return;
2933 x_frame_rehighlight (FRAME_W32_DISPLAY_INFO (frame)); 2905 x_frame_rehighlight (FRAME_DISPLAY_INFO (frame));
2934} 2906}
2935 2907
2936static void 2908static void
@@ -3307,47 +3279,47 @@ queue_notifications (struct input_event *event, W32Msg *msg, struct frame *f,
3307 the mainstream emacs code by setting mouse_moved. If not, ask for 3279 the mainstream emacs code by setting mouse_moved. If not, ask for
3308 another motion event, so we can check again the next time it moves. */ 3280 another motion event, so we can check again the next time it moves. */
3309 3281
3310static MSG last_mouse_motion_event;
3311static Lisp_Object last_mouse_motion_frame;
3312
3313static int 3282static int
3314note_mouse_movement (struct frame *frame, MSG *msg) 3283note_mouse_movement (struct frame *frame, MSG *msg)
3315{ 3284{
3285 struct w32_display_info *dpyinfo;
3316 int mouse_x = LOWORD (msg->lParam); 3286 int mouse_x = LOWORD (msg->lParam);
3317 int mouse_y = HIWORD (msg->lParam); 3287 int mouse_y = HIWORD (msg->lParam);
3318 3288 RECT *r;
3319 last_mouse_movement_time = msg->time;
3320 memcpy (&last_mouse_motion_event, msg, sizeof (last_mouse_motion_event));
3321 XSETFRAME (last_mouse_motion_frame, frame);
3322 3289
3323 if (!FRAME_X_OUTPUT (frame)) 3290 if (!FRAME_X_OUTPUT (frame))
3324 return 0; 3291 return 0;
3325 3292
3293 dpyinfo = FRAME_DISPLAY_INFO (frame);
3294 dpyinfo->last_mouse_movement_time = msg->time;
3295 dpyinfo->last_mouse_motion_frame = frame;
3296 dpyinfo->last_mouse_motion_x = mouse_x;
3297 dpyinfo->last_mouse_motion_y = mouse_y;
3298
3326 if (msg->hwnd != FRAME_W32_WINDOW (frame)) 3299 if (msg->hwnd != FRAME_W32_WINDOW (frame))
3327 { 3300 {
3328 frame->mouse_moved = 1; 3301 frame->mouse_moved = 1;
3329 last_mouse_scroll_bar = Qnil; 3302 dpyinfo->last_mouse_scroll_bar = NULL;
3330 note_mouse_highlight (frame, -1, -1); 3303 note_mouse_highlight (frame, -1, -1);
3331 last_mouse_glyph_frame = 0; 3304 dpyinfo->last_mouse_glyph_frame = NULL;
3332 return 1; 3305 return 1;
3333 } 3306 }
3334 3307
3335 /* Has the mouse moved off the glyph it was on at the last sighting? */ 3308 /* Has the mouse moved off the glyph it was on at the last sighting? */
3336 if (frame != last_mouse_glyph_frame 3309 r = &dpyinfo->last_mouse_glyph;
3337 || mouse_x < last_mouse_glyph.left 3310 if (frame != dpyinfo->last_mouse_glyph_frame
3338 || mouse_x >= last_mouse_glyph.right 3311 || mouse_x < r->left || mouse_x >= r->right
3339 || mouse_y < last_mouse_glyph.top 3312 || mouse_y < r->top || mouse_y >= r->bottom)
3340 || mouse_y >= last_mouse_glyph.bottom)
3341 { 3313 {
3342 frame->mouse_moved = 1; 3314 frame->mouse_moved = 1;
3343 last_mouse_scroll_bar = Qnil; 3315 dpyinfo->last_mouse_scroll_bar = NULL;
3344 note_mouse_highlight (frame, mouse_x, mouse_y); 3316 note_mouse_highlight (frame, mouse_x, mouse_y);
3345 /* Remember the mouse position here, as w32_mouse_position only 3317 /* Remember the mouse position here, as w32_mouse_position only
3346 gets called when mouse tracking is enabled but we also need 3318 gets called when mouse tracking is enabled but we also need
3347 to keep track of the mouse for help_echo and highlighting at 3319 to keep track of the mouse for help_echo and highlighting at
3348 other times. */ 3320 other times. */
3349 remember_mouse_glyph (frame, mouse_x, mouse_y, &last_mouse_glyph); 3321 remember_mouse_glyph (frame, mouse_x, mouse_y, r);
3350 last_mouse_glyph_frame = frame; 3322 dpyinfo->last_mouse_glyph_frame = frame;
3351 return 1; 3323 return 1;
3352 } 3324 }
3353 3325
@@ -3367,16 +3339,6 @@ static void x_scroll_bar_report_motion (struct frame **, Lisp_Object *,
3367static void x_check_fullscreen (struct frame *); 3339static void x_check_fullscreen (struct frame *);
3368 3340
3369static void 3341static void
3370redo_mouse_highlight (void)
3371{
3372 if (!NILP (last_mouse_motion_frame)
3373 && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame)))
3374 note_mouse_highlight (XFRAME (last_mouse_motion_frame),
3375 LOWORD (last_mouse_motion_event.lParam),
3376 HIWORD (last_mouse_motion_event.lParam));
3377}
3378
3379static void
3380w32_define_cursor (Window window, Cursor cursor) 3342w32_define_cursor (Window window, Cursor cursor)
3381{ 3343{
3382 PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0); 3344 PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0);
@@ -3407,10 +3369,11 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3407 unsigned long *time) 3369 unsigned long *time)
3408{ 3370{
3409 struct frame *f1; 3371 struct frame *f1;
3372 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
3410 3373
3411 block_input (); 3374 block_input ();
3412 3375
3413 if (! NILP (last_mouse_scroll_bar) && insist == 0) 3376 if (dpyinfo->last_mouse_scroll_bar && insist == 0)
3414 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); 3377 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time);
3415 else 3378 else
3416 { 3379 {
@@ -3422,26 +3385,18 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3422 FOR_EACH_FRAME (tail, frame) 3385 FOR_EACH_FRAME (tail, frame)
3423 XFRAME (frame)->mouse_moved = 0; 3386 XFRAME (frame)->mouse_moved = 0;
3424 3387
3425 last_mouse_scroll_bar = Qnil; 3388 dpyinfo->last_mouse_scroll_bar = NULL;
3426 3389
3427 GetCursorPos (&pt); 3390 GetCursorPos (&pt);
3428 3391
3429 /* Now we have a position on the root; find the innermost window 3392 /* Now we have a position on the root; find the innermost window
3430 containing the pointer. */ 3393 containing the pointer. */
3431 { 3394 {
3432 if (FRAME_W32_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame 3395 /* If mouse was grabbed on a frame, give coords for that
3433 && FRAME_LIVE_P (last_mouse_frame)) 3396 frame even if the mouse is now outside it. Otherwise
3434 { 3397 check for window under mouse on one of our frames. */
3435 /* If mouse was grabbed on a frame, give coords for that frame 3398 f1 = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
3436 even if the mouse is now outside it. */ 3399 : x_any_window_to_frame (dpyinfo, WindowFromPoint (pt)));
3437 f1 = last_mouse_frame;
3438 }
3439 else
3440 {
3441 /* Is window under mouse one of our frames? */
3442 f1 = x_any_window_to_frame (FRAME_W32_DISPLAY_INFO (*fp),
3443 WindowFromPoint (pt));
3444 }
3445 3400
3446 /* If not, is it one of our scroll bars? */ 3401 /* If not, is it one of our scroll bars? */
3447 if (! f1) 3402 if (! f1)
@@ -3468,16 +3423,17 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3468 on it, i.e. into the same rectangles that matrices on 3423 on it, i.e. into the same rectangles that matrices on
3469 the frame are divided into. */ 3424 the frame are divided into. */
3470 3425
3426 dpyinfo = FRAME_DISPLAY_INFO (f1);
3471 ScreenToClient (FRAME_W32_WINDOW (f1), &pt); 3427 ScreenToClient (FRAME_W32_WINDOW (f1), &pt);
3472 remember_mouse_glyph (f1, pt.x, pt.y, &last_mouse_glyph); 3428 remember_mouse_glyph (f1, pt.x, pt.y, &dpyinfo->last_mouse_glyph);
3473 last_mouse_glyph_frame = f1; 3429 dpyinfo->last_mouse_glyph_frame = f1;
3474 3430
3475 *bar_window = Qnil; 3431 *bar_window = Qnil;
3476 *part = 0; 3432 *part = 0;
3477 *fp = f1; 3433 *fp = f1;
3478 XSETINT (*x, pt.x); 3434 XSETINT (*x, pt.x);
3479 XSETINT (*y, pt.y); 3435 XSETINT (*y, pt.y);
3480 *time = last_mouse_movement_time; 3436 *time = dpyinfo->last_mouse_movement_time;
3481 } 3437 }
3482 } 3438 }
3483 } 3439 }
@@ -3866,8 +3822,7 @@ w32_set_vertical_scroll_bar (struct window *w,
3866 /* Make sure scroll bar is "visible" before moving, to ensure the 3822 /* Make sure scroll bar is "visible" before moving, to ensure the
3867 area of the parent window now exposed will be refreshed. */ 3823 area of the parent window now exposed will be refreshed. */
3868 my_show_window (f, hwnd, SW_HIDE); 3824 my_show_window (f, hwnd, SW_HIDE);
3869 MoveWindow (hwnd, sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, 3825 MoveWindow (hwnd, sb_left, top, sb_width,
3870 top, sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
3871 max (height, 1), TRUE); 3826 max (height, 1), TRUE);
3872 3827
3873 si.cbSize = sizeof (si); 3828 si.cbSize = sizeof (si);
@@ -4037,9 +3992,7 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
4037 y = si.nPos; 3992 y = si.nPos;
4038 3993
4039 bar->dragging = Qnil; 3994 bar->dragging = Qnil;
4040 3995 FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam;
4041
4042 last_mouse_scroll_bar_pos = msg->msg.wParam;
4043 3996
4044 switch (LOWORD (msg->msg.wParam)) 3997 switch (LOWORD (msg->msg.wParam))
4045 { 3998 {
@@ -4122,7 +4075,8 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
4122 Lisp_Object *x, Lisp_Object *y, 4075 Lisp_Object *x, Lisp_Object *y,
4123 unsigned long *time) 4076 unsigned long *time)
4124{ 4077{
4125 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); 4078 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
4079 struct scroll_bar *bar = dpyinfo->last_mouse_scroll_bar;
4126 Window w = SCROLL_BAR_W32_WINDOW (bar); 4080 Window w = SCROLL_BAR_W32_WINDOW (bar);
4127 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); 4081 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
4128 int pos; 4082 int pos;
@@ -4141,13 +4095,13 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
4141 pos = si.nPos; 4095 pos = si.nPos;
4142 top_range = si.nMax - si.nPage + 1; 4096 top_range = si.nMax - si.nPage + 1;
4143 4097
4144 switch (LOWORD (last_mouse_scroll_bar_pos)) 4098 switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos))
4145 { 4099 {
4146 case SB_THUMBPOSITION: 4100 case SB_THUMBPOSITION:
4147 case SB_THUMBTRACK: 4101 case SB_THUMBTRACK:
4148 *part = scroll_bar_handle; 4102 *part = scroll_bar_handle;
4149 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)) <= 0xffff) 4103 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)) <= 0xffff)
4150 pos = HIWORD (last_mouse_scroll_bar_pos); 4104 pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos);
4151 break; 4105 break;
4152 case SB_LINEDOWN: 4106 case SB_LINEDOWN:
4153 *part = scroll_bar_handle; 4107 *part = scroll_bar_handle;
@@ -4162,9 +4116,9 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
4162 XSETINT (*y, top_range); 4116 XSETINT (*y, top_range);
4163 4117
4164 f->mouse_moved = 0; 4118 f->mouse_moved = 0;
4165 last_mouse_scroll_bar = Qnil; 4119 dpyinfo->last_mouse_scroll_bar = NULL;
4166 4120
4167 *time = last_mouse_movement_time; 4121 *time = dpyinfo->last_mouse_movement_time;
4168 4122
4169 unblock_input (); 4123 unblock_input ();
4170} 4124}
@@ -4483,11 +4437,8 @@ w32_read_socket (struct terminal *terminal,
4483 previous_help_echo_string = help_echo_string; 4437 previous_help_echo_string = help_echo_string;
4484 help_echo_string = Qnil; 4438 help_echo_string = Qnil;
4485 4439
4486 if (dpyinfo->grabbed && last_mouse_frame 4440 f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
4487 && FRAME_LIVE_P (last_mouse_frame)) 4441 : x_window_to_frame (dpyinfo, msg.msg.hwnd));
4488 f = last_mouse_frame;
4489 else
4490 f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
4491 4442
4492 if (hlinfo->mouse_face_hidden) 4443 if (hlinfo->mouse_face_hidden)
4493 { 4444 {
@@ -4563,11 +4514,8 @@ w32_read_socket (struct terminal *terminal,
4563 int button; 4514 int button;
4564 int up; 4515 int up;
4565 4516
4566 if (dpyinfo->grabbed && last_mouse_frame 4517 f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
4567 && FRAME_LIVE_P (last_mouse_frame)) 4518 : x_window_to_frame (dpyinfo, msg.msg.hwnd));
4568 f = last_mouse_frame;
4569 else
4570 f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
4571 4519
4572 if (f) 4520 if (f)
4573 { 4521 {
@@ -4606,7 +4554,7 @@ w32_read_socket (struct terminal *terminal,
4606 else 4554 else
4607 { 4555 {
4608 dpyinfo->grabbed |= (1 << button); 4556 dpyinfo->grabbed |= (1 << button);
4609 last_mouse_frame = f; 4557 dpyinfo->last_mouse_frame = f;
4610 /* Ignore any mouse motion that happened 4558 /* Ignore any mouse motion that happened
4611 before this event; any subsequent mouse-movement 4559 before this event; any subsequent mouse-movement
4612 Emacs events should reflect only motion after 4560 Emacs events should reflect only motion after
@@ -4623,11 +4571,8 @@ w32_read_socket (struct terminal *terminal,
4623 case WM_MOUSEWHEEL: 4571 case WM_MOUSEWHEEL:
4624 case WM_MOUSEHWHEEL: 4572 case WM_MOUSEHWHEEL:
4625 { 4573 {
4626 if (dpyinfo->grabbed && last_mouse_frame 4574 f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
4627 && FRAME_LIVE_P (last_mouse_frame)) 4575 : x_window_to_frame (dpyinfo, msg.msg.hwnd));
4628 f = last_mouse_frame;
4629 else
4630 f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
4631 4576
4632 if (f) 4577 if (f)
4633 { 4578 {
@@ -4644,7 +4589,7 @@ w32_read_socket (struct terminal *terminal,
4644 ButtonPress. */ 4589 ButtonPress. */
4645 f->mouse_moved = 0; 4590 f->mouse_moved = 0;
4646 } 4591 }
4647 last_mouse_frame = f; 4592 dpyinfo->last_mouse_frame = f;
4648 last_tool_bar_item = -1; 4593 last_tool_bar_item = -1;
4649 } 4594 }
4650 break; 4595 break;
@@ -4691,13 +4636,7 @@ w32_read_socket (struct terminal *terminal,
4691 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); 4636 f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
4692 4637
4693 if (f && !FRAME_ICONIFIED_P (f)) 4638 if (f && !FRAME_ICONIFIED_P (f))
4694 { 4639 x_real_positions (f, &f->left_pos, &f->top_pos);
4695 int x, y;
4696
4697 x_real_positions (f, &x, &y);
4698 f->left_pos = x;
4699 f->top_pos = y;
4700 }
4701 4640
4702 check_visibility = 1; 4641 check_visibility = 1;
4703 break; 4642 break;
@@ -4709,7 +4648,7 @@ w32_read_socket (struct terminal *terminal,
4709 if (!msg.msg.wParam && msg.msg.hwnd == tip_window) 4648 if (!msg.msg.wParam && msg.msg.hwnd == tip_window)
4710 { 4649 {
4711 tip_window = NULL; 4650 tip_window = NULL;
4712 redo_mouse_highlight (); 4651 x_redo_mouse_highlight (dpyinfo);
4713 } 4652 }
4714 4653
4715 /* If window has been obscured or exposed by another window 4654 /* If window has been obscured or exposed by another window
@@ -4760,16 +4699,12 @@ w32_read_socket (struct terminal *terminal,
4760 4699
4761 if (iconified) 4700 if (iconified)
4762 { 4701 {
4763 int x, y;
4764
4765 /* Reset top and left positions of the Window 4702 /* Reset top and left positions of the Window
4766 here since Windows sends a WM_MOVE message 4703 here since Windows sends a WM_MOVE message
4767 BEFORE telling us the Window is minimized 4704 BEFORE telling us the Window is minimized
4768 when the Window is iconified, with 3000,3000 4705 when the Window is iconified, with 3000,3000
4769 as the co-ords. */ 4706 as the co-ords. */
4770 x_real_positions (f, &x, &y); 4707 x_real_positions (f, &f->left_pos, &f->top_pos);
4771 f->left_pos = x;
4772 f->top_pos = y;
4773 4708
4774 inev.kind = DEICONIFY_EVENT; 4709 inev.kind = DEICONIFY_EVENT;
4775 XSETFRAME (inev.frame_or_window, f); 4710 XSETFRAME (inev.frame_or_window, f);
@@ -4982,12 +4917,11 @@ w32_read_socket (struct terminal *terminal,
4982 } 4917 }
4983 4918
4984 /* If the focus was just given to an autoraising frame, 4919 /* If the focus was just given to an autoraising frame,
4985 raise it now. */ 4920 raise it now. FIXME: handle more than one such frame. */
4986 /* ??? This ought to be able to handle more than one such frame. */ 4921 if (dpyinfo->w32_pending_autoraise_frame)
4987 if (pending_autoraise_frame)
4988 { 4922 {
4989 x_raise_frame (pending_autoraise_frame); 4923 x_raise_frame (dpyinfo->w32_pending_autoraise_frame);
4990 pending_autoraise_frame = 0; 4924 dpyinfo->w32_pending_autoraise_frame = NULL;
4991 } 4925 }
4992 4926
4993 /* Check which frames are still visible, if we have enqueued any user 4927 /* Check which frames are still visible, if we have enqueued any user
@@ -5539,13 +5473,13 @@ x_calc_absolute_position (struct frame *f)
5539 /* Treat negative positions as relative to the rightmost bottommost 5473 /* Treat negative positions as relative to the rightmost bottommost
5540 position that fits on the screen. */ 5474 position that fits on the screen. */
5541 if (flags & XNegative) 5475 if (flags & XNegative)
5542 f->left_pos = (x_display_pixel_width (FRAME_W32_DISPLAY_INFO (f)) 5476 f->left_pos = (x_display_pixel_width (FRAME_DISPLAY_INFO (f))
5543 - FRAME_PIXEL_WIDTH (f) 5477 - FRAME_PIXEL_WIDTH (f)
5544 + f->left_pos 5478 + f->left_pos
5545 - (left_right_borders_width - 1)); 5479 - (left_right_borders_width - 1));
5546 5480
5547 if (flags & YNegative) 5481 if (flags & YNegative)
5548 f->top_pos = (x_display_pixel_height (FRAME_W32_DISPLAY_INFO (f)) 5482 f->top_pos = (x_display_pixel_height (FRAME_DISPLAY_INFO (f))
5549 - FRAME_PIXEL_HEIGHT (f) 5483 - FRAME_PIXEL_HEIGHT (f)
5550 + f->top_pos 5484 + f->top_pos
5551 - (top_bottom_borders_height - 1)); 5485 - (top_bottom_borders_height - 1));
@@ -5806,7 +5740,7 @@ x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
5806/* focus shifting, raising and lowering. */ 5740/* focus shifting, raising and lowering. */
5807 5741
5808void 5742void
5809x_focus_on_frame (struct frame *f) 5743x_focus_frame (struct frame *f)
5810{ 5744{
5811 struct w32_display_info *dpyinfo = &one_w32_display_info; 5745 struct w32_display_info *dpyinfo = &one_w32_display_info;
5812 5746
@@ -5920,13 +5854,9 @@ w32_frame_raise_lower (struct frame *f, int raise_flag)
5920void 5854void
5921x_make_frame_visible (struct frame *f) 5855x_make_frame_visible (struct frame *f)
5922{ 5856{
5923 Lisp_Object type;
5924
5925 block_input (); 5857 block_input ();
5926 5858
5927 type = x_icon_type (f); 5859 x_set_bitmap_icon (f);
5928 if (!NILP (type))
5929 x_bitmap_icon (f, type);
5930 5860
5931 if (! FRAME_VISIBLE_P (f)) 5861 if (! FRAME_VISIBLE_P (f))
5932 { 5862 {
@@ -6013,8 +5943,8 @@ void
6013x_make_frame_invisible (struct frame *f) 5943x_make_frame_invisible (struct frame *f)
6014{ 5944{
6015 /* Don't keep the highlight on an invisible frame. */ 5945 /* Don't keep the highlight on an invisible frame. */
6016 if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) 5946 if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f)
6017 FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; 5947 FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0;
6018 5948
6019 block_input (); 5949 block_input ();
6020 5950
@@ -6036,20 +5966,16 @@ x_make_frame_invisible (struct frame *f)
6036void 5966void
6037x_iconify_frame (struct frame *f) 5967x_iconify_frame (struct frame *f)
6038{ 5968{
6039 Lisp_Object type;
6040
6041 /* Don't keep the highlight on an invisible frame. */ 5969 /* Don't keep the highlight on an invisible frame. */
6042 if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) 5970 if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f)
6043 FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; 5971 FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0;
6044 5972
6045 if (FRAME_ICONIFIED_P (f)) 5973 if (FRAME_ICONIFIED_P (f))
6046 return; 5974 return;
6047 5975
6048 block_input (); 5976 block_input ();
6049 5977
6050 type = x_icon_type (f); 5978 x_set_bitmap_icon (f);
6051 if (!NILP (type))
6052 x_bitmap_icon (f, type);
6053 5979
6054 /* Simulate the user minimizing the frame. */ 5980 /* Simulate the user minimizing the frame. */
6055 SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0); 5981 SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0);
@@ -6066,7 +5992,7 @@ x_iconify_frame (struct frame *f)
6066void 5992void
6067x_free_frame_resources (struct frame *f) 5993x_free_frame_resources (struct frame *f)
6068{ 5994{
6069 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 5995 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
6070 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); 5996 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
6071 5997
6072 block_input (); 5998 block_input ();
@@ -6116,7 +6042,7 @@ x_free_frame_resources (struct frame *f)
6116void 6042void
6117x_destroy_window (struct frame *f) 6043x_destroy_window (struct frame *f)
6118{ 6044{
6119 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); 6045 struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
6120 6046
6121 x_free_frame_resources (f); 6047 x_free_frame_resources (f);
6122 dpyinfo->reference_count--; 6048 dpyinfo->reference_count--;
@@ -6258,11 +6184,6 @@ w32_make_rdb (char *xrm_option)
6258 return buffer; 6184 return buffer;
6259} 6185}
6260 6186
6261void
6262x_flush (struct frame * f)
6263{ /* Nothing to do */ }
6264
6265
6266extern frame_parm_handler w32_frame_parm_handlers[]; 6187extern frame_parm_handler w32_frame_parm_handlers[];
6267 6188
6268static struct redisplay_interface w32_redisplay_interface = 6189static struct redisplay_interface w32_redisplay_interface =
@@ -6276,8 +6197,7 @@ static struct redisplay_interface w32_redisplay_interface =
6276 x_after_update_window_line, 6197 x_after_update_window_line,
6277 x_update_window_begin, 6198 x_update_window_begin,
6278 x_update_window_end, 6199 x_update_window_end,
6279 x_flush, 6200 0, /* flush_display */
6280 0, /* flush_display_optional */
6281 x_clear_window_mouse_face, 6201 x_clear_window_mouse_face,
6282 x_get_glyph_overhangs, 6202 x_get_glyph_overhangs,
6283 x_fix_overlapping_area, 6203 x_fix_overlapping_area,
@@ -6344,7 +6264,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo)
6344 terminal like X does. */ 6264 terminal like X does. */
6345 terminal->kboard = xmalloc (sizeof (KBOARD)); 6265 terminal->kboard = xmalloc (sizeof (KBOARD));
6346 init_kboard (terminal->kboard); 6266 init_kboard (terminal->kboard);
6347 kset_window_system (terminal->kboard, intern ("w32")); 6267 kset_window_system (terminal->kboard, Qw32);
6348 terminal->kboard->next_kboard = all_kboards; 6268 terminal->kboard->next_kboard = all_kboards;
6349 all_kboards = terminal->kboard; 6269 all_kboards = terminal->kboard;
6350 /* Don't let the initial kboard remain current longer than necessary. 6270 /* Don't let the initial kboard remain current longer than necessary.
@@ -6608,9 +6528,6 @@ syms_of_w32term (void)
6608 staticpro (&w32_display_name_list); 6528 staticpro (&w32_display_name_list);
6609 w32_display_name_list = Qnil; 6529 w32_display_name_list = Qnil;
6610 6530
6611 staticpro (&last_mouse_scroll_bar);
6612 last_mouse_scroll_bar = Qnil;
6613
6614 DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms"); 6531 DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms");
6615 6532
6616 DEFSYM (Qadded, "added"); 6533 DEFSYM (Qadded, "added");
@@ -6694,8 +6611,6 @@ X toolkit. Possible values are: gtk, motif, xaw, or xaw3d.
6694With MS Windows or Nextstep, the value is t. */); 6611With MS Windows or Nextstep, the value is t. */);
6695 Vx_toolkit_scroll_bars = Qt; 6612 Vx_toolkit_scroll_bars = Qt;
6696 6613
6697 staticpro (&last_mouse_motion_frame); 6614 /* Tell Emacs about this window system. */
6698 last_mouse_motion_frame = Qnil; 6615 Fprovide (Qw32, Qnil);
6699
6700 Fprovide (intern_c_string ("w32"), Qnil);
6701} 6616}
diff --git a/src/w32term.h b/src/w32term.h
index e65c1146294..095ca54e3e8 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -179,6 +179,37 @@ struct w32_display_info
179 frame. It differs from w32_focus_frame when we're using a global 179 frame. It differs from w32_focus_frame when we're using a global
180 minibuffer. */ 180 minibuffer. */
181 struct frame *x_highlight_frame; 181 struct frame *x_highlight_frame;
182
183 /* The frame waiting to be auto-raised in w32_read_socket. */
184 struct frame *w32_pending_autoraise_frame;
185
186 /* The frame where the mouse was last time we reported a mouse event. */
187 struct frame *last_mouse_frame;
188
189 /* The frame where the mouse was last time we reported a mouse motion. */
190 struct frame *last_mouse_motion_frame;
191
192 /* The frame where the mouse was last time we reported a mouse position. */
193 struct frame *last_mouse_glyph_frame;
194
195 /* Position where the mouse was last time we reported a motion.
196 This is a position on last_mouse_motion_frame. */
197 int last_mouse_motion_x;
198 int last_mouse_motion_y;
199
200 /* Where the mouse was last time we reported a mouse position.
201 This is a rectangle on last_mouse_glyph_frame. */
202 RECT last_mouse_glyph;
203
204 /* The scroll bar in which the last motion event occurred. */
205 struct scroll_bar *last_mouse_scroll_bar;
206
207 /* Mouse position on the scroll bar above.
208 FIXME: shouldn't it be a member of struct scroll_bar? */
209 int last_mouse_scroll_bar_pos;
210
211 /* Time of last mouse movement. */
212 Time last_mouse_movement_time;
182}; 213};
183 214
184/* This is a chain of structures for all the displays currently in use. */ 215/* This is a chain of structures for all the displays currently in use. */
@@ -199,8 +230,6 @@ Lisp_Object display_x_get_resource (struct w32_display_info *,
199 Lisp_Object, Lisp_Object, 230 Lisp_Object, Lisp_Object,
200 Lisp_Object, Lisp_Object); 231 Lisp_Object, Lisp_Object);
201 232
202extern void x_focus_on_frame (struct frame *f);
203
204/* also defined in xterm.h XXX: factor out to common header */ 233/* also defined in xterm.h XXX: factor out to common header */
205 234
206extern struct w32_display_info *w32_term_init (Lisp_Object, 235extern struct w32_display_info *w32_term_init (Lisp_Object,
@@ -211,7 +240,6 @@ extern void x_set_window_size (struct frame *f, int change_grav,
211 int cols, int rows); 240 int cols, int rows);
212extern int x_display_pixel_height (struct w32_display_info *); 241extern int x_display_pixel_height (struct w32_display_info *);
213extern int x_display_pixel_width (struct w32_display_info *); 242extern int x_display_pixel_width (struct w32_display_info *);
214extern void x_sync (struct frame *);
215extern Lisp_Object x_get_focus_frame (struct frame *); 243extern Lisp_Object x_get_focus_frame (struct frame *);
216extern void x_set_mouse_position (struct frame *f, int h, int v); 244extern void x_set_mouse_position (struct frame *f, int h, int v);
217extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); 245extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
@@ -384,22 +412,11 @@ extern struct w32_output w32term_display;
384#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.w32->baseline_offset) 412#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.w32->baseline_offset)
385 413
386/* This gives the w32_display_info structure for the display F is on. */ 414/* This gives the w32_display_info structure for the display F is on. */
387#define FRAME_W32_DISPLAY_INFO(f) (&one_w32_display_info) 415#define FRAME_DISPLAY_INFO(f) (&one_w32_display_info)
388#define FRAME_X_DISPLAY_INFO(f) (&one_w32_display_info)
389 416
390/* This is the `Display *' which frame F is on. */ 417/* This is the `Display *' which frame F is on. */
391#define FRAME_X_DISPLAY(f) (0) 418#define FRAME_X_DISPLAY(f) (0)
392 419
393/* Value is the smallest width of any character in any font on frame F. */
394
395#define FRAME_SMALLEST_CHAR_WIDTH(F) \
396 FRAME_W32_DISPLAY_INFO(F)->smallest_char_width
397
398/* Value is the smallest height of any font on frame F. */
399
400#define FRAME_SMALLEST_FONT_HEIGHT(F) \
401 FRAME_W32_DISPLAY_INFO(F)->smallest_font_height
402
403#define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement) 420#define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement)
404#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode) 421#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode)
405 422
@@ -491,21 +508,12 @@ struct scroll_bar {
491#define SET_SCROLL_BAR_W32_WINDOW(ptr, id) \ 508#define SET_SCROLL_BAR_W32_WINDOW(ptr, id) \
492 (SCROLL_BAR_UNPACK ((ptr)->w32_window_low, (ptr)->w32_window_high, (intptr_t) id)) 509 (SCROLL_BAR_UNPACK ((ptr)->w32_window_low, (ptr)->w32_window_high, (intptr_t) id))
493 510
494/* Extract the X widget of the scroll bar from a struct scroll_bar. */
495#define SCROLL_BAR_X_WIDGET(ptr) \
496 ((Widget) SCROLL_BAR_PACK ((ptr)->x_widget_low, (ptr)->x_widget_high))
497
498/* Store a widget id in a struct scroll_bar. */
499#define SET_SCROLL_BAR_X_WIDGET(ptr, w) \
500 (SCROLL_BAR_UNPACK ((ptr)->x_widget_low, (ptr)->x_widget_high, (int) w))
501
502/* Return the inside width of a vertical scroll bar, given the outside 511/* Return the inside width of a vertical scroll bar, given the outside
503 width. */ 512 width. */
504#define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f,width) \ 513#define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f,width) \
505 ((width) \ 514 ((width) \
506 - VERTICAL_SCROLL_BAR_LEFT_BORDER \ 515 - VERTICAL_SCROLL_BAR_LEFT_BORDER \
507 - VERTICAL_SCROLL_BAR_RIGHT_BORDER \ 516 - VERTICAL_SCROLL_BAR_RIGHT_BORDER)
508 - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2)
509 517
510/* Return the length of the rectangle within which the top of the 518/* Return the length of the rectangle within which the top of the
511 handle must stay. This isn't equivalent to the inside height, 519 handle must stay. This isn't equivalent to the inside height,
@@ -542,11 +550,6 @@ struct scroll_bar {
542/* Minimum lengths for scroll bar handles, in pixels. */ 550/* Minimum lengths for scroll bar handles, in pixels. */
543#define VERTICAL_SCROLL_BAR_MIN_HANDLE (vertical_scroll_bar_min_handle) 551#define VERTICAL_SCROLL_BAR_MIN_HANDLE (vertical_scroll_bar_min_handle)
544 552
545/* Trimming off a few pixels from each side prevents
546 text from glomming up against the scroll bar */
547#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
548
549
550struct frame; /* from frame.h */ 553struct frame; /* from frame.h */
551 554
552extern void w32_fill_rect (struct frame *, HDC, COLORREF, RECT *); 555extern void w32_fill_rect (struct frame *, HDC, COLORREF, RECT *);
diff --git a/src/w32xfns.c b/src/w32xfns.c
index 19c6b72bf89..07f75477863 100644
--- a/src/w32xfns.c
+++ b/src/w32xfns.c
@@ -92,7 +92,7 @@ signal_quit (void)
92void 92void
93select_palette (struct frame *f, HDC hdc) 93select_palette (struct frame *f, HDC hdc)
94{ 94{
95 struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); 95 struct w32_display_info *display_info = FRAME_DISPLAY_INFO (f);
96 96
97 if (!display_info->has_palette) 97 if (!display_info->has_palette)
98 return; 98 return;
@@ -333,9 +333,3 @@ drain_message_queue (void)
333 } 333 }
334 return retval; 334 return retval;
335} 335}
336
337/* x_sync is a no-op on W32. */
338void
339x_sync (struct frame *f)
340{
341}
diff --git a/src/widget.c b/src/widget.c
index ec0b506046b..d6469d7eec5 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -525,7 +525,7 @@ setup_frame_gcs (EmacsFrame ew)
525 font = Ffont_xlfd_name (font, Qnil); 525 font = Ffont_xlfd_name (font, Qnil);
526 if (STRINGP (font)) 526 if (STRINGP (font))
527 { 527 {
528 XFontStruct *xfont = XLoadQueryFont (FRAME_X_DISPLAY_INFO (s)->display, 528 XFontStruct *xfont = XLoadQueryFont (FRAME_DISPLAY_INFO (s)->display,
529 SSDATA (font)); 529 SSDATA (font));
530 if (xfont) 530 if (xfont)
531 { 531 {
diff --git a/src/window.c b/src/window.c
index 6828f5d0792..670369cd322 100644
--- a/src/window.c
+++ b/src/window.c
@@ -20,8 +20,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21#include <config.h> 21#include <config.h>
22 22
23#define WINDOW_INLINE EXTERN_INLINE
24
25#include <stdio.h> 23#include <stdio.h>
26 24
27#include "lisp.h" 25#include "lisp.h"
@@ -39,19 +37,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
39#include "blockinput.h" 37#include "blockinput.h"
40#include "intervals.h" 38#include "intervals.h"
41#include "termhooks.h" /* For FRAME_TERMINAL. */ 39#include "termhooks.h" /* For FRAME_TERMINAL. */
42 40#ifdef HAVE_WINDOW_SYSTEM
43#ifdef HAVE_X_WINDOWS 41#include TERM_HEADER
44#include "xterm.h" 42#endif /* HAVE_WINDOW_SYSTEM */
45#endif /* HAVE_X_WINDOWS */
46#ifdef HAVE_NTGUI
47#include "w32term.h"
48#endif
49#ifdef MSDOS 43#ifdef MSDOS
50#include "msdos.h" 44#include "msdos.h"
51#endif 45#endif
52#ifdef HAVE_NS
53#include "nsterm.h"
54#endif
55 46
56Lisp_Object Qwindowp, Qwindow_live_p; 47Lisp_Object Qwindowp, Qwindow_live_p;
57static Lisp_Object Qwindow_valid_p; 48static Lisp_Object Qwindow_valid_p;
@@ -1386,6 +1377,7 @@ window_from_coordinates (struct frame *f, int x, int y,
1386 cw.window = &window, cw.x = x, cw.y = y; cw.part = part; 1377 cw.window = &window, cw.x = x, cw.y = y; cw.part = part;
1387 foreach_window (f, check_window_containing, &cw); 1378 foreach_window (f, check_window_containing, &cw);
1388 1379
1380#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
1389 /* If not found above, see if it's in the tool bar window, if a tool 1381 /* If not found above, see if it's in the tool bar window, if a tool
1390 bar exists. */ 1382 bar exists. */
1391 if (NILP (window) 1383 if (NILP (window)
@@ -1398,6 +1390,7 @@ window_from_coordinates (struct frame *f, int x, int y,
1398 *part = ON_TEXT; 1390 *part = ON_TEXT;
1399 window = f->tool_bar_window; 1391 window = f->tool_bar_window;
1400 } 1392 }
1393#endif
1401 1394
1402 return window; 1395 return window;
1403} 1396}
@@ -2952,7 +2945,7 @@ window-start value is reasonable when this function is called. */)
2952 } 2945 }
2953 } 2946 }
2954 2947
2955 adjust_glyphs (f); 2948 adjust_frame_glyphs (f);
2956 unblock_input (); 2949 unblock_input ();
2957 2950
2958 run_window_configuration_change_hook (f); 2951 run_window_configuration_change_hook (f);
@@ -3426,6 +3419,7 @@ make_window (void)
3426 non-Lisp data, so do it only for slots which should not be zero. */ 3419 non-Lisp data, so do it only for slots which should not be zero. */
3427 w->nrows_scale_factor = w->ncols_scale_factor = 1; 3420 w->nrows_scale_factor = w->ncols_scale_factor = 1;
3428 w->left_fringe_width = w->right_fringe_width = -1; 3421 w->left_fringe_width = w->right_fringe_width = -1;
3422 w->mode_line_height = w->header_line_height = -1;
3429 w->phys_cursor_type = -1; 3423 w->phys_cursor_type = -1;
3430 w->phys_cursor_width = -1; 3424 w->phys_cursor_width = -1;
3431 w->scroll_bar_width = -1; 3425 w->scroll_bar_width = -1;
@@ -3651,7 +3645,7 @@ be applied on the Elisp level. */)
3651 windows_or_buffers_changed++; 3645 windows_or_buffers_changed++;
3652 FRAME_WINDOW_SIZES_CHANGED (f) = 1; 3646 FRAME_WINDOW_SIZES_CHANGED (f) = 1;
3653 3647
3654 adjust_glyphs (f); 3648 adjust_frame_glyphs (f);
3655 unblock_input (); 3649 unblock_input ();
3656 3650
3657 run_window_configuration_change_hook (f); 3651 run_window_configuration_change_hook (f);
@@ -3921,7 +3915,7 @@ set correctly. See the code of `split-window' for how this is done. */)
3921 3915
3922 block_input (); 3916 block_input ();
3923 window_resize_apply (p, horflag); 3917 window_resize_apply (p, horflag);
3924 adjust_glyphs (f); 3918 adjust_frame_glyphs (f);
3925 /* Set buffer of NEW to buffer of reference window. Don't run 3919 /* Set buffer of NEW to buffer of reference window. Don't run
3926 any hooks. */ 3920 any hooks. */
3927 set_window_buffer (new, r->contents, 0, 1); 3921 set_window_buffer (new, r->contents, 0, 1);
@@ -4050,7 +4044,7 @@ Signal an error when WINDOW is the only window on its frame. */)
4050 recombine_windows (sibling); 4044 recombine_windows (sibling);
4051 } 4045 }
4052 4046
4053 adjust_glyphs (f); 4047 adjust_frame_glyphs (f);
4054 4048
4055 if (!WINDOW_LIVE_P (FRAME_SELECTED_WINDOW (f))) 4049 if (!WINDOW_LIVE_P (FRAME_SELECTED_WINDOW (f)))
4056 /* We deleted the frame's selected window. */ 4050 /* We deleted the frame's selected window. */
@@ -4137,7 +4131,7 @@ grow_mini_window (struct window *w, int delta)
4137 w->total_lines -= XINT (value); 4131 w->total_lines -= XINT (value);
4138 /* Enforce full redisplay. FIXME: make it more selective. */ 4132 /* Enforce full redisplay. FIXME: make it more selective. */
4139 windows_or_buffers_changed++; 4133 windows_or_buffers_changed++;
4140 adjust_glyphs (f); 4134 adjust_frame_glyphs (f);
4141 unblock_input (); 4135 unblock_input ();
4142 } 4136 }
4143} 4137}
@@ -4171,7 +4165,7 @@ shrink_mini_window (struct window *w)
4171 w->total_lines = 1; 4165 w->total_lines = 1;
4172 /* Enforce full redisplay. FIXME: make it more selective. */ 4166 /* Enforce full redisplay. FIXME: make it more selective. */
4173 windows_or_buffers_changed++; 4167 windows_or_buffers_changed++;
4174 adjust_glyphs (f); 4168 adjust_frame_glyphs (f);
4175 unblock_input (); 4169 unblock_input ();
4176 } 4170 }
4177 /* If the above failed for whatever strange reason we must make a 4171 /* If the above failed for whatever strange reason we must make a
@@ -4212,7 +4206,7 @@ DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, Sresize_mini
4212 4206
4213 windows_or_buffers_changed++; 4207 windows_or_buffers_changed++;
4214 FRAME_WINDOW_SIZES_CHANGED (f) = 1; 4208 FRAME_WINDOW_SIZES_CHANGED (f) = 1;
4215 adjust_glyphs (f); 4209 adjust_frame_glyphs (f);
4216 unblock_input (); 4210 unblock_input ();
4217 4211
4218 run_window_configuration_change_hook (f); 4212 run_window_configuration_change_hook (f);
@@ -4483,7 +4477,7 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, int noerror)
4483 visible. */ 4477 visible. */
4484 w->vscroll = (it.last_visible_y 4478 w->vscroll = (it.last_visible_y
4485 - it.current_y + it.max_ascent + it.max_descent); 4479 - it.current_y + it.max_ascent + it.max_descent);
4486 adjust_glyphs (it.f); 4480 adjust_frame_glyphs (it.f);
4487 } 4481 }
4488 else 4482 else
4489 { 4483 {
@@ -5118,9 +5112,9 @@ and redisplay normally--don't erase and redraw the frame. */)
5118 /* Invalidate pixel data calculated for all compositions. */ 5112 /* Invalidate pixel data calculated for all compositions. */
5119 for (i = 0; i < n_compositions; i++) 5113 for (i = 0; i < n_compositions; i++)
5120 composition_table[i]->font = NULL; 5114 composition_table[i]->font = NULL;
5121 5115#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
5122 WINDOW_XFRAME (w)->minimize_tool_bar_window_p = 1; 5116 WINDOW_XFRAME (w)->minimize_tool_bar_window_p = 1;
5123 5117#endif
5124 Fredraw_frame (WINDOW_FRAME (w)); 5118 Fredraw_frame (WINDOW_FRAME (w));
5125 SET_FRAME_GARBAGED (WINDOW_XFRAME (w)); 5119 SET_FRAME_GARBAGED (WINDOW_XFRAME (w));
5126 } 5120 }
@@ -5407,7 +5401,7 @@ struct saved_window
5407}; 5401};
5408 5402
5409#define SAVED_WINDOW_N(swv,n) \ 5403#define SAVED_WINDOW_N(swv,n) \
5410 ((struct saved_window *) (XVECTOR ((swv)->contents[(n)]))) 5404 ((struct saved_window *) (XVECTOR ((swv)->u.contents[(n)])))
5411 5405
5412DEFUN ("window-configuration-p", Fwindow_configuration_p, Swindow_configuration_p, 1, 1, 0, 5406DEFUN ("window-configuration-p", Fwindow_configuration_p, Swindow_configuration_p, 1, 1, 0,
5413 doc: /* Return t if OBJECT is a window-configuration object. */) 5407 doc: /* Return t if OBJECT is a window-configuration object. */)
@@ -5773,7 +5767,7 @@ the return value is nil. Otherwise the value is t. */)
5773 ++n; 5767 ++n;
5774 } 5768 }
5775 5769
5776 adjust_glyphs (f); 5770 adjust_frame_glyphs (f);
5777 unblock_input (); 5771 unblock_input ();
5778 5772
5779 /* Scan dead buffer windows. */ 5773 /* Scan dead buffer windows. */
@@ -6102,7 +6096,7 @@ apply_window_adjustment (struct window *w)
6102 clear_glyph_matrix (w->current_matrix); 6096 clear_glyph_matrix (w->current_matrix);
6103 w->window_end_valid = 0; 6097 w->window_end_valid = 0;
6104 windows_or_buffers_changed++; 6098 windows_or_buffers_changed++;
6105 adjust_glyphs (XFRAME (WINDOW_FRAME (w))); 6099 adjust_frame_glyphs (XFRAME (WINDOW_FRAME (w)));
6106} 6100}
6107 6101
6108 6102
@@ -6368,7 +6362,7 @@ If PIXELS-P is non-nil, the return value is VSCROLL. */)
6368 /* Adjust glyph matrix of the frame if the virtual display 6362 /* Adjust glyph matrix of the frame if the virtual display
6369 area becomes larger than before. */ 6363 area becomes larger than before. */
6370 if (w->vscroll < 0 && w->vscroll < old_dy) 6364 if (w->vscroll < 0 && w->vscroll < old_dy)
6371 adjust_glyphs (f); 6365 adjust_frame_glyphs (f);
6372 6366
6373 /* Prevent redisplay shortcuts. */ 6367 /* Prevent redisplay shortcuts. */
6374 XBUFFER (w->contents)->prevent_redisplay_optimizations_p = 1; 6368 XBUFFER (w->contents)->prevent_redisplay_optimizations_p = 1;
@@ -6524,7 +6518,6 @@ init_window_once (void)
6524 Vterminal_frame = selected_frame; 6518 Vterminal_frame = selected_frame;
6525 minibuf_window = f->minibuffer_window; 6519 minibuf_window = f->minibuffer_window;
6526 selected_window = f->selected_window; 6520 selected_window = f->selected_window;
6527 last_nonminibuf_frame = f;
6528 6521
6529 window_initialized = 1; 6522 window_initialized = 1;
6530} 6523}
diff --git a/src/window.h b/src/window.h
index efe03737052..6d2478ecaf9 100644
--- a/src/window.h
+++ b/src/window.h
@@ -23,9 +23,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
23#include "dispextern.h" 23#include "dispextern.h"
24 24
25INLINE_HEADER_BEGIN 25INLINE_HEADER_BEGIN
26#ifndef WINDOW_INLINE
27# define WINDOW_INLINE INLINE
28#endif
29 26
30/* Windows are allocated as if they were vectors, but then the 27/* Windows are allocated as if they were vectors, but then the
31Lisp data type is changed to Lisp_Window. They are garbage 28Lisp data type is changed to Lisp_Window. They are garbage
@@ -264,6 +261,12 @@ struct window
264 A value of -1 means use frame values. */ 261 A value of -1 means use frame values. */
265 int scroll_bar_width; 262 int scroll_bar_width;
266 263
264 /* Effective height of the mode line, or -1 if not known. */
265 int mode_line_height;
266
267 /* Effective height of the header line, or -1 if not known. */
268 int header_line_height;
269
267 /* Z - the buffer position of the last glyph in the current 270 /* Z - the buffer position of the last glyph in the current
268 matrix of W. Only valid if window_end_valid is nonzero. */ 271 matrix of W. Only valid if window_end_valid is nonzero. */
269 ptrdiff_t window_end_pos; 272 ptrdiff_t window_end_pos;
@@ -343,37 +346,37 @@ struct window
343 346
344/* Most code should use these functions to set Lisp fields in struct 347/* Most code should use these functions to set Lisp fields in struct
345 window. */ 348 window. */
346WINDOW_INLINE void 349INLINE void
347wset_frame (struct window *w, Lisp_Object val) 350wset_frame (struct window *w, Lisp_Object val)
348{ 351{
349 w->frame = val; 352 w->frame = val;
350} 353}
351WINDOW_INLINE void 354INLINE void
352wset_next (struct window *w, Lisp_Object val) 355wset_next (struct window *w, Lisp_Object val)
353{ 356{
354 w->next = val; 357 w->next = val;
355} 358}
356WINDOW_INLINE void 359INLINE void
357wset_prev (struct window *w, Lisp_Object val) 360wset_prev (struct window *w, Lisp_Object val)
358{ 361{
359 w->prev = val; 362 w->prev = val;
360} 363}
361WINDOW_INLINE void 364INLINE void
362wset_redisplay_end_trigger (struct window *w, Lisp_Object val) 365wset_redisplay_end_trigger (struct window *w, Lisp_Object val)
363{ 366{
364 w->redisplay_end_trigger = val; 367 w->redisplay_end_trigger = val;
365} 368}
366WINDOW_INLINE void 369INLINE void
367wset_vertical_scroll_bar (struct window *w, Lisp_Object val) 370wset_vertical_scroll_bar (struct window *w, Lisp_Object val)
368{ 371{
369 w->vertical_scroll_bar = val; 372 w->vertical_scroll_bar = val;
370} 373}
371WINDOW_INLINE void 374INLINE void
372wset_prev_buffers (struct window *w, Lisp_Object val) 375wset_prev_buffers (struct window *w, Lisp_Object val)
373{ 376{
374 w->prev_buffers = val; 377 w->prev_buffers = val;
375} 378}
376WINDOW_INLINE void 379INLINE void
377wset_next_buffers (struct window *w, Lisp_Object val) 380wset_next_buffers (struct window *w, Lisp_Object val)
378{ 381{
379 w->next_buffers = val; 382 w->next_buffers = val;
@@ -519,10 +522,13 @@ wset_next_buffers (struct window *w, Lisp_Object val)
519#endif 522#endif
520 523
521/* 1 if W is a tool bar window. */ 524/* 1 if W is a tool bar window. */
522 525#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
523#define WINDOW_TOOL_BAR_P(W) \ 526#define WINDOW_TOOL_BAR_P(W) \
524 (WINDOWP (WINDOW_XFRAME (W)->tool_bar_window) \ 527 (WINDOWP (WINDOW_XFRAME (W)->tool_bar_window) \
525 && (W) == XWINDOW (WINDOW_XFRAME (W)->tool_bar_window)) 528 && (W) == XWINDOW (WINDOW_XFRAME (W)->tool_bar_window))
529#else
530#define WINDOW_TOOL_BAR_P(W) (0)
531#endif
526 532
527/* Return the frame y-position at which window W starts. 533/* Return the frame y-position at which window W starts.
528 This includes a header line, if any. */ 534 This includes a header line, if any. */
@@ -957,7 +963,7 @@ extern void keys_of_window (void);
957 window update, so the position is the future output cursor position 963 window update, so the position is the future output cursor position
958 for currently updated window W. */ 964 for currently updated window W. */
959 965
960WINDOW_INLINE void 966INLINE void
961output_cursor_to (struct window *w, int vpos, int hpos, int y, int x) 967output_cursor_to (struct window *w, int vpos, int hpos, int y, int x)
962{ 968{
963 eassert (w); 969 eassert (w);
diff --git a/src/xdisp.c b/src/xdisp.c
index 139218ae1dd..ce6cd8f080e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1,7 +1,6 @@
1/* Display generation from window structure and buffer text. 1/* Display generation from window structure and buffer text.
2 2
3Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation, 3Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation, Inc.
4Inc.
5 4
6This file is part of GNU Emacs. 5This file is part of GNU Emacs.
7 6
@@ -299,19 +298,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
299#include "font.h" 298#include "font.h"
300#include "fontset.h" 299#include "fontset.h"
301#include "blockinput.h" 300#include "blockinput.h"
302 301#ifdef HAVE_WINDOW_SYSTEM
303#ifdef HAVE_X_WINDOWS 302#include TERM_HEADER
304#include "xterm.h" 303#endif /* HAVE_WINDOW_SYSTEM */
305#endif
306#ifdef HAVE_NTGUI
307#include "w32term.h"
308#endif
309#ifdef HAVE_NS
310#include "nsterm.h"
311#endif
312#ifdef USE_GTK
313#include "gtkutil.h"
314#endif
315 304
316#ifndef FRAME_X_OUTPUT 305#ifndef FRAME_X_OUTPUT
317#define FRAME_X_OUTPUT(f) ((f)->output_data.x) 306#define FRAME_X_OUTPUT(f) ((f)->output_data.x)
@@ -426,11 +415,11 @@ Lisp_Object Qboth, Qboth_horiz, Qtext_image_horiz;
426/* Non-zero means print newline to stdout before next mini-buffer 415/* Non-zero means print newline to stdout before next mini-buffer
427 message. */ 416 message. */
428 417
429int noninteractive_need_newline; 418bool noninteractive_need_newline;
430 419
431/* Non-zero means print newline to message log before next message. */ 420/* Non-zero means print newline to message log before next message. */
432 421
433static int message_log_need_newline; 422static bool message_log_need_newline;
434 423
435/* Three markers that message_dolog uses. 424/* Three markers that message_dolog uses.
436 It could allocate them itself, but that causes trouble 425 It could allocate them itself, but that causes trouble
@@ -489,7 +478,7 @@ Lisp_Object Qmenu_bar_update_hook;
489 478
490/* Nonzero if an overlay arrow has been displayed in this window. */ 479/* Nonzero if an overlay arrow has been displayed in this window. */
491 480
492static int overlay_arrow_seen; 481static bool overlay_arrow_seen;
493 482
494/* Vector containing glyphs for an ellipsis `...'. */ 483/* Vector containing glyphs for an ellipsis `...'. */
495 484
@@ -511,7 +500,7 @@ static Lisp_Object Vmessage_stack;
511/* Nonzero means multibyte characters were enabled when the echo area 500/* Nonzero means multibyte characters were enabled when the echo area
512 message was specified. */ 501 message was specified. */
513 502
514static int message_enable_multibyte; 503static bool message_enable_multibyte;
515 504
516/* Nonzero if we should redraw the mode lines on the next redisplay. */ 505/* Nonzero if we should redraw the mode lines on the next redisplay. */
517 506
@@ -522,14 +511,10 @@ int update_mode_lines;
522 511
523int windows_or_buffers_changed; 512int windows_or_buffers_changed;
524 513
525/* Nonzero means a frame's cursor type has been changed. */
526
527static int cursor_type_changed;
528
529/* Nonzero after display_mode_line if %l was used and it displayed a 514/* Nonzero after display_mode_line if %l was used and it displayed a
530 line number. */ 515 line number. */
531 516
532static int line_number_displayed; 517static bool line_number_displayed;
533 518
534/* The name of the *Messages* buffer, a string. */ 519/* The name of the *Messages* buffer, a string. */
535 520
@@ -551,12 +536,12 @@ static Lisp_Object Vwith_echo_area_save_vector;
551/* Non-zero means display_echo_area should display the last echo area 536/* Non-zero means display_echo_area should display the last echo area
552 message again. Set by redisplay_preserve_echo_area. */ 537 message again. Set by redisplay_preserve_echo_area. */
553 538
554static int display_last_displayed_message_p; 539static bool display_last_displayed_message_p;
555 540
556/* Nonzero if echo area is being used by print; zero if being used by 541/* Nonzero if echo area is being used by print; zero if being used by
557 message. */ 542 message. */
558 543
559static int message_buf_print; 544static bool message_buf_print;
560 545
561/* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable. */ 546/* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable. */
562 547
@@ -566,7 +551,7 @@ static Lisp_Object Qmessage_truncate_lines;
566/* Set to 1 in clear_message to make redisplay_internal aware 551/* Set to 1 in clear_message to make redisplay_internal aware
567 of an emptied echo area. */ 552 of an emptied echo area. */
568 553
569static int message_cleared_p; 554static bool message_cleared_p;
570 555
571/* A scratch glyph row with contents used for generating truncation 556/* A scratch glyph row with contents used for generating truncation
572 glyphs. Also used in direct_output_for_insert. */ 557 glyphs. Also used in direct_output_for_insert. */
@@ -581,13 +566,7 @@ static int last_height;
581 566
582/* Non-zero if there's a help-echo in the echo area. */ 567/* Non-zero if there's a help-echo in the echo area. */
583 568
584int help_echo_showing_p; 569bool help_echo_showing_p;
585
586/* If >= 0, computed, exact values of mode-line and header-line height
587 to use in the macros CURRENT_MODE_LINE_HEIGHT and
588 CURRENT_HEADER_LINE_HEIGHT. */
589
590int current_mode_line_height, current_header_line_height;
591 570
592/* The maximum distance to look ahead for text properties. Values 571/* The maximum distance to look ahead for text properties. Values
593 that are too small let us call compute_char_face and similar 572 that are too small let us call compute_char_face and similar
@@ -763,7 +742,7 @@ Lisp_Object previous_help_echo_string;
763#ifdef HAVE_WINDOW_SYSTEM 742#ifdef HAVE_WINDOW_SYSTEM
764 743
765/* Non-zero means an hourglass cursor is currently shown. */ 744/* Non-zero means an hourglass cursor is currently shown. */
766int hourglass_shown_p; 745bool hourglass_shown_p;
767 746
768/* If non-null, an asynchronous timer that, when it expires, displays 747/* If non-null, an asynchronous timer that, when it expires, displays
769 an hourglass cursor on all frames. */ 748 an hourglass cursor on all frames. */
@@ -933,11 +912,8 @@ static int in_ellipses_for_invisible_text_p (struct display_pos *,
933#ifdef HAVE_WINDOW_SYSTEM 912#ifdef HAVE_WINDOW_SYSTEM
934 913
935static void x_consider_frame_title (Lisp_Object); 914static void x_consider_frame_title (Lisp_Object);
936static int tool_bar_lines_needed (struct frame *, int *);
937static void update_tool_bar (struct frame *, int); 915static void update_tool_bar (struct frame *, int);
938static void build_desired_tool_bar_string (struct frame *f);
939static int redisplay_tool_bar (struct frame *); 916static int redisplay_tool_bar (struct frame *);
940static void display_tool_bar_line (struct it *, int);
941static void notice_overwritten_cursor (struct window *, 917static void notice_overwritten_cursor (struct window *,
942 enum glyph_row_area, 918 enum glyph_row_area,
943 int, int, int, int); 919 int, int, int, int);
@@ -1359,12 +1335,12 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
1359 1335
1360 /* Compute exact mode line heights. */ 1336 /* Compute exact mode line heights. */
1361 if (WINDOW_WANTS_MODELINE_P (w)) 1337 if (WINDOW_WANTS_MODELINE_P (w))
1362 current_mode_line_height 1338 w->mode_line_height
1363 = display_mode_line (w, CURRENT_MODE_LINE_FACE_ID (w), 1339 = display_mode_line (w, CURRENT_MODE_LINE_FACE_ID (w),
1364 BVAR (current_buffer, mode_line_format)); 1340 BVAR (current_buffer, mode_line_format));
1365 1341
1366 if (WINDOW_WANTS_HEADER_LINE_P (w)) 1342 if (WINDOW_WANTS_HEADER_LINE_P (w))
1367 current_header_line_height 1343 w->header_line_height
1368 = display_mode_line (w, HEADER_LINE_FACE_ID, 1344 = display_mode_line (w, HEADER_LINE_FACE_ID,
1369 BVAR (current_buffer, header_line_format)); 1345 BVAR (current_buffer, header_line_format));
1370 1346
@@ -1657,8 +1633,6 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
1657 if (old_buffer) 1633 if (old_buffer)
1658 set_buffer_internal_1 (old_buffer); 1634 set_buffer_internal_1 (old_buffer);
1659 1635
1660 current_header_line_height = current_mode_line_height = -1;
1661
1662 if (visible_p && w->hscroll > 0) 1636 if (visible_p && w->hscroll > 0)
1663 *x -= 1637 *x -=
1664 window_hscroll_limited (w, WINDOW_XFRAME (w)) 1638 window_hscroll_limited (w, WINDOW_XFRAME (w))
@@ -1908,8 +1882,7 @@ pixel_to_glyph_coords (struct frame *f, register int pix_x, register int pix_y,
1908 text, or we can't tell because W's current matrix is not up to 1882 text, or we can't tell because W's current matrix is not up to
1909 date. */ 1883 date. */
1910 1884
1911static 1885static struct glyph *
1912struct glyph *
1913x_y_to_hpos_vpos (struct window *w, int x, int y, int *hpos, int *vpos, 1886x_y_to_hpos_vpos (struct window *w, int x, int y, int *hpos, int *vpos,
1914 int *dx, int *dy, int *area) 1887 int *dx, int *dy, int *area)
1915{ 1888{
@@ -4500,8 +4473,8 @@ setup_for_ellipsis (struct it *it, int len)
4500 if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp))) 4473 if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
4501 { 4474 {
4502 struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp)); 4475 struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
4503 it->dpvec = v->contents; 4476 it->dpvec = v->u.contents;
4504 it->dpend = v->contents + v->header.size; 4477 it->dpend = v->u.contents + v->header.size;
4505 } 4478 }
4506 else 4479 else
4507 { 4480 {
@@ -6688,17 +6661,59 @@ lookup_glyphless_char_display (int c, struct it *it)
6688 return glyphless_method; 6661 return glyphless_method;
6689} 6662}
6690 6663
6691/* Load IT's display element fields with information about the next 6664/* Merge escape glyph face and cache the result. */
6692 display element from the current position of IT. Value is zero if
6693 end of buffer (or C string) is reached. */
6694 6665
6695static struct frame *last_escape_glyph_frame = NULL; 6666static struct frame *last_escape_glyph_frame = NULL;
6696static int last_escape_glyph_face_id = (1 << FACE_ID_BITS); 6667static int last_escape_glyph_face_id = (1 << FACE_ID_BITS);
6697static int last_escape_glyph_merged_face_id = 0; 6668static int last_escape_glyph_merged_face_id = 0;
6698 6669
6699struct frame *last_glyphless_glyph_frame = NULL; 6670static int
6700int last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); 6671merge_escape_glyph_face (struct it *it)
6701int last_glyphless_glyph_merged_face_id = 0; 6672{
6673 int face_id;
6674
6675 if (it->f == last_escape_glyph_frame
6676 && it->face_id == last_escape_glyph_face_id)
6677 face_id = last_escape_glyph_merged_face_id;
6678 else
6679 {
6680 /* Merge the `escape-glyph' face into the current face. */
6681 face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id);
6682 last_escape_glyph_frame = it->f;
6683 last_escape_glyph_face_id = it->face_id;
6684 last_escape_glyph_merged_face_id = face_id;
6685 }
6686 return face_id;
6687}
6688
6689/* Likewise for glyphless glyph face. */
6690
6691static struct frame *last_glyphless_glyph_frame = NULL;
6692static int last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
6693static int last_glyphless_glyph_merged_face_id = 0;
6694
6695int
6696merge_glyphless_glyph_face (struct it *it)
6697{
6698 int face_id;
6699
6700 if (it->f == last_glyphless_glyph_frame
6701 && it->face_id == last_glyphless_glyph_face_id)
6702 face_id = last_glyphless_glyph_merged_face_id;
6703 else
6704 {
6705 /* Merge the `glyphless-char' face into the current face. */
6706 face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id);
6707 last_glyphless_glyph_frame = it->f;
6708 last_glyphless_glyph_face_id = it->face_id;
6709 last_glyphless_glyph_merged_face_id = face_id;
6710 }
6711 return face_id;
6712}
6713
6714/* Load IT's display element fields with information about the next
6715 display element from the current position of IT. Value is zero if
6716 end of buffer (or C string) is reached. */
6702 6717
6703static int 6718static int
6704get_next_display_element (struct it *it) 6719get_next_display_element (struct it *it)
@@ -6763,8 +6778,8 @@ get_next_display_element (struct it *it)
6763 if (v->header.size) 6778 if (v->header.size)
6764 { 6779 {
6765 it->dpvec_char_len = it->len; 6780 it->dpvec_char_len = it->len;
6766 it->dpvec = v->contents; 6781 it->dpvec = v->u.contents;
6767 it->dpend = v->contents + v->header.size; 6782 it->dpend = v->u.contents + v->header.size;
6768 it->current.dpvec_index = 0; 6783 it->current.dpvec_index = 0;
6769 it->dpvec_face_id = -1; 6784 it->dpvec_face_id = -1;
6770 it->saved_face_id = it->face_id; 6785 it->saved_face_id = it->face_id;
@@ -6846,24 +6861,10 @@ get_next_display_element (struct it *it)
6846 g = GLYPH_CODE_CHAR (gc); 6861 g = GLYPH_CODE_CHAR (gc);
6847 lface_id = GLYPH_CODE_FACE (gc); 6862 lface_id = GLYPH_CODE_FACE (gc);
6848 } 6863 }
6849 if (lface_id) 6864
6850 { 6865 face_id = (lface_id
6851 face_id = merge_faces (it->f, Qt, lface_id, it->face_id); 6866 ? merge_faces (it->f, Qt, lface_id, it->face_id)
6852 } 6867 : merge_escape_glyph_face (it));
6853 else if (it->f == last_escape_glyph_frame
6854 && it->face_id == last_escape_glyph_face_id)
6855 {
6856 face_id = last_escape_glyph_merged_face_id;
6857 }
6858 else
6859 {
6860 /* Merge the escape-glyph face into the current face. */
6861 face_id = merge_faces (it->f, Qescape_glyph, 0,
6862 it->face_id);
6863 last_escape_glyph_frame = it->f;
6864 last_escape_glyph_face_id = it->face_id;
6865 last_escape_glyph_merged_face_id = face_id;
6866 }
6867 6868
6868 XSETINT (it->ctl_chars[0], g); 6869 XSETINT (it->ctl_chars[0], g);
6869 XSETINT (it->ctl_chars[1], c ^ 0100); 6870 XSETINT (it->ctl_chars[1], c ^ 0100);
@@ -6895,27 +6896,10 @@ get_next_display_element (struct it *it)
6895 escape_glyph = GLYPH_CODE_CHAR (gc); 6896 escape_glyph = GLYPH_CODE_CHAR (gc);
6896 lface_id = GLYPH_CODE_FACE (gc); 6897 lface_id = GLYPH_CODE_FACE (gc);
6897 } 6898 }
6898 if (lface_id) 6899
6899 { 6900 face_id = (lface_id
6900 /* The display table specified a face. 6901 ? merge_faces (it->f, Qt, lface_id, it->face_id)
6901 Merge it into face_id and also into escape_glyph. */ 6902 : merge_escape_glyph_face (it));
6902 face_id = merge_faces (it->f, Qt, lface_id,
6903 it->face_id);
6904 }
6905 else if (it->f == last_escape_glyph_frame
6906 && it->face_id == last_escape_glyph_face_id)
6907 {
6908 face_id = last_escape_glyph_merged_face_id;
6909 }
6910 else
6911 {
6912 /* Merge the escape-glyph face into the current face. */
6913 face_id = merge_faces (it->f, Qescape_glyph, 0,
6914 it->face_id);
6915 last_escape_glyph_frame = it->f;
6916 last_escape_glyph_face_id = it->face_id;
6917 last_escape_glyph_merged_face_id = face_id;
6918 }
6919 6903
6920 /* Draw non-ASCII hyphen with just highlighting: */ 6904 /* Draw non-ASCII hyphen with just highlighting: */
6921 6905
@@ -9552,7 +9536,20 @@ message_dolog (const char *m, ptrdiff_t nbytes, bool nlflag, bool multibyte)
9552 9536
9553 old_deactivate_mark = Vdeactivate_mark; 9537 old_deactivate_mark = Vdeactivate_mark;
9554 oldbuf = current_buffer; 9538 oldbuf = current_buffer;
9555 Fset_buffer (Fget_buffer_create (Vmessages_buffer_name)); 9539
9540 /* Ensure the Messages buffer exists, and switch to it.
9541 If we created it, set the major-mode. */
9542 {
9543 int newbuffer = 0;
9544 if (NILP (Fget_buffer (Vmessages_buffer_name))) newbuffer = 1;
9545
9546 Fset_buffer (Fget_buffer_create (Vmessages_buffer_name));
9547
9548 if (newbuffer &&
9549 !NILP (Ffboundp (intern ("messages-buffer-mode"))))
9550 call0 (intern ("messages-buffer-mode"));
9551 }
9552
9556 bset_undo_list (current_buffer, Qt); 9553 bset_undo_list (current_buffer, Qt);
9557 9554
9558 oldpoint = message_dolog_marker1; 9555 oldpoint = message_dolog_marker1;
@@ -10778,11 +10775,9 @@ clear_garbaged_frames (void)
10778 if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) 10775 if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f))
10779 { 10776 {
10780 if (f->resized_p) 10777 if (f->resized_p)
10781 { 10778 redraw_frame (f);
10782 redraw_frame (f); 10779 else
10783 f->force_flush_display_p = 1; 10780 clear_current_matrices (f);
10784 }
10785 clear_current_matrices (f);
10786 changed_count++; 10781 changed_count++;
10787 f->garbaged = 0; 10782 f->garbaged = 0;
10788 f->resized_p = 0; 10783 f->resized_p = 0;
@@ -10870,7 +10865,7 @@ echo_area_display (int update_frame_p)
10870 Can do with a display update of the echo area, 10865 Can do with a display update of the echo area,
10871 unless we displayed some mode lines. */ 10866 unless we displayed some mode lines. */
10872 update_single_window (w, 1); 10867 update_single_window (w, 1);
10873 FRAME_RIF (f)->flush_display (f); 10868 flush_frame (f);
10874 } 10869 }
10875 else 10870 else
10876 update_frame (f, 1, 1); 10871 update_frame (f, 1, 1);
@@ -11458,10 +11453,6 @@ update_menu_bar (struct frame *f, int save_match_data, int hooks_run)
11458 11453
11459#ifdef HAVE_WINDOW_SYSTEM 11454#ifdef HAVE_WINDOW_SYSTEM
11460 11455
11461/* Where the mouse was last time we reported a mouse event. */
11462
11463struct frame *last_mouse_frame;
11464
11465/* Tool-bar item index of the item on which a mouse button was pressed 11456/* Tool-bar item index of the item on which a mouse button was pressed
11466 or -1. */ 11457 or -1. */
11467 11458
@@ -11579,6 +11570,7 @@ update_tool_bar (struct frame *f, int save_match_data)
11579 } 11570 }
11580} 11571}
11581 11572
11573#if ! defined (USE_GTK) && ! defined (HAVE_NS)
11582 11574
11583/* Set F->desired_tool_bar_string to a Lisp string representing frame 11575/* Set F->desired_tool_bar_string to a Lisp string representing frame
11584 F's desired tool-bar contents. F->tool_bar_items must have 11576 F's desired tool-bar contents. F->tool_bar_items must have
@@ -11916,6 +11908,11 @@ tool_bar_lines_needed (struct frame *f, int *n_rows)
11916 return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f); 11908 return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f);
11917} 11909}
11918 11910
11911#endif /* !USE_GTK && !HAVE_NS */
11912
11913#if defined USE_GTK || defined HAVE_NS
11914EXFUN (Ftool_bar_lines_needed, 1) ATTRIBUTE_CONST;
11915#endif
11919 11916
11920DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed, 11917DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed,
11921 0, 1, 0, 11918 0, 1, 0,
@@ -11923,9 +11920,10 @@ DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed,
11923If FRAME is nil or omitted, use the selected frame. */) 11920If FRAME is nil or omitted, use the selected frame. */)
11924 (Lisp_Object frame) 11921 (Lisp_Object frame)
11925{ 11922{
11923 int nlines = 0;
11924#if ! defined (USE_GTK) && ! defined (HAVE_NS)
11926 struct frame *f = decode_any_frame (frame); 11925 struct frame *f = decode_any_frame (frame);
11927 struct window *w; 11926 struct window *w;
11928 int nlines = 0;
11929 11927
11930 if (WINDOWP (f->tool_bar_window) 11928 if (WINDOWP (f->tool_bar_window)
11931 && (w = XWINDOW (f->tool_bar_window), 11929 && (w = XWINDOW (f->tool_bar_window),
@@ -11938,7 +11936,7 @@ If FRAME is nil or omitted, use the selected frame. */)
11938 nlines = tool_bar_lines_needed (f, NULL); 11936 nlines = tool_bar_lines_needed (f, NULL);
11939 } 11937 }
11940 } 11938 }
11941 11939#endif
11942 return make_number (nlines); 11940 return make_number (nlines);
11943} 11941}
11944 11942
@@ -11949,15 +11947,17 @@ If FRAME is nil or omitted, use the selected frame. */)
11949static int 11947static int
11950redisplay_tool_bar (struct frame *f) 11948redisplay_tool_bar (struct frame *f)
11951{ 11949{
11952 struct window *w;
11953 struct it it;
11954 struct glyph_row *row;
11955
11956#if defined (USE_GTK) || defined (HAVE_NS) 11950#if defined (USE_GTK) || defined (HAVE_NS)
11951
11957 if (FRAME_EXTERNAL_TOOL_BAR (f)) 11952 if (FRAME_EXTERNAL_TOOL_BAR (f))
11958 update_frame_tool_bar (f); 11953 update_frame_tool_bar (f);
11959 return 0; 11954 return 0;
11960#endif 11955
11956#else /* !USE_GTK && !HAVE_NS */
11957
11958 struct window *w;
11959 struct it it;
11960 struct glyph_row *row;
11961 11961
11962 /* If frame hasn't a tool-bar window or if it is zero-height, don't 11962 /* If frame hasn't a tool-bar window or if it is zero-height, don't
11963 do anything. This means you must start with tool-bar-lines 11963 do anything. This means you must start with tool-bar-lines
@@ -12003,7 +12003,7 @@ redisplay_tool_bar (struct frame *f)
12003 if (WINDOW_TOTAL_LINES (w) != old_height) 12003 if (WINDOW_TOTAL_LINES (w) != old_height)
12004 { 12004 {
12005 clear_glyph_matrix (w->desired_matrix); 12005 clear_glyph_matrix (w->desired_matrix);
12006 fonts_changed_p = 1; 12006 f->fonts_changed = 1;
12007 return 1; 12007 return 1;
12008 } 12008 }
12009 } 12009 }
@@ -12104,7 +12104,7 @@ redisplay_tool_bar (struct frame *f)
12104 { 12104 {
12105 clear_glyph_matrix (w->desired_matrix); 12105 clear_glyph_matrix (w->desired_matrix);
12106 f->n_tool_bar_rows = nrows; 12106 f->n_tool_bar_rows = nrows;
12107 fonts_changed_p = 1; 12107 f->fonts_changed = 1;
12108 return 1; 12108 return 1;
12109 } 12109 }
12110 } 12110 }
@@ -12113,8 +12113,11 @@ redisplay_tool_bar (struct frame *f)
12113 12113
12114 f->minimize_tool_bar_window_p = 0; 12114 f->minimize_tool_bar_window_p = 0;
12115 return 0; 12115 return 0;
12116
12117#endif /* USE_GTK || HAVE_NS */
12116} 12118}
12117 12119
12120#if ! defined (USE_GTK) && ! defined (HAVE_NS)
12118 12121
12119/* Get information about the tool-bar item which is displayed in GLYPH 12122/* Get information about the tool-bar item which is displayed in GLYPH
12120 on frame F. Return in *PROP_IDX the index where tool-bar item 12123 on frame F. Return in *PROP_IDX the index where tool-bar item
@@ -12279,7 +12282,7 @@ note_tool_bar_highlight (struct frame *f, int x, int y)
12279{ 12282{
12280 Lisp_Object window = f->tool_bar_window; 12283 Lisp_Object window = f->tool_bar_window;
12281 struct window *w = XWINDOW (window); 12284 struct window *w = XWINDOW (window);
12282 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 12285 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
12283 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); 12286 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
12284 int hpos, vpos; 12287 int hpos, vpos;
12285 struct glyph *glyph; 12288 struct glyph *glyph;
@@ -12312,9 +12315,9 @@ note_tool_bar_highlight (struct frame *f, int x, int y)
12312 clear_mouse_face (hlinfo); 12315 clear_mouse_face (hlinfo);
12313 12316
12314 /* Mouse is down, but on different tool-bar item? */ 12317 /* Mouse is down, but on different tool-bar item? */
12315 mouse_down_p = (dpyinfo->grabbed 12318 mouse_down_p = (x_mouse_grabbed (dpyinfo)
12316 && f == last_mouse_frame 12319 && f == dpyinfo->last_mouse_frame);
12317 && FRAME_LIVE_P (f)); 12320
12318 if (mouse_down_p 12321 if (mouse_down_p
12319 && last_tool_bar_item != prop_idx) 12322 && last_tool_bar_item != prop_idx)
12320 return; 12323 return;
@@ -12358,6 +12361,8 @@ note_tool_bar_highlight (struct frame *f, int x, int y)
12358 help_echo_string = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_CAPTION); 12361 help_echo_string = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_CAPTION);
12359} 12362}
12360 12363
12364#endif /* !USE_GTK && !HAVE_NS */
12365
12361#endif /* HAVE_WINDOW_SYSTEM */ 12366#endif /* HAVE_WINDOW_SYSTEM */
12362 12367
12363 12368
@@ -12990,15 +12995,6 @@ redisplay_internal (void)
12990 last_glyphless_glyph_frame = NULL; 12995 last_glyphless_glyph_frame = NULL;
12991 last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); 12996 last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
12992 12997
12993 /* If new fonts have been loaded that make a glyph matrix adjustment
12994 necessary, do it. */
12995 if (fonts_changed_p)
12996 {
12997 adjust_glyphs (NULL);
12998 ++windows_or_buffers_changed;
12999 fonts_changed_p = 0;
13000 }
13001
13002 /* If face_change_count is non-zero, init_iterator will free all 12998 /* If face_change_count is non-zero, init_iterator will free all
13003 realized faces, which includes the faces referenced from current 12999 realized faces, which includes the faces referenced from current
13004 matrices. So, we can't reuse current matrices in this case. */ 13000 matrices. So, we can't reuse current matrices in this case. */
@@ -13029,7 +13025,19 @@ redisplay_internal (void)
13029 struct frame *f = XFRAME (frame); 13025 struct frame *f = XFRAME (frame);
13030 13026
13031 if (FRAME_VISIBLE_P (f)) 13027 if (FRAME_VISIBLE_P (f))
13032 ++number_of_visible_frames; 13028 {
13029 ++number_of_visible_frames;
13030 /* Adjust matrices for visible frames only. */
13031 if (f->fonts_changed)
13032 {
13033 adjust_frame_glyphs (f);
13034 f->fonts_changed = 0;
13035 }
13036 /* If cursor type has been changed on the frame
13037 other than selected, consider all frames. */
13038 if (f != sf && f->cursor_type_changed)
13039 update_mode_lines++;
13040 }
13033 clear_desired_matrices (f); 13041 clear_desired_matrices (f);
13034 } 13042 }
13035 13043
@@ -13078,8 +13086,7 @@ redisplay_internal (void)
13078 } 13086 }
13079 13087
13080 consider_all_windows_p = (update_mode_lines 13088 consider_all_windows_p = (update_mode_lines
13081 || buffer_shared_and_changed () 13089 || buffer_shared_and_changed ());
13082 || cursor_type_changed);
13083 13090
13084 /* If specs for an arrow have changed, do thorough redisplay 13091 /* If specs for an arrow have changed, do thorough redisplay
13085 to ensure we remove any arrow that should no longer exist. */ 13092 to ensure we remove any arrow that should no longer exist. */
@@ -13113,9 +13120,7 @@ redisplay_internal (void)
13113 if (!display_last_displayed_message_p) 13120 if (!display_last_displayed_message_p)
13114 message_cleared_p = 0; 13121 message_cleared_p = 0;
13115 13122
13116 if (fonts_changed_p) 13123 if (window_height_changed_p)
13117 goto retry;
13118 else if (window_height_changed_p)
13119 { 13124 {
13120 consider_all_windows_p = 1; 13125 consider_all_windows_p = 1;
13121 ++update_mode_lines; 13126 ++update_mode_lines;
@@ -13172,6 +13177,7 @@ redisplay_internal (void)
13172 && !current_buffer->prevent_redisplay_optimizations_p 13177 && !current_buffer->prevent_redisplay_optimizations_p
13173 && FRAME_VISIBLE_P (XFRAME (w->frame)) 13178 && FRAME_VISIBLE_P (XFRAME (w->frame))
13174 && !FRAME_OBSCURED_P (XFRAME (w->frame)) 13179 && !FRAME_OBSCURED_P (XFRAME (w->frame))
13180 && !XFRAME (w->frame)->cursor_type_changed
13175 /* Make sure recorded data applies to current buffer, etc. */ 13181 /* Make sure recorded data applies to current buffer, etc. */
13176 && this_line_buffer == current_buffer 13182 && this_line_buffer == current_buffer
13177 && match_p 13183 && match_p
@@ -13390,6 +13396,8 @@ redisplay_internal (void)
13390 && !EQ (FRAME_TTY (f)->top_frame, frame)) 13396 && !EQ (FRAME_TTY (f)->top_frame, frame))
13391 continue; 13397 continue;
13392 13398
13399 retry_frame:
13400
13393 if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf) 13401 if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf)
13394 { 13402 {
13395 /* Mark all the scroll bars to be removed; we'll redeem 13403 /* Mark all the scroll bars to be removed; we'll redeem
@@ -13409,20 +13417,22 @@ redisplay_internal (void)
13409 if (FRAME_TERMINAL (f)->judge_scroll_bars_hook) 13417 if (FRAME_TERMINAL (f)->judge_scroll_bars_hook)
13410 FRAME_TERMINAL (f)->judge_scroll_bars_hook (f); 13418 FRAME_TERMINAL (f)->judge_scroll_bars_hook (f);
13411 13419
13412 /* If fonts changed, display again. */
13413 /* ??? rms: I suspect it is a mistake to jump all the way
13414 back to retry here. It should just retry this frame. */
13415 if (fonts_changed_p)
13416 goto retry;
13417
13418 if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f)) 13420 if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
13419 { 13421 {
13422 /* If fonts changed on visible frame, display again. */
13423 if (f->fonts_changed)
13424 {
13425 adjust_frame_glyphs (f);
13426 f->fonts_changed = 0;
13427 goto retry_frame;
13428 }
13429
13420 /* See if we have to hscroll. */ 13430 /* See if we have to hscroll. */
13421 if (!f->already_hscrolled_p) 13431 if (!f->already_hscrolled_p)
13422 { 13432 {
13423 f->already_hscrolled_p = 1; 13433 f->already_hscrolled_p = 1;
13424 if (hscroll_windows (f->root_window)) 13434 if (hscroll_windows (f->root_window))
13425 goto retry; 13435 goto retry_frame;
13426 } 13436 }
13427 13437
13428 /* Prevent various kinds of signals during display 13438 /* Prevent various kinds of signals during display
@@ -13436,6 +13446,7 @@ redisplay_internal (void)
13436 /* Update the display. */ 13446 /* Update the display. */
13437 set_window_update_flags (XWINDOW (f->root_window), 1); 13447 set_window_update_flags (XWINDOW (f->root_window), 1);
13438 pending |= update_frame (f, 0, 0); 13448 pending |= update_frame (f, 0, 0);
13449 f->cursor_type_changed = 0;
13439 f->updated_p = 1; 13450 f->updated_p = 1;
13440 } 13451 }
13441 } 13452 }
@@ -13480,7 +13491,7 @@ redisplay_internal (void)
13480 13491
13481 update: 13492 update:
13482 /* If fonts changed, display again. */ 13493 /* If fonts changed, display again. */
13483 if (fonts_changed_p) 13494 if (sf->fonts_changed)
13484 goto retry; 13495 goto retry;
13485 13496
13486 /* Prevent various kinds of signals during display update. 13497 /* Prevent various kinds of signals during display update.
@@ -13497,6 +13508,7 @@ redisplay_internal (void)
13497 13508
13498 XWINDOW (selected_window)->must_be_updated_p = 1; 13509 XWINDOW (selected_window)->must_be_updated_p = 1;
13499 pending = update_frame (sf, 0, 0); 13510 pending = update_frame (sf, 0, 0);
13511 sf->cursor_type_changed = 0;
13500 } 13512 }
13501 13513
13502 /* We may have called echo_area_display at the top of this 13514 /* We may have called echo_area_display at the top of this
@@ -13511,6 +13523,7 @@ redisplay_internal (void)
13511 { 13523 {
13512 XWINDOW (mini_window)->must_be_updated_p = 1; 13524 XWINDOW (mini_window)->must_be_updated_p = 1;
13513 pending |= update_frame (mini_frame, 0, 0); 13525 pending |= update_frame (mini_frame, 0, 0);
13526 mini_frame->cursor_type_changed = 0;
13514 if (!pending && hscroll_windows (mini_window)) 13527 if (!pending && hscroll_windows (mini_window))
13515 goto retry; 13528 goto retry;
13516 } 13529 }
@@ -13551,7 +13564,6 @@ redisplay_internal (void)
13551 13564
13552 update_mode_lines = 0; 13565 update_mode_lines = 0;
13553 windows_or_buffers_changed = 0; 13566 windows_or_buffers_changed = 0;
13554 cursor_type_changed = 0;
13555 } 13567 }
13556 13568
13557 /* Start SIGIO interrupts coming again. Having them off during the 13569 /* Start SIGIO interrupts coming again. Having them off during the
@@ -13649,9 +13661,7 @@ redisplay_preserve_echo_area (int from_where)
13649 else 13661 else
13650 redisplay_internal (); 13662 redisplay_internal ();
13651 13663
13652 if (FRAME_RIF (SELECTED_FRAME ()) != NULL 13664 flush_frame (SELECTED_FRAME ());
13653 && FRAME_RIF (SELECTED_FRAME ())->flush_display_optional)
13654 FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (NULL);
13655} 13665}
13656 13666
13657 13667
@@ -14993,7 +15003,7 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
14993 cases. */ 15003 cases. */
14994 && !update_mode_lines 15004 && !update_mode_lines
14995 && !windows_or_buffers_changed 15005 && !windows_or_buffers_changed
14996 && !cursor_type_changed 15006 && !f->cursor_type_changed
14997 /* Can't use this case if highlighting a region. When a 15007 /* Can't use this case if highlighting a region. When a
14998 region exists, cursor movement has to do more than just 15008 region exists, cursor movement has to do more than just
14999 set the cursor. */ 15009 set the cursor. */
@@ -15340,9 +15350,8 @@ set_vertical_scroll_bar (struct window *w)
15340/* Redisplay leaf window WINDOW. JUST_THIS_ONE_P non-zero means only 15350/* Redisplay leaf window WINDOW. JUST_THIS_ONE_P non-zero means only
15341 selected_window is redisplayed. 15351 selected_window is redisplayed.
15342 15352
15343 We can return without actually redisplaying the window if 15353 We can return without actually redisplaying the window if fonts has been
15344 fonts_changed_p. In that case, redisplay_internal will 15354 changed on window's frame. In that case, redisplay_internal will retry. */
15345 retry. */
15346 15355
15347static void 15356static void
15348redisplay_window (Lisp_Object window, int just_this_one_p) 15357redisplay_window (Lisp_Object window, int just_this_one_p)
@@ -15727,7 +15736,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
15727 debug_method_add (w, "try_window_id %d", tem); 15736 debug_method_add (w, "try_window_id %d", tem);
15728#endif 15737#endif
15729 15738
15730 if (fonts_changed_p) 15739 if (f->fonts_changed)
15731 goto need_larger_matrices; 15740 goto need_larger_matrices;
15732 if (tem > 0) 15741 if (tem > 0)
15733 goto done; 15742 goto done;
@@ -15797,12 +15806,12 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
15797 IF_DEBUG (debug_method_add (w, "1")); 15806 IF_DEBUG (debug_method_add (w, "1"));
15798 if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0) 15807 if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0)
15799 /* -1 means we need to scroll. 15808 /* -1 means we need to scroll.
15800 0 means we need new matrices, but fonts_changed_p 15809 0 means we need new matrices, but fonts_changed
15801 is set in that case, so we will detect it below. */ 15810 is set in that case, so we will detect it below. */
15802 goto try_to_scroll; 15811 goto try_to_scroll;
15803 } 15812 }
15804 15813
15805 if (fonts_changed_p) 15814 if (f->fonts_changed)
15806 goto need_larger_matrices; 15815 goto need_larger_matrices;
15807 15816
15808 if (w->cursor.vpos >= 0) 15817 if (w->cursor.vpos >= 0)
@@ -15990,7 +15999,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
15990 /* Redisplay the window. */ 15999 /* Redisplay the window. */
15991 if (!current_matrix_up_to_date_p 16000 if (!current_matrix_up_to_date_p
15992 || windows_or_buffers_changed 16001 || windows_or_buffers_changed
15993 || cursor_type_changed 16002 || f->cursor_type_changed
15994 /* Don't use try_window_reusing_current_matrix in this case 16003 /* Don't use try_window_reusing_current_matrix in this case
15995 because it can have changed the buffer. */ 16004 because it can have changed the buffer. */
15996 || !NILP (Vwindow_scroll_functions) 16005 || !NILP (Vwindow_scroll_functions)
@@ -16003,7 +16012,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
16003 /* If new fonts have been loaded (due to fontsets), give up. We 16012 /* If new fonts have been loaded (due to fontsets), give up. We
16004 have to start a new redisplay since we need to re-adjust glyph 16013 have to start a new redisplay since we need to re-adjust glyph
16005 matrices. */ 16014 matrices. */
16006 if (fonts_changed_p) 16015 if (f->fonts_changed)
16007 goto need_larger_matrices; 16016 goto need_larger_matrices;
16008 16017
16009 /* If cursor did not appear assume that the middle of the window is 16018 /* If cursor did not appear assume that the middle of the window is
@@ -16116,7 +16125,8 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
16116 if (WINDOW_WANTS_MODELINE_P (w) 16125 if (WINDOW_WANTS_MODELINE_P (w)
16117 && CURRENT_MODE_LINE_HEIGHT (w) != DESIRED_MODE_LINE_HEIGHT (w)) 16126 && CURRENT_MODE_LINE_HEIGHT (w) != DESIRED_MODE_LINE_HEIGHT (w))
16118 { 16127 {
16119 fonts_changed_p = 1; 16128 f->fonts_changed = 1;
16129 w->mode_line_height = -1;
16120 MATRIX_MODE_LINE_ROW (w->current_matrix)->height 16130 MATRIX_MODE_LINE_ROW (w->current_matrix)->height
16121 = DESIRED_MODE_LINE_HEIGHT (w); 16131 = DESIRED_MODE_LINE_HEIGHT (w);
16122 } 16132 }
@@ -16126,12 +16136,13 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
16126 if (WINDOW_WANTS_HEADER_LINE_P (w) 16136 if (WINDOW_WANTS_HEADER_LINE_P (w)
16127 && CURRENT_HEADER_LINE_HEIGHT (w) != DESIRED_HEADER_LINE_HEIGHT (w)) 16137 && CURRENT_HEADER_LINE_HEIGHT (w) != DESIRED_HEADER_LINE_HEIGHT (w))
16128 { 16138 {
16129 fonts_changed_p = 1; 16139 f->fonts_changed = 1;
16140 w->header_line_height = -1;
16130 MATRIX_HEADER_LINE_ROW (w->current_matrix)->height 16141 MATRIX_HEADER_LINE_ROW (w->current_matrix)->height
16131 = DESIRED_HEADER_LINE_HEIGHT (w); 16142 = DESIRED_HEADER_LINE_HEIGHT (w);
16132 } 16143 }
16133 16144
16134 if (fonts_changed_p) 16145 if (f->fonts_changed)
16135 goto need_larger_matrices; 16146 goto need_larger_matrices;
16136 } 16147 }
16137 16148
@@ -16196,8 +16207,8 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
16196 } 16207 }
16197#endif /* HAVE_WINDOW_SYSTEM */ 16208#endif /* HAVE_WINDOW_SYSTEM */
16198 16209
16199 /* We go to this label, with fonts_changed_p set, 16210 /* We go to this label, with fonts_changed set, if it is
16200 if it is necessary to try again using larger glyph matrices. 16211 necessary to try again using larger glyph matrices.
16201 We have to redeem the scroll bar even in this case, 16212 We have to redeem the scroll bar even in this case,
16202 because the loop in redisplay_internal expects that. */ 16213 because the loop in redisplay_internal expects that. */
16203 need_larger_matrices: 16214 need_larger_matrices:
@@ -16269,7 +16280,7 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
16269 { 16280 {
16270 if (display_line (&it)) 16281 if (display_line (&it))
16271 last_text_row = it.glyph_row - 1; 16282 last_text_row = it.glyph_row - 1;
16272 if (fonts_changed_p && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE)) 16283 if (f->fonts_changed && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE))
16273 return 0; 16284 return 0;
16274 } 16285 }
16275 16286
@@ -16367,7 +16378,7 @@ try_window_reusing_current_matrix (struct window *w)
16367 /* Don't try to reuse the display if windows have been split 16378 /* Don't try to reuse the display if windows have been split
16368 or such. */ 16379 or such. */
16369 || windows_or_buffers_changed 16380 || windows_or_buffers_changed
16370 || cursor_type_changed) 16381 || f->cursor_type_changed)
16371 return 0; 16382 return 0;
16372 16383
16373 /* Can't do this if region may have changed. */ 16384 /* Can't do this if region may have changed. */
@@ -16415,8 +16426,7 @@ try_window_reusing_current_matrix (struct window *w)
16415 w->cursor.vpos = -1; 16426 w->cursor.vpos = -1;
16416 last_text_row = last_reused_text_row = NULL; 16427 last_text_row = last_reused_text_row = NULL;
16417 16428
16418 while (it.current_y < it.last_visible_y 16429 while (it.current_y < it.last_visible_y && !f->fonts_changed)
16419 && !fonts_changed_p)
16420 { 16430 {
16421 /* If we have reached into the characters in the START row, 16431 /* If we have reached into the characters in the START row,
16422 that means the line boundaries have changed. So we 16432 that means the line boundaries have changed. So we
@@ -16627,7 +16637,7 @@ try_window_reusing_current_matrix (struct window *w)
16627 if (pt_row == NULL) 16637 if (pt_row == NULL)
16628 w->cursor.vpos = -1; 16638 w->cursor.vpos = -1;
16629 last_text_row = NULL; 16639 last_text_row = NULL;
16630 while (it.current_y < it.last_visible_y && !fonts_changed_p) 16640 while (it.current_y < it.last_visible_y && !f->fonts_changed)
16631 if (display_line (&it)) 16641 if (display_line (&it))
16632 last_text_row = it.glyph_row - 1; 16642 last_text_row = it.glyph_row - 1;
16633 16643
@@ -17139,7 +17149,7 @@ try_window_id (struct window *w)
17139 GIVE_UP (1); 17149 GIVE_UP (1);
17140 17150
17141 /* This flag is used to prevent redisplay optimizations. */ 17151 /* This flag is used to prevent redisplay optimizations. */
17142 if (windows_or_buffers_changed || cursor_type_changed) 17152 if (windows_or_buffers_changed || f->cursor_type_changed)
17143 GIVE_UP (2); 17153 GIVE_UP (2);
17144 17154
17145 /* Verify that narrowing has not changed. 17155 /* Verify that narrowing has not changed.
@@ -17280,8 +17290,6 @@ try_window_id (struct window *w)
17280 row = row_containing_pos (w, PT, r0, NULL, 0); 17290 row = row_containing_pos (w, PT, r0, NULL, 0);
17281 if (row) 17291 if (row)
17282 set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0); 17292 set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0);
17283 else
17284 emacs_abort ();
17285 return 1; 17293 return 1;
17286 } 17294 }
17287 } 17295 }
@@ -17322,8 +17330,6 @@ try_window_id (struct window *w)
17322 row = row_containing_pos (w, PT, r0, NULL, 0); 17330 row = row_containing_pos (w, PT, r0, NULL, 0);
17323 if (row) 17331 if (row)
17324 set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0); 17332 set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0);
17325 else
17326 emacs_abort ();
17327 return 2; 17333 return 2;
17328 } 17334 }
17329 } 17335 }
@@ -17470,7 +17476,7 @@ try_window_id (struct window *w)
17470 last_text_row = NULL; 17476 last_text_row = NULL;
17471 overlay_arrow_seen = 0; 17477 overlay_arrow_seen = 0;
17472 while (it.current_y < it.last_visible_y 17478 while (it.current_y < it.last_visible_y
17473 && !fonts_changed_p 17479 && !f->fonts_changed
17474 && (first_unchanged_at_end_row == NULL 17480 && (first_unchanged_at_end_row == NULL
17475 || IT_CHARPOS (it) < stop_pos)) 17481 || IT_CHARPOS (it) < stop_pos))
17476 { 17482 {
@@ -17478,7 +17484,7 @@ try_window_id (struct window *w)
17478 last_text_row = it.glyph_row - 1; 17484 last_text_row = it.glyph_row - 1;
17479 } 17485 }
17480 17486
17481 if (fonts_changed_p) 17487 if (f->fonts_changed)
17482 return -1; 17488 return -1;
17483 17489
17484 17490
@@ -17725,8 +17731,7 @@ try_window_id (struct window *w)
17725 17731
17726 /* Display the rest of the lines at the window end. */ 17732 /* Display the rest of the lines at the window end. */
17727 it.glyph_row = MATRIX_ROW (desired_matrix, it.vpos); 17733 it.glyph_row = MATRIX_ROW (desired_matrix, it.vpos);
17728 while (it.current_y < it.last_visible_y 17734 while (it.current_y < it.last_visible_y && !f->fonts_changed)
17729 && !fonts_changed_p)
17730 { 17735 {
17731 /* Is it always sure that the display agrees with lines in 17736 /* Is it always sure that the display agrees with lines in
17732 the current matrix? I don't think so, so we mark rows 17737 the current matrix? I don't think so, so we mark rows
@@ -19262,7 +19267,7 @@ display_line (struct it *it)
19262 >= it->w->desired_matrix->nrows) 19267 >= it->w->desired_matrix->nrows)
19263 { 19268 {
19264 it->w->nrows_scale_factor++; 19269 it->w->nrows_scale_factor++;
19265 fonts_changed_p = 1; 19270 it->f->fonts_changed = 1;
19266 return 0; 19271 return 0;
19267 } 19272 }
19268 19273
@@ -24111,12 +24116,12 @@ draw_glyphs (struct window *w, int x, struct glyph_row *row,
24111 24116
24112#define IT_EXPAND_MATRIX_WIDTH(it, area) \ 24117#define IT_EXPAND_MATRIX_WIDTH(it, area) \
24113 { \ 24118 { \
24114 if (!fonts_changed_p \ 24119 if (!it->f->fonts_changed \
24115 && (it->glyph_row->glyphs[area] \ 24120 && (it->glyph_row->glyphs[area] \
24116 < it->glyph_row->glyphs[area + 1])) \ 24121 < it->glyph_row->glyphs[area + 1])) \
24117 { \ 24122 { \
24118 it->w->ncols_scale_factor++; \ 24123 it->w->ncols_scale_factor++; \
24119 fonts_changed_p = 1; \ 24124 it->f->fonts_changed = 1; \
24120 } \ 24125 } \
24121 } 24126 }
24122 24127
@@ -25032,21 +25037,7 @@ produce_glyphless_glyph (struct it *it, int for_no_font, Lisp_Object acronym)
25032 base_height = it->ascent + it->descent; 25037 base_height = it->ascent + it->descent;
25033 base_width = font->average_width; 25038 base_width = font->average_width;
25034 25039
25035 /* Get a face ID for the glyph by utilizing a cache (the same way as 25040 face_id = merge_glyphless_glyph_face (it);
25036 done for `escape-glyph' in get_next_display_element). */
25037 if (it->f == last_glyphless_glyph_frame
25038 && it->face_id == last_glyphless_glyph_face_id)
25039 {
25040 face_id = last_glyphless_glyph_merged_face_id;
25041 }
25042 else
25043 {
25044 /* Merge the `glyphless-char' face into the current face. */
25045 face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id);
25046 last_glyphless_glyph_frame = it->f;
25047 last_glyphless_glyph_face_id = it->face_id;
25048 last_glyphless_glyph_merged_face_id = face_id;
25049 }
25050 25041
25051 if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE) 25042 if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE)
25052 { 25043 {
@@ -26087,7 +26078,7 @@ set_frame_cursor_types (struct frame *f, Lisp_Object arg)
26087 FRAME_BLINK_OFF_CURSOR (f) = DEFAULT_CURSOR; 26078 FRAME_BLINK_OFF_CURSOR (f) = DEFAULT_CURSOR;
26088 26079
26089 /* Make sure the cursor gets redrawn. */ 26080 /* Make sure the cursor gets redrawn. */
26090 cursor_type_changed = 1; 26081 f->cursor_type_changed = 1;
26091} 26082}
26092 26083
26093 26084
@@ -26138,7 +26129,7 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width,
26138 26129
26139 /* Detect a nonselected window or nonselected frame. */ 26130 /* Detect a nonselected window or nonselected frame. */
26140 else if (w != XWINDOW (f->selected_window) 26131 else if (w != XWINDOW (f->selected_window)
26141 || f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame) 26132 || f != FRAME_DISPLAY_INFO (f)->x_highlight_frame)
26142 { 26133 {
26143 *active_cursor = 0; 26134 *active_cursor = 0;
26144 26135
@@ -26835,10 +26826,13 @@ show_mouse_face (Mouse_HLInfo *hlinfo, enum draw_glyphs_face draw)
26835 /* Change the mouse cursor. */ 26826 /* Change the mouse cursor. */
26836 if (FRAME_WINDOW_P (f)) 26827 if (FRAME_WINDOW_P (f))
26837 { 26828 {
26829#if ! defined (USE_GTK) && ! defined (HAVE_NS)
26838 if (draw == DRAW_NORMAL_TEXT 26830 if (draw == DRAW_NORMAL_TEXT
26839 && !EQ (hlinfo->mouse_face_window, f->tool_bar_window)) 26831 && !EQ (hlinfo->mouse_face_window, f->tool_bar_window))
26840 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); 26832 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor);
26841 else if (draw == DRAW_MOUSE_FACE) 26833 else
26834#endif
26835 if (draw == DRAW_MOUSE_FACE)
26842 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor); 26836 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor);
26843 else 26837 else
26844 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor); 26838 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor);
@@ -27507,7 +27501,7 @@ fast_find_string_pos (struct window *w, ptrdiff_t pos, Lisp_Object object,
27507#endif /* not used */ 27501#endif /* not used */
27508 27502
27509/* Find the positions of the first and the last glyphs in window W's 27503/* Find the positions of the first and the last glyphs in window W's
27510 current matrix that occlude positions [STARTPOS..ENDPOS] in OBJECT 27504 current matrix that occlude positions [STARTPOS..ENDPOS) in OBJECT
27511 (assumed to be a string), and return in HLINFO's mouse_face_* 27505 (assumed to be a string), and return in HLINFO's mouse_face_*
27512 members the pixel and column/row coordinates of those glyphs. */ 27506 members the pixel and column/row coordinates of those glyphs. */
27513 27507
@@ -27523,7 +27517,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27523 int found = 0; 27517 int found = 0;
27524 27518
27525 /* Find the glyph row with at least one position in the range 27519 /* Find the glyph row with at least one position in the range
27526 [STARTPOS..ENDPOS], and the first glyph in that row whose 27520 [STARTPOS..ENDPOS), and the first glyph in that row whose
27527 position belongs to that range. */ 27521 position belongs to that range. */
27528 for (r = MATRIX_FIRST_TEXT_ROW (w->current_matrix); 27522 for (r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
27529 r->enabled_p && r->y < yb; 27523 r->enabled_p && r->y < yb;
@@ -27535,7 +27529,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27535 e = g + r->used[TEXT_AREA]; 27529 e = g + r->used[TEXT_AREA];
27536 for (gx = r->x; g < e; gx += g->pixel_width, ++g) 27530 for (gx = r->x; g < e; gx += g->pixel_width, ++g)
27537 if (EQ (g->object, object) 27531 if (EQ (g->object, object)
27538 && startpos <= g->charpos && g->charpos <= endpos) 27532 && startpos <= g->charpos && g->charpos < endpos)
27539 { 27533 {
27540 hlinfo->mouse_face_beg_row 27534 hlinfo->mouse_face_beg_row
27541 = MATRIX_ROW_VPOS (r, w->current_matrix); 27535 = MATRIX_ROW_VPOS (r, w->current_matrix);
@@ -27553,7 +27547,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27553 g = e + r->used[TEXT_AREA]; 27547 g = e + r->used[TEXT_AREA];
27554 for ( ; g > e; --g) 27548 for ( ; g > e; --g)
27555 if (EQ ((g-1)->object, object) 27549 if (EQ ((g-1)->object, object)
27556 && startpos <= (g-1)->charpos && (g-1)->charpos <= endpos) 27550 && startpos <= (g-1)->charpos && (g-1)->charpos < endpos)
27557 { 27551 {
27558 hlinfo->mouse_face_beg_row 27552 hlinfo->mouse_face_beg_row
27559 = MATRIX_ROW_VPOS (r, w->current_matrix); 27553 = MATRIX_ROW_VPOS (r, w->current_matrix);
@@ -27581,7 +27575,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27581 found = 0; 27575 found = 0;
27582 for ( ; g < e; ++g) 27576 for ( ; g < e; ++g)
27583 if (EQ (g->object, object) 27577 if (EQ (g->object, object)
27584 && startpos <= g->charpos && g->charpos <= endpos) 27578 && startpos <= g->charpos && g->charpos < endpos)
27585 { 27579 {
27586 found = 1; 27580 found = 1;
27587 break; 27581 break;
@@ -27604,7 +27598,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27604 e = g + r->used[TEXT_AREA]; 27598 e = g + r->used[TEXT_AREA];
27605 for ( ; e > g; --e) 27599 for ( ; e > g; --e)
27606 if (EQ ((e-1)->object, object) 27600 if (EQ ((e-1)->object, object)
27607 && startpos <= (e-1)->charpos && (e-1)->charpos <= endpos) 27601 && startpos <= (e-1)->charpos && (e-1)->charpos < endpos)
27608 break; 27602 break;
27609 hlinfo->mouse_face_end_col = e - g; 27603 hlinfo->mouse_face_end_col = e - g;
27610 27604
@@ -27619,7 +27613,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo,
27619 for (gx = r->x ; e < g; ++e) 27613 for (gx = r->x ; e < g; ++e)
27620 { 27614 {
27621 if (EQ (e->object, object) 27615 if (EQ (e->object, object)
27622 && startpos <= e->charpos && e->charpos <= endpos) 27616 && startpos <= e->charpos && e->charpos < endpos)
27623 break; 27617 break;
27624 gx += e->pixel_width; 27618 gx += e->pixel_width;
27625 } 27619 }
@@ -27682,7 +27676,7 @@ on_hot_spot_p (Lisp_Object hot_spot, int x, int y)
27682 if (VECTORP (XCDR (hot_spot))) 27676 if (VECTORP (XCDR (hot_spot)))
27683 { 27677 {
27684 struct Lisp_Vector *v = XVECTOR (XCDR (hot_spot)); 27678 struct Lisp_Vector *v = XVECTOR (XCDR (hot_spot));
27685 Lisp_Object *poly = v->contents; 27679 Lisp_Object *poly = v->u.contents;
27686 ptrdiff_t n = v->header.size; 27680 ptrdiff_t n = v->header.size;
27687 ptrdiff_t i; 27681 ptrdiff_t i;
27688 int inside = 0; 27682 int inside = 0;
@@ -27788,7 +27782,7 @@ define_frame_cursor1 (struct frame *f, Cursor cursor, Lisp_Object pointer)
27788 cursor = FRAME_X_OUTPUT (f)->horizontal_drag_cursor; 27782 cursor = FRAME_X_OUTPUT (f)->horizontal_drag_cursor;
27789#ifdef HAVE_X_WINDOWS 27783#ifdef HAVE_X_WINDOWS
27790 else if (EQ (pointer, intern ("vdrag"))) 27784 else if (EQ (pointer, intern ("vdrag")))
27791 cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; 27785 cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor;
27792#endif 27786#endif
27793 else if (EQ (pointer, intern ("hourglass"))) 27787 else if (EQ (pointer, intern ("hourglass")))
27794 cursor = FRAME_X_OUTPUT (f)->hourglass_cursor; 27788 cursor = FRAME_X_OUTPUT (f)->hourglass_cursor;
@@ -27951,7 +27945,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
27951 /* Change the mouse pointer according to what is under it. */ 27945 /* Change the mouse pointer according to what is under it. */
27952 if (FRAME_WINDOW_P (f)) 27946 if (FRAME_WINDOW_P (f))
27953 { 27947 {
27954 dpyinfo = FRAME_X_DISPLAY_INFO (f); 27948 dpyinfo = FRAME_DISPLAY_INFO (f);
27955 if (STRINGP (string)) 27949 if (STRINGP (string))
27956 { 27950 {
27957 cursor = FRAME_X_OUTPUT (f)->nontext_cursor; 27951 cursor = FRAME_X_OUTPUT (f)->nontext_cursor;
@@ -27973,7 +27967,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
27973 } 27967 }
27974 else 27968 else
27975 /* Default mode-line pointer. */ 27969 /* Default mode-line pointer. */
27976 cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; 27970 cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor;
27977 } 27971 }
27978#endif 27972#endif
27979 } 27973 }
@@ -28176,7 +28170,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
28176 w = XWINDOW (window); 28170 w = XWINDOW (window);
28177 frame_to_window_pixel_xy (w, &x, &y); 28171 frame_to_window_pixel_xy (w, &x, &y);
28178 28172
28179#ifdef HAVE_WINDOW_SYSTEM 28173#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
28180 /* Handle tool-bar window differently since it doesn't display a 28174 /* Handle tool-bar window differently since it doesn't display a
28181 buffer. */ 28175 buffer. */
28182 if (EQ (window, f->tool_bar_window)) 28176 if (EQ (window, f->tool_bar_window))
@@ -28393,7 +28387,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
28393 if (NILP (s)) 28387 if (NILP (s))
28394 s = make_number (0); 28388 s = make_number (0);
28395 if (NILP (e)) 28389 if (NILP (e))
28396 e = make_number (SCHARS (object) - 1); 28390 e = make_number (SCHARS (object));
28397 mouse_face_from_string_pos (w, hlinfo, object, 28391 mouse_face_from_string_pos (w, hlinfo, object,
28398 XINT (s), XINT (e)); 28392 XINT (s), XINT (e));
28399 hlinfo->mouse_face_past_end = 0; 28393 hlinfo->mouse_face_past_end = 0;
@@ -29089,9 +29083,11 @@ expose_frame (struct frame *f, int x, int y, int w, int h)
29089 TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height)); 29083 TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height));
29090 mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r); 29084 mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r);
29091 29085
29086#if ! defined (USE_GTK) && ! defined (HAVE_NS)
29092 if (WINDOWP (f->tool_bar_window)) 29087 if (WINDOWP (f->tool_bar_window))
29093 mouse_face_overwritten_p 29088 mouse_face_overwritten_p
29094 |= expose_window (XWINDOW (f->tool_bar_window), &r); 29089 |= expose_window (XWINDOW (f->tool_bar_window), &r);
29090#endif
29095 29091
29096#ifdef HAVE_X_WINDOWS 29092#ifdef HAVE_X_WINDOWS
29097#ifndef MSDOS 29093#ifndef MSDOS
@@ -29817,8 +29813,6 @@ Its value should be an ASCII acronym string, `hex-code', `empty-box', or
29817void 29813void
29818init_xdisp (void) 29814init_xdisp (void)
29819{ 29815{
29820 current_header_line_height = current_mode_line_height = -1;
29821
29822 CHARPOS (this_line_start_pos) = 0; 29816 CHARPOS (this_line_start_pos) = 0;
29823 29817
29824 if (!noninteractive) 29818 if (!noninteractive)
diff --git a/src/xfaces.c b/src/xfaces.c
index 0a117b83c15..8d78a28eab1 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -211,13 +211,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
211#include "frame.h" 211#include "frame.h"
212#include "termhooks.h" 212#include "termhooks.h"
213 213
214#ifdef HAVE_X_WINDOWS
215#include "xterm.h"
216#ifdef USE_MOTIF 214#ifdef USE_MOTIF
217#include <Xm/Xm.h> 215#include <Xm/Xm.h>
218#include <Xm/XmStrDefs.h> 216#include <Xm/XmStrDefs.h>
219#endif /* USE_MOTIF */ 217#endif /* USE_MOTIF */
220#endif /* HAVE_X_WINDOWS */
221 218
222#ifdef MSDOS 219#ifdef MSDOS
223#include "dosfns.h" 220#include "dosfns.h"
@@ -227,15 +224,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
227#include TERM_HEADER 224#include TERM_HEADER
228#include "fontset.h" 225#include "fontset.h"
229#ifdef HAVE_NTGUI 226#ifdef HAVE_NTGUI
230#undef FRAME_X_DISPLAY_INFO
231#define FRAME_X_DISPLAY_INFO FRAME_W32_DISPLAY_INFO
232#define x_display_info w32_display_info 227#define x_display_info w32_display_info
233#define GCGraphicsExposures 0 228#define GCGraphicsExposures 0
234#endif /* HAVE_NTGUI */ 229#endif /* HAVE_NTGUI */
235 230
236#ifdef HAVE_NS 231#ifdef HAVE_NS
237#undef FRAME_X_DISPLAY_INFO
238#define FRAME_X_DISPLAY_INFO FRAME_NS_DISPLAY_INFO
239#define GCGraphicsExposures 0 232#define GCGraphicsExposures 0
240#endif /* HAVE_NS */ 233#endif /* HAVE_NS */
241 234
@@ -549,7 +542,7 @@ DEFUN ("dump-colors", Fdump_colors, Sdump_colors, 0, 0, 0,
549void 542void
550x_free_colors (struct frame *f, long unsigned int *pixels, int npixels) 543x_free_colors (struct frame *f, long unsigned int *pixels, int npixels)
551{ 544{
552 int class = FRAME_X_DISPLAY_INFO (f)->visual->class; 545 int class = FRAME_DISPLAY_INFO (f)->visual->class;
553 546
554 /* If display has an immutable color map, freeing colors is not 547 /* If display has an immutable color map, freeing colors is not
555 necessary and some servers don't allow it. So don't do it. */ 548 necessary and some servers don't allow it. So don't do it. */
@@ -770,7 +763,7 @@ clear_face_cache (int clear_fonts_p)
770 { 763 {
771 struct frame *f = XFRAME (frame); 764 struct frame *f = XFRAME (frame);
772 if (FRAME_WINDOW_P (f) 765 if (FRAME_WINDOW_P (f)
773 && FRAME_X_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS) 766 && FRAME_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS)
774 { 767 {
775 clear_font_cache (f); 768 clear_font_cache (f);
776 free_all_realized_faces (frame); 769 free_all_realized_faces (frame);
@@ -1572,7 +1565,7 @@ the face font sort order. */)
1572 vec = Fvconcat (ndrivers, drivers); 1565 vec = Fvconcat (ndrivers, drivers);
1573 nfonts = ASIZE (vec); 1566 nfonts = ASIZE (vec);
1574 1567
1575 qsort (XVECTOR (vec)->contents, nfonts, word_size, 1568 qsort (XVECTOR (vec)->u.contents, nfonts, word_size,
1576 compare_fonts_by_sort_order); 1569 compare_fonts_by_sort_order);
1577 1570
1578 result = Qnil; 1571 result = Qnil;
@@ -1837,7 +1830,7 @@ check_lface (Lisp_Object lface)
1837 if (!NILP (lface)) 1830 if (!NILP (lface))
1838 { 1831 {
1839 eassert (LFACEP (lface)); 1832 eassert (LFACEP (lface));
1840 check_lface_attrs (XVECTOR (lface)->contents); 1833 check_lface_attrs (XVECTOR (lface)->u.contents);
1841 } 1834 }
1842} 1835}
1843 1836
@@ -2014,7 +2007,7 @@ get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name,
2014 lface = lface_from_face_name_no_resolve (f, face_name, signal_p); 2007 lface = lface_from_face_name_no_resolve (f, face_name, signal_p);
2015 2008
2016 if (! NILP (lface)) 2009 if (! NILP (lface))
2017 memcpy (attrs, XVECTOR (lface)->contents, 2010 memcpy (attrs, XVECTOR (lface)->u.contents,
2018 LFACE_VECTOR_SIZE * sizeof *attrs); 2011 LFACE_VECTOR_SIZE * sizeof *attrs);
2019 2012
2020 return !NILP (lface); 2013 return !NILP (lface);
@@ -2697,7 +2690,7 @@ The value is TO. */)
2697 copy = Finternal_make_lisp_face (to, new_frame); 2690 copy = Finternal_make_lisp_face (to, new_frame);
2698 } 2691 }
2699 2692
2700 vcopy (copy, 0, XVECTOR (lface)->contents, LFACE_VECTOR_SIZE); 2693 vcopy (copy, 0, XVECTOR (lface)->u.contents, LFACE_VECTOR_SIZE);
2701 2694
2702 /* Changing a named face means that all realized faces depending on 2695 /* Changing a named face means that all realized faces depending on
2703 that face are invalid. Since we cannot tell which realized faces 2696 that face are invalid. Since we cannot tell which realized faces
@@ -3100,7 +3093,7 @@ FRAME 0 means change the face on all frames, and change the default
3100 f = XFRAME (frame); 3093 f = XFRAME (frame);
3101 if (! FONT_OBJECT_P (value)) 3094 if (! FONT_OBJECT_P (value))
3102 { 3095 {
3103 Lisp_Object *attrs = XVECTOR (lface)->contents; 3096 Lisp_Object *attrs = XVECTOR (lface)->u.contents;
3104 Lisp_Object font_object; 3097 Lisp_Object font_object;
3105 3098
3106 font_object = font_load_for_lface (f, attrs, value); 3099 font_object = font_load_for_lface (f, attrs, value);
@@ -3168,7 +3161,7 @@ FRAME 0 means change the face on all frames, and change the default
3168 the font to nil so that the font selector doesn't think that 3161 the font to nil so that the font selector doesn't think that
3169 the attribute is mandatory. Also, clear the average 3162 the attribute is mandatory. Also, clear the average
3170 width. */ 3163 width. */
3171 font_clear_prop (XVECTOR (lface)->contents, prop_index); 3164 font_clear_prop (XVECTOR (lface)->u.contents, prop_index);
3172 } 3165 }
3173 3166
3174 /* Changing a named face means that all realized faces depending on 3167 /* Changing a named face means that all realized faces depending on
@@ -3198,7 +3191,7 @@ FRAME 0 means change the face on all frames, and change the default
3198 reflected in changed `font' frame parameters. */ 3191 reflected in changed `font' frame parameters. */
3199 if (FRAMEP (frame) 3192 if (FRAMEP (frame)
3200 && (prop_index || EQ (attr, QCfont)) 3193 && (prop_index || EQ (attr, QCfont))
3201 && lface_fully_specified_p (XVECTOR (lface)->contents)) 3194 && lface_fully_specified_p (XVECTOR (lface)->u.contents))
3202 set_font_frame_param (frame, lface); 3195 set_font_frame_param (frame, lface);
3203 else 3196 else
3204#endif /* HAVE_WINDOW_SYSTEM */ 3197#endif /* HAVE_WINDOW_SYSTEM */
@@ -3378,7 +3371,7 @@ set_font_frame_param (Lisp_Object frame, Lisp_Object lface)
3378 { 3371 {
3379 if (FONT_SPEC_P (font)) 3372 if (FONT_SPEC_P (font))
3380 { 3373 {
3381 font = font_load_for_lface (f, XVECTOR (lface)->contents, font); 3374 font = font_load_for_lface (f, XVECTOR (lface)->u.contents, font);
3382 if (NILP (font)) 3375 if (NILP (font))
3383 return; 3376 return;
3384 ASET (lface, LFACE_FONT_INDEX, font); 3377 ASET (lface, LFACE_FONT_INDEX, font);
@@ -3403,7 +3396,7 @@ ordinary `x-get-resource' doesn't take a frame argument. */)
3403 CHECK_STRING (class); 3396 CHECK_STRING (class);
3404 f = decode_live_frame (frame); 3397 f = decode_live_frame (frame);
3405 block_input (); 3398 block_input ();
3406 value = display_x_get_resource (FRAME_X_DISPLAY_INFO (f), 3399 value = display_x_get_resource (FRAME_DISPLAY_INFO (f),
3407 resource, class, Qnil, Qnil); 3400 resource, class, Qnil, Qnil);
3408 unblock_input (); 3401 unblock_input ();
3409 return value; 3402 return value;
@@ -3493,7 +3486,7 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
3493static void 3486static void
3494x_update_menu_appearance (struct frame *f) 3487x_update_menu_appearance (struct frame *f)
3495{ 3488{
3496 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 3489 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
3497 XrmDatabase rdb; 3490 XrmDatabase rdb;
3498 3491
3499 if (dpyinfo 3492 if (dpyinfo
@@ -3735,8 +3728,8 @@ Default face attributes override any local face attributes. */)
3735 the local frame is defined from default specs in `face-defface-spec' 3728 the local frame is defined from default specs in `face-defface-spec'
3736 and those should be overridden by global settings. Hence the strange 3729 and those should be overridden by global settings. Hence the strange
3737 "global before local" priority. */ 3730 "global before local" priority. */
3738 lvec = XVECTOR (local_lface)->contents; 3731 lvec = XVECTOR (local_lface)->u.contents;
3739 gvec = XVECTOR (global_lface)->contents; 3732 gvec = XVECTOR (global_lface)->u.contents;
3740 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) 3733 for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
3741 if (IGNORE_DEFFACE_P (gvec[i])) 3734 if (IGNORE_DEFFACE_P (gvec[i]))
3742 ASET (local_lface, i, Qunspecified); 3735 ASET (local_lface, i, Qunspecified);
@@ -3920,8 +3913,8 @@ If FRAME is omitted or nil, use the selected frame. */)
3920 3913
3921 lface1 = lface_from_face_name (f, face1, 1); 3914 lface1 = lface_from_face_name (f, face1, 1);
3922 lface2 = lface_from_face_name (f, face2, 1); 3915 lface2 = lface_from_face_name (f, face2, 1);
3923 equal_p = lface_equal_p (XVECTOR (lface1)->contents, 3916 equal_p = lface_equal_p (XVECTOR (lface1)->u.contents,
3924 XVECTOR (lface2)->contents); 3917 XVECTOR (lface2)->u.contents);
3925 return equal_p ? Qt : Qnil; 3918 return equal_p ? Qt : Qnil;
3926} 3919}
3927 3920
@@ -4658,7 +4651,7 @@ DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector,
4658 Lisp_Object lface; 4651 Lisp_Object lface;
4659 lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), 4652 lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE),
4660 Qunspecified); 4653 Qunspecified);
4661 merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->contents, 4654 merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->u.contents,
4662 1, 0); 4655 1, 0);
4663 return lface; 4656 return lface;
4664} 4657}
@@ -5338,9 +5331,9 @@ realize_default_face (struct frame *f)
5338 ASET (lface, LFACE_STIPPLE_INDEX, Qnil); 5331 ASET (lface, LFACE_STIPPLE_INDEX, Qnil);
5339 5332
5340 /* Realize the face; it must be fully-specified now. */ 5333 /* Realize the face; it must be fully-specified now. */
5341 eassert (lface_fully_specified_p (XVECTOR (lface)->contents)); 5334 eassert (lface_fully_specified_p (XVECTOR (lface)->u.contents));
5342 check_lface (lface); 5335 check_lface (lface);
5343 memcpy (attrs, XVECTOR (lface)->contents, sizeof attrs); 5336 memcpy (attrs, XVECTOR (lface)->u.contents, sizeof attrs);
5344 face = realize_face (c, attrs, DEFAULT_FACE_ID); 5337 face = realize_face (c, attrs, DEFAULT_FACE_ID);
5345 5338
5346#ifdef HAVE_WINDOW_SYSTEM 5339#ifdef HAVE_WINDOW_SYSTEM
diff --git a/src/xfns.c b/src/xfns.c
index b08fc76524c..2b895642942 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -42,8 +42,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
42#include "termchar.h" 42#include "termchar.h"
43#include "font.h" 43#include "font.h"
44 44
45#ifdef HAVE_X_WINDOWS
46
47#include <sys/types.h> 45#include <sys/types.h>
48#include <sys/stat.h> 46#include <sys/stat.h>
49 47
@@ -153,7 +151,7 @@ check_x_display_info (Lisp_Object object)
153 struct frame *sf = XFRAME (selected_frame); 151 struct frame *sf = XFRAME (selected_frame);
154 152
155 if (FRAME_X_P (sf) && FRAME_LIVE_P (sf)) 153 if (FRAME_X_P (sf) && FRAME_LIVE_P (sf))
156 dpyinfo = FRAME_X_DISPLAY_INFO (sf); 154 dpyinfo = FRAME_DISPLAY_INFO (sf);
157 else if (x_display_list != 0) 155 else if (x_display_list != 0)
158 dpyinfo = x_display_list; 156 dpyinfo = x_display_list;
159 else 157 else
@@ -173,193 +171,12 @@ check_x_display_info (Lisp_Object object)
173 else 171 else
174 { 172 {
175 struct frame *f = decode_window_system_frame (object); 173 struct frame *f = decode_window_system_frame (object);
176 dpyinfo = FRAME_X_DISPLAY_INFO (f); 174 dpyinfo = FRAME_DISPLAY_INFO (f);
177 } 175 }
178 176
179 return dpyinfo; 177 return dpyinfo;
180} 178}
181 179
182
183/* Return the Emacs frame-object corresponding to an X window.
184 It could be the frame's main window or an icon window. */
185
186/* This function can be called during GC, so use GC_xxx type test macros. */
187
188struct frame *
189x_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
190{
191 Lisp_Object tail, frame;
192 struct frame *f;
193
194 if (wdesc == None)
195 return NULL;
196
197 FOR_EACH_FRAME (tail, frame)
198 {
199 f = XFRAME (frame);
200 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
201 continue;
202 if (f->output_data.x->hourglass_window == wdesc)
203 return f;
204#ifdef USE_X_TOOLKIT
205 if ((f->output_data.x->edit_widget
206 && XtWindow (f->output_data.x->edit_widget) == wdesc)
207 /* A tooltip frame? */
208 || (!f->output_data.x->edit_widget
209 && FRAME_X_WINDOW (f) == wdesc)
210 || f->output_data.x->icon_desc == wdesc)
211 return f;
212#else /* not USE_X_TOOLKIT */
213#ifdef USE_GTK
214 if (f->output_data.x->edit_widget)
215 {
216 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
217 struct x_output *x = f->output_data.x;
218 if (gwdesc != 0 && gwdesc == x->edit_widget)
219 return f;
220 }
221#endif /* USE_GTK */
222 if (FRAME_X_WINDOW (f) == wdesc
223 || f->output_data.x->icon_desc == wdesc)
224 return f;
225#endif /* not USE_X_TOOLKIT */
226 }
227 return 0;
228}
229
230#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
231/* Like x_window_to_frame but also compares the window with the widget's
232 windows. */
233
234struct frame *
235x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
236{
237 Lisp_Object tail, frame;
238 struct frame *f, *found = NULL;
239 struct x_output *x;
240
241 if (wdesc == None)
242 return NULL;
243
244 FOR_EACH_FRAME (tail, frame)
245 {
246 if (found)
247 break;
248 f = XFRAME (frame);
249 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo)
250 {
251 /* This frame matches if the window is any of its widgets. */
252 x = f->output_data.x;
253 if (x->hourglass_window == wdesc)
254 found = f;
255 else if (x->widget)
256 {
257#ifdef USE_GTK
258 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
259 if (gwdesc != 0
260 && gtk_widget_get_toplevel (gwdesc) == x->widget)
261 found = f;
262#else
263 if (wdesc == XtWindow (x->widget)
264 || wdesc == XtWindow (x->column_widget)
265 || wdesc == XtWindow (x->edit_widget))
266 found = f;
267 /* Match if the window is this frame's menubar. */
268 else if (lw_window_is_in_menubar (wdesc, x->menubar_widget))
269 found = f;
270#endif
271 }
272 else if (FRAME_X_WINDOW (f) == wdesc)
273 /* A tooltip frame. */
274 found = f;
275 }
276 }
277
278 return found;
279}
280
281/* Likewise, but consider only the menu bar widget. */
282
283struct frame *
284x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event)
285{
286 Window wdesc = event->xany.window;
287 Lisp_Object tail, frame;
288 struct frame *f;
289 struct x_output *x;
290
291 if (wdesc == None)
292 return NULL;
293
294 FOR_EACH_FRAME (tail, frame)
295 {
296 f = XFRAME (frame);
297 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
298 continue;
299 x = f->output_data.x;
300#ifdef USE_GTK
301 if (x->menubar_widget && xg_event_is_for_menubar (f, event))
302 return f;
303#else
304 /* Match if the window is this frame's menubar. */
305 if (x->menubar_widget
306 && lw_window_is_in_menubar (wdesc, x->menubar_widget))
307 return f;
308#endif
309 }
310 return 0;
311}
312
313/* Return the frame whose principal (outermost) window is WDESC.
314 If WDESC is some other (smaller) window, we return 0. */
315
316struct frame *
317x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
318{
319 Lisp_Object tail, frame;
320 struct frame *f;
321 struct x_output *x;
322
323 if (wdesc == None)
324 return NULL;
325
326 FOR_EACH_FRAME (tail, frame)
327 {
328 f = XFRAME (frame);
329 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
330 continue;
331 x = f->output_data.x;
332
333 if (x->widget)
334 {
335 /* This frame matches if the window is its topmost widget. */
336#ifdef USE_GTK
337 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
338 if (gwdesc == x->widget)
339 return f;
340#else
341 if (wdesc == XtWindow (x->widget))
342 return f;
343#if 0 /* I don't know why it did this,
344 but it seems logically wrong,
345 and it causes trouble for MapNotify events. */
346 /* Match if the window is this frame's menubar. */
347 if (x->menubar_widget
348 && wdesc == XtWindow (x->menubar_widget))
349 return f;
350#endif
351#endif
352 }
353 else if (FRAME_X_WINDOW (f) == wdesc)
354 /* Tooltip frame. */
355 return f;
356 }
357 return 0;
358}
359#endif /* USE_X_TOOLKIT || USE_GTK */
360
361
362
363/* Store the screen positions of frame F into XPTR and YPTR. 180/* Store the screen positions of frame F into XPTR and YPTR.
364 These are the positions of the containing window manager window, 181 These are the positions of the containing window manager window,
365 not Emacs's own window. */ 182 not Emacs's own window. */
@@ -374,7 +191,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)
374 Atom actual_type; 191 Atom actual_type;
375 unsigned long actual_size, bytes_remaining; 192 unsigned long actual_size, bytes_remaining;
376 int rc, actual_format; 193 int rc, actual_format;
377 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 194 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
378 long max_len = 400; 195 long max_len = 400;
379 Display *dpy = FRAME_X_DISPLAY (f); 196 Display *dpy = FRAME_X_DISPLAY (f);
380 unsigned char *tmp_data = NULL; 197 unsigned char *tmp_data = NULL;
@@ -437,7 +254,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)
437 XTranslateCoordinates (FRAME_X_DISPLAY (f), 254 XTranslateCoordinates (FRAME_X_DISPLAY (f),
438 255
439 /* From-window, to-window. */ 256 /* From-window, to-window. */
440 FRAME_X_DISPLAY_INFO (f)->root_window, 257 FRAME_DISPLAY_INFO (f)->root_window,
441 FRAME_X_WINDOW (f), 258 FRAME_X_WINDOW (f),
442 259
443 /* From-position, to-position. */ 260 /* From-position, to-position. */
@@ -456,7 +273,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)
456 XTranslateCoordinates (FRAME_X_DISPLAY (f), 273 XTranslateCoordinates (FRAME_X_DISPLAY (f),
457 274
458 /* From-window, to-window. */ 275 /* From-window, to-window. */
459 FRAME_X_DISPLAY_INFO (f)->root_window, 276 FRAME_DISPLAY_INFO (f)->root_window,
460 FRAME_OUTER_WINDOW (f), 277 FRAME_OUTER_WINDOW (f),
461 278
462 /* From-position, to-position. */ 279 /* From-position, to-position. */
@@ -577,7 +394,7 @@ x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color)
577#endif 394#endif
578 395
579 /* Return MONO_COLOR for monochrome frames. */ 396 /* Return MONO_COLOR for monochrome frames. */
580 if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) 397 if (FRAME_DISPLAY_INFO (f)->n_planes == 1)
581 return mono_color; 398 return mono_color;
582 399
583 /* x_defined_color is responsible for coping with failures 400 /* x_defined_color is responsible for coping with failures
@@ -770,7 +587,7 @@ make_invisible_cursor (struct frame *f)
770 Cursor c = 0; 587 Cursor c = 0;
771 588
772 x_catch_errors (dpy); 589 x_catch_errors (dpy);
773 pix = XCreateBitmapFromData (dpy, FRAME_X_DISPLAY_INFO (f)->root_window, 590 pix = XCreateBitmapFromData (dpy, FRAME_DISPLAY_INFO (f)->root_window,
774 no_data, 1, 1); 591 no_data, 1, 1);
775 if (! x_had_errors_p (dpy) && pix != None) 592 if (! x_had_errors_p (dpy) && pix != None)
776 { 593 {
@@ -895,8 +712,8 @@ x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
895 XDefineCursor (dpy, FRAME_X_WINDOW (f), 712 XDefineCursor (dpy, FRAME_X_WINDOW (f),
896 f->output_data.x->current_cursor = cursor); 713 f->output_data.x->current_cursor = cursor);
897 714
898 if (FRAME_X_DISPLAY_INFO (f)->invisible_cursor == 0) 715 if (FRAME_DISPLAY_INFO (f)->invisible_cursor == 0)
899 FRAME_X_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f); 716 FRAME_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f);
900 717
901 if (cursor != x->text_cursor 718 if (cursor != x->text_cursor
902 && x->text_cursor != 0) 719 && x->text_cursor != 0)
@@ -1031,7 +848,7 @@ x_set_border_pixel (struct frame *f, int pix)
1031 Note: this is done in two routines because of the way X10 works. 848 Note: this is done in two routines because of the way X10 works.
1032 849
1033 Note: under X11, this is normally the province of the window manager, 850 Note: under X11, this is normally the province of the window manager,
1034 and so emacs' border colors may be overridden. */ 851 and so emacs's border colors may be overridden. */
1035 852
1036static void 853static void
1037x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) 854x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
@@ -1201,7 +1018,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1201 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix); 1018 clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);
1202 } 1019 }
1203#endif /* not USE_X_TOOLKIT && not USE_GTK */ 1020#endif /* not USE_X_TOOLKIT && not USE_GTK */
1204 adjust_glyphs (f); 1021 adjust_frame_glyphs (f);
1205 run_window_configuration_change_hook (f); 1022 run_window_configuration_change_hook (f);
1206} 1023}
1207 1024
@@ -1215,8 +1032,11 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1215void 1032void
1216x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) 1033x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1217{ 1034{
1218 int delta, nlines, root_height; 1035 int nlines;
1036#if ! defined (USE_GTK)
1037 int delta, root_height;
1219 Lisp_Object root_window; 1038 Lisp_Object root_window;
1039#endif
1220 1040
1221 /* Treat tool bars like menu bars. */ 1041 /* Treat tool bars like menu bars. */
1222 if (FRAME_MINIBUF_ONLY_P (f)) 1042 if (FRAME_MINIBUF_ONLY_P (f))
@@ -1229,6 +1049,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1229 nlines = 0; 1049 nlines = 0;
1230 1050
1231#ifdef USE_GTK 1051#ifdef USE_GTK
1052
1232 FRAME_TOOL_BAR_LINES (f) = 0; 1053 FRAME_TOOL_BAR_LINES (f) = 0;
1233 if (nlines) 1054 if (nlines)
1234 { 1055 {
@@ -1245,8 +1066,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1245 FRAME_EXTERNAL_TOOL_BAR (f) = 0; 1066 FRAME_EXTERNAL_TOOL_BAR (f) = 0;
1246 } 1067 }
1247 1068
1248 return; 1069#else /* !USE_GTK */
1249#endif
1250 1070
1251 /* Make sure we redisplay all windows in this frame. */ 1071 /* Make sure we redisplay all windows in this frame. */
1252 ++windows_or_buffers_changed; 1072 ++windows_or_buffers_changed;
@@ -1264,7 +1084,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1264 1084
1265 FRAME_TOOL_BAR_LINES (f) = nlines; 1085 FRAME_TOOL_BAR_LINES (f) = nlines;
1266 resize_frame_windows (f, FRAME_LINES (f), 0); 1086 resize_frame_windows (f, FRAME_LINES (f), 0);
1267 adjust_glyphs (f); 1087 adjust_frame_glyphs (f);
1268 1088
1269 /* We also have to make sure that the internal border at the top of 1089 /* We also have to make sure that the internal border at the top of
1270 the frame, below the menu bar or tool bar, is redrawn when the 1090 the frame, below the menu bar or tool bar, is redrawn when the
@@ -1301,7 +1121,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
1301 } 1121 }
1302 1122
1303 run_window_configuration_change_hook (f); 1123 run_window_configuration_change_hook (f);
1304 1124#endif /* USE_GTK */
1305} 1125}
1306 1126
1307 1127
@@ -1486,7 +1306,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name)
1486 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp, 1306 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,
1487 &do_free_text_value); 1307 &do_free_text_value);
1488 text.encoding = (stringp ? XA_STRING 1308 text.encoding = (stringp ? XA_STRING
1489 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); 1309 : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
1490 text.format = 8; 1310 text.format = 8;
1491 text.nitems = bytes; 1311 text.nitems = bytes;
1492 if (text.nitems != bytes) 1312 if (text.nitems != bytes)
@@ -1503,7 +1323,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name)
1503 icon.value = x_encode_text (f->icon_name, coding_system, 0, 1323 icon.value = x_encode_text (f->icon_name, coding_system, 0,
1504 &bytes, &stringp, &do_free_icon_value); 1324 &bytes, &stringp, &do_free_icon_value);
1505 icon.encoding = (stringp ? XA_STRING 1325 icon.encoding = (stringp ? XA_STRING
1506 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); 1326 : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
1507 icon.format = 8; 1327 icon.format = 8;
1508 icon.nitems = bytes; 1328 icon.nitems = bytes;
1509 if (icon.nitems != bytes) 1329 if (icon.nitems != bytes)
@@ -1518,8 +1338,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name)
1518#else /* not USE_GTK */ 1338#else /* not USE_GTK */
1519 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text); 1339 XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
1520 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), 1340 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
1521 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name, 1341 FRAME_DISPLAY_INFO (f)->Xatom_net_wm_name,
1522 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, 1342 FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
1523 8, PropModeReplace, 1343 8, PropModeReplace,
1524 SDATA (encoded_name), 1344 SDATA (encoded_name),
1525 SBYTES (encoded_name)); 1345 SBYTES (encoded_name));
@@ -1527,8 +1347,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name)
1527 1347
1528 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon); 1348 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon);
1529 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), 1349 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
1530 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name, 1350 FRAME_DISPLAY_INFO (f)->Xatom_net_wm_icon_name,
1531 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, 1351 FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
1532 8, PropModeReplace, 1352 8, PropModeReplace,
1533 SDATA (encoded_icon_name), 1353 SDATA (encoded_icon_name),
1534 SBYTES (encoded_icon_name)); 1354 SBYTES (encoded_icon_name));
@@ -1575,10 +1395,10 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit)
1575 { 1395 {
1576 /* Check for no change needed in this very common case 1396 /* Check for no change needed in this very common case
1577 before we do any consing. */ 1397 before we do any consing. */
1578 if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name, 1398 if (!strcmp (FRAME_DISPLAY_INFO (f)->x_id_name,
1579 SSDATA (f->name))) 1399 SSDATA (f->name)))
1580 return; 1400 return;
1581 name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name); 1401 name = build_string (FRAME_DISPLAY_INFO (f)->x_id_name);
1582 } 1402 }
1583 else 1403 else
1584 CHECK_STRING (name); 1404 CHECK_STRING (name);
@@ -1648,9 +1468,8 @@ x_set_scroll_bar_default_width (struct frame *f)
1648 int minw = 16; 1468 int minw = 16;
1649#endif 1469#endif
1650 /* A minimum width of 14 doesn't look good for toolkit scroll bars. */ 1470 /* A minimum width of 14 doesn't look good for toolkit scroll bars. */
1651 int width = minw + 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM; 1471 FRAME_CONFIG_SCROLL_BAR_COLS (f) = (minw + wid - 1) / wid;
1652 FRAME_CONFIG_SCROLL_BAR_COLS (f) = (width + wid - 1) / wid; 1472 FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = minw;
1653 FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = width;
1654#else 1473#else
1655 /* Make the actual width at least 14 pixels and a multiple of a 1474 /* Make the actual width at least 14 pixels and a multiple of a
1656 character width. */ 1475 character width. */
@@ -1674,7 +1493,7 @@ x_default_scroll_bar_color_parameter (struct frame *f,
1674 const char *xprop, const char *xclass, 1493 const char *xprop, const char *xclass,
1675 int foreground_p) 1494 int foreground_p)
1676{ 1495{
1677 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1496 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1678 Lisp_Object tem; 1497 Lisp_Object tem;
1679 1498
1680 tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING); 1499 tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING);
@@ -1740,7 +1559,7 @@ hack_wm_protocols (struct frame *f, Widget widget)
1740 unsigned long bytes_after; 1559 unsigned long bytes_after;
1741 1560
1742 if ((XGetWindowProperty (dpy, w, 1561 if ((XGetWindowProperty (dpy, w,
1743 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, 1562 FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,
1744 (long)0, (long)100, False, XA_ATOM, 1563 (long)0, (long)100, False, XA_ATOM,
1745 &type, &format, &nitems, &bytes_after, 1564 &type, &format, &nitems, &bytes_after,
1746 &catoms) 1565 &catoms)
@@ -1752,13 +1571,13 @@ hack_wm_protocols (struct frame *f, Widget widget)
1752 { 1571 {
1753 nitems--; 1572 nitems--;
1754 if (atoms[nitems] 1573 if (atoms[nitems]
1755 == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window) 1574 == FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window)
1756 need_delete = 0; 1575 need_delete = 0;
1757 else if (atoms[nitems] 1576 else if (atoms[nitems]
1758 == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus) 1577 == FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus)
1759 need_focus = 0; 1578 need_focus = 0;
1760 else if (atoms[nitems] 1579 else if (atoms[nitems]
1761 == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself) 1580 == FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself)
1762 need_save = 0; 1581 need_save = 0;
1763 } 1582 }
1764 } 1583 }
@@ -1769,13 +1588,13 @@ hack_wm_protocols (struct frame *f, Widget widget)
1769 Atom props [10]; 1588 Atom props [10];
1770 int count = 0; 1589 int count = 0;
1771 if (need_delete) 1590 if (need_delete)
1772 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; 1591 props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window;
1773 if (need_focus) 1592 if (need_focus)
1774 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus; 1593 props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus;
1775 if (need_save) 1594 if (need_save)
1776 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; 1595 props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself;
1777 if (count) 1596 if (count)
1778 XChangeProperty (dpy, w, FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, 1597 XChangeProperty (dpy, w, FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,
1779 XA_ATOM, 32, PropModeAppend, 1598 XA_ATOM, 32, PropModeAppend,
1780 (unsigned char *) props, count); 1599 (unsigned char *) props, count);
1781 } 1600 }
@@ -1970,7 +1789,7 @@ xic_create_xfontset (struct frame *f)
1970 struct frame *cf = XFRAME (frame); 1789 struct frame *cf = XFRAME (frame);
1971 1790
1972 if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) 1791 if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf)
1973 && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) 1792 && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f)
1974 && FRAME_FONT (f) 1793 && FRAME_FONT (f)
1975 && FRAME_FONT (f)->pixel_size == pixel_size) 1794 && FRAME_FONT (f)->pixel_size == pixel_size)
1976 { 1795 {
@@ -2069,7 +1888,7 @@ xic_free_xfontset (struct frame *f)
2069 { 1888 {
2070 struct frame *cf = XFRAME (frame); 1889 struct frame *cf = XFRAME (frame);
2071 if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) 1890 if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf)
2072 && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) 1891 && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f)
2073 && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f)) 1892 && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f))
2074 { 1893 {
2075 shared_p = 1; 1894 shared_p = 1;
@@ -2314,7 +2133,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)
2314 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++; 2133 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;
2315 XtSetArg (al[ac], XtNborderWidth, f->border_width); ac++; 2134 XtSetArg (al[ac], XtNborderWidth, f->border_width); ac++;
2316 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; 2135 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
2317 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; 2136 XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;
2318 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; 2137 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
2319 shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS, 2138 shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS,
2320 applicationShellWidgetClass, 2139 applicationShellWidgetClass,
@@ -2329,7 +2148,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)
2329 2148
2330 ac = 0; 2149 ac = 0;
2331 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; 2150 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
2332 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; 2151 XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;
2333 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; 2152 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
2334 XtSetArg (al[ac], XtNborderWidth, 0); ac++; 2153 XtSetArg (al[ac], XtNborderWidth, 0); ac++;
2335 XtSetValues (pane_widget, al, ac); 2154 XtSetValues (pane_widget, al, ac);
@@ -2345,7 +2164,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)
2345 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; 2164 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++;
2346 XtSetArg (al[ac], XtNemacsFrame, f); ac++; 2165 XtSetArg (al[ac], XtNemacsFrame, f); ac++;
2347 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; 2166 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
2348 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; 2167 XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;
2349 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; 2168 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
2350 XtSetArg (al[ac], XtNborderWidth, 0); ac++; 2169 XtSetArg (al[ac], XtNborderWidth, 0); ac++;
2351 frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget, 2170 frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget,
@@ -2471,7 +2290,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)
2471 be initialized to something relevant to the time we created the window. 2290 be initialized to something relevant to the time we created the window.
2472 */ 2291 */
2473 XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget), 2292 XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget),
2474 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, 2293 FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,
2475 XA_ATOM, 32, PropModeAppend, NULL, 0); 2294 XA_ATOM, 32, PropModeAppend, NULL, 0);
2476 2295
2477 /* Make all the standard events reach the Emacs frame. */ 2296 /* Make all the standard events reach the Emacs frame. */
@@ -2631,8 +2450,8 @@ x_window (struct frame *f)
2631 /* Request "save yourself" and "delete window" commands from wm. */ 2450 /* Request "save yourself" and "delete window" commands from wm. */
2632 { 2451 {
2633 Atom protocols[2]; 2452 Atom protocols[2];
2634 protocols[0] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; 2453 protocols[0] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window;
2635 protocols[1] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; 2454 protocols[1] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself;
2636 XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2); 2455 XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2);
2637 } 2456 }
2638 2457
@@ -2692,7 +2511,7 @@ x_icon (struct frame *f, Lisp_Object parms)
2692{ 2511{
2693 Lisp_Object icon_x, icon_y; 2512 Lisp_Object icon_x, icon_y;
2694#if 0 2513#if 0
2695 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2514 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2696#endif 2515#endif
2697 2516
2698 /* Set the position of the icon. Note that twm groups all 2517 /* Set the position of the icon. Note that twm groups all
@@ -2776,7 +2595,7 @@ x_make_gc (struct frame *f)
2776 this must be done on a per-frame basis. */ 2595 this must be done on a per-frame basis. */
2777 f->output_data.x->border_tile 2596 f->output_data.x->border_tile
2778 = (XCreatePixmapFromBitmapData 2597 = (XCreatePixmapFromBitmapData
2779 (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, 2598 (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window,
2780 gray_bits, gray_width, gray_height, 2599 gray_bits, gray_width, gray_height,
2781 FRAME_FOREGROUND_PIXEL (f), 2600 FRAME_FOREGROUND_PIXEL (f),
2782 FRAME_BACKGROUND_PIXEL (f), 2601 FRAME_BACKGROUND_PIXEL (f),
@@ -2842,7 +2661,7 @@ unwind_create_frame (Lisp_Object frame)
2842 if (NILP (Fmemq (frame, Vframe_list))) 2661 if (NILP (Fmemq (frame, Vframe_list)))
2843 { 2662 {
2844#if defined GLYPH_DEBUG && defined ENABLE_CHECKING 2663#if defined GLYPH_DEBUG && defined ENABLE_CHECKING
2845 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2664 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2846#endif 2665#endif
2847 2666
2848 x_free_frame_resources (f); 2667 x_free_frame_resources (f);
@@ -2874,7 +2693,7 @@ unwind_create_frame_1 (Lisp_Object val)
2874static void 2693static void
2875x_default_font_parameter (struct frame *f, Lisp_Object parms) 2694x_default_font_parameter (struct frame *f, Lisp_Object parms)
2876{ 2695{
2877 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2696 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2878 Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL, 2697 Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
2879 RES_TYPE_STRING); 2698 RES_TYPE_STRING);
2880 Lisp_Object font = Qnil; 2699 Lisp_Object font = Qnil;
@@ -3068,9 +2887,9 @@ This function is an internal primitive--use `make-frame' instead. */)
3068 if (! STRINGP (f->icon_name)) 2887 if (! STRINGP (f->icon_name))
3069 fset_icon_name (f, Qnil); 2888 fset_icon_name (f, Qnil);
3070 2889
3071 FRAME_X_DISPLAY_INFO (f) = dpyinfo; 2890 FRAME_DISPLAY_INFO (f) = dpyinfo;
3072 2891
3073 /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe. */ 2892 /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */
3074 record_unwind_protect (do_unwind_create_frame, frame); 2893 record_unwind_protect (do_unwind_create_frame, frame);
3075 2894
3076 /* These colors will be set anyway later, but it's important 2895 /* These colors will be set anyway later, but it's important
@@ -3115,7 +2934,7 @@ This function is an internal primitive--use `make-frame' instead. */)
3115 } 2934 }
3116 else 2935 else
3117 { 2936 {
3118 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; 2937 f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
3119 f->output_data.x->explicit_parent = 0; 2938 f->output_data.x->explicit_parent = 0;
3120 } 2939 }
3121 2940
@@ -3286,7 +3105,7 @@ This function is an internal primitive--use `make-frame' instead. */)
3286 3105
3287 /* Now consider the frame official. */ 3106 /* Now consider the frame official. */
3288 f->terminal->reference_count++; 3107 f->terminal->reference_count++;
3289 FRAME_X_DISPLAY_INFO (f)->reference_count++; 3108 FRAME_DISPLAY_INFO (f)->reference_count++;
3290 Vframe_list = Fcons (frame, Vframe_list); 3109 Vframe_list = Fcons (frame, Vframe_list);
3291 3110
3292 /* We need to do this after creating the X window, so that the 3111 /* We need to do this after creating the X window, so that the
@@ -3411,7 +3230,7 @@ This function is an internal primitive--use `make-frame' instead. */)
3411Lisp_Object 3230Lisp_Object
3412x_get_focus_frame (struct frame *frame) 3231x_get_focus_frame (struct frame *frame)
3413{ 3232{
3414 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame); 3233 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
3415 Lisp_Object xfocus; 3234 Lisp_Object xfocus;
3416 if (! dpyinfo->x_focus_frame) 3235 if (! dpyinfo->x_focus_frame)
3417 return Qnil; 3236 return Qnil;
@@ -3430,12 +3249,9 @@ x_get_focus_frame (struct frame *frame)
3430 policy. But I think it's okay to use when it's clearly done 3249 policy. But I think it's okay to use when it's clearly done
3431 following a user-command. */ 3250 following a user-command. */
3432 3251
3433DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, 3252void
3434 doc: /* Set the input focus to FRAME. 3253x_focus_frame (struct frame *f)
3435FRAME nil means use the selected frame. */)
3436 (Lisp_Object frame)
3437{ 3254{
3438 struct frame *f = decode_window_system_frame (frame);
3439 Display *dpy = FRAME_X_DISPLAY (f); 3255 Display *dpy = FRAME_X_DISPLAY (f);
3440 3256
3441 block_input (); 3257 block_input ();
@@ -3457,8 +3273,6 @@ FRAME nil means use the selected frame. */)
3457 3273
3458 x_uncatch_errors (); 3274 x_uncatch_errors ();
3459 unblock_input (); 3275 unblock_input ();
3460
3461 return Qnil;
3462} 3276}
3463 3277
3464 3278
@@ -3939,7 +3753,7 @@ x_make_monitor_attribute_list (struct MonitorInfo *monitors,
3939 { 3753 {
3940 struct frame *f = XFRAME (frame); 3754 struct frame *f = XFRAME (frame);
3941 3755
3942 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo 3756 if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo
3943 && !EQ (frame, tip_frame)) 3757 && !EQ (frame, tip_frame))
3944 { 3758 {
3945 int i = x_get_monitor_for_frame (f, monitors, n_monitors); 3759 int i = x_get_monitor_for_frame (f, monitors, n_monitors);
@@ -4135,6 +3949,8 @@ x_get_monitor_attributes (struct x_display_info *dpyinfo)
4135 Lisp_Object attributes_list = Qnil; 3949 Lisp_Object attributes_list = Qnil;
4136 Display *dpy = dpyinfo->display; 3950 Display *dpy = dpyinfo->display;
4137 3951
3952 (void) dpy; /* Suppress unused variable warning. */
3953
4138#ifdef HAVE_XRANDR 3954#ifdef HAVE_XRANDR
4139 int xrr_event_base, xrr_error_base; 3955 int xrr_event_base, xrr_error_base;
4140 bool xrr_ok = false; 3956 bool xrr_ok = false;
@@ -4219,7 +4035,7 @@ Internal use only, use `display-monitor-attributes-list' instead. */)
4219 { 4035 {
4220 struct frame *f = XFRAME (frame); 4036 struct frame *f = XFRAME (frame);
4221 4037
4222 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo 4038 if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo
4223 && !EQ (frame, tip_frame)) 4039 && !EQ (frame, tip_frame))
4224 { 4040 {
4225 GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f)); 4041 GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f));
@@ -4431,11 +4247,6 @@ x_display_info_for_name (Lisp_Object name)
4431 4247
4432 CHECK_STRING (name); 4248 CHECK_STRING (name);
4433 4249
4434#if 0
4435 if (! EQ (Vinitial_window_system, intern ("x")))
4436 error ("Not using X Windows"); /* That doesn't stop us anymore. */
4437#endif
4438
4439 for (dpyinfo = x_display_list, names = x_display_name_list; 4250 for (dpyinfo = x_display_list, names = x_display_name_list;
4440 dpyinfo; 4251 dpyinfo;
4441 dpyinfo = dpyinfo->next, names = XCDR (names)) 4252 dpyinfo = dpyinfo->next, names = XCDR (names))
@@ -4479,11 +4290,6 @@ terminate Emacs if we can't open the connection.
4479 if (! NILP (xrm_string)) 4290 if (! NILP (xrm_string))
4480 CHECK_STRING (xrm_string); 4291 CHECK_STRING (xrm_string);
4481 4292
4482#if 0
4483 if (! EQ (Vinitial_window_system, intern ("x")))
4484 error ("Not using X Windows"); /* That doesn't stop us anymore. */
4485#endif
4486
4487 xrm_option = NILP (xrm_string) ? 0 : SSDATA (xrm_string); 4293 xrm_option = NILP (xrm_string) ? 0 : SSDATA (xrm_string);
4488 4294
4489 validate_x_resource_name (); 4295 validate_x_resource_name ();
@@ -4730,7 +4536,7 @@ no value of TYPE (always string in the MS Windows case). */)
4730 { 4536 {
4731 CONS_TO_INTEGER (source, Window, target_window); 4537 CONS_TO_INTEGER (source, Window, target_window);
4732 if (! target_window) 4538 if (! target_window)
4733 target_window = FRAME_X_DISPLAY_INFO (f)->root_window; 4539 target_window = FRAME_DISPLAY_INFO (f)->root_window;
4734 } 4540 }
4735 4541
4736 block_input (); 4542 block_input ();
@@ -5026,8 +4832,8 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5026 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1; 4832 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
5027#endif /* USE_TOOLKIT_SCROLL_BARS */ 4833#endif /* USE_TOOLKIT_SCROLL_BARS */
5028 fset_icon_name (f, Qnil); 4834 fset_icon_name (f, Qnil);
5029 FRAME_X_DISPLAY_INFO (f) = dpyinfo; 4835 FRAME_DISPLAY_INFO (f) = dpyinfo;
5030 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; 4836 f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
5031 f->output_data.x->explicit_parent = 0; 4837 f->output_data.x->explicit_parent = 0;
5032 4838
5033 /* These colors will be set anyway later, but it's important 4839 /* These colors will be set anyway later, but it's important
@@ -5141,14 +4947,14 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5141 happen. */ 4947 happen. */
5142 init_frame_faces (f); 4948 init_frame_faces (f);
5143 4949
5144 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; 4950 f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
5145 4951
5146 x_figure_window_size (f, parms, 0); 4952 x_figure_window_size (f, parms, 0);
5147 4953
5148 { 4954 {
5149 XSetWindowAttributes attrs; 4955 XSetWindowAttributes attrs;
5150 unsigned long mask; 4956 unsigned long mask;
5151 Atom type = FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip; 4957 Atom type = FRAME_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip;
5152 4958
5153 block_input (); 4959 block_input ();
5154 mask = CWBackPixel | CWOverrideRedirect | CWEventMask; 4960 mask = CWBackPixel | CWOverrideRedirect | CWEventMask;
@@ -5166,7 +4972,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5166 tip_window 4972 tip_window
5167 = FRAME_X_WINDOW (f) 4973 = FRAME_X_WINDOW (f)
5168 = XCreateWindow (FRAME_X_DISPLAY (f), 4974 = XCreateWindow (FRAME_X_DISPLAY (f),
5169 FRAME_X_DISPLAY_INFO (f)->root_window, 4975 FRAME_DISPLAY_INFO (f)->root_window,
5170 /* x, y, width, height */ 4976 /* x, y, width, height */
5171 0, 0, 1, 1, 4977 0, 0, 1, 1,
5172 /* Border. */ 4978 /* Border. */
@@ -5174,7 +4980,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5174 CopyFromParent, InputOutput, CopyFromParent, 4980 CopyFromParent, InputOutput, CopyFromParent,
5175 mask, &attrs); 4981 mask, &attrs);
5176 XChangeProperty (FRAME_X_DISPLAY (f), tip_window, 4982 XChangeProperty (FRAME_X_DISPLAY (f), tip_window,
5177 FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type, 4983 FRAME_DISPLAY_INFO (f)->Xatom_net_window_type,
5178 XA_ATOM, 32, PropModeReplace, 4984 XA_ATOM, 32, PropModeReplace,
5179 (unsigned char *)&type, 1); 4985 (unsigned char *)&type, 1);
5180 unblock_input (); 4986 unblock_input ();
@@ -5209,10 +5015,10 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5209 { 5015 {
5210 Lisp_Object disptype; 5016 Lisp_Object disptype;
5211 5017
5212 if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) 5018 if (FRAME_DISPLAY_INFO (f)->n_planes == 1)
5213 disptype = intern ("mono"); 5019 disptype = intern ("mono");
5214 else if (FRAME_X_DISPLAY_INFO (f)->visual->class == GrayScale 5020 else if (FRAME_DISPLAY_INFO (f)->visual->class == GrayScale
5215 || FRAME_X_DISPLAY_INFO (f)->visual->class == StaticGray) 5021 || FRAME_DISPLAY_INFO (f)->visual->class == StaticGray)
5216 disptype = intern ("grayscale"); 5022 disptype = intern ("grayscale");
5217 else 5023 else
5218 disptype = intern ("color"); 5024 disptype = intern ("color");
@@ -5246,7 +5052,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
5246 5052
5247 /* Now that the frame will be official, it counts as a reference to 5053 /* Now that the frame will be official, it counts as a reference to
5248 its display and terminal. */ 5054 its display and terminal. */
5249 FRAME_X_DISPLAY_INFO (f)->reference_count++; 5055 FRAME_DISPLAY_INFO (f)->reference_count++;
5250 f->terminal->reference_count++; 5056 f->terminal->reference_count++;
5251 5057
5252 /* It is now ok to make the frame official even if we get an error 5058 /* It is now ok to make the frame official even if we get an error
@@ -5290,7 +5096,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object
5290 if (!INTEGERP (left) || !INTEGERP (top)) 5096 if (!INTEGERP (left) || !INTEGERP (top))
5291 { 5097 {
5292 block_input (); 5098 block_input ();
5293 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, 5099 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window,
5294 &root, &child, root_x, root_y, &win_x, &win_y, &pmask); 5100 &root, &child, root_x, root_y, &win_x, &win_y, &pmask);
5295 unblock_input (); 5101 unblock_input ();
5296 } 5102 }
@@ -5300,7 +5106,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object
5300 else if (*root_y + XINT (dy) <= 0) 5106 else if (*root_y + XINT (dy) <= 0)
5301 *root_y = 0; /* Can happen for negative dy */ 5107 *root_y = 0; /* Can happen for negative dy */
5302 else if (*root_y + XINT (dy) + height 5108 else if (*root_y + XINT (dy) + height
5303 <= x_display_pixel_height (FRAME_X_DISPLAY_INFO (f))) 5109 <= x_display_pixel_height (FRAME_DISPLAY_INFO (f)))
5304 /* It fits below the pointer */ 5110 /* It fits below the pointer */
5305 *root_y += XINT (dy); 5111 *root_y += XINT (dy);
5306 else if (height + XINT (dy) <= *root_y) 5112 else if (height + XINT (dy) <= *root_y)
@@ -5315,7 +5121,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object
5315 else if (*root_x + XINT (dx) <= 0) 5121 else if (*root_x + XINT (dx) <= 0)
5316 *root_x = 0; /* Can happen for negative dx */ 5122 *root_x = 0; /* Can happen for negative dx */
5317 else if (*root_x + XINT (dx) + width 5123 else if (*root_x + XINT (dx) + width
5318 <= x_display_pixel_width (FRAME_X_DISPLAY_INFO (f))) 5124 <= x_display_pixel_width (FRAME_DISPLAY_INFO (f)))
5319 /* It fits to the right of the pointer. */ 5125 /* It fits to the right of the pointer. */
5320 *root_x += XINT (dx); 5126 *root_x += XINT (dx);
5321 else if (width + XINT (dx) <= *root_x) 5127 else if (width + XINT (dx) <= *root_x)
@@ -5464,7 +5270,7 @@ Text larger than the specified size is clipped. */)
5464 5270
5465 /* Create a frame for the tooltip, and record it in the global 5271 /* Create a frame for the tooltip, and record it in the global
5466 variable tip_frame. */ 5272 variable tip_frame. */
5467 frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms, string); 5273 frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
5468 f = XFRAME (frame); 5274 f = XFRAME (frame);
5469 5275
5470 /* Set up the frame's root window. */ 5276 /* Set up the frame's root window. */
@@ -5486,7 +5292,7 @@ Text larger than the specified size is clipped. */)
5486 } 5292 }
5487 5293
5488 FRAME_TOTAL_COLS (f) = w->total_cols; 5294 FRAME_TOTAL_COLS (f) = w->total_cols;
5489 adjust_glyphs (f); 5295 adjust_frame_glyphs (f);
5490 w->pseudo_window_p = 1; 5296 w->pseudo_window_p = 1;
5491 5297
5492 /* Display the tooltip text in a temporary buffer. */ 5298 /* Display the tooltip text in a temporary buffer. */
@@ -5554,7 +5360,7 @@ Text larger than the specified size is clipped. */)
5554 width /= WINDOW_FRAME_COLUMN_WIDTH (w); 5360 width /= WINDOW_FRAME_COLUMN_WIDTH (w);
5555 w->total_cols = width; 5361 w->total_cols = width;
5556 FRAME_TOTAL_COLS (f) = width; 5362 FRAME_TOTAL_COLS (f) = width;
5557 adjust_glyphs (f); 5363 adjust_frame_glyphs (f);
5558 clear_glyph_matrix (w->desired_matrix); 5364 clear_glyph_matrix (w->desired_matrix);
5559 clear_glyph_matrix (w->current_matrix); 5365 clear_glyph_matrix (w->current_matrix);
5560 try_window (FRAME_ROOT_WINDOW (f), pos, 0); 5366 try_window (FRAME_ROOT_WINDOW (f), pos, 0);
@@ -5664,7 +5470,7 @@ Value is t if tooltip was open, nil otherwise. */)
5664 struct frame *f = SELECTED_FRAME (); 5470 struct frame *f = SELECTED_FRAME ();
5665 w = f->output_data.x->menubar_widget; 5471 w = f->output_data.x->menubar_widget;
5666 5472
5667 if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen) 5473 if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
5668 && w != NULL) 5474 && w != NULL)
5669 { 5475 {
5670 block_input (); 5476 block_input ();
@@ -6296,7 +6102,8 @@ Otherwise use Emacs own tooltip implementation.
6296When using Gtk+ tooltips, the tooltip face is not used. */); 6102When using Gtk+ tooltips, the tooltip face is not used. */);
6297 x_gtk_use_system_tooltips = 1; 6103 x_gtk_use_system_tooltips = 1;
6298 6104
6299 Fprovide (intern_c_string ("x"), Qnil); 6105 /* Tell Emacs about this window system. */
6106 Fprovide (Qx, Qnil);
6300 6107
6301#ifdef USE_X_TOOLKIT 6108#ifdef USE_X_TOOLKIT
6302 Fprovide (intern_c_string ("x-toolkit"), Qnil); 6109 Fprovide (intern_c_string ("x-toolkit"), Qnil);
@@ -6357,7 +6164,6 @@ When using Gtk+ tooltips, the tooltip face is not used. */);
6357 defsubr (&Sx_close_connection); 6164 defsubr (&Sx_close_connection);
6358 defsubr (&Sx_display_list); 6165 defsubr (&Sx_display_list);
6359 defsubr (&Sx_synchronize); 6166 defsubr (&Sx_synchronize);
6360 defsubr (&Sx_focus_frame);
6361 defsubr (&Sx_backspace_delete_keys_p); 6167 defsubr (&Sx_backspace_delete_keys_p);
6362 6168
6363 defsubr (&Sx_show_tip); 6169 defsubr (&Sx_show_tip);
@@ -6379,5 +6185,3 @@ When using Gtk+ tooltips, the tooltip face is not used. */);
6379 defsubr (&Sx_select_font); 6185 defsubr (&Sx_select_font);
6380#endif 6186#endif
6381} 6187}
6382
6383#endif /* HAVE_X_WINDOWS */
diff --git a/src/xfont.c b/src/xfont.c
index 1aface6f972..c5b8db3830c 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -154,7 +154,7 @@ struct font_driver xfont_driver =
154static Lisp_Object 154static Lisp_Object
155xfont_get_cache (struct frame *f) 155xfont_get_cache (struct frame *f)
156{ 156{
157 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 157 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
158 158
159 return (dpyinfo->name_list_element); 159 return (dpyinfo->name_list_element);
160} 160}
@@ -384,7 +384,7 @@ xfont_list_pattern (Display *display, const char *pattern,
384 if (num_fonts > 0) 384 if (num_fonts > 0)
385 { 385 {
386 char **indices = alloca (sizeof (char *) * num_fonts); 386 char **indices = alloca (sizeof (char *) * num_fonts);
387 Lisp_Object *props = XVECTOR (xfont_scratch_props)->contents; 387 Lisp_Object *props = XVECTOR (xfont_scratch_props)->u.contents;
388 Lisp_Object scripts = Qnil; 388 Lisp_Object scripts = Qnil;
389 389
390 for (i = 0; i < ASIZE (xfont_scratch_props); i++) 390 for (i = 0; i < ASIZE (xfont_scratch_props); i++)
@@ -488,7 +488,7 @@ xfont_list_pattern (Display *display, const char *pattern,
488static Lisp_Object 488static Lisp_Object
489xfont_list (struct frame *f, Lisp_Object spec) 489xfont_list (struct frame *f, Lisp_Object spec)
490{ 490{
491 Display *display = FRAME_X_DISPLAY_INFO (f)->display; 491 Display *display = FRAME_DISPLAY_INFO (f)->display;
492 Lisp_Object registry, list, val, extra, script; 492 Lisp_Object registry, list, val, extra, script;
493 int len; 493 int len;
494 /* Large enough to contain the longest XLFD (255 bytes) in UTF-8. */ 494 /* Large enough to contain the longest XLFD (255 bytes) in UTF-8. */
@@ -566,7 +566,7 @@ xfont_list (struct frame *f, Lisp_Object spec)
566static Lisp_Object 566static Lisp_Object
567xfont_match (struct frame *f, Lisp_Object spec) 567xfont_match (struct frame *f, Lisp_Object spec)
568{ 568{
569 Display *display = FRAME_X_DISPLAY_INFO (f)->display; 569 Display *display = FRAME_DISPLAY_INFO (f)->display;
570 Lisp_Object extra, val, entity; 570 Lisp_Object extra, val, entity;
571 char name[512]; 571 char name[512];
572 XFontStruct *xfont; 572 XFontStruct *xfont;
@@ -620,7 +620,7 @@ xfont_match (struct frame *f, Lisp_Object spec)
620static Lisp_Object 620static Lisp_Object
621xfont_list_family (struct frame *f) 621xfont_list_family (struct frame *f)
622{ 622{
623 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 623 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
624 char **names; 624 char **names;
625 int num_fonts, i; 625 int num_fonts, i;
626 Lisp_Object list; 626 Lisp_Object list;
@@ -676,7 +676,7 @@ xfont_list_family (struct frame *f)
676static Lisp_Object 676static Lisp_Object
677xfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 677xfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
678{ 678{
679 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 679 Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
680 Display *display = dpyinfo->display; 680 Display *display = dpyinfo->display;
681 char name[512]; 681 char name[512];
682 int len; 682 int len;
diff --git a/src/xmenu.c b/src/xmenu.c
index 5d1f44e0f5a..054a52e7760 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -498,7 +498,7 @@ If FRAME is nil or not given, use the selected frame. */)
498 memset (&ev, 0, sizeof ev); 498 memset (&ev, 0, sizeof ev);
499 ev.xbutton.display = FRAME_X_DISPLAY (f); 499 ev.xbutton.display = FRAME_X_DISPLAY (f);
500 ev.xbutton.window = XtWindow (menubar); 500 ev.xbutton.window = XtWindow (menubar);
501 ev.xbutton.root = FRAME_X_DISPLAY_INFO (f)->root_window; 501 ev.xbutton.root = FRAME_DISPLAY_INFO (f)->root_window;
502 ev.xbutton.time = XtLastTimestampProcessed (FRAME_X_DISPLAY (f)); 502 ev.xbutton.time = XtLastTimestampProcessed (FRAME_X_DISPLAY (f));
503 ev.xbutton.button = Button1; 503 ev.xbutton.button = Button1;
504 ev.xbutton.x = ev.xbutton.y = FRAME_MENUBAR_HEIGHT (f) / 2; 504 ev.xbutton.x = ev.xbutton.y = FRAME_MENUBAR_HEIGHT (f) / 2;
@@ -990,7 +990,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
990 990
991 /* Save the frame's previous menu bar contents data. */ 991 /* Save the frame's previous menu bar contents data. */
992 if (previous_menu_items_used) 992 if (previous_menu_items_used)
993 memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents, 993 memcpy (previous_items, XVECTOR (f->menu_bar_vector)->u.contents,
994 previous_menu_items_used * word_size); 994 previous_menu_items_used * word_size);
995 995
996 /* Fill in menu_items with the current menu bar contents. 996 /* Fill in menu_items with the current menu bar contents.
@@ -1367,7 +1367,7 @@ menu_position_func (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer
1367{ 1367{
1368 struct next_popup_x_y *data = user_data; 1368 struct next_popup_x_y *data = user_data;
1369 GtkRequisition req; 1369 GtkRequisition req;
1370 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (data->f); 1370 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (data->f);
1371 int disp_width = x_display_pixel_width (dpyinfo); 1371 int disp_width = x_display_pixel_width (dpyinfo);
1372 int disp_height = x_display_pixel_height (dpyinfo); 1372 int disp_height = x_display_pixel_height (dpyinfo);
1373 1373
@@ -1449,7 +1449,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, int x, int
1449 if (for_click) 1449 if (for_click)
1450 { 1450 {
1451 for (i = 0; i < 5; i++) 1451 for (i = 0; i < 5; i++)
1452 if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) 1452 if (FRAME_DISPLAY_INFO (f)->grabbed & (1 << i))
1453 break; 1453 break;
1454 } 1454 }
1455 1455
@@ -1474,7 +1474,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, int x, int
1474 1474
1475 /* Must reset this manually because the button release event is not passed 1475 /* Must reset this manually because the button release event is not passed
1476 to Emacs event loop. */ 1476 to Emacs event loop. */
1477 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 1477 FRAME_DISPLAY_INFO (f)->grabbed = 0;
1478} 1478}
1479 1479
1480#else /* not USE_GTK */ 1480#else /* not USE_GTK */
@@ -1543,7 +1543,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
1543 event->send_event = 0; 1543 event->send_event = 0;
1544 event->display = FRAME_X_DISPLAY (f); 1544 event->display = FRAME_X_DISPLAY (f);
1545 event->time = CurrentTime; 1545 event->time = CurrentTime;
1546 event->root = FRAME_X_DISPLAY_INFO (f)->root_window; 1546 event->root = FRAME_DISPLAY_INFO (f)->root_window;
1547 event->window = event->subwindow = event->root; 1547 event->window = event->subwindow = event->root;
1548 event->x = x; 1548 event->x = x;
1549 event->y = y; 1549 event->y = y;
@@ -1558,7 +1558,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
1558 event->state = 0; 1558 event->state = 0;
1559 event->button = 0; 1559 event->button = 0;
1560 for (i = 0; i < 5; i++) 1560 for (i = 0; i < 5; i++)
1561 if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) 1561 if (FRAME_DISPLAY_INFO (f)->grabbed & (1 << i))
1562 event->button = i; 1562 event->button = i;
1563 1563
1564 /* Don't allow any geometry request from the user. */ 1564 /* Don't allow any geometry request from the user. */
@@ -1578,7 +1578,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
1578 make_number (menu_id & ~(-1 << (fact))))); 1578 make_number (menu_id & ~(-1 << (fact)))));
1579 1579
1580 /* Process events that apply to the menu. */ 1580 /* Process events that apply to the menu. */
1581 popup_get_selection (0, FRAME_X_DISPLAY_INFO (f), menu_id, 1); 1581 popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, 1);
1582 1582
1583 unbind_to (specpdl_count, Qnil); 1583 unbind_to (specpdl_count, Qnil);
1584 } 1584 }
@@ -1969,7 +1969,7 @@ create_and_show_dialog (struct frame *f, widget_value *first_wv)
1969 Fcons (make_number (dialog_id >> (fact)), 1969 Fcons (make_number (dialog_id >> (fact)),
1970 make_number (dialog_id & ~(-1 << (fact))))); 1970 make_number (dialog_id & ~(-1 << (fact)))));
1971 1971
1972 popup_get_selection (0, FRAME_X_DISPLAY_INFO (f), dialog_id, 1); 1972 popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, 1);
1973 1973
1974 unbind_to (count, Qnil); 1974 unbind_to (count, Qnil);
1975 } 1975 }
@@ -2194,7 +2194,7 @@ menu_help_callback (char const *help_string, int pane, int item)
2194 Lisp_Object pane_name; 2194 Lisp_Object pane_name;
2195 Lisp_Object menu_object; 2195 Lisp_Object menu_object;
2196 2196
2197 first_item = XVECTOR (menu_items)->contents; 2197 first_item = XVECTOR (menu_items)->u.contents;
2198 if (EQ (first_item[0], Qt)) 2198 if (EQ (first_item[0], Qt))
2199 pane_name = first_item[MENU_ITEMS_PANE_NAME]; 2199 pane_name = first_item[MENU_ITEMS_PANE_NAME];
2200 else if (EQ (first_item[0], Qquote)) 2200 else if (EQ (first_item[0], Qquote))
@@ -2225,13 +2225,13 @@ pop_down_menu (Lisp_Object arg)
2225#ifdef HAVE_X_WINDOWS 2225#ifdef HAVE_X_WINDOWS
2226 /* Assume the mouse has moved out of the X window. 2226 /* Assume the mouse has moved out of the X window.
2227 If it has actually moved in, we will get an EnterNotify. */ 2227 If it has actually moved in, we will get an EnterNotify. */
2228 x_mouse_leave (FRAME_X_DISPLAY_INFO (f)); 2228 x_mouse_leave (FRAME_DISPLAY_INFO (f));
2229 2229
2230 /* State that no mouse buttons are now held. 2230 /* State that no mouse buttons are now held.
2231 (The oldXMenu code doesn't track this info for us.) 2231 (The oldXMenu code doesn't track this info for us.)
2232 That is not necessarily true, but the fiction leads to reasonable 2232 That is not necessarily true, but the fiction leads to reasonable
2233 results, and it is a pain to ask which are actually held now. */ 2233 results, and it is a pain to ask which are actually held now. */
2234 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; 2234 FRAME_DISPLAY_INFO (f)->grabbed = 0;
2235 2235
2236#endif /* HAVE_X_WINDOWS */ 2236#endif /* HAVE_X_WINDOWS */
2237 2237
diff --git a/src/xrdb.c b/src/xrdb.c
index 60dcdae080d..52988f0818a 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -48,10 +48,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
48#include "keyboard.h" 48#include "keyboard.h"
49#endif 49#endif
50 50
51char *x_get_string_resource (XrmDatabase rdb, const char *name,
52 const char *class);
53
54
55/* X file search path processing. */ 51/* X file search path processing. */
56 52
57 53
diff --git a/src/xselect.c b/src/xselect.c
index e5f2e214fba..5eb263d8d0c 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -318,7 +318,7 @@ x_own_selection (Lisp_Object selection_name, Lisp_Object selection_value,
318{ 318{
319 struct frame *f = XFRAME (frame); 319 struct frame *f = XFRAME (frame);
320 Window selecting_window = FRAME_X_WINDOW (f); 320 Window selecting_window = FRAME_X_WINDOW (f);
321 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 321 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
322 Display *display = dpyinfo->display; 322 Display *display = dpyinfo->display;
323 Time timestamp = last_event_timestamp; 323 Time timestamp = last_event_timestamp;
324 Atom selection_atom = symbol_to_x_atom (dpyinfo, selection_name); 324 Atom selection_atom = symbol_to_x_atom (dpyinfo, selection_name);
@@ -997,7 +997,7 @@ x_clear_frame_selections (struct frame *f)
997{ 997{
998 Lisp_Object frame; 998 Lisp_Object frame;
999 Lisp_Object rest; 999 Lisp_Object rest;
1000 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1000 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1001 struct terminal *t = dpyinfo->terminal; 1001 struct terminal *t = dpyinfo->terminal;
1002 1002
1003 XSETFRAME (frame, f); 1003 XSETFRAME (frame, f);
@@ -1141,7 +1141,7 @@ wait_for_property_change (struct prop_location *location)
1141/* Called from XTread_socket in response to a PropertyNotify event. */ 1141/* Called from XTread_socket in response to a PropertyNotify event. */
1142 1142
1143void 1143void
1144x_handle_property_notify (XPropertyEvent *event) 1144x_handle_property_notify (const XPropertyEvent *event)
1145{ 1145{
1146 struct prop_location *rest; 1146 struct prop_location *rest;
1147 1147
@@ -1185,7 +1185,7 @@ x_get_foreign_selection (Lisp_Object selection_symbol, Lisp_Object target_type,
1185 Lisp_Object time_stamp, Lisp_Object frame) 1185 Lisp_Object time_stamp, Lisp_Object frame)
1186{ 1186{
1187 struct frame *f = XFRAME (frame); 1187 struct frame *f = XFRAME (frame);
1188 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1188 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1189 Display *display = dpyinfo->display; 1189 Display *display = dpyinfo->display;
1190 Window requestor_window = FRAME_X_WINDOW (f); 1190 Window requestor_window = FRAME_X_WINDOW (f);
1191 Time requestor_time = last_event_timestamp; 1191 Time requestor_time = last_event_timestamp;
@@ -1888,7 +1888,7 @@ clean_local_selection_data (Lisp_Object obj)
1888 We store t there if the reply is successful, lambda if not. */ 1888 We store t there if the reply is successful, lambda if not. */
1889 1889
1890void 1890void
1891x_handle_selection_notify (XSelectionEvent *event) 1891x_handle_selection_notify (const XSelectionEvent *event)
1892{ 1892{
1893 if (event->requestor != reading_selection_window) 1893 if (event->requestor != reading_selection_window)
1894 return; 1894 return;
@@ -2009,7 +2009,7 @@ On Nextstep, TIME-STAMP and TERMINAL are unused. */)
2009 error ("X selection unavailable for this frame"); 2009 error ("X selection unavailable for this frame");
2010 2010
2011 val = x_get_local_selection (selection_symbol, target_type, 1, 2011 val = x_get_local_selection (selection_symbol, target_type, 1,
2012 FRAME_X_DISPLAY_INFO (f)); 2012 FRAME_DISPLAY_INFO (f));
2013 2013
2014 if (NILP (val) && FRAME_LIVE_P (f)) 2014 if (NILP (val) && FRAME_LIVE_P (f))
2015 { 2015 {
@@ -2056,7 +2056,7 @@ On MS-DOS, all this does is return non-nil if we own the selection. */)
2056 if (!f) 2056 if (!f)
2057 return Qnil; 2057 return Qnil;
2058 2058
2059 dpyinfo = FRAME_X_DISPLAY_INFO (f); 2059 dpyinfo = FRAME_DISPLAY_INFO (f);
2060 CHECK_SYMBOL (selection); 2060 CHECK_SYMBOL (selection);
2061 2061
2062 /* Don't disown the selection when we're not the owner. */ 2062 /* Don't disown the selection when we're not the owner. */
@@ -2108,7 +2108,7 @@ On Nextstep, TERMINAL is unused. */)
2108 if (EQ (selection, Qnil)) selection = QPRIMARY; 2108 if (EQ (selection, Qnil)) selection = QPRIMARY;
2109 if (EQ (selection, Qt)) selection = QSECONDARY; 2109 if (EQ (selection, Qt)) selection = QSECONDARY;
2110 2110
2111 if (f && !NILP (LOCAL_SELECTION (selection, FRAME_X_DISPLAY_INFO (f)))) 2111 if (f && !NILP (LOCAL_SELECTION (selection, FRAME_DISPLAY_INFO (f))))
2112 return Qt; 2112 return Qt;
2113 else 2113 else
2114 return Qnil; 2114 return Qnil;
@@ -2141,7 +2141,7 @@ On Nextstep, TERMINAL is unused. */)
2141 if (!f) 2141 if (!f)
2142 return Qnil; 2142 return Qnil;
2143 2143
2144 dpyinfo = FRAME_X_DISPLAY_INFO (f); 2144 dpyinfo = FRAME_DISPLAY_INFO (f);
2145 2145
2146 if (!NILP (LOCAL_SELECTION (selection, dpyinfo))) 2146 if (!NILP (LOCAL_SELECTION (selection, dpyinfo)))
2147 return Qt; 2147 return Qt;
@@ -2162,7 +2162,7 @@ static Lisp_Object
2162x_clipboard_manager_save (Lisp_Object frame) 2162x_clipboard_manager_save (Lisp_Object frame)
2163{ 2163{
2164 struct frame *f = XFRAME (frame); 2164 struct frame *f = XFRAME (frame);
2165 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2165 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2166 Atom data = dpyinfo->Xatom_UTF8_STRING; 2166 Atom data = dpyinfo->Xatom_UTF8_STRING;
2167 2167
2168 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 2168 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
@@ -2212,7 +2212,7 @@ x_clipboard_manager_save_frame (Lisp_Object frame)
2212 && (f = XFRAME (frame), FRAME_X_P (f)) 2212 && (f = XFRAME (frame), FRAME_X_P (f))
2213 && FRAME_LIVE_P (f)) 2213 && FRAME_LIVE_P (f))
2214 { 2214 {
2215 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2215 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2216 Lisp_Object local_selection 2216 Lisp_Object local_selection
2217 = LOCAL_SELECTION (QCLIPBOARD, dpyinfo); 2217 = LOCAL_SELECTION (QCLIPBOARD, dpyinfo);
2218 2218
@@ -2458,7 +2458,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */)
2458 Atom x_atom; 2458 Atom x_atom;
2459 struct frame *f = decode_window_system_frame (frame); 2459 struct frame *f = decode_window_system_frame (frame);
2460 ptrdiff_t i; 2460 ptrdiff_t i;
2461 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2461 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
2462 2462
2463 2463
2464 if (SYMBOLP (atom)) 2464 if (SYMBOLP (atom))
@@ -2488,7 +2488,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */)
2488/* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */ 2488/* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */
2489 2489
2490int 2490int
2491x_handle_dnd_message (struct frame *f, XClientMessageEvent *event, 2491x_handle_dnd_message (struct frame *f, const XClientMessageEvent *event,
2492 struct x_display_info *dpyinfo, struct input_event *bufp) 2492 struct x_display_info *dpyinfo, struct input_event *bufp)
2493{ 2493{
2494 Lisp_Object vec; 2494 Lisp_Object vec;
diff --git a/src/xsettings.c b/src/xsettings.c
index b5d5f4db59b..8fe82fec74b 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -336,9 +336,6 @@ get_prop_window (struct x_display_info *dpyinfo)
336 XUngrabServer (dpy); 336 XUngrabServer (dpy);
337} 337}
338 338
339#define SWAP32(nr) (((nr) << 24) | (((nr) << 8) & 0xff0000) \
340 | (((nr) >> 8) & 0xff00) | ((nr) >> 24))
341#define SWAP16(nr) (((nr) << 8) | ((nr) >> 8))
342#define PAD(nr) (((nr) + 3) & ~3) 339#define PAD(nr) (((nr) + 3) & ~3)
343 340
344/* Parse xsettings and extract those that deal with Xft. 341/* Parse xsettings and extract those that deal with Xft.
@@ -408,7 +405,7 @@ parse_settings (unsigned char *prop,
408 405
409 if (bytes < 12) return BadLength; 406 if (bytes < 12) return BadLength;
410 memcpy (&n_settings, prop+8, 4); 407 memcpy (&n_settings, prop+8, 4);
411 if (my_bo != that_bo) n_settings = SWAP32 (n_settings); 408 if (my_bo != that_bo) n_settings = swap32 (n_settings);
412 bytes_parsed = 12; 409 bytes_parsed = 12;
413 410
414 memset (settings, 0, sizeof (*settings)); 411 memset (settings, 0, sizeof (*settings));
@@ -430,7 +427,7 @@ parse_settings (unsigned char *prop,
430 427
431 memcpy (&nlen, prop+bytes_parsed, 2); 428 memcpy (&nlen, prop+bytes_parsed, 2);
432 bytes_parsed += 2; 429 bytes_parsed += 2;
433 if (my_bo != that_bo) nlen = SWAP16 (nlen); 430 if (my_bo != that_bo) nlen = swap16 (nlen);
434 if (bytes_parsed+nlen > bytes) return BadLength; 431 if (bytes_parsed+nlen > bytes) return BadLength;
435 to_cpy = nlen > 127 ? 127 : nlen; 432 to_cpy = nlen > 127 ? 127 : nlen;
436 memcpy (name, prop+bytes_parsed, to_cpy); 433 memcpy (name, prop+bytes_parsed, to_cpy);
@@ -457,7 +454,7 @@ parse_settings (unsigned char *prop,
457 if (want_this) 454 if (want_this)
458 { 455 {
459 memcpy (&ival, prop+bytes_parsed, 4); 456 memcpy (&ival, prop+bytes_parsed, 4);
460 if (my_bo != that_bo) ival = SWAP32 (ival); 457 if (my_bo != that_bo) ival = swap32 (ival);
461 } 458 }
462 bytes_parsed += 4; 459 bytes_parsed += 4;
463 break; 460 break;
@@ -466,7 +463,7 @@ parse_settings (unsigned char *prop,
466 if (bytes_parsed+4 > bytes) return BadLength; 463 if (bytes_parsed+4 > bytes) return BadLength;
467 memcpy (&vlen, prop+bytes_parsed, 4); 464 memcpy (&vlen, prop+bytes_parsed, 4);
468 bytes_parsed += 4; 465 bytes_parsed += 4;
469 if (my_bo != that_bo) vlen = SWAP32 (vlen); 466 if (my_bo != that_bo) vlen = swap32 (vlen);
470 if (want_this) 467 if (want_this)
471 { 468 {
472 to_cpy = vlen > 127 ? 127 : vlen; 469 to_cpy = vlen > 127 ? 127 : vlen;
@@ -754,7 +751,7 @@ read_and_apply_settings (struct x_display_info *dpyinfo, int send_event_p)
754/* Check if EVENT for the display in DPYINFO is XSettings related. */ 751/* Check if EVENT for the display in DPYINFO is XSettings related. */
755 752
756void 753void
757xft_settings_event (struct x_display_info *dpyinfo, XEvent *event) 754xft_settings_event (struct x_display_info *dpyinfo, const XEvent *event)
758{ 755{
759 bool check_window_p = 0, apply_settings_p = 0; 756 bool check_window_p = 0, apply_settings_p = 0;
760 757
@@ -803,7 +800,7 @@ init_gsettings (void)
803 const gchar *const *schemas; 800 const gchar *const *schemas;
804 int schema_found = 0; 801 int schema_found = 0;
805 802
806#ifdef HAVE_G_TYPE_INIT 803#if ! GLIB_CHECK_VERSION (2, 36, 0)
807 g_type_init (); 804 g_type_init ();
808#endif 805#endif
809 806
@@ -860,7 +857,7 @@ init_gconf (void)
860#if defined (HAVE_GCONF) 857#if defined (HAVE_GCONF)
861 char *s; 858 char *s;
862 859
863#ifdef HAVE_G_TYPE_INIT 860#if ! GLIB_CHECK_VERSION (2, 36, 0)
864 g_type_init (); 861 g_type_init ();
865#endif 862#endif
866 863
diff --git a/src/xsettings.h b/src/xsettings.h
index e3738c593bd..a017c5d92d8 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -20,9 +20,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20#ifndef XSETTINGS_H 20#ifndef XSETTINGS_H
21#define XSETTINGS_H 21#define XSETTINGS_H
22 22
23extern void xsettings_initialize (struct x_display_info *dpyinfo); 23extern void xsettings_initialize (struct x_display_info *);
24extern void xft_settings_event (struct x_display_info *dpyinfo, 24extern void xft_settings_event (struct x_display_info *, const XEvent *);
25 XEvent *);
26extern const char *xsettings_get_system_font (void); 25extern const char *xsettings_get_system_font (void);
27#ifdef USE_LUCID 26#ifdef USE_LUCID
28extern const char *xsettings_get_system_normal_font (void); 27extern const char *xsettings_get_system_normal_font (void);
diff --git a/src/xterm.c b/src/xterm.c
index 2f3d5ca7a01..1ccc1ae649b 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23,8 +23,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
23#include <config.h> 23#include <config.h>
24#include <stdio.h> 24#include <stdio.h>
25 25
26#ifdef HAVE_X_WINDOWS
27
28#include "lisp.h" 26#include "lisp.h"
29#include "blockinput.h" 27#include "blockinput.h"
30#include "syssignal.h" 28#include "syssignal.h"
@@ -86,7 +84,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
86#endif 84#endif
87#endif 85#endif
88 86
89#ifdef USE_LUCID 87#if defined (USE_LUCID) || defined (USE_MOTIF)
90#include "../lwlib/xlwmenu.h" 88#include "../lwlib/xlwmenu.h"
91#endif 89#endif
92 90
@@ -157,82 +155,22 @@ struct x_display_info *x_display_list;
157 155
158Lisp_Object x_display_name_list; 156Lisp_Object x_display_name_list;
159 157
160/* This is a frame waiting to be auto-raised, within XTread_socket. */
161
162static struct frame *pending_autoraise_frame;
163
164/* This is a frame waiting for an event matching mask, within XTread_socket. */
165
166static struct {
167 struct frame *f;
168 int eventtype;
169} pending_event_wait;
170
171#ifdef USE_X_TOOLKIT 158#ifdef USE_X_TOOLKIT
159
172/* The application context for Xt use. */ 160/* The application context for Xt use. */
173XtAppContext Xt_app_con; 161XtAppContext Xt_app_con;
174static String Xt_default_resources[] = {0}; 162static String Xt_default_resources[] = {0};
175 163
176/* Non-zero means user is interacting with a toolkit scroll bar. */ 164/* Non-zero means user is interacting with a toolkit scroll bar. */
165static bool toolkit_scroll_bar_interaction;
177 166
178static int toolkit_scroll_bar_interaction;
179#endif /* USE_X_TOOLKIT */ 167#endif /* USE_X_TOOLKIT */
180 168
181/* Non-zero timeout value means ignore next mouse click if it arrives 169/* Non-zero timeout value means ignore next mouse click if it arrives
182 before that timeout elapses (i.e. as part of the same sequence of 170 before that timeout elapses (i.e. as part of the same sequence of
183 events resulting from clicking on a frame to select it). */ 171 events resulting from clicking on a frame to select it). */
184 172
185static unsigned long ignore_next_mouse_click_timeout; 173static Time ignore_next_mouse_click_timeout;
186
187/* Mouse movement.
188
189 Formerly, we used PointerMotionHintMask (in standard_event_mask)
190 so that we would have to call XQueryPointer after each MotionNotify
191 event to ask for another such event. However, this made mouse tracking
192 slow, and there was a bug that made it eventually stop.
193
194 Simply asking for MotionNotify all the time seems to work better.
195
196 In order to avoid asking for motion events and then throwing most
197 of them away or busy-polling the server for mouse positions, we ask
198 the server for pointer motion hints. This means that we get only
199 one event per group of mouse movements. "Groups" are delimited by
200 other kinds of events (focus changes and button clicks, for
201 example), or by XQueryPointer calls; when one of these happens, we
202 get another MotionNotify event the next time the mouse moves. This
203 is at least as efficient as getting motion events when mouse
204 tracking is on, and I suspect only negligibly worse when tracking
205 is off. */
206
207/* Where the mouse was last time we reported a mouse event. */
208
209static XRectangle last_mouse_glyph;
210static struct frame *last_mouse_glyph_frame;
211
212/* The scroll bar in which the last X motion event occurred.
213
214 If the last X motion event occurred in a scroll bar, we set this so
215 XTmouse_position can know whether to report a scroll bar motion or
216 an ordinary motion.
217
218 If the last X motion event didn't occur in a scroll bar, we set
219 this to Qnil, to tell XTmouse_position to return an ordinary motion
220 event. */
221
222static Lisp_Object last_mouse_scroll_bar;
223
224/* This is a hack. We would really prefer that XTmouse_position would
225 return the time associated with the position it returns, but there
226 doesn't seem to be any way to wrest the time-stamp from the server
227 along with the position query. So, we just keep track of the time
228 of the last movement we received, and return that in hopes that
229 it's somewhat accurate. */
230
231static Time last_mouse_movement_time;
232
233/* Time for last user interaction as returned in X events. */
234
235static Time last_user_time;
236 174
237/* Incremented by XTread_socket whenever it really tries to read 175/* Incremented by XTread_socket whenever it really tries to read
238 events. */ 176 events. */
@@ -299,8 +237,6 @@ static void frame_unhighlight (struct frame *);
299static void x_new_focus_frame (struct x_display_info *, struct frame *); 237static void x_new_focus_frame (struct x_display_info *, struct frame *);
300static void x_focus_changed (int, int, struct x_display_info *, 238static void x_focus_changed (int, int, struct x_display_info *,
301 struct frame *, struct input_event *); 239 struct frame *, struct input_event *);
302static void x_detect_focus_change (struct x_display_info *,
303 XEvent *, struct input_event *);
304static void XTframe_rehighlight (struct frame *); 240static void XTframe_rehighlight (struct frame *);
305static void x_frame_rehighlight (struct x_display_info *); 241static void x_frame_rehighlight (struct x_display_info *);
306static void x_draw_hollow_cursor (struct window *, struct glyph_row *); 242static void x_draw_hollow_cursor (struct window *, struct glyph_row *);
@@ -317,12 +253,13 @@ static void x_scroll_bar_report_motion (struct frame **, Lisp_Object *,
317 enum scroll_bar_part *, 253 enum scroll_bar_part *,
318 Lisp_Object *, Lisp_Object *, 254 Lisp_Object *, Lisp_Object *,
319 Time *); 255 Time *);
320static int x_handle_net_wm_state (struct frame *, XPropertyEvent *); 256static int x_handle_net_wm_state (struct frame *, const XPropertyEvent *);
321static void x_check_fullscreen (struct frame *); 257static void x_check_fullscreen (struct frame *);
322static void x_check_expected_move (struct frame *, int, int); 258static void x_check_expected_move (struct frame *, int, int);
323static void x_sync_with_move (struct frame *, int, int, int); 259static void x_sync_with_move (struct frame *, int, int, int);
324static int handle_one_xevent (struct x_display_info *, XEvent *, 260static int handle_one_xevent (struct x_display_info *,
325 int *, struct input_event *); 261 const XEvent *, int *,
262 struct input_event *);
326#ifdef USE_GTK 263#ifdef USE_GTK
327static int x_dispatch_event (XEvent *, Display *); 264static int x_dispatch_event (XEvent *, Display *);
328#endif 265#endif
@@ -334,29 +271,19 @@ static void x_wm_set_icon_pixmap (struct frame *, ptrdiff_t);
334static void x_initialize (void); 271static void x_initialize (void);
335 272
336 273
337/* Flush display of frame F, or of all frames if F is null. */ 274/* Flush display of frame F. */
338 275
339static void 276static void
340x_flush (struct frame *f) 277x_flush (struct frame *f)
341{ 278{
279 eassert (f && FRAME_X_P (f));
342 /* Don't call XFlush when it is not safe to redisplay; the X 280 /* Don't call XFlush when it is not safe to redisplay; the X
343 connection may be broken. */ 281 connection may be broken. */
344 if (!NILP (Vinhibit_redisplay)) 282 if (!NILP (Vinhibit_redisplay))
345 return; 283 return;
346 284
347 block_input (); 285 block_input ();
348 if (f) 286 XFlush (FRAME_X_DISPLAY (f));
349 {
350 eassert (FRAME_X_P (f));
351 XFlush (FRAME_X_DISPLAY (f));
352 }
353 else
354 {
355 /* Flush all displays and so all frames on them. */
356 struct x_display_info *xdi;
357 for (xdi = x_display_list; xdi; xdi = xdi->next)
358 XFlush (xdi->display);
359 }
360 unblock_input (); 287 unblock_input ();
361} 288}
362 289
@@ -426,7 +353,7 @@ x_find_topmost_parent (struct frame *f)
426 Window win = None, wi = x->parent_desc; 353 Window win = None, wi = x->parent_desc;
427 Display *dpy = FRAME_X_DISPLAY (f); 354 Display *dpy = FRAME_X_DISPLAY (f);
428 355
429 while (wi != FRAME_X_DISPLAY_INFO (f)->root_window) 356 while (wi != FRAME_DISPLAY_INFO (f)->root_window)
430 { 357 {
431 Window root; 358 Window root;
432 Window *children; 359 Window *children;
@@ -445,7 +372,7 @@ x_find_topmost_parent (struct frame *f)
445void 372void
446x_set_frame_alpha (struct frame *f) 373x_set_frame_alpha (struct frame *f)
447{ 374{
448 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 375 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
449 Display *dpy = FRAME_X_DISPLAY (f); 376 Display *dpy = FRAME_X_DISPLAY (f);
450 Window win = FRAME_OUTER_WINDOW (f); 377 Window win = FRAME_OUTER_WINDOW (f);
451 double alpha = 1.0; 378 double alpha = 1.0;
@@ -802,7 +729,7 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring
802 if (p->overlay_p) 729 if (p->overlay_p)
803 { 730 {
804 clipmask = XCreatePixmapFromBitmapData (display, 731 clipmask = XCreatePixmapFromBitmapData (display,
805 FRAME_X_DISPLAY_INFO (f)->root_window, 732 FRAME_DISPLAY_INFO (f)->root_window,
806 bits, p->wd, p->h, 733 bits, p->wd, p->h,
807 1, 0, 1); 734 1, 0, 1);
808 gcv.clip_mask = clipmask; 735 gcv.clip_mask = clipmask;
@@ -906,14 +833,14 @@ x_set_cursor_gc (struct glyph_string *s)
906 xgcv.graphics_exposures = False; 833 xgcv.graphics_exposures = False;
907 mask = GCForeground | GCBackground | GCGraphicsExposures; 834 mask = GCForeground | GCBackground | GCGraphicsExposures;
908 835
909 if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) 836 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
910 XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, 837 XChangeGC (s->display, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
911 mask, &xgcv); 838 mask, &xgcv);
912 else 839 else
913 FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc 840 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
914 = XCreateGC (s->display, s->window, mask, &xgcv); 841 = XCreateGC (s->display, s->window, mask, &xgcv);
915 842
916 s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; 843 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
917 } 844 }
918} 845}
919 846
@@ -953,14 +880,14 @@ x_set_mouse_face_gc (struct glyph_string *s)
953 xgcv.graphics_exposures = False; 880 xgcv.graphics_exposures = False;
954 mask = GCForeground | GCBackground | GCGraphicsExposures; 881 mask = GCForeground | GCBackground | GCGraphicsExposures;
955 882
956 if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) 883 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
957 XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, 884 XChangeGC (s->display, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
958 mask, &xgcv); 885 mask, &xgcv);
959 else 886 else
960 FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc 887 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
961 = XCreateGC (s->display, s->window, mask, &xgcv); 888 = XCreateGC (s->display, s->window, mask, &xgcv);
962 889
963 s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; 890 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
964 891
965 } 892 }
966 eassert (s->gc != 0); 893 eassert (s->gc != 0);
@@ -1396,7 +1323,7 @@ x_frame_of_widget (Widget widget)
1396 f = XFRAME (frame); 1323 f = XFRAME (frame);
1397 if (FRAME_X_P (f) 1324 if (FRAME_X_P (f)
1398 && f->output_data.nothing != 1 1325 && f->output_data.nothing != 1
1399 && FRAME_X_DISPLAY_INFO (f) == dpyinfo 1326 && FRAME_DISPLAY_INFO (f) == dpyinfo
1400 && f->output_data.x->widget == widget) 1327 && f->output_data.x->widget == widget)
1401 return f; 1328 return f;
1402 } 1329 }
@@ -1605,7 +1532,7 @@ x_color_cells (Display *dpy, int *ncells)
1605void 1532void
1606x_query_colors (struct frame *f, XColor *colors, int ncolors) 1533x_query_colors (struct frame *f, XColor *colors, int ncolors)
1607{ 1534{
1608 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1535 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1609 1536
1610 if (dpyinfo->color_cells) 1537 if (dpyinfo->color_cells)
1611 { 1538 {
@@ -1845,7 +1772,7 @@ x_setup_relief_color (struct frame *f, struct relief *relief, double factor, int
1845 unsigned long pixel; 1772 unsigned long pixel;
1846 unsigned long background = di->relief_background; 1773 unsigned long background = di->relief_background;
1847 Colormap cmap = FRAME_X_COLORMAP (f); 1774 Colormap cmap = FRAME_X_COLORMAP (f);
1848 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 1775 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
1849 Display *dpy = FRAME_X_DISPLAY (f); 1776 Display *dpy = FRAME_X_DISPLAY (f);
1850 1777
1851 xgcv.graphics_exposures = False; 1778 xgcv.graphics_exposures = False;
@@ -3035,26 +2962,7 @@ XTflash (struct frame *f)
3035 /* These will be the left and right margins of the rectangles. */ 2962 /* These will be the left and right margins of the rectangles. */
3036 int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); 2963 int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f);
3037 int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); 2964 int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f);
3038 2965 int width = flash_right - flash_left;
3039 int width;
3040
3041 /* Don't flash the area between a scroll bar and the frame
3042 edge it is next to. */
3043 switch (FRAME_VERTICAL_SCROLL_BAR_TYPE (f))
3044 {
3045 case vertical_scroll_bar_left:
3046 flash_left += VERTICAL_SCROLL_BAR_WIDTH_TRIM;
3047 break;
3048
3049 case vertical_scroll_bar_right:
3050 flash_right -= VERTICAL_SCROLL_BAR_WIDTH_TRIM;
3051 break;
3052
3053 default:
3054 break;
3055 }
3056
3057 width = flash_right - flash_left;
3058 2966
3059 /* If window is tall, flash top and bottom line. */ 2967 /* If window is tall, flash top and bottom line. */
3060 if (height > 3 * FRAME_LINE_HEIGHT (f)) 2968 if (height > 3 * FRAME_LINE_HEIGHT (f))
@@ -3146,9 +3054,9 @@ XTtoggle_invisible_pointer (struct frame *f, int invisible)
3146 block_input (); 3054 block_input ();
3147 if (invisible) 3055 if (invisible)
3148 { 3056 {
3149 if (FRAME_X_DISPLAY_INFO (f)->invisible_cursor != 0) 3057 if (FRAME_DISPLAY_INFO (f)->invisible_cursor != 0)
3150 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 3058 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3151 FRAME_X_DISPLAY_INFO (f)->invisible_cursor); 3059 FRAME_DISPLAY_INFO (f)->invisible_cursor);
3152 } 3060 }
3153 else 3061 else
3154 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 3062 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
@@ -3341,9 +3249,9 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame)
3341 x_lower_frame (old_focus); 3249 x_lower_frame (old_focus);
3342 3250
3343 if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise) 3251 if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise)
3344 pending_autoraise_frame = dpyinfo->x_focus_frame; 3252 dpyinfo->x_pending_autoraise_frame = dpyinfo->x_focus_frame;
3345 else 3253 else
3346 pending_autoraise_frame = 0; 3254 dpyinfo->x_pending_autoraise_frame = NULL;
3347 } 3255 }
3348 3256
3349 x_frame_rehighlight (dpyinfo); 3257 x_frame_rehighlight (dpyinfo);
@@ -3403,18 +3311,192 @@ x_focus_changed (int type, int state, struct x_display_info *dpyinfo, struct fra
3403 } 3311 }
3404} 3312}
3405 3313
3314/* Return the Emacs frame-object corresponding to an X window.
3315 It could be the frame's main window or an icon window. */
3316
3317static struct frame *
3318x_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
3319{
3320 Lisp_Object tail, frame;
3321 struct frame *f;
3322
3323 if (wdesc == None)
3324 return NULL;
3325
3326 FOR_EACH_FRAME (tail, frame)
3327 {
3328 f = XFRAME (frame);
3329 if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo)
3330 continue;
3331 if (f->output_data.x->hourglass_window == wdesc)
3332 return f;
3333#ifdef USE_X_TOOLKIT
3334 if ((f->output_data.x->edit_widget
3335 && XtWindow (f->output_data.x->edit_widget) == wdesc)
3336 /* A tooltip frame? */
3337 || (!f->output_data.x->edit_widget
3338 && FRAME_X_WINDOW (f) == wdesc)
3339 || f->output_data.x->icon_desc == wdesc)
3340 return f;
3341#else /* not USE_X_TOOLKIT */
3342#ifdef USE_GTK
3343 if (f->output_data.x->edit_widget)
3344 {
3345 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
3346 struct x_output *x = f->output_data.x;
3347 if (gwdesc != 0 && gwdesc == x->edit_widget)
3348 return f;
3349 }
3350#endif /* USE_GTK */
3351 if (FRAME_X_WINDOW (f) == wdesc
3352 || f->output_data.x->icon_desc == wdesc)
3353 return f;
3354#endif /* not USE_X_TOOLKIT */
3355 }
3356 return 0;
3357}
3358
3359#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
3360
3361/* Like x_window_to_frame but also compares the window with the widget's
3362 windows. */
3363
3364static struct frame *
3365x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
3366{
3367 Lisp_Object tail, frame;
3368 struct frame *f, *found = NULL;
3369 struct x_output *x;
3370
3371 if (wdesc == None)
3372 return NULL;
3373
3374 FOR_EACH_FRAME (tail, frame)
3375 {
3376 if (found)
3377 break;
3378 f = XFRAME (frame);
3379 if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo)
3380 {
3381 /* This frame matches if the window is any of its widgets. */
3382 x = f->output_data.x;
3383 if (x->hourglass_window == wdesc)
3384 found = f;
3385 else if (x->widget)
3386 {
3387#ifdef USE_GTK
3388 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
3389 if (gwdesc != 0
3390 && gtk_widget_get_toplevel (gwdesc) == x->widget)
3391 found = f;
3392#else
3393 if (wdesc == XtWindow (x->widget)
3394 || wdesc == XtWindow (x->column_widget)
3395 || wdesc == XtWindow (x->edit_widget))
3396 found = f;
3397 /* Match if the window is this frame's menubar. */
3398 else if (lw_window_is_in_menubar (wdesc, x->menubar_widget))
3399 found = f;
3400#endif
3401 }
3402 else if (FRAME_X_WINDOW (f) == wdesc)
3403 /* A tooltip frame. */
3404 found = f;
3405 }
3406 }
3407
3408 return found;
3409}
3410
3411/* Likewise, but consider only the menu bar widget. */
3412
3413static struct frame *
3414x_menubar_window_to_frame (struct x_display_info *dpyinfo,
3415 const XEvent *event)
3416{
3417 Window wdesc = event->xany.window;
3418 Lisp_Object tail, frame;
3419 struct frame *f;
3420 struct x_output *x;
3421
3422 if (wdesc == None)
3423 return NULL;
3424
3425 FOR_EACH_FRAME (tail, frame)
3426 {
3427 f = XFRAME (frame);
3428 if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo)
3429 continue;
3430 x = f->output_data.x;
3431#ifdef USE_GTK
3432 if (x->menubar_widget && xg_event_is_for_menubar (f, event))
3433 return f;
3434#else
3435 /* Match if the window is this frame's menubar. */
3436 if (x->menubar_widget
3437 && lw_window_is_in_menubar (wdesc, x->menubar_widget))
3438 return f;
3439#endif
3440 }
3441 return 0;
3442}
3443
3444/* Return the frame whose principal (outermost) window is WDESC.
3445 If WDESC is some other (smaller) window, we return 0. */
3446
3447struct frame *
3448x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
3449{
3450 Lisp_Object tail, frame;
3451 struct frame *f;
3452 struct x_output *x;
3453
3454 if (wdesc == None)
3455 return NULL;
3456
3457 FOR_EACH_FRAME (tail, frame)
3458 {
3459 f = XFRAME (frame);
3460 if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo)
3461 continue;
3462 x = f->output_data.x;
3463
3464 if (x->widget)
3465 {
3466 /* This frame matches if the window is its topmost widget. */
3467#ifdef USE_GTK
3468 GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
3469 if (gwdesc == x->widget)
3470 return f;
3471#else
3472 if (wdesc == XtWindow (x->widget))
3473 return f;
3474#endif
3475 }
3476 else if (FRAME_X_WINDOW (f) == wdesc)
3477 /* Tooltip frame. */
3478 return f;
3479 }
3480 return 0;
3481}
3482
3483#else /* !USE_X_TOOLKIT && !USE_GTK */
3484
3485#define x_any_window_to_frame(d, i) x_window_to_frame (d, i)
3486#define x_top_window_to_frame(d, i) x_window_to_frame (d, i)
3487
3488#endif /* USE_X_TOOLKIT || USE_GTK */
3489
3406/* The focus may have changed. Figure out if it is a real focus change, 3490/* The focus may have changed. Figure out if it is a real focus change,
3407 by checking both FocusIn/Out and Enter/LeaveNotify events. 3491 by checking both FocusIn/Out and Enter/LeaveNotify events.
3408 3492
3409 Returns FOCUS_IN_EVENT event in *BUFP. */ 3493 Returns FOCUS_IN_EVENT event in *BUFP. */
3410 3494
3411static void 3495static void
3412x_detect_focus_change (struct x_display_info *dpyinfo, XEvent *event, struct input_event *bufp) 3496x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame,
3497 const XEvent *event, struct input_event *bufp)
3413{ 3498{
3414 struct frame *frame; 3499 if (!frame)
3415
3416 frame = x_any_window_to_frame (dpyinfo, event->xany.window);
3417 if (! frame)
3418 return; 3500 return;
3419 3501
3420 switch (event->type) 3502 switch (event->type)
@@ -3476,7 +3558,7 @@ x_mouse_leave (struct x_display_info *dpyinfo)
3476static void 3558static void
3477XTframe_rehighlight (struct frame *frame) 3559XTframe_rehighlight (struct frame *frame)
3478{ 3560{
3479 x_frame_rehighlight (FRAME_X_DISPLAY_INFO (frame)); 3561 x_frame_rehighlight (FRAME_DISPLAY_INFO (frame));
3480} 3562}
3481 3563
3482static void 3564static void
@@ -3692,9 +3774,25 @@ x_get_keysym_name (int keysym)
3692 return value; 3774 return value;
3693} 3775}
3694 3776
3777/* Mouse clicks and mouse movement. Rah.
3695 3778
3696 3779 Formerly, we used PointerMotionHintMask (in standard_event_mask)
3697/* Mouse clicks and mouse movement. Rah. */ 3780 so that we would have to call XQueryPointer after each MotionNotify
3781 event to ask for another such event. However, this made mouse tracking
3782 slow, and there was a bug that made it eventually stop.
3783
3784 Simply asking for MotionNotify all the time seems to work better.
3785
3786 In order to avoid asking for motion events and then throwing most
3787 of them away or busy-polling the server for mouse positions, we ask
3788 the server for pointer motion hints. This means that we get only
3789 one event per group of mouse movements. "Groups" are delimited by
3790 other kinds of events (focus changes and button clicks, for
3791 example), or by XQueryPointer calls; when one of these happens, we
3792 get another MotionNotify event the next time the mouse moves. This
3793 is at least as efficient as getting motion events when mouse
3794 tracking is on, and I suspect only negligibly worse when tracking
3795 is off. */
3698 3796
3699/* Prepare a mouse-event in *RESULT for placement in the input queue. 3797/* Prepare a mouse-event in *RESULT for placement in the input queue.
3700 3798
@@ -3702,14 +3800,16 @@ x_get_keysym_name (int keysym)
3702 the mouse. */ 3800 the mouse. */
3703 3801
3704static Lisp_Object 3802static Lisp_Object
3705construct_mouse_click (struct input_event *result, XButtonEvent *event, struct frame *f) 3803construct_mouse_click (struct input_event *result,
3804 const XButtonEvent *event,
3805 struct frame *f)
3706{ 3806{
3707 /* Make the event type NO_EVENT; we'll change that when we decide 3807 /* Make the event type NO_EVENT; we'll change that when we decide
3708 otherwise. */ 3808 otherwise. */
3709 result->kind = MOUSE_CLICK_EVENT; 3809 result->kind = MOUSE_CLICK_EVENT;
3710 result->code = event->button - Button1; 3810 result->code = event->button - Button1;
3711 result->timestamp = event->time; 3811 result->timestamp = event->time;
3712 result->modifiers = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), 3812 result->modifiers = (x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f),
3713 event->state) 3813 event->state)
3714 | (event->type == ButtonRelease 3814 | (event->type == ButtonRelease
3715 ? up_modifier 3815 ? up_modifier
@@ -3730,65 +3830,49 @@ construct_mouse_click (struct input_event *result, XButtonEvent *event, struct f
3730 the mainstream emacs code by setting mouse_moved. If not, ask for 3830 the mainstream emacs code by setting mouse_moved. If not, ask for
3731 another motion event, so we can check again the next time it moves. */ 3831 another motion event, so we can check again the next time it moves. */
3732 3832
3733static XMotionEvent last_mouse_motion_event;
3734static Lisp_Object last_mouse_motion_frame;
3735
3736static int 3833static int
3737note_mouse_movement (struct frame *frame, XMotionEvent *event) 3834note_mouse_movement (struct frame *frame, const XMotionEvent *event)
3738{ 3835{
3739 last_mouse_movement_time = event->time; 3836 XRectangle *r;
3740 last_mouse_motion_event = *event; 3837 struct x_display_info *dpyinfo;
3741 XSETFRAME (last_mouse_motion_frame, frame);
3742 3838
3743 if (!FRAME_X_OUTPUT (frame)) 3839 if (!FRAME_X_OUTPUT (frame))
3744 return 0; 3840 return 0;
3745 3841
3842 dpyinfo = FRAME_DISPLAY_INFO (frame);
3843 dpyinfo->last_mouse_movement_time = event->time;
3844 dpyinfo->last_mouse_motion_frame = frame;
3845 dpyinfo->last_mouse_motion_x = event->x;
3846 dpyinfo->last_mouse_motion_y = event->y;
3847
3746 if (event->window != FRAME_X_WINDOW (frame)) 3848 if (event->window != FRAME_X_WINDOW (frame))
3747 { 3849 {
3748 frame->mouse_moved = 1; 3850 frame->mouse_moved = 1;
3749 last_mouse_scroll_bar = Qnil; 3851 dpyinfo->last_mouse_scroll_bar = NULL;
3750 note_mouse_highlight (frame, -1, -1); 3852 note_mouse_highlight (frame, -1, -1);
3751 last_mouse_glyph_frame = 0; 3853 dpyinfo->last_mouse_glyph_frame = NULL;
3752 return 1; 3854 return 1;
3753 } 3855 }
3754 3856
3755 3857
3756 /* Has the mouse moved off the glyph it was on at the last sighting? */ 3858 /* Has the mouse moved off the glyph it was on at the last sighting? */
3757 if (frame != last_mouse_glyph_frame 3859 r = &dpyinfo->last_mouse_glyph;
3758 || event->x < last_mouse_glyph.x 3860 if (frame != dpyinfo->last_mouse_glyph_frame
3759 || event->x >= last_mouse_glyph.x + last_mouse_glyph.width 3861 || event->x < r->x || event->x >= r->x + r->width
3760 || event->y < last_mouse_glyph.y 3862 || event->y < r->y || event->y >= r->y + r->height)
3761 || event->y >= last_mouse_glyph.y + last_mouse_glyph.height)
3762 { 3863 {
3763 frame->mouse_moved = 1; 3864 frame->mouse_moved = 1;
3764 last_mouse_scroll_bar = Qnil; 3865 dpyinfo->last_mouse_scroll_bar = NULL;
3765 note_mouse_highlight (frame, event->x, event->y); 3866 note_mouse_highlight (frame, event->x, event->y);
3766 /* Remember which glyph we're now on. */ 3867 /* Remember which glyph we're now on. */
3767 remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph); 3868 remember_mouse_glyph (frame, event->x, event->y, r);
3768 last_mouse_glyph_frame = frame; 3869 dpyinfo->last_mouse_glyph_frame = frame;
3769 return 1; 3870 return 1;
3770 } 3871 }
3771 3872
3772 return 0; 3873 return 0;
3773} 3874}
3774 3875
3775
3776/************************************************************************
3777 Mouse Face
3778 ************************************************************************/
3779
3780static void
3781redo_mouse_highlight (void)
3782{
3783 if (!NILP (last_mouse_motion_frame)
3784 && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame)))
3785 note_mouse_highlight (XFRAME (last_mouse_motion_frame),
3786 last_mouse_motion_event.x,
3787 last_mouse_motion_event.y);
3788}
3789
3790
3791
3792/* Return the current position of the mouse. 3876/* Return the current position of the mouse.
3793 *FP should be a frame which indicates which display to ask about. 3877 *FP should be a frame which indicates which display to ask about.
3794 3878
@@ -3815,10 +3899,11 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3815 Time *timestamp) 3899 Time *timestamp)
3816{ 3900{
3817 struct frame *f1; 3901 struct frame *f1;
3902 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
3818 3903
3819 block_input (); 3904 block_input ();
3820 3905
3821 if (! NILP (last_mouse_scroll_bar) && insist == 0) 3906 if (dpyinfo->last_mouse_scroll_bar && insist == 0)
3822 x_scroll_bar_report_motion (fp, bar_window, part, x, y, timestamp); 3907 x_scroll_bar_report_motion (fp, bar_window, part, x, y, timestamp);
3823 else 3908 else
3824 { 3909 {
@@ -3836,7 +3921,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3836 && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp)) 3921 && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp))
3837 XFRAME (frame)->mouse_moved = 0; 3922 XFRAME (frame)->mouse_moved = 0;
3838 3923
3839 last_mouse_scroll_bar = Qnil; 3924 dpyinfo->last_mouse_scroll_bar = NULL;
3840 3925
3841 /* Figure out which root window we're on. */ 3926 /* Figure out which root window we're on. */
3842 XQueryPointer (FRAME_X_DISPLAY (*fp), 3927 XQueryPointer (FRAME_X_DISPLAY (*fp),
@@ -3874,22 +3959,24 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3874 3959
3875 x_catch_errors (FRAME_X_DISPLAY (*fp)); 3960 x_catch_errors (FRAME_X_DISPLAY (*fp));
3876 3961
3877 if (FRAME_X_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame 3962 if (x_mouse_grabbed (dpyinfo))
3878 && FRAME_LIVE_P (last_mouse_frame))
3879 { 3963 {
3880 /* If mouse was grabbed on a frame, give coords for that frame 3964 /* If mouse was grabbed on a frame, give coords for that frame
3881 even if the mouse is now outside it. */ 3965 even if the mouse is now outside it. */
3882 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), 3966 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
3883 3967
3884 /* From-window, to-window. */ 3968 /* From-window. */
3885 root, FRAME_X_WINDOW (last_mouse_frame), 3969 root,
3970
3971 /* To-window. */
3972 FRAME_X_WINDOW (dpyinfo->last_mouse_frame),
3886 3973
3887 /* From-position, to-position. */ 3974 /* From-position, to-position. */
3888 root_x, root_y, &win_x, &win_y, 3975 root_x, root_y, &win_x, &win_y,
3889 3976
3890 /* Child of win. */ 3977 /* Child of win. */
3891 &child); 3978 &child);
3892 f1 = last_mouse_frame; 3979 f1 = dpyinfo->last_mouse_frame;
3893 } 3980 }
3894 else 3981 else
3895 { 3982 {
@@ -3913,7 +4000,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3913 want the edit window. For non-Gtk+ the innermost 4000 want the edit window. For non-Gtk+ the innermost
3914 window is the edit window. For Gtk+ it might not 4001 window is the edit window. For Gtk+ it might not
3915 be. It might be the tool bar for example. */ 4002 be. It might be the tool bar for example. */
3916 if (x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win)) 4003 if (x_window_to_frame (dpyinfo, win))
3917 break; 4004 break;
3918#endif 4005#endif
3919 win = child; 4006 win = child;
@@ -3935,10 +4022,10 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3935#ifdef USE_GTK 4022#ifdef USE_GTK
3936 /* We don't wan't to know the innermost window. We 4023 /* We don't wan't to know the innermost window. We
3937 want the edit window. */ 4024 want the edit window. */
3938 f1 = x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win); 4025 f1 = x_window_to_frame (dpyinfo, win);
3939#else 4026#else
3940 /* Is win one of our frames? */ 4027 /* Is win one of our frames? */
3941 f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win); 4028 f1 = x_any_window_to_frame (dpyinfo, win);
3942#endif 4029#endif
3943 4030
3944#ifdef USE_X_TOOLKIT 4031#ifdef USE_X_TOOLKIT
@@ -3984,15 +4071,17 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
3984 on it, i.e. into the same rectangles that matrices on 4071 on it, i.e. into the same rectangles that matrices on
3985 the frame are divided into. */ 4072 the frame are divided into. */
3986 4073
3987 remember_mouse_glyph (f1, win_x, win_y, &last_mouse_glyph); 4074 /* FIXME: what if F1 is not an X frame? */
3988 last_mouse_glyph_frame = f1; 4075 dpyinfo = FRAME_DISPLAY_INFO (f1);
4076 remember_mouse_glyph (f1, win_x, win_y, &dpyinfo->last_mouse_glyph);
4077 dpyinfo->last_mouse_glyph_frame = f1;
3989 4078
3990 *bar_window = Qnil; 4079 *bar_window = Qnil;
3991 *part = 0; 4080 *part = 0;
3992 *fp = f1; 4081 *fp = f1;
3993 XSETINT (*x, win_x); 4082 XSETINT (*x, win_x);
3994 XSETINT (*y, win_y); 4083 XSETINT (*y, win_y);
3995 *timestamp = last_mouse_movement_time; 4084 *timestamp = dpyinfo->last_mouse_movement_time;
3996 } 4085 }
3997 } 4086 }
3998 } 4087 }
@@ -4078,23 +4167,13 @@ x_window_to_menu_bar (Window window)
4078 4167
4079#ifdef USE_TOOLKIT_SCROLL_BARS 4168#ifdef USE_TOOLKIT_SCROLL_BARS
4080 4169
4081static void x_scroll_bar_to_input_event (XEvent *, struct input_event *);
4082static void x_send_scroll_bar_event (Lisp_Object, int, int, int); 4170static void x_send_scroll_bar_event (Lisp_Object, int, int, int);
4083static void x_create_toolkit_scroll_bar (struct frame *,
4084 struct scroll_bar *);
4085static void x_set_toolkit_scroll_bar_thumb (struct scroll_bar *,
4086 int, int, int);
4087
4088 4171
4089/* Lisp window being scrolled. Set when starting to interact with 4172/* Lisp window being scrolled. Set when starting to interact with
4090 a toolkit scroll bar, reset to nil when ending the interaction. */ 4173 a toolkit scroll bar, reset to nil when ending the interaction. */
4091 4174
4092static Lisp_Object window_being_scrolled; 4175static Lisp_Object window_being_scrolled;
4093 4176
4094/* Last scroll bar part sent in xm_scroll_callback. */
4095
4096static int last_scroll_bar_part;
4097
4098/* Whether this is an Xaw with arrow-scrollbars. This should imply 4177/* Whether this is an Xaw with arrow-scrollbars. This should imply
4099 that movements of 1/20 of the screen size are mapped to up/down. */ 4178 that movements of 1/20 of the screen size are mapped to up/down. */
4100 4179
@@ -4136,33 +4215,29 @@ xt_action_hook (Widget widget, XtPointer client_data, String action_name,
4136 && WINDOWP (window_being_scrolled)) 4215 && WINDOWP (window_being_scrolled))
4137 { 4216 {
4138 struct window *w; 4217 struct window *w;
4218 struct scroll_bar *bar;
4139 4219
4140 x_send_scroll_bar_event (window_being_scrolled, 4220 x_send_scroll_bar_event (window_being_scrolled,
4141 scroll_bar_end_scroll, 0, 0); 4221 scroll_bar_end_scroll, 0, 0);
4142 w = XWINDOW (window_being_scrolled); 4222 w = XWINDOW (window_being_scrolled);
4223 bar = XSCROLL_BAR (w->vertical_scroll_bar);
4143 4224
4144 if (XSCROLL_BAR (w->vertical_scroll_bar)->dragging != -1) 4225 if (bar->dragging != -1)
4145 { 4226 {
4146 XSCROLL_BAR (w->vertical_scroll_bar)->dragging = -1; 4227 bar->dragging = -1;
4147 /* The thumb size is incorrect while dragging: fix it. */ 4228 /* The thumb size is incorrect while dragging: fix it. */
4148 set_vertical_scroll_bar (w); 4229 set_vertical_scroll_bar (w);
4149 } 4230 }
4150 window_being_scrolled = Qnil; 4231 window_being_scrolled = Qnil;
4151 last_scroll_bar_part = -1; 4232#if defined (USE_LUCID)
4152 4233 bar->last_seen_part = scroll_bar_nowhere;
4234#endif
4153 /* Xt timeouts no longer needed. */ 4235 /* Xt timeouts no longer needed. */
4154 toolkit_scroll_bar_interaction = 0; 4236 toolkit_scroll_bar_interaction = 0;
4155 } 4237 }
4156} 4238}
4157#endif /* not USE_GTK */ 4239#endif /* not USE_GTK */
4158 4240
4159/* A vector of windows used for communication between
4160 x_send_scroll_bar_event and x_scroll_bar_to_input_event. */
4161
4162static struct window **scroll_bar_windows;
4163static ptrdiff_t scroll_bar_windows_size;
4164
4165
4166/* Send a client message with message type Xatom_Scrollbar for a 4241/* Send a client message with message type Xatom_Scrollbar for a
4167 scroll action to the frame of WINDOW. PART is a value identifying 4242 scroll action to the frame of WINDOW. PART is a value identifying
4168 the part of the scroll bar that was clicked on. PORTION is the 4243 the part of the scroll bar that was clicked on. PORTION is the
@@ -4172,47 +4247,33 @@ static void
4172x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) 4247x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole)
4173{ 4248{
4174 XEvent event; 4249 XEvent event;
4175 XClientMessageEvent *ev = (XClientMessageEvent *) &event; 4250 XClientMessageEvent *ev = &event.xclient;
4176 struct window *w = XWINDOW (window); 4251 struct window *w = XWINDOW (window);
4177 struct frame *f = XFRAME (w->frame); 4252 struct frame *f = XFRAME (w->frame);
4178 ptrdiff_t i; 4253 intptr_t iw = (intptr_t) w;
4254 enum { BITS_PER_INTPTR = CHAR_BIT * sizeof iw };
4255 verify (BITS_PER_INTPTR <= 64);
4256 int sign_shift = BITS_PER_INTPTR - 32;
4179 4257
4180 block_input (); 4258 block_input ();
4181 4259
4182 /* Construct a ClientMessage event to send to the frame. */ 4260 /* Construct a ClientMessage event to send to the frame. */
4183 ev->type = ClientMessage; 4261 ev->type = ClientMessage;
4184 ev->message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_Scrollbar; 4262 ev->message_type = FRAME_DISPLAY_INFO (f)->Xatom_Scrollbar;
4185 ev->display = FRAME_X_DISPLAY (f); 4263 ev->display = FRAME_X_DISPLAY (f);
4186 ev->window = FRAME_X_WINDOW (f); 4264 ev->window = FRAME_X_WINDOW (f);
4187 ev->format = 32; 4265 ev->format = 32;
4188 4266
4189 /* We can only transfer 32 bits in the XClientMessageEvent, which is 4267 /* A 32-bit X client on a 64-bit X server can pass a window pointer
4190 not enough to store a pointer or Lisp_Object on a 64 bit system. 4268 as-is. A 64-bit client on a 32-bit X server is in trouble
4191 So, store the window in scroll_bar_windows and pass the index 4269 because a pointer does not fit and would be truncated while
4192 into that array in the event. */ 4270 passing through the server. So use two slots and hope that X12
4193 for (i = 0; i < scroll_bar_windows_size; ++i) 4271 will resolve such issues someday. */
4194 if (scroll_bar_windows[i] == NULL) 4272 ev->data.l[0] = iw >> 31 >> 1;
4195 break; 4273 ev->data.l[1] = sign_shift <= 0 ? iw : iw << sign_shift >> sign_shift;
4196 4274 ev->data.l[2] = part;
4197 if (i == scroll_bar_windows_size) 4275 ev->data.l[3] = portion;
4198 { 4276 ev->data.l[4] = whole;
4199 ptrdiff_t old_nbytes =
4200 scroll_bar_windows_size * sizeof *scroll_bar_windows;
4201 ptrdiff_t nbytes;
4202 enum { XClientMessageEvent_MAX = 0x7fffffff };
4203 scroll_bar_windows =
4204 xpalloc (scroll_bar_windows, &scroll_bar_windows_size, 1,
4205 XClientMessageEvent_MAX, sizeof *scroll_bar_windows);
4206 nbytes = scroll_bar_windows_size * sizeof *scroll_bar_windows;
4207 memset (&scroll_bar_windows[i], 0, nbytes - old_nbytes);
4208 }
4209
4210 scroll_bar_windows[i] = w;
4211 ev->data.l[0] = (long) i;
4212 ev->data.l[1] = (long) part;
4213 ev->data.l[2] = (long) 0;
4214 ev->data.l[3] = (long) portion;
4215 ev->data.l[4] = (long) whole;
4216 4277
4217 /* Make Xt timeouts work while the scroll bar is active. */ 4278 /* Make Xt timeouts work while the scroll bar is active. */
4218#ifdef USE_X_TOOLKIT 4279#ifdef USE_X_TOOLKIT
@@ -4232,14 +4293,18 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole)
4232 in *IEVENT. */ 4293 in *IEVENT. */
4233 4294
4234static void 4295static void
4235x_scroll_bar_to_input_event (XEvent *event, struct input_event *ievent) 4296x_scroll_bar_to_input_event (const XEvent *event,
4297 struct input_event *ievent)
4236{ 4298{
4237 XClientMessageEvent *ev = (XClientMessageEvent *) event; 4299 const XClientMessageEvent *ev = &event->xclient;
4238 Lisp_Object window; 4300 Lisp_Object window;
4239 struct window *w; 4301 struct window *w;
4240 4302
4241 w = scroll_bar_windows[ev->data.l[0]]; 4303 /* See the comment in the function above. */
4242 scroll_bar_windows[ev->data.l[0]] = NULL; 4304 intptr_t iw0 = ev->data.l[0];
4305 intptr_t iw1 = ev->data.l[1];
4306 intptr_t iw = (iw0 << 31 << 1) + (iw1 & 0xffffffffu);
4307 w = (struct window *) iw;
4243 4308
4244 XSETWINDOW (window, w); 4309 XSETWINDOW (window, w);
4245 4310
@@ -4252,10 +4317,10 @@ x_scroll_bar_to_input_event (XEvent *event, struct input_event *ievent)
4252 ievent->timestamp = 4317 ievent->timestamp =
4253 XtLastTimestampProcessed (FRAME_X_DISPLAY (XFRAME (w->frame))); 4318 XtLastTimestampProcessed (FRAME_X_DISPLAY (XFRAME (w->frame)));
4254#endif 4319#endif
4255 ievent->part = ev->data.l[1]; 4320 ievent->code = 0;
4256 ievent->code = ev->data.l[2]; 4321 ievent->part = ev->data.l[2];
4257 ievent->x = make_number ((int) ev->data.l[3]); 4322 ievent->x = make_number (ev->data.l[3]);
4258 ievent->y = make_number ((int) ev->data.l[4]); 4323 ievent->y = make_number (ev->data.l[4]);
4259 ievent->modifiers = 0; 4324 ievent->modifiers = 0;
4260} 4325}
4261 4326
@@ -4333,7 +4398,6 @@ xm_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data)
4333 if (part >= 0) 4398 if (part >= 0)
4334 { 4399 {
4335 window_being_scrolled = bar->window; 4400 window_being_scrolled = bar->window;
4336 last_scroll_bar_part = part;
4337 x_send_scroll_bar_event (bar->window, part, portion, whole); 4401 x_send_scroll_bar_event (bar->window, part, portion, whole);
4338 } 4402 }
4339} 4403}
@@ -4363,8 +4427,8 @@ xg_scroll_callback (GtkRange *range,
4363 { 4427 {
4364 case GTK_SCROLL_JUMP: 4428 case GTK_SCROLL_JUMP:
4365 /* Buttons 1 2 or 3 must be grabbed. */ 4429 /* Buttons 1 2 or 3 must be grabbed. */
4366 if (FRAME_X_DISPLAY_INFO (f)->grabbed != 0 4430 if (FRAME_DISPLAY_INFO (f)->grabbed != 0
4367 && FRAME_X_DISPLAY_INFO (f)->grabbed < (1 << 4)) 4431 && FRAME_DISPLAY_INFO (f)->grabbed < (1 << 4))
4368 { 4432 {
4369 part = scroll_bar_handle; 4433 part = scroll_bar_handle;
4370 whole = gtk_adjustment_get_upper (adj) - 4434 whole = gtk_adjustment_get_upper (adj) -
@@ -4394,7 +4458,6 @@ xg_scroll_callback (GtkRange *range,
4394 if (part >= 0) 4458 if (part >= 0)
4395 { 4459 {
4396 window_being_scrolled = bar->window; 4460 window_being_scrolled = bar->window;
4397 last_scroll_bar_part = part;
4398 x_send_scroll_bar_event (bar->window, part, portion, whole); 4461 x_send_scroll_bar_event (bar->window, part, portion, whole);
4399 } 4462 }
4400 4463
@@ -4436,7 +4499,7 @@ xaw_jump_callback (Widget widget, XtPointer client_data, XtPointer call_data)
4436 float top = *top_addr; 4499 float top = *top_addr;
4437 float shown; 4500 float shown;
4438 int whole, portion, height; 4501 int whole, portion, height;
4439 int part; 4502 enum scroll_bar_part part;
4440 4503
4441 /* Get the size of the thumb, a value between 0 and 1. */ 4504 /* Get the size of the thumb, a value between 0 and 1. */
4442 block_input (); 4505 block_input ();
@@ -4458,7 +4521,7 @@ xaw_jump_callback (Widget widget, XtPointer client_data, XtPointer call_data)
4458 4521
4459 window_being_scrolled = bar->window; 4522 window_being_scrolled = bar->window;
4460 bar->dragging = portion; 4523 bar->dragging = portion;
4461 last_scroll_bar_part = part; 4524 bar->last_seen_part = part;
4462 x_send_scroll_bar_event (bar->window, part, portion, whole); 4525 x_send_scroll_bar_event (bar->window, part, portion, whole);
4463} 4526}
4464 4527
@@ -4478,7 +4541,7 @@ xaw_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data)
4478 /* The position really is stored cast to a pointer. */ 4541 /* The position really is stored cast to a pointer. */
4479 int position = (intptr_t) call_data; 4542 int position = (intptr_t) call_data;
4480 Dimension height; 4543 Dimension height;
4481 int part; 4544 enum scroll_bar_part part;
4482 4545
4483 /* Get the height of the scroll bar. */ 4546 /* Get the height of the scroll bar. */
4484 block_input (); 4547 block_input ();
@@ -4497,7 +4560,7 @@ xaw_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data)
4497 4560
4498 window_being_scrolled = bar->window; 4561 window_being_scrolled = bar->window;
4499 bar->dragging = -1; 4562 bar->dragging = -1;
4500 last_scroll_bar_part = part; 4563 bar->last_seen_part = part;
4501 x_send_scroll_bar_event (bar->window, part, position, height); 4564 x_send_scroll_bar_event (bar->window, part, position, height);
4502} 4565}
4503 4566
@@ -4807,16 +4870,25 @@ x_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion, int positio
4807 NULL); 4870 NULL);
4808 4871
4809 /* Massage the top+shown values. */ 4872 /* Massage the top+shown values. */
4810 if (bar->dragging == -1 || last_scroll_bar_part == scroll_bar_down_arrow) 4873 if (bar->dragging == -1 || bar->last_seen_part == scroll_bar_down_arrow)
4811 top = max (0, min (1, top)); 4874 top = max (0, min (1, top));
4812 else 4875 else
4813 top = old_top; 4876 top = old_top;
4877#if ! defined (HAVE_XAW3D)
4878 /* With Xaw, 'top' values too closer to 1.0 may
4879 cause the thumb to disappear. Fix that. */
4880 top = min (top, 0.99f);
4881#endif
4814 /* Keep two pixels available for moving the thumb down. */ 4882 /* Keep two pixels available for moving the thumb down. */
4815 shown = max (0, min (1 - top - (2.0f / height), shown)); 4883 shown = max (0, min (1 - top - (2.0f / height), shown));
4884#if ! defined (HAVE_XAW3D)
4885 /* Likewise with too small 'shown'. */
4886 shown = max (shown, 0.01f);
4887#endif
4816 4888
4817 /* If the call to XawScrollbarSetThumb below doesn't seem to work, 4889 /* If the call to XawScrollbarSetThumb below doesn't seem to
4818 check that your system's configuration file contains a define 4890 work, check that 'NARROWPROTO' is defined in src/config.h.
4819 for `NARROWPROTO'. See s/freebsd.h for an example. */ 4891 If this is not so, most likely you need to fix configure. */
4820 if (top != old_top || shown != old_shown) 4892 if (top != old_top || shown != old_shown)
4821 { 4893 {
4822 if (bar->dragging == -1) 4894 if (bar->dragging == -1)
@@ -4875,7 +4947,7 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height)
4875 a.event_mask = (ButtonPressMask | ButtonReleaseMask 4947 a.event_mask = (ButtonPressMask | ButtonReleaseMask
4876 | ButtonMotionMask | PointerMotionHintMask 4948 | ButtonMotionMask | PointerMotionHintMask
4877 | ExposureMask); 4949 | ExposureMask);
4878 a.cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; 4950 a.cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor;
4879 4951
4880 mask = (CWBackPixel | CWEventMask | CWCursor); 4952 mask = (CWBackPixel | CWEventMask | CWCursor);
4881 4953
@@ -4888,12 +4960,9 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height)
4888 4960
4889 window = XCreateWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 4961 window = XCreateWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
4890 /* Position and size of scroll bar. */ 4962 /* Position and size of scroll bar. */
4891 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, 4963 left, top, width, height,
4892 top,
4893 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
4894 height,
4895 /* Border width, depth, class, and visual. */ 4964 /* Border width, depth, class, and visual. */
4896 0, 4965 0,
4897 CopyFromParent, 4966 CopyFromParent,
4898 CopyFromParent, 4967 CopyFromParent,
4899 CopyFromParent, 4968 CopyFromParent,
@@ -4912,6 +4981,9 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height)
4912 bar->end = 0; 4981 bar->end = 0;
4913 bar->dragging = -1; 4982 bar->dragging = -1;
4914 bar->fringe_extended_p = 0; 4983 bar->fringe_extended_p = 0;
4984#if defined (USE_TOOLKIT_SCROLL_BARS) && defined (USE_LUCID)
4985 bar->last_seen_part = scroll_bar_nowhere;
4986#endif
4915 4987
4916 /* Add bar to its frame's list of scroll bars. */ 4988 /* Add bar to its frame's list of scroll bars. */
4917 bar->next = FRAME_SCROLL_BARS (f); 4989 bar->next = FRAME_SCROLL_BARS (f);
@@ -4925,19 +4997,11 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height)
4925#ifdef USE_TOOLKIT_SCROLL_BARS 4997#ifdef USE_TOOLKIT_SCROLL_BARS
4926 { 4998 {
4927#ifdef USE_GTK 4999#ifdef USE_GTK
4928 xg_update_scrollbar_pos (f, 5000 xg_update_scrollbar_pos (f, bar->x_window, top,
4929 bar->x_window, 5001 left,width, max (height, 1));
4930 top,
4931 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
4932 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
4933 max (height, 1));
4934#else /* not USE_GTK */ 5002#else /* not USE_GTK */
4935 Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar); 5003 Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
4936 XtConfigureWidget (scroll_bar, 5004 XtConfigureWidget (scroll_bar, left, top, width, max (height, 1), 0);
4937 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
4938 top,
4939 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
4940 max (height, 1), 0);
4941 XtMapWidget (scroll_bar); 5005 XtMapWidget (scroll_bar);
4942#endif /* not USE_GTK */ 5006#endif /* not USE_GTK */
4943 } 5007 }
@@ -5185,33 +5249,15 @@ XTset_vertical_scroll_bar (struct window *w, int portion, int whole, int positio
5185 left, top, width, height); 5249 left, top, width, height);
5186 } 5250 }
5187#ifdef USE_GTK 5251#ifdef USE_GTK
5188 xg_update_scrollbar_pos (f, 5252 xg_update_scrollbar_pos (f, bar->x_window, top,
5189 bar->x_window, 5253 sb_left, sb_width, max (height, 1));
5190 top,
5191 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
5192 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM *2,
5193 max (height, 1));
5194#else /* not USE_GTK */ 5254#else /* not USE_GTK */
5195 XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar), 5255 XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar),
5196 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, 5256 sb_left, top, sb_width, max (height, 1), 0);
5197 top,
5198 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
5199 max (height, 1), 0);
5200#endif /* not USE_GTK */ 5257#endif /* not USE_GTK */
5201 } 5258 }
5202#else /* not USE_TOOLKIT_SCROLL_BARS */ 5259#else /* not USE_TOOLKIT_SCROLL_BARS */
5203 5260
5204 /* Clear areas not covered by the scroll bar because of
5205 VERTICAL_SCROLL_BAR_WIDTH_TRIM. */
5206 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
5207 {
5208 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
5209 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, height);
5210 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
5211 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM,
5212 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, height);
5213 }
5214
5215 /* Clear areas not covered by the scroll bar because it's not as 5261 /* Clear areas not covered by the scroll bar because it's not as
5216 wide as the area reserved for it. This makes sure a 5262 wide as the area reserved for it. This makes sure a
5217 previous mode line display is cleared after C-x 2 C-x 1, for 5263 previous mode line display is cleared after C-x 2 C-x 1, for
@@ -5235,9 +5281,9 @@ XTset_vertical_scroll_bar (struct window *w, int portion, int whole, int positio
5235 { 5281 {
5236 XWindowChanges wc; 5282 XWindowChanges wc;
5237 5283
5238 wc.x = sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM; 5284 wc.x = sb_left;
5239 wc.y = top; 5285 wc.y = top;
5240 wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2; 5286 wc.width = sb_width;
5241 wc.height = height; 5287 wc.height = height;
5242 XConfigureWindow (FRAME_X_DISPLAY (f), bar->x_window, 5288 XConfigureWindow (FRAME_X_DISPLAY (f), bar->x_window,
5243 mask, &wc); 5289 mask, &wc);
@@ -5395,12 +5441,11 @@ XTjudge_scroll_bars (struct frame *f)
5395 mark bits. */ 5441 mark bits. */
5396 5442
5397static void 5443static void
5398x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event) 5444x_scroll_bar_expose (struct scroll_bar *bar, const XEvent *event)
5399{ 5445{
5400 Window w = bar->x_window; 5446 Window w = bar->x_window;
5401 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); 5447 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
5402 GC gc = f->output_data.x->normal_gc; 5448 GC gc = f->output_data.x->normal_gc;
5403 int width_trim = VERTICAL_SCROLL_BAR_WIDTH_TRIM;
5404 5449
5405 block_input (); 5450 block_input ();
5406 5451
@@ -5413,11 +5458,8 @@ x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event)
5413 5458
5414 /* Draw a one-pixel border just inside the edges of the scroll bar. */ 5459 /* Draw a one-pixel border just inside the edges of the scroll bar. */
5415 XDrawRectangle (FRAME_X_DISPLAY (f), w, gc, 5460 XDrawRectangle (FRAME_X_DISPLAY (f), w, gc,
5416
5417 /* x, y, width, height */ 5461 /* x, y, width, height */
5418 0, 0, 5462 0, 0, bar->width - 1, bar->height - 1);
5419 bar->width - 1 - width_trim - width_trim,
5420 bar->height - 1);
5421 5463
5422 /* Restore the foreground color of the GC if we changed it above. */ 5464 /* Restore the foreground color of the GC if we changed it above. */
5423 if (f->output_data.x->scroll_bar_foreground_pixel != -1) 5465 if (f->output_data.x->scroll_bar_foreground_pixel != -1)
@@ -5437,7 +5479,9 @@ x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event)
5437 5479
5438 5480
5439static void 5481static void
5440x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_event *emacs_event) 5482x_scroll_bar_handle_click (struct scroll_bar *bar,
5483 const XEvent *event,
5484 struct input_event *emacs_event)
5441{ 5485{
5442 if (! WINDOWP (bar->window)) 5486 if (! WINDOWP (bar->window))
5443 emacs_abort (); 5487 emacs_abort ();
@@ -5445,7 +5489,7 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_e
5445 emacs_event->kind = SCROLL_BAR_CLICK_EVENT; 5489 emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
5446 emacs_event->code = event->xbutton.button - Button1; 5490 emacs_event->code = event->xbutton.button - Button1;
5447 emacs_event->modifiers 5491 emacs_event->modifiers
5448 = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO 5492 = (x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO
5449 (XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))), 5493 (XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))),
5450 event->xbutton.state) 5494 event->xbutton.state)
5451 | (event->type == ButtonRelease 5495 | (event->type == ButtonRelease
@@ -5494,14 +5538,15 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_e
5494 mark bits. */ 5538 mark bits. */
5495 5539
5496static void 5540static void
5497x_scroll_bar_note_movement (struct scroll_bar *bar, XMotionEvent *event) 5541x_scroll_bar_note_movement (struct scroll_bar *bar,
5542 const XMotionEvent *event)
5498{ 5543{
5499 struct frame *f = XFRAME (XWINDOW (bar->window)->frame); 5544 struct frame *f = XFRAME (XWINDOW (bar->window)->frame);
5545 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
5500 5546
5501 last_mouse_movement_time = event->time; 5547 dpyinfo->last_mouse_movement_time = event->time;
5502 5548 dpyinfo->last_mouse_scroll_bar = bar;
5503 f->mouse_moved = 1; 5549 f->mouse_moved = 1;
5504 XSETVECTOR (last_mouse_scroll_bar, bar);
5505 5550
5506 /* If we're dragging the bar, display it. */ 5551 /* If we're dragging the bar, display it. */
5507 if (bar->dragging != -1) 5552 if (bar->dragging != -1)
@@ -5528,7 +5573,8 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
5528 enum scroll_bar_part *part, Lisp_Object *x, 5573 enum scroll_bar_part *part, Lisp_Object *x,
5529 Lisp_Object *y, Time *timestamp) 5574 Lisp_Object *y, Time *timestamp)
5530{ 5575{
5531 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); 5576 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
5577 struct scroll_bar *bar = dpyinfo->last_mouse_scroll_bar;
5532 Window w = bar->x_window; 5578 Window w = bar->x_window;
5533 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); 5579 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
5534 int win_x, win_y; 5580 int win_x, win_y;
@@ -5540,22 +5586,19 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
5540 5586
5541 /* Get the mouse's position relative to the scroll bar window, and 5587 /* Get the mouse's position relative to the scroll bar window, and
5542 report that. */ 5588 report that. */
5543 if (! XQueryPointer (FRAME_X_DISPLAY (f), w, 5589 if (XQueryPointer (FRAME_X_DISPLAY (f), w,
5544 5590
5545 /* Root, child, root x and root y. */ 5591 /* Root, child, root x and root y. */
5546 &dummy_window, &dummy_window, 5592 &dummy_window, &dummy_window,
5547 &dummy_coord, &dummy_coord, 5593 &dummy_coord, &dummy_coord,
5548 5594
5549 /* Position relative to scroll bar. */ 5595 /* Position relative to scroll bar. */
5550 &win_x, &win_y, 5596 &win_x, &win_y,
5551 5597
5552 /* Mouse buttons and modifier keys. */ 5598 /* Mouse buttons and modifier keys. */
5553 &dummy_mask)) 5599 &dummy_mask))
5554 ;
5555 else
5556 { 5600 {
5557 int top_range 5601 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
5558 = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
5559 5602
5560 win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER; 5603 win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER;
5561 5604
@@ -5583,11 +5626,10 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window,
5583 XSETINT (*y, top_range); 5626 XSETINT (*y, top_range);
5584 5627
5585 f->mouse_moved = 0; 5628 f->mouse_moved = 0;
5586 last_mouse_scroll_bar = Qnil; 5629 dpyinfo->last_mouse_scroll_bar = NULL;
5630 *timestamp = dpyinfo->last_mouse_movement_time;
5587 } 5631 }
5588 5632
5589 *timestamp = last_mouse_movement_time;
5590
5591 unblock_input (); 5633 unblock_input ();
5592} 5634}
5593 5635
@@ -5646,20 +5688,6 @@ static struct x_display_info *XTread_socket_fake_io_error;
5646 5688
5647static struct x_display_info *next_noop_dpyinfo; 5689static struct x_display_info *next_noop_dpyinfo;
5648 5690
5649#if defined USE_X_TOOLKIT || defined USE_GTK
5650#define SET_SAVED_BUTTON_EVENT \
5651 do \
5652 { \
5653 if (f->output_data.x->saved_menu_event == 0) \
5654 f->output_data.x->saved_menu_event = \
5655 xmalloc (sizeof (XEvent)); \
5656 *f->output_data.x->saved_menu_event = event; \
5657 inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; \
5658 XSETFRAME (inev.ie.frame_or_window, f); \
5659 } \
5660 while (0)
5661#endif
5662
5663enum 5691enum
5664{ 5692{
5665 X_EVENT_NORMAL, 5693 X_EVENT_NORMAL,
@@ -5753,11 +5781,13 @@ static void xembed_send_message (struct frame *f, Time,
5753 *FINISH is X_EVENT_GOTO_OUT if caller should stop reading events. 5781 *FINISH is X_EVENT_GOTO_OUT if caller should stop reading events.
5754 *FINISH is zero if caller should continue reading events. 5782 *FINISH is zero if caller should continue reading events.
5755 *FINISH is X_EVENT_DROP if event should not be passed to the toolkit. 5783 *FINISH is X_EVENT_DROP if event should not be passed to the toolkit.
5784 *EVENT is unchanged unless we're processing KeyPress event.
5756 5785
5757 We return the number of characters stored into the buffer. */ 5786 We return the number of characters stored into the buffer. */
5758 5787
5759static int 5788static int
5760handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, 5789handle_one_xevent (struct x_display_info *dpyinfo,
5790 const XEvent *event,
5761 int *finish, struct input_event *hold_quit) 5791 int *finish, struct input_event *hold_quit)
5762{ 5792{
5763 union { 5793 union {
@@ -5767,9 +5797,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5767 int count = 0; 5797 int count = 0;
5768 int do_help = 0; 5798 int do_help = 0;
5769 ptrdiff_t nbytes = 0; 5799 ptrdiff_t nbytes = 0;
5770 struct frame *f = NULL; 5800 struct frame *any, *f = NULL;
5771 struct coding_system coding; 5801 struct coding_system coding;
5772 XEvent event = *eventptr;
5773 Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight; 5802 Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
5774 /* This holds the state XLookupString needs to implement dead keys 5803 /* This holds the state XLookupString needs to implement dead keys
5775 and other tricks known as "compose processing". _X Window System_ 5804 and other tricks known as "compose processing". _X Window System_
@@ -5785,24 +5814,24 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5785 inev.ie.kind = NO_EVENT; 5814 inev.ie.kind = NO_EVENT;
5786 inev.ie.arg = Qnil; 5815 inev.ie.arg = Qnil;
5787 5816
5788 if (pending_event_wait.eventtype == event.type) 5817 any = x_any_window_to_frame (dpyinfo, event->xany.window);
5789 pending_event_wait.eventtype = 0; /* Indicates we got it. */ 5818
5819 if (any && any->wait_event_type == event->type)
5820 any->wait_event_type = 0; /* Indicates we got it. */
5790 5821
5791 switch (event.type) 5822 switch (event->type)
5792 { 5823 {
5793 case ClientMessage: 5824 case ClientMessage:
5794 { 5825 {
5795 if (event.xclient.message_type 5826 if (event->xclient.message_type == dpyinfo->Xatom_wm_protocols
5796 == dpyinfo->Xatom_wm_protocols 5827 && event->xclient.format == 32)
5797 && event.xclient.format == 32)
5798 { 5828 {
5799 if (event.xclient.data.l[0] 5829 if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_take_focus)
5800 == dpyinfo->Xatom_wm_take_focus)
5801 { 5830 {
5802 /* Use x_any_window_to_frame because this 5831 /* Use the value returned by x_any_window_to_frame
5803 could be the shell widget window 5832 because this could be the shell widget window
5804 if the frame has no title bar. */ 5833 if the frame has no title bar. */
5805 f = x_any_window_to_frame (dpyinfo, event.xclient.window); 5834 f = any;
5806#ifdef HAVE_X_I18N 5835#ifdef HAVE_X_I18N
5807 /* Not quite sure this is needed -pd */ 5836 /* Not quite sure this is needed -pd */
5808 if (f && FRAME_XIC (f)) 5837 if (f && FRAME_XIC (f))
@@ -5826,15 +5855,15 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5826 since that might be an event for a deleted frame. */ 5855 since that might be an event for a deleted frame. */
5827 if (f) 5856 if (f)
5828 { 5857 {
5829 Display *d = event.xclient.display; 5858 Display *d = event->xclient.display;
5830 /* Catch and ignore errors, in case window has been 5859 /* Catch and ignore errors, in case window has been
5831 iconified by a window manager such as GWM. */ 5860 iconified by a window manager such as GWM. */
5832 x_catch_errors (d); 5861 x_catch_errors (d);
5833 XSetInputFocus (d, event.xclient.window, 5862 XSetInputFocus (d, event->xclient.window,
5834 /* The ICCCM says this is 5863 /* The ICCCM says this is
5835 the only valid choice. */ 5864 the only valid choice. */
5836 RevertToParent, 5865 RevertToParent,
5837 event.xclient.data.l[1]); 5866 event->xclient.data.l[1]);
5838 /* This is needed to detect the error 5867 /* This is needed to detect the error
5839 if there is an error. */ 5868 if there is an error. */
5840 XSync (d, False); 5869 XSync (d, False);
@@ -5845,8 +5874,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5845 goto done; 5874 goto done;
5846 } 5875 }
5847 5876
5848 if (event.xclient.data.l[0] 5877 if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_save_yourself)
5849 == dpyinfo->Xatom_wm_save_yourself)
5850 { 5878 {
5851 /* Save state modify the WM_COMMAND property to 5879 /* Save state modify the WM_COMMAND property to
5852 something which can reinstate us. This notifies 5880 something which can reinstate us. This notifies
@@ -5861,26 +5889,24 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5861#endif 5889#endif
5862 { 5890 {
5863 f = x_top_window_to_frame (dpyinfo, 5891 f = x_top_window_to_frame (dpyinfo,
5864 event.xclient.window); 5892 event->xclient.window);
5865 /* This is just so we only give real data once 5893 /* This is just so we only give real data once
5866 for a single Emacs process. */ 5894 for a single Emacs process. */
5867 if (f == SELECTED_FRAME ()) 5895 if (f == SELECTED_FRAME ())
5868 XSetCommand (FRAME_X_DISPLAY (f), 5896 XSetCommand (FRAME_X_DISPLAY (f),
5869 event.xclient.window, 5897 event->xclient.window,
5870 initial_argv, initial_argc); 5898 initial_argv, initial_argc);
5871 else if (f) 5899 else if (f)
5872 XSetCommand (FRAME_X_DISPLAY (f), 5900 XSetCommand (FRAME_X_DISPLAY (f),
5873 event.xclient.window, 5901 event->xclient.window,
5874 0, 0); 5902 0, 0);
5875 } 5903 }
5876 goto done; 5904 goto done;
5877 } 5905 }
5878 5906
5879 if (event.xclient.data.l[0] 5907 if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_delete_window)
5880 == dpyinfo->Xatom_wm_delete_window)
5881 { 5908 {
5882 f = x_any_window_to_frame (dpyinfo, 5909 f = any;
5883 event.xclient.window);
5884 if (!f) 5910 if (!f)
5885 goto OTHER; /* May be a dialog that is to be removed */ 5911 goto OTHER; /* May be a dialog that is to be removed */
5886 5912
@@ -5892,20 +5918,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5892 goto done; 5918 goto done;
5893 } 5919 }
5894 5920
5895 if (event.xclient.message_type 5921 if (event->xclient.message_type == dpyinfo->Xatom_wm_configure_denied)
5896 == dpyinfo->Xatom_wm_configure_denied) 5922 goto done;
5897 {
5898 goto done;
5899 }
5900 5923
5901 if (event.xclient.message_type 5924 if (event->xclient.message_type == dpyinfo->Xatom_wm_window_moved)
5902 == dpyinfo->Xatom_wm_window_moved)
5903 { 5925 {
5904 int new_x, new_y; 5926 int new_x, new_y;
5905 f = x_window_to_frame (dpyinfo, event.xclient.window); 5927 f = x_window_to_frame (dpyinfo, event->xclient.window);
5906 5928
5907 new_x = event.xclient.data.s[0]; 5929 new_x = event->xclient.data.s[0];
5908 new_y = event.xclient.data.s[1]; 5930 new_y = event->xclient.data.s[1];
5909 5931
5910 if (f) 5932 if (f)
5911 { 5933 {
@@ -5916,28 +5938,25 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5916 } 5938 }
5917 5939
5918#ifdef HACK_EDITRES 5940#ifdef HACK_EDITRES
5919 if (event.xclient.message_type 5941 if (event->xclient.message_type == dpyinfo->Xatom_editres)
5920 == dpyinfo->Xatom_editres)
5921 { 5942 {
5922 f = x_any_window_to_frame (dpyinfo, event.xclient.window); 5943 f = any;
5923 if (f) 5944 if (f)
5924 _XEditResCheckMessages (f->output_data.x->widget, NULL, 5945 _XEditResCheckMessages (f->output_data.x->widget,
5925 &event, NULL); 5946 NULL, (XEvent *) event, NULL);
5926 goto done; 5947 goto done;
5927 } 5948 }
5928#endif /* HACK_EDITRES */ 5949#endif /* HACK_EDITRES */
5929 5950
5930 if ((event.xclient.message_type 5951 if (event->xclient.message_type == dpyinfo->Xatom_DONE
5931 == dpyinfo->Xatom_DONE) 5952 || event->xclient.message_type == dpyinfo->Xatom_PAGE)
5932 || (event.xclient.message_type
5933 == dpyinfo->Xatom_PAGE))
5934 { 5953 {
5935 /* Ghostview job completed. Kill it. We could 5954 /* Ghostview job completed. Kill it. We could
5936 reply with "Next" if we received "Page", but we 5955 reply with "Next" if we received "Page", but we
5937 currently never do because we are interested in 5956 currently never do because we are interested in
5938 images, only, which should have 1 page. */ 5957 images, only, which should have 1 page. */
5939 Pixmap pixmap = (Pixmap) event.xclient.data.l[1]; 5958 Pixmap pixmap = (Pixmap) event->xclient.data.l[1];
5940 f = x_window_to_frame (dpyinfo, event.xclient.window); 5959 f = x_window_to_frame (dpyinfo, event->xclient.window);
5941 if (!f) 5960 if (!f)
5942 goto OTHER; 5961 goto OTHER;
5943 x_kill_gs_process (pixmap, f); 5962 x_kill_gs_process (pixmap, f);
@@ -5948,54 +5967,52 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
5948#ifdef USE_TOOLKIT_SCROLL_BARS 5967#ifdef USE_TOOLKIT_SCROLL_BARS
5949 /* Scroll bar callbacks send a ClientMessage from which 5968 /* Scroll bar callbacks send a ClientMessage from which
5950 we construct an input_event. */ 5969 we construct an input_event. */
5951 if (event.xclient.message_type 5970 if (event->xclient.message_type == dpyinfo->Xatom_Scrollbar)
5952 == dpyinfo->Xatom_Scrollbar)
5953 { 5971 {
5954 x_scroll_bar_to_input_event (&event, &inev.ie); 5972 x_scroll_bar_to_input_event (event, &inev.ie);
5955 *finish = X_EVENT_GOTO_OUT; 5973 *finish = X_EVENT_GOTO_OUT;
5956 goto done; 5974 goto done;
5957 } 5975 }
5958#endif /* USE_TOOLKIT_SCROLL_BARS */ 5976#endif /* USE_TOOLKIT_SCROLL_BARS */
5959 5977
5960 /* XEmbed messages from the embedder (if any). */ 5978 /* XEmbed messages from the embedder (if any). */
5961 if (event.xclient.message_type 5979 if (event->xclient.message_type == dpyinfo->Xatom_XEMBED)
5962 == dpyinfo->Xatom_XEMBED)
5963 { 5980 {
5964 enum xembed_message msg = event.xclient.data.l[1]; 5981 enum xembed_message msg = event->xclient.data.l[1];
5965 if (msg == XEMBED_FOCUS_IN || msg == XEMBED_FOCUS_OUT) 5982 if (msg == XEMBED_FOCUS_IN || msg == XEMBED_FOCUS_OUT)
5966 x_detect_focus_change (dpyinfo, &event, &inev.ie); 5983 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
5967 5984
5968 *finish = X_EVENT_GOTO_OUT; 5985 *finish = X_EVENT_GOTO_OUT;
5969 goto done; 5986 goto done;
5970 } 5987 }
5971 5988
5972 xft_settings_event (dpyinfo, &event); 5989 xft_settings_event (dpyinfo, event);
5973 5990
5974 f = x_any_window_to_frame (dpyinfo, event.xclient.window); 5991 f = any;
5975 if (!f) 5992 if (!f)
5976 goto OTHER; 5993 goto OTHER;
5977 if (x_handle_dnd_message (f, &event.xclient, dpyinfo, &inev.ie)) 5994 if (x_handle_dnd_message (f, &event->xclient, dpyinfo, &inev.ie))
5978 *finish = X_EVENT_DROP; 5995 *finish = X_EVENT_DROP;
5979 } 5996 }
5980 break; 5997 break;
5981 5998
5982 case SelectionNotify: 5999 case SelectionNotify:
5983 last_user_time = event.xselection.time; 6000 dpyinfo->last_user_time = event->xselection.time;
5984#ifdef USE_X_TOOLKIT 6001#ifdef USE_X_TOOLKIT
5985 if (! x_window_to_frame (dpyinfo, event.xselection.requestor)) 6002 if (! x_window_to_frame (dpyinfo, event->xselection.requestor))
5986 goto OTHER; 6003 goto OTHER;
5987#endif /* not USE_X_TOOLKIT */ 6004#endif /* not USE_X_TOOLKIT */
5988 x_handle_selection_notify (&event.xselection); 6005 x_handle_selection_notify (&event->xselection);
5989 break; 6006 break;
5990 6007
5991 case SelectionClear: /* Someone has grabbed ownership. */ 6008 case SelectionClear: /* Someone has grabbed ownership. */
5992 last_user_time = event.xselectionclear.time; 6009 dpyinfo->last_user_time = event->xselectionclear.time;
5993#ifdef USE_X_TOOLKIT 6010#ifdef USE_X_TOOLKIT
5994 if (! x_window_to_frame (dpyinfo, event.xselectionclear.window)) 6011 if (! x_window_to_frame (dpyinfo, event->xselectionclear.window))
5995 goto OTHER; 6012 goto OTHER;
5996#endif /* USE_X_TOOLKIT */ 6013#endif /* USE_X_TOOLKIT */
5997 { 6014 {
5998 XSelectionClearEvent *eventp = &(event.xselectionclear); 6015 const XSelectionClearEvent *eventp = &event->xselectionclear;
5999 6016
6000 inev.ie.kind = SELECTION_CLEAR_EVENT; 6017 inev.ie.kind = SELECTION_CLEAR_EVENT;
6001 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; 6018 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
@@ -6005,29 +6022,29 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6005 break; 6022 break;
6006 6023
6007 case SelectionRequest: /* Someone wants our selection. */ 6024 case SelectionRequest: /* Someone wants our selection. */
6008 last_user_time = event.xselectionrequest.time; 6025 dpyinfo->last_user_time = event->xselectionrequest.time;
6009#ifdef USE_X_TOOLKIT 6026#ifdef USE_X_TOOLKIT
6010 if (!x_window_to_frame (dpyinfo, event.xselectionrequest.owner)) 6027 if (!x_window_to_frame (dpyinfo, event->xselectionrequest.owner))
6011 goto OTHER; 6028 goto OTHER;
6012#endif /* USE_X_TOOLKIT */ 6029#endif /* USE_X_TOOLKIT */
6013 { 6030 {
6014 XSelectionRequestEvent *eventp = &(event.xselectionrequest); 6031 const XSelectionRequestEvent *eventp = &event->xselectionrequest;
6015 6032
6016 inev.ie.kind = SELECTION_REQUEST_EVENT; 6033 inev.ie.kind = SELECTION_REQUEST_EVENT;
6017 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; 6034 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
6018 SELECTION_EVENT_REQUESTOR (&inev.sie) = eventp->requestor; 6035 SELECTION_EVENT_REQUESTOR (&inev.sie) = eventp->requestor;
6019 SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection; 6036 SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection;
6020 SELECTION_EVENT_TARGET (&inev.sie) = eventp->target; 6037 SELECTION_EVENT_TARGET (&inev.sie) = eventp->target;
6021 SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property; 6038 SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property;
6022 SELECTION_EVENT_TIME (&inev.sie) = eventp->time; 6039 SELECTION_EVENT_TIME (&inev.sie) = eventp->time;
6023 } 6040 }
6024 break; 6041 break;
6025 6042
6026 case PropertyNotify: 6043 case PropertyNotify:
6027 last_user_time = event.xproperty.time; 6044 dpyinfo->last_user_time = event->xproperty.time;
6028 f = x_top_window_to_frame (dpyinfo, event.xproperty.window); 6045 f = x_top_window_to_frame (dpyinfo, event->xproperty.window);
6029 if (f && event.xproperty.atom == dpyinfo->Xatom_net_wm_state) 6046 if (f && event->xproperty.atom == dpyinfo->Xatom_net_wm_state)
6030 if (x_handle_net_wm_state (f, &event.xproperty) 6047 if (x_handle_net_wm_state (f, &event->xproperty)
6031 && FRAME_ICONIFIED_P (f) 6048 && FRAME_ICONIFIED_P (f)
6032 && f->output_data.x->net_wm_state_hidden_seen) 6049 && f->output_data.x->net_wm_state_hidden_seen)
6033 { 6050 {
@@ -6042,39 +6059,29 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6042 XSETFRAME (inev.ie.frame_or_window, f); 6059 XSETFRAME (inev.ie.frame_or_window, f);
6043 } 6060 }
6044 6061
6045 x_handle_property_notify (&event.xproperty); 6062 x_handle_property_notify (&event->xproperty);
6046 xft_settings_event (dpyinfo, &event); 6063 xft_settings_event (dpyinfo, event);
6047 goto OTHER; 6064 goto OTHER;
6048 6065
6049 case ReparentNotify: 6066 case ReparentNotify:
6050 f = x_top_window_to_frame (dpyinfo, event.xreparent.window); 6067 f = x_top_window_to_frame (dpyinfo, event->xreparent.window);
6051 if (f) 6068 if (f)
6052 { 6069 {
6053 int x, y; 6070 f->output_data.x->parent_desc = event->xreparent.parent;
6054 f->output_data.x->parent_desc = event.xreparent.parent; 6071 x_real_positions (f, &f->left_pos, &f->top_pos);
6055 x_real_positions (f, &x, &y);
6056 f->left_pos = x;
6057 f->top_pos = y;
6058 6072
6059 /* Perhaps reparented due to a WM restart. Reset this. */ 6073 /* Perhaps reparented due to a WM restart. Reset this. */
6060 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN; 6074 FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN;
6061 FRAME_X_DISPLAY_INFO (f)->net_supported_window = 0; 6075 FRAME_DISPLAY_INFO (f)->net_supported_window = 0;
6062 6076
6063 x_set_frame_alpha (f); 6077 x_set_frame_alpha (f);
6064 } 6078 }
6065 goto OTHER; 6079 goto OTHER;
6066 6080
6067 case Expose: 6081 case Expose:
6068 f = x_window_to_frame (dpyinfo, event.xexpose.window); 6082 f = x_window_to_frame (dpyinfo, event->xexpose.window);
6069 if (f) 6083 if (f)
6070 { 6084 {
6071#ifdef USE_GTK
6072 /* This seems to be needed for GTK 2.6. */
6073 x_clear_area (event.xexpose.display,
6074 event.xexpose.window,
6075 event.xexpose.x, event.xexpose.y,
6076 event.xexpose.width, event.xexpose.height);
6077#endif
6078 if (!FRAME_VISIBLE_P (f)) 6085 if (!FRAME_VISIBLE_P (f))
6079 { 6086 {
6080 SET_FRAME_VISIBLE (f, 1); 6087 SET_FRAME_VISIBLE (f, 1);
@@ -6083,9 +6090,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6083 SET_FRAME_GARBAGED (f); 6090 SET_FRAME_GARBAGED (f);
6084 } 6091 }
6085 else 6092 else
6086 expose_frame (f, 6093 {
6087 event.xexpose.x, event.xexpose.y, 6094#ifdef USE_GTK
6088 event.xexpose.width, event.xexpose.height); 6095 /* This seems to be needed for GTK 2.6 and later, see
6096 http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15398. */
6097 x_clear_area (event->xexpose.display,
6098 event->xexpose.window,
6099 event->xexpose.x, event->xexpose.y,
6100 event->xexpose.width, event->xexpose.height);
6101#endif
6102 expose_frame (f, event->xexpose.x, event->xexpose.y,
6103 event->xexpose.width, event->xexpose.height);
6104 }
6089 } 6105 }
6090 else 6106 else
6091 { 6107 {
@@ -6097,8 +6113,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6097 themselves, so there's no way to dispatch events 6113 themselves, so there's no way to dispatch events
6098 to them. Recognize this case separately. */ 6114 to them. Recognize this case separately. */
6099 { 6115 {
6100 Widget widget 6116 Widget widget = x_window_to_menu_bar (event->xexpose.window);
6101 = x_window_to_menu_bar (event.xexpose.window);
6102 if (widget) 6117 if (widget)
6103 xlwmenu_redisplay (widget); 6118 xlwmenu_redisplay (widget);
6104 } 6119 }
@@ -6108,11 +6123,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6108 /* Dispatch event to the widget. */ 6123 /* Dispatch event to the widget. */
6109 goto OTHER; 6124 goto OTHER;
6110#else /* not USE_TOOLKIT_SCROLL_BARS */ 6125#else /* not USE_TOOLKIT_SCROLL_BARS */
6111 bar = x_window_to_scroll_bar (event.xexpose.display, 6126 bar = x_window_to_scroll_bar (event->xexpose.display,
6112 event.xexpose.window); 6127 event->xexpose.window);
6113 6128
6114 if (bar) 6129 if (bar)
6115 x_scroll_bar_expose (bar, &event); 6130 x_scroll_bar_expose (bar, event);
6116#ifdef USE_X_TOOLKIT 6131#ifdef USE_X_TOOLKIT
6117 else 6132 else
6118 goto OTHER; 6133 goto OTHER;
@@ -6124,14 +6139,12 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6124 case GraphicsExpose: /* This occurs when an XCopyArea's 6139 case GraphicsExpose: /* This occurs when an XCopyArea's
6125 source area was obscured or not 6140 source area was obscured or not
6126 available. */ 6141 available. */
6127 f = x_window_to_frame (dpyinfo, event.xgraphicsexpose.drawable); 6142 f = x_window_to_frame (dpyinfo, event->xgraphicsexpose.drawable);
6128 if (f) 6143 if (f)
6129 { 6144 expose_frame (f, event->xgraphicsexpose.x,
6130 expose_frame (f, 6145 event->xgraphicsexpose.y,
6131 event.xgraphicsexpose.x, event.xgraphicsexpose.y, 6146 event->xgraphicsexpose.width,
6132 event.xgraphicsexpose.width, 6147 event->xgraphicsexpose.height);
6133 event.xgraphicsexpose.height);
6134 }
6135#ifdef USE_X_TOOLKIT 6148#ifdef USE_X_TOOLKIT
6136 else 6149 else
6137 goto OTHER; 6150 goto OTHER;
@@ -6145,13 +6158,13 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6145 6158
6146 case UnmapNotify: 6159 case UnmapNotify:
6147 /* Redo the mouse-highlight after the tooltip has gone. */ 6160 /* Redo the mouse-highlight after the tooltip has gone. */
6148 if (event.xunmap.window == tip_window) 6161 if (event->xunmap.window == tip_window)
6149 { 6162 {
6150 tip_window = 0; 6163 tip_window = 0;
6151 redo_mouse_highlight (); 6164 x_redo_mouse_highlight (dpyinfo);
6152 } 6165 }
6153 6166
6154 f = x_top_window_to_frame (dpyinfo, event.xunmap.window); 6167 f = x_top_window_to_frame (dpyinfo, event->xunmap.window);
6155 if (f) /* F may no longer exist if 6168 if (f) /* F may no longer exist if
6156 the frame was deleted. */ 6169 the frame was deleted. */
6157 { 6170 {
@@ -6176,7 +6189,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6176 goto OTHER; 6189 goto OTHER;
6177 6190
6178 case MapNotify: 6191 case MapNotify:
6179 if (event.xmap.window == tip_window) 6192 if (event->xmap.window == tip_window)
6180 /* The tooltip has been drawn already. Avoid 6193 /* The tooltip has been drawn already. Avoid
6181 the SET_FRAME_GARBAGED below. */ 6194 the SET_FRAME_GARBAGED below. */
6182 goto OTHER; 6195 goto OTHER;
@@ -6184,7 +6197,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6184 /* We use x_top_window_to_frame because map events can 6197 /* We use x_top_window_to_frame because map events can
6185 come for sub-windows and they don't mean that the 6198 come for sub-windows and they don't mean that the
6186 frame is visible. */ 6199 frame is visible. */
6187 f = x_top_window_to_frame (dpyinfo, event.xmap.window); 6200 f = x_top_window_to_frame (dpyinfo, event->xmap.window);
6188 if (f) 6201 if (f)
6189 { 6202 {
6190 bool iconified = FRAME_ICONIFIED_P (f); 6203 bool iconified = FRAME_ICONIFIED_P (f);
@@ -6224,7 +6237,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6224 6237
6225 case KeyPress: 6238 case KeyPress:
6226 6239
6227 last_user_time = event.xkey.time; 6240 dpyinfo->last_user_time = event->xkey.time;
6228 ignore_next_mouse_click_timeout = 0; 6241 ignore_next_mouse_click_timeout = 0;
6229 6242
6230#if defined (USE_X_TOOLKIT) || defined (USE_GTK) 6243#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
@@ -6233,8 +6246,9 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6233 goto OTHER; 6246 goto OTHER;
6234#endif 6247#endif
6235 6248
6236 f = x_any_window_to_frame (dpyinfo, event.xkey.window); 6249 f = any;
6237 6250
6251#if ! defined (USE_GTK)
6238 /* If mouse-highlight is an integer, input clears out 6252 /* If mouse-highlight is an integer, input clears out
6239 mouse highlighting. */ 6253 mouse highlighting. */
6240 if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight) 6254 if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
@@ -6244,6 +6258,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6244 clear_mouse_face (hlinfo); 6258 clear_mouse_face (hlinfo);
6245 hlinfo->mouse_face_hidden = 1; 6259 hlinfo->mouse_face_hidden = 1;
6246 } 6260 }
6261#endif
6247 6262
6248#if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS 6263#if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS
6249 if (f == 0) 6264 if (f == 0)
@@ -6251,7 +6266,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6251 /* Scroll bars consume key events, but we want 6266 /* Scroll bars consume key events, but we want
6252 the keys to go to the scroll bar's frame. */ 6267 the keys to go to the scroll bar's frame. */
6253 Widget widget = XtWindowToWidget (dpyinfo->display, 6268 Widget widget = XtWindowToWidget (dpyinfo->display,
6254 event.xkey.window); 6269 event->xkey.window);
6255 if (widget && XmIsScrollBar (widget)) 6270 if (widget && XmIsScrollBar (widget))
6256 { 6271 {
6257 widget = XtParent (widget); 6272 widget = XtParent (widget);
@@ -6280,6 +6295,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6280 int modifiers; 6295 int modifiers;
6281 Lisp_Object coding_system = Qlatin_1; 6296 Lisp_Object coding_system = Qlatin_1;
6282 Lisp_Object c; 6297 Lisp_Object c;
6298 /* Event will be modified. */
6299 XKeyEvent xkey = event->xkey;
6283 6300
6284#ifdef USE_GTK 6301#ifdef USE_GTK
6285 /* Don't pass keys to GTK. A Tab will shift focus to the 6302 /* Don't pass keys to GTK. A Tab will shift focus to the
@@ -6289,20 +6306,19 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6289 *finish = X_EVENT_DROP; 6306 *finish = X_EVENT_DROP;
6290#endif 6307#endif
6291 6308
6292 event.xkey.state 6309 xkey.state |= x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f),
6293 |= x_emacs_to_x_modifiers (FRAME_X_DISPLAY_INFO (f), 6310 extra_keyboard_modifiers);
6294 extra_keyboard_modifiers); 6311 modifiers = xkey.state;
6295 modifiers = event.xkey.state;
6296 6312
6297 /* This will have to go some day... */ 6313 /* This will have to go some day... */
6298 6314
6299 /* make_lispy_event turns chars into control chars. 6315 /* make_lispy_event turns chars into control chars.
6300 Don't do it here because XLookupString is too eager. */ 6316 Don't do it here because XLookupString is too eager. */
6301 event.xkey.state &= ~ControlMask; 6317 xkey.state &= ~ControlMask;
6302 event.xkey.state &= ~(dpyinfo->meta_mod_mask 6318 xkey.state &= ~(dpyinfo->meta_mod_mask
6303 | dpyinfo->super_mod_mask 6319 | dpyinfo->super_mod_mask
6304 | dpyinfo->hyper_mod_mask 6320 | dpyinfo->hyper_mod_mask
6305 | dpyinfo->alt_mod_mask); 6321 | dpyinfo->alt_mod_mask);
6306 6322
6307 /* In case Meta is ComposeCharacter, 6323 /* In case Meta is ComposeCharacter,
6308 clear its status. According to Markus Ehrnsperger 6324 clear its status. According to Markus Ehrnsperger
@@ -6319,7 +6335,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6319 6335
6320 coding_system = Vlocale_coding_system; 6336 coding_system = Vlocale_coding_system;
6321 nbytes = XmbLookupString (FRAME_XIC (f), 6337 nbytes = XmbLookupString (FRAME_XIC (f),
6322 &event.xkey, (char *) copy_bufptr, 6338 &xkey, (char *) copy_bufptr,
6323 copy_bufsiz, &keysym, 6339 copy_bufsiz, &keysym,
6324 &status_return); 6340 &status_return);
6325 if (status_return == XBufferOverflow) 6341 if (status_return == XBufferOverflow)
@@ -6327,7 +6343,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6327 copy_bufsiz = nbytes + 1; 6343 copy_bufsiz = nbytes + 1;
6328 copy_bufptr = alloca (copy_bufsiz); 6344 copy_bufptr = alloca (copy_bufsiz);
6329 nbytes = XmbLookupString (FRAME_XIC (f), 6345 nbytes = XmbLookupString (FRAME_XIC (f),
6330 &event.xkey, (char *) copy_bufptr, 6346 &xkey, (char *) copy_bufptr,
6331 copy_bufsiz, &keysym, 6347 copy_bufsiz, &keysym,
6332 &status_return); 6348 &status_return);
6333 } 6349 }
@@ -6344,11 +6360,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6344 emacs_abort (); 6360 emacs_abort ();
6345 } 6361 }
6346 else 6362 else
6347 nbytes = XLookupString (&event.xkey, (char *) copy_bufptr, 6363 nbytes = XLookupString (&xkey, (char *) copy_bufptr,
6348 copy_bufsiz, &keysym, 6364 copy_bufsiz, &keysym,
6349 &compose_status); 6365 &compose_status);
6350#else 6366#else
6351 nbytes = XLookupString (&event.xkey, (char *) copy_bufptr, 6367 nbytes = XLookupString (&xkey, (char *) copy_bufptr,
6352 copy_bufsiz, &keysym, 6368 copy_bufsiz, &keysym,
6353 &compose_status); 6369 &compose_status);
6354#endif 6370#endif
@@ -6364,8 +6380,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6364 /* Common for all keysym input events. */ 6380 /* Common for all keysym input events. */
6365 XSETFRAME (inev.ie.frame_or_window, f); 6381 XSETFRAME (inev.ie.frame_or_window, f);
6366 inev.ie.modifiers 6382 inev.ie.modifiers
6367 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), modifiers); 6383 = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), modifiers);
6368 inev.ie.timestamp = event.xkey.time; 6384 inev.ie.timestamp = xkey.time;
6369 6385
6370 /* First deal with keysyms which have defined 6386 /* First deal with keysyms which have defined
6371 translations to characters. */ 6387 translations to characters. */
@@ -6541,6 +6557,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6541 if (keysym == NoSymbol) 6557 if (keysym == NoSymbol)
6542 break; 6558 break;
6543 } 6559 }
6560 /* FIXME: check side effects and remove this. */
6561 ((XEvent *) event)->xkey = xkey;
6544 } 6562 }
6545 done_keysym: 6563 done_keysym:
6546#ifdef HAVE_X_I18N 6564#ifdef HAVE_X_I18N
@@ -6553,7 +6571,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6553#endif 6571#endif
6554 6572
6555 case KeyRelease: 6573 case KeyRelease:
6556 last_user_time = event.xkey.time; 6574 dpyinfo->last_user_time = event->xkey.time;
6557#ifdef HAVE_X_I18N 6575#ifdef HAVE_X_I18N
6558 /* Don't dispatch this event since XtDispatchEvent calls 6576 /* Don't dispatch this event since XtDispatchEvent calls
6559 XFilterEvent, and two calls in a row may freeze the 6577 XFilterEvent, and two calls in a row may freeze the
@@ -6564,35 +6582,35 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6564#endif 6582#endif
6565 6583
6566 case EnterNotify: 6584 case EnterNotify:
6567 last_user_time = event.xcrossing.time; 6585 dpyinfo->last_user_time = event->xcrossing.time;
6568 x_detect_focus_change (dpyinfo, &event, &inev.ie); 6586 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
6569 6587
6570 f = x_any_window_to_frame (dpyinfo, event.xcrossing.window); 6588 f = any;
6571 6589
6572 if (f && x_mouse_click_focus_ignore_position) 6590 if (f && x_mouse_click_focus_ignore_position)
6573 ignore_next_mouse_click_timeout = event.xmotion.time + 200; 6591 ignore_next_mouse_click_timeout = event->xmotion.time + 200;
6574 6592
6575 /* EnterNotify counts as mouse movement, 6593 /* EnterNotify counts as mouse movement,
6576 so update things that depend on mouse position. */ 6594 so update things that depend on mouse position. */
6577 if (f && !f->output_data.x->hourglass_p) 6595 if (f && !f->output_data.x->hourglass_p)
6578 note_mouse_movement (f, &event.xmotion); 6596 note_mouse_movement (f, &event->xmotion);
6579#ifdef USE_GTK 6597#ifdef USE_GTK
6580 /* We may get an EnterNotify on the buttons in the toolbar. In that 6598 /* We may get an EnterNotify on the buttons in the toolbar. In that
6581 case we moved out of any highlighted area and need to note this. */ 6599 case we moved out of any highlighted area and need to note this. */
6582 if (!f && last_mouse_glyph_frame) 6600 if (!f && dpyinfo->last_mouse_glyph_frame)
6583 note_mouse_movement (last_mouse_glyph_frame, &event.xmotion); 6601 note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &event->xmotion);
6584#endif 6602#endif
6585 goto OTHER; 6603 goto OTHER;
6586 6604
6587 case FocusIn: 6605 case FocusIn:
6588 x_detect_focus_change (dpyinfo, &event, &inev.ie); 6606 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
6589 goto OTHER; 6607 goto OTHER;
6590 6608
6591 case LeaveNotify: 6609 case LeaveNotify:
6592 last_user_time = event.xcrossing.time; 6610 dpyinfo->last_user_time = event->xcrossing.time;
6593 x_detect_focus_change (dpyinfo, &event, &inev.ie); 6611 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
6594 6612
6595 f = x_top_window_to_frame (dpyinfo, event.xcrossing.window); 6613 f = x_top_window_to_frame (dpyinfo, event->xcrossing.window);
6596 if (f) 6614 if (f)
6597 { 6615 {
6598 if (f == hlinfo->mouse_face_mouse_frame) 6616 if (f == hlinfo->mouse_face_mouse_frame)
@@ -6612,26 +6630,23 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6612 } 6630 }
6613#ifdef USE_GTK 6631#ifdef USE_GTK
6614 /* See comment in EnterNotify above */ 6632 /* See comment in EnterNotify above */
6615 else if (last_mouse_glyph_frame) 6633 else if (dpyinfo->last_mouse_glyph_frame)
6616 note_mouse_movement (last_mouse_glyph_frame, &event.xmotion); 6634 note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &event->xmotion);
6617#endif 6635#endif
6618 goto OTHER; 6636 goto OTHER;
6619 6637
6620 case FocusOut: 6638 case FocusOut:
6621 x_detect_focus_change (dpyinfo, &event, &inev.ie); 6639 x_detect_focus_change (dpyinfo, any, event, &inev.ie);
6622 goto OTHER; 6640 goto OTHER;
6623 6641
6624 case MotionNotify: 6642 case MotionNotify:
6625 { 6643 {
6626 last_user_time = event.xmotion.time; 6644 dpyinfo->last_user_time = event->xmotion.time;
6627 previous_help_echo_string = help_echo_string; 6645 previous_help_echo_string = help_echo_string;
6628 help_echo_string = Qnil; 6646 help_echo_string = Qnil;
6629 6647
6630 if (dpyinfo->grabbed && last_mouse_frame 6648 f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
6631 && FRAME_LIVE_P (last_mouse_frame)) 6649 : x_window_to_frame (dpyinfo, event->xmotion.window));
6632 f = last_mouse_frame;
6633 else
6634 f = x_window_to_frame (dpyinfo, event.xmotion.window);
6635 6650
6636 if (hlinfo->mouse_face_hidden) 6651 if (hlinfo->mouse_face_hidden)
6637 { 6652 {
@@ -6640,7 +6655,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6640 } 6655 }
6641 6656
6642#ifdef USE_GTK 6657#ifdef USE_GTK
6643 if (f && xg_event_is_for_scrollbar (f, &event)) 6658 if (f && xg_event_is_for_scrollbar (f, event))
6644 f = 0; 6659 f = 0;
6645#endif 6660#endif
6646 if (f) 6661 if (f)
@@ -6652,7 +6667,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6652 { 6667 {
6653 static Lisp_Object last_mouse_window; 6668 static Lisp_Object last_mouse_window;
6654 Lisp_Object window = window_from_coordinates 6669 Lisp_Object window = window_from_coordinates
6655 (f, event.xmotion.x, event.xmotion.y, 0, 0); 6670 (f, event->xmotion.x, event->xmotion.y, 0, 0);
6656 6671
6657 /* Window will be selected only when it is not selected now and 6672 /* Window will be selected only when it is not selected now and
6658 last mouse movement event was not in it. Minibuffer window 6673 last mouse movement event was not in it. Minibuffer window
@@ -6673,18 +6688,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6673 /* Remember the last window where we saw the mouse. */ 6688 /* Remember the last window where we saw the mouse. */
6674 last_mouse_window = window; 6689 last_mouse_window = window;
6675 } 6690 }
6676 if (!note_mouse_movement (f, &event.xmotion)) 6691 if (!note_mouse_movement (f, &event->xmotion))
6677 help_echo_string = previous_help_echo_string; 6692 help_echo_string = previous_help_echo_string;
6678 } 6693 }
6679 else 6694 else
6680 { 6695 {
6681#ifndef USE_TOOLKIT_SCROLL_BARS 6696#ifndef USE_TOOLKIT_SCROLL_BARS
6682 struct scroll_bar *bar 6697 struct scroll_bar *bar
6683 = x_window_to_scroll_bar (event.xmotion.display, 6698 = x_window_to_scroll_bar (event->xmotion.display,
6684 event.xmotion.window); 6699 event->xmotion.window);
6685 6700
6686 if (bar) 6701 if (bar)
6687 x_scroll_bar_note_movement (bar, &event.xmotion); 6702 x_scroll_bar_note_movement (bar, &event->xmotion);
6688#endif /* USE_TOOLKIT_SCROLL_BARS */ 6703#endif /* USE_TOOLKIT_SCROLL_BARS */
6689 6704
6690 /* If we move outside the frame, then we're 6705 /* If we move outside the frame, then we're
@@ -6701,14 +6716,14 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6701 } 6716 }
6702 6717
6703 case ConfigureNotify: 6718 case ConfigureNotify:
6704 f = x_top_window_to_frame (dpyinfo, event.xconfigure.window); 6719 f = x_top_window_to_frame (dpyinfo, event->xconfigure.window);
6705#ifdef USE_GTK 6720#ifdef USE_GTK
6706 if (!f 6721 if (!f
6707 && (f = x_any_window_to_frame (dpyinfo, event.xconfigure.window)) 6722 && (f = any)
6708 && event.xconfigure.window == FRAME_X_WINDOW (f)) 6723 && event->xconfigure.window == FRAME_X_WINDOW (f))
6709 { 6724 {
6710 xg_frame_resized (f, event.xconfigure.width, 6725 xg_frame_resized (f, event->xconfigure.width,
6711 event.xconfigure.height); 6726 event->xconfigure.height);
6712 f = 0; 6727 f = 0;
6713 } 6728 }
6714#endif 6729#endif
@@ -6716,8 +6731,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6716 { 6731 {
6717#ifndef USE_X_TOOLKIT 6732#ifndef USE_X_TOOLKIT
6718#ifndef USE_GTK 6733#ifndef USE_GTK
6719 int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, event.xconfigure.height); 6734 int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, event->xconfigure.height);
6720 int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, event.xconfigure.width); 6735 int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, event->xconfigure.width);
6721 6736
6722 /* In the toolkit version, change_frame_size 6737 /* In the toolkit version, change_frame_size
6723 is called by the code that handles resizing 6738 is called by the code that handles resizing
@@ -6728,16 +6743,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6728 to check the pixel dimensions as well. */ 6743 to check the pixel dimensions as well. */
6729 if (columns != FRAME_COLS (f) 6744 if (columns != FRAME_COLS (f)
6730 || rows != FRAME_LINES (f) 6745 || rows != FRAME_LINES (f)
6731 || event.xconfigure.width != FRAME_PIXEL_WIDTH (f) 6746 || event->xconfigure.width != FRAME_PIXEL_WIDTH (f)
6732 || event.xconfigure.height != FRAME_PIXEL_HEIGHT (f)) 6747 || event->xconfigure.height != FRAME_PIXEL_HEIGHT (f))
6733 { 6748 {
6734 change_frame_size (f, rows, columns, 0, 1, 0); 6749 change_frame_size (f, rows, columns, 0, 1, 0);
6735 SET_FRAME_GARBAGED (f); 6750 SET_FRAME_GARBAGED (f);
6736 cancel_mouse_face (f); 6751 cancel_mouse_face (f);
6737 } 6752 }
6738 6753
6739 FRAME_PIXEL_WIDTH (f) = event.xconfigure.width; 6754 FRAME_PIXEL_WIDTH (f) = event->xconfigure.width;
6740 FRAME_PIXEL_HEIGHT (f) = event.xconfigure.height; 6755 FRAME_PIXEL_HEIGHT (f) = event->xconfigure.height;
6741#endif /* not USE_GTK */ 6756#endif /* not USE_GTK */
6742#endif 6757#endif
6743 6758
@@ -6747,9 +6762,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6747 if (FRAME_GTK_OUTER_WIDGET (f) 6762 if (FRAME_GTK_OUTER_WIDGET (f)
6748 && gtk_widget_get_mapped (FRAME_GTK_OUTER_WIDGET (f))) 6763 && gtk_widget_get_mapped (FRAME_GTK_OUTER_WIDGET (f)))
6749#endif 6764#endif
6750 { 6765 x_real_positions (f, &f->left_pos, &f->top_pos);
6751 x_real_positions (f, &f->left_pos, &f->top_pos);
6752 }
6753 6766
6754#ifdef HAVE_X_I18N 6767#ifdef HAVE_X_I18N
6755 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea)) 6768 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea))
@@ -6766,42 +6779,37 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6766 by the rest of Emacs, we put it here. */ 6779 by the rest of Emacs, we put it here. */
6767 bool tool_bar_p = 0; 6780 bool tool_bar_p = 0;
6768 6781
6769 memset (&compose_status, 0, sizeof (compose_status)); 6782 memset (&compose_status, 0, sizeof (compose_status));
6770 last_mouse_glyph_frame = 0; 6783 dpyinfo->last_mouse_glyph_frame = NULL;
6771 last_user_time = event.xbutton.time; 6784 dpyinfo->last_user_time = event->xbutton.time;
6772 6785
6773 if (dpyinfo->grabbed 6786 f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
6774 && last_mouse_frame 6787 : x_window_to_frame (dpyinfo, event->xbutton.window));
6775 && FRAME_LIVE_P (last_mouse_frame))
6776 f = last_mouse_frame;
6777 else
6778 f = x_window_to_frame (dpyinfo, event.xbutton.window);
6779 6788
6780#ifdef USE_GTK 6789#ifdef USE_GTK
6781 if (f && xg_event_is_for_scrollbar (f, &event)) 6790 if (f && xg_event_is_for_scrollbar (f, event))
6782 f = 0; 6791 f = 0;
6783#endif 6792#endif
6784 if (f) 6793 if (f)
6785 { 6794 {
6795#if ! defined (USE_GTK)
6786 /* Is this in the tool-bar? */ 6796 /* Is this in the tool-bar? */
6787 if (WINDOWP (f->tool_bar_window) 6797 if (WINDOWP (f->tool_bar_window)
6788 && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window))) 6798 && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)))
6789 { 6799 {
6790 Lisp_Object window; 6800 Lisp_Object window;
6791 int x = event.xbutton.x; 6801 int x = event->xbutton.x;
6792 int y = event.xbutton.y; 6802 int y = event->xbutton.y;
6793 6803
6794 window = window_from_coordinates (f, x, y, 0, 1); 6804 window = window_from_coordinates (f, x, y, 0, 1);
6795 tool_bar_p = EQ (window, f->tool_bar_window); 6805 tool_bar_p = EQ (window, f->tool_bar_window);
6796 6806
6797 if (tool_bar_p && event.xbutton.button < 4) 6807 if (tool_bar_p && event->xbutton.button < 4)
6798 { 6808 handle_tool_bar_click
6799 handle_tool_bar_click (f, x, y, 6809 (f, x, y, event->xbutton.type == ButtonPress,
6800 event.xbutton.type == ButtonPress, 6810 x_x_to_emacs_modifiers (dpyinfo, event->xbutton.state));
6801 x_x_to_emacs_modifiers (dpyinfo,
6802 event.xbutton.state));
6803 }
6804 } 6811 }
6812#endif /* !USE_GTK */
6805 6813
6806 if (!tool_bar_p) 6814 if (!tool_bar_p)
6807#if defined (USE_X_TOOLKIT) || defined (USE_GTK) 6815#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
@@ -6810,52 +6818,52 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6810 { 6818 {
6811 if (ignore_next_mouse_click_timeout) 6819 if (ignore_next_mouse_click_timeout)
6812 { 6820 {
6813 if (event.type == ButtonPress 6821 if (event->type == ButtonPress
6814 && (int)(event.xbutton.time - ignore_next_mouse_click_timeout) > 0) 6822 && event->xbutton.time > ignore_next_mouse_click_timeout)
6815 { 6823 {
6816 ignore_next_mouse_click_timeout = 0; 6824 ignore_next_mouse_click_timeout = 0;
6817 construct_mouse_click (&inev.ie, &event.xbutton, f); 6825 construct_mouse_click (&inev.ie, &event->xbutton, f);
6818 } 6826 }
6819 if (event.type == ButtonRelease) 6827 if (event->type == ButtonRelease)
6820 ignore_next_mouse_click_timeout = 0; 6828 ignore_next_mouse_click_timeout = 0;
6821 } 6829 }
6822 else 6830 else
6823 construct_mouse_click (&inev.ie, &event.xbutton, f); 6831 construct_mouse_click (&inev.ie, &event->xbutton, f);
6824 } 6832 }
6825 if (FRAME_X_EMBEDDED_P (f)) 6833 if (FRAME_X_EMBEDDED_P (f))
6826 xembed_send_message (f, event.xbutton.time, 6834 xembed_send_message (f, event->xbutton.time,
6827 XEMBED_REQUEST_FOCUS, 0, 0, 0); 6835 XEMBED_REQUEST_FOCUS, 0, 0, 0);
6828 } 6836 }
6829 else 6837 else
6830 { 6838 {
6831 struct scroll_bar *bar 6839 struct scroll_bar *bar
6832 = x_window_to_scroll_bar (event.xbutton.display, 6840 = x_window_to_scroll_bar (event->xbutton.display,
6833 event.xbutton.window); 6841 event->xbutton.window);
6834 6842
6835#ifdef USE_TOOLKIT_SCROLL_BARS 6843#ifdef USE_TOOLKIT_SCROLL_BARS
6836 /* Make the "Ctrl-Mouse-2 splits window" work for toolkit 6844 /* Make the "Ctrl-Mouse-2 splits window" work for toolkit
6837 scroll bars. */ 6845 scroll bars. */
6838 if (bar && event.xbutton.state & ControlMask) 6846 if (bar && event->xbutton.state & ControlMask)
6839 { 6847 {
6840 x_scroll_bar_handle_click (bar, &event, &inev.ie); 6848 x_scroll_bar_handle_click (bar, event, &inev.ie);
6841 *finish = X_EVENT_DROP; 6849 *finish = X_EVENT_DROP;
6842 } 6850 }
6843#else /* not USE_TOOLKIT_SCROLL_BARS */ 6851#else /* not USE_TOOLKIT_SCROLL_BARS */
6844 if (bar) 6852 if (bar)
6845 x_scroll_bar_handle_click (bar, &event, &inev.ie); 6853 x_scroll_bar_handle_click (bar, event, &inev.ie);
6846#endif /* not USE_TOOLKIT_SCROLL_BARS */ 6854#endif /* not USE_TOOLKIT_SCROLL_BARS */
6847 } 6855 }
6848 6856
6849 if (event.type == ButtonPress) 6857 if (event->type == ButtonPress)
6850 { 6858 {
6851 dpyinfo->grabbed |= (1 << event.xbutton.button); 6859 dpyinfo->grabbed |= (1 << event->xbutton.button);
6852 last_mouse_frame = f; 6860 dpyinfo->last_mouse_frame = f;
6853 6861
6854 if (!tool_bar_p) 6862 if (!tool_bar_p)
6855 last_tool_bar_item = -1; 6863 last_tool_bar_item = -1;
6856 } 6864 }
6857 else 6865 else
6858 dpyinfo->grabbed &= ~(1 << event.xbutton.button); 6866 dpyinfo->grabbed &= ~(1 << event->xbutton.button);
6859 6867
6860 /* Ignore any mouse motion that happened before this event; 6868 /* Ignore any mouse motion that happened before this event;
6861 any subsequent mouse-movement Emacs events should reflect 6869 any subsequent mouse-movement Emacs events should reflect
@@ -6864,7 +6872,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6864 f->mouse_moved = 0; 6872 f->mouse_moved = 0;
6865 6873
6866#if defined (USE_X_TOOLKIT) || defined (USE_GTK) 6874#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
6867 f = x_menubar_window_to_frame (dpyinfo, &event); 6875 f = x_menubar_window_to_frame (dpyinfo, event);
6868 /* For a down-event in the menu bar, 6876 /* For a down-event in the menu bar,
6869 don't pass it to Xt right now. 6877 don't pass it to Xt right now.
6870 Instead, save it away 6878 Instead, save it away
@@ -6873,19 +6881,23 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6873 if (! popup_activated () 6881 if (! popup_activated ()
6874#ifdef USE_GTK 6882#ifdef USE_GTK
6875 /* Gtk+ menus only react to the first three buttons. */ 6883 /* Gtk+ menus only react to the first three buttons. */
6876 && event.xbutton.button < 3 6884 && event->xbutton.button < 3
6877#endif 6885#endif
6878 && f && event.type == ButtonPress 6886 && f && event->type == ButtonPress
6879 /* Verify the event is really within the menu bar 6887 /* Verify the event is really within the menu bar
6880 and not just sent to it due to grabbing. */ 6888 and not just sent to it due to grabbing. */
6881 && event.xbutton.x >= 0 6889 && event->xbutton.x >= 0
6882 && event.xbutton.x < FRAME_PIXEL_WIDTH (f) 6890 && event->xbutton.x < FRAME_PIXEL_WIDTH (f)
6883 && event.xbutton.y >= 0 6891 && event->xbutton.y >= 0
6884 && event.xbutton.y < f->output_data.x->menubar_height 6892 && event->xbutton.y < f->output_data.x->menubar_height
6885 && event.xbutton.same_screen) 6893 && event->xbutton.same_screen)
6886 { 6894 {
6887 SET_SAVED_BUTTON_EVENT; 6895 if (!f->output_data.x->saved_menu_event)
6888 *finish = X_EVENT_DROP; 6896 f->output_data.x->saved_menu_event = xmalloc (sizeof *event);
6897 *f->output_data.x->saved_menu_event = *event;
6898 inev.ie.kind = MENU_BAR_ACTIVATE_EVENT;
6899 XSETFRAME (inev.ie.frame_or_window, f);
6900 *finish = X_EVENT_DROP;
6889 } 6901 }
6890 else 6902 else
6891 goto OTHER; 6903 goto OTHER;
@@ -6905,18 +6917,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6905 case MappingNotify: 6917 case MappingNotify:
6906 /* Someone has changed the keyboard mapping - update the 6918 /* Someone has changed the keyboard mapping - update the
6907 local cache. */ 6919 local cache. */
6908 switch (event.xmapping.request) 6920 switch (event->xmapping.request)
6909 { 6921 {
6910 case MappingModifier: 6922 case MappingModifier:
6911 x_find_modifier_meanings (dpyinfo); 6923 x_find_modifier_meanings (dpyinfo);
6912 /* This is meant to fall through. */ 6924 /* This is meant to fall through. */
6913 case MappingKeyboard: 6925 case MappingKeyboard:
6914 XRefreshKeyboardMapping (&event.xmapping); 6926 XRefreshKeyboardMapping ((XMappingEvent *) &event->xmapping);
6915 } 6927 }
6916 goto OTHER; 6928 goto OTHER;
6917 6929
6918 case DestroyNotify: 6930 case DestroyNotify:
6919 xft_settings_event (dpyinfo, &event); 6931 xft_settings_event (dpyinfo, event);
6920 break; 6932 break;
6921 6933
6922 default: 6934 default:
@@ -6924,7 +6936,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6924#ifdef USE_X_TOOLKIT 6936#ifdef USE_X_TOOLKIT
6925 block_input (); 6937 block_input ();
6926 if (*finish != X_EVENT_DROP) 6938 if (*finish != X_EVENT_DROP)
6927 XtDispatchEvent (&event); 6939 XtDispatchEvent ((XEvent *) event);
6928 unblock_input (); 6940 unblock_input ();
6929#endif /* USE_X_TOOLKIT */ 6941#endif /* USE_X_TOOLKIT */
6930 break; 6942 break;
@@ -6962,7 +6974,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr,
6962 } 6974 }
6963 6975
6964 SAFE_FREE (); 6976 SAFE_FREE ();
6965 *eventptr = event;
6966 return count; 6977 return count;
6967} 6978}
6968 6979
@@ -7002,6 +7013,7 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit)
7002{ 7013{
7003 int count = 0; 7014 int count = 0;
7004 int event_found = 0; 7015 int event_found = 0;
7016 struct x_display_info *dpyinfo = terminal->display_info.x;
7005 7017
7006 block_input (); 7018 block_input ();
7007 7019
@@ -7009,36 +7021,33 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit)
7009 input_signal_count++; 7021 input_signal_count++;
7010 7022
7011 /* For debugging, this gives a way to fake an I/O error. */ 7023 /* For debugging, this gives a way to fake an I/O error. */
7012 if (terminal->display_info.x == XTread_socket_fake_io_error) 7024 if (dpyinfo == XTread_socket_fake_io_error)
7013 { 7025 {
7014 XTread_socket_fake_io_error = 0; 7026 XTread_socket_fake_io_error = 0;
7015 x_io_error_quitter (terminal->display_info.x->display); 7027 x_io_error_quitter (dpyinfo->display);
7016 } 7028 }
7017 7029
7018#ifndef USE_GTK 7030#ifndef USE_GTK
7019 while (XPending (terminal->display_info.x->display)) 7031 while (XPending (dpyinfo->display))
7020 { 7032 {
7021 int finish; 7033 int finish;
7022 XEvent event; 7034 XEvent event;
7023 7035
7024 XNextEvent (terminal->display_info.x->display, &event); 7036 XNextEvent (dpyinfo->display, &event);
7025 7037
7026#ifdef HAVE_X_I18N 7038#ifdef HAVE_X_I18N
7027 /* Filter events for the current X input method. */ 7039 /* Filter events for the current X input method. */
7028 if (x_filter_event (terminal->display_info.x, &event)) 7040 if (x_filter_event (dpyinfo, &event))
7029 continue; 7041 continue;
7030#endif 7042#endif
7031 event_found = 1; 7043 event_found = 1;
7032 7044
7033 count += handle_one_xevent (terminal->display_info.x, 7045 count += handle_one_xevent (dpyinfo, &event, &finish, hold_quit);
7034 &event, &finish, hold_quit);
7035 7046
7036 if (finish == X_EVENT_GOTO_OUT) 7047 if (finish == X_EVENT_GOTO_OUT)
7037 goto out; 7048 break;
7038 } 7049 }
7039 7050
7040 out:;
7041
7042#else /* USE_GTK */ 7051#else /* USE_GTK */
7043 7052
7044 /* For GTK we must use the GTK event loop. But XEvents gets passed 7053 /* For GTK we must use the GTK event loop. But XEvents gets passed
@@ -7088,12 +7097,11 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit)
7088 } 7097 }
7089 7098
7090 /* If the focus was just given to an auto-raising frame, 7099 /* If the focus was just given to an auto-raising frame,
7091 raise it now. */ 7100 raise it now. FIXME: handle more than one such frame. */
7092 /* ??? This ought to be able to handle more than one such frame. */ 7101 if (dpyinfo->x_pending_autoraise_frame)
7093 if (pending_autoraise_frame)
7094 { 7102 {
7095 x_raise_frame (pending_autoraise_frame); 7103 x_raise_frame (dpyinfo->x_pending_autoraise_frame);
7096 pending_autoraise_frame = 0; 7104 dpyinfo->x_pending_autoraise_frame = NULL;
7097 } 7105 }
7098 7106
7099 unblock_input (); 7107 unblock_input ();
@@ -7141,7 +7149,7 @@ static void
7141x_draw_hollow_cursor (struct window *w, struct glyph_row *row) 7149x_draw_hollow_cursor (struct window *w, struct glyph_row *row)
7142{ 7150{
7143 struct frame *f = XFRAME (WINDOW_FRAME (w)); 7151 struct frame *f = XFRAME (WINDOW_FRAME (w));
7144 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 7152 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
7145 Display *dpy = FRAME_X_DISPLAY (f); 7153 Display *dpy = FRAME_X_DISPLAY (f);
7146 int x, y, wd, h; 7154 int x, y, wd, h;
7147 XGCValues xgcv; 7155 XGCValues xgcv;
@@ -7208,7 +7216,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
7208 { 7216 {
7209 Display *dpy = FRAME_X_DISPLAY (f); 7217 Display *dpy = FRAME_X_DISPLAY (f);
7210 Window window = FRAME_X_WINDOW (f); 7218 Window window = FRAME_X_WINDOW (f);
7211 GC gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; 7219 GC gc = FRAME_DISPLAY_INFO (f)->scratch_cursor_gc;
7212 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures; 7220 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures;
7213 struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id); 7221 struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id);
7214 XGCValues xgcv; 7222 XGCValues xgcv;
@@ -7229,7 +7237,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
7229 else 7237 else
7230 { 7238 {
7231 gc = XCreateGC (dpy, window, mask, &xgcv); 7239 gc = XCreateGC (dpy, window, mask, &xgcv);
7232 FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc = gc; 7240 FRAME_DISPLAY_INFO (f)->scratch_cursor_gc = gc;
7233 } 7241 }
7234 7242
7235 x_clip_to_row (w, row, TEXT_AREA, gc); 7243 x_clip_to_row (w, row, TEXT_AREA, gc);
@@ -7361,9 +7369,7 @@ x_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
7361#endif 7369#endif
7362 } 7370 }
7363 7371
7364#ifndef XFlush
7365 XFlush (FRAME_X_DISPLAY (f)); 7372 XFlush (FRAME_X_DISPLAY (f));
7366#endif
7367} 7373}
7368 7374
7369 7375
@@ -7398,7 +7404,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
7398 else 7404 else
7399 { 7405 {
7400 /* Create the GNU bitmap and mask if necessary. */ 7406 /* Create the GNU bitmap and mask if necessary. */
7401 if (FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id < 0) 7407 if (FRAME_DISPLAY_INFO (f)->icon_bitmap_id < 0)
7402 { 7408 {
7403 ptrdiff_t rc = -1; 7409 ptrdiff_t rc = -1;
7404 7410
@@ -7412,7 +7418,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
7412 7418
7413 rc = x_create_bitmap_from_xpm_data (f, gnu_xpm_bits); 7419 rc = x_create_bitmap_from_xpm_data (f, gnu_xpm_bits);
7414 if (rc != -1) 7420 if (rc != -1)
7415 FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc; 7421 FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc;
7416 7422
7417#endif 7423#endif
7418 7424
@@ -7424,8 +7430,8 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
7424 if (rc == -1) 7430 if (rc == -1)
7425 return 1; 7431 return 1;
7426 7432
7427 FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc; 7433 FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc;
7428 x_create_bitmap_mask (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id); 7434 x_create_bitmap_mask (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id);
7429 } 7435 }
7430 } 7436 }
7431 7437
@@ -7433,9 +7439,9 @@ x_bitmap_icon (struct frame *f, Lisp_Object file)
7433 this increments the ref-count one extra time. 7439 this increments the ref-count one extra time.
7434 As a result, the GNU bitmap and mask are never freed. 7440 As a result, the GNU bitmap and mask are never freed.
7435 That way, we don't have to worry about allocating it again. */ 7441 That way, we don't have to worry about allocating it again. */
7436 x_reference_bitmap (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id); 7442 x_reference_bitmap (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id);
7437 7443
7438 bitmap_id = FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id; 7444 bitmap_id = FRAME_DISPLAY_INFO (f)->icon_bitmap_id;
7439 } 7445 }
7440 7446
7441 x_wm_set_icon_pixmap (f, bitmap_id); 7447 x_wm_set_icon_pixmap (f, bitmap_id);
@@ -7649,7 +7655,7 @@ x_connection_closed (Display *dpy, const char *error_message)
7649 if (FRAME_X_P (XFRAME (frame)) 7655 if (FRAME_X_P (XFRAME (frame))
7650 && FRAME_X_P (XFRAME (minibuf_frame)) 7656 && FRAME_X_P (XFRAME (minibuf_frame))
7651 && ! EQ (frame, minibuf_frame) 7657 && ! EQ (frame, minibuf_frame)
7652 && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo) 7658 && FRAME_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo)
7653 delete_frame (frame, Qnoelisp); 7659 delete_frame (frame, Qnoelisp);
7654 } 7660 }
7655 7661
@@ -7658,7 +7664,7 @@ x_connection_closed (Display *dpy, const char *error_message)
7658 for another frame that we need to delete. */ 7664 for another frame that we need to delete. */
7659 FOR_EACH_FRAME (tail, frame) 7665 FOR_EACH_FRAME (tail, frame)
7660 if (FRAME_X_P (XFRAME (frame)) 7666 if (FRAME_X_P (XFRAME (frame))
7661 && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) 7667 && FRAME_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
7662 { 7668 {
7663 /* Set this to t so that delete_frame won't get confused 7669 /* Set this to t so that delete_frame won't get confused
7664 trying to find a replacement. */ 7670 trying to find a replacement. */
@@ -7881,7 +7887,7 @@ xim_destroy_callback (XIM xim, XPointer client_data, XPointer call_data)
7881 FOR_EACH_FRAME (tail, frame) 7887 FOR_EACH_FRAME (tail, frame)
7882 { 7888 {
7883 struct frame *f = XFRAME (frame); 7889 struct frame *f = XFRAME (frame);
7884 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) 7890 if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo)
7885 { 7891 {
7886 FRAME_XIC (f) = NULL; 7892 FRAME_XIC (f) = NULL;
7887 xic_free_xfontset (f); 7893 xic_free_xfontset (f);
@@ -7972,7 +7978,7 @@ xim_instantiate_callback (Display *display, XPointer client_data, XPointer call_
7972 struct frame *f = XFRAME (frame); 7978 struct frame *f = XFRAME (frame);
7973 7979
7974 if (FRAME_X_P (f) 7980 if (FRAME_X_P (f)
7975 && FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo) 7981 && FRAME_DISPLAY_INFO (f) == xim_inst->dpyinfo)
7976 if (FRAME_XIC (f) == NULL) 7982 if (FRAME_XIC (f) == NULL)
7977 { 7983 {
7978 create_frame_xic (f); 7984 create_frame_xic (f);
@@ -8070,7 +8076,7 @@ x_calc_absolute_position (struct frame *f)
8070 /* Treat negative positions as relative to the leftmost bottommost 8076 /* Treat negative positions as relative to the leftmost bottommost
8071 position that fits on the screen. */ 8077 position that fits on the screen. */
8072 if (flags & XNegative) 8078 if (flags & XNegative)
8073 f->left_pos = x_display_pixel_width (FRAME_X_DISPLAY_INFO (f)) 8079 f->left_pos = x_display_pixel_width (FRAME_DISPLAY_INFO (f))
8074 - FRAME_PIXEL_WIDTH (f) + f->left_pos; 8080 - FRAME_PIXEL_WIDTH (f) + f->left_pos;
8075 8081
8076 { 8082 {
@@ -8093,7 +8099,7 @@ x_calc_absolute_position (struct frame *f)
8093#endif 8099#endif
8094 8100
8095 if (flags & YNegative) 8101 if (flags & YNegative)
8096 f->top_pos = x_display_pixel_height (FRAME_X_DISPLAY_INFO (f)) 8102 f->top_pos = x_display_pixel_height (FRAME_DISPLAY_INFO (f))
8097 - height + f->top_pos; 8103 - height + f->top_pos;
8098 } 8104 }
8099 8105
@@ -8133,7 +8139,7 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_
8133 modified_left = f->left_pos; 8139 modified_left = f->left_pos;
8134 modified_top = f->top_pos; 8140 modified_top = f->top_pos;
8135 8141
8136 if (change_gravity != 0 && FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A) 8142 if (change_gravity != 0 && FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A)
8137 { 8143 {
8138 /* Some WMs (twm, wmaker at least) has an offset that is smaller 8144 /* Some WMs (twm, wmaker at least) has an offset that is smaller
8139 than the WM decorations. So we use the calculated offset instead 8145 than the WM decorations. So we use the calculated offset instead
@@ -8146,7 +8152,7 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_
8146 modified_left, modified_top); 8152 modified_left, modified_top);
8147 8153
8148 x_sync_with_move (f, f->left_pos, f->top_pos, 8154 x_sync_with_move (f, f->left_pos, f->top_pos,
8149 FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN 8155 FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN
8150 ? 1 : 0); 8156 ? 1 : 0);
8151 8157
8152 /* change_gravity is non-zero when this function is called from Lisp to 8158 /* change_gravity is non-zero when this function is called from Lisp to
@@ -8160,8 +8166,8 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_
8160 need to compute the top/left offset adjustment for this frame. */ 8166 need to compute the top/left offset adjustment for this frame. */
8161 8167
8162 if (change_gravity != 0 && 8168 if (change_gravity != 0 &&
8163 (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN 8169 (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN
8164 || (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A 8170 || (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A
8165 && (FRAME_X_OUTPUT (f)->move_offset_left == 0 8171 && (FRAME_X_OUTPUT (f)->move_offset_left == 0
8166 && FRAME_X_OUTPUT (f)->move_offset_top == 0)))) 8172 && FRAME_X_OUTPUT (f)->move_offset_top == 0))))
8167 x_check_expected_move (f, modified_left, modified_top); 8173 x_check_expected_move (f, modified_left, modified_top);
@@ -8182,7 +8188,7 @@ wm_supports (struct frame *f, Atom want_atom)
8182 unsigned long actual_size, bytes_remaining; 8188 unsigned long actual_size, bytes_remaining;
8183 int i, rc, actual_format; 8189 int i, rc, actual_format;
8184 Window wmcheck_window; 8190 Window wmcheck_window;
8185 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8191 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8186 Window target_window = dpyinfo->root_window; 8192 Window target_window = dpyinfo->root_window;
8187 long max_len = 65536; 8193 long max_len = 65536;
8188 Display *dpy = FRAME_X_DISPLAY (f); 8194 Display *dpy = FRAME_X_DISPLAY (f);
@@ -8263,7 +8269,7 @@ wm_supports (struct frame *f, Atom want_atom)
8263static void 8269static void
8264set_wm_state (Lisp_Object frame, int add, Atom atom, Atom value) 8270set_wm_state (Lisp_Object frame, int add, Atom atom, Atom value)
8265{ 8271{
8266 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame)); 8272 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (XFRAME (frame));
8267 8273
8268 x_send_client_event (frame, make_number (0), frame, 8274 x_send_client_event (frame, make_number (0), frame,
8269 dpyinfo->Xatom_net_wm_state, 8275 dpyinfo->Xatom_net_wm_state,
@@ -8282,7 +8288,7 @@ void
8282x_set_sticky (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) 8288x_set_sticky (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
8283{ 8289{
8284 Lisp_Object frame; 8290 Lisp_Object frame;
8285 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8291 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8286 8292
8287 XSETFRAME (frame, f); 8293 XSETFRAME (frame, f);
8288 8294
@@ -8305,7 +8311,7 @@ get_current_wm_state (struct frame *f,
8305 Atom actual_type; 8311 Atom actual_type;
8306 unsigned long actual_size, bytes_remaining; 8312 unsigned long actual_size, bytes_remaining;
8307 int i, rc, actual_format, is_hidden = 0; 8313 int i, rc, actual_format, is_hidden = 0;
8308 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8314 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8309 long max_len = 65536; 8315 long max_len = 65536;
8310 Display *dpy = FRAME_X_DISPLAY (f); 8316 Display *dpy = FRAME_X_DISPLAY (f);
8311 unsigned char *tmp_data = NULL; 8317 unsigned char *tmp_data = NULL;
@@ -8369,7 +8375,7 @@ get_current_wm_state (struct frame *f,
8369static int 8375static int
8370do_ewmh_fullscreen (struct frame *f) 8376do_ewmh_fullscreen (struct frame *f)
8371{ 8377{
8372 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8378 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8373 int have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state); 8379 int have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state);
8374 int cur, dummy; 8380 int cur, dummy;
8375 8381
@@ -8449,7 +8455,7 @@ XTfullscreen_hook (struct frame *f)
8449 8455
8450 8456
8451static int 8457static int
8452x_handle_net_wm_state (struct frame *f, XPropertyEvent *event) 8458x_handle_net_wm_state (struct frame *f, const XPropertyEvent *event)
8453{ 8459{
8454 int value = FULLSCREEN_NONE; 8460 int value = FULLSCREEN_NONE;
8455 Lisp_Object lval; 8461 Lisp_Object lval;
@@ -8487,7 +8493,7 @@ x_check_fullscreen (struct frame *f)
8487 if (do_ewmh_fullscreen (f)) 8493 if (do_ewmh_fullscreen (f))
8488 return; 8494 return;
8489 8495
8490 if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) 8496 if (f->output_data.x->parent_desc != FRAME_DISPLAY_INFO (f)->root_window)
8491 return; /* Only fullscreen without WM or with EWM hints (above). */ 8497 return; /* Only fullscreen without WM or with EWM hints (above). */
8492 8498
8493 /* Setting fullscreen to nil doesn't do anything. We could save the 8499 /* Setting fullscreen to nil doesn't do anything. We could save the
@@ -8497,7 +8503,7 @@ x_check_fullscreen (struct frame *f)
8497 if (f->want_fullscreen != FULLSCREEN_NONE) 8503 if (f->want_fullscreen != FULLSCREEN_NONE)
8498 { 8504 {
8499 int width = FRAME_PIXEL_WIDTH (f), height = FRAME_PIXEL_HEIGHT (f); 8505 int width = FRAME_PIXEL_WIDTH (f), height = FRAME_PIXEL_HEIGHT (f);
8500 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8506 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8501 8507
8502 switch (f->want_fullscreen) 8508 switch (f->want_fullscreen)
8503 { 8509 {
@@ -8544,7 +8550,7 @@ x_check_expected_move (struct frame *f, int expected_left, int expected_top)
8544 int adjusted_left; 8550 int adjusted_left;
8545 int adjusted_top; 8551 int adjusted_top;
8546 8552
8547 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_A; 8553 FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_A;
8548 FRAME_X_OUTPUT (f)->move_offset_left = expected_left - current_left; 8554 FRAME_X_OUTPUT (f)->move_offset_left = expected_left - current_left;
8549 FRAME_X_OUTPUT (f)->move_offset_top = expected_top - current_top; 8555 FRAME_X_OUTPUT (f)->move_offset_top = expected_top - current_top;
8550 8556
@@ -8562,7 +8568,7 @@ x_check_expected_move (struct frame *f, int expected_left, int expected_top)
8562 /* It's a "Type B" window manager. We don't have to adjust the 8568 /* It's a "Type B" window manager. We don't have to adjust the
8563 frame's position. */ 8569 frame's position. */
8564 8570
8565 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_B; 8571 FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_B;
8566} 8572}
8567 8573
8568 8574
@@ -8618,15 +8624,14 @@ x_wait_for_event (struct frame *f, int eventtype)
8618 struct timespec tmo, tmo_at, time_now; 8624 struct timespec tmo, tmo_at, time_now;
8619 int fd = ConnectionNumber (FRAME_X_DISPLAY (f)); 8625 int fd = ConnectionNumber (FRAME_X_DISPLAY (f));
8620 8626
8621 pending_event_wait.f = f; 8627 f->wait_event_type = eventtype;
8622 pending_event_wait.eventtype = eventtype;
8623 8628
8624 /* Set timeout to 0.1 second. Hopefully not noticeable. 8629 /* Set timeout to 0.1 second. Hopefully not noticeable.
8625 Maybe it should be configurable. */ 8630 Maybe it should be configurable. */
8626 tmo = make_timespec (0, 100 * 1000 * 1000); 8631 tmo = make_timespec (0, 100 * 1000 * 1000);
8627 tmo_at = timespec_add (current_timespec (), tmo); 8632 tmo_at = timespec_add (current_timespec (), tmo);
8628 8633
8629 while (pending_event_wait.eventtype) 8634 while (f->wait_event_type)
8630 { 8635 {
8631 pending_signals = 1; 8636 pending_signals = 1;
8632 totally_unblock_input (); 8637 totally_unblock_input ();
@@ -8645,8 +8650,8 @@ x_wait_for_event (struct frame *f, int eventtype)
8645 if (pselect (fd + 1, &fds, NULL, NULL, &tmo, NULL) == 0) 8650 if (pselect (fd + 1, &fds, NULL, NULL, &tmo, NULL) == 0)
8646 break; /* Timeout */ 8651 break; /* Timeout */
8647 } 8652 }
8648 pending_event_wait.f = 0; 8653
8649 pending_event_wait.eventtype = 0; 8654 f->wait_event_type = 0;
8650} 8655}
8651 8656
8652 8657
@@ -8854,15 +8859,16 @@ x_ewmh_activate_frame (struct frame *f)
8854 /* See Window Manager Specification/Extended Window Manager Hints at 8859 /* See Window Manager Specification/Extended Window Manager Hints at
8855 http://freedesktop.org/wiki/Specifications/wm-spec */ 8860 http://freedesktop.org/wiki/Specifications/wm-spec */
8856 8861
8857 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8862 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8858 8863
8859 if (FRAME_VISIBLE_P (f) && wm_supports (f, dpyinfo->Xatom_net_active_window)) 8864 if (FRAME_VISIBLE_P (f) && wm_supports (f, dpyinfo->Xatom_net_active_window))
8860 { 8865 {
8861 Lisp_Object frame; 8866 Lisp_Object frame;
8862 XSETFRAME (frame, f); 8867 XSETFRAME (frame, f);
8863 x_send_client_event (frame, make_number (0), frame, 8868 x_send_client_event (frame, make_number (0), frame,
8864 dpyinfo->Xatom_net_active_window, 8869 dpyinfo->Xatom_net_active_window,
8865 make_number (32), list2i (1, last_user_time)); 8870 make_number (32),
8871 list2i (1, dpyinfo->last_user_time));
8866 } 8872 }
8867} 8873}
8868 8874
@@ -8887,7 +8893,7 @@ static void
8887xembed_set_info (struct frame *f, enum xembed_info flags) 8893xembed_set_info (struct frame *f, enum xembed_info flags)
8888{ 8894{
8889 unsigned long data[2]; 8895 unsigned long data[2];
8890 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 8896 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
8891 8897
8892 data[0] = XEMBED_VERSION; 8898 data[0] = XEMBED_VERSION;
8893 data[1] = flags; 8899 data[1] = flags;
@@ -8906,7 +8912,7 @@ xembed_send_message (struct frame *f, Time t, enum xembed_message msg,
8906 8912
8907 event.xclient.type = ClientMessage; 8913 event.xclient.type = ClientMessage;
8908 event.xclient.window = FRAME_X_OUTPUT (f)->parent_desc; 8914 event.xclient.window = FRAME_X_OUTPUT (f)->parent_desc;
8909 event.xclient.message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_XEMBED; 8915 event.xclient.message_type = FRAME_DISPLAY_INFO (f)->Xatom_XEMBED;
8910 event.xclient.format = 32; 8916 event.xclient.format = 32;
8911 event.xclient.data.l[0] = t; 8917 event.xclient.data.l[0] = t;
8912 event.xclient.data.l[1] = msg; 8918 event.xclient.data.l[1] = msg;
@@ -8931,7 +8937,6 @@ xembed_send_message (struct frame *f, Time t, enum xembed_message msg,
8931void 8937void
8932x_make_frame_visible (struct frame *f) 8938x_make_frame_visible (struct frame *f)
8933{ 8939{
8934 Lisp_Object type;
8935 int original_top, original_left; 8940 int original_top, original_left;
8936 int retry_count = 2; 8941 int retry_count = 2;
8937 8942
@@ -8939,9 +8944,7 @@ x_make_frame_visible (struct frame *f)
8939 8944
8940 block_input (); 8945 block_input ();
8941 8946
8942 type = x_icon_type (f); 8947 x_set_bitmap_icon (f);
8943 if (!NILP (type))
8944 x_bitmap_icon (f, type);
8945 8948
8946 if (! FRAME_VISIBLE_P (f)) 8949 if (! FRAME_VISIBLE_P (f))
8947 { 8950 {
@@ -9096,8 +9099,8 @@ x_make_frame_invisible (struct frame *f)
9096 window = FRAME_OUTER_WINDOW (f); 9099 window = FRAME_OUTER_WINDOW (f);
9097 9100
9098 /* Don't keep the highlight on an invisible frame. */ 9101 /* Don't keep the highlight on an invisible frame. */
9099 if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) 9102 if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f)
9100 FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; 9103 FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0;
9101 9104
9102 block_input (); 9105 block_input ();
9103 9106
@@ -9148,20 +9151,17 @@ x_iconify_frame (struct frame *f)
9148#ifdef USE_X_TOOLKIT 9151#ifdef USE_X_TOOLKIT
9149 int result; 9152 int result;
9150#endif 9153#endif
9151 Lisp_Object type;
9152 9154
9153 /* Don't keep the highlight on an invisible frame. */ 9155 /* Don't keep the highlight on an invisible frame. */
9154 if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) 9156 if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f)
9155 FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; 9157 FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0;
9156 9158
9157 if (FRAME_ICONIFIED_P (f)) 9159 if (FRAME_ICONIFIED_P (f))
9158 return; 9160 return;
9159 9161
9160 block_input (); 9162 block_input ();
9161 9163
9162 type = x_icon_type (f); 9164 x_set_bitmap_icon (f);
9163 if (!NILP (type))
9164 x_bitmap_icon (f, type);
9165 9165
9166#if defined (USE_GTK) 9166#if defined (USE_GTK)
9167 if (FRAME_GTK_OUTER_WIDGET (f)) 9167 if (FRAME_GTK_OUTER_WIDGET (f))
@@ -9227,7 +9227,7 @@ x_iconify_frame (struct frame *f)
9227 9227
9228 msg.xclient.window = FRAME_X_WINDOW (f); 9228 msg.xclient.window = FRAME_X_WINDOW (f);
9229 msg.xclient.type = ClientMessage; 9229 msg.xclient.type = ClientMessage;
9230 msg.xclient.message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_change_state; 9230 msg.xclient.message_type = FRAME_DISPLAY_INFO (f)->Xatom_wm_change_state;
9231 msg.xclient.format = 32; 9231 msg.xclient.format = 32;
9232 msg.xclient.data.l[0] = IconicState; 9232 msg.xclient.data.l[0] = IconicState;
9233 9233
@@ -9266,7 +9266,7 @@ x_iconify_frame (struct frame *f)
9266void 9266void
9267x_free_frame_resources (struct frame *f) 9267x_free_frame_resources (struct frame *f)
9268{ 9268{
9269 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 9269 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
9270 Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight; 9270 Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
9271#ifdef USE_X_TOOLKIT 9271#ifdef USE_X_TOOLKIT
9272 Lisp_Object bar; 9272 Lisp_Object bar;
@@ -9389,7 +9389,7 @@ x_free_frame_resources (struct frame *f)
9389static void 9389static void
9390x_destroy_window (struct frame *f) 9390x_destroy_window (struct frame *f)
9391{ 9391{
9392 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 9392 struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
9393 9393
9394 /* If a display connection is dead, don't try sending more 9394 /* If a display connection is dead, don't try sending more
9395 commands to the X server. */ 9395 commands to the X server. */
@@ -9435,9 +9435,9 @@ x_wm_set_size_hint (struct frame *f, long flags, bool user_position)
9435 9435
9436 size_hints.width_inc = FRAME_COLUMN_WIDTH (f); 9436 size_hints.width_inc = FRAME_COLUMN_WIDTH (f);
9437 size_hints.height_inc = FRAME_LINE_HEIGHT (f); 9437 size_hints.height_inc = FRAME_LINE_HEIGHT (f);
9438 size_hints.max_width = x_display_pixel_width (FRAME_X_DISPLAY_INFO (f)) 9438 size_hints.max_width = x_display_pixel_width (FRAME_DISPLAY_INFO (f))
9439 - FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0); 9439 - FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
9440 size_hints.max_height = x_display_pixel_height (FRAME_X_DISPLAY_INFO (f)) 9440 size_hints.max_height = x_display_pixel_height (FRAME_DISPLAY_INFO (f))
9441 - FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0); 9441 - FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0);
9442 9442
9443 /* Calculate the base and minimum sizes. */ 9443 /* Calculate the base and minimum sizes. */
@@ -10384,11 +10384,6 @@ static struct redisplay_interface x_redisplay_interface =
10384 x_update_window_begin, 10384 x_update_window_begin,
10385 x_update_window_end, 10385 x_update_window_end,
10386 x_flush, 10386 x_flush,
10387#ifdef XFlush
10388 x_flush,
10389#else
10390 0, /* flush_display_optional */
10391#endif
10392 x_clear_window_mouse_face, 10387 x_clear_window_mouse_face,
10393 x_get_glyph_overhangs, 10388 x_get_glyph_overhangs,
10394 x_fix_overlapping_area, 10389 x_fix_overlapping_area,
@@ -10572,10 +10567,6 @@ x_initialize (void)
10572#endif 10567#endif
10573#endif 10568#endif
10574 10569
10575 pending_autoraise_frame = 0;
10576 pending_event_wait.f = 0;
10577 pending_event_wait.eventtype = 0;
10578
10579 /* Note that there is no real way portable across R3/R4 to get the 10570 /* Note that there is no real way portable across R3/R4 to get the
10580 original error handler. */ 10571 original error handler. */
10581 XSetErrorHandler (x_error_handler); 10572 XSetErrorHandler (x_error_handler);
@@ -10591,9 +10582,6 @@ syms_of_xterm (void)
10591 staticpro (&x_display_name_list); 10582 staticpro (&x_display_name_list);
10592 x_display_name_list = Qnil; 10583 x_display_name_list = Qnil;
10593 10584
10594 staticpro (&last_mouse_scroll_bar);
10595 last_mouse_scroll_bar = Qnil;
10596
10597 DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms"); 10585 DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms");
10598 DEFSYM (Qlatin_1, "latin-1"); 10586 DEFSYM (Qlatin_1, "latin-1");
10599 10587
@@ -10652,9 +10640,6 @@ With MS Windows or Nextstep, the value is t. */);
10652 Vx_toolkit_scroll_bars = Qnil; 10640 Vx_toolkit_scroll_bars = Qnil;
10653#endif 10641#endif
10654 10642
10655 staticpro (&last_mouse_motion_frame);
10656 last_mouse_motion_frame = Qnil;
10657
10658 Qmodifier_value = intern_c_string ("modifier-value"); 10643 Qmodifier_value = intern_c_string ("modifier-value");
10659 Qalt = intern_c_string ("alt"); 10644 Qalt = intern_c_string ("alt");
10660 Fput (Qalt, Qmodifier_value, make_number (alt_modifier)); 10645 Fput (Qalt, Qmodifier_value, make_number (alt_modifier));
@@ -10700,5 +10685,3 @@ default is nil, which is the same as `super'. */);
10700 make_float (DEFAULT_REHASH_THRESHOLD), 10685 make_float (DEFAULT_REHASH_THRESHOLD),
10701 Qnil); 10686 Qnil);
10702} 10687}
10703
10704#endif /* HAVE_X_WINDOWS */
diff --git a/src/xterm.h b/src/xterm.h
index 883a249629d..36aa8e52b1c 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -78,10 +78,11 @@ typedef GtkWidget *xt_or_gtk_widget;
78#include "dispextern.h" 78#include "dispextern.h"
79#include "termhooks.h" 79#include "termhooks.h"
80 80
81#define BLACK_PIX_DEFAULT(f) BlackPixel (FRAME_X_DISPLAY (f), \ 81/* Black and white pixel values for the screen which frame F is on. */
82 XScreenNumberOfScreen (FRAME_X_SCREEN (f))) 82#define BLACK_PIX_DEFAULT(f) \
83#define WHITE_PIX_DEFAULT(f) WhitePixel (FRAME_X_DISPLAY (f), \ 83 BlackPixel (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f))
84 XScreenNumberOfScreen (FRAME_X_SCREEN (f))) 84#define WHITE_PIX_DEFAULT(f) \
85 WhitePixel (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f))
85 86
86#define FONT_WIDTH(f) ((f)->max_width) 87#define FONT_WIDTH(f) ((f)->max_width)
87#define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) 88#define FONT_HEIGHT(f) ((f)->ascent + (f)->descent)
@@ -301,6 +302,41 @@ struct x_display_info
301 minibuffer. */ 302 minibuffer. */
302 struct frame *x_highlight_frame; 303 struct frame *x_highlight_frame;
303 304
305 /* The frame waiting to be auto-raised in XTread_socket. */
306 struct frame *x_pending_autoraise_frame;
307
308 /* The frame where the mouse was last time we reported a ButtonPress event. */
309 struct frame *last_mouse_frame;
310
311 /* The frame where the mouse was last time we reported a mouse position. */
312 struct frame *last_mouse_glyph_frame;
313
314 /* The frame where the mouse was last time we reported a mouse motion. */
315 struct frame *last_mouse_motion_frame;
316
317 /* The scroll bar in which the last X motion event occurred. */
318 struct scroll_bar *last_mouse_scroll_bar;
319
320 /* Time of last user interaction as returned in X events on this display. */
321 Time last_user_time;
322
323 /* Position where the mouse was last time we reported a motion.
324 This is a position on last_mouse_motion_frame. */
325 int last_mouse_motion_x;
326 int last_mouse_motion_y;
327
328 /* Where the mouse was last time we reported a mouse position.
329 This is a rectangle on last_mouse_glyph_frame. */
330 XRectangle last_mouse_glyph;
331
332 /* Time of last mouse movement on this display. This is a hack because
333 we would really prefer that XTmouse_position would return the time
334 associated with the position it returns, but there doesn't seem to be
335 any way to wrest the time-stamp from the server along with the position
336 query. So, we just keep track of the time of the last movement we
337 received, and return that in hopes that it's somewhat accurate. */
338 Time last_mouse_movement_time;
339
304 /* The gray pixmap. */ 340 /* The gray pixmap. */
305 Pixmap gray; 341 Pixmap gray;
306 342
@@ -373,20 +409,6 @@ struct x_display_info
373extern int use_xim; 409extern int use_xim;
374#endif 410#endif
375 411
376extern struct frame *x_window_to_frame (struct x_display_info *, int);
377extern struct frame *x_any_window_to_frame (struct x_display_info *, int);
378extern struct frame *x_menubar_window_to_frame (struct x_display_info *,
379 XEvent *);
380extern struct frame *x_top_window_to_frame (struct x_display_info *, int);
381
382extern struct frame *x_menubar_window_to_frame (struct x_display_info *,
383 XEvent *);
384
385#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
386#define x_any_window_to_frame x_window_to_frame
387#define x_top_window_to_frame x_window_to_frame
388#endif
389
390/* This is a chain of structures for all the X displays currently in use. */ 412/* This is a chain of structures for all the X displays currently in use. */
391extern struct x_display_info *x_display_list; 413extern struct x_display_info *x_display_list;
392 414
@@ -397,7 +419,7 @@ extern struct x_display_info *x_display_list;
397extern Lisp_Object x_display_name_list; 419extern Lisp_Object x_display_name_list;
398 420
399extern struct x_display_info *x_display_info_for_display (Display *); 421extern struct x_display_info *x_display_info_for_display (Display *);
400 422extern struct frame *x_top_window_to_frame (struct x_display_info *, int);
401extern struct x_display_info *x_term_init (Lisp_Object, char *, char *); 423extern struct x_display_info *x_term_init (Lisp_Object, char *, char *);
402extern bool x_display_ok (const char *); 424extern bool x_display_ok (const char *);
403 425
@@ -711,20 +733,22 @@ enum
711#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.x->baseline_offset) 733#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.x->baseline_offset)
712 734
713/* This gives the x_display_info structure for the display F is on. */ 735/* This gives the x_display_info structure for the display F is on. */
714#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.x->display_info) 736#define FRAME_DISPLAY_INFO(f) ((f)->output_data.x->display_info)
715 737
716/* This is the `Display *' which frame F is on. */ 738/* This is the `Display *' which frame F is on. */
717#define FRAME_X_DISPLAY(f) (FRAME_X_DISPLAY_INFO (f)->display) 739#define FRAME_X_DISPLAY(f) (FRAME_DISPLAY_INFO (f)->display)
718 740
719/* This is the `Screen *' which frame F is on. */ 741/* This is the `Screen *' which frame F is on. */
720#define FRAME_X_SCREEN(f) (FRAME_X_DISPLAY_INFO (f)->screen) 742#define FRAME_X_SCREEN(f) (FRAME_DISPLAY_INFO (f)->screen)
743
744/* This is the screen index number of screen which frame F is on. */
721#define FRAME_X_SCREEN_NUMBER(f) XScreenNumberOfScreen (FRAME_X_SCREEN (f)) 745#define FRAME_X_SCREEN_NUMBER(f) XScreenNumberOfScreen (FRAME_X_SCREEN (f))
722 746
723/* This is the Visual which frame F is on. */ 747/* This is the Visual which frame F is on. */
724#define FRAME_X_VISUAL(f) FRAME_X_DISPLAY_INFO (f)->visual 748#define FRAME_X_VISUAL(f) FRAME_DISPLAY_INFO (f)->visual
725 749
726/* This is the Colormap which frame F uses. */ 750/* This is the Colormap which frame F uses. */
727#define FRAME_X_COLORMAP(f) FRAME_X_DISPLAY_INFO (f)->cmap 751#define FRAME_X_COLORMAP(f) FRAME_DISPLAY_INFO (f)->cmap
728 752
729/* The difference in pixels between the top left corner of the 753/* The difference in pixels between the top left corner of the
730 Emacs window (including possible window manager decorations) 754 Emacs window (including possible window manager decorations)
@@ -737,21 +761,11 @@ enum
737 761
738 762
739#define FRAME_XIC(f) ((f)->output_data.x->xic) 763#define FRAME_XIC(f) ((f)->output_data.x->xic)
740#define FRAME_X_XIM(f) (FRAME_X_DISPLAY_INFO (f)->xim) 764#define FRAME_X_XIM(f) (FRAME_DISPLAY_INFO (f)->xim)
741#define FRAME_X_XIM_STYLES(f) (FRAME_X_DISPLAY_INFO (f)->xim_styles) 765#define FRAME_X_XIM_STYLES(f) (FRAME_DISPLAY_INFO (f)->xim_styles)
742#define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style) 766#define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style)
743#define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs) 767#define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs)
744 768
745/* Value is the smallest width of any character in any font on frame F. */
746
747#define FRAME_SMALLEST_CHAR_WIDTH(F) \
748 FRAME_X_DISPLAY_INFO(F)->smallest_char_width
749
750/* Value is the smallest height of any font on frame F. */
751
752#define FRAME_SMALLEST_FONT_HEIGHT(F) \
753 FRAME_X_DISPLAY_INFO(F)->smallest_font_height
754
755/* X-specific scroll bar stuff. */ 769/* X-specific scroll bar stuff. */
756 770
757/* We represent scroll bars as lisp vectors. This allows us to place 771/* We represent scroll bars as lisp vectors. This allows us to place
@@ -801,6 +815,11 @@ struct scroll_bar
801 being dragged, this is -1. */ 815 being dragged, this is -1. */
802 int dragging; 816 int dragging;
803 817
818#if defined (USE_TOOLKIT_SCROLL_BARS) && defined (USE_LUCID)
819 /* Last scroll bar part seen in xaw_jump_callback and xaw_scroll_callback. */
820 enum scroll_bar_part last_seen_part;
821#endif
822
804 /* 1 if the background of the fringe that is adjacent to a scroll 823 /* 1 if the background of the fringe that is adjacent to a scroll
805 bar is extended to the gap between the fringe and the bar. */ 824 bar is extended to the gap between the fringe and the bar. */
806 unsigned fringe_extended_p : 1; 825 unsigned fringe_extended_p : 1;
@@ -809,6 +828,7 @@ struct scroll_bar
809/* Turning a lisp vector value into a pointer to a struct scroll_bar. */ 828/* Turning a lisp vector value into a pointer to a struct scroll_bar. */
810#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec)) 829#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
811 830
831#ifdef USE_X_TOOLKIT
812 832
813/* Extract the X widget of the scroll bar from a struct scroll_bar. 833/* Extract the X widget of the scroll bar from a struct scroll_bar.
814 XtWindowToWidget should be fast enough since Xt uses a hash table 834 XtWindowToWidget should be fast enough since Xt uses a hash table
@@ -825,14 +845,14 @@ struct scroll_bar
825 ptr->x_window = window; \ 845 ptr->x_window = window; \
826} while (0) 846} while (0)
827 847
848#endif /* USE_X_TOOLKIT */
828 849
829/* Return the inside width of a vertical scroll bar, given the outside 850/* Return the inside width of a vertical scroll bar, given the outside
830 width. */ 851 width. */
831#define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f, width) \ 852#define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f, width) \
832 ((width) \ 853 ((width) \
833 - VERTICAL_SCROLL_BAR_LEFT_BORDER \ 854 - VERTICAL_SCROLL_BAR_LEFT_BORDER \
834 - VERTICAL_SCROLL_BAR_RIGHT_BORDER \ 855 - VERTICAL_SCROLL_BAR_RIGHT_BORDER)
835 - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2)
836 856
837/* Return the length of the rectangle within which the top of the 857/* Return the length of the rectangle within which the top of the
838 handle must stay. This isn't equivalent to the inside height, 858 handle must stay. This isn't equivalent to the inside height,
@@ -869,11 +889,6 @@ struct scroll_bar
869/* Minimum lengths for scroll bar handles, in pixels. */ 889/* Minimum lengths for scroll bar handles, in pixels. */
870#define VERTICAL_SCROLL_BAR_MIN_HANDLE (5) 890#define VERTICAL_SCROLL_BAR_MIN_HANDLE (5)
871 891
872/* Trimming off a few pixels from each side prevents
873 text from glomming up against the scroll bar */
874#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
875
876
877/* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT 892/* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT
878 or SELECTION_CLEAR_EVENT, then its contents are really described 893 or SELECTION_CLEAR_EVENT, then its contents are really described
879 by this structure. */ 894 by this structure. */
@@ -905,11 +920,6 @@ struct selection_input_event
905#define SELECTION_EVENT_TIME(eventp) \ 920#define SELECTION_EVENT_TIME(eventp) \
906 (((struct selection_input_event *) (eventp))->time) 921 (((struct selection_input_event *) (eventp))->time)
907 922
908/* From xselect.c. */
909
910void x_handle_selection_notify (XSelectionEvent *);
911void x_handle_property_notify (XPropertyEvent *);
912
913/* From xfns.c. */ 923/* From xfns.c. */
914 924
915extern void x_free_gcs (struct frame *); 925extern void x_free_gcs (struct frame *);
@@ -963,8 +973,8 @@ extern void x_wait_for_event (struct frame *, int);
963 973
964/* Defined in xselect.c */ 974/* Defined in xselect.c */
965 975
966extern void x_handle_property_notify (XPropertyEvent *); 976extern void x_handle_property_notify (const XPropertyEvent *);
967extern void x_handle_selection_notify (XSelectionEvent *); 977extern void x_handle_selection_notify (const XSelectionEvent *);
968extern void x_handle_selection_event (struct input_event *); 978extern void x_handle_selection_event (struct input_event *);
969extern void x_clear_frame_selections (struct frame *); 979extern void x_clear_frame_selections (struct frame *);
970 980
@@ -976,9 +986,9 @@ extern void x_send_client_event (Lisp_Object display,
976 Lisp_Object values); 986 Lisp_Object values);
977 987
978extern int x_handle_dnd_message (struct frame *, 988extern int x_handle_dnd_message (struct frame *,
979 XClientMessageEvent *, 989 const XClientMessageEvent *,
980 struct x_display_info *, 990 struct x_display_info *,
981 struct input_event *bufp); 991 struct input_event *);
982extern int x_check_property_data (Lisp_Object); 992extern int x_check_property_data (Lisp_Object);
983extern void x_fill_property_data (Display *, 993extern void x_fill_property_data (Display *,
984 Lisp_Object, 994 Lisp_Object,
@@ -994,7 +1004,6 @@ extern void x_clipboard_manager_save_all (void);
994 1004
995/* Defined in xfns.c */ 1005/* Defined in xfns.c */
996 1006
997extern struct x_display_info * check_x_display_info (Lisp_Object);
998extern Lisp_Object x_get_focus_frame (struct frame *); 1007extern Lisp_Object x_get_focus_frame (struct frame *);
999 1008
1000#ifdef USE_GTK 1009#ifdef USE_GTK