diff --git a/.clang-format b/.clang-format index 533b5ed..ec3fece 100644 --- a/.clang-format +++ b/.clang-format @@ -13,14 +13,14 @@ ReflowComments: false IndentWidth: 2 TabWidth: 2 -UseTab: Never -ContinuationIndentWidth: 0 +UseTab: ForContinuationAndIndentation +ContinuationIndentWidth: 2 AlignAfterOpenBracket: Align AlignArrayOfStructures: Left BreakBeforeBraces: Attach -ColumnLimit: 180 +ColumnLimit: 0 MaxEmptyLinesToKeep: 2 AllowShortFunctionsOnASingleLine: false diff --git a/.clangd b/.clangd index e0d2215..b031b56 100644 --- a/.clangd +++ b/.clangd @@ -7,6 +7,7 @@ CompileFlags: - -pedantic - -Wall - -Wno-deprecated-declarations + - -Wno-empty-translation-unit - -Os - -I/usr/X11R6/include - -I/usr/include/freetype2 diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..8d1aa08 --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,87 @@ +[global] + ### 显示设置 ### + monitor = 0 + follow = keyboard + + ### 几何布局 ### + width = (111,444) + height = (0,222) + origin = top-right + offset = (25,50) + scale = 0 + notification_limit = 0 + + ### 进度条 ### + progress_bar = true + progress_bar_height = 5 + progress_bar_frame_width = 0 + progress_bar_min_width = 0 + progress_bar_max_width = 444 + + indicate_hidden = yes + transparency = 3 + separator_height = 2 + padding = 9 + horizontal_padding = 11 + text_icon_padding = 0 + frame_width = 6 + frame_color = "#373e4d" + gap_size = 8 + separator_color = "#404859" + sort = yes + idle_threshold = 120 + + ### 文本 ### + font = JetBrainsMono Nerd Font Mono 12 + line_height = 0 + markup = full + format = "%s\n%b" + alignment = left + vertical_alignment = center + ellipsize = middle + ignore_newline = no + stack_duplicates = true + hide_duplicate_count = false + show_indicators = no + show_age_threshold = 60 + + ### 图标 ### + icon_position = left + min_icon_size = 48 + max_icon_size = 80 + sticky_history = true + history_length = 20 + enable_recursive_icon_lookup = false + + ### 杂项 ### + dmenu = "rofi -theme-str '@import "action.rasi"' -no-show-icons -no-lazy-grab -no-plugins -dmenu -mesg 'Context Menu'" + browser = "firefox -new-tab" + always_run_script = true + title = Dunst + class = Dunst + corner_radius = 8 + ignore_dbusclose = false + force_xwayland = false + force_xinerama = false + mouse_left_click = do_action + mouse_middle_click = close_all + mouse_right_click = close_current + +## 紧急程度 ### +[urgency_low] + timeout = 3 + background = "#373e4d" + foreground = "#f9f9f9" + highlight = "#f48ee8" + +[urgency_normal] + timeout = 6 + background = "#373e4d" + foreground = "#f9f9f9" + highlight = "#f48ee8" + +[urgency_critical] + timeout = 0 + background = "#373e4d" + foreground = "#f9f9f9" + highlight = "#f48ee8" diff --git a/.config/fastfetch/config.jsonc b/.config/fastfetch/config.jsonc new file mode 100644 index 0000000..7b2f360 --- /dev/null +++ b/.config/fastfetch/config.jsonc @@ -0,0 +1,110 @@ +{ + "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/master/doc/json_schema.json", + "logo": { + "type": "kitty", + "height": 20, + "source": "~/.config/fastfetch/logo.png", + "padding": { + "top": 3, + "left": 5 + } + }, + "display": { + "separator": " ➜ " + }, + "modules": [ + "break", + "break", + "break", + { + "type": "os", + "key": "OS ", + "keyColor": "31" + }, + { + "type": "kernel", + "key": " ├ kernel ", + "keyColor": "31" + }, + { + "type": "packages", + "key": " ├ packages", + "format": "{} (pacman)", + "keyColor": "31" + }, + { + "type": "shell", + "key": " └ shell ", + "keyColor": "31" + }, + "break", + { + "type": "wm", + "key": "WM ", + "keyColor": "32" + }, + { + "type": "command", + "key": " ├ wm theme ", + "format": "{} (dwm theme)", + "text": "echo ${DWM_THEME:-onedark}", + "keyColor": "32" + }, + { + "type": "command", + "key": " ├ icons ", + "format": "{}", + "text": "echo ${DWM_ICONS:-dwmStatus}", + "keyColor": "32" + }, + { + "type": "terminal", + "key": " ├ terminal ", + "keyColor": "32" + }, + { + "type": "terminalfont", + "key": " └ terminal font", + "keyColor": "32" + }, + "break", + { + "type": "host", + "key": "PC ", + "format": "{5} {1} Type {2}", + "keyColor": "33" + }, + { + "type": "cpu", + "key": " ├ cpu ", + "keyColor": "33" + }, + { + "type": "gpu", + "key": " ├ gpu ", + "keyColor": "33" + }, + { + "type": "memory", + "key": " ├ memory ", + "keyColor": "33" + }, + { + "type": "swap", + "key": " ├ swap ", + "keyColor": "33" + }, + { + "type": "disk", + "key": " ├ disk ", + "keyColor": "33" + }, + { + "type": "display", + "key": " └ display", + "keyColor": "33" + }, + "break", + "colors" + ] +} diff --git a/.config/fastfetch/logo.png b/.config/fastfetch/logo.png new file mode 100644 index 0000000..ae27270 Binary files /dev/null and b/.config/fastfetch/logo.png differ diff --git a/DWM/config/picom.conf b/.config/picom/picom.conf similarity index 97% rename from DWM/config/picom.conf rename to .config/picom/picom.conf index 9208ab4..4ed1dd9 100644 --- a/DWM/config/picom.conf +++ b/.config/picom/picom.conf @@ -36,7 +36,7 @@ rules = ( { match = "fullscreen", opacity = 1.00, corner-radius = 0.0 }, # 应用窗口配置 - { match = "class_g = 'dwm'", opacity = 1.00, corner-radius = 12.0, fade = false }, + { match = "class_g = 'dwm'", opacity = 1.00, corner-radius = 6.0, fade = false }, { match = "class_g = 'fcitx'", opacity = 1.00, corner-radius = 0.0, fade = false }, { match = "class_g = 'obs'", opacity = 1.00, corner-radius = 0.0, fade = false }, { match = "class_g = 'Gimp'", opacity = 1.00, corner-radius = 0.0, fade = false }, diff --git a/.gitignore b/.gitignore index 43432e4..95d7cc1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ *.o *.rej *.orig +*.tmp +*.log dwm -tmp diff --git a/DWM/autostart.sh b/DWM/autostart.sh index 958e487..d40a00a 100755 --- a/DWM/autostart.sh +++ b/DWM/autostart.sh @@ -1,35 +1,86 @@ #!/bin/bash -_thisdir=$(cd $(dirname $0);pwd) - -settings() { - [ $1 ] && sleep $1 - xset -b # 关闭蜂鸣器 - syndaemon -i 1 -t -K -R -d # 设置使用键盘时触控板短暂失效 - $_thisdir/scripts/set_screen.sh two # 设置显示器 设置键盘映射 - setxkbmap -layout us -variant colemak -option -option caps:swapescape -option lv3:ralt_alt -} - -daemons() { - [ $1 ] && sleep $1 - $_thisdir/scripts/statusbar.sh cron & # 开启状态栏定时更新 - xss-lock -- $_thisdir/scripts/blurlock.sh & # 开启自动锁屏程序 - fcitx5 & # 开启输入法 - flameshot & # 开启截图程序后台板 - dunst -conf $_thisdir/config/dunst.conf & # 开启通知弹窗 - picom --config $_thisdir/config/picom.conf >> /dev/null 2>&1 & -} - -cron() { - [ $1 ] && sleep $1 - let i=10 - while true; do - [ $((i % 10)) -eq 0 ] && $_thisdir/scripts/set_screen.sh check - [ $((i % 300)) -eq 0 ] && feh --randomize --bg-fill ~/Pictures/wallpaper/*.png - sleep 10; let i+=10 # 更新壁纸和监视器 - done -} - -settings & # 初始化设置项 -daemons & # 后台程序项 -cron & # 定时任务项 +theme=${DWM_THEME:-"onedark"} + +# shellcheck source=themes/onedark/bar.t +source "$DWM/themes/$theme/bar.t" +mkdir -p "$DWM/.tmp/" +touch "$DWM/.tmp/dwm-statusbar-placeholder.tmp" +touch "$DWM/.tmp/pkgupdates.tmp" +touch "$DWM/.tmp/network.tmp" +touch "$DWM/.tmp/wifilst.tmp" +pipe="$DWM/.tmp/pipe.tmp" + +battery() { + bats='󰠈󰠉󰠊󰠋󰠌󰠍󰠎󰠏󰠐󰠇󰠇󰢜󰂆󰂇󰂈󰢝󰂉󰢞󰂊󰂋󰂅󰂅' + val=$(acpi | sed -n 's/.* \([0-9]\+\)%.*/\1/p' | head -1) + icon=${bats:$(("$val" / 10 + $(acpi | grep -q 'Discharging' && echo '0' || echo '11'))):1} + printf '^b%s^^c%s^ %s ^d^' "$blk" "$blu" "$icon" + printf '^b%s^^c%s^ %s ^d^' "$blk" "$blu" "$val" +} + +brightness() { + val=$(brightnessctl | sed -n 's/.*(\([0-9]\+\)%).*/\1/p') + printf '^b%s^^c%s^  ^d^' "$blk" "$red" + printf '^b%s^^c%s^ %.0f ^d^' "$blk" "$red" "$val" +} + +clock() { + printf '^b%s^^c%s^ 󰥔 ^d^' "$dbl" "$blk" + printf '^b%s^^c%s^ %s ^d^' "$blu" "$blk" "$(date '+%a, %H:%M %p') " +} + +cpu() { + val=$(grep -o "^[^ ]*" /proc/loadavg) + printf '^b%s^^c%s^ CPU ^d^' "$grn" "$blk" + printf '^b%s^^c%s^ %s ^d^' "$gry" "$wht" "$val" +} + +mem() { + val=$(free -h | awk '/^Mem/ { print $3 }' | sed s/i//g) + printf '^b%s^^c%s^  ^d^' "$blk" "$blu" + printf '^b%s^^c%s^ %s ^d^' "$blk" "$blu" "$val" +} + +pkgupdates() { + val=$(cat "$DWM/.tmp/pkgupdates.tmp" | wc -l) + if [ "$val" -eq 0 ]; then + printf '^b%s^^c%s^ 󰬬 Fully Updated ^d^' "$blk" "$grn" + else + printf '^b%s^^c%s^ 󰬬 %s updates ^d^' "$blk" "$wht" "$val" + fi +} + +vol() { + if amixer get Master | grep -q -E '\[off\]|\[0%\]'; then + printf '^b%s^^c%s^ 󰝟 ^d^' "$blk" "$red" + else + printf '^b%s^^c%s^ 󰕾 ^d^' "$blk" "$grn" + fi +} + +wlan() { + case "$(cat /sys/class/net/wl*/operstate 2>/dev/null)" in + up) printf '^b%s^^c%s^ 󰖩 ^b%s^^c%s^ Connected ^d^' "$red" "$blk" "$gry" "$wht" ;; + *) printf '^b%s^^c%s^ 󰖪 ^b%s^^c%s^ Disconnected ^d^' "$red" "$blk" "$gry" "$wht" ;; + esac +} + +xset b off # turn off beeps +setxkbmap -layout us -variant colemak -option -option caps:swapescape -option lv3:ralt_alt +syndaemon -i 1 -t -K -R -d # ignore tappad when keys are pressed +fcitx5 & +cat "$HOME/.config/dunst/dunstrc" "$DWM/themes/$theme/dunstrc" >"$DWM/.tmp/dunstrc.tmp" +dunst -conf "$DWM/.tmp/dunstrc.tmp" >>/dev/null 2>&1 & +picom --config "$HOME/.config/picom/picom.conf" >>/dev/null 2>&1 & +xsetroot -name "$(cat "$DWM/.tmp/dwm-statusbar-placeholder.tmp")" # pre-render to avoid initial delay +tick=0 +while true; do + status="$(pkgupdates)&$(battery)&$(brightness)&$(cpu)&$(mem)&$(wlan)&$(clock)&$(vol)" + echo "$status" >"$DWM/.tmp/dwm-statusbar-placeholder.tmp" + xsetroot -name "$(cat "$DWM/.tmp/dwm-statusbar-placeholder.tmp")" + [ "$((tick % 3600))" -eq 0 ] && checkupdates >"$pipe" && mv "$pipe" "$DWM/.tmp/pkgupdates.tmp" + [ "$((tick % 2400))" -eq 0 ] && nmcli --field 'SECURITY,SSID' --terse device wifi list >"$pipe" && mv "$pipe" "$DWM/.tmp/wifilst.tmp" + [ "$((tick % 1200))" -eq 0 ] && speedtest-cli --simple >"$pipe" && mv "$pipe" "$DWM/.tmp/network.tmp" + sleep 1 && tick=$(((tick + 1) % 3600)) +done diff --git a/DWM/config/dunst.conf b/DWM/config/dunst.conf deleted file mode 100644 index ad79310..0000000 --- a/DWM/config/dunst.conf +++ /dev/null @@ -1,90 +0,0 @@ -[global] - ### 显示设置 ### - monitor = 0 - follow = keyboard - - ### 几何布局 ### - width = (0,400) - height = (0,800) - origin = top-right - offset = (50,50) - scale = 0 - notification_limit = 0 - - ### 进度条 ### - progress_bar = true - progress_bar_height = 10 - progress_bar_frame_width = 1 - progress_bar_min_width = 150 - progress_bar_max_width = 300 - - indicate_hidden = yes - transparency = 0 - separator_height = 2 - padding = 9 - horizontal_padding = 8 - text_icon_padding = 0 - frame_width = 3 - frame_color = "#c0caf5" - separator_color = frame - sort = yes - idle_threshold = 120 - - ### 文本 ### - font = JetBrainsMono Nerd Font 20 - line_height = 0 - markup = full - format = "%s\n%b" - alignment = left - vertical_alignment = center - ellipsize = middle - ignore_newline = no - stack_duplicates = true - hide_duplicate_count = false - show_indicators = yes - - ### 图标 ### - icon_position = left - max_icon_size = 32 - sticky_history = yes - history_length = 20 - - ### 杂项 ### - dmenu = /usr/bin/dmenu -p dunst: - browser = /usr/bin/xdg-open - always_run_script = true - title = Dunst - class = Dunst - corner_radius = 15 - ignore_dbusclose = false - force_xwayland = false - force_xinerama = false - mouse_left_click = close_current - mouse_middle_click = context - mouse_right_click = do_action - - -[experimental] - per_monitor_dpi = false - - -[urgency_low] - background = "#1a1b26" - foreground = "#c0caf5" - frame_color = "#c0caf5" - timeout = 3 - - -[urgency_normal] - background = "#1a1b26" - foreground = "#c0caf5" - frame_color = "#c0caf5" - timeout = 5 - - -[urgency_critical] - background = "#1a1b26" - foreground = "#db4b4b" - frame_color = "#f7768e" - timeout = 0 - word_wrap = yes diff --git a/DWM/fetch.sh b/DWM/fetch.sh new file mode 100755 index 0000000..dfd395b --- /dev/null +++ b/DWM/fetch.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +clear +tput civis +fastfetch +old_settings=$(stty -g) +stty -icanon -echo +dd bs=1 count=1 >/dev/null 2>&1 +stty "$old_settings" +clear diff --git a/DWM/pacmanf.sh b/DWM/pacmanf.sh new file mode 100755 index 0000000..c980b4e --- /dev/null +++ b/DWM/pacmanf.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo -e '\033[0;32mtry to update, please enter password\033[0m' +if sudo pacman -Syyu; then + if ! checkupdates; then + printf '' >"$DWM/.tmp/pkgupdates.tmp" + echo -e '\033[0;32mupdate ok, enter any key to quit\033[0m' + fi +else + echo -e '\033[0;32mupdate failed, please check the network\033[0m' +fi +old_settings=$(stty -g) +stty -icanon -echo +dd bs=1 count=1 >/dev/null 2>&1 +stty "$old_settings" diff --git a/DWM/scripts/blurlock.sh b/DWM/scripts/blurlock.sh deleted file mode 100755 index 2b6dfbc..0000000 --- a/DWM/scripts/blurlock.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# 依赖包:i3lock-color - -i3lock \ - --blur 5 \ - --bar-indicator \ - --bar-pos y+h \ - --bar-direction 1 \ - --bar-max-height 50 \ - --bar-base-width 50 \ - --bar-color 00000022 \ - --keyhl-color ffffffcc \ - --bar-periodic-step 50 \ - --bar-step 20 \ - --redraw-thread \ - --clock \ - --force-clock \ - --time-pos x+5:y+h-80 xdotool\ - --time-color ffffffff \ - --date-pos tx:ty+15 \ - --date-color ffffffff \ - --date-align 1 \ - --time-align 1 \ - --ringver-color ffffff00 \ - --ringwrong-color ffffff88 \ - --status-pos x+5:y+h-16 \ - --verif-align 1 \ - --wrong-align 1 \ - --verif-color ffffffff \ - --wrong-color ffffffff \ - --modif-pos -50:-50 -xdotool mousemove_relative 1 1 diff --git a/DWM/scripts/set_screen.sh b/DWM/scripts/set_screen.sh deleted file mode 100755 index 909d185..0000000 --- a/DWM/scripts/set_screen.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -:<$(acpi -b | sed '2,$d' | awk -F'[,:]' '{printf "%dh %dmin", $4, $5}')<\/span><\/b>" - sed -i '/^export '$_this'=.*$/d' $tmpfile - printf "export %s=' %s%s'\n" "$_this" "$bat_icon" "$bat_text" >> $tmpfile -} - -notify() { - update - [[ "$charging" = "true" ]] && _time="" - notify-send "🔋 Battery" "Remaining: $bat_text<\/span>\n$_time" -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/cpu.sh b/DWM/scripts/status/cpu.sh deleted file mode 100644 index 91c60f9..0000000 --- a/DWM/scripts/status/cpu.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# 获取 CPU 利用率和温度 -# 需要 top, sensors - -_this=_cpu -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v top)" ]] && echo command not found: top && return - [[ ! "$(command -v sensors)" ]] && echo command not found: sensors && return - cpu_text=$(top -n 1 -b | sed -n '3p' | awk '{printf "%02d%", 100 - $8}') - cpu_icon="💻" - temp_text=$(sensors | grep Tctl | awk '{printf "%d°C", $2}') - temp_icon="🔥" - sed -i '/^export '$_this'=.*$/d' $tmpfile - printf "export %s=' %s%s %s%s'\n" "$_this" "$cpu_icon" "$cpu_text" "$temp_icon" "$temp_text" >> $tmpfile -} - -notify() { - notify-send "💻 CPU tops (%)" "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head -n 8)" -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/date.sh b/DWM/scripts/status/date.sh deleted file mode 100644 index 1560554..0000000 --- a/DWM/scripts/status/date.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# 获取日期及时间 -# 需要 date 命令 - -_this=_date -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v date)" ]] && echo command not found: date && return - time_text=$(date '+%H:%M') - time_icon="⏰" - sed -i '/^export '$_this'=.*$/d' $tmpfile - printf "export %s=' %s%s'\n" "$_this" "$time_icon" "$time_text" >> $tmpfile -} - -notify() { - _cal=$(cal --color=always | sed 1d | sed ' - s/..7m//;s/..0m/<\/span><\/b>/; - s/\(Su\|Mo\|Tu\|We\|Th\|Fr\|Sa\)/\1<\/span>/g') - notify-send "📅 Calendar" "$_cal" -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/mem.sh b/DWM/scripts/status/mem.sh deleted file mode 100644 index 7ea7b5b..0000000 --- a/DWM/scripts/status/mem.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# 获取当前内存使用 - -_this=_mem -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v cat)" ]] && echo command not found: cat && return - mem_tota=$(cat /proc/meminfo | grep -w "MemTotal:"| awk '{print $2}') - mem_free=$(cat /proc/meminfo | grep -w "MemFree:" | awk '{print $2}') - mem_buff=$(cat /proc/meminfo | grep -w "Buffers:" | awk '{print $2}') - mem_cach=$(cat /proc/meminfo | grep -w "Cached:" | awk '{print $2}') - mem_text=$(echo $(((mem_tota - mem_free - mem_buff - mem_cach) * 100 / mem_tota)) | awk '{printf "%02d%", $1}') - mem_icon="💾" - sed -i '/^export '$_this'=.*$/d' $tmpfile - printf "export %s=' %s%s'\n" "$_this" "$mem_icon" "$mem_text" >> $tmpfile -} - -notify() { - notify-send "💾 Memory" "$(free -h | awk ' - NR==2 {a=$7;u=$3;t=$2} - NR==3 {s=$3"/"$2} - END {printf "Free: %s\nUsed: %s/%s\nSwap: %s", a, u, t, s}')" -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/music.sh b/DWM/scripts/status/music.sh deleted file mode 100644 index 8b29359..0000000 --- a/DWM/scripts/status/music.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# 音乐脚本 -# 需要 mpd, mpc - -_this=_music -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v mpd)" ]] && echo command not found: mpd && return - [[ ! "$(command -v mpc)" ]] && echo command not found: mpc && return - music_text=$(mpc current | sed 's/"/\\"/g') - [[ ! "$music_text" ]] && music_text="No Playing" - music_icon="🎧" - sed -i '/^export '$_this'=.*$/d' $tmpfile - [[ ! "$music_text" ]] && return - printf "export %s=' %s'\n" "$_this" "$music_icon" >> $tmpfile -} - -notify() { - update - notify-send "$music_icon Music" "$music_text" -r 9527 -} - -click() { - case "$1" in - L) mpc toggle; notify ;; - R) mpc pause; notify ;; - U) mpc prev; notify ;; - D) mpc next; notify ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/vol.sh b/DWM/scripts/status/vol.sh deleted file mode 100644 index a4812c5..0000000 --- a/DWM/scripts/status/vol.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# 获取音量 -# 需要 pactl - -_this=_vol -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v pactl)" ]] && echo command not found: pactl && return - vol_text=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '/Volume:/ {print $5}') - vol_icon="📢" - sed -i '/^export '$_this'=.*$/d' $tmpfile - printf "export %s=' %s%s'\n" "$_this" "$vol_icon" "$vol_text" >> $tmpfile -} - -notify() { - update - notify-send "📢 Volume $vol_text" -h int:value:$vol_text -h string:hlcolor:#c0caf5 -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - U) pactl set-sink-volume @DEFAULT_SINK@ +5%; notify ;; - D) pactl set-sink-volume @DEFAULT_SINK@ -5%; notify ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/status/wifi.sh b/DWM/scripts/status/wifi.sh deleted file mode 100644 index 0cbfdad..0000000 --- a/DWM/scripts/status/wifi.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# 获取 wifi 信息 -# 需要 nmcli - -_this=_wifi -tmpfile=/tmp/dwm_statusbar - -update() { - [[ ! "$(command -v nmcli)" ]] && echo command not found: nmcli && return - sed -i '/^export '$_this'=.*$/d' $tmpfile - wifi_text=$(nmcli | grep "connected to" | awk -F " connected to " '{print $2}') - [[ ! "$wifi_text" ]] && wifi_text="disconnected" - wifi_icon="🛜" - printf "export %s=' %s'\n" "$_this" "$wifi_icon" >> $tmpfile -} - -notify() { - update - notify-send "🛜 Wifi" "$wifi_text" -r 9527 -} - -click() { - case "$1" in - L) notify ;; - R) "" ;; - esac -} - -case "$1" in - click) click $2 ;; - notify) notify ;; - *) update ;; -esac diff --git a/DWM/scripts/statusbar.sh b/DWM/scripts/statusbar.sh deleted file mode 100755 index 0bc8bd8..0000000 --- a/DWM/scripts/statusbar.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -_thisdir=$(cd $(dirname $0);pwd) -tmpfile=/tmp/dwm_statusbar -touch $tmpfile - -# 更新模块内容 -update() { - [[ ! "$1" ]] && refresh && return - [[ -e "$_thisdir/status/$1.sh" ]] && bash $_thisdir/status/$1.sh - shift 1; update $* -} - -# 更新状态栏 -refresh() { - _music='';_wifi='';_cpu='';_mem='';_date='';_vol='';_bat='' - source $tmpfile - xsetroot -name "$_music$_wifi$_cpu$_mem$_date$_vol$_bat " -} - -# 定时更新程序 -cron() { - echo > $tmpfile - let i=0 - while true; do - to=() - [[ $((i % 10)) -eq 0 ]] && to=(${to[@]} wifi) - [[ $((i % 20)) -eq 0 ]] && to=(${to[@]} cpu mem vol) - [[ $((i % 300)) -eq 0 ]] && to=(${to[@]} bat) - [[ $((i % 5)) -eq 0 ]] && to=(${to[@]} date music) - [[ $i -lt 30 ]] && to=(wifi cpu mem date vol bat music) - update ${to[@]} - sleep 5; let i+=5 - done & -} - -# 状态栏点击 -click() { - [[ ! "$1" =~ ^[0-9]$ ]] && return - to=(music wifi cpu cpu mem date vol bat) - bash $_thisdir/status/${to[$1]}.sh click $2 - update $1 - refresh -} - -case $1 in - cron) cron ;; - update) shift 1; update $* ;; - updateall|check) update music wifi cpu mem date vol bat ;; - *) click $1 $2 ;; -esac diff --git a/DWM/statusbar.sh b/DWM/statusbar.sh new file mode 100755 index 0000000..c8d02f3 --- /dev/null +++ b/DWM/statusbar.sh @@ -0,0 +1,175 @@ +#!/bin/bash + +theme=${DWM_THEME:-"onedark"} +icons=${DWM_ICONS:-"dwmStatus"} + +# shellcheck source=themes/onedark/bar.t +source "$DWM/themes/$theme/bar.t" +iconpath="$HOME/.local/share/icons/$icons" +pipe="$DWM/.tmp/pipe.tmp" + +W=$(xdpyinfo | awk '/dimensions:/{print $2}' | cut -d'x' -f1) +H=$(xdpyinfo | awk '/dimensions:/{print $2}' | cut -d'x' -f2) +UR0=+$((W / 2 + W / 16))+$((H / 7)) +UR1=+$((W / 3 + W / 16))+$((H / 2)) +UR2=+$((W / 4 + W / 16))+$((H / 5)) + +clkupdates() { + if [ "$1" == "L" ]; then + if ! pgrep -f 'st -t statusutil_fetch'; then + st -t statusutil_fetch -c statusutil -f 'monospace:size=8' -g 103x26"$UR0" -e "$DWM/fetch.sh" >/dev/null 2>&1 & + checkupdates >"$pipe" && mv "$pipe" "$DWM/.tmp/pkgupdates.tmp" + fi + elif [ "$1" == "R" ]; then + if ! pgrep -f 'st -t statusutil_pacman'; then + st -t statusutil_pacman -c statusutil -f 'monospace:size=8' -g 98x30"$UR1" -e "$DWM/pacmanf.sh" >/dev/null 2>&1 & + fi + fi +} + +clkbattery() { + val=$(acpi | sed -n 's/.* \([0-9]\+\)%.*/\1/p' | head -1) + duration=$(acpi -b | sed '2,$d' | awk -F'[,:]' '{h=$4; m=$5; printf "%dh %dmin\n", h, m}') + if [ "$val" -gt 75 ]; then + infix='full' + elif [ "$val" -gt 50 ]; then + infix='good' + elif [ "$val" -gt 25 ]; then + infix='low' + else + infix='empty' + fi + if acpi | grep -q 'Discharging'; then + posfix='' + stat='Discharging' + desc='Available' + else + posfix='-charging' + stat='Charging' + desc='Full after' + fi + icon="$iconpath/battery-$infix$posfix.svg" + if [ "$1" = "L" ]; then + timeout 0 dunstify --app-name=status-toast-calendar --raw-icon="$icon" -r 9527 -t 5000 \ + "$val $stat" "$desc $duration" + fi +} + +clkbrightness() { + val=$(brightnessctl | sed -n 's/.*(\([0-9]\+\)%).*/\1/p') + notify() { + timeout 0 dunstify --app-name=status-toast-brightness --raw-icon="$iconpath/brightness.svg" -r 9527 -t 5000 \ + -h "int:value:$val" "$val" + } + case "$1" in + "L") notify ;; + "U") brightnessctl set 5%+ && notify ;; + "D") brightnessctl set 5%- && notify ;; + esac +} + +clkcpu() { + if [ "$1" = "L" ]; then + timeout 0 dunstify --app-name=status-toast-cpu --raw-icon="$iconpath/cpu.svg" -r 9527 -t 5000 \ + "$(sensors | grep Tctl | awk '{printf "%d°C", $2}') / $(grep -o "^[^ ]*" /proc/loadavg)" \ + "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)" + elif [ "$1" = "R" ]; then + if ! pgrep -f 'st -t statusutil_htop'; then + st -t statusutil_htop -c statusutil -f 'monospace:size=8' -g 98x30"$UR2" -e htop >>/dev/null 2>&1 & + fi + fi +} + +clkmem() { + if [ "$1" = "L" ]; then + timeout 0 dunstify --app-name=status-toast-mem --raw-icon="$iconpath/dotmemory.svg" -r 9527 -t 5000 \ + "$(free -h | awk '/^Mem:/{print $3 " / " $2}' | sed 's/i//g')" \ + "$(ps -eo rss,comm --sort=-rss --no-headers | awk 'NR <= 10 {printf "%-18s %.1f%s\n", substr($2,1,15)(length($2)>15?"...":""), ($1>1e6?$1/1e6:$1/1e3), ($1>1e6?"G":"M")}')" + elif [ "$1" = "R" ]; then + if ! pgrep -f 'st -t statusutil_htop'; then + st -t statusutil_htop -c statusutil -f 'monospace:size=8' -g 98x30"$UR2" -e htop >>/dev/null 2>&1 & + fi + fi +} + +clkwlan() { + notifyInit() { + ssid=$(nmcli -t -f 'name,type' connection show --active | awk -F: '$2 ~ /wireless|wifi|ethernet/ {print $1}' | head -1) + if [ -z "$ssid" ]; then + timeout 0 dunstify --app-name=status-toast-wlan --raw-icon="$iconpath/wifi-radar.svg" --action clicked,clk -r 9527 -t 5000 \ + "No Internet Connection" \ + "Unable to connect. (click me to build a network connection)" + else + timeout 0 dunstify --app-name=status-toast-wlan --raw-icon="$iconpath/wifi-radar.svg" --action clicked,clk -r 9527 -t 5000 \ + "$(ip -4 addr show scope global | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)" \ + "$( + printf "%-10s%s\n" "SSID" "$ssid" + awk -F': ' '{printf "%-10s%s\n", $1, $2}' "$DWM/.tmp/network.tmp" + )" + fi + } + notifySucc() { + timeout 0 dunstify --app-name=status-toast-wlan --raw-icon="$iconpath/wifi-radar.svg" -r 9527 -t 5000 \ + "Connection Established" \ + "You are now connected to the Wi-Fi network $1" + speedtest-cli --simple >"$pipe" && mv "$pipe" "$DWM/.tmp/network.tmp" + } + notifyFail() { + timeout 0 dunstify --app-name=status-toast-wlan --raw-icon="$iconpath/wifi-radar.svg" -r 9527 -t 5000 \ + "Connection Failed" \ + "Please check if the SSID and password math" + } + [ "$1" != "L" ] && return + click=$(notifyInit) # the base pop-up notification + [ "$click" != "clicked" ] && return + wifilst=$(cat "$DWM/.tmp/wifilst.tmp" | sed '1d; /:$/d; s/^:/󰈈 /; s/^.*:/ /' | sort -u) + selected=$(echo -e "$wifilst" | rofi -dmenu -i -selected-row 1 -p "Wi-Fi SSID: ") + [ -z "$selected" ] && return + read -r selectedid <<<"${selected:2}" + if nmcli -g NAME connection | grep -qw "$selectedid"; then + if nmcli connection up id "$selectedid" | grep -q "success"; then + notifySucc "$selected" + else + notifyFail + fi + else + [[ "$selected" =~ "" ]] && password=$(rofi -dmenu -p "password: ") + if nmcli device wifi connect "$selectedid" password "$password" | grep -q "success"; then + notifySucc "$selected" + else + notifyFail + fi + fi +} + +clkdate() { + if [ "$1" = "L" ]; then + timeout 0 dunstify --app-name=status-toast-calendar --raw-icon="$iconpath/calendar.svg" -r 9527 -t 5000 \ + "$(date '+%B %Y')" \ + "$(cal --color=always | sed "s/..7m//;s/..0m/<\/span>/" | tail -n +3)" + fi +} + +clkvolume() { + notify() { + val=$(amixer sget Master | grep -oE '[0-9]{1,3}%' | head -1 | tr -d '%') + timeout 0 dunstify --app-name=status-toast-volume --raw-icon="$iconpath/audio-speaker.svg" -r 9527 -t 5000 \ + -h "int:value:$val" "$val" + } + case "$1" in + "L") notify ;; + "U") amixer -q set Master 5%+ && notify ;; + "D") amixer -q set Master 5%- && notify ;; + esac +} + +case "$1" in +0) clkupdates "$2" ;; +1) clkbattery "$2" ;; +2) clkbrightness "$2" ;; +3) clkcpu "$2" ;; +4) clkmem "$2" ;; +5) clkwlan "$2" ;; +6) clkdate "$2" ;; +7) clkvolume "$2" ;; +esac diff --git a/DWM/themes/onedark/bar.t b/DWM/themes/onedark/bar.t new file mode 100644 index 0000000..69567d4 --- /dev/null +++ b/DWM/themes/onedark/bar.t @@ -0,0 +1,16 @@ +bwh=#fffafa +wht=#abb2bf +blk=#1e222a +gry=#282c34 +red=#d47d85 +drd=#a54242 +ylw=#ecbe7b +dyw=#ffb347 +grn=#7eca9c +dgn=#5a935f +cyn=#56b6c2 +dcy=#008b8b +blu=#7aa2f7 +dbl=#4a6bc8 +ppl=#c678dd +dpp=#5e4a8c diff --git a/DWM/themes/onedark/dunstrc b/DWM/themes/onedark/dunstrc new file mode 100644 index 0000000..70004e0 --- /dev/null +++ b/DWM/themes/onedark/dunstrc @@ -0,0 +1,49 @@ + +[status-toast-battery] + appname = status-toast-battery + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#7aa2f7" + highlight = "#7aa2f7" + +[status-toast-brightness] + appname = status-toast-brightness + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#d47d85" + highlight = "#d47d85" + +[status-toast-cpu] + appname=status-toast-cpu + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#7eca9c" + highlight = "#7eca9c" + +[status-toast-mem] + appname=status-toast-mem + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#7aa2f7" + highlight = "#7aa2f7" + +[status-toast-wlan] + appname=status-toast-wlan + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#d47d85" + highlight = "#d47d85" + +[status-toast-calendar] + appname=status-toast-calendar + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#7aa2f7" + highlight = "#7aa2f7" + +[status-toast-volume] + appname=status-toast-volume + background = "#1e222a" + frame_color = "#1e222a" + foreground = "#7eca9c" + highlight = "#7eca9c" diff --git a/DWM/themes/onedark/wm.h b/DWM/themes/onedark/wm.h new file mode 100644 index 0000000..8f17ace --- /dev/null +++ b/DWM/themes/onedark/wm.h @@ -0,0 +1,25 @@ +#ifndef WM_H +#define WM_H +// clang-format off + +const char col_bwh[] = "#fffafa"; +const char col_wht[] = "#abb2bf"; +const char col_dwh[] = "#6d8dad"; // gray4 +const char col_bgy[] = "#545862"; // gray3 +const char col_gry[] = "#282c34"; // gray2 +const char col_blk[] = "#1e222a"; +const char col_red[] = "#d47d85"; +const char col_drd[] = "#a54242"; +const char col_ylw[] = "#ecbe7b"; +const char col_dyw[] = "#ffb347"; +const char col_grn[] = "#7eca9c"; +const char col_dgn[] = "#5a935f"; +const char col_cyn[] = "#56b6c2"; +const char col_dcy[] = "#008b8b"; +const char col_blu[] = "#7aa2f7"; +const char col_dbl[] = "#4a6bc8"; +const char col_ppl[] = "#c678dd"; +const char col_dpp[] = "#5e4a8c"; + +// clang-format on +#endif // !WM_H diff --git a/LICENSE b/LICENSE index 995172f..04336f6 100644 --- a/LICENSE +++ b/LICENSE @@ -18,6 +18,7 @@ MIT/X Consortium License © 2015-2016 Eric Pruitt © 2016-2017 Markus Teich © 2020-2022 Chris Down +© 2022-2025 Lazypool Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/Makefile b/Makefile index 6173582..8bfe3b9 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,6 @@ # paths PREFIX = /usr/local -MANPREFIX = ${PREFIX}/share/man X11INC = /usr/X11R6/include X11LIB = /usr/X11R6/lib @@ -28,7 +27,7 @@ LDFLAGS = ${LIBS} CC = cc # object file -SRC = dwm.c src/drw.c src/util.c +SRC = dwm.c src/drw.c src/util.c src/icon.c OBJ = ${SRC:.c=.o} all: dwm @@ -44,16 +43,18 @@ dwm: ${OBJ} clean: rm -f dwm ${OBJ} -install: all +deploy: + mkdir -p $$HOME/.config/ + cp -r .config/* $$HOME/.config/ + mkdir -p $$HOME/.local/share/icons/ + cp -r icons/* $$HOME/.local/share/icons/ + +install: all deploy mkdir -p ${DESTDIR}${PREFIX}/bin cp -f dwm ${DESTDIR}${PREFIX}/bin chmod 755 ${DESTDIR}${PREFIX}/bin/dwm - mkdir -p ${DESTDIR}${MANPREFIX}/man1 - sed "s/VERSION/${VERSION}/g" < src/dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1 - chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1 uninstall: - rm -f ${DESTDIR}${PREFIX}/bin/dwm\ - ${DESTDIR}${MANPREFIX}/man1/dwm.1 + rm -f ${DESTDIR}${PREFIX}/bin/dwm -.PHONY: all clean install uninstall +.PHONY: all clean deploy install uninstall diff --git a/config.h b/config.h index 6735c79..860bab0 100644 --- a/config.h +++ b/config.h @@ -2,6 +2,7 @@ #define CONFIG_H // clang-format off +#include "DWM/themes/onedark/wm.h" #include "dwm.h" /* appearance */ @@ -9,40 +10,44 @@ const unsigned int borderpx = 3; /* border pixel of windows */ const unsigned int snap = 32; /* snap pixel */ const int showbar = 1; /* 0 means no bar */ const int topbar = 1; /* 0 means bottom bar */ -const int sidepad = 10; /* side padding size */ -const int iconsize = 19; /* icon size */ +const int sidepad = 6; /* side padding size */ +const int iconsize = 24; /* icon size */ const int iconspacing = 8; /* space between icon and title */ +const int ulpad = 5; /* horizontal padding between underline and tag */ +const int ulstroke = 3; /* thickness of the underline */ const char *fonts[] = {"Iosevka:style:medium:size=12" ,"JetBrainsMono Nerd Font Mono:style:medium:size=19" }; const char dmenufont[] = "JetBrainsMono Nerd Font Mono:size=12"; -const char col_gray1[] = "#222222"; -const char col_gray2[] = "#444444"; -const char col_gray3[] = "#bbbbbb"; -const char col_gray4[] = "#eeeeee"; -const char col_cyan[] = "#005577"; +const int schemetags[] = {SchemeTag1, SchemeTag2, SchemeTag3, SchemeTag4, SchemeTag5}; const char *colors[][3] = { - /* fg bg border */ - [SchemeNorm] = {col_gray3, col_gray1, col_gray2}, - [SchemeSel] = {col_gray4, col_cyan, col_cyan }, + /* fg bg border */ + [SchemeNorm] = {col_bgy, col_blk, col_gry}, + [SchemeSel] = {col_dwh, col_blk, col_bgy}, + [SchemeTag] = {col_bgy, col_blk, col_blk}, + [SchemeTag1] = {col_blu, col_blk, col_blk}, + [SchemeTag2] = {col_red, col_blk, col_blk}, + [SchemeTag3] = {col_dyw, col_blk, col_blk}, + [SchemeTag4] = {col_grn, col_blk, col_blk}, + [SchemeTag5] = {col_ppl, col_blk, col_blk}, + [SchemeLayout] = {col_grn, col_blk, col_blk}, + [SchemeTitle] = {col_ylw, col_blk, col_blk}, }; /* self-defined scripts */ const char *autostartscript = "$DWM/autostart.sh"; -const char *statusbarscript = "$DWM/scripts/statusbar.sh"; +const char *statusbarscript = "$DWM/statusbar.sh"; /* tags */ -const char *tags[] = {"", "", "", "", "", "", "", ""}; +const char *tags[MAXTAGS] = {"", "", "", "", ""}; /* rule */ const Rule rules[] = { - /* xprop(1): + /* xprop(1): * WM_CLASS(STRING) = instance, class * WM_NAME(STRING) = title */ - /* class instance title tagmask isfloating isglobal monitor unmanaged*/ - {"Gimp", NULL, NULL, 0, 1, 0, -1, 0}, - {"Firefox", NULL, NULL, 1 << 8, 0, 0, -1, 0}, - {NULL, NULL, "Feishu Meetings", 0, 0, 0, -1, 1}, - {NULL, NULL, "broken", 0, 0, 0, -1, 1}, + /* class instance title tagmask isfloating isglobal monitor unmanaged*/ + {"statusutil", NULL, NULL, 0, 1, 1, -1, 0}, + {NULL, NULL, "broken", 0, 1, 0, -1, 1}, }; /* layout(s) */ @@ -53,72 +58,73 @@ const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window const char *monsyms[] = {"󰎡", "󰎤", "󰎧", "󰎪", "󰎭", "󰎱", "󰎳", "󰎶", "󰎹", "󰎼", "󰎿"}; const Layout layouts[] = { - /* symbol function */ - {"󰙀", tile }, /* first entry is default */ - {"󰗣", NULL }, /* no layout function means floating behavior */ - {"󰎡", monocle}, + /* symbol function */ + {"󰙀", tile }, /* first entry is default */ + {"󰗣", NULL }, /* no layout function means floating behavior */ + {"󰎡", monocle}, }; /* commands */ char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ -const char *dmenucmd[] = {"dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL}; +const char *dmenucmd[] = {"dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gry, "-nf", col_bgy, "-sb", col_blu, "-sf", col_dwh, NULL}; const char *termcmd[] = {"st", NULL}; /* key definitions */ #define MODKEY Mod4Mask -#define TAGKEYS(KEY, TAG) \ - {MODKEY, KEY, view, {.ui = 1 << TAG}}, \ - {MODKEY | ControlMask, KEY, toggleview, {.ui = 1 << TAG}}, \ - {MODKEY | ShiftMask, KEY, viewontag, {.ui = 1 << TAG}}, \ - {MODKEY | ControlMask | ShiftMask, KEY, tag, {.ui = 1 << TAG}}, +#define TAGKEYS(KEY, MSK) \ + {MODKEY, KEY, view, {.ui = MSK}}, \ + {MODKEY | ControlMask, KEY, toggleview, {.ui = MSK}}, \ + {MODKEY | ShiftMask, KEY, viewontag, {.ui = MSK}}, \ + {MODKEY | ControlMask | ShiftMask, KEY, tag, {.ui = MSK}}, const Key keys[] = { - /* modifier key function argument */ - {MODKEY, XK_p, spawn, {.v = dmenucmd} }, - {MODKEY | ShiftMask, XK_Return, spawn, {.v = termcmd} }, - {MODKEY, XK_b, togglebar, {0} }, - {MODKEY, XK_e, focusstack, {.i = +1} }, - {MODKEY, XK_u, focusstack, {.i = -1} }, - {MODKEY, XK_h, setmfact, {.f = -0.05} }, - {MODKEY, XK_l, setmfact, {.f = +0.05} }, - {MODKEY, XK_o, transfer, {0} }, - {MODKEY, XK_Return, zoom, {0} }, - {MODKEY, XK_Tab, view, {0} }, - {MODKEY | ShiftMask, XK_c, killclient, {0} }, - {MODKEY, XK_t, setlayout, {.v = &layouts[0]}}, - {MODKEY, XK_f, setlayout, {.v = &layouts[1]}}, - {MODKEY, XK_m, setlayout, {.v = &layouts[2]}}, - {MODKEY, XK_space, setlayout, {0} }, - {MODKEY | ShiftMask, XK_space, togglefloating, {0} }, - {MODKEY, XK_g, toggleglobal, {0} }, - {MODKEY, XK_0, view, {.ui = ~0} }, - {MODKEY, XK_comma, focusmon, {.i = -1} }, - {MODKEY, XK_period, focusmon, {.i = +1} }, - {MODKEY | ShiftMask, XK_comma, tagmon, {.i = -1} }, - {MODKEY | ShiftMask, XK_period, tagmon, {.i = +1} }, - {MODKEY | ShiftMask, XK_q, quit, {0} }, - TAGKEYS(XK_1, 0) TAGKEYS(XK_2, 1) TAGKEYS(XK_3, 2) TAGKEYS(XK_4, 3) - TAGKEYS(XK_5, 4) TAGKEYS(XK_6, 5) TAGKEYS(XK_7, 6) TAGKEYS(XK_8, 7) + /* modifier key function argument */ + {MODKEY, XK_p, spawn, {.v = dmenucmd} }, + {MODKEY | ShiftMask, XK_Return, spawn, {.v = termcmd} }, + {MODKEY, XK_b, togglebar, {0} }, + {MODKEY, XK_e, focusstack, {.i = +1} }, + {MODKEY, XK_u, focusstack, {.i = -1} }, + {MODKEY, XK_h, setmfact, {.f = -0.05} }, + {MODKEY, XK_l, setmfact, {.f = +0.05} }, + {MODKEY, XK_o, transfer, {0} }, + {MODKEY, XK_Return, zoom, {0} }, + {MODKEY, XK_Tab, view, {0} }, + {MODKEY | ShiftMask, XK_c, killclient, {0} }, + {MODKEY, XK_t, setlayout, {.v = &layouts[0]}}, + {MODKEY, XK_f, setlayout, {.v = &layouts[1]}}, + {MODKEY, XK_m, setlayout, {.v = &layouts[2]}}, + {MODKEY, XK_space, setlayout, {0} }, + {MODKEY | ShiftMask, XK_space, togglefloating, {0} }, + {MODKEY, XK_g, toggleglobal, {0} }, + {MODKEY, XK_0, view, {.ui = ~0} }, + {MODKEY, XK_comma, focusmon, {.i = -1} }, + {MODKEY, XK_period, focusmon, {.i = +1} }, + {MODKEY | ShiftMask, XK_comma, tagmon, {.i = -1} }, + {MODKEY | ShiftMask, XK_period, tagmon, {.i = +1} }, + {MODKEY | ShiftMask, XK_q, quit, {0} }, + TAGKEYS(XK_1, TAG(0)) TAGKEYS(XK_2, TAG(1)) TAGKEYS(XK_3, TAG(2)) + TAGKEYS(XK_4, TAG(3)) TAGKEYS(XK_5, TAG(4)) TAGKEYS(XK_6, TAG(5)) + TAGKEYS(XK_7, TAG(6)) TAGKEYS(XK_8, TAG(7)) TAGKEYS(XK_9, TAG(9)) }; /* button definitions */ const Button buttons[] = { - /* click mod button function argument */ - {ClkLtSymbol, 0, Button1, setlayout, {0} }, - {ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]}}, - {ClkWinTitle, 0, Button2, zoom, {0} }, - {ClkStatusText, 0, Button1, clkstatusbar, {0} }, - {ClkStatusText, 0, Button2, clkstatusbar, {0} }, - {ClkStatusText, 0, Button3, clkstatusbar, {0} }, - {ClkStatusText, 0, Button4, clkstatusbar, {0} }, - {ClkStatusText, 0, Button5, clkstatusbar, {0} }, - {ClkClientWin, MODKEY, Button1, movemouse, {0} }, - {ClkClientWin, MODKEY, Button2, togglefloating, {0} }, - {ClkClientWin, MODKEY, Button3, resizemouse, {0} }, - {ClkTagBar, 0, Button1, view, {0} }, - {ClkTagBar, 0, Button3, toggleview, {0} }, - {ClkTagBar, MODKEY, Button1, viewontag, {0} }, - {ClkTagBar, MODKEY, Button3, tag, {0} }, + /* click mod button function argument */ + {ClkLtSymbol, 0, Button1, setlayout, {0} }, + {ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]}}, + {ClkWinTitle, 0, Button2, zoom, {0} }, + {ClkStatusText, 0, Button1, clkstatusbar, {0} }, + {ClkStatusText, 0, Button2, clkstatusbar, {0} }, + {ClkStatusText, 0, Button3, clkstatusbar, {0} }, + {ClkStatusText, 0, Button4, clkstatusbar, {0} }, + {ClkStatusText, 0, Button5, clkstatusbar, {0} }, + {ClkClientWin, MODKEY, Button1, movemouse, {0} }, + {ClkClientWin, MODKEY, Button2, togglefloating, {0} }, + {ClkClientWin, MODKEY, Button3, resizemouse, {0} }, + {ClkTagBar, 0, Button1, view, {0} }, + {ClkTagBar, 0, Button3, toggleview, {0} }, + {ClkTagBar, MODKEY, Button1, viewontag, {0} }, + {ClkTagBar, MODKEY, Button3, tag, {0} }, }; // clang-format on diff --git a/dwm.c b/dwm.c index 480978e..903ff60 100644 --- a/dwm.c +++ b/dwm.c @@ -1,10 +1,19 @@ +#include "dwm.h" + +#include +#include #include #include +#include #include #include #include #include +#include "src/drw.h" +#include "src/icon.h" +#include "src/util.h" + #ifdef XINERAMA #include #endif /* XINERAMA */ @@ -15,1749 +24,1849 @@ /* function implementations */ void applyrules(Client *c) { - const char *class, *instance; - unsigned int i; - const Rule *r; - Monitor *m; - XClassHint ch = {NULL, NULL}; - - /* rule matching */ - c->isfloating = 0; - c->isglobal = 0; - c->tags = 0; - XGetClassHint(dpy, c->win, &ch); - class = ch.res_class ? ch.res_class : broken; - instance = ch.res_name ? ch.res_name : broken; - - for (i = 0; i < LENGTH(rules); i++) { - r = &rules[i]; - if ((!r->title || strstr(c->name, r->title)) && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { - c->isfloating = r->isfloating; - c->isglobal = r->isglobal; - c->tags |= c->isglobal ? 0 : r->tags; - for (m = mons; m && m->num != r->monitor; m = m->next); - if (m) c->mon = m; - unmanaged = r->unmanaged; - } - } - if (ch.res_class) XFree(ch.res_class); - if (ch.res_name) XFree(ch.res_name); - c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; + const char *class, *instance; + unsigned int i; + const Rule *r; + Monitor *m; + XClassHint ch = {NULL, NULL}; + + /* rule matching */ + c->isfloating = 0; + c->isglobal = 0; + c->tags = 0; + XGetClassHint(dpy, c->win, &ch); + class = ch.res_class ? ch.res_class : broken; + instance = ch.res_name ? ch.res_name : broken; + + for (i = 0; i < LENGTH(rules); i++) { + r = &rules[i]; + if ((!r->title || strstr(c->name, r->title)) && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { + c->isfloating = r->isfloating; + c->isglobal = r->isglobal; + c->tags |= c->isglobal ? 0 : r->tags; + for (m = mons; m && m->num != r->monitor; m = m->next); + if (m) c->mon = m; + unmanaged = r->unmanaged; + break; + } + } + if (ch.res_class) XFree(ch.res_class); + if (ch.res_name) XFree(ch.res_name); + c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; } int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) { - int baseismin; - Monitor *m = c->mon; - - /* set minimum possible */ - *w = MAX(1, *w); - *h = MAX(1, *h); - if (interact) { - if (*x > sw) *x = sw - WIDTH(c); - if (*y > sh) *y = sh - HEIGHT(c); - if (*x + *w + 2 * c->bw < 0) *x = 0; - if (*y + *h + 2 * c->bw < 0) *y = 0; - } else { - if (*x >= m->wx + m->ww) *x = m->wx + m->ww - WIDTH(c); - if (*y >= m->wy + m->wh) *y = m->wy + m->wh - HEIGHT(c); - if (*x + *w + 2 * c->bw <= m->wx) *x = m->wx; - if (*y + *h + 2 * c->bw <= m->wy) *y = m->wy; - } - if (*h < bh) *h = bh; - if (*w < bh) *w = bh; - if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) { - if (!c->hintsvalid) updatesizehints(c); - /* see last two sentences in ICCCM 4.1.2.3 */ - baseismin = c->basew == c->minw && c->baseh == c->minh; - if (!baseismin) { /* temporarily remove base dimensions */ - *w -= c->basew; - *h -= c->baseh; - } - /* adjust for aspect limits */ - if (c->mina > 0 && c->maxa > 0) { - if (c->maxa < (float)*w / *h) - *w = *h * c->maxa + 0.5; - else if (c->mina < (float)*h / *w) - *h = *w * c->mina + 0.5; - } - if (baseismin) { /* increment calculation requires this */ - *w -= c->basew; - *h -= c->baseh; - } - /* adjust for increment value */ - if (c->incw) *w -= *w % c->incw; - if (c->inch) *h -= *h % c->inch; - /* restore base dimensions */ - *w = MAX(*w + c->basew, c->minw); - *h = MAX(*h + c->baseh, c->minh); - if (c->maxw) *w = MIN(*w, c->maxw); - if (c->maxh) *h = MIN(*h, c->maxh); - } - return *x != c->x || *y != c->y || *w != c->w || *h != c->h; + int baseismin; + Monitor *m = c->mon; + + /* set minimum possible */ + *w = MAX(1, *w); + *h = MAX(1, *h); + if (interact) { + if (*x > sw) *x = sw - WIDTH(c); + if (*y > sh) *y = sh - HEIGHT(c); + if (*x + *w + 2 * c->bw < 0) *x = 0; + if (*y + *h + 2 * c->bw < 0) *y = 0; + } else { + if (*x >= m->wx + m->ww) *x = m->wx + m->ww - WIDTH(c); + if (*y >= m->wy + m->wh) *y = m->wy + m->wh - HEIGHT(c); + if (*x + *w + 2 * c->bw <= m->wx) *x = m->wx; + if (*y + *h + 2 * c->bw <= m->wy) *y = m->wy; + } + if (*h < bh) *h = bh; + if (*w < bh) *w = bh; + if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) { + if (!c->hintsvalid) updatesizehints(c); + /* see last two sentences in ICCCM 4.1.2.3 */ + baseismin = c->basew == c->minw && c->baseh == c->minh; + if (!baseismin) { /* temporarily remove base dimensions */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for aspect limits */ + if (c->mina > 0 && c->maxa > 0) { + if (c->maxa < (float)*w / *h) + *w = *h * c->maxa + 0.5; + else if (c->mina < (float)*h / *w) + *h = *w * c->mina + 0.5; + } + if (baseismin) { /* increment calculation requires this */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for increment value */ + if (c->incw) *w -= *w % c->incw; + if (c->inch) *h -= *h % c->inch; + /* restore base dimensions */ + *w = MAX(*w + c->basew, c->minw); + *h = MAX(*h + c->baseh, c->minh); + if (c->maxw) *w = MIN(*w, c->maxw); + if (c->maxh) *h = MIN(*h, c->maxh); + } + return *x != c->x || *y != c->y || *w != c->w || *h != c->h; } void arrange(Monitor *m) { - if (m) - showhide(m->stack); - else - for (m = mons; m; m = m->next) showhide(m->stack); - if (m) { - arrangemon(m); - restack(m); - } else - for (m = mons; m; m = m->next) arrangemon(m); + if (m) + showhide(m->stack); + else + for (m = mons; m; m = m->next) showhide(m->stack); + if (m) { + arrangemon(m); + restack(m); + } else + for (m = mons; m; m = m->next) arrangemon(m); } void arrangemon(Monitor *m) { - strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); - if (m->lt[m->sellt]->arrange) m->lt[m->sellt]->arrange(m); + strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); + if (m->lt[m->sellt]->arrange) m->lt[m->sellt]->arrange(m); } void attach(Client *c) { - c->next = c->mon->clients; - c->mon->clients = c; + c->next = c->mon->clients; + c->mon->clients = c; } void attachstack(Client *c) { - c->snext = c->mon->stack; - c->mon->stack = c; + c->snext = c->mon->stack; + c->mon->stack = c; +} + +void autostart(void) { + char cmd[100]; + sprintf(cmd, "%s &", autostartscript); + system(cmd); } void buttonpress(XEvent *e) { - unsigned int i, x, click; - Arg arg = {0}; - Client *c; - Monitor *m; - XButtonPressedEvent *ev = &e->xbutton; - - click = ClkRootWin; - /* focus monitor if necessary */ - if ((m = wintomon(ev->window)) && m != selmon) { - unfocus(selmon->sel, 1); - selmon = m; - focus(NULL); - } - - if (ev->window == selmon->barwins[0]) { - i = x = 0; - do x += TEXTW(tags[i]); - while (ev->x >= x && ++i < LENGTH(tags)); - if (i < LENGTH(tags)) { - click = ClkTagBar; - arg.ui = 1 << i; - } else if (ev->x < x + TEXTW(selmon->ltsymbol)) - click = ClkLtSymbol; - } - - else if (ev->window == selmon->barwins[1]) { - click = ClkWinTitle; - } - - else if (ev->window == selmon->barwins[2]) { - click = ClkStatusText; - arg.i = ev->x; - arg.ui = ev->button; - } - - else if ((c = wintoclient(ev->window))) { - focus(c); - restack(selmon); - XAllowEvents(dpy, ReplayPointer, CurrentTime); - click = ClkClientWin; - } - - for (i = 0; i < LENGTH(buttons); i++) - if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) - buttons[i].func((click == ClkTagBar || click == ClkWinTitle || click == ClkStatusText) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); + unsigned int i, x, click; + Arg arg = {0}; + Client *c; + Monitor *m; + XButtonPressedEvent *ev = &e->xbutton; + + click = ClkRootWin; + /* focus monitor if necessary */ + if ((m = wintomon(ev->window)) && m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + + if (ev->window == selmon->barwins[0]) { + i = x = 0; + do { + x += TEXTW(tags[i]); + } while (ev->x >= x && ++i < LENGTH(tags)); + if (i < LENGTH(tags)) { + click = ClkTagBar; + arg.ui = 1 << i; + } else if (ev->x < x + TEXTW(selmon->ltsymbol)) + click = ClkLtSymbol; + } + + else if (ev->window == selmon->barwins[1]) { + x = lrpad / 2 - iconspacing / 2; + for (c = m->clients; c; c = c->next) { + if (!ISVISIBLE(c)) continue; + if (ev->x < x + iconsize) break; + x += iconsize + iconspacing; + } + click = ClkWinTitle; + arg.v = c; + } + + else if (ev->window == selmon->barwins[2]) { + click = ClkStatusText; + arg.i = ev->x; + arg.ui = ev->button; + } + + else if ((c = wintoclient(ev->window))) { + focus(c); + restack(selmon); + XAllowEvents(dpy, ReplayPointer, CurrentTime); + click = ClkClientWin; + } + + for (i = 0; i < LENGTH(buttons); i++) + if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) + buttons[i].func((click == ClkTagBar || click == ClkWinTitle || click == ClkStatusText) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); } void checkotherwm(void) { - xerrorxlib = XSetErrorHandler(xerrorstart); - /* this causes an error if some other window manager is running */ - XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); - XSync(dpy, False); - XSetErrorHandler(xerror); - XSync(dpy, False); + xerrorxlib = XSetErrorHandler(xerrorstart); + /* this causes an error if some other window manager is running */ + XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); + XSync(dpy, False); + XSetErrorHandler(xerror); + XSync(dpy, False); } void cleanup(void) { - Arg a = {.ui = ~0}; - Layout foo = {"", NULL}; - Monitor *m; - size_t i; - - view(&a); - selmon->lt[selmon->sellt] = &foo; - for (m = mons; m; m = m->next) - while (m->stack) unmanage(m->stack, 0); - XUngrabKey(dpy, AnyKey, AnyModifier, root); - while (mons) cleanupmon(mons); - for (i = 0; i < CurLast; i++) drw_cur_free(drw, cursor[i]); - for (i = 0; i < LENGTH(colors); i++) free(scheme[i]); - free(scheme); - XDestroyWindow(dpy, wmcheckwin); - drw_free(drw); - XSync(dpy, False); - XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); - XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + Arg a = {.ui = ~0}; + Layout foo = {"", NULL}; + Monitor *m; + size_t i; + + view(&a); + selmon->lt[selmon->sellt] = &foo; + for (m = mons; m; m = m->next) + while (m->stack) unmanage(m->stack, 0); + XUngrabKey(dpy, AnyKey, AnyModifier, root); + while (mons) cleanupmon(mons); + for (i = 0; i < CurLast; i++) drw_cur_free(drw, cursor[i]); + for (i = 0; i < LENGTH(colors) + 1; i++) free(scheme[i]); + free(scheme); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); + XSync(dpy, False); + XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); } void cleanupmon(Monitor *mon) { - Monitor *m; + Monitor *m; - if (mon == mons) - mons = mons->next; - else { - for (m = mons; m && m->next != mon; m = m->next); - m->next = mon->next; - } - for (int i = 0; i < 3; i++) { - XUnmapWindow(dpy, mon->barwins[i]); - XDestroyWindow(dpy, mon->barwins[i]); - } - free(mon); + if (mon == mons) + mons = mons->next; + else { + for (m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; + } + for (int i = 0; i < 3; i++) { + XUnmapWindow(dpy, mon->barwins[i]); + XDestroyWindow(dpy, mon->barwins[i]); + } + free(mon); } void clientmessage(XEvent *e) { - XClientMessageEvent *cme = &e->xclient; - Client *c = wintoclient(cme->window); + XClientMessageEvent *cme = &e->xclient; + Client *c = wintoclient(cme->window); - if (!c) return; - if (cme->message_type == netatom[NetWMState]) { - if (cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen]) - setfullscreen(c, (cme->data.l[0] == 1 || (cme->data.l[0] == 2 && !c->isfullscreen))); - } else if (cme->message_type == netatom[NetActiveWindow]) { - if (c != selmon->sel && !c->isurgent) seturgent(c, 1); - } + if (!c) return; + if (cme->message_type == netatom[NetWMState]) { + if (cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen]) + setfullscreen(c, (cme->data.l[0] == 1 || (cme->data.l[0] == 2 && !c->isfullscreen))); + } else if (cme->message_type == netatom[NetActiveWindow]) { + if (c != selmon->sel && !c->isurgent) seturgent(c, 1); + } } void clkstatusbar(const Arg *arg) { - static unsigned long last; - struct timespec now; - unsigned long current; - int n = 0, ptr = 0, len; - char *text, *btn = "L", *cmd; - - if (!arg->i || arg->i <= 0) return; - - /* throttling */ - clock_gettime(CLOCK_MONOTONIC, &now); - current = now.tv_sec * 1000UL + now.tv_nsec / 1000000UL; - if (current - last < 100) - return; - else - last = current; - - text = (char *)malloc(256 * sizeof(char)); - strcpy(text, stext); - while (text[++ptr]) { - if (text[ptr] != ' ') continue; - text[ptr] = '\0'; - len = TEXTW(text) - lrpad; - text[ptr] = ' '; - n += (len < arg->i); - } - - switch (arg->ui) { - case Button1: - btn = "L"; - break; - case Button2: - btn = "M"; - break; - case Button3: - btn = "R"; - break; - case Button4: - btn = "U"; - break; - case Button5: - btn = "D"; - break; - } - - cmd = (char *)malloc(256 * sizeof(char)); - sprintf(cmd, "%s %d %s &", statusbarscript, n, btn); - system(cmd); - free(cmd); - free(text); + static unsigned long last; + struct timespec now; + unsigned long current; + int n = 0, ptr = 0, len; + int i, j, isc = 0; + char *text, *btn = btnstr[arg->ui], *cmd; + + if (!arg->i || arg->i <= 0) return; + + /* throttling */ + clock_gettime(CLOCK_MONOTONIC, &now); + current = now.tv_sec * 1000UL + now.tv_nsec / 1000000UL; + if (current - last < 100) + return; + else + last = current; + + text = (char *)malloc(256 * sizeof(char)); + for (i = j = 0; stext[i]; ++i) { + if (stext[i] == '^') { + isc ^= 1; + continue; + } + if (!isc) text[j++] = stext[i]; + } + text[j] = '\0'; + + while (text[++ptr]) { + if (text[ptr] != '&') continue; + text[ptr] = '\0'; + len = TEXTW(text) - lrpad; + text[ptr] = ' '; + n += (len < arg->i); + } + + cmd = (char *)malloc(256 * sizeof(char)); + sprintf(cmd, "%s %d %s &", statusbarscript, n, btn); + system(cmd); + free(cmd); + free(text); } void configure(Client *c) { - XConfigureEvent ce; - - ce.type = ConfigureNotify; - ce.display = dpy; - ce.event = c->win; - ce.window = c->win; - ce.x = c->x; - ce.y = c->y; - ce.width = c->w; - ce.height = c->h; - ce.border_width = c->bw; - ce.above = None; - ce.override_redirect = False; - XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); + XConfigureEvent ce; + + ce.type = ConfigureNotify; + ce.display = dpy; + ce.event = c->win; + ce.window = c->win; + ce.x = c->x; + ce.y = c->y; + ce.width = c->w; + ce.height = c->h; + ce.border_width = c->bw; + ce.above = None; + ce.override_redirect = False; + XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); } void configurenotify(XEvent *e) { - Monitor *m; - Client *c; - XConfigureEvent *ev = &e->xconfigure; - int dirty, i; - - /* TODO: updategeom handling sucks, needs to be simplified */ - if (ev->window == root) { - dirty = (sw != ev->width || sh != ev->height); - sw = ev->width; - sh = ev->height; - if (updategeom() || dirty) { - drw_resize(drw, sw, bh); - updatebars(); - for (m = mons; m; m = m->next) { - for (c = m->clients; c; c = c->next) - if (c->isfullscreen) resizeclient(c, m->mx, m->my, m->mw, m->mh); - for (i = 0; i < 3; i++) XMoveResizeWindow(dpy, m->barwins[i], m->wx, m->by, m->ww, bh); - } - focus(NULL); - arrange(NULL); - } - } + Monitor *m; + Client *c; + XConfigureEvent *ev = &e->xconfigure; + int dirty, i; + + /* TODO: updategeom handling sucks, needs to be simplified */ + if (ev->window == root) { + dirty = (sw != ev->width || sh != ev->height); + sw = ev->width; + sh = ev->height; + if (updategeom() || dirty) { + drw_resize(drw, sw, bh); + updatebars(); + for (m = mons; m; m = m->next) { + for (c = m->clients; c; c = c->next) + if (c->isfullscreen) resizeclient(c, m->mx, m->my, m->mw, m->mh); + for (i = 0; i < 3; i++) XMoveResizeWindow(dpy, m->barwins[i], m->wx, m->by, m->ww, bh); + } + focus(NULL); + arrange(NULL); + } + } } void configurerequest(XEvent *e) { - Client *c; - Monitor *m; - XConfigureRequestEvent *ev = &e->xconfigurerequest; - XWindowChanges wc; - - if ((c = wintoclient(ev->window))) { - if (ev->value_mask & CWBorderWidth) - c->bw = ev->border_width; - else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { - m = c->mon; - if (ev->value_mask & CWX) { - c->oldx = c->x; - c->x = m->mx + ev->x; - } - if (ev->value_mask & CWY) { - c->oldy = c->y; - c->y = m->my + ev->y; - } - if (ev->value_mask & CWWidth) { - c->oldw = c->w; - c->w = ev->width; - } - if (ev->value_mask & CWHeight) { - c->oldh = c->h; - c->h = ev->height; - } - if ((c->x + c->w) > m->mx + m->mw && c->isfloating) c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ - if ((c->y + c->h) > m->my + m->mh && c->isfloating) c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ - if ((ev->value_mask & (CWX | CWY)) && !(ev->value_mask & (CWWidth | CWHeight))) configure(c); - if (ISVISIBLE(c)) XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); - } else - configure(c); - } else { - wc.x = ev->x; - wc.y = ev->y; - wc.width = ev->width; - wc.height = ev->height; - wc.border_width = ev->border_width; - wc.sibling = ev->above; - wc.stack_mode = ev->detail; - XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); - } - XSync(dpy, False); + Client *c; + Monitor *m; + XConfigureRequestEvent *ev = &e->xconfigurerequest; + XWindowChanges wc; + + if ((c = wintoclient(ev->window))) { + if (ev->value_mask & CWBorderWidth) + c->bw = ev->border_width; + else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { + m = c->mon; + if (ev->value_mask & CWX) { + c->oldx = c->x; + c->x = m->mx + ev->x; + } + if (ev->value_mask & CWY) { + c->oldy = c->y; + c->y = m->my + ev->y; + } + if (ev->value_mask & CWWidth) { + c->oldw = c->w; + c->w = ev->width; + } + if (ev->value_mask & CWHeight) { + c->oldh = c->h; + c->h = ev->height; + } + if ((c->x + c->w) > m->mx + m->mw && c->isfloating) c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ + if ((c->y + c->h) > m->my + m->mh && c->isfloating) c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ + if ((ev->value_mask & (CWX | CWY)) && !(ev->value_mask & (CWWidth | CWHeight))) configure(c); + if (ISVISIBLE(c)) XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + } else + configure(c); + } else { + wc.x = ev->x; + wc.y = ev->y; + wc.width = ev->width; + wc.height = ev->height; + wc.border_width = ev->border_width; + wc.sibling = ev->above; + wc.stack_mode = ev->detail; + XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); + } + XSync(dpy, False); } Monitor *createmon(void) { - Monitor *m; - unsigned int i; - - m = ecalloc(1, sizeof(Monitor)); - m->tagset[0] = m->tagset[1] = 1; - m->mfact = mfact; - m->nmaster = nmaster; - m->showbar = showbar; - m->topbar = topbar; - m->lt[0] = &layouts[0]; - m->lt[1] = &layouts[1 % LENGTH(layouts)]; - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); - m->pertag = ecalloc(1, sizeof(Pertag)); - m->pertag->curtag = 0; - for (i = 0; i < LENGTH(tags); i++) { - m->pertag->nmasters[i] = m->nmaster; - m->pertag->ltidxs[i][0] = m->lt[0]; - m->pertag->ltidxs[i][1] = m->lt[1]; - m->pertag->sellts[i] = m->sellt; - } - return m; + Monitor *m; + unsigned int i; + + m = ecalloc(1, sizeof(Monitor)); + m->tagset[0] = m->tagset[1] = 1; + m->mfact = mfact; + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); + m->pertag = ecalloc(1, sizeof(Pertag)); + m->pertag->curtag = 0; + for (i = 0; i < LENGTH(tags); i++) { + m->pertag->nmasters[i] = m->nmaster; + m->pertag->ltidxs[i][0] = m->lt[0]; + m->pertag->ltidxs[i][1] = m->lt[1]; + m->pertag->sellts[i] = m->sellt; + } + return m; } void destroynotify(XEvent *e) { - Client *c; - XDestroyWindowEvent *ev = &e->xdestroywindow; + Client *c; + XDestroyWindowEvent *ev = &e->xdestroywindow; - if ((c = wintoclient(ev->window))) unmanage(c, 1); + if ((c = wintoclient(ev->window))) unmanage(c, 1); } void detach(Client *c) { - Client **tc; + Client **tc; - for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next); - *tc = c->next; + for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next); + *tc = c->next; } void detachstack(Client *c) { - Client **tc, *t; + Client **tc, *t; - for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext); - *tc = c->snext; + for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext); + *tc = c->snext; - if (c == c->mon->sel) { - for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext); - c->mon->sel = t; - } + if (c == c->mon->sel) { + for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext); + c->mon->sel = t; + } } Monitor *dirtomon(int dir) { - Monitor *m = NULL; + Monitor *m = NULL; - if (dir > 0) { - if (!(m = selmon->next)) m = mons; - } else if (selmon == mons) - for (m = mons; m->next; m = m->next); - else - for (m = mons; m->next != selmon; m = m->next); - return m; + if (dir > 0) { + if (!(m = selmon->next)) m = mons; + } else if (selmon == mons) + for (m = mons; m->next; m = m->next); + else + for (m = mons; m->next != selmon; m = m->next); + return m; } void drawbar(Monitor *m) { - int x, w, tw = 0, s = 0, v; - int boxs = drw->fonts->h / 9; - int boxw = drw->fonts->h / 6 + 2; - int margin = drw->fonts->h * 8; - unsigned int i, occ = 0, urg = 0; - Client *c; - - if (!m->barwins[0] || !m->barwins[1] || !m->barwins[2] || !m->showbar) return; - - /* draw status first so it can be overdrawn by tags later */ - if (m == selmon) { /* status is only drawn on selected monitor */ - drw_setscheme(drw, scheme[SchemeNorm]); - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); - XMoveResizeWindow(dpy, m->barwins[2], m->wx + m->ww - tw, m->by, tw, bh); - drw_map(drw, m->barwins[2], m->ww - tw, 0, m->ww, bh); - } - - for (c = m->clients; c; c = c->next) { - occ |= c->tags; - if (c->isurgent) urg |= c->tags; - } - x = 0; - for (i = 0; i < LENGTH(tags); i++) { - w = TEXTW(tags[i]); - drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); - x += w; - } - w = TEXTW(m->ltsymbol); - drw_setscheme(drw, scheme[SchemeNorm]); - x = m->pvx = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); - XMoveResizeWindow(dpy, m->barwins[0], m->wx, m->by, x, bh); - drw_map(drw, m->barwins[0], 0, 0, x, bh); - - s = TEXTW(m->sel->name); - if ((w = m->ww - tw - x - margin) > bh) { - if (m->sel) { - drw_setscheme(drw, scheme[SchemeNorm]); - v = m->sel->icon ? m->sel->icw + iconspacing : 0; - s = m->pvs = drw_text(drw, x, 0, MIN(s + v, w), bh, lrpad / 2 + v, m->sel->name, 0) - x; - if (m->sel->icon) drw_pic(drw, x + lrpad / 2, (bh - m->sel->ich) / 2, m->sel->icw, m->sel->ich, m->sel->icon); - if (m->sel->isfloating) drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); - XMoveResizeWindow(dpy, m->barwins[1], m->wx + (m->ww - tw + x - s) / 2, m->by, s, bh); - drw_map(drw, m->barwins[1], x, 0, w, bh); - } else { - drw_text(drw, x, 0, w, bh, lrpad / 2, "", 0); - drw_map(drw, m->barwins[1], x, 0, w, bh); - XMoveResizeWindow(dpy, m->barwins[1], m->wx + (m->ww - tw + x - bh) / 2, m->by, bh, bh); - } - } + int x, w, tw = 0, s = 0, n = 0; + int margin = drw->fonts->h * 8; + unsigned int i, occ = 0, urg = 0; + Client *c; + + if (!m->barwins[0] || !m->barwins[1] || !m->barwins[2] || !m->showbar) return; + + /* draw status first so it can be overdrawn by tags later */ + if (m == selmon) { /* status is only drawn on selected monitor */ + tw = m->ww - drawstatusbar(m); + XMoveResizeWindow(dpy, m->barwins[2], m->wx + m->ww - tw, m->by, tw, bh); + drw_map(drw, m->barwins[2], m->ww - tw, 0, m->ww, bh); + } + + for (c = m->clients; c; c = c->next) { + occ |= c->isglobal || c->tags == TAGMASK ? 0 : c->tags; + if (c->isurgent) urg |= c->tags; + if (ISVISIBLE(c)) ++n; + } + x = 0; + for (i = 0; i < LENGTH(tags); i++) { + w = TEXTW(tags[i]); + drw_setscheme(drw, scheme[occ & 1 << i ? schemetags[i] : SchemeTag]); + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); + if (m->tagset[m->seltags] & 1 << i) drw_rect(drw, x + ulpad, bh - ulstroke, w - 2 * ulpad, ulstroke, 1, 0); + x += w; + } + w = TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeLayout]); + x = m->pvx = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + XMoveResizeWindow(dpy, m->barwins[0], m->wx, m->by, x, bh); + drw_map(drw, m->barwins[0], 0, 0, x, bh); + + s = lrpad / 2; + if ((w = m->ww - tw - x - margin) > bh) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, "", 0); + if (n > 0) { + if (m == selmon) drw_setscheme(drw, scheme[SchemeTitle]); + for (c = m->clients; c; c = c->next) { + if (!ISVISIBLE(c)) continue; + if (c->icon) drw_pic(drw, x + s, (bh - c->ich) / 2, c->icw, c->ich, c->icon); + if (m->sel == c) drw_rect(drw, x + s, bh - ulstroke, c->icw, ulstroke, 1, 0); + s += c->icon ? c->icw + iconspacing : 0; + } + s = m->pvs = s - iconspacing + lrpad / 2; + XMoveResizeWindow(dpy, m->barwins[1], m->wx + (m->ww - tw + x - s) / 2, m->by, s, bh); + drw_map(drw, m->barwins[1], x, 0, w, bh); + } else { + s = m->pvs ? m->pvs : lrpad + iconspacing; + XMoveResizeWindow(dpy, m->barwins[1], m->wx + (m->ww - tw + x - s) / 2, -2 * bh, s, bh); + } + } } void drawbars(void) { - Monitor *m; - - for (m = mons; m; m = m->next) drawbar(m); + Monitor *m; + + for (m = mons; m; m = m->next) drawbar(m); +} + +int drawstatusbar(Monitor *m) { + int i, w, x, n, len, ret; + int rx, ry, rw, rh; + int y = 5, v = 10; /* 5px padding on top and bottom */ + short isc = 0; + char *text, *p, buf[8]; + + len = strlen(stext) + 1; + text = ecalloc(len, sizeof(char)); + p = text; + memcpy(text, stext, len); + + for (i = w = 0; text[i]; i++) { + if (text[i] == '&') + text[i] = ' '; + if (text[i] == '^') { + if (!isc) { + isc = 1; + text[i] = '\0'; + w += TEXTW(text) - lrpad; + text[i] = '^'; + if (text[++i] == 'f') w += atoi(text + ++i); + } else { + isc = 0; + text = text + i + 1; + i = -1; + } + } + } + + if (!isc) + w += TEXTW(text) - lrpad; + else + isc = 0; + text = p; + w += 2; /* 1px padding on both sides */ + ret = x = m->ww - w; + + drw_setscheme(drw, scheme[LENGTH(colors)]); + drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; + drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; + drw_rect(drw, x++, 0, w, bh, 1, 1); + + for (i = 0; text[i]; i++) { + if (text[i] == '^' && !isc) { + isc = 1; + text[i] = '\0'; + w = TEXTW(text) - lrpad; + drw_text(drw, x, y, w, bh - v, 0, text, 0); + x += w; + + /* process code part */ + while (text[++i] != '^') { + if (text[i] == 'c' || text[i] == 'b') { + memcpy(buf, text + i + 1, 7); + buf[7] = '\0'; + drw_clr_create(drw, &drw->scheme[text[i] == 'c' ? ColFg : ColBg], buf); + i += 7; + } else if (text[i] == 'd') { + drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; + drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; + } else if (text[i] == 'r') { + sscanf(text + i, "r%d,%d,%d,%d%n", &rx, &ry, &rw, &rh, &n); + drw_rect(drw, x + rx, y + ry, rw, MIN(rh, bh - v), 1, 0); + i += n - 1; + } else if (text[i] == 'f') { + sscanf(text + i, "f%d%n", &rx, &n); + x += rx; + i += n - 1; + } + } + + text = text + i + 1; + i = -1; + isc = 0; + } + } + + if (!isc) { + w = TEXTW(text) - lrpad; + drw_text(drw, x, 0, w, bh, 0, text, 0); + } + + drw_setscheme(drw, scheme[SchemeNorm]); + free(p); + return ret; } void enternotify(XEvent *e) { - Client *c; - Monitor *m; - XCrossingEvent *ev = &e->xcrossing; + Client *c; + Monitor *m; + XCrossingEvent *ev = &e->xcrossing; - if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) return; - c = wintoclient(ev->window); - m = c ? c->mon : wintomon(ev->window); - if (m != selmon) { - unfocus(selmon->sel, 1); - selmon = m; - } else if (!c || c == selmon->sel) - return; - focus(c); + if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) return; + c = wintoclient(ev->window); + m = c ? c->mon : wintomon(ev->window); + if (m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + } else if (!c || c == selmon->sel) + return; + focus(c); } void expose(XEvent *e) { - Monitor *m; - XExposeEvent *ev = &e->xexpose; + Monitor *m; + XExposeEvent *ev = &e->xexpose; - if (ev->count == 0 && (m = wintomon(ev->window))) drawbar(m); + if (ev->count == 0 && (m = wintomon(ev->window))) drawbar(m); } void focus(Client *c) { - if (!c || !ISVISIBLE(c)) - for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); - if (selmon->sel && selmon->sel != c) unfocus(selmon->sel, 0); - if (c) { - if (c->mon != selmon) selmon = c->mon; - if (c->isurgent) seturgent(c, 0); - detachstack(c); - attachstack(c); - grabbuttons(c, 1); - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - setfocus(c); - } else { - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); - XDeleteProperty(dpy, root, netatom[NetActiveWindow]); - } - selmon->sel = c; - drawbars(); + if (!c || !ISVISIBLE(c)) + for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); + if (selmon->sel && selmon->sel != c) unfocus(selmon->sel, 0); + if (c) { + if (c->mon != selmon) selmon = c->mon; + if (c->isurgent) seturgent(c, 0); + detachstack(c); + attachstack(c); + grabbuttons(c, 1); + XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } + selmon->sel = c; + drawbars(); } /* there are some broken focus acquiring clients needing extra handling */ void focusin(XEvent *e) { - XFocusChangeEvent *ev = &e->xfocus; + XFocusChangeEvent *ev = &e->xfocus; - if (selmon->sel && ev->window != selmon->sel->win) setfocus(selmon->sel); + if (selmon->sel && ev->window != selmon->sel->win) setfocus(selmon->sel); } void focusmon(const Arg *arg) { - Monitor *m; + Monitor *m; - if (!mons->next) return; - if ((m = dirtomon(arg->i)) == selmon) return; - unfocus(selmon->sel, 0); - selmon = m; - focus(NULL); + if (!mons->next) return; + if ((m = dirtomon(arg->i)) == selmon) return; + unfocus(selmon->sel, 0); + selmon = m; + focus(NULL); } void focusstack(const Arg *arg) { - Client *c = NULL, *i; - - if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen)) return; - if (arg->i > 0) { - for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); - if (!c) - for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next); - } else { - for (i = selmon->clients; i != selmon->sel; i = i->next) - if (ISVISIBLE(i)) c = i; - if (!c) - for (; i; i = i->next) - if (ISVISIBLE(i)) c = i; - } - if (c) { - focus(c); - restack(selmon); - } + Client *c = NULL, *i; + + if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen)) return; + if (arg->i > 0) { + for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); + if (!c) + for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next); + } else { + for (i = selmon->clients; i != selmon->sel; i = i->next) + if (ISVISIBLE(i)) c = i; + if (!c) + for (; i; i = i->next) + if (ISVISIBLE(i)) c = i; + } + if (c) { + focus(c); + restack(selmon); + } } Atom getatomprop(Client *c, Atom prop) { - int di; - unsigned long dl; - unsigned char *p = NULL; - Atom da, atom = None; + int di; + unsigned long dl; + unsigned char *p = NULL; + Atom da, atom = None; - if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, &da, &di, &dl, &dl, &p) == Success && p) { - atom = *(Atom *)p; - XFree(p); - } - return atom; + if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, &da, &di, &dl, &dl, &p) == Success && p) { + atom = *(Atom *)p; + XFree(p); + } + return atom; } Picture geticonprop(Window win, unsigned int *picw, unsigned int *pich) { - Atom real; - int format; - unsigned long n, extra, *p = NULL; - if (XGetWindowProperty(dpy, win, netatom[NetWMIcon], 0L, LONG_MAX, False, AnyPropertyType, &real, &format, &n, &extra, (unsigned char **)&p) != Success || !n || format != 32) { - XFree(p); - return None; - } - - unsigned long *bstp = NULL; - uint32_t bstd = UINT32_MAX, w, h, sz; - for (unsigned long *i = p, *end = p + n; i < end - 1; i += sz) { - if (((w = *i++) >= 16384) || ((h = *i++) >= 16384) || (sz = w * h) > end - i) break; - uint32_t diff = abs((int)MAX(w, h) - iconsize); - if (diff < bstd) { - bstd = diff; - bstp = i; - } - } - if (!bstp || !(w = bstp[-2]) || !(h = bstp[-1])) { - XFree(p); - return None; - } - - *picw = w <= h ? MAX(w * iconsize / h, 1) : iconsize; - *pich = w <= h ? iconsize : MAX(h * iconsize / w, 1); - uint32_t i, a, *bstp32 = (uint32_t *)bstp; - for (sz = w * h, i = 0, a = bstp[i]; i < sz; a = bstp[++i]) - bstp32[i] = ((((a >> 24u) * (a & 0xFF00FFu)) >> 8u) & 0xFF00FFu) | ((((a >> 24u) * (a & 0x00FF00u)) >> 8u) & 0x00FF00u) | (a & 0xFF000000); - - Picture ret = drw_picture_create_resized(drw, (char *)bstp, w, h, *picw, *pich); - XFree(p); - return ret; + Atom real; + int format; + unsigned long n, extra, *p = NULL; + if (XGetWindowProperty(dpy, win, netatom[NetWMIcon], 0L, LONG_MAX, False, AnyPropertyType, &real, &format, &n, &extra, (unsigned char **)&p) != Success || !n || format != 32) { + XFree(p); + return None; + } + + unsigned long *bstp = NULL; + uint32_t bstd = UINT32_MAX, w, h, sz; + for (unsigned long *i = p, *end = p + n; i < end - 1; i += sz) { + if (((w = *i++) >= 16384) || ((h = *i++) >= 16384) || (sz = w * h) > end - i) break; + uint32_t diff = abs((int)MAX(w, h) - iconsize); + if (diff < bstd) { + bstd = diff; + bstp = i; + } + } + if (!bstp || !(w = bstp[-2]) || !(h = bstp[-1])) { + XFree(p); + return None; + } + + *picw = w <= h ? MAX(w * iconsize / h, 1) : iconsize; + *pich = w <= h ? iconsize : MAX(h * iconsize / w, 1); + uint32_t i, a, *bstp32 = (uint32_t *)bstp; + for (sz = w * h, i = 0, a = bstp[i]; i < sz; a = bstp[++i]) + bstp32[i] = ((((a >> 24u) * (a & 0xFF00FFu)) >> 8u) & 0xFF00FFu) | ((((a >> 24u) * (a & 0x00FF00u)) >> 8u) & 0x00FF00u) | (a & 0xFF000000); + + Picture ret = drw_picture_create_resized(drw, (char *)bstp, w, h, *picw, *pich); + XFree(p); + return ret; } int getrootptr(int *x, int *y) { - int di; - unsigned int dui; - Window dummy; + int di; + unsigned int dui; + Window dummy; - return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui); + return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui); } long getstate(Window w) { - int format; - long result = -1; - unsigned char *p = NULL; - unsigned long n, extra; - Atom real; + int format; + long result = -1; + unsigned char *p = NULL; + unsigned long n, extra; + Atom real; - if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], &real, &format, &n, &extra, (unsigned char **)&p) != Success) return -1; - if (n != 0) result = *p; - XFree(p); - return result; + if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], &real, &format, &n, &extra, (unsigned char **)&p) != Success) return -1; + if (n != 0) result = *p; + XFree(p); + return result; } int gettextprop(Window w, Atom atom, char *text, unsigned int size) { - char **list = NULL; - int n; - XTextProperty name; - - if (!text || size == 0) return 0; - text[0] = '\0'; - if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems) return 0; - if (name.encoding == XA_STRING) { - strncpy(text, (char *)name.value, size - 1); - } else if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { - strncpy(text, *list, size - 1); - XFreeStringList(list); - } - text[size - 1] = '\0'; - XFree(name.value); - return 1; + char **list = NULL; + int n; + XTextProperty name; + + if (!text || size == 0) return 0; + text[0] = '\0'; + if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems) return 0; + if (name.encoding == XA_STRING) { + strncpy(text, (char *)name.value, size - 1); + } else if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { + strncpy(text, *list, size - 1); + XFreeStringList(list); + } + text[size - 1] = '\0'; + XFree(name.value); + return 1; } void grabbuttons(Client *c, int focused) { - updatenumlockmask(); - { - unsigned int i, j; - unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask}; - XUngrabButton(dpy, AnyButton, AnyModifier, c->win); - if (!focused) XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, GrabModeSync, GrabModeSync, None, None); - for (i = 0; i < LENGTH(buttons); i++) - if (buttons[i].click == ClkClientWin) - for (j = 0; j < LENGTH(modifiers); j++) - XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - } + updatenumlockmask(); + { + unsigned int i, j; + unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask}; + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + if (!focused) XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, GrabModeSync, GrabModeSync, None, None); + for (i = 0; i < LENGTH(buttons); i++) + if (buttons[i].click == ClkClientWin) + for (j = 0; j < LENGTH(modifiers); j++) + XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); + } } void grabkeys(void) { - updatenumlockmask(); - { - unsigned int i, j, k; - unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask}; - int start, end, skip; - KeySym *syms; - - XUngrabKey(dpy, AnyKey, AnyModifier, root); - XDisplayKeycodes(dpy, &start, &end); - syms = XGetKeyboardMapping(dpy, start, end - start + 1, &skip); - if (!syms) return; - for (k = start; k <= end; k++) - for (i = 0; i < LENGTH(keys); i++) /* skip modifier codes, we do that ourselves */ - if (keys[i].keysym == syms[(k - start) * skip]) - for (j = 0; j < LENGTH(modifiers); j++) XGrabKey(dpy, k, keys[i].mod | modifiers[j], root, True, GrabModeAsync, GrabModeAsync); - XFree(syms); - } + updatenumlockmask(); + { + unsigned int i, j, k; + unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask}; + int start, end, skip; + KeySym *syms; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + XDisplayKeycodes(dpy, &start, &end); + syms = XGetKeyboardMapping(dpy, start, end - start + 1, &skip); + if (!syms) return; + for (k = start; k <= end; k++) + for (i = 0; i < LENGTH(keys); i++) /* skip modifier codes, we do that ourselves */ + if (keys[i].keysym == syms[(k - start) * skip]) + for (j = 0; j < LENGTH(modifiers); j++) XGrabKey(dpy, k, keys[i].mod | modifiers[j], root, True, GrabModeAsync, GrabModeAsync); + XFree(syms); + } } void incnmaster(const Arg *arg) { - int n, a; - Client *c; - for (n = 0, c = nexttiled(selmon->clients); c; c = nexttiled(c->next), n++); - a = MAX(MIN(selmon->nmaster + arg->i, n), 1); - selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = n ? a : 1; + int n, a; + Client *c; + for (n = 0, c = nexttiled(selmon->clients); c; c = nexttiled(c->next), n++); + a = MAX(MIN(selmon->nmaster + arg->i, n), 1); + selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = n ? a : 1; } #ifdef XINERAMA static int isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) { - while (n--) - if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org && unique[n].width == info->width && unique[n].height == info->height) return 0; - return 1; + while (n--) + if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org && unique[n].width == info->width && unique[n].height == info->height) return 0; + return 1; } #endif /* XINERAMA */ void keypress(XEvent *e) { - unsigned int i; - KeySym keysym; - XKeyEvent *ev; + unsigned int i; + KeySym keysym; + XKeyEvent *ev; - ev = &e->xkey; - keysym = XLookupKeysym(ev, 0); - for (i = 0; i < LENGTH(keys); i++) - if (keysym == keys[i].keysym && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].func) keys[i].func(&(keys[i].arg)); + ev = &e->xkey; + keysym = XLookupKeysym(ev, 0); + for (i = 0; i < LENGTH(keys); i++) + if (keysym == keys[i].keysym && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].func) keys[i].func(&(keys[i].arg)); } void killclient(const Arg *arg) { - if (!selmon->sel) return; - if (!sendevent(selmon->sel, wmatom[WMDelete])) { - XGrabServer(dpy); - XSetErrorHandler(xerrordummy); - XSetCloseDownMode(dpy, DestroyAll); - XKillClient(dpy, selmon->sel->win); - XSync(dpy, False); - XSetErrorHandler(xerror); - XUngrabServer(dpy); - } + if (!selmon->sel) return; + if (!sendevent(selmon->sel, wmatom[WMDelete])) { + XGrabServer(dpy); + XSetErrorHandler(xerrordummy); + XSetCloseDownMode(dpy, DestroyAll); + XKillClient(dpy, selmon->sel->win); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } } void manage(Window w, XWindowAttributes *wa) { - Client *c, *t = NULL; - Window trans = None; - XWindowChanges wc; - - c = ecalloc(1, sizeof(Client)); - c->win = w; - /* geometry */ - c->x = c->oldx = wa->x; - c->y = c->oldy = wa->y; - c->w = c->oldw = wa->width; - c->h = c->oldh = wa->height; - c->oldbw = wa->border_width; - - updateicon(c); - updatetitle(c); - if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { - c->mon = t->mon; - c->tags = t->tags; - } else { - c->mon = selmon; - applyrules(c); - } - - if (unmanaged) { - XMapWindow(dpy, c->win); - switch (unmanaged) { - case 1: - XRaiseWindow(dpy, c->win); - break; - case 2: - XLowerWindow(dpy, c->win); - break; - } - updatewmhints(c); - if (!c->neverfocus) XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); - sendevent(c, wmatom[WMTakeFocus]); - free(c); - unmanaged = 0; - return; - } - - if (c->x + WIDTH(c) > c->mon->wx + c->mon->ww) c->x = c->mon->wx + c->mon->ww - WIDTH(c); - if (c->y + HEIGHT(c) > c->mon->wy + c->mon->wh) c->y = c->mon->wy + c->mon->wh - HEIGHT(c); - c->x = MAX(c->x, c->mon->wx); - c->y = MAX(c->y, c->mon->wy); - c->bw = borderpx; - - wc.border_width = c->bw; - XConfigureWindow(dpy, w, CWBorderWidth, &wc); - XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); - configure(c); /* propagates border_width, if size doesn't change */ - updatewindowtype(c); - updatesizehints(c); - updatewmhints(c); - XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask); - grabbuttons(c, 0); - if (!c->isfloating) c->isfloating = c->oldstate = trans != None || c->isfixed; - if (c->isfloating) XRaiseWindow(dpy, c->win); - attach(c); - attachstack(c); - XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *)&(c->win), 1); - XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ - setclientstate(c, NormalState); - if (c->mon == selmon) unfocus(selmon->sel, 0); - c->mon->sel = c; - arrange(c->mon); - XMapWindow(dpy, c->win); - focus(NULL); + Client *c, *t = NULL; + Window trans = None; + XWindowChanges wc; + + c = ecalloc(1, sizeof(Client)); + c->win = w; + /* geometry */ + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; + c->w = c->oldw = wa->width; + c->h = c->oldh = wa->height; + c->oldbw = wa->border_width; + + updateicon(c); + updatetitle(c); + if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { + c->mon = t->mon; + c->tags = t->tags; + } else { + c->mon = selmon; + applyrules(c); + } + + if (unmanaged) { + XMapWindow(dpy, c->win); + switch (unmanaged) { + case 1: + XRaiseWindow(dpy, c->win); + break; + case 2: + XLowerWindow(dpy, c->win); + break; + } + updatewmhints(c); + if (!c->neverfocus) XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + sendevent(c, wmatom[WMTakeFocus]); + free(c); + unmanaged = 0; + return; + } + + if (c->x + WIDTH(c) > c->mon->wx + c->mon->ww) c->x = c->mon->wx + c->mon->ww - WIDTH(c); + if (c->y + HEIGHT(c) > c->mon->wy + c->mon->wh) c->y = c->mon->wy + c->mon->wh - HEIGHT(c); + c->x = MAX(c->x, c->mon->wx); + c->y = MAX(c->y, c->mon->wy); + c->bw = borderpx; + + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); + XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); + configure(c); /* propagates border_width, if size doesn't change */ + updatewindowtype(c); + updatesizehints(c); + updatewmhints(c); + XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask); + grabbuttons(c, 0); + if (!c->isfloating) c->isfloating = c->oldstate = trans != None || c->isfixed; + if (c->isfloating) XRaiseWindow(dpy, c->win); + attach(c); + attachstack(c); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *)&(c->win), 1); + XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ + setclientstate(c, NormalState); + if (c->mon == selmon) unfocus(selmon->sel, 0); + c->mon->sel = c; + arrange(c->mon); + XMapWindow(dpy, c->win); + focus(NULL); } void mappingnotify(XEvent *e) { - XMappingEvent *ev = &e->xmapping; + XMappingEvent *ev = &e->xmapping; - XRefreshKeyboardMapping(ev); - if (ev->request == MappingKeyboard) grabkeys(); + XRefreshKeyboardMapping(ev); + if (ev->request == MappingKeyboard) grabkeys(); } void maprequest(XEvent *e) { - static XWindowAttributes wa; - XMapRequestEvent *ev = &e->xmaprequest; + static XWindowAttributes wa; + XMapRequestEvent *ev = &e->xmaprequest; - if (!XGetWindowAttributes(dpy, ev->window, &wa) || wa.override_redirect) return; - if (!wintoclient(ev->window)) manage(ev->window, &wa); + if (!XGetWindowAttributes(dpy, ev->window, &wa) || wa.override_redirect) return; + if (!wintoclient(ev->window)) manage(ev->window, &wa); } void monocle(Monitor *m) { - unsigned int n = 0; - Client *c; + unsigned int n = 0; + Client *c; - for (c = m->clients; c; c = c->next) - if (ISVISIBLE(c)) n++; - if (n > 0) /* override layout symbol */ - strcpy(m->ltsymbol, monsyms[MIN(n, 10)]); - for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); + for (c = m->clients; c; c = c->next) + if (ISVISIBLE(c)) n++; + if (n > 0) /* override layout symbol */ + strcpy(m->ltsymbol, monsyms[MIN(n, 10)]); + for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); } void motionnotify(XEvent *e) { - static Monitor *mon = NULL; - Monitor *m; - XMotionEvent *ev = &e->xmotion; + static Monitor *mon = NULL; + Monitor *m; + XMotionEvent *ev = &e->xmotion; - if (ev->window != root) return; - if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { - unfocus(selmon->sel, 1); - selmon = m; - focus(NULL); - } - mon = m; + if (ev->window != root) return; + if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + mon = m; } void movemouse(const Arg *arg) { - int x, y, ocx, ocy, nx, ny; - Client *c; - Monitor *m; - XEvent ev; - Time lasttime = 0; - - if (!(c = selmon->sel)) return; - if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ - return; - restack(selmon); - ocx = c->x; - ocy = c->y; - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) return; - if (!getrootptr(&x, &y)) return; - do { - XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); - switch (ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) continue; - lasttime = ev.xmotion.time; - - nx = ocx + (ev.xmotion.x - x); - ny = ocy + (ev.xmotion.y - y); - if (abs(selmon->wx - nx) < snap) - nx = selmon->wx; - else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) - nx = selmon->wx + selmon->ww - WIDTH(c); - if (abs(selmon->wy - ny) < snap) - ny = selmon->wy; - else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) - ny = selmon->wy + selmon->wh - HEIGHT(c); - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) togglefloating(NULL); - if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) resize(c, nx, ny, c->w, c->h, 1); - break; - } - } while (ev.type != ButtonRelease); - XUngrabPointer(dpy, CurrentTime); - if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { - sendmon(c, m); - selmon = m; - focus(NULL); - } + int x, y, ocx, ocy, nx, ny; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) return; + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) return; + if (!getrootptr(&x, &y)) return; + do { + XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); + switch (ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) continue; + lasttime = ev.xmotion.time; + + nx = ocx + (ev.xmotion.x - x); + ny = ocy + (ev.xmotion.y - y); + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) togglefloating(NULL); + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) resize(c, nx, ny, c->w, c->h, 1); + break; + } + } while (ev.type != ButtonRelease); + XUngrabPointer(dpy, CurrentTime); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } } Client *nexttiled(Client *c) { - for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); - return c; + for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); + return c; } void pertagupdate(Monitor *m) { - m->nmaster = m->pertag->nmasters[m->pertag->curtag]; - m->sellt = m->pertag->sellts[m->pertag->curtag]; - m->lt[m->sellt] = m->pertag->ltidxs[m->pertag->curtag][m->sellt]; - m->lt[m->sellt ^ 1] = m->pertag->ltidxs[m->pertag->curtag][m->sellt ^ 1]; + m->nmaster = m->pertag->nmasters[m->pertag->curtag]; + m->sellt = m->pertag->sellts[m->pertag->curtag]; + m->lt[m->sellt] = m->pertag->ltidxs[m->pertag->curtag][m->sellt]; + m->lt[m->sellt ^ 1] = m->pertag->ltidxs[m->pertag->curtag][m->sellt ^ 1]; } void pop(Client *c) { - detach(c); - attach(c); - focus(c); - arrange(c->mon); + detach(c); + attach(c); + focus(c); + arrange(c->mon); } void propertynotify(XEvent *e) { - Client *c; - Window trans; - XPropertyEvent *ev = &e->xproperty; - - if ((ev->window == root) && (ev->atom == XA_WM_NAME)) - updatestatus(); - else if (ev->state == PropertyDelete) - return; /* ignore */ - else if ((c = wintoclient(ev->window))) { - switch (ev->atom) { - default: - break; - case XA_WM_TRANSIENT_FOR: - if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && (c->isfloating = (wintoclient(trans)) != NULL)) arrange(c->mon); - break; - case XA_WM_NORMAL_HINTS: - c->hintsvalid = 0; - break; - case XA_WM_HINTS: - updatewmhints(c); - drawbars(); - break; - } - if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { - updatetitle(c); - if (c == c->mon->sel) drawbar(c->mon); - } else if (ev->atom == netatom[NetWMIcon]) { - updateicon(c); - if (c == c->mon->sel) drawbar(c->mon); - } - if (ev->atom == netatom[NetWMWindowType]) updatewindowtype(c); - } + Client *c; + Window trans; + XPropertyEvent *ev = &e->xproperty; + + if ((ev->window == root) && (ev->atom == XA_WM_NAME)) + updatestatus(); + else if (ev->state == PropertyDelete) + return; /* ignore */ + else if ((c = wintoclient(ev->window))) { + switch (ev->atom) { + default: + break; + case XA_WM_TRANSIENT_FOR: + if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && (c->isfloating = (wintoclient(trans)) != NULL)) arrange(c->mon); + break; + case XA_WM_NORMAL_HINTS: + c->hintsvalid = 0; + break; + case XA_WM_HINTS: + updatewmhints(c); + drawbars(); + break; + } + if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { + updatetitle(c); + if (c == c->mon->sel) drawbar(c->mon); + } else if (ev->atom == netatom[NetWMIcon]) { + updateicon(c); + if (c == c->mon->sel) drawbar(c->mon); + } + if (ev->atom == netatom[NetWMWindowType]) updatewindowtype(c); + } } void quit(const Arg *arg) { - running = 0; + running = 0; } Monitor *recttomon(int x, int y, int w, int h) { - Monitor *m, *r = selmon; - int a, area = 0; + Monitor *m, *r = selmon; + int a, area = 0; - for (m = mons; m; m = m->next) - if ((a = INTERSECT(x, y, w, h, m)) > area) { - area = a; - r = m; - } - return r; + for (m = mons; m; m = m->next) + if ((a = INTERSECT(x, y, w, h, m)) > area) { + area = a; + r = m; + } + return r; } void resize(Client *c, int x, int y, int w, int h, int interact) { - if (applysizehints(c, &x, &y, &w, &h, interact)) resizeclient(c, x, y, w, h); + if (applysizehints(c, &x, &y, &w, &h, interact)) resizeclient(c, x, y, w, h); } void resizeclient(Client *c, int x, int y, int w, int h) { - XWindowChanges wc; - - c->oldx = c->x; - c->x = wc.x = x; - c->oldy = c->y; - c->y = wc.y = y; - c->oldw = c->w; - c->w = wc.width = w; - c->oldh = c->h; - c->h = wc.height = h; - wc.border_width = c->bw; - XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc); - configure(c); - XSync(dpy, False); + XWindowChanges wc; + + c->oldx = c->x; + c->x = wc.x = x; + c->oldy = c->y; + c->y = wc.y = y; + c->oldw = c->w; + c->w = wc.width = w; + c->oldh = c->h; + c->h = wc.height = h; + wc.border_width = c->bw; + XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc); + configure(c); + XSync(dpy, False); } void resizemouse(const Arg *arg) { - int ocx, ocy, nw, nh; - Client *c; - Monitor *m; - XEvent ev; - Time lasttime = 0; - - if (!(c = selmon->sel)) return; - if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ - return; - restack(selmon); - ocx = c->x; - ocy = c->y; - if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) return; - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); - do { - XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); - switch (ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) continue; - lasttime = ev.xmotion.time; - - nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); - nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); - if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) { - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) togglefloating(NULL); - } - if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) resize(c, c->x, c->y, nw, nh, 1); - break; - } - } while (ev.type != ButtonRelease); - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); - XUngrabPointer(dpy, CurrentTime); - while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); - if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { - sendmon(c, m); - selmon = m; - focus(NULL); - } + int ocx, ocy, nw, nh; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) return; + if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) return; + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + do { + XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); + switch (ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) continue; + lasttime = ev.xmotion.time; + + nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); + nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); + if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) { + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) togglefloating(NULL); + } + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) resize(c, c->x, c->y, nw, nh, 1); + break; + } + } while (ev.type != ButtonRelease); + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + XUngrabPointer(dpy, CurrentTime); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } } void restack(Monitor *m) { - Client *c; - XEvent ev; - XWindowChanges wc; - - drawbar(m); - if (!m->sel) return; - if (m->sel->isfloating || !m->lt[m->sellt]->arrange) XRaiseWindow(dpy, m->sel->win); - if (m->lt[m->sellt]->arrange) { - wc.stack_mode = Below; - wc.sibling = m->barwins[0]; - for (c = m->stack; c; c = c->snext) - if (!c->isfloating && ISVISIBLE(c)) { - XConfigureWindow(dpy, c->win, CWSibling | CWStackMode, &wc); - wc.sibling = c->win; - } - } - XSync(dpy, False); - while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + Client *c; + XEvent ev; + XWindowChanges wc; + + drawbar(m); + if (!m->sel) return; + if (m->sel->isfloating || !m->lt[m->sellt]->arrange) XRaiseWindow(dpy, m->sel->win); + if (m->lt[m->sellt]->arrange) { + wc.stack_mode = Below; + wc.sibling = m->barwins[0]; + for (c = m->stack; c; c = c->snext) + if (!c->isfloating && ISVISIBLE(c)) { + XConfigureWindow(dpy, c->win, CWSibling | CWStackMode, &wc); + wc.sibling = c->win; + } + } + XSync(dpy, False); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void run(void) { - XEvent ev; - /* main event loop */ - XSync(dpy, False); - while (running && !XNextEvent(dpy, &ev)) - if (handler[ev.type]) handler[ev.type](&ev); /* call handler */ -} - -void runAutostart(void) { - char cmd[100]; - sprintf(cmd, "%s &", autostartscript); - system(cmd); + XEvent ev; + /* main event loop */ + XSync(dpy, False); + while (running && !XNextEvent(dpy, &ev)) + if (handler[ev.type]) handler[ev.type](&ev); /* call handler */ } void scan(void) { - unsigned int i, num; - Window d1, d2, *wins = NULL; - XWindowAttributes wa; - - if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { - for (i = 0; i < num; i++) { - if (!XGetWindowAttributes(dpy, wins[i], &wa) || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) continue; - if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) manage(wins[i], &wa); - } - for (i = 0; i < num; i++) { /* now the transients */ - if (!XGetWindowAttributes(dpy, wins[i], &wa)) continue; - if (XGetTransientForHint(dpy, wins[i], &d1) && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) manage(wins[i], &wa); - } - if (wins) XFree(wins); - } + unsigned int i, num; + Window d1, d2, *wins = NULL; + XWindowAttributes wa; + + if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { + for (i = 0; i < num; i++) { + if (!XGetWindowAttributes(dpy, wins[i], &wa) || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) continue; + if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) manage(wins[i], &wa); + } + for (i = 0; i < num; i++) { /* now the transients */ + if (!XGetWindowAttributes(dpy, wins[i], &wa)) continue; + if (XGetTransientForHint(dpy, wins[i], &d1) && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) manage(wins[i], &wa); + } + if (wins) XFree(wins); + } } void sendmon(Client *c, Monitor *m) { - if (c->mon == m) return; - unfocus(c, 1); - detach(c); - detachstack(c); - c->mon = m; - c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - attach(c); - attachstack(c); - focus(NULL); - arrange(NULL); + if (c->mon == m) return; + unfocus(c, 1); + detach(c); + detachstack(c); + c->mon = m; + c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ + attach(c); + attachstack(c); + focus(NULL); + arrange(NULL); } void setclientstate(Client *c, long state) { - long data[] = {state, None}; + long data[] = {state, None}; + + XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, PropModeReplace, (unsigned char *)data, 2); +} + +void setdefaulticon(Client *c) { + uint32_t w, h, *data; - XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, PropModeReplace, (unsigned char *)data, 2); + data = getdefaulticon(&w, &h); + c->icw = w <= h ? MAX(w * iconsize / h, 1) : iconsize; + c->ich = w <= h ? iconsize : MAX(h * iconsize / w, 1); + c->icon = drw_picture_create_resized(drw, (char *)data, w, h, c->icw, c->ich); } int sendevent(Client *c, Atom proto) { - int n; - Atom *protocols; - int exists = 0; - XEvent ev; - - if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { - while (!exists && n--) exists = protocols[n] == proto; - XFree(protocols); - } - if (exists) { - ev.type = ClientMessage; - ev.xclient.window = c->win; - ev.xclient.message_type = wmatom[WMProtocols]; - ev.xclient.format = 32; - ev.xclient.data.l[0] = proto; - ev.xclient.data.l[1] = CurrentTime; - XSendEvent(dpy, c->win, False, NoEventMask, &ev); - } - return exists; + int n; + Atom *protocols; + int exists = 0; + XEvent ev; + + if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { + while (!exists && n--) exists = protocols[n] == proto; + XFree(protocols); + } + if (exists) { + ev.type = ClientMessage; + ev.xclient.window = c->win; + ev.xclient.message_type = wmatom[WMProtocols]; + ev.xclient.format = 32; + ev.xclient.data.l[0] = proto; + ev.xclient.data.l[1] = CurrentTime; + XSendEvent(dpy, c->win, False, NoEventMask, &ev); + } + return exists; } void setfocus(Client *c) { - if (!c->neverfocus) { - XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); - XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&(c->win), 1); - } - sendevent(c, wmatom[WMTakeFocus]); + if (!c->neverfocus) { + XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&(c->win), 1); + } + sendevent(c, wmatom[WMTakeFocus]); } void setfullscreen(Client *c, int fullscreen) { - if (fullscreen && !c->isfullscreen) { - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char *)&netatom[NetWMFullscreen], 1); - c->isfullscreen = 1; - c->oldstate = c->isfloating; - c->oldbw = c->bw; - c->bw = 0; - c->isfloating = 1; - resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); - XRaiseWindow(dpy, c->win); - } else if (!fullscreen && c->isfullscreen) { - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char *)0, 0); - c->isfullscreen = 0; - c->isfloating = c->oldstate; - c->bw = c->oldbw; - c->x = c->oldx; - c->y = c->oldy; - c->w = c->oldw; - c->h = c->oldh; - resizeclient(c, c->x, c->y, c->w, c->h); - arrange(c->mon); - } + if (fullscreen && !c->isfullscreen) { + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char *)&netatom[NetWMFullscreen], 1); + c->isfullscreen = 1; + c->oldstate = c->isfloating; + c->oldbw = c->bw; + c->bw = 0; + c->isfloating = 1; + resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); + XRaiseWindow(dpy, c->win); + } else if (!fullscreen && c->isfullscreen) { + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char *)0, 0); + c->isfullscreen = 0; + c->isfloating = c->oldstate; + c->bw = c->oldbw; + c->x = c->oldx; + c->y = c->oldy; + c->w = c->oldw; + c->h = c->oldh; + resizeclient(c, c->x, c->y, c->w, c->h); + arrange(c->mon); + } } void setlayout(const Arg *arg) { - if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; - if (arg && arg->v) selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; - strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); - if (selmon->sel) - arrange(selmon); - else - drawbar(selmon); + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; + if (arg && arg->v) selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); + if (selmon->sel) + arrange(selmon); + else + drawbar(selmon); } /* arg > 1.0 will set mfact absolutely */ void setmfact(const Arg *arg) { - float f; + float f; - if (!arg || !selmon->lt[selmon->sellt]->arrange) return; - f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; - if (f < 0.05 || f > 0.95) return; - selmon->mfact = f; - arrange(selmon); + if (!arg || !selmon->lt[selmon->sellt]->arrange) return; + f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; + if (f < 0.05 || f > 0.95) return; + selmon->mfact = f; + arrange(selmon); } void setup(void) { - int i; - XSetWindowAttributes wa; - Atom utf8string; - struct sigaction sa; - - /* do not transform children into zombies when they terminate */ - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART; - sa.sa_handler = SIG_IGN; - sigaction(SIGCHLD, &sa, NULL); - - /* clean up any zombies (inherited from .xinitrc etc) immediately */ - while (waitpid(-1, NULL, WNOHANG) > 0); - - /* init screen */ - screen = DefaultScreen(dpy); - sw = DisplayWidth(dpy, screen); - sh = DisplayHeight(dpy, screen); - root = RootWindow(dpy, screen); - drw = drw_create(dpy, screen, root, sw, sh); - if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); - lrpad = drw->fonts->h; - unmanaged = 0; - bh = drw->fonts->h + 12; - updategeom(); - /* init atoms */ - utf8string = XInternAtom(dpy, "UTF8_STRING", False); - wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); - wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); - wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); - wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); - netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); - netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); - netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); - netatom[NetWMIcon] = XInternAtom(dpy, "_NET_WM_ICON", False); - netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); - netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); - netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); - netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); - netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); - netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); - /* init cursors */ - cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); - cursor[CurResize] = drw_cur_create(drw, XC_sizing); - cursor[CurMove] = drw_cur_create(drw, XC_fleur); - /* init appearance */ - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); - for (i = 0; i < LENGTH(colors); i++) scheme[i] = drw_scm_create(drw, colors[i], 3); - /* init bars */ - updatebars(); - updatestatus(); - /* supporting window for NetWMCheck */ - wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); - XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&wmcheckwin, 1); - XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8, PropModeReplace, (unsigned char *)"dwm", 3); - XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&wmcheckwin, 1); - /* EWMH support per view */ - XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, PropModeReplace, (unsigned char *)netatom, NetLast); - XDeleteProperty(dpy, root, netatom[NetClientList]); - /* select events */ - wa.cursor = cursor[CurNormal]->cursor; - wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ButtonPressMask | PointerMotionMask | EnterWindowMask | /* add event mask */ - LeaveWindowMask | StructureNotifyMask | PropertyChangeMask; - XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); - XSelectInput(dpy, root, wa.event_mask); - grabkeys(); - focus(NULL); + int i; + XSetWindowAttributes wa; + Atom utf8string; + struct sigaction sa; + + /* do not transform children into zombies when they terminate */ + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART; + sa.sa_handler = SIG_IGN; + sigaction(SIGCHLD, &sa, NULL); + + /* clean up any zombies (inherited from .xinitrc etc) immediately */ + while (waitpid(-1, NULL, WNOHANG) > 0); + + /* init screen */ + screen = DefaultScreen(dpy); + sw = DisplayWidth(dpy, screen); + sh = DisplayHeight(dpy, screen); + root = RootWindow(dpy, screen); + drw = drw_create(dpy, screen, root, sw, sh); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); + lrpad = drw->fonts->h; + unmanaged = 0; + bh = drw->fonts->h + 12; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); + wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); + wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); + wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); + netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); + netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); + netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + netatom[NetWMIcon] = XInternAtom(dpy, "_NET_WM_ICON", False); + netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); + netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); + netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); + netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); + /* init cursors */ + cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ + scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); + scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3); + for (i = 0; i < LENGTH(colors); i++) scheme[i] = drw_scm_create(drw, colors[i], 3); + /* init bars */ + updatebars(); + updatestatus(); + /* supporting window for NetWMCheck */ + wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&wmcheckwin, 1); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8, PropModeReplace, (unsigned char *)"dwm", 3); + XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, PropModeReplace, (unsigned char *)&wmcheckwin, 1); + /* EWMH support per view */ + XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, PropModeReplace, (unsigned char *)netatom, NetLast); + XDeleteProperty(dpy, root, netatom[NetClientList]); + /* select events */ + wa.cursor = cursor[CurNormal]->cursor; + wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ButtonPressMask | PointerMotionMask | EnterWindowMask | /* add event mask */ + LeaveWindowMask | StructureNotifyMask | PropertyChangeMask; + XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); + XSelectInput(dpy, root, wa.event_mask); + grabkeys(); + focus(NULL); } void seturgent(Client *c, int urg) { - XWMHints *wmh; + XWMHints *wmh; - c->isurgent = urg; - if (!(wmh = XGetWMHints(dpy, c->win))) return; - wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint); - XSetWMHints(dpy, c->win, wmh); - XFree(wmh); + c->isurgent = urg; + if (!(wmh = XGetWMHints(dpy, c->win))) return; + wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint); + XSetWMHints(dpy, c->win, wmh); + XFree(wmh); } void showhide(Client *c) { - if (!c) return; - if (ISVISIBLE(c)) { - /* show clients top down */ - XMoveWindow(dpy, c->win, c->x, c->y); - if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen) resize(c, c->x, c->y, c->w, c->h, 0); - showhide(c->snext); - } else { - /* hide clients bottom up */ - showhide(c->snext); - XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y); - } + if (!c) return; + if (ISVISIBLE(c)) { + /* show clients top down */ + XMoveWindow(dpy, c->win, c->x, c->y); + if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen) resize(c, c->x, c->y, c->w, c->h, 0); + showhide(c->snext); + } else { + /* hide clients bottom up */ + showhide(c->snext); + XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y); + } } void spawn(const Arg *arg) { - struct sigaction sa; + struct sigaction sa; - if (arg->v == dmenucmd) dmenumon[0] = '0' + selmon->num; - if (fork() == 0) { - if (dpy) close(ConnectionNumber(dpy)); - setsid(); + if (arg->v == dmenucmd) dmenumon[0] = '0' + selmon->num; + if (fork() == 0) { + if (dpy) close(ConnectionNumber(dpy)); + setsid(); - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sa.sa_handler = SIG_DFL; - sigaction(SIGCHLD, &sa, NULL); + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = SIG_DFL; + sigaction(SIGCHLD, &sa, NULL); - execvp(((char **)arg->v)[0], (char **)arg->v); - die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); - } + execvp(((char **)arg->v)[0], (char **)arg->v); + die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); + } } void tag(const Arg *arg) { - if (selmon->sel && arg->ui & TAGMASK) { - selmon->sel->isglobal = 0; - selmon->sel->tags = arg->ui & TAGMASK; - focus(NULL); - arrange(selmon); - } + if (selmon->sel && arg->ui & TAGMASK) { + selmon->sel->isglobal = 0; + selmon->sel->tags = arg->ui & TAGMASK; + focus(NULL); + arrange(selmon); + } } void tagmon(const Arg *arg) { - if (!selmon->sel || !mons->next) return; - sendmon(selmon->sel, dirtomon(arg->i)); + if (!selmon->sel || !mons->next) return; + sendmon(selmon->sel, dirtomon(arg->i)); } void tile(Monitor *m) { - unsigned int i, n, mw, my, ty; - unsigned int cx, cy, cw, ch; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); - if (n == 0) return; - - mw = n > m->nmaster ? m->ww * m->mfact : m->ww; - for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) - if (i < m->nmaster) { - cx = m->wx; - cy = m->wy + my; - cw = mw; - ch = (m->wh - my) / (m->nmaster - i); - resize(c, cx, cy, cw - (2 * c->bw), ch - (2 * c->bw), 0); - if (my + HEIGHT(c) < m->wh) my += HEIGHT(c); - } else { - cx = m->wx + mw; - cy = m->wy + ty; - cw = m->ww - mw; - ch = (m->wh - ty) / (n - i); - resize(c, cx, cy, cw - (2 * c->bw), ch - (2 * c->bw), 0); - if (ty + HEIGHT(c) < m->wh) ty += HEIGHT(c); - } + unsigned int i, n, mw, my, ty; + unsigned int cx, cy, cw, ch; + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if (n == 0) return; + + mw = n > m->nmaster ? m->ww * m->mfact : m->ww; + for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + cx = m->wx; + cy = m->wy + my; + cw = mw; + ch = (m->wh - my) / (m->nmaster - i); + resize(c, cx, cy, cw - (2 * c->bw), ch - (2 * c->bw), 0); + if (my + HEIGHT(c) < m->wh) my += HEIGHT(c); + } else { + cx = m->wx + mw; + cy = m->wy + ty; + cw = m->ww - mw; + ch = (m->wh - ty) / (n - i); + resize(c, cx, cy, cw - (2 * c->bw), ch - (2 * c->bw), 0); + if (ty + HEIGHT(c) < m->wh) ty += HEIGHT(c); + } } void togglebar(const Arg *arg) { - selmon->showbar = !selmon->showbar; - updatebarpos(selmon); - int tw = TEXTW(stext) - lrpad + 2, x = selmon->pvx, s = selmon->pvs; - XMoveWindow(dpy, selmon->barwins[0], selmon->wx, selmon->by); - XMoveWindow(dpy, selmon->barwins[1], selmon->wx + (selmon->ww - tw + x - s) / 2, selmon->by); - XMoveWindow(dpy, selmon->barwins[2], selmon->wx + selmon->ww - tw, selmon->by); - arrange(selmon); + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); + int tw = TEXTW(stext) - lrpad + 2, x = selmon->pvx, s = selmon->pvs; + XMoveWindow(dpy, selmon->barwins[0], selmon->wx, selmon->by); + XMoveWindow(dpy, selmon->barwins[1], selmon->wx + (selmon->ww - tw + x - s) / 2, selmon->by); + XMoveWindow(dpy, selmon->barwins[2], selmon->wx + selmon->ww - tw, selmon->by); + arrange(selmon); } void togglefloating(const Arg *arg) { - if (!selmon->sel) return; - if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ - return; - selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; - if (selmon->sel->isfloating) resize(selmon->sel, selmon->sel->x, selmon->sel->y, selmon->sel->w, selmon->sel->h, 0); - arrange(selmon); + if (!selmon->sel) return; + if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ + return; + selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; + if (selmon->sel->isfloating) resize(selmon->sel, selmon->sel->x, selmon->sel->y, selmon->sel->w, selmon->sel->h, 0); + arrange(selmon); } void toggleglobal(const Arg *arg) { - if (!selmon->sel) return; - selmon->sel->isglobal ^= 1; - selmon->sel->tags = selmon->sel->isglobal ? 0 : selmon->tagset[selmon->seltags]; - focus(NULL); + if (!selmon->sel) return; + selmon->sel->isglobal ^= 1; + selmon->sel->tags = selmon->sel->isglobal ? 0 : selmon->tagset[selmon->seltags]; + focus(NULL); } void toggleview(const Arg *arg) { - unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); - int i; - if (newtagset) { - selmon->tagset[selmon->seltags] = newtagset; - incnmaster(&(Arg){.i = 0}); - if (!(newtagset & 1 << (selmon->pertag->curtag))) { - for (i = 0; !(newtagset & 1 << i); i++); - selmon->pertag->curtag = i; - } - pertagupdate(selmon); - focus(NULL); - arrange(selmon); - } + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); + int i; + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; + incnmaster(&(Arg){.i = 0}); + if (!(newtagset & 1 << (selmon->pertag->curtag))) { + for (i = 0; !(newtagset & 1 << i); i++); + selmon->pertag->curtag = i; + } + pertagupdate(selmon); + focus(NULL); + arrange(selmon); + } } void freeicon(Client *c) { - if (c->icon) { - XRenderFreePicture(dpy, c->icon); - c->icon = None; - } + if (c->icon) { + XRenderFreePicture(dpy, c->icon); + c->icon = None; + } } void transfer(const Arg *arg) { - Client *c, *mtail, *stail, *insertafter; - int i, tostack; + Client *c, *mtail, *stail, *insertafter; + int i, tostack; - for (i = 0, c = nexttiled(selmon->clients); c; i++, c = nexttiled(c->next)) { - if (c == selmon->sel) tostack = i < selmon->nmaster; - if (i < selmon->nmaster) mtail = c; - stail = c; - } + for (i = 0, c = nexttiled(selmon->clients); c; i++, c = nexttiled(c->next)) { + if (c == selmon->sel) tostack = i < selmon->nmaster; + if (i < selmon->nmaster) mtail = c; + stail = c; + } - if (i == 0 || !selmon->sel || selmon->sel->isfloating) return; + if (i == 0 || !selmon->sel || selmon->sel->isfloating) return; - insertafter = tostack ? stail : mtail; - incnmaster(&(Arg){.i = tostack ? -1 : +1}); + insertafter = tostack ? stail : mtail; + incnmaster(&(Arg){.i = tostack ? -1 : +1}); - if (insertafter != selmon->sel) { - detach(selmon->sel); - selmon->sel->next = insertafter->next; - insertafter->next = selmon->sel; - } - arrange(selmon); + if (insertafter != selmon->sel) { + detach(selmon->sel); + selmon->sel->next = insertafter->next; + insertafter->next = selmon->sel; + } + arrange(selmon); } void unfocus(Client *c, int setfocus) { - if (!c) return; - grabbuttons(c, 0); - XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); - if (setfocus) { - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); - XDeleteProperty(dpy, root, netatom[NetActiveWindow]); - } + if (!c) return; + grabbuttons(c, 0); + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); + if (setfocus) { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } } void unmanage(Client *c, int destroyed) { - Monitor *m = c->mon, *tmp; - XWindowChanges wc; - - detach(c); - detachstack(c); - freeicon(c); - - tmp = selmon; /* cache selmon */ - selmon = c->mon; - incnmaster(&(Arg){.i = 0}); - selmon = tmp; /* recover selmon */ - - if (!destroyed) { - wc.border_width = c->oldbw; - XGrabServer(dpy); /* avoid race conditions */ - XSetErrorHandler(xerrordummy); - XSelectInput(dpy, c->win, NoEventMask); - XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ - XUngrabButton(dpy, AnyButton, AnyModifier, c->win); - setclientstate(c, WithdrawnState); - XSync(dpy, False); - XSetErrorHandler(xerror); - XUngrabServer(dpy); - } - free(c); - focus(NULL); - updateclientlist(); - arrange(m); + Monitor *m = c->mon, *tmp; + XWindowChanges wc; + + detach(c); + detachstack(c); + freeicon(c); + + tmp = selmon; /* cache selmon */ + selmon = c->mon; + incnmaster(&(Arg){.i = 0}); + selmon = tmp; /* recover selmon */ + + if (!destroyed) { + wc.border_width = c->oldbw; + XGrabServer(dpy); /* avoid race conditions */ + XSetErrorHandler(xerrordummy); + XSelectInput(dpy, c->win, NoEventMask); + XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + setclientstate(c, WithdrawnState); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } + free(c); + focus(NULL); + updateclientlist(); + arrange(m); } void unmapnotify(XEvent *e) { - Client *c; - XUnmapEvent *ev = &e->xunmap; + Client *c; + XUnmapEvent *ev = &e->xunmap; - if ((c = wintoclient(ev->window))) { - if (ev->send_event) - setclientstate(c, WithdrawnState); - else - unmanage(c, 0); - } + if ((c = wintoclient(ev->window))) { + if (ev->send_event) + setclientstate(c, WithdrawnState); + else + unmanage(c, 0); + } } void updatebars(void) { - Monitor *m; - XSetWindowAttributes wa = {.override_redirect = True, .background_pixmap = ParentRelative, .event_mask = ButtonPressMask | ExposureMask}; - XClassHint ch = {"dwm", "dwm"}; - for (m = mons; m; m = m->next) { - for (int i = 0; i < 3; i++) { - if (m->barwins[i]) continue; - m->barwins[i] = XCreateWindow(dpy, root, m->wx + m->ww, m->wy + m->wh, bh, bh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - XDefineCursor(dpy, m->barwins[i], cursor[CurNormal]->cursor); - XMapRaised(dpy, m->barwins[i]); - XSetClassHint(dpy, m->barwins[i], &ch); - } - } + Monitor *m; + XSetWindowAttributes wa = {.override_redirect = True, .background_pixmap = ParentRelative, .event_mask = ButtonPressMask | ExposureMask}; + XClassHint ch = {"dwm", "dwm"}; + for (m = mons; m; m = m->next) { + for (int i = 0; i < 3; i++) { + if (m->barwins[i]) continue; + m->barwins[i] = XCreateWindow(dpy, root, m->wx + m->ww, m->wy + m->wh, bh, bh, 0, DefaultDepth(dpy, screen), + CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); + XDefineCursor(dpy, m->barwins[i], cursor[CurNormal]->cursor); + XMapRaised(dpy, m->barwins[i]); + XSetClassHint(dpy, m->barwins[i], &ch); + } + } } void updatebarpos(Monitor *m) { - /* padding x,y,w,h of MainWindow */ - m->wx = m->mx + sidepad; - m->wy = m->my + sidepad; - m->ww = m->mw - 2 * sidepad; - m->wh = m->mh - 2 * sidepad; - if (m->showbar) { - m->wh -= bh + sidepad; - m->by = m->topbar ? m->wy : m->wy + m->wh; - m->wy = m->topbar ? m->wy + bh + sidepad : m->wy; - } else - m->by = -bh - sidepad; + /* padding x,y,w,h of MainWindow */ + m->wx = m->mx + sidepad; + m->wy = m->my + sidepad; + m->ww = m->mw - 2 * sidepad; + m->wh = m->mh - 2 * sidepad; + if (m->showbar) { + m->wh -= bh + sidepad; + m->by = m->topbar ? m->wy : m->wy + m->wh; + m->wy = m->topbar ? m->wy + bh + sidepad : m->wy; + } else + m->by = -bh - sidepad; } void updateclientlist(void) { - Client *c; - Monitor *m; + Client *c; + Monitor *m; - XDeleteProperty(dpy, root, netatom[NetClientList]); - for (m = mons; m; m = m->next) - for (c = m->clients; c; c = c->next) XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *)&(c->win), 1); + XDeleteProperty(dpy, root, netatom[NetClientList]); + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *)&(c->win), 1); } int updategeom(void) { - int dirty = 0; + int dirty = 0; #ifdef XINERAMA - if (XineramaIsActive(dpy)) { - int i, j, n, nn; - Client *c; - Monitor *m; - XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); - XineramaScreenInfo *unique = NULL; - - for (n = 0, m = mons; m; m = m->next, n++); - /* only consider unique geometries as separate screens */ - unique = ecalloc(nn, sizeof(XineramaScreenInfo)); - for (i = 0, j = 0; i < nn; i++) - if (isuniquegeom(unique, j, &info[i])) memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); - XFree(info); - nn = j; - - /* new monitors if nn > n */ - for (i = n; i < nn; i++) { - for (m = mons; m && m->next; m = m->next); - if (m) - m->next = createmon(); - else - mons = createmon(); - } - for (i = 0, m = mons; i < nn && m; m = m->next, i++) - if (i >= n || unique[i].x_org != m->mx || unique[i].y_org != m->my || unique[i].width != m->mw || unique[i].height != m->mh) { - dirty = 1; - m->num = i; - m->mx = m->wx = unique[i].x_org; - m->my = m->wy = unique[i].y_org; - m->mw = m->ww = unique[i].width; - m->mh = m->wh = unique[i].height; - updatebarpos(m); - } - /* removed monitors if n > nn */ - for (i = nn; i < n; i++) { - for (m = mons; m && m->next; m = m->next); - while ((c = m->clients)) { - dirty = 1; - m->clients = c->next; - detachstack(c); - c->mon = mons; - attach(c); - attachstack(c); - } - if (m == selmon) selmon = mons; - cleanupmon(m); - } - free(unique); - } else + if (XineramaIsActive(dpy)) { + int i, j, n, nn; + Client *c; + Monitor *m; + XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); + XineramaScreenInfo *unique = NULL; + + for (n = 0, m = mons; m; m = m->next, n++); + /* only consider unique geometries as separate screens */ + unique = ecalloc(nn, sizeof(XineramaScreenInfo)); + for (i = 0, j = 0; i < nn; i++) + if (isuniquegeom(unique, j, &info[i])) memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); + XFree(info); + nn = j; + + /* new monitors if nn > n */ + for (i = n; i < nn; i++) { + for (m = mons; m && m->next; m = m->next); + if (m) + m->next = createmon(); + else + mons = createmon(); + } + for (i = 0, m = mons; i < nn && m; m = m->next, i++) + if (i >= n || unique[i].x_org != m->mx || unique[i].y_org != m->my || unique[i].width != m->mw || unique[i].height != m->mh) { + dirty = 1; + m->num = i; + m->mx = m->wx = unique[i].x_org; + m->my = m->wy = unique[i].y_org; + m->mw = m->ww = unique[i].width; + m->mh = m->wh = unique[i].height; + updatebarpos(m); + } + /* removed monitors if n > nn */ + for (i = nn; i < n; i++) { + for (m = mons; m && m->next; m = m->next); + while ((c = m->clients)) { + dirty = 1; + m->clients = c->next; + detachstack(c); + c->mon = mons; + attach(c); + attachstack(c); + } + if (m == selmon) selmon = mons; + cleanupmon(m); + } + free(unique); + } else #endif /* XINERAMA */ - { /* default monitor setup */ - if (!mons) mons = createmon(); - if (mons->mw != sw || mons->mh != sh) { - dirty = 1; - mons->mw = mons->ww = sw; - mons->mh = mons->wh = sh; - updatebarpos(mons); - mons->pvx = mons->pvs = 0; - } - } - if (dirty) { - selmon = mons; - selmon = wintomon(root); - } - return dirty; + { /* default monitor setup */ + if (!mons) mons = createmon(); + if (mons->mw != sw || mons->mh != sh) { + dirty = 1; + mons->mw = mons->ww = sw; + mons->mh = mons->wh = sh; + updatebarpos(mons); + mons->pvx = mons->pvs = 0; + } + } + if (dirty) { + selmon = mons; + selmon = wintomon(root); + } + return dirty; } void updatenumlockmask(void) { - unsigned int i, j; - XModifierKeymap *modmap; + unsigned int i, j; + XModifierKeymap *modmap; - numlockmask = 0; - modmap = XGetModifierMapping(dpy); - for (i = 0; i < 8; i++) - for (j = 0; j < modmap->max_keypermod; j++) - if (modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) numlockmask = (1 << i); - XFreeModifiermap(modmap); + numlockmask = 0; + modmap = XGetModifierMapping(dpy); + for (i = 0; i < 8; i++) + for (j = 0; j < modmap->max_keypermod; j++) + if (modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) numlockmask = (1 << i); + XFreeModifiermap(modmap); } void updatesizehints(Client *c) { - long msize; - XSizeHints size; - - if (!XGetWMNormalHints(dpy, c->win, &size, &msize)) /* size is uninitialized, ensure that size.flags aren't used */ - size.flags = PSize; - if (size.flags & PBaseSize) { - c->basew = size.base_width; - c->baseh = size.base_height; - } else if (size.flags & PMinSize) { - c->basew = size.min_width; - c->baseh = size.min_height; - } else - c->basew = c->baseh = 0; - if (size.flags & PResizeInc) { - c->incw = size.width_inc; - c->inch = size.height_inc; - } else - c->incw = c->inch = 0; - if (size.flags & PMaxSize) { - c->maxw = size.max_width; - c->maxh = size.max_height; - } else - c->maxw = c->maxh = 0; - if (size.flags & PMinSize) { - c->minw = size.min_width; - c->minh = size.min_height; - } else if (size.flags & PBaseSize) { - c->minw = size.base_width; - c->minh = size.base_height; - } else - c->minw = c->minh = 0; - if (size.flags & PAspect) { - c->mina = (float)size.min_aspect.y / size.min_aspect.x; - c->maxa = (float)size.max_aspect.x / size.max_aspect.y; - } else - c->maxa = c->mina = 0.0; - c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh); - c->hintsvalid = 1; + long msize; + XSizeHints size; + + if (!XGetWMNormalHints(dpy, c->win, &size, &msize)) /* size is uninitialized, ensure that size.flags aren't used */ + size.flags = PSize; + if (size.flags & PBaseSize) { + c->basew = size.base_width; + c->baseh = size.base_height; + } else if (size.flags & PMinSize) { + c->basew = size.min_width; + c->baseh = size.min_height; + } else + c->basew = c->baseh = 0; + if (size.flags & PResizeInc) { + c->incw = size.width_inc; + c->inch = size.height_inc; + } else + c->incw = c->inch = 0; + if (size.flags & PMaxSize) { + c->maxw = size.max_width; + c->maxh = size.max_height; + } else + c->maxw = c->maxh = 0; + if (size.flags & PMinSize) { + c->minw = size.min_width; + c->minh = size.min_height; + } else if (size.flags & PBaseSize) { + c->minw = size.base_width; + c->minh = size.base_height; + } else + c->minw = c->minh = 0; + if (size.flags & PAspect) { + c->mina = (float)size.min_aspect.y / size.min_aspect.x; + c->maxa = (float)size.max_aspect.x / size.max_aspect.y; + } else + c->maxa = c->mina = 0.0; + c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh); + c->hintsvalid = 1; } void updatestatus(void) { - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) strcpy(stext, "dwm-6.4"); - drawbar(selmon); + if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) strcpy(stext, "dwm-6.4"); + drawbar(selmon); } void updatetitle(Client *c) { - if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); - if (c->name[0] == '\0') /* hack to mark broken clients */ - strcpy(c->name, broken); + if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); + if (c->name[0] == '\0') /* hack to mark broken clients */ + strcpy(c->name, broken); } void updateicon(Client *c) { - freeicon(c); - c->icon = geticonprop(c->win, &c->icw, &c->ich); + freeicon(c); + c->icon = geticonprop(c->win, &c->icw, &c->ich); + if (!c->icon) setdefaulticon(c); } void updatewindowtype(Client *c) { - Atom state = getatomprop(c, netatom[NetWMState]); - Atom wtype = getatomprop(c, netatom[NetWMWindowType]); + Atom state = getatomprop(c, netatom[NetWMState]); + Atom wtype = getatomprop(c, netatom[NetWMWindowType]); - if (state == netatom[NetWMFullscreen]) setfullscreen(c, 1); - if (wtype == netatom[NetWMWindowTypeDialog]) c->isfloating = 1; + if (state == netatom[NetWMFullscreen]) setfullscreen(c, 1); + if (wtype == netatom[NetWMWindowTypeDialog]) c->isfloating = 1; } void updatewmhints(Client *c) { - XWMHints *wmh; - - if ((wmh = XGetWMHints(dpy, c->win))) { - if (c == selmon->sel && wmh->flags & XUrgencyHint) { - wmh->flags &= ~XUrgencyHint; - XSetWMHints(dpy, c->win, wmh); - } else - c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0; - if (wmh->flags & InputHint) - c->neverfocus = !wmh->input; - else - c->neverfocus = 0; - XFree(wmh); - } + XWMHints *wmh; + + if ((wmh = XGetWMHints(dpy, c->win))) { + if (c == selmon->sel && wmh->flags & XUrgencyHint) { + wmh->flags &= ~XUrgencyHint; + XSetWMHints(dpy, c->win, wmh); + } else + c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0; + if (wmh->flags & InputHint) + c->neverfocus = !wmh->input; + else + c->neverfocus = 0; + XFree(wmh); + } } void view(const Arg *arg) { - unsigned int notsame = (arg->ui & TAGMASK) ^ selmon->tagset[selmon->seltags]; - int i; - if (notsame) { - selmon->seltags ^= 1; - if (arg->ui & TAGMASK) { - selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; - for (i = 0; !(arg->ui & 1 << i); i++); - selmon->pertag->curtag = i; - } - pertagupdate(selmon); - incnmaster(&(Arg){.i = 0}); - focus(NULL); - arrange(selmon); - } + unsigned int notsame = (arg->ui & TAGMASK) ^ selmon->tagset[selmon->seltags]; + int i; + if (notsame) { + selmon->seltags ^= 1; + if (arg->ui & TAGMASK) { + selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; + for (i = 0; !(arg->ui & 1 << i); i++); + selmon->pertag->curtag = i; + } + pertagupdate(selmon); + incnmaster(&(Arg){.i = 0}); + focus(NULL); + arrange(selmon); + } } void viewontag(const Arg *arg) { - if (selmon->sel && arg->ui & TAGMASK) { - selmon->sel->isglobal = 0; - selmon->sel->tags = arg->ui & TAGMASK; - view(arg); - } + if (selmon->sel && arg->ui & TAGMASK) { + selmon->sel->isglobal = 0; + selmon->sel->tags = arg->ui & TAGMASK; + view(arg); + } } Client *wintoclient(Window w) { - Client *c; - Monitor *m; + Client *c; + Monitor *m; - for (m = mons; m; m = m->next) - for (c = m->clients; c; c = c->next) - if (c->win == w) return c; - return NULL; + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) + if (c->win == w) return c; + return NULL; } Monitor *wintomon(Window w) { - int x, y; - Client *c; - Monitor *m; + int x, y; + Client *c; + Monitor *m; - if (w == root && getrootptr(&x, &y)) return recttomon(x, y, 1, 1); - for (m = mons; m; m = m->next) - if (w == m->barwins[0]) return m; - if ((c = wintoclient(w))) return c->mon; - return selmon; + if (w == root && getrootptr(&x, &y)) return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) + if (w == m->barwins[0]) return m; + if ((c = wintoclient(w))) return c->mon; + return selmon; } /* There's no way to check accesses to destroyed windows, thus those cases are * ignored (especially on UnmapNotify's). Other types of errors call Xlibs * default error handler, which may call exit. */ int xerror(Display *dpy, XErrorEvent *ee) { - if (ee->error_code == BadWindow || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable) || - (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable) || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable) || - (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch) || (ee->request_code == X_GrabButton && ee->error_code == BadAccess) || - (ee->request_code == X_GrabKey && ee->error_code == BadAccess) || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) - return 0; - fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", ee->request_code, ee->error_code); - return xerrorxlib(dpy, ee); /* may call exit */ + if (ee->error_code == BadWindow || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable) || + (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable) || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable) || + (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch) || (ee->request_code == X_GrabButton && ee->error_code == BadAccess) || + (ee->request_code == X_GrabKey && ee->error_code == BadAccess) || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) return 0; + fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", ee->request_code, ee->error_code); + return xerrorxlib(dpy, ee); /* may call exit */ } int xerrordummy(Display *dpy, XErrorEvent *ee) { - return 0; + return 0; } /* Startup Error handler to check if another window manager * is already running. */ int xerrorstart(Display *dpy, XErrorEvent *ee) { - die("dwm: another window manager is already running"); - return -1; + die("dwm: another window manager is already running"); + return -1; } void zoom(const Arg *arg) { - Client *c = selmon->sel; + Client *c = arg->v ? (Client *)arg->v : selmon->sel; - if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating) return; - if (c == nexttiled(selmon->clients) && !(c = nexttiled(c->next))) return; - pop(c); + if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating) return; + if (c == nexttiled(selmon->clients) && !(c = nexttiled(c->next))) return; + pop(c); } int main(int argc, char *argv[]) { - if (argc == 2 && !strcmp("-v", argv[1])) - die("dwm-6.4"); - else if (argc != 1) - die("usage: dwm [-v]"); - if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fputs("warning: no locale support\n", stderr); - if (!(dpy = XOpenDisplay(NULL))) die("dwm: cannot open display"); - checkotherwm(); - setup(); + if (argc == 2 && !strcmp("-v", argv[1])) + die("dwm-6.4"); + else if (argc != 1) + die("usage: dwm [-v]"); + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) die("dwm: cannot open display"); + checkotherwm(); + setup(); #ifdef __OpenBSD__ - if (pledge("stdio rpath proc exec", NULL) == -1) die("pledge"); + if (pledge("stdio rpath proc exec", NULL) == -1) die("pledge"); #endif /* __OpenBSD__ */ - scan(); - runAutostart(); - run(); - cleanup(); - XCloseDisplay(dpy); - return EXIT_SUCCESS; + scan(); + autostart(); + run(); + cleanup(); + XCloseDisplay(dpy); + return EXIT_SUCCESS; } diff --git a/dwm.h b/dwm.h index 32a108d..6828a48 100644 --- a/dwm.h +++ b/dwm.h @@ -20,6 +20,8 @@ #include "src/drw.h" #include "src/util.h" +#define MAXTAGS 5 + #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask) & (ShiftMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)) #define INTERSECT(x, y, w, h, m) (MAX(0, MIN((x) + (w), (m)->wx + (m)->ww) - MAX((x), (m)->wx)) * MAX(0, MIN((y) + (h), (m)->wy + (m)->wh) - MAX((y), (m)->wy))) @@ -30,10 +32,10 @@ #define HEIGHT(X) ((X)->h + 2 * (X)->bw) #define TAGMASK ((1 << MAXTAGS) - 1) #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) -#define MAXTAGS (1 << 3) +#define TAG(x) ((1 << (MIN(x, MAXTAGS - 1)))) enum { CurNormal, CurResize, CurMove, CurLast }; -enum { SchemeNorm, SchemeSel }; +enum { SchemeNorm, SchemeSel, SchemeTag, SchemeTag1, SchemeTag2, SchemeTag3, SchemeTag4, SchemeTag5, SchemeLayout, SchemeTitle }; enum { NetSupported, NetWMName, NetWMIcon, NetWMState, NetWMCheck, NetWMFullscreen, NetActiveWindow, NetWMWindowType, NetWMWindowTypeDialog, NetClientList, NetLast }; enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, ClkRootWin, ClkLast }; @@ -48,88 +50,88 @@ typedef struct Rule Rule; typedef struct Pertag Pertag; struct Arg { - int i; - unsigned int ui; - float f; - const void *v; + int i; + unsigned int ui; + float f; + const void *v; }; struct Button { - unsigned int click; - unsigned int mask; - unsigned int button; - void (*func)(const Arg *arg); - const Arg arg; + unsigned int click; + unsigned int mask; + unsigned int button; + void (*func)(const Arg *arg); + const Arg arg; }; struct Client { - char name[256]; - float mina, maxa; - int x, y, w, h; - int oldx, oldy, oldw, oldh; - int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid; - int bw, oldbw; - unsigned int tags; - int isfixed, isfloating, isglobal, isurgent, neverfocus, oldstate, isfullscreen; - unsigned int icw, ich; - Picture icon; - Client *next; - Client *snext; - Monitor *mon; - Window win; + char name[256]; + float mina, maxa; + int x, y, w, h; + int oldx, oldy, oldw, oldh; + int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid; + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isglobal, isurgent, neverfocus, oldstate, isfullscreen; + unsigned int icw, ich; + Picture icon; + Client *next; + Client *snext; + Monitor *mon; + Window win; }; struct Key { - unsigned int mod; - KeySym keysym; - void (*func)(const Arg *); - const Arg arg; + unsigned int mod; + KeySym keysym; + void (*func)(const Arg *); + const Arg arg; }; struct Layout { - const char *symbol; - void (*arrange)(Monitor *); + const char *symbol; + void (*arrange)(Monitor *); }; struct Monitor { - char ltsymbol[16]; - float mfact; - int nmaster; - int num; - int by; /* bar geometry */ - int mx, my, mw, mh; /* screen size */ - int wx, wy, ww, wh; /* window area */ - int pvx, pvs; /* tags & title size */ - unsigned int seltags; - unsigned int sellt; - unsigned int tagset[2]; - int showbar; - int topbar; - Client *clients; - Client *sel; - Client *stack; - Monitor *next; - Window barwins[3]; - const Layout *lt[2]; - Pertag *pertag; + char ltsymbol[16]; + float mfact; + int nmaster; + int num; + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + int pvx, pvs; /* tags & title size */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; + int showbar; + int topbar; + Client *clients; + Client *sel; + Client *stack; + Monitor *next; + Window barwins[3]; + const Layout *lt[2]; + Pertag *pertag; }; struct Rule { - const char *class; - const char *instance; - const char *title; - unsigned int tags; - int isfloating; - int isglobal; - int monitor; - int unmanaged; + const char *class; + const char *instance; + const char *title; + unsigned int tags; + int isfloating; + int isglobal; + int monitor; + int unmanaged; }; struct Pertag { - unsigned int curtag; - int nmasters[MAXTAGS]; - unsigned int sellts[MAXTAGS]; - const Layout *ltidxs[MAXTAGS][2]; + unsigned int curtag; + int nmasters[MAXTAGS]; + unsigned int sellts[MAXTAGS]; + const Layout *ltidxs[MAXTAGS][2]; }; void applyrules(Client *c); @@ -138,6 +140,7 @@ void arrange(Monitor *m); void arrangemon(Monitor *m); void attach(Client *c); void attachstack(Client *c); +void autostart(void); void buttonpress(XEvent *e); void checkotherwm(void); void cleanup(void); @@ -154,6 +157,7 @@ void detachstack(Client *c); Monitor *dirtomon(int dir); void drawbar(Monitor *m); void drawbars(void); +int drawstatusbar(Monitor *m); void enternotify(XEvent *e); void expose(XEvent *e); void focus(Client *c); @@ -187,7 +191,6 @@ void resizeclient(Client *c, int x, int y, int w, int h); void resizemouse(const Arg *arg); void restack(Monitor *m); void run(void); -void runAutostart(void); void scan(void); int sendevent(Client *c, Atom proto); void sendmon(Client *c, Monitor *m); @@ -233,7 +236,13 @@ int xerrorstart(Display *dpy, XErrorEvent *ee); void zoom(const Arg *arg); const char broken[] = "broken"; -char stext[256]; +char stext[1024]; +char *btnstr[6] = { + [Button1] = "L", /* left mouse button */ + [Button2] = "M", /* middle mouse button */ + [Button3] = "R", /* right mouse button */ + [Button4] = "U", /* mouse wheel up */ + [Button5] = "D"}; /* mouse wheel down */ int screen; int sw, sh; /* X display screen geometry width, height */ int bh; /* bar height */ @@ -242,20 +251,20 @@ int lrpad; /* sum of left and right padding for text */ int (*xerrorxlib)(Display *, XErrorEvent *); unsigned int numlockmask = 0; void (*handler[LASTEvent])(XEvent *) = { - [ButtonPress] = buttonpress, - [ClientMessage] = clientmessage, - [ConfigureRequest] = configurerequest, - [ConfigureNotify] = configurenotify, - [DestroyNotify] = destroynotify, - [EnterNotify] = enternotify, - [Expose] = expose, - [FocusIn] = focusin, - [KeyPress] = keypress, - [MappingNotify] = mappingnotify, - [MapRequest] = maprequest, - [MotionNotify] = motionnotify, - [PropertyNotify] = propertynotify, - [UnmapNotify] = unmapnotify }; + [ButtonPress] = buttonpress, + [ClientMessage] = clientmessage, + [ConfigureRequest] = configurerequest, + [ConfigureNotify] = configurenotify, + [DestroyNotify] = destroynotify, + [EnterNotify] = enternotify, + [Expose] = expose, + [FocusIn] = focusin, + [KeyPress] = keypress, + [MappingNotify] = mappingnotify, + [MapRequest] = maprequest, + [MotionNotify] = motionnotify, + [PropertyNotify] = propertynotify, + [UnmapNotify] = unmapnotify}; Atom wmatom[WMLast], netatom[NetLast]; int running = 1; Cur *cursor[CurLast]; diff --git a/icons/dwmStatus/audio-speaker.svg b/icons/dwmStatus/audio-speaker.svg new file mode 100644 index 0000000..26ba440 --- /dev/null +++ b/icons/dwmStatus/audio-speaker.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/dwmStatus/battery-empty-charging.svg b/icons/dwmStatus/battery-empty-charging.svg new file mode 100644 index 0000000..c12469e --- /dev/null +++ b/icons/dwmStatus/battery-empty-charging.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-empty.svg b/icons/dwmStatus/battery-empty.svg new file mode 100644 index 0000000..04c3fc7 --- /dev/null +++ b/icons/dwmStatus/battery-empty.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-full-charging.svg b/icons/dwmStatus/battery-full-charging.svg new file mode 100644 index 0000000..6538e09 --- /dev/null +++ b/icons/dwmStatus/battery-full-charging.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-full.svg b/icons/dwmStatus/battery-full.svg new file mode 100644 index 0000000..57e5d69 --- /dev/null +++ b/icons/dwmStatus/battery-full.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/icons/dwmStatus/battery-good-charging.svg b/icons/dwmStatus/battery-good-charging.svg new file mode 100644 index 0000000..55a5c0a --- /dev/null +++ b/icons/dwmStatus/battery-good-charging.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-good.svg b/icons/dwmStatus/battery-good.svg new file mode 100644 index 0000000..18c5a55 --- /dev/null +++ b/icons/dwmStatus/battery-good.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-low-charging.svg b/icons/dwmStatus/battery-low-charging.svg new file mode 100644 index 0000000..169854e --- /dev/null +++ b/icons/dwmStatus/battery-low-charging.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/battery-low.svg b/icons/dwmStatus/battery-low.svg new file mode 100644 index 0000000..8fe8dbe --- /dev/null +++ b/icons/dwmStatus/battery-low.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/icons/dwmStatus/brightness.svg b/icons/dwmStatus/brightness.svg new file mode 100644 index 0000000..2dd4e56 --- /dev/null +++ b/icons/dwmStatus/brightness.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/icons/dwmStatus/calendar.svg b/icons/dwmStatus/calendar.svg new file mode 100644 index 0000000..816b198 --- /dev/null +++ b/icons/dwmStatus/calendar.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/cpu.svg b/icons/dwmStatus/cpu.svg new file mode 100644 index 0000000..0fea0dd --- /dev/null +++ b/icons/dwmStatus/cpu.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/dotmemory.svg b/icons/dwmStatus/dotmemory.svg new file mode 100644 index 0000000..d4554ec --- /dev/null +++ b/icons/dwmStatus/dotmemory.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/icons/dwmStatus/wifi-radar.svg b/icons/dwmStatus/wifi-radar.svg new file mode 100644 index 0000000..270525d --- /dev/null +++ b/icons/dwmStatus/wifi-radar.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/drw.c b/src/drw.c index 1528d88..bef5e2d 100644 --- a/src/drw.c +++ b/src/drw.c @@ -18,410 +18,410 @@ static const long utfmin[UTF_SIZ + 1] = {0, 0, 0x80, 0x800, 0x10000}; static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF}; static long utf8decodebyte(const char c, size_t *i) { - for (*i = 0; *i < (UTF_SIZ + 1); ++(*i)) - if (((unsigned char)c & utfmask[*i]) == utfbyte[*i]) return (unsigned char)c & ~utfmask[*i]; - return 0; + for (*i = 0; *i < (UTF_SIZ + 1); ++(*i)) + if (((unsigned char)c & utfmask[*i]) == utfbyte[*i]) return (unsigned char)c & ~utfmask[*i]; + return 0; } static size_t utf8validate(long *u, size_t i) { - if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF)) *u = UTF_INVALID; - for (i = 1; *u > utfmax[i]; ++i); - return i; + if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF)) *u = UTF_INVALID; + for (i = 1; *u > utfmax[i]; ++i); + return i; } static size_t utf8decode(const char *c, long *u, size_t clen) { - size_t i, j, len, type; - long udecoded; - - *u = UTF_INVALID; - if (!clen) return 0; - udecoded = utf8decodebyte(c[0], &len); - if (!BETWEEN(len, 1, UTF_SIZ)) return 1; - for (i = 1, j = 1; i < clen && j < len; ++i, ++j) { - udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type); - if (type) return j; - } - if (j < len) return 0; - *u = udecoded; - utf8validate(u, len); - - return len; + size_t i, j, len, type; + long udecoded; + + *u = UTF_INVALID; + if (!clen) return 0; + udecoded = utf8decodebyte(c[0], &len); + if (!BETWEEN(len, 1, UTF_SIZ)) return 1; + for (i = 1, j = 1; i < clen && j < len; ++i, ++j) { + udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type); + if (type) return j; + } + if (j < len) return 0; + *u = udecoded; + utf8validate(u, len); + + return len; } Drw *drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) { - Drw *drw = ecalloc(1, sizeof(Drw)); - - drw->dpy = dpy; - drw->screen = screen; - drw->root = root; - drw->w = w; - drw->h = h; - drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); - drw->picture = XRenderCreatePicture(dpy, drw->drawable, XRenderFindVisualFormat(dpy, DefaultVisual(dpy, screen)), 0, NULL); - drw->gc = XCreateGC(dpy, root, 0, NULL); - XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); - - return drw; + Drw *drw = ecalloc(1, sizeof(Drw)); + + drw->dpy = dpy; + drw->screen = screen; + drw->root = root; + drw->w = w; + drw->h = h; + drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); + drw->picture = XRenderCreatePicture(dpy, drw->drawable, XRenderFindVisualFormat(dpy, DefaultVisual(dpy, screen)), 0, NULL); + drw->gc = XCreateGC(dpy, root, 0, NULL); + XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); + + return drw; } void drw_resize(Drw *drw, unsigned int w, unsigned int h) { - if (!drw) return; - - drw->w = w; - drw->h = h; - if (drw->picture) XRenderFreePicture(drw->dpy, drw->picture); - if (drw->drawable) XFreePixmap(drw->dpy, drw->drawable); - drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); - drw->picture = XRenderCreatePicture(drw->dpy, drw->drawable, XRenderFindVisualFormat(drw->dpy, DefaultVisual(drw->dpy, drw->screen)), 0, NULL); + if (!drw) return; + + drw->w = w; + drw->h = h; + if (drw->picture) XRenderFreePicture(drw->dpy, drw->picture); + if (drw->drawable) XFreePixmap(drw->dpy, drw->drawable); + drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); + drw->picture = XRenderCreatePicture(drw->dpy, drw->drawable, XRenderFindVisualFormat(drw->dpy, DefaultVisual(drw->dpy, drw->screen)), 0, NULL); } void drw_free(Drw *drw) { - XRenderFreePicture(drw->dpy, drw->picture); - XFreePixmap(drw->dpy, drw->drawable); - XFreeGC(drw->dpy, drw->gc); - drw_fontset_free(drw->fonts); - free(drw); + XRenderFreePicture(drw->dpy, drw->picture); + XFreePixmap(drw->dpy, drw->drawable); + XFreeGC(drw->dpy, drw->gc); + drw_fontset_free(drw->fonts); + free(drw); } /* This function is an implementation detail. Library users should use * drw_fontset_create instead. */ static Fnt *xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) { - Fnt *font; - XftFont *xfont = NULL; - FcPattern *pattern = NULL; + Fnt *font; + XftFont *xfont = NULL; + FcPattern *pattern = NULL; - if (fontname) { - /* Using the pattern found at font->xfont->pattern does not yield the + if (fontname) { + /* Using the pattern found at font->xfont->pattern does not yield the * same substitution results as using the pattern returned by * FcNameParse; using the latter results in the desired fallback * behaviour whereas the former just results in missing-character * rectangles being drawn, at least with some fonts. */ - if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) { - fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname); - return NULL; - } - if (!(pattern = FcNameParse((FcChar8 *)fontname))) { - fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname); - XftFontClose(drw->dpy, xfont); - return NULL; - } - } else if (fontpattern) { - if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) { - fprintf(stderr, "error, cannot load font from pattern.\n"); - return NULL; - } - } else { - die("no font specified."); - } - - font = ecalloc(1, sizeof(Fnt)); - font->xfont = xfont; - font->pattern = pattern; - font->h = xfont->ascent + xfont->descent; - font->dpy = drw->dpy; - - return font; + if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) { + fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname); + return NULL; + } + if (!(pattern = FcNameParse((FcChar8 *)fontname))) { + fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname); + XftFontClose(drw->dpy, xfont); + return NULL; + } + } else if (fontpattern) { + if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) { + fprintf(stderr, "error, cannot load font from pattern.\n"); + return NULL; + } + } else { + die("no font specified."); + } + + font = ecalloc(1, sizeof(Fnt)); + font->xfont = xfont; + font->pattern = pattern; + font->h = xfont->ascent + xfont->descent; + font->dpy = drw->dpy; + + return font; } static void xfont_free(Fnt *font) { - if (!font) return; - if (font->pattern) FcPatternDestroy(font->pattern); - XftFontClose(font->dpy, font->xfont); - free(font); + if (!font) return; + if (font->pattern) FcPatternDestroy(font->pattern); + XftFontClose(font->dpy, font->xfont); + free(font); } Fnt *drw_fontset_create(Drw *drw, const char *fonts[], size_t fontcount) { - Fnt *cur, *ret = NULL; - size_t i; - - if (!drw || !fonts) return NULL; - - for (i = 1; i <= fontcount; i++) { - if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) { - cur->next = ret; - ret = cur; - } - } - return (drw->fonts = ret); + Fnt *cur, *ret = NULL; + size_t i; + + if (!drw || !fonts) return NULL; + + for (i = 1; i <= fontcount; i++) { + if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) { + cur->next = ret; + ret = cur; + } + } + return (drw->fonts = ret); } void drw_fontset_free(Fnt *font) { - if (font) { - drw_fontset_free(font->next); - xfont_free(font); - } + if (font) { + drw_fontset_free(font->next); + xfont_free(font); + } } void drw_clr_create(Drw *drw, Clr *dest, const char *clrname) { - if (!drw || !dest || !clrname) return; + if (!drw || !dest || !clrname) return; - if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen), clrname, dest)) die("error, cannot allocate color '%s'", clrname); + if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen), clrname, dest)) die("error, cannot allocate color '%s'", clrname); } /* Wrapper to create color schemes. The caller has to call free(3) on the * returned color scheme when done using it. */ Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) { - size_t i; - Clr *ret; + size_t i; + Clr *ret; - /* need at least two colors for a scheme */ - if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) return NULL; + /* need at least two colors for a scheme */ + if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) return NULL; - for (i = 0; i < clrcount; i++) drw_clr_create(drw, &ret[i], clrnames[i]); - return ret; + for (i = 0; i < clrcount; i++) drw_clr_create(drw, &ret[i], clrnames[i]); + return ret; } void drw_setfontset(Drw *drw, Fnt *set) { - if (drw) drw->fonts = set; + if (drw) drw->fonts = set; } void drw_setscheme(Drw *drw, Clr *scm) { - if (drw) drw->scheme = scm; + if (drw) drw->scheme = scm; } Picture drw_picture_create_resized(Drw *drw, char *src, unsigned int sw, unsigned int sh, unsigned int dw, unsigned int dh) { - Picture pic; - Pixmap pm; - GC gc; - if (sw <= (dw << 1u) && sh <= (dh << 1u)) { - XImage img = {sw, sh, 0, ZPixmap, src, ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32, 32, 0, 32, 0, 0, 0}; - XInitImage(&img); - pm = XCreatePixmap(drw->dpy, drw->root, sw, sh, 32); - gc = XCreateGC(drw->dpy, pm, 0, NULL); - XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, sw, sh); - pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL); - XRenderSetPictureFilter(drw->dpy, pic, FilterBilinear, NULL, 0); - XTransform xf; - xf.matrix[0][0] = (sw << 16u) / dw; - xf.matrix[0][1] = 0; - xf.matrix[0][2] = 0; - xf.matrix[1][0] = 0; - xf.matrix[1][1] = (sh << 16u) / dh; - xf.matrix[1][2] = 0; - xf.matrix[2][0] = 0; - xf.matrix[2][1] = 0; - xf.matrix[2][2] = 65536; - XRenderSetPictureTransform(drw->dpy, pic, &xf); - } else { - Imlib_Image origin = imlib_create_image_using_data(sw, sh, (DATA32 *)src); - if (!origin) return None; - imlib_context_set_image(origin); - imlib_image_set_has_alpha(1); - Imlib_Image scaled = imlib_create_cropped_scaled_image(0, 0, sw, sh, dw, dh); - imlib_free_image_and_decache(); - if (!scaled) return None; - imlib_context_set_image(scaled); - imlib_image_set_has_alpha(1); - XImage img = {dw, dh, 0, ZPixmap, (char *)imlib_image_get_data_for_reading_only(), ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32, 32, 0, 32, 0, 0, 0}; - XInitImage(&img); - pm = XCreatePixmap(drw->dpy, drw->root, dw, dh, 32); - gc = XCreateGC(drw->dpy, pm, 0, NULL); - XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, dw, dh); - imlib_free_image_and_decache(); - pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL); - } - XFreePixmap(drw->dpy, pm); - XFreeGC(drw->dpy, gc); - return pic; + Picture pic; + Pixmap pm; + GC gc; + if (sw <= (dw << 1u) && sh <= (dh << 1u)) { + XImage img = {sw, sh, 0, ZPixmap, src, ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32, 32, 0, 32, 0, 0, 0}; + XInitImage(&img); + pm = XCreatePixmap(drw->dpy, drw->root, sw, sh, 32); + gc = XCreateGC(drw->dpy, pm, 0, NULL); + XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, sw, sh); + pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL); + XRenderSetPictureFilter(drw->dpy, pic, FilterBilinear, NULL, 0); + XTransform xf; + xf.matrix[0][0] = (sw << 16u) / dw; + xf.matrix[0][1] = 0; + xf.matrix[0][2] = 0; + xf.matrix[1][0] = 0; + xf.matrix[1][1] = (sh << 16u) / dh; + xf.matrix[1][2] = 0; + xf.matrix[2][0] = 0; + xf.matrix[2][1] = 0; + xf.matrix[2][2] = 65536; + XRenderSetPictureTransform(drw->dpy, pic, &xf); + } else { + Imlib_Image origin = imlib_create_image_using_data(sw, sh, (DATA32 *)src); + if (!origin) return None; + imlib_context_set_image(origin); + imlib_image_set_has_alpha(1); + Imlib_Image scaled = imlib_create_cropped_scaled_image(0, 0, sw, sh, dw, dh); + imlib_free_image_and_decache(); + if (!scaled) return None; + imlib_context_set_image(scaled); + imlib_image_set_has_alpha(1); + XImage img = {dw, dh, 0, ZPixmap, (char *)imlib_image_get_data_for_reading_only(), ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32, 32, 0, 32, 0, 0, 0}; + XInitImage(&img); + pm = XCreatePixmap(drw->dpy, drw->root, dw, dh, 32); + gc = XCreateGC(drw->dpy, pm, 0, NULL); + XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, dw, dh); + imlib_free_image_and_decache(); + pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL); + } + XFreePixmap(drw->dpy, pm); + XFreeGC(drw->dpy, gc); + return pic; } void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) { - if (!drw || !drw->scheme) return; - XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); - if (filled) - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); - else - XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); + if (!drw || !drw->scheme) return; + XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); + if (filled) + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + else + XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); } int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert) { - int i, ty, ellipsis_x = 0; - unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len; - XftDraw *d = NULL; - Fnt *usedfont, *curfont, *nextfont; - int utf8strlen, utf8charlen, render = x || y || w || h; - long utf8codepoint = 0; - const char *utf8str; - FcCharSet *fccharset; - FcPattern *fcpattern; - FcPattern *match; - XftResult result; - int charexists = 0, overflow = 0; - /* keep track of a couple codepoints for which we have no match. */ - enum { nomatches_len = 64 }; - static struct { - long codepoint[nomatches_len]; - unsigned int idx; - } nomatches; - static unsigned int ellipsis_width = 0; - - if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts) return 0; - - if (!render) { - w = invert ? invert : ~invert; - } else { - XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); - d = XftDrawCreate(drw->dpy, drw->drawable, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen)); - x += lpad; - w -= lpad; - } - - usedfont = drw->fonts; - if (!ellipsis_width && render) ellipsis_width = drw_fontset_getwidth(drw, "..."); - while (1) { - ew = ellipsis_len = utf8strlen = 0; - utf8str = text; - nextfont = NULL; - while (*text) { - utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ); - for (curfont = drw->fonts; curfont; curfont = curfont->next) { - charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint); - if (charexists) { - drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL); - if (ew + ellipsis_width <= w) { - /* keep track where the ellipsis still fits */ - ellipsis_x = x + ew; - ellipsis_w = w - ew; - ellipsis_len = utf8strlen; - } - - if (ew + tmpw > w) { - overflow = 1; - /* called from drw_fontset_getwidth_clamp(): + int i, ty, ellipsis_x = 0; + unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len; + XftDraw *d = NULL; + Fnt *usedfont, *curfont, *nextfont; + int utf8strlen, utf8charlen, render = x || y || w || h; + long utf8codepoint = 0; + const char *utf8str; + FcCharSet *fccharset; + FcPattern *fcpattern; + FcPattern *match; + XftResult result; + int charexists = 0, overflow = 0; + /* keep track of a couple codepoints for which we have no match. */ + enum { nomatches_len = 64 }; + static struct { + long codepoint[nomatches_len]; + unsigned int idx; + } nomatches; + static unsigned int ellipsis_width = 0; + + if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts) return 0; + + if (!render) { + w = invert ? invert : ~invert; + } else { + XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + d = XftDrawCreate(drw->dpy, drw->drawable, DefaultVisual(drw->dpy, drw->screen), DefaultColormap(drw->dpy, drw->screen)); + x += lpad; + w -= lpad; + } + + usedfont = drw->fonts; + if (!ellipsis_width && render) ellipsis_width = drw_fontset_getwidth(drw, "..."); + while (1) { + ew = ellipsis_len = utf8strlen = 0; + utf8str = text; + nextfont = NULL; + while (*text) { + utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ); + for (curfont = drw->fonts; curfont; curfont = curfont->next) { + charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint); + if (charexists) { + drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL); + if (ew + ellipsis_width <= w) { + /* keep track where the ellipsis still fits */ + ellipsis_x = x + ew; + ellipsis_w = w - ew; + ellipsis_len = utf8strlen; + } + + if (ew + tmpw > w) { + overflow = 1; + /* called from drw_fontset_getwidth_clamp(): * it wants the width AFTER the overflow */ - if (!render) - x += tmpw; - else - utf8strlen = ellipsis_len; - } else if (curfont == usedfont) { - utf8strlen += utf8charlen; - text += utf8charlen; - ew += tmpw; - } else { - nextfont = curfont; - } - break; - } - } - - if (overflow || !charexists || nextfont) - break; - else - charexists = 0; - } - - if (utf8strlen) { - if (render) { - ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; - XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen); - } - x += ew; - w -= ew; - } - if (render && overflow) drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert); - - if (!*text || overflow) { - break; - } else if (nextfont) { - charexists = 0; - usedfont = nextfont; - } else { - /* Regardless of whether or not a fallback font is found, the + if (!render) + x += tmpw; + else + utf8strlen = ellipsis_len; + } else if (curfont == usedfont) { + utf8strlen += utf8charlen; + text += utf8charlen; + ew += tmpw; + } else { + nextfont = curfont; + } + break; + } + } + + if (overflow || !charexists || nextfont) + break; + else + charexists = 0; + } + + if (utf8strlen) { + if (render) { + ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; + XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen); + } + x += ew; + w -= ew; + } + if (render && overflow) drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert); + + if (!*text || overflow) { + break; + } else if (nextfont) { + charexists = 0; + usedfont = nextfont; + } else { + /* Regardless of whether or not a fallback font is found, the * character must be drawn. */ - charexists = 1; - - for (i = 0; i < nomatches_len; ++i) { - /* avoid calling XftFontMatch if we know we won't find a match */ - if (utf8codepoint == nomatches.codepoint[i]) goto no_match; - } - - fccharset = FcCharSetCreate(); - FcCharSetAddChar(fccharset, utf8codepoint); - - if (!drw->fonts->pattern) { - /* Refer to the comment in xfont_create for more information. */ - die("the first font in the cache must be loaded from a font string."); - } - - fcpattern = FcPatternDuplicate(drw->fonts->pattern); - FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); - FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); - - FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); - FcDefaultSubstitute(fcpattern); - match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result); - - FcCharSetDestroy(fccharset); - FcPatternDestroy(fcpattern); - - if (match) { - usedfont = xfont_create(drw, NULL, match); - if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) { - for (curfont = drw->fonts; curfont->next; curfont = curfont->next); /* NOP */ - curfont->next = usedfont; - } else { - xfont_free(usedfont); - nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint; - no_match: - usedfont = drw->fonts; - } - } - } - } - if (d) XftDrawDestroy(d); - - return x + (render ? w : 0); + charexists = 1; + + for (i = 0; i < nomatches_len; ++i) { + /* avoid calling XftFontMatch if we know we won't find a match */ + if (utf8codepoint == nomatches.codepoint[i]) goto no_match; + } + + fccharset = FcCharSetCreate(); + FcCharSetAddChar(fccharset, utf8codepoint); + + if (!drw->fonts->pattern) { + /* Refer to the comment in xfont_create for more information. */ + die("the first font in the cache must be loaded from a font string."); + } + + fcpattern = FcPatternDuplicate(drw->fonts->pattern); + FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); + FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); + + FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); + FcDefaultSubstitute(fcpattern); + match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result); + + FcCharSetDestroy(fccharset); + FcPatternDestroy(fcpattern); + + if (match) { + usedfont = xfont_create(drw, NULL, match); + if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) { + for (curfont = drw->fonts; curfont->next; curfont = curfont->next); /* NOP */ + curfont->next = usedfont; + } else { + xfont_free(usedfont); + nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint; + no_match: + usedfont = drw->fonts; + } + } + } + } + if (d) XftDrawDestroy(d); + + return x + (render ? w : 0); } void drw_pic(Drw *drw, int x, int y, unsigned int w, unsigned int h, Picture pic) { - if (!drw) return; - XRenderComposite(drw->dpy, PictOpOver, pic, None, drw->picture, 0, 0, 0, 0, x, y, w, h); + if (!drw) return; + XRenderComposite(drw->dpy, PictOpOver, pic, None, drw->picture, 0, 0, 0, 0, x, y, w, h); } void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) { - if (!drw) return; + if (!drw) return; - XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, 0, 0); - XSync(drw->dpy, False); + XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, 0, 0); + XSync(drw->dpy, False); } unsigned int drw_fontset_getwidth(Drw *drw, const char *text) { - if (!drw || !drw->fonts || !text) return 0; - return drw_text(drw, 0, 0, 0, 0, 0, text, 0); + if (!drw || !drw->fonts || !text) return 0; + return drw_text(drw, 0, 0, 0, 0, 0, text, 0); } unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n) { - unsigned int tmp = 0; - if (drw && drw->fonts && text && n) tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n); - return MIN(n, tmp); + unsigned int tmp = 0; + if (drw && drw->fonts && text && n) tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n); + return MIN(n, tmp); } void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) { - XGlyphInfo ext; + XGlyphInfo ext; - if (!font || !text) return; + if (!font || !text) return; - XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext); - if (w) *w = ext.xOff; - if (h) *h = font->h; + XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext); + if (w) *w = ext.xOff; + if (h) *h = font->h; } Cur *drw_cur_create(Drw *drw, int shape) { - Cur *cur; + Cur *cur; - if (!drw || !(cur = ecalloc(1, sizeof(Cur)))) return NULL; + if (!drw || !(cur = ecalloc(1, sizeof(Cur)))) return NULL; - cur->cursor = XCreateFontCursor(drw->dpy, shape); + cur->cursor = XCreateFontCursor(drw->dpy, shape); - return cur; + return cur; } void drw_cur_free(Drw *drw, Cur *cursor) { - if (!cursor) return; + if (!cursor) return; - XFreeCursor(drw->dpy, cursor->cursor); - free(cursor); + XFreeCursor(drw->dpy, cursor->cursor); + free(cursor); } diff --git a/src/drw.h b/src/drw.h index b9914bf..f1f70d5 100644 --- a/src/drw.h +++ b/src/drw.h @@ -6,30 +6,30 @@ #include typedef struct { - Cursor cursor; + Cursor cursor; } Cur; typedef struct Fnt { - Display *dpy; - unsigned int h; - XftFont *xfont; - FcPattern *pattern; - struct Fnt *next; + Display *dpy; + unsigned int h; + XftFont *xfont; + FcPattern *pattern; + struct Fnt *next; } Fnt; enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ typedef XftColor Clr; typedef struct { - unsigned int w, h; - Display *dpy; - int screen; - Window root; - Drawable drawable; - Picture picture; - GC gc; - Clr *scheme; - Fnt *fonts; + unsigned int w, h; + Display *dpy; + int screen; + Window root; + Drawable drawable; + Picture picture; + GC gc; + Clr *scheme; + Fnt *fonts; } Drw; /* Drawable abstraction */ diff --git a/src/dwm.1 b/src/dwm.1 deleted file mode 100644 index ddc8321..0000000 --- a/src/dwm.1 +++ /dev/null @@ -1,176 +0,0 @@ -.TH DWM 1 dwm\-VERSION -.SH NAME -dwm \- dynamic window manager -.SH SYNOPSIS -.B dwm -.RB [ \-v ] -.SH DESCRIPTION -dwm is a dynamic window manager for X. It manages windows in tiled, monocle -and floating layouts. Either layout can be applied dynamically, optimising the -environment for the application in use and the task performed. -.P -In tiled layouts windows are managed in a master and stacking area. The master -area on the left contains one window by default, and the stacking area on the -right contains all other windows. The number of master area windows can be -adjusted from zero to an arbitrary number. In monocle layout all windows are -maximised to the screen size. In floating layout windows can be resized and -moved freely. Dialog windows are always managed floating, regardless of the -layout applied. -.P -Windows are grouped by tags. Each window can be tagged with one or multiple -tags. Selecting certain tags displays all windows with these tags. -.P -Each screen contains a small status bar which displays all available tags, the -layout, the title of the focused window, and the text read from the root window -name property, if the screen is focused. A floating window is indicated with an -empty square and a maximised floating window is indicated with a filled square -before the windows title. The selected tags are indicated with a different -color. The tags of the focused window are indicated with a filled square in the -top left corner. The tags which are applied to one or more windows are -indicated with an empty square in the top left corner. -.P -dwm draws a small border around windows to indicate the focus state. -.SH OPTIONS -.TP -.B \-v -prints version information to stderr, then exits. -.SH USAGE -.SS Status bar -.TP -.B X root window name -is read and displayed in the status text area. It can be set with the -.BR xsetroot (1) -command. -.TP -.B Button1 -click on a tag label to display all windows with that tag, click on the layout -label toggles between tiled and floating layout. -.TP -.B Button3 -click on a tag label adds/removes all windows with that tag to/from the view. -.TP -.B Mod1\-Button1 -click on a tag label applies that tag to the focused window. -.TP -.B Mod1\-Button3 -click on a tag label adds/removes that tag to/from the focused window. -.SS Keyboard commands -.TP -.B Mod1\-Shift\-Return -Start -.BR st(1). -.TP -.B Mod1\-p -Spawn -.BR dmenu(1) -for launching other programs. -.TP -.B Mod1\-, -Focus previous screen, if any. -.TP -.B Mod1\-. -Focus next screen, if any. -.TP -.B Mod1\-Shift\-, -Send focused window to previous screen, if any. -.TP -.B Mod1\-Shift\-. -Send focused window to next screen, if any. -.TP -.B Mod1\-b -Toggles bar on and off. -.TP -.B Mod1\-t -Sets tiled layout. -.TP -.B Mod1\-f -Sets floating layout. -.TP -.B Mod1\-m -Sets monocle layout. -.TP -.B Mod1\-space -Toggles between current and previous layout. -.TP -.B Mod1\-j -Focus next window. -.TP -.B Mod1\-k -Focus previous window. -.TP -.B Mod1\-i -Increase number of windows in master area. -.TP -.B Mod1\-d -Decrease number of windows in master area. -.TP -.B Mod1\-l -Increase master area size. -.TP -.B Mod1\-h -Decrease master area size. -.TP -.B Mod1\-Return -Zooms/cycles focused window to/from master area (tiled layouts only). -.TP -.B Mod1\-Shift\-c -Close focused window. -.TP -.B Mod1\-Shift\-space -Toggle focused window between tiled and floating state. -.TP -.B Mod1\-Tab -Toggles to the previously selected tags. -.TP -.B Mod1\-Shift\-[1..n] -Apply nth tag to focused window. -.TP -.B Mod1\-Shift\-0 -Apply all tags to focused window. -.TP -.B Mod1\-Control\-Shift\-[1..n] -Add/remove nth tag to/from focused window. -.TP -.B Mod1\-[1..n] -View all windows with nth tag. -.TP -.B Mod1\-0 -View all windows with any tag. -.TP -.B Mod1\-Control\-[1..n] -Add/remove all windows with nth tag to/from the view. -.TP -.B Mod1\-Shift\-q -Quit dwm. -.SS Mouse commands -.TP -.B Mod1\-Button1 -Move focused window while dragging. Tiled windows will be toggled to the floating state. -.TP -.B Mod1\-Button2 -Toggles focused window between floating and tiled state. -.TP -.B Mod1\-Button3 -Resize focused window while dragging. Tiled windows will be toggled to the floating state. -.SH CUSTOMIZATION -dwm is customized by creating a custom config.h and (re)compiling the source -code. This keeps it fast, secure and simple. -.SH SEE ALSO -.BR dmenu (1), -.BR st (1) -.SH ISSUES -Java applications which use the XToolkit/XAWT backend may draw grey windows -only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early -JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds -are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the -environment variable -.BR AWT_TOOLKIT=MToolkit -(to use the older Motif backend instead) or running -.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D -or -.B wmname LG3D -(to pretend that a non-reparenting window manager is running that the -XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable -.BR _JAVA_AWT_WM_NONREPARENTING=1 . -.SH BUGS -Send all bug reports with a patch to hackers@suckless.org. diff --git a/src/icon.c b/src/icon.c new file mode 100644 index 0000000..fa15acf --- /dev/null +++ b/src/icon.c @@ -0,0 +1,1392 @@ +#include "icon.h" + +#include + +#define W 56 +#define H 56 + +static const int width = W; +static const int height = H; +static int idx = 0; + +static const uint32_t icon0[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2B2B29, 0xFF2D2D2B, 0xFF30302E, 0xFF31312F, 0xFF31312F, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF020106, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF020106, 0xFF06050A, 0xFF07060B, 0xFF040308, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF282633, 0xFF262431, 0xFF282633, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF272437, 0xFF292639, + 0xFF292639, 0xFF252235, 0xFF242134, 0xFF292639, 0xFF2F2C3F, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF272437, 0xFF262336, + 0xFF272437, 0xFF282538, 0xFF282538, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF232031, + 0xFF232031, 0xFF272435, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF272435, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF282536, 0xFF2C293A, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF252233, 0xFF272435, + 0xFF292637, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF484846, 0xFF010006, 0xFF252331, 0xFF282538, 0xFF242132, 0xFF272533, 0xFF242230, 0xFF262334, 0xFF282629, 0xFF2B2241, + 0xFF141833, 0xFF262535, 0xFF272936, 0xFF231F36, 0xFF2C2048, 0xFF292234, 0xFF232730, 0xFF313340, 0xFF2C2C38, 0xFF2D2D35, 0xFF2B2D3C, 0xFF2D2D47, 0xFF2D283F, 0xFF342C39, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3B3B39, 0xFF000005, 0xFF262432, 0xFF272437, 0xFF252233, 0xFF272533, 0xFF252331, 0xFF2A2738, 0xFF2E263E, 0xFF2E2C3A, + 0xFF3C7644, 0xFF2F4D43, 0xFF261E2D, 0xFF353338, 0xFF20242F, 0xFF252229, 0xFF25213C, 0xFF2C2642, 0xFF302840, 0xFF2F2B3A, 0xFF2B2936, 0xFF32313F, 0xFF2D2A3D, 0xFF2D283C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2D2D2B, 0xFF000005, 0xFF272533, 0xFF272437, 0xFF262334, 0xFF272533, 0xFF252331, 0xFF2C293A, 0xFF1D2033, 0xFF3F7B48, + 0xFF80F88C, 0xFF64F86C, 0xFF5C4D3A, 0xFF292438, 0xFF31313B, 0xFF242831, 0xFF2D253C, 0xFF2B233A, 0xFF332942, 0xFF342A42, 0xFF2B2533, 0xFF302D36, 0xFF2D2D39, 0xFF2E2C41, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF262624, 0xFF000005, 0xFF282634, 0xFF262336, 0xFF272435, 0xFF272533, 0xFF242230, 0xFF2B2839, 0xFF282530, 0xFF3B5A4B, + 0xFF5FF464, 0xFF53FF57, 0xFF76F87A, 0xFF3D5F47, 0xFF2A2430, 0xFF272B34, 0xFF26252A, 0xFF242328, 0xFF2A2732, 0xFF332B40, 0xFF332941, 0xFF302939, 0xFF2C2A35, 0xFF292B38, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF232321, 0xFF010006, 0xFF272533, 0xFF242134, 0xFF272435, 0xFF272533, 0xFF242230, 0xFF292637, 0xFF343434, 0xFF3A2E3A, + 0xFF406C4B, 0xFF6BF56C, 0xFF63FF67, 0xFF6BF675, 0xFF325F42, 0xFF2D2638, 0xFF292B38, 0xFF2A2E37, 0xFF232730, 0xFF2A2A36, 0xFF322A3F, 0xFF2E243D, 0xFF2E293D, 0xFF2A2937, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF222220, 0xFF010006, 0xFF252331, 0xFF242134, 0xFF282536, 0xFF272533, 0xFF262432, 0xFF282536, 0xFF302F2D, 0xFF3B382F, + 0xFF423B42, 0xFF417147, 0xFF67F86D, 0xFF66FE75, 0xFF6FF57A, 0xFF2A5F31, 0xFF2C2439, 0xFF292641, 0xFF252A40, 0xFF272B34, 0xFF2D2A35, 0xFF2B213A, 0xFF312845, 0xFF2C2A3F, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF21211F, 0xFF000005, 0xFF252331, 0xFF262336, 0xFF272435, 0xFF262432, 0xFF272533, 0xFF272435, 0xFF2E243C, 0xFF303435, + 0xFF433F40, 0xFF2F5035, 0xFF467B51, 0xFF66F370, 0xFF6AFB72, 0xFF6EF56B, 0xFF35653D, 0xFF30242E, 0xFF292546, 0xFF2A2E3A, 0xFF2E2E30, 0xFF2F283A, 0xFF2B2541, 0xFF282A39, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF21211F, 0xFF000005, 0xFF252331, 0xFF282538, 0xFF272435, 0xFF242230, 0xFF272533, 0xFF262334, 0xFF282433, 0xFF2E2834, + 0xFF33313C, 0xFF414139, 0xFF4A3C39, 0xFF377D41, 0xFF67FA6B, 0xFF71FB70, 0xFF72EE80, 0xFF326B36, 0xFF2F2A30, 0xFF242539, 0xFF29292B, 0xFF312B39, 0xFF292639, 0xFF2A2F33, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF271D38, 0xFF312C30, + 0xFF2B2726, 0xFF322E3D, 0xFF4B4046, 0xFF34513F, 0xFF407A4A, 0xFF62F26E, 0xFF6EFF72, 0xFF5DF469, 0xFF523F43, 0xFF2B263C, 0xFF272634, 0xFF2C2B31, 0xFF302742, 0xFF2C2431, + 0xFF2E2836, 0xFF2C213F, 0xFF302833, 0xFF2D253C, 0xFF2C2642, 0xFF2B292E, 0xFF332A3D, 0xFF31233D, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF262135, 0xFF22192C, + 0xFF2D2D35, 0xFF2A253C, 0xFF3A3E3D, 0xFF4B3939, 0xFF3B794A, 0xFF66EC65, 0xFF64FD64, 0xFF65F071, 0xFF50413E, 0xFF2F2A40, 0xFF27253B, 0xFF2B2C30, 0xFF2A2539, 0xFF2C2247, + 0xFF272A39, 0xFF26283F, 0xFF292C35, 0xFF272A3D, 0xFF252A40, 0xFF232A32, 0xFF28293B, 0xFF2A2937, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF262336, 0xFF292C35, + 0xFF2A2430, 0xFF2C362D, 0xFF342834, 0xFF356847, 0xFF6AF170, 0xFF70FE74, 0xFF74F082, 0xFF387943, 0xFF3D3131, 0xFF2C2C2C, 0xFF292B3A, 0xFF242633, 0xFF292A2F, 0xFF2E2E38, + 0xFF272636, 0xFF2B2A3C, 0xFF2B2B35, 0xFF272636, 0xFF292838, 0xFF2E2E3A, 0xFF282538, 0xFF242426, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF23233B, 0xFF262429, + 0xFF292F3B, 0xFF322030, 0xFF346248, 0xFF5CFB6B, 0xFF70FF74, 0xFF66F76C, 0xFF3C7D45, 0xFF35463C, 0xFF3A323D, 0xFF31332E, 0xFF292935, 0xFF26233E, 0xFF272936, 0xFF25282D, + 0xFF2B263C, 0xFF2C293C, 0xFF2B2937, 0xFF2B2738, 0xFF2E2737, 0xFF312940, 0xFF2C273E, 0xFF2E2D33, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF2B263D, 0xFF282C37, + 0xFF2C1A40, 0xFF445952, 0xFF5FF862, 0xFF64FD64, 0xFF62FA67, 0xFF3F7544, 0xFF483F3A, 0xFF423C40, 0xFF363435, 0xFF2A273A, 0xFF241D3C, 0xFF221A32, 0xFF2B2738, 0xFF2B2742, + 0xFF2A273C, 0xFF242333, 0xFF212234, 0xFF2A2937, 0xFF282435, 0xFF211C32, 0xFF232439, 0xFF232740, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF2A292F, 0xFF322738, + 0xFF3F6848, 0xFF63F262, 0xFF78FF7D, 0xFF60F462, 0xFF477B57, 0xFF30473D, 0xFF42413C, 0xFF3B393A, 0xFF302A38, 0xFF413831, 0xFF447146, 0xFF40744D, 0xFF3A6F43, 0xFF3D734F, + 0xFF436F4E, 0xFF3F6F49, 0xFF3A6F43, 0xFF426E4D, 0xFF476B4F, 0xFF386D3F, 0xFF3E6A46, 0xFF322C3A, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF2B2736, 0xFF2D5938, + 0xFF5FEE6E, 0xFF66FE6D, 0xFF61F465, 0xFF497961, 0xFF4B3C39, 0xFF414137, 0xFF373542, 0xFF2F2933, 0xFF3D3131, 0xFF5EE879, 0xFF6CFF74, 0xFF67F36C, 0xFF75FC71, 0xFF75F771, + 0xFF74FD7B, 0xFF6EFC74, 0xFF66FE6B, 0xFF6FFD73, 0xFF78FD7E, 0xFF6BFF6D, 0xFF71F676, 0xFF408F4D, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF282536, 0xFF2A2738, 0xFF272435, 0xFF447851, + 0xFF79FE7E, 0xFF5EF864, 0xFF437550, 0xFF453F33, 0xFF284C32, 0xFF342E32, 0xFF2E2B36, 0xFF322830, 0xFF45303F, 0xFF4ECD5A, 0xFF76F163, 0xFF68F46F, 0xFF5BFD6A, 0xFF64F366, + 0xFF67EC6D, 0xFF66F26B, 0xFF61FA64, 0xFF63F167, 0xFF6AEA6F, 0xFF5FF162, 0xFF75F378, 0xFF387844, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF252235, 0xFF282536, 0xFF272435, 0xFF292637, 0xFF342C37, 0xFF403835, + 0xFF507B60, 0xFF3F6C4D, 0xFF463D34, 0xFF374641, 0xFF302A34, 0xFF312E37, 0xFF2B2937, 0xFF2E2B36, 0xFF373238, 0xFF45403D, 0xFF395A47, 0xFF3E654A, 0xFF3E6747, 0xFF3B6744, + 0xFF3D684A, 0xFF3F6B4A, 0xFF3E6A49, 0xFF3B6746, 0xFF3D654A, 0xFF40614C, 0xFF4E473F, 0xFF3E3633, 0xFF312F3A, 0xFF2D2B38, 0xFF2A2836, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF242134, 0xFF282536, 0xFF262334, 0xFF292637, 0xFF322B3B, 0xFF332D2F, + 0xFF40392F, 0xFF413A30, 0xFF3A3132, 0xFF3A323D, 0xFF312D3B, 0xFF22202D, 0xFF282435, 0xFF2A2635, 0xFF312B35, 0xFF3A3438, 0xFF433B39, 0xFF494039, 0xFF4B4336, 0xFF4B4233, + 0xFF4A4237, 0xFF4D453A, 0xFF4D453A, 0xFF4A4438, 0xFF4B443C, 0xFF4A423F, 0xFF413B3B, 0xFF383236, 0xFF2F2D3A, 0xFF2C2A37, 0xFF292735, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF262334, 0xFF282536, 0xFF2A2539, 0xFF332D39, + 0xFF322C30, 0xFF383236, 0xFF312936, 0xFF272032, 0xFF2D2A3D, 0xFF272533, 0xFF282337, 0xFF2B263A, 0xFF2E2A39, 0xFF342E3A, 0xFF363138, 0xFF393239, 0xFF3B3537, 0xFF3E3538, + 0xFF3B3539, 0xFF3C3638, 0xFF3D3739, 0xFF3C3638, 0xFF3A3539, 0xFF39343B, 0xFF37313D, 0xFF342E3C, 0xFF2C2A37, 0xFF2A2836, 0xFF282634, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1F1F1D, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF2A253B, 0xFF2B2738, + 0xFF2C2836, 0xFF2F2937, 0xFF2C273B, 0xFF272238, 0xFF232033, 0xFF252434, 0xFF252235, 0xFF282435, 0xFF2A2637, 0xFF2B2738, 0xFF2B2736, 0xFF2C2836, 0xFF2E2A38, 0xFF2F2B39, + 0xFF2E2A38, 0xFF2E2A38, 0xFF302C3A, 0xFF312E39, 0xFF302C3A, 0xFF2C2A38, 0xFF2A2738, 0xFF292637, 0xFF292735, 0xFF292735, 0xFF282634, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF282536, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF282538, 0xFF232031, + 0xFF262233, 0xFF211D2E, 0xFF262135, 0xFF2A273A, 0xFF221F30, 0xFF262533, 0xFF262432, 0xFF262432, 0xFF252331, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF252233, + 0xFF252233, 0xFF242132, 0xFF262334, 0xFF292637, 0xFF2A2738, 0xFF272636, 0xFF252434, 0xFF252436, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF23212F, 0xFF292637, + 0xFF282536, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF272533, 0xFF292735, 0xFF282634, 0xFF272533, 0xFF262432, 0xFF262432, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF262334, + 0xFF272435, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF272636, 0xFF282737, 0xFF272636, 0xFF272636, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF272435, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF262432, 0xFF272435, + 0xFF232031, 0xFF272435, 0xFF292735, 0xFF272533, 0xFF272435, 0xFF211E31, 0xFF242333, 0xFF242333, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF252235, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF221F32, + 0xFF262336, 0xFF262334, 0xFF252331, 0xFF262432, 0xFF262135, 0xFF29243B, 0xFF262537, 0xFF262537, 0xFF262537, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF232031, 0xFF262334, 0xFF272435, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF282538, 0xFF272435, 0xFF28253A, 0xFF282538, 0xFF282536, 0xFF272435, 0xFF272533, 0xFF272435, + 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +}; + +static const uint32_t icon1[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2B2B29, 0xFF2D2D2B, 0xFF30302E, 0xFF31312F, 0xFF31312F, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF020106, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF020106, 0xFF06050A, 0xFF07060B, 0xFF040308, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF282633, 0xFF262431, 0xFF282633, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF272437, 0xFF292639, + 0xFF292639, 0xFF252235, 0xFF242134, 0xFF292639, 0xFF2F2C3F, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF272437, 0xFF262336, + 0xFF272437, 0xFF282538, 0xFF282538, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF232031, + 0xFF232031, 0xFF272435, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF272435, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF282536, 0xFF2C293A, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF252233, 0xFF272435, + 0xFF292637, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF484846, 0xFF010006, 0xFF252331, 0xFF282538, 0xFF242132, 0xFF272533, 0xFF242230, 0xFF262334, 0xFF282629, 0xFF2B2241, + 0xFF141833, 0xFF262535, 0xFF272936, 0xFF231F36, 0xFF2C2048, 0xFF292234, 0xFF232730, 0xFF313340, 0xFF2C2C38, 0xFF2D2D35, 0xFF2B2D3C, 0xFF2D2D47, 0xFF2D283F, 0xFF342C39, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3B3B39, 0xFF000005, 0xFF262432, 0xFF272437, 0xFF252233, 0xFF272533, 0xFF252331, 0xFF2A2738, 0xFF2E263E, 0xFF2E2C3A, + 0xFF786638, 0xFF484536, 0xFF261E2D, 0xFF353338, 0xFF20242F, 0xFF252229, 0xFF25213C, 0xFF2C2642, 0xFF302840, 0xFF2F2B3A, 0xFF2B2936, 0xFF32313F, 0xFF2D2A3D, 0xFF2D283C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2D2D2B, 0xFF000005, 0xFF272533, 0xFF272437, 0xFF262334, 0xFF272533, 0xFF252331, 0xFF2C293A, 0xFF1D2033, 0xFF7D683B, + 0xFFF4F073, 0xFFEFD657, 0xFF5C4D3A, 0xFF292438, 0xFF31313B, 0xFF242831, 0xFF2D253C, 0xFF2B233A, 0xFF332942, 0xFF342A42, 0xFF2B2533, 0xFF302D36, 0xFF2D2D39, 0xFF2E2C41, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF262624, 0xFF000005, 0xFF282634, 0xFF262336, 0xFF272435, 0xFF272533, 0xFF242230, 0xFF2B2839, 0xFF282530, 0xFF5D554A, + 0xFFF1D359, 0xFFF8EB45, 0xFFF9DD6F, 0xFF5E4E3F, 0xFF2A2430, 0xFF272B34, 0xFF26252A, 0xFF242328, 0xFF2A2732, 0xFF332B40, 0xFF332941, 0xFF302939, 0xFF2C2A35, 0xFF292B38, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF232321, 0xFF010006, 0xFF272533, 0xFF242134, 0xFF272435, 0xFF272533, 0xFF242230, 0xFF292637, 0xFF343434, 0xFF3A2E3A, + 0xFF6E5C48, 0xFFF1D25E, 0xFFF9E659, 0xFFF2CF67, 0xFF615642, 0xFF2D2638, 0xFF292B38, 0xFF2A2E37, 0xFF232730, 0xFF2A2A36, 0xFF322A3F, 0xFF2E243D, 0xFF2E293D, 0xFF2A2937, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF222220, 0xFF010006, 0xFF252331, 0xFF242134, 0xFF282536, 0xFF272533, 0xFF262432, 0xFF282536, 0xFF302F2D, 0xFF3B382F, + 0xFF423B42, 0xFF726240, 0xFFF6D459, 0xFFFAEB5E, 0xFFF2D762, 0xFF5B4F35, 0xFF2C2439, 0xFF292641, 0xFF252A40, 0xFF272B34, 0xFF2D2A35, 0xFF2B213A, 0xFF312845, 0xFF2C2A3F, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF21211F, 0xFF000005, 0xFF252331, 0xFF262336, 0xFF272435, 0xFF262432, 0xFF272533, 0xFF272435, 0xFF2E243C, 0xFF303435, + 0xFF433F40, 0xFF4D4339, 0xFF7A6D40, 0xFFF5D858, 0xFFF0E74C, 0xFFF6DC61, 0xFF655531, 0xFF30242E, 0xFF292546, 0xFF2A2E3A, 0xFF2E2E30, 0xFF2F283A, 0xFF2B2541, 0xFF282A39, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF21211F, 0xFF000005, 0xFF252331, 0xFF282538, 0xFF272435, 0xFF242230, 0xFF272533, 0xFF262334, 0xFF282433, 0xFF2E2834, + 0xFF33313C, 0xFF414139, 0xFF4A3C39, 0xFF776841, 0xFFF7DB5E, 0xFFFFE368, 0xFFECD963, 0xFF635234, 0xFF302746, 0xFF242539, 0xFF29292B, 0xFF312B39, 0xFF292639, 0xFF2A2F33, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF271D38, 0xFF312C30, + 0xFF2B2726, 0xFF322E3D, 0xFF4B4046, 0xFF504333, 0xFF7B633D, 0xFFE9D866, 0xFFFFE165, 0xFFE7D74C, 0xFF523F43, 0xFF2B263C, 0xFF272634, 0xFF2C2B31, 0xFF302742, 0xFF2C2431, + 0xFF2E2836, 0xFF2C213F, 0xFF302833, 0xFF2D253C, 0xFF2C2642, 0xFF2B292E, 0xFF332A3D, 0xFF31233D, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF262135, 0xFF22192C, + 0xFF2D2D35, 0xFF2A253C, 0xFF3A3E3D, 0xFF4B3939, 0xFF7F6647, 0xFFE9CC4E, 0xFFFFE65F, 0xFFE2D15D, 0xFF50413E, 0xFF2F2A40, 0xFF27253B, 0xFF2B2C30, 0xFF2A2539, 0xFF2C2247, + 0xFF272A39, 0xFF26283F, 0xFF292C35, 0xFF272A3D, 0xFF252A40, 0xFF232A32, 0xFF28293B, 0xFF2A2937, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF262336, 0xFF292C35, + 0xFF2A2430, 0xFF2C362D, 0xFF342834, 0xFF655D46, 0xFFF1D766, 0xFFFFE85F, 0xFFEFDC5B, 0xFF78652A, 0xFF3D3131, 0xFF2C2C2C, 0xFF292B3A, 0xFF242633, 0xFF292A2F, 0xFF2E2E38, + 0xFF272636, 0xFF2B2A3C, 0xFF2B2B35, 0xFF272636, 0xFF292838, 0xFF2E2E3A, 0xFF282538, 0xFF242426, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF23233B, 0xFF262429, + 0xFF292F3B, 0xFF322030, 0xFF5C5332, 0xFFEAD45A, 0xFFFDED5C, 0xFFEFD25A, 0xFF7A6749, 0xFF4C394D, 0xFF3A323D, 0xFF31332E, 0xFF292935, 0xFF26233E, 0xFF272936, 0xFF25282D, + 0xFF2B263C, 0xFF2C293C, 0xFF2B2937, 0xFF2B2738, 0xFF2E2737, 0xFF312940, 0xFF2C273E, 0xFF2E2D33, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF2B263D, 0xFF282C37, + 0xFF2C1A40, 0xFF65564F, 0xFFF5D357, 0xFFFFE85C, 0xFFF1DA58, 0xFF7A6749, 0xFF483F3A, 0xFF423C40, 0xFF363435, 0xFF2A273A, 0xFF241D3C, 0xFF221A32, 0xFF2B2738, 0xFF2B2742, + 0xFF2A273C, 0xFF242333, 0xFF212234, 0xFF2A2937, 0xFF282435, 0xFF211C32, 0xFF232439, 0xFF232740, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF2A292F, 0xFF322738, + 0xFF5C5441, 0xFFEFD55A, 0xFFFFE45F, 0xFFF5CE55, 0xFF796646, 0xFF4B4341, 0xFF42413C, 0xFF3B393A, 0xFF302A38, 0xFF413831, 0xFF6F6349, 0xFF6D5F3A, 0xFF655838, 0xFF685B48, + 0xFF716046, 0xFF6D6147, 0xFF6B6148, 0xFF6D6244, 0xFF715F49, 0xFF6D5D44, 0xFF665F43, 0xFF322C3A, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF2B2736, 0xFF524B2F, + 0xFFEAD965, 0xFFFBEA5C, 0xFFF2D95A, 0xFF7C664F, 0xFF4B3C39, 0xFF414137, 0xFF373542, 0xFF2F2933, 0xFF3D3131, 0xFFD8D35D, 0xFFFFF55D, 0xFFF6E54F, 0xFFFCEB5F, 0xFFFDEC68, + 0xFFFDE159, 0xFFFEE763, 0xFFFAE862, 0xFFF7E157, 0xFFFEE267, 0xFFFFE95E, 0xFFF3E757, 0xFF897A3F, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF282536, 0xFF2A2738, 0xFF272435, 0xFF7B6945, + 0xFFFFF063, 0xFFEED556, 0xFF76624A, 0xFF453F33, 0xFF464541, 0xFF342E32, 0xFF2E2B36, 0xFF322830, 0xFF45303F, 0xFFC3B14D, 0xFFF1D16C, 0xFFF7D162, 0xFFF4D055, 0xFFF3D35A, + 0xFFF7D057, 0xFFEFD05C, 0xFFEDD25F, 0xFFEDD156, 0xFFF1CB66, 0xFFEECF50, 0xFFECD958, 0xFF7C6553, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF2A2738, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF252235, 0xFF282536, 0xFF272435, 0xFF292637, 0xFF342C37, 0xFF403835, + 0xFF77705D, 0xFF645E48, 0xFF463D34, 0xFF484246, 0xFF302A34, 0xFF312E37, 0xFF2B2937, 0xFF2E2B36, 0xFF373238, 0xFF45403D, 0xFF564D44, 0xFF605746, 0xFF655A44, 0xFF645A3F, + 0xFF645943, 0xFF655D46, 0xFF645C45, 0xFF625A45, 0xFF615A48, 0xFF5D5548, 0xFF4E473F, 0xFF3E3633, 0xFF312F3A, 0xFF2D2B38, 0xFF2A2836, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF242134, 0xFF282536, 0xFF262334, 0xFF292637, 0xFF322B3B, 0xFF332D2F, + 0xFF40392F, 0xFF413A30, 0xFF3A3132, 0xFF3A323D, 0xFF312D3B, 0xFF22202D, 0xFF282435, 0xFF2A2635, 0xFF312B35, 0xFF3A3438, 0xFF433B39, 0xFF494039, 0xFF4B4336, 0xFF4B4233, + 0xFF4A4237, 0xFF4D453A, 0xFF4D453A, 0xFF4A4438, 0xFF4B443C, 0xFF4A423F, 0xFF413B3B, 0xFF383236, 0xFF2F2D3A, 0xFF2C2A37, 0xFF292735, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF262334, 0xFF282536, 0xFF2A2539, 0xFF332D39, + 0xFF322C30, 0xFF383236, 0xFF312936, 0xFF272032, 0xFF2D2A3D, 0xFF272533, 0xFF282337, 0xFF2B263A, 0xFF2E2A39, 0xFF342E3A, 0xFF363138, 0xFF393239, 0xFF3B3537, 0xFF3E3538, + 0xFF3B3539, 0xFF3C3638, 0xFF3D3739, 0xFF3C3638, 0xFF3A3539, 0xFF39343B, 0xFF37313D, 0xFF342E3C, 0xFF2C2A37, 0xFF2A2836, 0xFF282634, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1F1F1D, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF2A253B, 0xFF2B2738, + 0xFF2C2836, 0xFF2F2937, 0xFF2C273B, 0xFF272238, 0xFF232033, 0xFF252434, 0xFF252235, 0xFF282435, 0xFF2A2637, 0xFF2B2738, 0xFF2B2736, 0xFF2C2836, 0xFF2E2A38, 0xFF2F2B39, + 0xFF2E2A38, 0xFF2E2A38, 0xFF302C3A, 0xFF312E39, 0xFF302C3A, 0xFF2C2A38, 0xFF2A2738, 0xFF292637, 0xFF292735, 0xFF292735, 0xFF282634, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF282536, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF282538, 0xFF232031, + 0xFF262233, 0xFF211D2E, 0xFF262135, 0xFF2A273A, 0xFF221F30, 0xFF262533, 0xFF262432, 0xFF262432, 0xFF252331, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF252233, + 0xFF252233, 0xFF242132, 0xFF262334, 0xFF292637, 0xFF2A2738, 0xFF272636, 0xFF252434, 0xFF252436, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF23212F, 0xFF292637, + 0xFF282536, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF272533, 0xFF292735, 0xFF282634, 0xFF272533, 0xFF262432, 0xFF262432, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF262334, + 0xFF272435, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF272636, 0xFF282737, 0xFF272636, 0xFF272636, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF272435, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1E1E1C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF242134, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF262432, 0xFF272435, + 0xFF232031, 0xFF272435, 0xFF292735, 0xFF272533, 0xFF272435, 0xFF211E31, 0xFF242333, 0xFF242333, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF252235, 0xFF272435, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF221F32, + 0xFF262336, 0xFF262334, 0xFF252331, 0xFF262432, 0xFF262135, 0xFF29243B, 0xFF262537, 0xFF262537, 0xFF262537, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF232031, 0xFF262334, 0xFF272435, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF282538, 0xFF272435, 0xFF28253A, 0xFF282538, 0xFF282536, 0xFF272435, 0xFF272533, 0xFF272435, + 0xFF272437, 0xFF272437, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000} +}; + +static const uint32_t icon2[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2A2A28, 0xFF2C2C2A, 0xFF30302E, 0xFF31312F, 0xFF31312F, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF010005, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF010005, 0xFF06050A, 0xFF06050A, 0xFF040308, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF272532, 0xFF252330, 0xFF282633, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF262336, 0xFF292639, + 0xFF282538, 0xFF242134, 0xFF242134, 0xFF282538, 0xFF2F2C3F, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF221F30, + 0xFF232031, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF262334, + 0xFF252233, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF282536, 0xFF2C293A, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF272435, + 0xFF282536, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF464845, 0xFF000004, 0xFF23212E, 0xFF292639, 0xFF252235, 0xFF272435, 0xFF272435, 0xFF262233, 0xFF30232C, 0xFF212237, + 0xFF162640, 0xFF1E2738, 0xFF2C2535, 0xFF2C1F30, 0xFF192936, 0xFF252331, 0xFF28293D, 0xFF35293F, 0xFF2F2E40, 0xFF2C2F42, 0xFF362841, 0xFF32263C, 0xFF2B2937, 0xFF352935, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3A3C39, 0xFF000004, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF282435, 0xFF262439, 0xFF2B292E, + 0xFF852E3F, 0xFF492235, 0xFF26202A, 0xFF2F2037, 0xFF332034, 0xFF28233A, 0xFF202632, 0xFF2F2838, 0xFF2F2838, 0xFF2D2638, 0xFF33273D, 0xFF2B3141, 0xFF24353F, 0xFF2E2D3B, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2D2F2C, 0xFF000004, 0xFF252330, 0xFF282538, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF2A2637, 0xFF1F203E, 0xFF842D3D, + 0xFFEA4158, 0xFFF83E56, 0xFF5A3441, 0xFF2A232B, 0xFF2D203A, 0xFF242237, 0xFF23232F, 0xFF2B2B37, 0xFF2D2F3B, 0xFF2F2B39, 0xFF322738, 0xFF292B3A, 0xFF252C3C, 0xFF2F263B, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF252724, 0xFF000004, 0xFF262431, 0xFF272437, 0xFF262336, 0xFF242132, 0xFF242132, 0xFF292536, 0xFF2D293A, 0xFF562336, + 0xFFFC4259, 0xFFFF4A5F, 0xFFE33D47, 0xFF5B2C3C, 0xFF2E2230, 0xFF2B2738, 0xFF301D33, 0xFF2B2235, 0xFF282B3A, 0xFF2B2F3B, 0xFF302939, 0xFF312637, 0xFF31283D, 0xFF322840, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF212320, 0xFF010005, 0xFF262431, 0xFF252235, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF282435, 0xFF362A38, 0xFF381C2A, + 0xFF693542, 0xFFE23F44, 0xFFFF4655, 0xFFEC404E, 0xFF5F2D39, 0xFF27242D, 0xFF31233A, 0xFF2D1F38, 0xFF2B213A, 0xFF2A283D, 0xFF282C38, 0xFF2E2C39, 0xFF2F2C3D, 0xFF242B3D, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF20221F, 0xFF000004, 0xFF24222F, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF282536, 0xFF282435, 0xFF392033, 0xFF3C243A, + 0xFF462C35, 0xFF713141, 0xFFF3454F, 0xFFFF4956, 0xFFF03D52, 0xFF612E3D, 0xFF20272D, 0xFF222534, 0xFF2D243F, 0xFF30263F, 0xFF232937, 0xFF292D38, 0xFF2F2B3A, 0xFF272638, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF1F211E, 0xFF000004, 0xFF24222F, 0xFF282538, 0xFF272437, 0xFF242132, 0xFF292637, 0xFF272334, 0xFF222335, 0xFF362434, + 0xFF422A42, 0xFF4D2132, 0xFF722E39, 0xFFF23B4D, 0xFFFF405D, 0xFFEB4458, 0xFF652933, 0xFF31282D, 0xFF212735, 0xFF32263E, 0xFF2E2739, 0xFF292B37, 0xFF322B3B, 0xFF35273E, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF1F211E, 0xFF000004, 0xFF252330, 0xFF2A273A, 0xFF272437, 0xFF221F30, 0xFF282536, 0xFF262233, 0xFF252736, 0xFF361F3B, + 0xFF3A2439, 0xFF402C38, 0xFF4A2C34, 0xFF762E3C, 0xFFF04557, 0xFFFB4A42, 0xFFF23D5E, 0xFF6B2F39, 0xFF1B2429, 0xFF2E2238, 0xFF34253A, 0xFF252733, 0xFF252935, 0xFF2A283D, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF20201E, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242333, 0xFF232234, + 0xFF342335, 0xFF3D2831, 0xFF4B253A, 0xFF542340, 0xFF6F313C, 0xFFE54352, 0xFFFE474B, 0xFFF03E5E, 0xFF4A2C36, 0xFF252733, 0xFF262336, 0xFF2F223E, 0xFF2F2C41, 0xFF2C2632, + 0xFF31243E, 0xFF2C2F40, 0xFF302134, 0xFF2B2A38, 0xFF222836, 0xFF37253F, 0xFF2F273E, 0xFF26273B, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF20201E, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF232534, 0xFF271F36, + 0xFF292838, 0xFF22222C, 0xFF3F263B, 0xFF462B3C, 0xFF7F2E37, 0xFFF3464C, 0xFFFF4748, 0xFFE53E52, 0xFF443031, 0xFF2E222C, 0xFF302738, 0xFF38213E, 0xFF1D2A3B, 0xFF292735, + 0xFF292534, 0xFF292D38, 0xFF2F2530, 0xFF2A2D36, 0xFF242B35, 0xFF322A39, 0xFF2A2A36, 0xFF2D2937, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF26243A, 0xFF301F32, + 0xFF2E2135, 0xFF31243E, 0xFF272636, 0xFF6F323A, 0xFFE94152, 0xFFFF4450, 0xFFF03C59, 0xFF813245, 0xFF3B2639, 0xFF342538, 0xFF2B1F33, 0xFF172935, 0xFF2C293A, 0xFF302D38, + 0xFF282536, 0xFF292838, 0xFF2D2437, 0xFF2A273A, 0xFF282739, 0xFF2A273A, 0xFF222534, 0xFF322539, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF1F233C, 0xFF362130, + 0xFF341F30, 0xFF24253A, 0xFF603040, 0xFFF14050, 0xFFFF444D, 0xFFEF415C, 0xFF7C333E, 0xFF312730, 0xFF34263D, 0xFF44223B, 0xFF22222C, 0xFF202731, 0xFF302837, 0xFF2D282E, + 0xFF2A2C38, 0xFF2A2937, 0xFF2C293C, 0xFF2A273A, 0xFF2A2738, 0xFF282B3A, 0xFF222A37, 0xFF322B3D, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF202737, 0xFF352033, + 0xFF1F282D, 0xFF5B2B37, 0xFFF03E58, 0xFFFE474B, 0xFFF83D50, 0xFF79333D, 0xFF4A2A2F, 0xFF4A2840, 0xFF3B2742, 0xFF211E2F, 0xFF242331, 0xFF2D233C, 0xFF211E39, 0xFF22223A, + 0xFF292735, 0xFF2A2239, 0xFF2A243E, 0xFF2C223B, 0xFF2C243B, 0xFF28293B, 0xFF26283D, 0xFF1D253C, 0xFF2B2738, 0xFF2B2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, + 0xFF282737, 0xFF282737, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF332731, 0xFF292033, + 0xFF652E41, 0xFFF74056, 0xFFFF4048, 0xFFF24559, 0xFF78323C, 0xFF47282D, 0xFF452635, 0xFF2E2A39, 0xFF272533, 0xFF492B35, 0xFF732B39, 0xFF67313E, 0xFF642D40, 0xFF693444, + 0xFF6C303C, 0xFF6B2E3E, 0xFF6B3044, 0xFF6F2E42, 0xFF69313C, 0xFF6A303E, 0xFF652E43, 0xFF2F2434, 0xFF2B2738, 0xFF2B2738, 0xFF2B2738, 0xFF292637, 0xFF292637, 0xFF282737, + 0xFF282737, 0xFF282737, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF292130, 0xFF592D3E, + 0xFFDE3B58, 0xFFFF434E, 0xFFF84153, 0xFF77303E, 0xFF452E3E, 0xFF472535, 0xFF402933, 0xFF27242B, 0xFF402C2D, 0xFFEC3855, 0xFFFF4553, 0xFFFF3E49, 0xFFFF494F, 0xFFFF464B, + 0xFFFF4A54, 0xFFFC4A56, 0xFFFC4A58, 0xFFFF4956, 0xFFF64E4E, 0xFFFE4650, 0xFFFB455C, 0xFF92353D, 0xFF2B2738, 0xFF2A2637, 0xFF2A2637, 0xFF292637, 0xFF292637, 0xFF282737, + 0xFF282737, 0xFF282737, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF282341, 0xFF763136, + 0xFFFA4D51, 0xFFF74752, 0xFF6E2D33, 0xFF4E273A, 0xFF42243C, 0xFF342738, 0xFF272236, 0xFF35233D, 0xFF362430, 0xFFC33D55, 0xFFEA4A54, 0xFFEA434D, 0xFFF84354, 0xFFF1414E, + 0xFFF2424D, 0xFFEC4451, 0xFFEC4151, 0xFFF3434E, 0xFFE34846, 0xFFF2404C, 0xFFF54461, 0xFF6D3236, 0xFF2A2637, 0xFF2A2637, 0xFF2A2637, 0xFF292637, 0xFF292637, 0xFF282737, + 0xFF282737, 0xFF282737, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF30202B, 0xFF4D2C3D, + 0xFF653449, 0xFF622F42, 0xFF4C2738, 0xFF3A2632, 0xFF332735, 0xFF312636, 0xFF2D2636, 0xFF302536, 0xFF392437, 0xFF462739, 0xFF542A3E, 0xFF5E2D40, 0xFF632E40, 0xFF632D3D, + 0xFF612E41, 0xFF632E40, 0xFF642F41, 0xFF642F41, 0xFF613141, 0xFF5A3143, 0xFF4E2B3F, 0xFF43263A, 0xFF32263A, 0xFF2F2639, 0xFF2A2637, 0xFF282536, 0xFF272636, 0xFF282536, + 0xFF282536, 0xFF282435, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF2F2434, 0xFF3C2537, + 0xFF482237, 0xFF482136, 0xFF402536, 0xFF37293A, 0xFF2E2536, 0xFF272032, 0xFF282536, 0xFF2B2434, 0xFF312334, 0xFF3B2436, 0xFF462739, 0xFF4D283A, 0xFF51283A, 0xFF502737, + 0xFF4F283B, 0xFF50293B, 0xFF522939, 0xFF522939, 0xFF4F2A3B, 0xFF4A2B3B, 0xFF41283B, 0xFF3A2538, 0xFF2F2639, 0xFF2D2638, 0xFF2A2637, 0xFF282536, 0xFF272636, 0xFF282536, + 0xFF282536, 0xFF292536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF2F2236, + 0xFF362035, 0xFF351F34, 0xFF302335, 0xFF2B2738, 0xFF282538, 0xFF262338, 0xFF242635, 0xFF272435, 0xFF2B2434, 0xFF312436, 0xFF372437, 0xFF3A2536, 0xFF3C2537, 0xFF3B2434, + 0xFF3B2637, 0xFF3C2537, 0xFF3D2636, 0xFF3C2633, 0xFF3C2736, 0xFF392838, 0xFF342738, 0xFF312637, 0xFF2E2538, 0xFF2C2537, 0xFF292536, 0xFF282536, 0xFF272636, 0xFF282536, + 0xFF282536, 0xFF292536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242335, 0xFF292438, + 0xFF2F2639, 0xFF2D2638, 0xFF272435, 0xFF222335, 0xFF242237, 0xFF28253A, 0xFF252434, 0xFF262535, 0xFF292536, 0xFF2B2436, 0xFF2D2437, 0xFF2D2435, 0xFF2D2435, 0xFF2E2536, + 0xFF2D2437, 0xFF2E2536, 0xFF312636, 0xFF312636, 0xFF2F2736, 0xFF2E2836, 0xFF2C2837, 0xFF2B2937, 0xFF2C2537, 0xFF292536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF292536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF272334, + 0xFF262233, 0xFF272533, 0xFF272636, 0xFF262535, 0xFF252235, 0xFF252034, 0xFF252233, 0xFF252233, 0xFF272334, 0xFF272334, 0xFF272236, 0xFF252235, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF292536, 0xFF2A2637, 0xFF292534, 0xFF282634, 0xFF282536, 0xFF282536, 0xFF282435, 0xFF292536, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF292534, 0xFF262231, + 0xFF23212F, 0xFF232230, 0xFF272533, 0xFF272533, 0xFF282433, 0xFF272332, 0xFF272334, 0xFF272334, 0xFF272334, 0xFF272334, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF242335, + 0xFF252235, 0xFF252235, 0xFF262334, 0xFF282536, 0xFF282536, 0xFF262334, 0xFF272334, 0xFF282435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF282536, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282133, 0xFF282435, + 0xFF272435, 0xFF262334, 0xFF262233, 0xFF272334, 0xFF282435, 0xFF282634, 0xFF272435, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, + 0xFF282435, 0xFF262334, 0xFF262334, 0xFF262535, 0xFF272636, 0xFF272435, 0xFF282435, 0xFF2B2436, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF252034, 0xFF262336, + 0xFF262537, 0xFF262336, 0xFF272236, 0xFF282337, 0xFF262334, 0xFF232232, 0xFF252432, 0xFF242331, 0xFF242331, 0xFF242331, 0xFF252434, 0xFF272435, 0xFF272435, 0xFF262334, + 0xFF292534, 0xFF252331, 0xFF242333, 0xFF252434, 0xFF262535, 0xFF272435, 0xFF282435, 0xFF2C2537, 0xFF252434, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF262334, + 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000} +}; + +static const uint32_t icon3[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2A2A28, 0xFF2C2C2A, 0xFF30302E, 0xFF31312F, 0xFF31312F, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF010005, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF010005, 0xFF06050A, 0xFF06050A, 0xFF040308, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF272532, 0xFF252330, 0xFF282633, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF262336, 0xFF292639, + 0xFF282538, 0xFF242134, 0xFF242134, 0xFF282538, 0xFF2F2C3F, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF221F30, + 0xFF232031, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF262334, + 0xFF252233, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF282536, 0xFF2C293A, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF272435, + 0xFF282536, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF484846, 0xFF020106, 0xFF23212E, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF2B232E, 0xFF251F41, + 0xFF1E253F, 0xFF261F2F, 0xFF2F2432, 0xFF252130, 0xFF291E3C, 0xFF2E2128, 0xFF2E282C, 0xFF352D3A, 0xFF302C3A, 0xFF2D2D37, 0xFF2B2F3B, 0xFF282A3F, 0xFF2A2B3F, 0xFF303038, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3B3B39, 0xFF000004, 0xFF24222F, 0xFF282538, 0xFF262336, 0xFF272435, 0xFF262334, 0xFF292637, 0xFF31233A, 0xFF2F253D, + 0xFF6C3F28, 0xFF4E3338, 0xFF242136, 0xFF293036, 0xFF222536, 0xFF212435, 0xFF222439, 0xFF2A2742, 0xFF2C2841, 0xFF2B2A3C, 0xFF2F2937, 0xFF372A3C, 0xFF352C41, 0xFF28293D, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2D2D2B, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF2B2839, 0xFF232230, 0xFF77482C, + 0xFFFBA057, 0xFFF38234, 0xFF593D39, 0xFF1D2939, 0xFF2D253A, 0xFF2A2543, 0xFF23253A, 0xFF2B253F, 0xFF312D46, 0xFF2E3047, 0xFF2C293A, 0xFF382737, 0xFF372A3C, 0xFF27283D, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF252523, 0xFF010005, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF262334, 0xFF252233, 0xFF2A2738, 0xFF2D2733, 0xFF53393C, + 0xFFF58134, 0xFFFF8A1F, 0xFFF08B3D, 0xFF5B3D33, 0xFF31212C, 0xFF2F252E, 0xFF27242D, 0xFF2D202A, 0xFF322735, 0xFF282F41, 0xFF252D40, 0xFF2C2839, 0xFF2F2736, 0xFF2D2F3C, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF232321, 0xFF030207, 0xFF262431, 0xFF252235, 0xFF282538, 0xFF252233, 0xFF252233, 0xFF282536, 0xFF392D39, 0xFF302738, + 0xFF6B463D, 0xFFF48B3A, 0xFFFF882B, 0xFFF48742, 0xFF643E33, 0xFF302833, 0xFF242A3A, 0xFF2E2331, 0xFF31242E, 0xFF292732, 0xFF282F41, 0xFF2A2C43, 0xFF272437, 0xFF302E39, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF21211F, 0xFF020106, 0xFF24222F, 0xFF252235, 0xFF282538, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF31242E, 0xFF3F3430, + 0xFF3D3439, 0xFF6F4837, 0xFFF68740, 0xFFFF8D43, 0xFFF08946, 0xFF623532, 0xFF22273D, 0xFF26223D, 0xFF31253B, 0xFF32252F, 0xFF332B38, 0xFF2F2B44, 0xFF26223B, 0xFF302A38, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF20201E, 0xFF010005, 0xFF24222F, 0xFF272437, 0xFF282538, 0xFF242132, 0xFF282536, 0xFF272435, 0xFF32253F, 0xFF30232A, + 0xFF452C32, 0xFF533B3B, 0xFF734A38, 0xFFEC8035, 0xFFFF9A3B, 0xFFEE883D, 0xFF683D2D, 0xFF342230, 0xFF24213C, 0xFF2D2532, 0xFF31252F, 0xFF2D2942, 0xFF282540, 0xFF322A37, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF292639, 0xFF272437, 0xFF221F30, 0xFF282536, 0xFF262334, 0xFF252432, 0xFF2F2D38, + 0xFF3B2A3A, 0xFF382A27, 0xFF463B37, 0xFF7F4833, 0xFFF3842B, 0xFFFD933D, 0xFFED853C, 0xFF693E2D, 0xFF21273D, 0xFF232C3B, 0xFF292931, 0xFF262B3F, 0xFF24293D, 0xFF2E292D, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF22233F, 0xFF2D2027, + 0xFF332735, 0xFF362F36, 0xFF413131, 0xFF4F3737, 0xFF75472F, 0xFFF5833D, 0xFFFF8F3F, 0xFFF5812C, 0xFF3C3839, 0xFF262632, 0xFF272439, 0xFF362432, 0xFF2C293E, 0xFF252638, + 0xFF2E253A, 0xFF312936, 0xFF282E3A, 0xFF26283D, 0xFF37243A, 0xFF2F2432, 0xFF2A303E, 0xFF26273C, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF1E263B, 0xFF2F2132, + 0xFF23202B, 0xFF2D2D47, 0xFF3F2B34, 0xFF3E3331, 0xFF7D4A35, 0xFFEA8336, 0xFFFF8B37, 0xFFF38548, 0xFF4C3136, 0xFF302A38, 0xFF24263B, 0xFF33292A, 0xFF2C262A, 0xFF282E46, + 0xFF29283A, 0xFF2D2636, 0xFF242A38, 0xFF22273A, 0xFF2E2238, 0xFF2A2335, 0xFF252B39, 0xFF2A2939, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF242635, 0xFF231D29, + 0xFF342431, 0xFF3A252E, 0xFF2D2638, 0xFF6F4839, 0xFFE88237, 0xFFFF933C, 0xFFEB8E3E, 0xFF77432B, 0xFF372F3A, 0xFF2D282F, 0xFF242845, 0xFF222744, 0xFF252233, 0xFF2F203F, + 0xFF2A2E3A, 0xFF2B2738, 0xFF292935, 0xFF292D38, 0xFF2E2B3C, 0xFF2E2B3E, 0xFF262834, 0xFF2B282F, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF292438, 0xFF2C2A37, + 0xFF352333, 0xFF2B2533, 0xFF5E3A2C, 0xFFFF873B, 0xFFFE913C, 0xFFF58634, 0xFF79452F, 0xFF443343, 0xFF372C30, 0xFF3C2922, 0xFF301E2E, 0xFF282844, 0xFF2B2E3D, 0xFF302533, + 0xFF282A37, 0xFF2C1F39, 0xFF2F2435, 0xFF2C2B33, 0xFF2A273A, 0xFF30263F, 0xFF2B2233, 0xFF302835, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF252233, 0xFF272435, 0xFF262239, 0xFF2E243C, + 0xFF1B283B, 0xFF513E3A, 0xFFF78837, 0xFFFE9039, 0xFFF5833C, 0xFF764932, 0xFF4E3539, 0xFF462F37, 0xFF372B2D, 0xFF282E3C, 0xFF1F1B34, 0xFF1D182C, 0xFF282832, 0xFF272634, + 0xFF202833, 0xFF26223B, 0xFF2F2637, 0xFF262930, 0xFF1E2337, 0xFF272238, 0xFF2B2736, 0xFF222943, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF2E2236, 0xFF2B2332, + 0xFF64412E, 0xFFF58835, 0xFFFD9745, 0xFFF18636, 0xFF72483A, 0xFF4B3538, 0xFF3E3331, 0xFF3F2D2B, 0xFF332836, 0xFF462E2E, 0xFF6B4737, 0xFF734933, 0xFF6F4336, 0xFF6D3E34, + 0xFF6D4A37, 0xFF6D413E, 0xFF734538, 0xFF6C4534, 0xFF6B463E, 0xFF724234, 0xFF6B4337, 0xFF35293D, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF1F1F1D, 0xFF000004, 0xFF262431, 0xFF272437, 0xFF272437, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF29273C, 0xFF5D3C29, + 0xFFEF7E38, 0xFFFF8E35, 0xFFF58835, 0xFF6E483D, 0xFF42312A, 0xFF4B3236, 0xFF382E46, 0xFF302833, 0xFF3C2834, 0xFFEE8146, 0xFFFF8F31, 0xFFF58D34, 0xFFFC964E, 0xFFF29144, + 0xFFFD9733, 0xFFF79238, 0xFFFC9433, 0xFFF69335, 0xFFFC9A43, 0xFFFF942B, 0xFFF09133, 0xFF8C5831, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF272437, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF20232A, 0xFF7A4F3C, + 0xFFF99349, 0xFFFE8638, 0xFF704638, 0xFF463430, 0xFF503433, 0xFF312A32, 0xFF362336, 0xFF2C2924, 0xFF31313B, 0xFFD16D32, 0xFFE88E42, 0xFFF3873C, 0xFFFC7A2E, 0xFFF6892C, + 0xFFF18137, 0xFFEE833F, 0xFFF6873F, 0xFFEB7F3E, 0xFFEF8247, 0xFFF68029, 0xFFE98843, 0xFF754749, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF322A35, 0xFF432F30, + 0xFF725148, 0xFF6A483E, 0xFF49312F, 0xFF40333C, 0xFF312934, 0xFF2E2631, 0xFF2B2332, 0xFF302430, 0xFF382832, 0xFF463136, 0xFF543A39, 0xFF5F403B, 0xFF644238, 0xFF654135, + 0xFF634138, 0xFF65433A, 0xFF66443B, 0xFF65433A, 0xFF61423D, 0xFF5C403D, 0xFF4E383A, 0xFF443032, 0xFF32293A, 0xFF2F2838, 0xFF292534, 0xFF272435, 0xFF282536, 0xFF292639, + 0xFF282538, 0xFF292438, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF2F2B3A, 0xFF32232A, + 0xFF4A302F, 0xFF462C2B, 0xFF37262C, 0xFF372F3C, 0xFF2C2837, 0xFF282230, 0xFF292534, 0xFF2C2634, 0xFF322833, 0xFF3C2C36, 0xFF453236, 0xFF4A3534, 0xFF4E3433, 0xFF4F332F, + 0xFF4D3332, 0xFF4F3534, 0xFF503635, 0xFF4F3534, 0xFF4E3636, 0xFF4A3638, 0xFF413036, 0xFF372A33, 0xFF312839, 0xFF2E2737, 0xFF292534, 0xFF272435, 0xFF282536, 0xFF292639, + 0xFF282538, 0xFF282538, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF2B2A3C, 0xFF2D2532, + 0xFF382930, 0xFF352831, 0xFF2E2836, 0xFF2D2C3E, 0xFF282739, 0xFF272332, 0xFF252436, 0xFF272437, 0xFF2A2635, 0xFF2F2937, 0xFF352B36, 0xFF372B35, 0xFF392C33, 0xFF3B2C33, + 0xFF392C35, 0xFF3B2E37, 0xFF3E2F36, 0xFF3D2E35, 0xFF3B2E37, 0xFF3B2F39, 0xFF362E3B, 0xFF312B39, 0xFF2E2737, 0xFF2D2636, 0xFF292534, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF282538, 0xFF272437, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF252436, 0xFF2B2738, + 0xFF2F2937, 0xFF2E2A39, 0xFF29273C, 0xFF212236, 0xFF242134, 0xFF272332, 0xFF242335, 0xFF242335, 0xFF272437, 0xFF282536, 0xFF2A2635, 0xFF2B2736, 0xFF2E2836, 0xFF2F2937, + 0xFF2B2736, 0xFF2E2836, 0xFF2F2937, 0xFF2D2735, 0xFF2D2735, 0xFF2C2836, 0xFF2C2837, 0xFF2A2738, 0xFF2A2635, 0xFF292534, 0xFF292536, 0xFF282536, 0xFF292637, 0xFF292637, + 0xFF282536, 0xFF272437, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262233, 0xFF292536, + 0xFF242031, 0xFF252235, 0xFF262439, 0xFF222133, 0xFF272334, 0xFF2B2533, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF252233, 0xFF262334, + 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282433, 0xFF282433, 0xFF282433, 0xFF272435, 0xFF272435, 0xFF282433, 0xFF282435, 0xFF282435, 0xFF292536, 0xFF282536, 0xFF282536, + 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF2A2432, 0xFF292534, + 0xFF242132, 0xFF262336, 0xFF282536, 0xFF272334, 0xFF292534, 0xFF2C2634, 0xFF272332, 0xFF272332, 0xFF272332, 0xFF272332, 0xFF262233, 0xFF262233, 0xFF262233, 0xFF252233, + 0xFF252233, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF292534, 0xFF292534, 0xFF292534, 0xFF292534, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282435, 0xFF292536, 0xFF272435, + 0xFF272435, 0xFF262535, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF25212F, 0xFF262432, + 0xFF272636, 0xFF272435, 0xFF272332, 0xFF262231, 0xFF242230, 0xFF242132, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282435, 0xFF282435, 0xFF282435, + 0xFF242132, 0xFF242132, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262432, 0xFF272332, 0xFF262535, 0xFF272435, 0xFF272435, 0xFF282435, 0xFF282435, 0xFF272435, + 0xFF272435, 0xFF262535, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF292534, 0xFF232232, + 0xFF262537, 0xFF232232, 0xFF252130, 0xFF2B2736, 0xFF272636, 0xFF222538, 0xFF252436, 0xFF242335, 0xFF242335, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262233, + 0xFF272636, 0xFF262535, 0xFF252436, 0xFF262537, 0xFF262537, 0xFF262535, 0xFF272435, 0xFF262334, 0xFF262535, 0xFF262535, 0xFF272435, 0xFF282435, 0xFF272334, 0xFF262334, + 0xFF262334, 0xFF262535, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000} +}; + +static const uint32_t icon4[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2A2A28, 0xFF2C2C2A, 0xFF30302E, 0xFF31312F, 0xFF30302E, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF010005, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF010005, 0xFF06050A, 0xFF06050A, 0xFF030207, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF272532, 0xFF252330, 0xFF272532, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF272437, 0xFF292639, + 0xFF282538, 0xFF242134, 0xFF232033, 0xFF282538, 0xFF2E2B3E, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF272437, 0xFF262336, + 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF232031, + 0xFF232031, 0xFF272435, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF272435, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF272435, 0xFF2B2839, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF272435, + 0xFF292637, 0xFF272435, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF474745, 0xFF020106, 0xFF23212E, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF231F36, 0xFF2E2333, + 0xFF22252C, 0xFF211E2F, 0xFF2D283C, 0xFF292232, 0xFF291D31, 0xFF2A213C, 0xFF27283A, 0xFF352D42, 0xFF31293E, 0xFF2C2B3D, 0xFF312D3E, 0xFF33263A, 0xFF2A2738, 0xFF20333A, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3B3B39, 0xFF000004, 0xFF24222F, 0xFF282538, 0xFF262336, 0xFF272435, 0xFF262334, 0xFF282536, 0xFF312938, 0xFF2D2242, + 0xFF6D3B6E, 0xFF4C3C59, 0xFF1B1E2D, 0xFF2D283C, 0xFF2C293C, 0xFF19262F, 0xFF222534, 0xFF2C2839, 0xFF2D293A, 0xFF282B3A, 0xFF2A2C3B, 0xFF36293D, 0xFF372A3E, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2E2E2C, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF2A2738, 0xFF21232F, 0xFF764177, + 0xFFF896EB, 0xFFEF78CA, 0xFF57395D, 0xFF242237, 0xFF322537, 0xFF252932, 0xFF242635, 0xFF2B2436, 0xFF322B3D, 0xFF2E3140, 0xFF272D3B, 0xFF2D2A3B, 0xFF36293D, 0xFF33263A, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF262624, 0xFF010005, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF252233, 0xFF2A2738, 0xFF272238, 0xFF563E62, + 0xFFF475CC, 0xFFFF74E2, 0xFFF47ED6, 0xFF5F3B61, 0xFF2D1C2F, 0xFF2C2537, 0xFF292536, 0xFF271E31, 0xFF2E2334, 0xFF2D2B39, 0xFF272D39, 0xFF272D3B, 0xFF282A39, 0xFF2D293A, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF222220, 0xFF020106, 0xFF262431, 0xFF252235, 0xFF282538, 0xFF262334, 0xFF252233, 0xFF292637, 0xFF362943, 0xFF312940, + 0xFF6F4471, 0xFFF77AD6, 0xFFFF79E1, 0xFFF07FD1, 0xFF5F3C64, 0xFF2F273F, 0xFF28293B, 0xFF292639, 0xFF2D2638, 0xFF2B2434, 0xFF2D2B39, 0xFF2D303F, 0xFF262938, 0xFF2A293B, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF21211F, 0xFF020106, 0xFF24222F, 0xFF252235, 0xFF282538, 0xFF262334, 0xFF282536, 0xFF292637, 0xFF2F2236, 0xFF43334D, + 0xFF3F2F4A, 0xFF723E6C, 0xFFF87ED5, 0xFFFC85E9, 0xFFE77BD0, 0xFF65355F, 0xFF29203B, 0xFF24253A, 0xFF2C2F40, 0xFF2F283A, 0xFF302536, 0xFF322B3D, 0xFF2B2738, 0xFF2F273C, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF20201E, 0xFF010005, 0xFF24222F, 0xFF272437, 0xFF282538, 0xFF242132, 0xFF282536, 0xFF272435, 0xFF31233A, 0xFF33273F, + 0xFF462844, 0xFF553250, 0xFF784878, 0xFFE776CE, 0xFFFF8AE5, 0xFFF67CCF, 0xFF683764, 0xFF311E3E, 0xFF24253A, 0xFF2B283B, 0xFF2A2134, 0xFF2D2638, 0xFF2C2839, 0xFF31293E, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF20201E, 0xFF010005, 0xFF252330, 0xFF292639, 0xFF272437, 0xFF221F30, 0xFF272435, 0xFF252233, 0xFF29253E, 0xFF222834, + 0xFF3A2F3F, 0xFF452C49, 0xFF463152, 0xFF7D4574, 0xFFF97DD1, 0xFFFD7EE5, 0xFFE686C5, 0xFF653461, 0xFF29203B, 0xFF2B2C3E, 0xFF2A2637, 0xFF2A2939, 0xFF272A39, 0xFF262837, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF242230, 0xFF31243E, + 0xFF262239, 0xFF34303F, 0xFF462E46, 0xFF553059, 0xFF774276, 0xFFF07BC1, 0xFFFF83E3, 0xFFFA74CD, 0xFF3D3453, 0xFF242738, 0xFF262835, 0xFF352238, 0xFF302C3D, 0xFF242736, + 0xFF262739, 0xFF302438, 0xFF2D2A3B, 0xFF292838, 0xFF30273A, 0xFF272938, 0xFF26303C, 0xFF2C2338, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF1F2639, 0xFF302438, + 0xFF212330, 0xFF282D40, 0xFF422A44, 0xFF403148, 0xFF794478, 0xFFE877D3, 0xFFFF7ADC, 0xFFF27DCE, 0xFF493155, 0xFF34253C, 0xFF282536, 0xFF2E2739, 0xFF262537, 0xFF2A2D3E, + 0xFF272938, 0xFF2F2639, 0xFF2A2939, 0xFF242736, 0xFF2D2638, 0xFF262837, 0xFF232B38, 0xFF2F283A, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF202136, 0xFF272032, + 0xFF312235, 0xFF36223D, 0xFF2F2D42, 0xFF653F64, 0xFFEC7BCB, 0xFFFF83EE, 0xFFE681CF, 0xFF773E75, 0xFF3D2E4D, 0xFF31233A, 0xFF272938, 0xFF232939, 0xFF222133, 0xFF2D2638, + 0xFF2A2A34, 0xFF2F2734, 0xFF292734, 0xFF262A35, 0xFF2E2C39, 0xFF2D2B38, 0xFF242430, 0xFF2D2636, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF262432, 0xFF272439, + 0xFF392540, 0xFF272437, 0xFF5D3A62, 0xFFFD7AD7, 0xFFFA81E0, 0xFFFC7BD7, 0xFF7A3E74, 0xFF4A3055, 0xFF3C2C46, 0xFF33273B, 0xFF262135, 0xFF282B3C, 0xFF2A273A, 0xFF34253A, + 0xFF2B233A, 0xFF31233C, 0xFF2D233C, 0xFF29273F, 0xFF2F2641, 0xFF322340, 0xFF2C1F3B, 0xFF2E2940, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF242331, 0xFF31283D, + 0xFF182535, 0xFF554164, 0xFFF879D4, 0xFFFC7FE7, 0xFFF877D3, 0xFF73446E, 0xFF4F3453, 0xFF412F49, 0xFF382B3F, 0xFF2E2B3E, 0xFF221A31, 0xFF181A2F, 0xFF1B2336, 0xFF28263B, + 0xFF222431, 0xFF2B2937, 0xFF2A2738, 0xFF222838, 0xFF1F2535, 0xFF282133, 0xFF2B2839, 0xFF1D2E36, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF2F253E, 0xFF272030, + 0xFF644162, 0xFFF778D1, 0xFFFC83EA, 0xFFFC7FDB, 0xFF6E4370, 0xFF4C354F, 0xFF373246, 0xFF3B293F, 0xFF35273E, 0xFF4C294A, 0xFF724371, 0xFF734574, 0xFF68416E, 0xFF6B406B, + 0xFF6B4365, 0xFF6F4367, 0xFF704066, 0xFF6B4368, 0xFF684566, 0xFF6F3D62, 0xFF6C4363, 0xFF30293B, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF29253C, 0xFF5A365A, + 0xFFEB72BF, 0xFFFF80E0, 0xFFF675D2, 0xFF744674, 0xFF48314B, 0xFF4A304D, 0xFF3C2A42, 0xFF39223E, 0xFF3A2544, 0xFFE17BBD, 0xFFF588D7, 0xFFF57FD5, 0xFFFF87DE, 0xFFFE84D7, + 0xFFFB88E3, 0xFFFC83E0, 0xFFFF7FE1, 0xFFFD84E3, 0xFFFC8BE5, 0xFFFF82DE, 0xFFF886DB, 0xFF8C498C, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF272334, 0xFF73467F, + 0xFFFA8FED, 0xFFFA7BD4, 0xFF71446D, 0xFF492F4C, 0xFF512C4D, 0xFF2F2A40, 0xFF32243D, 0xFF292941, 0xFF2D2E4C, 0xFFD95EAF, 0xFFF281D9, 0xFFF07ADA, 0xFFF76FD5, 0xFFF579D7, + 0xFFEC7ACF, 0xFFEE78D0, 0xFFF875D2, 0xFFF277D1, 0xFFEA7ACE, 0xFFEE72C6, 0xFFF185D0, 0xFF743D74, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF34253C, 0xFF442D49, + 0xFF6F5271, 0xFF664465, 0xFF482B4A, 0xFF432F4B, 0xFF332941, 0xFF2C293C, 0xFF2C2439, 0xFF30243A, 0xFF372741, 0xFF44304C, 0xFF54395A, 0xFF603E61, 0xFF643E65, 0xFF643B63, + 0xFF653F64, 0xFF643E63, 0xFF643E63, 0xFF654062, 0xFF654263, 0xFF5E3F5F, 0xFF503754, 0xFF452E4A, 0xFF302C3D, 0xFF2D293A, 0xFF2A2637, 0xFF272435, 0xFF282536, 0xFF282737, + 0xFF282737, 0xFF282737, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF372B41, 0xFF2F2037, + 0xFF412D48, 0xFF402946, 0xFF392541, 0xFF3D2F48, 0xFF2D283C, 0xFF222133, 0xFF2A2539, 0xFF2D253A, 0xFF322840, 0xFF3C2C46, 0xFF44304C, 0xFF4B3250, 0xFF4F3153, 0xFF503153, + 0xFF4D3253, 0xFF4D3253, 0xFF503352, 0xFF4F3251, 0xFF4D3350, 0xFF49324E, 0xFF402E48, 0xFF382940, 0xFF2F2B3C, 0xFF2C2839, 0xFF292536, 0xFF272435, 0xFF282536, 0xFF282737, + 0xFF282737, 0xFF272636, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF2C2839, 0xFF2B2338, + 0xFF332A3F, 0xFF332A3F, 0xFF2E253A, 0xFF2A2539, 0xFF272437, 0xFF262837, 0xFF252436, 0xFF282538, 0xFF2C273B, 0xFF312940, 0xFF332941, 0xFF382A43, 0xFF3A2A44, 0xFF3B2B45, + 0xFF3A2C46, 0xFF3C2E47, 0xFF3D2D47, 0xFF3D2D47, 0xFF3B2D44, 0xFF392D43, 0xFF352C41, 0xFF332B40, 0xFF2C2839, 0xFF2B2738, 0xFF292536, 0xFF272435, 0xFF282536, 0xFF272636, + 0xFF272636, 0xFF272636, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF292637, + 0xFF292637, 0xFF2C293A, 0xFF2A2939, 0xFF242333, 0xFF222131, 0xFF242132, 0xFF242134, 0xFF262336, 0xFF282538, 0xFF2A2539, 0xFF2A2539, 0xFF2B263A, 0xFF2F283A, 0xFF30293B, + 0xFF2A273A, 0xFF2C273B, 0xFF2D283C, 0xFF2F273C, 0xFF2E263B, 0xFF2C2839, 0xFF2C293A, 0xFF2C293A, 0xFF2A2637, 0xFF292536, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF272636, 0xFF262535, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272334, 0xFF282536, + 0xFF211E2F, 0xFF212030, 0xFF262535, 0xFF262334, 0xFF282435, 0xFF262233, 0xFF272236, 0xFF272334, 0xFF272334, 0xFF272334, 0xFF272334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF242333, 0xFF252233, 0xFF262334, 0xFF282435, 0xFF282435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242031, 0xFF2B2738, + 0xFF292637, 0xFF262432, 0xFF252331, 0xFF262233, 0xFF292536, 0xFF2B2738, 0xFF2A2335, 0xFF272334, 0xFF262233, 0xFF262233, 0xFF272334, 0xFF262334, 0xFF252233, 0xFF242132, + 0xFF272435, 0xFF262334, 0xFF262334, 0xFF292536, 0xFF2A2637, 0xFF2A2637, 0xFF292536, 0xFF292536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1C1C1A, 0xFF000004, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262336, 0xFF252233, + 0xFF272334, 0xFF262231, 0xFF282433, 0xFF282536, 0xFF252233, 0xFF211E31, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, + 0xFF272334, 0xFF262233, 0xFF262233, 0xFF272435, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1C1C1A, 0xFF000004, 0xFF24222F, 0xFF292639, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262537, 0xFF222133, + 0xFF272435, 0xFF272332, 0xFF252130, 0xFF262334, 0xFF232436, 0xFF252638, 0xFF242331, 0xFF252434, 0xFF252434, 0xFF252434, 0xFF252434, 0xFF242333, 0xFF252235, 0xFF252235, + 0xFF272334, 0xFF262233, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000} +}; + +static const uint32_t icon5[H][W] = { + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEEEEEE, + 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, + 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEEEEF0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, + 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFEFEFEF, 0xFFECECEC, 0xFFF1F1F1, 0xFFF8F8F8, 0xFFF2F2F4, 0xFFF1F1F3, + 0xFFEEEEF0, 0xFFEBEBED, 0xFFE8E8EA, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, + 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE7E7E9, 0xFFE6E6E8, 0xFFE6E6E8, 0xFFE7E7E9, 0xFFE8E8EA, 0xFFEBEBED, 0xFFEEEEF0, + 0xFFF1F1F3, 0xFFF3F3F5, 0xFFF8F8F8, 0xFFF1F1F1, 0xFFECECEC, 0xFFEFEFEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E7, 0xFFF7F7F9, 0xFFE0E0E0, 0xFFA8A8A6, 0xFF6F6F6D, 0xFF4B4B49, 0xFF3E3E3C, + 0xFF30302E, 0xFF2A2A28, 0xFF2C2C2A, 0xFF30302E, 0xFF31312F, 0xFF30302E, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, + 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2F2F2D, 0xFF2E2E2C, 0xFF2F2F2D, 0xFF31312F, 0xFF31312F, 0xFF343432, 0xFF3C3C3A, + 0xFF494947, 0xFF535351, 0xFF767674, 0xFFADADAD, 0xFFE1E1E3, 0xFFF5F5F7, 0xFFE6E6E8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFF1F1F3, 0xFF9D9D9F, 0xFF222224, 0xFF000002, 0xFF000002, 0xFF010005, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF010005, 0xFF06050A, 0xFF06050A, 0xFF030207, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, + 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF08070C, 0xFF06050A, 0xFF08070C, 0xFF09080D, 0xFF08070C, 0xFF06050A, 0xFF040308, + 0xFF040308, 0xFF040308, 0xFF000004, 0xFF000004, 0xFF303032, 0xFFA1A1A3, 0xFFF3F3F5, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFDEDEE0, 0xFFF4F4F4, 0xFF626262, 0xFF000002, 0xFF050409, 0xFF121119, 0xFF1B1924, 0xFF211F2C, 0xFF262431, + 0xFF272532, 0xFF252330, 0xFF272532, 0xFF2E2C39, 0xFF32303D, 0xFF312F3C, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, + 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF302E3B, 0xFF2F2D3A, 0xFF2F2D3A, 0xFF302E3B, 0xFF312F3C, 0xFF312F3C, 0xFF312F3C, + 0xFF2F2D3A, 0xFF2D2B38, 0xFF292732, 0xFF1C1B23, 0xFF000004, 0xFF060608, 0xFF686868, 0xFFEFEFEF, 0xFFE3E3E3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE1E0E5, 0xFFF0F0F2, 0xFF666666, 0xFF050505, 0xFF050507, 0xFF17161E, 0xFF282633, 0xFF282536, 0xFF272437, 0xFF292639, + 0xFF282538, 0xFF242134, 0xFF232033, 0xFF282538, 0xFF2E2B3E, 0xFF322F42, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, + 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF302D40, 0xFF333043, 0xFF312E41, 0xFF2F2C3F, 0xFF2F2C3F, 0xFF312E41, 0xFF322F42, + 0xFF333043, 0xFF333043, 0xFF2D2A3B, 0xFF363441, 0xFF27262E, 0xFF0E0E10, 0xFF020202, 0xFF666666, 0xFFF5F5F5, 0xFFE0E0E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFEBEBEB, 0xFFF0EFF4, 0xFF9A9A9C, 0xFF000002, 0xFF070709, 0xFF1D1C22, 0xFF2E2C39, 0xFF292637, 0xFF242136, 0xFF272437, 0xFF262336, + 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF2B283B, 0xFF302D40, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, + 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF312E41, 0xFF322F42, 0xFF312E41, 0xFF312E41, 0xFF302D40, + 0xFF2F2C3F, 0xFF2E2B3E, 0xFF322F44, 0xFF2D2A3B, 0xFF33313C, 0xFF2C2B31, 0xFF141416, 0xFF030303, 0xFF9B9B9B, 0xFFEDEDEF, 0xFFEAEAEA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE5E5E5, 0xFFDADADC, 0xFF212025, 0xFF020107, 0xFF1D1C24, 0xFF282633, 0xFF242230, 0xFF1F1C2F, 0xFF272439, 0xFF262334, 0xFF232031, + 0xFF232031, 0xFF272435, 0xFF272435, 0xFF252233, 0xFF282536, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2C293A, 0xFF2D2A3B, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2F2C3D, 0xFF312E3F, 0xFF2A273A, 0xFF302D40, 0xFF2E2C3A, 0xFF312F3A, 0xFF212026, 0xFF020106, 0xFF2E2E30, 0xFFDCDCDC, 0xFFE5E5E5, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFE7E7E7, 0xFFA2A2A2, 0xFF000004, 0xFF0E0D15, 0xFF2A2836, 0xFF282536, 0xFF252235, 0xFF2A273A, 0xFF262336, 0xFF292637, 0xFF272435, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252233, 0xFF272435, 0xFF2B2839, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, + 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF302D3E, 0xFF312E3F, 0xFF312E3F, 0xFF302D3E, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF302D3E, 0xFF312E3F, 0xFF322F40, 0xFF2C293A, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF363441, 0xFF1C1B21, 0xFF000002, 0xFFA6A6A4, 0xFFE7E7E7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE4E4E4, 0xFFEBEBEB, 0xFF6D6D6D, 0xFF000004, 0xFF1E1C27, 0xFF262336, 0xFF252237, 0xFF242136, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF272435, + 0xFF292637, 0xFF272435, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2F2C3D, 0xFF302D3E, 0xFF2F2C3D, + 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C2A38, 0xFF333041, 0xFF2E2B3E, 0xFF2C293C, 0xFF302D3E, 0xFF26252D, 0xFF010103, 0xFF6E6F6A, 0xFFEBEBEB, 0xFFE4E4E4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE2E2E4, 0xFFE7E6EB, 0xFF494846, 0xFF020106, 0xFF23212E, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF252233, 0xFF242333, 0xFF1D283A, 0xFF2E2333, + 0xFF291B2A, 0xFF2E1731, 0xFF242B3D, 0xFF20222F, 0xFF331D34, 0xFF2A243E, 0xFF2B233A, 0xFF312E41, 0xFF2B2A3A, 0xFF2A2939, 0xFF2C303C, 0xFF2B2E3D, 0xFF2C2B3B, 0xFF312D3E, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2F2C3D, 0xFF302D3E, 0xFF2B283B, 0xFF302D40, 0xFF2B2936, 0xFF040308, 0xFF4F4F4D, 0xFFE5E4E9, 0xFFE1E1E3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFE0E0E2, 0xFFE3E2E7, 0xFF3C3B39, 0xFF000004, 0xFF24222F, 0xFF282538, 0xFF262336, 0xFF272435, 0xFF262334, 0xFF282737, 0xFF2E2635, 0xFF1C2641, + 0xFF296E7D, 0xFF245563, 0xFF211930, 0xFF233342, 0xFF1F2837, 0xFF201E2B, 0xFF232232, 0xFF282A39, 0xFF2E2B3C, 0xFF2F2B3C, 0xFF312A3C, 0xFF3A283E, 0xFF39273D, 0xFF282737, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF302D3E, 0xFF2C293C, 0xFF302D40, 0xFF2B2936, 0xFF010005, 0xFF424240, 0xFFE2E1E6, 0xFFDFDFE1, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDDDDDF, 0xFFDEDDE2, 0xFF2E2D2B, 0xFF000004, 0xFF252330, 0xFF272437, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF2A2939, 0xFF23202B, 0xFF2C7482, + 0xFF45FEF9, 0xFF35E9E0, 0xFF2A576C, 0xFF1B2137, 0xFF2C2F3E, 0xFF2A232B, 0xFF2E2635, 0xFF2A2835, 0xFF332A3D, 0xFF2E2B3E, 0xFF212A39, 0xFF2E263B, 0xFF3A283E, 0xFF2A2D3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2E2B3C, + 0xFF2E2B3C, 0xFF2E2B3C, 0xFF2F2C3D, 0xFF2C293A, 0xFF2E2B3C, 0xFF2C293C, 0xFF2F2C3F, 0xFF2C2A37, 0xFF000004, 0xFF343432, 0xFFDDDCE1, 0xFFDCDCDE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFDAD9DE, 0xFF262523, 0xFF010005, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF262334, 0xFF252233, 0xFF292838, 0xFF2E263D, 0xFF235965, + 0xFF30E8DE, 0xFF2AFFFD, 0xFF3CECEC, 0xFF30596D, 0xFF162731, 0xFF2F2838, 0xFF23262F, 0xFF1C252E, 0xFF2D2437, 0xFF32293E, 0xFF222F3F, 0xFF252E3D, 0xFF2F283A, 0xFF292D39, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, + 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2D2A3B, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2E2B3E, 0xFF2D2B38, 0xFF020106, 0xFF2B2B29, 0xFFD9D8DD, 0xFFDADADC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFDADADC, 0xFFD7D6DB, 0xFF242321, 0xFF030207, 0xFF262431, 0xFF252235, 0xFF282538, 0xFF252233, 0xFF252233, 0xFF272636, 0xFF2B3245, 0xFF1C2D3D, + 0xFF2D6C7D, 0xFF42E9EF, 0xFF38F9FE, 0xFF36EFE7, 0xFF2F586A, 0xFF27293E, 0xFF232B36, 0xFF1C2D37, 0xFF2A2939, 0xFF35213A, 0xFF32293E, 0xFF302D40, 0xFF2A2637, 0xFF282737, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2B2839, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2D2B38, 0xFF040308, 0xFF282826, 0xFFD6D5DA, 0xFFD9D9DB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD9D9DB, 0xFFD5D4D9, 0xFF22211F, 0xFF020106, 0xFF24222F, 0xFF252235, 0xFF282538, 0xFF252233, 0xFF272435, 0xFF272636, 0xFF1D2935, 0xFF2A4652, + 0xFF2B354E, 0xFF24707D, 0xFF3EEEEB, 0xFF36FCFD, 0xFF34EFE8, 0xFF235667, 0xFF2F223C, 0xFF2A223A, 0xFF2A2B3D, 0xFF282737, 0xFF2C2336, 0xFF31283B, 0xFF2A2738, 0xFF2D2C3C, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2D2A3B, 0xFF2C293C, 0xFF2C293C, 0xFF2B2936, 0xFF030207, 0xFF272725, 0xFFD4D3D8, 0xFFD8D8DA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD8D8DA, 0xFFD3D2D7, 0xFF21201E, 0xFF010005, 0xFF24222F, 0xFF272437, 0xFF282538, 0xFF242132, 0xFF282536, 0xFF262535, 0xFF30283D, 0xFF2A283D, + 0xFF22434C, 0xFF2A4652, 0xFF24747F, 0xFF34EBE7, 0xFF2EFFFE, 0xFF3DEEE8, 0xFF275B69, 0xFF262340, 0xFF272239, 0xFF20313B, 0xFF222B34, 0xFF2C2A37, 0xFF282A39, 0xFF2D2A3D, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, + 0xFF2C293A, 0xFF2C293A, 0xFF2C293A, 0xFF2E2B3C, 0xFF2B2839, 0xFF2B283B, 0xFF2D2A3D, 0xFF2A2835, 0xFF020106, 0xFF272725, 0xFFD1D0D5, 0xFFD6D6D8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD7D7D9, 0xFFD2D1D6, 0xFF21201E, 0xFF000004, 0xFF252330, 0xFF292639, 0xFF272437, 0xFF221F30, 0xFF282536, 0xFF252434, 0xFF2D1E3D, 0xFF1B2E35, + 0xFF303741, 0xFF2A404D, 0xFF2D4159, 0xFF267681, 0xFF3DF2ED, 0xFF37F9FF, 0xFF34F4DB, 0xFF295D6B, 0xFF2C1F39, 0xFF262E39, 0xFF262932, 0xFF2F2736, 0xFF2B2A3A, 0xFF2D253C, + 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2D2A3B, 0xFF282536, 0xFF292639, 0xFF2E2B3E, 0xFF2A2835, 0xFF010005, 0xFF272725, 0xFFCFCED3, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD6D6D8, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF25232E, 0xFF30243C, + 0xFF1D283A, 0xFF20393E, 0xFF26474C, 0xFF29485C, 0xFF326A81, 0xFF35EEDC, 0xFF3BFFFB, 0xFF3BEBE0, 0xFF1D4053, 0xFF232937, 0xFF2A2A36, 0xFF2B2736, 0xFF32243B, 0xFF1E303E, + 0xFF2A2836, 0xFF2D2638, 0xFF292C3B, 0xFF2A2A36, 0xFF312936, 0xFF242B33, 0xFF2B2D39, 0xFF312237, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, 0xFF2B2839, + 0xFF2B2839, 0xFF2C293A, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFD0CFD4, 0xFF21211F, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272236, 0xFF252331, + 0xFF31283B, 0xFF2A283D, 0xFF213945, 0xFF2E3F4F, 0xFF247382, 0xFF2EEBED, 0xFF30F9FF, 0xFF3AEEEF, 0xFF354167, 0xFF262E43, 0xFF212735, 0xFF252F39, 0xFF302536, 0xFF2C2535, + 0xFF2E293F, 0xFF2C243B, 0xFF28263B, 0xFF2C273B, 0xFF30293B, 0xFF272435, 0xFF27253A, 0xFF302B42, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, + 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2B2839, 0xFF2B2839, 0xFF2B283B, 0xFF2B283B, 0xFF2A2835, 0xFF010005, 0xFF242422, 0xFFCECDD2, 0xFFD5D5D7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD5D5D7, 0xFFCECDD2, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF262334, 0xFF201D30, 0xFF262A36, + 0xFF272636, 0xFF24293D, 0xFF2F2F47, 0xFF216268, 0xFF40F0E6, 0xFF35FBFF, 0xFF30F6E7, 0xFF296C7F, 0xFF28374E, 0xFF222838, 0xFF1E2633, 0xFF2C1F33, 0xFF2F2337, 0xFF2B2A3A, + 0xFF2E2538, 0xFF2D2938, 0xFF2D2636, 0xFF2A2333, 0xFF2F2838, 0xFF34293A, 0xFF272334, 0xFF222836, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2B2839, 0xFF2A2738, 0xFF2B283B, 0xFF2B283B, 0xFF292734, 0xFF010005, 0xFF242422, 0xFFCCCBD0, 0xFFD4D4D6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD4D4D6, 0xFFCDCCD1, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF252233, 0xFF262334, 0xFF2E2631, 0xFF1E2736, + 0xFF272C42, 0xFF282038, 0xFF265E6B, 0xFF35F3E7, 0xFF37FFFC, 0xFF3DEBEC, 0xFF2F717F, 0xFF2A3E56, 0xFF2A3547, 0xFF243443, 0xFF32243D, 0xFF27273F, 0xFF1E3142, 0xFF33253F, + 0xFF272638, 0xFF272F3C, 0xFF2C293A, 0xFF242738, 0xFF252A3D, 0xFF322A41, 0xFF26293A, 0xFF202E39, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2B2839, 0xFF2A2738, 0xFF2A273A, 0xFF2B283B, 0xFF292734, 0xFF000004, 0xFF242422, 0xFFCBCACF, 0xFFD3D3D5, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD3D3D5, 0xFFCBCACF, 0xFF20201E, 0xFF000004, 0xFF252330, 0xFF252235, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF2E242F, 0xFF1F2D3A, + 0xFF2C1939, 0xFF2F596F, 0xFF35EEE6, 0xFF32FAFA, 0xFF30F4EA, 0xFF2C6E7C, 0xFF2B4556, 0xFF23444D, 0xFF263741, 0xFF272936, 0xFF24202F, 0xFF1C1A28, 0xFF22222C, 0xFF202328, + 0xFF2B2436, 0xFF232732, 0xFF2D2230, 0xFF292836, 0xFF262537, 0xFF291B32, 0xFF272331, 0xFF31242E, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF2A2738, 0xFF2A273A, 0xFF2A273A, 0xFF292734, 0xFF000004, 0xFF232321, 0xFFC9C8CD, 0xFFD2D2D4, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD2D2D4, 0xFFC9C8CD, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF222838, 0xFF212936, + 0xFF2B616B, 0xFF37F0EA, 0xFF3AFFFF, 0xFF32EBE5, 0xFF2C7681, 0xFF2A4455, 0xFF2B3C46, 0xFF333645, 0xFF1D303E, 0xFF21384A, 0xFF326C78, 0xFF2E6C7B, 0xFF2E6673, 0xFF306B73, + 0xFF366778, 0xFF2D6772, 0xFF34636D, 0xFF2F6B75, 0xFF34677A, 0xFF325F74, 0xFF2F646C, 0xFF2F2E40, 0xFF2B2839, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, 0xFF2A2738, + 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF2A2738, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC7C6CB, 0xFFD1D1D3, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD1D1D3, 0xFFC8C7CC, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF262334, 0xFF282536, 0xFF2A273C, 0xFF21535E, + 0xFF38EADE, 0xFF34FBF8, 0xFF33ECE7, 0xFF2B7882, 0xFF253C4C, 0xFF2B4554, 0xFF243A48, 0xFF292D48, 0xFF292E54, 0xFF2AECE1, 0xFF33FFFF, 0xFF33F3FE, 0xFF3CFEFF, 0xFF38FFFF, + 0xFF39FCFF, 0xFF36FFFD, 0xFF3BFEF8, 0xFF2FFFFB, 0xFF3EFFFF, 0xFF3CFFFF, 0xFF37FFF5, 0xFF258998, 0xFF2B2839, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF2A273A, 0xFF282633, 0xFF000004, 0xFF232321, 0xFFC6C5CA, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFD0D0D2, 0xFFC7C6CB, 0xFF20201E, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF292637, 0xFF2C2034, 0xFF28768C, + 0xFF3FFFFF, 0xFF31EBE6, 0xFF327180, 0xFF204651, 0xFF264250, 0xFF2E2E46, 0xFF202D35, 0xFF262D3D, 0xFF2A344D, 0xFF3AC2BE, 0xFF3BEAE5, 0xFF36EFEA, 0xFF34EDE7, 0xFF32EDE2, + 0xFF35E7E7, 0xFF35EAE3, 0xFF3BEDE1, 0xFF2DF1E3, 0xFF3BE7E9, 0xFF32E6E3, 0xFF3BF2E0, 0xFF356977, 0xFF2A2738, 0xFF2A2738, 0xFF292637, 0xFF292637, 0xFF292637, 0xFF292637, + 0xFF292637, 0xFF292637, 0xFF282536, 0xFF292637, 0xFF292637, 0xFF292639, 0xFF292639, 0xFF282633, 0xFF000004, 0xFF222220, 0xFFC5C4C9, 0xFFD0D0D2, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCFCED3, 0xFFC6C5CA, 0xFF1E1E1C, 0xFF020106, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF242F41, 0xFF233F4D, + 0xFF46727D, 0xFF35646E, 0xFF214251, 0xFF2E3F4F, 0xFF252E3F, 0xFF272F3C, 0xFF27283A, 0xFF252B3B, 0xFF243443, 0xFF28424F, 0xFF2E5260, 0xFF315D6A, 0xFF30606E, 0xFF2E5F6D, + 0xFF31636E, 0xFF2F636E, 0xFF2E626F, 0xFF2F606E, 0xFF335F6C, 0xFF335966, 0xFF2C4957, 0xFF223C4B, 0xFF29313E, 0xFF292C3B, 0xFF292838, 0xFF282536, 0xFF292536, 0xFF2A2637, + 0xFF292637, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC4C3C8, 0xFFCCCBD0, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC5C4C9, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF2A2F42, 0xFF1B2E3D, + 0xFF20424E, 0xFF1E404C, 0xFF203546, 0xFF2E3649, 0xFF282B3C, 0xFF1F2231, 0xFF282538, 0xFF27283A, 0xFF262F40, 0xFF263747, 0xFF26404F, 0xFF274756, 0xFF254959, 0xFF244858, + 0xFF234755, 0xFF254957, 0xFF254B58, 0xFF264A58, 0xFF284958, 0xFF2C4655, 0xFF2A3D4C, 0xFF253545, 0xFF282E3C, 0xFF282B3A, 0xFF282737, 0xFF282536, 0xFF292536, 0xFF2A2637, + 0xFF292637, 0xFF272636, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC3C2C7, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCECDD2, 0xFFC4C3C8, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF282739, 0xFF242B3D, + 0xFF213141, 0xFF263646, 0xFF252C3F, 0xFF252338, 0xFF292637, 0xFF272636, 0xFF2B2338, 0xFF2A273A, 0xFF2A2B3D, 0xFF293042, 0xFF263344, 0xFF263646, 0xFF263749, 0xFF27384A, + 0xFF263646, 0xFF293949, 0xFF293A4A, 0xFF283949, 0xFF283848, 0xFF2B3747, 0xFF2C3345, 0xFF2A3040, 0xFF292B3A, 0xFF272938, 0xFF282536, 0xFF282536, 0xFF292536, 0xFF292637, + 0xFF282737, 0xFF272636, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF20201E, 0xFFC2C1C6, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCDCCD1, 0xFFC2C1C6, 0xFF1E1E1C, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF282435, 0xFF2A293B, + 0xFF242738, 0xFF292C3F, 0xFF2C293C, 0xFF271F34, 0xFF262233, 0xFF242230, 0xFF262135, 0xFF272236, 0xFF272638, 0xFF262739, 0xFF252839, 0xFF26293A, 0xFF272A3B, 0xFF282B3E, + 0xFF2A293B, 0xFF2A2B3D, 0xFF2A2D3E, 0xFF282B3C, 0xFF272A3B, 0xFF28293B, 0xFF2A2939, 0xFF292838, 0xFF282737, 0xFF272636, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF292637, + 0xFF272636, 0xFF252736, 0xFF282536, 0xFF282536, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFC0BFC4, 0xFFCAC9CE, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCBCACF, 0xFFC0BFC4, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF232031, 0xFF221F32, 0xFF282435, 0xFF2B2436, 0xFF262432, 0xFF262533, 0xFF262334, 0xFF262334, 0xFF252434, 0xFF242333, 0xFF242333, 0xFF252233, 0xFF252233, 0xFF252233, + 0xFF272032, 0xFF262233, 0xFF272334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF272636, 0xFF272636, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF20201E, 0xFFBFBEC3, 0xFFC9C8CD, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBFBEC3, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF232232, 0xFF272435, + 0xFF2B2839, 0xFF252132, 0xFF252132, 0xFF282536, 0xFF242333, 0xFF2A2939, 0xFF282737, 0xFF272636, 0xFF262535, 0xFF262535, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF272334, + 0xFF272334, 0xFF272334, 0xFF282435, 0xFF292534, 0xFF2A2635, 0xFF292735, 0xFF282536, 0xFF262535, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282536, 0xFF282536, + 0xFF282536, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF272437, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBDBCC1, 0xFFC8C7CC, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCAC9CE, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF010005, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252434, 0xFF252233, + 0xFF272334, 0xFF262233, 0xFF272435, 0xFF282737, 0xFF242132, 0xFF211E2F, 0xFF252233, 0xFF242132, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF252436, 0xFF262334, 0xFF262334, 0xFF272332, 0xFF272332, 0xFF262334, 0xFF242333, 0xFF242335, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC9C8CD, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF24222F, 0xFF282538, 0xFF252235, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252434, 0xFF262334, + 0xFF272334, 0xFF292536, 0xFF252434, 0xFF232232, 0xFF282536, 0xFF2A2237, 0xFF272332, 0xFF282433, 0xFF282435, 0xFF282435, 0xFF272334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF222335, 0xFF242335, 0xFF262334, 0xFF272334, 0xFF262233, 0xFF262233, 0xFF262336, 0xFF27253A, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF282435, 0xFF292536, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFBCBBC0, 0xFFC7C6CB, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBDBCC1, 0xFF1D1D1B, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF282538, 0xFF252233, 0xFF242132, 0xFF282536, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262334, 0xFF292639, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF1E1E1C, 0xFFB9B8BD, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC5C4C9, 0xFFBBBABF, 0xFF1E1E1C, 0xFF000004, 0xFF262431, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF292637, 0xFF272435, 0xFF272435, 0xFF282538, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1E1E1C, 0xFFB8B7BC, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF252235, 0xFF262336, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, 0xFF272435, + 0xFF272435, 0xFF272435, 0xFF282536, 0xFF272435, 0xFF272435, 0xFF272437, 0xFF262336, 0xFF272532, 0xFF000004, 0xFF1F1F1D, 0xFFB6B5BA, 0xFFC3C2C7, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF1F1F1D, 0xFF000004, 0xFF272532, 0xFF262336, 0xFF252235, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF252235, 0xFF272437, 0xFF282633, 0xFF000004, 0xFF1F1F1D, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC3C2C7, 0xFFB8B7BC, 0xFF20201E, 0xFF000004, 0xFF282633, 0xFF282538, 0xFF252235, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF242132, 0xFF252235, 0xFF282538, 0xFF282633, 0xFF000004, 0xFF21211F, 0xFFB5B4B9, 0xFFC2C1C6, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC4C3C8, 0xFFB9B8BD, 0xFF272725, 0xFF000004, 0xFF262431, 0xFF282538, 0xFF252235, 0xFF242132, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF252233, 0xFF262336, 0xFF282538, 0xFF262431, 0xFF000004, 0xFF262624, 0xFFB6B5BA, 0xFFC4C3C8, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC6C5CA, 0xFFBBBABF, 0xFF31312F, 0xFF000004, 0xFF23212E, 0xFF272437, 0xFF262336, 0xFF252233, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF272437, 0xFF282538, 0xFF23212E, 0xFF000004, 0xFF31312F, 0xFFB8B7BC, 0xFFC5C4C9, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFC7C6CB, 0xFFBCBBC0, 0xFF3A3A38, 0xFF020106, 0xFF211F2C, 0xFF262336, 0xFF272437, 0xFF262334, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF262334, 0xFF272437, 0xFF272437, 0xFF22202D, 0xFF030207, 0xFF3B3B39, 0xFFBAB9BE, 0xFFC6C5CA, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0xFFCCCBD0, 0xFFBFBEC3, 0xFF585858, 0xFF000004, 0xFF1C1A25, 0xFF242132, 0xFF2B283D, 0xFF221F34, 0xFF232031, 0xFF2B2937, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF272435, 0xFF282536, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF282536, 0xFF272435, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF2D2B39, 0xFF242132, 0xFF221F34, 0xFF2B283D, 0xFF252233, 0xFF1C1A25, 0xFF000004, 0xFF575757, 0xFFBEBDC2, 0xFFCBCACF, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB7B6BB, 0xFF7F7F7F, 0xFF030207, 0xFF0F0E16, 0xFF252331, 0xFF242132, 0xFF2E2B3E, 0xFF242134, 0xFF211E2F, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF252233, 0xFF242132, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF242132, 0xFF252233, 0xFF262334, 0xFF272435, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF211E2F, 0xFF242134, 0xFF2E2B3E, 0xFF242132, 0xFF262432, 0xFF111018, 0xFF040308, 0xFF7F7F7F, 0xFFB6B5BA, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFB5B5B7, 0xFFAEAEB0, 0xFF16151A, 0xFF000005, 0xFF212028, 0xFF2A2835, 0xFF1C1A28, 0xFF2D2A3D, 0xFF262338, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF252233, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, + 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF262334, 0xFF252233, 0xFF272435, 0xFF282536, 0xFF282536, 0xFF272435, 0xFF262334, + 0xFF262334, 0xFF272435, 0xFF252237, 0xFF2C293C, 0xFF1B1927, 0xFF292734, 0xFF212028, 0xFF000005, 0xFF17161B, 0xFFAEAEB0, 0xFFB4B4B6, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFBBBABF, 0xFF7D7C81, 0xFF050507, 0xFF000004, 0xFF212026, 0xFF2D2B38, 0xFF252233, 0xFF262338, 0xFF262336, 0xFF252235, + 0xFF252235, 0xFF242134, 0xFF252235, 0xFF252235, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, + 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF262336, 0xFF252235, 0xFF252235, 0xFF242134, 0xFF252235, + 0xFF252235, 0xFF262336, 0xFF262338, 0xFF252233, 0xFF2D2B38, 0xFF201F25, 0xFF000004, 0xFF050507, 0xFF7D7C81, 0xFFB9B8BD, 0xFFC5C5C7, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFACABB0, 0xFFB4B4B6, 0xFF4F4F51, 0xFF040406, 0xFF030207, 0xFF1D1C24, 0xFF272533, 0xFF262334, 0xFF272437, 0xFF282538, + 0xFF282538, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, + 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF272437, 0xFF282538, 0xFF272437, 0xFF262336, 0xFF272437, 0xFF282538, 0xFF282538, + 0xFF282538, 0xFF272437, 0xFF272435, 0xFF272533, 0xFF1E1D25, 0xFF030207, 0xFF030305, 0xFF4E4E50, 0xFFB3B3B5, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFAEAEB0, 0xFFB6B6B8, 0xFF4C4C4E, 0xFF030305, 0xFF000005, 0xFF121119, 0xFF1C1A25, 0xFF211F2C, 0xFF23212E, + 0xFF252330, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF272532, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, + 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF252330, 0xFF272532, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF262431, 0xFF252330, + 0xFF23212E, 0xFF211F2C, 0xFF1A1823, 0xFF111018, 0xFF000005, 0xFF030305, 0xFF4C4C4E, 0xFFB6B6B8, 0xFFAEAEB0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC4C4C6, 0xFFAAAAAC, 0xFFB7B7B9, 0xFF79787D, 0xFF16151A, 0xFF000004, 0xFF020106, 0xFF030207, 0xFF010005, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, 0xFF000004, + 0xFF010005, 0xFF030207, 0xFF000004, 0xFF000004, 0xFF16151A, 0xFF79787D, 0xFFB7B7B9, 0xFFAAAAAC, 0xFFC4C4C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFABAAAF, 0xFFAFAEB3, 0xFFAEAEB0, 0xFF797979, 0xFF515151, 0xFF353533, 0xFF2D2D2B, + 0xFF232321, 0xFF1E1E1C, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1B1B19, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, + 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF191917, 0xFF1B1B19, 0xFF1D1D1B, 0xFF1D1D1B, 0xFF1E1E1C, 0xFF232321, + 0xFF2D2D2B, 0xFF353533, 0xFF515151, 0xFF7A7A7A, 0xFFAFAFB1, 0xFFAFAEB3, 0xFFABAAAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBAB9BE, 0xFFABAAB0, 0xFFADACB2, 0xFFB5B4BC, 0xFFB1B0B8, 0xFFAEADB5, + 0xFFABAAB2, 0xFFA9A8B0, 0xFFA9A8B0, 0xFFAAA9B1, 0xFFA9A8B0, 0xFFA8A7AF, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, + 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA8A7AC, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFA9A8AD, 0xFFABAAAF, + 0xFFADACB1, 0xFFB0AFB4, 0xFFB6B5BD, 0xFFACABB1, 0xFFA9A8AE, 0xFFB9B8BD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFBCBBC1, 0xFFB4B3B8, 0xFFB2B1B6, + 0xFFAFAEB3, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFADACB1, 0xFFACABB0, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, + 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAFAEB3, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAEADB2, 0xFFAFAEB3, 0xFFB1B0B5, + 0xFFB3B2B7, 0xFFB5B4B9, 0xFFBAB9BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000} +}; + +uint32_t *getdefaulticon(uint32_t *w, uint32_t *h) { + *w = width; + *h = height; + if (idx++ == 5) idx = 0; + switch (idx) { + default: + return (uint32_t *)icon0; + case 1: + return (uint32_t *)icon1; + case 2: + return (uint32_t *)icon2; + case 3: + return (uint32_t *)icon3; + case 4: + return (uint32_t *)icon4; + case 5: + return (uint32_t *)icon5; + }; +} diff --git a/src/icon.h b/src/icon.h new file mode 100644 index 0000000..f8402b9 --- /dev/null +++ b/src/icon.h @@ -0,0 +1,10 @@ +#ifndef ICON_H +#define ICON_H +// clang-format off + +#include + +uint32_t *getdefaulticon(uint32_t *w, uint32_t *h); + +// clang-format on +#endif // !ICON_H diff --git a/src/util.c b/src/util.c index b63c637..3d39b36 100644 --- a/src/util.c +++ b/src/util.c @@ -6,25 +6,25 @@ #include void die(const char *fmt, ...) { - va_list ap; + va_list ap; - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); - if (fmt[0] && fmt[strlen(fmt) - 1] == ':') { - fputc(' ', stderr); - perror(NULL); - } else { - fputc('\n', stderr); - } + if (fmt[0] && fmt[strlen(fmt) - 1] == ':') { + fputc(' ', stderr); + perror(NULL); + } else { + fputc('\n', stderr); + } - exit(1); + exit(1); } void *ecalloc(size_t nmemb, size_t size) { - void *p; + void *p; - if (!(p = calloc(nmemb, size))) die("calloc:"); - return p; + if (!(p = calloc(nmemb, size))) die("calloc:"); + return p; }