From 4e9f15965a9aba66833a1b377094d8b1544f155c Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:33:51 -0400 Subject: [PATCH 01/29] mem: Fix inverted condition in `buddy_allocator_alloc_bytes_non_zeroed` This was causing the procedure to find a block, then find one again, or to not find a block and not try again. --- core/mem/allocators.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index 21e69c463..a40ab245e 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -2315,7 +2315,7 @@ buddy_allocator_alloc_bytes_non_zeroed :: proc(b: ^Buddy_Allocator, size: uint) if size != 0 { actual_size := buddy_block_size_required(b, size) found := buddy_block_find_best(b.head, b.tail, actual_size) - if found != nil { + if found == nil { // Try to coalesce all the free buddy blocks and then search again buddy_block_coalescence(b.head, b.tail) found = buddy_block_find_best(b.head, b.tail, actual_size) From 57e2d8f1ddf356a0bfabec7630c1e7ff0199f800 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:36:55 -0400 Subject: [PATCH 02/29] mem: Fix `Buddy_Allocator` size calculation to truly include alignment This didn't take into account the size of the header plus the size of the allocation itself by virtue of `align_forward_uint`; this could result in no change if `size` was equal to `b.alignment` because the number is aligned, and if `actual_size` and `size` ended up being equal, no additional space would be requested. This meant that a block would end up being allocated on top of its buddy's head. Fixes #3435 --- core/mem/allocators.odin | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index a40ab245e..e3b96a8f7 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -2247,12 +2247,14 @@ Get required block size to fit in the allocation as well as the alignment paddin */ @(require_results) buddy_block_size_required :: proc(b: ^Buddy_Allocator, size: uint) -> uint { - size := size - actual_size := b.alignment - size += size_of(Buddy_Block) - size = align_forward_uint(size, b.alignment) - for size > actual_size { - actual_size <<= 1 + assert(size > 0) + // NOTE: `size_of(Buddy_Block)` will be accounted for in `b.alignment`. + // This calculation is also previously guarded against being given a `size` + // 0 by `buddy_allocator_alloc_bytes_non_zeroed` checking for that. + actual_size := b.alignment + size + if intrinsics.count_ones(actual_size) != 1 { + // We're not a power of two. Let's fix that. + actual_size = 1 << (size_of(uint) * 8 - intrinsics.count_leading_zeros(actual_size)) } return actual_size } From c2f3d074e34eecce2bb7dc2cf11ef2d5d65c019d Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:36:14 -0400 Subject: [PATCH 03/29] mem: Forbid construction of `Buddy_Allocator` with insufficient space This takes into account eventual alignment. --- core/mem/allocators.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index e3b96a8f7..a5a7d9951 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -2239,6 +2239,7 @@ buddy_allocator_init :: proc(b: ^Buddy_Allocator, data: []byte, alignment: uint, b.head.is_free = true b.tail = buddy_block_next(b.head) b.alignment = alignment + assert(uint(len(data)) >= 2 * buddy_block_size_required(b, 1), "The size of the backing buffer must be large enough to hold at least two 1-byte allocations given the alignment requirements, otherwise it cannot split.", loc) // sanitizer.address_poison(data) } From 7022ad8378e307a70c436901c3d2870bf1e38a77 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:54:12 -0400 Subject: [PATCH 04/29] Add test for issue #3435 --- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_3435.odin | 38 +++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 tests/issues/test_issue_3435.odin diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 76d8f58b6..4a1072e12 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -17,6 +17,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style ..\..\..\odin test ..\test_issue_2637.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_2666.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_2694.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_3435.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_4210.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_4364.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_4584.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 305329e7d..03d84425a 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -18,6 +18,7 @@ $ODIN test ../test_issue_2615.odin $COMMON $ODIN test ../test_issue_2637.odin $COMMON $ODIN test ../test_issue_2666.odin $COMMON $ODIN test ../test_issue_2694.odin $COMMON +$ODIN test ../test_issue_3435.odin $COMMON $ODIN test ../test_issue_4210.odin $COMMON $ODIN test ../test_issue_4364.odin $COMMON $ODIN test ../test_issue_4584.odin $COMMON diff --git a/tests/issues/test_issue_3435.odin b/tests/issues/test_issue_3435.odin new file mode 100644 index 000000000..3830869ed --- /dev/null +++ b/tests/issues/test_issue_3435.odin @@ -0,0 +1,38 @@ +package main + +import "base:runtime" +import "core:mem" +import "core:testing" +import "core:time" + +@test +test_issue_3435 :: proc(t: ^testing.T) { + testing.set_fail_timeout(t, time.Second) + allocator: mem.Buddy_Allocator + data := runtime.make_aligned([]byte, 64, 32) + defer delete(data) + + // mem.buddy_allocator_init(&allocator, data, 32) + + // Bypass the assertion that would normally keep this from happening by + // manually putting the allocator together. + allocator.head = cast(^mem.Buddy_Block)raw_data(data) + allocator.head.size = len(data) + allocator.head.is_free = true + allocator.tail = mem.buddy_block_next(allocator.head) + allocator.alignment = 32 + + context.allocator = mem.buddy_allocator(&allocator) + + // Three allocations in the space above is all that's needed to reproduce + // the bug seen in #3435; this is the most minimal reproduction possible. + a := make([]u8, 1) + testing.expect(t, len(a) == 1) + b := make([]u8, 1) + testing.expect(t, len(b) == 0) + c := make([]u8, 1) + testing.expect(t, len(c) == 0) + + // With the bugfix in place, the allocator should be sensible enough to not + // fall into an infinite loop anymore, even if the assertion is disabled. +} From 2c40a198fe8755640506d7c61544b79ea5f55ca1 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 16 Jun 2025 18:51:37 -0400 Subject: [PATCH 05/29] Make `check_all.sh` executable, fix two typos --- check_all.bat | 4 ++-- check_all.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 check_all.sh diff --git a/check_all.bat b/check_all.bat index 83c7deaa9..c5f7ee399 100644 --- a/check_all.bat +++ b/check_all.bat @@ -1,9 +1,9 @@ @echo off if "%1" == "" ( - echo Checking darwin_amd64 - expect vendor:cgtlf panic + echo Checking darwin_amd64 - expect vendor:cgltf panic odin check examples\all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:darwin_amd64 - echo Checking darwin_arm64 - expect vendor:cgtlf panic + echo Checking darwin_arm64 - expect vendor:cgltf panic odin check examples\all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:darwin_arm64 echo Checking linux_i386 odin check examples\all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:linux_i386 diff --git a/check_all.sh b/check_all.sh old mode 100644 new mode 100755 index fb32b8cc2..568ac55ba --- a/check_all.sh +++ b/check_all.sh @@ -45,9 +45,9 @@ wasm) ;; *) - echo Checking darwin_amd64 - expect vendor:cgtlf panic + echo Checking darwin_amd64 - expect vendor:cgltf panic odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:darwin_amd64 - echo Checking darwin_arm64 - expect vendor:cgtlf panic + echo Checking darwin_arm64 - expect vendor:cgltf panic odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:darwin_arm64 echo Checking linux_i386 odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:linux_i386 From d307e44948ba056c84624d5c5592290e2b4d7cf7 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 16 Jun 2025 18:53:19 -0400 Subject: [PATCH 06/29] Add `*.a` to `.gitignore` --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1187596de..c85ccb4ad 100644 --- a/.gitignore +++ b/.gitignore @@ -277,6 +277,7 @@ odin *.bin demo.bin libLLVM*.so* +*.a # shared collection shared/ From 6377afbab7cbc72ee891450dc9e7137d298d0ac9 Mon Sep 17 00:00:00 2001 From: Matthew Pohlmann Date: Thu, 19 Jun 2025 20:15:09 -0700 Subject: [PATCH 07/29] - Update SDL3 from 3.2.10 to 3.2.16 - Update SDL3_image from 3.2.0 to 3.2.4 --- vendor/sdl3/SDL3.dll | Bin 2453504 -> 2462720 bytes vendor/sdl3/SDL3.lib | Bin 269054 -> 269054 bytes vendor/sdl3/gamecontrollerdb.txt | 123 ++++++++++++++++++-------- vendor/sdl3/image/SDL3_image.dll | Bin 288768 -> 289280 bytes vendor/sdl3/image/include/SDL_image.h | 2 +- vendor/sdl3/image/sdl_image.odin | 2 +- vendor/sdl3/include/SDL.h | 2 +- vendor/sdl3/include/SDL_events.h | 2 + vendor/sdl3/include/SDL_gpu.h | 20 ++--- vendor/sdl3/include/SDL_hints.h | 8 +- vendor/sdl3/include/SDL_init.h | 2 +- vendor/sdl3/include/SDL_pixels.h | 2 +- vendor/sdl3/include/SDL_render.h | 3 +- vendor/sdl3/include/SDL_revision.h | 4 +- vendor/sdl3/include/SDL_stdinc.h | 8 +- vendor/sdl3/include/SDL_surface.h | 8 +- vendor/sdl3/include/SDL_version.h | 2 +- vendor/sdl3/include/SDL_video.h | 20 ++++- vendor/sdl3/sdl3_events.odin | 2 + vendor/sdl3/sdl3_gpu.odin | 46 +++++----- vendor/sdl3/sdl3_init.odin | 2 +- vendor/sdl3/sdl3_version.odin | 2 +- vendor/sdl3/sdl3_video.odin | 8 +- 23 files changed, 169 insertions(+), 99 deletions(-) diff --git a/vendor/sdl3/SDL3.dll b/vendor/sdl3/SDL3.dll index 3bbfd4be8a762b582a3d8f0a932d31178ac9ed9f..63f5b22ecbe711493313acd305ed1b8dd36b59dd 100644 GIT binary patch delta 672350 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�o|JePEg>Cj?)~CIYrK+ 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±VMJP|HkP`K#$;wELHh2YMq~YKgK1%&X3_L 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 (oa7$75Vh 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%0AF^f#x~+D&b16XOAFJm&+#fYV(}W;iCm|?AxJw}j z6GBKZ%y!{TUhr5Vgl};c@d*Fx{8JKwZ1U`OQWMA>t!r6UCS*GUKp5g}3t z!h{eKOgo@iS_o)@ctmSW2w%LE2vLcm|1Tl@z@Q01yiP(;i1+~Kr))ODgb)%;J7!v1 zi0;K%#3NQ;QJNTyml7ccQ}llc(a*Vcj0J-x1o1ivK_TM)6%v9lA%p~j&j5PU8U}r} z%21n+*!CAJKz?K_8{rY1oUxbgjBrV9LY)k+J|2Tth2hMNkGWLUjc1HwM$bVoEAho- z|0+w~!PksqK|Uo>5h8n8vVo8CeWP@KW}kaVB1_(41y8LoT1vQ8LXqQG{R(7RgRA$^ zQ@qb;onMWweshi$L6f(by~u;#BV5byKF=DD$)?9{d=q{xALE-$88l;#+q<=L^Pz-% zks&|V&cdeXj3BXOtQzXV)OVNqYAduA6&F)K$_po84@(4pYXWBHs$AmlOkhn|qX<4B zh57S?6Ieyhrx$4bNS9_;z$AWc0+yZDx8N005U2e`9+`qTgIZ9Wdd#Z@Uq$qt7kEC= z3z{qXoaVg#M9^zp;Qc0o-nKbkG?9g}N6q-*iOfGZ8Pj@d>kjRoiLzjmjX^~IM6$<6 zh$iwOU)2AJ%#f;VYcpDa4&+gjSOr~I9zTisyFNE!(kFY(N}e)_)vGvpAKCc}A5-lp z*NlHPi6u9cFK20gFYKh?9|;?NTTWG`S+Q(W$D_~|d!MLqSYYgZ4Ms-z3Ep5bi({_8 z@hOv8f48e}^`;dpozt({?@63Z#38!vPx04tcQ^+plN$(^Q#)nI>quNuqhTY$YDw0K zKG?N`O@cZYn`UXP<%#AvIEu?}2YF4YhOG#2@%{sBI2bTj#oxS3Dl>aeM~d3mO+SU3 zrR%7ap-v|nudk)|e(+%6NR?=^bGRAx$lUv4|XrM+nE zsCSr9DG(Pi%|cG22c=9pq>(0L#{#s4c^QSi6PtX|VAU;kxOKVzAiAjzaaVQ0HX7^v z6zbeyCKu3xgdFxn${9M`u!ut9vO8kOQtYLKY<^}c^EG#zhPT7fw)q(l!Wx?sXOsSL zLBs_Ae0aVsKaKgNSHc3nT*nz^38F6<&&i$be0c-mRls_sF)4wLOn*IV#0t-UA36 zvtZmP+K5zmdR3%cp&_3!!O^xCmLtDG(NjlbtBEah8#uv5NJ!WHh$X8qgM2kcU;`9f zDhK1zHyLD&U1Z7bfJ@P0IWB-(i>%UjK6Wvr+p}M}brDiZb(4NpJ?8E}G&qQ%jl588 zv~4k^6leY5>`MGf)oVeRU~?7UpK@`@{7VA3X8uKY1d$x*?DOrni zU*?bx9P1Loi;bMxCdFg64=RRjKAq@?RcIM@d0M< zj1+T>3%A~7zWzbese{7BB8O0J>%gD-9&)&sDs1^sZh8+J{c($U-}hKh`XTrnhsvo^ z?feN-hBHUumWHguu2fN{m@*E(LL`?oG{FK9j=6W3`snEj#JyY8->6zTogh5+{E%Q% zMM!(MWRc=mej=1Eaf-gd9=$t6YK8dD_3IRpRP}4h>5}?&<{+w2OS2OsCNrZev# z%K_O_n!Z#$rS(18yETziWAPV&_a4mmPG>dJf7@Tu6P}@fSjBq=bck|*NaqL1se?Fd zfWg5ajNsI({w(Le$SDr|n}G9+T(gVKeLKywrifdZuciG9y>T8$gyZ}Ry^I$1@D$~- z2QHsJ3CciL;%vOf4A!vf??=rzb(A~TeYVH)+@m(@_m~8NI(|ILKc0bwwn}{Fbmmh( z_-mP|AJ(f(wR~4*sU8QU5sn&dA5^EaP+}#zI(5#e3enU#r|(3jBFEWI ziamMu9B(MlKJ6TtcFiz?E935wjRgWlJKpIwjM_} zYP_7q>f?~h_HT7ns{K5XHW|trPA0*H5QZYEbEELcyHqup=vEa^UT{$7&F7{w4}$(E z9ZO6L`FH6^31F@nEGaw+-;Pc@F41S77Uf{lX~?bM!cn_Mr3=g`SwQ?rjE5iJmchJr zx%_wr3y6E)ZkM5l+`k9vi%mlfE)a+0q+Kp_yB<{Nb_iK%d3|LMDQDSHQ86Wf8+1{F zML`|jD3jIl+lZZhmaIp*cd@fMUmTQ!zT((chmX%>jhQiyf0~KIiWisgSD7pZ>T5ll z1%!DWD``nhcO$8S$x;rB?AAz*8lXasq8||0wGaPbHuhq7tIapfX0yXXfR5gZ#@V{8$*Jl*Qi=~eUhwW z{*r3!3aS{>Tk1i!)fiib>}uf;pTD2Q-bx>s+CB5NbcG$0`C9tIZkqX8I>Qdid@a3U zdu6^>?yxtY#bBTQ3fOe;kzshD{f@N%ey8a6@aFWM`I@@z^pw<*Sw|{ly)Hj>BwZhv zZ3@i7L4prv$E43>${RKSj~!6}H?&^~0D5N)c%=3_%bt+-yG8pwr2Tf#1e!&^i>o7r z2KcLjKR5j8@fV4|TKM~Gh8J^rHiNko;g3u~e0I1N&gU=Yu(}?P;3*pgA^W((Nk@3d zT-LBcQ8LZhUlj*x@?mpXLeO%0C(RaSft?VXrtoliPk9kvllPd1mDsSFyy84o-~W!h zy=pCWKQuF69UFh;%}7bE!dhLiZVBXz=dp&CL6Q|ShGpgMRX3H;7*I)8`OmRNL`enM z`Mu$M+9CQ!hq+-s3u4dAyuo}N;W(~=Iod_x1+#`oS72Cd#?zf~i|9HKJ@yz*;2E9$ z1j-kDx6Xij(_*Lb)4ydB6o7n8wb)F{!5h6dER9A~V=w}W4NdUBFk!E!%~+QRC#)Te z0eGOTSWBS-@}y{DnmR?gHkYJ^=Au(o$@OL_D-K#N+>&Lt|{l zPIy4K;(?~U-%NNIXu`w-%+8<+_Bd^#1#&o6pKuBb;+Rl1lhuT&W8*v=H4#VPnT{H! z0Y%gs{Y;)1gw18eh6fO!*zgGd!!4cqEHznKWnTjccGidPe^ZVN<+PU=$lF?3%>WyP zuApMF8ZIS}esfcU#R%FyYc-5aHfx5+j7wDS>zq=pQODdf1JHbUqh z#m2VKJP}2;;<#ZPg6W^f9$bB7jK`bUVAw(GjsLJ`2q|P?D5y9Gi8gMe?V^#*(@ivLxAW#{LwKoiC z|DkvnMyL=d1L-+hZkjdjh}RGeh3f#xGy0eD=ik21D!0l$Kx5lw0%_lM_;SBQeI3rDLu3bsmkzD)%R_kc<2YLXL@f0Bw*jb+!JZr zpsX%f_nP~|^z*Zkb(Hcp#^lyO2^t+%A7!wvS3ZB7@`=aYgtrI9*-T z4=sa@Aaote@*`H9NwQTGEvOaYQt#w^*Q&hsLRQnXJQo8f?MQq>UZZ_zy=TW2-hUxG z%O3mk&_!%*l?l*B)NUPaAfxN(;=;s0Uw&&5t68A})docPa1VE1j9s*o_VAF!IIQu@ zAvyd{dhLVYv2sboj4#fCg9<0aqh`&0fXiBN?}6e<_%Bx+abXG4LVNf}Td)-B3x2Nn z{lG8kf}^lG>dgKH)Uwb!N6DOv@w>4A`gAdC-SB}ogv&adi*T3Jn$!gPAq+DoVd5zT zWgDvlP<+`5NZa_6r7Vnpu!NOoUwL!BgoWyRd1Jj~8LP%`FJVJ}A*)$#6Mc1zjN>amWC1Z>>~yrT z#v;NC=+^dO)RL={4=!rV1!BmpH}t7d3lmmhA_&!(B-kt?VmJ!VN7)tZwFg6)O`J5+^dEW?WY>h1i_ z&vq`Bu?Z}8JMXg`o3<)$=ZlxKK@~@+4}=%bAT5@#-YjP=qh9QlHEJtp&~rrepaF$D zW04rD5;??lQ&AQ>1uvsu)C=sdG;P?+r>tPD+3T%*_X?!6V=KQ;zwtMDEzX{M6}F)v zIkggYZEf79r{VHa8{S|gtCQR>hgwIz*jeCCyM=s?89o88?zmwge(0a<_m3Vk%%yi& z0;$rNZhD&7XI-`o%L_lh*X1N;8D2iI8V0oCpRQ!dHS)=L-_seZjm=yTFV#y}Wj6|b z!=u*R<0E`-U2Glbf&tZbqbNx9rO?RBQ?QhrZ)uPx`l81w($g?7%&?_3PyUGcmrEkd zx4ZDvk61)d3L=Y5o8^|GI_UF8;~o2RicM|tfQ}6lxvlxxk60ADzLr;B#ro;e`S?|= zcKKs(TG<1X|Lc#ePPtdXP)$v+ zx`pF6IvYoCx?bg{K4F2C0iW%kZK~cq~!dv{!C#*@8Kd$+Zw)fMl1VW2VKV9SP zR(bmp2;fZUQf7pJ! z;Nk-4i$K@otr$g`?uwP~s2R74O{+jjv>n&N=UnBh*07k$b+%IrHF@Ai${u=|KVE|q z7K3;28f#hAwmqnc!aRUcv^gk4>2dJD!Y!@bUG|TzhaAATPEno9pV(us=ATnXkR56k z5gvTXTGqz@GUf|xXRY%e!&L*uoht*V@}!}2FA%4{%sICfTVDF~UuSmNU&h?rn;MHX z>lTs{dqc|;Z3@xECiQ~S!pjiU@It?129#G5_=C~>qxZ^+x_k`p^C@f9 zyah#w>(iqrG1jM-&OIAr2_|3otCuE?>7^3AB!@M|1Wmrshw}VSS? zDeF*Y<|^irfxmh9`v89*;%_DX*5GeF{x;%o+p3(QpRt}gmKx6Yf6nU1i(P2v;pp7Z zj%op0+^>w%!ln|#7WvU_dIpAl&<|$NyP}SQ>@A9*RQP6@nTF=%q6#Iqs z*eE%)3HSQ~-SLo5dG;4@HWcwG-}40Xh)I-!k**g>`8SdwvVD5Np*H4HAmu@`rt<;wKGvA)xeR|5XoX}P8iL?`H2mz-iT^; z?O_)Rj*%CLuW`Ct<|=n9*xX8z%DrdLRYjFlJ{VL|wY8*HOBTvi5yGIE4TSMk6W;4< zw!ZH#4UsE4`qEe8f42o;#aY>9mb@h;tBJzuaN91~DTE;PF8INQwX$M!N2TK+ z$w7i`lpMxJ1QFVhpWT8Q`$s+gdJB7R#JRfvD%J(fG+npFY^8X=rK4Ee{$fvYfSTRx zgde4g^&M1_ev*Zfd`nGr)+LNOA^h@I=09T8zmqC!PwLwZU~?@=>f2lPq`Il3^1z^y zs;MQlO0rN=VJfLF2xEN%-gg^Y!UF5^2iur${PC|qtQ_IU!||JT;54u!@_8^Q;1F~Z z)C$&176R@nS&Ul=V@v&<ZE5*r$E=gCeU?Z&`(w(lqpq zW?Dhzi={u?lYH{IOmYnv;QqF(c#RH$x}1rUgHkMz9L5<0F+G@P?PNXrwz9+bl<;?H zDmYBRQ| zcb5gRgW(4}+t6wbM7GAJh;ElEOG5)7l|Hd2Fg}{+?!q>~-u&(^)|7po#jEdT4ayz* z81UQc@WkEBhuzBJBX_eJ6*hnvjiwxx#24;nW4uiluHigfp(Y0+_;Ce z2%I*XQguH@;l)R=h%`82ZI@ttnRw!(Hrx2iY(8QS_NyJNNru`P_?Hn+u%(DDukJ5( zROK@WFtCX%f*|s8Qu(S~Ng1nT8Tf-kDQPMi`zhjic!hXKOZ_E}@%5)bc@;z+XpR+L z#2{hGp6W`ykr!Nl;WL~ESCaQ#B3heGCa0z~rYc4v}iq=lH6#&L68- z>uSV7A*FadHS!6`n*v@PNzyp%!=JqFwW;lEqlK1{flcd+%q-L&y7T9n=tVdLU|Qy;BnLtO|9clO#cC zXn(_HI(@;Q(%BWM(g|^-b5*h!TM$O`K%TdsjbVC!9)18j|IYaF(FfQ_&oAjyJG_ToGGM0XJ3@8~a>D{<-2#W=I3i=U{$ z1%%k^JN$nCXjl67ffa|2- z7JZy<$16nVD)9y@yn5h}&B*u;!Mt6A+RyQ#cuL{h08QW^3Ywr&z@?Oi>q|8_2;?^$ zVM_@WFGmr87Vk>506^`1h80>`=H$PB%No0%_|Ps!xd`fte0ZBf*yJ){3ZHO@{n2-? zFRBimUQiP^I>WY29*Fu4^9bqfCUM-F69?< zQTdYI&T%_}c@;MJX^!_%_O`D7<_2V5iyl8?_3aEMlbee76s5hL5+z&}<%pfqN;FrL z06Qf@lu;C;of0E<)aTc~XTAI8RW79^D?}AP)pBIQns3jwIJ;Syj7FYbMu_3GQpo{qYQvU+2Qh9IZ=A;x*+UPWk;lB4 z>ny$^kJYX?5!~QefF>+1%;e@@SXF*IkF{bwJ-GP<7)Q_K%}=ng$@?o3V^%Q0ijTL8 zY_)AtKH{12+R5hrL|mJJoz%yo524k&MDCPnFVw=tVT9qCq9#~(QWUXy27h{jC9v@o zdDKayVwu5vp2U%^iWT`fdKc6Ao|9}O%b3n<i0Qm#KC?Bx{N8_(SqW%S7nlbT zhUdq4MlzE0^?Nyg|16@^6Myy0b zq3*wuWT8UsELn`z38Pv?e7znkG+{f0a??*==&l%zY;y`mb&sy1+40jSFW)3i&K;63WWpHWG8NXz5oDi zt2(OV^IW?SL&?a(WiDV)LiDMls^dAZAfO$>3x7bKQ3lhfjNhHYYoBFxs_a8D)W4<0 z!r2RawTa{@eBfCYkUn1vNS$DhVw{432(lnLoB~?gpi`|+0;Tyn1gh^4Xj_&PsF_2c zMYWYc<&;2+5w5z!%7o$R25lTKbVok1?Gq{Rzt6Hkfx0wVYZicjsRh|qLP4@sRONR& zmCrbb{V<7T`H^#|ut}-h<2OIgtf{Uqh*E6GCnnJHO}I|yTYIavamvCu{eV`wz8 z;*X)gU0yN)nZMDF6hbq6dr}gU!J<@l8eOH#V2mS;3M!2xg6WJj$P%_75qkz#O>~qe zidgnP^C$94Ke0&GX(IQ!z?zw=C>GKOSQeu)2$zX`;05@RnVZ6|T!7P;;VJyj3(UXi z+!P0zXsMpHXt$^rs#6jSB-sm9N#XGqSqpY`0-tk{jjD2_Zh4qZWL&+RNj8~y9M1o_ z$ks<~#4FBlV}gD>#E+eOM=p{a1QiY8GzCUbU>5}LUnfQVBxo8s8#Tu^V?4ioiH$8c zix|Jw^B$Mk+vP^cSbBc!GJD#$zl+x4OqF^!z&sMk9$LYk5r!Ol!M-y?7HlPl{q(jU z73>*tdk?Wt!CEAX@xd%$+}H8SS6Ktk7BowlZCe1*$QYf`mv_F(#&jO{#;m59;$^aB zDM}Y~oN~JBj3_HHX~erTRVM2R236Sapo^wtf8A|Q_Q+IjxW*O@jG%mFp`+74A|wZa z9D7fKvlIxRY_?m}JA=Q9_(0K#5M$lhUBOX@so=(q=8bQ#K>gc) znt6{Ktb_jCYcpSS11ovAM)5;8Sd@Mq2)diBO0@-}q(s!^K_b}!N{LcN@z9%KEDOfK z6RZmJ9mVI}#PZqWS7x4b6H7mJI`CIFSxxX(#$_4 z!rl@5w_7Zv;&(62G8Kp|W{n^_qmlm23p4Nf3mY1@;ROY1wnb#C4U@2KMVc1a$5<#% z4yQ3+Gb+|;Az~M(cn*g2cBA6c;rz`ntiEeD;1aA;1z&fQdFdx2l@7OA9sR36%zVOa zX4V@(`S3Pt?)Uv4W*9S;>?xMW0}%k4aS@17co6%C@jJKKqy`(oaCpVKBdPm!<2!2SdN#fM4&ana`q!7f(<&^zb$iI+o}ht)s)&j@Dt7t)mMVRO{G;#!juHmSmBw zL$Vk{38Ue2e(oL%P9KJq0C=$urkm=pj~dHt@OW5kngN+)vSVek-=rYQD;Gzy-)yia zn~zZ*4R0?PRI-(|WZ#!8lWxD-AMi*WfWKpNgdM7&WcvqWBxDOGTBpZ+R}rh3ez7lA&d%rndswJ%x5mO{ z0L;@bAJ}CkV{#q1WC0u>i@23lS~RtHe7#-v5fa>V9t^4gLMT$_C)c4{*EjVh@F~C+Qv#D!0#wI>kqfzdCpg!CwUanrOc+W#m8I(urSI=Pw_#*@L?YR7F~qdprERatRL=wiyL@>r1Kf zTF6YBwRRCV!$^Z9abQp)ehwRv?49b8g*0N7EXF#7QTum(>|%Zfdkx6Ob9)C!%J==jt}^RwzWfEop_OsSvCTRd#awLKc^h4=)zIn| ze(-tTLAHf6Ly&CMr&4qp=Gxe+K9q5+KEhfTyUAg$HUdyFcM$Ew9o*5#yt-CzOMY4s z74D6j&bXrqcjprauCEjBV8XbB;gE*UV$@RLCJ=3yhWkx7!oBy4lsBUkE+gE;65OZu zb^xe9>mh8ShI>Wf{zkMnzbbhH+7oW3!mU{f_mjckyZ6{3?BU-qIdpe5rkVA^K8WxwrJwE_^{w25@op4XqL0GhgyF}scA=>F%N)KO2+%5{Y zNh#d1gq!ogp$F=$WhVzc3@40huqCLTy`ylGi8e~Z{Yc^#kz%cepRPIUp)BEcDZw4+ zg!@lzgr#Y?u?qKhqTz}x*+0Zf+_?&ON-5lR{lQm+;aaO_5l*-(3ByCf4N$mqi1zVK zgK3L9}KXZh*wyM~bx?_Fr|@!%zLd z7f^zG9ntOjJr#to_8RU{g}aw%1viwu=VU+GP2u)0g*%>b_Z2zxu*V5^Bw_sgO3Axg z;dUk37!CITXvL-nqyVeopDWJtx)N@;65I_=xGsb-Rl{ARaPQXwO|RjOkn+w~xa&&c ze%2R!4}N#ZJKG6&6=8U4xMLLVJff}sS?QsX#0^xq?MmUcBHZ~UxZRy_n-az*7(-NU zkqXyLv=$oflLXSk0aC2haObkK9xnC)UtkGt9Vgr~H4zr8;Tje0exjX&qYN6~+T)w9 z*wjPe&MSqRLbwND$7uEU)$o$~Fq$xK!cZc4Zz2HwPIsccqv2kNC)`J*0IMOm6mA8= z?NNez-U*ix#=9EsK85=*5Hy2^J73~j74FGP&U#qi8+?z1L*89ZxStS46%F@eg}Z=g zYvCq?^iWUgp_alOTMD-g;aW>@S2*D|CyZ}kiIE;=D%_exYpLN*Zbo|emK0z$R4j#i zxfl3qmEewc!aZw7SVs*vN#PzO+K+H%0eNf2HYMC%3U}K@XFW_J+;8vkC1v!c>Tgq| zUtqV9fb|qmPoj-eKwaC)iuHsfvl_aV0&*vyUa;4+3P3Bw_70&8VNBO>^$PcK0BGej z+;edxpiSXEzu+w3mp#GvQBykNG06Ecln~SD5$X%=~q~(Bw#-U)SGA%6j0aKGULxk zGOJ-mDWHl3)aR~4p>AEK3+OHQa^@_o+W<+6KO zjxc;Q+~T3Kpgthl=a*DLy|EB(U4@(bqjSdF5pH$~?o&j!SFE=PV>_&0(!&*nTZd?H zI3O!PKuf|sLV{WiLrdXahfyu+mf)Up!u`n)VeuO7PKBFGv`ZHi?uiJ(?Wb_dl){}t zxJQ0<=wXc$?s&qu3oDi6ovU#B5^bV}yHn!+L4a1nm*<`JP>FE+mEcZu!gVE#bPacq z!hK#HG&c>`BykrhTuUk3ja|X_$8Cqaot$t#BaEsVZexYJkZ50APA_9m1{1BVhPy=K9wkAoh7U^N-sl3pdL_7Jop3K!Ls+7Q z`(TKyXWtR+%1=t(NQpZ@;f9vNokqAve{tyHGNRk-Sqfp?gOy719#**hi8fioeSjIo zV$(|kv>MKyb=E^=!W~e8yTb{$0%2roxF0Fp7ga$sYPekDE>XCXO5tu!2H(qD4teJ| z;jSl)>Kg7l3U@KlzWPz=Ax`2pP`F;Da61t0k`mm3PPlCdV>hf{(nGAmtxvRQ4Y!KK z{eb|jhCKz&dbov;EYY9@H_Qq5vM<7tG+ZBr`#sUFomcYyAVPszQc2z?gJpdfNVGH!cdEpFO@LOzpJ$xq^&;FsCAfDG-CiHu34>EW6j$r~!%Hl=Va zguAo^cd-+06k+7R`Xza%D%=pFwbyXJmGT}ZK&#=_X=gp$P6S`W65O|)aIbnJtc!-* zMd2PJ+RtZ|ygY>3#Sn!%yA58D-PDA8gy++t}k zoFG7}p+YI#JFrniqY~WpPPo^-5Y|n@wJF>@qTM{Ba> z=5C4074GAc&hqZ)1im*{c^6L@P8%swpaxV=0j(g~H>Xv`1KLsrXsm!fECrN6K>VsB z<6cez#t_B|&WG{SfUE0yH^O5qMC+H?&!QQ{U8 zpw%#~6mB)b9Z`b&p%ZRp!mw(%?<(AXJV7&QxNGZ>ydNptYNc>@!3Gq?mmTsBcf#FF z7_~Iqc!j%?Xj}8O3fqWq!xiqqJZC+0CftuoaN9WHb|8#zVGNTVYAf6(M2pjK-;ubd z3D9a7SPEBk1YdXwuCEjBtx5>%rQsG2koDmd(SALt%ot3N0s1y?}Y0`7&Z-elfrc&nvaG% zMB;u-fL23HDcn6Bz^5z0UEzeg#RFlrHQbpBcNNjLpHO<}SDWN*rf`2d<}7bA;eLG4 zp@$SFTnk|whA~Wf=%sL*5-ncg)*lC2v8jLnZ8no-~_*wpy~iVo#gMS@INNvj${9ke`-SwzfLLq-h}`8j}G5|eqO`)5iuqBaZdP8+z>We!w*yVKNIcw5C0M0 z8lu5ZD+Rxb;P0lNcgWww3I9XFDzD*JRrs@rw*0^Nv+ekSrSKyOe_jcEbtm|6g4zh9 z`xND$Df|E;HvcdFGdupt@0`_hJsRwFOYq&D@PDd+uz11;{4>-u)XrR@UHblC>PgQw zjkV)XE`>jn@bk_&)bj=~_S&CDSodKp6aF2AKZI!0{*90C{|1`+{Yt^tAowxo(jE8@ zo$$R0D_g_Apzs;ds{R*0w5f*w!x3lo9F78eg%a@}Ilv73ZPrk0Yz8QPDmtU%`UuOJtmt?_i z0ddTnGtEyQqhpnFat`_HJ#_5SUS3c`zoTM-rOe}@#GOAb-1%)1T@wMgCqu3y2ia?ihajJ zObg)P_98IIQ@E)Z9BIS${Rza8i=dj4!}tG?P*Fb%JUH9MjX!u>SUj6McXQWQs z2sFDnxK5+vMnbg!Gkd%}AwdFXo3gXkCj4?N4VPUBM9|g4)+Pt&tv6w z=By3UC+pZ3+xe5)`pIm=dOos_eiZAqgBR4%$FRU1+*DWJn*F(zcdx6zUCtZBrZ}>b zw+_~)#^&Gn8`n!849Z2>!l#6-Y;j)JtMVT6ncfB7uCaS)K@fab=uZ~^61}$)cr4jH zD_OF$p9f${bIhNFsj4Y|R)*3;Ln`a_lSxUZ~(mxm{A>Op2J z&{mnjqRpn9#r5=&jBUThPdCs<*6A0hcUgnKBqa0W zR21}Yv#o?NT5Njq6`$J((Z)9C=NsvJvJbxE^~3bj*s5lHeVG0jn{CP&+gRUN#|qZ- zwN3Q7o@upEIPf;1Zeu81xPhmH>xY)xnB?P9SbGD%60YygJj(M%P4yR8N(L|6Oy9Bb zO`LGRC6$-O9`*28B+3UmjGLuBy%K#?pb(Yz=gexRAFN|r*5%x4u5Y7bYu0jegg&!e zkw5a(^Yfey5kO~;e&y+r`s(cbul$op{VVor6<^UxzoTjlW&$;b7`uWpsI0QSA3UgV z^_rX^t@S>-s$Q5i`#-|RtS_+L19!W6EnoZ ziLNe1jj*xa*xgQ=P9#4f#o9@uiBw)jFplG&M(dNR+<_Gc9@AO%TYK7MAAV+bg&Azz zSf1HV|B@vvg!w<7=Hbbx9_Nb!TJs4krsVZ7CVqn zwCK~>oB{l)1%3~|xy~oX>3?CJ{^nbI>iu|1C%xO?4U5cD^TEznPi3@TLS&D*-GX&4 z2#{_DlQUXRm&~>+XdGGJC-*DdRa=Mgp*tJ`@ znl+LTQ3ggWz_u)K&mwMkCyFRGMK0piqk`1Tqu*SLfCKvU-a{^)bmYRB;TW=yP+yG6aNlVz{Ch z+Wng$4g?C{r^0KN3isG^4H%&s%L>UtLRk%x57{Ww7GKTlkbN zdd>!&<{n-3Z%6E$Z-&EnIIG)%2mH`Ges-y!-Rfr#{m2s=O^;HQ@t--LZ||yK###*J z9lPmwvy379pKkiMBZF#Ey(8!E9&<90LwQ{(T|yov>OH0Xg#tmT7LQ70vBy?=s=I`H zZ$0+7iB+M z(Nx+$2!^8Zct|742s|82;_vs+H;V2?ga#nIO)NF>@C!ZAro#w&sDy`?^iU2D^Y9R3 zJ87|VSY}biKykakXGW+KtAKXh{&x^7qwk!c6GzF)5 zdBU?IU)@VzyJ3CowZ_>MO7^M6BP7pi!A5#RMhhPoH~>T=d=F3P3oRblG(M0&>ZK26 z%OCQpz4gJZuATOxX1WYn+lPjL@4nS;DwbgzXvp^Ja*<0U< z-A&;qdh3%-wcbJAhvhXueR?wY+AO&A^AK%$Xdk@~yL5_o?4yrhZ~F1fKKknQaua=B z=3IjkFW~`F<%xxhWVX`0B>5JRvkirb{D(gJITgEMEyk|Jj`vB6Re4HZeNA?_}#=O@oI0kLjFg(d4}KFW*sH;N<^EGVH+&nczeEaU^Il$po*c zu&brQHmi6)sIX(D!ptU@bdq$t3fxgD@cBNO!__KmO{uWUD$J_F-Y*q)P=%$buqma& z)~T=|Dr_iz$VZ8$(m5(HQ3ZB(ifA=N&EP8r!sc!_gI^!04`tpnxceY|$MhxB%{X)L z*kjM{qBH6S3g$2<;wfFHVlz(0Gt9(Pguszq-~E?Sz}fLS@#Ak)MWk<5_@65fOI;Dw z+TH?LQbR-!s!eu3s=+Zb$Q40p&8Zr9w18lXw}>+UflHQraSRW9&>oK({1rs1^sPU} zqWHnqtT|NA9@XGUgZ2J?)82zv@o-^j>y`{Bau9AjDDVm=Ud-eR2J8LOM^j2jV6d#r zNZ{UGk}_Z1#4ox0G}a)DKwuEHo;%7M2W{S9Y=SrE)F5AVAzN1Kf8I4y(34bhDEK>G z#J6!s*Bftl=xrd>D|S7$L}Tx9zGq1he~Hjn4!n~tHqz11cS zvPK2*jS?X^@gv8Imr$sTS$k;}(={OZbG9IO@AWXh)|TbkO}hZsGMZAIK58|KN1I}} z$^w^v1fg-pb!H&ff@oqNHPowFahWh27m8RhbD=dIO?$x;|2_!LAMx2yh+lduIuQX+D#V{5#JnH zT1{v0&RU{;T-D-7OEYX`{C0`wD>!fvFbfM}VVjbuZ9lb1g_cZG1SF|BIY|ZW0UZ#| zc1z9qWR4DC98y)0NvcFsW0u_%^ z3n5yOF59k@zpq+hoayyx2_h0b)mSkw>x^@WC|v*%Nw2I2gTg zHh0gA#UAqmpZdr{(zW@Ok>R$fd%;+hi+?0byZ;Q8Ki#yLXRePA=d!&lWHyVQd^`mY zzNq1%c7VDM!m*LF2dS3ir96i_;-fppGfD1z@rt7m!B3N z5}Vix44*Ki%POzbLDc|y?f}iol`$uuLT*1h(8E8_mceR-+h-+#g@pZn^kT4D%Crz3 z9mjzF%CHJldWc%KPdHdkHZB;w8D-)11lSl34&LdMHV7N-aWb!pGt5)R3zwvdk*|J1 zW|RhfiOkeY#nwb(VXEzo3A_&E5EWEYpI>1(2L=I!GG@wdfs@;{NuW81Y zYPpJwv5O-A0LI3L7}(U5h#*kAB>Fi9GdM7-9^Ly=ZJ%8JjqKm-9}Hm=p_RQ^>u}?7 zgc42R#!P-1F&4&*4d3x&n#W`dLBTs8O0GGZLggJ*dbvwis` z2{L^tL41ms@wct4Rk#Y8lqqm=^sPYO3H@oWErMLS6ey= z(SBK<4PiWtcfQ*u)XF0%yD6E&wp#0%WV|H7O+z$&m^#_3S_pK2FImpMgh%u%N>Si& zwRG`K*x2KA8_RK#sKad>*Qm>IwOsMR`OrP`&}kYi8Ls-5uMPC%jBWTb6uI3jd;(Wm_Z!2)tbj7{XjzZ zADF!&-#Dw{Td<_c65!~%U2E?H=8Kfz=ng}0^vokCh zQ$2?^B&z#__wp6OuApa!Q52>t^q&5xv9%mj}>mA5s%X-Rd^cEl*ZA?FR zmuyR9-2?1f6EVkaTFc;G{b);)S~4n<1L2@S95@AiQZY=H$J#wUaDD5;5^<74_@@bv z(GxYNm6r#wxoa(e$nr-3Lo}M)!_T|SJ3blz$R7%O7t~5NdnC9lXY*<)E^f zV*;)qfQs;aZ)!GL4Xm*V!R!Jy<8mgS4sxV~JDzn}mAG{DShTd4tjb0094=6TMzv_s zX!X3}`jq;QQJcFq`5cTs)oJe-wNtH!y%6}Lnv|mbjdSa`M?@vK9mLu7_O_wusa28>@RA6MS#gvN z*Dw@^{k<^Y$z*!x9nE&r%$|sXuXW*a8p@UlbHSh1P-)W1s{Rpdm zM^mzC!g#f-&vCv93MI%DbMV8wvkT%;Ygs+|YrI-HEJyoZPEE)WCc5iZt5$ds$M%Mc z(r@z8FFBk#Ddiud0~6H1QdhgP6$P3auAD&$ILq5I+9dTEgNK&dgWgY2>m|3Yrr$pl z>UerOo^N0~@E9e2au)X$63e7!c_#YeW+VdwJcZTPK^*RQdO4oi%zW-#jVoDMDDk<4 zdxs(GR{k)oPdg{7-p!&w4?}(H0mU|ScjlMuR&&3okhZG=7md_RWD=W6*z3wsmW4BT z3>dhZy{!Tjo}||3{=PD%0nt5+wO^4pSD)pJYqTWnXT%5>wg}_qIqwf8ZeZ6SR#*Si z`{-z+(@n*(w?V5k7>tM$mOrH}|AUrKQacvkbF3uyhHP7)5Zb|dmL#ls*(}SCkvSPY zIu4;YE?=?sSC}jQqANuus{y5|pw)n+mR6js9{$UOU+tC#ki*vs_CAwy)Mlx2j8c-- z+RCe=v^QA|_q&x4y)KJ%byee07AWctE8&rJs2U5si$LoGB z$-1HYX`4e9ak;YNI#uJcPRt#JDQx3nyk>umWQSt0(wZJo z9)f3E?Sbsqmqphd>6=tv>NXH`xw>g3Ra*#jz$u&#M>DgEs$(GtShj?9EEoUVyPgOS>j#2Y8 zxZ<_cKTU04^b%YVAB7Rx48}$QaQTNWq^U86vE)5PZR$Fx45SBiq+V0hn*O7I;l_YH zD{|1wyk|gAwh6sN6oiNew0(*iP^~Z~A%SCWJP!pz`?dpD!?W62xYevDNaB7gr<3bS zdh>nSFPW4xMYV*V`c>YxXyLZwL#EEshgsG#HTat$U`=o3iCN!sn3FW`vGX`>he6v) zt-e;H8@gdK?KDBdw)X1|W6T#M<%f=z1yGw->ntpy2Ip9&%E z@9E0dYInaO!C-PsJg+z`6N0@Y?pk6nHJ_^XREh@E=Be1E@tB@X#iaG5Zz*V+>RnMt$eYCwvPaIKbZ_y{pehMDlxUMp_nx=kLIJ+cnWJF^r`vf!TmuYHyWxzL7+oq26 ze!dLl$G(Y+dQ6Qc+z!;MM2Bpuui|=$ZrIea%JOBDV^bR&##7_z>OiI1ZQ3$jZNf@S zSLY~$=2Mzot*XSfqTO~ioWXVsCSPHO4|dZh-nbdE=9KxfWe_g2z>p-=ni{bS0T*+c z!ZiaP1dT7UB*#*?RS@`$Rr!H@^y!Bha7tU$h;zYMT!$t-h7~`8U%P~ZZ5`9~rb<9+ zvv3=&)m}?W1{Ou2h?Exb4xt*ED2_JcMMl_+8gussu`Hv1aj3myHLd0M4UlWaF_eMa zUc*iGfaNY~P4;vC$!SGs0EE6e)Ac8g^MWSYx?>MP2adoVV(P(iin1J_mb7-%h9mL0 zwPDm^3Qbo-{o-(*90oQskO5i>?tbQy&1)s?O3XEA{gY0bjt4Z2^b7G7Y1IH zbODks-Dr~Jrbo?WR+~9=()a-({?l$SE%(Q#%xhHN*RX*0&QlYVLOaPaU!5IXXNSyz zlIX}=?Z^kr`yMxe!BH!HchHIXYOTN`m)I(@hvd$qBFu7r+RmW3kVq|&iZ4(r^cn~N z-#?xJEiFxOv|IpCb~sR%GTR6I}^A&!^AN=dn}V1Cuuxr~wD_Lp5z0|SARQsq zTKp_fYjt6g1d@@EJA z8&I(o>H%{p4C}Jp&7mjQ!&ofzU87J5ZVc*Duhp1;_^8s6)#?|@OqIgcsNa>SgFShmng7s7?}275sm=AZ zkhVji$7`@GxJAh*vQ}MhQ0}NQ|F1tGJf2udK;8*mF|46jtXq6N}WBJFqz+RU$m1rL7}1B)D;oK6^GhkQti+5 zAXY1+-oF?mww<0Ri-(T&mx&6PYoNI8>WwNUod~^WDWb6+#PCjvD6I#*C68sX3$@vy zUa6Ag;)qt~`Bo1)dH%>L#aA)&0QxWE71zm}##^Wd9VYLZQ;ZUJsdts# zpQzq$HPNf%M`mx#W-QYT?{F2=Ym-`*9s%2+Iv|J=yOgBX33?D4b~tER@j+s{>S+on zuVX`Gn#xpNw{VYYXfX5rza$*fgH8#n^`KKiupV?sP&2M%sO|=9@;fQQx>xEDtA|>z zmnyu+A_)}iw1`6i5jw8tG!B(HtK%w3eJVeBn^9(;YB7W@1Q-VM&n;~~zmYPW2K!uR za~Le_Ee+bQ-Y7i}MEPqD?+L4Q`!&}Mz2*#hLwydYhe~GvmY>j@37h64ob;Na52~lV z{(hNf`Css!Yx$;!)QJ&B+&d>Lj$Q(rgFt44UIK6EL1zhEp$8o$@aT($KdA4zeuh0{ zU~w2KL=QO(bsd+!0oQXHvff)7%Tvb>(X+PlcRB&Q1Y>I*)q_YWLJQlaZ4GumT`B1i=UDsPuxAEBPTJ^#>m4Gsoz<+ zO-J@(%wu*?Fa5ZgxiINwu?LC`W#0&;i+pQy9;vO_cTP zXvrCMn=*Gi#hq0v`HQ>o>T-cw-dNaEn>U`_{8`OD-hE!{w-#|$i&{oo&Z_O)-q+AE zZI_YzIn^(D-A2rL%T93okK9<>*CQEPFz+?Nnzv@H2cx0UiR2g{@YFawxv9liJ#Qrq zD}tO^^gw3hi$l)V=AD_j3TZ_pH^kL*hzkZlUQA1?`5n(2(I!Ki%?p7dt8k6Pa8 z2<9K|u#k(I&so_9dU8kb%pH1h4wJcbhsvE-!wavyFJo3&Kw&ctJFf z*qX~}khTwBxglvNPa`{N=WftHm(;4Y|KPjq(oNCK)(ULE8jtBcgZ#Yh@_4)AGd${e zS&b}b1kgUTCT4-{t*qLO)m&7ts&iBGkkq(*^Hri^t1>Tmb4mL7vRa|s0(=i=9~vnc zT5J9D7?uISlR)_x;;*RQ$?NV&?ZjSaXLghGPqLhG`6&q=+~1 z6nK?nk@{u{+?0rX;wg`gy1ZQ(kaxJyzsr;y!f2BvJEhaz+Vy`U{t0yPyn6XH986TQy&zUjbLD@h^R4_3zHh-7Ww#0qH~2Z#nXZ$M z{15V>OrAQ%q0d;Iu=)QX^yrb*6qHlm$X8Aije!-y%v=-cbq{A{@5sB=GG z$7UY$4QbLLJM+eiVF_7Z81-tj2Jx7yp1>`K>85=s8O|XkNScGhT(#C&R6dF3J0A0) zD+0~sstG=Hk~OvnYHSAtB#rcuJXuO(Zm7YZ4ZSXvIJe_pN}Lzc1#tWU$b(<6NuqWC zCRz_7jwe&DrNA>38QE34dWo`csI}f~`IYl|RI_q3k+elAbckZhVyd-Vo zN5gKaDYbonk})Q2|Gxr;t9rDyi!yl-5Cj3C+Tx220g<;<55I%D%Eeg#R|1e|4K40WTuRTaCMCT~efcZr3Auy2Oet?b@9S0QMdd(laW2s7Ulio?J%m zX{!~weM>DDbYO;@0`A4W>4Fw7o0UXfMcBwx-4qJGtp-=Azl?nxFP9}^bCuM`VYgK>c=xS~nWKvLt-O~g+dbBPM)Mk+QQ|IE{fd;Y zEm3jleHf+P9+1)Qo@!ExxYzs_{9r#CabL|+j`XE&57anColBb@VCZUWNLdfmF|}8{ z@EKn5Cc*faaUk44TS&y9kGYRSILjZF>9|& z(wpDZK-B~>#UHA5+>XCSj5gzsKy-PiCbxe7O4lGL&KB?*?{PNE8~HH3l@H@PCa_r~ zoz3(?hKwKaIAJUdSq3g_$9VRwpgA<4@5PMrzpDWT<=*)W>mzlKLAh{lkERw=JrT`onMzP20Y=g;yVXXr*{RHiLqW+_N{bR=Zztm-hVvCNW3va)| zT$SbPX+*N>ct*lgHPE1}J4)l9shXisMxTGwxdua7di`9z9B}QhWCCUVOny7f{YG=g zCy-LBV8-t+Fa$MJrFSpYzm&v7^ye#d0()JdWv|s))vFyW=F-nx*Tocym*?i>sBO>9 zL!;d;;WZZB(4lc|_Ze+0R~psmELN zLg(+N{cqJ@l+Q2H(syb~^=kW^5#r_l6`_;Ph2q~M!g?3z_L|{R!gg3gz*$N%WC|Hv2xQUjARI1=Ew8FQ&yj_~7d(?^J9dB1@&MyTlYStbv zs_P*ll|(NZ=OJpBjNZU)!};gt&Zg~a(b9Cx!;1+sB zjs-pO0&-)Q^<*^(|L%2xd~WWlMVUj7VxU&UfPbAW)d4k!UIwA1G+u!`&2XcePW_kz zCX)X<1?(JdvqLgSDHAhFz)gSZp$9(;)8kU2 zvU02EG>?>EtrSa)P74V6Q0pIM0{ybUe2P^Wkf5tyR&@Q zNC7uzQK_<`SGjs~Pz+z}c5}&Ui4}t*e=AdR%xO`01(BtlgShpqjE!Z*JcGybxe$vs zBO$BSu8i1F0smGxfD9Fc#pi@SH*GP=SXMxDmt^KO$AA2(QU#IK!v*FH3j5v?J+|b^_z}Ln+;S&hQ!(X{vC&v_#mr2W@wy^AETpf*arYYlx?11Ee1K7 z+jcV55&jvoD~h8^$i^8?4THA2xum`oiC*$ElKr{xf?H`+717CKYc6E<7P?(UlMC0;5vCKG)UY)ZZ$+?<&D#v zaffbjL*2-T3hNgg9u*?{1-o;R?m*h3=yD?w=&>#r`ty4Fu7(&}q-YxF9B(_}wmGZq z`izP-#X^Hpq6i(UCEkVh@RS<3fGj&wnlK&^eDI1Lo3Ll3j^39_ztNN|Jdnwv7t^ngE17}T5_VtlGBN_hJcQm`cX#H6< z2k1KxnLuRDXjRjiE_MslJ8SqUN&Y!gBr!!cLsLJwO7M6FcW3Z52B&-M_Qg~C;7--U z#a7GXi7a=88$K(7nt@DgTaocHTr@CvwgrwYi=9&4yJtl#r>F=~&f?Ed7~PtOGAyTw zKq;pR(b@FwDqYx!cX4WV!uT&9BAt`a^K z@CdBcB#-jpHJfB0{d19nfQ+_B4U0;Bqa+ne9osrba+k;@hy?*`jt|XDKOCpXCc;uE zLSP6uV{%vob#Eek8ay56jOo)NH^e#7*Hf0Q&|LTozW6=F&&6O+ z6#hB>448s-gP8;I^Tsa}zsC5rZ9x5E#1~4efqse+HIsXfhEcb!LIU(fvoXl+{($k~ zZvRqpY zK^yl4bA>4%G z_H-Cqdl7(%kv9f&bYe&d@8(<9k~L?d!dsk~)1QgWOe{b=c|u4?$EXf5vY85&vChqy9xG}Yygp7sbm2`3 z@-Do#?N|XjU1=_+x+Wk!THqY&*+RrrKbeTOXh-V!A%-N(;+qz6a1{zcx~UspwY{_9 zi5E@I>C-E*S0d(7O*x5lqlGA6@gOv^hM!ErgacM#So)czXT0#HfOwH^XiA&nMU?Bdkxg(7$a?odMm=gc5JhIf zR0S|~R47KcG{ujf6CA%vc=FE~{(n7tg6=YYb)m@)JUimaKMwOxhJ&3i|3A;VP3c`r zF)+CEIBC8_S2Vqtf3Fjze_H@sqAPG-tDi(^t;C?NLc$lO}^d^UO%o8Fw(4P_pgE!gAtcEDnFm~`&u(K=l%9fq9=7q#~ex?mlKR^y^p zZWN7fElMlOC|cH9_!>0Y-C9&Hw>yd16Ol!2{h6$IV^CsC=kA%U2x`y%`Gjd8(_DT}YR4U3(@cIJ*hapOOXvh$QfH4uu!{$J#Xiwo)u4w3m1wof;W zgECr~80dxrn?cDwtF_$pt}Tz}v|um4_7Ypx_@lERm&9Yti9RL%mIlJ7k@|=AsYfC;*T3mTM^V#oIm4rqsBiFWZ{yPKp#}Q6KS z>d;wKF1+{&XO`sB(x1?r&SFX7IgdYKraiGFTO-Dc>U9yZN|(o!)Q2Q zI-Ve`hD&7XDi$T@Oo2{HV>anc?N7FQ_%Upwv0upfX_{-6n{+LvcT8mZlNFWC)#v?S z$#0TjY#t!&55vFo=9jhXELKQvBMPzF@OjBFe5#w1SQ1+>gE-Z;Cca!YFb#WF%K>fm z%&g!|;AQh72J6Wtp$K7?2V03yEWY4a*HcV45&C%}e&3iSD|8cn545t%rmFm2o#_z~ zP7P?`t9f%p;g`XP)4ZpN=QNzE&^8F0K@%;Iy5Tr_+?kVD(-uKmN2&5ztyLCX>?VFH z{N|(=K7Qo>cbL}T2<_-D1}S4wDX@q5yo5)pUOdWi!&%q)Jpe>5{hXHez|4j;xR6 zBOl>~EmY}qk!T-k)fU-}}J ztKBJ~uL$z$+k@wQI%96ByYa|H*sJv`n%Ni4$tYUaS2QR(xoa_(oYuq8BPuLMR=v8@ z%f2F1>Cv4^_7la6`u`8UU3Y5U5BSfzQ(`~S*0ojuWNu5M3m|s2aA0;4{l$To{s;_9 zqQd<}K=K22$2MbyyMej`lE=;P#z_EjH=J81KjxD~?8fBrsFRsC<7hm&^EPWY7p-(t zIP8HNvx>?p-W^DkL37$7iL_Ki)zct9xzG1;LnACEgguvMpC6E}%5a zz>(17=}dp&=ehR>FPs5o>~$v)(^Dp8JiX{Ink3I3$5qypW8@dP78HuUylEj@#uCPY zY{ub0No8lvLqrTKp z)}a#DhHHb0txO5|eua;&IF*CLuuSj9fbgWz6>$E`v25^y zQYVe~#?Xg>qD1I!#zT-_YUS;CH6)?WF<1jg8J zv{-lScF9bt3ecVe8a7CDH{7F(gG5M?eRn?bZplP9H1F_sZg)ux7NwL&qbYQ-h)`%W z^&gDtytoT}GgwTpsCUp=FT!1_Lh`F;6vUgOsLBx0T^TltW)2ZO6!R$hdx)rME`%js z%sE|@r$#-rQ1vgw`4Ues8vsSrcv~G7Qur3TxA^27%Li}r`%+X?Zrr41Uy9fQT_quZ z+U7^wzQo*n!;VyNs3;i~gC$j-_d|PZc?Rc%vid6?ap@j0JmAuPzY38ySDuLo!aZ?p zAM_krJHPXJ)qw^K6`_G$w|Rk8(tP*7G^aYy)}g}36v+sk<_j;nJXG|uZoJNIi#d%y z2*Lj3PP|Ze{W@aQ7wY!OiKd?zpf@kRy!`hgFE!?FojI$mx$Z`jb5t+-VKmMaS};u1 z_j`h2i+=V1PpY_U5mE%c*Sbzw!$i44kB7@z5PyY=4@dU&Dnt=@x*ht7W4fsA{)q+- z7uCCLk7k>nwWjZlM1j!eN-a$-z$_>9FJUzx&R!@gr%kB+X2fjanv&G8-)wC>bA`Vd zReN70>0NGED_*jOUp6;Bqj^e!rb5H%?WdRr>_Fu`3ut=%P>zL zd4l2C0Bs8oR&OASYqq0zBZPm8zlN4Xv&SnAMU21V9d+ssKhjMNqy<@g?%5#a1$tY! ztV^dmzz+w`X52EAdW{r5wWmnv>BKVpT}Zm+-o-#P7#JX#hDa_$PHRt8!2|^OPmj3s zP}(w5M3pxBxI}GJ^{za-c!5GbXOK4hdKiNZ@6vxCYeiV6lJwMi6H+^>IzWT&Iy z|M?j`NEBt=7dQc%pHa~y0QxuqRqJY7Wl7xzigHdMC3FBA!2*(Yf6{Cc2iv+-6vRg@IvE16C*=jV?G64gA!l?djV2Mi%Lqj)>Lh@C>~VmlN*XYPflGjOJ8vW zk6d4I{45O`E&40rt?BA$F~3URzfhghXN0Uk25MuTfi*o%2Ef0#u;gEYM_jtqpe;T_ z3&x00_Z$lp=W_)+T%c29MB{qnT47J#E3DY^_z`;m;f4PGWI>IPm84r%xl7gOHxe+VMt6iQ66&h!rgh~tjVbWWlQFe)`-Edoq`7|+BY z0KQ=WK1)xHSlX91P85|JrUT;WnoPv2?3!%nnsL(jB@=Umx|6~r15R3Gn0d;2fKPyc zER!%OY1o${C!y~x`qH3DqNMe8pOP*~0h52d52}=R_mfc5u_a}jVVdzCFc4SwSoO?l z#>*UFjD$$H=bI9-4^WrHvZ)c9`_Sb{qL%wO2`HZ$F{BR_Nfuo_dNeQQ@&iWTIaDv*Lf$fZ~+%gS1@l_v6Ymz9=G7JWKTYQ{{bxU!}`a$}D( z5Lr4#LeFZ$bWjI?k{qCJI;aUiBOIXSI*3mO80rAkc|;w*60MRiWCmiql4G8N$uvw4 zU;=d?l)^w@I}rS5GkuRY?MqCJM%zux@g9v8Z>Ui=D)qD>#(p%qo+X{3Hq%%9FgG(! zl0oBWJhEM*?Zz+hVz&(FS<=P4|JPz8OMp>{=JR7rt-AshWo~vV+J3}lYK8zPijNEg zg@}Ua@JtX@(rGfI?HFH`)@l4CO~G86g86B34kJF(%N{g2Rd{u~j}W5J*>50V-v7W$ zvIpg|AIwj)Q>XEkG?BS9i}KUVLLen#b`N@%DoUFB z$h&QKS*3r3rrKT{G?E%otvkg5lNb?_o$AL0k#mlsSANjxK82)D$j5hBv?!a3N)-f=z7qAxZ zQKj~ppp)zrTP8I@_jU4bT+JO{h@%~u+>K0Mi{cf#gBnAVlGb!NDmeVy!s{fF@_4@S-}Uu zJ^7WkPZI-^H==vQ{W<&TDD3A5ncyZn59yZu3Odm^h5V`J>42f1Jq)#apG0VG<8?|v z2LL(`V&LiKk8$!3k^orrjb@(c1a4_uObWfPy>|!=!BtESpr-wi7gJBj+$Is)Lyf~$tBq=OkL}NNwanIy_zYc=5a+=D>RLAZRF-)ZqT8upNzk$%B~my9Ijlp6HM< zeDp0Qi7^lyFiqu#%2k{BGkQa+)qe67PMF{>O^OuW#IrguS5`BAfb>$ph971T-t$D=!ZBY76XPTP2V$!{uqhF?)E^!{nH zNI36w(_W0!wUHhekfAJE@L6$sBnF0<Qk>EZ_=16ge=1&r{AP%dz;7EB z<8eM)a$dJQOD+dkYuuW;&JY30)&0_BG-rnJNiK8Ok$Pzpx$c4V>M1FdA2*CAuXXsd zJNbCV03NER?iS#B>W-b3sS88u?wH?q%Qip{y+*gPX4a%mAk|M+8Ohlh_Y^A98 zg3{B4uTt&~txFemYINVnaxstJUVo{p#py4RS`+=ns@0b-jva87_fe6VBA`NH9UG(> z^_NiX!(J&WOnWY09Q2R&Qm2_ByfZo~@wOIEkv$b7U`JaM4F@f}z^WM_0XpP9UVZe} zn;^h04Wm1PU^|6iCZ2n>xu@PEtK_V5f6k*)cj)m<(J1KIpXdnnMlr`Rzo#`Xslgl0 zUd&#f)t+Zii&-MjeJ4{Pd^W?48fF&or`fYaf#h~k9ilo~(>I4~LvxE6#MYQ~u}7iE z3=fU7_Xu*eY3=SDM7nO58t14pUJta(WnJFqcD4IDbOrXFa5vbod zXW$h+0=HjC){1TObdl@b1xPwN?L;E767ja?kz#rnYAO~sxkK`CftSlZ7gSv>b&o#R zFl7-W@){M^2koc$MuuCU!I;6E#-Dw&&+xs4jUapC>gJ@p?V8v!u=)u{AH*%%-(?$dTrn?Ob?y zmv~a~SghPm!FD`$3{9PeJAveLYtouqnqmFweZy8^8;xOTPpd6v8b{7RbM$!G}V ztg$C+8SZriN3q*JzT*YJ81zx((h z_q#o{brU&!9-jRIW*MLCLZ_4W2f`7*mV()l@`u>*E3_aqyK(lI6?~h=`4=*UKj4u& z#5=ML8-3!Ju_NJ9#l^s?9Ym=|Uyj!?BK2~_rurK3zz}j5n$7pyj4wl1WGCBqo#%=1y5$YPYaD>836+MpcE(MJ}S2nJ8!!z|+JqNI+F zWw94DGsI`DVY%t)EI_+}S-PmbOl)=3zVro*;Htq#1vKPYJe{`jiRj9nUA1L^B*&!> zRr*EM>l)({pFSkU#hi8y1<7181^>|=zD88BIVYQ^dw=Bawf5&uHr#z#QKLC3d%9lH zpXMCl^we!`^M7-gm8kgE+FOFcICiUg3bSo!ywIJ|ZQw{I@;@@({$q_RIhGs0TU^3V zn$v$kL{j5VJfT>T?GFi3yV%qp6>Z%$H<#wN=uhmn630UKZWz9OhH8QuZJxs0^WyBf zd$CLRvY(f2k&fu}anH00NC0OmJk6BDfG4vpPwe1Aj6CJ`9sU8S;@YZh1w78K`yd>d z$o`J^;^EXXTy}B{+u0IP5IpW`UxN%@lN8}T=!WXB`3R@O#lop0vGyWSFuJ3g00 zNdbAseB{YYAILO5=91B@r^h|5PCf$GuN;T%>Fg`HuAvXIfZb=RG7oO~+l^C>)} z$2z&0IxZBUhC`IHP*iBX;Fqo(|;6RI1k8 z&xdv{5;a`E-kS?4Mq;t3rK~zd;fqC}u%Ci(?xoZ4#UfO+<)F^D7?WKyGe}!3f|cx( z7I6C1otlruj3k;71^81-2u zs=F3oJYtmQ*v=GP^C(_0#iU(2g-lb_H!#?><22|SQN_6VILngo?GnC|ZZkYO4<7t2 z=!fj2=HFr__TDiX^DWG|=U6_8M?hh`wu2>csuwO7zQ#Bv&;?gp4)l;*G!0|?!=p}e zT7j_Qy@U2IN5nI7;R{!Q?BI4LlWDEFLew;R=b|Zv@zD}5ZM}`d{!V%y`fY{iAX*%8 znzHS8FlC=@4skxT3Sq^68{Pg66Pf)oDRd7EjO`>wQl_ki?D<=0$!f&;0RvG7#{+OEm9~)E8jJwe9HR1T zM3C})GqqSF$|!vf(TFvoim3t9JOA{UGuI&IA)8r_l>d~&cMs-kvMEfEuquSlvW}*TJSk4$w-3 z>uuU7_29Jztr>b-JebCu{xTixR8XE|q?OCVr)?x?I{WM}dvf$AM zTE8A9PS{Up*F(Kc8z`HfrT3Hj22`G;4OD&uDo?@&XO8#YfE-^2N8zj*8=&R2^>lj! ztaoTVy#=|lYCVq!DggEtR=TCqO2+U|Ki(hL0wz6hSMx7 z^&Etia-P}-h(C|6#?|^R#DXOkhUK~ z;s)L*?oOAsBJI(u>CdgAtTJO475yGt=lbL$==nVe4z8kc-;1)4lE<0Jh(4?6HY0Y? z@Ex$nmp6(RprCC)c&wuO+eB?8ZYPb{CK?*xcz5WY(oEO3A@ieGlG}Ea%~d$AX*)9A zzJpruGy6LljHhS|@1keVitUiM`a9as^d4Q1Z^ebd4<5!UTPN?wP zHmZoHI13M?=RvQX$SScSH>=qhE`$?hSo*{0UGVH%zn3cO z6tkJ)!?(E-kL-fPXr|CTC_cBSX-v$+x7iK+!L7OY`HX-3O)mcf;FX$N$!!k`&pg2O zXd?F@njv{)!}mbU<}JBw+d2GVS#J0l!b;68m!}p=u^ve)l zA-(gFP##G;9h|>5Y|jwo{LYFnll2 z*EZ3Ty+~gR21`R<+KVC-vXuVZD*_6b0M@$=#VBN-sOjgwDPMFM*ofxvYnzwQh<&0= zf%GMkL2pv`!4j+4;W?@u!ix72^4l*exi-`tp`$SD2c?jdvZt|XKb%n4#dLc=igA<0 z^nO1yueca0N_33_Kv&v8gAM?FY!TTHu=`j<8xFvwU0qLS4}g5+B1eiA9z=%CfCqDw zq%edP|3%dNAkwWel`K$c2T{{rtfTz^D@%#)97J#C(7L?j6gdR-qlxMtg6r$MjyfNL zS>xBySUd~V%15}J2{$jK+f4ZLT6%j3YK>e-C4PXKYt~Y|9}o^-NC`i{JNBUmm*EYT z{2UU))8)Q^ZSWCacSQIrf>%5X;wp888}`JbVKxh6X8as+J2o7rRGPxb@K<V})^!DGR)2Nf8Mm?3?s3TSVf6movSGt~BPBH)K^7HV^ z(&^WeqE4Ts>^>dn*Epfbk*Ie6#eO3X-{8OS8F~1S{CK^%&N(H@brE`Wx;h>6=+Djg z4|VJ0;dlKPzE~c9*$gUr8VzM~!tZAXrr#8QJJM`q-wcjnl-JbdDR;iu-|yH2N-XGNLt0Ec`> ziO3@e`7Z(G^6-xrlX4E#?>8G&JO{77i5me~OM9M!msn<_apy#(1|0y_Z6Yn!|7LCq zy4swWeE4R0_>jf)DikUKby z+^+y1GM}nn!Pi^Y(`eWgz<*Dr#droUV}GCTPp|1$a^%hU)+v7 zx~4Z7gRY4<^{=^s)O?Sza^*d91FeiNmm#w6Or&(eeGES};R9H8Et5x3A3 zZl1{OvM<)=7TP%JKlNHa?-ts?N`rFo4}hm>PvDL$xA86YiGjetQ_1dD+uNeH=sm%i zvK6 z2^l<|mhv-U03Eo4{#Px@rzhdr9hAR=)5-5H41cXZHNOkSP2*_rU8H>8xLoz_!m-wU zij>G^?DAc3Rq9XgnA&|DmG~LW*ta&a{)|4sv9V6Bl%Ju^{C>3LXLJf{z-Q=Yy!JE9 zSP4|lT)Bs|AC$g9H|st0hJNU)8%w&S*-X(ckK)KZ?j4O`36jI`3&P&ap@*Y5ylg6m z^={}dBCOEt(NdzG0mbOrFBt1I>?2{0Uf6x4>iE~x{65tEtvA$_g(~Gf3f0O{wE4a$ zQ6L>)NRYnb0qBh$Uvn%n9Q**`Ytom%+stCHyso?_EbrvPsa0y=cn1<2ylOG6HPm_*Yx&Um;7J-?1=$iH21 zY>raooy9RH=!|-EnI(Mt`m;ZAs!j)TlN!RD`Tk_mM(5!@{tMqR5C7teeEg2unkCAW zNn;1(jPLdS-1wILi(ckPyFW$s{$;y3DVH<)F|0jlu+AY1 z%AChs-|{G~Jw_Y7c^tVtLECa-5Y>GG@3RT+R~Iam z*ACaICL)zqqpFhVM zOZWUPJL&}lZ5~O3UWkUqhwPhmNtrJ={*iS11+sE!Z+ia%F2H@HZZ99I@e;j~Wvyt? zOT_QRo?fPM^-DApokr-Xbfo;nOBCpbEpsJDz7oD=?mE1ftWX(Sb1iZ1U)~Ke;l^L# zT%^mr=%-hrt@1dYD!djgm2<;r+-p&#zUZaLrF*?CxpHQ}+v(=i|4V$cJp8qu^y_P+ zyu~nbf5Q!RPiGRM-$32fajdRP()>4~wmNrcAYJZ_ONt)8K@r``UR^JFu*6%K_+SgB zm*r*hTV(t}>GNckWWE)?#b0#S)sbq{!FP@hXFh?VK4ONgz&lJhd$phv?=amF@g>!J zhs?gy+^JIHJ9YuxY5hAC?%mR5=$Ul?9kM$bbWRWO9&vSb_!Jq}9~*Mx5_F`Lu{d>k zkCnRLVx6+n-a~fTZnXEk2rj-;cQ3k@d7OP>>7VzaTu2jeA>9)F8rv2eiKwZAbwlg5 zq0I*vVFF^<9d^zOa5bBuH;?x>^;oW;iD*` zEJ&b%A92o7Ml(A65q;Vc;L(MvpSXuSi0XfWQz+Anh3i={{1b9Gu?sEvgfe`#DINHP zoZi{gne-Rn6XW4r9KI!oYeHull!F;jcThQ#I(1F1LLM}yC~UYt2lHQ7W9V!S1fGSr zk!hK4^i@RX1%Aeo%HWs<;YQ4W$2d?6h8f{W*)2)R1uH;0q|<`^#**Srw3Fs3XhNiO z);mK6V>#mlc15~Pdl`&nl-kiW&0q``r2*Fsm}vl8*N#jk%il9*+uXz%6@@9lzvz&Q z@1+1ACmogUXc#|3;$^g#6(g=5Z47#+Z}nD<)m<0rE=rHHr)u;qb4_>DdZy8Lxi)I2 zQ#y)+%>JFKv09<0QBtN;su0GSMt_#U$@8Mt!dO8W(T67B>Dtoaq9pe*VXS3*7|E0} z>}538aP?`ItDz6|HiDv0p7YvfM4J31hfL#r4tq$vE};M<1hVsX*5cj;pkb#*65@pI zEC8t?pL4t{WuYsCv||sh8zBr~rP62A+|~G*Qm`j|>uL)h~t4p)+RJ!OTAH4AKM0K9{tXCV-H=P}IYaGLCv$_O$MR&YoB z?LsKF;ke1F5Xx<7;2nu{1G-%+YVKyNqt?c8S z#`AKAiGQfCLu5=n-6863HyY<|3{WgBX|cO8NUTCPRFCNr(8hD|&Xg_mK=4I9XOO}; zoG8&qC>Gg0P$(}r`k+$&Hm3OCblg~K_AoZ|cwSd(APb`&PoxQC-qJNmwqXb>(Q!20 zgvxl9or-Q327hQlw@t<>N@4=J6$UyX*XJ}TY>Y0jpbiVy=~om6eMk%1U)YEhY3?ve z_(C(l=bDqB8RkvsLg8j(`9hhs9ZKn}DWEa7lU`ib;O%DA(Bqw1gkGaL?9DtneV8X? zZjPnqo=_T*u6MBxGPTUb9nHFRw`A*SWb*& zF6jk&6+wpXsVS*-IV*}lPCF~@F9JE)>~9=$>decP)2=4{!*X^4t?OQ`s1c*%X4Iu9 zxDxVl(cE0Fxc`r^`+$q$c>f1}ls!c~5dj4h1pyVYfEC070(yuwR_s`!*dmHCM&pUt z$Vn0t&BSODiM_W(Ma@^SV@HhCH$XxKF0y``~H7FU$67_Jbz+q*Ru`#d!7j_(@D6>NP@ zAMUh{orlE%j#|e=^^*AI(s5MK%u@@s_ly)1JhdSE-i^e!o-`x0Z6q>1srv#NiCj;b z87k6x=)5Xkw6pFt6b-zzUiQur!sMmJIQ3{~Z4bt4o)>l4qV}Rf4XwRnFPg_u(})^c zi2cGK@pTQ&&v9H3CF2}dgK}?fCtlZ(Q&EuctVtD4X;)lfkD9bsyAZ8AB()~ZWwRP^ zh1P>g=D6He=8&_+*WN^bnE~a8c+26_Rt)gg8kYM{AXemQYqd9>^?*@JlzeGl_=kyW6!zR7z^&pd z$m*%KHoXWHRqIeG9|j0x9nIHs6=rSDwr-9s+mcW*rw$G98l_4ZT@oG?Dh|u=UH_6w z>Xn53LxsH`wPlmP2=b#Xx!X#_`DyeS6@QT^y`_~%^P?>e_ZOR_r?e8M<+FpoD3H(L ztwcqCdOqzZg6P?CmtXN780oLIwBOlMtnjBD7w0GT%WTd3#C4gihAo?00A;JtQgjKR zY`f}+aRFM*y5H3)-A@ZlwvAm>9N>Q9!E=-fa2Vdg`clNLE)9vtzP!2|Omt4HOBI}I zE>_gl+GrzX1nDni&W_f}oI5459-UHd_{bcXH|o)Je@;%gG$uGlmdr7dbMOeSPa}LJ z&&WJyG^eRy;w^ly4 zf!18q@1+?;W;=S*F{c5IgQLOXbpx$-^gwSe9ItAo+e+$!WVD6;=lE|W@#dxD*o#R) zRBXdw@of+t372Y${Xx|K`)gvDR1?pGXj9h8$+~!-L^sr$d-+oaSqoPnKC(5yt)}?0 zA)OYV*C;-ea)|af8jIHrsr=YgHGP5Zc&R)zDJT5z>@$ z+zS)~n##RcP0VOYC-Hfl0}b6FGmH-u*P3b#oP4k<^%#$GpJp2U`D~!*+>BN};x5KD zqeGp(n$}Fu9$&e0HQbS-lWZM1SJ=gB4aK8obhc|#UwAdARbAahcyn6yjhh%KpYPTa zGvxCTH?f>v7TIs9Co-GUWMp;|*Jb*Ydg4uUEvQCEH?E?1xcvEnt(NBEX{^Q{WOWuJ zTWBq-U!y75I;y6XWIH1ws)lL-`lT+iO6xEWmDf)GVr(dt-_AvR z6H1pU_x!}EP|aKavI=M9q2m}vbI?{!uucQL!)P!yqzTzN?PY|~psj1o!NWK&jE2`w za_U88KCP*;MRi2$)>^2;9Oqi1$F2%B=(}?@PkX;QVpD6amVYy6StXj@X{@d3{z#Tb zcJblv7_NoU&k~6C{j@sbX}DI+uCn+joc7AZ%3{5I*87U9^0``NQN9g5Z}kzO^jz*g z2Cf1_aCRH5z7}npnZ=q0bL4*<|8ul0{}Bz{jUevbyu$8EKm;qPPOFD_+TNv;+Dt(1Nx@wu`TAMv!UR=xFG%<9&bmgH&k z-^%#&eOpWYD~S&6Xkv7reAd$!(S9U-3ca0tjZ?8yf0V4XqN2Fdj?Ry7y@gkMIs)S= zitzUGi1QW$<+E!=F@v5R-&CMddHnp;p1P}*xA>upR!bNnsLMaBAnHfR$rDpH25?e@ zM&Cd`Myn#$M$nb@OD9=9y6Qp%%@%EHiq{b|<$dQQJR_;1c}^mXp7j%uk*i9Mq?UbI zLu`(uj1ErXG-YrsD39%P{kj7cQ?rI>(1Bi!d}U3g_oX|~SRF*P*0xe+o9iV`$!rcX z8xLu_D9U!GoXkdbRTEKBbeVXAdNPXk!iaKWc@#A&uAJB(r3IDy&^o8{IX{{X{ug?= zB2Tr!(r4H_ktRgbwd(I4VqrAhkeWj2$aaXb*)Q=B*P^L2f@F5gN)`d0oqG}AS z-PS{d#b`lJ9v+;nc)!h#(dv6G(vXH}W~go5nVL8pL)Q|YRTuxnXtllQBq*z}R`T}{ zTgE{mD@Lm+x^~oR*xz#$V>{ArIqg{7yQ@1=83(F~YaMBqk8%`+9cj8vttM)8qTLbX zD8f6@X~CVcQ=@o4CUv3)SFR?$=|ofIeh0C?6Ya0B9k_A~7)K)&nd~lF8>yxsieQIK zGSYr?lo?S_hEZPQyNQ!V&DVdEJr}?mS#OZ7?JJPX+hy%HzgRkbzwajc$7+4-|F#p` zVzmbT1vFI`Z+feNw$%^Vak6!F?!79VH4m@V$ZkFO2iWo_+ldaHsa1XKL}F)}PQzWr z^3HS`GT4dC&RU~#uQ26X2UHwgWUtnt223OIwvv{JtjRP@42aX59j8zpjJeb}Evi#3 z>v_Z4Q=LjyqHkG77ox#vUcHj|!y@mJI2z&GMGJ7)TI4NayJ)@bySvDvG)(iC8PORp zy3p)@&N{dAc#Z6;`8lop*IJZy=Abl(G5>mtbzQX%_O4Y#L07s#qqAkg!0$$9y#v2dx`K3k`eF zDe$sE4CtZNcDVb-Tg>dC)o?gV3*XAfM1wd<5&gV3w)(&BN!9xsgjY|hwJ~Lk?MY{2 zSIS`BA3e4D{>w1|+tQ=2t-DV461L_x73Z+zwYPZFlP0VglmR=x`FmQJ<1Lzq z#p3&VHxKcit&mFpvykoYQ6V=9y~XMG=!hDE=^N!&=|#sk?}K5Vk0Hf zFVc96Q!?Z8zrDr7-gM`6q@0scb#NbQ)d~v4^`SFyMJF+%j~3+6krFoap^n;JUR zxyP?~r(m=F`^qy$d3l2O6|?)&jotTOd5dLzsflrv4+UT7O9lH=dO=^haXhq~%-zc2 z`Pl@|K-r{P*dFP8V$YB|iH zgaiHMP|(DK{Xdu<^N((awQd6TH#73EL_9^uNWpUi~w78G#2GMvw zXD{jxqBRFoyfZC0M%m&iGTzr-tfyrCqbDU*-X27I_UIEDje}@M-mnu522%+$D51+> zs&a{)_;@f?*@69%?Zg8a|Mf3#QDF$Jxt|sq4$&Gp9+49nPX&{P z&|JPkPFLvh)kA2OsrDDf0FSVzL#TDtbi!k(*4Sa|V>-fyYCaBM(Zcwl)Qc-<%33~@ zIxUV;4#m{qiuRf6V$+AbUs>x2v@Xt7|noRQzUa3 z&CnAuWyw}m6AlUT)%ioTird{Ifr@!S)6KX9I#5?p2-~w#rf;V7{RuSP4}K_e6KJqT z+2U1(Q#_jDLBr{^_@+R_4X1qf3q;~@%6Gbe%Ha!`)x&8&e9x0s@kB>!+V?IH6-Lly zKrcjavWT=z2L1)2!w7jpr&M@dN%-LdF^9rDvuz$hLBN6(sRzs{BrA0d&qdDloD7tXkWf2wMr!31YB8Z+HQ!T|! z8u7l?&cT)Pt$v^O$-jT17kGAh`aZqhIBreho@zFl?*H|s>B%~t=8o3rt=>Py-qAF- z=u2|aA487OnmT+&(@)qKYT@!f#K18$ih5DP%rSHYGvW`id<>0{u7Ak-Fxlmdp%L;s z%`}CS)&Avu;h9MHuYbKSkNi-F5fqr2NY^qZPN1nEk!FmFlzJnPj)Lbj|GZ74_u|gI z#1`PGuV`Uliqr*DZj@_E-SQDc&94+YvxqDeSh&RR4BxQa=WF**wNo(ZL zm=e;GsMq3t7n_o(=4QW()Aa0k>9O@_`Fb+#(uX&N*JPTuX342-GG$wHQzTB7T}TOw zCTreaL6pDv=o{VCR&h;=ADK)?-y535tn<_qc}MDo2%SP3u=J6)7(fg5GaiWft7 z8)CV9j(Q~a%jdWo;<|jU_(;5=XUFGqmg3o`c{07OKYE?2#jG|vnXYwbV*bM{Fpa*K z+WLmY_=jR=vR2Q3pv-TbBwCe(yC9h&^bf^VnW}lTeoJ$mOu`)2#8#YR>HNj<6D9F8 z1!DMAx`lDr#Q*3YmbbmK@4p->yLXGgYf?is6jKCH>vlR#PQw3uG(gKW@oy zC2_an6%j^!Pf7f3F1ElLMqHG{?{U0daoAeHw2};GN*910y!0Wxm~8VvRG6kUtl7;L zN7EYFn*KIlyf=-m7+iD3jA_(`Z?1~v^z3-|YH=4{o<^^oy5x%rAITALRRn!R*XW01_wC%=r3w0fgf(3~q<%e8fCXshkUZ~tXO>y^Zh{s}n=va1K$>UJy+$ojFZAv5WQLG$}^OL$&Nnn|N`{$=saOgi;mmvcXF;DwpA zfo(3!Y}_SwpU`T_6t?bwh)?JsynG35;%fKQvsK&to|sJe?OpGQ<)3J^M$SM!&epFa z+r7J3y?Ezvyj4lOi?#SN@#-b<=B49kcJM5k#FFod&a>zW@a{$0nk^aH75m71vGhl} zP>z4F=hq*#|Ja!dxvQ)N)1OGY;AD&ha^8_rO(W+j&QYALI7@M6Squ9$G#3;FWRy(~ zc&apGhtkaHO8z9piHZ{x$CtK=wyS691ahq6NX21_Llg%p_Eqdz$|m`ZyDp^?q@5Jo zDK0!*wqu?u&M$5G)n)Y;(t`@VN&)Fmawz%2VUxG~snnd(E0D7lhsi^w_#ef0DDe%7 zGZZgVyx3+Fl}ZJs*%IIs#nTlhDNacrkHo4=>x*t_E8IxVhT{)||iJpJ}t zueC8{-`@iN7W6{nRk%_=En z66hFH_CTT%Pf#4MxToS+#gU~gChgZ;O(CU|Xp99a_Eqeu*hR6EVmrl!2g`J-Dd1_@ zgn)d-d5Uut=P1rroTWIkjHwfLlu0NG*q}H=@iN7W6{jgqQ9Ql0<3I)R+1I6-l| z;+~3Q6-WLr=BZuH5T>jUqBu~ouVPQdE{dH>Y)_NHlZ{%cNZq8ht08}vsS15LJ^lHe zb0B|5+2a4u+@E?h^oV%4Nt-5~Z_1>A%Ab#_T(wf zRh*+ZTXB}+OvO7&nP-I!r4nRcW++~!c(LL%#VLxXD^4nLKOQ`ZB?;^V#qo-JDvnhg zxmWzWTWc5VtE77>c2Vr4*sj=nYVOe%*oh;1wX<^a$=O}1$M&qu)KcwCPNmZ*kDcPe zpG&Pn@u!OO73V3=Rh(1SegWBK69TdnPd~k9>VEBeyRLaZm2F9`;vB`G4- zs=BOn5^db#pTx0Wv~EokmGlI~@rpxEiJ1Rr?M#76y02nS#XYmjZc@_!;YcN(Sk?{! zPfv=a-_l{5eR9vzgW4>+s@Xfs){wPRxMykSn#L>XJr&0)j@&6;W@!_vIw|RPJH@EO zbQ;>Qqij7HJB0fYZKlXst$CU{Q;;SP{wXe=c=~J9#gXKXz8mRTmYyH<<2(NKL~9lD3pvXh>HA_u+s(l;IM=ilw4pO5+UH#a(M@b|nr8O>*l z+|zy&+FH%0NvH3;b(!{5f6*2CT^;&zPlHB9($Aoz8)nkVmVR`{By#WUx^x30-QDXu z(R;1du=*g%Vv+Y!GU?4~)km3`H%qWK2u+&f#uNcp^Ti&!F`=WG#2H)y_9hHkO#X4`L`epDjFjli znbO&3Q$TD#LzhZ^XSMWpl+~_uR&wE{QZ2<|pbA4u64-%?eHD8uc2Vr4*iLcbhT<-^-tBm5OTakJ zSDdFfS8=ecM%5_Vk5>HSZ zqU2Yvd%{ZcTPKr}1WYE1eH8~PR^y&Z+(ogI&DP1p&X#~C1{CKj&QqMLI7e}I zv5O~@tl|Xg57xq3T-!im}u}05xZM!Yzm-j zwbI{Cls(R!F0GoR)76Fg?L-ae!ldaT`U>&Abop~cj;}J;d2|V~rtIF{p?HI0yPe*q zl4}-v)lYY2?D?nZt#@ToXob=*%cm;^Bq>f*oS-;fanCiTvMr8PGDIp4Qyii=P_eIK zPsJ`KCBaFto#MjPWgGldalYa_#kq=2IZ8sd;w;7gS3Fb6zeDkcvNi=|luZa&rg*X9 zG{q^3rz=iUoLI(m-bg5uK=+bLyY!W@kpeX8V@t=$k&43QQf#NV@WR#kq=e z6lW{WQk-Go!TOz~pHX^K-6Pgk5&+VUVsES*3uli|O_)%?p!UUc#h z>RGxxc@!7F%^N|1(nodZk8~2E3c^aSKn_tHsMuGrlhObuC2ps|thHS-I ziZd1OP`p8LhT>&xYyGkTiE zU&Wq^UC6fjWdod)40ehOe^B~dalYa_#p-JwdP!0GBABkCl@)d<-k>-`@iN7W6{{~X zrvG3nyG2RL3WsW?_~q~b7>k`SUeO}Pm6RN^j*ofO+CF8sdi1~+}GB;+g3 zQ=I#~SaU=RH0>^(E+;KHfHss)BxfjIrg*X9G{q^3r`s&YEme?YOMnvBRP5-xjbd&S%{*g>=(hF7iKW_fy6Bit`lbD$ZdSAG}mxwvr)B zai-!OiZ>|EP`pg>V(H@gWly9j8B!EaSDd6cQE`Iec*Q-*w)$lQVwDV$io+C#C=OKY ztJqVq%XiA;<)mb=Q(U-083T&*73V3=Rh+ZJRJOouB}10tOvO7CZ%~|}c$wnGCM6+F zaf;&Uijx#4Do#)wuh`U6Nr+V(sW?n=h~hxSzKT7|+7#eYHX*=Cv7O?=6{61zc2aDoxbRzL3@FZ5oToU~=5};Cp$6pG z65wpbS&B2Q7N<98UcrA+^Q`AE*_}$>G{q_3iesy_0Mm~pYvH6;d}fPPR)|y_rZ_}# zpkiOep6ue8U+#V-gOg%A#f8h1-LE)bah~E_>Eil%_bVB)6=x~VRJ=p+2E`eQmy!K# zJ6-mfk|E7%?qAbiq>}zkQ1Zqr?x{Fdairof#UY9VO-h2VVo${`ik%eODK7j*=}yI_ zd?g`IajxPV#o3Cp6lW^lQP!q_4P_GoG88XUyjXFX;*>Hr=X6Qej=y!+HOr37zoTP;KbYRMR_|)f2qag+AJnW^jc@)^dO>ka0b4MGoY(k#!on0Ud)rqfZLa zdIzDEP$u-{R$gxx)O_3PA`@lZ0$w4K)o_=f)Hz@qmh0#f26^J127W&!HvWJZ2t2Ys<-B(Kh@E z)&G;5od=yt$qM&Cp$~bz9neO^ zHbFNmyh&@IiT7APB+&~Mns#nKWiCUoYCh{L=*2?b-gM}Xy{rY0$39jHG!~QB4Cvtw z-lVBew^!V>4j(t>(c6Qe-Kf4F)PE4?>NVn{oI%s zsM{~B_R#hNtT5Om(VU+DE&j@5w9=()Gup>r6r&d}`R zJoKEPISqN}IY7;gjO@Z#+WKDo} zzu>_(8Zw^aSOU};We$V}nFeyO54iOV_iuM70{t5c*`t4>ppnP8f7?RU(1ooaBhINI z&;WE{5VXRb_fr7W_%{<*UmJY#jJv`Us#Be_x?KKLF+_g!f2Io=mHp|3BneuLJZXXQW*F0xKTZE{%0 zp#Na79fS^{F`1Bk8)rKH(hR%6Xd-C~^fj~&x(a1Luc778cvQa>dJKIIO}fO5NrUbj zd@DCM6-u5*F*^T!0=~i})HLYiR_>T2=u}6Zuf{=V_Ho~jf`;s84TT~)an5+?a9iG_ zUeHf3xqG`p^PkBJzrl);(6>-H)FzJ$Z2_Ib5NZMqYsXs{2n~n)plHY&dWFVR zhx)hYrkPy8ePBhXQX~g8s9OxHXd(}&Nl+p5CG;F}>&Q7DL2IEup^rLoEDt(mWL-Cb zH)5H;LZ5YEorj)4+0f*!96JIzUgoX;1*!(^f%-!`ppSp$oSUGB(3*)j|1}=V6UGk+ z9>O_&88o>zA5LFE{ywa9=nrTCwBDCvDNuzvtQpXm>sIvZw|J;8G>`6M$r3EJ!tRu zyq|m_uOC=7phb{7bPjTcbSpWh6Vw56kfQV7PvE-=JiK;8e?xo!;uW7l`}mMC6hJGG z^FFi{v0KpW=e%AnbP>7)`Qz+xmSr-`2TveqfwG_mFS(fg(4rLX!=Isv{yal$gL-L%`2LqVbFAF_!y2&fi9=Cgr1D!*m-J#n!3}YdC9EMR)^QwHRY74!(z_GX#K-pVJ@Ir5S2NPww)Ho{;@LmMgRbGC+0jbF3V+u#m^P9W-`1 z*YIXMkFL$A{v|ZzWfgw?_ZPSw!F*^Aw(u@=8M+DSyYXK84JzNAl>L5kuzf^F^RStdv?S`g7|3FEQS1#uq2W`f*GYa}18VUtt?u>_i#EbS`&}E)G zO@^*uT|b^KJ3%Kgl}19JVk!-X20<;LA^yBx6DT5p6$rft`9Z58Z|DkSst*1GxDua^#W zgcd;kp%iE=Gy@vngx8xo4(GpijhP=HcpFNDE+Xp)=qG3}bOq`MT@`#B^n|YY@Np0a zwZVZG13iAtIop%u`ET|cW*CAyp=Qu!s1daGE$6HUje&fjQ&0`4rk<;JhaPJzXGkZ1 zVmHm;Bt_@Hrl13YN1=CPd3d!P&U@x>=%WPIQ)nMz1!ahHgO-BRQ4}eFOi+*Utm)7*XbQ9%ngH#_dZQr^(?nh|0o(@-ga$!EMCiDOaFi}~EYZK0OqS*;-BLRJX0aXij{LEsH!4S*`kuOO$hA>;#jLhm{A zfO3VFKnAE9UXYZ7JTQRmpi>z6ZxVTQtr+UW=f9WWzw*a;(hPq=5vVX9s`@p@?n1qx zo6vmdH^>8L${c9p4}6d0G}PuBzMeV;eKrjDKM#VliBx?ibP*HHF32C##};TlwqhM* zL04oztbd1R4rmIKY=)@z9-Lq)dih;ETf?>RU0ZLq^C2`V`eygc@dZF&cCZ_qmG3@PP6` zrxijwgZQX;4mn=u^&UYjudx0!f%We&^B}KVtn1L*d#qoft#?`Hp<#crvLX9FSVy2} z4Ch~<-Q~G^_duaetQ});{@Vv`La<>)4z7V3V_f_IJwa?4RMo&azk-r+4=f$pjo1RH zer3*?0(}e37=!cQOlJ;GMeutU)(21zTv{hWhoKQrZ&%Ja7^;gqY5kyuxJ%FzvfgEj zgH|AC3`w5<9)s->+LH@qj`9(MeJ|L2t9=!Kn2i>W?agBs2y|*x((&BOolm2 zcuu;6;F9ln#k0_H=mhl5_Z-WDylSxaLkDm}{b#81eZJGP4buI=+5k<4RzaqF;CJAM ze{xmw8O}sXQPQ^O&`R~p9JiIF5weU;mGw3g9SRB8Q%7^M; zV!aDBm*0|@X1EFUMeH|dJ(L4^;oNu{>OzvQ|Biv5A$Sma0%byz@q%*~^a9!f^~Fof zb-a@G9 zNM7$b^b@LoWCD+ae?nKGJm^6>uXr80f!MFmRy6HAbh|q5r)=mB&Xh->%Q(aS0=2~E z?iq#i-+C0f1HpaJCdj%=*Fe7`_5(BlvP|WX&=a}_#gXLsZzg&z z2EleOxWe{O1YUH6L30pm1|9v7uWcJayPVQ)Qxo?YL~|+yjv`jVS5r^ zrR5?xd^ZoFOOQW4SaBA*vX^5gpsP?8w68brltO24Qu`U2h_lKz=nGuJY=BH(I&z__ zz@sO)*S>>Z9p!x?Ade%g#ZYIQDb3IUR5%Z^PBbRyNiS~Nbm$H=1v+ZNoHPNPk1;zM zS`Q^auc3j^fneUHeV|$a-0beq7yWqFi-o>~qM&I9(9FY;J%sxx`HF79CY=mj?aH~;HL<_8NtKLdKkWh&f!JY zU(oD^TtzzW?Bwyen{6-bpBfkPQ-hBpF@+NH0T+MNrjS+ zbD^I=ub^qrM;O3KP=()llg2?05gP^l&eN62Fch4W%d=NJ^kqDcgkI1K%#U56x(#@j zc7ndaY#9lC3xz`~pcc^gP!nh+WC{d-1pT1ZkT#wuj$&A*L&u+UXD=9z z^I!jQ-0lvGT?!HM-) z&QOm)mJ`&W0m}gz8OeH=z{9Ir5bJNKeoNL<=vrG=0ra*5>psh5_!qBtZy`9WHg`oX zWS__VbO}28jCB^W_TdTWo54IKWkKKSc%Iu2Z63%6^Uu&{U-O)>4KjTJZUFB*;bK-n z(V;wqzJso`VhN~!GHWr^c?!!6jbFu|bC?JHjxtTq%0xbkPKPdg-C345#1C7 zwduk;F#u`@)rNc^Pw2g+oYNIL3K^i|x$pS%FXh0!*Ey>l)cFSM%`hHb2cVZwt(zSC z3yOg9q2bV7$RD?6Z$cd>^UnVbDxYlN^Ir})b~O*0)6m0jcqANy{te~WLFkKUj%7l1 zFbD2}tQBs7S{~(&SqJTfGN8`#q(Z5j&o_=^<}HN}C~3rc>%qoga;aTV{GPSC;`Jf0$< zYcpBl(3wwIEuhA;Sf(c61uzgAj$!EsInL&+-q2d8Iuu%icd!f80ICR$f5#2gpzoog zp*)^e{>!mK6Zj0l=g^Bw9DD?=HS!kz35`kMJ(CB0Yv9;*sOCW)UcW-0Rp!`v=mK(P zLsc;lj|??&Yv#uCl=usRbvv{6K;J++px1F6+XS_N)(06j)2wV^}9Ij1Ld@c|!Ou26IVUjG@u4+}V04!Zgg7itGR_>7BrGnj|h zfha!zy@VOWqjWC zAT$hbHDp2^5ZeVEUBk`Z0`* zL8*|VE5A7V1iJDo=bQ#z#mOlNYRyeE8ODJ%D{vK~pmXb3L!sN)-SN<2%zC|`C75Ws zLLIU5J3$}G??y>8L_)9eUP?H0rUlM_Ex_ONd3QH~4xy!i&|y^J2f6uh)4ZV%2l32S z9a=b>$BYZK4}-fRv}iEr)S%z9c$5^G2JwKZf+180U7W|oJcm}#XFY|_rzarN(kM-Xg|%d1}?J+ue9ic6>+Py<{uZGy(v;J#l2 zbwimyKt9kir~~xXAe{etFX5e^j^J8o0Tgof0QES^WhO$; zpb^juXfR2h|6YOp5c~(~3B88mptn#A^e@yNs$%AG5e7BI3AY(E7k3F7LDu@}NzwVw z;~2Np7s1w04QLSL4$Xp`p_PymG#QO?fac=!a_s^AP5jzWYgib*Hp)6=0K0UA>G93Va2De7?PTU4vfHpu)+jDFc z5cdQV!=8HMnQAiarJE>ePdQD$O8(2_Br!p5(GW;;@k28P~#e`+R!k_ z6RK0wj_-fEf~#wCRs-}3DhGvnbIcC<7J4&)hu2%^B{ZZK=llyg1m#0@YIE!^G?ygL ze>cHD5d015@55PhpncG3=q+>%8sf`24?>5aOsGyBj_ra*LR+BYav#$9Zyo4?mzWt) z186x^DU5giQs}eySf4}Np)}|slnUL0K7n3A)1ZG?CPNbFg~MqO%MS?8IG z&?4m2OkibHQ54SuYGpX@;6kVlV$UJRHXM5dRfGP7#z1*c1?W0t-J`!kjZyvic%1)w zAZs>))?Io8vhLDfpg-Dj^?RUypdHYuE*#qgJ%rXkmAi862gnCn7LW5^2kIuEZHpM{? zN7+C#zUv@obC)C`J-8cEUlZ$4NL!G9oMXuu#Yv<5UDa)-W$oT1x;Ij0kJ z2XcV?agKS{pGQ|m=x>(EVEr`PQv^36SO9H??n7IlThMkW7wRyctG@)TM(ixK7CHf0 z>&t>n)(ZE7)(U@yX7%Jkw?VU^4bU8D6*L$64w?@MXd$#1vesvYHk;74dEmd03F?7A z#heax7|M;A0=6SW=mU^U0y z^yA^Rc?O@1UqTa4^X2Pb(CvGyd}#O^jn98~!6lg-yb0-NaxuR_mOXrpm;;^K%Q_7$ z>c%;bL6xWQORj@Z6(|$Bn8NqPcR|VXNOb<&0`8vA!F7;v0V@OgbPj7dRB0}2Dbx-6 z9J&pqL5ERhDzpUp1ZpX(r_aAk1FyE{tw@48|HAuX95lWmZ|^AR@fOZG6ncV>SH(lm z_HwKj3|fw|A3|Lb`vba#*lj2e z^fD&Lh{ zEfsz^xnhj@kkNe7(xthRuGt}Ds_5^kpYBxSMPZS7?x%+;i)*g>Mo#yiGw)RvRowJP zTs(=+yXRJDNFNh5FPfus-gD1QA7D2%25km2Bdc;`sb*E?fh^NOJdT8`{R%d#6(!-A)jp)&e9+C8j zqldl^{r6*K;Z&$UgfP8}7O%yot#RJ;@zv&^LOFz^!>Hqx^@&C^t3%;pT@INaP zAA9KQ)~n=7_Y}-0>DPER{!IJ+YE|_Gc+y+<+}Xu2m!1o%Ja?|5eaI@TE?_*zMynU z+9s3IQt6K+=*c^SRNzhvUvRSb;&b8?Z@ovr2%^QFN;Mk>(PGgdqnX+ip5@&AWRcdG zs!TIPpA-AM^|i}gI_9m*uiQ}F_SU=G*9#PXd+YtWRy|W*w@^D1M|G9@1u6Oa&O7a5 z&DoY`bn;rLZBgPWVRYA2H`QUg-4UZXhjvYzEW4T*T}$typI2Z0{*wIhYfrJZmcDZM z7)mgjugdKUF{T@<7}M%EyJ$?CRNm6KKJAWI5p#=@Yto2`_*~8*Q67|WY8Bc?mfH2j zU$yk%_LE~p!`k}Bb{)jP+WOYxKRDy9n_AguPUSt7rVS+<}z!caGw&y}}+sna;^2HhdB zeZv(kn6v0hj@BI!oqY5?BbLO-1K^{kviS>XIrSfhSuT4Ws1wt)F{iD?(oQ>V8B5VL zt+y?$*`YM8<7si#NAFYl#VKm$=L=+|-n!F5@2iigmO*KJRjXj+Gk zukwCkejR-q=g$76wy~|h$f={RQ(OKbu4TzQC;EzM?Ppr1V%O4>vrDwUk7dO?QPodB zvGy35Y2C+ib=k>NJIM}hk=~<9y3x+k#83R-r?2kbRAx$;=|soyRCl@kF@8=u5xmXW zM-=$!gS@Vs@YY2%ePx+A*GU%<+TuJhxgPb>l@lV^Ums9TP=e*XxnhvNzNP6P9fKoYKZ!dD|>LX37D(iGH>5&n%Gyhyy zTus{!PV%?bxHR|MoZNM#r5>f`>zw7!utgwr-?m0Yibb2_%2N$8|30isD|Kj3E1jlF zw4#6ImiKjD5KJYLQ}XE#ooM6T=TUdbZE=y3J$sgdwDUe&FV@%BHyM1N?k(g`MBX&YTdd1wav=Am21T7fl!e_KFR4&Y;g;}(aKOGf*E0-r=dAD3n z!15`%+y~3Q%jMXjBKqt}y8AN;I?>8y{YF|2!LpZJ4#09_x$KGM4szLmA|AD7EHSiZK=-K5Ju2E3AiOe|O3M9W*STvsk(%vJ;Pt-`y4?!AU$H8V=g#Z z56H!v#LWi!`ldbM)Z-Bq<$>~69w>U}1#2pB51qZiJ+!E}hl<JBkbp~&2P31SE;%z0(w&iX| zx#bR_qEcldHK;x{QnoAqu~Vs4ezC1mkyfEgyr}xL&cRLMgNAyeDV`_Wt8}hytCN%H zf>Csd=sdR}{olxrWAqAImuj(dp1TGM$#qG|?s6uccd|V1Hyu@x-xb|`Lk@|^(p&$` z)&OH0G@vH+@(W6R?%cRaoQE-8dqPN^;UjnUBU*GGaLDK!oy8Nc^MLGU^2`}Z|926y zgY~uAx2C(w`E(kRT{eWW%U`;5zp3=yG3pz+v2t)Nqa&M^k`k}cXD=SI6WIIW9+{rofUii)%%I)A4AGr)Pl z96CkOoV+oYUu>0oOJj|u9lNR15||5p^q-?L{pcZ<2){jPr2b-Ah&wN)-gB z^`=T1y)HF?X4%#~D%af|&SiR zNtvni*OZ*EN0!Q)so?8WeSloJXiPV`N7GXNTnwK6a=8O0rtxyQC6;H)+-qpH&*j1j zT39O=zM_R+Mn(83#9DBX;&Xt(eOfLq#=YSC;+peXiRB@BuYfh%sA+Q4 z_ojv7e6qUDt>m^=p}qdzHgPRP->PyZ-7v`SKu0p=?z2tQZmO?0G+9~8pVpc^gMM8$ z-TnS5>s)8JOG`$YgQ={Ml;0?aKF=uVkGI|1NEgD?3j)NH1Oy6S2sLMQ=_YW>P z-P$Yb9Bxs3ZqeS*e88PVbIspa=Hve_TBgl9N#(wvMVw)@n;XURX8H#Gue{=R>8ad; zIkb_3<=AyC-5KL31;ZeODl?9V@~2lW&Z+;Dn^M7OUUZ`Ta6kO=?m)^{ywRgKiK)%? z%>z19>BYU}o@^^U&Os0X@E;$1-~SNRLhQI6{x}^teusKk4zD z9!2!1SVym`P7gnNG@(a0Jvz~255;=X^H6$>qsKIQq|#%hpI*0_9zp(kU3+>SNDtws z@2AV7g|YOh_BHglN)IpkOnVP{OreJ#J!aBl9z7P*<2!n6pvO*n?5D>Sdi1KV*L9}H zAbK1npQT4mBk{Tw-C1kcP_J7@pLO@6=a=*tLOWp_J%=_FlSB3OT8-G{O|J}JMVkMO zF87(JuM!o)^tHXB?iLj}{9{Zlm~BjbY&Z2`z7uz<;nGeK6{cTnH$^-M)7RDC z*dU7$)mrPDyY1XT%M&Kjje(+B6=LQ+nyOiT5JOt)TbSbMV$F6dq2#8^m)pwIx$Q!x zymujAdgf)6rl0F>*hIe4*DT5T<>__5w^gsA9dwq(H|gG@T+uk8 zqyqZosFa7>>B`4>cdljVpG8HMN}avv#cv;b`tQPPQ7c?u+r{~QQ4!r`>q)z4^?GXd z=b~G{mO^>Y|}Ps zTxI!=n>oOH9f8umkxwVIrSv5K(c+iZMT<6GWVX@!wrE;G-uj92u*6QL*T%d#O{hbS z=3B;jMN`ih%`@cT8udv6j+4b`s6o>I3v62>Fl2(6)N7 z2K%>Cpq9*R_TEFw%??osYiWV*4y?n|dYPrhII*g&zP?+eleG=~lZxBWPTXp%4{x;d zi}G|E!g(J3HJ2_^7ePC8`;zi>JIQ(O9ZHFI-hJG9LpA<(QPJ0D^1!ykSS)v7WtIsy<6rDq`a1qG-e~_zDk}Y_r<>8sZ>**eB&)W zu8O68`FBO~vN(z^i<4_mZw-|%FyviDquF*7Y1Mb~$T=Ng2}dva|Cctdxov&>5ajBdNXFISLDN51M2;AL{&UDzevd*%r`RcD#=vn=Jirti|-@RR*; z$ox0`f6YR`Ac{Iz7*+ObGs?^p9;)k;hR)>qiz!M8dYK@vx$MZhhOhG%!MPCh~vpkiGpbeN>Ju*GChmSnkhiFc^*ff0?de4S7%#E6gMw-t? zI@R26xpk|kD1Dyp3E$6}rde*ab`~Ltt~E^|)ZpTWGcEhjBjdk3Mo?Pu6lhEv@9)u< z<~geQsnPs^hVF(88nbiXr;bT$v4)n7X^qy(r+KfE2U7SHO|yI#-ZD()F?;981bT-+ z)aao1HodrEJGO7iW1H@s8fMFxIh=Fzm^L(#<(1r1^^qZ(YUzOL!-XB1>S8&~Z#HYu zNJ#dV?_d2kiZZ4fo~)$u=-cSz4MbNe-$#~zonlQ71;~l(h~-w29B78}6gaLq(f@W9 z`Ia=_O00k6jF{Bl!;L-!(Rn4!e@oZ$Dd`-|y)?2d?^C|x+6fYGRV~>g&+71dELF|! zdu6V4Lx^1Q%+GSgwp(Pbzx{gWN@LWEl+S3cXbGU=icT2Qniw5D)|(roVLu7d!IU$=j#}PcsfMyE`p==&UWb{B3j?v?y8s?t@pLt zEkv}wmfdKvJ6b>5u8F7>qp$C(r`ghI?nOOny@UVqmWYqhi-3pnG*309HxDgvY3d-%Uv+Nb_9rd;CJVc9*`k{7v#nO)YX5n+`@~~iG%)D35^Uleg zJgc+MHngW1sXot0Eo^gB5M7BnbkaAp`%VOR(tEi-dsamCn0oDx z=s<6y(d9u6i)o@5+DTute8L1L9aZ0%Gur(izVD>3As)^0bZ_yK|7@zWt2r;${Ciik zrHlEs(OhWZYfAGI*_U#?Tq@aU{+uVm3BzcQ9W?5zC)S}^??PMQ$wd8DBUfqF?)cv|47j`Tg!m~|-_uimPG&?D4XQXFBfagG?iOLpy5nF8ekW>m)`!>) z5j{HVd)o~bYdX`o94tlns8n&ktqq({<{r@rc9bi#i!N0o;doFER z+9FjzQBmyJ5K$1&MbTjIiVaQd3W^mJESq(W#xizOOiW@lni#PpiY2JA_ZEA*gxC{n z%)Z~;yP(Pcz5n<4zTuuTXHIW(X6Bsju1&M zTed{PL23~kEMoi3Ya-bec#wKTgRrw3sT z&{tx-CHX35u_KD5q5o&0GBnr(AxGQ!S}_sm-a-c`?Zm{l$ByFn4V`Y zeBNHXugwi>Ei_dC(SUk@#(;Q0J3t@62*6Z;4X_HZ0q`^6DBudz%alVzy!clGwC{r`4xXyjp3FZ z^i2OP9L`y;dGVhxhLB)wuOER+sYeSn?T*YODr#gd)a1>vXQk&G~jq^9Hip1q!o_o%j^U>VPIK-CwDCU&aLz40SAXti0 zZT6kA1I9#z%g%hK(`tx^JLWR@^Fc~-hq63mHx}YsLMsD-x_OXNx3lVzYTidEy27v4 za9*PJLjva69m~_r;G1(ZIzrSwZB~Oe&^m`XkNtdylJiCgpWL!P9>gyxiHq;(> zB`Yd=pZ#Fkz#?0cmX`{vK8&Mc#Yo+A-P!B}@ruU_dDtOduzpfj5KFDUmeH85qNDZ@ z?e8k0b*+gWcNINr-dGf>u|6?l!5bp~5^2Qxo7I=cOpon4%m{h!LFHuH7FiT7q6ytZ z?SLT%F#1{4%=@hy3v$Bc(>Ts82^8TJ@8jmzeEJ`saJ{T0SWaG|t)r1gqVtn@u^SJo8l%l3BLmo!K9)h{ZkhRrW=t2W7Hr4nB10dhHM&QFRjY0j1?PAAcN z)L3X*_%X`1Nh|w8US@q!s!u^n{G6z4eu+&lWc$e<@YZ0_TbFbFi5+*9QA{&WG%NSbWZcxg15_4EtbS7RIR zf$+^_U&uC1xZ<0@KF`eOCo&`S!`Q8hxtwS{B6s^m>4uSJYeD37v>&&Bl(A6XdI3G` zDg1TS7Le3SG^>&drVD4J7x{MA>~?(CG;hTy~v#23;A(H9$(lGFK0E}!Hf#C=qtA=m2u76X<(FcjD9hjmmKBD zQGSf>oU5z=p&uzFH5M%6_+Y%-$vbcwY_j@mjvNcqn6|N;u;I^np_*rj=7g-8>6yln zsUi567+~ym$k?mssj>S!9?$sB%EMRg(M*Z57g4wsTAJeyXT_()9D*cfhY_Pvmb)ng zpMpT1Taj=%Ehr<8sll|J!0MBw#Jrr<+7Zc<`8cke8m|k-OQ@){Y^3AJG26^En2b0G znHs2RC0l2(pwoUr9v27p#HjV7>%C2Ss?t~Z<~n1{bLsT*CD52H@lP?-cA`mf>UjvK z))>Z>Veye_N;VF_W)qo$AfGk)0zWmqKrX6Ghv2{pClX*bD zhQFGfSmrhJ9qCbFUs1_4oHJs|0qo$hs+W(`gTA6lM1<{~t*PKtmP@9q!N9o8=O;5G z3_2S%=qGygy2st97&uMfH8&y6W(b*%O_XgiZcRfVkg$2$&Zi%Chs%bk*dB53EYA@L z!W{~s6Q8L-q0q{Ar;yxFr26&(IoLrLxufDZEbq8W$r)l|rLc97q}ZHi&H?B9Y_C(c zhqb_E^p#*q71I_}j0ZIVTfTw^r0I4U~ECALa zO_f~ys{@DyBmvq1x&itFh5@nxOk)8o1grwA18fHD1pERx4sgp5nv3|}0^A2Y2WWeN zrvsP(VSws@7(hIrHJ}3^w-^2m28;qs1mpv300MjpSP%FSup4j)a2jw0a1VeLM#-2n zXLt?29+yDN{Qn={-2au>h{OT`l>xN?jRA>(wty~xet`D@;{a0u{~sBa)653_g5J48 zvjUDU0N(+&1NH%q0?q?&07?OW0qg)*TwL`9gaWDo>H*>aDS-C?Jpcm%BLEWs(*ah% zV!#@}*MJ`YKLZW`PUhm@WxyT4L%>UbQ(vJm04e|?0MUSkfEIvMKv^w2!QBTi1TY3L z888#@5nvghjP8H?=KgPi|36`$BclxfEFhXafWv^ZfNOvfz*E2*fYcA89uN$u0;mIs z?I&7mlHh0u=mzKy7zW4&!g@9Fnb%4!)oq%5e#{m}sw*dG1(eh!;noXo#!$gnJ zh7+L^X8}N*TUHCO;`w`>^IrsyeGESR!->>jxah5YLkotBCjrYmLN%GjFy1hDQO6PB zxP6~I@FlGnA*R&$Wf>L~Yr&<2v6WR;b03)BkbGsu2n@lB5jhge5o{g8C~>6l^_~NI za6r1eAqulGXb24+DGt{Ai;2=An-pWS>GTCWifncMx0yoo6JRc2CEy6)H^3j6)OVEl zQFmwrnMRAYx+x=Qz-ZC0Nw1e7C}IVc;etCjCPzP0PU|r^*ybN_nf_XXJ!kAyl<@mF zoIh=bUV$iK<}jCq=`RDwdyI&P`TYf_;IRiqeuCm-!!a9E_9#mvqWzJpRP3(+MAHmY zDt07<29FUPYgZYr?BgOfE3$4@GLGDdn{iTx6#l&IHUgB2ts5){%+_=A%VBh9j0o4A zA5PL(Q7z=bb7X4q+ru`pHj_rp#1)y8_cV5WD^ou8n^&Mm*`mJo1FAe;q~(qZi>=vjeXH=Ejf*%lKn~&$CcBM+`gYD4xqoF?YDr^ zdJxjo*K=JUH#-2-c19gGLp^wJE_ItAs_VXOPctTnXzg*@I6;K@KJ3Ws-M&&!6gUaQ z^0Yy8eS#REdzDVfIbwAxZezkhmJ{)6WXSR)uNAC&u*((XxOVxvLhxjWxEHt&PI_1j}}3J3r9*xY11jhrmH z=(cCkFO$W(YB|b4E<4++U!3p*vso2YcEI<|Ru1^lAB;zF7xydQ@G+K-XCae+AMn=_ z4wlsae4y`=slv5^Te3AT4{e)lk+?K2);YXzSln@10k`rmfdn2^RYh`2>>BbgKD0s} z%}LDpR}yoTB=Ezqkb_(1%%MqBMU?L4I9iLZb`u?)DrRVND1Dj;9r(jjKk&6Z8m`CJ z75?0oBVD0osMsCRfza-la*oqJ zJnYe2h;i@It6b4Ydxz@fiD2EFhSWY!jH%z}ePu-FuP=*IvflS!a*Q%9=0(-UzSjHn zI1ky~rikfCW@!UzJ{{7q4MS zqhzS93J!tsKCp+Spz=ieb2<*!Z-!9B3{gRwOtCXWRo%}+sQ(P4wQ2}WpMkV?k5tn7 zN6xIuXVjPN0c_B%FR;cL3-)7A&f9qw9gJ;dOQZ|B z!#dj8Snweb`Sv%)+0)@j%zLBFo}5r{-?&)MKVSpRLe}uiMB~U-kssAhys%ut<@@9!}zpE8R>NsP! zXU1;e*%FYaMbyz%9!l?7M1sy#lNMM+pzqE9(K;vSXA4%kt8~sHehf-Hf=pX9v6q@X%uD^6>@p$=NP=`BZhLT317vZQt-@Ja0mf7c^eCg;7GImkcSTz@TZB! z?!s*QftwEbBMHwm>#=s$Vn<05jot$3c*-;H!XC{kFd(OPNBM<%p(n98MWZeGSrf*~ zRfaaJB3CU#PE~8ml|W79rf2AwRrq(Tk2KP3J9*_ohc{M=^8^bZsIoKKSs&s%746dd z2X&?Ey_4%-azUj?$#9e!MfNT$GS!_c!Xufy)JMsh>#oK|#(6uvFwT_rSVUQKMF(v( z70(rB3>>2kEZ2L~(k5!_u5X~RHqo5^uIub6bz|+g{1ff5i3;Y<5Rd2Ws^jLpcvR0<}>znud)=pc|_X`%Yn_6@06n_tHf)W_;@*Xu}Zv=vD?eBbx=hl zQN-BK%ds!j6!tO}dT7VezfetKKVv79V^=BITthLV`zbEt4e=LoG+^Tohn5U2VTGeJSQ2w3*Ju7plS0(#l&z> zTlG6K{-08N<$271N$nrWJLh?8EVX7LlKcr>nJ=2?*8NBo7Kj$QM)Roq0?{9Q(vAh9 znHD$77Km=uYnQ+ZKrDqENH^VqN+BGR(}j7 zirF$0{Qc+vOpWg0-O5bVs*jc-r#D7DHM4rVM9#%HRzz&}EN@oa?8Zui8MP(y0$K)h zTbGrD#bMlVvu%-rV&=~ZUK*(;Dah-fLj+Z54br61@-PnX0)o-yDH*#RGS+@P$v@k# zoYq)-&m>_iU_+ekPR^J=gXgNNJX`MM?PTsp1O494jfz7DBMEC#4s~28s^k_ZMN#w; zNN%noFNfHiClSg8y#=t2-N8F8vKf5J9-)LK<9}KtAAA}>!k!@4UB`=)syI!x_VP-# z4hu-NjtfsTMvZ%vYP|*Bbh&lhMY%rA`^?mDk%+Cgr5{*4W)Dj~Y>gpfS<0JnslPct zCkG?sVzy+qE>+}`;OuclFeir&EfRyFzpk@bOwmPbrVWclV#;dR1w!0ywwiNTklccW zwq6dwumOD`*TNcWw)D#>p8XX!1fLUp9pN4b=e@vC&y=e#^6XJp69qgT*XT-r3P0s&5Z zhJ+@{Fv)f{TPNp`-%_zW^eT)f)#-qiVLifB^cX7M$Q;)%hYl~rZRs4+E)!i{8-fyf z$UjrYGLfRYcZ1d~6ID#tOMI~-VtF=3L0XIsHkY((NjH{>>f$qGD^De_7%N26IRFQmrRr-LfhwQlsvPaYa)gH8QyM#8UNRB28Q_>P7zE z!-UiGONdT>O|?FfKj&B3tg^!HHBncaZC&ZuauJ%Y^@4S@{-dtY=Ur1Z!oyB>$7*B& zM)v!bmtPiAWc8NM=kPLU8iW9FG3H^Hx?5kQSsG@*pXzkgz89BbO|839+zQb|^5)oU zjWlV62sSoe4j6FmS3^Y; zx={O-xJ>HJ6l*ME!dL1gum1`qI-t*hkN;4(4sgo1QPJ&MZm%7bv|4oY+Pe})H>`2H z(GkH}9`wy>(bn`4JgL?TPm{qM&`e(Utc5I^D6R*Xy)~JIWpRVjJyykf9^(;KM_&j@w0PT zFKetm`d~_ZyRmxCwwTN9tk;vRPi(DmlqgZT+Gfti*?1R>tMOerqU-QXWFq8%J?Z8r zB2t?`(x)P{PCpKM;_3>kO7Q+WcrLf9SF=O&^i{W@1+WnC8G&CnOcq$T$-^Vz!`B^m4^|8zW1uEupZlFlF|x#)Lyzv$h9-ir+Ah zN3EvZuf%c}GtXSZVlzd2E&OZzwMrp07UVJA!1%!k-X5jI(f5a2Uc>}eQx`M!{~E_L zGfnzh)bJU0+m~#VI{5pMpUR(Z6#B^ z7cN&+9LHsUe69NHt(3Cdz{jo{5n1#{TG7pK#OK|Co9f55J63(9Lgsu>ZD`r>p{E8a z*8H3RzL0M-gr=f}=G2AU_o+oOzm`jt??HQ~fS4jR63G0Stbbj)vL46LjG^TDt!Q2; z1qHBqym3K=z<{Fc+1fPOA z#I&F^tG;qFE!-d)H%LNSU^0SH;%n@-V;l9jV79u-Ls_~3Ejp}i4Eqrz-&>0IIH2E> zME`6M!?pEk*hY~G@$8Qq#ZaxCDt;#dGK;azmSkYg!J=Yh%TP@-ZFXmKZ0H0yv!l(i z@tN$XGzTUoIAb16wH`^_hM|SobxyV-YRnN@Eo(_xQ5u&ByI6_G7@sBc;yn|U0mnzrV!aj~2uMR23H`V|0cKH5 zb|8g~G0~i9U=EkjnN1>1_s2-8v{|$bcn=-I2}}PXDzVVa&0?H(Exp_fsb&kLo1KHA z=EIde3U)zbTTt5fA`_ziAHEmowKK^2gD?m3je9H*S*0!q@c(U|)9H^Na0M`)lDCMs zO7SS2)4`HPSOrvegLg?6<+KXhCR=>1czV1=BzXNBd!-qDx&`*S8_4TNQOBj3nn*FV z{!z5|uh#J;juZaI+0M*A4*UgX@Us)Xr}aOI!@9evg*jVAqE_3Kb`*+`!0{iWD{$p1 z93wBNDY|?x5LmD((!)YgBX{9Y4rcS9REQ_gfsgXvcpGPT;az3m(M0Q_k5+!q_VwrO zHS|b zQ9&nvOyjqUD&99BBmg(sR(6@fG3F%Dx7$VC+=Mtx>d81_!-7UHSAxLrU)fB>#GC(Q z1GJtSg(d`06_5qE3ApC0f#X8LT0h;_S>%&X*K`K6Wa><}^4kDziG zK8E91Yu}zWJR?AbQCs&wVge6-`DZ9ScZ&4(omBEg$9y&NnsA3g1wwdhVlot6E^=@Z z)CNh(<=d4q7htIk9x|J6Z~Ln8J9GSg;dE`MuzBV*Rf@3vC~*73XwpxjcB4(P3T`Un z=7cHvSXC2nB%Ogrh`@JMMtXBqx-LwY5k^;kf-Z8kWy#NCt}fj|^L`cqLA#o;B250M zJ+HjQh;x(?hvkv&sOV=b(;Mc{vy(^ZDw3?%(9z~Z>RTmgH!CggK~C@UV-m3D>}0%Va~V++m9<4Tq4=w&4GFU4K&PW-{IUV70EtX3~iwv82KH znJ$`AXk?Gd9*|sHAq~l@l%^>CZZ}Xe`>{<~^`A20u)HXhs}J?V9%!IG+(5VYpaLfg z$gmf(-S`buZ!i1>1=Mq|Xyf_fAEha#A3)Y~1L^y{qQ1_hfbQ-UHFZG+oZF!|EDgQ9`% z#vgR$pvctqD5jJ{qP1uDT1st}6@g~04=q0=f+Uw6@Z|f@&O@S$=b4%cfr$yieW>EE zFg?%O4$nhxrEoE2lWL7uVZUF6qzmg?!^G+yd36(I+_1g$LAn1V9%_f>9+PP15fSfp zv${&uu`wMvBI@euPNIK~V5^!2JS%nnBQUtuocbLVTXhF=sKPNwvHEnN4#z}mX>B#M z^BM!KIVL72>%KvK4>+lNIt;D8pP=UX4Zg}v9ZYRlJcCaJi(xnAgB&9tFKHOQs)|ao z5~>CDJuYJEu3w6n&oAtlfM!RjQ-W_N=HGUb7dg<1D38(i6Z7xr>J(?>Xx0IYth=x`7f9;EN!*PfUK3G8J(xr167G z^T$%(6QWUO&R4vSfhl?<$Bzg5hsoIm(b)nS8smTL*{xJncwQv;(cH*99wko~v2De) z5VO^R*!wkKR&;p&%EmA;rb4oBGo&J#oa|1oPKaT;*6nG?NtO$KMPHp1AxUyOZ;h3o zK(Vy)GDqW`v{nJ7$;sR^XYHof>y)OeYsZ5!zIczLYF0$P+&U{H|Hb4iZqJ>Sk@6Cf zPKjaOlT_L?pu-p)MER#gRcT)(xaYajrc8e^s3m-NwT5$4nCZE$4{zWOB*<(7X6sYC>FO6$ z_l)rKlgE}3WW!GVm^=r5+BDHvfkvGXE{4GzY%^qXX#=U?jHnqsf=*h zn1+f~%W;-B1&yKoXYm$U2wDeeCT_vBO%wFwtf*4sMIoYsDGbM<szQZmiKM;WaXU}2-4P_r;P@GRbz$aFM|9HzwJHcL@s zv?_~{qQqeNQ8tc-$K@)cc_}GTcsX=OCLhJnP^dvKc7p4xE6h$8%W~i($pZ{FvO&i@;njxRnU9Cyrr>+nkv{_yp4 z`#<;9#22DN`9yL|9-*dQ9FEi@KF8g;qLKv&EKAe$1p?HpK1aGLI@gicIeEU4*D*Qj z-Ml8Nc^T}c9%XrDuPRTlOL>BwI5HPcjzulfY;2!|*Dy9J4Sx=w^4`Aq0XK!(;$Y;c z(gjhqsvi=vo1S4jfpK>j6a9mtBMooP!+Owey1tf1UVvJ!aUEEd&fVd1+Hr{&s@ZQV z;>m;zIDTM9H#l~%qdgpZ*pULqL3T8Q<2XBTGtjUr4DIy3lZ&S0S3ZJy>3`vnKsb)D z!wZhn?2zEN1VmL+s&$mjieUFd)^HA_2R_rR(Gy<OmUvK z&mi;%F+W5S$F1-ssFwXEl3l{s*Au=wzlqI}#f_CTLy_i$5GBn5?kR=wfPAW7$;^Kw z+Hpms1$9*^!$B#jlz!ZqVF(YuDx&-waFO1|yYohZw(W1~dsQR`{@h5(1&R>U$Y3Rx z$*?4XzJs=16(L$*I(t<#4Q%(8>YpHm%AKkF-%!*w(N`J|oV@vOvRxCc+AeFrizRa_ zY7{U)+`h_zrX;-qRlE-6^e36r{<@eRXhXtiw~8og z^FXB#ZLzt_U0;)YT~rHf_cr*S0JV%9?EjjgZXnq3Hh7mBd>Gt|eC`zuy&-A`7RM-w za~n=jg9|wLqgV9Z4UrHyLJj6-s;CA>b8w?qvQ!FNQ%dTG;iKp&THkJq7D@T@D`Iar`DZMF3nmF>bi`5l&JZQNkz~IEF}Mds-o;a? z@fp`N{~TaK^$Hvd=Jw^MbsN#61z+!VNOTR@f&Mea9@Uhe)&- znvYuuC_hc3+%|)^FG}>=pQz9}Dz6aDzavaOQWXu>!->A2TI2(&b$=4w6D_oEbpD=* z4EnS$ms?o?n?cF!7`O*zOD!_VqLSO-S{!~@Ue%WpWzi_&FTP!)JX)gv#uepDf+|K) zx8gNSNYs|N(o$Kpj+Y%3*`|N52Uw=e> zOGU8v=UkPyBYVpu`mj_~^#1nW=$Vgbdnp8Pv#Xa+lO}3nDV$jPBYJ?u>U_@mzfCOi zkpyx4pb6d3p4Sm1C$&LWp_X_z_n=%nk(&G=l6?FBJJRqg*H8prA2Nyqh+uzns4Q8I2 z$i1D;Wl(evUp}Cv_eGG>+cw0o}VVYJ`4=6FB1e0jE~@ttiRs0o8sW zLi}}HW~DLShF!f+84tt+sU4D(Gw##X2cl2z$)Ei-a!shW(K1rZsS;&c*-XCz&Ewq1 z5wZh&mZp@iwH7%-Ud&YE>|jZIDNawOt&WhZWg#9MQXe7TIzslBg?MoY@4T*`IfA~S zeGkQ;+_Uh?2@bO9ZNu|G2(n`e)p5D%+YrT`z-HR-2=RC)1WX#@>~MrUDNqZF)L7k) z5RD_`f*RtS-!`0Y6`%l~)P~*Ri!IyO}IMDOoqMd=h;XqG( zi*^C}k^?>9EgC0B(`g5~Ezo}G1ujlF@WUPW1{C{P)RMNkztf1vB46k1NlzY& z=DOPks{ceZYGsE(mU^&tQ^r!0lD#F8B2!GjKq&_DdkFZafM5R=%RJi;#(=q$Z8NxO zCWa^+T9F%Ve1a1S(kj*u!GEpt>Wp#*!?_wa$%1$IE5{Op4i391az2ibFAzUM{xrzJ z|K@Q1yb!6kkn{I9DM^9+non+j&EnyDf)7>IEw1K`AjCnv^`i z%N@|J-1{elx<7>#=6h~5;i-u9)LxTVEP{ud4NDOA^;40gd*MnCo{A}A@Q6HP>>;h%#72{LJLd%ER@gC61g=-eXo8DI)3LE_;blRxDLo~2= zv4%Rs!HT4sj;n@v1gX3*=j4i`DdU;QlNPyPUUs`f_nwJF-EbGG@m!dLUm<4x-Vhvs z%~q{FJpj$Ez7#)EBHME@SockP`t!M{S3%F4AVgUp8VaIXO1u85r)DoitpN88Jbu;C z?&YBy^fdj2Xr`O3r`<20+v%Yv!%LAYqV*_4G&;gxW8-O8AVn^-?Tc?pek%U5ESE;5aNeT59VMw82HnA|5&z1JeC!85fr zDjCBP(9rxMU+2h3`Q}6(jM??f))n))o1k60iJ_72gmjl&r>|a%NaH7b2C=ku!PacH zE=i!vuSH{BOK0-?TSV4Wl0C$>TWA9>DB~Xfg=vAmy!h+v!lidD@+j7y`YVJ6{SD4? zuM;i$TeQ;suA|@n7Tt9&PSog)=&f6>qeX8pz3@Hr205J6lHnimkq*Oc^*>^bZj^>v z*rDZv%EAu5XeFJri)9o{b-Uz_8b?fCZLZ(rmy5|9ZP510m+1=#*VEZ!}(@V*LbCa~4v zG55`uVRhx>DP+`2Az_;tZ5ibSi=hNw+&)$O!{BZkB`->$Hd<+Xg_=s-7Z}@F<6slZ zHu4ZTN78w%6ejh3gNreVm*|aFI-)zBM2B@!tWHiM;Ux91*2S5d1G=pOjmAlWX~d$u zKk-0$s?!PkO=UZ=wRt0ZB^Azdl1$pbmx+AB=6s9=*C1TRE3e`5pe~SmeX5s&3(q@C zO|?2}LZPpaGPHr(7sz=3840gVLiD_YHR855C9+Qonkz{$x>_v?_efF?t!_qqVTh~r zfmYYG8O?E%YP#=xEi{+@7Me|VLA%|gD(?3}G&2w7RE{$YxknG(q=wpiRK;DY6LXix zC?2V@>z~2N_eTs@7-unD#b=*ge@*et;i0O89=J=h-KC1U#&NWczZK%>fV)&vSJIUJ za+g|Zov4|I)E)OY7JEp;T~_e9(voE6>sKbKXpn+*Yh$UYK^l!K8tV;GM13#iOq|dy~<KE-R`3hWKna!3}KjRji@st`x-a=ffp&5VTPU21BgLXq>_E-#2O3<(Jrp8p; zD9x);7e`LEu(IIwRKBbR)AeKWWurGg5t8JQYV&B67LCCo=lIiIqZC&8;rm!H!HT4# ze`hX6ciBxI!ywJNgYLu8#b#>%oT9v>YKALASze)_>OZI6UQ%_#8pK6cFjceX^s$#z zM`wLT`@E!_P7x+=2&<3SO^*;QS$Q~ioEh&hLB5d|ITV-a(qP;eZZ}O-Qq9h`n+lPb znk$~QH7$4s1qIlg_fvUaaJQR28A|iKr7&IY5ceWeK9o2S&l zSBmbS3Fe2I4&qId9iM64H6@R*vzA}}!TNauWwV>cX7c9CzoD{8@h?X+@Q&0PIq}>U zF{kV&N`>9jKa-C7N|CylOnT}owfAZZ^3q0TYsYXd@`w!T;3q}tPCuc^eo|Mjoqsw) zqd4?RKe~ZXk@N(!vpMDZNgchS%P6qS9FyDiqcJAL|KTyMFiA~x+n>@|lhnod8`tqL zYKVt|OjDmytiRMr`y1K(rGRRcxN9J4v|fNp1ca*c1=}j#H)6IK>Ped^=qVlXml_*5 zA&eCXE3J4+UKOwyd|ii9Do9;*kKdX2)N@B$IMlBB>!e}`>WpfYe9@Si7`X6~nItIJbs|#SgV20szF$BLBbDw<( zDc1iEmqxy_81Ht%jM1Vmg&!s%8Qw~W(Odr%2z>rlKYB!m&l4ZJDItKKk!jQ*Q~q%sz{LB|di3#v$}5P-^TqbqH)hy|5ViX_9TN@m7<5 z;RT8dlBxy=BZQw@n$JlpHje!f6ZdU?KTlJFq~O%^y!W=i!qR{fMzdm=T~x-SA?PjU zp@K1;05wP-<6}4N1Fl$KzzLwIqp0q37gKKhVD@M0<@R7K^Wys{z8bOyqD@5X0Was_ zVV=Hcn>*sg?HOyZ>l-oJqL1T`Dw*OQD4QpSfhb3+^&&^q%d?`966QuwUL0Q9<>kS- z9k15_TAYWD-);S!yhEF(FbvQYd?5#l|AyR6K zb6mxhk=H@N?4qs9@e~YaTe}H%)1L_AmG>0$#W3-7;a$8nQna?4umg!{cZHQE* zfkK$&o&O>zYXwHeZH$sLUjWHIqVuyNtz-9`R)kSY}PkIv~#dx0$Q4SVIks7y| z%}9x%QjJgrofTlVwkt%D?%7R6z_1Tv>nzO)m0Ed^#BmUl7Dm(%ksg+Jo9J4oRNKwi zi`(q5T%j9Ps3=9%yMnP-ipA0pi9(fPr7*m{gN5c?9Og}t;Q-Ie+3syf1Djp~S!pX1!kIX(zug+LK75 z>Rmb*CgpkG#=R@`(4h!@^mnO8xYVSrQmHTT7)!~YXv!T4N_#@Hy5bZ!utNHX>zU6a zs>pv)Bo7Nz8UyVu)ss8)TeuWb3z&EfegFiVvCZ(1qgLXmd59u!Q{u6_3%_<`Gd#XS zRU)K1{g+nZh5-L?3|m%$9LrY+E%}_uHVuYLW^9tj_#lifTQ?`$dy@RJ1GDZ4#znta z)+@^ZmiiPW36y9`H}1x{Y7y1hKm8>A7y;gBXC&QFc7`jfIyKwNtY7u<{!;@;F$)z{9VZfFu+oj^CzXZAVuG zVo4Z*B?Qh9YG0lPY%LH=mKUge}8(vef5hdyRsDIbM!GEn0aF| z)JO92s%`XXWvLM^abKt`h1Nb60()n)3uagH9*e#={ACNwJLYLcD0r+s|2S2Slp5$B zb)g=SQZ-$(yEG$Gs;zUmOW#LI4Ra9}C75hKXwiSKxN}Ew8sT_X244P?XW&+(JQWu% zm8oqSr#!%JXn;eOglA-y%p1JTKa9rN>pIc0LtV zd<5|MjDPSWrB{^(`>ccb3-l~|^ja-vZwAN2*&*>g#jtzCzFV z7{;&OLZ2|c?_2!7o50uJLS9i)Uz%4#a+f+WX4emt2aM0OKgv_Mbp!bJKhUEnsdetJ z+|tvGc5u-H;8y4EKDA9_)f-!{u7lpTtE@#&tCz4mIF$*&LY`tXRAk@9-Ms$qP7lG2 zR`d>f(CzKwVAt#3rjH#*853p$xKc00SSvsN<{{cw9h~M*=jcgwsWDzGt5E~&UH@~` zu7;H8bL{u>8pLpkR&S)EtaSS0D)8Ml(YT|JY~!Q z{dIi!&#{|t;J^d=Q^ge38q+$j9d&IjRn?h`XFi144jt(=i)~Be@EamEEMN^YhsZOOT zZPf#a-BdZP?DW8_xb31^__NVuNtHrk9=1{FIOr!w&{~+{l!oNB&_H?2Rm(Qni%OZG z^gP=6ZVkGSDh)DSZwm{Ufe@u-u{PD#MJw;}ccBh#q`J}y4zli}#CVSY`lO9i+tfD| zjja&lwUFbsPCB_Jh;Ox#8tHsfDYz|;M<1qA8h=yw($u!-fW~{(4tRwUFe{Dxd#BPj zZKX!Jk*6FT(8|#Pi$H^LKLk$1JE>uHin*DZyfr%Cm5 z$F)>*tA@w9e6UHuZorKBHyo!)M>ISn08ae1FX$|j!<7ZC`TvNtzcnH?{&yrVxmb;a z0}JFJu8v5(%5&P?I)uJzCsnK|invv?t84sc~B= zaTChox~Xv^OkAXIKvNdq|6lQaD5C@VvR@KS=zv-6&q@1bF$DSxV3Q9liR5u2F80{vR6FK>nK%j5WG|A&@5gHJ^}$!Nk zSRkzRiY>DuCvMMbr0vb&fwj!E zIN`dj&RFP_iE&c`K0z_~Bd?lZQy-r2gM{R<+@cn>s3{H7r5fmqno@OLMFX9vDf#;g zgA0x*o~hO=W{b1ub{8(r6OY2bYeIBX;hY=4Pg2;vMw<0HKaFa(q#Ts@xE0o_Bem7} zX1O>*6%j;Ao;=Wnto5WZx<^vsKlLC_(@hij(HP0U#&}Uqc>(D-vG6}f&M3#KNiUV# z3;HBR8maXsV*|;mHPMO&Qhj`mHGl-oM9vMRXx#?q!g>v*7%d($8Qe(fiqB7tq*z!K zJZmJK(E8AU#)#sBpW6V957llWnemy>MDeX}f(YKEiB>j8 z+A)a4$F+g@UCv|-Ri~oupP)n#c6L7CA^*fDj%OH{;QGTA_Ej!wqbD+E_iXx_jVl0R>&`VxImFmwn1X4v|M8*68L^KyqgUXC~T3z+3=bOFLQ2%S)20?u zEqt!FK)bt>Pl8m{gj2IpE9I%l?Ytkz9o(sTD=CydNRWI$HZ=iBxKYm}Z1Q{D=t_bV z4{vay6d2+Lar@+C7GjN_3cZq&&~`JY(cX>H6Qu|cYLlfvowpm=*y~E)B}yMAxZ

mGCKSo2CO{brJJnTDS&XXUN)ua3Rq(#RnwC;1K0mjVf-0aP zan|*TIi*l0T3_4Rbe1={&;ta51~saw8{$HZlcY-UqBhm=nSoCuzA01K=>s)~C@z*> zopF~C^8cvcZi(v`u3IH>1%tHE&#*T`Dr}xCg=z5v;;4x7s>nNasUavU1t%Uotw{k9 z6fr4MBtExOq)JUN$gTPOoCRiK!hdQ!34xHc_NuQWmg00(>8R9!r{xSi*Q{0*5U?gL zBj#DM^;yaLc(vvoiH9q$0NPEv*3kS;QnlRsqgh5cyE+&Pi@s zaNq}O;QF$_1Ii|6Sjc{xX^KMAUZuIV+L6HLD$OXBW~q`%4V7kJ8BH!|a=}=(Rf&?7 zgoH}8u8gRcnou>BW~h?T%_ya`)-syLDvgs$Gf1J?rP7Qlqw!T~lmgmJFTUl9Esyer z*4Lu%R7UiWH)5+{C;M%t+X~TmHKE33G>26hQfW>oG#yo%;4+$ZD$O{RX1_vHTcxqH zIG&q0U!lo0yr&XvQ;6JDqFZG|{nUh_Rhn-Vn!DAM+8-#RiBoALl_qZ#*KDs!v%ZX` zf=Z*Li!M{rS9m`ap21cgx|*znVLT&o9Fm6}VAa0svs!D=RH zO87A~{NYNaiE*9K3eyawGM$z1jcWLLN4SKupTuGux%ez?>nfRb9+gPfO&X`0@UU<~ zH>pVHy(~mi5`m%~QGbWJ>oPL;lxhwiinC?eEBaVw-s44iZ4j$P*z)TeX(D@SWnOTN+0ERgR&C`{AM88bV()o(*t!uVo|`Yb>OZ$aQx$yOC7i)DlW@c zzKQ3Laqe)FFXBlJc@W>}-tENpcA*y*^1Qj6RSVDb;)$Q3nk*mOD=-$GHx?d~*9T|< zIdf0w=oQH!B$}5?of3Z3;*Dww&5-K3JScntj%IZNbj{Bz&a(rxPyUlU{(VCks$@=ehhJgapp>n z9CVOnEE91CGAK=ixm)5t8N`s3)#W$t`Kbz9{K6pUAW#J>R6&OEmAQ>iz$yToo-NlU z|F!SfJF2v&7YEr4S*I}=b7z%Fds0;FEXKY+OX4@z_S)?heN_}h4n*V0gTgsU&Wro5 zSRafKts*;Qv)8wOR{gUD&=;2@_;!yBT>&?Lg!}*x>BZ_#fFjEs+8BK0ow%6G62y|0 z-l_v}Nk0I5S3?RI03N|aP4LnEUC+D+%Sn&R zB^(pKA9NB85|39y21)+if8!L;efIQp%pVL3leIIXuAcskJ}!TWDD{hAdXMYNZO~+V z6lQsms~qBte#dRL8#$aQ{tsPc}`> z1T%P_KFO4#8%C6qD68^-YzcZh9%riTPVTVz1@v{N=c4E3nRvVhW|O<-E*T;pI<9_T;;BEFTW5?X68H3(_jv=85$f#MMmY9 z4O7_sFt!zAdjKo@{mjOjc(Lh#{)#mOY8Cty>+e}H-ir0ttaNvX)Wo&oCZ3{tvQo97 zQe4fZS9wtIVrne#KzFd36C5^h2jz+zV6b5|s@--2=csu@rT)5h&FS$_)UpNDeqRcX zS$G8r#KvXgL=4mTne1cv@f6h&C67}b0rCfmJ_yKCtZ?yxN2%2)sh{q` z5n4A2I$vKa^%^F{>6TokrNg92+8X3L9A}lv%_wfT6csQLY&=wLqq%u_0w^c(5~pS~ zdAJmrZo_d|y-T%l2{N@AY6iWt%hfrDxaiDUT(|+{q~=2ksrDUGHC6jrdN^E)Zlsvr z=BC_}1J}QR+Onw;eS+8c(coBhXU7z^8tlHb3t<%PIPIiiVz$il|!juqeM2u8#&u>apZLaI=0*nf#%{lT%zh%Z2@ zBF_f#n-NlE<|?$wb{;wM)(hN|>cCJ~HA`Jcp`M#9Ic!G^4f{+)OtWM|N|5qgX)ygl z72^&}1x2q2Dgq9Vp!fn82I@MQ#@v*~ls6J0Ah|PbABi)P?*+O%Qc8%f_cf19YzVf7 zrw;yK`ul4jmHz(fpxWQv4k`WZ`WaSk4C&H*x;08_)?he}TFR@?WuuoSUs*`C&>>l^tR9m`pQUMIq?*2;eTn*lcbuwhUKj`7 zGwA0rQVm`9Gb$M)P1N;#PJ_l`v3eh-PGHo~$f>L&RqPM`dP-l9mBRXG?L+%wy*&bB za(-RI=^`ETtYCgva61+ zYMlcqJzENJO;(BeOrtSObRBl>Oq5eb1apr7*E1O7Xu$hZ=|(m*iSr&U87~FsoLwns zywuS3&8J+P(D75L`*dbdHHHOGhRw` zB}^E^-!z3PPQZ9=|BwzONH!fgQR^J( z3Er`5IuWAGi>oPnqBP7Rmrmp@l(2lFX#82A}MGq3UZ5yjhC&WV<0k<2b6_QvaM37xtmD!*;WziW6=ZbuoD zq;$_ej`HdO)h4g#AJMK!QnF8RP6*5*kKn&1TY{Xj=R@+FELHQJ$r$|c+LhS1Pp^^_ zPSk#~^h48LIFcX@h+B>FwO_dh4$DK7V+t-*O7cpmQU1oiZn_RVXBvrD+Jjod9 zJx!_}I0R1;DancVW-1DCDLs~ses^(T9I|N29Ewv@P==d}#8n3v#o+e$Yc>b0a zZT4y$S_r13vEb8-^?$GrBlz+-dYUWMG;Cx4w6QU#@WR_;s+lKst7PGK@~pkgtp4A` zg^<_6e(!$SGmM7ny%5W668E)Y@nGSj?&x7z*+?c+Uun{Bzo43Nq8t$HPa!uI$2Cdr%QF6!`^5$wBU~LtI&AK3%ks})`g{ARUBhDel~_`&cK9-sY-2U zz}%@~RT@1*O3ihGz5xblcy-6x8VvYxSPi2Er*45F`54xZBI||3yz5$d?raH*3tL#t zKv3dI8TWe_pH+_kknwwDog<)EdB6fSz}XSd5&?Tk^+;(x0-EIA(kdC@nh~FU-ZFQ= zpetKt@a2Ui!11odMfvI?8l5jiSJwW*^HJte9g2>O(qw^4H3!JC`*;LFD!y?ZjgcmyGP>5m*rAW;Md4#ULQ=7$U+T1 zl9FNkH}NAW&Ufh?FiSAQg38q3@uv^?lr%cgN)^Euqkm1S3@`P)?4RT35QSwfR&)Y0r-%0!R)$&5R0j+;0#`UXs z{S?{$a+S7!EH!jH2ayymgf*=F0loMbbK=!yYOoNRrbU-&`9d(yF_-Bz`;T6t{)^xr zeu?(-*ZmSzUM!{RMu*eL#ZoKd=pit~sXisLE)t7(`jYl7#u|-Bn3qVELgK)wV)@`U z(<z16XqWP!6PIWsVh{fDEr|e$c!y;9 z+aPXLG`{klcD@6RK5EQ z*LA>EaXkO`j&gexA4=~CsMx`Z1qHF7VDG&~ja`EpD=5|=cAdoDqDkx;#Tv0;2YZZN zV>!g$yZ`Upz4t)#`}6rM_iksl-0bY^?Ck7ro4@HI$^E1U7peBoc#ghETliVvA_e_| z=duelouB0{(8pioHU8f>hKz}ArcDeE!eduAD7r2OFV<*C%Ti?@c^Q5;YJw$%DB;~< z0XTO+BTFAW1en%G+aoHUh%}|Q2o1yP-?5w(e;ENV?{kjkzL@$?T7&&+pS9?67%lDf zlH=0cpU$RM3+3w4uF*7ip}aNl*QF@R5DheJy*a4aF(M)Lo%`QMpHpj6&qZgtD@nmaj$Vf6E8)ij-MEW+ga2o+r{kCdu=(Tc@#k*ICwjE0a;C30Y7CL9{UG4TZ~?Dn_b#98XPJcy*Xo)t9ftdTaJ6J8aD<>7Fb z0y9~0+UJ3|TY;JWW(B$SS*p5J4zvkD7E$Mgm%lLMnV7r2&f?J-nzdB+l}?|b4NGOO z;O%FO5Vo;W`A6IdD=fm-OvdL8v2&es=`x)j~gA)7*%$u*?oS=57{KV{LXWpb5( z##x*`-T|la{)2oJ&Lwc6)}`HD7t)7ia-{D&sCvM0GUGU!!uTY5_XA+0`O9VW-{rEa z&sreG?9kccT*GQ_F%mU2)jFbvjHQLk<%q&F=gWq92n!IFBCJCA9RVHCuodAX-SYJD zA$bLMIi$N%u@!P~K4`@f}KMwz3fI+2Z}#BR(4F`FO@wMOfdML{cNugKaKq?k=CAoACw zcpiwG5q;fSa)B%wv{LqTtkc8HhkF)V`LJ*qd>q=sR&Ud|wpwdM-6V6{`u;*^q^B4&f5QHH6y;_Yod0q(6R@YfD)p=;^PrzkFjJx>nUnRjO%mh(Hi+X>HR=z@f&oL{cC8 zq~?Ff8>K%MlI>b7^ry|Dwrk}WX-hv^v{r6ucNL{c6fx4#m6UaIeZK~a{zrkjAWOpO zka7!$5@Ypqy^_{a*~PL4-Cifxlh4gyqE*!?xRqb7N9hzKevztEzxD9Ka`=T-t(VI= zwL+w>E-i|q+w0{jzT>Pht>er)fxEz$Jk5RCbgHyLUKf0MkPFmptRJ;t!}1CBeH&b~ zbp(bQIPOlvw>KzFwj1R-#^%&uqg>Ky_;gDNpX$=Mjq*>@8EoO(BnL|k_fy0s%uvhk zr}$0iT3-A0u7y#M`;BEVW103TgT`&bFzqhIc$pEg5I{=JXZYzD)0+DoT5W0D@d zmmc#ocrQ6^!P9mxmEh;SJrswh`_VlRW65LS*W4!oM*nD-0mo#~h%FGIBlgg?E%Gqq zLMpXY_QIpiR;YQWGHCEtxrkJ>AN{-)Znqv19YwtFPkXfwHgS!=Qn?22CFeh7FTd7i zg#YS+QF|$dF+!{u-zs6sUK;wR9O$Q_wvcU&A(!mGE+uOZZTb^ZaO)mAfv4Zkz%*^I zXWXyiW;J+{TLWEj@GePr-s_WMkjNF}kE@4Vv}ulNR8Ah`ePdolKX# z1(`AE%%8HW|L8n?JDs1cig?$Z zJ29`$+(x~3q7iU?!DKw0rfk!Q5O2>UpM`_03w@86)_1VeP5Dz5y7@+9a9~gk)`F3fJ<)x7Yx_NWiv2KEw`0E zqUgrG^73W@mA`fgc_1FQ^Q&nQc_1FQE$V>JHtMkljq>Xjnz{##GHDC_wnz4J>b*rL z0XiZ2!5-OFs=tNq?vX1NUD1ul)Z9Z zwHDCVLU!&JUC0jKq6=AgcxyuT=0;t}9@wZ0*;N~LAvA$dG@b7>y%76~zlRFqAVvV8}ZNLdIZF*F)D8(L> zf0oXSr)vl0Cen;wsq7*7j`1IIJ1ie_coOp#*Z53J>9>#WAC_~ajUVd^NMj(bdtkI2=GJ?Nh!az+2u!%&@^KsM0u zkiO5GO(D)ZIQCp1l{_j3%SpQn8FJpcQj4QEirz;c|c#xZ>Z^UcD)K#H;xO+lc zky}yp=on`IEe`P>>}eC?4pFJ&azo<}=_8NJEsaj=hw$FO9O+z1j4}9rvZ=eOmTw|7M9+F;+oL`}pf>n>HQ;V$V7@C)LY3kW~lcf1!KKPzW9A zztAO1XeJ7fl9$ki)ADd>@(L<;Mm{IiT0tMr$f?q{jbmE*`*lkdItYci)6jp3PPK*7hc4|NWJT@-u zft5)0gm>k6xt3e=^4uyo3czTa#RlbRXL<4V_QX z*$eX0&^f))ozq%}KgTqe@H=K_0xa%$D>4pmc=}K6oj&iPEZa)qSJIbUh6ZW+VGM-9 zzJ|S0FO|$zdyb)_SLF((a74zK_GM|2A!Eq#nq1B0-e@iIB+T3;v(!tYsns<($}{3p zA$FtA=vlJP@B8?iIJR*0o=bmRlXtrx86{&M9k%-?735pPOdV|0Lt|*;`dkVSV zfQH#|GR54$`cSpW>D_N&9_DnRgQaujPN1!~X*`?G4JDI6ChmzrWUsKpl1o7-|@$)i2R{VT`29E(TC z1l=*xVtHqGJgxj!t}CjwXQ62;)2-^l+n!$nWV6(4f_AB4XOWr@+gYTh9mU>Zso9mT z-GN%Nd;w9SH)KNuLL@?qe4!?O*F|V}gGQ>@2r|1Y%husSZF`Cit8!FG z)m}zywVGP53qAe3qb2I2}o*% zD5@5X3Q-8%hW@MSZYMd|-Yz1s}d6f@I4 zD7M+i{5Z$aqSBF1L2bO3>r)#p|PKqwy5}LhdL9Cew@;@)@bee(LrTqi+3p z9j|KxTKp2}k0#UhmvXz{lMVFvJN5aAE5Bg5$JJnAQ!wgd=Ag&HH!hDTXy%tY&$W3}x6!odHBJxM zHBv9rG9+7bUOtkpy~bp5vK7J1DOQaBBdOpUa7uGvpbpF_`RWigl49P-MJu{n(>s1W z@BTQ#QnHh-YgjYBJ%Sb?W51(Ti~_*OzqGPp1fAxh=K@17+9hAnV@J$?3+q$vFp7OE zmk!!9OyfFjKCCg_MV%*4X>7A(7|nc(IZDzn+Q`o?!zhcNF~iayy_G$UQshXoe=n!n ztQ}#bnMb|7Xx)2R1kQU511-W*gjEQ?BWys}im>CcOy}OqCFQIs7_sZ$BD)XpV}27t zM?T1f3niB40i*86)T1nHP<}lhh-G+I^JQN|V1&mp{oZC24Lnb^0Q2z&Wn- z3W#LaRyCP>T%yWsE2LSjod*w|w_Jqy_r`jjJ}&wIT)-4|1QG{k=MMYTj_v2&5(lKI z-_fr|5mLT9d`eFDFmf*Lwegbc&c6!OfOy+!jyB?j-EMYi2Evs+(mxo*cFEyG6@An! z-;H+Lio#O(UAk^7Vx&j7&)80UCvC4nQ|v@ViK@^(J5j;L`>`**wiC@OtbF9FE#<3K zqd)MvxI4y?8HiK+U{L~tlpW6)4#G!#2uHqJF2fs<`gfDP-JIKUj0=)sk(s?s>pb$M zKkP+u2jv%Dz-(*_*R*T)!mmIIEU(Dn&O_k$T23-rr^H`);gdwvj>r-lK2x37F}N|_ z*x_U-yJ@A?|4|KCPEBMHRA5~wI|=A4dPN+3&Vn>taIP1Q_T=GNO zFN?-lLiSfU$L)@HT=KTn&-%*2tR3D6qQy)u!JLQn<^r#l1&un zYB%8lDu^#r;->z*3}aEQjFUfxbL3S2-gv0H(E_M;3;x~sSK6qElI}wmqx`9MHs-W# z;N)OhMNbsrUh-0PWSeI9U4jb_UN|f+Dc%LRwb>ch{YphN9}e7vZ-SbgMr9pDgNW`( z04KL9KL|d}8va#7RxufI_$v>c>PzCHet^%4b4(7ZaA-08;UMZHrB&nVXREKOF*bH~ z;#{Q7K)R*^DVgiX`?54Q(*rBDEL;HH2Pj86sin0~sJHKGsLQq>= z2TYrpE<{wm%<~rRZa2!eaMuORp)K4kSO2JrPxxx#?#Bw`;UsF?Ja>Fc9i2pDm*jRv zG#;E8`Lso~+wZi;Nz9g)ltB&NWl>9K@ts_?JnEK~Mf;sajNgK)tfzdnQV(w`&Dfqz z0R_Z`@OQrEspO2Z@Iry#A(LlNVj0zCjYeKV1#8t52l`+V)uqGTsEUgStQ^`^laSgB z=W8MDkOwiZ9$BUIlP)yFMR-S^?_y2Nt9Wb+)U}#Z>drjSw|2xOUFarKw@ArDF;JteVSPBE%y!L1>9!;bU4p-OH7ZnuN1deI>0ZB*GNw)tfJ9%prMfw*}Gq(rx{;MnPD+#jHkp0~<>gq0v`u$pxRf5h(t*iPS|Isiy*-b7UA<7nU0-OfmzWTEJ{V<`J&1E0Sx+$U z?}$rtUepJgmFGdK>@DK`e9E#&wa)w4`N<+u8`BbRQPJp4=e@;fY1%?+<|CRYB_5%J zOdB8PL9>1oW|s!{Hk9K7IXb8n74Q|_-?eO|ae&2`oZlc`H4l{E>K&37?PzVjEY&G5 z+UaYn{qvSI%@;+UYDt?>q_m|aoy0SeTIxk>6P>SD!$;?VxEtnQL+{#>{QZPiY`r`b zIbSux5e*hHFO?s^$rDqTsBVGaAa;YWE295!HsA++_7g>Dv7hh|BbsT+?DVLch>|Kb zqqlxg{$4btYW^5Swl$>@{-T&Nt*KsZ+}UzKxJv_?Qii|qw7qLY*Jzw>gUgA46?wam zFx*FYi0};IHNpo315SOgL$Gj;b(l{H1(4U^hIr{6Mee zb77L0cdPEUXHPxe$&*^g2?`(II$iNlFqJ4QYDQ}d;{f5BVBK9G>SkaaP#o{9fwTH) z!h1q0{F2=d^D$6q&ILH%wwX9Y(@3{|w0EPug+;mGF@?=v-vWoG=XI3Kt}vajV`0=T zDi|z=%J+hhdjC#J3l`0cd+BDd7~wq}aWQ)g(YnEH4Bj-JIO#(}LPRYoY&LBV5zVC^ z8j@ouRN9sesW_e;DmT;`JoPAQYF#Wb%lvHB`zt7OYu(ggEyA`U>l}%6O=ECG$8$zO$y7}IgwIW1SWI*<%G-R8E*8gHmFn^AmImQ|l|>veH4P$-cD6 zHnygVrA3T9(G}@$9;bjZqKfq0GiqB#L>5~3=CgKz+K7TXgD^Q#t4*SnWkh=^VDkL3 zqF$YohhV+K+@y;CLHrt8EqMfv$gjvZaQea#HG0CAL|=9DB^X749yJe?hU8a<`ahWuxoLDYh52K*+!lQVrQt)9j zwZ-(e!&5k5?SEk^l{r;bH-^F18fK1Z`$jEWiaM7UDUy$#ti1`v$E=eA25BxiO$)}oFAc;G)y&49WrFL|s znyBYD(&_&lBsWrx>KG(PP-1oQo$!?*V*}Re13r$8##@;Uy2S1J;SEd(jn-Kt?nwYO z;ZhAz`6O=MkYCF`-^8j3=%G!lHmeO3&@bP_YHI8t2)IS|G%`v=OS3Q2o+wef=I9bS zXJyuHXvl?novmKR0WhF}`&lF0nb=0p5^`vmZqwMykruJpCCtdC=0GZ=xG2=C2D*2< z;WVL!s9b)V#16E3v=cLtS=3-V*w#(OCxj*=L)|G5C;THOA#@PGI$!!ok86k;k|CVR z)D*SE9w;0bOKs?B4N;Vq)Wo3pV_Di>Q$$Hs%F?TvBG_@;kvF>AWSgjbO2(3M)Fm1t zy-fs-!qZ<3*Q8)PR`l7&HUHB3sc_mHjbU_qI310~9BrN%6%GvrzE&ef+;l;gg~N$Fr4B7uMDs_Limn zC`4LOmagL2cybociT~oWA+qrgj0>=wC zQLh!D<+Vga!*-?gx+!eu#!3^Ea^1qGuisSz7_G&Qo2OG7#^G@cUlQxceQEa)7}Kz( z6#~}5v!bVw0%OG;-zuOAzScDc&OjKRx5r`^HoJ17M^Zp-F+%#aEMbpsoX?3emKgy= zk~SeYrA-J9UZxMVMd?WNOhYGx?g+gR`XdZM7>+O+!P0B2>Q3%wS3}N{6|@N&wmtve z@GC8I6g~}}pzCF=v~;~i0BK!sH=-<=;F;I;f<3HVuZwmLRqT68H6RV3`BF3gE^`k+caX{ z;GA47`bDswNd>IIn4@l*qbli2iv{x-qGM9+V|K6@jxpBtX0n_1#o{6)t*3OuSixPY z?i-qxAi5Q31Uduk#l5K3Gy0eyM%rW+)okkSv}v}z9nEPdJmeFv!Sjt4&`eLL`~17p zVtw%ODS00ZICi0>2aE<#>j8Zil1(E~C8P^SfWgB2wLNZCVs;cj%`mLAHUmul)VYzU zDnhhue=(16HvBdKL(i=RaKXBVGNv!ElyUx*xr|W@=tUzjNpwd<&e)&LNn`nK`a<34 z7;+a$H~eBr>Sjs05K)#6O5-BE0_a0y;auS5OIKd&einlhvf{kRqltJft$IZcO+^J` zC#u<0td+WD(!-{rfm{@*YQdi9I z0t(&UuGF=K$aNCWHJXOE&v`wG+O!nYU=-HoD2VAaiJrC;O{7Jgsa7jdx?o3!Xl^;I zPv&Gzq~unjqHnLx>InJeMO3lzaQf0i zl$4$~p;F(8LlveuY7zr>O18k|&9_deLjcLhWj#alguxORd+}i7sUwB<6n&-sPBg10 z8xU)PZjF#B?b_(5IeQ{rMmpDPpt;q1L@bS!uOQQ+kQ6 z(j0|ydqE)`ppZ*%Xci3>is&tZ{fc8ro@>KKudmI=CWQv}7G70f2@3|#6Z4mR1(1vn z@(woI);9fxJRtdOU^3HeeErcedy7y%vZgnyE>^qb7(vGGg@?^|0?Oi8)Hv#UQAoOG zM@_#ME$t`S@d!$O{a_>d_j}RRZ-<^yR?H?Q4&)zBY-w|U5vVL)q*<#< z^`OYUBCx^*8_3i*>}l?J_|n|b_@|9m8Xc+{>1BUWs+X zrXjpASOKNKN_jaC;PzFD{QzhY=u%o1n+!U|0%y9QBJKz!5yBB75uy<~APntEy9S6L zNvcOz2Z$rmKSug>APDxSk&X{U7nozD+=2MEfkrY7!X%=#k%|oxp;CmA8V&+gyzm8j z*Dy1#)#>fCfszMd3)LM|Ovm7b43ON4aU76*9p38tw#7gv2Z^3O$B}nNF0HSBlFa&ejy&q}t5D`!ynn(M# zb~R!kmNvs9I9@t#TyM`mT;Q{&+vT7ma82=9J5?_iA4xQ*ozKHb`@ zv)|F_iQu+v@95ZYQB+EMN6&@}&q|5b6f7O{>`jn@RtOV1zub&|N1Z1LuWChs0Z#*M zqNa7%i@L)BRww|$1VO4g`5b>uQ_H4-+A}mp#a-PnGFRv7Xa6XIt5ti==rHZtWxVBu zCx|V`EA~amQUf(utPQJ8juUhX?aBjqvW52g0V*{@RCGM?N-NK{>f{R)F+%v$)DajM zX1<~&BhWl8U(rAO^m#>YBSk{cQCyvT3gIlm-w0O`ZXw)5$VH%;y+i;l87YEm>_O=| zFMT_BtN=vgCA+T&kDs*qcD9YFy5v6X8!g<)brhzoEnZWJQD~|1uPJ^M*xU4)296RT zz7J4yy#SWu`CIHX4HzT5%WbzJuzbxg=obN!!A_ng&cH0+C%=NFx~C{i-Y8o7{G7r^ z!%F%4bDB6>^pNJfq}3sSJm}jq6mb(IoR=)!I>X-R~c8o!HUiN~nBe~Bc4GCKVz9HiP z+>|mFoPO^q#f=rsY-c|;7-+yaQIGD96((uQb9y}%AJXGF`6Qtu)O=1g@$~a~uGI#T z&)fm5V~gQAjZH!axc7{HP7=X32c8*dX&(rb-=0~Lu(-%S98G^lPm#nc5f~7}W=dl` z(!^b-XH+mn1O}!})_6J*RzOYbflSOBW==n*#wo&I+WeRXq=+KEKRrg5(FdyjUm*^D zOdC=#^=$c=j;G+mA|BJ@6yfRWg#?DZtRl$BbYhU;oEC`4&yk$k%)H|03UwT%CLw zxjOlN$^C!Gmz=AUuSc#GzY@41<233dv?(6 z>DcG|mbT3hB_!vCbZZ9Iu6k^z1~bJhr)MyS<<8)Fue_b^&%_8S7a`ACB32#(h`KkF zy3P`{rQxBpW)>ELFNYwqNGQFVB?gwMy-uGok3MhDhatM-nsF$g`6gU^yPJMI$B5SU zRQ5J@Vy>Gl!oq*NfE8Jb`P&y)sO}2BODx7LXF>}O4<1X@=3k&s6 zH|Wo~qI!j8ph#TGj%8>}L!y1kh#+Zb5jbZF%c7W?dWP-1@md6%$dEH|HU8L%EP1fn(9&;FtzjH^v3f= zL8J8W0L~Z?W!GkxCp8@O1>le{TdcBr< z|AO4tuBAEr?6Q{r`b8A2)Mu73oS7jE9}$Yp6o#(mz`vUzoI$vTkc03F!4LScv(kMQ zh!IB5;uEyR7`CGZ;ikAao2>F@)k8ng9}Ce#n#`oEg<`!F1E2Us;s>deH$7h@?#m~B zM{NTd=%yL|U8bQubzLpH$usz^Sv>hI5eZW5->AI_BiMLC{;aQ zpB5~I*{r1Ky#^|97x;0Z2t+fa&12`cMvQkCx*7coIkpA z&bmhShOJAWS0VT>)t^=IY=JNuVLrm0{}DD>K~?x z>mVo39iaB>#PR}j7eM4;ApohJE6gH?^&;B1oZ{ER1#&?qc3z9MZr2v_ZGcB`5LAq5 zUPjE94AnP|x^EB-oHhcY@5w$~k9KYl>#8OpJFM*ClPBVr21_v2$v{WpclB*ud$2?a zL!!4XhjxHh;797FCfU={jiQaC4X&^~&UL9iouo}LK`)^JSfY^94$|gL=q?X_rmLGk z$X!2^-)7N5a{8HuY{t6dkiE2Lvj|X{?Zp?TMO~rve>aQ8M!5$Fr5*{R$y-HCiGFy2 zcT0Wj>=+To3;AqtJeYb0wH*P_{s*=IeL0|Z2&3m)MQQob93&14qoRL`iPD)pwEj== zLJFNkE4E<<)uJ}#q6kyPKdkXcjx?wIGp6g z0B8L;+}fsk8EH)(<#gIfO?HVYI2`DwU7~W?T%18$_4Lp}TGG@rF!I+=J)Uy`vB~cx zM28^{YxG|`=;;c6}nq_5hk2%@~u9;q@33$UX0DRsD=JDDR!orPMBl8oU(zuQE2^mQ}H&WT- zSnZ6rq~wJhZTewdND1FajSc|SeIq3w=gHg#N0mH+3P}!c3nrl2Svrg{W_Se26{HsTW%%%XA2Ha zI;JizN`nuIR#MB}bnKu=u6$w=Xt*K7!f;pdigMIN)|hgWzvb3sz-ZGRIHiu_#M6sf z5>GQH9&L@et;gik!MXru<=$$8IDM#vdrNV4N!HgWejQ|eozHnOGj~Lkwgf?5hhd3L z=|!UsL!vv6qveN1Vb^v&c@54fk(UBqPec|YJm|t<(XdR3W;zRNtXmLlTNoh%Ax8Z& zRcBu(q$$a10z#-sCdOe0en~6LtQrJCF*{SVknM*euB$se$`sv1vd>_WA_dO!) zjK>*E{v{L$W;vUQPR5=hf$HbYA^?jmE3q zdoa%b4_^Is4gGUW1lmkkV`j-dYjl=uyhdlq3g&d0Pwdw$>Agm0$^H2M7C_@ph^bPcF64Allq`B?AkQh<+Rfurq{JMkx%rNGGT(;UbPaVpDf$(O zAB#3B<7?r}(ByBKxDa4wk;|w70T$FdN#CMMfaMpty*O(>3)7w)gV#Xo>#v+#6S;oW z?G(%)ZX;;HDN$N#snW4i_?q|isYMpt=zY1^8s3zVB?ib#{w#XHJXN#!KXWMvRc_jsh$G;!X3;i0TEa zrQ+g&yuX~jbo-3hP78pX`$|Kk`fCxBqyG$oHIZAdJVp<*7tx&aaFX1+i1wcsy(>0fq*dIJ*K@x5qN-K^TlZKv>x=9Z*r{*bTQCB#R>$?2e2(i+>zdFjFrT3dmxO26 zXW8(`MfiYVI1P_n1P25Yf*S(&guJtc&3@~u3zmLxsrQ?D!N2G8bE+7)!9i}SR6 zdH)L=s_gS+ygLu1DM98OSIwi#SD+Lm%%gHw#cJu#sdV`&W*uGUlK(YK(_-dQ)HU!( z=v-=d4F)4Imxf)#H+GmsXRnFaBu{96Xr9Kb&zQ5cHAh)S33K!#ENwF;j}qpn%jPJ{ zC}EC1h-k~Xa(_3(Md_(0;EI%~R*TV_xJzc;k}M&EVmi~@>#&r+x=1j2Si@eQ5%sVG--dsbkV{9k}i-sNNXI_+aijUZ(A%#TPZp_m&;U;9wB-AOq8! zKmLh~;MMWxIC4nGG2$voh4Ob@Mq6KW|vMmv)Hgc@LlN19VOAqMCbb#yQFREqXh ze3on+Z?^CUK;4l-_f*kTaxY6&a>U<8KPvbD_JF=r>j4}wc9o{N4@4vH2KBJq>{>fD z+711W9qd>DZ9^mkpF6qa!d~TBnkwgt7N+HxNaniM0cy-?m|4cs93gZ?8(?W6t3R=a7>#L#Hw_s$1-?_n}_67IHV|KxMX z7yVB4*R!5f4i%oFNjAP5WO50vqTLjG%6cUHsvc;=MC405r`mPWlD|EIrB&DzFZF^# zF}0pxC15D4XW{tKkGTUk_oLyr%Uhav2^;e@bJuZffPq}I`p6!8cv@ciwb2w)WY@A!(uH$)v5%l-4e~WxG}%n zEe=v$QvaGkU7iR}`-o-Gg@S0z6H%GCrX*0ur1;liLl^si4HslC3`UqJ_TgdTHGkAdTo+DnhQ zWQlpIw$x*?EUBKVu_LMda}nbjq-7tEQ{tN2C8R|gRa0r&_*|4I^uuBl$bu|phrt&7 z*nJq~BHlQeJYIQr`LsFJ_1_Ja;di+HdkOyz#cw!?r8zfg4q>1A%8o5`<$aPrK*-pw zU(U63x95kc&gq=D=sOz3J!Az#>=yBZA=i!M`x1VPzBrmSXEV_B??U2#G)#P{IxrEl zi1c~AVFfg$rwzhGz1o}mk!j+ONbwD5oCd;eC28)HRw7gEqWcyl0G$}MWt4@CQpE_z zns2gM+fy%rFL3(?w8;$m2uAz{R8a$IId|inZ~hl$MGrmWzw(2U^w0AA&RVe^oP0%o z937>Hj#9=-r#V(S)&IfXu)_sire~FjOst{9@PQSOPj1I=s(C}J1Dr500x~=*-sB>4 zYeMAdqv!_osT9@DG+_>^0Oz^H);&}9GU*LN3*#4OZ{Yjc-Q7{Vr7ql9hlfz>*BJOF z6ak-&I}{Bj?cBa2uGnIB1->83(->GCKjc5ny05$T{i}iJ#Pv$Uk1Hr3cf!oAxx%my z;RM3p2>&8HLHK|mKZN3nc9LvtW%D2Hd@XuY;2RNC-2WH7#BjY1sx!*9R;P=Zdg1D@ z!IT4ZV+ES}Mnr|o|Jj^Moi;ch{yr=It3f*c)^vxrqOj3em`c6FjPq5%n=d=t*@H)S z7yX3O4@?tcP%{ief4=vjly@T5Co|^L7kFWfJG2ZmY=2OlgcNb9?yUj8`A$^z>Gt%? zSMYK=+y?Lp??vSzo4MV#b^^>C}qIF8BF?B{fOi&@$S zq4>C=r&*=*5pR~xi33<5FQfw>M8yUbQ?M>>+McPWwca*xFnYUD_5OcgXz(SP@No8= zju7L_s00>-=>N*4)txWpJ0PuE1qVG!fd6cFPr zGzRtH80u?OA_9WC}fJ8C5(0Gu2JdKG-othvJ?4;2edt|He?2{ zC}q%X7ivZPI~heh{s%?u1iprXL0i+@@=Px$PnJKMQ=jHa%GG8GUGml7OF^yqi*f1a z+GtY4H?_T=N~53v{S8e!ZzlSZ@1cg`i}SegW%DPY*yWc{Y`;--zy@D-tg|)WEOoS& zuW3S{#`6W#1S)8&bTH1K0k%pTulcpWVGc)f!h{YmhGT+ihoigNn36{{mDF5^Lm%z zpyp$La0hqCgMR^J35W1Ie_(2v)j{0eJs)3*YiLrtX{!~ET5?Ud;fg34^n}{q0+qM{ z$=O~J4lm|$$`fkiZWL&*RB!Ms2C7irv>*1^#vS?l{4*Z0pt+Lhs$KPGQzeqm5^3Lr zuUdJkE`-62buWt@;GjD7NBY%XDdGR9gQmq71qoSsc7W&hNL~boW>o7(dT6hN7)z6j ztW-SZ9;M;i6~tsu=F+XO9)_p#r$r=tE}^51m2k^#BSNidRv$8~k;b)T_fRRSV~;Iky0z z)i>wtFf&jyhS30_lDeZxdG=bVfs^99A&%h)Ychb6s?#b5B>@{Qo;fIW!m0rq*T_`6G5QIcjneU6A3Lw{d6@Tf#JmSLG96S; z|3IA_m7=vGA#2c3S?WF?&W-OwN-U0RaG2~f$AJV#wCWC3fU*dz&UeUQu6jnG6!60L zKj7Y=NfJhSN5vuOZ0me2F;UT40@epdwQUovC7SYDBQg%)j9cn-2-QaEA0rKXjS^1q z>159NHT1r`4uCv{az{gv*S-Rzx%Z!?^^ALC3VIvVXW3}5J;2D{HFDO{cqgT}{0upq zgzSTO;dwg<@?qP zvi7YZ{H?z?(!Lb~nxpDmN1ML(9E?X^Uw(rV+|h3ajRqA)Wud}#0XJ8e_Mi0dCWit_ z0plw2E}+zu&JUt?1(Zt0QZ%c85?P@8Adn%=*=Z;ePd-J3S1O+LxPamaz=(nXmN z_$dtvFt6YDOVTn=8-dJ!K4Ax|`CGNi0LpSvA`dWMz4OfRTvbiq zDAJPtDX7FGt!SE$JS}ZB@>FB;6mOuBr!2?=@!lT1!c}oeZR4h1@0Zu6sqMYgtbFgN zX6IDx+b#{qxBYtzgxdhPg>cMW;ICXBk?=>q6jFk5anPPZN}#bIT`i>alBPOQ9ap8h z(T#q0RZ2^(`qCv=CCs>ojBbjjzLM`dc5G&mnmFAy_I8$IWPp{#FvYOVoD-j{9{=qq3 zIID=+>(Uq>%>3iE-+p89yET5RL+FFM66jv=x{m>KaA${qkzk(u=?e}F`-{qYD5Z^E zsH2AxWDKXV9!g+RU_-9C^U-TQFviq|TsfEeK`n7ao5=gcrHl@ZGnnQbRC`0qXS0!6 zhYRnF^)09ggH1?1F$14485sZ(FSraDqfHnNB0GpCgul!*>m-biP0msyPsO)mQ|8&HEXUejWO08bv8Hz0@Gb`) z+fa|QO*F2y>q$+$6rUux zotQ`Ou~@G#i;$yg)laZzW~)DNNmFgOj;-UmN7u$P2u-{TvsYZu%xR~_Mlv0-G1O5# z9E#zCyHZ^DxGu0|#%kN#)yJhZylBRQX6>jh1|EijNY$;3GZ%kCbwXBZ<(^c`TM2ge zz2aj)6_Irl9M<5BH`UOSI(aKiT3!GAnn^m8<;2+(tpn~JgbtW_z|N3kCvj!}41LRl zPIEuNa2RW06z4gM`n(yJ#bh!~*rTC1F9nMFzA@SQC_~CzjOSrH+B7dS*Cx8$Yvgcf z9GAcfjYA_%IgN%995w`0xGk;nQNq5vG#(l3-jBksAxCJ@xD}J}k3#6P!Q2kh>A4v= zX(gllmz*Pdy$&Ibsra9voA?#2>X(4o`aaZrhWZs~4E_{P5x$DMb7l!v zo3czU;p&x=)ZAC8TRiuY4^Bq}LqEWeIul;QKD8h0dKGUmsi4y%zRdBI+OH%X@Kxfa zq>p6sQ@rH<$*6Rf3@YQNlqz^u^XGvSac;uVAsN)yPl;>vXe?jax+?THR4XAZYVqKL z&@pgI_6^kp_SMy(#9*_X^r-p=XlG_4JLo34*t~EfCet<)k=g1eTsQ5nco*Ld#DSNsBx#xY@k#BSwm^=fg>WOQhg+Npa&cc5T(0d@CRDksg>0P#4w;|CXY zBEL)>fz zz6b?EY&MeQ7D^t)M-SNjexwjGJ_a|%qsgNn$I|Qu0t^{9Xbg=FR03k6IS*e5ws>2_ zRsvAVU+3Tu0JUo2m_@EsY<){LJ0f3>iKtK40u?{0+j;sB2qC?k{DPD~Dd;>!1t}$Q z@AmgWN=PBY+t;|q_}DoppNX|tc%P#sL5h#$mPNaQ6o2Dgx)h|;m-@z0NMWUt$4Wk) zU+Y36>TrQ4P_xPdXkcN*U-BD3(+ewJmFx#taGY??MnYP=*Df~I0rP2p3*z86`qMh3jc8-Vc#QjqQTIU>jJj6Hc^&d2KDA1JdKIh$Rgbp<7i+*& zoPf=z{35hX^7%$bfW$tXvR1FC>5`5r}wka&`D3ja>|n72rKZ(d#+?E zcT)?nhZT5M2WI30Htt7XkiAs5FZqSy8PS)j;91?Tucf$7dZL^863JFzj1E-u0blo_ znaIH>r;jBESw~{|4+_odONT?1M3;XDvT_2J)ilDpF;u^ZGC|r`i?WL--tAiy=1$B# zJ8>}cJ1=k@RX@KgfY=jpC9^VZi}Nq_VJz@c-Ubb=TRScKA$n``VO(syo4O)e8ym{t zuz9;ihPTmw(4H_Qy!^77s0fc?SolGXaYjuD zt5Z2z*OiBx{=&j3Jha2((%Kl+niVOqxZ+p3a7C@2k8mh0Zf4ccu|oV-{T=l;Q^0+u z>92&qFY4#YMwW_Ar`JX#VYfCBt-BuoD z1^$Hkp(@unF%k9(K8ZSISt6a#@Q2ohZovw|%z+pfj_}tZ z6W@FT!@216lBJY(#=zE)B&xL0&X9Xbo2h5k4lR%DoI7*;gAKH*v=Sw)eL(+~R*D2^ zf+4lOmwJM~A1$!`ist)lsss1GEF2gTRz?|7qCIBg$u+t{s*Vo-GPD(6a;c_6yFnG| z$E7tg9;tH^YKlQksZ1xzD0NDA&|%oFufbRiP{S(Q8>ZH|liMn}MsL$ZZP|shi6}!+ zWfkuL*1MPiW^3OLz}-ryP+B7!=$w};QDRx8oK&{9b6w}jEqD~w9aoM3IvAc4R_Jw0Sm~@bChAYK9S^$9)HN?=W#zAsJ zZ>fKf{3Dcrq=FgR)FN2RBV*`YR#V&OIAWg7vnTVPJ~LM*mIH-m?%@Rf&kkr6OZ4E$ z2WlRq%G(&A+x8x-zr&EK+TOvxFT3z>7ud{l@Q|_6n{%UaF3#>fH*&SpKPZ{w z7-Gz=r2jCa^3?7cC6`x<;HCoP8$72C&Q--h9k^Q^3mUh}E5)RhHOR4o;^VpxGIAeJ zKzhzhb!0VFtw@m-lvrEiIm<`St$@ZVUWc|-P)e8i3C1GsW-q*eWoZ=#8rT z7#^yq6f&-+zbh)G3$&@Pafz`Javr@}w|*3_r1&O1MC~UYGfm(TCwju8!~k{v12Edu zl&6T`?l=)g6~I0eXE2n@$X$;6Z*%~XJOYN=`(I{D4I8h9=qUqj)k8quWXu`Nn-)Gx zL%XD=^4NiyODis+uv$Scfu|4EwIWt=PBXM3a;j@eWGVyUxM7+wg<&>&DICdvS}C35 z=nKBU7)idB760OxrE;NXz?)d6918dRlt`en)_CH}%w(j(e8EZmRFAq=R@|if^=Noy zr9{&1o^DXVkEt)h_1?b_h%D2bw*a6%+N{lj3u!T@Ip&HMGqfeVvNBES=S=C@YH!TD zU<(S-kVY}mb`1$r6y5%vx8ju&b-O+KtDbOda6($R-3dgf_s~4ZBDmatQeeb=#~6on zjO#S(v`rulj8t5boNuzMi4OwfZ13)7I1=lJx`Xo}OKVl&E})rsARe8E1I!1`hO70# zY%uYdXBgS)v9gSad381#BGH8>%tcRq`7$-uFVntMu28-87j3eeG79%@VQyd7>1U@up4y8j#s;f2JJK?gC>QM$kh7m)ZN@&tf$QNErliV-OSs1 zqFiuk%3H~j=;2IrBF3=TCDckt^d&PUwfc70qo?r@m&m@$OxGmsTl5mU%!QpH_njk- z{ZsF}b%f52igJxSj-=oq68t6CJdzTs|Js-9b|eKy{Bi8QBPl`FUw&px?ssv#fPIv!D*LA=}bv*yOg9G;Ac_5w?K~QOS1UsUjAcult?}{3YH8w~z z7EmB^IWd;#n5ePEUK5RHiHcDHdpDNEXkzqXiyAeyc>nLbcc4jre?Fhb?at25_TAZ; z+1(b(Hx9>|{!Xl^ zj#yJ`QBaJi>UmdiYxD^oqqf6ObEs2{h!t&nDbl`!akMB#)Nb=Tw0D?KU?yeqV*>ex zmC2Y|H-ClfD3ft|9GcmhjFM;X;r|-rXT9)awVLr?mBVU(AVUk`Q`0*FknBALK+>dp zz+x%tta66unEW?HjLfk$#Dm+)9S z)&px+DkpEgT@fGS*-idH(I7yTFj#f?$bD3YS?;Vl zddO|vT+o56?S{&6Drkb-#EqV{z@lh$qrjFTAmkxr`sf7MJ)CjJCAne?{&lDz-sz}TQ@3q?5KrWu zomvTOT30;07blt}9Ee4szhB3h2Cs~IH>xMO1jD~p;T}=Q(~)$8+(nOyvP|;e_w0ZV z1rjcNam}kTeK2Q#o>Oa2ahlH8jAZ6Qf-g+Mt54;O6=7xqrR=h;0RrRUcidw zvoLQ%QEQ^=Tmj;}!+sUS);Sd&ppC)wxV4C>a>5s*1o+5Fab zcnqb)i#pOk4Ik||CHD%aoOlr?O?=7{ic@lpaQZG@WG56i7n)P}F5>$cpNM(;-HU$f zW_YRpCGc+IyNge$PMYKIQ<3H*2vcj9)5@6Q5=8SuUHOJX@fcI57GNg)64La@f`2ck z*3R+KFDFAYW{5-t*u+ywf(X~OYf8)0MF2ml=6gJugOm9KZ6ho`uJ>(5lfnCjyu zG_s8dtA3;jugQvNTRmdP>e-RNmVcSAsAtzUp&e~RQk6|76=MD%_G>SN*of93_93w3 zxF!^kC|VnzAV3ZSg!|7QjcIhENUZYgL|NHtsS&rgLd5+%%YWLK&L@iSauYbBl_A|4 zlbc!8YmlMFs*dE=<9TajDvD#ZU>pHMot@y7*fJBUZtJ3-c)T_f^J5)J$_97rBbo&JUKsv!+Z674H*Xvnh|WB`4F%}4`^1DuRBdb-MU8`_R1 z35(X<_PwL)EsUqMc4EISpcYk47T(%J)HGR)Zd*TIXr|*Eg|7#`?yZGpq~n{0-!_2p z$FNfO|N33fnjR;M+VQiBmDa#U-gK~wQm@G|sGaVgp?0caBLtCybq&vo2aTT4@2N&B zoNtfBAl@-&PqP3GxfSm{RLKy(pH4s z!<`69Z!fw@j}P!;A4Ji4G`<rHZFK``fCi zoNEf~YgVMP4lCokz29A4QLKz^c(AMvhIddB__Hw* zcw<2VN5JDLb-=1bcey4wEnbEy7;QZ&$Qx_Zx1B_sZdh%4+DTMPoDU_7qcV@SR|s`x zLj9OfjZ#8v#?GQA>r&<)AT%(@CpJKrbjdP<0kWnx_3JEZG!A)7td~mcw?-iLAP>ZL z)%r)v_{eV1uyCU+t3~@div;a1a_%B}#kB_*8R9;jouXu@9MkY-8o$<5XuKT~uq3Se zgB|vbr9vBde@$B21sm2`HR*I0(OQ>OlT2Mjwdjn3vU09ZR>(#*1lbldKvt+^vk$2i zHe6{1wZc5)do^fWSJA56TG+I!(^PElxmA62*^zX$D-xPspUQPZ%k*nSsofy|D||>3 zx(S?g4X3N!MDzOd_bCZ;KRVi0tzhnT{c^d2!~fZjddJI^!pYoSgjI=o8*Q8#?NubA zxp1^IVU*upG^_vn-ZIjDD$YvA*_;EMiDCaDJw_f9M$fy8dVO-=M%$gF_BBN77qj#~JB{UW+61><(4kfw6G= zsqR7SF0Z=Ruv@3P@3Q+D1|#Cui-Y@)>K@PTYjCqkK8~^I6^vDhmUzImc#Z?kGJTYwBt4A2>?O`<=g`RBqNTPYZR`!@pZtI;Nc+5N}AW(?haf zYK=4aR++8ZgOu1$G&Az!QM;<5g^erE7_+O=?0#Zs!<~?g>}-OLz-i~MhY$GgbSOS( z9(9(bA(5CSu}Pk<|9n1$^cOJ|*GEIzZ-cCQpvaUP4(e!z~wX`pBpuw?+t zUS-~WvDoS=%8G72r6u}zjzql%ipZ!j5(XaxjIju4f&gr54*cdJH)Sv@RC$dUqzsQP z@PMapDbfCc!oSAyo5%qIBVgSYXK8F6gqILZ*IO{-?_%-KQ)t><u1iU(Dy`S z=2)&-Yd~Lw@RC?DI@*}Chl}-=4ZOFzhthQcl?VT-tR~2(F{cqnwTui-W#b2Dj>FO? zrAQEs@lYOWwrpVeoF%$2oBM@Uo(~fb4D>W?cp-i~t-(rGs1KdLedvKnTgM;i{&5+=l2epoeUMdK)FYmh* zV-&gH4VpbzcsEFZ!~ukQ04c2$0g1zgL=6~NNphy!9#vKko z8pP3HD{IVRp7xkp2dHCJ01!|CVEg<$&e<9=3>7}cSw0R&+?O5>gR1&l8r%6Bwir0}j0|J`dY4d)lyq8oLG+Km!5h4)qNzxri)G)#;>ppn^YU_ z{FpAaY4<1y@jEC%N7DV|O;G73CDyZ5N>ui3ptb<6Btsk&>|K~7{+J!9aJt*U!FyE9eyb9Rr1Tdr~t zRji*q1KBIo=kd=wOG;H*{DBA?VR>e^tCI%Wr1@H9c?raXHx}7Mu3q|MdC`wXK~8(} z@>23C3d)mB#E|H1JK@eKKO}n3Zg%Knzti4@QM#fDfW*GYXoDX5m_2oM`l{r`BHb&I- z<9Y4f)Y8<{#>)AWIz~i;`ItFI{H)EU;bTRdHjXxq6~4O0_o!$r`ga|AI2MdV1Zc=R zw@~OfQA2nCD0LhM&FWa%I8HRyz1U2@j|1Zyew50ki(qOtUgTHriXng^>0_bIg-$YY zLR?-07uIH(En5^~Pd3q=@ghhUd4yxdgj9d@PJu42PzuDd7x#Kffj;*}ftJz-5TroG zGBaI_g01_@bm6aN?Z8F~$iRf~jNH>j2#w4TLDjEwos0PBX*^k{x3+x40Lw1+?ScRh zZ@F!xEg7Pg^T49l_65E!LG%XEv~MWzLy_%uWqou^5o4gDNvRVC^JKJM!dCSa8?D8J|C1n>6U6`M|F_ zxg#V=s)ojxGY1sRgA5-t_Q6`PHH(=9ryX+Oy(=lSiniPs#(;o`#En zMKzapfXNrB@e~n^lX`uoh&H{C-hL;gDPNRzl5g=C9(qDFM{kpcI`G6k9-X8~StnTr z47nBuJp;popa2Yeyi0B?v|iu^#e@EyBASOpy_>+Tg-QaPzshO?UmK9X7V0-uRCjrW zXYAxpXvS1z4||lUA|^EZ);rm2^fvYgpdx!u%5mxXkug(LE7y*rU+jkrE!R^1RLpJl zsZXXzh&}fEJ4B{ZSsAxgSBNxcB8eQY0_GhQq+eMXmjgqtO*b+{Y`Ire)q$`LElX)r zj6sx=C8~C8;m4bUD@NN3nePlmL$y$Jq2)O@%ZDq8Rl-KhrLwY#V4dk*)EDq7K@N}V zI_!|aCqSfw4y&UxeVqg8T9$CjY@30RP@EN$fM1P8AB~@k9#{ptpy)N>kp~yO0BZs3 z6o^NHz^)nqk80MEX14hkj*>Y#V92Cz*x z3;VAcbN*0bY**|r6%Hh}$sT5VjX8TcL|vhHX`0P^7y@Pdq(dzLX6oaCNZ@Cf87bP( z?6n*L9H75B`r$b5chyB-fD3_oPRX4$TloQAOUA>Bpe%wQi2BZ60UAczyk+>Yr>2?n zKcRlpMQEytQU9TV3cbg?M=7IZ%njw;f>kZYE@*%>a_~}xCrU0E#`PcE6@VPZv2?MrRz8>?q9~pCIpnQS(MmgyvT}u=%dY|Gq<_=0ToLAd8E#Hw(`|0=bR&8(d@bo(E^L3k zFQy8gh}soCIIO%8%qvnX>#g=(qts7CNX%`>P9UFX0ec`f-Z+Nx2xsC|WK8wwqOhz- zNWQ5O1BC+!#`Bb1+eY7hBGRh2o%hV1Yd7Zcgc=>Q5f*l;y%{U1C-+0|oHLpl&cF^Y zeKf8y7Jh-akyGPz*HR~yQL)=;VzxAF4mXa8SQ|!-rg<}1Pe=eht?& zo>U`GG|-)TO#Sn~i2wE{P2%4*kBRa`gxmZ%&+Jx%eH5L_6TzL&jAGIaTv_7=Q@{3Z z@?ZOT>B548U#npk!f|XWyT~p2^5j#B9$VdTSq%#iBp+eyBK;?D^IwrZXB4%uh+xy> z*(mJQ3BJ(*JrFhp`zL+kD9W^mP;VQ8?uXr?Lg^8 z)jt!B-E>yYt~HhhekK}(wRz^D9Bwi^UBg;N7BeYQKgf>ym#k~AFSTrf#h4eRekP=f z(?3f|ASVIx3u^sHt#s&4m=CHDn0=o|- zS0iSNS{`jmDFuL%yfcLjr~Ig3w(xb!E=9aCTSO%kKXD{kwEDlwJ4T)&Jpn*qsu5LW#3Ah<_Paf3-g}YQ!qE=%;6pd3S*M2XtpbJAm~P) ziJ6PDPvO^T^<2pDm(#tuka6Ci+VjL5?J3$fPmI!4{gvu`E>g_D=5hhE*@ysrBHaVZ zcS{~`G|d*P0#u}REDDru3aUPQAP)juyUVhMYzQ$iQY#L${qVVP*848V;(R^J;0@Yz zcZHc4|JVcOYxK((qO!|CfaJalz7&^+I*&%etY6;vxhTDgBw&kFQFFHgmV$lkXamP# zcErGOo*fO~_>CR4;CRdq+-)21f*mmV2yg>=FvIx)-t55HxPVZ1id`gb=qj(G>WjrS zmq`K{=tizf#3C0RyT7BgOE745^`L;SL<_fxJ-~Du<&SC5SE5EWX^zl%;q%8Ag0C*V z#`t3KCE@Edhc<@))+j@$cc_ z-r{Y4QcV4Va1|x44@5uS|Ij?>ihOyZLeQAA5XmQ7DV9E8CT4lO)H{eCfJ3ew!@ao* zr7jnKhQ|}$&B8~^k%g>M?0RtgI}6t4?_@z4lWEI^WEl7lGOjB?#;ughQs@7Yc@_N* z86J+6F%(OZ20ce9%+^Qp(T_M=&(bHGt+Qfj=?XE-Cmm$C$qk*^fhIScbwX)kC}<@% ze)^B7=SpmHdv~TuD@FZ^;hoWUtuvJVjV@f?Y*`y?D_AL-YQ>-o(6;K&cO=~^(O6Vh zy`OiqwOWN!quN-SxLQopMY_@J)zA=Bb0hyXSa}U@6o+42$Uk@uc=X@s(=|A$dB&AC ztwFN;UFp;sQOTPJk~J^691L~J>#O<+Y+ceul3V5#<@xo@EBA zg0Xh3SgKo+LP_hy+RzO+>IOb0cRj{DOoEajatcZ?+Q2#)Vx4gs$!NPEC+@U)ug5N0 z*OjR02Jyn9*vNA~%bto`;M6 zwu6irf@P!aq#RmIO}2=3V%lX0H}ehSF4N2{g2atWiudd#s*M+`ko8epMP)B#x+uy@ zL*DsMnKl<~6@CpJ0X^Oc;0eZ>gng?PThP+^hmT7$0RK@rcebJiuOv{pZ$wOH_4b%> z>o!yN4i&I~&qz=gaK+HL$wB$I!!N=1PprVFF%A9rjX%h8OH$k*xI9~^?*eSTf2b>d zae(KOzY)&1KENFgH_kC>?WVkQ9^mpEBz{Z5yv-yeCUGRwZW?|RWwsi;K!SNsKH{j& z2<6Nc>0idHxv`tN9P`j9dDv4*pjT~}r|r~$jKaLxQ=3>XAsOs}4Mm7%wtCt-dBAM9 zNWa}d1-aV94+c7vD@{sfxKiS`A{6!f!MCEepHiKrb=3rHLmumalsen~tq4lyaP^Fl z18Fw%{zwz%`UWfNhFRxQBZiWr;M#c$HjssXSbw=?EYrBHl6f@_+J;{K#cN8~CaUTB zKBHmmU;C71ZG+S`miBEEl`3(ZqFA5WN-hk#)~IBq0f7?g^#s>IZRXC0BvVnPu~1#B z>rLEFp~NtCZ$~Y+3scH-er<64|HQ>|QjMP*EG;(nd=q_@ivE)$VFvtX0`p>N`F7#w zQ^KL;{vC>Po!c&|`&{JEGnlIXl{qT^o$&GfM?J@uCAj5JYWbZoq3~V56V-jYEOoFv z(K#wt^k+9-0+7UPW6CX}VNFg5`v;Lyqc{!Ub_@Q;Kb!UsHJ zhltQ^d`ts(zyhLIEX~{@de{CNnoH(wz#A*0q)2}o5dO=Gxx_BmSdJ}t35n{_mgHp< z!Bv^EQ}LOSxW8ikHE?Hmq6^GEiJq*iRxV-G!-l<2EG@E$s!BVS)i65Ngb=e86?qnv zAlUoMCc=zNurMnXy+h4^ot+~5zwyG9G9b*`6I9$vPXi$B>_;?jrwDabi+p*(4pAjq zbvwqsQhX#*nvdDVN*_@f6zj392?-k5kGx_N3a%&LU1Er?;{%$u3p&{?R$97CG;_In zAD8xmxQ{z0MsBRtZyU-)(mLEqsWZeM5wpx%U4<&kt@wv08)dtgh>3QxHc%uwJ6l9NwDpGna?-+X6c;e3J zh5`OJLKu{wf?5MK{4S6AQ*xvVVhgPz2UehsMi+<0+MQ)eNwaJ??V@@Y!8aj!knrlvug>V_#!ZF4jZR(mWQ_aX= z>uG+#VR~r#QW54YkKV16Lc+$kT~%Z?!@00^DySbTY~9r^&w+%M zN##+=K~b&k)D*C}#TJ-j@%5C?VQ7N1V4;e9tX76rJ4hzFYV4*_K#b8qQsCI%;p`tq zaXn7Ff*%fKPp7VjL`~hIz((oWh_$7pAP0~8*#IH2i*Acvn4i$+O5!{Rkkw+Y-nc|zY>zLja z|A+F)IsM=MJo*YUpnWiWvlknr+Lb7>7)K>0DYqZAOT)uNg?}1v6+AZf)6cxccZqw( z^#HJ_6!?(?n3j-pBx3*wcS{d8dc^fmj@TJJl7^bCLb(u!pRSKkRt!w(6B{GJ_}^9T z0@`6#u=AQ+l4n9ybqT3S?6m*b+dZslC+eH><6 zB{rIW9L9#5Y;@+hsIMEig`7`_I#nluQ$+8?CO9QaF2A1d)JVueVte)|eEG&b)air> zsaoeRu(rM2Lq?RxU_@fLpCFtpMC+5iLB4#zX-d=65N$QVjKFJ_bz4SBP7(K>UQ+Y0*SJPr+Jk>P?M?Lu000gSGx0Ufy@ zdRAN!phrsygZbs3FyG=REa7L9%H20$6q z0%$+OVJ&2|2;OA{(3;DluCK>=WDWHkQK(-C1Z_rL>q+bhqXOu`Wlw%w5bL>olI&W1Ea=k{)L5ImUiWUi33pgz0OJV=cz~jqY$z z4*7yRh+!5(Er!pOpN3fqj>BlK-@!tCcTN@enOeN~G>kQ7C?i1jgN%b4U3W!P&HP~@ z2w56NDNz+Hjt_=|0ojLw`YC)5GdbCHasksCbI&59SuyGGV17Q#x#n_5U2PiB7qF?# zl&f;0?5vkzYa;%`0B_0!t>vIAz~yAT!GIh;KQq%UIv^Y&ldo~h1))e46g^rBiy%fWYTn#UR)I|D#Wa1W=z@O^g4?UXTr75KjC11EPePB z1m}-N(2}1-Tc7*}ND*v9C06DX%eP?lfTDlYfb2g(<8#=TsgFoteI=+TSbqTPvHT?N z?-#8+pRO)Tq1hRvaDrz4%)GsA+t0#Ft83#!#n(h%?fVq^i})(2i8m68E>gJdrZJK1 zv*@eiC!;bNubMaA{6%!Z{T)rOi@8DdD>3qqK)z^h8dHmX7Lz}IaGRT@VdYA6_qyn$ z>oAvE-Via`0-ACIy7LT^a$!<(F~o}-!@q^6qmUXSC9 z9&LQ~^2_S{wn?|+wDnivlu@9jB|mLUoili~jmmgxCMci>uR5Ib)4F zuZ~9k0U+)-dhA5TRZv1K`b`Y9#B7Er|2HULd@CwA#vD&9l36itn2IsS8J?)Ch5A3( z+a%x)evCOAFczBzT!K5^dN42G0vuCoSSc#O{ zYeXZG)$pbQ`t||ypfkX}12@b%oa6(H#xt~0!MVb4i~g8`YB3zEKpSp~;7Y6D&z803 zK@TVNSG2+Ck(LVd`%PF~_T?y6Lwk-=Y+h)_<#1+;^CP< z7Pjh03w{?ZL|X*JHi;3%^z-kcs#B=lm$bJ;Ku}?kFK#kK$UZpI-&0IH(eHlr0D4}` zx*}?EOH}sU^Trn=Gu^4s2`TDNyz!;sw?zNMYQW+>5*`k*J~mrRuoJsJ6`Xisoj0gt zV-C-@e8Y58xv8?&8ophuuux##mHEqTyOQ_>*5uwEug|}h2J(<3_ z4H3-{D!Pqb|6_8JVN_fP&nC(uMR&_!3opUU(4mKcn*&=pr9;ZTIFTT4pNjR>qW_MA zu!3S9);|hmG~A4VY3T;s{3nluGE6~`b)h_a8r%)E@{R~EKi0s8znC4Z?fm7h>GB;| zX1y0m(p?c&{*}aGpky`sLpRX!E*Qs$AvE=_XqtS}9h8-bNakyBJp7mLBlpEdP z4md|w8CUIV6wSkEcj|Bt%vMP-<=zuhb;E*5e_zzqH4UbQ{0oD!!S_WA-I40Fiv3?y zrwjZ$tUBo*fNQK*omxIX&BxN12cokgamv~`ltsP9T>oGgsVBnh$iZIo;z>6jh>&`` zhCp05aQ6 z`{2ut*5Hmbtckr#ZqFe4Lo_QlX~s*~R$83wrk*qD=RbsB)rv0CGt<#zKR;D&M{4_(k?al5d6jOh(0s_1i6l*;`nY@cG?%Po(^ zF$ow*xD&^jg2@jCGTi`J+&vU5bV`0)2&Y_`?p}BfB z2c^OxJ$~fjwB0m$4y}JIs&%;TjI3cycaeu|Lwt+A$N_-RMo)vw!9K)EiOewwLefS{v0frU29q@ws1pL>^ zr@mD{W)6;0gX7uly$R=q`RH&l5{k?3Six>OG#eY4Q=u>(_!4_`(5Vc>sI&5GScc2q zxSkB4=T3;bhYJyEH9Ucb2RVNDPyQN*8Q{O{@WXl0iGKQ1^r=!Cq*;zX6d+6I|$n7XC-FOD$CU@?~c(?`)pPXMV0Wrbqr*NHL!n-t3 zgw)icIM$RvRdWFmVg`;M80-sC*WDq!2OdN=u4n|KEyW#MUcM}l6%Y^^s=0~8*vHm4 zft7WuY`!evap#ufnON4{98MqqC4wusAQ`ONu%OPbn1qIUgI5#(0&j6eL&yIT6Linb z)aJRU>lvZpd-xzXYgiX9x#w8QeGYB+P&)ivM6@XyiE7XdR}#*-fLxfZuF9>JsKu*0 zm0GlW@XEgnVOCR?9eV^Ur?@cRIBS`L9+QsMF8YN?bgza$d$C3D2SEM{;nzsd*qplq zzdFMv^P$=4wCovPUSmBW?^b#j2&rZZR+uBJE3}+SKfgd{kH$mS^3+Gp$`-LIw@-bg zF(-PUR;KPk&UmJex#`S}@d^C$0Ci=0`8N{9oWytxSMV|r7yc?tw5f`B*orY%fI7rpa{z;I26p>D zccs5_Ch|EU^p@AYyen;~VlD$_8TX@XVLc3{-M~&$vCq8rrB7aoblsJ0^!k-(Q+Xhw zmx_}iK<2x7%f*5f=mf;RuSI}UBpg%NQ2~x6?0Edjm-fCEu})iF`7ZcdRE<%WIGA`@ zRL%?k-SN5&n|!5i=bopvd#E5Zr77ht$WRre`uz>1^iQ<#Z&AONQ+J1e@=mlWpj=U& z$Jt5wPB%wDi6g*5PyU8BI+lFifED>3kFY~rcmy&;!`7|T{*7o5I?$%HoVlbUw|>5% z?F?mtHF{fCR6gRPgAxm2SQfk(E#Ga8TOI z?T$OuKXFj1^9$9tE2^(vcF0_EE71{nb-gRmpZr_D()<8vs;=tr`Aei`+VAFHlHy^` z6rh!Sbf-2^W35zAd(rm3Rx)aRKG+63)Elrv{nJ?cIUYu`o@3!}#CV#e0~WN8I;kUm zJe(vy{M2%i{4>ivMGrIP=$PNur^16dx&d!=lW`FiykMdS74!DaImzr)fNam)=&MPw z#uvEByLwt7szV(@;{K- z|ABn+AIRkYKq47pHH}bykOAIES5aa89kA}Hm~jkJDTasK7&3UAug7fcsXqoL0RuT6 zq41r64?h>xpI_7;S^asW{=8IwoSyj7VrQwU6sU&{+05x~uLKprA9(+z&^*NVC%$L+ zUf_F;&yG(ABv-u@;gs;FFE!Ikjhvo5hD{qg4#KgK9qZxvT`!H+t=&M~T%^WM`yctz zY!}H}^qsD(LhYy1Ru`#SbLZc@F# z4tP0Uk*b~?j6@(_WfQ;LM?Cf9o0_eoCvH;L<|{u`^gg+4&68j~5pQ`fI0%!?`L$k} z{L~=k0(!_T`@+&J37gAlF|A%x%NPRPdAMm_57TxjH zQk2wX6qisD;iZ;}@P0*r-SpFa?$Hwxl|3KQyazvW_WNoMw5fsq=mF>9MDPVQ_#%Rp z`R1-Fzq`c`-`5|fOv$@|;-<;yinLEJrG1j*ZMG>%4N$4!+J9^>L2H^y>r*AE=1QPL z9Jrs!ogJ%?8;Ah4B)gVUfVm3@yrxR6w?ggbdrGM|;}rl$VqR)+^1m`Z znN#Ynrt}vgX)@B0?@zeSz8Ue~Iva%ma4a)a@@-2?vLAj_nnp=`pc)8v#;^uXq`g)R zezeL_X;|pY2Nk(zBToME7%r$Pzf>kn@lCYa@ z+*Q^OQ?lUzeBmW=?wf6b5&3*3YxtTqI4B(`oy!DC}NT z!reA-9A`%i99P-V0FFECs0GIhc0kmocSHH_`oiJO4i7j&*#VA9-w+PSJ&)`T!k~zQ zASB=LSjI~N7kcnG(%+IZQRl3ro&C99(k#KZ8s8RtJMkTGd`I#7ljCDpsr!HZo@Rza!hR9259SnX)f(fE<{3V_tz;ZWmh%F#Z&S3V6w%VLdsS}!vYsl;;_WUhh*q5A zhD?ug>|^EOjk)ZGZ0<-!iUkAe21n~?y{8l$&|bl2D+bIC#?KGr5l zYC1BmppEj9{3~uiNK^se`fLV8ydlY^7)!jQK&--hy`&)gT=SAf)gC**Zjam9262E^%yWW%B#hd>?|d{tVDB|Oy?+f6^er-Zdf z7;GtVo5VF*?k5d&zwxs#1gsgcDNfJm#xeJ*x`0=>FI{S>OaGb1RhD+?;?k&&zvR~- zB#rIguqR~2ws{dU<@5u38RTJUyb~IV{+8PRU@qUNxOY6)gTD15n&dA9>$IC_xxWLg(Yxeof6U7mJuF9& z_ra`Ny=&{{2&LA4A3;?Eq>2L)5m}LfL>4H~4i?1+hhqRDP16R@;*BUkL4bfjQPdH; z>HC48fGgE-HHxJcBnQq+BKuX)M{GbpgVT4Yw2+DL{CS47&+*a z>~`N7k|W;H16EmuJ-O%1L7O1ZQj0hqncxDUsxd$u7vd<-Rjnc=^&e27@`=4_s}coC zHKf-V#(ZU5#T#@qNUE0UrslIJW4;GW9J=Ru#+t;NpC|-^8ImjC0tswn%cB+>112|n zi;4DTg%+4^C_wT}JJpm0)2sLvOQp9GflTk%@1^wWqN_8(JKvWj{SLv(AUISdxNA5F z9-=S6*@iV&LHPicEJVbtrnn#lS$hI_$qWEW=Ax9x=@&fgP0y=JL9KsUpwvelCelPr zisioQjz629fKW5|J@7b#H+eIU0^@2|Ljhp2)A!W7np8#SwSp#9lVZG^s|53haes5v zeE*VJbgCM5JDbT~O&Xz{P9v&I^)kQwT&4NxZ=h*O2$H8&;0|AavfTz1aLHp368F8M zXJ<3I^$@Qu&*dS%I&*%2Iul@A{*H%sJC(tTmFPHICbuYqaY-5PxqKA6M68q1JZmgf z6IzIRkI!3`g>J=?<-%NcVXhsm-zR(WGGQED%mTnv9z&LdJn9lGwbi|Hp=H5RgUqc% zfo$|lIAktL@ZcLA;64xcY&Me~VjO?TZHRFy)6l=U?Fm3;g2uR8b^``8)wsa<9!g?K zSSWWu>#(|grJlQY*F2VwRW_(FT;!#R%bKFqC=WoSdnM#Pi^pA%xzCI=AVg}InKK`) zu^)nVCJ+VW5qquunmN`|{v4J4gbvPVGxDHKIhvH%5(DoD;xnXRfFa10+< zsKRi>-;F>Io}qYNw43g9;TbzYbN4;FsT;`d!fAO-aL?_gAo!HErDZqD2$gF3{@GQ@ zd_~lqdUr;?Ve33}Za>-?Dm94s5S>9D2DJcJ!q1?tR94pBETp3`=A@%W?55?Qp%7iz zmHfk`&~~W`QDg2M1eZ1;iY1uvco2D~631{Q4z-)=sQFMT(ek^a5{H(wrTj2#7hF_= zIaLsu>vX7+4eO6eg~CpQ8f{qW3E1)+u05D?m!2L z(uz}R(Qc~IS*bm@l3y_Y*-dl1cvRBtf*3%p!9HBKygE;Unl@ajnORRs-k3WJ*eI+U z5LxoU)^#PFFt5g0PbIKn26J@TC0b*SMs=izX1{=1z6N~O6uc{tz!IM;b5Y-`(C}Q} zzKDG{qpY&JW^r9ju$xXGgD9|4S2f&kIx1^I$sM{ME_v5jtppo$_Hpf_vL-k>*ioerYdB z0quW(~VBv=$=ow%D8)O=;Wx}qn)Uvh7^!k11f<8D95;N zwt!fiHN{PC!Lu0O8V#lz!w~ue|IfUbZI}-}C<%hrzDfmV;4l(~m)-Oxl~QU-KAB(7 zQm}eDutMI!LJurVMcOFGP|jFfw%tJd_4D%e8-morDFWHGdc z0!2&(41kXVFs2mXs>aJI_5am@$)A$91TaULk|!sxR$bxp5;$-S71hVn6Xyy9ixqr~ ztx|x^0hmwuSmduo*-&wsb~&{ToEv^0kg z;8!+FyyWs~Te6tO)`n23CMpL*201izK;q1Kl!T_fhC<0Vw>snGJV#LN7Qswm8B7mOl_f4c)EcJcNAccI5pLy&jv|*y;O1@E4rWwU z$#h~eOXzeR$=m&eQd&$!huYKQI#PIrkJY?0FVT|mR570gD}^ngG4-TY zx@K2sdp)Uzv@lF!)AyXbFnV22>aIOPT_U88l3Tb6ejY|!A|z|T+3slNe8V~X$QQl1 zcb`hKxXOFH^*A|4Hzv3Q`VN_0H&oJi;q$}S9G}KX>*VBw!@%_=FIrJwYU8azYJ~{- z4W9?x|G=maDNXl>Dh}^G7Vxoi<$*|kjVt38B!F6Z6m5-^yepa*!|I)sU#^jIzwjm5 z=?}UZDb@6G<&`$y;D#UB9efz}rJP9!wWFjM-Q&sBCrS!&AHPZIj7>@gCeh3&sh-b) zjb550OY4QGB^IMtU`z-}Np&YW2Xx)+jr1}~GFR&aEP0igruIL>4Wz`(Wd^<}9E3l6;-L(`4rkRK3g*{PeVf{m$1tag5q~JH ze@Xv!-2G0;@4L9;0ruV3tBhyNvAh0@*$|j)CUi{RP(`P)W?#pe5VK6LsgPbR27FM3 zbVLj>EDPa#p>Ztroitvrb=K@otL}`u?T~*tg|Zq-CcIF;prN!vxBU(^Yb1S^d2FJu zX18-tqe{wFF8exT_FtrB*oO?0J1HKYN{S~z4Z%(fAx+rh78?Y6qhoR{_VnylALoFN z$yL~s)U#_h_IR?Vy(7d~^+eX^kiWjvhG}-EM$`une@wpfr4~hi#qJTUT9>=3dt&>f ziA9bc(CEg}j}hG<0kR$gt6WEM#DhUTh{6FR%P&>ObNP(ohzHgT`ml)=q9)Rz z%tw$l^BF!ceY|C@_AQzq-%#tUCkxUZ+D%7VpR}GxWXdKSOw7!O?ug8K%bBtHzNBBZ#LL4r;GPskR$o@+KutBCaSvNJBM}MZA5O^cjP7b^hn{Oc4Usf1)#mHRpq79*$Q{}3$Vpoi z_7Ubt^3k6-2R!i@bG9LVa(-eESde^E38ahmbJpi&TlxsjSMOHfH)blAq{dzX;+cMP9H5LV7gQ!Z?sW z0cKa7`}_MqCB*t?45-7aXl%6P*LXQFLi zzjhq`5RELaA(^5#Btlak*)7WIGR@B&|u1s)v3H8HTzj z|EA8E10Z|C&KUhwxhNrW1tL$OhY3=wYdLn?8d2jmP))s31VGT`D#toip_GvkKE@+K zZKSHMf$Ztjh!(ezhBtVy9G)8uQ8pOw8)Pr&H#?KF2K&E{^H{g}43kB&wM{sx=M_*f z2pbepvqWi5wMTrz(c%S=L*ND-zVg=xI60sVIwroCDU0qWN@2JH&t#US>258jg=VRr z?!iKOZkF15z1+iX0h0^UT9vNvVd|QME;N5RO-qs*>uN8g*tSv>-A|G{TeSdovegOL z4OHyDhtNnVADQ#}Pf*2b&AA{mqSf7tvJGS7tB%}*5oJlDg#U)@@lTC|rgxL$rD;qIA8^6Matbv*!~ncSxi&FuiWqDwgK?11%g zHv{!`sH6iVEu)S3x>k!kI!bjtH}8CEH}1&MElWgKm^nQ!kvepgYE+sE z?*x1!@eRQ@4qr|p&FUz9hNp(Abds)1<)88Di5ml-ky~f!j!P>@M&t~7-dQ>-`C;R! z@Sw|W$Gbq`ZE7=vJ5~W|X|mQ+vkP;JM*fy6cau8$Y+c7oPO&`UmV{=7IGHzSvfpjW z=_bu{9Sl}VJ{>|;x=R+9u81oa(5CKELzhmf^!8vSOQ&_`;mb(%I&OZx+y4p3%4sdC8l61MhOF?rXDS@ zu)US2mHa}p21wIgWqFM}q$9fUP1J3$bk6n983699L=i)zR$9q6euy+j>$39? zBsYkpp;EUtGnYTLCq&)n2T#|c>1JD9?8Vv7g>gnUCPd{zi}(R(J*T7g8>J7Yb;Ir= z|8+HIjcf#mgz7Obr`1EHsUi{o%$JmZtg{#^0ti>NP@Y;qu;n>MoJ#eF2kpw%w5T6jMPq>MDLA}W@&fRpJSxo+&{RD+Q)XMcgak; zF;+@(-RFh#!v~0XID&n)L;DAnHsvn{_nDKcH z(VO)YvqzC?pezg3@lYif(SOz&x0jq2EExP%9a?#^#$m z`_P44Fs9F+*`DP}Svbm2gC@+tH2GBxS~vq7MYS5ZGD`B(-3q5mGo;oX2H<8}WwA_M zt}d1ynLMY-rStWT{-~4M-LO{0L-1n#kyo}Q$1vGU+t1sDWxP$`dHsvCsAlJGG&~P# z>oznaPYU#{)UF&$TyUMxNx4^n!V(`V0lCezKTpcg?Idbsk@8w>4s+}iKs(7Y<2uix z!*TaLn@hxE0|rT~8F}r6#vZ;+!irtm=GzouMaTQ}Hoa$+ zI#n2wfu7DAufC_im{4bfe^MG-Tls$q8%96J%Nl56nr?+(aTQ>-qCwegm+ z=0BwgGo>-Qy6|@1VA`yv7u(I*lC#$Py-%2NKgrWTzY=d7T7+E($@l|a#H%z{S|PgZ01$I~ zvhBcJDa^^GBF;t2ne<>jrqFv-e}VLiF8(rAAZZxhpPNk5)XLMNc`bR4j2Lqkq3Kef zX;aSQOq^{qEtFifxLG*h3n|KU9fK4vZ5b1Cf*%48V{@<%dup;;J`LojLHB{ zJ1T(9Wq_M1;C>n49KBpEwd}iXAoz?LlW}F!{tfHZKa?xx(gIHu^;wyc+Un|9SRz=+ z%{L`|z5HJbOLr_RR^@WkKya(bO^<=JV2#vS98?C5>Gc5H<2BM6ovw3#TC`qz5o%o` zX-?wXv`o@e|4PzKUn*&C;bVX4*JwHI-XPU!sz0RgmLG4yj6X3F<2zr!;vggz)-xCl z?=f_c3Vm{*6xyDlDHOC364>p1Rc>nN*9te~gCAv41eqgc5!^X~q>?#T27S62&?ohk zBrlXfe_`k~75YmV^aw+XRp^Z}=(f$70Dr53e=7qoVdTXs^nMw1217qlp?{P?$1-$` z3Vl=t?ak0$D)dzuG=ZV zhcR?0plK^4&4>7A;#+}lC%%*TZsL21&ts*e3B`wTrm5Bm|Ayk5itlrL>+u!fyNK@| zKHb;0Zkr`{t?Qz7m@QoD(aDbtysw07f_R}@Ha1@fm@})E+H3; z8hII=*eWIJ(hg9iZ>0Aks>QL$g}IC8v8wB#JWFu_bXavflozWGS?+9G|Bdue>oIT@ zR%V=ikL%aJU*Fy(2W{)ONsqOpfDab{h@fBh|rU z+zSEKPN4!0G&Q1drAd;tJqU2 z=v&C1QbC`UJ*9%asj5d6^o=!Y-QNoO-lNMuNZAcy>w!VRPV~84Np*3L+E7;oK9p}b zT$k|BunLnQ8J>Mm3ex@b9({XIni6th3)a(}J73uGPJMdPp!puCk0fip4}Q${ANZ7j zEag&{L(2 z<4!ExbKw@0_UL0ZStWy5>zr>YUj=Q6GZyNFs>Sl=j=Wwgf{Ut2R#;b6 zq3cftN}STW608RxV>IFgT}z=5wopcX|^&&(9YH1g7GP3eKs zut??wkXgj3%6hms-5INdTh5v?6j&_$`0YPf6B+BEilv;%PX*e{|DbVIl`K}!lBrTL zB$@@AsBW>;#qcdcklHc)$k*tzVyQ}n(M=qj=8(B84KBiY!u`b%`1IdIfkz}i&z7=} zrYJ!%0O8qVW(c)Cf;pA25PY_4*9&HVNkZp46qY|yB zC7>yX6UpJ9rMkYzUq7v5zTu7 zrC+e2l-3`4Po}EJC9~@W6kVSBf4sd1bQH(ZHoQB^J3U$fiXaIkKxC0cmH-(EM9x{{ zoF%|uBZ+9S2xA*)Fecdq8!%uSvtV*CIoSl0a~L5oB4_kH)xA4_-+RCR-uImU(>be| zuCAxLyE<3*bg$#X4r2&ieg)@;ExoI^Ct~he%(G%9=9|U*;9fSmhV}&<_A#0fyuy^J ziOn?%`bz;n;#)nQS2kTE0zfxAtE=P>@}2wLUUJp8ET zuu@_bzkk$H&DS3qNVbX3GU`i-mFw~v$6z_Cx{9Y9vowsDT}5ytB20_q_@xf@$o1Pp z9U%Ix;s=gdDp#w!5(&5iE#+*Z8jpc}S&3{9raSONY#RgFz}8ThyxO^9-BGX3D<8Kc z`sdy7M0KhkOVx;`Mu9~j>^%SSxaEe&8ZvSZU&TND!&1{@H95+!;@kg#rEAM@n7usK z@@jutI(ig=aa?b^lF$7UkvA>l+y2C+4__kY{{XFi3{!V3*|1YE1e?8>n@?E$JgSoS zA3yMr6P98g1IV%L2cC2S!{yHWrxTXzUSm?JHOF=$zTl+grln&+=#y4duiB@dB5T$Z zcgp1*Na2RqI6In8a-~P)|+&zHa zJMuzjEL}ZpWbGZbl#e+B)9vu3{Nfo)Q}Y9RnX{IoX3T?MowIZ|D>2Eu>jg`=lE!)F z1xuBJb84b-%Nhyukt)qclllG&mMI=X#zJtAnYX!UndZLr6F5HOH!oUBm6*K*p`2Mr zm*3!HNNG88tka4m+%)pvxR6)9WJ%MmVsj<33!n@UiGqNmB%=8xG&)PWlJ2kahJSevAKJWM)1+Hx1^y16z0O!n%kU$& z^B0MC{#mF?IM2CmDdB!M6~V)1b^|u)+N1Cu^OD!OVX5JMG7XOV_VIXkF+b*;Zd+13 zBFTbzbe26#w^T8k+wrzJmc{N(hhiW&oWIVoM7STFZ#Cs4@u)kN!7fGGyl)3;d)PiR z*Yd5I9i*L?u())}iFshJbI)?u>@i_F#BR;z749RaKP5-|Y(D3{rH!^kfVe-6=RdGC^5{v9h0}QRhn6x*N_jq> zo)ydU)em9&-&KwWKe8MRDA=3EE32b2&{R=e;=5tEmovz2er#E&1izUA5s6b!W6zL3 ztUEEnx^r5OEX_ARwG8ptO&r@M^O$Fro1WEhHgstbGlXPzjNYd8xCAU4dG%wU2UTB&9+Q?_IH`}cI=mg6r=7;uyFDyak0vnka zusN+X=8vV7CUyef@DihrqZ{~{mzH9sn*EM_{kB6$9n5qJX7h&+=O38(!fSL(@!gu= zF>hfj%6MSmC0<#Qs?>g9G1bQ}3BP9ewZX3we%)^V)SQ^aB|$*H(k3l}wt+3y5Ac(3Eq^P8XY)PzsD0nhc2g@B{8V0VaIKwhAYw~AQezM*63(RC%pNFfIukf2IU9XEihlx8O3_pw|+&&e+ z1f1lOfOS;2g&bp2zrwl?K@$3bauJ&s6SF2SmgvuU9kW_8{db(>2I3AP;(+vZxaT}; z@)fxBfr``8{$Qn*B52+4TyG0voOQ!rNbTm#LiCY?ejOXCts7{Y%1%MS0yQWYV(vp5 zKF0|?qi?pLr=l%D*?x;9RsY^n0=u!$uMNWuQ}lfP1&W>+lj0z1>hrRjq6t2(uj87c zMmN|OD3^y?i|+8K&T)ntZFXxQ+}=sJqIv1`C*o-S3Lw#Ke}1JADOy9w8js%fn0}If ztf*0)FYlx>?w#Gvte@QW1lIwH4FX5>smE~CsoWWGL?0_0V#07lA1obhu`}R^o&pCw zWAP2Cu+Eil@8ev`@5NszYTe?GM?Dc&Mm0~&nj$l^byPpH70!=C?`0E_joHY%x~QQA z7r(*qRoLsQW{6%Ls}e41)2cobFgdlIb1~)Ct(2czjlRN1XTMK>zMm4AR-9Itv9;h7 z7T0KEaFpzW7jTV$t2$NrZXTcSs*W&k=iYAW_u*5ZDlDjvAsr3KMB;HKP-R=&TBzt) zF^knd;(xiRQA&6^f8(Z>jCP+u`Z*0>-9|+aNbDtyx1Gc$w=e{To3!K2`mp7^sk@q9 zWG%|2Ee`{YV*1Ht7EFSS%);=YUwN)7(@ zW{`Q;@wE?5dQkT({rlTDSrB{kM*B@w^;bf+2(<_4)sMM2#wY=4PV?O|9_X$1_wMuw z1#F`n*Vk_3pL?r?t4ID!G%iwsxb0c}B)@?zp>G4MU$+@bv4QO#FMHCK7z@bDlnE+AogtI z1G8$9ZE#>>%@b)pO>BEab9_Ya?4y}-OT||o#l}a;uVJx$h(2@C>-q5M2&=#b8PxfwK*?5enoli=Y_I%`uPmsBD32}tKtc71@-~m}D5N&P z611DIIvfW5(Y|V&a%vvm z>8b6JRGs_zt0lsA7{mx19H9SXI19z2pHcGoA5~n++im`8TeJI#0m#5n{C0p^M(L2v z{Q{A5;Y)e#Ks8ty>BTz*szsHSUi_0lHAq`axsok1<8?3oZJ;{BZyhQ1kbZR*c{M>M zp43mR;3b39R!UfLK0XL67y8rSvP*uYeA?XpjCPiv?a$o`t1FaY6Zo3K>Ja7lC>~lw z#lDtlJh6y6Qu(+&-&#bC$Gr^sMbyHIwLLEqthQ9TeanXit0fBge@CIVN-?Tno2C4R zV6{~6CTgx_sZGrOiaIIUs7@_IdUt+5SnXKktM8xWXKWTVD>Z^z5%B5Y)6XsAy+YJ> zO6D@YHAJmY;P2eWVy*l$Uu-m+J|V@I=ZC2A#hb&~2)|hTisM%Xzl!*^#jg&24e;yi z%lm|?Uq^RFfyZbIMVKZD+Y}8o9g#+jyM|aeYuBi*Ji4e_+e?s+=`&~WAw|_X%HsKa zO;I(e@Js-OF%JR_ zQ$EqxtR=!B-4g`4Y`s?yWG*EuduR$9i&m4a0eakzI8aGH{k$D+`^8}p{c6X>_lD35&cmhzV}c|w0r4d zG5toJM0O*qevcf~q-8fMpkILlO+T0uGq0ii9!s2fP|**T!_EWrpZK=Pgjov8?sFJ@ zGPfC{8nQ?{sm5PKs0);j-tf7R>UbHtZhC)ZhkvTt>?a*-iPq= z#ncY&z36=?pHWN=4(WmSeGQ|pVi==;^pv1tPwhZrsmk{iQ)A0(R8jXMCtRzL4P&=n z>o(4a%GRn74-PA#C{=*Fws61V<%+B2OK@zO!6~`Vp(}Jun9I%}Lbjg=n3AmtJLMd- zKc7@w?UlazPe`%~N!Cdb1j*Jmf@Up=J9PFoEN6D)m9`l~NIeb~{XXRvzR{7SGeo)| zNk=4!6s{kTq(3D|C(;IxHkqjF&YGGBLO$z6s&sn4Jd7s@>4tO z)?az~Xf>c(+qYgOY;JdyokZz!6rCDy$%3GlFG;0`25tvlVVrS=e;Tbe_Pc?M!!dKI z*cxqQ(S_vVyR1I!8b zz*1_cIpFO9=pb`X1_}Vplj6I?ckYr?;1}McG+NDQ>@<`kg-id6?SOq&X|<-g&{hNr zE2`f6tcwXFL)_c3pIpnSKV_bjWf>lO4D zjhkpaRK$3H)+BLJmL7f?16A9ksC9@SJYQ0Brb{n(cwsWt))RCE0-f|3mn0oE!_V>_ zeH0&EPR$72x|a-#bx;RUj`qVL_La%_W$xpC<<;t1TLgpVVedx`%=$Insk~astDz*} zmbMw?)hzFe06GIKd65^3QJZOt-=iJonK5cPugMe`R5O`xj8QYaBj4ljxWF4$P^%Wr z$M`-zvkn=p(|q&?n_N%>;;gfOpZL35t~YKx`lf;!QFq})G8KIkM#C~P741bUqi3yl zG3Bgzg`pL``o}U|{H7T)RafA6FIAPh@;4RKWRF$|UEg+}H?OExR$}+^DHYZ7EP!~? z>||@hy6~M9k!wrsITh7rN~Gs~D=O$dQMWSRCQrbZ_a6Gt-5Bb+>9KggjKUYZ^a$W1 zs;J%5t8anu%6F;3kru5`z3mF;7%Ui`2qA=cQog6j$a6TWlG7|9ag?%9J<@;#Nywee z;3;cB3K8UJt_VeJ6${n#(6S}l(sv-YpMn{3?Sy#=Nivu`a?Y2S<}#SA0z;4!5;BQ+ z_8E{<8n81G7DQ~Fjlj;4 z^Gyz=X`+}$3*`kHsNW>&I(DY(#SPSYLhX~NxpY;u4D8lYXUb+t*pCFugD|O#83g-6 z!WJ7*TxXz$NYrRT{brzs5vr3!eQ%(~8mQ*!5*AOeNd~MD!HP+kXu(9v8W^xr5~UKV zsey_j)O}s(W1|t6w}En%s8buk7U)2wqj4oEnKkv z6D4ZDf%?`!ZIP({gj#K&ekN2Ci8@ZGbdj<_2JA}-t3TRKqD+bDBpgw{>t-bFfn8kp_5p0!&=?3iJw@!V8$-urK)JX`F`Y24O zG>OVHP_qowOQZ;4bt2S41NAta5?WWnM4v45(ba&Rl(1q1>u11@63R=WOc*@KA{=d? z)=1R-4PdKipuQ*6iCaP+G;SwUdZ_+zi8E!NN!TWWy@oKEvIzuRAYnd6U|S4S4~d#c zsJ#ZNGokuQlvoZF37cY|YDrXj6N1e&VC4u_LBhg}z?vH{ZwU(^R7V5lNvKyhMarTL zRAB?9Lw!*G)nCCDWuUHsny&vYVHh1d)OcgDQy;q|Y!$)&hA^p*EtD6ZOB5E?9H=!0 z>KlnlBh*F%HHT0gBr488jY&6Pqa>^@!6q26VFZhmutWn^&po7Ox_3k9 zqq%`%1}Z|LPOLAKZqoe?STMot64u^;onGYB$7^UEYFw}$Y*!#m>fa;}lCDcj-b(~O*Z={Pj_A_7u4A?pet3a?+1GbW2eloCO2CA}wnkG@NegRt@12vsc zm#>Sk#u%u#3tddF_b?gSo~sD_(ec#T9g7OM>-6V;z$n`4tj{HE)e0%OQNpO$wq;SVEYR<@Q* z8!+}=ri~7t(0K!cqEayH#P?uF_3pfL5=L}&P3;s4qO;qM==ZTHfPD)0C zeOV*5fLSTN&Azd*dPq?^Z03`jsz0_HUo3ZoC#MKE<1i81dKQE3%sq?I zKVZXhr`J_#KW@O)v0lQ(rahuBVz-GRZHhL&W+Q7B=ygD~#KAykv?oc`jBm@Jp0y*6=r=|6=ltU3gz z7KCCtRzXBh@z0v82{GH3073h+=g1cr)8q?`Y2t-;Y}atSJ;zs!ZGSNpTB!|{NH37%Hyx5ZzW6RA5wpX^P=d@6 z1>QWqg-eJ%w~boP9C;la@tZWP=%BPL#|J>fPUA{CvpKARAU8Hj!c_<1 zxjt1Ajyniv^bL}*9R!%EPc)##g?;&Ln$sFeVf&*lYNpv||4Zxpb@42p)J^@wr`BB3 zvr$8v*nLt|d?c}HJ)hlOE!FVi_fCuXqd6|vdV$LZ{RZ!{I#&8G3mUB)bueg$K$G7H zB^We2$JL)UuYt`1DIa)Q{&f$vw0Aqmj+=B3+m1lI!%y^3>njo8^T3|!>h$Q@sLGXa zLmVnFc6(^C^6GomL4_b4gVTzD_#33uk>#eX(@+mu??@rgVQS z-GO?BbZ1I;m_AIpv!pv(Px-(dqc<1sLE1dY5Ua;Yh9%M+r^iV557M2ehe`KO(%oG5 z`M}*?H+|qv(et*5^f>tY=~uSc%k@_0n3d?|d~Y9^^|j?Zr;i$8e!y8@HBvdXj92KZ zj>q{->-wtxF>`Qd8R^$m=nWsu$D_$9sHZ!~_fWSIVOQMlCvBah`P05?RF4VUyxy5Q z)8MG|XLh54`arz>PdjHDOp;*v!#V!ca!<`Qy=UXJPMSg?WNR4@(WK?3IgM$!m93u| zSj`gxVN0tl?XWMAbhu)r8TKw*4qMt)nsx|V+PKXS^CdsjPwk=%O5&yZ!&JIq9rcFN zRGLpmebAEj5q%LK-(Rh6UdA_qsbC;?*e)q#G88(U4*=rh*nmm_z%EW^@pC z1R4Y)rsAap`KA4{!sTT1{1P^R$uvoqssTL143rL!T)cO!oY$1HIOHcQWHaFfiZs5B8fWo^#>8r`H!R2fY^RBM7Y%<17!}K z#Avj(^bKYFCQm59@fqcaIv7V`ZbsI@g{iO(cIU50sX>JU03+oT{T#+w5A4>^_BM3I z#}37w^75nAfY3__Gk()r8G#@;lIdtunPtj+-fOfvpxMHCWWc4)bIW)nWNkUAo1dxY zDN3rTo$bh=&PWbrQ1WbKP&X_FAJxO1ekl&W7#=c4EmI&8Lf;GPuK?b04Aw5}bNRC| zY6aFn^igCqe&f$8f2>BDtJvFrtlluE$9#!699mBG6({;5$zl4v?#=-(9eo2#Fg+&H z?wE%?#PUKV0?m=2KndDtfcz!sHqL>Opsf<*O`z@)6ed9vyQe#YdO+;hQevP!lc?^a zfGQ(V(Gu0v2&w@*0s7PcwUVGMAn4DQiA2RnP>=yyBtuFRpma)As6+)&P`e~bY$FWQ zZ=^Wm_cBccRmcb`2Lcf`(e-QzijzUDH9!|7=+aE5D%MNT5dyU*PKZ6N ziP}J@O%jzNQ+2+ZQx)@wJ6p3Dpeqmv!WRUZBtgOe8>TNeKq6w<+9?bOWT{vsKaw(Q3kG}jA$zZS2A4! zYY_0rw?Z}F8^F6=oGC0Ufkh191IR?o3leU&#H}-M>kZsP0%U8~vz?mRByqb&0@nq& zbmWE8DjTMMVgSDd1AwaxV5S6~BVaKZ;0`0e1_tgoi5qF)k|eGN;qEOF3EXesSeJBX z3hPN=O#@g!0vi$VR|!0B08e&y;z~)Ji-9|fxR7R$a{W_@a~fyE^luE@Ljq)L>4&g~ zQ&xy25_kt5dV&OAF#_ym01rywR|c-X#1UQBBu+PQWenU(iR)zGDi98q?r#ZrYOzpF zo&kK^$(h0l5*TR!UqB|JPIP^N#5s+$Vfq#W*F)lRZO#Pll(-%vfa@)BrgRzvi|RDV z0M-KoN{;2TsX)+%Acu4ZjjsUE+Qlj`m-_xKOAj)&Rcl z;7sAy5?I;*njJtSSzjh`aRzSBI~=JbTYHq{4DbNr0>YPs8!T~&gi9BBKivS1kig9b z@CykXK)@;z*xU%PwSj9SaT5((2Z^gkxHk(#0^1w7U;~#PA%TqzV7LSlUH@GIQw-pZ z_D;rz;p1>+eqLr1DI+6f0MxP z9KcRFA4^<~VZen*+!zB_%fJ-wE=l5A67JsDNMK6V#Qg@48NiAXSknL&kib#|{FQ)N6OS9XlWm-uu}GYY zfjeuTG*#_pR%+++o1dvY6t^<=q%5+P#OK(rPE#9N%u9L6*=k+oWEDPOHVlrl_`KO_ z{Yqh&8pUsV?IGsA6URYe(nw9acV_iKBtG{+>jC@pFqpS+Ue+-jZ(yCH7RS!|s&mvu zW)FUPj+(6eHiAcSNS`^A_vUJt(ryHw%GHj_tKs(RTrH$1w}$fP^VGQB!J{d>3(`nk z0*?3Q+UK8m!;(fv%NtvJXk$;O-MA!idbVmhhF{^CswrxQYWn1J)#QR7xt%|vi4OsI zg+_(_`7d9qg}tmpVeg!k`TR?M`fD}8y?bXQsWT6sull+-r1yHf=6tn?pL=1l=Rc<& zvJz5WzB#6%__|@fI@lcX20?gyp_&TdR|LOe_?5@6Dt^uJTlWQj`HlLScSo8e3FG+j zI2Y5LG47#!%>tEG{IfNtnPkTPLA;RBx~?SU>7yK^=X$c^?TW6nw%=W#b~P&#CfJh~ zshKVz`_Qz+Z>l0Q>B}J>DDAra&bMj@b7;`{6;XY9Mm%~LUHW9dIAb%Q#1@w2{v3{H7F_!=OEx*Jf9Wn z_);5e(qO(fNgCdlJDyV<&moTIwj}$;6>5svJ-8nfU)LV`1GcIvm-h4IRceJYotPE- zqPiZ(SH!coz@ja`N?EdBQ1^qHO;qfh(#kUX536vZOXUp>X#TDjUG20!-;@Mz2jRKC zUJ~A{k{tM^fUo>fEmE+Aq|Y?yRry~(sz3T{T=jwB`2e4_28QP{NWgoB=h{4MtvWEh zMMq&t4_l6N20Uq1bzd2)vilFuo~QgUxYKGX9l zh9~qahY2b@m!qESuC!x!pP8GNVTA_2L(8I6(+Rv>$L~CTx%fT8?-hP7h?0t5q2;{X zIyI<C#(@^K(46_HwxCNfie{Z2|AZ7it>L-*US+if67<1O3h;c>Qe+w4mZt zywujPC*9|3)?q{S#nJe}9frVtqwTrt)IF|>HlP3WD~cL!e%+wfP=6oJ$c~eo9rDV) zYlG@yE-)3RXe4DVT#U@5)zm&$%>aKX4Ze_l*Ud2)1lQPe& z=U;47OSo@>d&heFwry%{SEWTO{$>}JSv*_WKiaLnP?XsZ?D2cm4X)@0O#P*xqAn$DLL=2&b-|ITxp5hrzehSusbuFL)D>E)COt~v zo(bnNKOd}l8c8X7mfY7ba__hTDs*OO{5Y?9u6QZ1+b(ouxd z+71Y8mnUK296>D=irp#feZ-Zwr|{`OOFj@T#ibv&ol;Ao8QyRTyL~73=G9NDwG=*t zk3OwdRjify+S6*efVF*0IED1x^4)G5K3O=}i$6ZC7Bhdx3;(4?g|5*(P`wJcpo-OZ z)fY=weOGdN>R<5Af2rkS>$OMQ@Iaqm-nkFC1rd(oh(~>@gN9WrF?Gj{0KzX3Crqy5 zyZ%xeHyjFrKCKYS5e$08GGa}sVdB=$c0_LpI=+-?w?TydXG380RHo-Fh!T`bC&lz zt4?gRvn~7wxgxY*MEP|)eukKKr2bXu9(IuKf~(I=L>1fT5!HMj^qHk8&N=v`q|%@9 z8+SNLeNt0i<(#_Mx7`<13$S=_OkX`yR)~{4=Nz(mGWR^M)<`dvf+2u7<dwgu~R1<~=W_?L9^x(FsSD-3raAX@~3mszEu@W{uMv?rC4;WfH8LES! z$>bZU1>}O6pdZq|t0+{TnqDB;_B-UYCiX*mHpt06r(U4}Nw!}*N$gjF8U_R~4d2p3 zQUi+N$UaoE!9)V7F0~|ybiUGIok!843PEb8Qlx27u2K)@p$r|);mARY^bbh~1DX#o z)LbFT#NCpx&|;0_n0{>pWh<#!|LYm8qdU`XMu>7}_0V7n(`{HVeS0>Qu9Lvk%{}1K zC!5G;UoL%I7v36qy51}k@eQ`YBRqUJEEW*>_6ur>SobIzcA+8myU*sKm4w82L1>_wgc}a+baoYvWW#79u=Wtw`w()Io4+Sj#cPc$iwmryh ztLXOXv?-S^aqvq&*+MibX%v2jGyItNu3fwAj*s0yjaX^`;x`+K(NjM3PsD;!SwE^% zLR18*060sNq^cis+M2lH&;xurhELOI35QO*q{W=D$-Ma`b#FRJ+FeLUa;Z2ezG3OLK1A$=U*(6@F{FBIs<%WG6hY?YdgAVY$u z5}sgNNRW72jfBbPtus7@&q1`V)}k5s?snldd=PMeFX>t+lApb%&QG@;&2_=9b$kh0 zbAM_tU-arb(JWDSmhHE%siT?pMzhwS=G(Mjj993YjDPHjrPt$N*+VR7 zd86?uko3Ej=kz-+{f5IYx#vF2u>FQM5!^dKkxi^(hwQRG{0ssZjlG)9A$ z%GcqY=iS60vkBztF_KXEmRhf1pEGnNZ(10Hydvhk&-hO_Re!$lmKqkFY89)LeT%xF z?xvP+Q1eQqcECmy7ez{<8 zaa+wce^h58QbI>oBPYI`fSkZk&64BHb05sbi2FgRQ*caXz-6OYPK z!wd5ODr(OYWlPe)7L(hN3eiy*K;Kzef&Iq$Ih5WJ;7=K9WRbO>>am@VGl_ka;BUct;KKx(F(5LpZ`S z?x>4#b!>R9I?C+F=jN&r>AyiRMlR3wkHaZ27f9Joq+@zNK@g$;E-7s#g#te$DGelr z!u~^2DuRL`Y%4n9|Fk4+M|mMqAkMS4mOnlU19ZRh(rc+7{1R=ub82G&9U0i=BjmX0 zA#ZwDP3oE8OO=6!0re9ok~ES30{n6u&>+hg-04-j8 zHm8?+PLoqHX27v~ch$In-}Z~4?W=`&px(ujDY;wDYu@6X>Q}5>JyD>K3C~peO55N# zgq>hX6AyU8sA0ROMitQRBN6f-rf~XN5$AZ_Q%fnkrt`b^)N(y4Hg}G>0uRuk{qn0U zoM~G_FVWh|(SW$scjU*(Kxn4sZn^}^FAs4*j${@fWjQ|PI-y7O^)h8_evFDp8|lz! z#q&@8R{IBy-VC;^&1cYlgS#JUDxG}7^!xnn-)ca>Uu5mf+Dt9J%{CXl@Kp6Byv%(y zvT6t#CDF*>eug-a@blk5E5eq4^=}2?i3wPm2ronIfN|^Y#V6latA`Z#3KWU39g5Fx zuIQIbP;4EiPZZ?m?_r~#gILpuLA)|qMk{AaGr0?Q^U+weko544;ftCh%da6#17`Yj_7zy?+!Rrb zdq1i_Q*fX1+j-d1FC}FR@1k4>U(ZwOo&dEQT7A=&ZIXB*UCQjUZ9HqmQ z`Ulm7x_tZ#wL-J4=uQ!B5_+zRh|4$aXCyS-A&7m3Bt z1Q9F_S#2td2tJ(&S?24CiFY61QpnF4y`qrgO`^|UlU}~u_DZd4?!95tmKu_UYW(OK!d=LG|+Ie4ALr?u-3g7Ztt>Au{RN0X~ zdaX_fd=@0)LuvD^DB|<$48&&#&witZdmOC<&Ush3^^sbXpM0a%tlCBLlY+-q5d1}m zzxb7R8RJX=lK+pXs z>eyx*pnGReWzp$d-}5Xd+=Ym>-v2#MG=Ep17^$@kKNpkS@-03Vrz@sV zA~Ty4)EF^vWKHyHkyfv12+sEcuc5G5rRA?YRbh?YlWO8XozM913ab@35Z$^1lDJAh zN@f94nFqPBVS(2%-GVQ*bURiG-zA^HcQs$)!p7pj-e6ZY)_p{Ei2DgQkF%2Q_33>A zKjg}yyn^s0@yJwuhk&tBG@bujz6@1)OgCsH>>3mksb zB7KS5$5~l(1Af4Rm8+0u6@k#_5G^rMM%Ab^31aG;rbaSn4KjG*xL|qG-NQ1-pkh4Q zlhrWa;XOTBE$p{l?8zDiytyxJVYq^9zn*vtV-K5K&iw%X){{jStXkcXX`iALP>s0B zW4(aIS=L^xoSJhGb`IEe4q;TV#*4K`AB>&wNH*2vX~jgjEIok|c9LQw`;7OCP16#H zRnU8$5GBjx`d{<&Y2xvZa;d$OUrNe9lnME#F*_#t{{JkOe-}ppoA@jXs~0$j8QS_K zO2n--VY~6aEzIA23~|=y7L{EHngVk$QbBtCE>dtd$N*=vKlyzN^KQ+|aD|r;Obzv(a3Q$& zcnBWGFKR5p{ZoXcqe=H>QRYZq%A2(h91HV-bwlf@N;p{w2O=&;a~2nI8S5cmd$ZuO z=`Cv z;QA?IU_Hj`S}_KRh(HwX@f0fyH4owGR@SY}3=cyYtBMLl@+UyFJ1PoUQ^Y7fW4jzU z;LIIuDAJ|Zke(Ib30tfUqFSMY>kRw&ORVLd4}L-^%FteAEMIfalb5UCa~;L9R|HVTs8PI_1qV2041 zj)t%KAaCN!N@=qtVjIy8@JYU`q4@6eqm_xQ6f0s~A&si+(%Vsa`KaJYq#t7=Q|LhTjWdVFBqsP=-IxnStd1?CHfJ0hHxAJSvd2@Za|ai*=>1BxX;F z%79jKQ5=q;tF{HQYW`!TUvl

aFBD~eigm=02ig5M}1L{g!*Lp z`>I}3_%AL>T4+&qGPtP@(E#yUft5N@%j~Ra*aEc6@-%@rN8>g{V`OVTs9}4AXG9t7 za*yeJoU78(uP^Q)h~;X#{2AyS=D+7;ToPMD+pVg97oO*;1nd6Sd3i-ekv`?DqS9Hn zXDa`sqA~-6O+iJah4N-9EnL$ZVhLEs!)sC4MLW`I2yf&DHO-sC`?x8AMjCserYXnp zu5n)BX1>HtY2tmx;EMFsUIj0-t%fUrjXPDfeF49Q$Sq!hv(VUICc+-0b#>8)eT#|- z&*+0L?-Z%CXaO0K61pp@_6v!;rMu!+VK=B$_fdS9yV9i9YycpqYk>7o$KdPu7KP{J zaJ3CKgDtJ*i4A7!pT@7V)jh~uWL5DigV{2fCdh5=NhYn0CkumPi!(fz{X{58nl21=fl{oPe+j{ZM8|+<}@d zXh2d*gBQx2S`HqPP^IPIp^1j@ov@J-$HVLyj?Ltco+FVvVu(ZT2BEanA1*r-Vdcj> zl$I4*<75IUscU7WuHWVwG@5jM1gm8oydjqodXm|n(dP#4bXJbMp;oKOdsSBYR&YZp zt!cS@TV*A{I~u^Ond61-AL%q4FWI7PQ(?OBr7iu3h`}HiKv|Fex=z1Tn#-WEw7>!I& zzc)aS>PR}y7keruWjP}4A$q)?2HPwmqy233-sAaxPo=RT2p10=2gOxS{?ZdoI&d6s z;-#1>%Hv9}NiKcT!mFJ1nCitxc`0o@myMws%?zJi;N;}uWNZ|C;(NZwOY!Y=Wvoz$ z>BzxB)NbsLQidg(u9D5TR(MCod(mx011_?op>4^ zgHm8W^sXJDuDFXE*ZTJS_e9C^) z%-MPUPyo!b8zUMmZQktSH?9m z_sNyQ>B5J|*!h>dU8uWKm2B_S2@w1q%+FC|WGxR_EBcBTR#gIY))Cy(8!}BB#annQ z=AcZ3VJxld_(WnxuW8zdI|S1l=%|qn2>(Du!z09%J51v#-WcFEkL16A33laAdMl4~ zjfe9C)f8Xp0KY-b{N>e^*19Y4yiIkbYMrTFiIFk2gmRP7bsJvUiKirusrP}wbFbS3 z-x<}FHoCF#e0OyvAh}v~(Kn&;itTb8L7wmlDOV3`*L-W_xsXMTq1cHoA!*IvCbY&k z1FVsk?78V(eJ$2LzLtzG)6ydYtdZA%ifo8G{-26M;+TFPOvJiO!*`T4j40ko_#MTg zuNjVv=0nVADtO__tVGm<6|7!-`4rWuP00?Eo@dC1$vVb!XQT+UP}ln zqRQ&h627;F(q6H%x3q3&{2C4Y6w;iJG}ZnuxtEXPTk#DU@u=i&!+BdDg;l@f0!zqs z5VRefXlZb@pny5ta44VTql~K^=K<+b1<=#Ov^Ikab968Z&6ey9Q1&0d%lRq|!V?Dw zx#66)buDEVD=(N3VFsf9-j`~XEW5H0z4|9^5@_0U4#Ai!uH_Sa6~#?nL3STH`RbUl z`znKQt?-Gj@#@fFCDG;*e?#75+m41xd0oYcH#GjEZV>-kZaw0SO;cVv(}>>i)_F-R|Fb;s9lXlw~u=DF-C!Aip*c#0P8#2NCf;erE`X z_wm4?Ag;HW>xY4Ok8R5^BF494KLPPBTlY_u!8&ON|8;~C0;gz%@{5lD$oWWRD`w06 zl9h(GNu!jNlJpyQ{|qs<+a7(UOw(1x$%}a7#K$i9m+wLae@z7seY=&<8mFAnz3F88 zc)YSwCvCD7O;ol?(nkL6WJLejmYkq?=`iR1dWtdyj@wjazw{%|o2vXK{b>7Qnqrrv z_56#^LA%~Icm`!|4L>*&nOmb}E^QItkfi)7eP=`F@+9e7Tg};uwPyg!e3N>jEt zFLQC?*A^?)ZJzT#K!X0%Q zciC|}oV0mZ58EUl8#8Y}1VZIdE|LIKLX0h^>w7_<1vGPQczO-e1MJc7*t}Rve z=F6D+exlmlB5*gW|#7j?b1pmSCVGi)_tQ?m!w&?1K%pwb$DWV z^%^BWnrS<-MlnmeQKseXl=?Q~I;FWzSHX*S`W{oMy`HwE-;+L0wYB<5xi3kHwwgav z!U?uE8GuzPZ6zenF7r!Zg z=%kUn$qr<9B%iiJd8yme&z7)LIVwq?+K}C6lJp60yhka<7ia42RZ{T??bf|Ye>krD zl)-RD?NfG0L->UJy8bpI|r15(m=lNtuIl+%+4_2JlhYVAh{Y&xzR~FpG6CI|OF2e8dZ4b{Ne1@z+KMW;w*H zFRyo0nF%|2?Q6xv_a6nW4=!R69e7fn5+wB^s>b|!9=P)dgtAuZ!8e>hKh=Y`JgGE;GxnqsE_LU>YR;3BN?SmU|5Uz&MYu&`k;_jh zaqxE6F^lcTQ_5*cisn;KE9;~#yy_XHDV(lnl%Y~*{_7bOu`@TGRffZvd{)^kMcI7M zDIZCag-5!ucDk3HY+s*;86b7!8(djWTZM~=C`Iy7mr%M0t#ofLp>z?v<7Jet1JAmQ z(skft4Xgt{a0R7nua&OGRg^B=cKs@qE=H; z#Y@7I!qx(y+t{kyBy@$B(=8nxUKx4lUmsRy{pvFNx?QR92C?^AKA7&P%O?; z5HER%S`6Yz|3fV{;+Ox2A~xc!9w|0F9SW7O!htqimKxfi2q;+tO$q*Zs`QqmdffFN zM6bse{)6ZNyzn1H58zS%B6?j?0xO)1=ZId%hN?$&f34aN7gKaUUiBpeQ%e)fmX{Dr zE&lu^1XGJodtl8KQ%B8mebQC55liv%zredNv%+@bYY{ zWa6mW9(-5@c1x0}dc!2yHqV8j5S}*F?siG4!eiaoOsTS#|A%hO0)KON_PON2x4W~w za8R+6BqJ{{ut!oQTYe>m{2Odg{k4+h##dKnOW*`mVT0f-tinE(D)N7-ux!cIX7gl; zlH_6wlv!&@sz7CCe3psv9)?eKPImvg;(y5}V_1XpZXt zy2lOPtY)+C#^`9)GZl_nXQD*Y%6jS+B!F2R>|nXC7T$@%vnNQ1IsYCX=FP&~ZhfZ1 z6A7p7`g-^H7H`&8S9q5{^kzzf{JU;W>L%EOUtXebu%v`u07948LdDfaCv`Le)Q_<` zo8o`qE)S~4VuPX)o?HP>QPCNWjP~>qm8p@q+V^)kn5M{3MZAX6m}FJtWtUHl=C*3A znQme{e^`xq*X88xezF!V0pA5ULdUdW+s2IMjqm`3*}>2i2NrNr zr*V-NNNDK{lx#l@=wXdYDBU=6a>g~M>qtM3$Qz!Bl@a0`CT7Yr;1c`-<~+l zGThJ%9w^L{2i)w-mUwk6&kalK%R%l28&-P{hu7;;>PKQ$bBMbOrUsg+ZYY_LU z$r|V$4&vc88Pgpf#0S*GFfeBj|F$OUsjD-HKd#Aq4F3)!O^vP{W|yB1j| z57c57U3rze_%XAz)>g-lHI!=Z{u!;#IOjH$H)?jVldqH06cc%z7{1E&TtDapt3yRQ*XD>QDs$foXEhd7A24P>c*^% z&a=DiYGYPU(iL>ImH&w8B;6OiY!#cL2(DdwlHlY)_j%)Htfj8^Nj|z6GY9TifgT07 zm7CHEStT_I>w;FpS|G99f%WB`fDuA3gX=4v?V%J($(6dWgHx;`KEbFvsR*90g)tx7otK z3T6R5a}bP^e+mA`@AKnsPM8u)1%JH9gG z{tbSZ&pKmzYd8E0?A)t7u{n#-9q(@2+Z>~w&c$M@(URFDufa?-eWrp- zpMQ8^D+~&4BW>GSvyBq_{m=XO7T=%P+`1WMRimvBqO7U*X)pZv#5SyU@{kvPPK!z8 zZc+F`^jzA&F8Zvib>E9zKVJxq_P2LoQ4wV!0@fsXALZZ#z z<14G6=Y%zV&XUlUic%fG$4bkZ+GJNi@14$m&u5w3&sq5^sEToQmrr@KfSi9 z7vJ5MRraFzV5Ikkhwh7I$m|Kf-j-E!w>sztpti)j;WpNeeJ>f(GofH$>1&q{MA~x0 zn7gxXNV@Gp2R5OcE=lGV3!A5_)WVi;VOPrOuC(NvyRrm4Dq6D}t1jK*ZM!kW{T32S z565z+{^3nNv>U6Yg?sTO-I%A(O$x=+C|NFr{!p~{9)LiE0XJ=jy0JNuu3aNrryguk zIo+T+{8De$N4jcj)Q45nc|-@H+Gur0XvV?-Zs~`XQe1~G?8jLO zJ=XF@ytp6hQ`4t5DPn&9{H%MX{_! zqbdS7_bQrGqKr!T5*@vzsW}DCLDH2XY~jc=HRP0^d5``qO82Y*|E50+@Roq4vuUml zw`79`-`v3e>d!_iiGVHXhAEmeRdc3o;DZLR12FK-ajb)R%uncYs$viuKpu?Bp~J|7 zcbG%Nf8sOan2&D71pZwd8)dAE!7i(yT$D2oP8c%la??OoQ}<>(Z#9rv%x?9_8p|(Y zQF|s#zStvbUe*y>tj1Ax`EdaMZXo-;{;(fl|0Ooo#*Pfb54b60m;2TfBZ@2DYCy15 zR2hq%K77U?R$aGx9A7zzB{i?@;uPJgabg{$x*lqwmUM-%)5T!B9tX4*0*6I@TEpCX zhzu|{ASe3su7lYmo%ws7HJJG&7q7?IFtr_y&SJGt|CFGcfGn-d_ux+q5|6s4hn@z2 zg+8@wDP=BE+BC|2M5%{qQj}=17FjZa8;o^Bs|$9AgTv2_(a&k!{jX7^4f+M3M+18U zx%1&eSiCM}3_m`E)rxzuj#6=VQ=d~wtor*J>qtLksR&8xT zn&Q6~eywZ5^C%!kUr`zKrGA5%M-64!u9w#$h2i>RYi(Y`*jP#T%$uhSXH9kUy!o!- z?6C9g4Q~8#N>xRd^qFnNCrqbvJu`wbYu>xg_I*5CXwW&w+L|V?WjblMEpG}-ah7)4 zx_-{8mDin!wvC>}+LY5RwAg-5WgW|5RqD}v*0-F`57c_QghdU{KhhyuQa$ill_G{E zS6nv3Y4aa!pJcG+I`^C}NDDmhUhsr4+fTSYDCw+i_@>3IgWIGT5O5WQnA_P(7PBcj zx9=)AP4aq*PmZ~N$3I`n65Li-fRa8n#^`fK@RFr$zuUK<@WkuGhQGe$SzogW?ibPa ziaefyB+t(lx{NiF`r^`PQM1`E?dTGO(-E?77(bU{laoD(QN zub$|Q6oY@*;u4o zoyz<%f$hrtv2u$Q{MAZU*T5;~F}aju-A8XX|pPf)}bfxD9-zRjn@P@!y~z%c)Ae`I>K7J)d&xKCD;s z?ZKj6uS2NjgKPQyZ&0txw0d19+?c?0;l}B=Yxp9N9)g4er)%N*-5=m%9QZi>#t-mu zfukJs6U*>1fsxDjl5g3dni|T#l5pelNff_)Ewb?!{DIAvagWt#=;>>C>xr`WC8VPg*I(qBt5No^`Hj`AZM9RszpF&U6>m|Af1=6^-WPex?@)lO5_iIjN-LmB+#~$4Hv!}HIN`}3 zuZaVw)?*B#gzFJlsId#KEa(Q^ENW-LK>+%@*3J@=HKjhK)kb4-lOj%YM7Si}IDg*( z{JXWxHyI!r12n{NLWIPkEykF434e?sU&CEN_%Xt7bKnd9KX{FMY#IH02mM-&9&LOO z+C&_bH|`pKMHU{qj#bdj|Au#5$BJ~GYkAZ4EZTDodT=^LLw{i?iCldx|7txuTWMhh zr$VzP(O~OBKKXmBfPH6M^F3=Ub*3(PCyDk1`8Jd9OY*J9e&=*iPu~-`lmenM;7iBp zx#=zu#(suuULF>uT>$zWoLBvk1xBJrH_l5GiNyvsK~z{czkP~%fFoy*+Zp>khfo58 z5&NmJ;rWctkHLFi?yMkRCp^;a@pbOwy4?CBRtCT22Y+Pw(l>nZPcT8h;afE4*iUSk zw2BYez`R7)8EG7p1*wRBB~$B5PXGqa!{C6ar*wq#pEj^MjlLA>WVoCTH{2M9nv6Rc zVGPJO1{6~9d=XclDtLJqYOmriH!xq_Z(rN0|I8FgSMLN5-pCrczd4Q;=|XMu{&7Bj zBWsSC`cE5KEvXY~qHrB%CKR@SfUh0EcmmSIoW(xfK*669CeaZbO#s~jNBV&WmvG}I z)~q?Yx+$LlA-5F0WFEBY7Cy)e2MQD8-+qaZ;|Xh4O4j42c#%675|8A3`X(0Kf;!9y zDoh5(;&@}w;i;_w85RL=3^)fC=QK6ej|HYwNVAvoyPKGgJXfF&8v_a~b01DO5}Ux~ zyy|AwMK^LWkKfFCSDQzCAnlkF#sF#p`c_&bLt!_5elx4302B$u$$Pt%chDNPb>o$` zuv$K)fwBJUwP^Axfg*;6@z@U7!diGkg{afWn=X366GuyBzVj$wyM!;i5%42?IjjANM>hR1R{b9jvWJ+jB9AEJ(s}T(|#5ku386{E1aoN!!@?65C z_`uAFhmIk6xdSlp7j(5A!)@MXD6iZSD2UknGt@5Lcn>P+Vc5KC*}knfqsqdr@G!&)LJxiIyS(*wW*(@S8>DFlZxIxuzjcTB#srQo3!`o> zHX8-H1=oL-z{eP_XmtAZ!i_xx{rVf>#}StrtbhHL{EzJ{EE(j+Ip3o=4(ZUaXy|}Q z4u)XrVeX|dK|&sZBQ*aNgrg#3Q9x0l2K#MMU{W8mr$!@Rg&{(j_0wSVrLhJ0!Lstu zj~8Kl@^7qpE#dVLBXR)zsI}>ECi#FC8IP3*tl-CgW8NM>VwyklkkN-|Ca&QB{>EA) zix`F~aEyy+*|EVh!67 zc=*V5du&5indrJj?eoDMiiEJe%}G1w%yhC}oJ* z)dKjV{4%3La0Y{+r#_rjGA;`l{RDVp%5!92U4m?bzeU=kCBBj=TicE%j6?_56#40xC=3HQ{-(@j=en zn8QW=7ZaQge^C~X8D~`ctN_b{I+8C)fE$5g1z>dT8ew^)qVZEGxzJvL+r#>;I5#*t%p@;b? ztTgzcE*^mwG|TPmy9Rrnw9+m}w8rYZTr}24geq;UPnV&ww&opovH)orAHS2;an;N{ z`SI8MyPep``kEiy$y#*>w#XSerKKI4AK{mo&Q355RQFL=LMCM?jzoz-A&&x*hFx=5#(R6Z!KL+hImSBDUQohy3 zIwPwkHs;$AR-AFsR!zxUAm1}1p*wBKQ$6Qpj3ENPoRV>Ravd#Y7Kl+dvHF&Xd-&Gr zEqb4&eDE&j-3+ipuM95aN4=qu8185qvfFUmp(=)BrJmh4`IcR*VHZ%(9F|kk+t8Wf zK}Uas*@m{WQC(C0jhHShU~ z*WS(irLTDB-K?&!P#8`940THrtyJoHQ^1$(W?s!;n3d-H8u=ah-c=wpd$+-+c{Uop zEA?a)@XNbd*LKK@F#|hgPAQ>-dSWhZoZC!HUjy<{^{CBk`7H9UgU5UZ9=);mSxk7& zd|ng(^}D~~pYCA+$p|pcTcsIUhE;$tV8HsmcP!qRgku*0r%`o=Ux2q9&1?tR`(>=dVqSG0 z^K}K9vfOM5Z@-T@L#_GC}SFRc!gl>wD|DNlB8^O zdrvVLkWW$IJUTXrnl?-aboll}x6{r!uNvkZzE!wezYwULqF7mTWAfjZH5Af(U=b-p zMBzqrj_|?rcd6%4spl9xV3JM!VRo4aQ~weooC&pq2&dfOE%#$zXfYqTpM_LI47E=X zR%d#lzrg5W$R{4JV)VNf;TdP7R5;SKKpr^)rw~>*EYcw~!cLLGmk&F101I)iNXyQfe zSa6Fm_gus`A7I_3Mf~*v#@sRUz*{5Ps6X8z?t2g;B`^thLgcOFo^X?Y(I}3AVgtNt z4RpXohv{>1Ij9RQ&s7j$%=nvX;${C#)P}h+FgYbbW)})cSx+G)jm#ARO`4YTO62w7 z6_C8VcY@lw-b2tQ-LxF#7Y;I+CPZM9N!^86zmS(4WF4do9-4_9V~T^`i*lTm!G~tD zI<&a54m?jWM}^4b6bZTG(Id{Nuwc0{oUAX0K|8Oog4^FY~Ffe|F(0=!tP_T>gawM;D6m#P=aJA;589hNWGRy*K zOzAB8xbavqxc4mHcvb!dSTX^1^C@dV!N0&Yrv4yQwYUEXK=e5YKmBi@gNXLRi8_5V z$~jAP2Z-Unf?~|Mg%Vk^)P^XId=Er$D;lm-qzr>n$d4Xnbt+$?q&& zOz8(AbQ6Yc!WA|l4ThK{#+dhMVbl{+*M@=6BXFdM9{WG!x)4)Fk8*g-N}i0~9f4jn zgpxhr|IvItCYROo$GixH`h4NWkW~rBgJ=}?*O+?*o=f9T~PlPSobU-f-evvHVfu}c{_-BK1#o(IF4>PKDAF}So42X(aMlc}HB*NC0NpEs+_PbbpFDgkZ@2#E zx%~Mt=F?6qtG)-hw_`5lyc%>Ig#KY#GJ%vXI*!YTmxs*3#w^_EPm(52V12w>ahwIU zNdZw&oP3Mi)059M%PG7nClXK+keze-WnemSe|hiU!WrmD5*r}_LwN+FChe*G;Bi*R zWsZQ(r}Br#nc@Q|p)P828+oWEFTw*Ei*fP$RPJ|z)zftdAQa6fE@HZAOf zX6UEU8LmQLXr3Q7$9c~Lb83zr{)H+0$CIqFzaWg$7YJ8aJ!MVtnqcM;_)jW-d6M~s zYv~2<($XL!>K1-9{UiSaaFwZYkzZPv$HKoyaCN{aBSz1w=C!GO(4VYr2Q5Xps&KU? zJQFqcVH5raq38|&EqsFg-uT6dHApJYXN!stO652HM1$5KIhDWp6Ac=WXwcipBh+9v zuX_p&8gOZY7JfA7slXXiv9tePgTC!((3^-J4Z11vL=Ac`Tx04&M}uBXp(R(%Ka%@@ zHRwlL9RCdz=fej5FGWCueh3#e{v2K72Mt;-B!t$WTM-+yO$n}Oy3FAT{1vew39Ugt zC6=!~Xwc7M4b=tKBd|AIG~P`$-u1`Xj~xn-QxtPvG;H75d|W-UP_AgK!gKJm_3Q+3fXY>4v%*_4IG7ndjADPw{B=fdsSx_?aPE6+u zH}))o&Y`&I|E>mliRf`T2&b(IxE{n--lx&(|Il2+x0)OHwQysw#}z{v&B5$-+94`a z7cEV>1IgYvUJS|?g+Iw1gYu;F3JuCfX7S>)%*RoI#@XEG95V%h43+yYSgX~&VcXV^ zhpmYrL|ZBEF3C??-NNP~Z(v8dFLjLXS+fX4eE)-amjGqL(fnj6?(5RcleADYD9oM)^S zF)b`QoAV&(!Tiz%=5GW8W6CDTotofpN!aYl0sCsslJ<%xO@=?!XybTSWkYG+w+ zQ7gwFXD~m8k9eY1Fz{;IeDZGyb~L;O@=oFvV5W>9%B~VoHS1moin4}>`E<7=YHziv zVyLNw&*X0|vIZI$BcGhfn_NO~11TU>E`VFwC?bSJ$WV2(iC#b$2Rtm?O_q*q3^1Gl zHRN>_c=bCI+CvbK4>ja5LZ%baJ4C-5xP&Sp`gP=9bV79e{hM_rMyu)s7)@~K^SEtwY;MpY$Yt(!A^4j+YUa~qWH@cWlqYwW^joD z&(eE{b;sE(50z@xX^8 z_gzLKn1Lv01U+W(|6OK26$LLeg8MVLa)s4Mrr`go^Ke2s)Oo7#L(;h<>8d~*{`p*p z`VB(VOfR9#LUIN-U{D7t1#Bn{2+^MdeS%+zejm9P-Sqp2rDkMiNi+D4D>(o0Llge+ z3Jav{boI+Orgp{=N=#Sx0yd^%LJSkqFb_bq-!Ytw*$f{&71smP+X;f?K{;Cak*xwa zi8JZ|h~Ahw3n#`9ITipSBSLq9#@i=A%k2RmL9DnlLVGRJ339nX8QygU-*Od#g5YSl zE1hUo5pYoOOSr~VFC-7^q8RU}V*Wi2kzweLhXZpiv=c~R@OE|1icU|hJqtAtBRcd6 zu!yoiAn;I-m})i@T#F2(U(kiW;9xd*4|ZdDSk|Fizu-Ntv1U<+MO1SWjfJ5^BviW1 zON(rAWK$Nvo-|V}ksX|)(Eumt#B}uZ41V$&>;wcMm0QR8-`7~(dK%$dL^?`Ef{W7% z9%T6IyP*ax;t>izef!UOo4?qEWUMYcHCD!}rr?bCT6)(GqnsYILM&-s!d3_hJwec% zduS$D@VO6lJ$``7XFi-sP5mAggFWP2(2zlll}0S5I93-?5|k#^uvY|ny0rm zn`15@*0HBDhVlPtq2?o+>;IjVhh1krA59lUH~*w@E<_yv&ow_W#U@qkU0f3dTC6jM z7`A-Lmt1G`Ao{86tRqD?reuri>Z`9W);jt^=Zf~mFAlfjCBmyHsJ;rQB8(j_M}(MP zr1MTUSY51ljK6_B+jRcZ4V<7z=Q%g9s4|t`y}^9zPNOWv$zj5E%)+Nav#@gWZWf+B zjW;Y{EO|<)ZVraexF`zyd{Eg{8oDdp?KYeQ5OwxJbOZS~(ab*&iKBr`0budVrZzGp z$_lNQ_W_gK2n}Jch*8+p@3?X922caFtqg^urdGW~krA_g4>Y1r0T@$hixEH%0o2lB z6(yFoC|v1$Sb%#vQ+TbLtWM-XDx-&aCdviZ5GmaEwNul~t^yxpkhSmvR0l1TU{)4m zt~r%w+=SGo@GY8i@+Pb1fz%O5+XwfcuNRK+;+qh6BKN(8K`;TiaWh|o)738*&3q1g zQO1Z&ly3ut`Q;`UXvGJ9W9q*sPvLZ0R>qr|IPYpT^dcHJ^S6SOx{3DiS&R|c2pb`g zTKpOCR=BA_wOSw=%Q{0ucHEW}V@GQV+~$+adShsd1h6;A+2 z=#O0f4i8WkY;)yK;-)(+SenG6@33lBiQE{WA4in?P>>(tL4>49eAXRSx0e<#+8AMO zK$KPzXgK-Y^! zcUjFL2%xMQBh6NLi|UnG!CjkP1*g8H;SuJ~;EjK0C6^`E0eB>~z(E-ze*~W+v3?Wz zhP%w{F##lV&GiuwVT?2!o50WAWgSewYGT?9pCiWU2|Vx~j+IQ{o$n!+6Zn*StY&kf zG)7!bs0%p{)qvw&t*4{?WH$jt0y+!m&3Gb=ybL+^oKS%ezQ<(UFXQ>0d)Uz%&-M3N zon)e*A#yryRbhzy1u#B+M}XCk2tZSm&)`E_{+b*bDUGR7+7S7pcsA||En|%$LM*If?d%3E zi5VDPnG zF@j;XVS4~gOX8OvU>r>1rXq}BNj$g+eeoFHrwAk17;wSjLq54B0S{>U^9lUe>rcwZ zYQ*_wv=Z5KEdRC$BiLu9s`F?xva+bE7&+wn8d@8{1_IDVumSKH=l@9kfK^`}KRKA##BLo@#yK3;>$KPaMq$ z{*604guoyGM;k=i!>6@t!w5m_7zE%qrs~m#3OCTLiqb*ElW5$`ae|cke;s^|L8Pug zYVkwhH>TpzDO8?^o+MB>7<`Pp5=Uhe0G~BtQ8Og9zHbMtcK3W2&nr z=9d~;3?eoD4`puxS5@)O>x7tABPx z>fECnwPqdoLNaZ`X|zDi_nld6|Idy%a=Y-eBX-n-V)dvqIYx`3Gx?q`HML$N;Z-&| zlMZ~{cn8ZnlVTpz)OM0YY#R?PVcTqekWKi7ZgrC7;!&E}l%8UVexo(Ksb5K^#sBJ8 z{ABz5`m=tJ8zCPyI{}icZjjqQ9MI z$wDLdZ|E_fm&Womrsa3j#jSZ77{x~z16=-0-x$!vZxqa5`{0hw>on-2wC@?_^eB37 zU?Lxn(_OKS)}JUYcm@An7pL6Rc|kQe`YJnr#qrdgMi$vM{Jy_4kOMszJ0&04 z|H{X``Tgh$n6ke!*zip_M$5lZcD8d1*qgu6e`79Sr+=gWs+{jF{oOIn;z#4Ty6%6o z<_(TeX8)7^-C`b1qU-2Svj0y#Q`^sawVD4URDO-d~OggYV-U z!7l$r?eAO`)Zl3A$KC#F;OWBHy$y~a8V5~mpuzVeY)u1I;t{s5!7-1d%T?NMG+sG) zmG&Fma6i%Q;P-z!*Kx}=W53Pt(jq+>qdqBUKQ-n21)2CGMlbs7w)lzU$nT)X|3VgW zIZijCoo~}JZL@5i$vN6<2hUABN!<^1p&hL+Q(W+haN28}p5wH9#MiXf4qhGaY~-2H z^K&Yi?z%1co;t7htxLF3yuIdJNXrM#Uft&WK`!JPNydM4>&_}DWv#C{N_!c-H|;Dc z-?^Lj^7LHr#?E?)48i#{g=r(L`hNye3C9keuwSA(@U~~>tpD2)XXD8)jsNW6$@KW5 zIjr;Fj)Q@`AEg&~>bm^F9%*!hdPDzlykVg(Z~woJz9g3Gw8yBIt82Jo#Iw7vJKo`4 zR9zwrk&U#=xZ!WMztIuShBZ1|R%*iQ_HzznOB)@{4Q3+#%|?gKGK0O}=;&sclMVB_ zrdo()#=2-NK^+pbE>(-O%v(20bMV1?aQ^4id(tsyyyw}PEVO*HhV6;Id;EoopE~51(&_Uv~_HPMQfETO#JlZ*J1R8D!oILu>Hi( zAh%c!cTsMXj0Q^NWxVNmVJ&~tGm@RKXc5in*q~V3i)#(FPNS)wEt>Ow!^|^Iw@omj z(yc9pcIb5@?)KL`7aDeYJrw?DpEc_IU$1*!%Vs&Mmc|cuk49zF`9I#)6^Wmv!wC1= zjV;F?nLDqGoQ$>qkd|pn^3~>n?!ogH^U|G1h0kr9W4W*yn}h!kgWLd<_%a*dqs7vA zKhsAW-j+%Y&fm(18OgR7g2i{!LNmS)M<b)cyNDf3tGOrD-Ch4&Zak3$FUr% z)?Yp8$11Gak^qXMCn~nTX0yJ2nr@lRCirPxn;QoV-<|v&MSF*aXW0fnt%XhOG2RDt zIQ}gA&`(S5&&$bAq^(AN#-VW!jfQEN4gq@yK7OWMY<@R0nauJ8yLT4r+l0U6<8bX_jDnu(|tdz6FVB?)lE8pg1=cg>))k?Q570i=6vyA1NFI>7FX3YY$ zp_Yf)_yEl{n3}8Lr=JoB=?Vhlh0ED|AGSo; z)T7zneu`4yy7~2yMvZ5eu4o&9t zZ;-Z!Mzvm>w!~+`^+1-?Op6*yp1~`gq#Z)naAB0!ya}}6!xv&{A(0l0cXy2jt~U|i z-%+HO?wnps`@fO`{m0;VYyEV#p_w*_@;~29>k~jjK{|S@FFeTF1#7bcX!J)3tv^g> zuLNt6B6fT@4Ji)>YwaZ7Kb>6-)>=#KGo2;awPc!YYMNcU+e29d=O3bq(iZM8iHNlO zbgsXSJ92RUxJGL2yxeKU8h*)_Y+J=)^=Ja}j1LkioCl`yl;i2WS$f^&M*_a!+<=An zgVM4{S~k(b!E=*3ou(G(6ty(Z(SWhjoxB1$v6QiMqLFcW{Afcb{Z5bS-*=A7WRsg~ z@k1$XaDE3~g{y7pezj~TJCkp4QB$(lUHDq8(QIA}t>-T$oA=rm}UR+QhUelqlh3a6@&l|*gcePC4vx^; zb;#grZH%3q<;F5S{t!0)U?Y6jEz6}DY(s?Rx|d9gGihu>FIbMYH7BCwaP1bymkis5 zv;27q`NZ3V4?R^#;8#|*WrpuW{=$*-i410Ip~YDCdONhx###nW=GiT&rFN5-KpqtA z&KD-#tmX=1*&hC~uo=}Xyk+^(N$jvgb2c|jlc+DV)0sKCL)%I04~I6uGKt-xX)X`N z20#6z*kZv1i|LZzcKv=@2tP=jO>Z*s&SoH~cpQ6z{s-fd(bGI<{e=83KEY4l6ZV62 zsPg}MajqmI??0Tmw7}1VVi>|ba$z=)IXCIl!QWVoriD)>Ts)q?;D2EvMNl8~GpW%B z&F7xCzTkhJd;C`)G?u$jA7tnydTr;@#A*u1F5X8c0NuvyxW`MK(kM&s`^fL)=quyO9+EPJsXL`TxuZ{3g&mUlkgSD<|)&e$p zu(n)nbAbIgSUY0QqK$e>%75?Dp7K$j_<$7+(~>Bq_wX?7s2cM4-U~Ft^y&&;Iu%}l z!lN#o;`0OB22ynD{tGHqV^1}?q!z8AT6}wtw#Fx5L&XJ}!aAQS@#sjcT>Zi8Z97V9 zZ&AIw*|^c#?2x;5|5w&ukJjSD?PUM&Je!Zv&iiOBc2b_yDHQqU`Bb*6%IQZ_o)~3# zn~m4*YoQ*S=zTa_TdArk6Zo+g4<$?Yv-I|cB#JMQe(I{yx%>pU9+moSFvC6HHR8|kN1x! zw1F12^-5vbKb$?XOp9dM`PyQ2Zhw_)eGF%ZTrL%n2- zu&8egW-FI#W$HKitm_J`wHoDN_pQ+0RntA*76n>wi(2AgV^(TkdqytOl<^cYC_G4E zHih{V7E#Eju!_PO3MCX?rm&U58x(d?Xtr2WoD|wqNTx89!dMDZD9om?kiv2b&rsMv z;WY}oDSSxb6AHtZXvxZ`C7LpU!UGhtD9oX-fWl%5ODPmmc!t7r6iO+)N?`|ucb2dV ztF)==fWO(WLc08FyyktnP+M+MAHB+26lqR1{VMBGq>X5oGvDYfw^74k3xfGOt)iU2kltEPYAibecOtYuu zCn@}c1>wI5&*LO@!Thd!QFy&Dea}t*@Ta*nWjc3ncF1}>hjo5ROHqIOnaz7jE022X zXDX+#iccuNgBEF$uTE4)K2?@L%sf;aTZw&vd zo~&dEp?Pc`pD^i#6_$-WZ8iOmkKs)JN1W57F}#-CimB_OkCD?XMK*07`}S!qR=qNJ zcd<5Cbv;ilP`?WLlmI0<(e+4O|2cfA`>=(yNme@J7P4oa(bo9C@>n3vmiX*rtlhKP z$l$(2e0G|}NvSKtdp*WhKdbdrM`W{u&uYm5?I}Z=xW<<44Opu!wnT589jMUP+F#`} zWzk2M>7R)Clzpj%0d)EBPeD(j3!naMNcGYLph9mX$AQw0*v*ueLIhG?#81FZ6|4&=EONdqSU#B z&C0XNkAL5=1qs_#;dfE^HPD?)@;J{4pI4w&34iB5G#5dUZO7&H&uKklwm(F%w1Iy; zc3n>GMn02;Px@sx_BpM$dhIe>`<%Ai-mhDrqUI#-X+Z}XeSh%>miWAutA2itZGN7* zk<4@KFsw>lIobcvU3U7MNc1`8dVzAO>C7g*ppDn(pXVF?9e<;9qql2l zR!Evrs4;xZdG^^0+8t`hc^34d*0aTDluy?qd}4VoE%6x%Q|aT5=h%c7wSMZ62iZ$6 zQfK!19MPT)?#ilP)QYDn@-!Y1D##N3+dyM)`vT>V=rl0 z>i+Lp_YGRBm__uCKAlDHw(wOd`2j}r3_U`oq+_Eoyn?>`OjBsl z7kd_**szbl$K`e4`r6ETIi^{3G^k7 z8&km9D%y%NBI|n4U2l{@(>2k&fw`Av71~NDJ~jVnV_ghIQ}I*Zt)goRW5&3;9D4Lr zXj{;h{m#o9-j+pgp;286Dv#dlXv;FUP_4d8pxG;^Ruu_s=N9s!iOf!Kp~j_e4Qt#& zz0QCH)@G~LN{von!?$WK^&gs{Y%BSF-iDQI)$UQBY{TldY8^vHwh{FVs;i>GbiS=$ z84fHtvi$5E?~EwF1GK>NJID5H)12*g zb8l)1Xw|88r?c;4+Umzi-+;aY-SQ=~yryYkl-!ukZwAlDn9i?i8SD6(79V^EWp$}3 zKIQt)3D)lgHI&VNO^XRJTrX1LfAN!y=0iNow!Ws#QXl(CTQ*7CyzZ2;r)j2J`+t7{aR^iIKDgV)Cs4a8oR#Fuge<4hl}*QucIz^Q5=1> z#9Hg3Q?2OE{psxf?V79aFXIRcoAN%|p30j6nu{-zA6ohR7@{fFimW;5HgT3fX!ovnF;R(8V#R{n<8 zI(ab9tSG38_RGW7w0~~25zdJdXqdxi@@z#ex6b4_mHZlQcTQl^KXztKM~O&W{!LB zQ(DzRTYKr<;#c0oTcbv^qdTegzSbwukOP&F}73BLEv{S(PWlMyapt#E8_~>48)05rD!qDEWW73uW$x78R-<&LzpZsj{Ak>T zMmlwe7xk_jTDbIL+P|%op@jn*5>i(V`f*Spy+d0&d}Zd#wEK>;d2egu)c)hx@wc@Y zA97?rzpceK=PCLJ?;hUJXK?Vo&05A$=GvuoGU7+>(mFIN8q2Rfz8+S%`Vvo5v`d?= zlG7i%v}uOZ#CNoB)uxA8@@{RQdhif?Vz)NHh&a3(*<9VNB}5p-O`R>=|f|mIDB&AQj-6e`!RhCwcTMV zeMs{4i`}RVq)$SA#16izJ?-N^B9J9S>vyuX?`fgxJHy$w_q0|%#lr(xX|(QUjqlL~ z?AOECioI0I6T{fId$mM$%rF-4zScqgs*?UKoG$m?u4Es*uXR&1hq9~hYfD;vywB*H z1L*5$AJBZ>gDMLb^ZP`D=-yiMLG%r)@B>5G^ZT^2@RoP;!?*jqU=sf2c{<)(+|9;) zK*RAP!`X8m(6I7KkT66Oz3BcV6b;}zp_;>dQs$q z4^shEX+)@6GdeJ)^C#IA+z;1y)Y{pZimCTy@>EsW*r{WKFLR@P7WC_KHQ_ ze~Gjm+AIphx?8A zaUK3JG@V{vPoQ_a$2;d6obd7V;EDA5#%S9?ga4*G!Skx=y_Qba^JG{sgWSnQBxy+& zx@mlg!pB#J8R@FQ3eSIWwL+hrAk_^<4H;BM4{xjqz)=)bAQx&sF(cM z2%WZ$yH5Li5T&6Ti3jMGXNTo{`J3_14P4Jn{FWYe>~XFkpvM4voF&ErS)S(6zm1O{ zXBaN-iGS)%mVHrc8$uQ0_cmve((V7}Y^}=K>lZc6QqB%u)MCf*=o1t9{5Y3M>HWt9 zdW`kiOSbEj4?REg`RI7RiV!}|C<>1u-;0T~eEg=(huhwTEn4_pdefWy6W!}g+Cgzs zs4?RHE)lnh+g_tb47b>x<+fgi9~~w~e#BwY`?9vz@&>&Lr{!7RW()tLJx^cB3IAE^ zN+0wY@-yAEKFS^v((f0|$+rGX4oAGS{JDj`Kos_?mSwTjvc*^ELgafR%S3PE6?(*O z`Hsc?u4SsP*LVwm*DMzGL44{B5#C%s$$&|bHwtyXwP{iV@N!Y?oLe%+uw@2h_F zsdwJLbSGEc@r1YPy4KC2X6Lc%janZyC2w6HJy8wITQ@_$pvEm`BQ5%~>b=LT zXx!sQOG%#v$Xw)YuIkM#>f8Vp=cAXaRsQTNAN_fC?=d#lSI-!5vI#XX`F~%ZA9C1w zl$QD6j%M(Gj84b!{J;O5A9mRK_6_s=g>*qsbE!rC-~Y^~iRA~zB^l`UdrL0eUBO;>T=ffIeD{IK=z|^}20qM<*0tQY(zckSuHZQunHSlfpylC(l{+na=+d&WZaLknIb?m5 zj22vK^UL_U6(#)6K=^2$o-T=Lh&HWRJG*q=ASmc z4Isv;lldK{h;Po~~UH$;?qpQZX#_A6X^*j4S#cj)~sKF?nX5OWuI-|hWg(|cIdF;kfqsV@vU zLLHqk4oR+G)PrV^-*cI5iPU3)O30pHnX=OQbbSD;j?{H^?qzm4QjfF^nnG)qI`uOe zpbix#HGT@~9HqxL3#3HzW{3;O>z7zY6s@@LG`2HJpVBP#7m7R3*}`bOmHNR&_Hwk&I`~a8nvD=T|0f$ag$hs9 z?ex$`m8E~HPD}9Ul!8!JFoZh`<(uE)BBdmvp6#h&D@6`SO`rS>}iS*rV z8iLbz0E|)cpKmi@OOPPm!Y%+_3@p@vklM>`~Bcfs(6hI+EaF0IeTX_}9P8Xh4{cg? z?gu*1*Z#x@`S-Tb*Qkrmv$JjVB$d8L9F?HcMEyhOf^Yem;k&5v<8+GStw!NKRruv^|W83Q;)L%!iW$pER&!TMs{QlvQx%@O7=AzrObA`n# zED2=E5|%B(;wH-^VR=?qlE^YzSe_7;6tWBzmN~+bN|qF1xnEea$Z}6FVHze(*<>0h zEO!V?E?MBy#;_FT@eVxM)?pjl-$4&;;S%ouKEmr?SS%t#x3Nnd^thq-(?@)1jY@>vwTv(|2vJDZI4Z@O67LTy37M2XM%rEnf@2J!K^)7*U1otF8f-6bZ+l1f!DIGWFXK!qOiXP^zOV-!< zs81hbp1#!W&=a_wef6i*<40Nl6up;CK1s|wG2f-I7nAjj{c7PH8KW1eHEyo+cj2itG?NZeK%Hb zt*+?AnvBz@t1+F}oN?4PH+1x_AE#%jYL9ulC+I)<*skrMbA~!Iy7TdMOZM0O`ZBe4 z8(T6-pWp1EH>e>TH-w%Z7lq%yjaeq^+toMA*qf8}K{2^e#(DG_-SwrxWMK_WwcmCx zKf-uZH>`|>X6TcX*Kenuh(5S6X6(3rqx+5RH;%>(DbzE)Hj~Qa&v*I1?iB8dE2V>y z%6ORE=}|acgY9yA-^kF*E$Rn3Z1NO6a=`0;{6B97QUVtr!%|OOO}Fo;J6@T?tKZN_ z-S!Hx30)3ZFV6Ayeo&`}nyWXmC$sci`r_l?S$c)%iKzi} z$(p)aW8_L?wB>TQlZ^leL#G;01-ke$bi&jtnCe%^VuN!nE)G*SYPpl&T z4D=`Hb!e8Kh|hyQ1Ko%Co!}~Hf9NTp9;FV3KcRl8fCIV{8NCSI0Ke7X9^fcw2s9lk zS0w35OJngK=nO+Win1Jr4bV8~^1Dyn&3C)E*#g)oe zHo#B;JqkSyt%Lp!_4`8<6ar0vra;r6)1kT0RnSss1t~9Ise<7Qv;i9Qrzl8=wuUA_ zheOk$SO~p|?5VmqV{h{g58PFW) zQ_wJM(d&U?%U%}hQO>|n1+9SYfR;j^fi8#6hK_^|gu0cX1EVc#my%fE>&_XYF-v>dvb>sUJd*2C~5bS^XlnudKp65Is^ z_Lm1KbQ-i*LrZq-G2Q7YMGIB{&4Q*uyFjC$LC}VJQFGol@So~0HeEfM}Ju^PGoS`Mv()<7>n|AeaOX2YN^Xm4m5bUHK|6o1rDprO<3>Gpw-+y@C~}^L zAF(2F(1FmgP|pl3EP)n7C!pqopvFl0j~ zKnFv+K;xi6&?~5D4fGInC$tnAg~v|>Kb~6K`BZ` z>UpelLrhrM>Rqsm6KSi)IP#1%URNI7lk#LN7Irl_G`!TRgk(#$hZ~#+_Ho!-@c3e| zuOlLYbE#xk4};5Za8H9P!Q;nv?h@;3kF5p|89!z$@u=8Z=`d!z;ZP4AGk)xNoWpK zE&4_ui<@=brqB1S-LALFwYa@g z<0AL?H<|UoL$j$oZ)Ata`9978bLP*S=9)bx$2I+-+0$IpavywXTIQ7b4|be3bEd+I z+>w#%yF_ZN*d5v8!JEDhX6Cqt3{1ak$UyGvdT4e|=G^HIOwFWx>GwbUhRmKmXT z`I)!+4(vLxbC5#CR_MLucyUt7(a-y>49csKWq+-qUQcSI(5Yww6Gx3Ju9 zktwXcYh;SII61P0W;F8gRr%qs`1%N?Mb0#BhT`wdyeqOP?WZA;Za+`?VpW_l(3B;D zOQCL$;0$Os{PO+}Ery+T^#k)Bn?3cRIq}n|&>O$fyCRM9a1gdrHp3u~!ZNTt3b%vl zD4dZN8DVKjJKV^jK2>NL*giyX!VvGq5s^E_>+WQ6;HUKxnhh=P<(=_*SvO=SB=4L+Nedn#n?csM!@imTuN@y)KZK|-RnACoQz0V(xToS@ury@HB zPkU%?=G2^r=FGk`eqLK@!seffoD=E2{72+Km0mfepSMFpwQUolG*^Jo@<5@L z&}wLTQ`n)^(6k_7uZ3pY1iPCFRiLF%cd)SAKRCU`o%y+UvKn(s-LQ*vS`(4Z9q%0)9yQ70NrPjIWll4mVHP+Z zoCj_LE(Lc6SAe^MYrq4*4dA=L_ST{z7S$+ks^W$rR2Y;S6#~l&S$sqVZ}@|yf0&6a zzS5tqY7wNB*9Z}IC87QxFSdyKua7JtI1V>aei<;ZoJ41^)q-bKpwwPp0^PP232U`6*3B{;^voP6JO7>`}5{mtG~Be)E_30wu<46Xxj;Y{T#{)wW-Tj7uZeifVwE(6O9 zw}G>e;cMUm@ay0*@OJ5s{N5m*&NopV9CpA#R_INztWY^vR_HBo71F;AmdDyV;DSW< zlZ%eEaumGJl+Op?EaX!Omi5{Xmi77&EbH|VxB%%7fU{8ELBSqHR^SjE%8=kNxC&ea zu0{q&!1dsxV0$~U=Z=~9W3U_XpBPO0Iu(Xb;gA9T5}XSjOpPDkGsTjr@w=5z!M_ag zUxBN@C&BgLsfsPw#g?^4>n66Oh%M-rTNIquo;@EI)kn>3?>!Y4 zwIspg8i*!|HutT+1lZ~E{B1us?DX$C#_v#^KAJBi!EO^~Nq*sI~EY!_T*r~KF>!LebU6~dB4+42&r_X-Ybdb31caQP}>f03NH zpZ#mWQ7DnuivO|;guNU5Y7YyJGx?2~J#T(?_MEw1cYXBdzI5H}^GEc{k))gKF;BN8 z?b<75q}t5g!QJ7(q@F#y-f_p2E>pbE_KxxM@$`%_Hc|rA4J~dfu9}j-i@+)1;U;?; zI31b+&4Ok_bD?=qwVrgm!r%!Af|<-qc?s)46}HT4~#hw>#_G0)f0nd>Ndgh z7)&v7I#?dNxu*DHQ+&B8z6y-vgC3;9ASP;Eg2j1L7yu<{s+(N0Q_zbWtAlDRMY>F?FjPjLAX)xAL zQEE&X)SK9Ukf@+MW*lHy!6Z|BDp*!91MHETI2Q)V#ik5OO&L^};;T&YwP1c9lmF_$ zvV!)(#tL|hJ7e6zB@BwJKoXcY-~5*XmTR15;tW&zT(GP_fhoS!VA}pN!*V#t0xL{h z36}oVCawj`0_#nz+$DCIjJI><`(GO3&=Shd$%O>6LOG`R?Iunz`Tt{zcbnq7QN!lp zg~23rr59(e%m+7MtQTh^QWl_6qV z$tKDHmi`GQP6CUaNheY&46+5uFeS(~#TVR`0o@P)%LV)ZxTMfvm=tZ5U2WdRAM_!O|* z$El|H3{(1SQ+$Dpm*tn39LmA6fC{i&gKC)p-yig=HN`iW(kpk16_n{6V9$*;G&!Vz zWd%~f(m&ngpKXfIGjTCk?xHfm9zJ)q@vAgB)R?#)EGwYgV_G8x?Q$Yq9QCWlH> zhBc=6dQ-gr2vK2KfD0`1Pcm`Z2z2Cf4Khp_Ib(>Ti%@5wV|P;7E2Gi6W?ZjRG7ZIq~>48StOB&?y_CF%DGf4RwPOz|aH0lCksP$45dKmXHF0l5!zk)bT0 z*u-UEnPD}U{^8X4*(Zt$$@B?e+3=);`7t(#rzkKvRDf@+5m*+e+%F1{8K$rivtwdd z+UyuRtImz7i%UD?XAIDd>d+t8ykLV%q4lKf*Pz&L%)XF5*7^U%osVRTb3``o`9iay z^X>t4W>QdNU3q^b-DPQ3@HREyb z^NV7>@*A4+f{03kWuGczBU zmpN+WxZ!iAK0Jzfmc`sLG;foLlpCuQT)SD=>!HdP!P(GKXgyTf>Q$G=v~ChupDzw! zWvRDIQOpk2V?QTSDnAO%yC~Fs8Fm~?_2&hr)CsNqNodA@ZucwwSujmDZ5&$mKZI8Q zb-Q0)y}=%ZK9^`XX8#F?tG7F*TodfRF0@p!8~$lNLQy}(^^b_pXheEd#OL|m?pLb` zu5@zkMmN7*!cg4mc1L%lU{{P#drP79aV%s_%xwBhX)Cw4bWKdDORYS{`tOYCsOHgs z>~k$X#x`=L|EB+()W7^#h*4+O`5sp|E8QI#%9C_?n_S9Iu_@4JxYnL#A40D{TkeYK zXsta>S+F&aM~3qB4xau=vh(yiq1->f@S|V zoYb0EbzAOUn{!2~q1)O>L zGK1A7hhnhYB`=!dM=ukvZps2mP4Syete95d^jhcb_u9&kKxVidEXNM*O&OG%{CAnS z0xVZ>uPMIL>GBu{opgvZ6>z|mK@HWIS58*2%9P=86IYwke_`UBH!wt(6{s;eoHlW- ziO-w34lK9WWfRw%{D1eD3=Jk$qQzMu&jP!NU0`{TCV=HJlLQXKL7rxc_hi5zN5HvY z`cGivR|0l|D@^eQ1g*G4 zfpQo4g5`MA4i^4&{<&a~H5>?*4N)3c?t%=k9KvUVu|`TUSZ={`a6DF^1{}xPXn$fw zjio~ZxE&ItgJl7^U>D*`!7ag6-~@03I1!xCQj|ykA}z{Kg+aE>>0o);l?|3nsc1Tp z8%dtYzXZ$+;J*s6JjSZQw1tfISL$J)|HC$Z<^s$uow=bhpXcUw!Q4>YJPUB1*jss@ ziFXZd5>nerY#Udc(2O|mPwicuEX}R4M$5B#faos6hO)$tu9*Kedna^sZ5W-HG_lZs*>w2+n}sxOl)tM9xMLUnA8|bRxe)WxgrM_rMFt|3yRNm8h-4kPa>J!9Nh7 zfG-*~;Rzh7K5uXi} z`>-5b4|V6k4_XOzJpntkQfPvbfrFt25%o~zNs%B`DD!l1weX%aLiJzyxE*2iIx1$+TM4LuL7hbk+?mhp!=pmERys2iFBO^5QciT|=V^JXO* z5xLMjXaTesS^_PFmP0F{)zCVqQXnd7hbBPX&?Hjh&Swe?sn9fNIy3{C1O76Gy$3d9Sxlb&4T7Z%b=Ajz53IxLq49gRU$*F zqrp)2 zupAj=gXMrf7c9@$0VE5Y&=xhk+6 zX;g#dP^ShgZ-3T;MZZnwKphOS6Ac2UcpuF)#q^4;~1%g9n2h;Jd&s z@DQ>7bPT{S6b^3iFmMw19&ifyUT`Wn4V(rxZf}q+9Zb`r8NUp$X95gaFl2(Wr2{zb zFL9s6f`%X$@hZ3g>;oFkMUQI{+_Si~(H4dRI3$8g!0o_g;P&7Oa0hTTxD&V*+yz_@=I=clzjGe3 z#@%7CpA*~z>;m@$yTM7|6!0D3G;l9)1~?g<4ekTZ^T5y-hGK9ExD?zETn-)pt^^MR z*MJ9s>%fD-4dA=L9{=-VjfcSC01pKxfQNyTz{A0*;CsO7;CsPY;52Y9c%)#DQUJqP zIFx|Lfy=-Xz!l(3a25Dra1D4SxDNaTxB+Z2MkF43{rm^91$;3?kt3xhUys)4`$OEN~cSDqqQkAp#BsU>#fnc7n^n?ZK7cWN;0*54a9I0Nen6n3$KZ z*e{4JV8Iy61@;BI!A-y^-~ezMI1rox4gzO`b#NXyISBo42@DUzp$u%npsfPz3$6k; z0oQ;7z;)n2a0569?Ej-!Vcl-5KQ+NHB*P&AY{8%}3G53_1vdewg9E@>;6QLLI0#$- z);%zkz>o|s2U{?TtON&utHFWbT5u4!9;}1u+d{_GPBPd5_E<2=On@N(oCFR8r-F5G zIyf1e4Ys)W5v3@3-~g9_N-;PPTq@Y3B*RcHGl&xjDrE-XYMBAJ7Mu*Om+2EkdgY>6 z;{dQ790+z9O#9!`UL-oCO8f3 zyGU>bSO;hS%md;pvWK5a1V)M6Oq1wtwKI1-eD zKLA&Pt7JSbIOHW%HR4}Dd>!~1H!9IC*tgXI-YKX47=3&HYEMH6rx;^ie;8CJj_@ePRIgicNI|66SG zkKy0|ZwDuUkARcF&wx|G?}F382fW;Bu^C z0JsYApMh(@--7GFp08nOfZ-_E{~xhM-T^zn`@sp|FThFQ&EQn<8{l;Cci=3+9_3jW za^X-5E&#s=E&+c6E(3oLt^j`nt^%I{*MLug>kOvte+UM7t3=*fX+Q#bnJw>Z$Xg@+ z|B5X%6X{EEUdvl84#a06UfvxG1Sjx#zW;~AAa8wi1ScVbd0=@vttmJa@oT~9;4R=R z@D6Y;_-=3kv2jtk8-@}%>;aWbgo3-l1#;PC`6-T}9rp3`Tq^;@5%G!6U$Ro-?8Xb{MkYFcK_pk97d&B7QDd z-u>zfE!yxZA^#zw9!AfuicobOPZtDWBLi}UkVrU>4W`&IileYj=VZ5Wn1DI#lKTxnwvb z!C@)5?mJO{8=Q*xm%!=ZN5NU(`QTje7_hua9m1KPDg|&@4~G))XmA;rftBw>g+jp< zh%W*=u+MMYaz*?S#QP(C7%?wjseyyM18IjtI1hHD|L;bD8XQXCaG%To z@h!n+h@S?o0Ph1=fjm^12_ZxIJguUwgKlN{vmJycn-J(>;otrBC%6v$8n^*G80_!k{m>HoW}wGUY^mD&#j6x{HO|;_97+3P8BP*AKA)Zikz`D67#vFW}E zAGQ*+V+LhCF6xm>%IC`rXW0+B?EID3$-bAVuErdiQQ7dygBC#De^NeA*kWh$R6$Ks zkGE3Ftg%X-HFiy`#>$(;T9XLnulkl{ZsYFqN1v!__eaZA=!w=DCVxWD|} znkCOe{v5QR=BatUO=6XSzO;h0b27+Q-p5DzkirQHwG_@#_>scz6zqL{6c>eMeSJJi z%A>wYDuwDz!Ahsi!OBhwe^5BLC0Ma-4OZeQJT%s!yhtHooI^R2?oeXJJCwE*x>0zC zLca+PCHp>yQZS3+Da1YMP?l2on!?;%hq8}Cz+(=jD&L_rQm9$spqW4&%0DYS4n-|+ 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 Z`MCvpnJExO?fV3ofS7svK0y`-P5>r%EcpNc delta 134 zcmeyjRp8%Nfrb{wElfqcobS&y-ezNDVBna3R)EQD`bJ)+BF1ymr39EXru*r0ZLB?N=r{q6JUyC;hd{C_I-j(K+L>-pCF3^Cjjv;E0X{K diff --git a/vendor/sdl3/gamecontrollerdb.txt b/vendor/sdl3/gamecontrollerdb.txt index c57935b14..56e8c75b7 100644 --- a/vendor/sdl3/gamecontrollerdb.txt +++ b/vendor/sdl3/gamecontrollerdb.txt @@ -20,7 +20,7 @@ 03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, 03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, 03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -05000000c82d00006a28000000000000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Windows, +03000000c82d00006a28000000000000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Windows, 03000000c82d00001251000000000000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, 03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, 03000000c82d00000150000000000000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, @@ -154,6 +154,7 @@ 03000000120c0000f10e000000000000,Brook PS2 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, 03000000120c0000310c000000000000,Brook Super Converter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, 03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows, +030000005a1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, 030000005b1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, 030000005b1c00002500000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, 030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, @@ -182,6 +183,9 @@ 030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows, 03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, 03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000095090000010000000000000000,Elecom JC-U609,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +0300004112000000e500000000000000,Elecom JC-U909Z,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +03000041120000001050000000000000,Elecom JC-U911,a:b1,b:b2,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b0,x:b4,y:b5,platform:Windows, 030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, 03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, 030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, @@ -193,6 +197,7 @@ 030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows, 03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, 03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000062000001801000000000000,EMS TrioLinker Plus II,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Windows, 03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, 03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, 030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, @@ -332,6 +337,7 @@ 03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows, 03000000242e00006a48000000000000,Hyperkin RetroN Sq,a:b3,b:b7,back:b5,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b0,rightshoulder:b1,start:b4,x:b2,y:b6,platform:Windows, 03000000242f00000a20000000000000,Hyperkin Scout,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000242e00000a20000000000000,Hyperkin Scout Premium SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, 03000000242e00006a38000000000000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Windows, 03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows, 03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, @@ -387,7 +393,7 @@ 03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, 03000000380700005032000000000000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 03000000380700005082000000000000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, -03000000380700008031000000000000,Mad Catz FightStick Alpha PS3 ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008031000000000000,Mad Catz FightStick Alpha PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, 030000003807000038b7000000000000,Mad Catz Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, 03000000380700008433000000000000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 03000000380700008483000000000000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, @@ -414,7 +420,7 @@ 03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, 0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, 03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000242e0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, +03000000242f0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, 03000000242f0000f400000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, 03000000790000007918000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,righttrigger:b7,rightx:a3,righty:a2,start:b8,platform:Windows, 030000008f0e00001030000000000000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, @@ -446,7 +452,6 @@ 03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, 03000000091200004488000000000000,MUSIA PlayStation 2 Input Display,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:b11,rightx:a2,righty:a3,start:b5,x:b1,y:b3,platform:Windows, 03000000f70600000100000000000000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Windows, -030000006f0e00001311000000000000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Windows, 030000006b140000010c000000000000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, 030000006b1400001106000000000000,Nacon Revolution 3 PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, 0300000085320000170d000000000000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, @@ -464,8 +469,10 @@ 030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows, 03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows, 03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +030000007e0500006920000000000000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Windows, 030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, 030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows, +030000007e0500007320000000000000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Windows, 030000007e0500001920000000000000,NSO N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows, 030000007e0500001720000000000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Windows, 03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows, @@ -481,6 +488,7 @@ 030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, 03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +0300000009120000072f000000000000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:-a2,leftx:a0,lefty:a1,righttrigger:-a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, 03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows, 03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, 03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, @@ -576,8 +584,10 @@ 030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, 030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, 030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows, +030000009b2800003c00000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, 030000009b2800006100000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, 030000009b2800006300000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800006400000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, 030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows, 030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows, 030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, @@ -610,6 +620,7 @@ 03000000921200004547000000000000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b6,x:b3,y:b4,platform:Windows, 03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, 03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000632500007805000000000000,Retro Fighters Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, 0300000003040000c197000000000000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, 03000000bd12000013d0000000000000,Retrolink Sega Saturn Classic Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows, 03000000bd12000015d0000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, @@ -627,6 +638,7 @@ 030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000830500007030000000000000,Rockfire Space Ranger,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b9,righttrigger:b8,start:b2,x:b3,y:b4,platform:Windows, 03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, 03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, 03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, @@ -637,6 +649,7 @@ 030000000d0f0000ad00000000000000,RX Gamepad,a:b0,b:b4,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b6,start:b9,x:b2,y:b1,platform:Windows, 030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, 03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001311000000000000,Saffun Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Windows, 03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, 03000000a306000023f6000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, 03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, @@ -665,7 +678,7 @@ 03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, 03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows, 03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000d804000086e6000000000000,Sega Multi Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +03000000d804000086e6000000000000,Sega Multi Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a2,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, 0300000000050000289b000000000000,Sega Saturn Adapter,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, 0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows, 03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, @@ -682,6 +695,7 @@ 03000000317300000100000000000000,Sony DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, 03000000666600006706000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows, 03000000e30500009605000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000fe1400002a23000000000000,Sony PlayStation Adapter,a:b0,b:b1,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,x:b2,y:b3,platform:Windows, 030000004c050000da0c000000000000,Sony PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, 03000000632500002306000000000000,Sony PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, 03000000f0250000c183000000000000,Sony PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, @@ -756,8 +770,8 @@ 03000000ff1100004133000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, 03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, 03000000882800000305000000000000,V5 Game Pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,x:b2,y:b3,platform:Windows, -03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000790000001a18000000000000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000001b18000000000000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, 030000006f0e00000302000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, 030000006f0e00000702000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, 0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows, @@ -967,6 +981,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000380700008433000000010000,Mad Catz PS3 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, 03000000380700005082000000010000,Mad Catz PS4 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, 03000000380700008483000000010000,Mad Catz PS4 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +0300000049190000020400001b010000,Manba One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, 03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, 030000008f0e00001330000011010000,Mayflash Controller Adapter,a:b2,b:b4,back:b16,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b12,lefttrigger:b16,leftx:a0,lefty:a2,rightshoulder:b14,rightx:a6~,righty:a4,start:b18,x:b0,y:b6,platform:Mac OS X, 03000000790000004318000000010000,Mayflash GameCube Adapter,a:b4,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, @@ -987,18 +1002,21 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, 03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, 03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000853200008906000000010000,Nacon Revolution X Unlimited,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, 03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X, 03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X, 030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X, +030000007e0500006920000001010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Mac OS X, 030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, 030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, 030000007e0500000920000010020000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, 050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, +030000007e0500007320000001010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Mac OS X, 030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X, 030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X, 03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X, 030000004b120000014d000000010000,Nyko Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000790000001c18000000010000,PB Tails Choc,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +0300000009120000072f000000010000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a2,leftx:a0,lefty:a1,righttrigger:a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Mac OS X, 030000006f0e00000901000002010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, 030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X, 03000000d620000011a7000000020000,PowerA Core Plus Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, @@ -1032,6 +1050,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, 0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, 03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, 03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X, 03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X, 03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X, @@ -1070,6 +1089,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, 03000000e40a00000307000001000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, 03000000e40a00000207000001000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, +03000000790000001c18000000010000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, 03000000790000001c18000003100000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, 03000000591c00002400000021000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, 03000000591c00002600000021000000,THEGamepad,a:b2,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Mac OS X, @@ -1089,6 +1109,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X, 050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X, 030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4~,start:b8,x:b2,y:b3,platform:Mac OS X, 030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, 03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, 030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, @@ -1244,9 +1265,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 05000000bc2000000055000001000000,Betop AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, 030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000300e000011010000,Brook Audio Fighting Board PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000310e000011010000,Brook Audio Fighting Board PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000d81d00000b00000010010000,Buffalo BSGP1601,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Linux, 03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, 03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux, 030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux, @@ -1264,7 +1288,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000006f0e00008401000011010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 030000006f0e00008101000011010000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 030000006f0e00008001000011010000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03005036852100000201000010010000,Final Fantasy XIV Online Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000852100000201000010010000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 05000000b40400001224000001010000,Flydigi APEX 4,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b20,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 03000000b40400001224000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, @@ -1276,15 +1300,17 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000558500001b06000010010000,GameSir G4 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 05000000ac0500002d0200001b010000,GameSir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 03000000ac0500007a05000011010000,GameSir G5,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000373500009710000001020000,GameSir Kaleid Flux,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 03000000bc2000005656000011010000,GameSir T4w,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000ac0500001a06000011010000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, 03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux, 190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux, -190000004b4800000011000000010000,GO-Super Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b2,y:b3,platform:Linux, +190000004b4800000011000000010000,GO-Super Gamepad,a:b0,b:b1,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b3,y:b2,platform:Linux, 03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000d11800000094000011010000,Google Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, 05000000d11800000094000000010000,Google Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, @@ -1380,6 +1406,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000380700005032000011010000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000380700005082000011010000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000380700008031000011010000,Mad Catz FightStick Alpha PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008081000011010000,Mad Catz FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000380700008034000011010000,Mad Catz Fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000380700008084000011010000,Mad Catz Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 03000000380700008433000011010000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, @@ -1419,6 +1447,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000005e040000d102000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000dd02000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000ea02000008040000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea0200000f050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 060000005e040000120b000009050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000e302000003020000,Microsoft Xbox One Elite,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000000b000007040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b12,paddle2:b14,paddle3:b13,paddle4:b15,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, @@ -1426,7 +1455,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 050000005e040000050b000003090000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e0400008e02000030110000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000120b00000b050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -060000005e040000120b000001050000,Microsoft Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000016050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000017050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b000001050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, 03000000790000001c18000010010000,Mobapad Chitu HD,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, @@ -1441,10 +1472,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, 030000005e0400008e02000010020000,MSI GC20 V2,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000f70600000100000000010000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Linux, -030000006f0e00001311000011010000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Linux, 030000006b1400000906000014010000,Nacon Asymmetric Wireless PS4 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 03000000853200000706000012010000,Nacon GC-100,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +05000000853200000503000000010000,Nacon MG-X Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 0300000085320000170d000011010000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 0300000085320000190d000011010000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, @@ -1455,6 +1486,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, 030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux, 03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux, +030000007e0500006920000011010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Linux, 060000004e696e74656e646f20537700,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, 060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, 060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, @@ -1467,13 +1499,16 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux, 05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +050000005a1d00000218000003000000,Nokia GC 5000,a:b9,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux, -030000007e0500001920000011810000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux, +030000007e0500007320000011010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Linux, +030000007e0500001920000011810000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux, 050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux, -050000007e0500001920000001800000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux, -030000007e0500001720000011810000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +050000007e0500001920000001800000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux, +030000007e0500001e20000011810000,NSO Sega Genesis Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,misc1:b3,rightshoulder:b2,righttrigger:b4,start:b5,platform:Linux, +030000007e0500001720000011810000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, 050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux, -050000007e0500001720000001800000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +050000007e0500001720000001800000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, 03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, 03000000550900001472000011010000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, 05000000550900001472000001000000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, @@ -1489,7 +1524,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000006f0e0000b802000001010000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e0000b802000013020000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e0000d702000006640000,PDP Black Camo Wired Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b13,dpup:b14,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000d702000006640000,PDP Black Camo Wired Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b13,dpup:b14,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e00008501000011010000,PDP Fightpad Pro Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, @@ -1497,14 +1532,14 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000006f0e00000901000011010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, 030000006f0e00002f01000011010000,PDP Wired PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000ad1b000004f9000000010000,PDP Xbox 360 Versus Fighting,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000f102000000000000,PDP Xbox Atomic,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e0000a802000023020000,PDP Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 030000006f0e0000a702000023020000,PDP Xbox One Raven Black,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e0000d802000006640000,PDP Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e0000ef02000007640000,PDP Xbox Series Kinetic Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e0000f102000000000000,PDP Xbox Atomic,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux, 03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000000540000001010000,PowerA Advantage Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000540000001010000,PowerA Advantage Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000d620000011a7000011010000,PowerA Core Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000dd62000015a7000011010000,PowerA Fusion Nintendo Switch Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000d620000012a7000011010000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, @@ -1519,8 +1554,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000d62000000228000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000c62400001a54000001010000,PowerA Xbox One Mini Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000d62000000240000001010000,PowerA Xbox One Spectra Infinity,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000520000050010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000b20000001010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000d62000000f20000001010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000000b20000001010000,PowerA Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000250900000017000010010000,PS/SS/N64 Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b5,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2~,righty:a3,start:b8,platform:Linux, 03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, @@ -1577,7 +1613,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 0300132d9b2800006500000001010000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, 030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, 030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800006100000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, +030000009b2800006400000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux, 030000009b2800008000000020020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux, +030000009b2800008000000001010000,Raphnet Wii Classic Adapter V3,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux, 03000000f8270000bf0b000011010000,Razer Kishi,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, @@ -1611,6 +1650,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001311000011010000,Saffun Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Linux, 03000000a306000023f6000011010000,Saitek Cyborg PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, 03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux, 03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux, @@ -1711,6 +1751,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, 03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, 03000000790000001100000000010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux, +03000000790000001a18000011010000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000790000001b18000011010000,Venom PS4 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, 030000006f0e00000302000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 030000006f0e00000702000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, 05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, @@ -1738,6 +1780,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000dd02000003020000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, @@ -1752,6 +1795,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 030000005e040000120b000009050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000011050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000014050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000120b000015050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, @@ -1761,13 +1806,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 050000005e040000130b000011050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000017050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 060000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 060000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b000014050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000130b000017050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -060000005e040000120b00000d050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000130b000022050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000200b000013050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000200b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, 050000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, @@ -1789,7 +1833,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 33313433353539306634656436353432,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 38426974446f20446f67626f6e65204d,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, 34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android, -38426974446f204e4743204d6f646b69,8BitDo GameCube,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b18,paddle2:b17,rightshoulder:b15,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b1,y:b3,platform:Android, +38426974446f204e4743204d6f646b69,8BitDo GameCube,a:b0,b:b2,back:b4,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b18,paddle2:b17,rightshoulder:b15,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b1,y:b3,platform:Android, 38426974446f2038426974446f204c69,8BitDo Lite,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, 30643332373663313263316637356631,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, 38426974446f204c6974652032000000,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, @@ -1903,6 +1947,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, 38383665633039363066383334653465,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, 39363561613936303237333537383931,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39373064396565646338333134303131,Joy-Con (R),a:b1,b:b2,back:b5,leftstick:b8,leftx:a1~,lefty:a0,start:b6,x:b0,y:b3,platform:Android, 4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, 39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, 63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, @@ -1910,7 +1955,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 4c6f6769746563682047616d65706164,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -39653365373864633935383236363438,Logitech G Butt,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39653365373864633935383236363438,Logitech G Cloud,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 416d617a6f6e2047616d6520436f6e74,Luna Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, 4c756e612047616d6570616400000000,Luna Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, @@ -1936,6 +1981,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android, 050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android, +31316661666466633938376335383661,Nintendo Switch Pro Controller,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,start:b6,x:b3,y:b2,platform:Android, 34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android, 36326533353166323965623661303933,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, @@ -1999,6 +2045,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android, 526574726f696420506f636b65742043,Retroid Pocket,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, 582d426f7820436f6e74726f6c6c6572,Retroid Pocket,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64633735616665613536653363336132,Retroid Pocket,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b19,paddle2:b20,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, 38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,start:b6,platform:Android, 37393234373533633333323633646531,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android, @@ -2059,8 +2106,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android, 35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65316262316265373335666131623538,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, 050000005e040000000b000000783f80,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, 050000005e040000050b0000ffff3f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, @@ -2081,17 +2129,22 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, 05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, 05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +05000000ac05000004000000a8986d04,8BitDo Micro gamepad,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,lefttrigger:b12,rightshoulder:b13,righttrigger:b14,start:b3,x:b6,y:b5,platform:iOS, +05000000ac05000004000000fd216d04,8BitDo Pro 2,a:b3,b:b2,back:b6,dpdown:b9,dpleft:b10,dpright:b11,dpup:b12,guide:b4,leftshoulder:b13,leftstick:b14,lefttrigger:+a2,leftx:a0,lefty:a1~,paddle1:b1,paddle2:b0,rightshoulder:b16,rightstick:b17,righttrigger:+a5,rightx:a3,righty:a4~,start:b5,x:b8,y:b7,platform:iOS, +05000000ac05000004000000209f6d04,8Bitdo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS, +05000000ac050000040000003b8a6d04,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS, 050000008a35000003010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, 050000008a35000004010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, 4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS, 4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS, 050000007e050000062000000f060000,Nintendo Switch Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, 050000007e050000062000004f060000,Nintendo Switch Joy-Con (L),+leftx:h0.1,+lefty:h0.2,-leftx:h0.4,-lefty:h0.8,dpdown:b2,dpleft:b0,dpright:b3,dpup:b1,leftshoulder:b4,misc1:b6,rightshoulder:b5,platform:iOS, -050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, 050000007e0500000e200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, -050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+rightx:h0.4,+righty:h0.8,-rightx:h0.1,-righty:h0.2,a:b1,b:b0,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b3,y:b2,platform:iOS, +050000007e050000072000000f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, +050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, 050000007e05000009200000df870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, -050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b3,y:b2,platform:iOS, 050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, 050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, 050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, @@ -2103,9 +2156,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2, 05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, 05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, 05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, -050000005e040000050b0000df070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000050b0000ff070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000005e040000e0020000df070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000e0020000ff070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000050b0000df070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, 050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, \ No newline at end of file +050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, \ No newline at end of file diff --git a/vendor/sdl3/image/SDL3_image.dll b/vendor/sdl3/image/SDL3_image.dll index a45e4453015e7e49d9d3e5be3e4377f853df3f83..2ba20a7cf88e1cc556544a550346747391b27a7d 100644 GIT binary patch delta 59755 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 +C=6{9{X4n#`j#xFK5qT*Z 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 delta 59495 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
7HBk_iwrULXC07ic{1fl3lz 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 diff --git a/vendor/sdl3/image/include/SDL_image.h b/vendor/sdl3/image/include/SDL_image.h index 9775ee616..60d041fe6 100644 --- a/vendor/sdl3/image/include/SDL_image.h +++ b/vendor/sdl3/image/include/SDL_image.h @@ -45,7 +45,7 @@ extern "C" { */ #define SDL_IMAGE_MAJOR_VERSION 3 #define SDL_IMAGE_MINOR_VERSION 2 -#define SDL_IMAGE_MICRO_VERSION 0 +#define SDL_IMAGE_MICRO_VERSION 4 /** * This is the version number macro for the current SDL_image version. diff --git a/vendor/sdl3/image/sdl_image.odin b/vendor/sdl3/image/sdl_image.odin index 4712c7f3c..96c3901c8 100644 --- a/vendor/sdl3/image/sdl_image.odin +++ b/vendor/sdl3/image/sdl_image.odin @@ -11,7 +11,7 @@ when ODIN_OS == .Windows { MAJOR_VERSION :: 3 MINOR_VERSION :: 2 -PATCHLEVEL :: 0 +PATCHLEVEL :: 4 Animation :: struct { w, h: c.int, diff --git a/vendor/sdl3/include/SDL.h b/vendor/sdl3/include/SDL.h index 9d2168877..ed1b32483 100644 --- a/vendor/sdl3/include/SDL.h +++ b/vendor/sdl3/include/SDL.h @@ -20,7 +20,7 @@ */ /** - * Main include header for the SDL library, version 3.2.10 + * Main include header for the SDL library, version 3.2.16 * * It is almost always best to include just this one header instead of * picking out individual headers included here. There are exceptions to diff --git a/vendor/sdl3/include/SDL_events.h b/vendor/sdl3/include/SDL_events.h index 56a2194b3..d267f051f 100644 --- a/vendor/sdl3/include/SDL_events.h +++ b/vendor/sdl3/include/SDL_events.h @@ -492,6 +492,8 @@ typedef struct SDL_MouseWheelEvent SDL_MouseWheelDirection direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ float mouse_x; /**< X coordinate, relative to window */ float mouse_y; /**< Y coordinate, relative to window */ + Sint32 integer_x; /**< The amount scrolled horizontally, accumulated to whole scroll "ticks" (added in 3.2.12) */ + Sint32 integer_y; /**< The amount scrolled vertically, accumulated to whole scroll "ticks" (added in 3.2.12) */ } SDL_MouseWheelEvent; /** diff --git a/vendor/sdl3/include/SDL_gpu.h b/vendor/sdl3/include/SDL_gpu.h index 9f516d73f..b61661909 100644 --- a/vendor/sdl3/include/SDL_gpu.h +++ b/vendor/sdl3/include/SDL_gpu.h @@ -2467,9 +2467,9 @@ extern SDL_DECLSPEC SDL_GPUShader * SDLCALL SDL_CreateGPUShader( * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT`: (Direct3D 12 only) * if the texture usage is SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET, clear * the texture to a depth of this value. Defaults to zero. - * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_UINT8`: (Direct3D 12 + * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER`: (Direct3D 12 * only) if the texture usage is SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET, - * clear the texture to a stencil of this value. Defaults to zero. + * clear the texture to a stencil of this Uint8 value. Defaults to zero. * - `SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING`: a name that can be displayed * in debugging tools. * @@ -2495,13 +2495,13 @@ extern SDL_DECLSPEC SDL_GPUTexture * SDLCALL SDL_CreateGPUTexture( SDL_GPUDevice *device, const SDL_GPUTextureCreateInfo *createinfo); -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT "SDL.gpu.texture.create.d3d12.clear.r" -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT "SDL.gpu.texture.create.d3d12.clear.g" -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT "SDL.gpu.texture.create.d3d12.clear.b" -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT "SDL.gpu.texture.create.d3d12.clear.a" -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT "SDL.gpu.texture.create.d3d12.clear.depth" -#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_UINT8 "SDL.gpu.texture.create.d3d12.clear.stencil" -#define SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING "SDL.gpu.texture.create.name" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT "SDL.gpu.texture.create.d3d12.clear.r" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT "SDL.gpu.texture.create.d3d12.clear.g" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT "SDL.gpu.texture.create.d3d12.clear.b" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT "SDL.gpu.texture.create.d3d12.clear.a" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT "SDL.gpu.texture.create.d3d12.clear.depth" +#define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER "SDL.gpu.texture.create.d3d12.clear.stencil" +#define SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING "SDL.gpu.texture.create.name" /** * Creates a buffer object to be used in graphics or compute workflows. @@ -3775,7 +3775,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_ReleaseWindowFromGPUDevice( * supported via SDL_WindowSupportsGPUPresentMode / * SDL_WindowSupportsGPUSwapchainComposition prior to calling this function. * - * SDL_GPU_PRESENTMODE_VSYNC and SDL_GPU_SWAPCHAINCOMPOSITION_SDR are always + * SDL_GPU_PRESENTMODE_VSYNC with SDL_GPU_SWAPCHAINCOMPOSITION_SDR are always * supported. * * \param device a GPU context. diff --git a/vendor/sdl3/include/SDL_hints.h b/vendor/sdl3/include/SDL_hints.h index 9c8ad3f82..a08153571 100644 --- a/vendor/sdl3/include/SDL_hints.h +++ b/vendor/sdl3/include/SDL_hints.h @@ -1074,8 +1074,8 @@ extern "C" { * * By default, SDL will try all available GPU backends in a reasonable order * until it finds one that can work, but this hint allows the app or user to - * force a specific target, such as "direct3d11" if, say, your hardware - * supports D3D12 but want to try using D3D11 instead. + * force a specific target, such as "direct3d12" if, say, your hardware + * supports Vulkan but you want to try using D3D12 instead. * * This hint should be set before any GPU functions are called. * @@ -2026,8 +2026,8 @@ extern "C" { * * The variable can be set to the following values: * - * - "0": RAWINPUT drivers are not used. - * - "1": RAWINPUT drivers are used. (default) + * - "0": RAWINPUT drivers are not used. (default) + * - "1": RAWINPUT drivers are used. * * This hint should be set before SDL is initialized. * diff --git a/vendor/sdl3/include/SDL_init.h b/vendor/sdl3/include/SDL_init.h index adf0de8a2..27ebe4b0e 100644 --- a/vendor/sdl3/include/SDL_init.h +++ b/vendor/sdl3/include/SDL_init.h @@ -79,7 +79,7 @@ typedef Uint32 SDL_InitFlags; #define SDL_INIT_AUDIO 0x00000010u /**< `SDL_INIT_AUDIO` implies `SDL_INIT_EVENTS` */ #define SDL_INIT_VIDEO 0x00000020u /**< `SDL_INIT_VIDEO` implies `SDL_INIT_EVENTS`, should be initialized on the main thread */ -#define SDL_INIT_JOYSTICK 0x00000200u /**< `SDL_INIT_JOYSTICK` implies `SDL_INIT_EVENTS`, should be initialized on the same thread as SDL_INIT_VIDEO on Windows if you don't set SDL_HINT_JOYSTICK_THREAD */ +#define SDL_INIT_JOYSTICK 0x00000200u /**< `SDL_INIT_JOYSTICK` implies `SDL_INIT_EVENTS` */ #define SDL_INIT_HAPTIC 0x00001000u #define SDL_INIT_GAMEPAD 0x00002000u /**< `SDL_INIT_GAMEPAD` implies `SDL_INIT_JOYSTICK` */ #define SDL_INIT_EVENTS 0x00004000u diff --git a/vendor/sdl3/include/SDL_pixels.h b/vendor/sdl3/include/SDL_pixels.h index 4127ac06c..39596c1c9 100644 --- a/vendor/sdl3/include/SDL_pixels.h +++ b/vendor/sdl3/include/SDL_pixels.h @@ -517,7 +517,7 @@ typedef enum SDL_PackedLayout * ABGR32, define a platform-independent encoding into bytes in the order * specified. For example, in RGB24 data, each pixel is encoded in 3 bytes * (red, green, blue) in that order, and in ABGR32 data, each pixel is - * encoded in 4 bytes alpha, blue, green, red) in that order. Use these + * encoded in 4 bytes (alpha, blue, green, red) in that order. Use these * names if the property of a format that is important to you is the order * of the bytes in memory or on disk. * - Names with a bit count per component, such as ARGB8888 and XRGB1555, are diff --git a/vendor/sdl3/include/SDL_render.h b/vendor/sdl3/include/SDL_render.h index 3352545d4..c9d184cc0 100644 --- a/vendor/sdl3/include/SDL_render.h +++ b/vendor/sdl3/include/SDL_render.h @@ -1607,8 +1607,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderViewport(SDL_Renderer *renderer, S * Return whether an explicit rectangle was set as the viewport. * * This is useful if you're saving and restoring the viewport and want to know - * whether you should restore a specific rectangle or NULL. Note that the - * viewport is always reset when changing rendering targets. + * whether you should restore a specific rectangle or NULL. * * Each render target has its own viewport. This function checks the viewport * for the current render target. diff --git a/vendor/sdl3/include/SDL_revision.h b/vendor/sdl3/include/SDL_revision.h index f99e03a95..9fb9937d9 100644 --- a/vendor/sdl3/include/SDL_revision.h +++ b/vendor/sdl3/include/SDL_revision.h @@ -48,9 +48,9 @@ */ #define SDL_REVISION "Some arbitrary string decided at SDL build time" #elif defined(SDL_VENDOR_INFO) -#define SDL_REVISION "release-3.2.10-0-g877399b2b (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "release-3.2.16-0-gc9a6709bd (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "release-3.2.10-0-g877399b2b" +#define SDL_REVISION "release-3.2.16-0-gc9a6709bd" #endif #endif /* SDL_revision_h_ */ diff --git a/vendor/sdl3/include/SDL_stdinc.h b/vendor/sdl3/include/SDL_stdinc.h index b2728da2f..7df253fec 100644 --- a/vendor/sdl3/include/SDL_stdinc.h +++ b/vendor/sdl3/include/SDL_stdinc.h @@ -4656,7 +4656,7 @@ extern SDL_DECLSPEC float SDLCALL SDL_atanf(float x); * * Domain: `-INF <= x <= INF`, `-INF <= y <= INF` * - * Range: `-Pi/2 <= y <= Pi/2` + * Range: `-Pi <= y <= Pi` * * This function operates on double-precision floating point values, use * SDL_atan2f for single-precision floats. @@ -4692,7 +4692,7 @@ extern SDL_DECLSPEC double SDLCALL SDL_atan2(double y, double x); * * Domain: `-INF <= x <= INF`, `-INF <= y <= INF` * - * Range: `-Pi/2 <= y <= Pi/2` + * Range: `-Pi <= y <= Pi` * * This function operates on single-precision floating point values, use * SDL_atan2 for double-precision floats. @@ -5974,8 +5974,12 @@ size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); #endif +#ifndef _WIN32 /* strdup is not ANSI but POSIX, and its prototype might be hidden... */ +/* not for windows: might conflict with string.h where strdup may have + * dllimport attribute: https://github.com/libsdl-org/SDL/issues/12948 */ char *strdup(const char *str); +#endif /* Starting LLVM 16, the analyser errors out if these functions do not have their prototype defined (clang-diagnostic-implicit-function-declaration) */ diff --git a/vendor/sdl3/include/SDL_surface.h b/vendor/sdl3/include/SDL_surface.h index 7bff7cfb2..15fce042f 100644 --- a/vendor/sdl3/include/SDL_surface.h +++ b/vendor/sdl3/include/SDL_surface.h @@ -1135,9 +1135,6 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FillSurfaceRects(SDL_Surface *dst, const SD * If either `srcrect` or `dstrect` are NULL, the entire surface (`src` or * `dst`) is copied while ensuring clipping to `dst->clip_rect`. * - * The final blit rectangles are saved in `srcrect` and `dstrect` after all - * clipping is performed. - * * The blit function should not be called on a locked surface. * * The blit semantics for surfaces with and without blending and colorkey are @@ -1282,10 +1279,11 @@ extern SDL_DECLSPEC bool SDLCALL SDL_BlitSurfaceUncheckedScaled(SDL_Surface *src * * \param src the SDL_Surface structure to be copied from. * \param srcrect the SDL_Rect structure representing the rectangle to be - * copied, may not be NULL. + * copied, or NULL to copy the entire surface. * \param dst the SDL_Surface structure that is the blit target. * \param dstrect the SDL_Rect structure representing the target rectangle in - * the destination surface, may not be NULL. + * the destination surface, or NULL to fill the entire + * destination surface. * \param scaleMode the SDL_ScaleMode to be used. * \returns true on success or false on failure; call SDL_GetError() for more * information. diff --git a/vendor/sdl3/include/SDL_version.h b/vendor/sdl3/include/SDL_version.h index a3b6ae82d..435b3f95f 100644 --- a/vendor/sdl3/include/SDL_version.h +++ b/vendor/sdl3/include/SDL_version.h @@ -62,7 +62,7 @@ extern "C" { * * \since This macro is available since SDL 3.2.0. */ -#define SDL_MICRO_VERSION 10 +#define SDL_MICRO_VERSION 16 /** * This macro turns the version numbers into a numeric value. diff --git a/vendor/sdl3/include/SDL_video.h b/vendor/sdl3/include/SDL_video.h index a7afc3267..877b9adde 100644 --- a/vendor/sdl3/include/SDL_video.h +++ b/vendor/sdl3/include/SDL_video.h @@ -426,10 +426,10 @@ typedef SDL_EGLint *(SDLCALL *SDL_EGLIntArrayCallback)(void *userdata, SDL_EGLDi */ typedef enum SDL_GLAttr { - SDL_GL_RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */ - SDL_GL_GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */ - SDL_GL_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */ - SDL_GL_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */ + SDL_GL_RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 8. */ + SDL_GL_GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 8. */ + SDL_GL_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 8. */ + SDL_GL_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 8. */ SDL_GL_BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */ SDL_GL_DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */ SDL_GL_DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */ @@ -1041,6 +1041,10 @@ extern SDL_DECLSPEC SDL_Window ** SDLCALL SDL_GetWindows(int *count); /** * Create a window with the specified dimensions and flags. * + * The window size is a request and may be different than expected based on + * the desktop layout and window manager policies. Your application should be + * prepared to handle a window of any size. + * * `flags` may be any of the following OR'd together: * * - `SDL_WINDOW_FULLSCREEN`: fullscreen window at desktop resolution @@ -1127,6 +1131,10 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, int /** * Create a child popup window of the specified parent window. * + * The window size is a request and may be different than expected based on + * the desktop layout and window manager policies. Your application should be + * prepared to handle a window of any size. + * * The flags parameter **must** contain at least one of the following: * * - `SDL_WINDOW_TOOLTIP`: The popup window is a tooltip and will not pass any @@ -1189,6 +1197,10 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren /** * Create a window with the specified properties. * + * The window size is a request and may be different than expected based on + * the desktop layout and window manager policies. Your application should be + * prepared to handle a window of any size. + * * These are the supported properties: * * - `SDL_PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN`: true if the window should diff --git a/vendor/sdl3/sdl3_events.odin b/vendor/sdl3/sdl3_events.odin index 2eb2a4505..3f64f85fa 100644 --- a/vendor/sdl3/sdl3_events.odin +++ b/vendor/sdl3/sdl3_events.odin @@ -295,6 +295,8 @@ MouseWheelEvent :: struct { direction: MouseWheelDirection, /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ mouse_x: f32, /**< X coordinate, relative to window */ mouse_y: f32, /**< Y coordinate, relative to window */ + integer_x: i32, /**< The amount scrolled horizontally, accumulated to whole scroll "ticks" (added in 3.2.12) */ + integer_y: i32, /**< The amount scrolled vertically, accumulated to whole scroll "ticks" (added in 3.2.12) */ } JoyAxisEvent :: struct { diff --git a/vendor/sdl3/sdl3_gpu.odin b/vendor/sdl3/sdl3_gpu.odin index f0017a525..def222739 100644 --- a/vendor/sdl3/sdl3_gpu.odin +++ b/vendor/sdl3/sdl3_gpu.odin @@ -765,30 +765,30 @@ GPUStorageTextureReadWriteBinding :: struct { } -PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN :: "SDL.gpu.device.create.debugmode" -PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN :: "SDL.gpu.device.create.preferlowpower" -PROP_GPU_DEVICE_CREATE_NAME_STRING :: "SDL.gpu.device.create.name" -PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN :: "SDL.gpu.device.create.shaders.private" -PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN :: "SDL.gpu.device.create.shaders.spirv" -PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN :: "SDL.gpu.device.create.shaders.dxbc" -PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN :: "SDL.gpu.device.create.shaders.dxil" -PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN :: "SDL.gpu.device.create.shaders.msl" -PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN :: "SDL.gpu.device.create.shaders.metallib" -PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING :: "SDL.gpu.device.create.d3d12.semantic" +PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN :: "SDL.gpu.device.create.debugmode" +PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN :: "SDL.gpu.device.create.preferlowpower" +PROP_GPU_DEVICE_CREATE_NAME_STRING :: "SDL.gpu.device.create.name" +PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN :: "SDL.gpu.device.create.shaders.private" +PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN :: "SDL.gpu.device.create.shaders.spirv" +PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN :: "SDL.gpu.device.create.shaders.dxbc" +PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN :: "SDL.gpu.device.create.shaders.dxil" +PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN :: "SDL.gpu.device.create.shaders.msl" +PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN :: "SDL.gpu.device.create.shaders.metallib" +PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING :: "SDL.gpu.device.create.d3d12.semantic" -PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.computepipeline.create.name" -PROP_GPU_GRAPHICSPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.graphicspipeline.create.name" -PROP_GPU_SAMPLER_CREATE_NAME_STRING :: "SDL.gpu.sampler.create.name" -PROP_GPU_SHADER_CREATE_NAME_STRING :: "SDL.gpu.shader.create.name" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.r" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.g" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.b" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.a" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.depth" -PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_UINT8 :: "SDL.gpu.texture.create.d3d12.clear.stencil" -PROP_GPU_TEXTURE_CREATE_NAME_STRING :: "SDL.gpu.texture.create.name" -PROP_GPU_BUFFER_CREATE_NAME_STRING :: "SDL.gpu.buffer.create.name" -PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING :: "SDL.gpu.transferbuffer.create.name" +PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.computepipeline.create.name" +PROP_GPU_GRAPHICSPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.graphicspipeline.create.name" +PROP_GPU_SAMPLER_CREATE_NAME_STRING :: "SDL.gpu.sampler.create.name" +PROP_GPU_SHADER_CREATE_NAME_STRING :: "SDL.gpu.shader.create.name" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.r" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.g" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.b" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.a" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT :: "SDL.gpu.texture.create.d3d12.clear.depth" +PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER :: "SDL.gpu.texture.create.d3d12.clear.stencil" +PROP_GPU_TEXTURE_CREATE_NAME_STRING :: "SDL.gpu.texture.create.name" +PROP_GPU_BUFFER_CREATE_NAME_STRING :: "SDL.gpu.buffer.create.name" +PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING :: "SDL.gpu.transferbuffer.create.name" @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { diff --git a/vendor/sdl3/sdl3_init.odin b/vendor/sdl3/sdl3_init.odin index 0d10ad357..97daebf03 100644 --- a/vendor/sdl3/sdl3_init.odin +++ b/vendor/sdl3/sdl3_init.odin @@ -6,7 +6,7 @@ InitFlags :: distinct bit_set[InitFlag; Uint32] InitFlag :: enum Uint32 { AUDIO = 4, /**< `SDL_INIT_AUDIO` implies `SDL_INIT_EVENTS` */ VIDEO = 5, /**< `SDL_INIT_VIDEO` implies `SDL_INIT_EVENTS`, should be initialized on the main thread */ - JOYSTICK = 9, /**< `SDL_INIT_JOYSTICK` implies `SDL_INIT_EVENTS`, should be initialized on the same thread as SDL_INIT_VIDEO on Windows if you don't set SDL_HINT_JOYSTICK_THREAD */ + JOYSTICK = 9, /**< `SDL_INIT_JOYSTICK` implies `SDL_INIT_EVENTS` */ HAPTIC = 12, GAMEPAD = 13, /**< `SDL_INIT_GAMEPAD` implies `SDL_INIT_JOYSTICK` */ EVENTS = 14, diff --git a/vendor/sdl3/sdl3_version.odin b/vendor/sdl3/sdl3_version.odin index 9143a977b..fbc90e220 100644 --- a/vendor/sdl3/sdl3_version.odin +++ b/vendor/sdl3/sdl3_version.odin @@ -4,7 +4,7 @@ import "core:c" MAJOR_VERSION :: 3 MINOR_VERSION :: 2 -MICRO_VERSION :: 10 +MICRO_VERSION :: 16 @(require_results) VERSIONNUM :: #force_inline proc "c" (major, minor, patch: c.int) -> c.int { return (major * 1000000) + (minor * 1000) + patch } @(require_results) VERSIONNUM_MAJOR :: #force_inline proc "c" (version: c.int) -> c.int { return version / 1000000 } diff --git a/vendor/sdl3/sdl3_video.odin b/vendor/sdl3/sdl3_video.odin index 3dd045214..6761bee56 100644 --- a/vendor/sdl3/sdl3_video.odin +++ b/vendor/sdl3/sdl3_video.odin @@ -145,10 +145,10 @@ EGLAttribArrayCallback :: #type proc "c" (userdata: rawptr) -> ^EGLint EGLIntArrayCallback :: #type proc "c" (userdata: rawptr, display: EGLDisplay, config: EGLConfig) -> [^]EGLint GLAttr :: enum c.int { - RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */ - GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */ - BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */ - ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */ + RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 8. */ + GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 8. */ + BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 8. */ + ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 8. */ BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */ DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */ DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */ From 365d9b0a631d2e21ff8bb3c7a3124c48bf701720 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 07:48:05 +0100 Subject: [PATCH 08/29] Add kb_text_shape.h --- vendor/kb_text_shape/src/kb_text_shape.h | 22330 +++++++++++++++++++++ 1 file changed, 22330 insertions(+) create mode 100644 vendor/kb_text_shape/src/kb_text_shape.h diff --git a/vendor/kb_text_shape/src/kb_text_shape.h b/vendor/kb_text_shape/src/kb_text_shape.h new file mode 100644 index 000000000..cee82f6da --- /dev/null +++ b/vendor/kb_text_shape/src/kb_text_shape.h @@ -0,0 +1,22330 @@ +/* kb_text_shape - v1.0 - text segmentation and shaping + by Jimmy Lefevre + + SECURITY + This library provides NO SECURITY GUARANTEE whatsoever. + DO NOT use it on untrusted font files. + + FEATURE OVERVIEW + This library provides: + - Unicode segmentation + LTR/RTL breaking + Script breaking + Line breaking + Word breaking + Grapheme breaking + - OpenType text shaping + Open and parse TTF and OTF fonts + Extract glyph information + Apply OpenType features such as ligatures and contextual typographic rules + All OpenType shapers are supported, which means most languages in the world are supported + (see LANGUAGE_SUPPORT for known non-supported cases) + + COMPILING & LINKING + This library uses declare-anywhere, so it will not compile as C89/VC6 C. + In one C/C++ file that #includes this file, do this: + #define KB_TEXT_SHAPE_IMPLEMENTATION + before the #include. That will create the implementation in that file. + If you also do this: + #define KB_TEXT_SHAPE_STATIC + then all functions will be declared as static. + If you do this: + #define KB_TEXT_SHAPE_NO_CRT + then we do not use the C runtime library. These functions are compiled out: + kbts_CreateShapeState() + kbts_FreeShapeState() + kbts_FontFromFile() + kbts_FreeFont() + + API + Segmentation + kbts_BeginBreak() + kbts_BreakAddCodepoint() -- Feed a codepoint to the breaker, call kbts_Break() after this + kbts_BreakFlush() + kbts_Break() -- Call repeatedly to get breaks + kbts_BreakStateIsValid() + Easy font loading + kbts_FontFromFile() -- Open a font, byteswap it in place, and allocate auxiliary structures + kbts_FreeFont() + kbts_FontIsValid() + Shaping + kbts_CreateShapeState() + kbts_FreeShapeState() + kbts_ShapeConfig() -- Bake a font/script-specific shaping configuration + kbts_CodepointToGlyph() + kbts_InferScript() + kbts_Shape() -- Returns 1 if more memory is needed, you should probably call this in a while() + kbts_ResetShapeState() + Layout + kbts_Cursor() + kbts_PositionGlyph() + Manual memory management + kbts_SizeOfShapeState() + kbts_PlaceShapeState() + kbts_ReadFontHeader() -- Read the top of the file and return how many bytes are needed to read the rest + kbts_ReadFontData() -- Read and byteswap the rest + kbts_PostReadFontInitialize() -- Initialize auxiliary structures + Utility, etc. + kbts_ShaperIsComplex() + kbts_ScriptIsComplex() + kbts_InferScript() -- Stupid script detection. Do not ship this! Use script breaks instead. + kbts_DecodeUtf8() + + EXAMPLE USAGE + Complete example: + const char *String = "..."; + size_t Length = strlen(String); + // Open a font file + kbts_font Font = kbts_FontFromFile("..."); + // Make some glyphs + kbts_glyph *Glyphs = (kbts_glyph *)malloc(sizeof(kbts_glyph) * Length); + uint32_t GlyphCount = 0; + kbts_script Script = KBTS_SCRIPT_DONT_KNOW; + kbts_direction Direction = KBTS_DIRECTION_NONE; + for(size_t StringAt = 0; StringAt < Length;) + { + kbts_decode Decode = kbts_DecodeUtf8(String, Length - StringAt); + StringAt += Decode.SourceCharactersConsumed; + if(Decode.Valid) + { + kbts_glyph Glyph = kbts_CodepointToGlyph(&Font, Decode.Codepoint); + // Easy script inference for simple cases. (This is similar to hb_buffer_guess_segment_properties.) + // If you have already segmented String with our API, you already have a script! + // So no need to pass it in that case. + // Only use this as a shorthand, when you are pretty sure String is a single + // script. + kbts_InferScript(&Direction, &Script, Glyph.Script); + Glyphs[GlyphCount++] = Glyph; + } + } + // Shape + uint32_t GlyphCapacity = Length; + kbts_shape_state *State = kbts_CreateShapeState(&Font); + // A shape_config is immutable once created. You can freely share/hash it, etc. + kbts_shape_config Config = kbts_ShapeConfig(&Font, Script, KBTS_LANGUAGE_DONT_KNOW); + while(kbts_Shape(State, &Config, Direction, Direction, Glyphs, &GlyphCount, GlyphCapacity)) + { + Glyphs = realloc(Glyphs, sizeof(kbts_glyph) * State->RequiredGlyphCapacity); + GlyphCapacity = State->RequiredGlyphCapacity; + } + // Get final positions + kbts_cursor Cursor = kbts_Cursor(Direction); + for(size_t GlyphIndex = 0; GlyphIndex < GlyphCount; ++GlyphIndex) + { + int X, Y; + kbts_PositionGlyph(&Cursor, &Glyphs[GlyphIndex], &X, &Y); + } + + Breaking Unicode text - finding the end of the current line: + uint32_t LineLength = 0; + kbts_break_state BreakState; + kbts_BeginBreak(&BreakState, KBTS_DIRECTION_NONE, KBTS_JAPANESE_LINE_BREAK_STYLE_NORMAL); + for(size_t CodepointIndex = 0; (CodepointIndex < CodepointCount) && !LineLength; ++CodepointIndex) + { + // We use a fixed-width encoding (codepoints) -- just pass a PositionIncrement of 1. + // If we wanted to directly segment UTF-8 in-place, we would pass in however many bytes each UTF-8 character was. + + // The last parameter to AddCodepoint is a boolean signifying the end of text. + // Alternatively, we could have written: + // kbts_BreakAddCodepoint(..., 0); + // if((CodepointIndex + 1) == CodepointCount) kbts_BreakFlush(); + + kbts_BreakAddCodepoint(&BreakState, Codepoints[CodepointIndex], 1, (CodepointIndex + 1) == CodepointCount); + kbts_break Break; + while(kbts_Break(&BreakState, &Break)) + { + // We could just as easily check for any other kind of break here. + // See kbts_break_flags for the kind of breaks we can find. + if(Break.Flags & KBTS_BREAK_FLAG_LINE_HARD) + { + LineLength = Break.Position; + } + } + } + + Open a font with your own memory: + kbts_font Font; + size_t ScratchSize = kbts_ReadFontHeader(&Font, Data, Size); + size_t PermanentMemorySize = kbts_ReadFontData(&Font, malloc(ScratchSize), ScratchSize); + kbts_PostReadFontInitialize(&Font, malloc(PermanentMemorySize), PermanentMemorySize); + // At any point, you can call kbts_FontIsValid(&Font) to check if the read went well. + // You do not need to check for font validity in between API calls here; once a font is flagged + // with an error, subsequent API calls simply do nothing. + // If you have provided real font data, kbts_FontIsValid(&Font) will most likely be true. + // We may still fail to parse some technically valid fonts that contain very deeply-nested or + // self-referential lookups. + // In those cases, Harfbuzz might open the font, but, at the time of writing, it silently limits + // the recursion depth to 64 when applying the lookups anyway. + + Allocate a shape_state with your own memory: + kbts_shape_state *State = kbts_PlaceShapeState(malloc(kbts_SizeOfShapeState(Font)), kbts_SizeOfShapeState(Font)); + + Use a single shape_state across multiple runs: + while(kbts_Shape(State, ...)) {...} + // If the previous shaping operation completed successfully, ResetShapeState is not necessary. + // If, for any reason, you have decided to stop shaping in the middle of an operation, though, + // you need to call it. + // (This is just setting a state counter, so this is very cheap.) + kbts_ResetShapeState(State); + while(kbts_Shape(State, ...)) {...} + + Use a single shape_state across multiple fonts: + // Different fonts have different memory requirements for shaping. However, beyond that, there + // is nothing that ties a shape_state to a font. You may use it freely with multiple fonts, as + // long as it is large enough. + size_t Size0 = kbts_SizeOfShapeState(Font0); + size_t Size1 = kbts_SizeOfShapeState(Font1); + size_t Size = MAX(Size0, Size1) + kbts_shape_state *State = kbts_PlaceShapeState(malloc(Size), Size); + + Use a single shape_config across multiple runs: + // Once a shape_config has been created, it is assumed to be immutable and can be trivially shared + // between runs/operations that have the same parameters. + + LANGUAGE SUPPORT + Shaping is NOT supported for the following scripts: + Zawgyi: some fonts exist, but no standardized OpenType feature set seems to exist as of writing. + Syriac: Syriac Abbreviation Mark (0x070F) is not supported. + Egyptian Hieroglyphs, I think, although example text is hard to come by. + Word breaking is NOT supported for languages that require word dictionaries, like CJK. + + FONT SUPPORT + Font collections (.ttc) are not supported. + Indic fonts using the Indic1 shaping model are not supported. + e.g., 'bng2' will work, but 'beng' will not. + The Indic v2 shaping model was released with OpenType 1.5 in May 2008. + Traditional Arabic Windows 3.1 fonts are not supported. + https://github.com/harfbuzz/harfbuzz/issues/681 + Thai/Lao PUA fonts are not supported. + These are old fonts that use OS-specific codepages (PUA stands for [Unicode] "Private Use Area") and + pre-OpenType shaping. + https://linux.thai.net/~thep/th-otf/shaping.html + More generally, we try to be compatible with most well-formed fonts, but we try less hard than Harfbuzz + to be compatible with every font under the sun. + + OTHER LIMITATIONS + Explicit direction control characters are not supported. This includes: + 0x202A Left-to-right embedding + 0x202B Right-to-left embedding + 0x202D Left-to-right override + 0x202E Right-to-left override + 0x202C Pop directional formatting + 0x2066 Left-to-right isolate + 0x2067 Right-to-left isolate + 0x2068 First strong isolate + 0x2069 Pop directional isolate + See https://unicode.org/reports/tr9 for more information. + + TODO + Word dictionaries for word breaking: CJK, etc. + 'stch' feature. + Precompute GPOS nesting in advance and replace recursion with explicit frames. + (Either that or limit to a hard depth for now.) + + LICENSE + zlib License + + (C) Copyright 2024-2025 Jimmy Lefevre + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +#ifndef KB_TEXT_SHAPE_INCLUDED +# define KB_TEXT_SHAPE_INDLUDED + +# ifndef kbts_s64 +# if defined(_MSC_VER) || defined(__BORLANDC__) +# define kbts_s64 __int64 +# else +# define kbts_s64 long long +# endif +# endif +# ifndef kbts_u64 +# if defined(_MSC_VER) || defined(__BORLANDC__) +# define kbts_u64 unsigned __int64 +# else +# define kbts_u64 unsigned long long +# endif +# endif +# ifndef kbts_u32 +# define kbts_u32 unsigned +# endif +# ifndef kbts_u16 +# define kbts_u16 unsigned short +# endif +# ifndef kbts_s32 +# define kbts_s32 int +# endif +# ifndef kbts_s16 +# define kbts_s16 short +# endif +# ifndef kbts_u8 +# define kbts_u8 unsigned char +# endif +# ifndef kbts_s8 +# define kbts_s8 signed char +# endif + +# ifndef KB_TEXT_SHAPE_POINTER_SIZE +# if defined(i386) || defined(__i386__) || defined(_M_IX86) || defined(_M_ARM) || defined(__arm__) || defined(__x86) || (defined(__APPLE__) && defined(__ppc)) || \ + (defined(__TOS_AIX__) && !defined(__64BIT)) +# define KB_TEXT_SHAPE_POINTER_SIZE 4 +# else +# define KB_TEXT_SHAPE_POINTER_SIZE 8 +# endif +# endif + +# if KB_TEXT_SHAPE_POINTER_SIZE == 4 +# define kbts_un kbts_u32 +# define kbts_sn kbts_s32 +# else +# define kbts_un kbts_u64 +# define kbts_sn kbts_s64 +# endif + +# ifdef __has_attribute +# if __has_attribute(fallthrough) +# define KBTS_FALLTHROUGH __attribute__((fallthrough)) +# endif +# endif +# ifndef KBTS_FALLTHROUGH +# define KBTS_FALLTHROUGH +# endif + +# ifndef KBTS_EXPORT +# ifdef KB_TEXT_SHAPE_STATIC +# define KBTS_EXPORT static +# else +# ifdef __cplusplus +# define KBTS_EXPORT extern "C" +# else +# define KBTS_EXPORT extern +# endif +# endif +# endif + +# ifdef _MSC_VER +# define KBTS_INLINE static __forceinline +# define KBTS_NOINLINE static __declspec(noinline) +# else +# ifdef __has_attribute +# if __has_attribute(always_inline) +# define KBTS_INLINE static inline __attribute__((always_inline)) +# endif +# if __has_attribute(noinline) +# define KBTS_NOINLINE static __attribute__((noinline)) +# endif +# endif +# endif +# ifndef KBTS_INLINE +# define KBTS_INLINE static inline +# endif + +# define KBTS_FOURCC(A, B, C, D) ((A) | ((B) << 8) | ((C) << 16) | ((D) << 24)) + +typedef kbts_u8 kbts_joining_feature; +enum kbts_joining_feature_enum +{ + KBTS_JOINING_FEATURE_NONE, + KBTS_JOINING_FEATURE_ISOL, + KBTS_JOINING_FEATURE_FINA, + KBTS_JOINING_FEATURE_FIN2, + KBTS_JOINING_FEATURE_FIN3, + KBTS_JOINING_FEATURE_MEDI, + KBTS_JOINING_FEATURE_MED2, + KBTS_JOINING_FEATURE_INIT, + + KBTS_JOINING_FEATURE_COUNT, +}; + +typedef kbts_u8 kbts_reph_position; +enum kbts_reph_position_enum +{ + KBTS_REPH_POSITION_AFTER_POST, + KBTS_REPH_POSITION_BEFORE_POST, + KBTS_REPH_POSITION_BEFORE_SUBJOINED, + KBTS_REPH_POSITION_AFTER_SUBJOINED, + KBTS_REPH_POSITION_AFTER_MAIN, + + KBTS_REPH_POSITION_COUNT, +}; + +typedef kbts_u8 kbts_reph_encoding; +enum kbts_reph_encoding_enum +{ + KBTS_REPH_ENCODING_IMPLICIT, + KBTS_REPH_ENCODING_EXPLICIT, + KBTS_REPH_ENCODING_LOGICAL_REPHA, + KBTS_REPH_ENCODING_VISUAL_REPHA, + + KBTS_REPH_ENCODING_COUNT, +}; + +typedef kbts_u8 kbts_syllabic_position; +enum kbts_syllabic_position_enum +{ + KBTS_SYLLABIC_POSITION_NONE, + + KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH, + + KBTS_SYLLABIC_POSITION_PREBASE_MATRA, + KBTS_SYLLABIC_POSITION_PREBASE_CONSONANT, + + KBTS_SYLLABIC_POSITION_SYLLABLE_BASE, + KBTS_SYLLABIC_POSITION_AFTER_MAIN, + + KBTS_SYLLABIC_POSITION_ABOVEBASE_CONSONANT, + + KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED, + KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT, + KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED, + + KBTS_SYLLABIC_POSITION_BEFORE_POST, + KBTS_SYLLABIC_POSITION_POSTBASE_CONSONANT, + KBTS_SYLLABIC_POSITION_AFTER_POST, + + KBTS_SYLLABIC_POSITION_FINAL_CONSONANT, + KBTS_SYLLABIC_POSITION_SMVD, + + KBTS_SYLLABIC_POSITION_COUNT, +}; + +typedef kbts_u32 kbts_language; +enum kbts_language_enum +{ + KBTS_LANGUAGE_DONT_KNOW = 0, + + KBTS_LANGUAGE_A_HMAO = KBTS_FOURCC('H', 'M', 'D', ' '), + KBTS_LANGUAGE_AARI = KBTS_FOURCC('A', 'R', 'I', ' '), + KBTS_LANGUAGE_ABAZA = KBTS_FOURCC('A', 'B', 'A', ' '), + KBTS_LANGUAGE_ABKHAZIAN = KBTS_FOURCC('A', 'B', 'K', ' '), + KBTS_LANGUAGE_ACHI = KBTS_FOURCC('A', 'C', 'R', ' '), + KBTS_LANGUAGE_ACHOLI = KBTS_FOURCC('A', 'C', 'H', ' '), + KBTS_LANGUAGE_ADYGHE = KBTS_FOURCC('A', 'D', 'Y', ' '), + KBTS_LANGUAGE_AFAR = KBTS_FOURCC('A', 'F', 'R', ' '), + KBTS_LANGUAGE_AFRIKAANS = KBTS_FOURCC('A', 'F', 'K', ' '), + KBTS_LANGUAGE_AGAW = KBTS_FOURCC('A', 'G', 'W', ' '), + KBTS_LANGUAGE_AITON = KBTS_FOURCC('A', 'I', 'O', ' '), + KBTS_LANGUAGE_AKAN = KBTS_FOURCC('A', 'K', 'A', ' '), + KBTS_LANGUAGE_ALBANIAN = KBTS_FOURCC('S', 'Q', 'I', ' '), + KBTS_LANGUAGE_ALSATIAN = KBTS_FOURCC('A', 'L', 'S', ' '), + KBTS_LANGUAGE_ALTAI = KBTS_FOURCC('A', 'L', 'T', ' '), + KBTS_LANGUAGE_ALUO = KBTS_FOURCC('Y', 'N', 'A', ' '), + KBTS_LANGUAGE_AMERICAN_PHONETIC = KBTS_FOURCC('A', 'P', 'P', 'H'), + KBTS_LANGUAGE_AMHARIC = KBTS_FOURCC('A', 'M', 'H', ' '), + KBTS_LANGUAGE_ANGLO_SAXON = KBTS_FOURCC('A', 'N', 'G', ' '), + KBTS_LANGUAGE_ARABIC = KBTS_FOURCC('A', 'R', 'A', ' '), + KBTS_LANGUAGE_ARAGONESE = KBTS_FOURCC('A', 'R', 'G', ' '), + KBTS_LANGUAGE_ARAKANESE = KBTS_FOURCC('A', 'R', 'K', ' '), + KBTS_LANGUAGE_ARAKWAL = KBTS_FOURCC('R', 'K', 'W', ' '), + KBTS_LANGUAGE_ARMENIAN = KBTS_FOURCC('H', 'Y', 'E', ' '), + KBTS_LANGUAGE_ARMENIAN_EAST = KBTS_FOURCC('H', 'Y', 'E', '0'), + KBTS_LANGUAGE_AROMANIAN = KBTS_FOURCC('R', 'U', 'P', ' '), + KBTS_LANGUAGE_ARPITAN = KBTS_FOURCC('F', 'R', 'P', ' '), + KBTS_LANGUAGE_ASSAMESE = KBTS_FOURCC('A', 'S', 'M', ' '), + KBTS_LANGUAGE_ASTURIAN = KBTS_FOURCC('A', 'S', 'T', ' '), + KBTS_LANGUAGE_ATHAPASKAN = KBTS_FOURCC('A', 'T', 'H', ' '), + KBTS_LANGUAGE_ATSINA = KBTS_FOURCC('A', 'T', 'S', ' '), + KBTS_LANGUAGE_AVAR = KBTS_FOURCC('A', 'V', 'R', ' '), + KBTS_LANGUAGE_AVATIME = KBTS_FOURCC('A', 'V', 'N', ' '), + KBTS_LANGUAGE_AWADHI = KBTS_FOURCC('A', 'W', 'A', ' '), + KBTS_LANGUAGE_AYMARA = KBTS_FOURCC('A', 'Y', 'M', ' '), + KBTS_LANGUAGE_AZERBAIDJANI = KBTS_FOURCC('A', 'Z', 'E', ' '), + KBTS_LANGUAGE_BADAGA = KBTS_FOURCC('B', 'A', 'D', ' '), + KBTS_LANGUAGE_BAGHELKHANDI = KBTS_FOURCC('B', 'A', 'G', ' '), + KBTS_LANGUAGE_BAGRI = KBTS_FOURCC('B', 'G', 'Q', ' '), + KBTS_LANGUAGE_BALANTE = KBTS_FOURCC('B', 'L', 'N', ' '), + KBTS_LANGUAGE_BALINESE = KBTS_FOURCC('B', 'A', 'N', ' '), + KBTS_LANGUAGE_BALKAR = KBTS_FOURCC('B', 'A', 'L', ' '), + KBTS_LANGUAGE_BALTI = KBTS_FOURCC('B', 'L', 'T', ' '), + KBTS_LANGUAGE_BALUCHI = KBTS_FOURCC('B', 'L', 'I', ' '), + KBTS_LANGUAGE_BAMBARA = KBTS_FOURCC('B', 'M', 'B', ' '), + KBTS_LANGUAGE_BAMILEKE = KBTS_FOURCC('B', 'M', 'L', ' '), + KBTS_LANGUAGE_BANDA = KBTS_FOURCC('B', 'A', 'D', '0'), + KBTS_LANGUAGE_BANDJALANG = KBTS_FOURCC('B', 'D', 'Y', ' '), + KBTS_LANGUAGE_BANGLA = KBTS_FOURCC('B', 'E', 'N', ' '), + KBTS_LANGUAGE_BASHKIR = KBTS_FOURCC('B', 'S', 'H', ' '), + KBTS_LANGUAGE_BASQUE = KBTS_FOURCC('E', 'U', 'Q', ' '), + KBTS_LANGUAGE_BATAK = KBTS_FOURCC('B', 'T', 'K', ' '), + KBTS_LANGUAGE_BATAK_ALAS_KLUET = KBTS_FOURCC('B', 'T', 'Z', ' '), + KBTS_LANGUAGE_BATAK_ANGKOLA = KBTS_FOURCC('A', 'K', 'B', ' '), + KBTS_LANGUAGE_BATAK_DAIRI = KBTS_FOURCC('B', 'T', 'D', ' '), + KBTS_LANGUAGE_BATAK_KARO = KBTS_FOURCC('B', 'T', 'X', ' '), + KBTS_LANGUAGE_BATAK_MANDAILING = KBTS_FOURCC('B', 'T', 'M', ' '), + KBTS_LANGUAGE_BATAK_SIMALUNGUN = KBTS_FOURCC('B', 'T', 'S', ' '), + KBTS_LANGUAGE_BATAK_TOBA = KBTS_FOURCC('B', 'B', 'C', ' '), + KBTS_LANGUAGE_BAULE = KBTS_FOURCC('B', 'A', 'U', ' '), + KBTS_LANGUAGE_BAVARIAN = KBTS_FOURCC('B', 'A', 'R', ' '), + KBTS_LANGUAGE_BELARUSIAN = KBTS_FOURCC('B', 'E', 'L', ' '), + KBTS_LANGUAGE_BEMBA = KBTS_FOURCC('B', 'E', 'M', ' '), + KBTS_LANGUAGE_BENCH = KBTS_FOURCC('B', 'C', 'H', ' '), + KBTS_LANGUAGE_BERBER = KBTS_FOURCC('B', 'B', 'R', ' '), + KBTS_LANGUAGE_BETI = KBTS_FOURCC('B', 'T', 'I', ' '), + KBTS_LANGUAGE_BETTE_KURUMA = KBTS_FOURCC('X', 'U', 'B', ' '), + KBTS_LANGUAGE_BHILI = KBTS_FOURCC('B', 'H', 'I', ' '), + KBTS_LANGUAGE_BHOJPURI = KBTS_FOURCC('B', 'H', 'O', ' '), + KBTS_LANGUAGE_BHUTANESE = KBTS_FOURCC('D', 'Z', 'N', ' '), + KBTS_LANGUAGE_BIBLE_CREE = KBTS_FOURCC('B', 'C', 'R', ' '), + KBTS_LANGUAGE_BIKOL = KBTS_FOURCC('B', 'I', 'K', ' '), + KBTS_LANGUAGE_BILEN = KBTS_FOURCC('B', 'I', 'L', ' '), + KBTS_LANGUAGE_BISHNUPRIYA_MANIPURI = KBTS_FOURCC('B', 'P', 'Y', ' '), + KBTS_LANGUAGE_BISLAMA = KBTS_FOURCC('B', 'I', 'S', ' '), + KBTS_LANGUAGE_BLACKFOOT = KBTS_FOURCC('B', 'K', 'F', ' '), + KBTS_LANGUAGE_BODO = KBTS_FOURCC('B', 'R', 'X', ' '), + KBTS_LANGUAGE_BOSNIAN = KBTS_FOURCC('B', 'O', 'S', ' '), + KBTS_LANGUAGE_BOUYEI = KBTS_FOURCC('P', 'C', 'C', ' '), + KBTS_LANGUAGE_BRAHUI = KBTS_FOURCC('B', 'R', 'H', ' '), + KBTS_LANGUAGE_BRAJ_BHASHA = KBTS_FOURCC('B', 'R', 'I', ' '), + KBTS_LANGUAGE_BRETON = KBTS_FOURCC('B', 'R', 'E', ' '), + KBTS_LANGUAGE_BUGIS = KBTS_FOURCC('B', 'U', 'G', ' '), + KBTS_LANGUAGE_BULGARIAN = KBTS_FOURCC('B', 'G', 'R', ' '), + KBTS_LANGUAGE_BUMTHANGKHA = KBTS_FOURCC('K', 'J', 'Z', ' '), + KBTS_LANGUAGE_BURMESE = KBTS_FOURCC('B', 'R', 'M', ' '), + KBTS_LANGUAGE_BURUSHASKI = KBTS_FOURCC('B', 'S', 'K', ' '), + KBTS_LANGUAGE_CAJUN_FRENCH = KBTS_FOURCC('F', 'R', 'C', ' '), + KBTS_LANGUAGE_CARRIER = KBTS_FOURCC('C', 'R', 'R', ' '), + KBTS_LANGUAGE_CATALAN = KBTS_FOURCC('C', 'A', 'T', ' '), + KBTS_LANGUAGE_CAYUGA = KBTS_FOURCC('C', 'A', 'Y', ' '), + KBTS_LANGUAGE_CEBUANO = KBTS_FOURCC('C', 'E', 'B', ' '), + KBTS_LANGUAGE_CENTRAL_YUPIK = KBTS_FOURCC('E', 'S', 'U', ' '), + KBTS_LANGUAGE_CHAHA_GURAGE = KBTS_FOURCC('C', 'H', 'G', ' '), + KBTS_LANGUAGE_CHAMORRO = KBTS_FOURCC('C', 'H', 'A', ' '), + KBTS_LANGUAGE_CHATTISGARHI = KBTS_FOURCC('C', 'H', 'H', ' '), + KBTS_LANGUAGE_CHECHEN = KBTS_FOURCC('C', 'H', 'E', ' '), + KBTS_LANGUAGE_CHEROKEE = KBTS_FOURCC('C', 'H', 'R', ' '), + KBTS_LANGUAGE_CHEYENNE = KBTS_FOURCC('C', 'H', 'Y', ' '), + KBTS_LANGUAGE_CHICHEWA = KBTS_FOURCC('C', 'H', 'I', ' '), + KBTS_LANGUAGE_CHIGA = KBTS_FOURCC('C', 'G', 'G', ' '), + KBTS_LANGUAGE_CHIMILA = KBTS_FOURCC('C', 'B', 'G', ' '), + KBTS_LANGUAGE_CHIN = KBTS_FOURCC('Q', 'I', 'N', ' '), + KBTS_LANGUAGE_CHINANTEC = KBTS_FOURCC('C', 'C', 'H', 'N'), + KBTS_LANGUAGE_CHINESE_PHONETIC = KBTS_FOURCC('Z', 'H', 'P', ' '), + KBTS_LANGUAGE_CHINESE_SIMPLIFIED = KBTS_FOURCC('Z', 'H', 'S', ' '), + KBTS_LANGUAGE_CHINESE_TRADITIONAL = KBTS_FOURCC('Z', 'H', 'T', ' '), + KBTS_LANGUAGE_CHINESE_TRADITIONAL_HONG_KONG = KBTS_FOURCC('Z', 'H', 'H', ' '), + KBTS_LANGUAGE_CHINESE_TRADITIONAL_MACAO = KBTS_FOURCC('Z', 'H', 'T', 'M'), + KBTS_LANGUAGE_CHIPEWYAN = KBTS_FOURCC('C', 'H', 'P', ' '), + KBTS_LANGUAGE_CHITTAGONIAN = KBTS_FOURCC('C', 'T', 'G', ' '), + KBTS_LANGUAGE_CHOCTAW = KBTS_FOURCC('C', 'H', 'O', ' '), + KBTS_LANGUAGE_CHUKCHI = KBTS_FOURCC('C', 'H', 'K', ' '), + KBTS_LANGUAGE_CHURCH_SLAVONIC = KBTS_FOURCC('C', 'S', 'L', ' '), + KBTS_LANGUAGE_CHUUKESE = KBTS_FOURCC('C', 'H', 'K', '0'), + KBTS_LANGUAGE_CHUVASH = KBTS_FOURCC('C', 'H', 'U', ' '), + KBTS_LANGUAGE_COMORIAN = KBTS_FOURCC('C', 'M', 'R', ' '), + KBTS_LANGUAGE_COMOX = KBTS_FOURCC('C', 'O', 'O', ' '), + KBTS_LANGUAGE_COPTIC = KBTS_FOURCC('C', 'O', 'P', ' '), + KBTS_LANGUAGE_CORNISH = KBTS_FOURCC('C', 'O', 'R', ' '), + KBTS_LANGUAGE_CORSICAN = KBTS_FOURCC('C', 'O', 'S', ' '), + KBTS_LANGUAGE_CREE = KBTS_FOURCC('C', 'R', 'E', ' '), + KBTS_LANGUAGE_CREOLES = KBTS_FOURCC('C', 'P', 'P', ' '), + KBTS_LANGUAGE_CRIMEAN_TATAR = KBTS_FOURCC('C', 'R', 'T', ' '), + KBTS_LANGUAGE_CRIOULO = KBTS_FOURCC('K', 'E', 'A', ' '), + KBTS_LANGUAGE_CROATIAN = KBTS_FOURCC('H', 'R', 'V', ' '), + KBTS_LANGUAGE_CYPRIOT_ARABIC = KBTS_FOURCC('A', 'C', 'Y', ' '), + KBTS_LANGUAGE_CZECH = KBTS_FOURCC('C', 'S', 'Y', ' '), + KBTS_LANGUAGE_DAGBANI = KBTS_FOURCC('D', 'A', 'G', ' '), + KBTS_LANGUAGE_DAN = KBTS_FOURCC('D', 'N', 'J', ' '), + KBTS_LANGUAGE_DANGME = KBTS_FOURCC('D', 'N', 'G', ' '), + KBTS_LANGUAGE_DANISH = KBTS_FOURCC('D', 'A', 'N', ' '), + KBTS_LANGUAGE_DARGWA = KBTS_FOURCC('D', 'A', 'R', ' '), + KBTS_LANGUAGE_DARI = KBTS_FOURCC('D', 'R', 'I', ' '), + KBTS_LANGUAGE_DAYI = KBTS_FOURCC('D', 'A', 'X', ' '), + KBTS_LANGUAGE_DEFAULT = KBTS_FOURCC('d', 'f', 'l', 't'), // Can be DFLT too... + KBTS_LANGUAGE_DEHONG_DAI = KBTS_FOURCC('T', 'D', 'D', ' '), + KBTS_LANGUAGE_DHANGU = KBTS_FOURCC('D', 'H', 'G', ' '), + KBTS_LANGUAGE_DHIVEHI = KBTS_FOURCC('D', 'I', 'V', ' '), + KBTS_LANGUAGE_DHUWAL = KBTS_FOURCC('D', 'U', 'J', ' '), + KBTS_LANGUAGE_DIMLI = KBTS_FOURCC('D', 'I', 'Q', ' '), + KBTS_LANGUAGE_DINKA = KBTS_FOURCC('D', 'N', 'K', ' '), + KBTS_LANGUAGE_DIVEHI = KBTS_FOURCC('D', 'I', 'V', ' '), + KBTS_LANGUAGE_DJAMBARRPUYNGU = KBTS_FOURCC('D', 'J', 'R', '0'), + KBTS_LANGUAGE_DOGRI = KBTS_FOURCC('D', 'G', 'O', ' '), + KBTS_LANGUAGE_DOGRI_MACROLANGUAGE = KBTS_FOURCC('D', 'G', 'R', ' '), + KBTS_LANGUAGE_DUNGAN = KBTS_FOURCC('D', 'U', 'N', ' '), + KBTS_LANGUAGE_DUTCH = KBTS_FOURCC('N', 'L', 'D', ' '), + KBTS_LANGUAGE_DZONGKHA = KBTS_FOURCC('D', 'Z', 'N', ' '), + KBTS_LANGUAGE_EASTERN_ABENAKI = KBTS_FOURCC('A', 'A', 'Q', ' '), + KBTS_LANGUAGE_EASTERN_CHAM = KBTS_FOURCC('C', 'J', 'M', ' '), + KBTS_LANGUAGE_EASTERN_CREE = KBTS_FOURCC('E', 'C', 'R', ' '), + KBTS_LANGUAGE_EASTERN_MANINKAKAN = KBTS_FOURCC('E', 'M', 'K', ' '), + KBTS_LANGUAGE_EASTERN_PWO_KAREN = KBTS_FOURCC('K', 'J', 'P', ' '), + KBTS_LANGUAGE_EBIRA = KBTS_FOURCC('E', 'B', 'I', ' '), + KBTS_LANGUAGE_EDO = KBTS_FOURCC('E', 'D', 'O', ' '), + KBTS_LANGUAGE_EFIK = KBTS_FOURCC('E', 'F', 'I', ' '), + KBTS_LANGUAGE_EMBERA_BAUDO = KBTS_FOURCC('B', 'D', 'C', ' '), + KBTS_LANGUAGE_EMBERA_CATIO = KBTS_FOURCC('C', 'T', 'O', ' '), + KBTS_LANGUAGE_EMBERA_CHAMI = KBTS_FOURCC('C', 'M', 'I', ' '), + KBTS_LANGUAGE_EMBERA_TADO = KBTS_FOURCC('T', 'D', 'C', ' '), + KBTS_LANGUAGE_ENGLISH = KBTS_FOURCC('E', 'N', 'G', ' '), + KBTS_LANGUAGE_EPENA = KBTS_FOURCC('S', 'J', 'A', ' '), + KBTS_LANGUAGE_ERZYA = KBTS_FOURCC('E', 'R', 'Z', ' '), + KBTS_LANGUAGE_KB_TEXT_SHAPEANTO = KBTS_FOURCC('N', 'T', 'O', ' '), + KBTS_LANGUAGE_ESTONIAN = KBTS_FOURCC('E', 'T', 'I', ' '), + KBTS_LANGUAGE_EVEN = KBTS_FOURCC('E', 'V', 'N', ' '), + KBTS_LANGUAGE_EVENKI = KBTS_FOURCC('E', 'V', 'K', ' '), + KBTS_LANGUAGE_EWE = KBTS_FOURCC('E', 'W', 'E', ' '), + KBTS_LANGUAGE_FALAM_CHIN = KBTS_FOURCC('H', 'A', 'L', ' '), + KBTS_LANGUAGE_FANG = KBTS_FOURCC('F', 'A', 'N', '0'), + KBTS_LANGUAGE_FANTI = KBTS_FOURCC('F', 'A', 'T', ' '), + KBTS_LANGUAGE_FAROESE = KBTS_FOURCC('F', 'O', 'S', ' '), + KBTS_LANGUAGE_FEFE = KBTS_FOURCC('F', 'M', 'P', ' '), + KBTS_LANGUAGE_FIJIAN = KBTS_FOURCC('F', 'J', 'I', ' '), + KBTS_LANGUAGE_FILIPINO = KBTS_FOURCC('P', 'I', 'L', ' '), + KBTS_LANGUAGE_FINNISH = KBTS_FOURCC('F', 'I', 'N', ' '), + KBTS_LANGUAGE_FLEMISH = KBTS_FOURCC('F', 'L', 'E', ' '), + KBTS_LANGUAGE_FON = KBTS_FOURCC('F', 'O', 'N', ' '), + KBTS_LANGUAGE_FOREST_ENETS = KBTS_FOURCC('F', 'N', 'E', ' '), + KBTS_LANGUAGE_FRENCH = KBTS_FOURCC('F', 'R', 'A', ' '), + KBTS_LANGUAGE_FRENCH_ANTILLEAN = KBTS_FOURCC('F', 'A', 'N', ' '), + KBTS_LANGUAGE_FRISIAN = KBTS_FOURCC('F', 'R', 'I', ' '), + KBTS_LANGUAGE_FRIULIAN = KBTS_FOURCC('F', 'R', 'L', ' '), + KBTS_LANGUAGE_FULAH = KBTS_FOURCC('F', 'U', 'L', ' '), + KBTS_LANGUAGE_FUTA = KBTS_FOURCC('F', 'T', 'A', ' '), + KBTS_LANGUAGE_GA = KBTS_FOURCC('G', 'A', 'D', ' '), + KBTS_LANGUAGE_GAGAUZ = KBTS_FOURCC('G', 'A', 'G', ' '), + KBTS_LANGUAGE_GALICIAN = KBTS_FOURCC('G', 'A', 'L', ' '), + KBTS_LANGUAGE_GANDA = KBTS_FOURCC('L', 'U', 'G', ' '), + KBTS_LANGUAGE_GARHWALI = KBTS_FOURCC('G', 'A', 'W', ' '), + KBTS_LANGUAGE_GARO = KBTS_FOURCC('G', 'R', 'O', ' '), + KBTS_LANGUAGE_GARSHUNI = KBTS_FOURCC('G', 'A', 'R', ' '), + KBTS_LANGUAGE_GEBA_KAREN = KBTS_FOURCC('K', 'V', 'Q', ' '), + KBTS_LANGUAGE_GEEZ = KBTS_FOURCC('G', 'E', 'Z', ' '), + KBTS_LANGUAGE_GEORGIAN = KBTS_FOURCC('K', 'A', 'T', ' '), + KBTS_LANGUAGE_GEPO = KBTS_FOURCC('Y', 'G', 'P', ' '), + KBTS_LANGUAGE_GERMAN = KBTS_FOURCC('D', 'E', 'U', ' '), + KBTS_LANGUAGE_GIKUYU = KBTS_FOURCC('K', 'I', 'K', ' '), + KBTS_LANGUAGE_GILAKI = KBTS_FOURCC('G', 'L', 'K', ' '), + KBTS_LANGUAGE_GILBERTESE = KBTS_FOURCC('G', 'I', 'L', '0'), + KBTS_LANGUAGE_GILYAK = KBTS_FOURCC('G', 'I', 'L', ' '), + KBTS_LANGUAGE_GITHABUL = KBTS_FOURCC('G', 'I', 'H', ' '), + KBTS_LANGUAGE_GOGO = KBTS_FOURCC('G', 'O', 'G', ' '), + KBTS_LANGUAGE_GONDI = KBTS_FOURCC('G', 'O', 'N', ' '), + KBTS_LANGUAGE_GREEK = KBTS_FOURCC('E', 'L', 'L', ' '), + KBTS_LANGUAGE_GREENLANDIC = KBTS_FOURCC('G', 'R', 'N', ' '), + KBTS_LANGUAGE_GUARANI = KBTS_FOURCC('G', 'U', 'A', ' '), + KBTS_LANGUAGE_GUINEA = KBTS_FOURCC('G', 'K', 'P', ' '), + KBTS_LANGUAGE_GUJARATI = KBTS_FOURCC('G', 'U', 'J', ' '), + KBTS_LANGUAGE_GUMATJ = KBTS_FOURCC('G', 'N', 'N', ' '), + KBTS_LANGUAGE_GUMUZ = KBTS_FOURCC('G', 'M', 'Z', ' '), + KBTS_LANGUAGE_GUPAPUYNGU = KBTS_FOURCC('G', 'U', 'F', ' '), + KBTS_LANGUAGE_GUSII = KBTS_FOURCC('G', 'U', 'Z', ' '), + KBTS_LANGUAGE_HAIDA = KBTS_FOURCC('H', 'A', 'I', '0'), + KBTS_LANGUAGE_HAITIAN_CREOLE = KBTS_FOURCC('H', 'A', 'I', ' '), + KBTS_LANGUAGE_HALKOMELEM = KBTS_FOURCC('H', 'U', 'R', ' '), + KBTS_LANGUAGE_HAMMER_BANNA = KBTS_FOURCC('H', 'B', 'N', ' '), + KBTS_LANGUAGE_HARARI = KBTS_FOURCC('H', 'R', 'I', ' '), + KBTS_LANGUAGE_HARAUTI = KBTS_FOURCC('H', 'A', 'R', ' '), + KBTS_LANGUAGE_HARYANVI = KBTS_FOURCC('B', 'G', 'C', ' '), + KBTS_LANGUAGE_HAUSA = KBTS_FOURCC('H', 'A', 'U', ' '), + KBTS_LANGUAGE_HAVASUPAI_WALAPAI_YAVAPAI = KBTS_FOURCC('Y', 'U', 'F', ' '), + KBTS_LANGUAGE_HAWAIIAN = KBTS_FOURCC('H', 'A', 'W', ' '), + KBTS_LANGUAGE_HAYA = KBTS_FOURCC('H', 'A', 'Y', ' '), + KBTS_LANGUAGE_HAZARAGI = KBTS_FOURCC('H', 'A', 'Z', ' '), + KBTS_LANGUAGE_HEBREW = KBTS_FOURCC('I', 'W', 'R', ' '), + KBTS_LANGUAGE_HEILTSUK = KBTS_FOURCC('H', 'E', 'I', ' '), + KBTS_LANGUAGE_HERERO = KBTS_FOURCC('H', 'E', 'R', ' '), + KBTS_LANGUAGE_HIGH_MARI = KBTS_FOURCC('H', 'M', 'A', ' '), + KBTS_LANGUAGE_HILIGAYNON = KBTS_FOURCC('H', 'I', 'L', ' '), + KBTS_LANGUAGE_HINDI = KBTS_FOURCC('H', 'I', 'N', ' '), + KBTS_LANGUAGE_HINDKO = KBTS_FOURCC('H', 'N', 'D', ' '), + KBTS_LANGUAGE_HIRI_MOTU = KBTS_FOURCC('H', 'M', 'O', ' '), + KBTS_LANGUAGE_HMONG = KBTS_FOURCC('H', 'M', 'N', ' '), + KBTS_LANGUAGE_HMONG_DAW = KBTS_FOURCC('M', 'W', 'W', ' '), + KBTS_LANGUAGE_HMONG_SHUAT = KBTS_FOURCC('H', 'M', 'Z', ' '), + KBTS_LANGUAGE_HO = KBTS_FOURCC('H', 'O', ' ', ' '), + KBTS_LANGUAGE_HUNGARIAN = KBTS_FOURCC('H', 'U', 'N', ' '), + KBTS_LANGUAGE_IBAN = KBTS_FOURCC('I', 'B', 'A', ' '), + KBTS_LANGUAGE_IBIBIO = KBTS_FOURCC('I', 'B', 'B', ' '), + KBTS_LANGUAGE_ICELANDIC = KBTS_FOURCC('I', 'S', 'L', ' '), + KBTS_LANGUAGE_IDO = KBTS_FOURCC('I', 'D', 'O', ' '), + KBTS_LANGUAGE_IGBO = KBTS_FOURCC('I', 'B', 'O', ' '), + KBTS_LANGUAGE_IJO = KBTS_FOURCC('I', 'J', 'O', ' '), + KBTS_LANGUAGE_ILOKANO = KBTS_FOURCC('I', 'L', 'O', ' '), + KBTS_LANGUAGE_INARI_SAMI = KBTS_FOURCC('I', 'S', 'M', ' '), + KBTS_LANGUAGE_INDONESIAN = KBTS_FOURCC('I', 'N', 'D', ' '), + KBTS_LANGUAGE_INGUSH = KBTS_FOURCC('I', 'N', 'G', ' '), + KBTS_LANGUAGE_INTERLINGUA = KBTS_FOURCC('I', 'N', 'A', ' '), + KBTS_LANGUAGE_INTERLINGUE = KBTS_FOURCC('I', 'L', 'E', ' '), + KBTS_LANGUAGE_INUKTITUT = KBTS_FOURCC('I', 'N', 'U', ' '), + KBTS_LANGUAGE_INUPIAT = KBTS_FOURCC('I', 'P', 'K', ' '), + KBTS_LANGUAGE_IPA_PHONETIC = KBTS_FOURCC('I', 'P', 'P', ' '), + KBTS_LANGUAGE_IRISH = KBTS_FOURCC('I', 'R', 'I', ' '), + KBTS_LANGUAGE_IRISH_TRADITIONAL = KBTS_FOURCC('I', 'R', 'T', ' '), + KBTS_LANGUAGE_IRULA = KBTS_FOURCC('I', 'R', 'U', ' '), + KBTS_LANGUAGE_ITALIAN = KBTS_FOURCC('I', 'T', 'A', ' '), + KBTS_LANGUAGE_JAMAICAN_CREOLE = KBTS_FOURCC('J', 'A', 'M', ' '), + KBTS_LANGUAGE_JAPANESE = KBTS_FOURCC('J', 'A', 'N', ' '), + KBTS_LANGUAGE_JAVANESE = KBTS_FOURCC('J', 'A', 'V', ' '), + KBTS_LANGUAGE_JENNU_KURUMA = KBTS_FOURCC('X', 'U', 'J', ' '), + KBTS_LANGUAGE_JUDEO_TAT = KBTS_FOURCC('J', 'D', 'T', ' '), + KBTS_LANGUAGE_JULA = KBTS_FOURCC('J', 'U', 'L', ' '), + KBTS_LANGUAGE_KABARDIAN = KBTS_FOURCC('K', 'A', 'B', ' '), + KBTS_LANGUAGE_KABYLE = KBTS_FOURCC('K', 'A', 'B', '0'), + KBTS_LANGUAGE_KACHCHI = KBTS_FOURCC('K', 'A', 'C', ' '), + KBTS_LANGUAGE_KADIWEU = KBTS_FOURCC('K', 'B', 'C', ' '), + KBTS_LANGUAGE_KALENJIN = KBTS_FOURCC('K', 'A', 'L', ' '), + KBTS_LANGUAGE_KALMYK = KBTS_FOURCC('K', 'L', 'M', ' '), + KBTS_LANGUAGE_KAMBA = KBTS_FOURCC('K', 'M', 'B', ' '), + KBTS_LANGUAGE_KANAUJI = KBTS_FOURCC('B', 'J', 'J', ' '), + KBTS_LANGUAGE_KANNADA = KBTS_FOURCC('K', 'A', 'N', ' '), + KBTS_LANGUAGE_KANURI = KBTS_FOURCC('K', 'N', 'R', ' '), + KBTS_LANGUAGE_KAQCHIKEL = KBTS_FOURCC('C', 'A', 'K', ' '), + KBTS_LANGUAGE_KARACHAY = KBTS_FOURCC('K', 'A', 'R', ' '), + KBTS_LANGUAGE_KARAIM = KBTS_FOURCC('K', 'R', 'M', ' '), + KBTS_LANGUAGE_KARAKALPAK = KBTS_FOURCC('K', 'R', 'K', ' '), + KBTS_LANGUAGE_KARELIAN = KBTS_FOURCC('K', 'R', 'L', ' '), + KBTS_LANGUAGE_KAREN = KBTS_FOURCC('K', 'R', 'N', ' '), + KBTS_LANGUAGE_KASHMIRI = KBTS_FOURCC('K', 'S', 'H', ' '), + KBTS_LANGUAGE_KASHUBIAN = KBTS_FOURCC('C', 'S', 'B', ' '), + KBTS_LANGUAGE_KATE = KBTS_FOURCC('K', 'M', 'G', ' '), + KBTS_LANGUAGE_KAZAKH = KBTS_FOURCC('K', 'A', 'Z', ' '), + KBTS_LANGUAGE_KEBENA = KBTS_FOURCC('K', 'E', 'B', ' '), + KBTS_LANGUAGE_KEKCHI = KBTS_FOURCC('K', 'E', 'K', ' '), + KBTS_LANGUAGE_KHAKASS = KBTS_FOURCC('K', 'H', 'A', ' '), + KBTS_LANGUAGE_KHAMTI_SHAN = KBTS_FOURCC('K', 'H', 'T', ' '), + KBTS_LANGUAGE_KHAMYANG = KBTS_FOURCC('K', 'S', 'U', ' '), + KBTS_LANGUAGE_KHANTY_KAZIM = KBTS_FOURCC('K', 'H', 'K', ' '), + KBTS_LANGUAGE_KHANTY_SHURISHKAR = KBTS_FOURCC('K', 'H', 'S', ' '), + KBTS_LANGUAGE_KHANTY_VAKHI = KBTS_FOURCC('K', 'H', 'V', ' '), + KBTS_LANGUAGE_KHASI = KBTS_FOURCC('K', 'S', 'I', ' '), + KBTS_LANGUAGE_KHENGKHA = KBTS_FOURCC('X', 'K', 'F', ' '), + KBTS_LANGUAGE_KHINALUG = KBTS_FOURCC('K', 'J', 'J', ' '), + KBTS_LANGUAGE_KHMER = KBTS_FOURCC('K', 'H', 'M', ' '), + KBTS_LANGUAGE_KHORASANI_TURKIC = KBTS_FOURCC('K', 'M', 'Z', ' '), + KBTS_LANGUAGE_KHOWAR = KBTS_FOURCC('K', 'H', 'W', ' '), + KBTS_LANGUAGE_KHUTSURI_GEORGIAN = KBTS_FOURCC('K', 'G', 'E', ' '), + KBTS_LANGUAGE_KICHE = KBTS_FOURCC('Q', 'U', 'C', ' '), + KBTS_LANGUAGE_KIKONGO = KBTS_FOURCC('K', 'O', 'N', ' '), + KBTS_LANGUAGE_KILDIN_SAMI = KBTS_FOURCC('K', 'S', 'M', ' '), + KBTS_LANGUAGE_KINYARWANDA = KBTS_FOURCC('R', 'U', 'A', ' '), + KBTS_LANGUAGE_KIRMANJKI = KBTS_FOURCC('K', 'I', 'U', ' '), + KBTS_LANGUAGE_KISII = KBTS_FOURCC('K', 'I', 'S', ' '), + KBTS_LANGUAGE_KITUBA = KBTS_FOURCC('M', 'K', 'W', ' '), + KBTS_LANGUAGE_KODAGU = KBTS_FOURCC('K', 'O', 'D', ' '), + KBTS_LANGUAGE_KOKNI = KBTS_FOURCC('K', 'K', 'N', ' '), + KBTS_LANGUAGE_KOMI = KBTS_FOURCC('K', 'O', 'M', ' '), + KBTS_LANGUAGE_KOMI_PERMYAK = KBTS_FOURCC('K', 'O', 'P', ' '), + KBTS_LANGUAGE_KOMI_ZYRIAN = KBTS_FOURCC('K', 'O', 'Z', ' '), + KBTS_LANGUAGE_KOMO = KBTS_FOURCC('K', 'M', 'O', ' '), + KBTS_LANGUAGE_KOMSO = KBTS_FOURCC('K', 'M', 'S', ' '), + KBTS_LANGUAGE_KONGO = KBTS_FOURCC('K', 'O', 'N', '0'), + KBTS_LANGUAGE_KONKANI = KBTS_FOURCC('K', 'O', 'K', ' '), + KBTS_LANGUAGE_KOORETE = KBTS_FOURCC('K', 'R', 'T', ' '), + KBTS_LANGUAGE_KOREAN = KBTS_FOURCC('K', 'O', 'R', ' '), + KBTS_LANGUAGE_KOREAO_OLD_HANGUL = KBTS_FOURCC('K', 'O', 'H', ' '), + KBTS_LANGUAGE_KORYAK = KBTS_FOURCC('K', 'Y', 'K', ' '), + KBTS_LANGUAGE_KOSRAEAN = KBTS_FOURCC('K', 'O', 'S', ' '), + KBTS_LANGUAGE_KPELLE = KBTS_FOURCC('K', 'P', 'L', ' '), + KBTS_LANGUAGE_KPELLE_LIBERIA = KBTS_FOURCC('X', 'P', 'E', ' '), + KBTS_LANGUAGE_KRIO = KBTS_FOURCC('K', 'R', 'I', ' '), + KBTS_LANGUAGE_KRYMCHAK = KBTS_FOURCC('J', 'C', 'T', ' '), + KBTS_LANGUAGE_KUANYAMA = KBTS_FOURCC('K', 'U', 'A', ' '), + KBTS_LANGUAGE_KUBE = KBTS_FOURCC('K', 'G', 'F', ' '), + KBTS_LANGUAGE_KUI = KBTS_FOURCC('K', 'U', 'I', ' '), + KBTS_LANGUAGE_KULVI = KBTS_FOURCC('K', 'U', 'K', ' '), + KBTS_LANGUAGE_KUMAONI = KBTS_FOURCC('K', 'M', 'N', ' '), + KBTS_LANGUAGE_KUMYK = KBTS_FOURCC('K', 'U', 'M', ' '), + KBTS_LANGUAGE_KURDISH = KBTS_FOURCC('K', 'U', 'R', ' '), + KBTS_LANGUAGE_KURUKH = KBTS_FOURCC('K', 'U', 'U', ' '), + KBTS_LANGUAGE_KUY = KBTS_FOURCC('K', 'U', 'Y', ' '), + KBTS_LANGUAGE_KWAKWALA = KBTS_FOURCC('K', 'W', 'K', ' '), + KBTS_LANGUAGE_KYRGYZ = KBTS_FOURCC('K', 'I', 'R', ' '), + KBTS_LANGUAGE_L_CREE = KBTS_FOURCC('L', 'C', 'R', ' '), + KBTS_LANGUAGE_LADAKHI = KBTS_FOURCC('L', 'D', 'K', ' '), + KBTS_LANGUAGE_LADIN = KBTS_FOURCC('L', 'A', 'D', ' '), + KBTS_LANGUAGE_LADINO = KBTS_FOURCC('J', 'U', 'D', ' '), + KBTS_LANGUAGE_LAHULI = KBTS_FOURCC('L', 'A', 'H', ' '), + KBTS_LANGUAGE_LAK = KBTS_FOURCC('L', 'A', 'K', ' '), + KBTS_LANGUAGE_LAKI = KBTS_FOURCC('L', 'K', 'I', ' '), + KBTS_LANGUAGE_LAMBANI = KBTS_FOURCC('L', 'A', 'M', ' '), + KBTS_LANGUAGE_LAMPUNG = KBTS_FOURCC('L', 'J', 'P', ' '), + KBTS_LANGUAGE_LAO = KBTS_FOURCC('L', 'A', 'O', ' '), + KBTS_LANGUAGE_LATIN = KBTS_FOURCC('L', 'A', 'T', ' '), + KBTS_LANGUAGE_LATVIAN = KBTS_FOURCC('L', 'V', 'I', ' '), + KBTS_LANGUAGE_LAZ = KBTS_FOURCC('L', 'A', 'Z', ' '), + KBTS_LANGUAGE_LELEMI = KBTS_FOURCC('L', 'E', 'F', ' '), + KBTS_LANGUAGE_LEZGI = KBTS_FOURCC('L', 'E', 'Z', ' '), + KBTS_LANGUAGE_LIGURIAN = KBTS_FOURCC('L', 'I', 'J', ' '), + KBTS_LANGUAGE_LIMBU = KBTS_FOURCC('L', 'M', 'B', ' '), + KBTS_LANGUAGE_LIMBURGISH = KBTS_FOURCC('L', 'I', 'M', ' '), + KBTS_LANGUAGE_LINGALA = KBTS_FOURCC('L', 'I', 'N', ' '), + KBTS_LANGUAGE_LIPO = KBTS_FOURCC('L', 'P', 'O', ' '), + KBTS_LANGUAGE_LISU = KBTS_FOURCC('L', 'I', 'S', ' '), + KBTS_LANGUAGE_LITHUANIAN = KBTS_FOURCC('L', 'T', 'H', ' '), + KBTS_LANGUAGE_LIV = KBTS_FOURCC('L', 'I', 'V', ' '), + KBTS_LANGUAGE_LOJBAN = KBTS_FOURCC('J', 'B', 'O', ' '), + KBTS_LANGUAGE_LOMA = KBTS_FOURCC('L', 'O', 'M', ' '), + KBTS_LANGUAGE_LOMBARD = KBTS_FOURCC('L', 'M', 'O', ' '), + KBTS_LANGUAGE_LOMWE = KBTS_FOURCC('L', 'M', 'W', ' '), + KBTS_LANGUAGE_LOW_MARI = KBTS_FOURCC('L', 'M', 'A', ' '), + KBTS_LANGUAGE_LOW_SAXON = KBTS_FOURCC('N', 'D', 'S', ' '), + KBTS_LANGUAGE_LOWER_SORBIAN = KBTS_FOURCC('L', 'S', 'B', ' '), + KBTS_LANGUAGE_LU = KBTS_FOURCC('X', 'B', 'D', ' '), + KBTS_LANGUAGE_LUBA_KATANGA = KBTS_FOURCC('L', 'U', 'B', ' '), + KBTS_LANGUAGE_LUBA_LULUA = KBTS_FOURCC('L', 'U', 'A', ' '), + KBTS_LANGUAGE_LULE_SAMI = KBTS_FOURCC('L', 'S', 'M', ' '), + KBTS_LANGUAGE_LUO = KBTS_FOURCC('L', 'U', 'O', ' '), + KBTS_LANGUAGE_LURI = KBTS_FOURCC('L', 'R', 'C', ' '), + KBTS_LANGUAGE_LUSHOOTSEED = KBTS_FOURCC('L', 'U', 'T', ' '), + KBTS_LANGUAGE_LUXEMBOURGISH = KBTS_FOURCC('L', 'T', 'Z', ' '), + KBTS_LANGUAGE_LUYIA = KBTS_FOURCC('L', 'U', 'H', ' '), + KBTS_LANGUAGE_MACEDONIAN = KBTS_FOURCC('M', 'K', 'D', ' '), + KBTS_LANGUAGE_MADURA = KBTS_FOURCC('M', 'A', 'D', ' '), + KBTS_LANGUAGE_MAGAHI = KBTS_FOURCC('M', 'A', 'G', ' '), + KBTS_LANGUAGE_MAITHILI = KBTS_FOURCC('M', 'T', 'H', ' '), + KBTS_LANGUAGE_MAJANG = KBTS_FOURCC('M', 'A', 'J', ' '), + KBTS_LANGUAGE_MAKASAR = KBTS_FOURCC('M', 'K', 'R', ' '), + KBTS_LANGUAGE_MAKHUWA = KBTS_FOURCC('M', 'A', 'K', ' '), + KBTS_LANGUAGE_MAKONDE = KBTS_FOURCC('K', 'D', 'E', ' '), + KBTS_LANGUAGE_MALAGASY = KBTS_FOURCC('M', 'L', 'G', ' '), + KBTS_LANGUAGE_MALAY = KBTS_FOURCC('M', 'L', 'Y', ' '), + KBTS_LANGUAGE_MALAYALAM = KBTS_FOURCC('M', 'A', 'L', ' '), + KBTS_LANGUAGE_MALAYALAM_REFORMED = KBTS_FOURCC('M', 'L', 'R', ' '), + KBTS_LANGUAGE_MALE = KBTS_FOURCC('M', 'L', 'E', ' '), + KBTS_LANGUAGE_MALINKE = KBTS_FOURCC('M', 'L', 'N', ' '), + KBTS_LANGUAGE_MALTESE = KBTS_FOURCC('M', 'T', 'S', ' '), + KBTS_LANGUAGE_MAM = KBTS_FOURCC('M', 'A', 'M', ' '), + KBTS_LANGUAGE_MANCHU = KBTS_FOURCC('M', 'C', 'H', ' '), + KBTS_LANGUAGE_MANDAR = KBTS_FOURCC('M', 'D', 'R', ' '), + KBTS_LANGUAGE_MANDINKA = KBTS_FOURCC('M', 'N', 'D', ' '), + KBTS_LANGUAGE_MANINKA = KBTS_FOURCC('M', 'N', 'K', ' '), + KBTS_LANGUAGE_MANIPURI = KBTS_FOURCC('M', 'N', 'I', ' '), + KBTS_LANGUAGE_MANO = KBTS_FOURCC('M', 'E', 'V', ' '), + KBTS_LANGUAGE_MANSI = KBTS_FOURCC('M', 'A', 'N', ' '), + KBTS_LANGUAGE_MANX = KBTS_FOURCC('M', 'N', 'X', ' '), + KBTS_LANGUAGE_MAORI = KBTS_FOURCC('M', 'R', 'I', ' '), + KBTS_LANGUAGE_MAPUDUNGUN = KBTS_FOURCC('M', 'A', 'P', ' '), + KBTS_LANGUAGE_MARATHI = KBTS_FOURCC('M', 'A', 'R', ' '), + KBTS_LANGUAGE_MARSHALLESE = KBTS_FOURCC('M', 'A', 'H', ' '), + KBTS_LANGUAGE_MARWARI = KBTS_FOURCC('M', 'A', 'W', ' '), + KBTS_LANGUAGE_MAYAN = KBTS_FOURCC('M', 'Y', 'N', ' '), + KBTS_LANGUAGE_MAZANDERANI = KBTS_FOURCC('M', 'Z', 'N', ' '), + KBTS_LANGUAGE_MBEMBE_TIGON = KBTS_FOURCC('N', 'Z', 'A', ' '), + KBTS_LANGUAGE_MBO = KBTS_FOURCC('M', 'B', 'O', ' '), + KBTS_LANGUAGE_MBUNDU = KBTS_FOURCC('M', 'B', 'N', ' '), + KBTS_LANGUAGE_MEDUMBA = KBTS_FOURCC('B', 'Y', 'V', ' '), + KBTS_LANGUAGE_MEEN = KBTS_FOURCC('M', 'E', 'N', ' '), + KBTS_LANGUAGE_MENDE = KBTS_FOURCC('M', 'D', 'E', ' '), + KBTS_LANGUAGE_MERU = KBTS_FOURCC('M', 'E', 'R', ' '), + KBTS_LANGUAGE_MEWATI = KBTS_FOURCC('W', 'T', 'M', ' '), + KBTS_LANGUAGE_MINANGKABAU = KBTS_FOURCC('M', 'I', 'N', ' '), + KBTS_LANGUAGE_MINJANGBAL = KBTS_FOURCC('X', 'J', 'B', ' '), + KBTS_LANGUAGE_MIRANDESE = KBTS_FOURCC('M', 'W', 'L', ' '), + KBTS_LANGUAGE_MIZO = KBTS_FOURCC('M', 'I', 'Z', ' '), + KBTS_LANGUAGE_MOHAWK = KBTS_FOURCC('M', 'O', 'H', ' '), + KBTS_LANGUAGE_MOKSHA = KBTS_FOURCC('M', 'O', 'K', ' '), + KBTS_LANGUAGE_MOLDAVIAN = KBTS_FOURCC('M', 'O', 'L', ' '), + KBTS_LANGUAGE_MON = KBTS_FOURCC('M', 'O', 'N', ' '), + KBTS_LANGUAGE_MONGOLIAN = KBTS_FOURCC('M', 'N', 'G', ' '), + KBTS_LANGUAGE_MOOSE_CREE = KBTS_FOURCC('M', 'C', 'R', ' '), + KBTS_LANGUAGE_MORISYEN = KBTS_FOURCC('M', 'F', 'E', ' '), + KBTS_LANGUAGE_MOROCCAN = KBTS_FOURCC('M', 'O', 'R', ' '), + KBTS_LANGUAGE_MOSSI = KBTS_FOURCC('M', 'P', 'S', ' '), + KBTS_LANGUAGE_MUNDARI = KBTS_FOURCC('M', 'U', 'N', ' '), + KBTS_LANGUAGE_MUSCOGEE = KBTS_FOURCC('M', 'U', 'S', ' '), + KBTS_LANGUAGE_N_CREE = KBTS_FOURCC('N', 'C', 'R', ' '), + KBTS_LANGUAGE_NAGA_ASSAMESE = KBTS_FOURCC('N', 'A', 'G', ' '), + KBTS_LANGUAGE_NAGARI = KBTS_FOURCC('N', 'G', 'R', ' '), + KBTS_LANGUAGE_NAHUATL = KBTS_FOURCC('N', 'A', 'H', ' '), + KBTS_LANGUAGE_NANAI = KBTS_FOURCC('N', 'A', 'N', ' '), + KBTS_LANGUAGE_NASKAPI = KBTS_FOURCC('N', 'A', 'S', ' '), + KBTS_LANGUAGE_NAURUAN = KBTS_FOURCC('N', 'A', 'U', ' '), + KBTS_LANGUAGE_NAVAJO = KBTS_FOURCC('N', 'A', 'V', ' '), + KBTS_LANGUAGE_NDAU = KBTS_FOURCC('N', 'D', 'C', ' '), + KBTS_LANGUAGE_NDEBELE = KBTS_FOURCC('N', 'D', 'B', ' '), + KBTS_LANGUAGE_NDONGA = KBTS_FOURCC('N', 'D', 'G', ' '), + KBTS_LANGUAGE_NEAPOLITAN = KBTS_FOURCC('N', 'A', 'P', ' '), + KBTS_LANGUAGE_NEPALI = KBTS_FOURCC('N', 'E', 'P', ' '), + KBTS_LANGUAGE_NEWARI = KBTS_FOURCC('N', 'E', 'W', ' '), + KBTS_LANGUAGE_NGBAKA = KBTS_FOURCC('N', 'G', 'A', ' '), + KBTS_LANGUAGE_NIGERIAN_FULFULDE = KBTS_FOURCC('F', 'U', 'V', ' '), + KBTS_LANGUAGE_NIMADI = KBTS_FOURCC('N', 'O', 'E', ' '), + KBTS_LANGUAGE_NISI = KBTS_FOURCC('N', 'I', 'S', ' '), + KBTS_LANGUAGE_NIUEAN = KBTS_FOURCC('N', 'I', 'U', ' '), + KBTS_LANGUAGE_NKO = KBTS_FOURCC('N', 'K', 'O', ' '), + KBTS_LANGUAGE_NOGAI = KBTS_FOURCC('N', 'O', 'G', ' '), + KBTS_LANGUAGE_NORFOLK = KBTS_FOURCC('P', 'I', 'H', ' '), + KBTS_LANGUAGE_NORTH_SLAVEY = KBTS_FOURCC('S', 'C', 'S', ' '), + KBTS_LANGUAGE_NORTHERN_EMBERA = KBTS_FOURCC('E', 'M', 'P', ' '), + KBTS_LANGUAGE_NORTHERN_SAMI = KBTS_FOURCC('N', 'S', 'M', ' '), + KBTS_LANGUAGE_NORTHERN_SOTHO = KBTS_FOURCC('N', 'S', 'O', ' '), + KBTS_LANGUAGE_NORTHERN_TAI = KBTS_FOURCC('N', 'T', 'A', ' '), + KBTS_LANGUAGE_NORWAY_HOUSE_CREE = KBTS_FOURCC('N', 'H', 'C', ' '), + KBTS_LANGUAGE_NORWEGIAN = KBTS_FOURCC('N', 'O', 'R', ' '), + KBTS_LANGUAGE_NORWEGIAN_NYNORSK = KBTS_FOURCC('N', 'Y', 'N', ' '), + KBTS_LANGUAGE_NOVIAL = KBTS_FOURCC('N', 'O', 'V', ' '), + KBTS_LANGUAGE_NUMANGGANG = KBTS_FOURCC('N', 'O', 'P', ' '), + KBTS_LANGUAGE_NUNAVIK_INUKTITUT = KBTS_FOURCC('I', 'N', 'U', ' '), + KBTS_LANGUAGE_NUU_CHAH_NULTH = KBTS_FOURCC('N', 'U', 'K', ' '), + KBTS_LANGUAGE_NYAMWEZI = KBTS_FOURCC('N', 'Y', 'M', ' '), + KBTS_LANGUAGE_NYANKOLE = KBTS_FOURCC('N', 'K', 'L', ' '), + KBTS_LANGUAGE_OCCITAN = KBTS_FOURCC('O', 'C', 'I', ' '), + KBTS_LANGUAGE_ODIA = KBTS_FOURCC('O', 'R', 'I', ' '), + KBTS_LANGUAGE_OJI_CREE = KBTS_FOURCC('O', 'C', 'R', ' '), + KBTS_LANGUAGE_OJIBWAY = KBTS_FOURCC('O', 'J', 'B', ' '), + KBTS_LANGUAGE_OLD_IRISH = KBTS_FOURCC('S', 'G', 'A', ' '), + KBTS_LANGUAGE_OLD_JAVANESE = KBTS_FOURCC('K', 'A', 'W', ' '), + KBTS_LANGUAGE_ONEIDA = KBTS_FOURCC('O', 'N', 'E', ' '), + KBTS_LANGUAGE_ONONDAGA = KBTS_FOURCC('O', 'N', 'O', ' '), + KBTS_LANGUAGE_OROMO = KBTS_FOURCC('O', 'R', 'O', ' '), + KBTS_LANGUAGE_OSSETIAN = KBTS_FOURCC('O', 'S', 'S', ' '), + KBTS_LANGUAGE_PA_O_KAREN = KBTS_FOURCC('B', 'L', 'K', ' '), + KBTS_LANGUAGE_PALAUAN = KBTS_FOURCC('P', 'A', 'U', ' '), + KBTS_LANGUAGE_PALAUNG = KBTS_FOURCC('P', 'L', 'G', ' '), + KBTS_LANGUAGE_PALESTINIAN_ARAMAIC = KBTS_FOURCC('P', 'A', 'A', ' '), + KBTS_LANGUAGE_PALI = KBTS_FOURCC('P', 'A', 'L', ' '), + KBTS_LANGUAGE_PALPA = KBTS_FOURCC('P', 'A', 'P', ' '), + KBTS_LANGUAGE_PAMPANGAN = KBTS_FOURCC('P', 'A', 'M', ' '), + KBTS_LANGUAGE_PANGASINAN = KBTS_FOURCC('P', 'A', 'G', ' '), + KBTS_LANGUAGE_PAPIAMENTU = KBTS_FOURCC('P', 'A', 'P', '0'), + KBTS_LANGUAGE_PASHTO = KBTS_FOURCC('P', 'A', 'S', ' '), + KBTS_LANGUAGE_PATTANI_MALAY = KBTS_FOURCC('M', 'F', 'A', ' '), + KBTS_LANGUAGE_PENNSYLVANIA_GERMAN = KBTS_FOURCC('P', 'D', 'C', ' '), + KBTS_LANGUAGE_PERSIAN = KBTS_FOURCC('F', 'A', 'R', ' '), + KBTS_LANGUAGE_PHAKE = KBTS_FOURCC('P', 'J', 'K', ' '), + KBTS_LANGUAGE_PICARD = KBTS_FOURCC('P', 'C', 'D', ' '), + KBTS_LANGUAGE_PIEMONTESE = KBTS_FOURCC('P', 'M', 'S', ' '), + KBTS_LANGUAGE_PILAGA = KBTS_FOURCC('P', 'L', 'G', ' '), + KBTS_LANGUAGE_PITE_SAMI = KBTS_FOURCC('S', 'J', 'E', ' '), + KBTS_LANGUAGE_POCOMCHI = KBTS_FOURCC('P', 'O', 'H', ' '), + KBTS_LANGUAGE_POHNPEIAN = KBTS_FOURCC('P', 'O', 'N', ' '), + KBTS_LANGUAGE_POLISH = KBTS_FOURCC('P', 'L', 'K', ' '), + KBTS_LANGUAGE_POLYTONIC_GREEK = KBTS_FOURCC('P', 'G', 'R', ' '), + KBTS_LANGUAGE_PORTUGUESE = KBTS_FOURCC('P', 'T', 'G', ' '), + KBTS_LANGUAGE_PROVENCAL = KBTS_FOURCC('P', 'R', 'O', ' '), + KBTS_LANGUAGE_PUNJABI = KBTS_FOURCC('P', 'A', 'N', ' '), + KBTS_LANGUAGE_QUECHUA = KBTS_FOURCC('Q', 'U', 'Z', ' '), + KBTS_LANGUAGE_QUECHUA_BOLIVIA = KBTS_FOURCC('Q', 'U', 'H', ' '), + KBTS_LANGUAGE_QUECHUA_ECUADOR = KBTS_FOURCC('Q', 'V', 'I', ' '), + KBTS_LANGUAGE_QUECHUA_PERU = KBTS_FOURCC('Q', 'W', 'H', ' '), + KBTS_LANGUAGE_R_CREE = KBTS_FOURCC('R', 'C', 'R', ' '), + KBTS_LANGUAGE_RAJASTHANI = KBTS_FOURCC('R', 'A', 'J', ' '), + KBTS_LANGUAGE_RAKHINE = KBTS_FOURCC('A', 'R', 'K', ' '), + KBTS_LANGUAGE_RAROTONGAN = KBTS_FOURCC('R', 'A', 'R', ' '), + KBTS_LANGUAGE_REJANG = KBTS_FOURCC('R', 'E', 'J', ' '), + KBTS_LANGUAGE_RIANG = KBTS_FOURCC('R', 'I', 'A', ' '), + KBTS_LANGUAGE_RIPUARIAN = KBTS_FOURCC('K', 'S', 'H', ' '), + KBTS_LANGUAGE_RITARUNGO = KBTS_FOURCC('R', 'I', 'T', ' '), + KBTS_LANGUAGE_ROHINGYA = KBTS_FOURCC('R', 'H', 'G', ' '), + KBTS_LANGUAGE_ROMANIAN = KBTS_FOURCC('R', 'O', 'M', ' '), + KBTS_LANGUAGE_ROMANSH = KBTS_FOURCC('R', 'M', 'S', ' '), + KBTS_LANGUAGE_ROMANY = KBTS_FOURCC('R', 'O', 'Y', ' '), + KBTS_LANGUAGE_ROTUMAN = KBTS_FOURCC('R', 'T', 'M', ' '), + KBTS_LANGUAGE_RUNDI = KBTS_FOURCC('R', 'U', 'N', ' '), + KBTS_LANGUAGE_RUSSIAN = KBTS_FOURCC('R', 'U', 'S', ' '), + KBTS_LANGUAGE_RUSSIAN_BURIAT = KBTS_FOURCC('R', 'B', 'U', ' '), + KBTS_LANGUAGE_RUSYN = KBTS_FOURCC('R', 'S', 'Y', ' '), + KBTS_LANGUAGE_SADRI = KBTS_FOURCC('S', 'A', 'D', ' '), + KBTS_LANGUAGE_SAKHA = KBTS_FOURCC('Y', 'A', 'K', ' '), + KBTS_LANGUAGE_SAMOAN = KBTS_FOURCC('S', 'M', 'O', ' '), + KBTS_LANGUAGE_SAMOGITIAN = KBTS_FOURCC('S', 'G', 'S', ' '), + KBTS_LANGUAGE_SAN_BLAS_KUNA = KBTS_FOURCC('C', 'U', 'K', ' '), + KBTS_LANGUAGE_SANGO = KBTS_FOURCC('S', 'G', 'O', ' '), + KBTS_LANGUAGE_SANSKRIT = KBTS_FOURCC('S', 'A', 'N', ' '), + KBTS_LANGUAGE_SANTALI = KBTS_FOURCC('S', 'A', 'T', ' '), + KBTS_LANGUAGE_SARAIKI = KBTS_FOURCC('S', 'R', 'K', ' '), + KBTS_LANGUAGE_SARDINIAN = KBTS_FOURCC('S', 'R', 'D', ' '), + KBTS_LANGUAGE_SASAK = KBTS_FOURCC('S', 'A', 'S', ' '), + KBTS_LANGUAGE_SATERLAND_FRISIAN = KBTS_FOURCC('S', 'T', 'Q', ' '), + KBTS_LANGUAGE_SAYISI = KBTS_FOURCC('S', 'A', 'Y', ' '), + KBTS_LANGUAGE_SCOTS = KBTS_FOURCC('S', 'C', 'I', ' '), + KBTS_LANGUAGE_SCOTTISH_GAELIC = KBTS_FOURCC('G', 'A', 'E', ' '), + KBTS_LANGUAGE_SEKOTA = KBTS_FOURCC('S', 'E', 'J', ' '), + KBTS_LANGUAGE_SELKUP = KBTS_FOURCC('S', 'E', 'L', ' '), + KBTS_LANGUAGE_SENA = KBTS_FOURCC('S', 'N', 'A', ' '), + KBTS_LANGUAGE_SENECA = KBTS_FOURCC('S', 'E', 'E', ' '), + KBTS_LANGUAGE_SERBIAN = KBTS_FOURCC('S', 'R', 'B', ' '), + KBTS_LANGUAGE_SERER = KBTS_FOURCC('S', 'R', 'R', ' '), + KBTS_LANGUAGE_SGAW_KAREN = KBTS_FOURCC('K', 'S', 'W', ' '), + KBTS_LANGUAGE_SHAN = KBTS_FOURCC('S', 'H', 'N', ' '), + KBTS_LANGUAGE_SHONA = KBTS_FOURCC('S', 'N', 'A', ' '), + KBTS_LANGUAGE_SIBE = KBTS_FOURCC('S', 'I', 'B', ' '), + KBTS_LANGUAGE_SICILIAN = KBTS_FOURCC('S', 'C', 'N', ' '), + KBTS_LANGUAGE_SIDAMO = KBTS_FOURCC('S', 'I', 'D', ' '), + KBTS_LANGUAGE_SILESIAN = KBTS_FOURCC('S', 'Z', 'L', ' '), + KBTS_LANGUAGE_SILTE_GURAGE = KBTS_FOURCC('S', 'I', 'G', ' '), + KBTS_LANGUAGE_SINDHI = KBTS_FOURCC('S', 'N', 'D', ' '), + KBTS_LANGUAGE_SINHALA = KBTS_FOURCC('S', 'N', 'H', ' '), + KBTS_LANGUAGE_SKOLT_SAMI = KBTS_FOURCC('S', 'K', 'S', ' '), + KBTS_LANGUAGE_SLAVEY = KBTS_FOURCC('S', 'L', 'A', ' '), + KBTS_LANGUAGE_SLOVAK = KBTS_FOURCC('S', 'K', 'Y', ' '), + KBTS_LANGUAGE_SLOVENIAN = KBTS_FOURCC('S', 'L', 'V', ' '), + KBTS_LANGUAGE_SMALL_FLOWERY_MIAO = KBTS_FOURCC('S', 'F', 'M', ' '), + KBTS_LANGUAGE_SODO_GURAGE = KBTS_FOURCC('S', 'O', 'G', ' '), + KBTS_LANGUAGE_SOGA = KBTS_FOURCC('X', 'O', 'G', ' '), + KBTS_LANGUAGE_SOMALI = KBTS_FOURCC('S', 'M', 'L', ' '), + KBTS_LANGUAGE_SONGE = KBTS_FOURCC('S', 'O', 'P', ' '), + KBTS_LANGUAGE_SONINKE = KBTS_FOURCC('S', 'N', 'K', ' '), + KBTS_LANGUAGE_SOUTH_SLAVEY = KBTS_FOURCC('S', 'S', 'L', ' '), + KBTS_LANGUAGE_SOUTHERN_KIWAI = KBTS_FOURCC('K', 'J', 'D', ' '), + KBTS_LANGUAGE_SOUTHERN_SAMI = KBTS_FOURCC('S', 'S', 'M', ' '), + KBTS_LANGUAGE_SOUTHERN_SOTHO = KBTS_FOURCC('S', 'O', 'T', ' '), + KBTS_LANGUAGE_SPANISH = KBTS_FOURCC('E', 'S', 'P', ' '), + KBTS_LANGUAGE_STANDARD_MOROCCAN_TAMAZIGHT = KBTS_FOURCC('Z', 'G', 'H', ' '), + KBTS_LANGUAGE_STRAITS_SALISH = KBTS_FOURCC('S', 'T', 'R', ' '), + KBTS_LANGUAGE_SUKUMA = KBTS_FOURCC('S', 'U', 'K', ' '), + KBTS_LANGUAGE_SUNDANESE = KBTS_FOURCC('S', 'U', 'N', ' '), + KBTS_LANGUAGE_SURI = KBTS_FOURCC('S', 'U', 'R', ' '), + KBTS_LANGUAGE_SUTU = KBTS_FOURCC('S', 'X', 'T', ' '), + KBTS_LANGUAGE_SVAN = KBTS_FOURCC('S', 'V', 'A', ' '), + KBTS_LANGUAGE_SWADAYA_ARAMAIC = KBTS_FOURCC('S', 'W', 'A', ' '), + KBTS_LANGUAGE_SWAHILI = KBTS_FOURCC('S', 'W', 'K', ' '), + KBTS_LANGUAGE_SWATI = KBTS_FOURCC('S', 'W', 'Z', ' '), + KBTS_LANGUAGE_SWEDISH = KBTS_FOURCC('S', 'V', 'E', ' '), + KBTS_LANGUAGE_SYLHETI = KBTS_FOURCC('S', 'Y', 'L', ' '), + KBTS_LANGUAGE_SYRIAC = KBTS_FOURCC('S', 'Y', 'R', ' '), + KBTS_LANGUAGE_SYRIAC_EASTERN = KBTS_FOURCC('S', 'Y', 'R', 'N'), + KBTS_LANGUAGE_SYRIAC_ESTRANGELA = KBTS_FOURCC('S', 'Y', 'R', 'E'), + KBTS_LANGUAGE_SYRIAC_WESTERN = KBTS_FOURCC('S', 'Y', 'R', 'J'), + KBTS_LANGUAGE_TABASARAN = KBTS_FOURCC('T', 'A', 'B', ' '), + KBTS_LANGUAGE_TACHELHIT = KBTS_FOURCC('S', 'H', 'I', ' '), + KBTS_LANGUAGE_TAGALOG = KBTS_FOURCC('T', 'G', 'L', ' '), + KBTS_LANGUAGE_TAHAGGART_TAMAHAQ = KBTS_FOURCC('T', 'H', 'V', ' '), + KBTS_LANGUAGE_TAHITIAN = KBTS_FOURCC('T', 'H', 'T', ' '), + KBTS_LANGUAGE_TAI_LAING = KBTS_FOURCC('T', 'J', 'L', ' '), + KBTS_LANGUAGE_TAJIKI = KBTS_FOURCC('T', 'A', 'J', ' '), + KBTS_LANGUAGE_TALYSH = KBTS_FOURCC('T', 'L', 'Y', ' '), + KBTS_LANGUAGE_TAMASHEK = KBTS_FOURCC('T', 'M', 'H', ' '), + KBTS_LANGUAGE_TAMASHEQ = KBTS_FOURCC('T', 'A', 'Q', ' '), + KBTS_LANGUAGE_TAMAZIGHT = KBTS_FOURCC('T', 'Z', 'M', ' '), + KBTS_LANGUAGE_TAMIL = KBTS_FOURCC('T', 'A', 'M', ' '), + KBTS_LANGUAGE_TARIFIT = KBTS_FOURCC('R', 'I', 'F', ' '), + KBTS_LANGUAGE_TATAR = KBTS_FOURCC('T', 'A', 'T', ' '), + KBTS_LANGUAGE_TAWALLAMMAT_TAMAJAQ = KBTS_FOURCC('T', 'T', 'Q', ' '), + KBTS_LANGUAGE_TAY = KBTS_FOURCC('T', 'Y', 'Z', ' '), + KBTS_LANGUAGE_TAYART_TAMAJEQ = KBTS_FOURCC('T', 'H', 'Z', ' '), + KBTS_LANGUAGE_TELUGU = KBTS_FOURCC('T', 'E', 'L', ' '), + KBTS_LANGUAGE_TEMNE = KBTS_FOURCC('T', 'M', 'N', ' '), + KBTS_LANGUAGE_TETUM = KBTS_FOURCC('T', 'E', 'T', ' '), + KBTS_LANGUAGE_TH_CREE = KBTS_FOURCC('T', 'C', 'R', ' '), + KBTS_LANGUAGE_THAI = KBTS_FOURCC('T', 'H', 'A', ' '), + KBTS_LANGUAGE_THAILAND_MON = KBTS_FOURCC('M', 'O', 'N', 'T'), + KBTS_LANGUAGE_THOMPSON = KBTS_FOURCC('T', 'H', 'P', ' '), + KBTS_LANGUAGE_TIBETAN = KBTS_FOURCC('T', 'I', 'B', ' '), + KBTS_LANGUAGE_TIGRE = KBTS_FOURCC('T', 'G', 'R', ' '), + KBTS_LANGUAGE_TIGRINYA = KBTS_FOURCC('T', 'G', 'Y', ' '), + KBTS_LANGUAGE_TIV = KBTS_FOURCC('T', 'I', 'V', ' '), + KBTS_LANGUAGE_TLINGIT = KBTS_FOURCC('T', 'L', 'I', ' '), + KBTS_LANGUAGE_TOBO = KBTS_FOURCC('T', 'B', 'V', ' '), + KBTS_LANGUAGE_TODO = KBTS_FOURCC('T', 'O', 'D', ' '), + KBTS_LANGUAGE_TOK_PISIN = KBTS_FOURCC('T', 'P', 'I', ' '), + KBTS_LANGUAGE_TOMA = KBTS_FOURCC('T', 'O', 'D', '0'), + KBTS_LANGUAGE_TONGA = KBTS_FOURCC('T', 'N', 'G', ' '), + KBTS_LANGUAGE_TONGAN = KBTS_FOURCC('T', 'G', 'N', ' '), + KBTS_LANGUAGE_TORKI = KBTS_FOURCC('A', 'Z', 'B', ' '), + KBTS_LANGUAGE_TSHANGLA = KBTS_FOURCC('T', 'S', 'J', ' '), + KBTS_LANGUAGE_TSONGA = KBTS_FOURCC('T', 'S', 'G', ' '), + KBTS_LANGUAGE_TSWANA = KBTS_FOURCC('T', 'N', 'A', ' '), + KBTS_LANGUAGE_TULU = KBTS_FOURCC('T', 'U', 'L', ' '), + KBTS_LANGUAGE_TUMBUKA = KBTS_FOURCC('T', 'U', 'M', ' '), + KBTS_LANGUAGE_TUNDRA_ENETS = KBTS_FOURCC('T', 'N', 'E', ' '), + KBTS_LANGUAGE_TURKISH = KBTS_FOURCC('T', 'R', 'K', ' '), + KBTS_LANGUAGE_TURKMEN = KBTS_FOURCC('T', 'K', 'M', ' '), + KBTS_LANGUAGE_TUROYO_ARAMAIC = KBTS_FOURCC('T', 'U', 'A', ' '), + KBTS_LANGUAGE_TUSCARORA = KBTS_FOURCC('T', 'U', 'S', ' '), + KBTS_LANGUAGE_TUVALU = KBTS_FOURCC('T', 'V', 'L', ' '), + KBTS_LANGUAGE_TUVIN = KBTS_FOURCC('T', 'U', 'V', ' '), + KBTS_LANGUAGE_TWI = KBTS_FOURCC('T', 'W', 'I', ' '), + KBTS_LANGUAGE_TZOTZIL = KBTS_FOURCC('T', 'Z', 'O', ' '), + KBTS_LANGUAGE_UDI = KBTS_FOURCC('U', 'D', 'I', ' '), + KBTS_LANGUAGE_UDMURT = KBTS_FOURCC('U', 'D', 'M', ' '), + KBTS_LANGUAGE_UKRAINIAN = KBTS_FOURCC('U', 'K', 'R', ' '), + KBTS_LANGUAGE_UMBUNDU = KBTS_FOURCC('U', 'M', 'B', ' '), + KBTS_LANGUAGE_UME_SAMI = KBTS_FOURCC('S', 'J', 'U', ' '), + KBTS_LANGUAGE_UPPER_SAXON = KBTS_FOURCC('S', 'X', 'U', ' '), + KBTS_LANGUAGE_UPPER_SORBIAN = KBTS_FOURCC('U', 'S', 'B', ' '), + KBTS_LANGUAGE_URALIC_PHONETIC = KBTS_FOURCC('U', 'P', 'P', ' '), + KBTS_LANGUAGE_URDU = KBTS_FOURCC('U', 'R', 'D', ' '), + KBTS_LANGUAGE_UYGHUR = KBTS_FOURCC('U', 'Y', 'G', ' '), + KBTS_LANGUAGE_UZBEK = KBTS_FOURCC('U', 'Z', 'B', ' '), + KBTS_LANGUAGE_VENDA = KBTS_FOURCC('V', 'E', 'N', ' '), + KBTS_LANGUAGE_VENETIAN = KBTS_FOURCC('V', 'E', 'C', ' '), + KBTS_LANGUAGE_VIETNAMESE = KBTS_FOURCC('V', 'I', 'T', ' '), + KBTS_LANGUAGE_VLAX_ROMANI = KBTS_FOURCC('R', 'M', 'Y', ' '), + KBTS_LANGUAGE_VOLAPUK = KBTS_FOURCC('V', 'O', 'L', ' '), + KBTS_LANGUAGE_VORO = KBTS_FOURCC('V', 'R', 'O', ' '), + KBTS_LANGUAGE_WA = KBTS_FOURCC('W', 'A', ' ', ' '), + KBTS_LANGUAGE_WACI_GBE = KBTS_FOURCC('W', 'C', 'I', ' '), + KBTS_LANGUAGE_WAGDI = KBTS_FOURCC('W', 'A', 'G', ' '), + KBTS_LANGUAGE_WAKHI = KBTS_FOURCC('W', 'B', 'L', ' '), + KBTS_LANGUAGE_WALLOON = KBTS_FOURCC('W', 'L', 'N', ' '), + KBTS_LANGUAGE_WARAY_WARAY = KBTS_FOURCC('W', 'A', 'R', ' '), + KBTS_LANGUAGE_WAYANAD_CHETTI = KBTS_FOURCC('C', 'T', 'T', ' '), + KBTS_LANGUAGE_WAYUU = KBTS_FOURCC('G', 'U', 'C', ' '), + KBTS_LANGUAGE_WELSH = KBTS_FOURCC('W', 'E', 'L', ' '), + KBTS_LANGUAGE_WENDAT = KBTS_FOURCC('W', 'D', 'T', ' '), + KBTS_LANGUAGE_WEST_CREE = KBTS_FOURCC('W', 'C', 'R', ' '), + KBTS_LANGUAGE_WESTERN_CHAM = KBTS_FOURCC('C', 'J', 'A', ' '), + KBTS_LANGUAGE_WESTERN_KAYAH = KBTS_FOURCC('K', 'Y', 'U', ' '), + KBTS_LANGUAGE_WESTERN_PANJABI = KBTS_FOURCC('P', 'N', 'B', ' '), + KBTS_LANGUAGE_WESTERN_PWO_KAREN = KBTS_FOURCC('P', 'W', 'O', ' '), + KBTS_LANGUAGE_WOLOF = KBTS_FOURCC('W', 'L', 'F', ' '), + KBTS_LANGUAGE_WOODS_CREE = KBTS_FOURCC('D', 'C', 'R', ' '), + KBTS_LANGUAGE_WUDING_LUQUAN_YI = KBTS_FOURCC('Y', 'W', 'Q', ' '), + KBTS_LANGUAGE_WYANDOT = KBTS_FOURCC('W', 'Y', 'N', ' '), + KBTS_LANGUAGE_XHOSA = KBTS_FOURCC('X', 'H', 'S', ' '), + KBTS_LANGUAGE_Y_CREE = KBTS_FOURCC('Y', 'C', 'R', ' '), + KBTS_LANGUAGE_YAO = KBTS_FOURCC('Y', 'A', 'O', ' '), + KBTS_LANGUAGE_YAPESE = KBTS_FOURCC('Y', 'A', 'P', ' '), + KBTS_LANGUAGE_YI_CLASSIC = KBTS_FOURCC('Y', 'I', 'C', ' '), + KBTS_LANGUAGE_YI_MODERN = KBTS_FOURCC('Y', 'I', 'M', ' '), + KBTS_LANGUAGE_YIDDISH = KBTS_FOURCC('J', 'I', 'I', ' '), + KBTS_LANGUAGE_YORUBA = KBTS_FOURCC('Y', 'B', 'A', ' '), + KBTS_LANGUAGE_ZAMBOANGA_CHAVACANO = KBTS_FOURCC('C', 'B', 'K', ' '), + KBTS_LANGUAGE_ZANDE = KBTS_FOURCC('Z', 'N', 'D', ' '), + KBTS_LANGUAGE_ZARMA = KBTS_FOURCC('D', 'J', 'R', ' '), + KBTS_LANGUAGE_ZAZAKI = KBTS_FOURCC('Z', 'Z', 'A', ' '), + KBTS_LANGUAGE_ZEALANDIC = KBTS_FOURCC('Z', 'E', 'A', ' '), + KBTS_LANGUAGE_ZHUANG = KBTS_FOURCC('Z', 'H', 'A', ' '), + KBTS_LANGUAGE_ZULU = KBTS_FOURCC('Z', 'U', 'L', ' '), +}; + +typedef kbts_u32 kbts_break_flags; +enum kbts_break_flags_enum +{ + // Direction changes from left-to-right to right-to-left, or vice versa. + KBTS_BREAK_FLAG_DIRECTION = 1 << 0, + // Script changes. + // Note that some characters, such as digits, are used in multiple + // scripts and, as such, will not produce script breaks. + KBTS_BREAK_FLAG_SCRIPT = 1 << 1, + // Graphemes are "visual units". They may be composed of more than one codepoint. + // They are used as interaction boundaries in graphical interfaces, e.g. moving the + // caret. + KBTS_BREAK_FLAG_GRAPHEME = 1 << 2, + // In most scripts, words are broken up by whitespace, but Unicode word breaking has + // better script coverage and also handles some special cases that a simple stateless + // loop cannot handle. + KBTS_BREAK_FLAG_WORD = 1 << 3, + // By default, you are not allowed to break a line. + // Soft line breaks allow for line breaking, but do not require it. + // This is useful for when you are doing line wrapping. + KBTS_BREAK_FLAG_LINE_SOFT = 1 << 4, + // Hard line breaks are required. They signal the end of a paragraph. + // (In Unicode, there is no meaningful distinction between a line and a paragraph. + // a paragraph is pretty much just a line of text that can wrap.) + KBTS_BREAK_FLAG_LINE_HARD = 1 << 5, + + KBTS_BREAK_FLAG_LINE = KBTS_BREAK_FLAG_LINE_SOFT | KBTS_BREAK_FLAG_LINE_HARD, + KBTS_BREAK_FLAG_ANY = KBTS_BREAK_FLAG_DIRECTION | KBTS_BREAK_FLAG_SCRIPT | KBTS_BREAK_FLAG_GRAPHEME | KBTS_BREAK_FLAG_WORD | KBTS_BREAK_FLAG_LINE_SOFT | KBTS_BREAK_FLAG_LINE_HARD, +}; + +typedef kbts_u8 kbts_op_kind; +enum kbts_op_kind_enum +{ + KBTS_OP_KIND_END, + + // Substitution ops. + KBTS_OP_KIND_PRE_NORMALIZE_DOTTED_CIRCLES, + KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_NORMALIZE_HANGUL, + KBTS_OP_KIND_FLAG_JOINING_LETTERS, + KBTS_OP_KIND_GSUB_FEATURES, + + // Positioning ops. + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, + + KBTS_OP_KIND_POST_GPOS_FIXUP, + KBTS_OP_KIND_STCH_POSTPASS, + + KBTS_OP_KIND_COUNT, +}; + +typedef kbts_u32 kbts_glyph_flags; +enum kbts_glyph_flags_enum +{ + // These feature flags must coincide with kbts_joining_feature _and_ KBTS_FEATURE_FLAG! + KBTS_GLYPH_FLAG_ISOL = (1 << 0), + KBTS_GLYPH_FLAG_FINA = (1 << 1), + KBTS_GLYPH_FLAG_FIN2 = (1 << 2), + KBTS_GLYPH_FLAG_FIN3 = (1 << 3), + KBTS_GLYPH_FLAG_MEDI = (1 << 4), + KBTS_GLYPH_FLAG_MED2 = (1 << 5), + KBTS_GLYPH_FLAG_INIT = (1 << 6), + + // These feature flags must coincide with FEATURE_FLAG! + KBTS_GLYPH_FLAG_LJMO = (1 << 7), + KBTS_GLYPH_FLAG_VJMO = (1 << 8), + KBTS_GLYPH_FLAG_TJMO = (1 << 9), + KBTS_GLYPH_FLAG_RPHF = (1 << 10), + KBTS_GLYPH_FLAG_BLWF = (1 << 11), + KBTS_GLYPH_FLAG_HALF = (1 << 12), + KBTS_GLYPH_FLAG_PSTF = (1 << 13), + KBTS_GLYPH_FLAG_ABVF = (1 << 14), + KBTS_GLYPH_FLAG_PREF = (1 << 15), + KBTS_GLYPH_FLAG_NUMR = (1 << 16), + KBTS_GLYPH_FLAG_FRAC = (1 << 17), + KBTS_GLYPH_FLAG_DNOM = (1 << 18), + KBTS_GLYPH_FLAG_CFAR = (1 << 19), + + // These can be anything. + KBTS_GLYPH_FLAG_DO_NOT_DECOMPOSE = (1 << 21), + KBTS_GLYPH_FLAG_FIRST_IN_MULTIPLE_SUBSTITUTION = (1 << 22), + KBTS_GLYPH_FLAG_NO_BREAK = (1 << 23), + KBTS_GLYPH_FLAG_CURSIVE = (1 << 24), + KBTS_GLYPH_FLAG_GENERATED_BY_GSUB = (1 << 25), + KBTS_GLYPH_FLAG_USED_IN_GPOS = (1 << 26), + + KBTS_GLYPH_FLAG_STCH_ENDPOINT = (1 << 27), + KBTS_GLYPH_FLAG_STCH_EXTENSION = (1 << 28), + + KBTS_GLYPH_FLAG_LIGATURE = (1 << 29), + KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION = (1 << 30), +}; +#define KBTS_GLYPH_FEATURE_MASK ((KBTS_GLYPH_FLAG_CFAR << 1) - 1) +// In USE, glyphs are mostly not pre-flagged for feature application. +// However, we do want to flag rphf/pref results for reordering, so we want to +// keep all of the flags as usual, and only use these feature flags for filtering. +#define KBTS_USE_GLYPH_FEATURE_MASK (((KBTS_GLYPH_FLAG_INIT << 1) - 1) | KBTS_GLYPH_FLAG_NUMR | KBTS_GLYPH_FLAG_DNOM | KBTS_GLYPH_FLAG_FRAC) +#define KBTS_JOINING_FEATURE_MASK (KBTS_GLYPH_FLAG_ISOL | KBTS_GLYPH_FLAG_FINA | KBTS_GLYPH_FLAG_FIN2 | KBTS_GLYPH_FLAG_FIN3 | KBTS_GLYPH_FLAG_MEDI | KBTS_GLYPH_FLAG_MED2 | KBTS_GLYPH_FLAG_INIT) +#define KBTS_JOINING_FEATURE_TO_GLYPH_FLAG(Feature) (1 << ((Feature) - 1)) + +// Japanese text contains "kinsoku" characters, around which breaking a line is forbidden. +// Exactly which characters are "kinsoku" or not depends on the context: +// - Strict style has the largest amount of kinsoku characters, which leads to longer lines. +// - Loose style has the smallest amount of kinsoku characters, which leads to smaller lines. +// - Normal style is somewhere in the middle. +// Note that, while the Unicode standard mentions all three of these styles, it does not mention +// any differences between the normal and loose styles. +// As such, normal and loose styles currently behave the same. +typedef kbts_u8 kbts_japanese_line_break_style; +enum kbts_japanese_line_break_style_enum +{ + // The Unicode standard does not define what strict style is used for. + // Supposedly, it is used for anything that does not fall into the other two categories of text. + KBTS_JAPANESE_LINE_BREAK_STYLE_STRICT, + + // Normal style is used for books and documents. + KBTS_JAPANESE_LINE_BREAK_STYLE_NORMAL, + + // Loose style is used for newspapers, and (I assume) any other narrow column format. + KBTS_JAPANESE_LINE_BREAK_STYLE_LOOSE, + + KBTS_JAPANESE_LINE_BREAK_STYLE_COUNT, +}; + +typedef kbts_u32 kbts_orientation; +enum kbts_orientation_enum +{ + KBTS_ORIENTATION_HORIZONTAL, + KBTS_ORIENTATION_VERTICAL, + + KBTS_ORIENTATION_COUNT, +}; + +typedef kbts_u32 kbts_direction; +enum kbts_direction_enum +{ + KBTS_DIRECTION_NONE, + KBTS_DIRECTION_LTR, + KBTS_DIRECTION_RTL, + + KBTS_DIRECTION_COUNT, +}; + +typedef kbts_u8 kbts_unicode_joining_type; +enum kbts_unicode_joining_type_enum +{ + KBTS_UNICODE_JOINING_TYPE_NONE, + KBTS_UNICODE_JOINING_TYPE_LEFT, + KBTS_UNICODE_JOINING_TYPE_DUAL, + KBTS_UNICODE_JOINING_TYPE_FORCE, + KBTS_UNICODE_JOINING_TYPE_RIGHT, + KBTS_UNICODE_JOINING_TYPE_TRANSPARENT, + KBTS_UNICODE_JOINING_TYPE_COUNT, +}; + +typedef kbts_u8 kbts_unicode_flags; +enum kbts_unicode_flag_enum +{ + KBTS_UNICODE_FLAG_MODIFIER_COMBINING_MARK = (1 << 0), + KBTS_UNICODE_FLAG_DEFAULT_IGNORABLE = (1 << 1), + KBTS_UNICODE_FLAG_OPEN_BRACKET = (1 << 2), + KBTS_UNICODE_FLAG_CLOSE_BRACKET = (1 << 3), + KBTS_UNICODE_FLAG_PART_OF_WORD = (1 << 4), + KBTS_UNICODE_FLAG_DECIMAL_DIGIT = (1 << 5), + KBTS_UNICODE_FLAG_NON_SPACING_MARK = (1 << 6), +}; + +typedef kbts_u8 kbts_unicode_bidirectional_class; +enum kbts_unicode_bidirectional_class_enum +{ + KBTS_UNICODE_BIDIRECTIONAL_CLASS_NI, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_L, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_R, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_NSM, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_AL, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_ES, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_ET, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_CS, + KBTS_UNICODE_BIDIRECTIONAL_CLASS_COUNT, +}; + +typedef kbts_u8 kbts_line_break_class; +enum kbts_line_break_class_enum +{ + /* 0 */ KBTS_LINE_BREAK_CLASS_Onea, + /* 1 */ KBTS_LINE_BREAK_CLASS_Oea, + /* 2 */ KBTS_LINE_BREAK_CLASS_Ope, + /* 3 */ KBTS_LINE_BREAK_CLASS_BK, + /* 4 */ KBTS_LINE_BREAK_CLASS_CR, + /* 5 */ KBTS_LINE_BREAK_CLASS_LF, + /* 6 */ KBTS_LINE_BREAK_CLASS_NL, + /* 7 */ KBTS_LINE_BREAK_CLASS_SP, + /* 8 */ KBTS_LINE_BREAK_CLASS_ZW, + /* 9 */ KBTS_LINE_BREAK_CLASS_WJ, + /* 10 */ KBTS_LINE_BREAK_CLASS_GLnea, + /* 11 */ KBTS_LINE_BREAK_CLASS_GLea, + /* 12 */ KBTS_LINE_BREAK_CLASS_CLnea, + /* 13 */ KBTS_LINE_BREAK_CLASS_CLea, + /* 14 */ KBTS_LINE_BREAK_CLASS_CPnea, + /* 15 */ KBTS_LINE_BREAK_CLASS_CPea, + /* 16 */ KBTS_LINE_BREAK_CLASS_EXnea, + /* 17 */ KBTS_LINE_BREAK_CLASS_EXea, + /* 18 */ KBTS_LINE_BREAK_CLASS_SY, + /* 19 */ KBTS_LINE_BREAK_CLASS_BAnea, + /* 20 */ KBTS_LINE_BREAK_CLASS_BAea, + /* 21 */ KBTS_LINE_BREAK_CLASS_OPnea, + /* 22 */ KBTS_LINE_BREAK_CLASS_OPea, + /* 23 */ KBTS_LINE_BREAK_CLASS_QU, + /* 24 */ KBTS_LINE_BREAK_CLASS_QUPi, + /* 25 */ KBTS_LINE_BREAK_CLASS_QUPf, + /* 26 */ KBTS_LINE_BREAK_CLASS_IS, + /* 27 */ KBTS_LINE_BREAK_CLASS_NSnea, + /* 28 */ KBTS_LINE_BREAK_CLASS_NSea, + /* 29 */ KBTS_LINE_BREAK_CLASS_B2, + /* 30 */ KBTS_LINE_BREAK_CLASS_CB, + /* 31 */ KBTS_LINE_BREAK_CLASS_HY, + /* 32 */ KBTS_LINE_BREAK_CLASS_HYPHEN, + /* 33 */ KBTS_LINE_BREAK_CLASS_INnea, + /* 34 */ KBTS_LINE_BREAK_CLASS_INea, + /* 35 */ KBTS_LINE_BREAK_CLASS_BB, + /* 36 */ KBTS_LINE_BREAK_CLASS_HL, + /* 37 */ KBTS_LINE_BREAK_CLASS_ALnea, + /* 38 */ KBTS_LINE_BREAK_CLASS_ALea, + /* 39 */ KBTS_LINE_BREAK_CLASS_NU, + /* 40 */ KBTS_LINE_BREAK_CLASS_PRnea, + /* 41 */ KBTS_LINE_BREAK_CLASS_PRea, + /* 42 */ KBTS_LINE_BREAK_CLASS_IDnea, + /* 43 */ KBTS_LINE_BREAK_CLASS_IDea, + /* 44 */ KBTS_LINE_BREAK_CLASS_IDpe, + /* 45 */ KBTS_LINE_BREAK_CLASS_EBnea, + /* 46 */ KBTS_LINE_BREAK_CLASS_EBea, + /* 47 */ KBTS_LINE_BREAK_CLASS_EM, + /* 48 */ KBTS_LINE_BREAK_CLASS_POnea, + /* 49 */ KBTS_LINE_BREAK_CLASS_POea, + /* 50 */ KBTS_LINE_BREAK_CLASS_JL, + /* 51 */ KBTS_LINE_BREAK_CLASS_JV, + /* 52 */ KBTS_LINE_BREAK_CLASS_JT, + /* 53 */ KBTS_LINE_BREAK_CLASS_H2, + /* 54 */ KBTS_LINE_BREAK_CLASS_H3, + /* 55 */ KBTS_LINE_BREAK_CLASS_AP, + /* 56 */ KBTS_LINE_BREAK_CLASS_AK, + /* 57 */ KBTS_LINE_BREAK_CLASS_DOTTED_CIRCLE, + /* 58 */ KBTS_LINE_BREAK_CLASS_AS, + /* 59 */ KBTS_LINE_BREAK_CLASS_VF, + /* 60 */ KBTS_LINE_BREAK_CLASS_VI, + /* 61 */ KBTS_LINE_BREAK_CLASS_RI, + + /* 62 */ KBTS_LINE_BREAK_CLASS_COUNT, + + /* 63 */ KBTS_LINE_BREAK_CLASS_CM, + /* 64 */ KBTS_LINE_BREAK_CLASS_ZWJ, + + // CJ resolves to either NS or ID depending on the (Japanese) line break style. + // NS is strict line breaking, used for long lines. + // ID is normal line breaking, used for normal body text. + /* 65 */ KBTS_LINE_BREAK_CLASS_CJ, + + /* 66 */ KBTS_LINE_BREAK_CLASS_SOT, + /* 67 */ KBTS_LINE_BREAK_CLASS_EOT, +}; + +// @Cleanup: Merge EX and FO. +typedef kbts_u8 kbts_word_break_class; +enum kbts_word_break_class_enum +{ + KBTS_WORD_BREAK_CLASS_Onep, + KBTS_WORD_BREAK_CLASS_Oep, + KBTS_WORD_BREAK_CLASS_CR, + KBTS_WORD_BREAK_CLASS_LF, + KBTS_WORD_BREAK_CLASS_NL, + KBTS_WORD_BREAK_CLASS_EX, + KBTS_WORD_BREAK_CLASS_ZWJ, + KBTS_WORD_BREAK_CLASS_RI, + KBTS_WORD_BREAK_CLASS_FO, + KBTS_WORD_BREAK_CLASS_KA, + KBTS_WORD_BREAK_CLASS_HL, + KBTS_WORD_BREAK_CLASS_ALnep, + KBTS_WORD_BREAK_CLASS_ALep, + KBTS_WORD_BREAK_CLASS_SQ, + KBTS_WORD_BREAK_CLASS_DQ, + KBTS_WORD_BREAK_CLASS_MNL, + KBTS_WORD_BREAK_CLASS_ML, + KBTS_WORD_BREAK_CLASS_MN, + KBTS_WORD_BREAK_CLASS_NM, + KBTS_WORD_BREAK_CLASS_ENL, + KBTS_WORD_BREAK_CLASS_WSS, + + KBTS_WORD_BREAK_CLASS_SOT, +}; + +// Unicode defines scripts and languages. +// A language belongs to a single script, and a script belongs to a single writing system. +// On top of these, OpenType defines shapers, which are basically just designations for +// specific code paths that are taken depending on which script is being shapen. +// +// Some scripts, like Latin and Cyrillic, need relatively few operations, while complex +// scripts like Arabic and Indic scripts have specific processing steps that need to happen +// in order to obtain a correct result. +// +// These sequences of operations are _not_ described in the font file itself. The shaping +// code needs to know which script it is shaping, and implement all of those passes itself. +// That is why you, as a user, have to care about this. +// +// When creating shape_config, you can either pass in a known script, or you can specify +// SCRIPT_DONT_KNOW and let the library figure it out. +// While SCRIPT_DONT_KNOW may look appealing, it is worth noting that we can only infer +// the _script_, and not the language, of the text you pass in. +// This means that you might miss out on language-specific features when you use it. +typedef kbts_u32 kbts_shaper; +enum kbts_shaper_enum +{ + KBTS_SHAPER_DEFAULT, + KBTS_SHAPER_ARABIC, + KBTS_SHAPER_HANGUL, + KBTS_SHAPER_HEBREW, + KBTS_SHAPER_INDIC, + KBTS_SHAPER_KHMER, + KBTS_SHAPER_MYANMAR, + KBTS_SHAPER_TIBETAN, + KBTS_SHAPER_USE, + + KBTS_SHAPER_COUNT, +}; +typedef kbts_u32 kbts_script; +enum kbts_script_enum { + KBTS_SCRIPT_DONT_KNOW, + KBTS_SCRIPT_ADLAM, + KBTS_SCRIPT_AHOM, + KBTS_SCRIPT_ANATOLIAN_HIEROGLYPHS, + KBTS_SCRIPT_ARABIC, + KBTS_SCRIPT_ARMENIAN, + KBTS_SCRIPT_AVESTAN, + KBTS_SCRIPT_BALINESE, + KBTS_SCRIPT_BAMUM, + KBTS_SCRIPT_BASSA_VAH, + KBTS_SCRIPT_BATAK, + KBTS_SCRIPT_BENGALI, + KBTS_SCRIPT_BHAIKSUKI, + KBTS_SCRIPT_BOPOMOFO, + KBTS_SCRIPT_BRAHMI, + KBTS_SCRIPT_BUGINESE, + KBTS_SCRIPT_BUHID, + KBTS_SCRIPT_CANADIAN_SYLLABICS, + KBTS_SCRIPT_CARIAN, + KBTS_SCRIPT_CAUCASIAN_ALBANIAN, + KBTS_SCRIPT_CHAKMA, + KBTS_SCRIPT_CHAM, + KBTS_SCRIPT_CHEROKEE, + KBTS_SCRIPT_CHORASMIAN, + KBTS_SCRIPT_CJK_IDEOGRAPHIC, + KBTS_SCRIPT_COPTIC, + KBTS_SCRIPT_CYPRIOT_SYLLABARY, + KBTS_SCRIPT_CYPRO_MINOAN, + KBTS_SCRIPT_CYRILLIC, + KBTS_SCRIPT_DEFAULT, + KBTS_SCRIPT_DEFAULT2, + KBTS_SCRIPT_DESERET, + KBTS_SCRIPT_DEVANAGARI, + KBTS_SCRIPT_DIVES_AKURU, + KBTS_SCRIPT_DOGRA, + KBTS_SCRIPT_DUPLOYAN, + KBTS_SCRIPT_EGYPTIAN_HIEROGLYPHS, + KBTS_SCRIPT_ELBASAN, + KBTS_SCRIPT_ELYMAIC, + KBTS_SCRIPT_ETHIOPIC, + KBTS_SCRIPT_GARAY, + KBTS_SCRIPT_GEORGIAN, + KBTS_SCRIPT_GLAGOLITIC, + KBTS_SCRIPT_GOTHIC, + KBTS_SCRIPT_GRANTHA, + KBTS_SCRIPT_GREEK, + KBTS_SCRIPT_GUJARATI, + KBTS_SCRIPT_GUNJALA_GONDI, + KBTS_SCRIPT_GURMUKHI, + KBTS_SCRIPT_GURUNG_KHEMA, + KBTS_SCRIPT_HANGUL, + KBTS_SCRIPT_HANIFI_ROHINGYA, + KBTS_SCRIPT_HANUNOO, + KBTS_SCRIPT_HATRAN, + KBTS_SCRIPT_HEBREW, + KBTS_SCRIPT_HIRAGANA, + KBTS_SCRIPT_IMPERIAL_ARAMAIC, + KBTS_SCRIPT_INSCRIPTIONAL_PAHLAVI, + KBTS_SCRIPT_INSCRIPTIONAL_PARTHIAN, + KBTS_SCRIPT_JAVANESE, + KBTS_SCRIPT_KAITHI, + KBTS_SCRIPT_KANNADA, + KBTS_SCRIPT_KATAKANA, + KBTS_SCRIPT_KAWI, + KBTS_SCRIPT_KAYAH_LI, + KBTS_SCRIPT_KHAROSHTHI, + KBTS_SCRIPT_KHITAN_SMALL_SCRIPT, + KBTS_SCRIPT_KHMER, + KBTS_SCRIPT_KHOJKI, + KBTS_SCRIPT_KHUDAWADI, + KBTS_SCRIPT_KIRAT_RAI, + KBTS_SCRIPT_LAO, + KBTS_SCRIPT_LATIN, + KBTS_SCRIPT_LEPCHA, + KBTS_SCRIPT_LIMBU, + KBTS_SCRIPT_LINEAR_A, + KBTS_SCRIPT_LINEAR_B, + KBTS_SCRIPT_LISU, + KBTS_SCRIPT_LYCIAN, + KBTS_SCRIPT_LYDIAN, + KBTS_SCRIPT_MAHAJANI, + KBTS_SCRIPT_MAKASAR, + KBTS_SCRIPT_MALAYALAM, + KBTS_SCRIPT_MANDAIC, + KBTS_SCRIPT_MANICHAEAN, + KBTS_SCRIPT_MARCHEN, + KBTS_SCRIPT_MASARAM_GONDI, + KBTS_SCRIPT_MEDEFAIDRIN, + KBTS_SCRIPT_MEETEI_MAYEK, + KBTS_SCRIPT_MENDE_KIKAKUI, + KBTS_SCRIPT_MEROITIC_CURSIVE, + KBTS_SCRIPT_MEROITIC_HIEROGLYPHS, + KBTS_SCRIPT_MIAO, + KBTS_SCRIPT_MODI, + KBTS_SCRIPT_MONGOLIAN, + KBTS_SCRIPT_MRO, + KBTS_SCRIPT_MULTANI, + KBTS_SCRIPT_MYANMAR, + KBTS_SCRIPT_NABATAEAN, + KBTS_SCRIPT_NAG_MUNDARI, + KBTS_SCRIPT_NANDINAGARI, + KBTS_SCRIPT_NEWA, + KBTS_SCRIPT_NEW_TAI_LUE, + KBTS_SCRIPT_NKO, + KBTS_SCRIPT_NUSHU, + KBTS_SCRIPT_NYIAKENG_PUACHUE_HMONG, + KBTS_SCRIPT_OGHAM, + KBTS_SCRIPT_OL_CHIKI, + KBTS_SCRIPT_OL_ONAL, + KBTS_SCRIPT_OLD_ITALIC, + KBTS_SCRIPT_OLD_HUNGARIAN, + KBTS_SCRIPT_OLD_NORTH_ARABIAN, + KBTS_SCRIPT_OLD_PERMIC, + KBTS_SCRIPT_OLD_PERSIAN_CUNEIFORM, + KBTS_SCRIPT_OLD_SOGDIAN, + KBTS_SCRIPT_OLD_SOUTH_ARABIAN, + KBTS_SCRIPT_OLD_TURKIC, + KBTS_SCRIPT_OLD_UYGHUR, + KBTS_SCRIPT_ODIA, + KBTS_SCRIPT_OSAGE, + KBTS_SCRIPT_OSMANYA, + KBTS_SCRIPT_PAHAWH_HMONG, + KBTS_SCRIPT_PALMYRENE, + KBTS_SCRIPT_PAU_CIN_HAU, + KBTS_SCRIPT_PHAGS_PA, + KBTS_SCRIPT_PHOENICIAN, + KBTS_SCRIPT_PSALTER_PAHLAVI, + KBTS_SCRIPT_REJANG, + KBTS_SCRIPT_RUNIC, + KBTS_SCRIPT_SAMARITAN, + KBTS_SCRIPT_SAURASHTRA, + KBTS_SCRIPT_SHARADA, + KBTS_SCRIPT_SHAVIAN, + KBTS_SCRIPT_SIDDHAM, + KBTS_SCRIPT_SIGN_WRITING, + KBTS_SCRIPT_SOGDIAN, + KBTS_SCRIPT_SINHALA, + KBTS_SCRIPT_SORA_SOMPENG, + KBTS_SCRIPT_SOYOMBO, + KBTS_SCRIPT_SUMERO_AKKADIAN_CUNEIFORM, + KBTS_SCRIPT_SUNDANESE, + KBTS_SCRIPT_SUNUWAR, + KBTS_SCRIPT_SYLOTI_NAGRI, + KBTS_SCRIPT_SYRIAC, + KBTS_SCRIPT_TAGALOG, + KBTS_SCRIPT_TAGBANWA, + KBTS_SCRIPT_TAI_LE, + KBTS_SCRIPT_TAI_THAM, + KBTS_SCRIPT_TAI_VIET, + KBTS_SCRIPT_TAKRI, + KBTS_SCRIPT_TAMIL, + KBTS_SCRIPT_TANGSA, + KBTS_SCRIPT_TANGUT, + KBTS_SCRIPT_TELUGU, + KBTS_SCRIPT_THAANA, + KBTS_SCRIPT_THAI, + KBTS_SCRIPT_TIBETAN, + KBTS_SCRIPT_TIFINAGH, + KBTS_SCRIPT_TIRHUTA, + KBTS_SCRIPT_TODHRI, + KBTS_SCRIPT_TOTO, + KBTS_SCRIPT_TULU_TIGALARI, + KBTS_SCRIPT_UGARITIC_CUNEIFORM, + KBTS_SCRIPT_VAI, + KBTS_SCRIPT_VITHKUQI, + KBTS_SCRIPT_WANCHO, + KBTS_SCRIPT_WARANG_CITI, + KBTS_SCRIPT_YEZIDI, + KBTS_SCRIPT_YI, + KBTS_SCRIPT_ZANABAZAR_SQUARE, + KBTS_SCRIPT_COUNT, +}; + + +// The order of the first few features here matters. +// They must map 1:1 with glyph flags that are part of GLYPH_FEATURE_MASK. +# define KBTS_X_FEATURES \ +KBTS_X(isol, 'i', 's', 'o', 'l') /* Isolated Forms */ \ +KBTS_X(fina, 'f', 'i', 'n', 'a') /* Terminal Forms */ \ +KBTS_X(fin2, 'f', 'i', 'n', '2') /* Terminal Forms #2 */ \ +KBTS_X(fin3, 'f', 'i', 'n', '3') /* Terminal Forms #3 */ \ +KBTS_X(medi, 'm', 'e', 'd', 'i') /* Medial Forms */ \ +KBTS_X(med2, 'm', 'e', 'd', '2') /* Medial Forms #2 */ \ +KBTS_X(init, 'i', 'n', 'i', 't') /* Initial Forms */ \ +KBTS_X(ljmo, 'l', 'j', 'm', 'o') /* Leading Jamo Forms */ \ +KBTS_X(vjmo, 'v', 'j', 'm', 'o') /* Vowel Jamo Forms */ \ +KBTS_X(tjmo, 't', 'j', 'm', 'o') /* Trailing Jamo Forms */ \ +KBTS_X(rphf, 'r', 'p', 'h', 'f') /* Reph Form */ \ +KBTS_X(blwf, 'b', 'l', 'w', 'f') /* Below-base Forms */ \ +KBTS_X(half, 'h', 'a', 'l', 'f') /* Half Forms */ \ +KBTS_X(pstf, 'p', 's', 't', 'f') /* Post-base Forms */ \ +KBTS_X(abvf, 'a', 'b', 'v', 'f') /* Above-base Forms */ \ +KBTS_X(pref, 'p', 'r', 'e', 'f') /* Pre-base Forms */ \ +KBTS_X(numr, 'n', 'u', 'm', 'r') /* Numerators */ \ +KBTS_X(frac, 'f', 'r', 'a', 'c') /* Fractions */ \ +KBTS_X(dnom, 'd', 'n', 'o', 'm') /* Denominators */ \ +KBTS_X(cfar, 'c', 'f', 'a', 'r') /* Conjunct Form After Ro */ \ +KBTS_X(aalt, 'a', 'a', 'l', 't') /* Access All Alternates */ \ +KBTS_X(abvm, 'a', 'b', 'v', 'm') /* Above-base Mark Positioning */ \ +KBTS_X(abvs, 'a', 'b', 'v', 's') /* Above-base Substitutions */ \ +KBTS_X(afrc, 'a', 'f', 'r', 'c') /* Alternative Fractions */ \ +KBTS_X(akhn, 'a', 'k', 'h', 'n') /* Akhand */ \ +KBTS_X(apkn, 'a', 'p', 'k', 'n') /* Kerning for Alternate Proportional Widths */ \ +KBTS_X(blwm, 'b', 'l', 'w', 'm') /* Below-base Mark Positioning */ \ +KBTS_X(blws, 'b', 'l', 'w', 's') /* Below-base Substitutions */ \ +KBTS_X(calt, 'c', 'a', 'l', 't') /* Contextual Alternates */ \ +KBTS_X(case, 'c', 'a', 's', 'e') /* Case-sensitive Forms */ \ +KBTS_X(ccmp, 'c', 'c', 'm', 'p') /* Glyph Composition / Decomposition */ \ +KBTS_X(chws, 'c', 'h', 'w', 's') /* Contextual Half-width Spacing */ \ +KBTS_X(cjct, 'c', 'j', 'c', 't') /* Conjunct Forms */ \ +KBTS_X(clig, 'c', 'l', 'i', 'g') /* Contextual Ligatures */ \ +KBTS_X(cpct, 'c', 'p', 'c', 't') /* Centered CJK Punctuation */ \ +KBTS_X(cpsp, 'c', 'p', 's', 'p') /* Capital Spacing */ \ +KBTS_X(cswh, 'c', 's', 'w', 'h') /* Contextual Swash */ \ +KBTS_X(curs, 'c', 'u', 'r', 's') /* Cursive Positioning */ \ +KBTS_X(cv01, 'c', 'v', '0', '1') /* 'cv99' Character Variant 1 – Character Variant 99 */ \ +KBTS_X(c2pc, 'c', '2', 'p', 'c') /* Petite Capitals From Capitals */ \ +KBTS_X(c2sc, 'c', '2', 's', 'c') /* Small Capitals From Capitals */ \ +KBTS_X(dist, 'd', 'i', 's', 't') /* Distances */ \ +KBTS_X(dlig, 'd', 'l', 'i', 'g') /* Discretionary Ligatures */ \ +KBTS_X(dtls, 'd', 't', 'l', 's') /* Dotless Forms */ \ +KBTS_X(expt, 'e', 'x', 'p', 't') /* Expert Forms */ \ +KBTS_X(falt, 'f', 'a', 'l', 't') /* Final Glyph on Line Alternates */ \ +KBTS_X(flac, 'f', 'l', 'a', 'c') /* Flattened Accent Forms */ \ +KBTS_X(fwid, 'f', 'w', 'i', 'd') /* Full Widths */ \ +KBTS_X(haln, 'h', 'a', 'l', 'n') /* Halant Forms */ \ +KBTS_X(halt, 'h', 'a', 'l', 't') /* Alternate Half Widths */ \ +KBTS_X(hist, 'h', 'i', 's', 't') /* Historical Forms */ \ +KBTS_X(hkna, 'h', 'k', 'n', 'a') /* Horizontal Kana Alternates */ \ +KBTS_X(hlig, 'h', 'l', 'i', 'g') /* Historical Ligatures */ \ +KBTS_X(hngl, 'h', 'n', 'g', 'l') /* Hangul */ \ +KBTS_X(hojo, 'h', 'o', 'j', 'o') /* Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) */ \ +KBTS_X(hwid, 'h', 'w', 'i', 'd') /* Half Widths */ \ +KBTS_X(ital, 'i', 't', 'a', 'l') /* Italics */ \ +KBTS_X(jalt, 'j', 'a', 'l', 't') /* Justification Alternates */ \ +KBTS_X(jp78, 'j', 'p', '7', '8') /* JIS78 Forms */ \ +KBTS_X(jp83, 'j', 'p', '8', '3') /* JIS83 Forms */ \ +KBTS_X(jp90, 'j', 'p', '9', '0') /* JIS90 Forms */ \ +KBTS_X(jp04, 'j', 'p', '0', '4') /* JIS2004 Forms */ \ +KBTS_X(kern, 'k', 'e', 'r', 'n') /* Kerning */ \ +KBTS_X(lfbd, 'l', 'f', 'b', 'd') /* Left Bounds */ \ +KBTS_X(liga, 'l', 'i', 'g', 'a') /* Standard Ligatures */ \ +KBTS_X(lnum, 'l', 'n', 'u', 'm') /* Lining Figures */ \ +KBTS_X(locl, 'l', 'o', 'c', 'l') /* Localized Forms */ \ +KBTS_X(ltra, 'l', 't', 'r', 'a') /* Left-to-right Alternates */ \ +KBTS_X(ltrm, 'l', 't', 'r', 'm') /* Left-to-right Mirrored Forms */ \ +KBTS_X(mark, 'm', 'a', 'r', 'k') /* Mark Positioning */ \ +KBTS_X(mgrk, 'm', 'g', 'r', 'k') /* Mathematical Greek */ \ +KBTS_X(mkmk, 'm', 'k', 'm', 'k') /* Mark to Mark Positioning */ \ +KBTS_X(mset, 'm', 's', 'e', 't') /* Mark Positioning via Substitution */ \ +KBTS_X(nalt, 'n', 'a', 'l', 't') /* Alternate Annotation Forms */ \ +KBTS_X(nlck, 'n', 'l', 'c', 'k') /* NLC Kanji Forms */ \ +KBTS_X(nukt, 'n', 'u', 'k', 't') /* Nukta Forms */ \ +KBTS_X(onum, 'o', 'n', 'u', 'm') /* Oldstyle Figures */ \ +KBTS_X(opbd, 'o', 'p', 'b', 'd') /* Optical Bounds */ \ +KBTS_X(ordn, 'o', 'r', 'd', 'n') /* Ordinals */ \ +KBTS_X(ornm, 'o', 'r', 'n', 'm') /* Ornaments */ \ +KBTS_X(palt, 'p', 'a', 'l', 't') /* Proportional Alternate Widths */ \ +KBTS_X(pcap, 'p', 'c', 'a', 'p') /* Petite Capitals */ \ +KBTS_X(pkna, 'p', 'k', 'n', 'a') /* Proportional Kana */ \ +KBTS_X(pnum, 'p', 'n', 'u', 'm') /* Proportional Figures */ \ +KBTS_X(pres, 'p', 'r', 'e', 's') /* Pre-base Substitutions */ \ +KBTS_X(psts, 'p', 's', 't', 's') /* Post-base Substitutions */ \ +KBTS_X(pwid, 'p', 'w', 'i', 'd') /* Proportional Widths */ \ +KBTS_X(qwid, 'q', 'w', 'i', 'd') /* Quarter Widths */ \ +KBTS_X(rand, 'r', 'a', 'n', 'd') /* Randomize */ \ +KBTS_X(rclt, 'r', 'c', 'l', 't') /* Required Contextual Alternates */ \ +KBTS_X(rkrf, 'r', 'k', 'r', 'f') /* Rakar Forms */ \ +KBTS_X(rlig, 'r', 'l', 'i', 'g') /* Required Ligatures */ \ +KBTS_X(rtbd, 'r', 't', 'b', 'd') /* Right Bounds */ \ +KBTS_X(rtla, 'r', 't', 'l', 'a') /* Right-to-left Alternates */ \ +KBTS_X(rtlm, 'r', 't', 'l', 'm') /* Right-to-left Mirrored Forms */ \ +KBTS_X(ruby, 'r', 'u', 'b', 'y') /* Ruby Notation Forms */ \ +KBTS_X(rvrn, 'r', 'v', 'r', 'n') /* Required Variation Alternates */ \ +KBTS_X(salt, 's', 'a', 'l', 't') /* Stylistic Alternates */ \ +KBTS_X(sinf, 's', 'i', 'n', 'f') /* Scientific Inferiors */ \ +KBTS_X(size, 's', 'i', 'z', 'e') /* Optical size */ \ +KBTS_X(smcp, 's', 'm', 'c', 'p') /* Small Capitals */ \ +KBTS_X(smpl, 's', 'm', 'p', 'l') /* Simplified Forms */ \ +KBTS_X(ss01, 's', 's', '0', '1') /* 'ss20' Stylistic Set 1 – Stylistic Set 20 */ \ +KBTS_X(ssty, 's', 's', 't', 'y') /* Math Script-style Alternates */ \ +KBTS_X(stch, 's', 't', 'c', 'h') /* Stretching Glyph Decomposition */ \ +KBTS_X(subs, 's', 'u', 'b', 's') /* Subscript */ \ +KBTS_X(sups, 's', 'u', 'p', 's') /* Superscript */ \ +KBTS_X(swsh, 's', 'w', 's', 'h') /* Swash */ \ +KBTS_X(test, 't', 'e', 's', 't') /* Test features, only for development */ \ +KBTS_X(titl, 't', 'i', 't', 'l') /* Titling */ \ +KBTS_X(tnam, 't', 'n', 'a', 'm') /* Traditional Name Forms */ \ +KBTS_X(tnum, 't', 'n', 'u', 'm') /* Tabular Figures */ \ +KBTS_X(trad, 't', 'r', 'a', 'd') /* Traditional Forms */ \ +KBTS_X(twid, 't', 'w', 'i', 'd') /* Third Widths */ \ +KBTS_X(unic, 'u', 'n', 'i', 'c') /* Unicase */ \ +KBTS_X(valt, 'v', 'a', 'l', 't') /* Alternate Vertical Metrics */ \ +KBTS_X(vapk, 'v', 'a', 'p', 'k') /* Kerning for Alternate Proportional Vertical Metrics */ \ +KBTS_X(vatu, 'v', 'a', 't', 'u') /* Vattu Variants */ \ +KBTS_X(vchw, 'v', 'c', 'h', 'w') /* Vertical Contextual Half-width Spacing */ \ +KBTS_X(vert, 'v', 'e', 'r', 't') /* Vertical Alternates */ \ +KBTS_X(vhal, 'v', 'h', 'a', 'l') /* Alternate Vertical Half Metrics */ \ +KBTS_X(vkna, 'v', 'k', 'n', 'a') /* Vertical Kana Alternates */ \ +KBTS_X(vkrn, 'v', 'k', 'r', 'n') /* Vertical Kerning */ \ +KBTS_X(vpal, 'v', 'p', 'a', 'l') /* Proportional Alternate Vertical Metrics */ \ +KBTS_X(vrt2, 'v', 'r', 't', '2') /* Vertical Alternates and Rotation */ \ +KBTS_X(vrtr, 'v', 'r', 't', 'r') /* Vertical Alternates for Rotation */ \ +KBTS_X(zero, 'z', 'e', 'r', 'o') /* Slashed Zero */ + +typedef kbts_u32 kbts_feature_tag; +enum kbts_feature_tag_enum +{ +# define KBTS_X(Name, C0, C1, C2, C3) KBTS_FEATURE_TAG_##Name = KBTS_FOURCC(C0, C1, C2, C3), + KBTS_X_FEATURES +# undef KBTS_X +}; + +typedef kbts_u32 kbts_feature_id; +enum kbts_feature_id_enum +{ +# define KBTS_X(Name, C0, C1, C2, C3) KBTS_FEATURE_ID_##Name, + KBTS_X_FEATURES +# undef KBTS_X + + KBTS_FEATURE_ID_COUNT, +}; + +typedef kbts_u8 kbts_shaping_table; +enum kbts_shaping_table_enum +{ + KBTS_SHAPING_TABLE_GSUB, + KBTS_SHAPING_TABLE_GPOS, + KBTS_SHAPING_TABLE_COUNT, +}; + +typedef struct kbts_lookup_info +{ + kbts_u32 MaximumBacktrackWithoutSkippingGlyphs; + kbts_u32 MaximumLookaheadWithoutSkippingGlyphs; + kbts_u32 MaximumSubstitutionOutputSize; + kbts_u32 MaximumInputSequenceLength; + kbts_u32 MaximumLookupStackSize; +} kbts_lookup_info; + +typedef struct kbts_op_state kbts_op_state; +typedef struct kbts_gdef kbts_gdef; +typedef struct kbts_cmap_14 kbts_cmap_14; +typedef struct kbts_gsub_gpos kbts_gsub_gpos; +typedef struct kbts_maxp kbts_maxp; +typedef struct kbts_hea kbts_hea; +typedef struct kbts_iterate_features kbts_iterate_features; +typedef struct kbts_shape_state kbts_shape_state; +typedef struct kbts_shaper_properties kbts_shaper_properties; +typedef struct kbts_feature kbts_feature; +typedef struct kbts_head kbts_head; + +typedef struct kbts_lookup_subtable_info +{ + kbts_u32 MinimumBacktrackPlusOne; + kbts_u32 MinimumFollowupPlusOne; +} kbts_lookup_subtable_info; + +typedef struct kbts_font +{ + char *FileBase; + kbts_head *Head; + kbts_u16 *Cmap; + kbts_gdef *Gdef; + kbts_cmap_14 *Cmap14; + kbts_gsub_gpos *ShapingTables[KBTS_SHAPING_TABLE_COUNT]; + void *Fvar; + kbts_maxp *Maxp; + + kbts_hea *Hea[KBTS_ORIENTATION_COUNT]; + kbts_u16 *Mtx[KBTS_ORIENTATION_COUNT]; + + kbts_lookup_info LookupInfo; + + kbts_u32 GlyphCount; + kbts_u32 LookupCount; + kbts_u32 SubtableCount; + + kbts_u32 *GlyphLookupMatrix; // [LookupCount * GlyphCount] bitmap + kbts_u32 *GlyphLookupSubtableMatrix; // [LookupSubtableCount * GlyphCount] bitmap + kbts_u32 *LookupSubtableIndexOffsets; // [LookupCount] + kbts_lookup_subtable_info *SubtableInfos; // [LookupSubtableCount] + kbts_u32 GposLookupIndexOffset; + + int Error; +} kbts_font; + +typedef struct kbts_glyph_classes +{ + kbts_u16 Class; + kbts_u16 MarkAttachmentClass; +} kbts_glyph_classes; + +typedef struct kbts_glyph +{ + kbts_u32 Codepoint; + kbts_u16 Id; + kbts_u16 Uid; + kbts_glyph_classes Classes; + + kbts_u64 Decomposition; + + kbts_glyph_flags Flags; + + kbts_s32 OffsetX; + kbts_s32 OffsetY; + kbts_s32 AdvanceX; + kbts_s32 AdvanceY; + + kbts_u32 ParentInfo; + + // This is set by GSUB and used by GPOS. + // A 0-index means that we should attach to the last component in the ligature. + // + // From the Microsoft docs: + // To correctly access the subtables, the client must keep track of the component associated with the mark. + // + // For a given mark assigned to a particular class, the appropriate base attachment point is determined by which + // ligature component the mark is associated with. This is dependent on the original character string and subsequent + // character- or glyph-sequence processing, not the font data alone. While a text-layout client is performing any + // character-based preprocessing or any glyph-substitution operations using the GSUB table, the text-layout client + // must keep track of associations of marks to particular ligature-glyph components. + kbts_u16 LigatureUid; + kbts_u16 LigatureComponentIndexPlusOne; + + // Earlier on, we used to assume that, if a glyph had no advance, or had the MARK glyph class, then + // it could be handled as a mark in layout operations. This is inaccurate. + // Unicode makes a distinction between attached marks and standalone marks. For our purposes, attached + // marks are marks that have found a valid base character to attach to. In practice, this means that the + // font contains a valid display position/configuration for it in the current context. + // In contrast, standalone marks are marks that aren't attached to anything. Fonts may still have glyphs + // for them, in which case we want to display those just like regular glyphs that take up horizontal space + // on the line. When fonts don't have glyphs for them, they simply stay around as zero-width glyphs. + // Standalone marks have notably different behavior compared to attached marks, and so, once we start + // applying positioning features, it becomes worthwhile to track exactly which glyph has attached to which. + kbts_u16 AttachGlyphIndexPlusOne; // Set by GPOS attachments. + + // Set in GSUB and used in GPOS, for STCH. + kbts_joining_feature JoiningFeature; + + // Unicode properties filled in by CodepointToGlyph. + kbts_unicode_joining_type JoiningType; + kbts_u8 Script; + kbts_u8 UnicodeFlags; + kbts_u8 SyllabicClass; + kbts_u8 SyllabicPosition; + kbts_u8 UseClass; + kbts_u8 CombiningClass; + + kbts_u8 MarkOrdering; // Only used temporarily in NORMALIZE for Arabic mark reordering. +} kbts_glyph; + +typedef struct kbts_glyph_array +{ + kbts_glyph *Glyphs; + kbts_u32 Count; + kbts_u32 TotalCount; + kbts_u32 Capacity; + kbts_u32 RequiredCapacity; +} kbts_glyph_array; + +typedef struct kbts_op_state_normalize +{ + kbts_un CodepointsToDecomposeCount; + kbts_un AboveBaseGlyphCount; +} kbts_op_state_normalize; + +typedef struct kbts_op_state_gsub +{ + kbts_un LookupIndex; + kbts_u32 GlyphFilter; + kbts_u32 SkipFlags; +} kbts_op_state_gsub; + +typedef struct kbts_op_state_normalize_hangul +{ + kbts_glyph LvtGlyphs[4]; + kbts_un LvtGlyphCount; +} kbts_op_state_normalize_hangul; + +typedef union kbts_op_state_op_specific +{ + kbts_op_state_normalize Normalize; + kbts_op_state_gsub Gsub; + kbts_op_state_normalize_hangul NormalizeHangul; +} kbts_op_state_op_specific; + +typedef struct kbts_lookup_indices +{ + kbts_u32 FeatureId; + kbts_u32 SkipFlags; + kbts_u32 GlyphFilter; + kbts_u32 Count; + kbts_u16 *Indices; +} kbts_lookup_indices; + +typedef struct kbts_feature_set +{ + kbts_u64 Flags[(KBTS_FEATURE_ID_COUNT + 63) / 64]; +} kbts_feature_set; + +typedef struct kbts_op +{ + kbts_op_kind Kind; + kbts_feature_set Features; +} kbts_op; + +// This needs to be updated when we change the op lists! +#define KBTS_MAX_SIMULTANEOUS_FEATURES 16 +typedef struct kbts_op_state +{ + kbts_un WrittenCount; + kbts_un GlyphIndex; + kbts_u32 FrameCount; + kbts_u32 ResumePoint; + + kbts_u32 FeatureCount; + kbts_lookup_indices FeatureLookupIndices[KBTS_MAX_SIMULTANEOUS_FEATURES]; + + kbts_op_state_op_specific OpSpecific; + + // Ops are free to use the following as they please: + // kbts_u8 LeftoverMemory[LeftoverMemorySize]; +} kbts_op_state; + +typedef struct kbts_op_list +{ + kbts_u8 *Ops; + kbts_un Length; +} kbts_op_list; + +typedef struct kbts_indic_script_properties +{ + kbts_u32 ViramaCodepoint; + kbts_u8 BlwfPostOnly; + kbts_reph_position RephPosition; + kbts_reph_encoding RephEncoding; + kbts_syllabic_position RightSideMatraPosition; + kbts_syllabic_position AboveBaseMatraPosition; + kbts_syllabic_position BelowBaseMatraPosition; +} kbts_indic_script_properties; + +typedef struct kbts_langsys kbts_langsys; +typedef struct kbts_shape_config +{ + kbts_font *Font; + kbts_script Script; + kbts_language Language; + kbts_langsys *Langsys[KBTS_SHAPING_TABLE_COUNT]; + kbts_op_list OpLists[4]; + + kbts_shaper Shaper; + kbts_shaper_properties *ShaperProperties; + + kbts_indic_script_properties IndicScriptProperties; + kbts_feature *Blwf; + kbts_feature *Pref; + kbts_feature *Pstf; + kbts_feature *Locl; + kbts_feature *Rphf; + kbts_feature *Half; + kbts_feature *Vatu; + + // Indic + kbts_glyph Virama; + + kbts_glyph DottedCircle; + kbts_glyph Whitespace; + + // Thai + kbts_glyph Nikhahit; + kbts_glyph SaraAa; +} kbts_shape_config; + +typedef struct kbts_shape_state +{ + kbts_op Op; + kbts_shape_config *Config; + kbts_direction MainDirection; + kbts_direction RunDirection; + + kbts_glyph_array GlyphArray; + kbts_glyph_array ClusterGlyphArray; + + kbts_u32 DottedCircleInsertIndex; + + kbts_u32 GlyphCountStartingFromCurrentCluster; + + kbts_u32 At; + kbts_u32 ResumePoint; + kbts_u32 OpGlyphOffset; + kbts_u32 ClusterGlyphCount; + kbts_u32 Ip; + kbts_u32 NextGlyphUid; + + kbts_u32 RequiredGlyphCapacity; + + int RealCluster; + int ClusterAtStartOfWord; + int WordBreak; + + // This must always be the last member! + kbts_op_state OpState; +} kbts_shape_state; + +typedef struct kbts_cursor +{ + kbts_direction Direction; + kbts_s32 LastAdvanceX; + kbts_s32 X; + kbts_s32 Y; +} kbts_cursor; + +typedef struct kbts_break +{ + // The break code mostly works in relative positions, but we convert to absolute positions for the user. + // That way, breaks can be trivially stored and compared and such and it just works. + kbts_u32 Position; + kbts_break_flags Flags; + kbts_direction Direction; // Only valid if (Flags & KBTS_BREAK_FLAG_DIRECTION). + kbts_script Script; // Only valid if (Flags & KBTS_BREAK_FLAG_SCRIPT). +} kbts_break; + +typedef struct kbts_bracket +{ + kbts_u32 Codepoint; + kbts_u8 Direction; + kbts_u8 Script; +} kbts_bracket; + +typedef kbts_u32 kbts_break_state_flags; +enum kbts_break_state_flags_enum +{ + KBTS_BREAK_STATE_FLAG_STARTED = 1, + KBTS_BREAK_STATE_FLAG_END = 2, + KBTS_BREAK_STATE_FLAG_RAN_OUT_OF_REORDER_BUFFER_SPACE = 4, + + // Bidirectional flags + KBTS_BREAK_STATE_FLAG_SAW_R_AFTER_L = 8, + KBTS_BREAK_STATE_FLAG_SAW_AL_AFTER_LR = 0x10, + KBTS_BREAK_STATE_FLAG_LAST_WAS_BRACKET = 0x20, +}; + +// In the worst case, a single call to BreakAddCodepoint would generate 4 breaks. +// We buffer breaks to reorder them before returning them to the user. +// This potentially requires infinite memory, which we don't have, so you may want to tweak this constant, +// although, really, if the defaults don't work, then you have likely found very strange/adversarial text. +#define KBTS_BREAK_REORDER_BUFFER_FLUSH_THRESHOLD 4 +#define KBTS_BREAK_REORDER_BUFFER_SIZE (KBTS_BREAK_REORDER_BUFFER_FLUSH_THRESHOLD * 2) +typedef struct kbts_break_state +{ + kbts_break Breaks[KBTS_BREAK_REORDER_BUFFER_SIZE]; + kbts_u32 BreakCount; + kbts_direction MainDirection; + + kbts_u32 LastFlushedBreakPosition; + kbts_u32 CurrentPosition; + + kbts_u8 LastScripts[2]; + + kbts_bracket Brackets[64]; + kbts_u32 BracketCount; + kbts_break_state_flags Flags; + + kbts_u32 FlagState; // u8(kbts_break_flags)x4 + kbts_s16 PositionOffset2; + kbts_s16 PositionOffset3; + + kbts_u32 WordBreakHistory; // u8x4 + kbts_u16 WordBreaks; // u4x4 + kbts_u16 WordUnbreaks; // u4x4 + kbts_s16 WordBreak2PositionOffset; + + kbts_u64 LineBreaks; // u16x4 + // Instead of staying synchronized with LineBreaks/LineUnbreaks, + // this advances every character always. + // (This is only needed because ZWJ can create an unbreak while simultaneously being ignored.) + kbts_u64 LineUnbreaksAsync; // u16x4 + kbts_u64 LineUnbreaks; // u16x4 + kbts_u32 LineBreakHistory; // u8(line_break_class)x4 + kbts_s16 LineBreak2PositionOffset; + kbts_s16 LineBreak3PositionOffset; + + kbts_u8 LastDirection; + kbts_u8 BidirectionalClass2; + kbts_u8 BidirectionalClass1; + + kbts_japanese_line_break_style JapaneseLineBreakStyle; + kbts_u8 GraphemeBreakState; + kbts_u8 LastLineBreakClass; + kbts_u8 LastWordBreakClass; + kbts_u8 LastWordBreakClassIncludingIgnored; +} kbts_break_state; + +typedef struct kbts_decode +{ + kbts_u32 Codepoint; + + kbts_u32 SourceCharactersConsumed; + kbts_u32 Valid; +} kbts_decode; + +// Shaping +#ifndef KB_TEXT_SHAPE_NO_CRT +KBTS_EXPORT kbts_font kbts_FontFromFile(const char *FileName); +KBTS_EXPORT void kbts_FreeFont(kbts_font *Font); +KBTS_EXPORT kbts_shape_state *kbts_CreateShapeState(kbts_font *Font); +KBTS_EXPORT void kbts_FreeShapeState(kbts_shape_state *State); +#endif +KBTS_EXPORT int kbts_FontIsValid(kbts_font *Font); +KBTS_EXPORT kbts_un kbts_ReadFontHeader(kbts_font *Font, void *Data, kbts_un Size); +KBTS_EXPORT kbts_un kbts_ReadFontData(kbts_font *Font, void *Scratch, kbts_un ScratchSize); +KBTS_EXPORT int kbts_PostReadFontInitialize(kbts_font *Font, void *Memory, kbts_un MemorySize); +KBTS_EXPORT kbts_un kbts_SizeOfShapeState(kbts_font *Font); +KBTS_EXPORT kbts_shape_state *kbts_PlaceShapeState(void *Address, kbts_un Size); +KBTS_EXPORT void kbts_ResetShapeState(kbts_shape_state *State); +KBTS_EXPORT kbts_shape_config kbts_ShapeConfig(kbts_font *Font, kbts_u32 Script, kbts_u32 Language); +KBTS_EXPORT kbts_u32 kbts_ShaperIsComplex(kbts_shaper Shaper); +KBTS_EXPORT int kbts_Shape(kbts_shape_state *State, kbts_shape_config *Config, kbts_direction MainDirection, kbts_direction RunDirection, kbts_glyph *Glyphs, kbts_u32 *GlyphCount, kbts_u32 GlyphCapacity); +KBTS_EXPORT kbts_cursor kbts_Cursor(kbts_direction Direction); +KBTS_EXPORT void kbts_PositionGlyph(kbts_cursor *Cursor, kbts_glyph *Glyph, kbts_s32 *X, kbts_s32 *Y); +KBTS_EXPORT void kbts_BeginBreak(kbts_break_state *State, kbts_direction MainDirection, kbts_japanese_line_break_style JapaneseLineBreakStyle); +KBTS_EXPORT int kbts_BreakStateIsValid(kbts_break_state *State); +KBTS_EXPORT void kbts_BreakAddCodepoint(kbts_break_state *State, kbts_u32 Codepoint, kbts_u32 PositionIncrement, int EndOfText); +KBTS_EXPORT void kbts_BreakFlush(kbts_break_state *State); +KBTS_EXPORT int kbts_Break(kbts_break_state *State, kbts_break *Break); +KBTS_EXPORT kbts_decode kbts_DecodeUtf8(const char *Utf8, size_t Length); +KBTS_EXPORT kbts_glyph kbts_CodepointToGlyph(kbts_font *Font, kbts_u32 Codepoint); +KBTS_EXPORT void kbts_InferScript(kbts_direction *Direction, kbts_script *Script, kbts_script GlyphScript); +KBTS_EXPORT int kbts_ScriptIsComplex(kbts_script Script); +KBTS_EXPORT kbts_u32 kbts_ShaperIsComplex(kbts_shaper Shaper); +#endif + +#ifdef KB_TEXT_SHAPE_IMPLEMENTATION +#ifdef _MSC_VER +#define KBTS_UNUSED(X) (void)sizeof((X)) +#else +#define KBTS_UNUSED(X) (void)(X) +#endif +# define KBTS_FOR(I, Start, End) for(kbts_un I = (Start); I < (End); ++I) +# ifdef __cplusplus +# define KBTS_ZERO {} +# define KBTS_ZERO_TYPE(T) T{} +# else +# define KBTS_ZERO {0} +# define KBTS_ZERO_TYPE(T) (T){0} +# endif +# define KBTS_MAX(A, B) (((A) < (B)) ? (B) : (A)) +# define KBTS_MIN(A, B) (((A) < (B)) ? (A) : (B)) +# define KBTS_ARRAY_LENGTH(A) (sizeof(A)/sizeof(*(A))) +# define KBTS_POINTER_AFTER(Type, X) ((Type *)((X) + 1)) +# define KBTS_POINTER_OFFSET(Type, Base, Offset) ((Type *)((char *)(Base) + (Offset))) +# define KBTS_POINTER_DIFF32(Pointer, Base) ((kbts_u32)((char *)(Pointer) - (char *)(Base))) +# define KBTS_PASTE_1(A, B) A##B +# define KBTS_PASTE_0(A, B) KBTS_PASTE_1(A, B) +# define KBTS_PASTE(A, B) KBTS_PASTE_0(A, B) +# define KBTS_IN_SET(X, Set) ((1u << (X)) & (Set)) +# define KBTS_SET32_0(Arg) | (1u << (Arg)) KBTS_SET32_1 +# define KBTS_SET32_1(Arg) | (1u << (Arg)) KBTS_SET32_0 +# define KBTS_SET32_0End +# define KBTS_SET32_1End +# define KBTS_SET32(Args) (0u KBTS_PASTE(KBTS_SET32_0 Args, End)) +# define KBTS_IN_SET64(X, Set) ((1ull << (X)) & (Set)) +# define KBTS_SET64_0(Arg) | (1ull << (Arg)) KBTS_SET64_1 +# define KBTS_SET64_1(Arg) | (1ull << (Arg)) KBTS_SET64_0 +# define KBTS_SET64_0End +# define KBTS_SET64_1End +# define KBTS_SET64(Args) (0u KBTS_PASTE(KBTS_SET64_0 Args, End)) + +# ifndef KBTS_ASSERT +#ifndef KB_TEXT_SHAPE_NO_CRT +# include +# define KBTS_ASSERT(Cond) assert(Cond) +#else +#define KBTS_ASSERT(Cond) +#endif +# endif + +#ifndef KB_TEXT_SHAPE_NO_CRT +#include +#endif + +#ifndef kbts_ByteSwap16 +# if defined(_MSC_VER) && !defined(__clang__) +# define kbts_ByteSwap16(X) _byteswap_ushort(X) +# define kbts_ByteSwap32(X) _byteswap_ulong(X) +# define kbts_PopCount32(X) (kbts_un)__popcnt(X) +# elif defined(__clang__) || defined(__GNUC__) +# define kbts_ByteSwap16(X) __builtin_bswap16(X) +# define kbts_ByteSwap32(X) __builtin_bswap32(X) +# define kbts_PopCount32(X) (kbts_un)__builtin_popcount(X) +# else +# error Unsupported compiler! +# endif +#endif + +#define KBTS_FEATURE_FLAG0(Feature) (1ull << KBTS_FEATURE_ID_##Feature) +#define KBTS_FEATURE_FLAG1(Feature) (1ull << (KBTS_FEATURE_ID_##Feature - 64)) + +// # define KBTS_DUMP +# ifdef KBTS_DUMP +# define KBTS_DUMPF(...) printf(__VA_ARGS__), fflush(stdout) +# else +# define KBTS_DUMPF(...) +# endif + +# define KBTS_GROW_BUFFER_MARGIN 16 + +#ifndef KBTS_INSTRUMENT_BLOCK_BEGIN +#define KBTS_INSTRUMENT_BLOCK_BEGIN(Name) +#define KBTS_INSTRUMENT_FUNCTION_BEGIN +#define KBTS_INSTRUMENT_END +#endif + +#define KBTS_MAXIMUM_DECOMPOSITION_CODEPOINTS 6 +typedef struct kbts_script_properties { + kbts_u32 Tag; + kbts_shaper Shaper; +} kbts_script_properties; + +static kbts_script_properties kbts_ScriptProperties[KBTS_SCRIPT_COUNT] = { + {KBTS_FOURCC(' ', ' ', ' ', ' '),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('a', 'd', 'l', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('a', 'h', 'o', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'l', 'u', 'w'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('a', 'r', 'a', 'b'),KBTS_SHAPER_ARABIC}, + {KBTS_FOURCC('a', 'r', 'm', 'n'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('a', 'v', 's', 't'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'a', 'l', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'a', 'm', 'u'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('b', 'a', 's', 's'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'a', 't', 'k'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'n', 'g', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('b', 'h', 'k', 's'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'o', 'p', 'o'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('b', 'r', 'a', 'h'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'u', 'g', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('b', 'u', 'h', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('c', 'a', 'n', 's'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('c', 'a', 'r', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('a', 'g', 'h', 'b'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('c', 'a', 'k', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('c', 'h', 'a', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('c', 'h', 'e', 'r'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('c', 'h', 'r', 's'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'a', 'n', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('c', 'o', 'p', 't'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('c', 'p', 'r', 't'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('c', 'p', 'm', 'n'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('c', 'y', 'r', 'l'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('D', 'F', 'L', 'T'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('D', 'F', 'L', 'T'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('d', 's', 'r', 't'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('d', 'e', 'v', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('d', 'i', 'a', 'k'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('d', 'o', 'g', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('d', 'u', 'p', 'l'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('e', 'g', 'y', 'p'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('e', 'l', 'b', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('e', 'l', 'y', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('e', 't', 'h', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('g', 'a', 'r', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('g', 'e', 'o', 'r'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('g', 'l', 'a', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('g', 'o', 't', 'h'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('g', 'r', 'a', 'n'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('g', 'r', 'e', 'k'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('g', 'j', 'r', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('g', 'o', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('g', 'u', 'r', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('g', 'u', 'k', 'h'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'a', 'n', 'g'),KBTS_SHAPER_HANGUL}, + {KBTS_FOURCC('r', 'o', 'h', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'a', 'n', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'a', 't', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('h', 'e', 'b', 'r'),KBTS_SHAPER_HEBREW}, + {KBTS_FOURCC('k', 'a', 'n', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('a', 'r', 'm', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('p', 'h', 'l', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('p', 'r', 't', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('j', 'a', 'v', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 't', 'h', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'n', 'd', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('k', 'a', 'n', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('k', 'a', 'w', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'a', 'l', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'h', 'a', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'i', 't', 's'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'h', 'm', 'r'),KBTS_SHAPER_KHMER}, + {KBTS_FOURCC('k', 'h', 'o', 'j'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'i', 'n', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('k', 'r', 'a', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'a', 'o', ' '),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('l', 'a', 't', 'n'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('l', 'e', 'p', 'c'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'i', 'm', 'b'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'i', 'n', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('l', 'i', 'n', 'b'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('l', 'i', 's', 'u'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'y', 'c', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'y', 'd', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('m', 'a', 'h', 'j'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'a', 'k', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'l', 'm', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('m', 'a', 'n', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'a', 'n', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'a', 'r', 'c'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('g', 'o', 'n', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'e', 'd', 'f'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 't', 'e', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'e', 'n', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'e', 'r', 'c'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'e', 'r', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('p', 'l', 'r', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'o', 'd', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'o', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'r', 'o', 'o'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('m', 'u', 'l', 't'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('m', 'y', 'm', '2'),KBTS_SHAPER_MYANMAR}, + {KBTS_FOURCC('n', 'b', 'a', 't'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('n', 'a', 'g', 'm'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('n', 'a', 'n', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('n', 'e', 'w', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'l', 'u'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('n', 'k', 'o', ' '),KBTS_SHAPER_USE}, + {KBTS_FOURCC('n', 's', 'h', 'u'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('h', 'm', 'n', 'p'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('o', 'g', 'a', 'm'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('o', 'l', 'c', 'k'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('o', 'n', 'a', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('i', 't', 'a', 'l'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('h', 'u', 'n', 'g'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('n', 'a', 'r', 'b'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('p', 'e', 'r', 'm'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('x', 'p', 'e', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'o', 'g', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'a', 'r', 'b'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('o', 'r', 'k', 'h'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('o', 'u', 'g', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('o', 'r', 'y', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('o', 's', 'g', 'e'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('o', 's', 'm', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('h', 'm', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('p', 'a', 'l', 'm'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('p', 'a', 'u', 'c'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('p', 'h', 'a', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('p', 'h', 'n', 'x'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('p', 'h', 'l', 'p'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('r', 'j', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('r', 'u', 'n', 'r'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('s', 'a', 'm', 'r'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('s', 'a', 'u', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'h', 'r', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'h', 'a', 'w'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('s', 'i', 'd', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'g', 'n', 'w'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'o', 'g', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'i', 'n', 'h'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'o', 'r', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'o', 'y', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('x', 's', 'u', 'x'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'u', 'n', 'd'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'u', 'n', 'u'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'y', 'l', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('s', 'y', 'r', 'c'),KBTS_SHAPER_ARABIC}, + {KBTS_FOURCC('t', 'g', 'l', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'g', 'b'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'l', 'e'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('l', 'a', 'n', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'v', 't'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'k', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'm', 'l', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('t', 'n', 's', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'a', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'e', 'l', '2'),KBTS_SHAPER_INDIC}, + {KBTS_FOURCC('t', 'h', 'a', 'a'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('t', 'h', 'a', 'i'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('t', 'i', 'b', 't'),KBTS_SHAPER_TIBETAN}, + {KBTS_FOURCC('t', 'f', 'n', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'i', 'r', 'h'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'o', 'd', 'r'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'o', 't', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('t', 'u', 't', 'g'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('u', 'g', 'a', 'r'),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('v', 'a', 'i', ' '),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('v', 'i', 't', 'h'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('w', 'c', 'h', 'o'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('w', 'a', 'r', 'a'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('y', 'e', 'z', 'i'),KBTS_SHAPER_USE}, + {KBTS_FOURCC('y', 'i', ' ', ' '),KBTS_SHAPER_DEFAULT}, + {KBTS_FOURCC('z', 'a', 'n', 'b'),KBTS_SHAPER_USE}, +}; + +static kbts_s32 kbts_UnicodeParentDeltas[1679] = { + 132,133,134,135,244,246,248,250,252,254,315,351,416,418,7678,7680,7682,7792,7794,132,133,134,135,275,277,279,281,283,285,346,382,447, + 449,7709,7711,7713,7823,7825,131,132,133,134,174,176,178,180,182,416,418,452,7604,7606,7764,7766,7768,131,132,133,134,205,207,209,211,213, + 447,449,483,7635,7637,7795,7797,7799,127,128,129,130,131,132,160,162,164,365,416,418,454,7584,7744,7746,127,128,129,130,131,132,191,193, + 195,396,447,449,485,7615,7775,7777,131,132,133,134,135,222,224,226,306,355,380,414,416,448,7774,7776,131,132,133,134,135,253,255,257, + 337,386,411,445,447,479,7805,7807,131,132,133,134,223,225,227,229,231,390,447,449,7651,7807,7809,131,132,133,134,192,194,196,198,359, + 416,418,7620,7776,7778,132,134,254,442,7702,7712,7802,7804,7806,7808,-10,17,7031,7032,7101,7173,7191,7192,7197,131,214,216,218,395,7639,7641,7643, + 7645,131,245,247,249,426,7670,7672,7674,7676,132,285,287,473,7733,7833,7835,7837,7839,227,229,231,415,417,7655,7657,7661,6,8,7051,7052,7093, + 7195,7196,7201,189,439,7611,7613,7615,7617,7619,7726,239,241,423,7671,7673,7675,7677,7715,-5,6991,6992,7103,7167,7168,7170,7173,258,260,262,446,448, + 7686,7688,7692,182,184,186,188,384,398,7610,213,215,217,219,415,429,7641,232,234,236,238,422,7662,7664,263,265,267,269,453,7693,7695,-15, + 17,7071,7072,7231,7232,7233,220,470,7642,7644,7646,7648,7650,-11,7031,7032,7207,7208,7209,7211,254,7690,7692,7694,7696,7698,7713,270,272,454,7702,7704, + 7706,7708,206,208,210,7627,7631,7633,-23,6,7092,7235,7236,7237,-26,7103,7104,7249,7251,7549,235,413,7653,7655,7657,8415,237,239,241,7658,7662,7664, + -9,7017,7018,7101,7180,7183,5,7063,7064,7091,7210,7213,256,258,260,7703,7705,7707,171,7591,7593,7595,7597,7599,287,289,291,7734,7736,7738,202,7622, + 7624,7626,7628,7630,285,7721,7723,7725,7727,7729,-3,-2,-1,3,4,1,2,3,4,5,132,164,166,168,170,-14,7057,7058,7219,7221,132,195, + 197,199,201,7481,7483,7485,7487,7489,7482,7484,7486,7488,7490,204,382,7622,7624,7626,2,4,6,64,3,4,5,7,-21,203,205,207,2,4, + 6,112,-11,1,202,204,2,4,6,128,1,37,171,173,-8,7003,7004,7101,-19,7081,7082,7257,27,172,174,176,-13,7043,7044,7219,218,220, + 222,224,249,251,253,255,13,7041,7042,7097,7596,7598,7600,7602,7619,7621,7623,7625,7637,7639,7641,7643,7645,7647,7649,7651,7650,7652,7654,7656,7668,7670, + 7672,7674,7676,7678,7680,7682,-33,-32,-31,-58,7176,7181,-27,7191,7196,-5,-4,-2,1,2,4,1,3,5,2,3,5,1,4,5,-21,-20, + 193,2,4,16,3,5,6,14,15,16,27,28,162,312,7512,7514,343,7543,7545,7585,7587,7589,733,7961,8005,7616,7618,7620,7634,7636,7638,7665, + 7667,7669,22891,22892,23346,31318,31405,162165,31650,31843,31932,35977,36182,166849,36278,36572,167227,36626,36698,36797,62785,62786,62816,25280,156147,156148,37394,37755,168385,38990,39065,169662, + 62814,62815,62816,39089,39163,169757,40312,40387,171144,173234,173235,173236,-29,-28,12,22,161,163,140,167,171,198,253,279,203,390,284,310,7109,7176,7111,7190, + 7087,7206,7203,7204,7426,7428,7428,7430,7684,7686,309,8294,7687,7689,7699,7701,7718,7720,7730,7732,25135,25233,25194,25291,25286,25458,25477,25572,27117,27183,27997,28089, + 28255,28607,28357,28407,28458,28550,28458,28610,28513,28603,28875,28962,30692,30693,24507,155384,32406,32493,27530,158375,28470,159303,33613,33756,28625,159459,29500,160322,34266,34388,34540,34678, + 29402,160600,30216,161096,35034,35118,30351,161459,32788,163609,32908,163783,35621,35704,37790,37917,32943,164035,33018,163837,40630,40631,41398,41506,42137,42203,33247,163972,54624,54625,33631,164350, + 33716,164428,33778,164808,34352,165055,34921,165612,35453,166134,35790,166464,62788,62816,62816,62826,36046,166794,62816,62834,62816,62838,37311,168029,37752,168382,37810,168510,62816,62843,161426,161674, + 38130,168825,38679,169659,39225,169818,39337,169999,39518,170436,40398,171018,42033,172614,42209,172718,164391,164392,169819,169821,42724,173276,42572,173332,42877,173358,42832,173379,170354,170355,42858,173405, + 42927,173406,43001,173641,43196,173670,43237,173761,171308,171309,43338,173859,172737,172738,43650,174167,47771,178448,178804,178805,48949,179530,-99324,-90618,-87924,-84098,-80132,-77179,-77172,-3295,-163,-70, + -60,-59,-36,-16,-6,9,10,26,32,34,41,48,51,55,56,59,60,63,66,67,78,81,100,118,169,187,200,278,282,294,340,720, + 835,7085,7086,7110,7112,7156,7234,7243,7261,7273,7276,7277,7434,7440,7452,7458,7519,7609,7640,8009,8079,8739,8753,8754,21533,21757,22403,22533,22797,22850,23095,23227, + 23233,23281,23298,23360,23371,23380,23445,23673,23963,24010,24281,24349,24361,24836,24879,24891,24946,24988,25094,25170,25195,25276,25316,25326,25344,25350,25352,25422,25430,25435,25464,25496, + 25532,25561,25674,25675,25959,26097,26171,26173,26193,26425,26493,26543,26589,26627,26653,26703,26718,26756,26801,26921,26923,26951,26960,26999,27073,27179,27192,27217,27250,27309,27312,27340, + 27464,27707,27770,27782,27832,28049,28122,28147,28267,28324,28331,28608,28656,28666,28698,28799,28894,28935,28936,28952,28977,29008,29015,29045,29116,29367,29393,29426,29487,29526,29684,29686, + 29710,29867,29894,29915,29989,30055,30069,30405,30408,30477,30542,30561,30734,30805,30831,30919,30920,31016,31027,31082,31114,31253,31329,31341,31401,31464,31513,31603,31641,31645,31768,31776, + 31816,31823,31892,31935,31972,32043,32045,32084,32095,32103,32104,32307,32472,32556,32570,32701,32715,32724,32763,32776,32859,32870,32873,32893,32949,32955,32965,32988,33012,33023,33028,33030, + 33038,33053,33123,33210,33356,33388,33445,33526,33630,33642,33663,33740,33795,33809,33908,33926,33927,34059,34105,34117,34135,34152,34204,34243,34270,34273,34299,34344,34351,34354,34532,34563, + 34594,34618,34800,34802,34846,34877,34890,35031,35039,35127,35170,35206,35327,35379,35391,35439,35457,35631,35634,35699,35773,35776,35820,35834,35882,35884,35898,35996,36049,36071,36074,36094, + 36206,36343,36373,36377,36443,36446,36636,36665,37113,37178,37315,37331,37334,37344,37389,37453,37469,37523,37573,37693,37694,37714,37822,37837,37846,37873,37925,37977,37984,37996,38049,38135, + 38202,38357,38441,38457,38461,38492,38514,38517,38540,38556,38590,38601,38700,38703,38730,38800,38820,38911,39000,39061,39126,39128,39210,39246,39296,39312,39342,39357,39397,39414,39487,39501, + 39574,39640,39641,39706,39707,39736,39771,39850,39856,39889,39921,40124,40165,40169,40314,40318,40374,40407,40575,40793,40888,40900,40928,40974,40990,41059,41074,41230,41259,41274,41362,41418, + 41465,41616,41648,41658,41772,41860,41936,42061,42273,42276,42288,42302,42407,42408,42447,42448,42577,42624,42634,42668,42735,42746,42814,42871,42872,42885,42889,42928,42932,42949,43023,43025, + 43050,43063,43086,43088,43108,43212,43233,43253,43257,43274,43311,43396,43418,43430,43431,43433,43562,43673,43716,43721,43731,43763,43813,43828,43837,43866,44106,44197,44287,45331,45553,45851, + 46452,46778,47491,47538,47676,47803,48104,48191,48639,48746,49225,49737,50294,50458,50655,50670,50678,50721,51392,52429,52652,53712,55046,55194,55959,56301,56665,56996,57719,57784,58229,60629, + 60936,61695,61907,61909,62155,62198,62454,62765,63201,154337,154373,154379,154388,154394,154398,154458,154792,154895,155083,155657,155716,155742,155867,155936,156119,156186,156370,156464,156729,156771,157143,157170, + 157457,157550,157615,157899,157907,157938,158030,158191,158474,158700,158735,158751,158816,158907,158996,159017,159101,159535,159951,159977,159983,160097,160099,160192,160223,160312,160338,160404,160427,160472,160526,160560, + 160589,160590,160611,160840,160916,160950,160951,161207,161223,161238,161239,161248,161262,161335,161357,161401,161404,161456,161496,161505,161506,161524,161534,161541,161672,161833,161863,161920,162000,162063,162077,162175, + 162275,162300,162603,162669,162727,162825,162922,162944,162950,162964,163226,163228,163441,163596,163600,163692,164096,164287,164650,164856,164880,164968,165036,165075,165095,165254,165278,165294,165520,165540,165586,165624, + 165762,165829,165847,165997,166043,166050,166093,166106,166138,166220,166305,166469,166555,166617,166677,166784,166796,166810,166850,166867,166889,166960,166973,167063,167084,167253,167297,167325,167374,167442,167491,167680, + 167750,167846,167890,168022,168079,168134,168165,168283,168317,168329,168377,168404,168505,168580,168680,168797,169000,169030,169039,169050,169117,169177,169211,169240,169273,169299,169319,169340,169406,169442,169476,169559, + 169624,169634,169681,169722,169727,169737,169776,169822,169950,170015,170150,170183,170192,170242,170273,170287,170295,170386,170455,170457,170459,170526,170569,170589,170631,170656,170756,170768,170772,170809,170937,170989, + 171031,171074,171091,171117,171123,171133,171158,171178,171361,171520,171581,171592,171638,171661,171729,171773,171836,171843,171862,171875,171876,171880,171948,172068,172070,172103,172127,172164,172234,172341,172342,172507, + 172541,172680,172694,172701,172769,172784,172850,172875,172958,173015,173046,173061,173109,173129,173134,173144,173164,173244,173268,173283,173348,173484,173488,173531,173541,173595,173608,173678,173684,173696,173704,173722, + 173740,173741,173755,173791,173884,173886,173888,173936,173966,174085,174155,174244,174413,174529,174531,174537,175296,175385,175393,175423,175674,175824,175946,176003,176010,176140,176218,176903,176911,177043,177097,177128, + 177223,177230,177233,177276,177406,177443,177529,177580,177691,177725,177772,177863,177981,178014,178217,178286,178358,178437,178487,178498,178712,178814,179072,179159,179364,179414,179605,179637,179656,179693,179803,179860, + 180071,180102,180152,180175,180238,180262,180308,180469,180588,180601,181007,181056,181082,181102,181519, +}; + +static kbts_u8 kbts_UnicodeDecomposition_PageIndices[17407] = { + 0,1,1,2,3,4,5,6,7,1,1,1,1,8,9,10,11,12,1,13,1,1,1,1,14,1,1,15,1,1,1,1, + 1,1,1,1,16,17,1,18,19,20,1,1,1,21,1,22,1,23,1,24,1,25,1,26,1,1,1,1,1,27,28,1, + 29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,30,31, + 1,1,1,1,1,1,1,1,1,1,1,1,32,33,1,1,1,1,1,1,1,1,1,1,34,35,36,37,38,39,40,41, + 42,1,1,1,43,1,44,45,46,47,48,49,50,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,51,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,52,53,54,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,55,56,57,58,59,60,61,62,63,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,65,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,66,1,67,1,1,1,1,1,1,1,1,68,69,70,1,1,71,1,1,1,72,1,1,1,1,1,1,1,1,1, + 1,1,1,1,73,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,75,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,76,77,78,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 79,80,81,82,83,84,85,86,87,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +}; + +static kbts_u64 kbts_UnicodeDecomposition_Data[5632] = { + 52776558133248ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,343932928ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6442451206ull,6450839814ull,6459228422ull,6467617030ull,6509560070ull,6526337286ull,0ull,6769606926ull,6442451222ull,6450839830ull,6459228438ull,6509560086ull,6442451238ull,6450839846ull,6459228454ull,6509560102ull,0ull,6467617082ull,6442451262ull,6450839870ull,6459228478ull,6467617086ull,6509560126ull,0ull,0ull,6442451286ull,6450839894ull,6459228502ull,6509560150ull,6450839910ull,0ull,0ull, + 6442451334ull,6450839942ull,6459228550ull,6467617158ull,6509560198ull,6526337414ull,0ull,6769607054ull,6442451350ull,6450839958ull,6459228566ull,6509560214ull,6442451366ull,6450839974ull,6459228582ull,6509560230ull,0ull,6467617210ull,6442451390ull,6450839998ull,6459228606ull,6467617214ull,6509560254ull,0ull,0ull,6442451414ull,6450840022ull,6459228630ull,6509560278ull,6450840038ull,0ull,6509560294ull, + 6476005638ull,6476005766ull,6492782854ull,6492782982ull,6777995526ull,6777995654ull,6450839822ull,6450839950ull,6459228430ull,6459228558ull,6501171470ull,6501171598ull,6543114510ull,6543114638ull,6543114514ull,6543114642ull,0ull,0ull,6476005654ull,6476005782ull,6492782870ull,6492782998ull,6501171478ull,6501171606ull,6777995542ull,6777995670ull,6543114518ull,6543114646ull,6459228446ull,6459228574ull,6492782878ull,6492783006ull, + 6501171486ull,6501171614ull,6769606942ull,6769607070ull,6459228450ull,6459228578ull,0ull,0ull,6467617062ull,6467617190ull,6476005670ull,6476005798ull,6492782886ull,6492783014ull,6777995558ull,6777995686ull,6501171494ull,0ull,0ull,0ull,6459228458ull,6459228586ull,6769606958ull,6769607086ull,0ull,6450839858ull,6450839986ull,6769606962ull,6769607090ull,6543114546ull,6543114674ull,0ull, + 0ull,0ull,0ull,6450839866ull,6450839994ull,6769606970ull,6769607098ull,6543114554ull,6543114682ull,0ull,0ull,0ull,6476005694ull,6476005822ull,6492782910ull,6492783038ull,6534725950ull,6534726078ull,0ull,0ull,6450839882ull,6450840010ull,6769606986ull,6769607114ull,6543114570ull,6543114698ull,6450839886ull,6450840014ull,6459228494ull,6459228622ull,6769606990ull,6769607118ull, + 6543114574ull,6543114702ull,6769606994ull,6769607122ull,6543114578ull,6543114706ull,0ull,0ull,6467617110ull,6467617238ull,6476005718ull,6476005846ull,6492782934ull,6492783062ull,6526337366ull,6526337494ull,6534725974ull,6534726102ull,6777995606ull,6777995734ull,6459228510ull,6459228638ull,6459228518ull,6459228646ull,6509560166ull,6450839914ull,6450840042ull,6501171562ull,6501171690ull,6543114602ull,6543114730ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6668943678ull,6668943806ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6668943702ull,6668943830ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6543114502ull,6543114630ull,6543114534ull,6543114662ull,6543114558ull,6543114686ull,6543114582ull,6543114710ull,6476006258ull,6476006386ull,6450840434ull,6450840562ull,6543115122ull,6543115250ull,6442451826ull,6442451954ull,0ull,6476006162ull,6476006290ull, + 6476007578ull,6476007582ull,6476006170ull,6476006298ull,0ull,0ull,6543114526ull,6543114654ull,6543114542ull,6543114670ull,6777995582ull,6777995710ull,6476007338ull,6476007342ull,6543115998ull,6543116874ull,6543114666ull,0ull,0ull,0ull,6450839838ull,6450839966ull,0ull,0ull,6442451258ull,6442451386ull,6450840342ull,6450840470ull,6450840346ull,6450840474ull,6450840418ull,6450840546ull, + 6568280326ull,6568280454ull,6585057542ull,6585057670ull,6568280342ull,6568280470ull,6585057558ull,6585057686ull,6568280358ull,6568280486ull,6585057574ull,6585057702ull,6568280382ull,6568280510ull,6585057598ull,6585057726ull,6568280394ull,6568280522ull,6585057610ull,6585057738ull,6568280406ull,6568280534ull,6585057622ull,6585057750ull,6761218382ull,6761218510ull,6761218386ull,6761218514ull,0ull,0ull,6543114530ull,6543114658ull, + 0ull,0ull,0ull,0ull,0ull,0ull,6501171462ull,6501171590ull,6769606934ull,6769607062ull,6476006234ull,6476006362ull,6476006230ull,6476006358ull,6501171518ull,6501171646ull,6476007610ull,6476007614ull,6476005734ull,6476005862ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 3073ull,3077ull,0ull,3149ull,6450842658ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,2789ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,237ull,0ull, + 0ull,0ull,0ull,0ull,0ull,6450840226ull,6450843206ull,733ull,6450843222ull,6450843230ull,6450843238ull,0ull,6450843262ull,0ull,6450843286ull,6450843302ull,6450843434ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6509563494ull,6509563542ull,6450843334ull,6450843350ull,6450843358ull,6450843366ull,6450843438ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6509563622ull,6509563670ull,6450843390ull,6450843414ull,6450843430ull,0ull,0ull,0ull,0ull,6450843466ull,6509563722ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6442455126ull,6509563990ull,0ull,6450843726ull,0ull,0ull,0ull,6509563930ull,0ull,0ull,0ull,0ull,6450843754ull,6442455138ull,6492786830ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6492786786ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6492786914ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6442455254ull,6509564118ull,0ull,6450843854ull,0ull,0ull,0ull,6509564250ull,0ull,0ull,0ull,0ull,6450843882ull,6442455266ull,6492786958ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6568284626ull,6568284630ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,6492786778ull,6492786906ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6492786754ull,6492786882ull,6509563970ull,6509564098ull,0ull,0ull,6492786774ull,6492786902ull,0ull,0ull,6509564770ull,6509564774ull,6509563994ull,6509564122ull,6509563998ull,6509564126ull, + 0ull,0ull,6476009570ull,6476009698ull,6509564002ull,6509564130ull,6509564026ull,6509564154ull,0ull,0ull,6509564834ull,6509564838ull,6509564086ull,6509564214ull,6476009614ull,6476009742ull,6509564046ull,6509564174ull,6534729870ull,6534729998ull,6509564062ull,6509564190ull,0ull,0ull,6509564078ull,6509564206ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,13581162654ull,13589551262ull,13589551394ull,13597939870ull,13589551402ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 13589551958ull,0ull,13589551878ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,13589551946ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,19830678690ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,19830678734ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,19830678614ull,19830678618ull,19830678622ull,19830678642ull,19830678662ull,19830678666ull,19830678702ull,19830678718ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,20921198366ull,21130913566ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,20904421054ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,21978163402ull,0ull,0ull,21978163426ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,21978163290ull,21978163294ull,21978163314ull,0ull,0ull,21978163374ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,24343751966ull,0ull,0ull,24142425374ull,24352140574ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,24125648006ull,24125648010ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,25216167706ull,25216167710ull,25425882906ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,26491236634ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 27556590334ull,0ull,0ull,0ull,0ull,0ull,0ull,27556590362ull,27564978970ull,0ull,27397206810ull,27556590378ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,28437394714ull,28437394718ull,28647109914ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,29611800422ull,0ull,29653743462ull,29611800434ull,29787961190ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,33747385610ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33747385650ull,0ull,0ull,0ull,0ull,33747385670ull,0ull,0ull,0ull,0ull,33747385690ull,0ull,0ull,0ull,0ull,33747385710ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33730608386ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33168571846ull,0ull,33185349062ull,33286012618ull,0ull,33286012622ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,33286012358ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33747385930ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33747385970ull,0ull,0ull, + 0ull,0ull,33747385990ull,0ull,0ull,0ull,0ull,33747386010ull,0ull,0ull,0ull,0ull,33747386030ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,33730608706ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,34745630870ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,35235358072582ull,35235366461190ull, + 35235374849798ull,0ull,0ull,0ull,35235408404230ull,35235416792838ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,58426682390ull,0ull,58426682398ull,0ull,58426682406ull,0ull,58426682414ull,0ull,58426682422ull,0ull,0ull,0ull,58426682438ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,58426682602ull,0ull,58426682610ull,0ull,0ull, + 58426682618ull,58426682622ull,0ull,58426682634ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6752829702ull,6752829830ull,6501171466ull,6501171594ull,6736052490ull,6736052618ull,6853493002ull,6853493130ull,6450840350ull,6450840478ull,6501171474ull,6501171602ull,6736052498ull,6736052626ull,6853493010ull,6853493138ull,6769606930ull,6769607058ull,6819938578ull,6819938706ull,6442452042ull,6442452046ull,6450840650ull,6450840654ull,6819938582ull,6819938710ull,6845104406ull,6845104534ull,6492784802ull,6492784806ull,6501171482ull,6501171610ull, + 6476005662ull,6476005790ull,6501171490ull,6501171618ull,6736052514ull,6736052642ull,6509560098ull,6509560226ull,6769606946ull,6769607074ull,6828327202ull,6828327330ull,6845104422ull,6845104550ull,6450840382ull,6450840510ull,6450839854ull,6450839982ull,6736052526ull,6736052654ull,6853493038ull,6853493166ull,6736052530ull,6736052658ull,6476036314ull,6476036318ull,6853493042ull,6853493170ull,6819938610ull,6819938738ull,6450839862ull,6450839990ull, + 6501171510ull,6501171638ull,6736052534ull,6736052662ull,6501171514ull,6501171642ull,6736052538ull,6736052666ull,6853493050ull,6853493178ull,6819938618ull,6819938746ull,6450840406ull,6450840534ull,6509560662ull,6509560790ull,6442452274ull,6442452278ull,6450840882ull,6450840886ull,6450839874ull,6450840002ull,6501171522ull,6501171650ull,6501171530ull,6501171658ull,6736052554ull,6736052682ull,6476036458ull,6476036462ull,6853493066ull,6853493194ull, + 6501171534ull,6501171662ull,6736052558ull,6736052686ull,6501172586ull,6501172590ull,6501172610ull,6501172614ull,6501202314ull,6501202318ull,6501171538ull,6501171666ull,6736052562ull,6736052690ull,6853493074ull,6853493202ull,6819938642ull,6819938770ull,6744441174ull,6744441302ull,6845104470ull,6845104598ull,6819938646ull,6819938774ull,6450840994ull,6450840998ull,6509561258ull,6509561262ull,6467617114ull,6467617242ull,6736052570ull,6736052698ull, + 6442451294ull,6442451422ull,6450839902ull,6450840030ull,6509560158ull,6509560286ull,6501171550ull,6501171678ull,6736052574ull,6736052702ull,6501171554ull,6501171682ull,6509560162ull,6509560290ull,6501171558ull,6501171686ull,6459228522ull,6459228650ull,6736052586ull,6736052714ull,6853493098ull,6853493226ull,6853493154ull,6509560274ull,6526337502ull,6526337510ull,0ull,6501172734ull,0ull,0ull,0ull,0ull, + 6736052486ull,6736052614ull,6517948678ull,6517948806ull,6450840330ull,6450840458ull,6442451722ull,6442451850ull,6517949194ull,6517949322ull,6467617546ull,6467617674ull,6459259522ull,6459259526ull,6450840586ull,6450840590ull,6442451978ull,6442451982ull,6517949450ull,6517949454ull,6467617802ull,6467617806ull,6492813954ull,6492813958ull,6736052502ull,6736052630ull,6517948694ull,6517948822ull,6467617046ull,6467617174ull,6450840362ull,6450840490ull, + 6442451754ull,6442451882ull,6517949226ull,6517949354ull,6467617578ull,6467617706ull,6459259618ull,6459259622ull,6517948710ull,6517948838ull,6736052518ull,6736052646ull,6736052542ull,6736052670ull,6517948734ull,6517948862ull,6450840402ull,6450840530ull,6442451794ull,6442451922ull,6517949266ull,6517949394ull,6467617618ull,6467617746ull,6459259698ull,6459259702ull,6450841218ull,6450841222ull,6442452610ull,6442452614ull,6517950082ull,6517950086ull, + 6467618434ull,6467618438ull,6736053890ull,6736053894ull,6736052566ull,6736052694ull,6517948758ull,6517948886ull,6450841278ull,6450841282ull,6442452670ull,6442452674ull,6517950142ull,6517950146ull,6467618494ull,6467618498ull,6736053950ull,6736053954ull,6442451302ull,6442451430ull,6736052582ull,6736052710ull,6517948774ull,6517948902ull,6467617126ull,6467617254ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6601838278ull,6610226886ull,6442482690ull,6442482694ull,6450871298ull,6450871302ull,6996130818ull,6996130822ull,6601838150ull,6610226758ull,6442482722ull,6442482726ull,6450871330ull,6450871334ull,6996130850ull,6996130854ull,6601838294ull,6610226902ull,6442482754ull,6442482758ull,6450871362ull,6450871366ull,0ull,0ull,6601838166ull,6610226774ull,6442482786ull,6442482790ull,6450871394ull,6450871398ull,0ull,0ull, + 6601838302ull,6610226910ull,6442482818ull,6442482822ull,6450871426ull,6450871430ull,6996130946ull,6996130950ull,6601838174ull,6610226782ull,6442482850ull,6442482854ull,6450871458ull,6450871462ull,6996130978ull,6996130982ull,6601838310ull,6610226918ull,6442482882ull,6442482886ull,6450871490ull,6450871494ull,6996131010ull,6996131014ull,6601838182ull,6610226790ull,6442482914ull,6442482918ull,6450871522ull,6450871526ull,6996131042ull,6996131046ull, + 6601838334ull,6610226942ull,6442482946ull,6442482950ull,6450871554ull,6450871558ull,0ull,0ull,6601838206ull,6610226814ull,6442482978ull,6442482982ull,6450871586ull,6450871590ull,0ull,0ull,6601838358ull,6610226966ull,6442483010ull,6442483014ull,6450871618ull,6450871622ull,6996131138ull,6996131142ull,0ull,6610226838ull,0ull,6442483046ull,0ull,6450871654ull,0ull,6996131174ull, + 6601838374ull,6610226982ull,6442483074ull,6442483078ull,6450871682ull,6450871686ull,6996131202ull,6996131206ull,6601838246ull,6610226854ull,6442483106ull,6442483110ull,6450871714ull,6450871718ull,6996131234ull,6996131238ull,6442454726ull,3761ull,6442454742ull,3765ull,6442454750ull,3769ull,6442454758ull,3773ull,6442454782ull,3889ull,6442454806ull,3893ull,6442454822ull,3897ull,0ull,0ull, + 7021296642ull,7021296646ull,7021296650ull,7021296654ull,7021296658ull,7021296662ull,7021296666ull,7021296670ull,7021296674ull,7021296678ull,7021296682ull,7021296686ull,7021296690ull,7021296694ull,7021296698ull,7021296702ull,7021296770ull,7021296774ull,7021296778ull,7021296782ull,7021296786ull,7021296790ull,7021296794ull,7021296798ull,7021296802ull,7021296806ull,7021296810ull,7021296814ull,7021296818ull,7021296822ull,7021296826ull,7021296830ull, + 7021297026ull,7021297030ull,7021297034ull,7021297038ull,7021297042ull,7021297046ull,7021297050ull,7021297054ull,7021297058ull,7021297062ull,7021297066ull,7021297070ull,7021297074ull,7021297078ull,7021297082ull,7021297086ull,6492786374ull,6476009158ull,7021297090ull,7021268678ull,7021268658ull,0ull,6996102854ull,7021297370ull,6492786246ull,6476009030ull,6442454598ull,3609ull,7021268550ull,0ull,3813ull,0ull, + 0ull,6996099746ull,7021297106ull,7021268702ull,7021268666ull,0ull,6996102878ull,7021297434ull,6442454614ull,3617ull,6442454622ull,3621ull,7021268574ull,6442483454ull,6450872062ull,6996131582ull,6492786406ull,6476009190ull,6442454826ull,3649ull,0ull,0ull,6996102886ull,6996102954ull,6492786278ull,6476009062ull,6442454630ull,3625ull,0ull,6442483706ull,6450872314ull,6996131834ull, + 6492786454ull,6476009238ull,6442454830ull,3777ull,6601838342ull,6610226950ull,6996102934ull,6996102958ull,6492786326ull,6476009110ull,6442454678ull,3641ull,6610226822ull,6442451618ull,3605ull,385ull,0ull,0ull,7021297138ull,7021268774ull,7021268794ull,0ull,6996102950ull,7021297626ull,6442454654ull,3633ull,6442454694ull,3645ull,7021268646ull,721ull,0ull,0ull, + 32777ull,32781ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,32833ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,3749ull,0ull,0ull,0ull,301ull,789ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912247362ull,6912247370ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912247378ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912247618ull,6912247634ull,6912247626ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,6912247822ull,0ull,0ull,0ull,0ull,6912247842ull,0ull,0ull,6912247854ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,6912247950ull,0ull,6912247958ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,6912248050ull,0ull,0ull,6912248078ull,0ull,0ull,6912248086ull,0ull,6912248098ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6912213238ull,0ull,6912248198ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912248118ull,6912213234ull,6912213242ull,6912248210ull,6912248214ull,0ull,0ull,6912248266ull,6912248270ull,0ull,0ull,6912248282ull,6912248286ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6912248298ull,6912248302ull,0ull,0ull,6912248330ull,6912248334ull,0ull,0ull,6912248346ull,6912248350ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912248458ull,6912248482ull,6912248486ull,6912248494ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 6912248306ull,6912248310ull,6912248390ull,6912248394ull,0ull,0ull,0ull,0ull,0ull,0ull,6912248522ull,6912248526ull,6912248530ull,6912248534ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,49185ull,49189ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6912256886ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721582ull,0ull,104362721590ull,0ull,104362721598ull,0ull,104362721606ull,0ull,104362721614ull,0ull,104362721622ull,0ull,104362721630ull,0ull,104362721638ull,0ull,104362721646ull,0ull,104362721654ull,0ull, + 104362721662ull,0ull,104362721670ull,0ull,0ull,104362721682ull,0ull,104362721690ull,0ull,104362721698ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721726ull,104371110334ull,0ull,104362721738ull,104371110346ull,0ull,104362721750ull,104371110358ull,0ull,104362721762ull,104371110370ull,0ull,104362721774ull,104371110382ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721562ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721910ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721966ull,0ull,104362721974ull,0ull,104362721982ull,0ull,104362721990ull,0ull,104362721998ull,0ull,104362722006ull,0ull,104362722014ull,0ull,104362722022ull,0ull,104362722030ull,0ull,104362722038ull,0ull, + 104362722046ull,0ull,104362722054ull,0ull,0ull,104362722066ull,0ull,104362722074ull,0ull,104362722082ull,0ull,0ull,0ull,0ull,0ull,0ull,104362722110ull,104371110718ull,0ull,104362722122ull,104371110730ull,0ull,104362722134ull,104371110742ull,0ull,104362722146ull,104371110754ull,0ull,104362722158ull,104371110766ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,104362721946ull,0ull,0ull,104362722238ull,104362722242ull,104362722246ull,104362722250ull,0ull,0ull,0ull,104362722294ull,0ull, + 143649ull,105425ull,146217ull,144161ull,113477ull,80073ull,85909ull,163441ull,163441ull,91461ull,149317ull,87581ull,91425ull,100313ull,121253ull,130581ull,137469ull,138985ull,140257ull,148029ull,108553ull,111725ull,115557ull,118649ull,135413ull,148905ull,157637ull,80393ull,85461ull,109585ull,116845ull,137397ull, + 161913ull,95553ull,114605ull,137013ull,140689ull,101157ull,132961ull,139389ull,97065ull,105565ull,112041ull,117745ull,148281ull,81433ull,83677ull,84857ull,103185ull,109389ull,116801ull,121757ull,131077ull,137241ull,137585ull,145341ull,154825ull,159165ull,161769ull,123441ull,124413ull,128641ull,134949ull,150545ull, + 162301ull,142169ull,91005ull,97297ull,127361ull,131577ull,117129ull,123689ull,144137ull,154589ull,90977ull,94601ull,108621ull,112489ull,113725ull,128189ull,129245ull,153901ull,84809ull,131629ull,83825ull,83761ull,125041ull,128761ull,135109ull,154069ull,142849ull,101181ull,108553ull,142329ull,80101ull,94109ull, + 98377ull,118301ull,120257ull,85085ull,123885ull,81661ull,97957ull,79925ull,111409ull,103905ull,128137ull,85773ull,90489ull,121861ull,135461ull,141993ull,110313ull,147137ull,111137ull,101369ull,134037ull,102017ull,120213ull,80569ull,83365ull,83749ull,107013ull,127901ull,133565ull,142153ull,149309ull,84949ull, + 86281ull,91597ull,97201ull,104213ull,114681ull,124073ull,153269ull,158121ull,162397ull,162617ull,84589ull,105241ull,110045ull,146825ull,96721ull,99905ull,100353ull,103017ull,113805ull,116005ull,119333ull,124713ull,128977ull,131517ull,146585ull,136121ull,147597ull,150825ull,84061ull,84621ull,86773ull,115489ull, + 140041ull,141993ull,97061ull,98261ull,101869ull,110265ull,127225ull,118229ull,80785ull,89061ull,94109ull,95977ull,98417ull,118473ull,119205ull,130665ull,131353ull,149713ull,154585ull,154913ull,155745ull,81453ull,124601ull,149201ull,154337ull,99205ull,80409ull,82793ull,94137ull,94461ull,104037ull,108553ull, + 116537ull,121097ull,136177ull,147953ull,163381ull,104993ull,153785ull,84517ull,105965ull,106445ull,111877ull,113265ull,118821ull,120165ull,123309ull,128065ull,156025ull,83381ull,100537ull,154081ull,82093ull,95333ull,112553ull,146601ull,97837ull,99601ull,106589ull,118301ull,154137ull,84133ull,86077ull,94613ull, + 104525ull,105785ull,107169ull,111509ull,118809ull,120713ull,130533ull,140093ull,140165ull,149297ull,154505ull,85245ull,113385ull,86133ull,116545ull,119393ull,137193ull,154253ull,160093ull,162429ull,106077ull,112429ull,133025ull,125741ull,126081ull,127561ull,117505ull,115301ull,142689ull,80641ull,134361ull,84201ull, + 83997ull,96921ull,101197ull,127833ull,93717ull,111737ull,105169ull,146669ull,139569ull,153909ull,140845ull,97101ull,83201ull,87809ull,0ull,0ull,90473ull,0ull,104913ull,0ull,0ull,83833ull,117929ull,121641ull,124145ull,124281ull,124309ull,124477ull,154969ull,127737ull,130805ull,0ull, + 137289ull,0ull,142305ull,0ull,0ull,147681ull,148469ull,0ull,0ull,0ull,156605ull,156657ull,156833ull,161489ull,148345ull,154333ull,81593ull,82845ull,83253ull,84773ull,84881ull,85317ull,87669ull,88089ull,88481ull,90369ull,90785ull,94609ull,94649ull,98897ull,99745ull,99897ull, + 100297ull,103741ull,104329ull,105029ull,107029ull,112093ull,112745ull,113801ull,116153ull,116909ull,118921ull,123461ull,124153ull,124197ull,124193ull,124225ull,124249ull,124277ull,124469ull,124473ull,125185ull,125445ull,126721ull,128977ull,129061ull,129285ull,130505ull,131093ull,133045ull,133605ull,133605ull,135517ull, + 140353ull,140889ull,142341ull,142565ull,144205ull,144417ull,147161ull,147681ull,154509ull,155645ull,155885ull,98773ull,592825ull,133217ull,0ull,0ull,80025ull,83669ull,83361ull,81409ull,83221ull,83457ull,84765ull,84969ull,87669ull,87381ull,87653ull,87945ull,90473ull,90829ull,91409ull,91473ull, + 92553ull,93345ull,97097ull,97125ull,97701ull,97973ull,99169ull,99641ull,99361ull,99897ull,99713ull,100297ull,100561ull,102161ull,102513ull,102729ull,103769ull,104913ull,105565ull,105581ull,105817ull,110053ull,110313ull,111877ull,113517ull,113453ull,113801ull,114809ull,116153ull,122525ull,116949ull,117437ull, + 117929ull,119237ull,119833ull,120045ull,120949ull,120957ull,121641ull,121709ull,121809ull,122153ull,122113ull,123697ull,125637ull,126721ull,127469ull,128365ull,128977ull,130297ull,131093ull,134473ull,135101ull,138725ull,140549ull,140825ull,140889ull,142077ull,142305ull,142125ull,142341ull,142329ull,142261ull,142565ull, + 142889ull,144417ull,146657ull,147913ull,149093ull,149977ull,154097ull,154509ull,154969ull,155501ull,155645ull,155693ull,155885ull,158793ull,163441ull,565545ull,565521ull,577365ull,61045ull,65633ull,65765ull,608549ull,619329ull,654157ull,163085ull,163385ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,12247373670ull,0ull,12272539594ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,12356425638ull,12364814246ull,12356676902ull,12365065510ull,12272539458ull,12280928066ull,12314482498ull,12314482502ull,12314482506ull,12314482510ull,12314482514ull,12314482518ull,12314482522ull,0ull,12314482530ull,12314482534ull,12314482538ull,12314482542ull,12314482546ull,0ull,12314482554ull,0ull, + 12314482562ull,12314482566ull,0ull,12314482574ull,12314482578ull,0ull,12314482586ull,12314482590ull,12314482594ull,12314482598ull,12314482602ull,12289316694ull,12339648326ull,12339648366ull,12339648402ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,6501439306ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,6501439338ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,585676112486ull,0ull,585676112494ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,585676112534ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,586590471366ull,586590471370ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,591078378782ull,591288093982ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,592244395530ull,0ull,592126955026ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,592185675310ull,0ull,0ull,592244395586ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,592185675530ull,0ull,592101789450ull,592244395786ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,594266051302ull,594182165222ull,0ull,594291217126ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,596321261282ull,596321261286ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,603845846230ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,758313747578ull,758406022266ull,758322136186ull,758322136230ull,758330524794ull,758322136198ull,758322136202ull,758330524806ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,784695932318ull,784695932302ull,784695932326ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,999427622238ull,999427622242ull, + 999503119742ull,999511508350ull,999519896958ull,999528285566ull,999536674174ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,999427622630ull,999427622634ull,999503120110ull,999503120114ull,999511508718ull, + 999511508722ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, + 80117ull,80097ull,80133ull,525449ull,81281ull,81593ull,81645ull,81929ull,82409ull,82533ull,82845ull,82749ull,53881ull,530665ull,83253ull,83281ull,83345ull,83421ull,529521ull,53989ull,83357ull,83509ull,529709ull,83549ull,83601ull,80689ull,83633ull,83669ull,673661ull,83925ull,83981ull,54141ull, + 84205ull,84249ull,84425ull,84445ull,54357ull,84765ull,84773ull,84881ull,84969ull,85013ull,85017ull,85085ull,85285ull,85317ull,85353ull,85453ull,85493ull,85501ull,85501ull,85501ull,534705ull,115137ull,85801ull,85885ull,535949ull,85933ull,85957ull,86041ull,86649ull,86241ull,86305ull,86433ull, + 86665ull,87001ull,87105ull,87373ull,87437ull,87569ull,87569ull,87653ull,87725ull,87757ull,87817ull,89177ull,88089ull,89181ull,88389ull,88529ull,83997ull,91065ull,89913ull,90065ull,90165ull,89645ull,90313ull,90309ull,90801ull,545681ull,91081ull,91101ull,91161ull,91241ull,91273ull,91529ull, + 547489ull,547753ull,92081ull,92269ull,92317ull,92001ull,92569ull,56249ull,56305ull,93217ull,93433ull,93433ull,550689ull,93965ull,94049ull,94109ull,94157ull,552033ull,94205ull,94233ull,97613ull,94345ull,56837ull,94593ull,94649ull,94977ull,94773ull,554897ull,95501ull,554905ull,95673ull,95661ull, + 95729ull,96133ull,96137ull,57533ull,96245ull,96417ull,96501ull,96677ull,57737ull,558605ull,57841ull,96961ull,96973ull,96985ull,97065ull,691785ull,97273ull,560325ull,560325ull,133125ull,97417ull,97417ull,58141ull,576225ull,624489ull,97673ull,97709ull,58253ull,97897ull,98101ull,98141ull,98277ull, + 98821ull,58601ull,58481ull,98897ull,564049ull,99101ull,99617ull,99633ull,99641ull,99633ull,99817ull,99897ull,100041ull,99985ull,100029ull,100217ull,100297ull,100313ull,100417ull,100461ull,100725ull,101061ull,101201ull,101697ull,568369ull,101621ull,101361ull,101793ull,101901ull,102289ull,569285ull,102537ull, + 102165ull,102053ull,59577ull,102821ull,102905ull,103029ull,102877ull,59825ull,103741ull,103857ull,573481ull,104333ull,105441ull,104741ull,60517ull,105029ull,60449ull,60305ull,83529ull,83541ull,105473ull,105073ull,131765ull,69477ull,105565ull,105581ull,105605ull,105849ull,105805ull,577293ull,60709ull,106473ull, + 106005ull,106825ull,107029ull,577973ull,107065ull,106621ull,107601ull,61045ull,107785ull,108173ull,108457ull,109217ull,580237ull,109421ull,61537ull,109701ull,582301ull,109905ull,61753ull,110025ull,110205ull,110313ull,110317ull,584245ull,554029ull,584681ull,110905ull,586481ull,111357ull,111413ull,111005ull,111705ull, + 111865ull,112093ull,111877ull,112037ull,112097ull,112149ull,586873ull,111825ull,112829ull,113081ull,62669ull,113453ull,113437ull,588613ull,112613ull,114105ull,589177ull,589369ull,114457ull,114917ull,114809ull,114797ull,63065ull,114985ull,115189ull,115165ull,115381ull,529557ull,115989ull,592269ull,116337ull,593581ull, + 116897ull,116949ull,117057ull,596001ull,117249ull,117333ull,597205ull,598097ull,118249ull,118317ull,64177ull,118421ull,64225ull,64225ull,119069ull,119153ull,119237ull,119317ull,119593ull,64621ull,119953ull,602329ull,120057ull,602697ull,120257ull,558717ull,120897ull,605829ull,605921ull,606481ull,65521ull,65569ull, + 121809ull,607181ull,607177ull,607333ull,607437ull,121977ull,121981ull,121981ull,122153ull,65765ull,122413ull,65817ull,66137ull,610421ull,123193ull,123441ull,123697ull,66445ull,612505ull,124249ull,612969ull,613141ull,124477ull,124845ull,66749ull,125185ull,125225ull,125245ull,615921ull,617117ull,617117ull,125881ull, + 67593ull,618157ull,126745ull,126757ull,67741ull,619009ull,127817ull,68225ull,127905ull,127885ull,128001ull,622105ull,128397ull,68613ull,128797ull,129033ull,129301ull,68817ull,624801ull,624925ull,68965ull,625509ull,130537ull,625913ull,130645ull,131049ull,131093ull,627561ull,627853ull,131457ull,628385ull,131521ull, + 576893ull,69461ull,131785ull,132109ull,69677ull,132345ull,92885ull,630429ull,630485ull,577101ull,577137ull,133125ull,133137ull,147065ull,70061ull,133701ull,133677ull,133749ull,84685ull,133829ull,133837ull,133877ull,134041ull,634097ull,134037ull,134261ull,134541ull,134837ull,134285ull,134901ull,135069ull,135517ull, + 134477ull,134953ull,134961ull,135025ull,635097ull,636333ull,635733ull,70829ull,136133ull,136141ull,136281ull,642857ull,136593ull,638129ull,71029ull,71045ull,638661ull,639817ull,71085ull,137537ull,137585ull,137629ull,137637ull,137893ull,137761ull,138297ull,138121ull,138725ull,138401ull,138669ull,138777ull,71517ull, + 139141ull,139269ull,71653ull,139649ull,139661ull,645533ull,140125ull,140153ull,71893ull,140265ull,53997ull,647865ull,648601ull,72441ull,72477ull,141953ull,142261ull,142889ull,143701ull,651937ull,144045ull,144133ull,144493ull,144861ull,654525ull,532497ull,145197ull,145137ull,145345ull,533369ull,146257ull,146657ull, + 661321ull,661429ull,148049ull,148421ull,148549ull,662713ull,148589ull,149729ull,150365ull,150369ull,150001ull,151525ull,151637ull,667625ull,153133ull,75349ull,153309ull,669149ull,75673ull,154381ull,95945ull,154765ull,673045ull,673897ull,76217ull,76249ull,155521ull,675881ull,76489ull,676441ull,155693ull,155693ull, + 155813ull,677593ull,156553ull,77005ull,156837ull,157341ull,157449ull,157689ull,77625ull,683201ull,158793ull,160001ull,160757ull,78649ull,78773ull,161181ull,688953ull,78817ull,689173ull,690233ull,690757ull,162541ull,79193ull,162789ull,162809ull,162837ull,162877ull,162905ull,163053ull,694273ull,0ull,0ull, + 0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull,0ull, +}; + +KBTS_INLINE kbts_u64 kbts_GetUnicodeDecomposition(kbts_u32 Codepoint) +{ + return kbts_UnicodeDecomposition_Data[((kbts_un)kbts_UnicodeDecomposition_PageIndices[Codepoint/64] * 64) | (Codepoint & 63)]; +} + +static kbts_u8 kbts_UnicodeWordBreakClass_PageIndices[8703] = { + 0,1,2,2,2,3,4,5,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, + 29,30,2,2,31,32,33,34,35,2,2,2,36,37,38,39,40,41,42,43,44,45,46,47,48,49,2,50,2,2,51,52, + 53,54,55,56,57,57,58,59,57,60,57,61,62,63,64,65,57,57,66,57,57,57,67,57,2,68,69,70,71,57,57,57, + 72,73,74,75,57,76,77,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 2,2,2,2,2,2,2,2,2,78,2,2,79,80,81,82,83,84,85,86,87,88,89,90,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,91,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,92,93,2,2,94,95,96,97,98,99, + 100,101,102,103,57,104,105,106,2,107,108,109,2,2,110,111,112,113,114,115,116,117,118,119,120,121,122,123,57,124,125,126, + 127,128,129,130,131,132,133,134,135,136,57,137,138,139,140,57,141,142,143,144,145,146,57,147,148,149,150,151,57,152,153,154, + 2,2,2,2,2,2,2,155,156,2,157,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,158, + 2,2,2,2,2,2,2,2,159,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,101,2,2,2,2,160,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,161,57,57,57,57,57,57,57,57,57,57,57,57,57,2,2,2,2,162,163,164,165,57,57,166,57,167,57,168,169, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,170, + 171,57,172,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,173,174,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,175,57,57,57,57,176,57, + 57,57,177,178,179,57,57,57,180,181,182,2,2,183,184,185,57,57,57,57,186,187,57,57,57,57,57,57,57,57,188,57, + 189,190,191,57,57,192,57,57,57,193,57,194,57,57,57,195,2,196,197,57,57,57,57,57,57,57,57,57,198,199,57,57, + 200,200,201,202,203,200,200,204,200,200,205,200,206,200,207,208,209,210,211,200,200,200,57,175,200,200,200,200,200,200,200,212, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 213,57,214,215,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +}; + +static kbts_u8 kbts_UnicodeWordBreakClass_Data[27648] = { + 0,0,0,0,0,0,0,0,0,0,3,4,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,14,0,0,0,0,13,0,0,0,0,17,0,15,0,18,18,18,18,18,18,18,18,18,18,16,17,0,0,0,0, + 0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,19,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,0,0,8,1,0,0,0,0,0,0,11,0,16,0,0,11,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,11,11,11,11,0,11,11,0,0,11,11,11,11,17,11, + 0,0,0,0,0,0,11,16,11,11,11,0,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11, + 11,11,0,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,0,11,16,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,17,11,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, + 0,5,5,0,5,5,0,5,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,10,10,10,10,11,16,0,0,0,0,0,0,0,0,0,0,0, + 18,18,18,18,18,18,0,0,0,0,0,0,17,17,0,0,5,5,5,5,5,5,5,5,5,5,5,0,8,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,18,18,18,18,18,18,18,18,18,18,0,18,17,0,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,5,5,5,5,5,5,5,18,0,5,5,5,5,5,5,11,11,5,5,0,5,5,5,5,11,11,18,18,18,18,18,18,18,18,18,18,11,11,11,0,0,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 18,18,18,18,18,18,18,18,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,11,11,0,0,17,0,11,0,0,5,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,5,5,5,5,5,5,5,5,5,11,5,5,5,11,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,0,18,18,0,0,0,0,0,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,11,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,5,5,5,0,11,11,11,11,11,11,11,11,0,0,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,0,0,0,11,11,11,11,0,0,5,11,5,5, + 5,5,5,5,5,0,0,5,5,0,0,5,5,5,11,0,0,0,0,0,0,0,0,5,0,0,0,0,11,11,0,11,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,11,11,0,0,0,0,0,0,0,0,0,0,11,0,5,0, + 0,5,5,5,0,11,11,11,11,11,11,0,0,0,0,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,11,11,0,11,11,0,0,5,0,5,5, + 5,5,5,0,0,0,0,5,5,0,0,5,5,5,0,0,0,5,0,0,0,0,0,0,0,11,11,11,11,0,11,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,5,5,11,11,11,5,0,0,0,0,0,0,0,0,0,0, + 0,5,5,5,0,11,11,11,11,11,11,11,11,11,0,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,0,0,5,11,5,5, + 5,5,5,5,5,5,0,5,5,5,0,5,5,5,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,11,5,5,5,5,5,5, + 0,5,5,5,0,11,11,11,11,11,11,11,11,0,0,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,0,0,5,11,5,5, + 5,5,5,5,5,0,0,5,5,0,0,5,5,5,0,0,0,0,0,0,0,5,5,5,0,0,0,0,11,11,0,11,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,11,0,11,11,11,11,11,11,0,0,0,11,11,11,0,11,11,11,11,0,0,0,11,11,0,11,0,11,11,0,0,0,11,11,0,0,0,11,11,11,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,5,5, + 5,5,5,0,0,0,5,5,5,0,5,5,5,5,0,0,11,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,11,11,11,11,11,11,11,11,0,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,5,11,5,5, + 5,5,5,5,5,0,5,5,5,0,5,5,5,5,0,0,0,0,0,0,0,5,5,0,11,11,11,0,0,11,0,0,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,5,5,5,0,11,11,11,11,11,11,11,11,0,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,0,0,5,11,5,5, + 5,5,5,5,5,0,5,5,5,0,5,5,5,5,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,11,11,0,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,11,11,5,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,11,11,11,11,11,11,11,11,11,0,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,5,5, + 5,5,5,5,5,0,5,5,5,0,5,5,5,5,11,0,0,0,0,0,11,11,11,5,0,0,0,0,0,0,0,11,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11, + 0,5,5,5,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,11,0,0, + 11,11,11,11,11,11,11,0,0,0,5,0,0,0,0,5,5,5,5,5,5,0,5,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,5,5,5,5,5,0,0,0,0,0, + 0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,5,5,5,5,5,5,5,0,0,0, + 0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,5,0,0,0,0,5,5, + 11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,0,5,5,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, + 0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, + 18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,0,5,5,5,0,0,5,5,5,5,5,5,5,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,5,18,18,18,18,18,18,18,18,18,18,5,5,5,5,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,0,11,0,0,0,0,0,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,0,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,0, + 11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0, + 0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 20,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,5,5,5,8,5,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0, + 11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, + 0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5, + 18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,11,11,11,11,11,11,11,11,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,11,11,18,18,18,18,18,18,18,18,18,18,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, + 18,18,18,18,18,18,18,18,18,18,0,0,0,11,11,11,18,18,18,18,18,18,18,18,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0, + 11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,11,11,11,5,11,11,11,11,11,11,5,11,11,5,5,5,11,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,0,11,0,11,0,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,0, + 0,0,11,11,11,0,11,11,11,11,11,11,11,0,0,0,11,11,11,11,0,0,11,11,11,11,11,11,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,0,11,11,11,11,11,11,11,0,0,0, + 20,20,20,20,20,20,20,0,20,20,20,0,5,6,8,8,0,0,0,0,0,0,0,0,15,15,0,0,0,0,0,0,0,0,0,0,15,0,0,16,4,4,8,8,8,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,19, + 19,0,0,0,17,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,20,8,8,8,8,8,0,8,8,8,8,8,8,8,8,8,8,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,11,0,0,0,0,11,0,0,11,11,11,11,11,11,11,11,11,11,0,11,0,0,0,11,11,11,11,11,0,0,0,0,1,0,11,0,11,0,11,0,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,12,0,0,11,11,11,11, + 0,0,0,0,0,11,11,11,11,11,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11, + 11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0, + 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11,11,11,5,5,5,11,11,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,0,0,0,0,0,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0, + 11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 20,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,9,9,9,9,9,0,0,0,0,0,11,11,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,9,9,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,9,9,9,9, + 0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,18,18,18,18,18,18,18,18,18,18,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,0,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,0,11,0,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,5,11,11,11,5,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,0,0,0,11,0,11,11,5, + 18,18,18,18,18,18,18,18,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0, + 5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, + 11,11,11,5,11,11,11,11,11,11,11,11,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5,5,0,0,5,5,0,0,0,0,0,5,5, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,0,0,11,11,11,5,5,0,0,0,0,0,0,0,0,0, + 0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,0,5,5,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0, + 11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,0,0,0,0,0,10,5,10,10,10,10,10,10,10,10,10,10,0,10,10,10,10,10,10,10,10,10,10,10,10,10,0,10,10,10,10,10,0,10,0, + 10,10,0,10,10,0,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,19,19,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,17,0,15,0,17,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,8, + 0,0,0,0,0,0,0,15,0,0,0,0,17,0,15,0,18,18,18,18,18,18,18,18,18,18,16,17,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,19, + 0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0, + 0,0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,0,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,0,0,0,0,11,11,11,11,11,11,11,11,0,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,0,0,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,0,0,0,11,0,0,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,5,5,5,0,5,5,0,0,0,0,0,5,5,5,5,11,11,11,11,0,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,5,5,5,0,0,0,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 18,18,18,18,18,18,18,18,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,5,5,5,5,5,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,5,0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0, + 5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,5,11,11,5,5,11,0,0,0,0,0,0,0,0,0,5, + 5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,0,0,18,0,0, + 0,0,5,0,0,0,0,0,0,0,0,0,0,18,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,18,18,18,18,18,18,18,18,18,18, + 0,0,0,0,11,5,5,11,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,0,0,11,0,0,0,0,0,0,0,0,0, + 5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,11,11,11,11,0,0,0,0,5,5,5,5,0,5,5,18,18,18,18,18,18,18,18,18,18,11,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,5,11, + 11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,0,11,0,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 5,5,5,5,0,11,11,11,11,11,11,11,11,0,0,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,0,5,5,11,5,5, + 5,5,5,5,5,0,0,5,5,0,0,5,5,5,0,0,11,0,0,0,0,0,0,5,0,0,0,0,0,11,11,11,11,11,5,5,0,0,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,0,11,0,0,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,5,5,5,5,5,5,5,5, + 5,0,5,0,0,5,0,5,5,5,5,0,5,5,5,5,5,11,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,11,11,11,11,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,5,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,11,11,0,11,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,11,0,0,0,0,0,0,0, + 18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11, + 11,11,11,11,11,11,11,0,0,11,0,0,11,11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,0,5,5,0,0,5,5,5,5,11, + 5,11,5,5,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,11,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,5,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,11,5,5,5,5,0, + 0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,11,5,5,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,0,0,0,5,0,5,5,0,5, + 5,5,5,5,5,5,11,5,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,11,11,11,11,11,11,0,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,0,5,5,0,5,5,5,5,5,11,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,0,0,0,0,0,0,0,0,0, + 5,5,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,0,0,0,5,5, + 5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 5,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0, + 18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, + 11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,5,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,0,11,5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,9,9,9,9,9,9,9,0,9,9,0, + 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0, + 11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,0,0,0,5,5,0,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,5,5,5,5,5,5,8,8,8,8,8,8,8,8,5,5,5,5,5, + 5,5,5,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,0,0,11,0,0,11,11,0,0,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,0,11,0,11,11,11, + 11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,0,11,11,11,11,0,0,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,0, + 11,11,11,11,11,0,11,0,0,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,0,11,11,11,11,11,11,11,11,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,5,5,5,5,5,5,5,11,11,11,11,11,11,11,0,0, + 18,18,18,18,18,18,18,18,18,18,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,0,11,11,11,11,0,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,5,5,5,5,5,5,5,11,0,0,0,0,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,0,11,0,0,11,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,0,11,0,11,0,0,0,0, + 0,0,11,0,0,0,0,11,0,11,0,11,0,11,11,11,0,11,11,0,11,0,0,11,0,11,0,11,0,11,0,11,0,11,11,0,11,0,0,11,11,11,11,0,11,11,11,11,11,11,11,0,11,11,11,11,0,11,11,11,11,0,11,0, + 11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,11,11,11,0,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,1,1,1,1,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12, + 11,11,11,11,11,11,11,11,11,11,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeWordBreakClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeWordBreakClass_Data[((kbts_un)kbts_UnicodeWordBreakClass_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeLineBreakClass_PageIndices[8703] = { + 0,1,2,2,2,3,4,2,2,5,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26, + 27,28,29,30,2,2,31,2,32,2,2,2,2,33,34,35,36,37,38,39,40,41,42,43,44,45,2,46,2,2,2,47, + 48,49,50,2,51,52,53,54,2,2,2,55,56,57,58,59,2,2,2,60,2,2,61,2,2,62,63,64,65,66,67,68, + 69,70,71,72,73,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,74,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 75,67,67,67,67,67,67,67,67,76,2,2,77,78,2,2,79,80,81,82,83,84,2,85,86,87,88,89,90,91,92,86, + 87,88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,89,90, + 91,92,86,87,88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,89,90,91,92,86,87, + 88,89,90,91,92,86,87,88,89,90,91,92,86,87,88,93,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,67,67,67,67,95,2,2,2,96,97,98,99,100,101, + 2,2,102,103,2,104,105,106,2,107,2,2,2,2,2,2,108,2,109,2,110,111,112,2,2,2,113,2,2,114,115,116, + 117,118,119,120,121,122,123,124,125,126,2,127,128,129,130,2,131,132,133,134,135,136,137,138,139,140,141,142,2,143,144,145, + 2,2,2,2,2,2,2,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,147,148,149,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,152,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,153,154,155,2,2,2,156,2,2,157,158,159, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,160,67,67,67,67,67,67,161,161,161,162,163,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,164, + 67,67,165,67,67,166,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,167,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,138,2,2,2,2,168,2, + 2,2,169,170,171,2,172,2,2,2,2,2,2,2,2,173,2,2,2,2,174,175,2,2,2,2,2,2,2,2,2,2, + 176,177,178,2,2,179,2,2,2,180,2,181,2,2,2,2,2,182,183,2,2,2,2,2,2,184,2,2,2,2,2,2, + 185,186,2,187,188,189,190,191,192,193,194,195,196,197,198,199,2,2,200,201,202,203,2,138,189,189,189,189,189,189,189,204, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,205, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,205, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 206,2,207,208,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +}; + +static kbts_u8 kbts_UnicodeLineBreakClass_Data[26752] = { + 63,63,63,63,63,63,63,63,63,19,5,3,3,4,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,7,16,23,37,40,48,37,23,21,14,37,40,26,31,26,18,39,39,39,39,39,39,39,39,39,39,26,26,37,37,37,16, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,40,14,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,19,12,37,63, + 63,63,63,63,63,6,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,10,21,48,40,40,40,37,37,37,37,37,24,37,19,37,37,48,40,37,37,35,37,37,37,37,37,37,25,37,37,37,21, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,35,37,37,37,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,10,63,63,63,63,63,63,63,63,63,63,63,63,10,10,10,10,10,10,10,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,26,37, + 37,37,37,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,26,19,37,37,37,37,40,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,19,63, + 37,63,63,37,63,63,16,63,37,37,37,37,37,37,37,37,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,37,36,36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,37,37,37,48,48,48,26,26,37,37,63,63,63,63,63,63,63,63,63,63,63,16,63,16,16,16,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,39,39,39,39,39,39,39,39,39,39,48,39,39,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,16,37,63,63,63,63,63,63,63,39,37,63,63,63,63,63,63,37,37,63,63,37,63,63,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,37,37,37,37,26,16,37,37,37,63,40,40, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,37,63,63,63,63,63,63,63,63,63,37,63,63,63,37,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,37,37,37,37,37,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,39,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,63,63,19,19,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,63,63,37,37,63,63,37,37,63,63,63,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,48,48,37,37,37,37,37,48,37,40,37,37,63,37, + 37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,37,37,37,37,63,63,37,37,63,63,63,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,63,63,37,37,37,63,37,37,37,37,37,37,37,37,37,37, + 37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,63,63,63,37,63,63,63,37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,40,37,37,37,37,37,37,37,37,63,63,63,63,63,63, + 37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,63,63,37,37,63,63,37,37,63,63,63,37,37,37,37,37,37,37,63,63,63,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63, + 63,63,63,37,37,37,63,63,63,37,63,63,63,63,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,40,37,37,37,37,37,37, + 63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,63,63,37,63,63,63,37,63,63,63,63,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,35,37,37,37,37,37,37,37,37, + 37,63,63,63,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63, + 63,63,63,63,63,37,63,63,63,37,63,63,63,63,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,63,63, + 63,63,63,63,63,37,63,63,63,37,63,63,63,63,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,48,37,37,37,37,37,37, + 37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,63,63,63,63,63,63,37,63,37,63,63,63,63,63,63,63,63,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,40, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,35,35,35,35,37,35,35,10,35,35,19,10,16,16,16,16,16,10,37,16,37,37,37,63,63,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,19,63,37,63,37,63,21,12,21,12,63,63, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,19, + 63,63,63,63,63,19,63,63,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,19,19, + 37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,35,35,19,35,37,37,37,37,37,10,10,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, + 51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, + 52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,19,19,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,27,37,19,37,19,40,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,16,16,19,19,35,37,16,16,37,63,63,63,10,63,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37, + 37,37,37,37,16,16,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,63,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,60,56,56,56,56,56,56,56,56,37,19,19,58,58,58,58,58,58,58,58,58,58,19,19,42,19,19,19,19,42,42,42,42,42,42,42,42,42,42,63,63,63,63,63,63,63,63,63,42,42,42,42,42,42,42,42,42,19,19,19, + 63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,63,63,63,63,63,63,63,63,63,63,63,63,59,59,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,19,19,19,19,19, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,63,37,37,37,37,37,37,63,37,37,63,63,63,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,63,63,63,63,63,63,63,63,63,10,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,10,63,63,63, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,35,37,37, + 19,19,19,19,19,19,19,10,19,19,19,8,63,64,63,63,32,10,19,19,29,37,37,37,24,25,21,24,24,25,21,24,37,37,37,37,33,33,33,19,3,3,63,63,63,63,63,10,48,48,48,48,48,48,48,48,37,24,25,37,27,27,37,37, + 37,37,37,37,26,21,12,27,27,27,37,37,37,37,37,37,37,37,37,37,37,37,19,48,19,19,19,19,37,19,19,19,9,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,40,40,40,40,40,40,40,48,40,41,40,40,40,40,40,40,40,40,40,40,40,40,48,40,40,40,40,48,40,40,48,40, + 48,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,48,37,37,37,37,37,48,37,37,37,37,37,37,37,37,37,37,37,37,40,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,40,40,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,33,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,21,12,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,43,43,37,37,37,37,37,37,37,37,37,37,37,37,37,22,13,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,38,38,37,37,37,43,42,42,43,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,57,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,37, + 42,42,42,42,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,43,43,37,37,42,37,42,42,42,45,42,42,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,37,42,42,42,37,37,37,37, + 37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,42,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,43, + 37,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,37,37,37,38,37,37,37,37,37,37,37,37,37,37,37,37,37,38,37,37,37,37,37,37,37,37,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,43,43,42, + 42,42,42,42,43,43,42,42,42,37,37,37,37,42,38,42,42,42,37,42,43,37,37,37,42,42,37,37,42,37,37,42,42,42,37,37,37,37,37,37,37,37,43,37,37,37,37,37,37,42,43,43,42,43,37,42,42,45,43,37,37,43,42,42, + 42,42,42,42,42,38,37,37,42,42,46,46,45,45,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,38,37,38,37,37,37,37,38,38,38,37,38,37,37,37,23,23,23,23,23,23,37,16,16,42,37,37,37,21,12,21,12,21,12,21,12,21,12,21,12,21,12,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38, + 37,37,37,37,37,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,21,12,21,12,21,12,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,21,12,21,12,21,12,21,12,21,12,21,12,21,12,21,12,21,12,21,12,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,37,37,37,37,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,37,37,37,37,37,37,16,19,19,19,37,16,19, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 23,23,24,25,24,25,23,23,23,24,25,23,24,25,19,19,19,19,19,19,19,19,37,19,21,19,37,37,24,25,37,37,24,25,21,12,21,12,21,12,21,12,19,19,19,19,16,37,19,19,37,19,19,37,37,37,37,37,29,29,19,19,19,37, + 19,19,21,19,19,19,19,19,19,19,19,37,19,37,19,19,37,37,37,16,16,21,14,21,14,21,14,21,14,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,37,37,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 20,13,13,43,43,28,43,43,22,13,22,13,22,13,22,13,22,13,43,43,22,13,22,13,22,13,22,13,28,22,13,13,43,43,43,43,43,43,43,43,43,43,63,63,63,63,63,63,43,43,43,43,43,63,43,43,43,43,43,28,28,43,43,42, + 37,65,43,65,43,65,43,65,43,65,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,65,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,65,43,65,43,65,43,43,43,43,43,43,65,43,43,43,43,43,43,65,65,37,37,63,63,28,28,28,28,43,28,65,43,65,43,65,43,65,43,65,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,65,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,65,43,65,43,65,43,43,43,43,43,43,65,43,43,43,43,43,43,65,65,43,43,43,43,28,65,28,28,43, + 37,37,37,37,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,43,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,28,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19, + 37,37,37,37,37,37,37,37,37,37,37,37,37,19,16,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,37,63,63,63,63,63,63,63,63,63,63,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,19,19,19,19,19,37,37,37,37,37,37,37,37, + 37,37,63,37,37,37,63,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,48,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,35,35,16,16,37,37,37,37,37,37,37,37, + 63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,37,37,37,37,37,37,37,37,19,19,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,35,37,37,63, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,37,37,37, + 63,63,63,63,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,63,63,63,63,63,63,63,63,63,63,63,63,63, + 60,42,42,42,42,42,42,19,19,19,42,42,42,42,37,19,58,58,58,58,58,58,58,58,58,58,37,37,37,37,42,42,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37, + 19,19,19,63,19,19,19,19,19,19,19,19,63,63,37,37,58,58,58,58,58,58,58,58,58,58,37,37,42,19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,19,19,37,37,37,63,63,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,19,63,63,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,37,37,37,37,37,37,37,37,37,37,37,37,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, + 51,51,51,51,51,51,51,37,37,37,37,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,37,37,37,37, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,36,63,36,36,36,36,36,36,36,36,36,36,37,36,36,36,36,36,36,36,36,36,36,36,36,36,37,36,36,36,36,36,37,36,37, + 36,36,37,36,36,37,36,36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,12,21, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,48,37,37,37, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,13,13,13,28,28,17,17,22,13,34,37,37,37,37,37,37,10,63,10,63,10,63,10,10,63,10,63,10,63,10,10,63,43,43,43,43,43,22,13,22,13,22,13,22,13,22,13,22, + 13,22,13,22,13,43,43,22,13,43,43,43,43,43,43,43,13,43,13,37,28,28,17,17,43,22,13,22,13,22,13,43,43,43,43,43,43,43,43,37,43,41,49,43,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,9, + 37,17,43,43,41,49,43,43,22,13,43,43,13,43,13,43,43,43,43,43,43,43,43,43,43,43,28,28,43,43,43,17,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,22,43,13,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,22,43,13,43,22,13,13,22,13,13,28,43,65,65,65,65,65,65,65,65,65,65,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,28,28,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37, + 37,37,43,43,43,43,43,43,37,37,43,43,43,43,43,43,37,37,43,43,43,43,43,43,37,37,43,43,43,37,37,37,49,41,43,43,43,41,41,37,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,37,63,63,63,30,37,37,37, + 19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,63,63,63,37,63,63,37,37,37,37,37,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,37,37,37,37,63, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,19,19,19,19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,19,19,19,19,19,19,33,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,19,19,19,19,19, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,55,55,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,60,19,19,42,42,42,42,42,37,37,37,37,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,58,58,58,58,58,58,58,58,58,58,63,56,56,63,63,56,37,37,37,37,37,37,37,37,37,10, + 63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,37,37,39,19,19, + 19,19,63,37,37,37,37,37,37,37,37,37,37,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,39,39,39,39,39,39,39,39,39,39, + 19,19,19,19,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,35,37,37,37,37,37,37,37,37,37,37, + 63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,37,37,37,37,19,19,37,19,63,63,63,63,37,63,63,39,39,39,39,39,39,39,39,39,39,37,35,37,19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,19,19,37,19,19,37,63,37, + 37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 63,63,63,63,37,56,56,56,56,56,56,56,56,37,37,56,56,37,37,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,37,56,56,56,56,56,56,56,37,56,56,37,56,56,56,56,56,37,63,63,19,63,63, + 63,63,63,63,63,37,37,63,63,37,37,63,63,60,37,37,58,37,37,37,37,37,37,63,37,37,37,37,37,19,58,58,56,56,63,63,37,37,63,63,63,63,63,63,63,37,37,37,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37, + 58,58,58,58,58,58,58,58,58,58,37,58,37,37,58,37,58,58,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,37,42,63,63,63,63,63,63,63,63, + 63,37,63,37,37,63,37,63,63,63,63,37,63,63,63,63,60,55,63,42,42,42,37,42,42,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,37,37,37,37,19,19,19,19,37,39,39,39,39,39,39,39,39,39,39,19,19,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,37,37,63,63,63,63,63,63,63,63, + 63,35,19,19,16,16,37,37,37,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,35,35,35,35,35,35,35,35,35,35,35,35,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,19,19,19,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 56,56,56,56,56,56,56,37,37,56,37,37,56,56,56,56,56,56,56,56,37,56,56,37,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,63,63,63,63,63,63,37,63,63,37,37,63,63,63,60,55, + 63,55,63,63,19,19,19,37,37,37,37,37,37,37,37,37,58,58,58,58,58,58,58,58,58,58,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,37,37,63,63,63,63,63,63,63,37,35,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,37,63,63,63,63,35, + 37,19,19,19,19,35,37,63,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,19,19,19,37,35,35,35,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 35,35,35,35,35,35,35,35,35,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,37,63,63,63,63,63,63,63,63, + 37,19,19,19,19,19,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,35,16,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,37,37,37,63,37,63,63,37,63, + 63,63,63,63,63,63,37,63,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,63,63,37,63,63,63,63,63,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,19,63,63,63,63,19,19,37,37,37,37,37,37,37, + 63,63,55,63,56,56,56,56,56,56,56,56,56,56,56,56,56,37,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,63,63,63,63,63,63,63,37,37,37,63,63, + 63,63,60,19,19,42,42,42,42,42,42,42,42,42,42,42,58,58,58,58,58,58,58,58,58,58,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,48,48,48,48,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,19,19,19,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,21,21,12,12,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,12,37,37,37,21,12,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,12,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,10,10,10,10,10,10,10,21,12,10,10,10,21,12,21,12, + 63,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,21,12,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,58,58,58,58,58,58,58,58,58,58,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,19,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,19,19,19,37,37,37,37,37,37, + 37,37,37,37,19,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,28,28,28,28,11,37,37,37,37,37,37,37,37,37,37,37,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38, + 43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,38,38,38,37,38,38,38,38,38,38,38,37,38,38,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,65,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,65,65,65,37,37,65,37,37,37,37,37,37,37,37,37,37,37,37,37,37,65,65,65,65,37,37,37,37,37,37,37,37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,19,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,37,37,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,63,37,37,19,19,19,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 63,63,63,63,63,63,63,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,63,63,63,63,63,63,63,37,63,63,37,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37, + 39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,40, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,63,63,63,63,63,63,63,37,37,37,37,37,39,39,39,39,39,39,39,39,39,39,37,37,37,37,21,21,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,48,37,37,37,48,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 42,42,42,42,43,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,44,44,44,44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,44,44,44,44,44,44,44,44,44,44,44,44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,44,44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,43,44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,44,44,44,44,44,44,44,44,44,44, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,38,37,37,38,38,38,38,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 43,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,44,44,44, + 43,43,43,43,43,43,43,43,43,44,44,44,44,44,44,44,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43,43,43,43,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43,43,43,43,43,42,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,43,43, + 43,43,43,43,43,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,42,42,42,42,42,37,37,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,38,38,43,43,43,43,43,38,43,43,43, + 43,43,46,46,46,43,43,46,43,43,46,45,45,42,42,43,43,43,43,43,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,43,42,42,42,43,43,43,47,47,47,47,47, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42, + 43,42,46,46,43,43,46,46,46,46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,43,43,43,46,43,43,43, + 43,46,46,46,43,46,46,46,43,43,43,43,43,43,43,46,43,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,38,43,38,43,38,43,43,43,43,43,46,43,43,43,43,38,43,38,38,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,43, + 38,38,38,38,38,38,38,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,38,38,38,38,38,38,38,38,38,38,38,38,38,38,43,43,43,43,43,43,43,43,43,43,43,43,43,38,38,38,38,38,38,38,38,38,38,38,38,37,37, + 37,37,37,37,37,37,37,37,37,37,42,43,43,43,43,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,42,42,42,42,42,42,42,42,42,45,45,42,42,42,42,46,42,42,42,42,42, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,45,42,42,42,42,46,46,42,42,42,42,42,42,42,42,42,42,42,42,42,43,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,37,37,37,37,37,37,37,37,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,37,37,37,37,37,37,42,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,46,46,46,43,43,43,46,46,46,46,46,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,23,23,23,27,27,27,37,37,37,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,46,46,46,43,43,43,43,43,43,43,43,43, + 46,43,43,43,43,43,42,42,42,42,42,42,46,42,42,42,43,43,43,42,42,43,43,43,44,44,44,44,43,43,43,43,42,42,42,42,42,42,42,42,42,42,42,43,43,44,44,44,42,42,42,42,43,43,43,43,43,43,43,43,43,44,44,44, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,42,42,42,44,44,44,44,42,42,42,42,42, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,42,42,42,42,42,44,44,44,44,44,44,43,43,43,43,43,43,43,43,43,43,43,43,44,44,44,44,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 37,37,37,37,37,37,37,37,37,37,37,37,46,43,43,46,43,43,43,43,43,43,43,43,46,46,46,46,46,46,46,46,43,43,43,43,43,43,46,43,43,43,43,43,43,43,43,43,46,46,46,46,46,46,46,46,46,46,43,42,46,46,46,43, + 43,43,43,43,43,43,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,46,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,46,46,43,46,46,43,46,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,46,46,46,43,46,46,46,46,46,46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,44,44,44,44,44,44,44,44,44,44,44,44,42,42,42,42,42,42,42,42,42,42,42,42,42,42,44,44,43,43,43,43,43,43,43,43,43,43,43,43,43,44,44,44, + 43,43,43,43,43,43,43,43,43,43,44,44,44,44,44,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,46,46,46,43,44,44,44,44,44,44,44,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,44,43,43,43,43,43,43,43,43,43,43,43,44,44,44,44,44,44,46,46,46,46,46,46,46,46,46,44,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,37,37, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,37,37, + 37,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeLineBreakClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeLineBreakClass_Data[((kbts_un)kbts_UnicodeLineBreakClass_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeGraphemeBreakClass_PageIndices[8703] = { + 0,1,2,2,2,2,3,2,2,4,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,2,2,30,2,2,2,2,2,2,2,31,32,33,34,35,2,36,37,38,39,40,41,2,42,2,2,2,2, + 43,44,45,46,2,2,47,48,2,49,2,50,51,52,53,54,2,2,55,2,2,2,56,2,2,57,58,59,2,2,2,2, + 60,61,2,2,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,63,64,2,2,65,66,67,68,69,70,2,71,72,73,74,75,76,77,78,79, + 73,74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,75,76, + 77,78,79,73,74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,75,76,77,78,79,73, + 74,75,76,77,78,79,73,74,75,76,77,78,79,73,74,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81,2,2,2,2,2,82,83,2,84, + 2,2,2,85,2,86,87,2,2,2,2,2,2,2,2,2,2,2,2,2,88,89,2,2,2,2,90,2,2,91,92,93, + 94,95,96,97,98,99,100,101,102,103,2,104,105,106,107,2,108,2,109,110,111,112,2,2,113,114,115,116,2,117,118,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,121,122,2,2,2,123,2,2,2,124,125, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,126,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,127,2, + 2,2,128,129,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,132,2,2,2,2,2,2,2,2,2,2, + 133,134,122,2,2,135,2,2,2,136,2,137,2,2,2,2,2,138,139,2,2,2,2,2,2,2,2,2,2,2,2,2, + 140,140,141,142,143,140,140,144,140,140,145,140,146,140,147,148,149,150,151,140,140,140,2,2,140,140,140,140,140,140,140,152, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 153,154,155,156,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +}; + +static kbts_u8 kbts_UnicodeGraphemeBreakClass_Data[20096] = { + 3,3,3,3,3,3,3,3,3,3,2,0,3,1,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,16,0,0,0,3,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,14, + 0,14,14,0,14,14,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,12,0,14,14,14,14,14,14,0,0,14,14,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,14,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,14,14,14,14,14,14,14,14,14,0,14,14,14,0,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,0,0,0,0,0,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,6,14,0,6,6, + 6,14,14,14,14,14,14,14,14,6,6,6,6,15,6,6,0,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13, + 0,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,13,13,13,13,13,13,13,0,13,0,0,0,13,13,13,13,0,0,14,0,14,6, + 6,14,14,14,14,0,0,6,6,0,0,6,6,15,0,0,0,0,0,0,0,0,0,14,0,0,0,0,13,13,0,13,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,13,13,0,0,0,0,0,0,0,0,0,0,0,0,14,0, + 0,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,6,6, + 6,14,14,0,0,0,0,14,14,0,0,14,14,14,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,14,0,0,0,0,0,0,0,0,0,0, + 0,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,13,13,13,13,13,13,13,0,13,13,0,13,13,13,13,13,0,0,14,0,6,6, + 6,14,14,14,14,14,0,14,14,6,0,6,6,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,14,14,14,14,14, + 0,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,13,13,13,13,13,13,13,0,13,13,0,13,13,13,13,13,0,0,14,0,14,14, + 6,14,14,14,14,0,0,6,6,0,0,6,6,15,0,0,0,0,0,0,0,14,14,14,0,0,0,0,13,13,0,13,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6, + 14,6,6,0,0,0,6,6,6,0,6,6,6,14,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,6,6,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,0,14,0,14,14, + 14,6,6,6,6,0,14,14,14,0,14,14,14,15,0,0,0,0,0,0,0,14,14,0,13,13,13,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,6,14, + 14,6,14,6,6,0,14,14,14,0,14,14,14,14,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,0,14,6, + 6,14,14,14,14,0,6,6,6,0,6,6,6,15,12,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,14,6,6,14,14,14,0,14,0,6,6,6,6,6,6,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,6,14,14,14,14,14,14,14,0,0,0,0,0, + 0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,6,14,14,14,14,14,14,14,14,14,0,0,0, + 0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,14,0,14,0,0,0,0,6,6, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,6, + 14,14,14,14,14,0,14,14,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0, + 0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,6,14,14,14,14,14,14,0,14,14,6,6,14,14,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,14,14,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,14,0,6,14,14,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,6,14,14,14,14,14,14,14,6,6, + 6,6,6,6,6,6,14,6,6,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,14,14,14,3,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,6,6,6,6,14,14,6,6,6,0,0,0,0,6,6,14,6,6,6,6,6,6,14,14,14,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,6,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,14,6,14,14,14,14,14,14,14,0,14,0,14,0,0,14,14,14,14,14,14,14,14,6,6,6,6,6,6,14,14,14,14,14,14,14,14,14,14,0,0,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,6,6, + 6,6,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,14,14,14,14,6,6,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,14,14,6,6,6,14,6,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,14,14,14,14,14,14,14,14,6,6,14,14,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,14,14,14,14,14,14,14,14,14,14,14,14,14,6,14,14,14,14,14,14,14,0,0,0,0,14,0,0,0,0,0,0,14,0,0,6,14,14,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 0,0,0,0,0,0,0,0,0,0,0,3,4,5,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0, + 0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0, + 16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,0,16,0,16,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,16,0,0,16,0,0,0,0,16,0,16,0,0,0,0,16,16,16,0,16,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,16,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,14,14,14,14,14,14,14,14,14,14,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,14,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,14,14,6,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,6,14,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 14,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,14,14,14,14,6,6,14,14,6,6, + 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,6,6,14,14,6,6,14,14,0,0,0,0,0,0,0,0,0, + 0,0,0,14,0,0,0,0,0,0,0,0,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,14,14,14,0,0,14,14,0,0,0,0,0,14,14, + 0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,14,14,6,6,0,0,0,0,0,6,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,14,6,6,14,6,6,0,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,9,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,3,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,0,0,0,0,0, + 0,14,14,14,0,14,14,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 6,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,14,14,0,0,0,0,0,0,0,0,0,0,14, + 14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,6,6,14,14,0,0,12,0,0, + 0,0,14,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,6,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,14,14,14,14,14,6, + 14,0,12,12,0,0,0,0,0,14,14,14,14,0,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,6,6,14,14,14,14,0,0,0,0,0,0,14,0, + 0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,6,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,14,6, + 14,6,6,6,6,0,0,6,6,0,0,6,6,14,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,6,6,0,0,14,14,14,14,14,14,14,0,0,0,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,14,14,14,14,14, + 14,0,14,0,0,14,0,14,14,14,6,0,6,6,14,14,14,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,14,14,14,14, + 6,6,14,14,14,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,14,14,14,14,14,14,6,14,6,6,14,6,14, + 14,6,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,14,14,14,14,0,0,6,6,6,6,14,14,6,14, + 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,14,14,14,14,6,6,14,6,14, + 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,14,6,6,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,14,0,0,14,14,14,14,6,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,14,14,14,14,14,6,14,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,6,6,6,6,6,0,6,6,0,0,14,14,14,14,12, + 6,12,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,14,14,14,14,0,0,14,14,6,6,6,6,14,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,6,12,14,14,14,14,0, + 0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,6,6,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,12,12,12,12,12,12,14,14,14,14,14,14,14,14,14,14,14,14,14,6,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,14,14,14,14,14,14,14,0,14,14,14,14,14,14,6,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,6,14,14,14,14,14,14,14,6,14,14,6,14,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,0,0,0,14,0,14,14,0,14, + 14,14,14,14,14,14,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,0,14,14,0,6,6,14,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,6,6,0,0,0,0,0,0,0,0,0, + 14,14,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,14,14,14,14,14,0,0,0,6,6, + 14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,6,6,6,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,0,0,0,14,14,14,14,14,14,3,3,3,3,3,3,3,3,14,14,14,14,14, + 14,14,14,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,14,14,14,14,14,0,14,14,0,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,16,16,16,16,16,16,16,16,16,0,16,16,16,16, + 0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,14,14,14,14,14, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16, + 16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeGraphemeBreakClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeGraphemeBreakClass_Data[((kbts_un)kbts_UnicodeGraphemeBreakClass_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeSyllabicInfo_PageIndices[8703] = { + 0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,2,2,2,2,2,2,2,2,2,2,2,2,21,22,23,24,25,26,27,28,29,30,31,32,2,33,2,2,2,2, + 34,35,2,2,2,2,2,2,2,2,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,37,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,38,39,40,41,42,43,2,44,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,45,2,2,2, + 2,2,2,2,2,2,2,2,2,2,46,47,2,2,2,2,2,2,2,2,48,49,2,2,2,2,50,51,2,52,53,54, + 55,56,57,58,59,60,61,62,63,64,2,65,66,67,68,2,69,2,70,71,72,73,2,2,74,75,76,77,2,78,79,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81,82,2,2,2,83,2,2,2,84,85, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,86,86,86,87,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,89,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,90,2,2,91,2,2,2,92,2,93,2,2,2,2,2,2,94,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +}; + +static kbts_u16 kbts_UnicodeSyllabicInfo_Data[12160] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1034,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3592,3592,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,3,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,1025,1025,1025,1025,1025,1025,2311,2311,2307,3601,2311,519, + 2311,2311,2311,2311,2311,2311,2311,2311,2311,2311,2311,2311,2311,2308,519,2311,0,3593,3593,3592,3592,2311,2311,2311,1025,1025,1025,1025,1025,1025,1025,1025, + 1026,1026,2311,2311,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025, + 1034,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,0,0,1026,1026,0,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,0,1025,0,0,0,1025,1025,1025,1025,0,0,2307,3601,3079,519, + 3079,2311,2311,2311,2311,0,0,519,519,0,0,3079,3079,2308,1025,0,0,0,0,0,0,0,0,3079,0,0,0,0,1025,1025,0,1025, + 1026,1026,2311,2311,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1025,1025,0,0,0,0,0,0,0,0,0,0,1034,0,3592,0, + 0,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,0,0,0,0,1026,1026,0,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,0,1025,1025,0,1025,1025,0,1025,1025,0,0,3075,0,3079,519, + 3085,3079,3079,0,0,0,0,3079,3079,0,0,3079,3079,3076,0,0,0,2055,0,0,0,0,0,0,0,1025,1025,1025,1025,0,1025,0, + 0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,3592,3592,1025,1025,0,1040,0,0,0,0,0,0,0,0,0,0, + 0,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,1026,1026,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,0,1025,1025,0,1025,1025,1025,1025,1025,0,0,3075,3601,3079,519, + 3079,3079,3079,3079,3079,2311,0,2311,2311,3079,0,3079,3079,3076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,3079,3079,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,1025,3593,2307,3593,2307,2307,2307, + 0,1800,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,0,0,1026,1026,0,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,0,1025,1025,0,1025,1025,1025,1025,1025,0,0,2307,3601,3079,1287, + 3079,2311,2311,2311,2311,0,0,519,1287,0,0,3079,3079,2308,0,0,0,0,0,0,0,1283,1287,3079,0,0,0,0,1025,1025,0,1025, + 1026,1026,2311,2311,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3592,0,0,1026,1026,1026,1026,1026,1026,0,0,0,1026,1026,1026,0,1026,1026,1026,1025,0,0,0,1025,1025,0,1025,0,1025,1025, + 0,0,0,1025,1025,0,0,0,1025,1025,1025,0,0,0,1025,1025,1039,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,3079,3079, + 2311,3079,3079,0,0,0,519,519,519,0,3079,3079,3079,2308,0,0,0,0,0,0,0,0,0,3079,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,3592,3592,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,1026,1026,0,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,1795,3601,1799,1799, + 1799,1799,1799,2311,2311,0,1799,1799,1799,0,1799,1799,1799,1796,0,0,0,0,0,0,0,1799,1799,0,1025,1025,1025,0,0,1025,0,0, + 1026,1026,1799,1799,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1034,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,1026,1026,0,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,0,1025,1025,1025,1025,1025,0,0,1795,3601,1799,1799, + 1799,1799,1799,2311,2311,0,1799,2311,2311,0,2311,2311,1799,1796,0,0,0,0,0,0,0,2311,2311,0,0,0,0,0,0,1025,1025,0, + 1026,1026,1799,1799,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,1042,1042,3592,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,3592,1034,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,1026,1026,0,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,3601,3079,3079, + 3079,3079,3079,3079,3079,0,519,519,519,0,3079,3079,3079,4,14,0,0,0,0,0,1025,1025,1025,3079,0,0,0,0,0,0,0,1026, + 1026,1026,3079,3079,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025, + 0,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,0,0,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,0,0, + 1025,1025,1025,1025,1025,1025,1025,0,0,0,2308,0,0,0,0,2311,2311,2311,2311,2311,2311,0,2311,0,2311,519,2311,519,2311,2311,2311,2311, + 0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,2311,2311,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0, + 519,519,519,519,519,7,0,7,3,3,3,3,7,3592,7,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1025,1025,0,1025,0,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,0,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,0,7,7,7,7,7,7,7,7,7,7,7,7,1040,1040,0,0, + 519,519,519,519,519,0,0,0,3,3,3,3,0,3592,3592,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,1025,1025,1025,1025, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,0,0,1025,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,3592,0,3592,0,3,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,3,7,7,7,7,7,7,7,7,7,7,7,7,3592,1025, + 7,7,3592,3592,7,3601,3,3,1025,1025,1025,1025,1025,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,0,1040,1040,1040,1040,1040,1040,1040, + 1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,0,0,0, + 0,0,0,0,0,0,3592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1039,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,1025, + 1025,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,23,23,20,20,21,21,22,3593,20,20,20,3593,3,1034,4,27,33,31,32,30,1025, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,1025,0,1025,1025,1026,1026,1026,1026,23,23,21,21,1039,1025,1025,1025,33,33, + 36,1025,23,34,34,1025,1025,23,23,34,34,34,34,34,1025,1025,1025,20,20,20,20,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,32,23,22,20,20,1034,1034,1034,1034,1034,1034,1034,1025,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,20,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,0,0,0,0,0,0,0,0,0,1025, + 1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1039,1025,1025,1025,1025,1025, + 1025,1025,1025,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,0,23,20,20,20,20,21,21,21,20,23, + 23,22,22,22,23,23,25,25,25,24,24,25,24,25,25,25,25,25,4,25,0,0,0,0,0,1034,0,0,3601,25,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,0,0,0,0,0,0,1025,0,0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1034,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0, + 7,7,7,7,7,7,7,7,7,1040,1040,1040,0,0,0,0,1040,1040,3592,1040,1040,1040,1040,1040,1040,1040,3592,3592,0,0,0,0, + 0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,7,7,7,7,7,519,519,519,7,7,519,7,7,7,7,7, + 7,1025,1025,1025,1025,1025,1025,1025,3,3,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1026,1026,1026,1026,1026,1026,1025,1025,1040,1040,1040,1040,1040,1025,1040,1040,1040,1040,0, + 4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3592,3,3,3,3,3,7,3,3,0,0,3, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,1040,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,4,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,1040,3592,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1040,1040,1040,7,7,7,7,7,7,7,4,1040,1040,1025,1025,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,3601,1025,1025,1025,1040,1040, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1026,1026,3,7,7,7,7,7,7,7,7,7,1040,1040,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1040,1040,7,7,7,7,7,7,7,1040,1040,1040,1040,1040,1040,1040,3592,3592,0,3,0,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,1025,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3593,3593,3593,0,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593, + 3593,3593,3593,3593,3593,3593,3593,3593,3593,3601,3601,3601,3601,3593,3601,3601,3601,3601,1025,1025,3593,1025,1025,3593,3593,3593,1034,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3592,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,5,6,0,0,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0, + 0,0,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3592,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3592,3592,3592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3593,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1035,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, + 1026,1026,7,1026,1026,1026,4,1025,1025,1025,1025,3592,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,7,7,7,7,7,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1026,1026, + 1026,1026,1025,1025,1025,1025,1026,1040,1040,1025,1025,1025,1025,1025,1025,1025,1025,1040,1025,3592,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1040,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,4,3592,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3593,3601,3601,3601,3601,3601,3601,0,0,0,0,0,0,1026,2311, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1026,1026,1026,1026,1026,1026,1026,1026,1026,3,3,3,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,1040,1040,1040,1040,7,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,1040,3592,1026,1026,1026,1026,1026,1025,1025,1025,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,7,7,7,7,7,7,7,7,7,1040,1040,1040, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,20,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1025,1025,1025,1025,1025,0, + 1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,3592,7,7,7,7,7,7,7,7,7,1040,1040,1040,1040,0,0,0,0,0,0,0,0,0, + 1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1034,1034,1034,0,0,0,1025,34,3,3,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,1026,7,7,7,519,519,7,7,519,1026,519,519,1026,7,3, + 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,0,0,0,0,0,3592,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1026,1026,1025,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1040,1040,1040,1040,1040, + 1040,1040,1040,7,7,7,7,7,7,7,7,0,3,7,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1287,7,7,0,7,1287,0,0,0,0,0,7,3592,3592,3592,1025,1025,1025,1025,0,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,3,3,3,0,0,0,0,4, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,3,3,3,3592,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,0,0,0,7,7,7,7,7,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,7,7,0,0,0,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,3,3,3,3,3,3,3,3,3,3,3,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,1042,1042,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,4,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,7,1026,1026,7,7,1025,0,0,0,0,0,0,0,0,0,1034, + 3592,3592,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,4,3,0,0,0,0,0, + 0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7,7,4,3592,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034, + 0,0,0,0,1025,7,7,1025,0,0,0,0,0,0,0,0,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7,7,7, + 4,3601,0,0,0,0,0,0,0,3592,3,7,7,0,7,3592,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1025,0,0,0,0,0, + 0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,3592,4,3,3592,0,0,0,0,0,0,3593,1025, + 1026,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1025,1025,1025,0,1025,0,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3592, + 7,7,7,7,7,7,7,7,7,3,7,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 3592,3592,3592,3592,0,1026,1026,1026,1026,1026,1026,1026,1026,0,0,1026,1026,0,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,0,1025,1025,1025,1025,1025,0,3,3,3601,7,7, + 7,7,7,7,7,0,0,7,7,0,0,7,7,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,3592,3592, + 1026,1026,7,7,0,0,3593,3593,3593,3593,3593,3593,3593,0,0,0,3593,3593,3593,3593,3593,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,0,0,1026,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,3601,7,7,7,7,7,7,7,7, + 7,0,7,0,0,7,0,7,7,7,3592,0,3592,3592,3592,3,4,14,3592,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3593,3593,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7, + 7,7,4,3592,3592,3592,3,3601,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,3592,3592, + 1042,1042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3592, + 3592,3592,4,3,3601,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,0,0,7,7,7,7,3592,3592,3592,4, + 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1026,1026,1026,1026,7,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7,7,7,3592,3592,4, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3592,3592,7,7,7,7,7,7,7,7,7,4,3,1025,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034, + 1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,1040,1040,1040, + 7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,7,7,7,3592,3592,4,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,0,0,1026,0,0,1025,1025,1025,1025,1025,1025,1025,1025,0,1025,1025,0,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,0,7,7,0,0,3592,3592,7,4,0, + 1040,14,1040,3,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,0,0,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,0,0,7,7,7,7,3592,3592, + 4,3601,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,7,7,7,7,7,7,7,7,7,7,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3592,7,3592,3592,3592,3592,3592,1042,1040,1040,1040,1040,1034, + 0,0,0,0,0,1034,0,4,0,0,0,0,0,0,0,0,1026,7,7,7,7,7,7,7,7,7,7,7,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,0,0,0,0,0,0,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,3592,3592,3592,4,0,0,0,3601,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,1026,1026,0,1026,1026,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,7,0,7,7,7,7,3592,3592,3592,4, + 3601,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040, + 1040,1040,1040,1040,1040,1040,1040,1040,0,1040,1040,1040,1040,1040,1040,1040,7,7,7,7,7,3592,3592,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,1026,0,1026,1026,0,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,0,0,0,7,0,7,7,0,7, + 3592,3592,3,7,7,4,14,1040,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 1026,1026,1026,1026,1026,1026,0,1026,1026,0,1026,1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,0,7,7,0,7,7,3592,3592,4,0,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1034,7,7,7,7,0,0,0,0,0,0,0,0,0, + 3592,3592,14,3592,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,7,7,7,0,0,0,7,7, + 7,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1026,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7, + 7,7,7,7,7,7,7,7,7,7,1040,1040,1040,3592,1040,7,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3592,3592,3592,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,7,7,7,7,7,7,7,7,7,7,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,3,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,1283,1283,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,0,0,0,3,3,3,3,3,3,3,1025,1025,1025,1025,1025,1025,1025,0,0, + 1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,1025,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,3,3,3,3,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,7,7,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,7,7,1025,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, + 1025,1025,1025,1025,3,3,3,3,3,3,3,1025,0,0,0,0,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u16 kbts_GetUnicodeSyllabicInfo(kbts_u32 Codepoint) +{ + return kbts_UnicodeSyllabicInfo_Data[((kbts_un)kbts_UnicodeSyllabicInfo_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeScript_PageIndices[8703] = { + 0,1,2,2,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, + 30,31,32,32,33,34,35,36,37,37,37,37,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,2,2,53,54, + 55,56,57,58,59,59,59,59,60,59,59,59,59,59,59,59,61,61,59,59,59,59,62,63,64,65,66,67,68,61,61,69, + 70,71,72,73,74,75,76,59,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,77,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 78,78,78,78,78,78,78,78,78,79,80,80,81,82,83,84,85,86,87,88,89,90,91,92,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,93,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,94,95,96,96,97,98,99,100,101,102, + 103,104,105,106,61,107,108,109,110,111,112,113,114,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132, + 133,134,135,136,137,138,139,140,141,142,61,143,144,145,146,61,147,148,149,150,151,152,153,154,155,156,157,158,61,159,160,161, + 162,162,162,162,162,162,162,163,164,162,165,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,166, + 167,167,167,167,167,167,167,167,168,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, + 167,167,167,167,167,167,167,169,170,170,170,170,171,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,172,61,61,61,61,61,61,61,61,61,61,61,61,61,173,173,173,173,174,175,176,177,61,61,178,61,179,180,181,182, + 183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, + 183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,183,183,183,183,183,183,185,185,185,186,187,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,188, + 189,190,191,192,192,193,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,194,195,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,59,196,59,59,59,197,198,199, + 59,200,201,202,203,204,205,61,206,207,208,59,59,209,59,210,211,211,211,211,211,212,61,61,61,61,61,61,61,61,213,61, + 214,215,216,61,61,217,61,61,61,218,61,219,61,61,61,220,221,222,223,61,61,61,61,61,224,225,226,61,227,228,61,61, + 229,230,59,231,232,61,59,59,59,59,59,59,59,233,234,235,236,237,59,59,238,239,59,240,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 241,61,242,243,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, + 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +}; + +static kbts_u8 kbts_UnicodeScript_Data[31232] = { + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,29,29,29,29,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,29,29,29,29,29, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,72,72,72,72,29,29,29,29,29,13,13,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,45,45,45,45,29,45,45,45,0,0,45,45,45,45,29,45, + 0,0,0,0,45,29,45,29,45,45,45,0,45,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,25,25,25,25,25,25,25,25,25,25,25,25,25,25,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,30,30,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,0,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,0,0,0,0,0,0,0,0,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,0,0,0,0,54,54,54,54,54,54,0,0,0,0,0,0,0,0,0,0,0, + 4,4,4,4,4,29,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 29,4,4,4,4,4,4,4,4,4,4,30,30,30,30,30,30,30,30,30,30,30,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,30,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 143,143,143,143,143,143,143,143,143,143,143,143,143,143,0,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, + 143,143,143,143,143,143,143,143,143,143,143,0,0,143,143,143,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,0,0,103,103,103, + 129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,0,0,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,0, + 83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,0,0,83,0,143,143,143,143,143,143,143,143,143,143,143,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,4,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,30,30,30,30,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,29,29,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 11,11,11,11,0,11,11,11,11,11,11,11,11,0,0,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,0,11,0,0,0,11,11,11,11,0,0,11,11,11,11, + 11,11,11,11,11,0,0,11,11,0,0,11,11,11,11,0,0,0,0,0,0,0,0,11,0,0,0,0,11,11,0,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0, + 0,48,48,48,0,48,48,48,48,48,48,0,0,0,0,48,48,0,0,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,48,48,48,48,48,48,48,0,48,48,0,48,48,0,48,48,0,0,48,0,48,48, + 48,48,48,0,0,0,0,48,48,0,0,48,48,48,0,0,0,48,0,0,0,0,0,0,0,48,48,48,48,0,48,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0, + 0,46,46,46,0,46,46,46,46,46,46,46,46,46,0,46,46,46,0,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,0,46,46,46,46,46,46,46,0,46,46,0,46,46,46,46,46,0,0,46,46,46,46, + 46,46,46,46,46,46,0,46,46,46,0,46,46,46,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,46,46,46,0,0,46,46,46,46,46,46,46,46,46,46,46,46,0,0,0,0,0,0,0,46,46,46,46,46,46,46, + 0,118,118,118,0,118,118,118,118,118,118,118,118,0,0,118,118,0,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,0,118,118,118,118,118,118,118,0,118,118,0,118,118,118,118,118,0,0,118,118,118,118, + 118,118,118,118,118,0,0,118,118,0,0,118,118,118,0,0,0,0,0,0,0,118,118,118,0,0,0,0,118,118,0,118,118,118,118,118,0,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,0,0,0,0,0,0,0,0, + 0,0,150,150,0,150,150,150,150,150,150,0,0,0,150,150,150,0,150,150,150,150,0,0,0,150,150,0,150,0,150,150,0,0,0,150,150,0,0,0,150,150,150,0,0,0,150,150,150,150,150,150,150,150,150,150,150,150,0,0,0,0,150,150, + 150,150,150,0,0,0,150,150,150,0,150,150,150,150,0,0,150,0,0,0,0,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,0,0,0,0,0, + 153,153,153,153,153,153,153,153,153,153,153,153,153,0,153,153,153,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,0,153,153,153,153, + 153,153,153,153,153,0,153,153,153,0,153,153,153,153,0,0,0,0,0,0,0,153,153,0,153,153,153,0,0,153,0,0,153,153,153,153,0,0,153,153,153,153,153,153,153,153,153,153,0,0,0,0,0,0,0,153,153,153,153,153,153,153,153,153, + 61,61,61,61,61,61,61,61,61,61,61,61,61,0,61,61,61,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,0,61,61,61,61,61,61,61,61,61,61,0,61,61,61,61,61,0,0,61,61,61,61, + 61,61,61,61,61,0,61,61,61,0,61,61,61,61,0,0,0,0,0,0,0,61,61,0,0,0,0,0,0,61,61,0,61,61,61,61,0,0,61,61,61,61,61,61,61,61,61,61,0,61,61,61,0,0,0,0,0,0,0,0,0,0,0,0, + 82,82,82,82,82,82,82,82,82,82,82,82,82,0,82,82,82,0,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, + 82,82,82,82,82,0,82,82,82,0,82,82,82,82,82,82,0,0,0,0,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,0,0,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, + 0,136,136,136,0,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,0,0,0,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,0,136,136,136,136,136,136,136,136,136,0,136,0,0, + 136,136,136,136,136,136,136,0,0,0,136,0,0,0,0,136,136,136,136,136,136,0,136,0,136,136,136,136,136,136,136,136,0,0,0,0,0,0,136,136,136,136,136,136,136,136,136,136,0,0,136,136,136,0,0,0,0,0,0,0,0,0,0,0, + 0,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,0,0,0,0,29, + 155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,71,71,0,71,0,71,71,71,71,71,0,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,0,71,0,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,0,0, + 71,71,71,71,71,0,71,0,71,71,71,71,71,71,71,0,71,71,71,71,71,71,71,71,71,71,0,0,71,71,71,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, + 156,156,156,156,156,156,156,156,0,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,0,0,0,0,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, + 156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,0,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,0,156,156, + 156,156,156,156,156,156,156,156,156,156,156,156,156,0,156,156,156,156,156,156,156,29,29,29,29,156,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, + 97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, + 97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41, + 41,41,41,41,41,41,0,41,0,0,0,0,0,41,0,0,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,29,41,41,41,41, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,0,39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,0, + 39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,39,39,39,39,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,0,0, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,0,0,0,0,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, + 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,0,0,22,22,22,22,22,22,0,0, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,0,0,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, + 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,29,29,29,128,128,128,128,128,128,128,128,128,128,128,0,0,0,0,0,0,0, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,0,0,0,0,0,0,0,0,0,144,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,29,29,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,145,145,145,145,145,145,145,145,145,145,0,145,145,145,0,145,145,0,0,0,0,0,0,0,0,0,0,0,0, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,0,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0, + 94,94,29,29,94,29,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,0,0,0,0,0,0,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, + 94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,0,0,0,0,0,0,0, + 94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,0,0,0,0,0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0,0,0, + 74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,0,74,74,74,74,74,74,74,74,74,74,74,74,0,0,0,0,74,74,74,74,74,74,74,74,74,74,74,74,0,0,0,0, + 74,0,0,0,74,74,74,74,74,74,74,74,74,74,74,74,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,0,0,146,146,146,146,146,0,0,0,0,0,0,0,0,0,0,0, + 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,0,0,0,0,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,102,102,102,102,102,0,0,0,0,0,0,102,102,102,102,102,102,102,102,102,102,102,0,0,0,102,102,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,15,15,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, + 147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,0,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,0,0,147, + 147,147,147,147,147,147,147,147,147,147,0,0,0,0,0,0,147,147,147,147,147,147,147,147,147,147,0,0,0,0,0,0,147,147,147,147,147,147,147,147,147,147,147,147,147,147,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,10,10,10,10, + 73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,0,0,0,73,73,73,73,73, + 73,73,73,73,73,73,73,73,73,73,0,0,0,73,73,73,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, + 28,28,28,28,28,28,28,28,28,28,28,0,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,0,41,41,41, + 140,140,140,140,140,140,140,140,0,0,0,0,0,0,0,0,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,29,29,30,29,29,29,29,29,29,30,29,29,29,30,30,29,0,0,0,0,0, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,45,45,45,45,45,28,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,45,45,45,45,45,72,72,72,72,45,45,45,45,45,72,72,72,72,72,72,72,72,72,72,72,72,72,28,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,45, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0,45,45,45,45,45,45,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,0,0,45,45,45,45,45,45,0,0,45,45,45,45,45,45,45,45,0,45,0,45,0,45,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0,45,45,45,45,45,45,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0,45,45,45,0,45,45,45,45,45,45,45,45,45,0, + 29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,72,0,0,29,29,29,29,29,29,29,29,29,29,29,72, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,72,72,72,72,72,72,72,72,72,72,72,72,72,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,45,29,29,29,72,72,29,29,29,29,29,29,72,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, + 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,0,0,25,25,25,25,25,25,25, + 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,41,0,0,0,0,0,41,0,0,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, + 157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,0,0,0,0,0,0,0,157,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,0,0,0,0,0,0,0,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0, + 39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,0,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,30,30,30,30,50,50,29,29,29,29,29,29,29,29,0,0,0,0,29,29,29,29, + 0,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,0,0,30,30,29,29,55,55,55,29,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, + 62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,29,62,62,62, + 0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,29,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29, + 62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, + 62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, + 168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, + 168,168,168,168,168,168,168,168,168,168,168,168,168,0,0,0,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, + 168,168,168,168,168,168,168,0,0,0,0,0,0,0,0,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, + 163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + 163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + 163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,29,29,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,0,0,72,72,0,72,0,72,72,72,72,72,72,72,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,0,0,0,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0, + 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,0,0,0,0,0,0,0,0, + 130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, + 130,130,130,130,130,130,0,0,0,0,0,0,0,0,130,130,130,130,130,130,130,130,130,130,130,130,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,29,64,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,0,0,0,0,0,0,0,0,0,0,0,127,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0, + 59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59, + 59,59,59,59,59,59,59,59,59,59,59,59,59,59,0,29,59,59,59,59,59,59,59,59,59,59,0,0,0,0,59,59,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0, + 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0, + 21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,21,21,21,21,21,21,21,21,21,21,0,0,21,21,21,21,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, + 148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, + 148,148,148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,148,148,148,148,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,0,0,0,0,0,0,0,0,0, + 0,39,39,39,39,39,39,0,0,39,39,39,39,39,39,0,0,39,39,39,39,39,39,0,0,0,0,0,0,0,0,0,39,39,39,39,39,39,39,0,39,39,39,39,39,39,39,0,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,72,72,72,72,72,72,72,72,72,45,72,72,72,72,29,29,0,0,0,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, + 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, + 88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,0,0,88,88,88,88,88,88,88,88,88,88,0,0,0,0,0,0, + 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,50,50,50,50,0,0,0,0,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0,0,0,0, + 72,72,72,72,72,72,72,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,0,54,54,54,54,54,0,54,0, + 54,54,0,54,54,0,54,54,54,54,54,54,54,54,54,54,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,0,0,0,0,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,29, + 0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,29,29,29,29, + 29,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,29,29,29,29,29,29,29,29,29,29,29,62,62,62,62,62,62,62,62,62,62,29,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, + 62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,29,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0, + 0,0,50,50,50,50,50,50,0,0,50,50,50,50,50,50,0,0,50,50,50,50,50,50,0,0,50,50,50,0,0,0,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,0,0, + 76,76,76,76,76,76,76,76,76,76,76,76,0,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,76,76,0,76, + 76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,0,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, + 76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,0,0,0,0, + 29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,29,29,29,29,29,29,29,29,29, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,0,0, + 78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0, + 109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,0,0,0,0,0,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,0,0,0,0,0, + 162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,0,162,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, + 113,113,113,113,0,0,0,0,113,113,113,113,113,113,113,113,113,113,113,113,113,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, + 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,0,0,120,120,120,120,120,120,120,120,120,120,0,0,0,0,0,0,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,0,0,0,0,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,0,0,0,0, + 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,0,0,0,0,0,0,0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,19,164,164,164,164,164,164,164,164,164,164,164,0,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,0,164,164,164,164,164,164,164,0,164,164,0,164,164,164,164,164,164,164,164,164,164,164,0,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,0,164,164,164,164,164,164,164,0,164,164,0,0,0, + 159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,0,0,0,0,0,0,0,0,0, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,0,0,0,0,0,0,0,0,0,0,75,75,75,75,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 72,72,72,72,72,72,0,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,0,72,72,72,72,72,72,72,72,72,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,0,0,26,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,26,26,0,0,0,26,0,0,26, + 56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,0,56,56,56,56,56,56,56,56,56,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, + 98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,0,53,53,0,0,0,0,0,53,53,53,53,53, + 125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,0,0,0,125,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,79, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,0,0,0,0,90,90,90,90, + 90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,0,0,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, + 65,65,65,65,0,65,65,0,0,0,0,0,65,65,65,65,65,65,65,65,0,65,65,65,0,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,0,0,65,65,65,0,0,0,0,65, + 65,65,65,65,65,65,65,65,65,0,0,0,0,0,0,0,65,65,65,65,65,65,65,65,65,0,0,0,0,0,0,0,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, + 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,0,0,0,0,84,84,84,84,84,84,84,84,84,84,84,84,0,0,0,0,0,0,0,0,0, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,6,6,6,6,6,6,6, + 58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,0,0,58,58,58,58,58,58,58,58,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,0,0,0,0,57,57,57,57,57,57,57,57, + 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,0,0,0,0,0,0,0,126,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,126,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,116,116,116,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,0,0,0,0,0,0,0,0,0,0,0,0,0, + 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,0,0,0,0,0,0,0,110,110,110,110,110,110, + 51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,0,0,0,0,0,0, + 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,0,0,0,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40, + 40,40,40,40,40,40,0,0,0,0,0,0,0,0,40,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0, + 167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,0,167,167,167,0,0,167,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4, + 114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,0,0,0,0,0,0,0,0,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, + 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, + 117,117,117,117,117,117,117,117,117,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, + 23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,14, + 60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60, + 60,60,60,0,0,0,0,0,0,0,0,0,0,60,0,0,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,0,0,0,0,0,0,137,137,137,137,137,137,137,137,137,137,0,0,0,0,0,0, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,0,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0, + 131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, + 131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,0,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,0,0,0,0,0,0,0,0,0,0,0, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,0,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 68,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 96,96,96,96,96,96,96,0,96,0,96,96,96,96,0,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,0,96,96,96,96,96,96,96,96,96,96,96,0,0,0,0,0,0,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,0,0,0,0,0,69,69,69,69,69,69,69,69,69,69,0,0,0,0,0,0, + 44,44,44,44,0,44,44,44,44,44,44,44,44,0,0,44,44,0,0,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,0,44,44,44,44,44,44,44,0,44,44,0,44,44,44,44,44,0,30,44,44,44,44, + 44,44,44,44,44,0,0,44,44,0,0,44,44,44,0,0,44,0,0,0,0,0,0,44,0,0,0,0,0,44,44,44,44,44,44,44,0,0,44,44,44,44,44,44,44,0,0,0,44,44,44,44,44,0,0,0,0,0,0,0,0,0,0,0, + 161,161,161,161,161,161,161,161,161,161,0,161,0,0,161,0,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,0,161,161,161,161,161,161,161,161,161, + 161,0,161,0,0,161,0,161,161,161,161,0,161,161,161,161,161,161,161,161,161,161,0,161,161,0,0,0,0,0,0,0,0,161,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, + 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,0,101,101,101,101,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, + 158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,0,0,133,133,133,133,133,133,133,133, + 133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, + 93,93,93,93,93,0,0,0,0,0,0,0,0,0,0,0,93,93,93,93,93,93,93,93,93,93,0,0,0,0,0,0,94,94,94,94,94,94,94,94,94,94,94,94,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,0,0,0,0,0,0, + 149,149,149,149,149,149,149,149,149,149,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, + 166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,0,0,0,0,0,0,0,0,0,0,0,0,166, + 33,33,33,33,33,33,33,0,0,33,0,0,33,33,33,33,33,33,33,33,0,33,33,0,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,0,33,33,0,0,33,33,33,33,33, + 33,33,33,33,33,33,33,0,0,0,0,0,0,0,0,0,33,33,33,33,33,33,33,33,33,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,100,100,100,100,100,100,100,0,0,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,0,0,100,100,100,100,100,100,100,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,169,169,0,0,0,0,0,0,0,0,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, + 138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,0,0,0,0,0,0,0,0,0,0,0,0,0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,0,0,0,0,0,0,0, + 32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0, + 12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, + 85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,0,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 86,86,86,86,86,86,86,0,86,86,0,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,0,0,0,86,0,86,86,0,86, + 86,86,86,86,86,86,86,86,0,0,0,0,0,0,0,0,86,86,86,86,86,86,86,86,86,86,0,0,0,0,0,0,47,47,47,47,47,47,0,47,47,0,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,0,47,47,0,47,47,47,47,47,47,0,0,0,0,0,0,0,47,47,47,47,47,47,47,47,47,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,0,0,0,0,0, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,0,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,0,0,0,63,63, + 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,0,0,0,0,0,0,0,0,0,0,0,0,0,150, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,0,139,139,139,139,139,0,0,0,0,0,0,0,0,0,0,0, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, + 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,0,0, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,0,0,0,0,0,0,0,0,0,0,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,0,0,0,0,0, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0, + 95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,0,95,95,95,95,95,95,95,95,95,95,0,0,0,0,95,95,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, + 151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,0, + 151,151,151,151,151,151,151,151,151,151,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0, + 121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, + 121,121,121,121,121,121,0,0,0,0,0,0,0,0,0,0,121,121,121,121,121,121,121,121,121,121,0,121,121,121,121,121,121,121,0,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,0,0,0,0,0,121,121,121, + 121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, + 87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, + 92,92,92,92,92,92,92,92,92,92,92,0,0,0,0,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, + 92,92,92,92,92,92,92,92,0,0,0,0,0,0,0,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,104,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, + 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, + 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, + 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,0,0,0,0,0,0,0,0, + 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, + 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, + 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, + 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66, + 152,152,152,152,152,152,152,152,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,62,62,62,0,62,62,62,62,62,62,62,0,62,62,0, + 62,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, + 55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,62,62,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,55,55,0,0,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,62,62,62,0,0,0,0,0,0,0,0,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,0,0,0,0, + 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35, + 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0, + 35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,0,0,35,35,35,35,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30, + 30,30,30,29,29,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,0,0,29,0,0,29,29,0,0,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,0,29,0,29,29,29, + 29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,0,29,29,29,29,0,0,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,0, + 29,29,29,29,29,0,29,0,0,0,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, + 134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, + 134,134,134,134,134,134,134,134,134,134,134,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,134,134,134,0,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,0,0,0,0,0,0,72,72,72,72,72,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,42,42,42,42,42,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,42,42,42,42,42,42,42,0,42,42,0,42,42,42,42,42,0,0,0,0,0,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,0,0,0,105,105,105,105,105,105,105,105,105,105,105,105,105,105,0,0, + 105,105,105,105,105,105,105,105,105,105,0,0,0,0,105,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,0,0,0,0,0,165, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,108, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,39,39,39,39,39,39,0,39,39,39,39,0,39,39,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0, + 89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, + 89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, + 89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, + 89,89,89,89,89,0,0,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,4,0,4,0,0,4,0,4,4,4,4,4,4,4,4,4,4,0,4,4,4,4,0,4,0,4,0,0,0,0, + 0,0,4,0,0,0,0,4,0,4,0,4,0,4,4,4,0,4,4,0,4,0,0,4,0,4,0,4,0,4,0,4,0,4,4,0,4,0,0,4,4,4,4,0,4,4,4,4,4,4,4,0,4,4,4,4,0,4,4,4,4,0,4,0, + 4,4,4,4,4,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,4,4,4,0,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 55,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0, + 29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0, + 29,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0, + 29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,0, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0, + 0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeScript(kbts_u32 Codepoint) +{ + return kbts_UnicodeScript_Data[((kbts_un)kbts_UnicodeScript_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeFlags_PageIndices[8703] = { + 0,1,2,3,2,4,5,6,2,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,33,33,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,2,2,2,55, + 56,57,58,59,33,33,60,33,61,33,33,33,33,33,62,63,33,33,33,64,33,33,65,66,67,68,69,70,71,72,33,73, + 74,75,76,77,78,33,33,33,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,80,79,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81, + 33,33,33,33,33,33,33,33,33,82,33,33,83,84,85,86,87,88,89,90,91,92,93,94,79,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,95,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,81,33,33,96,97,98,99,33,33,100,101,102,103,104,105, + 106,107,108,109,2,110,111,112,113,114,115,116,33,33,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144,2,145,146,147,148,2,149,150,151,152,153,154,2,155,156,157,158,159,2,160,161,162, + 33,33,33,33,33,33,33,37,163,33,164,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,165, + 33,33,33,33,33,33,33,33,166,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33, + 33,33,33,33,33,33,33,107,33,33,33,33,167,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,168,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,33,169,170,171,172,2,2,173,2,2,174,175,176, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,177,33,33,33,33,33,33,33,33,33,178,179,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,180, + 33,33,181,33,33,182,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,183,184,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,33,185,33,33,33,186,187,164, + 33,188,189,190,191,192,193,2,2,2,2,2,2,194,195,196,33,33,33,33,197,198,2,2,2,2,2,2,2,2,199,2, + 200,201,202,2,2,203,2,2,2,204,2,205,2,2,2,206,33,207,208,2,2,2,2,2,209,210,211,2,212,213,2,2, + 214,215,33,216,217,2,33,33,33,33,33,33,33,218,219,220,221,222,33,33,223,224,33,225,2,2,2,2,2,2,2,2, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,226,79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,227,2,228,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,229,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,230,2,2,2,2,231,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33,33,232,2,2,2,2,2,2,2,2,2,2,2, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,233,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,234,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 235,235,236,237,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,238, + 79,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +}; + +static kbts_u8 kbts_UnicodeFlags_Data[30592] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,4,0,0,16,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,16,16,16,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,0,16,16,16,0,16,2,16,16,16,16,16,16,16,0,0,0,16,16,16,0,16,16,16,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0, + 16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,82,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,16,16,0,0,0,0,16,0,0,0,0,0, + 0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0, + 0,0,16,80,80,80,80,80,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,80, + 0,80,80,0,80,80,0,80,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,16,16,16,0,0,16,0,0,16,16,80,80,80,80,80,80,80,80,80,80,80,0,2,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,81,81,80,80,81,80,80,80,80,80,80,80,48,48,48,48,48,48,48,48,48,48,0,0,0,0,16,16,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,80,80,80,80,80,80,81,0,16,80,80,80,80,81,80,16,16,81,81,16,80,80,80,80,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,16,16,16,0,0,0,16,0,0,80,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,80,80,80,80,80,80,80,80,80,16,80,80,80,16,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,81,81,80,81,81,81,80,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,16,16,16, + 16,80,80,80,80,80,80,80,80,16,16,16,16,80,16,16,16,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,80,16,16,0,16,16,16,16,16,16,16,16,0,0,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,0,0,0,16,16,16,16,0,0,80,16,16,16, + 16,80,80,80,80,0,0,16,16,0,0,16,16,80,16,0,0,0,0,0,0,0,0,16,0,0,0,0,16,16,0,16,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,0,80,0, + 0,80,80,16,0,16,16,16,16,16,16,0,0,0,0,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,0,16,16,0,16,16,0,0,80,0,16,16, + 16,80,80,0,0,0,0,80,80,0,0,80,80,80,0,0,0,80,0,0,0,0,0,0,0,16,16,16,16,0,16,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,80,80,16,16,16,80,0,0,0,0,0,0,0,0,0,0, + 0,80,80,16,0,16,16,16,16,16,16,16,16,16,0,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,0,0,80,16,16,16, + 16,80,80,80,80,80,0,80,80,16,0,16,16,80,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,0,16,0,0,0,0,0,0,0,16,80,80,80,80,80,80, + 0,80,16,16,0,16,16,16,16,16,16,16,16,0,0,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,0,0,80,16,16,80, + 16,80,80,80,80,0,0,16,16,0,0,16,16,80,0,0,0,0,0,0,0,80,80,16,0,0,0,0,16,16,0,16,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0, + 0,0,80,16,0,16,16,16,16,16,16,0,0,0,16,16,16,0,16,16,16,16,0,0,0,16,16,0,16,0,16,16,0,0,0,16,16,0,0,0,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16, + 80,16,16,0,0,0,16,16,16,0,16,16,16,80,0,0,16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, + 80,16,16,16,80,16,16,16,16,16,16,16,16,0,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,16,80,80, + 80,16,16,16,16,0,80,80,80,0,80,80,80,80,0,0,0,0,0,0,0,80,80,0,16,16,16,0,0,16,0,0,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16, + 16,80,16,16,0,16,16,16,16,16,16,16,16,0,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,0,0,80,16,16,80, + 16,16,16,16,16,0,80,16,16,0,16,16,80,80,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,16,16,0,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 80,80,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,16,16, + 16,80,80,80,80,0,16,16,16,0,16,16,16,80,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,80,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,0,16,0,0, + 16,16,16,16,16,16,16,0,0,0,80,0,0,0,0,16,16,16,80,80,80,0,80,0,16,16,16,16,16,16,16,16,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,16,80,80,80,80,80,80,80,0,0,0,0,16, + 16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,16,0,16,0,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,0,16,16,16,16,16,16,16,16,16,16,80,16,16,80,80,80,80,80,80,80,80,80,16,0,0, + 16,16,16,16,16,0,16,0,80,80,80,80,80,80,80,0,48,48,48,48,48,48,48,48,48,48,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,16,16,80,80,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,80,16,80,16,80,0,0,0,0,16,16, + 16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,16, + 80,80,80,80,80,0,80,80,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,16,16, + 16,16,16,16,16,16,80,16,16,16,16,16,16,0,16,16,0,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,80,80,80,80,80,80,16,80,80,16,16,80,80,16, + 48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,80,80,16,16,16,16,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16, + 16,16,80,16,16,80,80,16,16,16,16,16,16,80,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,80,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,18,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,0,16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,0, + 16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,80,80,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,0,80,80,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,82,82,16,80,80,80,80,80,80,80,16,16, + 16,16,16,16,16,16,80,16,16,80,80,80,80,80,80,80,80,80,80,80,0,0,0,16,0,0,0,16,16,80,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,82,82,82,2,82,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 16,16,16,16,16,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,80,80,80,16,16,16,16,80,80,16,16,16,0,0,0,0,16,16,80,16,16,16,16,16,16,80,80,80,0,0,0,0, + 16,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,16,80,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,80,80,80,80,80,80,0,80,16,80,16,16,80,80,80,80,80,80,80,80,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,0,0,80, + 48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,16,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,80,80,80,80,16,80,16,16,16, + 16,16,80,16,16,16,16,16,16,16,16,16,16,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,16,0,0,0, + 80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,16,80,80,16,80,80,80,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,80,16,16,16,80,16,80,80,80,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,16,16,80,80,0,0,0,0,0,0,0,0, + 48,48,48,48,48,48,48,48,48,48,0,0,0,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,0,80,80,80,80,80,80,80,80,80,80,80,80,80,16,80,80,80,80,80,80,80,16,16,16,16,80,16,16,16,16,16,16,80,16,16,16,80,80,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16, + 16,16,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0, + 0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,16,16,0,0,16,16,16,16,16,16,16,16,16,0,0,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,16,16,16,16,80,16,16,16,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,0,16,16,16,16,0,16,16,0,0,0,0,0,0,0,0,0,0,16,0,16,16,16,0,0,0,0,0,16,16,16,16,16,16,0,16,0,16,0,16,0,0,0,0,16,0,0,0,0,0,0,16,16,16,16,0,16,16,0,0,0,0, + 16,16,16,16,16,0,0,0,0,0,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,0,0,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,0,0,0,0,80,80,80,0,0,0,0,0,0,0,0,0,0,0,16,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0, + 16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,80,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16, + 0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,80,16,16,16,0,80,80,80,80,80,80,80,80,80,80,0,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,16,16,16,0,16,16,16,16,16, + 16,16,80,16,16,16,80,16,16,16,16,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,16,16,16,16,80,0,0,0,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,80,80,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,16,16,16,16,16,16,0,0,0,16,0,16,16,80, + 48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, + 80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,16,80,80,80,80,16,16,80,80,16,16, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,80,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,16,16,80,80,16,16,80,80,0,0,0,0,0,0,0,0,0, + 16,16,16,80,16,16,16,16,16,16,16,16,80,16,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,80,80,16,16,80,80,16,16,16,16,16,80,80, + 16,80,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,16,0,0,16,16,16,16,80,0,0,0,0,0,0,0,0,0, + 0,16,16,16,16,16,16,0,0,16,16,16,16,16,16,0,0,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,16,80,16,16,0,16,80,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,0,16,0, + 16,16,0,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,16,16,0,0,16,0,0,0,0,0,0,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,2, + 0,0,0,0,16,0,0,0,0,0,0,16,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, + 0,0,16,16,16,16,16,16,0,0,16,16,16,16,16,16,0,0,16,16,16,16,16,16,0,0,16,16,16,0,0,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,2,2,2,2,2,2,2,2,2,0,0,0,16,16,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,0,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, + 0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,0,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,0,0,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,0,0,0,16,0,0,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,0,0,0,0,0,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,80,80,80,0,80,80,0,0,0,0,0,80,80,80,80,16,16,16,16,0,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,80,80,0,0,0,0,80, + 16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,0,0,0,0,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,80,80,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,80,80,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,80, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0, + 16,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,80,16,16,80,80,16,0,0,0,0,0,0,0,0,0,80, + 80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,16,80,80,0,0,0,0,0, + 0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,16,80,80,80,80,80,80,80,80,0,48,48,48,48,48,48,48,48,48,48, + 0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,0,0,16,0,0,0,0,0,0,0,0,0, + 80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,16, + 16,16,16,16,16,0,0,0,0,80,80,80,80,0,16,80,48,48,48,48,48,48,48,48,48,48,16,0,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,16,16,80,16,80,80,0,0,0,0,0,0,80,16, + 16,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,0,16,0,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,16,16,80,80,80,80,80,80,80,80,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 80,80,16,16,0,16,16,16,16,16,16,16,16,0,0,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,0,80,80,16,16,16, + 80,16,16,16,16,0,0,16,16,0,0,16,16,16,0,0,16,0,0,0,0,0,0,16,0,0,0,0,0,16,16,16,16,16,16,16,0,0,80,80,80,80,80,80,80,0,0,0,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,0,16,0,0,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,80,80,80,80,80, + 80,0,16,0,0,16,0,16,16,16,16,0,16,16,80,16,80,16,80,16,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80, + 16,16,80,80,80,16,80,16,16,16,16,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,80,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,16,80,16,16,16,16,80, + 80,16,80,80,16,16,0,16,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,0,0,16,16,16,16,80,80,16,80, + 80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,16,16,80,16,80, + 80,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,16,80,16,16,80,80,80,80,80,80,16,80,16,0,0,0,0,0,0,0, + 48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,16,80,16,16,80,80,80,80,16,80,80,80,80,80,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,16,0,0,0,16, + 16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,16,80,80,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16, + 16,16,16,16,16,16,16,0,0,16,0,0,16,16,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,0,0,80,80,16,80,16, + 16,16,16,80,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,0,0,80,80,16,16,16,16,80,16,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,80,80,80,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,16,16,80,80,80,80,0, + 0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,16,80,80,80,80,80,80,16,16,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,80,80,16,80,80,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,0,80,80,80,80,80,80,16,80, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,16,80,80,80,80,80,80,80,16,80,80,16,80,80,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,0,0,0,80,0,80,80,0,80, + 80,80,80,80,80,80,16,80,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,0,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,80,80,0,16,16,80,16,80,16,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,16,0,0,0,0,0,0,0,0,0, + 80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,0,0,0,16,16, + 80,16,80,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 80,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,80,80,80,80,80,16,16,16,80,80,80,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, + 48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,0,0,0,0,0,16,16,16,16, + 16,16,16,16,0,16,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,16,80,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16, + 16,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, + 16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,0,0,16,80,80,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,16,16,16,16,16,16,16,16,16,2,2,2,2,2,2,2,2,80,80,80,80,80, + 80,80,80,16,16,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,80,80,80,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,16,0,0,0,0,0,0,0,0,0,0,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,16,16,16,16,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,16,16,16,16,16,16,16,16,80,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,80,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,80,80,80,80,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 80,80,80,80,80,80,80,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,0,80,80,80,80,80,80,80,0,80,80,0,80,80,80,80,80,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,80,80,80,80,80,80,80,16,16,16,16,16,16,16,0,0, + 48,48,48,48,48,48,48,48,48,48,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,80,80,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,80,80,16,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,0,16,16,16,16,0,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,80,80,80,80,80,80,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,80,80,80,80,80,80,80,16,0,0,0,0,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,0,16,0,0,16,0,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,0,16,0,16,0,0,0,0, + 0,0,16,0,0,0,0,16,0,16,0,16,0,16,16,16,0,16,16,0,16,0,0,16,0,16,0,16,0,16,0,16,0,16,16,0,16,0,0,16,16,16,16,0,16,16,16,16,16,16,16,0,16,16,16,16,0,16,16,16,16,0,16,0, + 16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,0,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0, + 16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, + 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, + 82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeFlags(kbts_u32 Codepoint) +{ + return kbts_UnicodeFlags_Data[((kbts_un)kbts_UnicodeFlags_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeBidirectionalClass_PageIndices[8703] = { + 0,1,2,2,2,3,4,5,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, + 29,30,2,2,31,32,33,34,35,2,2,2,2,36,37,38,39,40,41,42,43,44,45,46,47,48,2,49,2,2,50,51, + 52,53,54,55,56,57,58,59,57,60,57,57,57,61,57,57,2,2,57,57,57,57,57,57,2,62,63,64,57,57,57,57, + 65,66,67,68,69,70,71,72,73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,74,73,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,75, + 2,2,2,2,2,2,2,2,2,76,2,2,77,78,79,80,81,82,83,84,85,86,87,88,73,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,89,73,57,57,57,57,57,75,90,73,57,57,57,57,57,57,75, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,75,2,2,91,92,93,94,95,95,96,97,98,99,100,101, + 102,103,104,105,57,106,107,108,2,109,110,111,2,2,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129, + 130,131,132,133,134,135,136,137,138,139,57,140,141,142,143,57,144,145,146,147,148,149,150,151,152,153,154,155,57,156,157,158, + 2,2,2,2,2,2,2,159,160,2,161,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,162, + 2,2,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,103,2,2,2,2,164,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,165,57,57,57,57,57,57,57,57,57,57,57,57,57,2,2,2,2,166,167,168,169,57,57,170,57,171,172,173,174, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,175,2,2,2,2,2,2,2,2,2,176,177,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,178, + 2,2,179,2,2,180,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,181,182,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,183,57,57,57,57,184,161, + 2,185,186,187,188,189,190,57,191,192,193,2,2,194,195,196,2,2,2,2,197,198,57,57,57,57,57,57,57,57,199,57, + 200,201,202,57,57,203,57,57,57,204,57,205,57,57,57,206,207,208,209,57,57,57,57,57,210,211,212,57,213,214,57,57, + 57,57,215,216,217,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,218,57,57,57,57,57,57,57,57, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,219,73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,220,57,221,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,222,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,223,57,57,57,57,224,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,2,2,2,2,225,57,57,57,57,57,57,57,57,57,57,57, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,226,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,227,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,228,229,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,230, + 73,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +}; + +static kbts_u8 kbts_UnicodeBidirectionalClass_Data[29568] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,7,9,7,9,9,6,6,6,6,6,6,6,6,6,6,9,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,8,8,8,8,0,0,0,0,1,0,0,0,0,0,8,8,6,6,0,1,0,0,0,6,1,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1, + 0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, + 1,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,8,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3, + 2,3,3,2,3,3,2,3,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,0,0,4,8,8,4,9,4,0,0,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5,8,5,5,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,5,0,3,3,3,3,3,3,4,4,3,3,0,3,3,3,3,4,4,6,6,6,6,6,6,6,6,6,6,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,0,0,0,0,2,0,0,3,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,0,0,2,0,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,5,5,0,0,0,0,0,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1, + 1,3,3,3,3,3,3,3,3,1,1,1,1,3,1,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,3,1,1,1, + 1,3,3,3,3,0,0,1,1,0,0,1,1,3,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,1,1,8,8,1,1,1,1,1,1,1,8,1,1,3,0, + 0,3,3,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,3,0,1,1, + 1,3,3,0,0,0,0,3,3,0,0,3,3,3,0,0,0,3,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,3,1,0,0,0,0,0,0,0,0,0, + 0,3,3,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,3,1,1,1, + 1,3,3,3,3,3,0,3,3,1,0,1,1,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,1,8,0,0,0,0,0,0,0,1,3,3,3,3,3,3, + 0,3,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,3,1,1,3, + 1,3,3,3,3,0,0,1,1,0,0,1,1,3,0,0,0,0,0,0,0,3,3,1,0,0,0,0,1,1,0,1,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 0,0,3,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1, + 3,1,1,0,0,0,1,1,1,0,1,1,1,3,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,8,0,0,0,0,0,0, + 3,1,1,1,3,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,1,3,3, + 3,1,1,1,1,0,3,3,3,0,3,3,3,3,0,0,0,0,0,0,0,3,3,0,1,1,1,0,0,1,0,0,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, + 1,3,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,3,1,1,1, + 1,1,1,1,1,0,1,1,1,0,1,1,3,3,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1, + 1,3,3,3,3,0,1,1,1,0,1,1,1,3,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,3,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0, + 1,1,1,1,1,1,1,0,0,0,3,0,0,0,0,1,1,1,3,3,3,0,3,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,3,3,3,3,3,3,0,0,0,0,8, + 1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,3,1,1,3,3,3,3,3,3,3,3,3,1,0,0, + 1,1,1,1,1,0,1,0,3,3,3,3,3,3,3,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,3,0,0,0,0,1,1, + 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1, + 3,3,3,3,3,1,3,3,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,1,1, + 1,1,1,1,1,1,3,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,3,3,3,3,3,3,1,3,3,1,1,3,3,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1, + 1,1,3,1,1,3,3,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,0, + 1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,3,3,3,3,3,3,3,1,1, + 1,1,1,1,1,1,3,1,1,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,8,1,3,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,3,3,3,1,1,1,1,3,3,1,1,1,0,0,0,0,1,1,3,1,1,1,1,1,1,3,3,3,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,3,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,0,3,1,3,1,1,3,3,3,3,3,3,3,3,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,0,0,3, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,1,3,1,1,1, + 1,1,3,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1, + 3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,3,3,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,1,1,1,3,1,3,3,3,1,1,0,0,0,0,0,0,0,0,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,1,3,3,0,0,0,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,3,3,1,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0, + 0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,8,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,0,0,6,6,6,6,6,6,7,7,0,0,0,1, + 6,6,6,6,6,6,6,6,6,6,7,7,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1, + 0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0, + 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,3,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,0,0,0,0,3,0,0,0,1,1,1,1,1,1,1,1,8,8,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,3,3,3,1,1,3,3,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,1,1,3,3,1,1,3,3,0,0,0,0,0,0,0,0,0, + 1,1,1,3,1,1,1,1,1,1,1,1,3,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,1,1,3,3,1,1,1,1,1,3,3, + 1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,1,1,1,1,3,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,2,3,2,2,2,2,2,2,2,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,2,0, + 2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,9,0,0,9,0,0,0,0,0,0,0,0,0,8,0,0,7,7,0,0,0,0,0,8,8,0,0,0,0,0,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, + 0,0,0,8,8,8,0,0,0,0,0,7,9,7,9,9,6,6,6,6,6,6,6,6,6,6,9,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0,8,8,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,2,0,0,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,3,3,3,0,3,3,0,0,0,0,0,3,3,3,3,2,2,2,2,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,3,3,3,0,0,0,0,3, + 2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,3,3,3,3,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,3,3,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,3,3,3,3,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0, + 1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,3,1,1,3,3,1,0,0,0,0,0,0,0,0,0,3, + 3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,3,3,1,1,1,1,1, + 1,1,3,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,3,3,3,3,3,3,3,3,0,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,0,0,0,0,0,0,0,0,0, + 3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,1, + 1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,3,1,3,3,1,1,1,1,1,1,3,1, + 1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,3,3,3,3,3,3,3,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 3,3,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,3,3,1,1,1, + 3,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,3,3,3,3,3, + 3,0,1,0,0,1,0,1,1,1,1,0,1,1,3,1,3,1,3,1,1,1,0,1,1,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3, + 1,1,3,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,3,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,1,3,1,1,1,1,3, + 3,1,3,3,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,0,0,1,1,1,1,3,3,1,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,1,3,1,3, + 3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,3,3,3,3,3,3,1,3,1,1,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,1,3,1,1,3,3,3,3,1,3,3,3,3,3,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,1,3,3,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,3,3,1,3,1, + 1,1,1,3,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,0,0,3,3,1,1,1,1,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,3,3,3,3,3,3,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,1,1,3,3,3,3,1, + 1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,1,3,3,3,3,3,3,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,0,3,3,3,3,3,3,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,1,3,3,3,3,3,3,3,1,3,3,1,3,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,0,0,0,3,0,3,3,0,3, + 3,3,3,3,3,3,1,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,3,3,0,1,1,3,1,3,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,0,0,0,0,0,0,0, + 3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,0,0,0,1,1, + 3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,3,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,3,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3, + 3,3,3,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1, + 1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0, + 1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,0,1,1,1,1,1,1,1,1,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,3,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,3,3,3,3,3,3,3,1,1,1,1,1,1,1,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,8, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,3,3,3,3,3,3,3,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,4,0,4,0,0,4,0,4,4,4,4,4,4,4,4,4,4,0,4,4,4,4,0,4,0,4,0,0,0,0, + 0,0,4,0,0,0,0,4,0,4,0,4,0,4,4,4,0,4,4,0,4,0,0,4,0,4,0,4,0,4,0,4,0,4,4,0,4,0,0,4,4,4,4,0,4,4,4,4,4,4,4,0,4,4,4,4,0,4,4,4,4,0,4,0, + 4,4,4,4,4,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,4,4,4,0,4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeBidirectionalClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeBidirectionalClass_Data[((kbts_un)kbts_UnicodeBidirectionalClass_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeJoiningType_PageIndices[8703] = { + 0,1,0,0,0,0,2,0,0,3,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, + 25,26,0,0,0,0,27,0,0,0,0,0,0,0,28,29,30,31,32,0,33,34,35,36,37,38,0,39,0,0,0,0, + 40,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,43,44,0,0,0,0, + 45,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,47,48,0,0,49,50,51,52,53,54,0,55,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,57,43,0,58, + 0,0,0,59,0,60,61,0,0,0,0,0,0,0,0,0,0,0,0,0,62,63,0,64,0,0,65,0,0,66,67,68, + 69,70,71,72,73,74,75,76,77,78,0,79,80,81,82,0,83,0,84,85,86,87,0,0,88,89,90,91,0,92,93,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,0,0,0,0,0,0,0,98,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0, + 0,0,102,103,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,106,0,0,0,0,0,0,0,0,0,0, + 107,108,97,0,0,109,0,0,0,110,0,111,0,0,0,0,0,112,113,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 114,0,115,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +static kbts_u8 kbts_UnicodeJoiningType_Data[14848] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, + 0,5,5,0,5,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,5,0,0,0,2,0,4,4,4,4,2,4,2,4,2,2,2,2,2,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,2,2,2,2,2,2,2,4,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,5,4,4,4,0,4,4,4,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 4,2,2,4,4,4,4,4,4,4,4,4,2,4,2,4,2,2,4,4,0,4,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,0,5,5,5,5,4,4,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,4,5,2,2,2,4,4,4,4,4,2,2,2,2,4,2,2,2,2,2,2,2,2,2,4,2,4,2,4,2,2,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,0,0,4,2,2,2,2,2,2,2,2,2,2,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,2,2,2,2,4,2,4,4,2,2,2,4,4,2,2,2,2,2,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,3,0,0,5,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 4,2,2,2,2,2,4,4,2,4,2,2,2,2,2,2,2,2,2,2,4,2,4,4,4,5,5,5,0,0,0,0,2,0,2,2,2,2,0,4,2,4,4,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,3,3,3,2,0,0,2,2,2,2,2,4,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,2,2,4,4,4,0,4,2,2,4,4,2,2,2,2,2,2,4,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0, + 0,5,5,5,5,5,5,5,5,0,0,0,0,5,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 0,5,5,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 0,5,5,0,0,0,0,5,5,0,0,5,5,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0, + 0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 0,5,5,5,5,5,0,5,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5, + 0,5,5,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5, + 5,0,0,0,0,0,5,5,5,0,5,5,5,5,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5, + 0,0,0,0,0,0,5,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0, + 0,5,5,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,5,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,5,5,5,5,5,0,0,0,0,0, + 0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,5,5,5,5,5,5,5,0,0,0, + 0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, + 5,5,5,5,5,0,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, + 0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,0,5,5,0,0,5,5,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,5,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,5,5,5,5,5,5,5,0,0, + 0,0,0,0,0,0,5,0,0,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,3,5,5,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0, + 0,0,0,0,0,5,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,5,5,5,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5,5,5,5,5,5,0,5,0,5,0,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5,5,5,5,0,5,0,0,0, + 0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,5,5,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5,0,0,0,5,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,0,0,0,5,0,0,0,0,0,0,5,0,0,0,5,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 0,0,0,0,0,0,0,0,0,0,0,5,0,3,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,5,5,0,0,5,5,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,5,5,0,0,5,5,0,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,5,5,0,0,5,5,0,0,0,0,0,5,5, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0, + 0,5,5,5,0,5,5,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,4,0,4,0,4,4,0,0,1,4,4,4,4,4,2,2,2,2,1,2,2,2,2,2,4,2,2,2,4,0,0,4,5,5,0,0,0,0,2,2,2,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,4,2,4,4,4,2,2,2,4,2,2,4,2,4,4,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,0,5,5,5,5,5,5,5,5,5,5,5,2,2,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,4,4,2,2,2,2,2,2,2,2,2,2, + 2,2,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,4,4,4,0,2,4,4,2,2,4,2,2, + 0,2,4,4,2,0,0,0,0,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,5,5,0,0,0,0,0,0,0,0,0,0,5, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,5,5,0,0,0,0,0, + 0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0, + 0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,5,0,5,5,0,0,0,0,0,0,5,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, + 0,0,5,5,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,5,0,0,0,0,5, + 5,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,5,5,0,5, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,5,0,5, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,5,5,5,5,5,5,0,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,5,5,5,5,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,5,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,5,0, + 0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,5,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,5,5,5,5,0, + 0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,5,5,5,5,5,5,0,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,0,5,5,0,5,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,5,0,5,5,0,5, + 5,5,5,5,5,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0, + 5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0, + 5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeJoiningType(kbts_u32 Codepoint) +{ + return kbts_UnicodeJoiningType_Data[((kbts_un)kbts_UnicodeJoiningType_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u8 kbts_UnicodeCombiningClass_PageIndices[8703] = { + 0,0,0,0,0,0,1,0,0,2,0,3,4,5,6,7,8,9,10,11,12,12,12,13,14,12,15,16,17,18,19,20, + 21,22,0,0,0,0,23,0,0,0,0,0,0,0,24,25,0,26,27,0,28,29,30,31,32,33,0,34,0,0,0,0, + 0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,37,38,0,0,0,0, + 39,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,41,42,0,0,43,44,45,46,0,47,0,48,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,50,0,0,0, + 0,0,0,51,0,52,53,0,0,0,0,0,0,0,0,0,0,0,0,0,54,55,0,0,0,0,56,0,0,57,58,59, + 60,61,62,63,64,65,66,67,68,69,0,70,71,72,73,0,61,0,74,75,76,77,0,0,71,0,78,79,0,0,80,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,83,0,0,0,0,0,0,0,0,84, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,86,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 89,90,83,0,0,91,0,0,0,92,0,93,0,0,0,0,0,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +static kbts_u8 kbts_UnicodeCombiningClass_Data[12288] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,232,220,220,220,220,232,216,220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220,220,220,220,220,220,220,220,220,1,1,1,1,1,220,220,220,220,230,230,230, + 230,230,230,230,230,240,230,220,220,220,230,230,230,220,220,0,230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233,234,234,233,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,230,230,230,230,220,230,230,230,222,220,230,230,230,230,230,230,220,220,220,220,220,220,230,230,220,230,230,222,228,230,22,15,16,17,23,18,19,20,21,14,14,24,12,25,0,13, + 0,10,11,0,230,220,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,31,32,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,28,29,30,31,32,33,27,34,230,230,220,220,230,230,230,230,230,220,230,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,230,230,230,230,220,230,0,0,230,230,0,220,230,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,230,230,220,230,230,220,220,220,230,220,220,230,220,230, + 230,230,220,230,220,230,220,230,220,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,220,230,0,0,0,0,0,0,0,0,0,220,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,230,230,230,230,230,230,230,230,230,0,230,230,230,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,220,220,220,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,220,220,220,220,220,230,230,230,230,230,230,230,230,230,230,230,230,230,230,0,220,230,230,220,230,230,220,230,230,230,220,220,220,28,29,30,230,230,230,220,230,230,220,220,230,230,230,230,230, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,230,220,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,107,107,107,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,118,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,122,122,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,220,0,127,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,132,0,131,0,0,0,0,0,132,132,132,132,0,0, + 132,0,230,230,9,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,9,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,222,230,220,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,0,0,220, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,220,220,220,220,220,220,230,230,220,0,220, + 220,230,230,220,220,230,230,230,230,230,220,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,0,1,220,220,220,220,220,230,230,220,220,220,220,230,0,1,1,1,1,1,1,1,0,0,0,0,220,0,0,0,0,0,0,230,0,0,0,230,230,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 230,230,220,230,230,230,230,230,230,230,220,230,230,234,214,220,202,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,232,228,228,220,218,230,233,220,230,220, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,1,1,230,230,230,230,1,1,1,230,230,0,0,0,0,230,0,0,0,1,1,230,220,230,1,1,220,220,220,220,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,228,232,222,224,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,230,230,230,230,230,230,230,230,230,230,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0, + 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,230,230,220,0,0,230,230,0,0,0,0,0,230,230, + 0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,220,220,220,220,220,220,220,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,1,220,0,0,0,0,9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,220,220,230,230,230,220,230,220,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,230,220,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,9,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0, + 0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,7,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,216,1,1,1,0,0,0,226,216,216,216,216,216,0,0,0,0,0,0,0,0,220,220,220,220,220, + 220,220,220,0,0,230,230,230,230,230,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 230,230,230,230,230,230,230,0,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,0,0,230,230,230,230,230,230,230,0,230,230,0,230,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,230,230,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,232,220,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,220,220,220,220,220,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,230,230,230,230,230,230,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeCombiningClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeCombiningClass_Data[((kbts_un)kbts_UnicodeCombiningClass_PageIndices[Codepoint/128] * 128) | (Codepoint & 127)]; +} + +static kbts_u16 kbts_UnicodeParentInfo_PageIndices[34815] = { + 0,1,2,3,0,4,5,6,7,0,8,9,0,10,0,11,0,12,0,0,13,14,0,0,15,0,0,0,16,17,18,0, + 19,20,21,22,0,0,23,24,0,0,0,0,0,0,25,26,0,27,28,0,0,0,29,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,30,31,0,0,0,32,33,0,34,35,0,0,0,0,0,0,0,36,37,0,0,0,38,0, + 0,0,39,0,0,40,41,0,0,0,38,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,43,44,45,46,0,0, + 0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,50,51,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,53,54,0,55,56,0,57,58,59,60,0,61,62,63, + 64,0,0,0,0,0,0,0,0,0,0,0,65,0,66,0,67,68,69,70,71,72,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 74,0,75,76,77,75,76,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,79,80,81,0,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,0,84,0,0,0, + 0,85,0,86,0,0,87,88,89,90,0,0,0,0,0,0,0,91,0,92,0,0,0,93,94,0,95,0,96,0,0,0, + 97,0,98,0,0,0,0,0,0,99,0,0,100,0,0,0,0,0,0,0,0,101,0,0,102,0,0,0,0,0,0,103, + 104,105,106,0,107,0,0,108,0,109,0,0,0,0,0,0,110,111,0,0,0,112,0,0,113,114,115,0,0,0,116,0, + 117,0,0,118,0,0,0,0,0,119,120,121,0,0,122,123,0,124,0,0,0,125,126,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,128,0,0,0,129,0,130,0,0,0,131,0,0,0,0,132,0, + 0,0,0,0,0,0,133,134,0,0,135,0,0,0,0,0,136,137,138,0,139,140,141,142,0,0,0,143,144,145,0,0, + 146,147,0,148,149,0,150,151,0,0,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,0,0,170,171, + 172,173,174,175,176,177,0,178,179,0,180,181,182,183,184,185,186,0,187,188,0,0,0,189,190,0,0,0,191,0,192,193, + 194,195,196,0,0,197,198,199,200,201,202,203,0,0,204,205,206,207,0,208,0,209,0,0,210,211,0,0,212,0,213,214, + 215,216,0,217,218,0,219,0,220,0,221,222,0,223,0,224,0,225,0,226,0,227,228,229,230,231,232,233,234,235,236,237, + 238,0,0,239,240,0,241,242,243,0,244,245,246,247,248,249,250,251,252,0,0,253,254,255,0,256,257,258,259,260,261,262, + 263,264,265,266,267,0,268,0,0,0,269,270,271,0,272,273,274,0,275,276,277,278,279,280,281,282,283,284,285,0,0,286, + 287,0,288,0,289,290,0,0,291,0,292,0,0,293,0,294,295,0,0,0,0,296,297,0,298,299,300,301,302,303,0,0, + 0,0,304,305,306,307,308,309,310,311,312,313,314,0,315,316,317,318,0,319,320,321,322,0,323,324,0,325,0,0,326,327, + 328,329,330,331,332,333,334,0,0,0,335,336,337,0,338,0,339,340,341,342,343,344,345,346,0,347,0,348,349,350,351,0, + 352,353,354,355,356,0,357,0,358,359,360,361,0,0,0,362,363,0,364,365,0,0,366,367,368,0,369,0,370,371,0,0, + 0,0,372,373,374,0,375,376,0,377,378,379,380,381,382,383,384,0,385,0,386,387,388,389,0,390,0,0,0,0,391,0, + 0,392,0,393,394,395,396,397,398,399,400,401,0,402,403,404,405,406,407,0,0,0,0,0,0,408,0,409,410,411,0,412, + 413,0,414,415,416,417,0,0,418,419,0,0,0,0,420,421,422,0,0,423,424,425,0,426,427,428,429,430,0,431,432,433, + 0,434,435,0,0,0,0,436,437,0,0,438,0,0,439,440,441,442,443,444,445,446,0,447,448,449,0,450,451,452,0,453, + 454,0,455,456,0,0,457,458,459,0,460,461,462,0,0,0,0,0,0,0,0,463,464,465,466,467,468,0,469,0,0,0, + 0,0,470,0,0,471,472,0,473,0,0,474,0,475,476,477,0,0,0,0,0,0,478,0,0,479,0,480,481,482,0,0, + 0,483,0,484,485,0,486,487,488,0,0,489,490,491,492,0,0,493,0,494,0,0,495,0,496,0,497,0,0,0,0,498, + 499,0,0,0,0,0,0,0,0,0,0,0,500,501,0,0,0,502,503,504,505,506,507,508,0,509,510,0,0,0,511,512, + 513,514,515,0,0,0,0,516,0,517,0,0,0,518,519,520,0,0,0,521,0,0,0,0,522,0,0,523,0,0,0,0, + 0,0,524,0,0,0,0,525,0,0,0,526,0,527,0,528,529,0,0,530,531,532,533,534,535,536,537,0,538,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,539,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,540,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,541,542,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,544,0,545,0, + 0,0,0,0,0,546,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,548,549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,551,0,0,552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,553,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,554,555,556,0,0,0,0,0,0,557,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 558,0,0,0,0,0,559,0,0,0,0,0,0,0,0,0,0,560,0,0,0,0,0,0,0,0,0,561,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,562,0,0,0,0,0,0,0,0,0,0,0,0,0,563,0,564,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,565,0,0,0,0,0,0,0,0,0,566,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,567,0,0,0,0,0,0,568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,569,0,0,0,0,0,0,0,0,0,0,0,0,570,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,571,0,0,0,0,0,0,0,0,0, + 0,0,572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,573,0,0,0,0,0,0,574, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 575,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,576,0,0,0,0,577,0,578,0,579,0, + 0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,581,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,583,0,0,584,0,0,0,0,0,0,0,0, + 0,0,0,0,0,585,0,0,586,0,0,0,0,0,0,0,0,0,0,0,0,0,587,0,0,0,588,0,589,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,590,0,0,0,591,0,0,0,0,0,592,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,593,0,0,0,0,0,0,0,0,594,0,0,0,0,0,0, + 595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,596,0,0,597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,598,0,0, + 0,0,599,0,0,0,0,600,601,602,0,0,0,0,0,0,0,0,603,0,0,0,0,0,0,0,0,0,0,0,0,0, + 604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,605,0,0,606,0,607,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0,610,0,0, + 0,0,0,0,611,0,612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,613,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,614,0,0,615,616,0,0,0,617,0,0,618,0,0,0,0,0,0, + 0,0,0,0,0,0,619,0,0,620,0,0,0,621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,623,0,0,0,0,0,0, + 0,624,0,0,0,0,625,0,0,0,0,626,0,0,0,0,0,0,0,0,0,0,0,0,0,627,0,0,0,628,0,0, + 0,0,0,0,0,0,629,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,630,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,631,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,632,0,0,0,0,0,633,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,635,0,0,636,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,637,638,0,0,0,0,0,0,0,0,0,639,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,640, + 0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,642,0,0,0,643,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 645,0,0,0,646,0,0,0,0,0,0,0,0,647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,648,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,649,0,650,0,0,0,0,0,0,0,651,0,0,0,652,0,0,0,0,0,0,0,653,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +static kbts_u32 kbts_UnicodeParentInfo_Data[20960] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66400,66423,66421,66422,0, + 0,1048664,197177,328094,393598,1114167,66418,459018,459046,983176,65810,393556,393562,197183,590017,1048696,131720,0,524539,459032,459067,1245203,131728,393604,131730,590026,393592,0,0,0,0,0, + 66420,1048648,197171,328084,393586,1114150,66417,459011,524515,917655,131704,328109,393538,197180,590008,1048680,131414,0,524499,459025,524523,1245184,131724,459060,131726,655525,393580,0,0,0,0,0, + 0,0,0,0,0,0,0,0,197174,0,0,0,0,0,0,0,0,0,0,0,66419,0,0,66399,0,0,0,0,0,0,0,0, + 0,0,262650,0,66396,131722,131706,65959,0,0,262654,0,0,0,0,66416,0,0,0,0,262658,197168,66398,0,66397,0,0,0,262626,0,0,0, + 0,0,262638,0,66019,66395,131702,66415,0,0,262642,0,0,0,0,65963,0,0,0,0,262646,197165,66186,0,65816,0,0,0,262622,0,0,0, + 0,0,262634,262634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131716,131716,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,131718,131718,0,0,0,0,0,0,0,0,0,0,0,0,66412,66412,0,0,0,0, + 66183,66183,0,0,0,0,0,0,66413,66413,66413,66413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66414, + 328104,328104,0,0,0,0,0,0,0,0,0,0,0,0,0,328099,328099,0,0,0,0,0,0,66381,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66367,66367,66405,66405,0,0,0,0,65936,65936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66366,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66393,0,0,0,0,0,0, + 65973,65973,0,0,0,0,0,0,66384,0,0,0,0,0,0,0,0,0,0,66379,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66409,65949,0,65829,66406,65873,0,66411,0,66408,66410,65867,459053,0,0,0,262618,0,328089,0,459039,0,0,0,0,0,262610, + 0,66407,0,0,0,393544,0,0,0,393550,0,0,131708,66403,131710,66404,65948,524531,0,0,0,262606,0,393568,0,589999,0,0,0,0,0,262630, + 0,131714,0,0,0,524507,0,0,0,393574,197129,197132,66401,66402,131712,0,0,0,131471,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,65935,0,0,0,0,0,0,0,0,0,131227,0,0,66371,0,197150,131700,65953,262594,0,65945,0,0,0,66394,0, + 0,0,0,262586,0,0,0,65595,0,0,0,65595,0,65630,0,0,131696,0,0,66376,0,197162,131698,65943,262602,0,66377,0,0,0,66392,0, + 0,0,0,262614,0,0,0,65578,0,0,0,65578,0,65614,0,0,0,0,0,0,0,0,65935,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,65936,65936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197216,131836,66134,66134,66134,131828,66134,0,66134,131820,66134,131826,66134,0,66134,0, + 66134,66134,0,66134,131822,0,66134,66134,66134,197204,66134,0,0,0,0,0,0,0,66855,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,197135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66370,0,66370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,0,65978,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66387,66387,66387,0,0,0,0,66385,0,0,0, + 0,66383,66383,0,0,0,0,0,65935,0,0,66380,0,0,0,66379,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66379,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,131474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66387,66387,0,0,0,0,66385,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66380,0,0,0,0,0,0,65935,0,0,0,0,0,65931,0,0,0,0,0,0,0, + 0,66383,66383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,197147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,131507,65934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,65936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935, + 0,0,0,0,0,0,197138,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197141,0,0,65935,0,0,0, + 66378,0,65935,0,0,0,0,0,0,0,0,0,65935,0,0,0,0,65935,0,0,0,0,65935,0,0,0,0,65935,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197153,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66378,0,65935,0,0,0,0,0,0,0,0,0,65935,0,0,0, + 0,65935,0,0,0,0,65935,0,0,0,0,65935,0,0,0,0,0,0,66368,66369,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,328074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,65935,0,65935,0,65935,0,65935,0,65935,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,65935,0,65936,65936, + 0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,0,0, + 0,0,65755,65755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 131694,131694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66087,66087,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66158,66158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 262598,262598,65609,65609,65609,65609,65609,65609,262598,262598,65609,65609,65609,65609,65609,65609,131506,131506,0,0,0,0,0,0,131506,131506,0,0,0,0,0,0, + 262590,262590,65985,65985,65985,65985,65985,65985,262590,262590,65985,65985,65985,65985,65985,65985,197042,197042,0,0,0,0,0,0,197042,197042,0,0,0,0,0,0, + 131506,131506,0,0,0,0,0,0,131506,131506,0,0,0,0,0,0,197042,197042,0,0,0,0,0,0,0,197042,0,0,0,0,0,0, + 262578,262578,65973,65973,65973,65973,65973,65973,262578,262578,65973,65973,65973,65973,65973,65973,66386,0,0,0,66388,0,0,0,0,0,0,0,66391,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,0,0,0,0,0,0,0,197159, + 0,0,0,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,0,0,0,0,0,0,197126,0, + 0,0,65931,65931,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66374,0,66373,0,66375,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65930,0,65930,0,66372,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,65935,0,0,0,0,65935,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,65935,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65894,0,0,0, + 0,0,0,65935,0,65936,0,0,65935,0,0,0,0,66376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,65935,0,0,66158,66158,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,0,0,65936,65936,0,0,65755,65755,66390,66390,0,0, + 0,0,65936,65936,0,0,65936,65936,0,0,0,0,0,0,0,0,0,66389,66389,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66374,0,0,0,0,0,65894,65894,0,65934,0,0,0,0,0,0,66382,66382,66382,66382,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65932,0,0, + 0,0,0,0,0,0,0,0,66365,66365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66388,0,0,0,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935,0,65935, + 0,65935,0,0,65935,0,65935,0,65935,0,0,0,0,0,0,131471,0,0,131471,0,0,131471,0,0,131471,0,0,131471,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65756,65756,65756,65756,0,0,0,0,0,0,0,0,0,0,65935,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67213,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67212,0,67214,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67211, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67210,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67209,0,0,0,0,0,0,0,0,0,0,0,0,0,67208,0,0,0, + 0,67207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67204,0,0,0, + 0,0,0,0,0,0,0,67203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,67202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67201,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67200,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,67198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,67197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,67196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67195,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,67194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131892,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67193,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67191,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67190,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,67189,0,0,0,0,0,0,0,0,0,0,0,131890,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67188,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67187,0,0,0, + 0,0,0,0,0,0,0,0,67186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66821,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131888,0,0,0,0,0,0, + 0,0,0,0,0,0,67185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67184,0,0,0,0,0,0,0,0,0, + 0,0,0,67183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67181,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,67180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 67179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,67178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67177,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67176,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67175,0,0,0,67172,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67170,0,0, + 0,67169,0,0,0,0,0,0,0,0,0,67168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67167,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67166,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67165,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67164,0, + 0,0,0,0,0,0,0,67163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,67161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67160,0,0,0,0,0,0,0,67159,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67158,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67157,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,67154,0,0,0,0,0,0,0,0,0,0,67153,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66810,0,0,0,0,0,0,0,0,0,0,0,66804,0,0,0,0,0,67151,66806,0,0,0,67150,0,0, + 0,67149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66801,0,0,0,66807,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66803,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66808,0,0,0,0,0,0,0,0,0,0,0,67148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 67147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66805,0,0,0,0,0,66798,0,0,0,0,66800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,131886,0,0,0,0,0,0,0,0,0,0,0,0,67146,0,0,0,66797, + 0,0,67145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66799,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67144,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67143,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67140,0,0,0,0,0,0,0,0,0,0,66790,0,0,0,0,0, + 0,0,0,0,0,0,0,131882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66789,0,0,0,0,66794,0,0,0,0,0,0,0,131878,0,0,0,0,0,0,67138,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,67136,0,0,67137,66793,66782,0,0,0,66788,0,0,0,0,0,0,0,0,0,67135,0,0,0,0,0,0,0,0, + 66791,0,0,0,0,0,0,0,0,0,0,0,0,67134,0,0,0,0,67142,0,0,67141,0,67133,0,0,0,0,0,0,0,0, + 0,0,0,0,67132,0,0,0,0,0,0,0,67131,0,0,0,0,0,0,0,0,131876,0,66775,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66779,0,0,66778,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66776,0,66785,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67130,0,0,0,0,0,0,0,0,0,0, + 0,0,0,67129,0,0,0,131874,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66777,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66781,67128,0,0,0,0, + 0,0,0,0,0,0,67127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67126,0,0,0,0,67125,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66772,0,0,0,0, + 0,0,0,66773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67139,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,131872,0,131870,0,0,0,0,0,0,0,0,66769,0,0,0,0,0,0,0,0,0,0,0,66768,0, + 0,0,0,0,131866,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66770,0,0,0,0,131864,0,0,0,0,0, + 0,0,0,0,0,67124,67124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131862,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66771, + 0,0,0,0,0,0,0,0,0,67123,0,0,0,0,0,0,0,131860,0,0,0,0,0,0,0,0,67122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67121,0,66764,0,0,0,0,0,0,0,66154,0,197225, + 0,0,0,66765,0,0,0,0,0,0,67120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67119, + 0,0,0,0,0,66760,0,0,0,0,0,67118,0,0,0,0,0,67117,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,67116,0,0,0,0,0,0,0,0,66766,0,0,0,0,0,0,0,0,0,0,0,0,0,66767,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67115,0,0,0,0,0,0,0, + 0,0,66763,0,0,0,0,0,67114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,67113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67112,0, + 0,0,67112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66318,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67111,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67109,0,66761,0,0,0,0,0,0,0,0,0,0, + 0,0,0,67108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,131884,0,0,66757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131854,0,0,0,131800,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67107,0,0,0,0,0,0,0,67106,0,0,0,0,0,0,0,0,0,0,0,0, + 66759,0,67105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,131852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67104,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66758,0,0,0,0,0,0,0,0,0,0,0,67103,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66754,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67101,67102,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67099,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67098,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,67097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67096,67095,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66752,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131798,0,0,0,66747,0, + 0,0,0,0,0,0,0,0,66750,0,0,0,67094,0,0,0,0,0,0,66751,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66746,0,0,0,0,0,0,66745, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67091,0,0,0,67093,0,0,0,0,67092,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,67090,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67089,0,0,0,0,0, + 0,0,67088,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66749,0,0,0,66741,0,0,0,0,0,0,0,0,66740,0,0,66748,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66743,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67085,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,67084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67083,0,0,0,0, + 0,0,0,0,0,0,0,67082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66744,0,0,0,67081,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67086,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,67080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131880,0, + 0,0,0,0,0,66738,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,67079,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67078,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,197222,0,0,0,0,0,0,66314,0,0,0,0,67077,0,0,0,0,0,0,0,0,0,0,0,67076, + 0,0,0,0,0,0,67075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66735, + 67072,0,66733,0,66737,66734,0,0,0,0,0,0,0,0,131850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,67071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 67070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66731,0,0,0,0,0,0, + 0,0,0,67069,0,0,0,0,0,0,0,0,0,0,0,0,66729,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,67068,0,0,67067,0,0,0,0,0,0,0,0,0,0,0,0,0,67066,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67073,0,0,0,0,0,0,0,66730,0,0,0,0,0, + 0,67065,67065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67064,0,0, + 0,0,0,0,0,0,0,0,67063,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67062,0,0, + 0,0,0,0,0,0,0,0,0,67061,0,0,0,0,0,0,0,0,0,0,66723,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66726,0,0,0,0,0,0,0,0,0,67060,0,0,67059,0,0,67058,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66722,131848,0,0,0,0,0,0,0,66728,66725,0,0,0,0,0,66727,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67057,0, + 0,0,0,0,66718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,131868,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67054,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67056,0,0,0,0,0,0,66724,0,67055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67053,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66715,0,0,0,66721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,67052,0,0,0,0,0,0,0,0,0,67051,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66714,0,0,0,67050,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66711,0,0,0,0,0,0,0,0,0,66713,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66717,0,0,0,0,0,0,0,0,0,0, + 0,67049,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131846,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,67048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66714,0,0,0,0,0,0,0, + 0,66709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66707,0,0,0,67047,0,0,0,131858,0,131844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66710,0,0,0,0,0,0,0,66708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67046,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,197219,0,66705,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,67045,0,0,0,0,0,0,0,0,0,0,67044,0,0,67043,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67042,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197213,0,0,0,131842,0,0,0,0,0,0,0,0,0, + 66703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67041,0,0,0,0,0,0,0,0,0,0,67040,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66704,0,0,0,0,0,66706,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67039,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67038,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66693,0,0,0,0,0,66696,0,0,0,66701,67037,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67036,0,66695,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67035,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,67033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66690,0,0,0,0, + 0,0,0,67032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66689,0,0,0,0,0,0,0,0,67031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66699,67030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,67029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66694,0,0,0, + 0,0,67028,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66692,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,67027,0,0,0,0,0,0,0,0,0,0,0,0,0,67026,0,0,0,0,0,0,67025,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66687,0,0,67024,0,0, + 0,0,0,0,66685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131840,0,0,0,0,0,0,66688,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,67023,0,0,0,0,0,0,0,0,0,0,0,66681,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66682,0,0,0,0,0,0, + 0,0,0,0,0,66678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66684,67022,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66679,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,67021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131790,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66675,0,0,0,0,0,0,0,0,131834,0,0,0,0,0,0,0,0,0,0,67020,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66677,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66674,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66670,0,0,0,67019,0,0,0,0,0,0,0, + 67019,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197210,0,0,0,131832,0,0,0,0, + 0,67018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66673,0,0,0,0,67017,0,0,66676,0,0,0,0,0,0,0,67016,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66671,0,0,0,0, + 0,0,0,0,0,67015,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66672,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66668,0,0,0,0,0,0,67014,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66666,0,0,0,0,0,0,0,67013, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67012,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66664,0,0,0,131830,0,0,0,0,0,0,0,0,67011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66665,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67010,0,0,0,0,0,0,0,0,0,0,0, + 0,0,67009,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,67008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,67007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,197201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66663,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,67006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66661,0,0,0,0,0,0,0,67005,0,0,0,0, + 0,0,0,0,66659,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,67004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67003,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67002,0,0,0,0,66658,0,66662,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67001, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66657,0,0,0,0,0,0,0,0,0,0,0,197198,66128,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,67000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66998, + 0,0,0,0,0,0,0,0,0,0,0,0,66651,66997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66996,0,0,0,0,66647,0,0,66653,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66995,0,0,0,0,0,0,0,0,0,66994,0, + 0,197195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66993,66645,0,0,0,0,0,0,0,0,0,0,0,0,131824,66992,0,0,0,0,0,0,0, + 0,0,0,0,0,66991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66643,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66990,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66649,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66989,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66641,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66642,0,0,0,0,0, + 0,0,0,0,0,0,0,66987,0,0,0,131818,0,0,0,0,0,66637,0,0,0,0,0,0,0,0,0,66644,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,131788,66639,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66986,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66985,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66633,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66635,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66984,0,0,131816,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66983,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66977,0,0,0,0,0,0,66981,0,0,0,0,0,66980,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66634,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66979,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66629,0,0,0,0,0,0, + 0,0,0,0,0,66978,0,0,0,66630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,131780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66976,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66627,0,66628,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66624,0,0,0,0,0,0,0,0,0,0,66623,0,0,0,0, + 0,0,0,0,0,0,0,0,66975,0,0,66628,0,0,0,0,0,0,0,0,0,131814,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66622,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66973,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66972,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66626,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66620,0,0,0, + 0,0,0,0,0,0,0,0,0,0,131774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66621,0,0,0,0,66971,0,0,0,0,0, + 0,0,0,0,0,0,0,131772,0,0,0,66970,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66969,0,0,0,0,0,0,0,0,0,0,0,0,66618,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66610,0, + 0,0,0,0,0,0,66616,0,0,66615,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66967,0,0,0, + 0,0,0,0,0,0,0,0,0,66611,0,0,0,0,0,0,0,131812,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66966,0,0,0,66609,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66612,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66614,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66964,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66613,0,0,66963,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66606,0,0,0,0,0,0, + 0,0,0,0,0,66605,0,0,0,0,0,0,0,0,0,0,131810,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66962,0,0,0,0,0,0,0,0,0,0,0,0,66608,0,66607, + 0,0,66602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66598,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,131766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66603,0,0,0,0, + 0,0,0,0,0,0,0,66596,0,0,0,0,0,0,0,0,0,0,0,0,131808,0,0,0,0,0,0,0,0,0,0,0, + 0,66597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66320,131856, + 66601,0,0,0,0,0,0,0,0,0,131806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66961,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,131792,0,0,0,0,66595,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66583,0,131802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66582,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66587,0,66592,0, + 0,0,0,0,0,0,0,0,66591,66590,0,0,0,0,0,0,66589,0,0,0,0,0,131794,0,0,0,0,0,0,66588,66585,0, + 0,0,0,0,0,66584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66575, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66586,66586,131786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66959,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66574,0,0,0, + 131784,0,0,0,0,0,0,0,0,0,66958,0,0,0,0,66957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66577,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66578,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66956,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 131760,0,0,0,0,0,66955,0,0,66954,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66570,0, + 66564,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66571,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66569,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66568,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66953,0,0,0,66566,0,0,0,0,0,0,0,0,0, + 0,0,0,66952,0,0,0,66562,66951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66563,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66560,0,0,0,0,0,0,0,0,0,0,0,0,66559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66567,0,0,0,0, + 0,0,0,66949,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66557,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66556,0, + 0,0,0,0,0,0,0,66948,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197192,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66947,0,0,0,0,0,0,66561,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66554,0,0,0,0,0,0,0,0, + 0,66558,0,0,0,66946,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66555,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66553,0,0,0,0,0,0,66551,66945,0,0,0,0,0, + 0,0,0,0,0,66548,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66944,0,0,0,0,66549,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66550,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66943,0,0,0,0,0, + 0,66546,0,0,0,197189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66942,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66545,66941,0,0,0,0,0,0,0,0,0,0,0,0,0,66543,0, + 0,0,0,0,0,0,0,0,0,0,0,66544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66937,0,0,0,0,66940,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66939,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66938,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66538,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66540,0,0,0,0,66542,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,131838,0,0,66936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66541,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66537,0,0,0,0,0,0,0,0,0,131756,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66935,0,0,0,0,0,66934,0,0,0,0,0,0,0,0,0,0,0,66933,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66932,0,66931,0,0,0,0,0,0,0,0,0,66930,0,0, + 0,0,0,0,0,131782,66929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66928,0,0, + 0,0,0,66927,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66536,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66539,66926,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66925,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66923,0,0, + 0,0,0,0,0,0,0,0,0,66534,66922,0,66921,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66920,0,0,0, + 0,0,0,0,0,0,0,66919,0,0,0,0,0,0,0,66535,0,66533,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66531,0,0, + 0,0,0,0,0,0,0,0,0,66532,0,0,0,0,0,0,0,0,0,0,0,0,0,131778,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66529,0,0,66918,0,66917,0,0,0,0,0,0,0,0,66530,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66916,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66915,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66527,0,0,0,0,0, + 0,0,0,0,0,0,66524,0,0,0,0,0,0,0,0,0,0,0,66528,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66522, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66914,0,0,0,0,0,0,0,0,0,0,0,131776,0,0,0, + 0,0,0,0,0,0,0,66913,0,66912,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66911,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66909,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66908,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66907,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66906,0,0,0,0,0,0,0,0,0,0,0,0,0,131770,0,0,0,0,0,0, + 0,0,0,0,0,0,66905,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66518,0,0,0,0,0, + 0,66904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66903,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66514, + 0,0,0,0,0,0,0,0,0,0,0,0,66520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66902,0,0,66901,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66512,0,0,0,0,0,0,0,0,0,0,0,0,66515,0,0,0,0,0,0,0,66900,0,0,0,0,0,0,66899,0, + 0,66513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66510,0,66898,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66517,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66519,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66516,0,0,0,0,66511,0,0,0,0,0,0,0,0,0,0,131754,0,0,0,0,0,0,0,0,0, + 66897,0,0,0,0,0,0,0,0,0,131746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66509, + 0,0,0,0,0,0,0,0,0,0,0,66508,0,0,0,0,0,0,66506,0,0,0,66504,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,131768,0,0,0,0,0,0,0,0,0,0,131750,0,0,0,0,0,131744,0, + 0,131752,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131748,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66505,0,0,0,0,0,0,0, + 66502,0,0,0,0,0,0,0,0,0,131764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66500,0,0,0,0,0,0,0,0,0,0,0,0,66896,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66894,66499,0,0,0,0,0,66497,0,0,0,0,0,0,0,0,0,0,66501,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,131742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66893,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66892,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66891,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66890,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66496,66889,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66490,0,0,0,0,0,0,0,0,0,66888,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66492,0,0,0,66493,0,0,0,0,0,0,0,0,0,0,0,0,0,131762,0,0,66495,0,0,0,0, + 0,0,66489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66887,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66488,0,0,0,0,0,66494,0,0,0,0,0,0,0,0,0, + 0,0,0,66487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131740,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66491,0,0,0,0,0,0,0,0,0,66485,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66481,0,0,0,0,66886,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66486,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66885,0,0,0,0,0,0,0,0,0,0,0,66483,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66884,0,0,0,0,0,0,0,0,0,66883,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66484,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66477,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66478,0,0,66475,0,66473,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66474,0,0,0,66882,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66479,0,0,0,0,0,66881,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66880,66880,0,0,0,0,0,0,0, + 0,0,0,0,66470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66879,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66878,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66465,0,0,0,0,0,0,0,0,0,66876,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66457,0,66464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66454,0,0,66461,0,0,0,66466,0,0,0, + 0,0,0,0,0,0,66460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66462,66456,0,0,0,0,0,0,0, + 0,0,0,66875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66458,131738,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66453,66451,0,0,0,0,0,0,0,0, + 0,0,0,66874,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66450,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66452,0,0,0,0,0,0,0,0,0,0,0,0,0,131736,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66455,0,0,0,0, + 66873,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131734, + 0,0,0,0,0,0,0,0,0,0,0,197207,0,0,0,0,0,0,0,0,0,0,0,0,66449,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131732,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66448,0, + 0,0,66871,0,0,0,0,0,0,0,0,0,0,0,0,66447,0,0,0,0,0,0,0,0,0,0,0,0,66446,0,0,0, + 0,0,0,0,0,0,0,0,66445,66870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,66868,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66444,0,0,0,0,0,0,0,0,0,0,0,0,66867,0, + 0,0,0,0,0,0,0,0,0,0,66443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131758,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66866,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66440,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66865,0,0, + 0,0,0,0,0,0,0,66864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66439,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66435,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66434,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66432, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66433,0,0,0,0,0,0,0,66437, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66863,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66431,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66862,0,0,0,0,66861,0, + 0,0,0,0,0,66860,0,0,0,0,0,0,0,0,0,66859,0,0,0,0,0,0,66858,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66857,0,0,0,0, + 0,0,0,66438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66430,66436,0,0,0,0,0,0,0,0,0,0,0,0,0,197186,0,0,0, + 0,0,0,0,0,0,0,0,0,131692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65888,0,0,0,0,0,0,0,66374,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65935,0,65935,0,0,0,0, + 0,0,0,0,0,65755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65930,65930,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,65935,0,65935,0,0,0,0,0,0,65933,0,0,0,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,197156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197144,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65933,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262582,0, + 0,131512,65894,0,0,0,0,0,0,65779,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,65755,0,0,0,65935,0,65935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65977,65977,0,0,0,0,0,0,328079, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65936,65936,131506,131506,0,0,0, + 0,0,66856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66853,0,0,0, + 0,0,0,0,0,66854,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66850,0,0,0,0,0, + 0,0,0,0,66851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66849,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66845,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66843,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66842,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66841,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66840,0,66840,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66839, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131804,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66837,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,66364,0,0,0,0,0,66363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66836,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66835,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66830,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66833, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66832,0,0,0,0,0,0,0,0,66831,0,0,0, + 0,0,0,66829,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66362,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66827,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66826,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66824,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66823,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66822,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66820,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66819,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,66817,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66361,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66815,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66814,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66813,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66812,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66811,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,66796,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66795,0,0,0,0,0,0,0, + 0,0,0,0,66792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66787,66786,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66784,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66783,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,66360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66762,0,0, + 0,0,0,0,0,0,66756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66755,0,0,0,0,0, + 0,0,0,0,0,66753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66742,0,0,0, + 0,0,0,0,0,0,0,131796,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66698,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66697,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66691,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66686,0,0,0,0,0, + 0,0,0,66683,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66669,0,0,0,0,0,0,0,0,0,0,0,0,0,66667,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66660,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66656,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66652,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,66650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,66640,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66636,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66632,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66617,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,66600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66593,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,66581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,66565,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66358,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66528,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,66526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66503,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66498,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66471, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66476,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,66469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66468,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66467,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66442,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66429,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,66428,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,66427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66426,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66425,0,0,0,0,0,0,0,0,0,0,0,0,0, + 66424,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u32 kbts_GetUnicodeParentInfo(kbts_u32 Codepoint) +{ + return kbts_UnicodeParentInfo_Data[((kbts_un)kbts_UnicodeParentInfo_PageIndices[Codepoint/32] * 32) | (Codepoint & 31)]; +} + +static kbts_u8 kbts_UnicodeUseClass_PageIndices[4351] = { + 0,1,1,1,1,1,2,3,4,5,6,7,8,9,10,11,12,1,1,1,1,1,1,13,14,15,16,17,18,19,1,1, + 20,1,1,1,1,21,1,22,1,1,1,1,1,23,24,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,25,26,27,28,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,29,1,1,1,1,30,31,1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,1,46,47,48,49, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,50,50,50,51,50,50,50,50,50,50,50,50,50,50,50, + 50,50,50,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,53,1,1,1,1,1,1,1,1,54,55,1,56,1,57,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,58,59,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,60,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,61,62,1,63,64,1,1,1,65,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +}; + +static kbts_u8 kbts_UnicodeUseClass_Data[16896] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,21,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,29,29,29,29,29,29,29,0,0,0,0,0,0,1,0,0,29,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,36,9,1,36,33, + 36,35,35,35,35,34,34,34,34,36,36,36,36,3,33,36,0,29,30,0,0,34,35,35,1,1,1,1,1,1,1,1,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,29,31,31,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,9,1,36,33, + 36,35,35,35,35,0,0,33,33,0,0,33,33,3,0,0,0,0,0,0,0,0,0,36,0,0,0,0,1,1,0,1,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,6,0, + 0,29,29,31,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,9,0,36,33, + 36,35,35,0,0,0,0,34,34,0,0,34,34,3,0,0,0,30,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,29,8,2,2,0,12,0,0,0,0,0,0,0,0,0,0, + 0,29,29,31,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,9,1,36,33, + 36,35,35,35,35,34,0,34,34,34,0,36,36,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,29,8,29,8,8,8, + 0,29,31,31,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,9,1,36,34, + 36,35,35,35,35,0,0,33,33,0,0,33,33,3,0,0,0,0,0,0,0,34,34,34,0,0,0,0,1,1,0,1,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,29,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,36,36, + 34,36,36,0,0,0,33,33,33,0,33,33,33,3,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,31,31,31,29,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,9,1,34,34, + 34,36,36,36,36,0,34,34,34,0,34,34,34,3,0,0,0,0,0,0,0,34,35,0,1,1,1,0,0,0,0,0,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,29,31,31,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,9,1,36,34, + 34,36,36,36,36,0,34,34,34,0,34,34,34,3,0,0,0,0,0,0,0,36,36,0,0,0,0,0,0,0,1,0,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,37,37,31,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,31,31,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,1,36,36, + 36,35,35,35,35,0,33,33,33,0,33,33,33,3,38,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,1,1,1,35,35,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,29,31,31,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0, + 1,1,1,1,1,1,1,0,0,0,4,0,0,0,0,36,36,36,34,34,35,0,35,0,36,33,33,33,33,33,33,36,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,36,36,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,34,1,1,34,34,34,34,35,35,35,0,0,0,0,0, + 1,1,1,1,1,1,0,34,29,29,29,29,8,29,34,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,34,1,1,34,34,34,34,35,35,35,34,12,1,0,0, + 1,1,1,1,1,0,0,0,29,29,29,29,0,29,6,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,6,0,6,0,8,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,9,35,34,34,35,34,34,34,34,35,35,35,35,29,0, + 35,34,29,29,35,0,29,29,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,34,34,35,35,33,34,34,34,34,29,30,31,6,34,13,10,12,12,1, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,36,36,35,35,1,1,1,1,12,12,12,1,36,31,31,1,1,36,36,31,31,31,31,31,1,1,1,34,34,34,34,1,1,1,1,1,1,1,1,1,1,1, + 1,1,12,36,33,34,34,31,31,31,31,31,31,30,1,31,1,1,1,1,1,1,1,1,1,1,31,31,36,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,35,35,36,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,35,36,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,35,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,34,35,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,36,34,34,34,34,35,35,35,33,33, + 33,33,33,33,33,33,29,31,36,29,29,6,14,8,6,29,6,34,6,6,0,0,0,0,0,0,0,0,1,6,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, + 2,2,2,2,2,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,34,34,35,36,36,34,34,34,34,7,7,7,0,0,0,0,16,16,30,16,16,16,16,16,16,15,29,6,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,31,31,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,33,36,34,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,10,12,7,14,14,11,7,7,7,7,0,5,36,34,36,36,34,34,34,34,35,35,34,35,36,33,33,33,33,33,34,29,29,29,29,29,29,34,29,29,0,0,30, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,14,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,36,34,34,35,35,35,35,34,34,33,33, + 33,33,34,34,3,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,14,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,7,7,34,35,33,36,34,34,36,6,7,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,36,34,34,36,36,36,34,36,34,14,14,17,17,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,7,36,33,33,33,36,36,35,14,14,14,14,14,14,14,32,32,0,9,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,29,0,30,30,30,30,30,30,29,29,30,30,30,30,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,37,37,31,29,29,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,39,1,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0, + 0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,21,19,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,21,19,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,34,1,1,1,3,1,1,1,1,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,35,34,36,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 31,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,13,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,3,29,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,1,1,0,0,0,0,0,0,0,0,0,0,1,34, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,34,34,34,30,30,30,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,35,35,35,34,35,35,35,35,14,14,14,16,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,14,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,36,36,34,34,35,35,33,33,34,12,13,12, + 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,34,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,34,34,34,35,34,33,33,34,35,13,10,11,12,0,0,0,0,0,0,0,0,0, + 1,1,1,14,1,1,1,1,1,1,1,1,14,16,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,0,0,0,1,31,29,31,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,1,35,35,34,1,1,35,35,1,1,1,1,1,35,29, + 1,29,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,33,35,34,33,36,0,0,0,0,0,31,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,34,36,36,35,36,36,0,31,35,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,35,35,35,0,34,35,0,0,0,0,0,36,30,30,29,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,9,9,9,0,0,0,0,6, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,29,8,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,34,34,34,34,34,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,34,34,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,30,30,30,30,30,30,30,30,30,30,30,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1, + 0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 31,29,31,37,37,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,34,34,35,35,35,35, + 35,35,34,34,34,34,3,0,0,0,0,0,0,0,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,1,1,1,1,1,1,1,1,1,1,34,1,1,34,34,1,0,0,0,0,0,0,0,0,0,40, + 29,29,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,34,34,36,36,3,9,0,0,0,0,0, + 0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,35,35,34,34,33,35,34,34,35,34,34,6,8,0,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,1,36,36,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0, + 29,29,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,35,35,34,34,34,34, + 3,1,38,38,0,0,0,0,0,6,9,34,35,0,33,29,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,36,35,34,34,34,34,29,3,8,8,0,0,0,0,0,0,29,1, + 1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,36,33,36,35,35,34,34,34,34,9,35,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 29,29,31,31,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,9,9,1,36,36, + 34,36,36,36,36,0,0,33,33,0,0,33,33,3,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,1,1,1,1,36,36,0,0,29,29,29,29,29,29,29,0,0,0,29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,36,34,34,35,35,35,35,35, + 35,0,33,0,0,33,0,33,33,36,31,0,31,31,29,9,6,38,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,35,35,34,34, + 36,36,3,29,29,31,9,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,6,1,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,35,35,33,34,33,33,36,33,29, + 29,31,3,9,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,0,0,33,33,33,33,29,29,31,3, + 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,36,35,35,35,35,35,35,34,34,36,36,29,31,3, + 34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,31,34,33,36,35,35,34,34,34,34,3,9,1,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,12,3,11,36,36,34,34,35,35,33,34,35,34,34,34,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,34,34,34,34,29,31,3,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,36,36,36,33,0,33,33,0,0,29,29,36,6,38, + 13,38,13,9,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,33,36,35,35,35,35,0,0,34,34,36,36,31,31,3,1,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,34,35,35,34,34,34,34,34,34,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,35,29,29,29,29,31,37,7,7,7,7,0, + 0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,1,34,35,35,34,34,34,36,36,35,35,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,38,38,38,38,38,38,15,15,15,15,15,15,15,15,15,15,15,15,29,31,8,6,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,34,34,35,35,35,35,35,0,34,34,34,34,29,29,31,3, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,35,33,35,34,36,29,29,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,34,34,34,35,0,0,0,34,0,34,34,0,34, + 29,29,9,34,35,6,38,12,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,36,36,36,36,36,0,34,34,0,36,36,29,31,6,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,34,35,33,36,0,0,0,0,0,0,0,0,0, + 29,29,38,31,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,34,34,35,35,35,0,0,0,33,33, + 34,36,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,22,22,22,22,22,22,22,19,21,22,22,22,18,18,18,18, + 23,18,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,34,34,34,34,34,34,34,34,34,34,10,10,13,29,12,35,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,29,29,29,29,29,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 31,31,31,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,36,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,9,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35, + 35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,29,29,29,29,29,29,29,1,1,1,1,1,1,1,0,0, + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,29,29,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,34,34,34,34,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,35,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,8,8,8,8,8,8,8,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +KBTS_INLINE kbts_u8 kbts_GetUnicodeUseClass(kbts_u32 Codepoint) +{ + return kbts_UnicodeUseClass_Data[((kbts_un)kbts_UnicodeUseClass_PageIndices[Codepoint/256] * 256) | (Codepoint & 255)]; +} + +KBTS_INLINE kbts_u32 kbts_GetDecompositionSize(kbts_u64 Decomposition) +{ + return Decomposition & 3; +} + +KBTS_INLINE kbts_u32 kbts_GetDecompositionCodepoint(kbts_u64 Decomposition, kbts_un Index){ + return (Decomposition >> (Index ? 23 : 2)) & 0x1FFFFF; +} + +#define KBTS_UNICODE_DECOMPOSITION_DO_NOT_RECURSE0 (1ull << 44) +#define KBTS_UNICODE_DECOMPOSITION_DO_NOT_RECURSE1 (1ull << 45) + +KBTS_INLINE kbts_u32 kbts_GetMatchingBracket(kbts_u64 Decomposition) +{ + return (Decomposition >> 23) & 0x1FFFFF; +} + +KBTS_INLINE kbts_u32 kbts_GetUnicodeMatchingBracket(kbts_u32 Codepoint) +{ + kbts_u64 Decomposition = kbts_GetUnicodeDecomposition(Codepoint); return (Decomposition >> 23) & 0x1FFFFF; +} + +KBTS_INLINE kbts_u8 kbts_GetSyllabicClass(kbts_u16 SyllabicInfo) +{ + return SyllabicInfo & 0xFF; +} + +KBTS_INLINE kbts_u8 kbts_GetSyllabicPosition(kbts_u16 SyllabicInfo) +{ + return SyllabicInfo >> 8; +} + +KBTS_INLINE kbts_s32 *kbts_GetParentInfoDeltas(kbts_u32 ParentInfo) +{ + return kbts_UnicodeParentDeltas + (ParentInfo & 0xFFFF); +} + +KBTS_INLINE kbts_un kbts_GetParentInfoCount(kbts_u32 ParentInfo) +{ + return ParentInfo >> 16; +} + +typedef kbts_u8 kbts_grapheme_break_class; +enum kbts_grapheme_break_class_enum { + /* 0 */ KBTS_GRAPHEME_BREAK_CLASS_DEFAULT, + /* 1 */ KBTS_GRAPHEME_BREAK_CLASS_CR, + /* 2 */ KBTS_GRAPHEME_BREAK_CLASS_LF, + /* 3 */ KBTS_GRAPHEME_BREAK_CLASS_Control, + /* 4 */ KBTS_GRAPHEME_BREAK_CLASS_Extend, + /* 5 */ KBTS_GRAPHEME_BREAK_CLASS_ZWJ, + /* 6 */ KBTS_GRAPHEME_BREAK_CLASS_SpacingMark, + /* 7 */ KBTS_GRAPHEME_BREAK_CLASS_L, + /* 8 */ KBTS_GRAPHEME_BREAK_CLASS_V, + /* 9 */ KBTS_GRAPHEME_BREAK_CLASS_LV, + /* 10 */ KBTS_GRAPHEME_BREAK_CLASS_LVT, + /* 11 */ KBTS_GRAPHEME_BREAK_CLASS_T, + /* 12 */ KBTS_GRAPHEME_BREAK_CLASS_Prepend, + /* 13 */ KBTS_GRAPHEME_BREAK_CLASS_IndicConsonant, + /* 14 */ KBTS_GRAPHEME_BREAK_CLASS_IndicExtend, + /* 15 */ KBTS_GRAPHEME_BREAK_CLASS_IndicLinker, + /* 16 */ KBTS_GRAPHEME_BREAK_CLASS_ExtendedPictographic, + /* 17 */ KBTS_GRAPHEME_BREAK_CLASS_RI, + + KBTS_GRAPHEME_BREAK_CLASS_COUNT, +}; + +typedef kbts_u8 kbts_grapheme_break_state; +enum kbts_grapheme_break_state_enum { + /* 0 */ KBTS_GRAPHEME_BREAK_STATE_START, + /* 1 */ KBTS_GRAPHEME_BREAK_STATE_CR, + /* 2 */ KBTS_GRAPHEME_BREAK_STATE_L, + /* 3 */ KBTS_GRAPHEME_BREAK_STATE_LVxV, + /* 4 */ KBTS_GRAPHEME_BREAK_STATE_LVTxT, + /* 5 */ KBTS_GRAPHEME_BREAK_STATE_IndicConsonantxIndicLinker, + /* 6 */ KBTS_GRAPHEME_BREAK_STATE_IndicExtendr, + /* 7 */ KBTS_GRAPHEME_BREAK_STATE_IndicExtendLinkerr, + /* 8 */ KBTS_GRAPHEME_BREAK_STATE_ExtendedPictographic, + /* 9 */ KBTS_GRAPHEME_BREAK_STATE_ExtendR, + /* 10 */ KBTS_GRAPHEME_BREAK_STATE_ExtendR_ZWJ, + /* 11 */ KBTS_GRAPHEME_BREAK_STATE_RI, + /* 12 */ KBTS_GRAPHEME_BREAK_STATE_SKIP, + + /* 13 */ KBTS_GRAPHEME_BREAK_STATE_COUNT, + + /* 14 */ KBTS_GRAPHEME_BREAK_STATE_b0, + /* 15 */ KBTS_GRAPHEME_BREAK_STATE_b01, + // The values below have to be in the same order as their corresponding states. + /* 16 */ KBTS_GRAPHEME_BREAK_STATE_b1, + /* 17 */ KBTS_GRAPHEME_BREAK_STATE_b1toCR, + /* 18 */ KBTS_GRAPHEME_BREAK_STATE_b1toL, + /* 19 */ KBTS_GRAPHEME_BREAK_STATE_b1toLVxV, + /* 20 */ KBTS_GRAPHEME_BREAK_STATE_b1toLVTxT, + /* 21 */ KBTS_GRAPHEME_BREAK_STATE_b1toIndicConsonantxIndicLinker, + /* 22 */ KBTS_GRAPHEME_BREAK_STATE_PADDING0, + /* 23 */ KBTS_GRAPHEME_BREAK_STATE_PADDING1, + /* 24 */ KBTS_GRAPHEME_BREAK_STATE_b1toExtendedPictographic, + /* 25 */ KBTS_GRAPHEME_BREAK_STATE_PADDING2, + /* 26 */ KBTS_GRAPHEME_BREAK_STATE_PADDING3, + /* 27 */ KBTS_GRAPHEME_BREAK_STATE_b1toRI, + /* 28 */ KBTS_GRAPHEME_BREAK_STATE_b1toSKIP, +}; + +// In the SKIP column, CR, LF and Control all still break before the cursor +// because their rules have a higher priority. +// In Indic-related states, ZWJ should behave like an Indic Extend. +static kbts_grapheme_break_state kbts_GraphemeBreakTransition[KBTS_GRAPHEME_BREAK_CLASS_COUNT][KBTS_GRAPHEME_BREAK_STATE_COUNT] = { + /* 0 1 2 3 4 5 6 7 8 9 10 11 12 */ + /* 0 */ {16,16,16,16,16,16,16,16,16,16,16,16, 0}, + /* 1 */ {17,17,17,17,17,17,17,17,17,17,17,17,17}, + /* 2 */ {15,14,15,15,15,15,15,15,15,15,15,15,15}, + /* 3 */ {15,15,15,15,15,15,15,15,15,15,15,15,15}, + /* 4 */ { 0,16, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0}, + /* 5 */ { 0,16, 0, 0, 0, 6, 6, 7,10,10, 0, 0, 0}, + /* 6 */ { 0,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* 7 */ {18,18, 2,18,18,18,18,16,18,18,18,18, 2}, + /* 8 */ {19,19, 3, 3,19,19,19,16,19,19,19,19, 3}, + /* 9 */ {19,19, 3,19,19,19,19,16,19,19,19,19, 3}, + /* 10 */ {20,20, 4,20,20,20,20,16,20,20,20,20, 4}, + /* 11 */ {20,20,20, 4, 4,20,20,16,20,20,20,20, 4}, + /* 12 */ {28,28,28,28,28,28,28,28,28,28,28,28,12}, + /* 13 */ {21,21,21,21,21,21,21, 5,21,21,21,21, 5}, + /* 14 */ { 0,16, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0}, + /* 15 */ { 5,21, 5, 5, 5, 7, 7, 7, 5, 5, 5, 5, 5}, + /* 16 */ {24,24,24,24,24,24,24,16,24,24, 0,24, 8}, + /* 17 */ {27,27,27,27,27,27,27,27,27,27,27, 0,11}, +}; + +// These classes are for Indic, Myanmar and Khmer. +typedef kbts_u8 kbts_indic_syllabic_class; +enum kbts_indic_syllabic_class_enum { + /* 0 A */ KBTS_INDIC_SYLLABIC_CLASS_OTHER, + /* 1 B */ KBTS_INDIC_SYLLABIC_CLASS_CONSONANT, + /* 2 C */ KBTS_INDIC_SYLLABIC_CLASS_VOWEL, + /* 3 D */ KBTS_INDIC_SYLLABIC_CLASS_NUKTA, + /* 4 E */ KBTS_INDIC_SYLLABIC_CLASS_HALANT, + /* 5 F */ KBTS_INDIC_SYLLABIC_CLASS_ZWNJ, + /* 6 G */ KBTS_INDIC_SYLLABIC_CLASS_ZWJ, + /* 7 H */ KBTS_INDIC_SYLLABIC_CLASS_MATRA, + /* 8 I */ KBTS_INDIC_SYLLABIC_CLASS_SYLLABLE_MODIFIER, + /* 9 J */ KBTS_INDIC_SYLLABIC_CLASS_VEDIC_SIGN, + /* 10 K */ KBTS_INDIC_SYLLABIC_CLASS_PLACEHOLDER, + /* 11 L */ KBTS_INDIC_SYLLABIC_CLASS_DOTTED_CIRCLE, + /* 12 M */ KBTS_INDIC_SYLLABIC_CLASS_REGISTER_SHIFTER, + /* 13 N */ KBTS_INDIC_SYLLABIC_CLASS_MATRA_POST, + /* 14 O */ KBTS_INDIC_SYLLABIC_CLASS_REPHA, + /* 15 P */ KBTS_INDIC_SYLLABIC_CLASS_RA, + /* 16 Q */ KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL, + /* 17 R */ KBTS_INDIC_SYLLABIC_CLASS_SYMBOL, + /* 18 S */ KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_WITH_STACKER, + /* 19 T */ KBTS_INDIC_SYLLABIC_CLASS_SYLLABLE_MODIFIER_POST, + /* 20 U */ KBTS_INDIC_SYLLABIC_CLASS_VOWEL_ABOVE, + /* 21 V */ KBTS_INDIC_SYLLABIC_CLASS_VOWEL_BELOW, + /* 22 W */ KBTS_INDIC_SYLLABIC_CLASS_VOWEL_PRE, + /* 23 X */ KBTS_INDIC_SYLLABIC_CLASS_VOWEL_POST, + /* 24 Y */ KBTS_INDIC_SYLLABIC_CLASS_ROBATIC, + /* 25 Z */ KBTS_INDIC_SYLLABIC_CLASS_X_GROUP, + /* 26 a */ KBTS_INDIC_SYLLABIC_CLASS_Y_GROUP, + /* 27 b */ KBTS_INDIC_SYLLABIC_CLASS_ASAT, + /* 28 c */ KBTS_INDIC_SYLLABIC_CLASS_DOT_BELOW, + /* 29 d */ KBTS_INDIC_SYLLABIC_CLASS_SYLLABLE_MOD, + /* 30 e */ KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_HA, + /* 31 f */ KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_RA, + /* 32 g */ KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_WA, + /* 33 h */ KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_YA, + /* 34 i */ KBTS_INDIC_SYLLABIC_CLASS_PWO, + /* 35 j */ KBTS_INDIC_SYLLABIC_CLASS_VARIATION_SELECTOR, + /* 36 k */ KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_MON_LA, + + KBTS_MYANMAR_SYLLABIC_CLASS_COUNT, + KBTS_INDIC_SYLLABIC_CLASS_COUNT = KBTS_INDIC_SYLLABIC_CLASS_SYLLABLE_MODIFIER_POST + 1, + KBTS_KHMER_SYLLABIC_CLASS_COUNT = KBTS_INDIC_SYLLABIC_CLASS_Y_GROUP + 1, +}; + +#define KBTS_INDIC_SYLLABIC_STATE_COUNT 41 +#define KBTS_MYANMAR_SYLLABIC_STATE_COUNT 31 +#define KBTS_KHMER_SYLLABIC_STATE_COUNT 23 + +// @Incomplete: Decrement every state by 1. +static kbts_u8 kbts_IndicSyllabicTransition[KBTS_INDIC_SYLLABIC_CLASS_COUNT][KBTS_INDIC_SYLLABIC_STATE_COUNT] = { + /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 */ + /* A */ {43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,}, + /* B */ {14,43,43,43,43,43,43,14,43,43,43,43,43,43,43,14,43,14,43,43,43,43,43,43,43,14,43,43,43,43,43,43,14,43,43,14,43,43,14,43,14,}, + /* C */ {30,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,30,43,43,43,43,43,43,43,43,43,43,43,43,30,43,43,}, + /* D */ {24,43,24,20,43,43,31,43,43,43, 7,43,43,24,43,33,43,43,43,43,43,43,43,12,43,24,43,43,43, 7,43,24,43,43,43,33,15,43,24,24,43,}, + /* E */ { 8,43, 8,21,27,43, 8,43,18,18, 8, 8,18, 8,43,43,43,43,43,21,43,43,43, 8,18, 8,43,38,43, 8, 8, 8,43,43,18,18,43,43, 8,26,43,}, + /* F */ {25,43,13,22,28, 2,13,15,19,19,13,13,19,25,29,29, 2,29,19,22,22,19, 2,13,19,35,15,19,43, 9,13,25,29,43,22,22,29,29,25,25,43,}, + /* G */ {13,43,13,22,28,43,10,16,19,19,10,13,19,32,29,29,43,16,19,22,22,19,43,13,19,36,37,19,43,10,10,13,29,43,22,22,29,37,13,32,43,}, + /* H */ { 4,43, 4, 4, 4,43, 4,43, 4, 4, 4, 4, 4, 4,43,43,43,43, 4, 4, 4, 4,43, 4, 4, 4,43, 4,43, 4, 4, 4,43,43, 4, 4,43,43, 4, 4,43,}, + /* I */ { 6,43, 6, 6, 6,23, 6,17, 6, 6, 6, 6, 6, 6,17,17,23,17,34, 6, 6, 6,43, 6, 6, 6,17, 6,17, 6, 6, 6,17,43, 6, 6,17,17, 6, 6,43,}, + /* J */ { 2, 2, 2, 2, 2, 2, 2, 2,43,43, 2, 2,43, 2, 2, 2, 2, 2,43, 2, 2,43, 2, 2,43, 2, 2,43,43, 2, 2, 2, 2,43, 2, 2, 2, 2, 2, 2,43,}, + /* K */ {32,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,32,43,32,}, + /* L */ {32,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,32,43,43,43,43,43,43,43,43,43,43,43,43,32,43,43,}, + /* M */ { 3,43,43,43,43,43,43,43,11,43,43,43,43, 3,43,43,43,43,43,43,43,43,43,43, 3, 3,43,43,43,11,43, 3,43,43, 3,43,43,43, 3, 3,43,}, + /* N */ { 4,43, 4, 4, 4, 4, 4,43, 4, 4, 4, 4, 4, 4,43,43,43,43, 4, 4, 4, 4,43, 4, 4, 4,43, 4,43, 4, 4, 4,43, 4, 4, 4,43,43, 4, 4,43,}, + /* O */ {39,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,}, + /* P */ {40,43,43,43,43,43,43,14,43,43,43,43,43,43,43,14,43,14,43,43,43,43,43,43,43,14,43,43,43,43,43,43,14,43,43,14,43,43,14,43,14,}, + /* Q */ { 5,43, 5,43,43,43, 5,43,43,43, 5, 5,43, 5,43,43,43,43,43,43,43,43,43, 5,43, 5,43,43,43, 5, 5, 5,43,43,43,43,43,43, 5, 5,43,}, + /* R */ {37,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,}, + /* S */ {41,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,}, + /* T */ { 6,43, 6, 6, 6,23, 6,17, 6, 6, 6, 6, 6, 6,17,17,23,17,34, 6, 6, 6,43, 6, 6, 6,17, 6,17, 6, 6, 6,17,43, 6, 6,17,17, 6, 6,43,}, +}; + +// @Incomplete: Decrement every state by 1. +static kbts_u8 kbts_MyanmarSyllabicTransition[KBTS_MYANMAR_SYLLABIC_CLASS_COUNT][KBTS_MYANMAR_SYLLABIC_STATE_COUNT] = { + /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 */ + /* A */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* B */ {18,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,18,33,33,33,33,33,33,33,33,18,18,33,18,}, + /* C */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* D */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* E */ {19,33,33,33,33,33,33,33,33,33,33,33,33,33,33,28,33,28,19,29,33,33,33,33,33,33,33,18,19,28,18,}, + /* F */ { 2,33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,33, 2, 2,33,}, + /* G */ { 2,33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,33, 2, 2,33,}, + /* H */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* I */ { 3,33, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,33, 3, 3,33,}, + /* J */ { 4,33,33, 4, 4, 4, 4, 4, 4,33, 4, 4, 4, 4,15, 4, 4, 4, 4, 4, 4, 4, 4, 4,33, 4,33,33, 4, 4, 4,}, + /* K */ {18,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,18,33,18,}, + /* L */ {18,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,18,33,18,}, + /* M */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* N */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* O */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* P */ {30,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,18,33,33,33,33,33,33,33,33,18,18,33,18,}, + /* Q */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* R */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* S */ {31,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* T */ { 3,33, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,33, 3, 3,33,}, + /* U */ { 5,33,33,33, 5,33, 5,22, 5,33, 5, 5, 5, 5,33, 5, 5, 5, 5, 5, 5,22,22,22,33, 5,33,33, 5, 5,33,}, + /* V */ { 6,33,33,33, 6, 6, 6,33, 6,33, 6, 6, 6, 6,33, 6, 6, 6, 6, 6, 6,33,33,33,33, 6,33,33, 6, 6,33,}, + /* W */ { 7,33,33,33,33,33, 7,33, 7,33, 7, 7, 7, 7,33, 7, 7, 7, 7, 7, 7,33,33,33,33, 7,33,33, 7, 7,33,}, + /* X */ { 8,33,33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,33,33, 8, 8,33,}, + /* Y */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* Z */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* a */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* b */ { 9,33,33,33,33,33,33,23, 9,25,21,33,21,26, 3, 9,21, 9, 9, 9,33,33,23,23,33,33, 3,33, 9,20,33,}, + /* c */ {10,33,33,10,10,10,10,10,10,33,10,10,10,10,27,10,10,10,10,10,10,10,10,10,33,10,33,33,10,10,33,}, + /* d */ {33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,}, + /* e */ {11,33,33,33,33,33,33,24,11,33,33,11,11,11,33,11,33,11,11,11,33,33,33,33,33,11,33,33,11,11,33,}, + /* f */ {12,33,33,33,33,33,33,33,12,33,33,33,33,12,33,12,33,12,12,12,33,33,33,33,33,12,33,33,12,12,33,}, + /* g */ {13,33,33,33,33,33,33,33,13,33,33,13,33,13,33,13,33,13,13,13,33,33,33,33,33,13,33,33,13,13,33,}, + /* h */ {14,33,33,33,33,33,33,33,14,33,33,33,33,33,33,14,33,14,14,14,33,33,33,33,33,33,33,33,14,14,33,}, + /* i */ {15,33,15,15,15,15,15,15,15,15,15,15,15,15,33,15,15,15,15,15,15,15,15,15,15,15,15,33,15,15,33,}, + /* j */ {16,33,33,33,33,33,21,33,33,33,33,33,33,33,33,33,33,16,16,33,33,33,33,33,33,33,33,33,16,16,33,}, + /* k */ {17,33,33,33,33,33,33,23,17,33,17,17,17,17,33,17,33,17,17,17,33,33,33,23,33,17,33,33,17,17,33,}, +}; + +// @Incomplete: Decrement every state by 1. +static kbts_u8 kbts_KhmerSyllabicTransition[KBTS_KHMER_SYLLABIC_CLASS_COUNT][KBTS_KHMER_SYLLABIC_STATE_COUNT] = { + /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 */ + /* A */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* B */ {15,25,25,25,25,18,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 2,25,25,}, + /* C */ {15,25,25,25,25,18,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 2,25,25,}, + /* D */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* E */ {21,21,25,25,21,25,25, 6,25, 6,25, 6,25, 6,21,21,25,25,25,25,25, 6,25,}, + /* F */ { 4,17, 3, 3, 4,25, 7, 7,19, 9,20,11,13,13,23, 4, 3,25,19,20,25, 4, 3,}, + /* G */ { 4,17, 3, 3, 4,25, 7, 7,19, 9,20,11,13,13,23, 4, 3,25,19,20,25, 4, 3,}, + /* H */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* I */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* J */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* K */ {16,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* L */ {16,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* M */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* N */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* O */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* P */ {15,25,25,25,25,18,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 2,25,25,}, + /* Q */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* R */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* S */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* T */ {25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,}, + /* U */ { 8, 8,25, 8, 8,25,25,25, 8, 8, 8, 8,25,25, 8, 8, 8,25,25,25,25, 8, 8,}, + /* V */ {10,10,25,25,10,25,25,25,25,25,25,10,25,25,10,10,25,25,25,25,25,10,25,}, + /* W */ {12,12,25,25,12,25,25,25,25,25,25,25,25,25,12,12,25,25,25,25,25,12,25,}, + /* X */ {14,14,25,25,14,25,25,14,25,14,25,14,25,25,14,14,25,25,25,25,25,14,25,}, + /* Y */ { 5, 5,25,25,25,25,25,25,25,25,25,25,25,25,16, 5, 5,25,25,25,25,25,16,}, + /* Z */ {22,22,22,22,22,25, 8, 8,10,10,12,12,14,14,22,22,22,25,10,12,25,22,22,}, + /* a */ {18,18,25,25,18,25,25,18,25,18,25,18,25,18,18,18,25,18,25,25,25,18,25,}, +}; + +typedef kbts_u8 kbts_use_syllabic_class; +enum kbts_use_syllabic_class_enum { + /* 0 */ KBTS_USE_SYLLABIC_CLASS_OTHER, + /* 1 */ KBTS_USE_SYLLABIC_CLASS_BASE, + /* 2 */ KBTS_USE_SYLLABIC_CLASS_BASE_OTHER, + /* 3 */ KBTS_USE_SYLLABIC_CLASS_HALANT, + /* 4 */ KBTS_USE_SYLLABIC_CLASS_HALANT_OR_VOWEL_MODIFIER, + /* 5 */ KBTS_USE_SYLLABIC_CLASS_SAKOT, + /* 6 */ KBTS_USE_SYLLABIC_CLASS_INVISIBLE_STACKER, + /* 7 */ KBTS_USE_SYLLABIC_CLASS_CONS_SUB, + /* 8 */ KBTS_USE_SYLLABIC_CLASS_CONS_MOD_ABOVE, + /* 9 */ KBTS_USE_SYLLABIC_CLASS_CONS_MOD_BELOW, + /* 10 */ KBTS_USE_SYLLABIC_CLASS_CONS_MED_PRE, + /* 11 */ KBTS_USE_SYLLABIC_CLASS_CONS_MED_ABOVE, + /* 12 */ KBTS_USE_SYLLABIC_CLASS_CONS_MED_BELOW, + /* 13 */ KBTS_USE_SYLLABIC_CLASS_CONS_MED_POST, + /* 14 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_ABOVE, + /* 15 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_BELOW, + /* 16 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_POST, + /* 17 */ KBTS_USE_SYLLABIC_CLASS_REORDERING_KILLER, + /* 18 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH, + /* 19 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH_SEGMENT_BEGIN, + /* 20 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH_MOD, + /* 21 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH_SEGMENT_END, + /* 22 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH_JOINER, + /* 23 */ KBTS_USE_SYLLABIC_CLASS_HIEROGLYPH_MIRROR, + /* 24 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_ABOVE, + /* 25 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_BELOW, + /* 26 */ KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_POST, + /* 27 */ KBTS_USE_SYLLABIC_CLASS_SYMBOL_MOD_ABOVE, + /* 28 */ KBTS_USE_SYLLABIC_CLASS_SYMBOL_MOD_BELOW, + /* 29 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_ABOVE, + /* 30 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_BELOW, + /* 31 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_POST, + /* 32 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_PRE, + /* 33 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_PRE, + /* 34 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_ABOVE, + /* 35 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_BELOW, + /* 36 */ KBTS_USE_SYLLABIC_CLASS_VOWEL_POST, + /* 37 */ KBTS_USE_SYLLABIC_CLASS_CONSONANT_WITH_STACKER, + /* 38 */ KBTS_USE_SYLLABIC_CLASS_REPHA, + /* 39 */ KBTS_USE_SYLLABIC_CLASS_ZWNJ, + /* 40 */ KBTS_USE_SYLLABIC_CLASS_HALANT_NUM, + /* 41 */ KBTS_USE_SYLLABIC_CLASS_BASE_NUM, + + KBTS_USE_SYLLABIC_CLASS_COUNT, +}; + +enum +{ + KBTS_USE_STATE_s0 = 42, +}; + +// @Incomplete: Decrement every state by 1. +static kbts_u8 kbts_UseTransition[KBTS_USE_SYLLABIC_CLASS_COUNT][KBTS_USE_STATE_s0] = { + /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 */ + /* A */ {24,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* B */ {15,44,44,44,44,44,44,44,44,15,15,44,44,15,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,37,44,37,44,44,44,44,44,44,44,44,44,44,}, + /* C */ {24,44,44,44,44,44,44,44,44,15,15,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* D */ {14,44,44,44,44,44,44,44,44,44,14,44,44,44,14,14,31,31,31,31,44,44,44,14,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,14,}, + /* E */ {14,44,44,44,44, 5, 5, 5, 5,44,14,44,44, 5,14,14,31,31,31,31,44,44,44,14,44,44,44,44,44,44, 5, 5,44,44,44,44,44,44,44,44,44,14,}, + /* F */ {14,30,30,30,30,30,30,30,30,44,14,44,44,30,14,14,32,32,32,32,44,44,44,14,44,44,44,44,44,44,30,30,44,44,44,44,30,44,44,44,44,14,}, + /* G */ {14,44,44,44,44,44,44,44,44,44,14,44,44,44,14,14,31,31,31,31,44,44,44,14,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,14,}, + /* H */ {15,44,44,44,44,44,44,44,44,44,15,44,44,44,15,15,44,44,44,44,44,44,44,15,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,15,}, + /* I */ {15,44,44,44,44,44,44,44,44,44,15,44,44,44,15,44,44,44,44,44,44,44,44,15,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,15,}, + /* J */ {16,44,44,44,44,44,44,44,44,44,16,44,44,44,16,16,44,44,44,44,44,44,44,16,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,16,}, + /* K */ {17,44,44,44,44,44,44,44,44,44,17,44,44,44,17,17,44,44,44,44,44,44,44,17,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,17,}, + /* L */ {18,44,44,44,44,44,44,44,44,44,18,44,44,44,18,18,18,44,44,44,44,44,44,18,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,18,}, + /* M */ {19,44,44,44,44,44,44,44,44,44,19,44,44,44,19,19,19,19,44,44,44,44,44,19,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,19,}, + /* N */ {20,44,44,44,44,44,44,44,44,44,20,44,44,44,20,20,20,20,20,44,44,44,44,20,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,20,}, + /* O */ {21,21,21,21,21,21,21,21,21,44,21,44,44,21,21,21,21,21,21,21,21,44,44,21,44,44,44,44,44,44,21,21,44,44,44,44,21,44,44,44,44,21,}, + /* P */ {22,22,22,22,22,22,22,22,22,44,22,44,44,22,22,22,22,22,22,22,22,22,44,22,44,44,44,44,44,44,22,22,44,44,44,44,22,44,44,44,44,22,}, + /* Q */ {23,23,23,23,23,23,23,23,23,44,23,44,44,23,23,23,23,23,23,23,23,23,23,23,44,44,44,44,44,44,23,23,44,44,44,44,23,44,44,44,44,23,}, + /* R */ {25,44,44,44,44,44,44,44,44,44,25,44,44,44,25,25,44,44,44,44,44,44,44,25,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,25,}, + /* S */ {41,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,38,44,41,44,44,44,44,44,41,}, + /* T */ {42,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,34,44,36,44,39,39,39,44,36,}, + /* U */ {44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,33,44,44,39,44,39,33,44,}, + /* V */ {44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,33,44,33,44,44,44,44,44,33,44,}, + /* W */ {44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,34,34,34,44,44,34,34,34,34,44,}, + /* X */ {44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,40,44,44,35,44,}, + /* Y */ {26,26,26,26,26,26,26,26,26,44,26,44,44,26,26,26,26,26,26,26,26,26,26,26,44,26,44,44,44,44,26,26,44,44,44,44,26,44,44,44,44,26,}, + /* Z */ {27,27,27,27,27,27,27,27,27,44,27,44,44,27,27,27,27,27,27,27,27,27,27,27,44,27,27,44,44,44,27,27,44,44,44,44,27,44,44,44,44,27,}, + /* a */ {25,25,25,25,25,25,25,25,25,44,25,44,44,25,25,25,25,25,25,25,25,25,25,25,44,44,44,44,44,44,25,25,44,44,44,44,25,44,44,44,44,25,}, + /* b */ {28,44,44,44,44,44,44,44,44,44,11,44,44,44,44,44,44,44,44,44,44,44,44,28,44,44,44,28,44,44,44,44,44,44,44,44,44,44,44,44,44,28,}, + /* c */ {29,44,44,44,44,44,44,44,44,44,29,44,44,44,44,44,44,44,44,44,44,44,44,29,44,44,44,29,29,44,44,44,44,44,44,44,44,44,44,44,44,29,}, + /* d */ { 2, 2,44,44, 2, 2, 2, 2, 2,44, 2,44,44, 2, 2, 2, 2, 2, 2, 2,44,44,44, 2,44,44,44,44,44,44, 2, 2,44,44,44,44,44,44,44,44,44, 2,}, + /* e */ { 3, 3, 3,44, 3, 3, 3, 3, 3,44, 3,44,44, 3, 3, 3, 3, 3, 3, 3,44,44,44, 3,44,44,44,44,44,44, 3, 3,44,44,44,44,44,44,44,44,44, 3,}, + /* f */ { 4, 4, 4,44, 4, 4, 4, 4, 4,44, 4,44,44, 4, 4, 4, 4, 4, 4, 4,44,44,44, 4,44,44,44,44,44,44, 4, 4,44,44,44,44,44,44,44,44,44, 4,}, + /* g */ { 5,44,44,44, 5, 5, 5, 5, 5,44, 5,44,44, 5, 5, 5, 5, 5, 5, 5,44,44,44, 5,44,44,44,44,44,44, 5, 5,44,44,44,44,44,44,44,44,44, 5,}, + /* h */ { 6,44,44,44,44, 6,44,44,44,44, 6,44,44,44, 6, 6, 6, 6, 6, 6,44,44,44, 6,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, 6,}, + /* i */ { 7,44,44,44,44, 7, 7,44,44,44, 7,44,44,44, 7, 7, 7, 7, 7, 7,44,44,44, 7,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, 7,}, + /* j */ { 8,44,44,44,44, 8, 8, 8,44,44, 8,44,44,44, 8, 8, 8, 8, 8, 8,44,44,44, 8,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, 8,}, + /* k */ { 9,44,44,44,44, 9, 9, 9, 9,44, 9,44,44,44, 9, 9, 9, 9, 9, 9,44,44,44, 9,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, 9,}, + /* l */ {10,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* m */ {11,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* n */ {44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* o */ {12,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, + /* p */ {13,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,}, +}; + +static const kbts_u8 kbts_CmapFormatPrecedence[14] = {1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 3, 0, 4, 5}; + +static int kbts_ShaperClearsMarkAdvancesInPostGposFixup(kbts_u32 Shaper) +{ + int Result = (1 << Shaper) & ((1 << KBTS_SHAPER_ARABIC) | (1 << KBTS_SHAPER_DEFAULT) | (1 << KBTS_SHAPER_HEBREW)); + return Result; +} + +static kbts_indic_script_properties kbts_IndicScriptProperties(kbts_u32 Script) +{ + kbts_indic_script_properties Result = KBTS_ZERO; + + switch(Script) + { + case KBTS_SCRIPT_DEVANAGARI: + { + Result.ViramaCodepoint = 0x94D; + Result.RephPosition = KBTS_REPH_POSITION_BEFORE_POST; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + } + break; + + case KBTS_SCRIPT_BENGALI: + { + Result.ViramaCodepoint = 0x9CD; + Result.RephPosition = KBTS_REPH_POSITION_AFTER_SUBJOINED; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + } + break; + + case KBTS_SCRIPT_GUJARATI: + { + Result.ViramaCodepoint = 0xACD; + Result.RephPosition = KBTS_REPH_POSITION_BEFORE_POST; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + } + break; + + case KBTS_SCRIPT_GURMUKHI: + { + Result.ViramaCodepoint = 0xA4D; + Result.RephPosition = KBTS_REPH_POSITION_BEFORE_SUBJOINED; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + } + break; + + case KBTS_SCRIPT_KANNADA: + { + Result.ViramaCodepoint = 0xCCD; + Result.BlwfPostOnly = 1; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED; + } + break; + + case KBTS_SCRIPT_MALAYALAM: + { + Result.ViramaCodepoint = 0xD4D; + Result.RephPosition = KBTS_REPH_POSITION_AFTER_MAIN; + Result.RephEncoding = KBTS_REPH_ENCODING_LOGICAL_REPHA; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + } + break; + + case KBTS_SCRIPT_ODIA: + { + Result.ViramaCodepoint = 0xB4D; + Result.RephPosition = KBTS_REPH_POSITION_AFTER_MAIN; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_MAIN; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + } + break; + + case KBTS_SCRIPT_TAMIL: + { + Result.ViramaCodepoint = 0xBCD; + Result.RightSideMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_AFTER_POST; + } + break; + + case KBTS_SCRIPT_TELUGU: + { + Result.ViramaCodepoint = 0xC4D; + Result.RephEncoding = KBTS_REPH_ENCODING_EXPLICIT; + Result.BlwfPostOnly = 1; + Result.AboveBaseMatraPosition = KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED; + Result.BelowBaseMatraPosition = KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED; + } + break; + } + + return Result; +} + +static void kbts_ByteSwapArray16(kbts_u16 *Array, kbts_un Count) +{ + KBTS_FOR(It, 0, Count) + { + Array[It] = kbts_ByteSwap16(Array[It]); + } +} + +static void kbts_ByteSwapArray32(kbts_u32 *Array, kbts_un Count) +{ + KBTS_FOR(It, 0, Count) + { + Array[It] = kbts_ByteSwap32(Array[It]); + } +} + +static kbts_u64 kbts_ContainsFeature(kbts_feature_set *Set, kbts_feature_id Id) +{ + kbts_un WordIndex = Id / 64; + kbts_un BitIndex = Id % 64; + + kbts_u64 Result = Set->Flags[WordIndex] & (1ull << BitIndex); + return Result; +} + +static void kbts_AddFeature(kbts_feature_set *Set, kbts_feature_id Id) +{ + kbts_un WordIndex = Id / 64; + kbts_un BitIndex = Id % 64; + + Set->Flags[WordIndex] |= 1ull << BitIndex; +} + +// +// TTF struct definitions. +// + +enum +{ + KBTS_GLYPH_CLASS_BASE = 1, + KBTS_GLYPH_CLASS_LIGATURE = 2, + KBTS_GLYPH_CLASS_MARK = 3, + KBTS_GLYPH_CLASS_COMPONENT = 4, +}; + +enum +{ + KBTS_LOOKUP_FLAG_RIGHT_TO_LEFT = 1 << 0, + KBTS_LOOKUP_FLAG_IGNORE_BASE_GLYPHS = 1 << 1, + KBTS_LOOKUP_FLAG_IGNORE_LIGATURES = 1 << 2, + KBTS_LOOKUP_FLAG_IGNORE_MARKS = 1 << 3, + KBTS_LOOKUP_FLAG_USE_MARK_FILTERING_SET = 1 << 4, + + KBTS_LOOKUP_FLAG_MARK_ATTACHMENT_CLASS_FILTER = 0xFF00, +}; + +enum +{ + KBTS_VALUE_FORMAT_X_PLACEMENT = 1 << 0, + KBTS_VALUE_FORMAT_Y_PLACEMENT = 1 << 1, + KBTS_VALUE_FORMAT_X_ADVANCE = 1 << 2, + KBTS_VALUE_FORMAT_Y_ADVANCE = 1 << 3, + KBTS_VALUE_FORMAT_X_PLACEMENT_DEVICE = 1 << 4, + KBTS_VALUE_FORMAT_Y_PLACEMENT_DEVICE = 1 << 5, + KBTS_VALUE_FORMAT_X_ADVANCE_DEVICE = 1 << 6, + KBTS_VALUE_FORMAT_Y_ADVANCE_DEVICE = 1 << 7, +}; + +enum +{ + KBTS_DELTA_FORMAT_2_BIT = 1, + KBTS_DELTA_FORMAT_4_BIT = 2, + KBTS_DELTA_FORMAT_8_BIT = 3, + KBTS_DELTA_FORMAT_VARIATION_INDEX = 0x8000, +}; + +# pragma pack(push, 1) + +typedef struct kbts_glyph_header +{ + kbts_s16 ContourCount; + kbts_s16 MinX; + kbts_s16 MinY; + kbts_s16 MaxX; + kbts_s16 MaxY; +} kbts_glyph_header; + +typedef struct kbts_script_record +{ + kbts_u32 Tag; + kbts_u16 Offset; +} kbts_script_record; + +typedef struct kbts_script_list +{ + kbts_u16 Count; + // kbts_script_record Records[Count]; +} kbts_script_list; + +typedef struct kbts_ot_script +{ + kbts_u16 DefaultLangsysOffset; + kbts_u16 Count; + // kbts_langsys_record Records[Count]; +} kbts_ot_script; + +typedef struct kbts_langsys_record +{ + kbts_u32 Tag; + kbts_u16 Offset; +} kbts_langsys_record; + +typedef struct kbts_langsys +{ + kbts_u16 LookupOrderOffset; // reserved + kbts_u16 RequiredFeatureIndex; + kbts_u16 FeatureIndexCount; + // kbts_u16 FeatureIndices[FeatureIndexCount]; +} kbts_langsys; + +typedef struct kbts_feature_list +{ + kbts_u16 Count; + // kbts_feature_record Records[Count]; +} kbts_feature_list; + +typedef struct kbts_feature_record +{ + kbts_u32 Tag; + kbts_u16 Offset; +} kbts_feature_record; + +typedef struct kbts_feature +{ + kbts_u16 FeatureParamsOffset; + kbts_u16 LookupIndexCount; + // kbts_u16 LookupIndices[LookupIndexCount]; +} kbts_feature; + +typedef struct kbts_lookup_list +{ + kbts_u16 Count; + // kbts_u16 Offsets[Count]; +} kbts_lookup_list; + +// Lookups are used both in GSUB and GPOS. +// Type means either GSUB Lookup Type, or GPOS Lookup Type, depending on the table we are parsing. +typedef struct kbts_lookup +{ + kbts_u16 Type; + kbts_u16 Flag; + kbts_u16 SubtableCount; + // kbts_u16 SubtableOffsets[SubtableCount]; + // If USE_MARK_FILTERING_SET: + // kbts_u16 MarkFilteringSet; +} kbts_lookup; + +typedef struct kbts_coverage +{ + kbts_u16 Format; + kbts_u16 Count; + // If Format == 1: + // kbts_u16 GlyphArray[Count]; + // If Format == 2: + // kbts_range_record Ranges[Count]; +} kbts_coverage; + +typedef struct kbts_range_record +{ + kbts_u16 StartGlyphId; + kbts_u16 EndGlyphId; + kbts_u16 StartCoverageIndex; +} kbts_range_record; + +typedef struct kbts_class_definition_1 +{ + kbts_u16 Format; + kbts_u16 StartGlyphId; + kbts_u16 GlyphCount; + // kbts_u16 ClassValues[GlyphCount]; +} kbts_class_definition_1; + +typedef struct kbts_class_definition_2 +{ + kbts_u16 Format; + kbts_u16 Count; + // kbts_class_range_record Ranges[Count]; +} kbts_class_definition_2; + +typedef struct kbts_class_range_record +{ + kbts_u16 StartGlyphId; + kbts_u16 EndGlyphId; + kbts_u16 Class; +} kbts_class_range_record; + +typedef struct kbts_sequence_lookup_record +{ + kbts_u16 SequenceIndex; + kbts_u16 LookupListIndex; +} kbts_sequence_lookup_record; + +typedef struct kbts_sequence_rule +{ + kbts_u16 GlyphCount; + kbts_u16 SequenceLookupCount; + // kbts_u16 InputSequence[GlyphCount - 1]; + // kbts_sequence_lookup_record SequenceLookupRecords[SequenceLookupCount]; +} kbts_sequence_rule; + +typedef struct kbts_sequence_rule_set +{ + kbts_u16 Count; + // kbts_u16 Offsets[Count]; +} kbts_sequence_rule_set; + +typedef struct kbts_sequence_context_1 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 SeqRuleSetCount; + // kbts_u16 SeqRuleSetOffsets[]; +} kbts_sequence_context_1; + +typedef struct kbts_sequence_context_2 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ClassDefOffset; + kbts_u16 ClassSequenceRuleSetCount; + // kbts_u16 ClassSequenceRuleSetOffsets[ClassSequenceRuleSetCount]; May be NULL! +} kbts_sequence_context_2; + +typedef struct kbts_class_sequence_rule_set +{ + kbts_u16 Count; + // kbts_u16 ClassSequenceRuleOffsets[Count]; +} kbts_class_sequence_rule_set; + +typedef struct kbts_class_sequence_rule +{ + kbts_u16 GlyphCount; + kbts_u16 SequenceLookupCount; + // kbts_u16 InputSequence[GlyphCount-1]; + // kbts_sequence_lookup_record SequenceLookupRecords[SequenceLookupCount]; +} kbts_class_sequence_rule; + +typedef struct kbts_sequence_context_3 +{ + kbts_u16 Format; + kbts_u16 GlyphCount; + kbts_u16 SequenceLookupCount; + // kbts_u16 CoverageOffsets[GlyphCount]; + // kbts_sequence_lookup_record SequenceLookupRecords[SequenceLookupCount]; +} kbts_sequence_context_3; + +typedef struct kbts_chained_sequence_context_1 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ChainedSequenceRuleSetCount; + // kbts_u16 ChainedSequenceRuleSetOffsets[ChainedSequenceRuleSetCount]; +} kbts_chained_sequence_context_1; + +typedef struct kbts_chained_sequence_rule_set +{ + kbts_u16 Count; + // kbts_u16 Offsets[Count]; +} kbts_chained_sequence_rule_set; + +typedef struct kbts_chained_sequence_rule +{ + kbts_u16 BacktrackGlyphCount; + // kbts_u16 BacktrackSequence[BacktrackCount]; + // kbts_u16 InputGlyphCount; + // kbts_u16 InputSequence[InputGlyphCount - 1]; + // kbts_u16 LookaheadGlyphCount; + // kbts_u16 LookaheadSequence[LookaheadGlyphCount]; + // kbts_u16 SequenceLookupCount; + // kbts_sequence_lookup_record SequenceLookupRecords[SequenceLookupCount]; +} kbts_chained_sequence_rule; + +typedef struct kbts_chained_sequence_context_2 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 BacktrackClassDefOffset; + kbts_u16 InputClassDefOffset; + kbts_u16 LookaheadClassDefOffset; + kbts_u16 ChainedClassSequenceRuleSetCount; + // kbts_u16 ChainedClassSequenceRuleSetOffsets[ChainedClassSequenceRuleSetCount]; +} kbts_chained_sequence_context_2; + +typedef struct kbts_chained_sequence_context_3 +{ + kbts_u16 Format; + kbts_u16 BacktrackGlyphCount; + // kbts_u16 BacktrackCoverageOffsets[BacktrackGlyphCount]; + // kbts_u16 InputGlyphCount; + // kbts_u16 InputCoverageOffsets[InputGlyphCount]; + // kbts_u16 LookaheadGlyphCount; + // kbts_u16 LookaheadCoverageOffsets[LookaheadGlyphCount]; + // kbts_u16 SequenceLookupCount; + // kbts_sequence_lookup_record SequenceLookupRecords[SequenceLookupCount]; +} kbts_chained_sequence_context_3; + +typedef struct kbts_device +{ + union + { + struct + { + kbts_u16 StartSize; + kbts_u16 EndSize; + } Device; + + struct + { + kbts_u16 DeltaSetOuterIndex; + kbts_u16 DeltaSetInnerIndex; + } VariationIndex; + } U; + kbts_u16 DeltaFormat; + // kbts_u16 DeltaValue[]; +} kbts_device; + +typedef struct kbts_feature_variations +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u32 RecordCount; + // kbts_feature_variation_record Records[RecordCount]; +} kbts_feature_variations; + +typedef struct kbts_feature_variation_record +{ + kbts_u32 ConditionSetOffset; + kbts_u32 FeatureTableSubstitutionOffset; +} kbts_feature_variation_record; + +typedef struct kbts_condition_set +{ + kbts_u16 Count; + // kbts_u32 Offsets[Count]; +} kbts_condition_set; + +typedef struct kbts_condition_1 +{ + kbts_u16 Format; + kbts_u16 AxisIndex; + kbts_u16 FilterRangeMinValue; + kbts_u16 FilterRangeMaxValue; +} kbts_condition_1; + +typedef struct kbts_feature_table_substitution +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u16 Count; + // kbts_feature_table_substitution_record Records[Count]; +} kbts_feature_table_substitution; + +typedef struct kbts_feature_table_substitution_record +{ + kbts_u16 FeatureIndex; + kbts_u32 AlternateFeatureOffset; +} kbts_feature_table_substitution_record; + +typedef struct kbts_table_directory +{ + kbts_u32 Version; + kbts_u16 TableCount; + kbts_u16 SearchRange; + kbts_u16 EntrySelector; + kbts_u16 RangeShift; + // kbts_table_record Records[TableCount]; +} kbts_table_directory; + +typedef struct kbts_table_record +{ + kbts_u32 Tag; + kbts_u32 Checksum; + kbts_u32 Offset; + kbts_u32 Length; +} kbts_table_record; + +typedef struct kbts_cmap +{ + kbts_u16 Version; + kbts_u16 TableCount; + // kbts_encoding_record Records[TableCount]; +} kbts_cmap; + +typedef struct kbts_encoding_record +{ + kbts_u16 PlatformId; + kbts_u16 EncodingId; + kbts_u32 SubtableOffset; +} kbts_encoding_record; + +/* Precedence rules for cmap tables: + - Tables are mutually exclusive, except for format 14 which completes the others. + - 8, 10, 12 > 0, 2, 4, 6 + - Formats 4, 12, 13, 14 are used today. + - Formats 4 and 12 are basic cmap tables. + - Format 13 is for fallback fonts that want to map lots of codepoints to a few fallback glyphs. + - Format 14 is for Unicode Variation Sequences. + - There can be Unicode and Windows tables with the same formats. In that case, we prefer the Windows tables. +*/ + +typedef struct kbts_cmap_0 +{ + kbts_u16 Format; + kbts_u16 Length; + kbts_u16 Language; + kbts_u8 GlyphIdArray[256]; +} kbts_cmap_0; + +typedef struct kbts_cmap_2 +{ + kbts_u16 Format; + kbts_u16 Length; + kbts_u16 Language; + kbts_u16 SubHeaderKeys[256]; + // kbts_sub_header SubHeaders[]; + // kbts_u16 GlyphIdArray[]; +} kbts_cmap_2; + +typedef struct kbts_sub_header +{ + kbts_u16 FirstCode; + kbts_u16 EntryCount; + kbts_s16 IdDelta; + kbts_u16 IdRangeOffset; +} kbts_sub_header; + +typedef struct kbts_cmap_4 +{ + kbts_u16 Format; + kbts_u16 Length; + kbts_u16 Language; + kbts_u16 SegmentCountTimesTwo; + kbts_u16 SearchRange; + kbts_u16 EntrySelector; + kbts_u16 RangeShift; + // kbts_u16 EndCode[SegmentCount]; + // kbts_u16 Reserved; + // kbts_u16 StartCode[SegmentCount]; + // kbts_s16 IdDelta[SegmentCount]; + // kbts_u16 IdRangeOffsets[SegmentCount]; + // kbts_u16 GlyphIdArray[]; +} kbts_cmap_4; + +typedef struct kbts_cmap_6 +{ + kbts_u16 Format; + kbts_u16 Length; + kbts_u16 Language; + kbts_u16 FirstCode; + kbts_u16 EntryCount; + // kbts_u16 GlyphIdArray[EntryCount]; +} kbts_cmap_6; + +typedef struct kbts_cmap_12_13 +{ + kbts_u16 Format; + kbts_u16 Reserved; + kbts_u32 Length; + kbts_u32 Language; + kbts_u32 GroupCount; + // kbts_sequential_map_group Groups[GroupCount]; +} kbts_cmap_12_13; + +typedef struct kbts_sequential_map_group +{ + kbts_u32 StartCharacterCode; + kbts_u32 EndCharacterCode; + kbts_u32 StartGlyphId; +} kbts_sequential_map_group; + +typedef struct kbts_cmap_14 +{ + kbts_u16 Format; + kbts_u32 Length; + kbts_u32 SelectorCount; + // kbts_variation_selector Selectors[SelectorCount]; +} kbts_cmap_14; + +typedef struct kbts_variation_selector +{ + kbts_u8 Selector[3]; + kbts_u32 DefaultUvsOffset; + kbts_u32 NonDefaultUvsOffset; +} kbts_variation_selector; + +typedef struct kbts_default_uvs +{ + kbts_u32 RangeCount; + // kbts_unicode_range Ranges[RangeCount]; +} kbts_default_uvs; + +typedef struct kbts_unicode_range +{ + kbts_u8 Start[3]; + kbts_u8 Count; +} kbts_unicode_range; + +typedef struct kbts_non_default_uvs +{ + kbts_u32 MappingCount; + // kbts_uvs_mapping Mappings[MappingCount]; +} kbts_non_default_uvs; + +typedef struct kbts_uvs_mapping +{ + kbts_u8 UnicodeValue[3]; + kbts_u16 GlyphId; +} kbts_uvs_mapping; + +typedef struct kbts_gsub_gpos +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u16 ScriptListOffset; + kbts_u16 FeatureListOffset; + kbts_u16 LookupListOffset; + kbts_u32 FeatureVariationsOffset; // Only present in v1.1 +} kbts_gsub_gpos; + +typedef struct kbts_single_substitution +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + union + { + kbts_s16 DeltaGlyphId; // Format == 1 + kbts_u16 GlyphCount; // Format == 2 + } DeltaOrCount; + // If Format == 2: + // kbts_u16 SubstituteGlyphIds[GlyphCount]; +} kbts_single_substitution; + +typedef struct kbts_multiple_substitution +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 SequenceCount; + // kbts_u16 SequenceOffsets[SequenceCount]; +} kbts_multiple_substitution; + +typedef struct kbts_sequence +{ + kbts_u16 GlyphCount; + // kbts_u16 SubstituteGlyphIds[GlyphCount]; +} kbts_sequence; + +typedef struct kbts_alternate_substitution +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 AlternateSetCount; + // kbts_u16 AlternateSetOffsets[AlternateSetCount]; +} kbts_alternate_substitution; + +typedef struct kbts_alternate_set +{ + kbts_u16 GlyphCount; + // kbts_u16 AlternateGlyphIds[GlyphCount]; +} kbts_alternate_set; + +typedef struct kbts_ligature_substitution +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 LigatureSetCount; + // kbts_u16 LigatureSetOffsets[LigatureSetCount]; +} kbts_ligature_substitution; + +typedef struct kbts_ligature_set +{ + kbts_u16 Count; + // kbts_u16 Offsets[Count]; +} kbts_ligature_set; + +typedef struct kbts_ligature +{ + kbts_u16 Glyph; + kbts_u16 ComponentCount; + // kbts_u16 ComponentGlyphIds[ComponentCount - 1]; +} kbts_ligature; + +typedef struct kbts_extension +{ + kbts_u16 Format; + kbts_u16 LookupType; + kbts_u32 Offset; +} kbts_extension; + +typedef struct kbts_reverse_chain_substitution +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 BacktrackGlyphCount; + // kbts_u16 BacktrackCoverageOffsets[BacktrackGlyphCount]; + // kbts_u16 LookaheadGlyphCount; + // kbts_u16 LookaheadCoverageOffsets[LookaheadGlyphCount]; + // kbts_u16 GlyphCount; + // kbts_u16 SubstituteGlyphIds[GlyphCount]; +} kbts_reverse_chain_substitution; + +typedef struct kbts_mark_glyph_sets +{ + kbts_u16 Format; + kbts_u16 MarkGlyphSetCount; + // kbts_u32 CoverageOffsets[MarkGlyphSetCount]; +} kbts_mark_glyph_sets; + +typedef struct kbts_gdef +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u16 ClassDefinitionOffset; // May be 0 + kbts_u16 AttachListOffset; // May be 0 + kbts_u16 LigatureCaretListOffset; // May be 0 + kbts_u16 MarkAttachmentClassDefinitionOffset; // May be 0 + kbts_u16 MarkGlyphSetsDefinitionOffset; // v1.2 and up; may be 0 + kbts_u32 ItemVariationStoreOffset; // v1.3 and up; may be 0 +} kbts_gdef; + +typedef struct kbts_anchor +{ + kbts_u16 Format; + kbts_s16 X; + kbts_s16 Y; + union + { + kbts_u16 AnchorPoint; // If Format == 2 + kbts_u16 XDeviceOffset; // If Format == 3 + } U; + kbts_u16 YDeviceOffset; // If Format == 3 +} kbts_anchor; + +typedef struct kbts_mark_record +{ + kbts_u16 Class; + kbts_u16 AnchorOffset; +} kbts_mark_record; + +typedef struct kbts_mark_array +{ + kbts_u16 Count; + // kbts_mark_record Records[Count]; +} kbts_mark_array; + +typedef struct kbts_single_adjustment_1 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ValueFormat; + // ValueRecord; +} kbts_single_adjustment_1; + +typedef struct kbts_single_adjustment_2 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ValueFormat; + kbts_u16 RecordCount; + // ValueRecord Records[RecordCount]; +} kbts_single_adjustment_2; + +typedef struct kbts_pair_value_record +{ + kbts_u16 SecondGlyph; + // ValueRecord Record1; + // ValueRecord Record2; +} kbts_pair_value_record; + +typedef struct kbts_pair_set +{ + kbts_u16 Count; + // kbts_pair_value_record PairValueRecords[Count]; +} kbts_pair_set; + +typedef struct kbts_pair_adjustment_1 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ValueFormat1; // May be 0 + kbts_u16 ValueFormat2; // May be 0 + kbts_u16 SetCount; + // kbts_u16 SetOffsets[PairSetCount]; +} kbts_pair_adjustment_1; + +typedef struct kbts_pair_adjustment_2 +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 ValueFormat1; // May be 0 + kbts_u16 ValueFormat2; // May be 0 + kbts_u16 ClassDefinition1Offset; + kbts_u16 ClassDefinition2Offset; + kbts_u16 Class1Count; + kbts_u16 Class2Count; + // ValueRecord ValueRecords[Class1Count][Class2Count][2]; +} kbts_pair_adjustment_2; + +typedef struct kbts_entry_exit +{ + kbts_u16 EntryAnchorOffset; + kbts_u16 ExitAnchorOffset; +} kbts_entry_exit; + +typedef struct kbts_cursive_attachment +{ + kbts_u16 Format; + kbts_u16 CoverageOffset; + kbts_u16 EntryExitCount; + // kbts_entry_exit Records[EntryExitCount]; +} kbts_cursive_attachment; + +typedef struct kbts_base_array +{ + kbts_u16 BaseCount; + // kbts_u16 BaseAnchorOffsets[BaseCount][MarkClassCount]; // May be NULL +} kbts_base_array; + +typedef struct kbts_mark_to_base_attachment +{ + kbts_u16 Format; + kbts_u16 MarkCoverageOffset; + kbts_u16 BaseCoverageOffset; + kbts_u16 MarkClassCount; + kbts_u16 MarkArrayOffset; + kbts_u16 BaseArrayOffset; +} kbts_mark_to_base_attachment; + +typedef struct kbts_ligature_attach +{ + kbts_u16 Count; + // kbts_u16 LigatureAnchorOffsets[Count][MarkClassCount]; // May be NULL +} kbts_ligature_attach; + +typedef struct kbts_ligature_array +{ + kbts_u16 Count; + // kbts_u16 LigatureAttachOffsets[Count]; +} kbts_ligature_array; + +typedef struct kbts_mark_to_ligature_attachment +{ + kbts_u16 Format; + kbts_u16 MarkCoverageOffset; + kbts_u16 LigatureCoverageOffset; + kbts_u16 MarkClassCount; + kbts_u16 MarkArrayOffset; + kbts_u16 LigatureArrayOffset; +} kbts_mark_to_ligature_attachment; + +typedef struct kbts_long_mtx +{ + kbts_u16 Advance; + kbts_s16 PreviousSideBearing; +} kbts_long_mtx; + +struct kbts_head +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u32 Revision; + kbts_u32 ChecksumAdjustment; + kbts_u32 MagicNumber; + kbts_u16 Flags; + kbts_u16 UnitsPerEm; + kbts_s64 CreatedTime; + kbts_s64 LastModifiedTime; + kbts_s16 XMin; + kbts_s16 YMin; + kbts_s16 XMax; + kbts_s16 YMax; + kbts_u16 MacStyle; // OS/2 style takes priority on Windows. + kbts_u16 LowestRecommendedPpem; + kbts_s16 DirectionHint; // Deprecated. Should ~always be 2. + kbts_s16 IndexToLocFormat; + kbts_s16 GlyphDataFormat; // Only 0 is defined. +}; + +typedef struct kbts_hea +{ + kbts_u16 Major; + kbts_u16 Minor; + + // According to Microsoft, these metrics are deprecated. + // The OS/2 table is the preferred way to get these, now. + kbts_s16 Ascent; + kbts_s16 Descent; + kbts_s16 LineGap; + + kbts_u16 MaxAdvance; + kbts_s16 MinPreviousSideBearing; + kbts_s16 MinNextSideBearing; + kbts_s16 MaxExtent; + + kbts_s16 CaretSlopeRise; + kbts_s16 CaretSlopeRun; + kbts_s16 CaretOffset; + + kbts_u16 Reserved[4]; + + kbts_s16 MetricDataFormat; + kbts_u16 MetricCount; +} kbts_hea; + +typedef struct kbts_maxp +{ + kbts_u16 Major; + kbts_u16 Minor; + kbts_u16 GlyphCount; + + // If Major == 1: + kbts_u16 MaxPointCount; + kbts_u16 MaxContourCount; + kbts_u16 MaxCompositePointCount; + kbts_u16 MaxCompositeContourCount; + kbts_u16 MaxZoneCount; + kbts_u16 MaxTwilightPointCount; + kbts_u16 StorageAreaCount; + kbts_u16 FunctionDefinitionCount; + kbts_u16 InstructionDefinitionCount; + kbts_u16 MaximumStackDepth; + kbts_u16 MaximumInstructionSize; + kbts_u16 MaximumTopLevelComponentCount; + kbts_u16 MaximumComponentDepth; +} kbts_maxp; + +# pragma pack(pop) + +// +// Unpack functions for TTF structs. +// + +typedef struct kbts_script_pointer +{ + kbts_u32 Tag; + kbts_ot_script *Script; +} kbts_script_pointer; + +typedef struct kbts_langsys_pointer +{ + kbts_u32 Tag; + kbts_langsys *Langsys; +} kbts_langsys_pointer; + +typedef struct kbts_feature_pointer +{ + kbts_u32 Tag; + kbts_feature *Feature; +} kbts_feature_pointer; + +typedef struct kbts_feature_variation_pointer +{ + kbts_condition_set *ConditionSet; + kbts_feature_table_substitution *FeatureTableSubstitution; +} kbts_feature_variation_pointer; + +typedef struct kbts_feature_substitution_pointer +{ + kbts_u16 SubstitutedFeatureIndex; + kbts_feature *AlternateFeature; +} kbts_feature_substitution_pointer; + +typedef struct kbts_cmap_subtable_pointer +{ + kbts_u16 PlatformId; + kbts_u16 EncodingId; + kbts_u16 *Subtable; +} kbts_cmap_subtable_pointer; + +typedef struct kbts_unpacked_chained_sequence_rule +{ + kbts_u16 *Input; + kbts_u16 *Backtrack; + kbts_u16 *Lookahead; + kbts_sequence_lookup_record *Records; + + kbts_u16 BacktrackCount; + kbts_u16 InputCount; + kbts_u16 LookaheadCount; + kbts_u16 RecordCount; +} kbts_unpacked_chained_sequence_rule; + +typedef struct kbts_unpacked_chained_sequence_context_3 +{ + kbts_u16 *BacktrackCoverageOffsets; + kbts_u16 *InputCoverageOffsets; + kbts_u16 *LookaheadCoverageOffsets; + kbts_sequence_lookup_record *Records; + + kbts_u16 BacktrackCount; + kbts_u16 InputCount; + kbts_u16 LookaheadCount; + kbts_u16 RecordCount; +} kbts_unpacked_chained_sequence_context_3; + +typedef struct kbts_unpacked_reverse_chain_substitution +{ + kbts_u16 *BacktrackCoverageOffsets; + kbts_u16 *LookaheadCoverageOffsets; + kbts_u16 *SubstituteGlyphIds; + + kbts_u16 BacktrackCount; + kbts_u16 LookaheadCount; + kbts_u16 GlyphCount; +} kbts_unpacked_reverse_chain_substitution; + +typedef struct kbts_unpacked_value_record +{ + kbts_u16 Size; + + kbts_s16 PlacementX; + kbts_s16 PlacementY; + kbts_s16 AdvanceX; + kbts_s16 AdvanceY; + kbts_device *PlacementXDevice; + kbts_device *PlacementYDevice; + kbts_device *AdvanceXDevice; + kbts_device *AdvanceYDevice; +} kbts_unpacked_value_record; + +static kbts_unpacked_value_record kbts_UnpackValueRecord(void *Parent, kbts_u16 Format, kbts_u16 *Record) +{ + kbts_unpacked_value_record Result = KBTS_ZERO; + + kbts_u16 *At = Record; + + if(Format & KBTS_VALUE_FORMAT_X_PLACEMENT) + { + Result.PlacementX = (kbts_s16)*At++; + } + if(Format & KBTS_VALUE_FORMAT_Y_PLACEMENT) + { + Result.PlacementY = (kbts_s16)*At++; + } + if(Format & KBTS_VALUE_FORMAT_X_ADVANCE) + { + Result.AdvanceX = (kbts_s16)*At++; + } + if(Format & KBTS_VALUE_FORMAT_Y_ADVANCE) + { + Result.AdvanceY = (kbts_s16)*At++; + } + if(Format & KBTS_VALUE_FORMAT_X_PLACEMENT_DEVICE) + { + kbts_u16 Offset = *At++; + + if(Offset) + { + Result.PlacementXDevice = KBTS_POINTER_OFFSET(kbts_device, Parent, Offset); + } + } + if(Format & KBTS_VALUE_FORMAT_Y_PLACEMENT_DEVICE) + { + kbts_u16 Offset = *At++; + + if(Offset) + { + Result.PlacementYDevice = KBTS_POINTER_OFFSET(kbts_device, Parent, Offset); + } + } + if(Format & KBTS_VALUE_FORMAT_X_ADVANCE_DEVICE) + { + kbts_u16 Offset = *At++; + + if(Offset) + { + Result.AdvanceXDevice = KBTS_POINTER_OFFSET(kbts_device, Parent, Offset); + } + } + if(Format & KBTS_VALUE_FORMAT_Y_ADVANCE_DEVICE) + { + kbts_u16 Offset = *At++; + + if(Offset) + { + Result.AdvanceYDevice = KBTS_POINTER_OFFSET(kbts_device, Parent, Offset); + } + } + + Result.Size = (kbts_u16)(At - Record); + + return Result; +} + +static kbts_unpacked_reverse_chain_substitution kbts_UnpackReverseChainSubstitution(kbts_reverse_chain_substitution *Subst, int ByteSwap) +{ + kbts_unpacked_reverse_chain_substitution Result; + + Result.BacktrackCoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + Result.BacktrackCount = Subst->BacktrackGlyphCount; + if(ByteSwap) + { + Result.BacktrackCount = kbts_ByteSwap16(Result.BacktrackCount); + } + + Result.LookaheadCoverageOffsets = Result.BacktrackCoverageOffsets + Result.BacktrackCount + 1; + Result.LookaheadCount = Result.BacktrackCoverageOffsets[Result.BacktrackCount]; + if(ByteSwap) + { + Result.LookaheadCount = kbts_ByteSwap16(Result.LookaheadCount); + } + + Result.SubstituteGlyphIds = Result.LookaheadCoverageOffsets + Result.LookaheadCount + 1; + Result.GlyphCount = Result.LookaheadCoverageOffsets[Result.LookaheadCount]; + if(ByteSwap) + { + Result.GlyphCount = kbts_ByteSwap16(Result.GlyphCount); + } + + return Result; +} + +static kbts_unpacked_chained_sequence_rule kbts_UnpackChainedSequenceRule(kbts_chained_sequence_rule *Rule, int ByteSwap) +{ + kbts_unpacked_chained_sequence_rule Result; + + Result.Backtrack = KBTS_POINTER_AFTER(kbts_u16, Rule); + Result.BacktrackCount = Rule->BacktrackGlyphCount; + if(ByteSwap) + { + Result.BacktrackCount = kbts_ByteSwap16(Result.BacktrackCount); + } + + Result.Input = Result.Backtrack + Result.BacktrackCount + 1; + Result.InputCount = Result.Backtrack[Result.BacktrackCount]; + if(ByteSwap) + { + Result.InputCount = kbts_ByteSwap16(Result.InputCount); + } + + Result.Lookahead = Result.Input + Result.InputCount; + Result.LookaheadCount = Result.Input[Result.InputCount - 1]; + if(ByteSwap) + { + Result.LookaheadCount = kbts_ByteSwap16(Result.LookaheadCount); + } + + Result.Records = (kbts_sequence_lookup_record *)(Result.Lookahead + Result.LookaheadCount + 1); + Result.RecordCount = Result.Lookahead[Result.LookaheadCount]; + if(ByteSwap) + { + Result.RecordCount = kbts_ByteSwap16(Result.RecordCount); + } + + return Result; +} + +static kbts_unpacked_chained_sequence_context_3 kbts_UnpackChainedSequenceContext3(kbts_chained_sequence_context_3 *Subst, int ByteSwap) +{ + kbts_unpacked_chained_sequence_context_3 Result; + + Result.BacktrackCoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + Result.BacktrackCount = Subst->BacktrackGlyphCount; + if(ByteSwap) + { + Result.BacktrackCount = kbts_ByteSwap16(Result.BacktrackCount); + } + + Result.InputCoverageOffsets = Result.BacktrackCoverageOffsets + Result.BacktrackCount + 1; + Result.InputCount = Result.BacktrackCoverageOffsets[Result.BacktrackCount]; + if(ByteSwap) + { + Result.InputCount = kbts_ByteSwap16(Result.InputCount); + } + + Result.LookaheadCoverageOffsets = Result.InputCoverageOffsets + Result.InputCount + 1; + Result.LookaheadCount = Result.InputCoverageOffsets[Result.InputCount]; + if(ByteSwap) + { + Result.LookaheadCount = kbts_ByteSwap16(Result.LookaheadCount); + } + + Result.Records = (kbts_sequence_lookup_record *)(Result.LookaheadCoverageOffsets + Result.LookaheadCount + 1); + Result.RecordCount = Result.LookaheadCoverageOffsets[Result.LookaheadCount]; + if(ByteSwap) + { + Result.RecordCount = kbts_ByteSwap16(Result.RecordCount); + } + + return Result; +} + +typedef struct kbts_unpacked_lookup +{ + kbts_u16 *SubtableOffsets; + kbts_coverage *MarkFilteringSet; + kbts_u16 Type; + kbts_u16 Flags; + kbts_u16 SubtableCount; +} kbts_unpacked_lookup; + +static kbts_unpacked_lookup kbts_UnpackLookup(kbts_gdef *Gdef, kbts_lookup *Lookup) +{ + kbts_unpacked_lookup Result = KBTS_ZERO; + + Result.Type = Lookup->Type; + Result.Flags = Lookup->Flag; + Result.SubtableCount = Lookup->SubtableCount; + Result.SubtableOffsets = KBTS_POINTER_AFTER(kbts_u16, Lookup); + if(Result.Flags & KBTS_LOOKUP_FLAG_USE_MARK_FILTERING_SET) + { + kbts_u16 MarkFilteringSetIndex = Result.SubtableOffsets[Result.SubtableCount]; + if(Gdef && Gdef->MarkGlyphSetsDefinitionOffset) + { + kbts_mark_glyph_sets *MarkGlyphSets = KBTS_POINTER_OFFSET(kbts_mark_glyph_sets, Gdef, Gdef->MarkGlyphSetsDefinitionOffset); + if(MarkGlyphSets->MarkGlyphSetCount > MarkFilteringSetIndex) + { + kbts_u32 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u32, MarkGlyphSets); + Result.MarkFilteringSet = KBTS_POINTER_OFFSET(kbts_coverage, MarkGlyphSets, CoverageOffsets[MarkFilteringSetIndex]); + } + } + } + + return Result; +} + +static kbts_script_pointer kbts_GetScript(kbts_script_list *List, kbts_un Index) +{ + kbts_script_record *Records = (kbts_script_record *)(List + 1); + kbts_script_record *Record = &Records[Index]; + + kbts_script_pointer Result; + Result.Tag = Record->Tag; + Result.Script = (kbts_ot_script *)((char *)List + Record->Offset); + + return Result; +} + +static kbts_langsys *kbts_GetDefaultLangsys(kbts_ot_script *Script) +{ + kbts_langsys *Result = Script->DefaultLangsysOffset ? KBTS_POINTER_OFFSET(kbts_langsys, Script, Script->DefaultLangsysOffset) : 0; + return Result; +} + +static kbts_langsys_pointer kbts_GetLangsys(kbts_ot_script *Script, kbts_un Index) +{ + kbts_langsys_record *Records = (kbts_langsys_record *)(Script + 1); + kbts_langsys_record *Record = &Records[Index]; + + kbts_langsys_pointer Result; + Result.Tag = Record->Tag; + Result.Langsys = KBTS_POINTER_OFFSET(kbts_langsys, Script, Record->Offset); + return Result; +} + +static kbts_feature_pointer kbts_GetFeature(kbts_feature_list *List, kbts_un Index) +{ + kbts_feature_record *Records = (kbts_feature_record *)(List + 1); + kbts_feature_record *Record = &Records[Index]; + + kbts_feature_pointer Result; + Result.Tag = Record->Tag; + Result.Feature = KBTS_POINTER_OFFSET(kbts_feature, List, Record->Offset); + return Result; +} + +static kbts_lookup_list *kbts_GetLookupList(kbts_gsub_gpos *GsubGpos) +{ + kbts_lookup_list *Result = 0; + + if(GsubGpos) + { + Result = KBTS_POINTER_OFFSET(kbts_lookup_list, GsubGpos, GsubGpos->LookupListOffset); + } + + return Result; +} + +static kbts_lookup *kbts_GetLookup(kbts_lookup_list *List, kbts_un Index) +{ + KBTS_ASSERT(Index < List->Count); + kbts_u16 *Offsets = (kbts_u16 *)(List + 1); + kbts_lookup *Result = KBTS_POINTER_OFFSET(kbts_lookup, List, Offsets[Index]); + return Result; +} + +static kbts_sequence_rule_set *kbts_GetSequenceRuleSet(kbts_sequence_context_1 *Context, kbts_un Index) +{ + KBTS_ASSERT(Index < Context->SeqRuleSetCount); + kbts_u16 *Offsets = (kbts_u16 *)(Context + 1); + kbts_u16 Offset = Offsets[Index]; + + kbts_sequence_rule_set *Result = Offset ? KBTS_POINTER_OFFSET(kbts_sequence_rule_set, Context, Offsets[Index]) : 0; + return Result; +} + +static kbts_sequence_rule *kbts_GetSequenceRule(kbts_sequence_rule_set *Set, kbts_un Index) +{ + KBTS_ASSERT(Index < Set->Count); + kbts_u16 *Offsets = (kbts_u16 *)(Set + 1); + kbts_sequence_rule *Result = KBTS_POINTER_OFFSET(kbts_sequence_rule, Set, Offsets[Index]); + return Result; +} + +// A single class definition table can be used by multiple lookups, so it is possible +// (and valid) to get an out-of-bounds glyph class. +static kbts_class_sequence_rule_set *kbts_GetClassSequenceRuleSet(kbts_sequence_context_2 *Context, kbts_un Index) +{ + kbts_class_sequence_rule_set *Result = 0; + if(Index < Context->ClassSequenceRuleSetCount) + { + kbts_u16 *Offsets = (kbts_u16 *)(Context + 1); + Result = Offsets[Index] ? KBTS_POINTER_OFFSET(kbts_class_sequence_rule_set, Context, Offsets[Index]) : 0; + } + return Result; +} + +static kbts_class_sequence_rule *kbts_GetClassSequenceRule(kbts_class_sequence_rule_set *Set, kbts_un Index) +{ + KBTS_ASSERT(Index < Set->Count); + kbts_u16 *Offsets = (kbts_u16 *)(Set + 1); + kbts_class_sequence_rule *Result = KBTS_POINTER_OFFSET(kbts_class_sequence_rule, Set, Offsets[Index]); + return Result; +} + +static kbts_coverage *kbts_GetCoverage(kbts_sequence_context_3 *Context, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Context + 1); + kbts_coverage *Result = KBTS_POINTER_OFFSET(kbts_coverage, Context, Offsets[Index]); + return Result; +} + +static kbts_chained_sequence_rule_set *kbts_GetChainedSequenceRuleSet(kbts_chained_sequence_context_1 *Context, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Context + 1); + kbts_chained_sequence_rule_set *Result = Offsets[Index] ? KBTS_POINTER_OFFSET(kbts_chained_sequence_rule_set, Context, Offsets[Index]) : 0; + return Result; +} + +static kbts_chained_sequence_rule *kbts_GetChainedSequenceRule(kbts_chained_sequence_rule_set *Set, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Set + 1); + kbts_chained_sequence_rule *Result = KBTS_POINTER_OFFSET(kbts_chained_sequence_rule, Set, Offsets[Index]); + return Result; +} + +static kbts_chained_sequence_rule_set *kbts_GetChainedClassSequenceRuleSet(kbts_chained_sequence_context_2 *Context, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Context + 1); + kbts_u16 Offset = Offsets[Index]; + kbts_chained_sequence_rule_set *Result = Offset ? KBTS_POINTER_OFFSET(kbts_chained_sequence_rule_set, Context, Offset) : NULL; + return Result; +} + +static kbts_chained_sequence_rule *kbts_GetChainedClassSequenceRule(kbts_chained_sequence_rule_set *Set, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Set + 1); + kbts_chained_sequence_rule *Result = KBTS_POINTER_OFFSET(kbts_chained_sequence_rule, Set, Offsets[Index]); + return Result; +} + +static kbts_feature_variation_pointer kbts_GetFeatureVariation(kbts_feature_variations *Variations, kbts_un Index) +{ + kbts_feature_variation_record *Records = (kbts_feature_variation_record *)(Variations + 1); + kbts_feature_variation_record *Record = &Records[Index]; + + kbts_feature_variation_pointer Result; + Result.ConditionSet = KBTS_POINTER_OFFSET(kbts_condition_set, Variations, Record->ConditionSetOffset); + Result.FeatureTableSubstitution = KBTS_POINTER_OFFSET(kbts_feature_table_substitution, Variations, Record->FeatureTableSubstitutionOffset); + return Result; +} + +static kbts_condition_1 *kbts_GetCondition(kbts_condition_set *Set, kbts_un Index) +{ + kbts_u32 *Offsets = (kbts_u32 *)(Set + 1); + kbts_condition_1 *Result = KBTS_POINTER_OFFSET(kbts_condition_1, Set, Offsets[Index]); + return Result; +} + +static kbts_feature_substitution_pointer kbts_GetFeatureSubstitution(kbts_feature_table_substitution *Table, kbts_un Index) +{ + kbts_feature_table_substitution_record *Records = (kbts_feature_table_substitution_record *)(Table + 1); + kbts_feature_table_substitution_record *Record = &Records[Index]; + + kbts_feature_substitution_pointer Result; + Result.SubstitutedFeatureIndex = Record->FeatureIndex; + Result.AlternateFeature = KBTS_POINTER_OFFSET(kbts_feature, Table, Record->AlternateFeatureOffset); + return Result; +} + +static kbts_cmap_subtable_pointer kbts_GetCmapSubtable(kbts_cmap *Cmap, kbts_un Index) +{ + kbts_encoding_record *Records = (kbts_encoding_record *)(Cmap + 1); + kbts_encoding_record *Record = &Records[Index]; + + kbts_cmap_subtable_pointer Result; + Result.PlatformId = Record->PlatformId; + Result.EncodingId = Record->EncodingId; + Result.Subtable = KBTS_POINTER_OFFSET(kbts_u16, Cmap, Record->SubtableOffset); + + return Result; +} + +static kbts_sequence *kbts_GetSequence(kbts_multiple_substitution *Subst, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Subst + 1); + kbts_sequence *Result = KBTS_POINTER_OFFSET(kbts_sequence, Subst, Offsets[Index]); + return Result; +} + +static kbts_alternate_set *kbts_GetAlternateSet(kbts_alternate_substitution *Subst, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Subst + 1); + kbts_alternate_set *Result = KBTS_POINTER_OFFSET(kbts_alternate_set, Subst, Offsets[Index]); + return Result; +} + +static kbts_ligature_set *kbts_GetLigatureSet(kbts_ligature_substitution *Subst, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Subst + 1); + kbts_ligature_set *Result = KBTS_POINTER_OFFSET(kbts_ligature_set, Subst, Offsets[Index]); + return Result; +} + +static kbts_ligature *kbts_GetLigature(kbts_ligature_set *Set, kbts_un Index) +{ + kbts_u16 *Offsets = (kbts_u16 *)(Set + 1); + kbts_ligature *Result = KBTS_POINTER_OFFSET(kbts_ligature, Set, Offsets[Index]); + return Result; +} + +static kbts_mark_record *kbts_GetMarkRecord(kbts_mark_array *Array, kbts_un Index) +{ + kbts_mark_record *Records = KBTS_POINTER_AFTER(kbts_mark_record, Array); + kbts_mark_record *Result = &Records[Index]; + return Result; +} + +static kbts_ligature_attach *kbts_GetLigatureAttach(kbts_ligature_array *Array, kbts_un Index) +{ + kbts_u16 *Offsets = KBTS_POINTER_AFTER(kbts_u16, Array); + kbts_ligature_attach *Result = KBTS_POINTER_OFFSET(kbts_ligature_attach, Array, Offsets[Index]); + return Result; +} + +static kbts_anchor *kbts_GetLigatureAttachAnchor(kbts_mark_to_ligature_attachment *Adjust, kbts_ligature_attach *Attach, kbts_u16 MarkClass, kbts_un ComponentIndex) +{ + kbts_u16 *Offsets = KBTS_POINTER_AFTER(kbts_u16, Attach); + kbts_u16 Offset = Offsets[ComponentIndex * Adjust->MarkClassCount + MarkClass]; + + kbts_anchor *Result = 0; + if(Offset) + { + Result = KBTS_POINTER_OFFSET(kbts_anchor, Attach, Offset); + } + + return Result; +} + +typedef struct kbts_mark_info +{ + kbts_mark_array *Array; + kbts_mark_record *Record; + kbts_anchor *Anchor; +} kbts_mark_info; + +static kbts_mark_info kbts_GetMarkInfo(void *Subtable, kbts_un SubtableOffsetToMarkArray, kbts_un CoverageIndex) +{ + kbts_mark_info Result = KBTS_ZERO; + + Result.Array = KBTS_POINTER_OFFSET(kbts_mark_array, Subtable, SubtableOffsetToMarkArray); + Result.Record = kbts_GetMarkRecord(Result.Array, CoverageIndex); + Result.Anchor = KBTS_POINTER_OFFSET(kbts_anchor, Result.Array, Result.Record->AnchorOffset); + + return Result; +} + +// +// +// + +typedef struct kbts_byteswap_context +{ + char *FileBase; + kbts_u32 *Pointers; + kbts_un PointerCapacity; + kbts_un PointerCount; +} kbts_byteswap_context; + +typedef struct kbts_cover_glyph_result +{ + kbts_u32 Valid; + kbts_u32 Index; +} kbts_cover_glyph_result; + +static int kbts_LookupBeginsWithCoverage(kbts_shaping_table ShapingTable, kbts_u16 LookupType, kbts_u16 Format) +{ + int Result = 0; + if(ShapingTable == KBTS_SHAPING_TABLE_GSUB) + { + Result = (LookupType != 7) && (Format != 3); + } + else + { + Result = (LookupType != 9) && (Format != 3); + } + return Result; +} + +// Except for lookup tables 5.3, 6.3 and 7, all tables begin with (kbts_u16 Format, kbts_u16 CoverageOffset). +KBTS_INLINE int kbts_GsubLookupBeginsWithCoverage(kbts_u16 LookupType, kbts_u16 Format) +{ + int Result = kbts_LookupBeginsWithCoverage(KBTS_SHAPING_TABLE_GSUB, LookupType, Format); + return Result; +} + +KBTS_INLINE int kbts_GposLookupBeginsWithCoverage(kbts_u16 LookupType, kbts_u16 Format) +{ + int Result = kbts_LookupBeginsWithCoverage(KBTS_SHAPING_TABLE_GPOS, LookupType, Format); + return Result; +} + +typedef struct kbts_lookup_info_frame +{ + kbts_u16 *Base; + kbts_u16 LookupType; + kbts_u32 LookaheadOffset; + kbts_u32 StackSize; +} kbts_lookup_info_frame; + +static int kbts_PushLookup(kbts_gdef *Gdef, kbts_lookup_info_frame *Frames, kbts_un *FrameCount, kbts_un FrameCapacity, kbts_lookup *PackedLookup, kbts_u32 LookaheadOffset, kbts_un StackSize) +{ + int Result = 0; + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Gdef, PackedLookup); + + if((*FrameCount + Lookup.SubtableCount) <= FrameCapacity) + { + KBTS_FOR(SubtableIndex, 0, Lookup.SubtableCount) + { + kbts_lookup_info_frame *Frame = &Frames[(*FrameCount)++]; + Frame->Base = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[SubtableIndex]); + Frame->LookupType = Lookup.Type; + Frame->LookaheadOffset = LookaheadOffset; + Frame->StackSize = (kbts_u32)StackSize; + } + + Result = 1; + } + + return Result; +} + +static int kbts_AlreadyVisited(kbts_byteswap_context *Context, void *Pointer) +{ + int Result = !Pointer; + + if(!Result) + { + kbts_u32 *Pointers = Context->Pointers; + kbts_u32 Pointer32 = KBTS_POINTER_DIFF32(Pointer, Context->FileBase); + + kbts_un Index = 0; + if(Context->PointerCount) + { + kbts_un PointerCount = Context->PointerCount; + while(PointerCount > 1) + { + kbts_un HalfCount = PointerCount / 2; + Index = (Pointers[Index + HalfCount - 1] < Pointer32) ? (Index + HalfCount) : Index; + PointerCount -= HalfCount; + } + Result = (Pointer32 == Pointers[Index]); + } + + if(!Result && (Context->PointerCount < Context->PointerCapacity)) + { + while((Index < Context->PointerCount) && (Pointers[Index] < Pointer32)) ++Index; + + for(kbts_un GrowIndex = Context->PointerCount; GrowIndex > Index; --GrowIndex) + { + Pointers[GrowIndex] = Pointers[GrowIndex - 1]; + } + Pointers[Index] = Pointer32; + Context->PointerCount += 1; + } + } + + return Result; +} + +static void kbts_ByteSwapFeature(kbts_byteswap_context *Context, kbts_feature *Feature) +{ + if(!kbts_AlreadyVisited(Context, Feature)) + { + kbts_u16 *LookupIndices = KBTS_POINTER_AFTER(kbts_u16, Feature); + kbts_ByteSwapArray16(&Feature->FeatureParamsOffset, 2); + kbts_ByteSwapArray16(LookupIndices, Feature->LookupIndexCount); + + // We require lookup indices to be sorted per feature for the lookup application order to match Harfbuzz. + // Lookup indices are _typically_ sorted per feature, but we can't assume it is always the case. + kbts_un LookupIndexCount = Feature->LookupIndexCount; + KBTS_FOR(Iter, 0, LookupIndexCount) + { + KBTS_FOR(IndexIndex, 1, LookupIndexCount) + { + kbts_u16 Left = LookupIndices[IndexIndex - 1]; + kbts_u16 Right = LookupIndices[IndexIndex]; + + if(Left > Right) + { + LookupIndices[IndexIndex - 1] = Right; + LookupIndices[IndexIndex] = Left; + } + } + } + } + +# ifdef KBTS_DUMP + kbts_u16 *LookupIndices = KBTS_POINTER_AFTER(kbts_u16, Feature); + KBTS_FOR(LookupIndexIndex, 0, Feature->LookupIndexCount) + { + KBTS_DUMPF(" Lookup index %u\n", LookupIndices[LookupIndexIndex]); + } +# endif +} + +static void kbts_ByteSwapGsubGposCommon(kbts_byteswap_context *Context, kbts_gsub_gpos *Header) +{ + kbts_ByteSwapArray16(&Header->Major, 5); + + if(Header->Minor == 1) + { + Header->FeatureVariationsOffset = kbts_ByteSwap32(Header->FeatureVariationsOffset); + } + + kbts_script_list *ScriptList = KBTS_POINTER_OFFSET(kbts_script_list, Header, Header->ScriptListOffset); + if(!kbts_AlreadyVisited(Context, ScriptList)) + { + ScriptList->Count = kbts_ByteSwap16(ScriptList->Count); + + kbts_script_record *ScriptRecords = KBTS_POINTER_AFTER(kbts_script_record, ScriptList); + KBTS_FOR(It, 0, ScriptList->Count) + { + kbts_script_record *Record = &ScriptRecords[It]; + + Record->Offset = kbts_ByteSwap16(Record->Offset); + + KBTS_DUMPF("Script %.4s\n", (char *)&Record->Tag); + + kbts_ot_script *Script = KBTS_POINTER_OFFSET(kbts_ot_script, ScriptList, Record->Offset); + if(!kbts_AlreadyVisited(Context, Script)) + { + Script->DefaultLangsysOffset = kbts_ByteSwap16(Script->DefaultLangsysOffset); + Script->Count = kbts_ByteSwap16(Script->Count); + + kbts_langsys *DefaultLangsys = kbts_GetDefaultLangsys(Script); + + if(DefaultLangsys && !kbts_AlreadyVisited(Context, DefaultLangsys)) + { + kbts_ByteSwapArray16(&DefaultLangsys->LookupOrderOffset, 3); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, DefaultLangsys), DefaultLangsys->FeatureIndexCount); + } + + kbts_langsys_record *LangsysRecords = KBTS_POINTER_AFTER(kbts_langsys_record, Script); + KBTS_FOR(LangsysIndex, 0, Script->Count) + { + kbts_langsys_record *LangsysRecord = &LangsysRecords[LangsysIndex]; + + LangsysRecord->Offset = kbts_ByteSwap16(LangsysRecord->Offset); + + kbts_langsys *Langsys = KBTS_POINTER_OFFSET(kbts_langsys, Script, LangsysRecord->Offset); + if(!kbts_AlreadyVisited(Context, Langsys)) + { + kbts_ByteSwapArray16(&Langsys->LookupOrderOffset, 3); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Langsys), Langsys->FeatureIndexCount); + } + } + +# ifdef KBTS_DUMP + if(DefaultLangsys) + { + KBTS_DUMPF(" Default langsys @ %zu\n", (char *)DefaultLangsys - Context->FileBase); + KBTS_DUMPF(" Lookup order offset %u\n", DefaultLangsys->LookupOrderOffset); + KBTS_DUMPF(" Required feature %u\n", DefaultLangsys->RequiredFeatureIndex); + kbts_u16 *FeatureIndices = KBTS_POINTER_AFTER(kbts_u16, DefaultLangsys); + KBTS_FOR(FeatureIndexIndex, 0, DefaultLangsys->FeatureIndexCount) + { + KBTS_DUMPF(" Feature %u\n", FeatureIndices[FeatureIndexIndex]); + } + } + + KBTS_FOR(LangsysIndex, 0, Script->Count) + { + kbts_langsys_record *LangsysRecord = &LangsysRecords[LangsysIndex]; + kbts_langsys *Langsys = KBTS_POINTER_OFFSET(kbts_langsys, Script, LangsysRecord->Offset); + KBTS_DUMPF(" Langsys %.4s @ %zu\n", (char *)&LangsysRecord->Tag, (char *)Script + LangsysRecord->Offset - Context->FileBase); + KBTS_DUMPF(" Lookup order offset %u\n" + " Required feature %u\n", + Langsys->LookupOrderOffset, Langsys->RequiredFeatureIndex); + kbts_u16 *FeatureIndices = KBTS_POINTER_AFTER(kbts_u16, Langsys); + KBTS_FOR(FeatureIndexIndex, 0, Langsys->FeatureIndexCount) + { + KBTS_DUMPF(" Feature %u\n", FeatureIndices[FeatureIndexIndex]); + } + } +# endif + } + } + + if((Header->Minor == 1) && Header->FeatureVariationsOffset) + { + kbts_feature_variations *FeatureVariations = KBTS_POINTER_OFFSET(kbts_feature_variations, Header, Header->FeatureVariationsOffset); + + if(!kbts_AlreadyVisited(Context, FeatureVariations)) + { + kbts_ByteSwapArray16(&FeatureVariations->Major, 2); + FeatureVariations->RecordCount = kbts_ByteSwap32(FeatureVariations->RecordCount); + + kbts_feature_variation_record *Records = KBTS_POINTER_AFTER(kbts_feature_variation_record, FeatureVariations); + KBTS_FOR(VariationIndex, 0, FeatureVariations->RecordCount) + { + kbts_feature_variation_record *Record = &Records[VariationIndex]; + + kbts_ByteSwapArray32(&Record->ConditionSetOffset, 2); + + kbts_condition_set *Set = KBTS_POINTER_OFFSET(kbts_condition_set, FeatureVariations, Record->ConditionSetOffset); + + if(!kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + + kbts_u32 *ConditionOffsets = KBTS_POINTER_AFTER(kbts_u32, Set); + kbts_ByteSwapArray32(ConditionOffsets, Set->Count); + + KBTS_FOR(ConditionIndex, 0, Set->Count) + { + kbts_condition_1 *Condition = KBTS_POINTER_OFFSET(kbts_condition_1, Set, ConditionOffsets[ConditionIndex]); + + if(!kbts_AlreadyVisited(Context, Condition)) + { + kbts_ByteSwapArray16(&Condition->Format, 4); + } + } + + kbts_feature_table_substitution *FeatureSubst = KBTS_POINTER_OFFSET(kbts_feature_table_substitution, FeatureVariations, Record->FeatureTableSubstitutionOffset); + + if(!kbts_AlreadyVisited(Context, FeatureSubst)) + { + kbts_ByteSwapArray16(&FeatureSubst->Major, 3); + + kbts_feature_table_substitution_record *SubstRecords = KBTS_POINTER_AFTER(kbts_feature_table_substitution_record, FeatureSubst); + KBTS_FOR(SubstRecordIndex, 0, FeatureSubst->Count) + { + kbts_feature_table_substitution_record *SubstRecord = &SubstRecords[SubstRecordIndex]; + SubstRecord->FeatureIndex = kbts_ByteSwap16(SubstRecord->FeatureIndex); + + kbts_feature *Feature = KBTS_POINTER_OFFSET(kbts_feature, FeatureSubst, SubstRecord->AlternateFeatureOffset); + kbts_ByteSwapFeature(Context, Feature); + } + } + } + } + } + } + } + + kbts_feature_list *FeatureList = KBTS_POINTER_OFFSET(kbts_feature_list, Header, Header->FeatureListOffset); + if(!kbts_AlreadyVisited(Context, FeatureList)) + { + FeatureList->Count = kbts_ByteSwap16(FeatureList->Count); + kbts_feature_record *FeatureRecords = KBTS_POINTER_AFTER(kbts_feature_record, FeatureList); + KBTS_FOR(FeatureRecordIndex, 0, FeatureList->Count) + { + kbts_feature_record *FeatureRecord = &FeatureRecords[FeatureRecordIndex]; + + KBTS_DUMPF("Feature %llu %.4s\n", FeatureRecordIndex, (char *)&FeatureRecord->Tag); + + if(!kbts_AlreadyVisited(Context, FeatureRecord)) + { + FeatureRecord->Offset = kbts_ByteSwap16(FeatureRecord->Offset); + + kbts_feature *Feature = KBTS_POINTER_OFFSET(kbts_feature, FeatureList, FeatureRecord->Offset); + kbts_ByteSwapFeature(Context, Feature); + } + } + } +} + +static int kbts_ByteSwapLookup(kbts_byteswap_context *Context, kbts_lookup *Lookup) +{ + int Result = 0; + + if(!kbts_AlreadyVisited(Context, Lookup)) + { + Result = 1; + + kbts_ByteSwapArray16(&Lookup->Type, 3); + kbts_u16 *SubtableOffsets = KBTS_POINTER_AFTER(kbts_u16, Lookup); + + kbts_un U16Count = Lookup->SubtableCount; + if(Lookup->Flag & KBTS_LOOKUP_FLAG_USE_MARK_FILTERING_SET) + { + U16Count += 1; + } + kbts_ByteSwapArray16(SubtableOffsets, U16Count); + } + + return Result; +} + +static void kbts_ByteSwapCoverage(kbts_byteswap_context *Context, kbts_coverage *Coverage) +{ + if(!kbts_AlreadyVisited(Context, Coverage)) + { + kbts_ByteSwapArray16(&Coverage->Format, 2); + + kbts_un U16Count = 0; + if(Coverage->Format == 1) + { + U16Count = Coverage->Count; + } + else if(Coverage->Format == 2) + { + U16Count = Coverage->Count * 3; + } + + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Coverage), U16Count); + } +} + +static void kbts_ByteSwapAnchor(kbts_byteswap_context *Context, kbts_anchor *Anchor) +{ + if(!kbts_AlreadyVisited(Context, Anchor)) + { + Anchor->Format = kbts_ByteSwap16(Anchor->Format); + + kbts_un U16Count = 2; + if(Anchor->Format == 2) + { + U16Count = 3; + } + else if(Anchor->Format == 3) + { + U16Count = 4; + } + + kbts_ByteSwapArray16((kbts_u16 *)&Anchor->X, U16Count); + } +} + +static void kbts_ByteSwapBaseArray(kbts_byteswap_context *Context, kbts_u16 MarkClassCount, kbts_base_array *Array) +{ + if(!kbts_AlreadyVisited(Context, Array)) + { + Array->BaseCount = kbts_ByteSwap16(Array->BaseCount); + + kbts_u16 *BaseAnchorOffsets = KBTS_POINTER_AFTER(kbts_u16, Array); + kbts_ByteSwapArray16(BaseAnchorOffsets, Array->BaseCount * MarkClassCount); + + KBTS_FOR(OffsetIndex, 0, (kbts_un)Array->BaseCount * MarkClassCount) + { + kbts_u16 Offset = BaseAnchorOffsets[OffsetIndex]; + + if(Offset) + { + kbts_ByteSwapAnchor(Context, KBTS_POINTER_OFFSET(kbts_anchor, Array, Offset)); + } + } + } +} + +static void kbts_ByteSwapDevice(kbts_byteswap_context *Context, kbts_device *Device) +{ + if(!kbts_AlreadyVisited(Context, Device)) + { + kbts_ByteSwapArray16(&Device->U.Device.StartSize, 3); + + if(Device->DeltaFormat <= 3) + { + // @Incomplete + } + } +} + +static kbts_unpacked_value_record kbts_ByteSwapValueRecord(kbts_byteswap_context *Context, void *Parent, kbts_u16 ValueFormat, kbts_u16 *Record) +{ + kbts_unpacked_value_record Result = KBTS_ZERO; + + if(ValueFormat) + { + kbts_un U16Count = kbts_PopCount32(ValueFormat); + + kbts_ByteSwapArray16(Record, U16Count); + + Result = kbts_UnpackValueRecord(Parent, ValueFormat, Record); + + kbts_ByteSwapDevice(Context, Result.PlacementXDevice); + kbts_ByteSwapDevice(Context, Result.PlacementYDevice); + kbts_ByteSwapDevice(Context, Result.AdvanceXDevice); + kbts_ByteSwapDevice(Context, Result.AdvanceYDevice); + } + + return Result; +} + +static void kbts_ByteSwapMarkArray(kbts_byteswap_context *Context, kbts_mark_array *MarkArray) +{ + if(!kbts_AlreadyVisited(Context, MarkArray)) + { + MarkArray->Count = kbts_ByteSwap16(MarkArray->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, MarkArray), MarkArray->Count * 2); + + kbts_mark_record *MarkRecords = KBTS_POINTER_AFTER(kbts_mark_record, MarkArray); + KBTS_FOR(MarkRecordIndex, 0, MarkArray->Count) + { + kbts_mark_record *MarkRecord = &MarkRecords[MarkRecordIndex]; + + kbts_ByteSwapAnchor(Context, KBTS_POINTER_OFFSET(kbts_anchor, MarkArray, MarkRecord->AnchorOffset)); + } + } +} + +static void kbts_ByteSwapChainedSequenceRuleSet(kbts_byteswap_context *Context, kbts_chained_sequence_rule_set *Set) +{ + if(Set && !kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Set), Set->Count); + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedSequenceRule(Set, RuleIndex); + + if(!kbts_AlreadyVisited(Context, Rule)) + { + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 1); + + kbts_un U16Count = Unpacked.BacktrackCount + Unpacked.InputCount + Unpacked.LookaheadCount + Unpacked.RecordCount * 2 + 3; + kbts_ByteSwapArray16(&Rule->BacktrackGlyphCount, U16Count); + } + } + } +} + +#ifdef KBTS_DUMP +static void kbts_DumpClassDefinition(kbts_u16 *Base) +{ + if(*Base == 1) + { + kbts_class_definition_1 *ClassDef = (kbts_class_definition_1 *)Base; + kbts_u16 *ClassValues = KBTS_POINTER_AFTER(kbts_u16, ClassDef); + KBTS_FOR(GlyphIndex, 0, ClassDef->GlyphCount) + { + KBTS_DUMPF("%llx -> %u\n", ClassDef->StartGlyphId + GlyphIndex, ClassValues[GlyphIndex]); + } + } + else if(*Base == 2) + { + kbts_class_definition_2 *ClassDef = (kbts_class_definition_2 *)Base; + kbts_class_range_record *Ranges = KBTS_POINTER_AFTER(kbts_class_range_record, ClassDef); + KBTS_FOR(RangeIndex, 0, ClassDef->Count) + { + kbts_class_range_record *Range = &Ranges[RangeIndex]; + + KBTS_DUMPF("[%x..%x] -> %u\n", Range->StartGlyphId, Range->EndGlyphId, Range->Class); + } + } +} +#endif + +static void kbts_ByteSwapClassDefinition(kbts_byteswap_context *Context, kbts_u16 *Base) +{ + if(!kbts_AlreadyVisited(Context, Base)) + { + *Base = kbts_ByteSwap16(*Base); + + if(*Base == 1) + { + kbts_class_definition_1 *ClassDef = (kbts_class_definition_1 *)Base; + kbts_ByteSwapArray16(&ClassDef->StartGlyphId, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, ClassDef), ClassDef->GlyphCount); + } + else if(*Base == 2) + { + kbts_class_definition_2 *ClassDef = (kbts_class_definition_2 *)Base; + ClassDef->Count = kbts_ByteSwap16(ClassDef->Count); + + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, ClassDef), ClassDef->Count * 3); + } + } +} + +static kbts_u16 kbts_GlyphClassFromTable(kbts_u16 *ClassDefinitionBase, kbts_un Id) +{ + kbts_u16 Result = 0; + + // From the Microsoft docs: + // There is one offset to a ChainedClassSequenceRuleSet subtable for each class defined in the input sequence + // class definition table. The offsets are listed in class value order. + // This means that we do not actually care what the class _values_ are. We only care about the classes' relative + // values. + // Also from the Microsoft docs, about class definition tables: + // A class definition table (ClassDef) assigns glyphs into classes, beginning with Class 1, then Class 2, and so + // on. All glyphs not assigned to a class fall into Class 0. + // So, we should be able to pretty reliably just subtract 1 from the class to get. + + if(*ClassDefinitionBase == 1) + { + kbts_class_definition_1 *ClassDef = (kbts_class_definition_1 *)ClassDefinitionBase; + kbts_u16 *GlyphClasses = KBTS_POINTER_AFTER(kbts_u16, ClassDef); + + kbts_un Offset = Id - ClassDef->StartGlyphId; + if(Offset < ClassDef->GlyphCount) + { + Result = GlyphClasses[Offset]; + } + } + else if(*ClassDefinitionBase == 2) + { + kbts_class_definition_2 *ClassDef = (kbts_class_definition_2 *)ClassDefinitionBase; + kbts_class_range_record *Ranges = KBTS_POINTER_AFTER(kbts_class_range_record, ClassDef); + + kbts_un RangeCount = ClassDef->Count; + while(RangeCount > 1) + { + kbts_un HalfCount = RangeCount / 2; + Ranges = (Ranges[HalfCount - 1].EndGlyphId < Id) ? (Ranges + HalfCount) : Ranges; + RangeCount -= HalfCount; + } + if((Id >= Ranges->StartGlyphId) && (Id <= Ranges->EndGlyphId)) + { + Result = Ranges->Class; + } + } + + return Result; +} + +static kbts_cover_glyph_result kbts_CoverGlyph(kbts_coverage *Coverage, kbts_u32 GlyphId) +{ + KBTS_INSTRUMENT_FUNCTION_BEGIN + kbts_cover_glyph_result Result = KBTS_ZERO; + kbts_un Count = Coverage->Count; + + if(Coverage->Format == 1) + { + kbts_u16 *GlyphIds = KBTS_POINTER_AFTER(kbts_u16, Coverage); + + while(Count > 1) + { + kbts_un HalfCount = Count / 2; + GlyphIds = (GlyphIds[HalfCount - 1] < GlyphId) ? (GlyphIds + HalfCount) : GlyphIds; + Count -= HalfCount; + } + + if(GlyphId == *GlyphIds) + { + Result.Valid = 1; + Result.Index = (kbts_u32)(GlyphIds - KBTS_POINTER_AFTER(kbts_u16, Coverage)); + } + } + else if(Coverage->Format == 2) + { + kbts_range_record *Ranges = KBTS_POINTER_AFTER(kbts_range_record, Coverage); + + while(Count > 1) + { + kbts_un HalfCount = Count / 2; + Ranges = (Ranges[HalfCount - 1].EndGlyphId < GlyphId) ? (Ranges + HalfCount) : Ranges; + Count -= HalfCount; + } + if((GlyphId >= Ranges->StartGlyphId) && (GlyphId <= Ranges->EndGlyphId)) + { + Result.Valid = 1; + Result.Index = Ranges->StartCoverageIndex + GlyphId - Ranges->StartGlyphId; + } + } + + KBTS_INSTRUMENT_END + return Result; +} + +static void kbts_ByteSwapSequenceContextSubtable(kbts_byteswap_context *Context, kbts_u16 *Base) +{ + if(Base[0] == 1) + { + kbts_sequence_context_1 *Subst = (kbts_sequence_context_1 *)Base; + Subst->SeqRuleSetCount = kbts_ByteSwap16(Subst->SeqRuleSetCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->SeqRuleSetCount); + + KBTS_FOR(SetIndex, 0, Subst->SeqRuleSetCount) + { + kbts_sequence_rule_set *Set = kbts_GetSequenceRuleSet(Subst, SetIndex); + + if(Set && !kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Set), Set->Count); + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_sequence_rule *Rule = kbts_GetSequenceRule(Set, RuleIndex); + + if(!kbts_AlreadyVisited(Context, Rule)) + { + kbts_ByteSwapArray16(&Rule->GlyphCount, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Rule), (kbts_un)Rule->GlyphCount - 1 + (kbts_un)Rule->SequenceLookupCount * 2); + } + } + } + } + } + else if(Base[0] == 2) + { + kbts_sequence_context_2 *Subst = (kbts_sequence_context_2 *)Base; + kbts_ByteSwapArray16(&Subst->ClassDefOffset, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->ClassSequenceRuleSetCount); + + kbts_u16 *ClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->ClassDefOffset); + kbts_ByteSwapClassDefinition(Context, ClassDefBase); + + KBTS_FOR(SetIndex, 0, Subst->ClassSequenceRuleSetCount) + { + kbts_class_sequence_rule_set *Set = kbts_GetClassSequenceRuleSet(Subst, SetIndex); + + if(Set && !kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Set), Set->Count); + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_class_sequence_rule *Rule = kbts_GetClassSequenceRule(Set, RuleIndex); + + if(!kbts_AlreadyVisited(Context, Rule)) + { + kbts_ByteSwapArray16(&Rule->GlyphCount, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Rule), Rule->GlyphCount - 1 + 2 * Rule->SequenceLookupCount); + } + } + } + } + + #ifdef KBTS_DUMP + kbts_DumpClassDefinition(ClassDefBase); + KBTS_FOR(SetIndex, 0, Subst->ClassSequenceRuleSetCount) + { + kbts_class_sequence_rule_set *Set = kbts_GetClassSequenceRuleSet(Subst, SetIndex); + + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_class_sequence_rule *Rule = kbts_GetClassSequenceRule(Set, RuleIndex); + kbts_u16 *InputSequence = KBTS_POINTER_AFTER(kbts_u16, Rule); + kbts_sequence_lookup_record *Records = (kbts_sequence_lookup_record *)(InputSequence + Rule->GlyphCount - 1); + KBTS_DUMPF("Input: ["); + KBTS_FOR(GlyphIndex, 1, Rule->GlyphCount) + { + KBTS_DUMPF(", %x", InputSequence[GlyphIndex - 1]); + } + KBTS_DUMPF("]\nRecords: ["); + KBTS_FOR(RecordIndex, 0, Rule->SequenceLookupCount) + { + kbts_sequence_lookup_record *Record = &Records[RecordIndex]; + if(RecordIndex) KBTS_DUMPF(", "); + KBTS_DUMPF("%u@%u", Record->LookupListIndex, Record->SequenceIndex); + } + KBTS_DUMPF("]\n"); + } + } + } + #endif + } + else if(Base[0] == 3) + { + kbts_sequence_context_3 *Subst = (kbts_sequence_context_3 *)Base; + kbts_ByteSwapArray16(&Subst->GlyphCount, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->GlyphCount + 2 * Subst->SequenceLookupCount); + + kbts_u16 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + KBTS_FOR(CoverageIndex, 0, Subst->GlyphCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, CoverageOffsets[CoverageIndex]); + + kbts_ByteSwapCoverage(Context, Coverage); + } + } +} + +typedef kbts_u32 kbts_skip_flags; +enum kbts_skip_flags_enum +{ + KBTS_SKIP_FLAG_NONE, + KBTS_SKIP_FLAG_ZWNJ = (1 << 0), + KBTS_SKIP_FLAG_ZWJ = (1 << 1), +}; +// The Harfbuzz behavior is: +// - GPOS lookups always skip ZWNJ. +// - Sequence lookups always skip ZWJ. +// - GSUB sequence lookups skip ZWNJ when requested. +// - Regular lookups skip ZWJ when requested. +#define KBTS_SKIP_FLAGS_GSUB_REGULAR(RequestedFlags) ((RequestedFlags) & KBTS_SKIP_FLAG_ZWJ) +#define KBTS_SKIP_FLAGS_GSUB_SEQUENCE(RequestedFlags) (KBTS_SKIP_FLAG_ZWJ | ((RequestedFlags) & KBTS_SKIP_FLAG_ZWNJ)) +#define KBTS_SKIP_FLAGS_GPOS_REGULAR(RequestedFlags) (((RequestedFlags) & KBTS_SKIP_FLAG_ZWJ) | KBTS_SKIP_FLAG_ZWNJ) +#define KBTS_SKIP_FLAGS_GPOS_SEQUENCE(RequestedFlags) (KBTS_SKIP_FLAG_ZWJ | KBTS_SKIP_FLAG_ZWNJ) + +static kbts_skip_flags kbts_SkipFlags(kbts_feature_id FeatureId, kbts_shaper Shaper) +{ + kbts_skip_flags Result = 0; + switch(FeatureId) + { + case KBTS_FEATURE_ID_nukt: + case KBTS_FEATURE_ID_akhn: + case KBTS_FEATURE_ID_rphf: + case KBTS_FEATURE_ID_rkrf: + case KBTS_FEATURE_ID_pref: + case KBTS_FEATURE_ID_blwf: + case KBTS_FEATURE_ID_abvf: + case KBTS_FEATURE_ID_half: + case KBTS_FEATURE_ID_pstf: + case KBTS_FEATURE_ID_vatu: + case KBTS_FEATURE_ID_cjct: + case KBTS_FEATURE_ID_pres: + case KBTS_FEATURE_ID_abvs: + case KBTS_FEATURE_ID_blws: + case KBTS_FEATURE_ID_psts: + case KBTS_FEATURE_ID_haln: + Result = (Shaper == KBTS_SHAPER_INDIC) ? 0 : KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ; + break; + + case KBTS_FEATURE_ID_init: + if (Shaper == KBTS_SHAPER_INDIC) {Result = 0;} + else if(Shaper == KBTS_SHAPER_ARABIC) {Result = KBTS_SKIP_FLAG_ZWNJ;} + else {Result = KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ;} + break; + + case KBTS_FEATURE_ID_ccmp: + case KBTS_FEATURE_ID_locl: + case KBTS_FEATURE_ID_isol: + case KBTS_FEATURE_ID_fina: + case KBTS_FEATURE_ID_fin2: + case KBTS_FEATURE_ID_fin3: + case KBTS_FEATURE_ID_medi: + case KBTS_FEATURE_ID_med2: + case KBTS_FEATURE_ID_calt: + case KBTS_FEATURE_ID_liga: + case KBTS_FEATURE_ID_clig: + case KBTS_FEATURE_ID_rlig: + case KBTS_FEATURE_ID_mset: + Result = (Shaper == KBTS_SHAPER_ARABIC) ? KBTS_SKIP_FLAG_ZWNJ : KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ; + break; + + case KBTS_FEATURE_ID_mark: + case KBTS_FEATURE_ID_mkmk: + Result = 0; + break; + + default: + Result = KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ; + break; + } + return Result; +} + +static kbts_u32 kbts_GlyphIncludedInLookup(kbts_font *Font, int Gpos, kbts_un LookupIndex, kbts_u32 Id) +{ + kbts_u32 Result = 1; + if(Font->GlyphLookupMatrix && (Id < Font->GlyphCount)) + { + kbts_un FlatLookupIndex = (Gpos ? Font->GposLookupIndexOffset : 0) + LookupIndex; + kbts_un FlatIndex = FlatLookupIndex * Font->Maxp->GlyphCount + Id; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + + Result = Font->GlyphLookupMatrix[WordIndex] & (1 << BitIndex); + } + return Result; +} + +static int kbts_GlyphPassesLookupFilter(kbts_glyph *Glyph, kbts_unpacked_lookup *Lookup) +{ + int Result = 1; + kbts_u16 Class = Glyph->Classes.Class; + + if(Class && (Lookup->Flags & (1 << Class))) + { + Result = 0; + } + + if(Result && (Class == KBTS_GLYPH_CLASS_MARK)) + { + if(Lookup->Flags & KBTS_LOOKUP_FLAG_MARK_ATTACHMENT_CLASS_FILTER) + { + kbts_u32 DesiredMarkAttachmentClass = Lookup->Flags >> 8; + + if(Glyph->Classes.MarkAttachmentClass != DesiredMarkAttachmentClass) + { + Result = 0; + } + } + + if(Result && Lookup->MarkFilteringSet) + { + // @Speed: We may want to save the result of the last mark filtering test on the glyph itself. + kbts_cover_glyph_result Cover = kbts_CoverGlyph(Lookup->MarkFilteringSet, Glyph->Id); + if(!Cover.Valid) + { + Result = 0; + } + } + } + + return Result; +} + +static int kbts_SkipGlyph(kbts_glyph *Glyph, kbts_unpacked_lookup *Lookup, kbts_skip_flags SkipFlags, kbts_u32 SkipUnicodeFlags) +{ + int Result = (Glyph->UnicodeFlags & SkipUnicodeFlags) || + ((SkipFlags & KBTS_SKIP_FLAG_ZWNJ) && (Glyph->Codepoint == 0x200C)) || + ((SkipFlags & KBTS_SKIP_FLAG_ZWJ) && (Glyph->Codepoint == 0x200D)) || + !kbts_GlyphPassesLookupFilter(Glyph, Lookup); + return Result; +} + +static int kbts_GlyphsIncludedInLookupSubtable(kbts_font *Font, int Gpos, kbts_unpacked_lookup *Lookup, kbts_un LookupIndex, kbts_un SubtableIndex, kbts_glyph_array *Array, kbts_un CurrentGlyphIndex, kbts_skip_flags SkipFlags, kbts_unicode_flags SkipUnicodeFlags) +{ + if(Font->GlyphLookupSubtableMatrix) + { + kbts_un FlatLookupIndex = (Gpos ? Font->GposLookupIndexOffset : 0) + LookupIndex; + kbts_un FlatSubtableIndex = Font->LookupSubtableIndexOffsets[FlatLookupIndex] + SubtableIndex; + kbts_un MatrixRowOffset = FlatSubtableIndex * Font->Maxp->GlyphCount; + kbts_lookup_subtable_info *Info = &Font->SubtableInfos[FlatSubtableIndex]; + kbts_un MinimumBacktrack = (Info->MinimumBacktrackPlusOne) ? Info->MinimumBacktrackPlusOne - 1 : 0; + kbts_un MinimumFollowup = (Info->MinimumFollowupPlusOne) ? Info->MinimumFollowupPlusOne - 1 : 0; + kbts_un GlyphCount = Font->GlyphCount; + + if((MinimumBacktrack <= CurrentGlyphIndex) && (MinimumFollowup <= (Array->Count - CurrentGlyphIndex))) + { + { // Check the current glyph. + kbts_un Id = Array->Glyphs[CurrentGlyphIndex].Id; + kbts_un FlatIndex = MatrixRowOffset + Id; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + if(Id >= GlyphCount) + { + return 1; + } + else if(!(Font->GlyphLookupSubtableMatrix[WordIndex] & (1 << BitIndex))) + { + return 0; + } + } + + { + kbts_un BacktrackCounter = 0; + kbts_glyph *BacktrackGlyph = &Array->Glyphs[CurrentGlyphIndex - 1]; + while((BacktrackGlyph >= Array->Glyphs) && (BacktrackCounter < MinimumBacktrack)) + { + kbts_un FlatIndex = MatrixRowOffset + BacktrackGlyph->Id; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + if(BacktrackGlyph->Id >= GlyphCount) + { + return 1; + } + else if(Font->GlyphLookupSubtableMatrix[WordIndex] & (1 << BitIndex)) + { + BacktrackCounter += 1; + } + else if(!kbts_SkipGlyph(BacktrackGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + return 0; + } + + BacktrackGlyph -= 1; + } + + if(BacktrackCounter < MinimumBacktrack) + { + return 0; + } + } + + { + kbts_un LookaheadCounter = 0; + kbts_glyph *LookaheadGlyph = &Array->Glyphs[CurrentGlyphIndex + 1]; + kbts_glyph *OnePastLastGlyph = Array->Glyphs + Array->Count; + while((LookaheadGlyph < OnePastLastGlyph) && (LookaheadCounter < MinimumFollowup)) + { + kbts_un FlatIndex = MatrixRowOffset + LookaheadGlyph->Id; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + if(LookaheadGlyph->Id >= GlyphCount) + { + return 1; + } + else if(Font->GlyphLookupSubtableMatrix[WordIndex] & (1 << BitIndex)) + { + LookaheadCounter += 1; + } + else if(!kbts_SkipGlyph(LookaheadGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + return 0; + } + + LookaheadGlyph += 1; + } + + if(LookaheadCounter < MinimumFollowup) + { + return 0; + } + } + } + else + { + return 0; + } + } + + return 1; +} + +# ifdef KBTS_DUMP +static void kbts_DumpCoverage(kbts_coverage *Coverage) +{ + KBTS_DUMPF("["); + if(Coverage->Format == 1) + { + kbts_u16 *GlyphIds = KBTS_POINTER_AFTER(kbts_u16, Coverage); + KBTS_FOR(GlyphIndex, 0, Coverage->Count) + { + KBTS_DUMPF("%x,", GlyphIds[GlyphIndex]); + } + } + else if(Coverage->Format == 2) + { + kbts_range_record *Ranges = KBTS_POINTER_AFTER(kbts_range_record, Coverage); + KBTS_FOR(RangeIndex, 0, Coverage->Count) + { + kbts_range_record *Range = &Ranges[RangeIndex]; + KBTS_DUMPF("%x..%x @ %u,", Range->StartGlyphId, Range->EndGlyphId, Range->StartCoverageIndex); + } + } + KBTS_DUMPF("]"); +} +# endif + +static void kbts_ByteSwapChainedSequenceContextSubtable(kbts_byteswap_context *Context, kbts_u16 *Base) +{ + if(Base[0] == 1) + { + kbts_chained_sequence_context_1 *Subst = (kbts_chained_sequence_context_1 *)Base; + Subst->ChainedSequenceRuleSetCount = kbts_ByteSwap16(Subst->ChainedSequenceRuleSetCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->ChainedSequenceRuleSetCount); + + KBTS_FOR(SetIndex, 0, Subst->ChainedSequenceRuleSetCount) + { + kbts_ByteSwapChainedSequenceRuleSet(Context, kbts_GetChainedSequenceRuleSet(Subst, SetIndex)); + } + } + else if(Base[0] == 2) + { + kbts_chained_sequence_context_2 *Subst = (kbts_chained_sequence_context_2 *)Base; + kbts_ByteSwapArray16(&Subst->BacktrackClassDefOffset, 4); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->ChainedClassSequenceRuleSetCount); + + kbts_u16 *BacktrackClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->BacktrackClassDefOffset); + kbts_ByteSwapClassDefinition(Context, BacktrackClassDefinition); + + kbts_u16 *InputClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->InputClassDefOffset); + kbts_ByteSwapClassDefinition(Context, InputClassDefinition); + + kbts_u16 *LookaheadClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->LookaheadClassDefOffset); + kbts_ByteSwapClassDefinition(Context, LookaheadClassDefinition); + + #ifdef KBTS_DUMP + KBTS_DUMPF("Backtrack classes:\n"); + // kbts_DumpClassDefinition(BacktrackClassDefinition); + KBTS_DUMPF("Input classes:\n"); + // kbts_DumpClassDefinition(InputClassDefinition); + KBTS_DUMPF("Lookahead classes:\n"); + // kbts_DumpClassDefinition(LookaheadClassDefinition); + #endif + + KBTS_FOR(SetIndex, 0, Subst->ChainedClassSequenceRuleSetCount) + { + kbts_chained_sequence_rule_set *Set = kbts_GetChainedClassSequenceRuleSet(Subst, SetIndex); + kbts_ByteSwapChainedSequenceRuleSet(Context, Set); + + #ifdef KBTS_DUMP + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedClassSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + KBTS_DUMPF("Backtrack: ["); + KBTS_FOR(BacktrackIndex, 0, Unpacked.BacktrackCount) + { + if(BacktrackIndex) KBTS_DUMPF(", "); + KBTS_DUMPF("%u", Unpacked.Backtrack[BacktrackIndex]); + } + KBTS_DUMPF("]\n" + "Input: ["); + KBTS_FOR(InputIndex, 1, Unpacked.InputCount) + { + if(InputIndex) KBTS_DUMPF(", "); + KBTS_DUMPF("%u", Unpacked.Input[InputIndex - 1]); + } + KBTS_DUMPF("]\n" + "Lookahead: ["); + KBTS_FOR(LookaheadIndex, 0, Unpacked.LookaheadCount) + { + if(LookaheadIndex) KBTS_DUMPF(", "); + KBTS_DUMPF("%u", Unpacked.Lookahead[LookaheadIndex]); + } + KBTS_DUMPF("]\n" + "Records: ["); + KBTS_FOR(RecordIndex, 0, Unpacked.RecordCount) + { + kbts_sequence_lookup_record *Record = &Unpacked.Records[RecordIndex]; + if(RecordIndex) KBTS_DUMPF(", "); + KBTS_DUMPF("%u@%u", Record->LookupListIndex, Record->SequenceIndex); + } + KBTS_DUMPF("]\n"); + } + } + #endif + } + } + else if(Base[0] == 3) + { + kbts_chained_sequence_context_3 *Subst = (kbts_chained_sequence_context_3 *)Base; + kbts_unpacked_chained_sequence_context_3 Unpacked = kbts_UnpackChainedSequenceContext3(Subst, 1); + + kbts_un U16Count = Unpacked.BacktrackCount + Unpacked.InputCount + Unpacked.LookaheadCount + Unpacked.RecordCount * 2 + 4; + kbts_ByteSwapArray16(&Subst->BacktrackGlyphCount, U16Count); + + KBTS_FOR(BacktrackCoverageIndex, 0, Unpacked.BacktrackCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.BacktrackCoverageOffsets[BacktrackCoverageIndex]); + + kbts_ByteSwapCoverage(Context, Coverage); + } + + KBTS_FOR(InputCoverageIndex, 0, Unpacked.InputCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.InputCoverageOffsets[InputCoverageIndex]); + + kbts_ByteSwapCoverage(Context, Coverage); + } + + KBTS_FOR(LookaheadCoverageIndex, 0, Unpacked.LookaheadCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.LookaheadCoverageOffsets[LookaheadCoverageIndex]); + + kbts_ByteSwapCoverage(Context, Coverage); + } + +# ifdef KBTS_DUMP + KBTS_DUMPF(" Backtrack: "); + KBTS_FOR(BacktrackCoverageIndex, 0, Unpacked.BacktrackCount) + { + kbts_DumpCoverage(KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.BacktrackCoverageOffsets[BacktrackCoverageIndex])); + } + KBTS_DUMPF("\n Input: "); + KBTS_FOR(InputCoverageIndex, 0, Unpacked.InputCount) + { + kbts_DumpCoverage(KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.InputCoverageOffsets[InputCoverageIndex])); + } + KBTS_DUMPF("\n Lookahead: "); + KBTS_FOR(LookaheadCoverageIndex, 0, Unpacked.LookaheadCount) + { + kbts_DumpCoverage(KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.LookaheadCoverageOffsets[LookaheadCoverageIndex])); + } + KBTS_DUMPF("\n Lookups: ["); + KBTS_FOR(RecordIndex, 0, Unpacked.RecordCount) + { + kbts_sequence_lookup_record *Record = &Unpacked.Records[RecordIndex]; + + KBTS_DUMPF("%u@%u,", Record->LookupListIndex, Record->SequenceIndex); + } + KBTS_DUMPF("]\n"); +# endif + } +} + +static void kbts_ByteSwapGsubLookupSubtable(kbts_byteswap_context *Context, kbts_u16 LookupType, kbts_u16 *Base) +{ + int Swap = !kbts_AlreadyVisited(Context, Base); + while(Swap && (LookupType == 7)) + { + kbts_extension *Subst = (kbts_extension *)Base; + Subst->Format = kbts_ByteSwap16(Subst->Format); + Subst->LookupType = kbts_ByteSwap16(Subst->LookupType); + Subst->Offset = kbts_ByteSwap32(Subst->Offset); + + KBTS_DUMPF(" Type 7.1\n" + " Offset %zu\n" + " -> %zu\n", + (char *)Base - Context->FileBase, (char *)Subst + Subst->Offset - Context->FileBase); + + Base = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->Offset); + LookupType = Subst->LookupType; + + Swap = !kbts_AlreadyVisited(Context, Base); + } + + if(Swap) + { + *Base = kbts_ByteSwap16(*Base); + + KBTS_DUMPF(" Type %u.%u\n" + " Offset %zu\n", + LookupType, *Base, (char *)Base - Context->FileBase); + + if(kbts_GsubLookupBeginsWithCoverage(LookupType, Base[0])) + { + Base[1] = kbts_ByteSwap16(Base[1]); + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Base, Base[1]); + + kbts_ByteSwapCoverage(Context, Coverage); + +# ifdef KBTS_DUMP + KBTS_DUMPF(" Coverage %u\n", Coverage->Format); + if(Coverage->Format == 1) + { + kbts_u16 *GlyphIds = KBTS_POINTER_AFTER(kbts_u16, Coverage); + KBTS_FOR(GlyphIndex, 0, Coverage->Count) + { + KBTS_DUMPF(" %x\n", GlyphIds[GlyphIndex]); + } + } + else if(Coverage->Format == 2) + { + kbts_range_record *Ranges = KBTS_POINTER_AFTER(kbts_range_record, Coverage); + KBTS_FOR(RangeIndex, 0, Coverage->Count) + { + kbts_range_record Range = Ranges[RangeIndex]; + KBTS_DUMPF(" %x..%x@%u..%u\n", Range.StartGlyphId, Range.EndGlyphId, Range.StartCoverageIndex, Range.StartCoverageIndex + (Range.EndGlyphId - Range.StartGlyphId)); + } + } +# endif + } + + switch(LookupType) + { + case 1: + { + kbts_single_substitution *Subst = (kbts_single_substitution *)Base; + Subst->DeltaOrCount.GlyphCount = kbts_ByteSwap16(Subst->DeltaOrCount.GlyphCount); + +# ifdef KBTS_DUMP + if(Subst->Format == 1) + { + KBTS_DUMPF(" += %d\n", Subst->DeltaOrCount.DeltaGlyphId); + } +# endif + + if(Subst->Format == 2) + { + kbts_u16 *GlyphIds = KBTS_POINTER_AFTER(kbts_u16, Subst); + kbts_ByteSwapArray16(GlyphIds, Subst->DeltaOrCount.GlyphCount); + + #ifdef KBTS_DUMP + KBTS_DUMPF(" ["); + KBTS_FOR(IdIndex, 0, Subst->DeltaOrCount.GlyphCount) + { + if(IdIndex) KBTS_DUMPF(" "); + KBTS_DUMPF("%x", GlyphIds[IdIndex]); + } + KBTS_DUMPF("]\n"); + #endif + } + } + break; + + case 2: + { + kbts_multiple_substitution *Subst = (kbts_multiple_substitution *)Base; + Subst->SequenceCount = kbts_ByteSwap16(Subst->SequenceCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->SequenceCount); + + KBTS_FOR(SequenceIndex, 0, Subst->SequenceCount) + { + kbts_sequence *Sequence = kbts_GetSequence(Subst, SequenceIndex); + + if(!kbts_AlreadyVisited(Context, Sequence)) + { + Sequence->GlyphCount = kbts_ByteSwap16(Sequence->GlyphCount); + + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Sequence), Sequence->GlyphCount); + } + + #ifdef KBTS_DUMP + KBTS_DUMPF(" ["); + kbts_u16 *SequenceGlyphIds = KBTS_POINTER_AFTER(kbts_u16, Sequence); + KBTS_FOR(SequenceGlyphIndex, 0, Sequence->GlyphCount) + { + if(SequenceGlyphIndex) KBTS_DUMPF(" "); + KBTS_DUMPF("%x", SequenceGlyphIds[SequenceGlyphIndex]); + } + KBTS_DUMPF("]\n"); + #endif + } + } + break; + + case 3: + { + kbts_alternate_substitution *Subst = (kbts_alternate_substitution *)Base; + Subst->AlternateSetCount = kbts_ByteSwap16(Subst->AlternateSetCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->AlternateSetCount); + + KBTS_FOR(SetIndex, 0, Subst->AlternateSetCount) + { + kbts_alternate_set *Set = kbts_GetAlternateSet(Subst, SetIndex); + + if(!kbts_AlreadyVisited(Context, Set)) + { + Set->GlyphCount = kbts_ByteSwap16(Set->GlyphCount); + + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Set), Set->GlyphCount); + } + + #ifdef KBTS_DUMP + KBTS_DUMPF(" ["); + kbts_u16 *SetGlyphIds = KBTS_POINTER_AFTER(kbts_u16, Set); + KBTS_FOR(SetGlyphIndex, 0, Set->GlyphCount) + { + if(SetGlyphIndex) KBTS_DUMPF(" "); + KBTS_DUMPF("%x", SetGlyphIds[SetGlyphIndex]); + } + KBTS_DUMPF("]\n"); + #endif + } + } + break; + + case 4: + { + kbts_ligature_substitution *Subst = (kbts_ligature_substitution *)Base; + Subst->LigatureSetCount = kbts_ByteSwap16(Subst->LigatureSetCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Subst), Subst->LigatureSetCount); + + KBTS_FOR(SetIndex, 0, Subst->LigatureSetCount) + { + kbts_ligature_set *Set = kbts_GetLigatureSet(Subst, SetIndex); + + if(!kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Set), Set->Count); + + KBTS_FOR(LigatureIndex, 0, Set->Count) + { + kbts_ligature *Ligature = kbts_GetLigature(Set, LigatureIndex); + + if(!kbts_AlreadyVisited(Context, Ligature)) + { + kbts_ByteSwapArray16(&Ligature->Glyph, 2); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Ligature), Ligature->ComponentCount - 1); + +# ifdef KBTS_DUMP + KBTS_DUMPF("ligature: ["); + kbts_u16 *ComponentIds = KBTS_POINTER_AFTER(kbts_u16, Ligature); + KBTS_FOR(ComponentIndex, 1, Ligature->ComponentCount) + { + KBTS_DUMPF("%x,", ComponentIds[ComponentIndex - 1]); + } + KBTS_DUMPF("] -> %x\n", Ligature->Glyph); +# endif + } + } + } + } + +# ifdef KBTS_DUMP + +# endif + } + break; + + case 5: + { + kbts_ByteSwapSequenceContextSubtable(Context, Base); + } + break; + + case 6: + { + kbts_ByteSwapChainedSequenceContextSubtable(Context, Base); + } + break; + + case 8: + { + kbts_reverse_chain_substitution *Subst = (kbts_reverse_chain_substitution *)Base; + kbts_unpacked_reverse_chain_substitution Unpacked = kbts_UnpackReverseChainSubstitution(Subst, 1); + + kbts_un U16Count = Unpacked.BacktrackCount + Unpacked.GlyphCount + Unpacked.LookaheadCount + 3; + kbts_ByteSwapArray16(&Subst->BacktrackGlyphCount, U16Count); + + KBTS_FOR(BacktrackCoverageIndex, 0, Unpacked.BacktrackCount) + { + kbts_ByteSwapCoverage(Context, KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.BacktrackCoverageOffsets[BacktrackCoverageIndex])); + } + KBTS_FOR(LookaheadCoverageIndex, 0, Unpacked.LookaheadCount) + { + kbts_ByteSwapCoverage(Context, KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.LookaheadCoverageOffsets[LookaheadCoverageIndex])); + } + } + break; + } + } +} + +static void kbts_ByteSwapGposLookupSubtable(kbts_byteswap_context *Context, kbts_lookup_list *LookupList, kbts_u16 LookupType, kbts_u16 *Base) +{ + if(!kbts_AlreadyVisited(Context, Base)) + { + *Base = kbts_ByteSwap16(*Base); + + KBTS_DUMPF(" GPOS subtable %u.%u\n", LookupType, *Base); + + if(kbts_GposLookupBeginsWithCoverage(LookupType, *Base)) + { + kbts_u16 *CoverageOffset = &Base[1]; + *CoverageOffset = kbts_ByteSwap16(*CoverageOffset); + + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Base, *CoverageOffset); + kbts_ByteSwapCoverage(Context, Coverage); + } + + switch(LookupType) + { + case 1: + { + kbts_single_adjustment_1 *Adjust = (kbts_single_adjustment_1 *)Base; + Adjust->ValueFormat = kbts_ByteSwap16(Adjust->ValueFormat); + + if(Adjust->Format == 1) + { + kbts_ByteSwapValueRecord(Context, Adjust, Adjust->ValueFormat, KBTS_POINTER_AFTER(kbts_u16, Adjust)); + } + else if(Adjust->Format == 2) + { + kbts_single_adjustment_2 *Adjust2 = (kbts_single_adjustment_2 *)Base; + Adjust2->RecordCount = kbts_ByteSwap16(Adjust2->RecordCount); + + kbts_u16 *At = KBTS_POINTER_AFTER(kbts_u16, Adjust2); + KBTS_FOR(RecordIndex, 0, Adjust2->RecordCount) + { + kbts_unpacked_value_record Unpacked = kbts_ByteSwapValueRecord(Context, Adjust2, Adjust2->ValueFormat, At); + + At += Unpacked.Size; + } + } + } + break; + + case 2: + { + if(*Base == 1) + { + kbts_pair_adjustment_1 *Adjust = (kbts_pair_adjustment_1 *)Base; + kbts_ByteSwapArray16(&Adjust->ValueFormat1, 3); + + kbts_u16 *SetOffsets = KBTS_POINTER_AFTER(kbts_u16, Adjust); + kbts_ByteSwapArray16(SetOffsets, Adjust->SetCount); + + kbts_un Size1 = kbts_PopCount32(Adjust->ValueFormat1); + kbts_un Size2 = kbts_PopCount32(Adjust->ValueFormat2); + kbts_un PairRecordSize = Size1 + Size2 + 1; + + KBTS_FOR(SetIndex, 0, Adjust->SetCount) + { + kbts_pair_set *Set = KBTS_POINTER_OFFSET(kbts_pair_set, Adjust, SetOffsets[SetIndex]); + + if(!kbts_AlreadyVisited(Context, Set)) + { + Set->Count = kbts_ByteSwap16(Set->Count); + + kbts_u16 *At = KBTS_POINTER_AFTER(kbts_u16, Set); + + KBTS_FOR(RecordIndex, 0, Set->Count) + { + kbts_pair_value_record *PairRecord = (kbts_pair_value_record *)(At + RecordIndex * PairRecordSize); + + PairRecord->SecondGlyph = kbts_ByteSwap16(PairRecord->SecondGlyph); + kbts_u16 *Record = KBTS_POINTER_AFTER(kbts_u16, PairRecord); + + kbts_unpacked_value_record Unpacked1 = kbts_ByteSwapValueRecord(Context, Record, Adjust->ValueFormat1, Record); + Record += Unpacked1.Size; + kbts_ByteSwapValueRecord(Context, Record, Adjust->ValueFormat2, Record); + } + } + } + } + else if(*Base == 2) + { + kbts_pair_adjustment_2 *Adjust = (kbts_pair_adjustment_2 *)Base; + kbts_ByteSwapArray16(&Adjust->ValueFormat1, 6); + + kbts_ByteSwapClassDefinition(Context, KBTS_POINTER_OFFSET(kbts_u16, Adjust, Adjust->ClassDefinition1Offset)); + kbts_ByteSwapClassDefinition(Context, KBTS_POINTER_OFFSET(kbts_u16, Adjust, Adjust->ClassDefinition2Offset)); + + kbts_u16 *Records = KBTS_POINTER_AFTER(kbts_u16, Adjust); + + kbts_un Size1 = kbts_PopCount32(Adjust->ValueFormat1); + kbts_un Size2 = kbts_PopCount32(Adjust->ValueFormat2); + + kbts_u16 *RecordPair = Records; + KBTS_FOR(RecordIndex, 0, (kbts_un)Adjust->Class1Count * (kbts_un)Adjust->Class2Count) + { + kbts_ByteSwapValueRecord(Context, Adjust, Adjust->ValueFormat1, RecordPair); + RecordPair += Size1; + + kbts_ByteSwapValueRecord(Context, Adjust, Adjust->ValueFormat2, RecordPair); + RecordPair += Size2; + } + } + } + break; + + case 3: + { + kbts_cursive_attachment *Adjust = (kbts_cursive_attachment *)Base; + Adjust->EntryExitCount = kbts_ByteSwap16(Adjust->EntryExitCount); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Adjust), Adjust->EntryExitCount * 2); + + kbts_entry_exit *EntryExits = KBTS_POINTER_AFTER(kbts_entry_exit, Adjust); + KBTS_FOR(EntryExitIndex, 0, Adjust->EntryExitCount) + { + kbts_entry_exit *EntryExit = &EntryExits[EntryExitIndex]; + + if(EntryExit->EntryAnchorOffset) + { + kbts_ByteSwapAnchor(Context, KBTS_POINTER_OFFSET(kbts_anchor, Adjust, EntryExit->EntryAnchorOffset)); + } + + if(EntryExit->ExitAnchorOffset) + { + kbts_ByteSwapAnchor(Context, KBTS_POINTER_OFFSET(kbts_anchor, Adjust, EntryExit->ExitAnchorOffset)); + } + } + } + break; + + case 4: + case 6: + { + kbts_mark_to_base_attachment *Adjust = (kbts_mark_to_base_attachment *)Base; + kbts_ByteSwapArray16(&Adjust->BaseCoverageOffset, 4); + + kbts_ByteSwapCoverage(Context, KBTS_POINTER_OFFSET(kbts_coverage, Adjust, Adjust->BaseCoverageOffset)); + kbts_ByteSwapMarkArray(Context, KBTS_POINTER_OFFSET(kbts_mark_array, Adjust, Adjust->MarkArrayOffset)); + kbts_ByteSwapBaseArray(Context, Adjust->MarkClassCount, KBTS_POINTER_OFFSET(kbts_base_array, Adjust, Adjust->BaseArrayOffset)); + } + break; + + case 5: + { + kbts_mark_to_ligature_attachment *Adjust = (kbts_mark_to_ligature_attachment *)Base; + kbts_ByteSwapArray16(&Adjust->LigatureCoverageOffset, 4); + + kbts_ByteSwapCoverage(Context, KBTS_POINTER_OFFSET(kbts_coverage, Adjust, Adjust->LigatureCoverageOffset)); + kbts_ByteSwapMarkArray(Context, KBTS_POINTER_OFFSET(kbts_mark_array, Adjust, Adjust->MarkArrayOffset)); + + kbts_ligature_array *LigatureArray = KBTS_POINTER_OFFSET(kbts_ligature_array, Adjust, Adjust->LigatureArrayOffset); + if(!kbts_AlreadyVisited(Context, LigatureArray)) + { + LigatureArray->Count = kbts_ByteSwap16(LigatureArray->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, LigatureArray), LigatureArray->Count); + + KBTS_FOR(AttachIndex, 0, LigatureArray->Count) + { + kbts_ligature_attach *Attach = kbts_GetLigatureAttach(LigatureArray, AttachIndex); + + if(!kbts_AlreadyVisited(Context, Attach)) + { + Attach->Count = kbts_ByteSwap16(Attach->Count); + + kbts_u16 *AttachAnchorOffsets = KBTS_POINTER_AFTER(kbts_u16, Attach); + kbts_ByteSwapArray16(AttachAnchorOffsets, Attach->Count * Adjust->MarkClassCount); + + KBTS_FOR(ComponentIndex, 0, Attach->Count) + { + KBTS_FOR(MarkClass, 0, Adjust->MarkClassCount) + { + kbts_anchor *Anchor = kbts_GetLigatureAttachAnchor(Adjust, Attach, (kbts_u16)MarkClass, ComponentIndex); + + kbts_ByteSwapAnchor(Context, Anchor); + } + } + } + } + } + } + break; + + case 7: + { + kbts_ByteSwapSequenceContextSubtable(Context, Base); + } + break; + + case 8: + { + kbts_ByteSwapChainedSequenceContextSubtable(Context, Base); + } + break; + + case 9: + { + // @Cleanup: Replace recursion with a loop at the start of this function! + kbts_extension *Adjust = (kbts_extension *)Base; + + Adjust->LookupType = kbts_ByteSwap16(Adjust->LookupType); + Adjust->Offset = kbts_ByteSwap32(Adjust->Offset); + + kbts_ByteSwapGposLookupSubtable(Context, LookupList, Adjust->LookupType, KBTS_POINTER_OFFSET(kbts_u16, Adjust, Adjust->Offset)); + } + break; + } + } +} + +static kbts_glyph_classes kbts_GlyphClasses(kbts_font *Font, kbts_u32 Id) +{ + kbts_glyph_classes Result = KBTS_ZERO; + + // Look up all glyph classes. + kbts_gdef *Gdef = Font->Gdef; + if(Gdef) + { + kbts_u16 Class = 0; + if(Gdef->ClassDefinitionOffset) + { + kbts_u16 *ClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Gdef, Gdef->ClassDefinitionOffset); + Class = kbts_GlyphClassFromTable(ClassDefBase, Id); + } + + if(Gdef->MarkAttachmentClassDefinitionOffset && (Class == KBTS_GLYPH_CLASS_MARK)) + { + kbts_u16 *MarkAttachmentClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Gdef, Gdef->MarkAttachmentClassDefinitionOffset); + Result.MarkAttachmentClass = kbts_GlyphClassFromTable(MarkAttachmentClassDefBase, Id); + } + + Result.Class = Class; + } + + return Result; +} + +static int kbts_ScriptIsWeak(kbts_script Script) +{ + int Result = (Script == KBTS_SCRIPT_DONT_KNOW) || (Script == KBTS_SCRIPT_DEFAULT) || (Script == KBTS_SCRIPT_DEFAULT2); + return Result; +} + +static int kbts_ShaperRtl(kbts_shaper Shaper) +{ + int Result = (Shaper == KBTS_SHAPER_ARABIC) || (Shaper == KBTS_SHAPER_HEBREW); + return Result; +} + +// Easy shorthand for determining scripts in simple cases. +// Do not ship this! You should use script breaks instead. +KBTS_EXPORT void kbts_InferScript(kbts_direction *Direction, kbts_script *Script, kbts_script GlyphScript) +{ + if(Script) + { + if(kbts_ScriptIsWeak(*Script) && !kbts_ScriptIsWeak(GlyphScript)) + { + *Script = GlyphScript; + if(Direction && (!*Direction)) + { + kbts_script_properties *Properties = &kbts_ScriptProperties[GlyphScript]; + *Direction = kbts_ShaperRtl(Properties->Shaper) ? KBTS_DIRECTION_RTL : KBTS_DIRECTION_LTR; + } + } + } +} + +KBTS_EXPORT kbts_glyph kbts_CodepointToGlyph(kbts_font *Font, kbts_u32 Codepoint) +{ + kbts_glyph Result = KBTS_ZERO; + Result.Codepoint = Codepoint; + + // Look up Unicode properties. + Result.Decomposition = kbts_GetUnicodeDecomposition(Codepoint); + Result.JoiningType = kbts_GetUnicodeJoiningType(Codepoint); + Result.UnicodeFlags = kbts_GetUnicodeFlags(Codepoint); + kbts_u16 SyllabicInfo = kbts_GetUnicodeSyllabicInfo(Codepoint); + Result.SyllabicClass = kbts_GetSyllabicClass(SyllabicInfo); + Result.SyllabicPosition = kbts_GetSyllabicPosition(SyllabicInfo); + Result.CombiningClass = kbts_GetUnicodeCombiningClass(Codepoint); + Result.UseClass = kbts_GetUnicodeUseClass(Codepoint); + Result.Script = kbts_GetUnicodeScript(Codepoint); + Result.ParentInfo = kbts_GetUnicodeParentInfo(Codepoint); + + kbts_u16 *CmapBase = Font->Cmap; + if(CmapBase) + { + switch(*CmapBase) + { + case 0: + { + kbts_cmap_0 *Cmap0 = (kbts_cmap_0 *)CmapBase; + + if((kbts_un)Codepoint < KBTS_ARRAY_LENGTH(Cmap0->GlyphIdArray)) + { + Result.Id = Cmap0->GlyphIdArray[Codepoint]; + } + } + break; + + case 2: + { + kbts_cmap_2 *Cmap2 = (kbts_cmap_2 *)CmapBase; + kbts_sub_header *SubHeaders = KBTS_POINTER_AFTER(kbts_sub_header, Cmap2); + + kbts_u32 High = (Codepoint >> 8) & 0xFF; + + if(!(Codepoint & 0xFF00)) + { + High = Codepoint & 0xFF; + } + + // The Microsoft documentation doesn't mention that the SubHeaderKeys are indices multiplied by 8, for some + // reason..! The Apple documentation does. + kbts_u16 SubHeaderIndex = Cmap2->SubHeaderKeys[High] / 8; + kbts_sub_header *SubHeader = &SubHeaders[SubHeaderIndex]; + + if(!SubHeaderIndex) + { + // With SubHeader 0, we only use the first byte. + Codepoint = High; + } + else + { + Codepoint = Codepoint & 0xFF; + } + + kbts_u32 Offset = Codepoint - SubHeader->FirstCode; + if(Offset < SubHeader->EntryCount) + { + kbts_u16 *GlyphIds = KBTS_POINTER_OFFSET(kbts_u16, &SubHeader->IdRangeOffset, SubHeader->IdRangeOffset); + kbts_u16 GlyphId = GlyphIds[Offset]; + if(GlyphId) + { + GlyphId += SubHeader->IdDelta; + } + + Result.Id = GlyphId; + } + } + break; + + case 4: + { + kbts_cmap_4 *Cmap4 = (kbts_cmap_4 *)CmapBase; + kbts_un SegmentCount = Cmap4->SegmentCountTimesTwo / 2; + kbts_u16 *EndCodes = KBTS_POINTER_AFTER(kbts_u16, Cmap4); + kbts_u16 *StartCodes = EndCodes + SegmentCount + 1; + kbts_s16 *IdDeltas = (kbts_s16 *)(StartCodes + SegmentCount); + kbts_u16 *IdRangeOffsets = (kbts_u16 *)(IdDeltas + SegmentCount); + + KBTS_FOR(SegmentIndex, 0, SegmentCount) + { + kbts_u16 Start = StartCodes[SegmentIndex]; + if((Codepoint >= Start) && (Codepoint <= EndCodes[SegmentIndex])) + { + kbts_s16 Delta = IdDeltas[SegmentIndex]; + kbts_u16 RangeOffset = IdRangeOffsets[SegmentIndex]; + + kbts_u16 GlyphId = (kbts_u16)Delta; + if(RangeOffset) + { + GlyphId += *(&IdRangeOffsets[SegmentIndex] + (Codepoint - Start) + RangeOffset / 2); + } + else + { + GlyphId += (kbts_u16)(Codepoint); + } + Result.Id = GlyphId; + + break; + } + } + } + break; + + case 6: + { + kbts_cmap_6 *Cmap6 = (kbts_cmap_6 *)CmapBase; + kbts_u16 *GlyphIds = KBTS_POINTER_AFTER(kbts_u16, Cmap6); + + kbts_un Offset = Codepoint - Cmap6->FirstCode; + if(Offset < Cmap6->EntryCount) + { + Result.Id = GlyphIds[Offset]; + } + } + break; + + case 12: + { + kbts_cmap_12_13 *Cmap12 = (kbts_cmap_12_13 *)CmapBase; + kbts_sequential_map_group *Groups = KBTS_POINTER_AFTER(kbts_sequential_map_group, Cmap12); + + kbts_un GlyphId = 0; + KBTS_FOR(GroupIndex, 0, Cmap12->GroupCount) + { + kbts_sequential_map_group *Group = &Groups[GroupIndex]; + + if((Codepoint >= Group->StartCharacterCode) && (Codepoint <= Group->EndCharacterCode)) + { + kbts_un Offset = Codepoint - Group->StartCharacterCode; + GlyphId = Group->StartGlyphId + Offset; + + break; + } + } + + Result.Id = (kbts_u16)GlyphId; + } + break; + } + } + + if(Font->Gdef) + { + Result.Classes = kbts_GlyphClasses(Font, Result.Id); + } + else + { + // @Cleanup: This is garbage compatibility-with-broken-fonts code. I would very much like to get rid of it. + if((Result.UnicodeFlags & KBTS_UNICODE_FLAG_DEFAULT_IGNORABLE) || !(Result.UnicodeFlags & KBTS_UNICODE_FLAG_NON_SPACING_MARK)) + { + Result.Classes.Class = KBTS_GLYPH_CLASS_BASE; + } + else + { + Result.Classes.Class = KBTS_GLYPH_CLASS_MARK; + } + } + + return Result; +} + +typedef struct kbts_iterate_features +{ + kbts_gsub_gpos *Header; + kbts_feature_list *FeatureList; + // @Incomplete + // kbts_feature_variations *FeatureVariations; + kbts_langsys *Langsys; + + kbts_feature_set EnabledFeatures; + + kbts_u32 CurrentFeatureTag; + kbts_u32 CurrentFeatureFlag; + + kbts_u32 FeatureIndex; + kbts_feature *Feature; +} kbts_iterate_features; + +static kbts_iterate_features kbts_IterateFeatures(kbts_shape_config *Config, kbts_shaping_table ShapingTable, kbts_feature_set EnabledFeatures) +{ + kbts_iterate_features Result = KBTS_ZERO; + + kbts_gsub_gpos *Header = Config->Font->ShapingTables[ShapingTable]; + if(Header) + { + // @Incomplete + // if(Header->Minor == 1) + // { + // Result.FeatureVariations = KBTS_POINTER_OFFSET(kbts_feature_variations, Header, Header->FeatureVariationsOffset); + // } + + Result.FeatureList = KBTS_POINTER_OFFSET(kbts_feature_list, Header, Header->FeatureListOffset); + Result.Header = Header; + Result.Langsys = Config->Langsys[ShapingTable]; + Result.EnabledFeatures = EnabledFeatures; + } + + return Result; +} + +static kbts_u32 kbts_IsValidFeatureIteration(kbts_iterate_features *It) +{ + kbts_u32 Result = It->Langsys != 0; + return Result; +} + +static kbts_feature_id kbts_FeatureToId(kbts_feature_tag Feature) +{ + kbts_feature_id Result = 0; + + switch(Feature) + { +# define KBTS_X(Name, C0, C1, C2, C3) case KBTS_FEATURE_TAG_##Name: Result = KBTS_FEATURE_ID_##Name; break; + KBTS_X_FEATURES +# undef KBTS_X + + default: break; + } + + return Result; +} + +static kbts_u32 kbts_NextFeature(kbts_iterate_features *It) +{ + kbts_u32 Result = 0; + It->Feature = 0; + + if(kbts_IsValidFeatureIteration(It)) + { + kbts_u16 *FeatureIndices = KBTS_POINTER_AFTER(kbts_u16, It->Langsys); + // @Incomplete + // kbts_feature_variations *FeatureVariations = It->FeatureVariations; + while(It->FeatureIndex < It->Langsys->FeatureIndexCount) + { + kbts_feature_pointer Feature = kbts_GetFeature(It->FeatureList, FeatureIndices[It->FeatureIndex]); + + // We might need to swap out this feature with another. + // Check for variations. + // @Incomplete + //if(FeatureVariations) + //{ + // KBTS_FOR(VariationIndex, 0, FeatureVariations->RecordCount) + // { + // kbts_feature_variation_pointer Variation = kbts_GetFeatureVariation(FeatureVariations, VariationIndex); + // KBTS_FOR(ConditionIndex, 0, Variation.ConditionSet->Count) + // { + // kbts_condition_1 *Condition = kbts_GetCondition(Variation.ConditionSet, ConditionIndex); + // KBTS_ASSERT(0); + // } + // } + //} + + It->FeatureIndex += 1; + + kbts_u32 FeatureId = kbts_FeatureToId(Feature.Tag); + kbts_u64 FeatureFlag = (FeatureId < 32) ? (1ull << FeatureId) : 0; + if(kbts_ContainsFeature(&It->EnabledFeatures, kbts_FeatureToId(Feature.Tag))) + { + It->Feature = Feature.Feature; + It->CurrentFeatureTag = Feature.Tag; + It->CurrentFeatureFlag = FeatureFlag & KBTS_GLYPH_FEATURE_MASK; + Result = 1; + + break; + } + } + } + + return Result; +} + +typedef struct kbts_iterate_lookups +{ + kbts_lookup_list *LookupList; + kbts_feature *Feature; + + kbts_lookup *Lookup; + kbts_u16 LookupIndex; + + kbts_u32 LookupIndexIndex; +} kbts_iterate_lookups; + +static kbts_iterate_lookups kbts_IterateLookups(kbts_lookup_list *List, kbts_feature *Feature) +{ + kbts_iterate_lookups Result = KBTS_ZERO; + Result.LookupList = List; + Result.Feature = Feature; + + return Result; +} + +static kbts_u32 kbts_NextLookup(kbts_iterate_lookups *It) +{ + kbts_u32 Result = 0; + kbts_feature *Feature = It->Feature; + + if(It->LookupList && Feature && (It->LookupIndexIndex < Feature->LookupIndexCount)) + { + kbts_u16 *LookupIndices = KBTS_POINTER_AFTER(kbts_u16, Feature); + + It->LookupIndex = LookupIndices[It->LookupIndexIndex]; + It->Lookup = kbts_GetLookup(It->LookupList, It->LookupIndex); + + Result = 1; + It->LookupIndexIndex += 1; + } + + return Result; +} + +KBTS_INLINE void kbts_GsubMutate(kbts_font *Font, kbts_glyph *Glyph, kbts_u16 NewId, kbts_u32 Flags) +{ + Glyph->Id = NewId; + Glyph->Classes = kbts_GlyphClasses(Font, NewId); + Glyph->Flags = (Glyph->Flags & ~KBTS_GLYPH_FLAG_FIRST_IN_MULTIPLE_SUBSTITUTION) | Flags; +} + +typedef struct kbts_do_single_substitution_result +{ + kbts_u32 ConsumedGlyphCount; + kbts_u32 WrittenGlyphCount; + kbts_u32 PerformedSubstitution; +} kbts_do_single_substitution_result; + +// Make sure that these fit KBTS_MAX_SIMULTANEOUS_FEATURES! +static kbts_u8 kbts_Ops_Default[] = { + KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 12, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_ltra, KBTS_FEATURE_ID_ltrm, + KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_clig, + KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_Hebrew[] = { + KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 12, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_rtla, KBTS_FEATURE_ID_rtlm, + KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_clig, + KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +/* @Incomplete: Vertical text. +static kbts_u8 kbts_Ops_DefaultTtbBtt[] = { + KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 3, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 10, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_mark, + KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_vert, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +*/ +static kbts_u8 kbts_Ops_Hangul[] = { + KBTS_OP_KIND_NORMALIZE, KBTS_OP_KIND_NORMALIZE_HANGUL, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 8, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_ltra, KBTS_FEATURE_ID_ltrm, + KBTS_FEATURE_ID_ljmo, KBTS_FEATURE_ID_vjmo, KBTS_FEATURE_ID_tjmo, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 13, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_mark, + KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_ArabicRclt[] = { + KBTS_OP_KIND_NORMALIZE, KBTS_OP_KIND_FLAG_JOINING_LETTERS, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_rtla, KBTS_FEATURE_ID_rtlm, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_stch, + KBTS_OP_KIND_GSUB_FEATURES, 2, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_isol, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fina, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fin2, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fin3, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_medi, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_med2, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_init, + // @Incomplete: In Arabic rlig, ZWJ should not be skipped in lookups (i.e. it should block ligatures). + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rlig, + // @Incomplete: In non-Arabic scripts, e.g. Syriac, Harfbuzz does not pause here. + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_mset, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_OP_KIND_STCH_POSTPASS, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_ArabicNoRclt[] = { + KBTS_OP_KIND_NORMALIZE, KBTS_OP_KIND_FLAG_JOINING_LETTERS, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_rtla, KBTS_FEATURE_ID_rtlm, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_stch, + KBTS_OP_KIND_GSUB_FEATURES, 2, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_locl, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_isol, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fina, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fin2, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_fin3, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_medi, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_med2, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_init, + // @Incomplete: In Arabic rlig, ZWJ should not be skipped in lookups (i.e. it should block ligatures). + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rlig, + // @Incomplete: In non-Arabic scripts, e.g. Syriac, Harfbuzz does not pause here. + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_calt, + // When the font does not contain rclt, Uniscribe puts calt in its own pass, and so we pause here. + KBTS_OP_KIND_GSUB_FEATURES, 4, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_mset, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_OP_KIND_STCH_POSTPASS, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_Indic0[] = { + KBTS_OP_KIND_PRE_NORMALIZE_DOTTED_CIRCLES, KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_ltra, KBTS_FEATURE_ID_ltrm, +}; +// After BeginCluster. +static kbts_u8 kbts_Ops_Indic1[] = { + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_nukt, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_akhn, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rphf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rkrf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_pref, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_blwf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_abvf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_half, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_pstf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_vatu, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_cjct, +}; +// After EndCluster. +static kbts_u8 kbts_Ops_Indic2[] = { + KBTS_OP_KIND_GSUB_FEATURES, 6, KBTS_FEATURE_ID_abvs, KBTS_FEATURE_ID_blws, KBTS_FEATURE_ID_haln, KBTS_FEATURE_ID_init, KBTS_FEATURE_ID_pres, + KBTS_FEATURE_ID_psts, +}; +// After syllable processing. +static kbts_u8 kbts_Ops_Indic3[] = { + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, KBTS_FEATURE_ID_curs, + KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_Use0[] = { + KBTS_OP_KIND_PRE_NORMALIZE_DOTTED_CIRCLES, KBTS_OP_KIND_NORMALIZE, KBTS_OP_KIND_FLAG_JOINING_LETTERS, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_ltra, KBTS_FEATURE_ID_ltrm, +}; +static kbts_u8 kbts_Ops_Use1[] = { + KBTS_OP_KIND_GSUB_FEATURES, 4, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_nukt, KBTS_FEATURE_ID_akhn, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rphf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_pref, + KBTS_OP_KIND_GSUB_FEATURES, 7, KBTS_FEATURE_ID_abvf, KBTS_FEATURE_ID_blwf, KBTS_FEATURE_ID_cjct, KBTS_FEATURE_ID_half, KBTS_FEATURE_ID_pstf, + KBTS_FEATURE_ID_rkrf, KBTS_FEATURE_ID_vatu, +}; +// There is no kbts_Ops_Use2, because there are no features that apply per syllable after reordering. +static kbts_u8 kbts_Ops_Use3[] = { + KBTS_OP_KIND_GSUB_FEATURES, 4, KBTS_FEATURE_ID_fina, KBTS_FEATURE_ID_init, KBTS_FEATURE_ID_isol, KBTS_FEATURE_ID_medi, + KBTS_OP_KIND_GSUB_FEATURES,10, KBTS_FEATURE_ID_abvs, KBTS_FEATURE_ID_blws, KBTS_FEATURE_ID_haln, KBTS_FEATURE_ID_pres, KBTS_FEATURE_ID_psts, + KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_rclt, KBTS_FEATURE_ID_rlig, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_curs, KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_Tibetan[] = { + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_locl, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_ccmp, + KBTS_OP_KIND_GSUB_FEATURES, 4, KBTS_FEATURE_ID_abvs, KBTS_FEATURE_ID_blws, KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_liga, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 4, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_kern, KBTS_FEATURE_ID_mkmk, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +static kbts_u8 kbts_Ops_Khmer0[] = { + KBTS_OP_KIND_PRE_NORMALIZE_DOTTED_CIRCLES, KBTS_OP_KIND_NORMALIZE, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rvrn, + KBTS_OP_KIND_GSUB_FEATURES, 5, KBTS_FEATURE_ID_frac, KBTS_FEATURE_ID_numr, KBTS_FEATURE_ID_dnom, KBTS_FEATURE_ID_ltra, KBTS_FEATURE_ID_ltrm, +}; +static kbts_u8 kbts_Ops_Khmer1[] = { + KBTS_OP_KIND_GSUB_FEATURES, 7, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_ccmp, KBTS_FEATURE_ID_pref, KBTS_FEATURE_ID_blwf, KBTS_FEATURE_ID_abvf, + KBTS_FEATURE_ID_pstf, KBTS_FEATURE_ID_cfar, +}; +static kbts_u8 kbts_Ops_Khmer3[] = { + KBTS_OP_KIND_GSUB_FEATURES, 8, KBTS_FEATURE_ID_pres, KBTS_FEATURE_ID_abvs, KBTS_FEATURE_ID_blws, KBTS_FEATURE_ID_psts, KBTS_FEATURE_ID_calt, + KBTS_FEATURE_ID_rclt, KBTS_FEATURE_ID_rlig, KBTS_FEATURE_ID_clig, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_curs, KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; +#define kbts_Ops_Myanmar0 kbts_Ops_Khmer0 +static kbts_u8 kbts_Ops_Myanmar1[] = { + KBTS_OP_KIND_GSUB_FEATURES, 2, KBTS_FEATURE_ID_locl, KBTS_FEATURE_ID_ccmp, +}; +static kbts_u8 kbts_Ops_Myanmar2[] = { + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_rphf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_pref, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_blwf, + KBTS_OP_KIND_GSUB_FEATURES, 1, KBTS_FEATURE_ID_pstf, +}; +static kbts_u8 kbts_Ops_Myanmar3[] = { + KBTS_OP_KIND_GSUB_FEATURES, 9, KBTS_FEATURE_ID_pres, KBTS_FEATURE_ID_abvs, KBTS_FEATURE_ID_blws, KBTS_FEATURE_ID_psts, KBTS_FEATURE_ID_rlig, + KBTS_FEATURE_ID_calt, KBTS_FEATURE_ID_clig, KBTS_FEATURE_ID_liga, KBTS_FEATURE_ID_rclt, + KBTS_OP_KIND_GPOS_METRICS, + KBTS_OP_KIND_GPOS_FEATURES, 7, KBTS_FEATURE_ID_abvm, KBTS_FEATURE_ID_blwm, KBTS_FEATURE_ID_curs, KBTS_FEATURE_ID_dist, KBTS_FEATURE_ID_kern, + KBTS_FEATURE_ID_mark, KBTS_FEATURE_ID_mkmk, + KBTS_OP_KIND_POST_GPOS_FIXUP, +}; + +static kbts_op_list kbts_ShaperOpLists[KBTS_SHAPER_COUNT] = { + /* DEFAULT, */ {kbts_Ops_Default, KBTS_ARRAY_LENGTH(kbts_Ops_Default)}, + /* ARABIC, */ {kbts_Ops_ArabicRclt, KBTS_ARRAY_LENGTH(kbts_Ops_ArabicRclt)}, + /* HANGUL, */ {kbts_Ops_Hangul, KBTS_ARRAY_LENGTH(kbts_Ops_Hangul)}, + /* HEBREW, */ {kbts_Ops_Hebrew, KBTS_ARRAY_LENGTH(kbts_Ops_Hebrew)}, + /* INDIC, */ {kbts_Ops_Indic0, KBTS_ARRAY_LENGTH(kbts_Ops_Indic0)}, + /* KHMER, */ {kbts_Ops_Khmer0, KBTS_ARRAY_LENGTH(kbts_Ops_Khmer0)}, + /* MYANMAR, */ {kbts_Ops_Myanmar0, KBTS_ARRAY_LENGTH(kbts_Ops_Myanmar0)}, + /* TIBETAN, */ {kbts_Ops_Tibetan, KBTS_ARRAY_LENGTH(kbts_Ops_Tibetan)}, + /* USE, */ {kbts_Ops_Use0, KBTS_ARRAY_LENGTH(kbts_Ops_Use0)}, +}; + +typedef struct kbts_gsub_frame +{ + kbts_u16 LookupIndex; + kbts_u16 SubtableIndex; + + kbts_u16 InputGlyphIndex; + kbts_u16 InputGlyphCount; + + // Defined for nested lookups. + kbts_sequence_lookup_record *Records; + kbts_u16 RecordCount; + kbts_u16 RecordIndex; +} kbts_gsub_frame; + +KBTS_EXPORT kbts_un kbts_SizeOfShapeState(kbts_font *Font) +{ + kbts_un GsubMemorySize = Font->LookupInfo.MaximumLookupStackSize * sizeof(kbts_gsub_frame); + kbts_un NormalizationMemorySize = KBTS_MAXIMUM_DECOMPOSITION_CODEPOINTS * sizeof(kbts_glyph); + kbts_un LeftoverMemorySize = KBTS_MAX(GsubMemorySize, NormalizationMemorySize); + + kbts_un Result = sizeof(kbts_shape_state) + LeftoverMemorySize; + return Result; +} + +KBTS_EXPORT kbts_shape_state *kbts_PlaceShapeState(void *Address, kbts_un Size) +{ + kbts_shape_state *State = (kbts_shape_state *)Address; + memset(State, 0, Size); + + return State; +} + +#ifndef KB_TEXT_SHAPE_NO_CRT +KBTS_EXPORT kbts_shape_state *kbts_CreateShapeState(kbts_font *Font) +{ + kbts_un Size = kbts_SizeOfShapeState(Font); + void *Memory = malloc(Size); + kbts_shape_state *Result = kbts_PlaceShapeState(Memory, Size); + + return Result; +} + +KBTS_EXPORT void kbts_FreeShapeState(kbts_shape_state *State) +{ + if(State) + { + free(State); + } +} +#endif + +KBTS_EXPORT void kbts_ResetShapeState(kbts_shape_state *State) +{ + State->ResumePoint = 0; +} + +static kbts_glyph_array kbts_ClipGlyphArray(kbts_glyph_array *Source, kbts_un Count) +{ + kbts_glyph_array Result = KBTS_ZERO; + Result.Glyphs = Source->Glyphs; + Result.Count = (kbts_u32)Count; + Result.TotalCount = (kbts_u32)Count; + Result.Capacity = (kbts_u32)Count; + return Result; +} + +static void kbts_TransferGrowRequest(kbts_glyph_array *From, kbts_glyph_array *To) +{ + if(From->RequiredCapacity > From->Capacity) + { + To->RequiredCapacity = To->Capacity + From->RequiredCapacity - From->Capacity; + } +} + +static kbts_glyph_array kbts_GlyphSubArray(kbts_glyph_array *Source, kbts_un FromIndex) +{ + kbts_glyph_array Result = KBTS_ZERO; + Result.Glyphs = Source->Glyphs + FromIndex; + Result.Count = (kbts_u32)(Source->Count - FromIndex); + Result.TotalCount = (kbts_u32)(Source->TotalCount - FromIndex); + Result.Capacity = (kbts_u32)(Source->Capacity - FromIndex); + return Result; +} + +static kbts_glyph_array kbts_GlyphArray(kbts_glyph *Glyphs, kbts_un Count, kbts_un TotalCount, kbts_un Capacity) +{ + kbts_glyph_array Result = KBTS_ZERO; + Result.Glyphs = Glyphs; + Result.Count = (kbts_u32)Count; + Result.TotalCount = (kbts_u32)TotalCount; + Result.Capacity = (kbts_u32)Capacity; + return Result; +} + +static int kbts_GrowGlyphArray(kbts_u32 *ResumePoint_, kbts_glyph_array *Array, kbts_un InsertIndex, kbts_un GrowCount, kbts_u32 ResumePoint, int DoNotModifyGlyphCounts) +{ + int Result = 0; + kbts_un TotalCount = Array->TotalCount; + kbts_un NewTotalCount = TotalCount + GrowCount; + + if(NewTotalCount <= Array->Capacity) + { + // @Cleanup: memmove + if(NewTotalCount > TotalCount) + { + for(kbts_un ToIndex = NewTotalCount; ToIndex > InsertIndex + GrowCount; --ToIndex) + { + Array->Glyphs[ToIndex - 1] = Array->Glyphs[ToIndex - 1 - GrowCount]; + } + } + else if(NewTotalCount < TotalCount) + { + // Multiple substitutions that generate 0 glyphs exist. In that case, GrowCount will be negative. + KBTS_FOR(ToIndex, InsertIndex, NewTotalCount) + { + Array->Glyphs[ToIndex] = Array->Glyphs[ToIndex - GrowCount]; + } + } + + if(!DoNotModifyGlyphCounts) + { + Array->Count += GrowCount; + Array->TotalCount = (kbts_u32)NewTotalCount; + } + Result = 1; + } + else + { + Array->RequiredCapacity = (kbts_u32)(NewTotalCount + KBTS_GROW_BUFFER_MARGIN); + if(ResumePoint_) *ResumePoint_ = ResumePoint; + } + + return Result; +} + +static void kbts_BeginFeatures(kbts_op_state *State, kbts_shape_config *Config, kbts_shaping_table ShapingTable, kbts_feature_set EnabledFeatures) +{ + kbts_un FeatureCount = 0; + kbts_gsub_gpos *Header = Config->Font->ShapingTables[ShapingTable]; + kbts_langsys *Langsys = Config->Langsys[ShapingTable]; + if(Header && Langsys) + { + kbts_feature_list *FeatureList = KBTS_POINTER_OFFSET(kbts_feature_list, Header, Header->FeatureListOffset); + kbts_u16 *FeatureIndices = KBTS_POINTER_AFTER(kbts_u16, Langsys); + // @Incomplete + // if(Header->Minor == 1) + // { + // kbts_feature_variations *FeatureVariations = KBTS_POINTER_OFFSET(kbts_feature_variations, Header, Header->FeatureVariationsOffset); + // } + + KBTS_FOR(FeatureIndexIndex, 0, Langsys->FeatureIndexCount) + { + kbts_un FeatureIndex = FeatureIndices[FeatureIndexIndex]; + kbts_feature_pointer Feature = kbts_GetFeature(FeatureList, FeatureIndex); + // @Incomplete + //if(FeatureVariations) + //{ + // KBTS_FOR(VariationIndex, 0, FeatureVariations->RecordCount) + // { + // kbts_feature_variation_pointer Variation = kbts_GetFeatureVariation(FeatureVariations, VariationIndex); + // KBTS_FOR(ConditionIndex, 0, Variation.ConditionSet->Count) + // { + // kbts_condition_1 *Condition = kbts_GetCondition(Variation.ConditionSet, ConditionIndex); + // KBTS_ASSERT(0); + // } + // } + //} + + kbts_u32 FeatureId = kbts_FeatureToId(Feature.Tag); + if(Feature.Feature->LookupIndexCount && kbts_ContainsFeature(&EnabledFeatures, FeatureId)) + { + kbts_lookup_indices LookupIndices = KBTS_ZERO; + LookupIndices.FeatureId = FeatureId; + LookupIndices.SkipFlags = kbts_SkipFlags(FeatureId, Config->Shaper); + // For Myanmar, we could try and tag glyphs depending on their Indic properties in BeginCluster, just like we do for + // Indic scripts. + // However, Harfbuzz does _not_ do this, so it seems like a bunch of work that would, at best, make us diverge from + // Harfbuzz more often. + if(Config->Shaper != KBTS_SHAPER_MYANMAR) + { + LookupIndices.GlyphFilter = (FeatureId < 32) ? (1 << FeatureId) & KBTS_GLYPH_FEATURE_MASK : 0; + } + LookupIndices.Count = Feature.Feature->LookupIndexCount; + LookupIndices.Indices = KBTS_POINTER_AFTER(kbts_u16, Feature.Feature); + State->FeatureLookupIndices[FeatureCount++] = LookupIndices; + } + } + } + State->FeatureCount = (kbts_u32)FeatureCount; +} + +typedef struct kbts_sequence_lookup_result +{ + kbts_sequence_lookup_record *Records; + kbts_un RecordCount; + kbts_un InputSequenceCountIncludingSkippedGlyphs; + + // This is specified _nowhere_ in the docs, BUT some sequence lookups have 0 records, and exist just to prevent the + // next lookups from executing. + // So, checking if we got any records is not enough to figure out whether we need to "apply" this lookup. + // We need to have an explicit bool as well. + // Sigh. + int Matched; +} kbts_sequence_lookup_result; + +typedef struct kbts_sequence_match +{ + kbts_un MatchCount; + kbts_un MatchOrSkipCount; +} kbts_sequence_match; + +static kbts_sequence_match kbts_MatchCoverageSequence(kbts_unpacked_lookup *Lookup, kbts_u32 SkipFlags, kbts_u32 SkipUnicodeFlags, + void *Base, kbts_u16 *CoverageOffsets, kbts_un CoverageCount, + kbts_glyph_array *GlyphArray, kbts_un GlyphStartIndex, kbts_un GlyphIndexIncrement) +{ + kbts_un CoverageIndex = 0; + kbts_un GlyphCounter = 0; + kbts_un GlyphIndex = GlyphStartIndex; + while((GlyphCounter < GlyphArray->Count) && (CoverageIndex < CoverageCount)) + { + kbts_glyph *Glyph = &GlyphArray->Glyphs[GlyphIndex]; + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Base, CoverageOffsets[CoverageIndex]); + + if(!kbts_SkipGlyph(Glyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + kbts_cover_glyph_result Cover = kbts_CoverGlyph(Coverage, Glyph->Id); + + if(Cover.Valid) + { + CoverageIndex += 1; + } + else + { + break; + } + } + + GlyphIndex += GlyphIndexIncrement; + GlyphCounter += 1; + } + + kbts_sequence_match Result = KBTS_ZERO; + Result.MatchCount = CoverageIndex; + Result.MatchOrSkipCount = GlyphCounter; + return Result; +} + +static int kbts_BranchlessCompareArray16(kbts_u16 *A, kbts_u16 *B, kbts_un Count) +{ + kbts_u16 DifferenceMask = 0; + KBTS_FOR(Index, 0, Count) + { + DifferenceMask |= A[Index] ^ B[Index]; + } + return (int)DifferenceMask; +} + +static kbts_sequence_lookup_result kbts_DoSequenceLookup(kbts_unpacked_lookup *Lookup, kbts_u16 *Base, kbts_cover_glyph_result Cover, + kbts_glyph_array *GlyphArray, kbts_un InputGlyphOffset, kbts_skip_flags SkipFlags, kbts_u32 SkipUnicodeFlags) +{ + KBTS_INSTRUMENT_FUNCTION_BEGIN + kbts_sequence_lookup_result Result = KBTS_ZERO; + + kbts_glyph_array BacktrackGlyphs = kbts_ClipGlyphArray(GlyphArray, InputGlyphOffset); + kbts_glyph_array InputGlyphs = kbts_GlyphSubArray(GlyphArray, InputGlyphOffset); + kbts_glyph_array FollowupGlyphs = kbts_GlyphSubArray(&InputGlyphs, 1); + + kbts_glyph *FirstGlyph = &GlyphArray->Glyphs[0]; + kbts_glyph *CurrentGlyph = &GlyphArray->Glyphs[InputGlyphOffset]; + kbts_glyph *InputGlyph = &GlyphArray->Glyphs[InputGlyphOffset + 1]; + kbts_glyph *OnePastLastGlyph = &GlyphArray->Glyphs[GlyphArray->Count]; + kbts_glyph *BacktrackGlyph = &GlyphArray->Glyphs[InputGlyphOffset - 1]; + + // Lookup types 7 and 8 are dispatch mechanisms. They do not substitute anything by themselves, they only point to + // other rules. + // Some formats have multiple rules; when that happens, we only ever match on the first one that fits. + + // We want to go to the right LookupType/SubtableFormat combination in a single jump, so we concatenate them here. + // GSUB format 5 == GPOS format 7. + // GSUB format 6 == GPOS format 8. + switch(((kbts_u32)Lookup->Type << 16) | (kbts_u32)Base[0]) + { + case 0x50001: + case 0x70001: + { + kbts_sequence_context_1 *Subst = (kbts_sequence_context_1 *)Base; + kbts_sequence_rule_set *Set = kbts_GetSequenceRuleSet(Subst, Cover.Index); + + if(Set) + { + kbts_u16 Ids[64]; // @Hardcoded + kbts_u16 GlyphOffsets[64]; + kbts_un IdCount = 0; + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_sequence_rule *Rule = kbts_GetSequenceRule(Set, RuleIndex); + kbts_u16 *InputSequence = KBTS_POINTER_AFTER(kbts_u16, Rule); + + // @Hardcoded! + KBTS_ASSERT(Rule->GlyphCount <= 64); + + while((InputGlyph < OnePastLastGlyph) && ((IdCount + 1) < Rule->GlyphCount)) + { + if(!kbts_SkipGlyph(InputGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + GlyphOffsets[IdCount] = (kbts_u16)(InputGlyph - CurrentGlyph); + Ids[IdCount++] = InputGlyph->Id; + } + + InputGlyph += 1; + } + + if(((IdCount + 1) >= Rule->GlyphCount) && + !kbts_BranchlessCompareArray16(Ids, InputSequence, Rule->GlyphCount - 1)) + { + Result.Records = (kbts_sequence_lookup_record *)(InputSequence + Rule->GlyphCount - 1); + Result.RecordCount = Rule->SequenceLookupCount; + Result.InputSequenceCountIncludingSkippedGlyphs = 1; + if(Rule->GlyphCount > 1) + { + Result.InputSequenceCountIncludingSkippedGlyphs = GlyphOffsets[Rule->GlyphCount - 2] + 1; + } + Result.Matched = 1; + + break; + } + } + } + } + break; + + case 0x50002: + case 0x70002: + { + kbts_sequence_context_2 *Subst = (kbts_sequence_context_2 *)Base; + kbts_u16 *ClassDefinitionBase = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->ClassDefOffset); + + // @Hardcoded! + kbts_u16 InputClasses[64]; + kbts_u16 InputOffsets[64]; + kbts_un InputCount = 0; + + // For class-based contexts, the coverage index is not used. + // Instead, we know which set to use based on the current glyph's class. + // From the Microsoft docs: + // The class value is used as the index into an array of offsets to ClassSequenceRuleSet tables. + kbts_u16 CurrentGlyphClass = kbts_GlyphClassFromTable(ClassDefinitionBase, CurrentGlyph->Id); + kbts_class_sequence_rule_set *Set = kbts_GetClassSequenceRuleSet(Subst, CurrentGlyphClass); + + if((CurrentGlyphClass < Subst->ClassSequenceRuleSetCount) && Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_class_sequence_rule *Rule = kbts_GetClassSequenceRule(Set, RuleIndex); + kbts_u16 *InputSequence = KBTS_POINTER_AFTER(kbts_u16, Rule); + + while((InputGlyph < OnePastLastGlyph) && ((InputCount + 1) < Rule->GlyphCount)) + { + if(!kbts_SkipGlyph(InputGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + InputOffsets[InputCount] = (kbts_u16)(InputGlyph - CurrentGlyph); + InputClasses[InputCount++] = kbts_GlyphClassFromTable(ClassDefinitionBase, InputGlyph->Id); + } + + InputGlyph += 1; + } + + if(((InputCount + 1) >= Rule->GlyphCount) && + !kbts_BranchlessCompareArray16(InputClasses, InputSequence, Rule->GlyphCount - 1)) + { + Result.Records = (kbts_sequence_lookup_record *)(InputSequence + Rule->GlyphCount - 1); + Result.RecordCount = Rule->SequenceLookupCount; + Result.InputSequenceCountIncludingSkippedGlyphs = 1; + if(Rule->GlyphCount > 1) + { + Result.InputSequenceCountIncludingSkippedGlyphs = InputOffsets[Rule->GlyphCount - 2] + 1; + } + Result.Matched = 1; + + break; + } + } + } + } + break; + + case 0x50003: + case 0x70003: + { + kbts_sequence_context_3 *Subst = (kbts_sequence_context_3 *)Base; + kbts_u16 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + + kbts_sequence_match InputMatch = kbts_MatchCoverageSequence(Lookup, SkipFlags, SkipUnicodeFlags, Subst, CoverageOffsets, Subst->GlyphCount, &InputGlyphs, 0, 1); + + if(InputMatch.MatchCount == Subst->GlyphCount) + { + Result.Records = (kbts_sequence_lookup_record *)(CoverageOffsets + Subst->GlyphCount); + Result.RecordCount = Subst->SequenceLookupCount; + Result.InputSequenceCountIncludingSkippedGlyphs = InputMatch.MatchOrSkipCount; + Result.Matched = 1; + } + } + break; + + case 0x60001: + case 0x80001: + { + kbts_chained_sequence_context_1 *Subst = (kbts_chained_sequence_context_1 *)Base; + kbts_chained_sequence_rule_set *Set = kbts_GetChainedSequenceRuleSet(Subst, Cover.Index); + + if(Set) + { + // @Hardcoded! + kbts_u16 BacktrackIds[64]; + kbts_u16 InputIds[64]; + kbts_u16 InputOffsets[64]; + kbts_un BacktrackCount = 0; + kbts_un InputCount = 0; + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + while((BacktrackGlyph >= FirstGlyph) && (BacktrackCount < Unpacked.BacktrackCount)) + { + if(!kbts_SkipGlyph(BacktrackGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + BacktrackIds[BacktrackCount++] = BacktrackGlyph->Id; + } + BacktrackGlyph -= 1; + } + + kbts_un TotalInputGlyphsRequired = Unpacked.InputCount - 1 + Unpacked.LookaheadCount; + while((InputGlyph < OnePastLastGlyph) && (InputCount < TotalInputGlyphsRequired)) + { + if(!kbts_SkipGlyph(InputGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + InputOffsets[InputCount] = (kbts_u16)(InputGlyph - CurrentGlyph); + InputIds[InputCount++] = InputGlyph->Id; + } + InputGlyph += 1; + } + + if((BacktrackCount >= Unpacked.BacktrackCount) && (InputCount >= TotalInputGlyphsRequired) && + !kbts_BranchlessCompareArray16(BacktrackIds, Unpacked.Backtrack, Unpacked.BacktrackCount) && + !kbts_BranchlessCompareArray16(InputIds, Unpacked.Input, Unpacked.InputCount - 1) && + !kbts_BranchlessCompareArray16(InputIds + Unpacked.InputCount - 1, Unpacked.Lookahead, Unpacked.LookaheadCount)) + { + Result.Records = Unpacked.Records; + Result.RecordCount = Unpacked.RecordCount; + Result.InputSequenceCountIncludingSkippedGlyphs = 1; + if(Unpacked.InputCount > 1) + { + Result.InputSequenceCountIncludingSkippedGlyphs = InputOffsets[Unpacked.InputCount - 2] + 1; + } + Result.Matched = 1; + + break; + } + } + } + } + break; + + case 0x60002: + case 0x80002: + { + kbts_chained_sequence_context_2 *Subst = (kbts_chained_sequence_context_2 *)Base; + kbts_u16 *BacktrackClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->BacktrackClassDefOffset); + kbts_u16 *InputClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->InputClassDefOffset); + kbts_u16 *LookaheadClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->LookaheadClassDefOffset); + + // @Incomplete: Do this with all sequence types! + + // @Hardcoded: Pre-alloc this using LookupInfo! + kbts_u16 BacktrackClasses[64]; + kbts_u16 InputClasses[64]; + kbts_u16 InputClassOffsets[64]; + kbts_u16 LookaheadClasses[64]; + kbts_un BacktrackClassCount = 0; + kbts_un InputClassCount = 0; + + // Just like lookup 5.2, we use the current glyph class to figure out which set to look up. + // From the Microsoft docs: + // If found, the client then searches in the class definition table to find the class value assigned to the + // current glyph. The class value is used as the index into an array of offsets to ChainedClassSequenceRuleSet + // tables. + // + kbts_u16 CurrentGlyphClass = kbts_GlyphClassFromTable(InputClassDefinition, CurrentGlyph->Id); + kbts_chained_sequence_rule_set *Set = kbts_GetChainedClassSequenceRuleSet(Subst, CurrentGlyphClass); + // If the glyph was contained in the coverage table, then it should have a valid class. + // Nevertheless, one Harfbuzz test font did not remove out-of-bounds glyph classes from the class definition + // table here, so we double-check it here. + // (It is also possible for a font to want to reuse the same class definition table across multiple lookups, + // in which case ignoring these classes becomes a feature.) + if((CurrentGlyphClass < Subst->ChainedClassSequenceRuleSetCount) && Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedClassSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + // @Hardcoded + KBTS_ASSERT(Unpacked.BacktrackCount <= 64); + KBTS_ASSERT(Unpacked.InputCount <= 64); + KBTS_ASSERT(Unpacked.LookaheadCount <= 64); + + while((BacktrackGlyph >= FirstGlyph) && (BacktrackClassCount < Unpacked.BacktrackCount)) + { + if(!kbts_SkipGlyph(BacktrackGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + kbts_u16 Class = kbts_GlyphClassFromTable(BacktrackClassDefinition, BacktrackGlyph->Id); + BacktrackClasses[BacktrackClassCount++] = Class; + } + + BacktrackGlyph -= 1; + } + + kbts_un InputClassCountRequired = Unpacked.InputCount - 1 + Unpacked.LookaheadCount; + while((InputGlyph < OnePastLastGlyph) && (InputClassCount < InputClassCountRequired)) + { + if(!kbts_SkipGlyph(InputGlyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + kbts_u16 InputClass = kbts_GlyphClassFromTable(InputClassDefinition, InputGlyph->Id); + // In many cases, the font designer just wants to match "a set of glyphs" forward, + // and it doesn't matter whether those glyphs are in the input sequence or part of the lookahead. + // This happens often enough that we care to special-case it. + kbts_u16 LookaheadClass = InputClass; + if(LookaheadClassDefinition != InputClassDefinition) + { + LookaheadClass = kbts_GlyphClassFromTable(LookaheadClassDefinition, InputGlyph->Id); + } + + InputClassOffsets[InputClassCount] = (kbts_u16)(InputGlyph - CurrentGlyph); + InputClasses[InputClassCount] = InputClass; + LookaheadClasses[InputClassCount] = LookaheadClass; + + InputClassCount += 1; + } + + InputGlyph += 1; + } + + if((BacktrackClassCount >= Unpacked.BacktrackCount) && + (InputClassCount >= InputClassCountRequired) && + !kbts_BranchlessCompareArray16(BacktrackClasses, Unpacked.Backtrack, Unpacked.BacktrackCount) && + !kbts_BranchlessCompareArray16(InputClasses, Unpacked.Input, Unpacked.InputCount - 1) && + !kbts_BranchlessCompareArray16(LookaheadClasses + Unpacked.InputCount - 1, Unpacked.Lookahead, Unpacked.LookaheadCount)) + { + Result.Records = Unpacked.Records; + Result.RecordCount = Unpacked.RecordCount; + Result.InputSequenceCountIncludingSkippedGlyphs = 1; + if(Unpacked.InputCount > 1) + { + Result.InputSequenceCountIncludingSkippedGlyphs = InputClassOffsets[Unpacked.InputCount - 2] + 1; + } + Result.Matched = 1; + + break; + } + } + } + } + break; + + case 0x60003: + case 0x80003: + { + kbts_chained_sequence_context_3 *Subst = (kbts_chained_sequence_context_3 *)Base; + kbts_unpacked_chained_sequence_context_3 Unpacked = kbts_UnpackChainedSequenceContext3(Subst, 0); + + // Since chained sequence contexts roll the coverage for the first glyph into an array, you'd think that + // the matching logic for the first glyph would be the same as for any other glyph in that array. + // You'd be wrong! + // The first glyph does _not_ have to pass glyph filtering logic. It just has to pass the coverage test. + // Every other input glyph still does, though. + kbts_cover_glyph_result CurrentCover = KBTS_ZERO; + CurrentCover.Valid = !Unpacked.InputCount || kbts_GlyphPassesLookupFilter(InputGlyphs.Glyphs, Lookup); + if(Unpacked.InputCount) + { + kbts_coverage *CurrentCoverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.InputCoverageOffsets[0]); + CurrentCover = kbts_CoverGlyph(CurrentCoverage, InputGlyphs.Glyphs[0].Id); + } + + if(CurrentCover.Valid) + { + kbts_sequence_match BacktrackMatch = kbts_MatchCoverageSequence(Lookup, SkipFlags, SkipUnicodeFlags, Subst, Unpacked.BacktrackCoverageOffsets, Unpacked.BacktrackCount, &BacktrackGlyphs, BacktrackGlyphs.Count - 1, -1); + kbts_sequence_match InputMatch = kbts_MatchCoverageSequence(Lookup, SkipFlags, SkipUnicodeFlags, Subst, Unpacked.InputCoverageOffsets + 1, Unpacked.InputCount - 1, &FollowupGlyphs, 0, 1); + kbts_un MatchingInputGlyphCount = 1 + InputMatch.MatchCount; + kbts_un MatchedOrSkippedInputGlyphCount = 1 + InputMatch.MatchOrSkipCount; + kbts_glyph_array LookaheadGlyphs = kbts_GlyphSubArray(&InputGlyphs, MatchedOrSkippedInputGlyphCount); + kbts_sequence_match LookaheadMatch = kbts_MatchCoverageSequence(Lookup, SkipFlags, SkipUnicodeFlags, Subst, Unpacked.LookaheadCoverageOffsets, Unpacked.LookaheadCount, &LookaheadGlyphs, 0, 1); + + if((BacktrackMatch.MatchCount == Unpacked.BacktrackCount) && ((MatchingInputGlyphCount) == Unpacked.InputCount) && (LookaheadMatch.MatchCount == Unpacked.LookaheadCount)) + { + Result.Records = Unpacked.Records; + Result.RecordCount = Unpacked.RecordCount; + Result.InputSequenceCountIncludingSkippedGlyphs = MatchedOrSkippedInputGlyphCount; + Result.Matched = 1; + + break; + } + } + } + break; + } + + KBTS_INSTRUMENT_END + return Result; +} + +static void kbts_ApplyValueRecord(kbts_glyph *Glyph, kbts_unpacked_value_record *Unpacked) +{ + Glyph->OffsetX += Unpacked->PlacementX; + Glyph->OffsetY += Unpacked->PlacementY; + + Glyph->AdvanceX += Unpacked->AdvanceX; + Glyph->AdvanceY += Unpacked->AdvanceY; +} + +typedef struct kbts_indexed_glyph +{ + kbts_glyph *Glyph; + kbts_un Index; +} kbts_indexed_glyph; + +static int kbts_NextGlyph(kbts_unpacked_lookup *Lookup, kbts_glyph *InputGlyphs, kbts_un CurrentIndex, kbts_un InputGlyphCount, kbts_skip_flags SkipFlags, kbts_u32 SkipUnicodeFlags, kbts_indexed_glyph *IndexedGlyph) +{ + kbts_glyph *MatchingGlyph = 0; + kbts_un GlyphIndex = CurrentIndex; + + while(GlyphIndex < InputGlyphCount) + { + kbts_glyph *Glyph = &InputGlyphs[GlyphIndex]; + + if(!kbts_SkipGlyph(Glyph, Lookup, SkipFlags, SkipUnicodeFlags)) + { + MatchingGlyph = Glyph; + break; + } + else + { + GlyphIndex += 1; + } + } + + IndexedGlyph->Glyph = MatchingGlyph; + IndexedGlyph->Index = GlyphIndex; + return MatchingGlyph != 0; +} + +static void kbts_AttachGlyph(kbts_glyph_array *GlyphArray, kbts_glyph *Parent, kbts_glyph *Child, kbts_s32 X, kbts_s32 Y) +{ + kbts_s32 DeltaOffsetX = X - Child->OffsetX; + kbts_s32 DeltaOffsetY = Y - Child->OffsetY; + + Child->OffsetX = X; + Child->OffsetY = Y; + Child->Flags |= KBTS_GLYPH_FLAG_USED_IN_GPOS; + Child->AttachGlyphIndexPlusOne = (kbts_u16)(Parent - GlyphArray->Glyphs + 1); + + Parent->Flags |= KBTS_GLYPH_FLAG_USED_IN_GPOS; + + for(kbts_glyph *MiddleGlyph = Parent + 1; MiddleGlyph < Child; ++MiddleGlyph) + { + MiddleGlyph->Flags |= KBTS_GLYPH_FLAG_NO_BREAK; + } + + // @Speed: Fuck this. + // Attachments can happen in anti-topological order, so we have to fix them up here. + // We should store glyph parent/child indices instead of traversing all glyphs. + kbts_un ChildIndex = (kbts_un)(Child - GlyphArray->Glyphs); + KBTS_FOR(PostGlyphIndex, ChildIndex + 1, GlyphArray->Count) + { + kbts_glyph *Glyph = &GlyphArray->Glyphs[PostGlyphIndex]; + + if(Glyph->AttachGlyphIndexPlusOne == (ChildIndex + 1)) + { + Glyph->OffsetX += DeltaOffsetX; + Glyph->OffsetY += DeltaOffsetY; + } + } +} + +typedef struct kbts_do_single_adjustment_result +{ + kbts_un PositionedGlyphCount; + kbts_u32 PerformedAdjustment; +} kbts_do_single_adjustment_result; +static kbts_do_single_adjustment_result kbts_DoSingleAdjustment(kbts_shape_config *Config, kbts_lookup_list *LookupList, kbts_un LookupIndex, kbts_un SubtableIndex, kbts_unpacked_lookup *Lookup, kbts_u16 *Base, + kbts_glyph_array *GlyphArray, kbts_un CurrentGlyphIndex, kbts_skip_flags RequestedSkipFlags) +{ + KBTS_INSTRUMENT_FUNCTION_BEGIN + kbts_unicode_flags SkipUnicodeFlags = KBTS_UNICODE_FLAG_DEFAULT_IGNORABLE; + kbts_skip_flags RegularSkipFlags = KBTS_SKIP_FLAGS_GPOS_REGULAR(RequestedSkipFlags); + kbts_skip_flags SequenceSkipFlags = KBTS_SKIP_FLAGS_GPOS_SEQUENCE(RequestedSkipFlags); + kbts_do_single_adjustment_result Result = KBTS_ZERO; + kbts_glyph *CurrentGlyph = &GlyphArray->Glyphs[CurrentGlyphIndex]; + + if(kbts_GlyphsIncludedInLookupSubtable(Config->Font, 1, Lookup, LookupIndex, SubtableIndex, GlyphArray, CurrentGlyphIndex, SequenceSkipFlags, SkipUnicodeFlags)) + { + Result.PerformedAdjustment = 1; + + // CAREFUL: We want kbts_unpacked_lookup to be a useful bag-of-arguments type, but, for extension + // lookups, each subtable may specify its own lookup type, so we save it here and restore it at + // the end of this function. + kbts_u16 OriginalLookupType = Lookup->Type; + + while(Lookup->Type == 9) + { + kbts_extension *Extension = (kbts_extension *)Base; + + Lookup->Type = Extension->LookupType; + Base = KBTS_POINTER_OFFSET(kbts_u16, Extension, Extension->Offset); + } + + kbts_glyph *InputGlyphs = GlyphArray->Glyphs + CurrentGlyphIndex; + kbts_un InputGlyphCount = GlyphArray->Count - CurrentGlyphIndex; + + kbts_cover_glyph_result Cover = KBTS_ZERO; + Cover.Valid = kbts_GlyphPassesLookupFilter(CurrentGlyph, Lookup); + kbts_coverage *Coverage = 0; + if(Cover.Valid && kbts_GposLookupBeginsWithCoverage(Lookup->Type, Base[0])) + { + kbts_u16 *CoverageOffset = Base + 1; + Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Base, *CoverageOffset); + Cover = kbts_CoverGlyph(Coverage, CurrentGlyph->Id); + } + + if(Cover.Valid) + { + switch(Lookup->Type) + { + case 1: + { + kbts_unpacked_value_record Unpacked = KBTS_ZERO; + + if(Base[0] == 1) + { + kbts_single_adjustment_1 *Adjust = (kbts_single_adjustment_1 *)Base; + + Unpacked = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat, KBTS_POINTER_AFTER(kbts_u16, Adjust)); + } + else if(Base[0] == 2) + { + kbts_single_adjustment_2 *Adjust = (kbts_single_adjustment_2 *)Base; + + kbts_un RecordSize = kbts_PopCount32(Adjust->ValueFormat); + kbts_u16 *Records = KBTS_POINTER_AFTER(kbts_u16, Adjust); + kbts_u16 *Record = Records + RecordSize * Cover.Index; + + Unpacked = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat, Record); + } + + kbts_ApplyValueRecord(CurrentGlyph, &Unpacked); + CurrentGlyph->Flags |= KBTS_GLYPH_FLAG_USED_IN_GPOS; + + Result.PositionedGlyphCount = 1; + } + break; + + case 2: + { + kbts_indexed_glyph NextGlyph; + if(kbts_NextGlyph(Lookup, InputGlyphs, 1, InputGlyphCount, RegularSkipFlags, SkipUnicodeFlags, &NextGlyph)) + { + kbts_u32 NextGlyphId = NextGlyph.Glyph->Id; + + kbts_unpacked_value_record Unpacked1 = KBTS_ZERO; + kbts_unpacked_value_record Unpacked2 = KBTS_ZERO; + + if(Base[0] == 1) + { + kbts_pair_adjustment_1 *Adjust = (kbts_pair_adjustment_1 *)Base; + + kbts_un Size1 = kbts_PopCount32(Adjust->ValueFormat1); + kbts_un Size2 = kbts_PopCount32(Adjust->ValueFormat2); + + kbts_u16 *SetOffsets = KBTS_POINTER_AFTER(kbts_u16, Adjust); + kbts_pair_set *Set = KBTS_POINTER_OFFSET(kbts_pair_set, Adjust, SetOffsets[Cover.Index]); + + kbts_un PairRecordSize = Size1 + Size2 + 1; // + 1 because each pair stores the next glyph ID. + kbts_pair_value_record *PairRecords = KBTS_POINTER_AFTER(kbts_pair_value_record, Set); + KBTS_FOR(PairIndex, 0, Set->Count) + { + kbts_pair_value_record *PairRecord = PairRecords + PairRecordSize * PairIndex; + + if(PairRecord->SecondGlyph == NextGlyphId) + { + kbts_u16 *Records = KBTS_POINTER_AFTER(kbts_u16, PairRecord); + + Unpacked1 = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat1, Records); + Records += Unpacked1.Size; + Unpacked2 = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat2, Records); + } + } + } + else if(Base[0] == 2) + { + kbts_pair_adjustment_2 *Adjust = (kbts_pair_adjustment_2 *)Base; + kbts_u16 *ClassDef1 = KBTS_POINTER_OFFSET(kbts_u16, Adjust, Adjust->ClassDefinition1Offset); + kbts_u16 *ClassDef2 = KBTS_POINTER_OFFSET(kbts_u16, Adjust, Adjust->ClassDefinition2Offset); + + kbts_un Size1 = kbts_PopCount32(Adjust->ValueFormat1); + kbts_un Size2 = kbts_PopCount32(Adjust->ValueFormat2); + kbts_un PairRecordSize = Size1 + Size2; + kbts_u16 *PairRecords = KBTS_POINTER_AFTER(kbts_u16, Adjust); + + kbts_u32 Class1 = kbts_GlyphClassFromTable(ClassDef1, CurrentGlyph->Id); + kbts_u32 Class2 = kbts_GlyphClassFromTable(ClassDef2, NextGlyphId); + + kbts_u16 *PairRecord = PairRecords + Class1 * PairRecordSize * Adjust->Class2Count + Class2 * PairRecordSize; + + Unpacked1 = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat1, PairRecord); + PairRecord += Size1; + + Unpacked2 = kbts_UnpackValueRecord(Adjust, Adjust->ValueFormat2, PairRecord); + PairRecord += Size2; + } + + kbts_ApplyValueRecord(CurrentGlyph, &Unpacked1); + CurrentGlyph->Flags |= KBTS_GLYPH_FLAG_USED_IN_GPOS; + + kbts_ApplyValueRecord(&InputGlyphs[NextGlyph.Index], &Unpacked2); + NextGlyph.Glyph->Flags |= KBTS_GLYPH_FLAG_USED_IN_GPOS; + + Result.PositionedGlyphCount = 2; + if(!Unpacked2.Size) + { + Result.PositionedGlyphCount = 1; + } + } + } + break; + + // All three types of attachment (cursive, mark-to-base, mark-to-ligature) look backward instead of forward. + case 3: + { + kbts_cursive_attachment *Adjust = (kbts_cursive_attachment *)Base; + kbts_entry_exit *EntryExits = KBTS_POINTER_AFTER(kbts_entry_exit, Adjust); + + kbts_glyph *Prev = 0; + for(kbts_un PrevIndex = CurrentGlyphIndex; PrevIndex > 0; --PrevIndex) + { + kbts_glyph *PrevGlyph = &GlyphArray->Glyphs[PrevIndex - 1]; + if(!kbts_SkipGlyph(PrevGlyph, Lookup, RegularSkipFlags, SkipUnicodeFlags)) + { + Prev = PrevGlyph; + break; + } + } + + if(Prev) + { + // For two cursive glyphs to be aligned, they both need to be defined by the same cursive attachment table. + kbts_cover_glyph_result PrevCover = kbts_CoverGlyph(Coverage, Prev->Id); + + if(PrevCover.Valid) + { + // Get anchor points for both glyphs. + kbts_entry_exit *PrevEntryExit = &EntryExits[PrevCover.Index]; + kbts_entry_exit *EntryExit = &EntryExits[Cover.Index]; + + if(PrevEntryExit->ExitAnchorOffset && EntryExit->EntryAnchorOffset) + { + kbts_anchor *PrevExitAnchor = KBTS_POINTER_OFFSET(kbts_anchor, Adjust, PrevEntryExit->ExitAnchorOffset); + kbts_anchor *EntryAnchor = KBTS_POINTER_OFFSET(kbts_anchor, Adjust, EntryExit->EntryAnchorOffset); + kbts_s32 Anchor0X = PrevExitAnchor->X; + kbts_s32 Anchor0Y = PrevExitAnchor->Y; + kbts_s32 Anchor1X = EntryAnchor->X; + kbts_s32 Anchor1Y = EntryAnchor->Y; + kbts_s32 Advance0X = Prev->AdvanceX; + kbts_s32 Advance1X = CurrentGlyph->AdvanceX; + kbts_s32 Offset0X = Prev->OffsetX; + kbts_s32 Offset0Y = Prev->OffsetY; + kbts_s32 Offset1X = CurrentGlyph->OffsetX; + kbts_s32 Offset1Y = CurrentGlyph->OffsetY; + + // Cursive positioning is made up of two parts. + // The first part is glyph-to-glyph alignment, which depends on the text direction. + // Here, we are only concerned with making the relative placements of the glyphs correct, + // insofar as they follow the specified anchor positions. + // + // The OpenType spec makes no attempt to describe how the two glyphs should be aligned, mathematically + // speaking. + // + // This is all we get: + // + // "To position glyphs using the CursivePosFormat1 subtable, a text-processing client aligns the exit + // anchor point of a glyph with the entry anchor point of the following glyph." + // + // In practice, we reproduce harfbuzz's behavior here, which is: + // - Glyph1.Offset.X is unaffected + // - Glyph1.Advance.X = Glyph1.Offset.X + Glyph1.Anchor.X, aka. the _actual position of its anchor_ + // - Glyph2.Offset.X = -Glyph2.Anchor.X + // - Glyph2.Offset.Y = Glyph1.Anchor.Y - Glyph2.Anchor.Y + // - Glyph2.Advance.X -= Glyph2.Anchor.X + // + // (...where "X" here just means "the main direction". In top-to-bottom or bottom-to-top contexts, that + // would be the Y coordinate, but we do not support those yet.) + // + // So, instead of aligning everything with offsets, we use Advance to align _the rest of the string_ + // horizontally with the first glyph, and not just the next glyph. + // + // It might seem dumb to modify both Glyph2.Offset _and_ Glyph2.Advance, because, when the glyphs are next + // to one another, this is equivalent to modifying Glyph1.Advance. However, due to lookup flag nonsense, + // there may be some glyphs between Glyph1 and Glyph2, and, _apparently_, it is fine to adjust them by the + // position of Glyph1's anchor point, and it is not fine to adjust them by the position of Glyph2's anchor + // point. + // + // This Advance tweak seems like it would be wrong, because any marks attached to Glyph1 will then have + // invalid positions. The hope is that this does not matter in practice, because 'mark' is applied after + // 'curs', and font designers are expected to know that and to know never to apply mark attachments + // before cursive positioning, I guess. + if(!kbts_ShaperRtl(Config->Shaper)) + { + Advance0X = Offset0X + Anchor0X; + kbts_s32 Dx = -Anchor1X - Offset1X; + Advance1X += Dx; + Offset1X += Dx; + } + else + { + kbts_s32 Dx = -Anchor0X - Offset0X; + Advance0X += Dx; + Offset0X += Dx; + Advance1X = Offset1X + Anchor1X; + } + + Prev->AdvanceX = Advance0X; + Prev->OffsetX = Offset0X; + Prev->Flags |= (KBTS_GLYPH_FLAG_CURSIVE | KBTS_GLYPH_FLAG_USED_IN_GPOS | KBTS_GLYPH_FLAG_NO_BREAK); + CurrentGlyph->AdvanceX = Advance1X; + CurrentGlyph->OffsetX = Offset1X; + CurrentGlyph->Flags |= (KBTS_GLYPH_FLAG_CURSIVE | KBTS_GLYPH_FLAG_USED_IN_GPOS); + + for(kbts_glyph *CursiveGlyph = Prev + 1; CursiveGlyph < CurrentGlyph; ++CursiveGlyph) + { + CursiveGlyph->Flags |= KBTS_GLYPH_FLAG_NO_BREAK; + } + + // The second part is aligning the newly-formed cursive cluster to the "baseline". It is trickier than you'd expect. + // + // When applying cursive attachments, Glyph1 (RIGHT_TO_LEFT=0) or Glyph2 (RIGHT_TO_LEFT=1) is treated as being + // "on the baseline" and its Y coordinate is used as the reference Y coordinate for the entire cursive glyph + // cluster that has been formed so far. + // This means that, anytime we apply a cursive attachment, we have to offset _all_ of the cursive glyphs to the + // left (RIGHT_TO_LEFT=0) or to the right (RIGHT_TO_LEFT=1) of it. + // This is obviously O(n^2), and @Speed: it might be worthwhile to record cursive offsets as we go, and only resolve + // them when we actually need them, i.e. when applying a non-cursive lookup or, at the latest, when we are done with + // positioning. + // + // The glyph being attached is set at a hard relative offset from the reference glyph. Its previous Y coordinate only + // matters insofar as we need to align every other cursive glyph in its direction. + + kbts_s32 CursiveDy = 0; + kbts_un CursiveStartIndex = CurrentGlyphIndex; + kbts_un DIndex = 1; + + if(!(Lookup->Flags & KBTS_LOOKUP_FLAG_RIGHT_TO_LEFT)) + { + kbts_s32 NewOffset1Y = Offset0Y + Anchor0Y - Anchor1Y; + CursiveDy = NewOffset1Y - Offset1Y; + } + else + { + kbts_s32 NewOffset0Y = Offset1Y + Anchor1Y - Anchor0Y; + CursiveDy = NewOffset0Y - Offset0Y; + DIndex = -1; + CursiveStartIndex = (kbts_un)(Prev - GlyphArray->Glyphs); + } + + for(kbts_un CursiveGlyphIndex = CursiveStartIndex; CursiveGlyphIndex < GlyphArray->Count; CursiveGlyphIndex += DIndex) + { + kbts_glyph *CursiveGlyph = &GlyphArray->Glyphs[CursiveGlyphIndex]; + + if(CursiveGlyph->Flags & KBTS_GLYPH_FLAG_CURSIVE) + { + CursiveGlyph->OffsetY += CursiveDy; + } + else if(CursiveGlyph->AdvanceX | CursiveGlyph->AdvanceY) // Ignore marks. + { + break; + } + } + + Result.PositionedGlyphCount = 1; + } + } + } + } + break; + + case 4: + case 6: + { + kbts_mark_to_base_attachment *Adjust = (kbts_mark_to_base_attachment *)Base; + + // We want to know which glyph to attach to, and how far that glyph is from us. + // To do that, we add up all advances between it and us. + // There is a slight wrinkle here: most shapers end up zeroing mark advances at the _end_ + // of the shaping process, which would retroactively make a naive advance accumulation wrong. + // We have to take that into account here, and only accumulate mark advances for shapers that + // don't do that zeroing at the end (either because they do it at the beginning of GPOS, or + // because they don't do it at all). + int CountMarkAdvances = !kbts_ShaperClearsMarkAdvancesInPostGposFixup(Config->Shaper); + kbts_s32 AdvanceSinceBaseX = 0; + kbts_s32 AdvanceSinceBaseY = 0; + kbts_u32 BaseClasses = Lookup->Type == 6 ? (1 << KBTS_GLYPH_CLASS_MARK) : (1 | (1 << KBTS_GLYPH_CLASS_BASE) | (1 << KBTS_GLYPH_CLASS_LIGATURE) | (1 << KBTS_GLYPH_CLASS_COMPONENT)); + kbts_glyph *BaseGlyph = 0; + for(kbts_un PrevGlyphIndex = CurrentGlyphIndex; PrevGlyphIndex; --PrevGlyphIndex) + { + kbts_glyph *PrevGlyph = &GlyphArray->Glyphs[PrevGlyphIndex - 1]; + + if(CountMarkAdvances || (PrevGlyph->Classes.Class != KBTS_GLYPH_CLASS_MARK)) + { + AdvanceSinceBaseX += PrevGlyph->AdvanceX; + AdvanceSinceBaseY += PrevGlyph->AdvanceY; + } + + if(!kbts_SkipGlyph(PrevGlyph, Lookup, RegularSkipFlags, SkipUnicodeFlags)) + { + if((1 << PrevGlyph->Classes.Class) & BaseClasses) + { + BaseGlyph = PrevGlyph; + break; + } + else if(Lookup->Type == 6) + { + // Unskipped non-marks block mark attachments. + break; + } + } + } + + if(BaseGlyph) + { + int Ok = (Lookup->Type == 4) || // This is a mark-to-base attachment + ((BaseGlyph->LigatureUid == CurrentGlyph->LigatureUid) && (BaseGlyph->LigatureComponentIndexPlusOne == CurrentGlyph->LigatureComponentIndexPlusOne)) || // This is a mark-to-mark attachment, and both marks belong to the same ligature component + ((BaseGlyph->Flags | CurrentGlyph->Flags) & KBTS_GLYPH_FLAG_LIGATURE); // This is a mark-to-mark attachment, and either mark was created by a ligature substitution + if(Ok) + { + kbts_cover_glyph_result BaseCover = kbts_CoverGlyph(KBTS_POINTER_OFFSET(kbts_coverage, Adjust, Adjust->BaseCoverageOffset), BaseGlyph->Id); + + if(BaseCover.Valid) + { + kbts_base_array *BaseArray = KBTS_POINTER_OFFSET(kbts_base_array, Adjust, Adjust->BaseArrayOffset); + kbts_u16 *BaseAnchorOffsets = KBTS_POINTER_AFTER(kbts_u16, BaseArray) + BaseCover.Index * Adjust->MarkClassCount; + kbts_mark_info MarkInfo = kbts_GetMarkInfo(Adjust, Adjust->MarkArrayOffset, Cover.Index); + + kbts_u16 BaseAnchorOffset = BaseAnchorOffsets[MarkInfo.Record->Class]; + if(BaseAnchorOffset) + { + kbts_anchor *BaseAnchor = KBTS_POINTER_OFFSET(kbts_anchor, BaseArray, BaseAnchorOffset); + + /* From the Microsoft docs: + When a mark is combined with a given base, the mark placement is adjusted so that the mark anchor is + aligned with the base anchor for the applicable mark class. Placement of the base glyph and advances of + both glyphs are not affected. + */ + + kbts_s32 NewOffsetX = BaseGlyph->OffsetX - AdvanceSinceBaseX + (BaseAnchor->X - MarkInfo.Anchor->X); + kbts_s32 NewOffsetY = BaseGlyph->OffsetY - AdvanceSinceBaseY + (BaseAnchor->Y - MarkInfo.Anchor->Y); + + kbts_AttachGlyph(GlyphArray, BaseGlyph, CurrentGlyph, NewOffsetX, NewOffsetY); + + Result.PositionedGlyphCount = 1; + } + } + } + } + } + break; + + case 5: + { + kbts_mark_to_ligature_attachment *Adjust = (kbts_mark_to_ligature_attachment *)Base; + + kbts_s32 AdvanceSinceBaseX = 0; + kbts_s32 AdvanceSinceBaseY = 0; + kbts_u32 BaseClasses = (1 | (1 << KBTS_GLYPH_CLASS_BASE) | (1 << KBTS_GLYPH_CLASS_LIGATURE) | (1 << KBTS_GLYPH_CLASS_COMPONENT)); + kbts_glyph *LigatureGlyph = 0; + for(kbts_un PrevGlyphIndex = CurrentGlyphIndex; PrevGlyphIndex; --PrevGlyphIndex) + { + kbts_glyph *PrevGlyph = &GlyphArray->Glyphs[PrevGlyphIndex - 1]; + AdvanceSinceBaseX += PrevGlyph->AdvanceX; + AdvanceSinceBaseY += PrevGlyph->AdvanceY; + if(!kbts_SkipGlyph(PrevGlyph, Lookup, RegularSkipFlags, SkipUnicodeFlags) && ((1 << PrevGlyph->Classes.Class) & BaseClasses)) + { + LigatureGlyph = PrevGlyph; + break; + } + } + + if(LigatureGlyph) + { + kbts_cover_glyph_result LigatureCover = kbts_CoverGlyph(KBTS_POINTER_OFFSET(kbts_coverage, Adjust, Adjust->LigatureCoverageOffset), + LigatureGlyph->Id); + if(LigatureCover.Valid) + { + kbts_ligature_array *LigatureArray = KBTS_POINTER_OFFSET(kbts_ligature_array, Adjust, Adjust->LigatureArrayOffset); + kbts_ligature_attach *LigatureAttach = kbts_GetLigatureAttach(LigatureArray, LigatureCover.Index); + kbts_mark_info MarkInfo = kbts_GetMarkInfo(Adjust, Adjust->MarkArrayOffset, Cover.Index); + kbts_un LigatureComponentIndex = CurrentGlyph->LigatureComponentIndexPlusOne; + + if(CurrentGlyph->LigatureUid != LigatureGlyph->Uid) + { + // If the mark is not yet attached to the ligature, attach it now. + // Apparently, in this case, the mark should be considered part of the _last_ component of the ligature. + LigatureComponentIndex = LigatureAttach->Count; + } + + if(CurrentGlyph->LigatureComponentIndexPlusOne <= LigatureAttach->Count) + { + kbts_un AnchorIndex = LigatureComponentIndex; + if(AnchorIndex) + { + AnchorIndex -= 1; + } + else + { + AnchorIndex = LigatureAttach->Count - 1; + } + + kbts_anchor *LigatureAnchor = kbts_GetLigatureAttachAnchor(Adjust, LigatureAttach, MarkInfo.Record->Class, AnchorIndex); + + kbts_s32 NewOffsetX = LigatureGlyph->OffsetX - AdvanceSinceBaseX + (LigatureAnchor->X - MarkInfo.Anchor->X); + kbts_s32 NewOffsetY = LigatureGlyph->OffsetY - AdvanceSinceBaseY + (LigatureAnchor->Y - MarkInfo.Anchor->Y); + + kbts_AttachGlyph(GlyphArray, LigatureGlyph, CurrentGlyph, NewOffsetX, NewOffsetY); + + CurrentGlyph->LigatureComponentIndexPlusOne = (kbts_u16)LigatureComponentIndex; + CurrentGlyph->LigatureUid = LigatureGlyph->Uid; + // I'm not sure why, but Harfbuzz only clears this in mark-to-ligature substitutions, and not in mark-to-base or + // mark-to-mark. + CurrentGlyph->AdvanceX = 0; + CurrentGlyph->AdvanceY = 0; + + for(kbts_glyph *MiddleGlyph = LigatureGlyph + 1; MiddleGlyph < CurrentGlyph; ++MiddleGlyph) + { + MiddleGlyph->Flags |= KBTS_GLYPH_FLAG_NO_BREAK; + } + + Result.PositionedGlyphCount = 1; + } + } + } + } + break; + + case 7: + case 8: + { + kbts_sequence_lookup_result SequenceLookup = kbts_DoSequenceLookup(Lookup, Base, Cover, GlyphArray, CurrentGlyphIndex, SequenceSkipFlags, SkipUnicodeFlags); + if(SequenceLookup.RecordCount) + { + KBTS_FOR(RecordIndex, 0, SequenceLookup.RecordCount) + { + kbts_sequence_lookup_record *Record = &SequenceLookup.Records[RecordIndex]; + kbts_lookup *PackedRecordLookup = kbts_GetLookup(LookupList, Record->LookupListIndex); + kbts_unpacked_lookup RecordLookup = kbts_UnpackLookup(Config->Font->Gdef, PackedRecordLookup); + + kbts_un NestedCurrentGlyphIndex = CurrentGlyphIndex; + { // Figure out where in the input sequence we need to apply the lookup. + kbts_un SequenceIndex = 0; + KBTS_FOR(InputGlyphIndex, 0, InputGlyphCount) + { + kbts_un NestedIndex = CurrentGlyphIndex + InputGlyphIndex; + kbts_glyph *Glyph = &GlyphArray->Glyphs[NestedIndex]; + + if(!kbts_SkipGlyph(Glyph, Lookup, SequenceSkipFlags, SkipUnicodeFlags)) + { + if(SequenceIndex == Record->SequenceIndex) + { + NestedCurrentGlyphIndex = NestedIndex; + + break; + } + + SequenceIndex += 1; + } + } + } + + KBTS_FOR(NestedSubtableIndex, 0, RecordLookup.SubtableCount) + { + kbts_u16 *NestedBase = KBTS_POINTER_OFFSET(kbts_u16, PackedRecordLookup, RecordLookup.SubtableOffsets[NestedSubtableIndex]); + + kbts_DoSingleAdjustment(Config, LookupList, Record->LookupListIndex, NestedSubtableIndex, &RecordLookup, NestedBase, GlyphArray, NestedCurrentGlyphIndex, RequestedSkipFlags); + } + } + + Result.PositionedGlyphCount = SequenceLookup.InputSequenceCountIncludingSkippedGlyphs; + } + } + break; + } + } + + Lookup->Type = OriginalLookupType; + } + + if(!Result.PositionedGlyphCount) + { + Result.PositionedGlyphCount = 1; + Result.PerformedAdjustment = 0; + } + + KBTS_INSTRUMENT_END + return Result; +} + +typedef kbts_u32 kbts_mcm_sequence_state; +enum kbts_mcm_sequence_state_enum +{ + KBTS_MCM_SEQUENCE_STATE_NONE, + KBTS_MCM_SEQUENCE_STATE_OUT, + KBTS_MCM_SEQUENCE_STATE_IN, +}; + +typedef kbts_u32 kbts_hangul_syllable_type; +enum kbts_hangul_syllable_type_enum +{ + KBTS_HANGUL_SYLLABLE_TYPE_NONE, + + KBTS_HANGUL_SYLLABLE_TYPE_L, + KBTS_HANGUL_SYLLABLE_TYPE_V, + KBTS_HANGUL_SYLLABLE_TYPE_T, + KBTS_HANGUL_SYLLABLE_TYPE_LV, + KBTS_HANGUL_SYLLABLE_TYPE_LVT, + + KBTS_HANGUL_SYLLABLE_TYPE_COUNT, +}; + +typedef struct kbts_hangul_syllable_info +{ + kbts_hangul_syllable_type Type; + kbts_u32 Composable; +} kbts_hangul_syllable_info; + +static kbts_hangul_syllable_info kbts_HangulSyllableInfo(kbts_u32 Codepoint) +{ + kbts_hangul_syllable_info Result = KBTS_ZERO; + + if((Codepoint >= 0x1100) && (Codepoint <= 0x115F)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_L; + Result.Composable = (Codepoint < 0x1113); + } + else if((Codepoint >= 0x1160) && (Codepoint <= 0x11A7)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_V; + Result.Composable = ((Codepoint >= 0x1161) & (Codepoint <= 0x1175)); + } + else if((Codepoint >= 0x11A8) && (Codepoint <= 0x11FF)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_T; + Result.Composable = (Codepoint < 0x11C3); + } + else if((Codepoint >= 0xA960) && (Codepoint <= 0xA97C)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_L; + } + else if((Codepoint == 0xAC00) && (Codepoint <= 0xD7A3)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_LVT; + + if(!((Codepoint - 0xAC00) % 28)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_LV; + } + } + else if((Codepoint >= 0xD7B0) && (Codepoint <= 0xD7C6)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_V; + } + else if((Codepoint >= 0xD7CB) && (Codepoint <= 0xD7FB)) + { + Result.Type = KBTS_HANGUL_SYLLABLE_TYPE_T; + } + + return Result; +} + +KBTS_INLINE kbts_u32 kbts_SyllabicClassIsConsonant(kbts_indic_syllabic_class Class) +{ + kbts_u32 Result = + KBTS_IN_SET(Class, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_CONSONANT)(KBTS_INDIC_SYLLABIC_CLASS_RA)(KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_WITH_STACKER)(KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL))); + return Result; +} + +enum +{ + KBTS_FEATURE_MATCH_FLAG_KA_JA = (1 << 0), + KBTS_FEATURE_MATCH_FLAG_SSA_NYA = (1 << 1), + KBTS_FEATURE_MATCH_FLAG_RA_HA_VA = (1 << 2), + KBTS_FEATURE_MATCH_FLAG_YA = (1 << 3), + KBTS_FEATURE_MATCH_FLAG_CONSONANT = (1 << 4), + KBTS_FEATURE_MATCH_FLAG_NUKTA = (1 << 5), + KBTS_FEATURE_MATCH_FLAG_HALANT = (1 << 6), + KBTS_FEATURE_MATCH_FLAG_ZWJ = (1 << 7), + KBTS_FEATURE_MATCH_FLAG_ZWNJ = (1 << 8), + KBTS_FEATURE_MATCH_FLAG_INITIAL = (1 << 10), + KBTS_FEATURE_MATCH_FLAG_POST_BASE = (1 << 11), + + KBTS_FEATURE_MATCH_FLAG_RPHF = KBTS_FEATURE_FLAG0(rphf), +}; +# define KBTS_FEATURE_MATCH_MASK(W0, W1, W2, W3) (((kbts_u64)(W0) << 48) | ((kbts_u64)(W1) << 32) | ((kbts_u64)(W0) << 16) | (kbts_u64)(W0)) +# define KBTS_FEATURE_MATCH_MASK_AKHN KBTS_FEATURE_MATCH_MASK(0, KBTS_FEATURE_MATCH_FLAG_KA_JA, KBTS_FEATURE_MATCH_FLAG_HALANT, KBTS_FEATURE_MATCH_FLAG_SSA_NYA) +# define KBTS_FEATURE_MATCH_MASK_BLWF_PRE KBTS_FEATURE_MATCH_MASK(0, 0, KBTS_FEATURE_MATCH_FLAG_RA_HA_VA | KBTS_FEATURE_MATCH_FLAG_INITIAL, KBTS_FEATURE_MATCH_FLAG_HALANT) +# define KBTS_FEATURE_MATCH_MASK_BLWF_PRE_OK KBTS_FEATURE_MATCH_MASK(0, 0, KBTS_FEATURE_MATCH_FLAG_RA_HA_VA, KBTS_FEATURE_MATCH_FLAG_HALANT) +# define KBTS_FEATURE_MATCH_MASK_BLWF_POST KBTS_FEATURE_MATCH_MASK(0, 0, KBTS_FEATURE_MATCH_FLAG_HALANT, KBTS_FEATURE_MATCH_FLAG_RA_HA_VA) +# define KBTS_FEATURE_MATCH_MASK_CJCT KBTS_FEATURE_MATCH_MASK(0, KBTS_FEATURE_MATCH_FLAG_CONSONANT, KBTS_FEATURE_MATCH_FLAG_HALANT, KBTS_FEATURE_MATCH_FLAG_CONSONANT) +# define KBTS_FEATURE_MATCH_MASK_HALF KBTS_FEATURE_MATCH_MASK(KBTS_FEATURE_MATCH_FLAG_CONSONANT | KBTS_FEATURE_MATCH_FLAG_RPHF | KBTS_FEATURE_MATCH_FLAG_POST_BASE, KBTS_FEATURE_MATCH_FLAG_HALANT, KBTS_FEATURE_MATCH_FLAG_ZWNJ, KBTS_FEATURE_MATCH_FLAG_CONSONANT) +# define KBTS_FEATURE_MATCH_MASK_HALF_OK KBTS_FEATURE_MATCH_MASK(KBTS_FEATURE_MATCH_FLAG_CONSONANT, KBTS_FEATURE_MATCH_FLAG_HALANT, 0, 0) +# define KBTS_FEATURE_MATCH_MASK_NUKT KBTS_FEATURE_MATCH_MASK(0, 0, KBTS_FEATURE_MATCH_FLAG_CONSONANT, KBTS_FEATURE_MATCH_FLAG_HALANT) +# define KBTS_FEATURE_MATCH_MASK_PSTF KBTS_FEATURE_MATCH_MASK(0, 0, KBTS_FEATURE_MATCH_FLAG_HALANT | KBTS_FEATURE_MATCH_FLAG_INITIAL, KBTS_FEATURE_MATCH_FLAG_YA) +# define KBTS_FEATURE_MATCH_MASK_VATU KBTS_FEATURE_MATCH_MASK(0, KBTS_FEATURE_MATCH_FLAG_CONSONANT, KBTS_FEATURE_MATCH_FLAG_HALANT, KBTS_FEATURE_MATCH_FLAG_RA_HA_VA) + +typedef kbts_u32 kbts_substitution_result_flags; +enum kbts_substitution_result_flags_enum +{ + KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION = (1 << 0), + KBTS_SUBSTITUTION_RESULT_FLAG_GROW_BUFFER = (1 << 1), +}; + +static kbts_substitution_result_flags kbts_DoSubstitution(kbts_shape_state *ShapeState, kbts_lookup_list *LookupList, kbts_gsub_frame *Frames, kbts_u32 *FrameCount_, + kbts_glyph_array *GlyphArray, kbts_u32 CheckOnly, kbts_skip_flags RequestedSkipFlags, kbts_u32 GeneratedGlyphFlags) +{ + kbts_substitution_result_flags Result = 0; + kbts_font *Font = ShapeState->Config->Font; + kbts_glyph *Glyphs = GlyphArray->Glyphs; + kbts_unicode_flags SkipUnicodeFlags = 0; // @Incomplete + kbts_skip_flags RegularSkipFlags = KBTS_SKIP_FLAGS_GSUB_REGULAR(RequestedSkipFlags); + kbts_skip_flags SequenceSkipFlags = KBTS_SKIP_FLAGS_GSUB_SEQUENCE(RequestedSkipFlags); + GeneratedGlyphFlags |= KBTS_GLYPH_FLAG_GENERATED_BY_GSUB; + + kbts_un FrameCount = *FrameCount_; + kbts_gsub_frame *Frame = &Frames[FrameCount - 1]; + + kbts_lookup *PackedLookup = kbts_GetLookup(LookupList, Frame->LookupIndex); + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Font->Gdef, PackedLookup); + kbts_u16 BaseLookupType = Lookup.Type; + + while(Frame->SubtableIndex < Lookup.SubtableCount) + { + kbts_u16 *Subtable = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[Frame->SubtableIndex]); + // In a type-7 lookup, each subtable can specify a different lookup type. + // We still want to pass kbts_unpacked_lookup around as a useful bag of arguments, though. + // So, we restore the original lookup's type here before resolving each subtable. + Lookup.Type = BaseLookupType; + + while(Lookup.Type == 7) + { + kbts_extension *Extension = (kbts_extension *)Subtable; + Lookup.Type = Extension->LookupType; + Subtable = KBTS_POINTER_OFFSET(kbts_u16, Extension, Extension->Offset); + } + + // :ReverseChaining + // From the Microsoft docs: + // In processing a reverse chaining substitution, i begins at the logical end of the string and moves to the beginning. + // This comment only makes sense when the reverse chaining substitution happens at the top level. + // When it _is_ at the top level, we know we are just doing a linear scan through the string, and since this is a single + // substitution (i.e. one glyph -> one glyph), we know the size of the buffer won't change throughout the scan. + // Given all of this, handling the reverse-scanning nature of this lookup actually becomes very easy: + if((Lookup.Type == 8) && (FrameCount == 1)) + { + Frame->InputGlyphIndex = (kbts_u16)(GlyphArray->Count - 1 - Frame->InputGlyphIndex); + } + + kbts_glyph *CurrentGlyph = &Glyphs[Frame->InputGlyphIndex]; + kbts_glyph_array InputGlyphs = kbts_GlyphSubArray(GlyphArray, Frame->InputGlyphIndex); + + kbts_skip_flags SkipFlags = (Lookup.Type >= 5) ? SequenceSkipFlags : RegularSkipFlags; + if(kbts_GlyphsIncludedInLookupSubtable(Font, 0, &Lookup, Frame->LookupIndex, Frame->SubtableIndex, GlyphArray, Frame->InputGlyphIndex, SkipFlags, SkipUnicodeFlags)) + { + kbts_cover_glyph_result Cover = KBTS_ZERO; + Cover.Valid = kbts_GlyphPassesLookupFilter(CurrentGlyph, &Lookup); + if(Cover.Valid && kbts_GsubLookupBeginsWithCoverage(Lookup.Type, Subtable[0])) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subtable, Subtable[1]); + Cover = kbts_CoverGlyph(Coverage, CurrentGlyph->Id); + } + + if(Cover.Valid) + { + kbts_un DeltaGlyphCount = 0; + + if((Lookup.Type == 5) || (Lookup.Type == 6)) + { + kbts_sequence_lookup_result SequenceLookup = kbts_DoSequenceLookup(&Lookup, Subtable, Cover, GlyphArray, Frame->InputGlyphIndex, SequenceSkipFlags, SkipUnicodeFlags); + + if(SequenceLookup.Matched) + { + KBTS_FOR(FrameIndex, 0, FrameCount - 1) + { + kbts_gsub_frame *ParentFrame = &Frames[FrameIndex]; + + if((ParentFrame->InputGlyphIndex < (Frame->InputGlyphIndex + SequenceLookup.InputSequenceCountIncludingSkippedGlyphs)) && + ((ParentFrame->InputGlyphIndex + ParentFrame->InputGlyphCount) > Frame->InputGlyphIndex)) + { + ParentFrame->InputGlyphCount += (kbts_u16)(SequenceLookup.InputSequenceCountIncludingSkippedGlyphs - Frame->InputGlyphCount); + } + } + + Frame->InputGlyphCount = (kbts_u16)SequenceLookup.InputSequenceCountIncludingSkippedGlyphs; + Frame->Records = SequenceLookup.Records; + Frame->RecordCount = (kbts_u16)SequenceLookup.RecordCount; + Frame->RecordIndex = 0; + + Frame->SubtableIndex = 0xFFFE; + } + } + else + { + // Do single substitution. + + switch(Lookup.Type) + { + case 1: + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION; + + if(!CheckOnly) + { + kbts_single_substitution *Subst = (kbts_single_substitution *)Subtable; + + kbts_u16 NewId = 0; + if(Subst->Format == 1) + { + // From the Microsoft docs: + // "Addition of deltaGlyphID is modulo 65536." + NewId = (CurrentGlyph->Id + (kbts_u32)Subst->DeltaOrCount.DeltaGlyphId) & 0xFFFF; + } + else if(Subst->Format == 2) + { + kbts_u16 *SubstituteGlyphIds = KBTS_POINTER_AFTER(kbts_u16, Subst); + NewId = SubstituteGlyphIds[Cover.Index]; + } + + kbts_GsubMutate(Font, CurrentGlyph, NewId, GeneratedGlyphFlags); + } + } break; + + case 2: + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION; + + if(!CheckOnly) + { + kbts_multiple_substitution *Subst = (kbts_multiple_substitution *)Subtable; + kbts_sequence *Sequence = kbts_GetSequence(Subst, Cover.Index); + kbts_u16 *SubstGlyphIds = KBTS_POINTER_AFTER(kbts_u16, Sequence); + + kbts_un GrowCount = Sequence->GlyphCount - 1; + if(!kbts_GrowGlyphArray(0, &InputGlyphs, 0, GrowCount, 0, 0)) + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_GROW_BUFFER; + kbts_TransferGrowRequest(&InputGlyphs, GlyphArray); + + goto Cleanup; + } + DeltaGlyphCount += GrowCount; + + kbts_glyph OriginalGlyph = *CurrentGlyph; + KBTS_FOR(SubstGlyphIndex, 0, Sequence->GlyphCount) + { + kbts_glyph NewGlyph = OriginalGlyph; + kbts_GsubMutate(Font, &NewGlyph, SubstGlyphIds[SubstGlyphIndex], GeneratedGlyphFlags | KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION); + if(SubstGlyphIndex) + { + NewGlyph.Uid = (kbts_u16)++ShapeState->NextGlyphUid; + } + else + { + NewGlyph.Flags |= KBTS_GLYPH_FLAG_FIRST_IN_MULTIPLE_SUBSTITUTION; + } + Glyphs[Frame->InputGlyphIndex + SubstGlyphIndex] = NewGlyph; + } + + Frame->InputGlyphCount = Sequence->GlyphCount; + + // Shift other frames' input cursors. + KBTS_FOR(FrameIndex, 0, FrameCount - 1) + { + kbts_gsub_frame *OtherFrame = &Frames[FrameIndex]; + + if(OtherFrame->InputGlyphIndex > Frame->InputGlyphIndex) + { + OtherFrame->InputGlyphIndex = (kbts_u16)(OtherFrame->InputGlyphIndex + GrowCount); + } + else if((OtherFrame->InputGlyphIndex + OtherFrame->InputGlyphCount) > Frame->InputGlyphIndex) + { + OtherFrame->InputGlyphCount = (kbts_u16)(OtherFrame->InputGlyphCount + GrowCount); + } + } + } + } break; + + case 3: + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION; + + if(!CheckOnly) + { + kbts_alternate_substitution *Subst = (kbts_alternate_substitution *)Subtable; + kbts_alternate_set *Set = kbts_GetAlternateSet(Subst, Cover.Index); + kbts_u16 *AltGlyphIds = KBTS_POINTER_AFTER(kbts_u16, Set); + + // @Incomplete: Have a way for the user to select which alternative to use. + kbts_u16 NewId = AltGlyphIds[0]; + kbts_GsubMutate(Font, CurrentGlyph, NewId, GeneratedGlyphFlags); + } + } break; + + case 4: + { + kbts_ligature_substitution *Subst = (kbts_ligature_substitution *)Subtable; + kbts_ligature_set *Set = kbts_GetLigatureSet(Subst, Cover.Index); + + KBTS_FOR(LigatureIndex, 0, Set->Count) + { + kbts_ligature *Ligature = kbts_GetLigature(Set, LigatureIndex); + kbts_u16 *ComponentIds = KBTS_POINTER_AFTER(kbts_u16, Ligature); + + if(Ligature->ComponentCount <= InputGlyphs.Count) + { + kbts_un MatchingGlyphCount = 1; + + { + kbts_un InputIndex = 1; + while((InputIndex < InputGlyphs.Count) && (MatchingGlyphCount < Ligature->ComponentCount)) + { + kbts_glyph *Glyph = &InputGlyphs.Glyphs[InputIndex]; + // A ligature may contain an explicit ZWJ, which SkipGlyph() would probably skip. + // The expected behavior in that case is to assume the font designer knows what they are doing + // and match the ZWJ. + if(Glyph->Id == ComponentIds[MatchingGlyphCount - 1]) + { + MatchingGlyphCount += 1; + } + else if(!kbts_SkipGlyph(Glyph, &Lookup, RegularSkipFlags, SkipUnicodeFlags)) + { + break; + } + InputIndex += 1; + } + } + + if(MatchingGlyphCount == Ligature->ComponentCount) + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION; + + if(!CheckOnly) + { + kbts_u32 LigatureUid = ++ShapeState->NextGlyphUid; + + { // For glyphs that aren't part of the ligature, store which component it is attached to. + // For glyphs that _are_, eat them. + kbts_un LigatureGlyphCount = 1; + kbts_un ReadCursor = 1; + kbts_un WriteCursor = 1; + + while((LigatureGlyphCount < InputGlyphs.Count) && (LigatureGlyphCount < Ligature->ComponentCount) && (ReadCursor < InputGlyphs.Count)) + { + kbts_glyph *Glyph = &InputGlyphs.Glyphs[ReadCursor]; + + if(Glyph->Id == ComponentIds[LigatureGlyphCount - 1]) + { + LigatureGlyphCount += 1; + ReadCursor += 1; + } + else if(kbts_SkipGlyph(Glyph, &Lookup, RegularSkipFlags, SkipUnicodeFlags)) + { + Glyph->LigatureComponentIndexPlusOne = (kbts_u16)LigatureGlyphCount; + Glyph->LigatureUid = (kbts_u16)LigatureUid; + + InputGlyphs.Glyphs[WriteCursor++] = InputGlyphs.Glyphs[ReadCursor++]; + } + else + { + break; + } + } + + // Finish moving all non-ligature glyphs in their place. + // We are effectively shrinking the whole buffer here, so we have to touch + // glyphs outside of our own cluster. + kbts_un GrowCount = WriteCursor - ReadCursor; // Negative + kbts_GrowGlyphArray(0, &InputGlyphs, WriteCursor, GrowCount, 0, 0); + DeltaGlyphCount += GrowCount; + + // Update frame input cursors. + KBTS_FOR(FrameIndex, 0, FrameCount - 1) + { + kbts_gsub_frame *OtherFrame = &Frames[FrameIndex]; + + if(OtherFrame->InputGlyphIndex >= Frame->InputGlyphIndex) + { + kbts_un OtherInputIndex = OtherFrame->InputGlyphIndex + GrowCount; + OtherInputIndex = KBTS_MAX(OtherInputIndex, Frame->InputGlyphIndex); + OtherFrame->InputGlyphIndex = (kbts_u16)OtherInputIndex; + } + else + { + kbts_un End = OtherFrame->InputGlyphIndex + OtherFrame->InputGlyphCount; + End = KBTS_MIN(End, GlyphArray->TotalCount); + OtherFrame->InputGlyphCount = (kbts_u16)(End - OtherFrame->InputGlyphIndex); + } + } + } + + kbts_GsubMutate(Font, CurrentGlyph, Ligature->Glyph, GeneratedGlyphFlags | KBTS_GLYPH_FLAG_LIGATURE); + CurrentGlyph->Uid = (kbts_u16)LigatureUid; + // Harfbuzz does this, because Uniscribe does this, and so we do the same. Sigh. + CurrentGlyph->Flags &= ~KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION; + } + + break; + } + } + } + } break; + + case 8: + { + kbts_reverse_chain_substitution *Subst = (kbts_reverse_chain_substitution *)Subtable; + kbts_unpacked_reverse_chain_substitution Unpacked = kbts_UnpackReverseChainSubstitution(Subst, 0); + + // :BoundsChecking + if(Cover.Index < Unpacked.GlyphCount) + { + // Should we use regular or sequence skip flags here? + kbts_glyph_array BacktrackGlyphs = kbts_ClipGlyphArray(GlyphArray, Frame->InputGlyphIndex); + kbts_sequence_match BacktrackMatch = kbts_MatchCoverageSequence(&Lookup, RegularSkipFlags, SkipUnicodeFlags, Subst, Unpacked.BacktrackCoverageOffsets, Unpacked.BacktrackCount, + &BacktrackGlyphs, (kbts_un)Frame->InputGlyphIndex - 1, -1); + kbts_glyph_array FollowupGlyphs = kbts_GlyphSubArray(&InputGlyphs, 1); + kbts_sequence_match LookaheadMatch = kbts_MatchCoverageSequence(&Lookup, RegularSkipFlags, SkipUnicodeFlags, Subst, Unpacked.LookaheadCoverageOffsets, Unpacked.LookaheadCount, + &FollowupGlyphs, 0, 1); + if((BacktrackMatch.MatchCount == Unpacked.BacktrackCount) && (LookaheadMatch.MatchCount == Unpacked.LookaheadCount)) + { + Result |= KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION; + kbts_GsubMutate(Font, CurrentGlyph, Unpacked.SubstituteGlyphIds[Cover.Index], GeneratedGlyphFlags); + } + } + } break; + } + + if(Result & KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION) + { + Frame->SubtableIndex = 0xFFFE; + + // From the Microsoft docs: + // To move to the “next” glyph, the client skips all the glyphs that participated in the lookup operation: + // glyphs that were substituted/positioned as well as any other glyphs in the matched input sequence. + + GlyphArray->Count += DeltaGlyphCount; + GlyphArray->TotalCount += DeltaGlyphCount; + } + } + } + } + + Frame->SubtableIndex += 1; + } + + if(Frame->RecordIndex < Frame->RecordCount) + { + kbts_sequence_lookup_record *SequenceRecord = &Frame->Records[Frame->RecordIndex++]; + + kbts_gsub_frame NewFrame = KBTS_ZERO; + NewFrame.LookupIndex = SequenceRecord->LookupListIndex; + NewFrame.SubtableIndex = 0; + NewFrame.InputGlyphIndex = Frame->InputGlyphIndex; + + if(SequenceRecord->SequenceIndex) + { + // @Speed: Re-scan the sequence to find where we are in the _filtered_ sequence. + kbts_un SequenceInputIndex = 0; + KBTS_FOR(FilterAt, Frame->InputGlyphIndex + 1, GlyphArray->Count) + { + kbts_glyph *FilterGlyph = &Glyphs[FilterAt]; + + // @Incomplete: SequenceSkipFlags? 0? + // What do we use here? + if(!kbts_SkipGlyph(FilterGlyph, &Lookup, 0, SkipUnicodeFlags)) + { + SequenceInputIndex += 1; + + if(SequenceInputIndex == SequenceRecord->SequenceIndex) + { + NewFrame.InputGlyphIndex = (kbts_u16)FilterAt; + + break; + } + } + } + } + + NewFrame.InputGlyphCount = 1; + Frames[FrameCount++] = NewFrame; + } + + // Only actually pop the frame if we haven't pushed anything else in the meantime. + if(Frame == &Frames[FrameCount - 1]) + { + FrameCount -= 1; + } + +Cleanup:; + *FrameCount_ = (kbts_u32)FrameCount; + + return Result; +} + +static kbts_u32 kbts_WouldSubstitute(kbts_shape_state *ShapeState, kbts_lookup_list *LookupList, kbts_gsub_frame *Frames, kbts_feature *Feature, kbts_skip_flags SkipFlags, kbts_glyph *Glyphs, kbts_un GlyphCount) +{ + kbts_u32 Result = 0; + kbts_u32 DummyGlyphCount = (kbts_u32)GlyphCount; + kbts_glyph_array GlyphArray = kbts_GlyphArray(Glyphs, GlyphCount, GlyphCount, GlyphCount); + + kbts_iterate_lookups IterateLookups = kbts_IterateLookups(LookupList, Feature); + while(kbts_NextLookup(&IterateLookups)) + { + kbts_un GlyphIndex = 0; + + while(GlyphIndex < GlyphCount) + { + kbts_gsub_frame *Frame = &Frames[0]; + Frame->LookupIndex = IterateLookups.LookupIndex; + Frame->SubtableIndex = 0; + Frame->InputGlyphIndex = 0; + Frame->InputGlyphCount = 1; + kbts_u32 FrameCount = 1; + + while(FrameCount) + { + kbts_substitution_result_flags SubstitutionResult = kbts_DoSubstitution(ShapeState, LookupList, Frames, &FrameCount, &GlyphArray, 1, SkipFlags, 0); + + if(SubstitutionResult & KBTS_SUBSTITUTION_RESULT_FLAG_MATCHED_SUBSTITUTION) + { + Result = 1; + goto Done; + } + } + + GlyphIndex += Frames[0].InputGlyphCount; + } + } + +Done:; + return Result; +} + +#include + +static int kbts_NextLookupIndex(kbts_op_state *S, kbts_un *LookupIndex, kbts_u32 *SkipFlags_, kbts_u32 *GlyphFilter_) +{ + kbts_un LowestIndex = 0xFFFFFFFF; + KBTS_FOR(FeatureIndex, 0, S->FeatureCount) + { + kbts_lookup_indices *Indices = &S->FeatureLookupIndices[FeatureIndex]; + kbts_un Index = Indices->Indices[0]; + if(Index < LowestIndex) + { + LowestIndex = Index; + } + } + + kbts_skip_flags SkipFlags = 0; + kbts_u32 GlyphFilter = 0; + KBTS_FOR(FeatureIndex, 0, S->FeatureCount) + { + kbts_lookup_indices *Indices = &S->FeatureLookupIndices[FeatureIndex]; + kbts_un Index = Indices->Indices[0]; + if(Index == LowestIndex) + { + SkipFlags |= Indices->SkipFlags; + GlyphFilter |= Indices->GlyphFilter; + ++Indices->Indices; --Indices->Count; + if(!Indices->Count) + { + S->FeatureLookupIndices[FeatureIndex--] = S->FeatureLookupIndices[--S->FeatureCount]; + } + } + } + + *LookupIndex = LowestIndex; + *SkipFlags_ = SkipFlags; + *GlyphFilter_ = GlyphFilter; + return LowestIndex != 0xFFFFFFFF; +} + +static kbts_u32 kbts_ExecuteOp(kbts_shape_state *ShapeState, kbts_glyph_array *GlyphArray) +{ + KBTS_INSTRUMENT_FUNCTION_BEGIN + kbts_shape_config *Config = ShapeState->Config; + kbts_font *Font = Config->Font; + kbts_op *Op = &ShapeState->Op; + kbts_op_state *S = &ShapeState->OpState; + kbts_glyph *Glyphs = GlyphArray->Glyphs; + + kbts_u32 ResumePoint = S->ResumePoint; + S->ResumePoint = 0; + switch(ResumePoint) + { + case 1: goto ResumePoint1; break; + case 2: goto ResumePoint2; break; + case 3: goto ResumePoint3; break; + case 4: goto ResumePoint4; break; + case 5: goto ResumePoint5; break; + } + + S->WrittenCount = 0; + + switch(Op->Kind) + { + case KBTS_OP_KIND_PRE_NORMALIZE_DOTTED_CIRCLES: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("PRE_NORMALIZE_DOTTED_CIRCLES") + // Before even trying to normalize anything, there are some _exceptions_ we have to take care of. + // The USE spec gives us a list of codepoint sequences which necessitate insertion of a dotted circle. + // These sequences are from IndicShapingInvalidClusters.txt. + S->GlyphIndex = 0; + + kbts_u64 Codepoints = 0; // 0xABBBBBCCCCCDDDDD + for(; S->GlyphIndex < GlyphArray->Count; ++S->GlyphIndex) + { + kbts_u32 NewCodepoint = Glyphs[S->GlyphIndex].Codepoint & 0x1FFFFF; + Codepoints = (Codepoints << 21) | NewCodepoint; + + // This switch is faster than any table lookup I could come up with in my tests. + #define KBTS_C2(A, B) case (((kbts_u64)(A) << 21) | (kbts_u64)(B)): + switch(Codepoints & (((kbts_u64)1 << 42) - 1)) + { + default: + if((Codepoints & (((kbts_u64)1 << 63) - 1)) == (((kbts_u64)0x930 << 42) | ((kbts_u64)0x94D << 21) | ((kbts_u64)0x907))) + { + if(0) + { + ResumePoint4:; + Codepoints = 0; + } + KBTS_C2(0x905, 0x93A) + KBTS_C2(0x905, 0x93B) + KBTS_C2(0x905, 0x93E) + KBTS_C2(0x905, 0x945) + KBTS_C2(0x905, 0x946) + KBTS_C2(0x905, 0x949) + KBTS_C2(0x905, 0x94A) + KBTS_C2(0x905, 0x94B) + KBTS_C2(0x905, 0x94C) + KBTS_C2(0x905, 0x94F) + KBTS_C2(0x905, 0x956) + KBTS_C2(0x905, 0x957) + KBTS_C2(0x906, 0x93A) + KBTS_C2(0x906, 0x945) + KBTS_C2(0x906, 0x946) + KBTS_C2(0x906, 0x947) + KBTS_C2(0x906, 0x948) + KBTS_C2(0x909, 0x941) + KBTS_C2(0x90F, 0x945) + KBTS_C2(0x90F, 0x946) + KBTS_C2(0x90F, 0x947) + KBTS_C2(0x985, 0x9BE) + KBTS_C2(0x98B, 0x9C3) + KBTS_C2(0x98C, 0x9E2) + KBTS_C2(0xA05, 0xA3E) + KBTS_C2(0xA05, 0xA48) + KBTS_C2(0xA05, 0xA4C) + KBTS_C2(0xA72, 0xA3F) + KBTS_C2(0xA72, 0xA40) + KBTS_C2(0xA72, 0xA47) + KBTS_C2(0xA73, 0xA41) + KBTS_C2(0xA73, 0xA42) + KBTS_C2(0xA73, 0xA4B) + KBTS_C2(0xA85, 0xABE) + KBTS_C2(0xA85, 0xAC5) + KBTS_C2(0xA85, 0xAC7) + KBTS_C2(0xA85, 0xAC8) + KBTS_C2(0xA85, 0xAC9) + KBTS_C2(0xA85, 0xACB) + KBTS_C2(0xA85, 0xACC) + KBTS_C2(0xAC5, 0xABE) + KBTS_C2(0xB05, 0xB3E) + KBTS_C2(0xB0F, 0xB57) + KBTS_C2(0xB13, 0xB57) + KBTS_C2(0xB85, 0xBC2) + KBTS_C2(0xC12, 0xC4C) + KBTS_C2(0xC12, 0xC55) + KBTS_C2(0xC3F, 0xC55) + KBTS_C2(0xC46, 0xC55) + KBTS_C2(0xC4A, 0xC55) + KBTS_C2(0xC89, 0xCBE) + KBTS_C2(0xC8B, 0xCBE) + KBTS_C2(0xC92, 0xCCC) + KBTS_C2(0xD07, 0xD57) + KBTS_C2(0xD09, 0xD57) + KBTS_C2(0xD0E, 0xD46) + KBTS_C2(0xD12, 0xD3E) + KBTS_C2(0xD12, 0xD57) + KBTS_C2(0xD85, 0xDCF) + KBTS_C2(0xD85, 0xDD0) + KBTS_C2(0xD85, 0xDD1) + KBTS_C2(0xD8B, 0xDDF) + KBTS_C2(0xD8D, 0xDD8) + KBTS_C2(0xD8F, 0xDDF) + KBTS_C2(0xD91, 0xDCA) + KBTS_C2(0xD91, 0xDD9) + KBTS_C2(0xD91, 0xDDA) + KBTS_C2(0xD91, 0xDDC) + KBTS_C2(0xD91, 0xDDD) + KBTS_C2(0xD91, 0xDDE) + KBTS_C2(0xD94, 0xDDF) + KBTS_C2(0x11005, 0x11038) + KBTS_C2(0x1100B, 0x1103E) + KBTS_C2(0x1100F, 0x11042) + KBTS_C2(0x11200, 0x1122C) + KBTS_C2(0x11200, 0x11231) + KBTS_C2(0x11200, 0x11233) + KBTS_C2(0x11206, 0x1122C) + KBTS_C2(0x1122C, 0x11230) + KBTS_C2(0x1122C, 0x11231) + KBTS_C2(0x11240, 0x1122E) + KBTS_C2(0x112B0, 0x112E0) + KBTS_C2(0x112B0, 0x112E5) + KBTS_C2(0x112B0, 0x112E6) + KBTS_C2(0x112B0, 0x112E7) + KBTS_C2(0x112B0, 0x112E8) + KBTS_C2(0x11481, 0x114B0) + KBTS_C2(0x1148B, 0x114BA) + KBTS_C2(0x1148D, 0x114BA) + KBTS_C2(0x114AA, 0x114B5) + KBTS_C2(0x114AA, 0x114B6) + KBTS_C2(0x11600, 0x11639) + KBTS_C2(0x11600, 0x1163A) + KBTS_C2(0x11601, 0x11639) + KBTS_C2(0x11601, 0x1163A) + KBTS_C2(0x11680, 0x116AD) + KBTS_C2(0x11680, 0x116B4) + KBTS_C2(0x11680, 0x116B5) + KBTS_C2(0x11686, 0x116B2) + if(!kbts_GrowGlyphArray(&S->ResumePoint, GlyphArray, S->GlyphIndex, 1, 4, 0)) + { + KBTS_INSTRUMENT_END + return 1; + } + GlyphArray->Glyphs[S->GlyphIndex] = Config->DottedCircle; + } + } + #undef KBTS_C2 + } + + S->WrittenCount = GlyphArray->TotalCount; + KBTS_INSTRUMENT_END + } break; + + case KBTS_OP_KIND_NORMALIZE: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("NORMALIZE") + // @Incomplete: We need to honor this. + // HB_OT_SHAPE_NORMALIZATION_MODE_NONE, + // HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, + // HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* Always fully decomposes and then recompose back */ + // + // hangul: HB_OT_SHAPE_NORMALIZATION_MODE_NONE, + // arabic: HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, + // default: HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, + // hebrew: HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, + // thai: HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, + // indic: HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, + // khmer: HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, + // myanmar: HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, + // use: HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, + + kbts_glyph *DecompositionGlyphs = KBTS_POINTER_AFTER(kbts_glyph, S); + + { // Full NFD decomposition + for(S->GlyphIndex = 0; S->GlyphIndex < GlyphArray->Count; ++S->GlyphIndex) + { + DecompositionGlyphs[0] = Glyphs[S->GlyphIndex]; + S->OpSpecific.Normalize.CodepointsToDecomposeCount = 1; + + while(S->OpSpecific.Normalize.CodepointsToDecomposeCount) + { + if(0) + { + ResumePoint1:; + DecompositionGlyphs = KBTS_POINTER_AFTER(kbts_glyph, S); + } + + kbts_glyph GlyphToDecompose = DecompositionGlyphs[--S->OpSpecific.Normalize.CodepointsToDecomposeCount]; + kbts_u64 Decomposition = 0; + kbts_u32 DecompositionSize = 0; + kbts_u32 AnyUnsupported = 0; + kbts_glyph Decomposed[2]; + + if(!(GlyphToDecompose.Flags & KBTS_GLYPH_FLAG_DO_NOT_DECOMPOSE)) + { + Decomposition = GlyphToDecompose.Decomposition; + DecompositionSize = kbts_GetDecompositionSize(Decomposition); + + // Only decompose when the font supports the decomposed form. + KBTS_FOR(DecompositionIndex, 0, DecompositionSize) + { + kbts_glyph DecompositionGlyph = kbts_CodepointToGlyph(Font, kbts_GetDecompositionCodepoint(Decomposition, DecompositionIndex)); + + AnyUnsupported |= !DecompositionGlyph.Id; + Decomposed[DecompositionIndex] = DecompositionGlyph; + } + } + + if(AnyUnsupported | !DecompositionSize) + { + if(S->WrittenCount > S->GlyphIndex) + { + if(!kbts_GrowGlyphArray(&S->ResumePoint, GlyphArray, S->WrittenCount, 1, 1, 0)) + { + S->OpSpecific.Normalize.CodepointsToDecomposeCount += 1; // Push the codepoint back on the stack. + + KBTS_INSTRUMENT_END + return 1; + } + + S->GlyphIndex += 1; + } + + Glyphs[S->WrittenCount++] = GlyphToDecompose; + } + else + { + KBTS_ASSERT((S->OpSpecific.Normalize.CodepointsToDecomposeCount + DecompositionSize) <= KBTS_MAXIMUM_DECOMPOSITION_CODEPOINTS); + + if(Decomposition & KBTS_UNICODE_DECOMPOSITION_DO_NOT_RECURSE0) + { + Decomposed[0].Flags |= KBTS_GLYPH_FLAG_DO_NOT_DECOMPOSE; + } + if(Decomposition & KBTS_UNICODE_DECOMPOSITION_DO_NOT_RECURSE1) + { + Decomposed[1].Flags |= KBTS_GLYPH_FLAG_DO_NOT_DECOMPOSE; + } + + KBTS_FOR(DecompositionIndex, 0, DecompositionSize) + { + // We reverse the glyphs here because we use a stack. + DecompositionGlyphs[S->OpSpecific.Normalize.CodepointsToDecomposeCount++] = Decomposed[DecompositionSize - 1 - DecompositionIndex]; + } + } + } + } + } + + { // Selective recomposition. + // The OpenType shaping documents say that Hebrew Alphabetic Presentation Form compositions aren't canonical, + // but looking at UnicodeData.txt, it seems like they totally are, so they are handled here. + kbts_glyph *LastBase = 0; + kbts_un LastBaseParentCount = 0; + kbts_s32 *LastBaseParentDeltas = 0; + kbts_un PreSlashDecimalDigitCount = 0; + kbts_un DecimalDigitCount = 0; + int InFraction = 0; + + kbts_u32 BeforeFractionSlashGlyphFlags = KBTS_GLYPH_FLAG_NUMR | KBTS_GLYPH_FLAG_FRAC; + kbts_u32 AfterFractionSlashGlyphFlags = KBTS_GLYPH_FLAG_DNOM | KBTS_GLYPH_FLAG_FRAC; + if(kbts_ShaperRtl(Config->Shaper)) + { + // RTL needs to invert NUMR and DNOM. + kbts_u32 Swap = BeforeFractionSlashGlyphFlags; + BeforeFractionSlashGlyphFlags = AfterFractionSlashGlyphFlags; + AfterFractionSlashGlyphFlags = Swap; + } + + KBTS_FOR(GlyphIndex, 0, S->WrittenCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + Glyph->Uid = (kbts_u16)++ShapeState->NextGlyphUid; + + kbts_un AvailableGlyphCount = 0; + if(!Glyph->CombiningClass) + { + LastBase = Glyph; + // From the Microsoft docs: + // USE decomposes split vowel characters belonging to UISC = Vowel_Dependent according to character + // decomposition mappings defined in UnicodeData.txt + // Cluster validation, is done based on the decomposed state of a split vowel. + // + // (Note: our Matra corresponds to Vowel_Dependent + Pure_Killer.) + if((Config->Shaper != KBTS_SHAPER_USE) || (Glyph->SyllabicClass != KBTS_INDIC_SYLLABIC_CLASS_MATRA)) + { + LastBaseParentDeltas = kbts_GetParentInfoDeltas(Glyph->ParentInfo); + LastBaseParentCount = kbts_GetParentInfoCount(Glyph->ParentInfo); + AvailableGlyphCount = 1; + } + else + { + LastBaseParentDeltas = 0; + LastBaseParentCount = 0; + } + } + else + { + if(LastBase) + { + AvailableGlyphCount = 2; + } + } + + KBTS_FOR(ParentIndex, 0, LastBaseParentCount) + { + kbts_u32 ParentCodepoint = LastBase->Codepoint + (kbts_u32)LastBaseParentDeltas[ParentIndex]; + kbts_glyph ParentGlyph = kbts_CodepointToGlyph(Font, ParentCodepoint); + kbts_u32 DecompositionSize = kbts_GetDecompositionSize(ParentGlyph.Decomposition); + + ParentGlyph.Uid = LastBase->Uid; + if((DecompositionSize == AvailableGlyphCount) && ParentGlyph.Id) + { + if(DecompositionSize == 2) + { + if(kbts_GetDecompositionCodepoint(ParentGlyph.Decomposition, 1) == Glyph->Codepoint) + { + // Both match. Reclaim space. + // @Speed: We should use separate read and write cursors instead. + KBTS_FOR(ShrinkIndex, GlyphIndex + 1, S->WrittenCount) + { + Glyphs[ShrinkIndex - 1] = Glyphs[ShrinkIndex]; + } + S->WrittenCount -= 1; + } + else + { + continue; + } + } + + *LastBase = ParentGlyph; + GlyphIndex = (kbts_un)((LastBase - Glyphs) - 1); // Handle recursive recomposition. + break; + } + } + + // It is safe to look for fractions here, because decimal digits/the fraction slash are not marks or + // jamos, so they should not get reordered after this pass. + if(Glyph->UnicodeFlags & KBTS_UNICODE_FLAG_DECIMAL_DIGIT) + { + if(InFraction) + { + // We are in the post-slash part of the fraction. + Glyph->Flags |= AfterFractionSlashGlyphFlags; + // Only flag the pre-slash part of the fraction if there is a post-slash part. + KBTS_FOR(DecimalDigitIndex, 0, PreSlashDecimalDigitCount) + { + Glyphs[GlyphIndex - PreSlashDecimalDigitCount - 1 + DecimalDigitIndex].Flags |= BeforeFractionSlashGlyphFlags; + } + PreSlashDecimalDigitCount = 0; + } + DecimalDigitCount += 1; + } + else if((Glyph->Codepoint == 0x2044) && (!InFraction || DecimalDigitCount)) + { + // Fraction slash. + Glyph->Flags |= KBTS_GLYPH_FLAG_FRAC; + PreSlashDecimalDigitCount = DecimalDigitCount; + InFraction = DecimalDigitCount != 0; + DecimalDigitCount = 0; + } + else + { + InFraction = 0; + } + } + } + + { // Unicode mark reordering. + S->GlyphIndex = 0; + while(S->GlyphIndex < S->WrittenCount) + { + kbts_glyph *Glyph = &Glyphs[S->GlyphIndex]; + kbts_u8 CombiningClass = Glyph->CombiningClass; + + kbts_un IndexIncrement = 1; + + if(CombiningClass) + { + Glyph->MarkOrdering = CombiningClass; + kbts_un MarkSequenceLength = 1; + while((S->GlyphIndex + MarkSequenceLength) < S->WrittenCount) + { + kbts_glyph *SequenceGlyph = &Glyphs[S->GlyphIndex + MarkSequenceLength]; + kbts_u8 SequenceGlyphCombiningClass = SequenceGlyph->CombiningClass; + if(SequenceGlyphCombiningClass) + { + SequenceGlyph->MarkOrdering = SequenceGlyphCombiningClass; + MarkSequenceLength += 1; + } + else + { + break; + } + } + + KBTS_FOR(Iter, 0, MarkSequenceLength) + { + KBTS_FOR(SequenceIndex, 1, MarkSequenceLength) + { + kbts_glyph *Glyph0 = &Glyphs[S->GlyphIndex + SequenceIndex - 1]; + kbts_glyph *Glyph1 = &Glyphs[S->GlyphIndex + SequenceIndex]; + + if(Glyph0->MarkOrdering > Glyph1->MarkOrdering) + { + kbts_glyph Swap = *Glyph0; + *Glyph0 = *Glyph1; + *Glyph1 = Swap; + } + } + } + + IndexIncrement = MarkSequenceLength; + } + + S->GlyphIndex += IndexIncrement; + } + } + + if(Config->Script == KBTS_SCRIPT_ARABIC) + { + S->GlyphIndex = 0; + while(S->GlyphIndex < S->WrittenCount) + { + // Find a mark sequence. + kbts_glyph *Glyph = &Glyphs[S->GlyphIndex]; + kbts_u8 CombiningClass = Glyph->CombiningClass; + + if(CombiningClass) + { + // Arabic: Reorder sequences of mark glyphs. + // + // From the Unicode standard: + // - Move any shadda characters (ccc=33) to the beginning of S. + // - If a sequence of ccc=230 characters begins with any MCM characters, move the sequence of such MCM + // characters + // to the beginning of S (before any characters with ccc=33). + // - If a sequence of ccc=220 characters begins with any MCM characters, move the sequence of such MCM + // characters + // to the beginning of S (before any MCM with ccc=230 or ccc=33). + // + // Final ordering: 220 230 shadda other + + kbts_mcm_sequence_state Mcm220SequenceState = 0; + kbts_mcm_sequence_state Mcm230SequenceState = 0; + + kbts_un SequenceStart = S->GlyphIndex; + +# define KBTS_REMAPPED_CCC_33 27 + + while(S->GlyphIndex < S->WrittenCount) + { + kbts_glyph *SequenceGlyph = &Glyphs[S->GlyphIndex]; + kbts_u16 SequenceGlyphCombiningClass = SequenceGlyph->CombiningClass; + kbts_u16 SequenceGlyphFlags = SequenceGlyph->UnicodeFlags; + + kbts_u8 MarkOrdering = 3; + + if(SequenceGlyphCombiningClass == KBTS_REMAPPED_CCC_33) + { + MarkOrdering = 2; + } + else if(SequenceGlyphCombiningClass == 220) + { + if(SequenceGlyphFlags & KBTS_UNICODE_FLAG_MODIFIER_COMBINING_MARK) + { + if(Mcm220SequenceState != KBTS_MCM_SEQUENCE_STATE_OUT) + { + Mcm220SequenceState = KBTS_MCM_SEQUENCE_STATE_IN; + } + } + else + { + Mcm220SequenceState = KBTS_MCM_SEQUENCE_STATE_OUT; + } + + if(Mcm220SequenceState == KBTS_MCM_SEQUENCE_STATE_IN) + { + MarkOrdering = 0; + } + + Mcm230SequenceState = KBTS_MCM_SEQUENCE_STATE_NONE; + } + else if(SequenceGlyphCombiningClass == 230) + { + if(SequenceGlyphFlags & KBTS_UNICODE_FLAG_MODIFIER_COMBINING_MARK) + { + if(Mcm230SequenceState != KBTS_MCM_SEQUENCE_STATE_OUT) + { + Mcm230SequenceState = KBTS_MCM_SEQUENCE_STATE_IN; + } + } + else + { + Mcm230SequenceState = KBTS_MCM_SEQUENCE_STATE_OUT; + } + + if(Mcm230SequenceState == KBTS_MCM_SEQUENCE_STATE_IN) + { + MarkOrdering = 1; + } + } + else if(SequenceGlyphCombiningClass) + { + Mcm220SequenceState = KBTS_MCM_SEQUENCE_STATE_NONE; + Mcm230SequenceState = KBTS_MCM_SEQUENCE_STATE_NONE; + } + else + { + break; + } + + SequenceGlyph->MarkOrdering = MarkOrdering; + S->GlyphIndex += 1; + } + + KBTS_FOR(Iter, SequenceStart, S->GlyphIndex) + { + KBTS_FOR(SortIndex, SequenceStart + 1, S->GlyphIndex) + { + kbts_glyph *Left = &Glyphs[SortIndex - 1]; + kbts_glyph *Right = &Glyphs[SortIndex]; + + if(Left->MarkOrdering > Right->MarkOrdering) + { + kbts_glyph Swap = *Left; + *Left = *Right; + *Right = Swap; + } + } + } + } + else + { + S->GlyphIndex += 1; + } + } + } + else if((Config->Script == KBTS_SCRIPT_THAI) || (Config->Script == KBTS_SCRIPT_LAO)) + { + // Decompose sara/sala ams. + kbts_un AboveBaseGlyphCount = 0; + for(S->GlyphIndex = 0; S->GlyphIndex < S->WrittenCount; ++S->GlyphIndex) + { + ResumePoint5:; + kbts_glyph *Glyph = &Glyphs[S->GlyphIndex]; + kbts_u32 Codepoint = Glyph->Codepoint; + + switch(Codepoint) + { + // Sara am/sala am. + // We match both because storing the sara am codepoint that corresponds to the current script + // doesn't seem that worthwhile, given that this is already a pretty big switch case. + // If we choose to use a unicode flag or indic syllabic category to notate above-base marks, + // then this loops gets a lot tighter and it would probably become the right call to pre-determine + // the sara am codepoint. + case 0xE33: case 0xEB3: // Sara am + { + if(!kbts_GrowGlyphArray(&S->ResumePoint, GlyphArray, S->GlyphIndex, 1, 5, 0)) + { + S->OpSpecific.Normalize.AboveBaseGlyphCount = AboveBaseGlyphCount; + KBTS_INSTRUMENT_END + return 1; + } + + AboveBaseGlyphCount = S->OpSpecific.Normalize.AboveBaseGlyphCount; + for(kbts_un AboveBaseIndex = 0; AboveBaseIndex < AboveBaseGlyphCount; ++AboveBaseIndex) + { + Glyphs[S->GlyphIndex - AboveBaseIndex] = Glyphs[S->GlyphIndex - AboveBaseIndex - 1]; + } + Glyphs[S->GlyphIndex - AboveBaseGlyphCount] = Config->Nikhahit; + Glyphs[S->GlyphIndex + 1] = Config->SaraAa; + S->WrittenCount += 1; + } break; + + case 0xE31: case 0xE34: case 0xE35: case 0xE36: case 0xE37: case 0xE3B: + case 0xE47: case 0xE48: case 0xE49: case 0xE4A: case 0xE4B: case 0xE4C: case 0xE4D: case 0xE4E: + case 0xEB1: case 0xEB4: case 0xEB5: case 0xEB6: case 0xEB7: case 0xEBB: + case 0xEC7: case 0xEC8: case 0xEC9: case 0xECA: case 0xECB: case 0xECC: case 0xECD: case 0xECE: + AboveBaseGlyphCount += 1; + break; + + default: + AboveBaseGlyphCount = 0; + break; + } + } + } + + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_NORMALIZE_HANGUL: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("NORMALIZE_HANGUL") + S->GlyphIndex = 0; + while(S->GlyphIndex < GlyphArray->Count) + { + kbts_glyph *Glyph = &Glyphs[S->GlyphIndex]; + + kbts_un L = 0; + kbts_un V = 0; + kbts_un T = 0; + + kbts_hangul_syllable_info LInfo = kbts_HangulSyllableInfo(Glyph->Codepoint); + if(LInfo.Type >= KBTS_HANGUL_SYLLABLE_TYPE_LV) + { + kbts_un SIndex = (Glyph->Codepoint - 0xAC00); + + L = 0x1100 + SIndex / 588; + V = 0x1161 + (SIndex % 588) / 28; + + kbts_un TIndex = SIndex % 28; + if(TIndex) + { + T = 0x11A7 + TIndex; + } + } + else if(LInfo.Type == KBTS_HANGUL_SYLLABLE_TYPE_L) + { + L = Glyph->Codepoint; + } + + S->GlyphIndex += 1; + + kbts_op_state_normalize_hangul *NormalizeHangul = &S->OpSpecific.NormalizeHangul; + + if(L) + { + kbts_hangul_syllable_info VInfo = KBTS_ZERO; + + if(!V && (S->GlyphIndex < GlyphArray->Count)) + { + kbts_u32 VCodepoint = Glyphs[S->GlyphIndex].Codepoint; + + VInfo = kbts_HangulSyllableInfo(VCodepoint); + + if(VInfo.Type == KBTS_HANGUL_SYLLABLE_TYPE_V) + { + V = VCodepoint; + + S->GlyphIndex += 1; + } + } + + if(V) + { + kbts_hangul_syllable_info TInfo = KBTS_ZERO; + + if(!T && (S->GlyphIndex < GlyphArray->Count)) + { + kbts_u32 TCodepoint = Glyphs[S->GlyphIndex].Codepoint; + + TInfo = kbts_HangulSyllableInfo(TCodepoint); + + if(TInfo.Type == KBTS_HANGUL_SYLLABLE_TYPE_T) + { + T = TCodepoint; + + S->GlyphIndex += 1; + } + } + + NormalizeHangul->LvtGlyphCount = 0; + + // Check for any tone marks that we need to swap to the front of the syllable. + // The OpenType shaping documents say that we need to do this after applying GSUB features, but + // harfbuzz does it before, so it's probably fine to do it here? + // It's also basically free to do here, which is nice. + if(S->GlyphIndex < GlyphArray->Count) + { + kbts_u32 ToneMarkCodepoint = Glyphs[S->GlyphIndex].Codepoint; + + if((ToneMarkCodepoint >= 0x302E) && (ToneMarkCodepoint <= 0x302F)) + { + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = kbts_CodepointToGlyph(Font, ToneMarkCodepoint); + + S->GlyphIndex += 1; + } + } + + if(LInfo.Composable & VInfo.Composable & TInfo.Composable) + { + // Try LVT. + kbts_un LvtCodepoint = 0xAC00 + (L - 0x1100) * 588 + (V - 0x1161) * 28 + (T - 0x11A7); + + kbts_glyph LvtGlyph = kbts_CodepointToGlyph(Font, (kbts_u32)LvtCodepoint); + if(LvtGlyph.Id) + { + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = LvtGlyph; + } + } + + if(!NormalizeHangul->LvtGlyphCount) + { + kbts_glyph LvGlyph = {0}; + if(LInfo.Composable & VInfo.Composable) + { + // Try LV. + kbts_un LvCodepoint = 0xAC00 + (L - 0x1100) * 588 + (V - 0x1161) * 28; + + LvGlyph = kbts_CodepointToGlyph(Font, (kbts_u32)LvCodepoint); + } + + if(LvGlyph.Id) + { + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = LvGlyph; + } + else + { + // Do L-V. + kbts_glyph LGlyph = kbts_CodepointToGlyph(Font, (kbts_u32)L); + LGlyph.Flags |= KBTS_GLYPH_FLAG_LJMO; + + kbts_glyph VGlyph = kbts_CodepointToGlyph(Font, (kbts_u32)V); + VGlyph.Flags |= KBTS_GLYPH_FLAG_VJMO; + + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = LGlyph; + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = VGlyph; + } + + if(T) + { + kbts_glyph TGlyph = kbts_CodepointToGlyph(Font, (kbts_u32)T); + TGlyph.Flags |= KBTS_GLYPH_FLAG_TJMO; + + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = TGlyph; + } + } + } + } + + if(!NormalizeHangul->LvtGlyphCount) + { + kbts_glyph NewGlyph = kbts_CodepointToGlyph(Font, Glyph->Codepoint); + + NormalizeHangul->LvtGlyphs[NormalizeHangul->LvtGlyphCount++] = NewGlyph; + } + + { // Insert the LVT glyphs. + ResumePoint3:; + NormalizeHangul = &S->OpSpecific.NormalizeHangul; + + kbts_un NewWrittenCount = S->WrittenCount + NormalizeHangul->LvtGlyphCount; + if(NewWrittenCount > S->GlyphIndex) + { + if(!kbts_GrowGlyphArray(&S->ResumePoint, GlyphArray, S->WrittenCount, NormalizeHangul->LvtGlyphCount, 3, 0)) + { + KBTS_INSTRUMENT_END + return 1; + } + + S->GlyphIndex += NormalizeHangul->LvtGlyphCount; + } + + KBTS_FOR(LvtGlyphIndex, 0, NormalizeHangul->LvtGlyphCount) + { + Glyphs[S->WrittenCount++] = NormalizeHangul->LvtGlyphs[LvtGlyphIndex]; + } + } + } + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_GSUB_FEATURES: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("GSUB_FEATURES") + kbts_gsub_gpos *FontGsub = Font->ShapingTables[KBTS_SHAPING_TABLE_GSUB]; + kbts_lookup_list *LookupList = kbts_GetLookupList(FontGsub); + kbts_gsub_frame *Frames = KBTS_POINTER_AFTER(kbts_gsub_frame, S); + kbts_op_state_gsub *Gsub = &S->OpSpecific.Gsub; + + kbts_BeginFeatures(S, Config, KBTS_SHAPING_TABLE_GSUB, Op->Features); + kbts_u32 GlyphFilter; + kbts_skip_flags SkipFlags = 0; + while(kbts_NextLookupIndex(S, &Gsub->LookupIndex, &SkipFlags, &GlyphFilter)) + { + S->GlyphIndex = 0; + + // From the Microsoft docs: + // If a Lookup table has multiple subtables, the subtables are processed in order, testing the glyph sequence + // at the current glyph position for a match with the input sequence patterns specified by each subtable in + // turn. + // + // This means the subtable loop is _inside_ of the loop over our glyphs. + while(S->GlyphIndex < GlyphArray->Count) + { + Frames[0].InputGlyphCount = 1; + kbts_u32 FilterMask = Config->Shaper == KBTS_SHAPER_USE ? KBTS_USE_GLYPH_FEATURE_MASK : KBTS_GLYPH_FEATURE_MASK; + kbts_u32 EffectiveGlyphFilter = GlyphFilter & FilterMask; + + // Reverse chaining substitutions are tricky. + // See the comment at :ReverseChaining. + // @Duplication: We just copy the top-level mirroring logic from DoSubstitution here for now. + kbts_lookup *Lookup = kbts_GetLookup(LookupList, Gsub->LookupIndex); + kbts_un CurrentGlyphIndex = (Lookup->Type == 8) ? GlyphArray->Count - 1 - S->GlyphIndex : S->GlyphIndex; + + if(kbts_GlyphIncludedInLookup(Config->Font, 0, Gsub->LookupIndex, Glyphs[CurrentGlyphIndex].Id) && ((Glyphs[CurrentGlyphIndex].Flags & EffectiveGlyphFilter) == EffectiveGlyphFilter)) + { + S->FrameCount = 0; + + { + kbts_gsub_frame *Frame = &Frames[S->FrameCount++]; + + Frame->LookupIndex = (kbts_u16)Gsub->LookupIndex; + Frame->SubtableIndex = 0; + Frame->InputGlyphIndex = (kbts_u16)S->GlyphIndex; + } + + while(S->FrameCount) + { + if(0) + { + ResumePoint2:; + FontGsub = Font->ShapingTables[KBTS_SHAPING_TABLE_GSUB]; + Gsub = &S->OpSpecific.Gsub; + LookupList = kbts_GetLookupList(FontGsub); + Frames = KBTS_POINTER_AFTER(kbts_gsub_frame, S); + GlyphFilter = Gsub->GlyphFilter; + SkipFlags = Gsub->SkipFlags; + } + + // These flags are used by USE. + kbts_u32 GeneratedGlyphFlags = GlyphFilter & (KBTS_GLYPH_FLAG_RPHF | KBTS_GLYPH_FLAG_PREF); + kbts_substitution_result_flags SubstitutionFlags = kbts_DoSubstitution(ShapeState, LookupList, Frames, &S->FrameCount, GlyphArray, 0, SkipFlags, GeneratedGlyphFlags); + if(SubstitutionFlags & KBTS_SUBSTITUTION_RESULT_FLAG_GROW_BUFFER) + { + Gsub->GlyphFilter = GlyphFilter; + Gsub->SkipFlags = SkipFlags; + S->ResumePoint = 2; + + KBTS_INSTRUMENT_END + return 1; + } + } + } + + S->GlyphIndex += Frames[0].InputGlyphCount; + } + } + + S->WrittenCount = GlyphArray->Count; + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_FLAG_JOINING_LETTERS: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("FLAG_JOINING_LETTERS") + kbts_u64 JoiningTypesMatchLookup = + (((1ull << KBTS_UNICODE_JOINING_TYPE_RIGHT) | (1ull << KBTS_UNICODE_JOINING_TYPE_DUAL) | (1ull << KBTS_UNICODE_JOINING_TYPE_FORCE)) << (8 * KBTS_UNICODE_JOINING_TYPE_LEFT)) | + (((1ull << KBTS_UNICODE_JOINING_TYPE_RIGHT) | (1ull << KBTS_UNICODE_JOINING_TYPE_DUAL) | (1ull << KBTS_UNICODE_JOINING_TYPE_FORCE)) << (8 * KBTS_UNICODE_JOINING_TYPE_DUAL)) | + (((1ull << KBTS_UNICODE_JOINING_TYPE_RIGHT) | (1ull << KBTS_UNICODE_JOINING_TYPE_DUAL) | (1ull << KBTS_UNICODE_JOINING_TYPE_FORCE)) << (8 * KBTS_UNICODE_JOINING_TYPE_FORCE)); + + kbts_u64 JoiningFeatureTransition = ((kbts_u64)KBTS_JOINING_FEATURE_INIT << (8 * KBTS_JOINING_FEATURE_ISOL)) | ((kbts_u64)KBTS_JOINING_FEATURE_MEDI << (8 * KBTS_JOINING_FEATURE_FINA)) | + ((kbts_u64)KBTS_JOINING_FEATURE_MEDI << (8 * KBTS_JOINING_FEATURE_MEDI)) | ((kbts_u64)KBTS_JOINING_FEATURE_MED2 << (8 * KBTS_JOINING_FEATURE_MED2)); + + // Tag letters for joining features. + kbts_glyph PreviousGlyph_ = KBTS_ZERO; + kbts_glyph *PreviousGlyph = &PreviousGlyph_; + KBTS_FOR(GlyphIndex, 0, GlyphArray->Count) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->JoiningType != KBTS_UNICODE_JOINING_TYPE_TRANSPARENT) + { + Glyph->JoiningFeature = !PreviousGlyph->JoiningType ? KBTS_JOINING_FEATURE_INIT : KBTS_JOINING_FEATURE_FINA; + + if(JoiningTypesMatchLookup & (1ull << (Glyph->JoiningType + 8 * PreviousGlyph->JoiningType))) + { + PreviousGlyph->JoiningFeature = (JoiningFeatureTransition >> (8 * PreviousGlyph->JoiningFeature)) & 0xFF; + PreviousGlyph->Flags = (PreviousGlyph->Flags & ~KBTS_JOINING_FEATURE_MASK) | KBTS_JOINING_FEATURE_TO_GLYPH_FLAG(PreviousGlyph->JoiningFeature); + + Glyph->JoiningFeature = KBTS_JOINING_FEATURE_FINA; + } + else + { + Glyph->JoiningFeature = KBTS_JOINING_FEATURE_ISOL; + } + + if(Glyph->JoiningFeature) + { + // Be careful that this properly maps kbts_joining_feature to KBTS_GLYPH_FLAG! + Glyph->Flags = (Glyph->Flags & ~KBTS_JOINING_FEATURE_MASK) | KBTS_JOINING_FEATURE_TO_GLYPH_FLAG(Glyph->JoiningFeature); + } + + PreviousGlyph = Glyph; + } + } + + S->WrittenCount = GlyphArray->Count; + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_GPOS_METRICS: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("GPOS_METRICS") + // hmtx/vmtx pass. + int ClearMarkAdvances = (Config->Shaper == KBTS_SHAPER_MYANMAR) || (Config->Shaper == KBTS_SHAPER_USE); + kbts_u32 Orientation = KBTS_ORIENTATION_HORIZONTAL; // @Hardcoded + kbts_hea *Hea = Font->Hea[Orientation]; + kbts_u16 *Mtx = Font->Mtx[Orientation]; + + kbts_long_mtx *LongMetrics = 0; + kbts_s16 *ShortMetrics = 0; + if(Hea && Mtx) + { + LongMetrics = (kbts_long_mtx *)Mtx; + ShortMetrics = (kbts_s16 *)(LongMetrics + Hea->MetricCount); + } + + kbts_long_mtx DefaultMetric = {1024, 0}; + if(Font->Head) + { + DefaultMetric.Advance = Font->Head->UnitsPerEm; + if(Orientation == KBTS_ORIENTATION_HORIZONTAL) + { + DefaultMetric.Advance /= 2; + } + } + + KBTS_FOR(GlyphIndex, 0, GlyphArray->Count) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + kbts_long_mtx Metric = DefaultMetric; + if(LongMetrics) + { + kbts_u32 Id = Glyph->Id; + + // At the end of shaping, default ignorable glyphs that are not generated by GSUB are replaced with zero-width + // whitespace glyphs (or a zero-width empty glyph if no whitespace glyph is present). + // (By the way, we do this because Harfbuzz does it, and Harfbuzz does it probably because Uniscribe does it.) + // We handle this in two steps: + // - The first is here. We want cursive attachments, and mark-to-base attachments, and other relative placements + // to take the zero width into account, and zeroing the width right at the beginning of GPOS is the most + // straighforward way to accomplish this. + // (@Incomplete: It is likely that we also need to take the default ignorable case into account when accumulating + // cursive offsets.) + // - In POST_GPOS_FIXUP, we perform the glyph ID substitution. We have to wait until all GPOS features have been + // executed to do this because they might possibly match the original ID. + if(!(Glyph->Flags & KBTS_GLYPH_FLAG_GENERATED_BY_GSUB) && (Glyph->UnicodeFlags & KBTS_UNICODE_FLAG_DEFAULT_IGNORABLE)) + { + Metric.Advance = 0; + Metric.PreviousSideBearing = 0; + } + else if(Id < Hea->MetricCount) + { + Metric = LongMetrics[Id]; + } + else + { + Metric.Advance = LongMetrics[Hea->MetricCount - 1].Advance; + Metric.PreviousSideBearing = ShortMetrics[Id - Hea->MetricCount]; + } + } + + if(!ClearMarkAdvances | (Glyph->Classes.Class != KBTS_GLYPH_CLASS_MARK)) + { + if(Orientation == KBTS_ORIENTATION_HORIZONTAL) + { + // @Cleanup: Why does harfbuzz not take bearings into account in these tests? + // P.X += Metric.PreviousSideBearing; + Glyph->AdvanceX = Metric.Advance; + } + else + { + // @Cleanup: Why does harfbuzz not take bearings into account in these tests? + // P.Y += Metric.PreviousSideBearing; + Glyph->AdvanceY = Metric.Advance; + } + } + } + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_GPOS_FEATURES: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("GPOS_FEATURES") + kbts_gsub_gpos *Gpos = Font->ShapingTables[KBTS_SHAPING_TABLE_GPOS]; + kbts_BeginFeatures(S, Config, KBTS_SHAPING_TABLE_GPOS, Op->Features); + kbts_lookup_list *LookupList = kbts_GetLookupList(Gpos); + kbts_un LookupIndex; + kbts_skip_flags SkipFlags; + kbts_u32 GlyphFilter; + while(kbts_NextLookupIndex(S, &LookupIndex, &SkipFlags, &GlyphFilter)) + { + kbts_lookup *PackedLookup = kbts_GetLookup(LookupList, LookupIndex); + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Font->Gdef, PackedLookup); + + kbts_un PositionedGlyphCount = 0; + while(PositionedGlyphCount < GlyphArray->Count) + { + kbts_un DeltaGlyphIndex = 1; + + if(kbts_GlyphIncludedInLookup(Config->Font, 1, LookupIndex, GlyphArray->Glyphs[PositionedGlyphCount].Id)) + { + KBTS_FOR(SubtableIndex, 0, Lookup.SubtableCount) + { + kbts_u16 *Subtable = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[SubtableIndex]); + kbts_do_single_adjustment_result Adjustment = kbts_DoSingleAdjustment(Config, LookupList, LookupIndex, SubtableIndex, &Lookup, Subtable, GlyphArray, PositionedGlyphCount, SkipFlags); + if(Adjustment.PerformedAdjustment) + { + DeltaGlyphIndex = Adjustment.PositionedGlyphCount; + break; + } + } + } + + PositionedGlyphCount += DeltaGlyphIndex; + } + } + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_POST_GPOS_FIXUP: + { + KBTS_INSTRUMENT_BLOCK_BEGIN("POST_GPOS_FIXUP") + kbts_un WriteAt = 0; + kbts_glyph WhitespaceGlyph = Config->Whitespace; + int ClearMarkAdvances = kbts_ShaperClearsMarkAdvancesInPostGposFixup(Config->Shaper); + + if(ShapeState->MainDirection != ShapeState->RunDirection) + { + // Flip direction. + // This might seem like a totally superfluous thing to do, because we have to do a bunch + // of work to reverse glyph order while still preserving their relative positions. + // However, for mainly LTR documents, the anchor position will naturally be left-aligned, + // while, in RTL documents, it will naturally right-align. + // As such, going through the glyph sequence and reversing it is needed _anyway_ at some point, + // and we might as well do it here, because this is where we can take resolve attachments + // for relatively cheap, since they are always back-looking. (The next paragraph explains this + // in more detail.) + + // The unintuitive part about this pass is the glyph advances. + // Normally, when iterating over a sequence of glyphs, we see base glyphs before marks. Obviously. + // However, when flipping the sequence, we see the marks before seeing the bases, which means we + // won't have accumulated the base glyph's advance yet! So we have to go through the sequence here + // and compensate for missing advances by precomputing them and baking them into the marks. + // Another way to reach the same result would be to keep marks on the same side as their bases when + // flipping, but that is not what Harfbuzz does, and, the day we decide we want to diverge from Harfbuzz, + // we will very likely be better off not flipping the sequence at all and deleting all of this garbage code. + kbts_s32 MarkAttachAdvanceX = 0; + kbts_s32 MarkAttachAdvanceY = 0; + KBTS_FOR(GlyphIndex, 0, GlyphArray->Count) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->AttachGlyphIndexPlusOne) + { + kbts_glyph *Attach = &Glyphs[Glyph->AttachGlyphIndexPlusOne - 1]; + kbts_s32 AttachAdvanceX = MarkAttachAdvanceX; + kbts_s32 AttachAdvanceY = MarkAttachAdvanceY; + if(Attach->Classes.Class != KBTS_GLYPH_CLASS_MARK) + { + AttachAdvanceX = Attach->AdvanceX; + AttachAdvanceY = Attach->AdvanceY; + } + Glyph->OffsetX += AttachAdvanceX; + Glyph->OffsetY += AttachAdvanceY; + MarkAttachAdvanceX = AttachAdvanceX; + MarkAttachAdvanceY = AttachAdvanceY; + } + } + + kbts_un SwapCount = GlyphArray->Count / 2; + KBTS_FOR(LeftIndex, 0, SwapCount) + { + kbts_un RightIndex = GlyphArray->Count - 1 - LeftIndex; + + kbts_glyph SwapGlyph = Glyphs[LeftIndex]; + Glyphs[LeftIndex] = Glyphs[RightIndex]; + Glyphs[RightIndex] = SwapGlyph; + } + } + + // Make default ignorables that weren't explicitly created by the font invisible. + // + // It is tempting to put this loop inside of an if(WhitespaceGlyph.Id), just like we do + // for dotted circle insertion. However, Harfbuzz does not do this! + // When the font does not contain a dotted circle, nothing is inserted, but when the font + // does not contain a whitespace glyph, _we still insert an empty glyph_. + KBTS_FOR(GlyphIndex, 0, GlyphArray->Count) + { + kbts_glyph Glyph = Glyphs[GlyphIndex]; + int Write = 0; + + // It might be tempting to keep glyphs that were used in GPOS, but Harfbuzz doesn't care. + if(!(Glyph.Flags & KBTS_GLYPH_FLAG_GENERATED_BY_GSUB) && (Glyph.UnicodeFlags & KBTS_UNICODE_FLAG_DEFAULT_IGNORABLE)) + { + // This glyph is default ignorable and should be ignored. + if(WhitespaceGlyph.Id) + { + Write = 1; + Glyph = WhitespaceGlyph; + } + } + else + { + if(ClearMarkAdvances && (Glyph.Classes.Class == KBTS_GLYPH_CLASS_MARK)) + { + Glyph.AdvanceX = Glyph.AdvanceY = 0; + } + Write = 1; + } + + if(Write) + { + Glyphs[WriteAt++] = Glyph; + } + } + + GlyphArray->Count = (kbts_u32)WriteAt; + GlyphArray->TotalCount = GlyphArray->Count; + KBTS_INSTRUMENT_END + } + break; + + case KBTS_OP_KIND_STCH_POSTPASS: + { + KBTS_FOR(GlyphIndex, 0, GlyphArray->Count) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->Flags & (KBTS_GLYPH_FLAG_STCH_ENDPOINT | KBTS_GLYPH_FLAG_STCH_EXTENSION)) + { + kbts_un At = GlyphIndex; + + kbts_un ExtensionIndex = At; + kbts_u32 SawExtension = 0; + + kbts_s32 EndpointWidth = 0; + kbts_s32 ExtensionWidth = 0; + + while(At < GlyphArray->Count) + { + kbts_glyph *AtGlyph = &Glyphs[At]; + + if(AtGlyph->Flags & KBTS_GLYPH_FLAG_STCH_ENDPOINT) + { + EndpointWidth += AtGlyph->AdvanceX; + + At += 1; + } + else if(AtGlyph->Flags & KBTS_GLYPH_FLAG_STCH_EXTENSION) + { + ExtensionIndex = At; + ExtensionWidth += AtGlyph->AdvanceX; + SawExtension = 1; + + At += 1; + } + else + { + break; + } + } + + kbts_sn WordWidth = 0; + + while(At < GlyphArray->Count) + { + kbts_glyph *AtGlyph = &Glyphs[At]; + + int Ok = 0; + + if(!(AtGlyph->Flags & (KBTS_GLYPH_FLAG_STCH_ENDPOINT | KBTS_GLYPH_FLAG_STCH_EXTENSION)) && (AtGlyph->UnicodeFlags & KBTS_UNICODE_FLAG_PART_OF_WORD)) + { + Ok = 1; + } + + if(Ok) + { + WordWidth += AtGlyph->AdvanceX; + + At += 1; + } + else + { + break; + } + } + + if(WordWidth > EndpointWidth) + { + kbts_sn ExtensionCount = (WordWidth - EndpointWidth) / ExtensionWidth; + if((ExtensionWidth * ExtensionCount) < (WordWidth - EndpointWidth)) + { + ExtensionCount += 1; + } + + (void)ExtensionCount; + (void)ExtensionIndex; + (void)SawExtension; + /* @Incomplete + kbts_glyph_adjustment *ExtensionAdjustment = &Positions[ExtensionIndex]; + ExtensionAdjustment->LastRepeatIndex = ExtensionCount - 1; + ExtensionAdjustment->RepeatOffsetX = (WordWidth - EndpointWidth - ExtensionWidth) / ExtensionCount; + */ + } + + GlyphIndex = At; + } + } + } + break; + } + + if(Op->Kind < KBTS_OP_KIND_GPOS_METRICS) + { + kbts_un DeltaCount = S->WrittenCount - GlyphArray->Count; + GlyphArray->Count += (kbts_u32)DeltaCount; + GlyphArray->TotalCount += (kbts_u32)DeltaCount; + } + + KBTS_INSTRUMENT_END + return 0; +} + +static kbts_glyph kbts_Substitute1(kbts_shape_state *ShapeState, kbts_lookup_list *LookupList, kbts_feature *Feature, kbts_skip_flags SkipFlags, kbts_glyph *Glyph) +{ + kbts_glyph Result = *Glyph; + + kbts_glyph_array GlyphArray = kbts_GlyphArray(Glyph, 1, 1, 1); + + kbts_iterate_lookups IterateLookups = kbts_IterateLookups(LookupList, Feature); + while(kbts_NextLookup(&IterateLookups)) + { + kbts_gsub_frame Frames[8]; + Frames[0].InputGlyphCount = 1; + kbts_u32 FrameCount = 1; + + kbts_u32 GlyphCount = 1; + + while(FrameCount) + { + kbts_substitution_result_flags SubstitutionResult = kbts_DoSubstitution(ShapeState, LookupList, Frames, &FrameCount, &GlyphArray, 0, SkipFlags, 0); + if(SubstitutionResult & KBTS_SUBSTITUTION_RESULT_FLAG_GROW_BUFFER) + { + goto Done; + } + } + } + +Done:; + return Result; +} + +typedef struct kbts_attach_state +{ + kbts_syllabic_position CurrentPosition; + kbts_syllabic_position LastPositionThatWasNotPreBaseMatra; + kbts_indic_syllabic_class LastClass; + kbts_un Start; + kbts_un OnePastLast; +} kbts_attach_state; + +typedef struct kbts_begin_cluster_result +{ + kbts_un ClusterGlyphCount; + kbts_un InsertedGlyphCount; +} kbts_begin_cluster_result; + +static kbts_begin_cluster_result kbts_BeginCluster(kbts_shape_state *ShapeState, kbts_glyph *Glyphs, kbts_un GlyphCount) +{ + kbts_begin_cluster_result Result = KBTS_ZERO; + Result.ClusterGlyphCount = GlyphCount; + kbts_op_state *OpState = &ShapeState->OpState; + kbts_shape_config *Config = ShapeState->Config; + kbts_font *Font = Config->Font; + ShapeState->RealCluster = 0; + + switch(Config->Shaper) + { + case KBTS_SHAPER_INDIC: + { + kbts_lookup_list *LookupList = kbts_GetLookupList(Font->ShapingTables[KBTS_SHAPING_TABLE_GSUB]); + + kbts_un OtherCount = 0; + while((OtherCount < GlyphCount) && ((Glyphs[OtherCount].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_OTHER) || (Glyphs[OtherCount].SyllabicClass >= KBTS_INDIC_SYLLABIC_CLASS_COUNT))) + { + ++OtherCount; + } + + if(OtherCount) + { + // Not an Indic syllable. + // Just pass it along. + Result.ClusterGlyphCount = OtherCount; + } + else + { + kbts_un ScanGlyphIndex = 0; + kbts_un State = 0; + kbts_un Broken = 1; + kbts_un BrokenState = 0; + + while((ScanGlyphIndex < GlyphCount) && (State < KBTS_INDIC_SYLLABIC_STATE_COUNT)) + { + kbts_glyph *Glyph = &Glyphs[ScanGlyphIndex]; + kbts_un Class = Glyph->SyllabicClass; + + if(KBTS_IN_SET(Class, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_RA)(KBTS_INDIC_SYLLABIC_CLASS_CONSONANT) + (KBTS_INDIC_SYLLABIC_CLASS_VOWEL)(KBTS_INDIC_SYLLABIC_CLASS_DOTTED_CIRCLE) + (KBTS_INDIC_SYLLABIC_CLASS_PLACEHOLDER)(KBTS_INDIC_SYLLABIC_CLASS_SYMBOL)))) + { + Broken = 0; + } + BrokenState = (BrokenState << 1) | Broken; + + State = kbts_IndicSyllabicTransition[Class][State]; + State -= 1; // @Incomplete @Cleanup: Decrement every state by 1 in the transition table. + ScanGlyphIndex += 1; + } + + if(State > KBTS_INDIC_SYLLABIC_STATE_COUNT) + { + ScanGlyphIndex -= State - KBTS_INDIC_SYLLABIC_STATE_COUNT; + BrokenState >>= State - KBTS_INDIC_SYLLABIC_STATE_COUNT; + + if(!ScanGlyphIndex) + { + // If we backtrack all the way to the beginning, still eat a character. + ScanGlyphIndex = 1; + } + } + + // NOTE: Symbols, vedics, modifiers, matras have their syllabic positions tagged at build time. + // It is tempting to use Unicode's positional information for consonants, too, but OpenType + // _strongly_ recommends that shapers use the font's tables instead, ie. doing tentative lookups + // with specific features. + + kbts_gsub_frame *Frames = KBTS_POINTER_AFTER(kbts_gsub_frame, OpState); + kbts_glyph *OnePastLastSyllableGlyph = Glyphs + ScanGlyphIndex; + kbts_script Script = ShapeState->Config->Script; + + if((Config->Script == KBTS_SCRIPT_KANNADA) && (ScanGlyphIndex >= 3) && (Glyphs[0].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_RA) && + (Glyphs[1].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && (Glyphs[2].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ)) + { + // In older versions of Unicode (~4.x, pre-2004), Ra-Virama-Zwj was recommended in Kannada + // to communicate the intent of displaying (Ra + (next consonant as below-base form)). + // This was changed in Unicode 5. Now, the recommended sequence to display (Ra + + // (next consonant as below-base form)) is Ra-Zwj-Virama. + // Since Ra-Virama-Zwj is not a useful sequence that happens organically in Kannada, + // we are free to transform it into Ra-Zwj-Virama here without losing information. + kbts_glyph Swap = Glyphs[1]; + Glyphs[1] = Glyphs[2]; + Glyphs[2] = Swap; + } + + kbts_glyph_flags RephFlags = KBTS_GLYPH_FLAG_RPHF; + kbts_un OnePastRephIndex = 0; + { // Reph tagging. + // This first pass only figures out where the reph ends. + // We delay updating glyph properties until we know whether the reph is the base or not. + kbts_glyph *First = &Glyphs[0]; + kbts_glyph *Second = &Glyphs[1]; + kbts_feature *Rphf = Config->Rphf; + + switch(Config->IndicScriptProperties.RephEncoding) + { + case KBTS_REPH_ENCODING_LOGICAL_REPHA: + if(First->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_REPHA) + { + RephFlags = 0; + OnePastRephIndex = 1; + } + break; + + case KBTS_REPH_ENCODING_IMPLICIT: + if((ScanGlyphIndex >= 2) && (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && kbts_WouldSubstitute(ShapeState, LookupList, Frames, Rphf, 0, Glyphs, 2)) + { + OnePastRephIndex = 2; + } + break; + + case KBTS_REPH_ENCODING_EXPLICIT: + if((ScanGlyphIndex >= 3) && (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && (Glyphs[2].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ) && + kbts_WouldSubstitute(ShapeState, LookupList, Frames, Rphf, 0, Glyphs, 3)) + { + OnePastRephIndex = 3; + } + break; + } + + // Extend the reph with suffixed joiners. + if(OnePastRephIndex) + { + while((OnePastRephIndex < ScanGlyphIndex) && KBTS_IN_SET(Glyphs[OnePastRephIndex].SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_ZWJ)(KBTS_INDIC_SYLLABIC_CLASS_ZWNJ)))) + { + OnePastRephIndex += 1; + } + } + } + + kbts_feature *Pref = Config->Pref; + kbts_un BaseIndex = ScanGlyphIndex; + kbts_un LastConsonantIndex = 0; + kbts_syllabic_position LastConsonantPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + if(Config->DottedCircle.Id && (BrokenState & 1)) + { + // Insert a dotted circle after Reph. + for(kbts_un GlyphIndex = GlyphCount; GlyphIndex > OnePastRephIndex; --GlyphIndex) + { + Glyphs[GlyphIndex] = Glyphs[GlyphIndex - 1]; + } + ScanGlyphIndex += 1; + Result.InsertedGlyphCount = 1; + + Glyphs[OnePastRephIndex] = Config->DottedCircle; + BaseIndex = OnePastRephIndex; + } + else + { + // Going backwards, tag blwf and pstf consonants until we get to the base. + kbts_glyph Scratch[3]; + Scratch[0] = Config->Virama; + Scratch[2] = Config->Virama; + + kbts_feature *Pstf = Config->Pstf; + kbts_feature *Blwf = Config->Blwf; + kbts_feature *Locl = Config->Locl; + kbts_feature *Vatu = Config->Vatu; + + // pstf forms come last, then blwf. + kbts_feature *SectionFeature = Config->Pstf; + kbts_syllabic_position SectionPosition = KBTS_SYLLABIC_POSITION_POSTBASE_CONSONANT; + // If we see no consonant/matra, then surely we want to attach to the base. + kbts_syllabic_position SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + kbts_indic_syllabic_class LastClass = KBTS_INDIC_SYLLABIC_CLASS_COUNT; + + for(kbts_un GlyphIndex = ScanGlyphIndex; GlyphIndex > OnePastRephIndex; --GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex - 1]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + + switch(Class) + { + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT: + case KBTS_INDIC_SYLLABIC_CLASS_RA: + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_WITH_STACKER: + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL: + // Apply locl first. + Scratch[1] = kbts_Substitute1(ShapeState, LookupList, Locl, KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ, Glyph); + + // Microsoft says to "move backwards until a consonant is found that does not have a below-base + // or post-base form". + // As with everything else the spec says, it is wrong. There are cases in which the only consonant + // in a syllable has a below-base or post-base form. In those cases, we still want them to be the + // syllable base. + // So, as we sweep backward, set the base index on consonants unconditionally. + // @Robustness: Do we want to update Base only if we do not match Pref/Vatu? + BaseIndex = GlyphIndex - 1; + + if(kbts_WouldSubstitute(ShapeState, LookupList, Frames, Pref, 0, Scratch, 2) || kbts_WouldSubstitute(ShapeState, LookupList, Frames, Pref, 0, Scratch + 1, 2) || + kbts_WouldSubstitute(ShapeState, LookupList, Frames, Vatu, 0, Scratch, 2) || kbts_WouldSubstitute(ShapeState, LookupList, Frames, Vatu, 0, Scratch + 1, 2)) + { + SyllabicPosition = KBTS_SYLLABIC_POSITION_POSTBASE_CONSONANT; + } + else + { + for(;;) + { + if(kbts_WouldSubstitute(ShapeState, LookupList, Frames, SectionFeature, 0, Scratch, 2) || kbts_WouldSubstitute(ShapeState, LookupList, Frames, SectionFeature, 0, Scratch + 1, 2)) + { + SyllabicPosition = SectionPosition; + break; + } + else if(SectionPosition == KBTS_SYLLABIC_POSITION_POSTBASE_CONSONANT) + { + SectionFeature = Config->Blwf; + SectionPosition = KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT; + // Retry with Blwf. + } + else + { + goto DoneScanningForBase; + } + } + } + + if(!LastConsonantIndex) + { + LastConsonantIndex = GlyphIndex - 1; + LastConsonantPosition = SyllabicPosition; + } + + Glyph->SyllabicPosition = SyllabicPosition; + break; + + case KBTS_INDIC_SYLLABIC_CLASS_VOWEL: + case KBTS_INDIC_SYLLABIC_CLASS_PLACEHOLDER: + case KBTS_INDIC_SYLLABIC_CLASS_DOTTED_CIRCLE: + BaseIndex = GlyphIndex - 1; + goto DoneScanningForBase; + break; + + case KBTS_INDIC_SYLLABIC_CLASS_HALANT: + if(LastClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ) + { + // Explicit half form. + // Since half forms are always before the base, we can safely stop here. + goto DoneScanningForBase; + } + case KBTS_INDIC_SYLLABIC_CLASS_NUKTA: + case KBTS_INDIC_SYLLABIC_CLASS_ZWJ: + case KBTS_INDIC_SYLLABIC_CLASS_ZWNJ: + // @Incomplete: Register Shifter + Glyph->SyllabicPosition = SyllabicPosition; + break; + } + + LastClass = Class; + } + DoneScanningForBase:; + } + + // Fix reph position now. + if(OnePastRephIndex) + { + kbts_syllabic_position RephPosition = KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH; + kbts_glyph_flags Flags = RephFlags; + kbts_un OnePastLast = OnePastRephIndex; + if(BaseIndex == ScanGlyphIndex) + { + RephPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + Flags = 0; + + BaseIndex = 0; + OnePastRephIndex = 0; + } + + KBTS_FOR(GlyphIndex, 0, OnePastLast) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + Glyph->SyllabicPosition = RephPosition; + Glyph->Flags |= Flags; + } + } + + if(BaseIndex < ScanGlyphIndex) + { + Glyphs[BaseIndex].SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + + if(!LastConsonantIndex) + { + LastConsonantIndex = BaseIndex; + // LastConsonantPosition is already set to SYLLABLE_BASE. + } + } + + { // Reorder marks. + // @Cleanup @Speed: Supposedly, NORMALIZE already does this... + kbts_glyph *ReorderGlyph = Glyphs + ScanGlyphIndex - 1; + while(ReorderGlyph >= Glyphs) + { + if(ReorderGlyph->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_NUKTA) + { + kbts_glyph *Prev = ReorderGlyph - 1; + + while((Prev >= Glyphs) && KBTS_IN_SET(Prev->SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_HALANT)(KBTS_INDIC_SYLLABIC_CLASS_VEDIC_SIGN)))) + { + kbts_glyph Swap = *Prev; + *Prev = Prev[1]; + Prev[1] = Swap; + + Prev -= 1; + } + + ReorderGlyph = Prev; + } + else + { + ReorderGlyph -= 1; + } + } + } + + { // @Temporary @Cleanup + // Left matras should be ordered backwards. + // We want to bake this ordering into our sort, so we increase our syllabic position bits + // and sub-order matras with the low nibble. (There should only be 4 matras tops, anyway.) + kbts_un LeftMatraCount = 0; + KBTS_FOR(GlyphIndex, 0, ScanGlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + Glyph->SyllabicPosition <<= 4; + + if(Glyph->SyllabicPosition == (KBTS_SYLLABIC_POSITION_PREBASE_MATRA << 4)) + { + Glyph->SyllabicPosition += (15 - LeftMatraCount++) & 0xF; + } + } + } + + { // Attach stuff to the right of consonants/matras. + // Pre-base consonants, the base consonant, and matras all have right attachments, + // while post-base consonants have left attachments. + // Since matras always come after all consonants, we try to separate the buffer into three parts: + // a pre-base+base part (right attachments), a post-base consonant part (left attachments), and + // a post-consonant part (right attachments again). + // This part handles right attachments. Left attachments were handled in the base syllable search. + kbts_attach_state States[2] = { + {KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH << 4, KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH << 4, KBTS_INDIC_SYLLABIC_CLASS_COUNT, OnePastRephIndex, BaseIndex}, + {(kbts_u8)(LastConsonantPosition << 4), (kbts_u8)(LastConsonantPosition << 4), KBTS_INDIC_SYLLABIC_CLASS_COUNT, LastConsonantIndex + 1, ScanGlyphIndex}, + }; + kbts_un Iterations = KBTS_MAX(States[0].OnePastLast - States[0].Start, States[1].OnePastLast - States[1].Start); + KBTS_FOR(GlyphIndex, 0, Iterations) + { + KBTS_FOR(StateIndex, 0, KBTS_ARRAY_LENGTH(States)) + { + kbts_attach_state *Attach = &States[StateIndex]; + + if((Attach->Start + GlyphIndex) < Attach->OnePastLast) + { + kbts_glyph *Glyph = &Glyphs[Attach->Start + GlyphIndex]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + switch(Class) + { + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT: + case KBTS_INDIC_SYLLABIC_CLASS_RA: + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_WITH_STACKER: + case KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL: + // This only happens in the pre-base state. + Glyph->SyllabicPosition = (KBTS_SYLLABIC_POSITION_PREBASE_CONSONANT << 4); + Attach->CurrentPosition = (KBTS_SYLLABIC_POSITION_PREBASE_CONSONANT << 4); + break; + + case KBTS_INDIC_SYLLABIC_CLASS_MATRA_POST: + // This specific category (which is composed of a single character) may come after + // a syllable modifier in a sequence like Consonant-SyllableModifier-MatraPost. + // In this very particular case (!), the syllable modifier is attached _to the matra_, + // and not to the consonant. + if(Attach->LastClass == KBTS_INDIC_SYLLABIC_CLASS_SYLLABLE_MODIFIER) + { + Glyph[-1].SyllabicPosition = Glyph->SyllabicPosition; + } + case KBTS_INDIC_SYLLABIC_CLASS_MATRA: + Attach->CurrentPosition = Glyph->SyllabicPosition; + if((Attach->CurrentPosition >> 4) != KBTS_SYLLABIC_POSITION_PREBASE_MATRA) + { + Attach->LastPositionThatWasNotPreBaseMatra = Attach->CurrentPosition; + } + break; + + case KBTS_INDIC_SYLLABIC_CLASS_HALANT: + if((Attach->CurrentPosition >> 4) == KBTS_SYLLABIC_POSITION_PREBASE_MATRA) + { + // Uniscribe does not reorder halants with pre-base matras. Not sure why. + Glyph->SyllabicPosition = Attach->LastPositionThatWasNotPreBaseMatra; + break; + } + case KBTS_INDIC_SYLLABIC_CLASS_NUKTA: + case KBTS_INDIC_SYLLABIC_CLASS_ZWJ: + case KBTS_INDIC_SYLLABIC_CLASS_ZWNJ: + // @Incomplete: Register Shifter + Glyph->SyllabicPosition = Attach->CurrentPosition; + break; + } + Attach->LastClass = Class; + } + } + } + } + + { // Do the sort! + // NOTE: It is important that we sort _now_, because some characters will be reordered across the base from + // where they started, which can change which features will apply to them. + KBTS_FOR(Iteration, 0, ScanGlyphIndex) + { + KBTS_FOR(GlyphIndex, 1, ScanGlyphIndex) + { + kbts_glyph *Left = &Glyphs[GlyphIndex - 1]; + kbts_glyph *Right = &Glyphs[GlyphIndex]; + + if(Left->SyllabicPosition > Right->SyllabicPosition) + { + kbts_glyph Swap = *Left; + *Left = *Right; + *Right = Swap; + + // Make sure we don't lose track of the base... + if(GlyphIndex == BaseIndex) + { + BaseIndex = GlyphIndex - 1; + } + else if((GlyphIndex - 1) == BaseIndex) + { + BaseIndex = GlyphIndex; + } + } + } + } + } + + { // @Temporary @Cleanup + // Revert our syllabic position shift for now. + KBTS_FOR(GlyphIndex, 0, ScanGlyphIndex) + { + Glyphs[GlyphIndex].SyllabicPosition >>= 4; + } + } + + // This is what Harfbuzz does: + + // - NUKT, AKHN, RKRF, VATU, CJCT are active for all characters, but they count ZWJ/ZWNJ in their sequence + // lookups. + // - Note that, by default, Harfbuzz skips ZWJ/ZWNJ in sequence lookups, and selectively disables it for CJCT. + // - Anyway, since these are active for all characters, we don't need flags for them. + + // (RPHF was already handled before sorting.) + + { // All pre-base glyphs get HALF, which is then selectively disabled in front of ZWNJs. + kbts_glyph_flags BaseFlags = 0; + if(!Config->IndicScriptProperties.BlwfPostOnly) + { + BaseFlags = KBTS_GLYPH_FLAG_BLWF; + } + + kbts_indic_syllabic_class LastClass = 0; + for(kbts_un GlyphIndex = BaseIndex; GlyphIndex > 0; --GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex - 1]; + kbts_glyph_flags Flags = BaseFlags; + + if(LastClass != KBTS_INDIC_SYLLABIC_CLASS_ZWNJ) + { + Flags |= KBTS_GLYPH_FLAG_HALF; + } + + Glyph->Flags |= Flags; + LastClass = Glyph->SyllabicClass; + } + } + + // All post-base glyphs get BLWF, ABVF, PSTF. Some get PREF. + kbts_glyph Scratch[2] = {0}; + kbts_glyph *LastGlyph = 0; + KBTS_FOR(GlyphIndex, BaseIndex + 1, ScanGlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + // It is tempting to apply PREF to every glyph after the base. + // However, the PREF flag is also used to find the syllable base again in EndCluster, + // so we have to be precise with it. + Scratch[1] = *Glyph; + if(kbts_WouldSubstitute(ShapeState, LookupList, Frames, Pref, 0, Scratch, 2)) + { + LastGlyph->Flags |= KBTS_GLYPH_FLAG_PREF; + Glyph->Flags |= KBTS_GLYPH_FLAG_PREF; + } + + Glyph->Flags |= (KBTS_GLYPH_FLAG_BLWF | KBTS_GLYPH_FLAG_ABVF | KBTS_GLYPH_FLAG_PSTF); + Scratch[0] = Scratch[1]; + LastGlyph = Glyph; + } + + // The base only inherits stuff after it, up to whatever and not including what was grabbed by + // post-base consonants. + if(BaseIndex < ScanGlyphIndex) + { + Glyphs[BaseIndex].SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + + kbts_u64 Classes = (1ull << KBTS_INDIC_SYLLABIC_CLASS_HALANT) | (1ull << KBTS_INDIC_SYLLABIC_CLASS_VEDIC_SIGN) | (1ull << KBTS_INDIC_SYLLABIC_CLASS_NUKTA) | + (1ull << KBTS_INDIC_SYLLABIC_CLASS_ZWJ) | (1ull << KBTS_INDIC_SYLLABIC_CLASS_ZWNJ); + kbts_glyph *Next = &Glyphs[BaseIndex + 1]; + while((Next < OnePastLastSyllableGlyph) && (Next->SyllabicPosition < KBTS_SYLLABIC_POSITION_SYLLABLE_BASE) && ((1ull << Next->SyllabicClass) & Classes)) + { + Next->SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + + Next += 1; + } + } + + Result.ClusterGlyphCount = ScanGlyphIndex; + ShapeState->RealCluster = 1; + } + } + break; + + case KBTS_SHAPER_USE: + { + kbts_un OtherCount = 0; + while((OtherCount < GlyphCount) && ((Glyphs[OtherCount].UseClass == KBTS_USE_SYLLABIC_CLASS_OTHER) || + (Glyphs[OtherCount].UseClass == KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_POST))) + { + OtherCount += 1; + } + + if(OtherCount) + { + Result.ClusterGlyphCount = OtherCount; + } + else + { + // Parse a real cluster. + kbts_u8 State = 0; + kbts_un ScanGlyphIndex = 0; + + while((ScanGlyphIndex < GlyphCount) && (State < KBTS_USE_STATE_s0)) + { + kbts_glyph *Glyph = &Glyphs[ScanGlyphIndex++]; + State = kbts_UseTransition[Glyph->UseClass][State]; + // @Incomplete: Remove this!!! + State -= 1; + } + + if(State >= KBTS_USE_STATE_s0) + { + ScanGlyphIndex -= 1; + } + if((ScanGlyphIndex < GlyphCount) && (Glyphs[ScanGlyphIndex].UseClass == KBTS_USE_SYLLABIC_CLASS_ZWNJ)) + { + ScanGlyphIndex += 1; + } + if(!ScanGlyphIndex) ScanGlyphIndex = 1; + + Result.ClusterGlyphCount = ScanGlyphIndex; + ShapeState->RealCluster = 1; + } + } break; + + case KBTS_SHAPER_KHMER: + { + kbts_un OtherCount = 0; + while((OtherCount < GlyphCount) && ((Glyphs[OtherCount].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_OTHER) || + (Glyphs[OtherCount].SyllabicClass >= KBTS_KHMER_SYLLABIC_CLASS_COUNT))) + { + OtherCount += 1; + } + + if(OtherCount) + { + Result.ClusterGlyphCount = OtherCount; + } + else + { + kbts_u8 State = 0; + kbts_un ScanGlyphIndex = 0; + while((ScanGlyphIndex < GlyphCount) && (State < KBTS_KHMER_SYLLABIC_STATE_COUNT)) + { + kbts_glyph *Glyph = &Glyphs[ScanGlyphIndex++]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + + State = kbts_KhmerSyllabicTransition[Class][State]; + // @Incomplete: Remove this! + State -= 1; + } + + if(State >= KBTS_KHMER_SYLLABIC_STATE_COUNT) + { + ScanGlyphIndex -= 1; + } + if(!ScanGlyphIndex) ScanGlyphIndex = 1; + + if(Config->DottedCircle.Id && + !KBTS_IN_SET64(Glyphs->SyllabicClass, KBTS_SET64((KBTS_INDIC_SYLLABIC_CLASS_CONSONANT)(KBTS_INDIC_SYLLABIC_CLASS_RA) + (KBTS_INDIC_SYLLABIC_CLASS_VOWEL)(KBTS_INDIC_SYLLABIC_CLASS_DOTTED_CIRCLE) + (KBTS_INDIC_SYLLABIC_CLASS_PLACEHOLDER)))) + { + // Broken cluster. + // Insert a dotted circle. + for(kbts_un GlyphIndex = GlyphCount; GlyphIndex; --GlyphIndex) + { + Glyphs[GlyphIndex] = Glyphs[GlyphIndex - 1]; + } + ScanGlyphIndex += 1; + Result.InsertedGlyphCount = 1; + Glyphs[0] = Config->DottedCircle; + } + + // In Khmer, the first glyph is always the base. + + kbts_glyph PreBaseGlyphs[3]; + int SawHalantRa = 0; + kbts_un PreBaseGlyphCount = 0; + kbts_un Classes = 0; + kbts_un WriteCursor = ScanGlyphIndex - 1; + for(kbts_un GlyphIndex = ScanGlyphIndex; GlyphIndex; --GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex - 1]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + + if(GlyphIndex > 1) {Glyph->Flags |= KBTS_GLYPH_FLAG_ABVF | KBTS_GLYPH_FLAG_BLWF | KBTS_GLYPH_FLAG_PSTF;} + + Classes = ((Classes << 8) | Class) & 0xFFFF; + + if(Class == KBTS_INDIC_SYLLABIC_CLASS_VOWEL_PRE) + { + PreBaseGlyphs[PreBaseGlyphCount++] = *Glyph; + } + else if(!SawHalantRa && (Classes == (KBTS_INDIC_SYLLABIC_CLASS_HALANT | (KBTS_INDIC_SYLLABIC_CLASS_RA << 8)))) + { + kbts_glyph *Ra = &Glyphs[GlyphIndex]; + Glyph->Flags |= KBTS_GLYPH_FLAG_PREF; + Ra->Flags |= KBTS_GLYPH_FLAG_PREF; + + PreBaseGlyphs[PreBaseGlyphCount++] = *Glyph; + PreBaseGlyphs[PreBaseGlyphCount++] = *Ra; + WriteCursor += 1; // Cancel the Ra write. + // All of the glyphs written so far need to be flagged with cfar. + KBTS_FOR(CfarGlyphIndex, WriteCursor, ScanGlyphIndex) + { + Glyphs[CfarGlyphIndex].Flags |= KBTS_GLYPH_FLAG_CFAR; + } + SawHalantRa = 1; + } + else + { + Glyphs[WriteCursor--] = *Glyph; + } + } + + KBTS_FOR(PreBaseGlyphIndex, 0, PreBaseGlyphCount) + { + Glyphs[PreBaseGlyphIndex] = PreBaseGlyphs[PreBaseGlyphIndex]; + } + + Result.ClusterGlyphCount = ScanGlyphIndex; + } + } break; + + case KBTS_SHAPER_MYANMAR: + { + kbts_un OtherCount = 0; + while((OtherCount < GlyphCount) && ((Glyphs[OtherCount].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_OTHER) || + (Glyphs[OtherCount].SyllabicClass >= KBTS_MYANMAR_SYLLABIC_CLASS_COUNT))) + { + OtherCount += 1; + } + + if(OtherCount) + { + Result.ClusterGlyphCount = OtherCount; + } + else + { + kbts_u8 State = 0; + kbts_un ScanGlyphIndex = 0; + while((ScanGlyphIndex < GlyphCount) && (State < KBTS_MYANMAR_SYLLABIC_STATE_COUNT)) + { + kbts_glyph *Glyph = &Glyphs[ScanGlyphIndex++]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + + State = kbts_MyanmarSyllabicTransition[Class][State]; + // @Incomplete: Remove this! + State -= 1; + } + + if(State >= KBTS_MYANMAR_SYLLABIC_STATE_COUNT) + { + ScanGlyphIndex -= 1; + } + if(!ScanGlyphIndex) ScanGlyphIndex = 1; + + ShapeState->RealCluster = 1; + Result.ClusterGlyphCount = ScanGlyphIndex; + } + } break; + } + + return Result; +} + +typedef struct kbts_end_cluster_result +{ + int InsertDottedCircle; + kbts_un DottedCircleIndex; +} kbts_end_cluster_result; + +static kbts_end_cluster_result kbts_EndCluster(kbts_shape_state *ShapeState, kbts_glyph_array *Cluster) +{ + kbts_end_cluster_result Result = KBTS_ZERO; + kbts_shape_config *Config = ShapeState->Config; + kbts_glyph *Glyphs = Cluster->Glyphs; + kbts_un GlyphCount = Cluster->Count; + + switch(Config->Shaper) + { + case KBTS_SHAPER_INDIC: + if(GlyphCount > 1) + { + // Final syllable reordering. + // We are just copying Harfbuzz here, because I've read all the documentation I can and, frankly, I have no idea. + kbts_feature *Pref = Config->Pref; + + kbts_u32 ViramaId = Config->Virama.Id; + KBTS_FOR(GlyphIndex, 0, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + // Harfbuzz tests for (ligated | multiplied) here. + // I don't really get why, because, supposedly, all viramas should be + // classified as halants regardless. + if(ViramaId && (Glyph->Id == ViramaId)) + { + Glyph->SyllabicClass = KBTS_INDIC_SYLLABIC_CLASS_HALANT; + Glyph->Flags &= ~(KBTS_GLYPH_FLAG_LIGATURE | KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION); + } + else if(Glyph->Flags & KBTS_GLYPH_FLAG_LIGATURE) + { + // We can't know the syllabic classes of ligatures for sure. + Glyph->SyllabicClass = KBTS_INDIC_SYLLABIC_CLASS_COUNT; + } + } + + // Locate the syllable base. + kbts_un BaseIndex = GlyphCount; + { + kbts_un AfterPreBaseIndex = 0; + while((AfterPreBaseIndex < GlyphCount) && (Glyphs[AfterPreBaseIndex].SyllabicPosition < KBTS_SYLLABIC_POSITION_SYLLABLE_BASE)) + { + ++AfterPreBaseIndex; + } + + if(AfterPreBaseIndex < GlyphCount) + { + BaseIndex = AfterPreBaseIndex; + + if(Pref && ((AfterPreBaseIndex + 1) < GlyphCount)) + { + // If we find a pre-base-reordering ra, then the base is probably right after it! + kbts_un At = AfterPreBaseIndex + 1; + while((At < GlyphCount) && !(Glyphs[At].Flags & KBTS_GLYPH_FLAG_PREF)) + { + ++At; + } + + // If we are not a consonant, then we are attached to a consonant. + // If we are a pref-able consonant, but we did not form a pref, then we should be right after the base. + // Either way, we are very close to the base. + kbts_glyph *Prefable = &Glyphs[At]; + if((At < GlyphCount) && + (!(Prefable->Flags & KBTS_GLYPH_FLAG_GENERATED_BY_GSUB) || !(Prefable->Flags & KBTS_GLYPH_FLAG_LIGATURE) || (Prefable->Flags & KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION))) + { + while((At < GlyphCount) && (Prefable->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT)) + { + ++At; + ++Prefable; + } + + if(At < GlyphCount) + { + Prefable->SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + BaseIndex = At; + // Fall through to the Malayalam test. + } + } + } + + if(Config->Script == KBTS_SCRIPT_MALAYALAM) + { + // In Malayalam, the base is after below-base forms. + // (We actually just give all below-base forms the base pos.) + // @Speed: This would be way simpler with a null sentinel at the end of Glyphs! + kbts_un At = BaseIndex + 1; + while(At < GlyphCount) + { + while((At < GlyphCount) && KBTS_IN_SET(Glyphs[At].SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_ZWJ)(KBTS_INDIC_SYLLABIC_CLASS_ZWNJ)))) + { + ++At; + } + + if((At < GlyphCount) && (Glyphs[At].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT)) + { + ++At; + } + else + { + break; + } + + while((At < GlyphCount) && KBTS_IN_SET(Glyphs[At].SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_ZWJ)(KBTS_INDIC_SYLLABIC_CLASS_ZWNJ)))) + { + ++At; + } + + if(At < GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[At]; + if(kbts_SyllabicClassIsConsonant(Glyph->SyllabicClass) && (Glyph->SyllabicPosition == KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT)) + { + Glyph->SyllabicPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + BaseIndex = At; + // Do not break; keep matching below-base forms. + } + } + } + } + } + + if(BaseIndex && (BaseIndex < GlyphCount) && (Glyphs[BaseIndex].SyllabicPosition > KBTS_SYLLABIC_POSITION_SYLLABLE_BASE)) + { + BaseIndex -= 1; + } + + if((BaseIndex == GlyphCount) && (Glyphs[GlyphCount - 1].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ)) + { + BaseIndex = GlyphCount - 1; + } + + if(BaseIndex < GlyphCount) + { + while(BaseIndex && KBTS_IN_SET(Glyphs[BaseIndex].SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_NUKTA)(KBTS_INDIC_SYLLABIC_CLASS_HALANT)))) + { + BaseIndex -= 1; + } + } + } + + // Reorder matras. + if(BaseIndex && (GlyphCount > 1)) + { + kbts_un ToIndex = BaseIndex - 1; + if(BaseIndex == GlyphCount) + { + ToIndex = GlyphCount - 2; + } + + if((Config->Script != KBTS_SCRIPT_MALAYALAM) && (Config->Script != KBTS_SCRIPT_TAMIL)) + { + for(;;) + { + while(ToIndex && !KBTS_IN_SET(Glyphs[ToIndex].SyllabicClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_MATRA)(KBTS_INDIC_SYLLABIC_CLASS_MATRA_POST)(KBTS_INDIC_SYLLABIC_CLASS_HALANT)))) + { + --ToIndex; + } + + kbts_glyph *Glyph = &Glyphs[ToIndex]; + if((Glyph->SyllabicClass != KBTS_INDIC_SYLLABIC_CLASS_HALANT) || (Glyph->SyllabicPosition == KBTS_SYLLABIC_POSITION_PREBASE_MATRA)) + { + // We have nothing to move. + ToIndex = 0; + + break; + } + else if(ToIndex && ((ToIndex + 1) < GlyphCount) && (Glyphs[ToIndex + 1].SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ)) + { + // Zwj+Halant cancels matra movement when the Halant is not attached to the matra. + --ToIndex; + } + else + { + break; + } + } + } + + if(ToIndex && (Glyphs[ToIndex].SyllabicPosition != KBTS_SYLLABIC_POSITION_PREBASE_MATRA)) + { + for(kbts_un MatraIndex = ToIndex; MatraIndex; --MatraIndex) + { + kbts_glyph *Matra = &Glyphs[MatraIndex - 1]; + + if(Matra->SyllabicPosition == KBTS_SYLLABIC_POSITION_PREBASE_MATRA) + { + kbts_glyph MatraToReorder = *Matra; + + KBTS_FOR(GlyphIndex, MatraIndex, ToIndex + 1) + { + Glyphs[GlyphIndex - 1] = Glyphs[GlyphIndex]; + } + + Glyphs[ToIndex] = MatraToReorder; + ToIndex -= 1; + } + } + } + } + + // Reorder reph. + // We should only reorder reph when it is a single Repha glyph, and not a Ra sequence. + if((Glyphs[0].SyllabicPosition == KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH) && (Glyphs[1].SyllabicPosition != KBTS_SYLLABIC_POSITION_RA_TO_BECOME_REPH)) + { + kbts_reph_position RephPosition = Config->IndicScriptProperties.RephPosition; + + kbts_un ToIndex = 0; + + KBTS_FOR(GlyphIndex, 0, BaseIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) + { + ToIndex = GlyphIndex; + + if((GlyphIndex + 1) < BaseIndex) + { + kbts_u8 NextClass = Glyphs[GlyphIndex + 1].SyllabicClass; + + if((NextClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ) || (NextClass == KBTS_INDIC_SYLLABIC_CLASS_ZWNJ)) + { + ToIndex = GlyphIndex + 1; + } + } + + break; + } + } + + if(!ToIndex) + { + if(RephPosition == KBTS_REPH_POSITION_AFTER_SUBJOINED) + { + KBTS_FOR(GlyphIndex, BaseIndex, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + kbts_u8 SyllabicPosition = Glyph->SyllabicPosition; + + if(KBTS_IN_SET(SyllabicPosition, KBTS_SET32((KBTS_SYLLABIC_POSITION_POSTBASE_CONSONANT)(KBTS_SYLLABIC_POSITION_AFTER_POST)(KBTS_SYLLABIC_POSITION_SMVD)))) + { + ToIndex = GlyphIndex - 1; + + break; + } + } + } + else if(RephPosition == KBTS_REPH_POSITION_AFTER_MAIN) + { + KBTS_FOR(GlyphIndex, BaseIndex, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->SyllabicPosition > KBTS_SYLLABIC_POSITION_AFTER_MAIN) + { + ToIndex = GlyphIndex - 1; + + break; + } + } + } + } + + if(!ToIndex) + { + // As a fallback, move reph to the end of the syllable. + for(kbts_un GlyphIndex = GlyphCount; GlyphIndex; --GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex - 1]; + + if(Glyph->SyllabicPosition != KBTS_SYLLABIC_POSITION_SMVD) + { + ToIndex = GlyphIndex - 1; + + break; + } + } + + // Matras will still come after reph. + kbts_glyph *Glyph = &Glyphs[ToIndex]; + if(Glyph->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) + { + KBTS_FOR(MatraIndex, BaseIndex + 1, ToIndex) + { + kbts_glyph *Matra = &Glyphs[MatraIndex]; + kbts_u8 Class = Matra->SyllabicClass; + + if(KBTS_IN_SET(Class, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_MATRA)(KBTS_INDIC_SYLLABIC_CLASS_MATRA_POST)(KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL)))) + { + ToIndex -= 1; + } + } + } + } + + if(ToIndex) + { + // Do the reorder! + kbts_glyph Reph = Glyphs[0]; + + KBTS_FOR(GlyphIndex, 0, ToIndex) + { + Glyphs[GlyphIndex] = Glyphs[GlyphIndex + 1]; + } + + Glyphs[ToIndex] = Reph; + + if(BaseIndex && (BaseIndex <= ToIndex)) + { + BaseIndex -= 1; + } + } + } + + // Reorder pre-base-reordering consonants. + if(Pref) + { + kbts_un PrefIndex = 0; + + KBTS_FOR(GlyphIndex, BaseIndex + 1, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + if(Glyph->Flags & KBTS_GLYPH_FLAG_PREF) + { + PrefIndex = GlyphIndex; + + break; + } + } + + if(PrefIndex) + { + kbts_glyph PrefGlyph = Glyphs[PrefIndex]; + + // Harfbuzz says the ideal is to check that this glyph was generated by the pref feature specifically, + // but then just uses a generic flag like this. + // The ideal solution would not be very difficult to implement! + if(PrefGlyph.Flags & KBTS_GLYPH_FLAG_GENERATED_BY_GSUB) + { + kbts_un ToIndex = 0; + + for(kbts_un GlyphIndex = BaseIndex; GlyphIndex; --GlyphIndex) + { + kbts_u8 Class = Glyphs[GlyphIndex - 1].SyllabicClass; + + if(KBTS_IN_SET(Class, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_MATRA)(KBTS_INDIC_SYLLABIC_CLASS_MATRA_POST)(KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_MEDIAL)(KBTS_INDIC_SYLLABIC_CLASS_HALANT)))) + { + ToIndex = GlyphIndex; + + break; + } + } + + if(ToIndex && (ToIndex < GlyphCount)) + { + kbts_glyph *Prev = &Glyphs[ToIndex - 1]; + kbts_u8 CurrentClass = Glyphs[ToIndex].SyllabicClass; + + if((Prev->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && KBTS_IN_SET(CurrentClass, KBTS_SET32((KBTS_INDIC_SYLLABIC_CLASS_ZWJ)(KBTS_INDIC_SYLLABIC_CLASS_ZWNJ)))) + { + ToIndex += 1; + } + } + + // Do the reorder! + for(kbts_un GlyphIndex = PrefIndex; GlyphIndex > ToIndex; --GlyphIndex) + { + Glyphs[GlyphIndex] = Glyphs[GlyphIndex - 1]; + } + + Glyphs[ToIndex] = PrefGlyph; + + // @Cleanup: This is probably always true? + if((BaseIndex >= ToIndex) && (BaseIndex < PrefIndex)) + { + BaseIndex += 1; + } + } + } + } + + { // Mark matras at the beginning of a word for init application. + // It is tempting to check for this at the same time as the reph reordering, but glyphs could have been + // reordered since then and the reordering procedure is clearly defined to happen in sequential steps. + kbts_glyph *First = &Glyphs[0]; + + if((First->SyllabicPosition == KBTS_SYLLABIC_POSITION_PREBASE_MATRA) && ShapeState->ClusterAtStartOfWord) + { + First->Flags |= KBTS_GLYPH_FLAG_INIT; + } + } + } + break; + + case KBTS_SHAPER_USE: + { + kbts_u64 PostBaseSet = KBTS_SET64((KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_ABOVE)(KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_BELOW) + (KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_ABOVE)(KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_BELOW) + (KBTS_USE_SYLLABIC_CLASS_CONS_FINAL_MOD_POST)(KBTS_USE_SYLLABIC_CLASS_CONS_MED_ABOVE) + (KBTS_USE_SYLLABIC_CLASS_CONS_MED_BELOW)(KBTS_USE_SYLLABIC_CLASS_CONS_MED_POST) + (KBTS_USE_SYLLABIC_CLASS_CONS_MED_PRE)(KBTS_USE_SYLLABIC_CLASS_VOWEL_ABOVE) + (KBTS_USE_SYLLABIC_CLASS_VOWEL_BELOW)(KBTS_USE_SYLLABIC_CLASS_VOWEL_POST) + (KBTS_USE_SYLLABIC_CLASS_VOWEL_PRE)(KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_ABOVE) + (KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_BELOW)(KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_POST) + (KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_PRE)); + kbts_u64 HalantSet = KBTS_SET64((KBTS_USE_SYLLABIC_CLASS_HALANT)(KBTS_USE_SYLLABIC_CLASS_HALANT_OR_VOWEL_MODIFIER)(KBTS_USE_SYLLABIC_CLASS_INVISIBLE_STACKER)); + + // In the reorderings below, we check for halants because that's what Harfbuzz does. + // Nowhere does Microsoft mention that halants should block reorderings! + kbts_glyph Repha = Glyphs[0]; + if((Repha.UseClass == KBTS_USE_SYLLABIC_CLASS_REPHA) || (Repha.Flags & KBTS_GLYPH_FLAG_RPHF)) + { + kbts_un GlyphIndex = 1; + for(; GlyphIndex < GlyphCount; ++GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + + // Microsoft says that rephas are reordered "after a following full base", which is needlessly vague. + // Harfbuzz reorders them in front of the first post-base glyph. + if(KBTS_IN_SET64(Glyph->UseClass, PostBaseSet) || (!(Glyph->Flags & KBTS_GLYPH_FLAG_LIGATURE) && KBTS_IN_SET64(Glyph->UseClass, HalantSet))) + { + break; + } + + Glyphs[GlyphIndex - 1] = *Glyph; + } + + Glyphs[GlyphIndex - 1] = Repha; + } + + { + // Microsoft says that pre-base vowels and vowel modifiers should be reordered "before the base glyph + // and, if present, before a pre-base glyph reordered via the 'pref' feature". + // In practice, we tag 'pref'-generated glyphs with the VOWEL_PRE class so that they get reordered here. + // Note that the final reordered glyphs end up backwards from their original order. + kbts_glyph PreBaseVowels[16]; // @Robustness: How many vowels can there realistically be in a single cluster? + kbts_un PreBaseVowelCount = 0; + kbts_u64 SawBase = 0; + for(kbts_un GlyphIndex = GlyphCount; GlyphIndex; --GlyphIndex) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex - 1]; + SawBase |= KBTS_IN_SET64(Glyph->UseClass, KBTS_SET64((KBTS_USE_SYLLABIC_CLASS_BASE)(KBTS_USE_SYLLABIC_CLASS_BASE_OTHER)(KBTS_USE_SYLLABIC_CLASS_BASE_NUM))); + + kbts_u32 Flags = Glyph->Flags; + // Only accept the first glyphs produced by multiple substitutions. + if(((Flags & KBTS_GLYPH_FLAG_FIRST_IN_MULTIPLE_SUBSTITUTION) || !(Flags & KBTS_GLYPH_FLAG_MULTIPLE_SUBSTITUTION)) && + (KBTS_IN_SET64(Glyph->UseClass, KBTS_SET64((KBTS_USE_SYLLABIC_CLASS_VOWEL_PRE)(KBTS_USE_SYLLABIC_CLASS_VOWEL_MOD_PRE))) || + (Flags & KBTS_GLYPH_FLAG_PREF))) + { + if(PreBaseVowelCount < KBTS_ARRAY_LENGTH(PreBaseVowels)) + { + PreBaseVowels[PreBaseVowelCount++] = *Glyph; + } + } + else if(!(Glyph->Flags & KBTS_GLYPH_FLAG_LIGATURE) && KBTS_IN_SET64(Glyph->UseClass, HalantSet)) + { + // Reordering stops at halants, apparently. + // We want to write the vowels in the reverse order they appear in the glyph sequence. + // Since we are iterating backwards, they already _are_ backwards in the PreBaseVowels array, + // so there's no need to do anything. + KBTS_FOR(PreBaseVowelIndex, 0, PreBaseVowelCount) + { + Glyphs[GlyphIndex + PreBaseVowelIndex] = PreBaseVowels[PreBaseVowelIndex]; + } + PreBaseVowelCount = 0; + + // Valid bases only show up before halants. + SawBase = 0; + } + else + { + Glyphs[GlyphIndex - 1 + PreBaseVowelCount] = *Glyph; + } + } + + // Flush the rest of the vowels. + KBTS_FOR(PreBaseVowelIndex, 0, PreBaseVowelCount) + { + Glyphs[PreBaseVowelIndex] = PreBaseVowels[PreBaseVowelIndex]; + } + + // We are supposed to insert a dotted circle after repha when a base is missing. + // The issue is that we have no idea whether the first glyph is a repha or not before we apply + // RPHF. + // So, this is really sucky, but I haven't found a way to merge this logic into any already- + // existing loop, so we have to eat the extra traversal for now. + if(ShapeState->RealCluster && !SawBase) + { + Result.InsertDottedCircle = 1; + Result.DottedCircleIndex = PreBaseVowelCount; + } + } + } break; + + case KBTS_SHAPER_MYANMAR: + if(ShapeState->RealCluster) + { + kbts_un OnePastRephIndex = 0; + kbts_un BaseIndex = GlyphCount; + if(GlyphCount >= 3) + { + kbts_glyph *First = &Glyphs[0]; + kbts_glyph *Second = &Glyphs[1]; + kbts_glyph *Third = &Glyphs[2]; + + if((First->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_RA) && + (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ASAT) && + (Third->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT)) + { + First->SyllabicPosition = KBTS_SYLLABIC_POSITION_AFTER_MAIN; + Second->SyllabicPosition = KBTS_SYLLABIC_POSITION_AFTER_MAIN; + Third->SyllabicPosition = KBTS_SYLLABIC_POSITION_AFTER_MAIN; + + OnePastRephIndex = 3; + BaseIndex = 0; + } + } + + kbts_u64 BaseSet = KBTS_SET64((KBTS_INDIC_SYLLABIC_CLASS_CONSONANT) + (KBTS_INDIC_SYLLABIC_CLASS_CONSONANT_WITH_STACKER) + (KBTS_INDIC_SYLLABIC_CLASS_RA) + (KBTS_INDIC_SYLLABIC_CLASS_VOWEL) + (KBTS_INDIC_SYLLABIC_CLASS_PLACEHOLDER) + (KBTS_INDIC_SYLLABIC_CLASS_DOTTED_CIRCLE)); + KBTS_FOR(GlyphIndex, OnePastRephIndex, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + kbts_indic_syllabic_class Class = Glyph->SyllabicClass; + + if((BaseIndex == GlyphCount) && KBTS_IN_SET64(Class, BaseSet)) + { + BaseIndex = GlyphIndex; + break; + } + } + + if((BaseIndex == GlyphCount) && OnePastRephIndex) + { + BaseIndex = 0; + } + + kbts_syllabic_position LastPosition = KBTS_SYLLABIC_POSITION_SYLLABLE_BASE; + kbts_syllabic_position SectionPosition = KBTS_SYLLABIC_POSITION_AFTER_MAIN; + kbts_un LastPreBaseMatraIndex = GlyphCount; + KBTS_FOR(GlyphIndex, BaseIndex + 1, GlyphCount) + { + kbts_glyph *Glyph = &Glyphs[GlyphIndex]; + kbts_syllabic_position Position = SectionPosition; + + switch(Glyph->SyllabicClass) + { + case KBTS_INDIC_SYLLABIC_CLASS_MEDIAL_RA: + Position = KBTS_SYLLABIC_POSITION_PREBASE_CONSONANT; + break; + + case KBTS_INDIC_SYLLABIC_CLASS_VOWEL_PRE: + { + Position = KBTS_SYLLABIC_POSITION_PREBASE_MATRA; + + // According to Unicode 15.0: + // For combining characters placed to the left of a base character, the combining characters start from the base + // character and are arranged leftward. + // Since these guys will get reordered into being pre-base, we need to flip them. + if(GlyphIndex > LastPreBaseMatraIndex) + { + kbts_un FlipCount = GlyphIndex - LastPreBaseMatraIndex + 1; + KBTS_FOR(FlipIndex, 0, FlipCount / 2) + { + kbts_un LeftIndex = LastPreBaseMatraIndex + FlipIndex; + kbts_un RightIndex = LastPreBaseMatraIndex + FlipCount - 1 - FlipIndex; + kbts_glyph Swap = Glyphs[LeftIndex]; + Glyphs[LeftIndex] = Glyphs[RightIndex]; + Glyphs[RightIndex] = Swap; + } + + // Readjust Glyph to compensate for the flip. + Glyph = &Glyphs[LastPreBaseMatraIndex]; + } + + LastPreBaseMatraIndex = GlyphIndex; + } break; + + case KBTS_INDIC_SYLLABIC_CLASS_VARIATION_SELECTOR: + Position = LastPosition; + break; + + case KBTS_INDIC_SYLLABIC_CLASS_VOWEL_BELOW: + if(Position == KBTS_SYLLABIC_POSITION_AFTER_MAIN) + { + Position = KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT; + } + else if(Position == KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT) + { + Position = SectionPosition; + } + break; + + case KBTS_INDIC_SYLLABIC_CLASS_VEDIC_SIGN: + if(Position == KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT) + { + Position = KBTS_SYLLABIC_POSITION_BEFORE_SUBJOINED; + } + break; + } + + if((SectionPosition == KBTS_SYLLABIC_POSITION_BELOWBASE_CONSONANT) && (Glyph->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_VEDIC_SIGN)) + { + SectionPosition = KBTS_SYLLABIC_POSITION_AFTER_SUBJOINED; + Position = SectionPosition; + } + + Glyph->SyllabicPosition = Position; + LastPosition = Position; + } + + KBTS_FOR(Iter, 1, GlyphCount) + { + KBTS_FOR(GlyphIndex, 1, GlyphCount) + { + kbts_glyph *A = &Glyphs[GlyphIndex - 1]; + kbts_glyph *B = &Glyphs[GlyphIndex]; + + if(A->SyllabicPosition > B->SyllabicPosition) + { + kbts_glyph Swap = *A; + *A = *B; + *B = Swap; + } + } + } + } break; + } + + return Result; +} + +static kbts_op_list kbts_OpList(uint8_t *Ops, kbts_un Size) +{ + kbts_op_list Result = KBTS_ZERO; + Result.Ops = Ops; + Result.Length = Size; + return Result; +} +#define KBTS_OP_LIST(OpList) kbts_OpList((kbts_Ops_##OpList), KBTS_ARRAY_LENGTH(kbts_Ops_##OpList)) + +KBTS_EXPORT kbts_shape_config kbts_ShapeConfig(kbts_font *Font, kbts_u32 Script, kbts_u32 Language) +{ + kbts_shape_config Result = KBTS_ZERO; + + Result.Font = Font; + Result.Script = Script; + Result.Language = Language; + + kbts_gsub_gpos *Gsub = Font->ShapingTables[KBTS_SHAPING_TABLE_GSUB]; + + // Find the appropriate language system in GSUB/GPOS. + kbts_script_properties *ScriptProperties = &kbts_ScriptProperties[Script]; + int FoundScriptIsIndic3 = 0; + + KBTS_FOR(ShapingTableIndex, 0, KBTS_SHAPING_TABLE_COUNT) + { + kbts_gsub_gpos *ShapingTable = Font->ShapingTables[ShapingTableIndex]; + if(ShapingTable) + { + kbts_script_list *ScriptList = KBTS_POINTER_OFFSET(kbts_script_list, ShapingTable, ShapingTable->ScriptListOffset); + + kbts_langsys *ChosenLangsys = 0; + kbts_u32 DesiredTag = ScriptProperties->Tag; + + KBTS_FOR(ScriptIndex, 0, ScriptList->Count) + { + kbts_script_pointer ThisScript = kbts_GetScript(ScriptList, ScriptIndex); + kbts_u32 Tag = ThisScript.Tag; + + // The OpenType spec does not define or even mention "Indic3" scripts at all. + // Nevertheless, Harfbuzz at least checks for '3' at the end of script tags, and, if one exists, they choose USE. + int Indic3 = (ThisScript.Tag >> 24) == '3'; + kbts_u32 MatchMask = Indic3 ? 0xFFFFFF : 0xFFFFFFFF; + int PerfectMatch = !((Tag ^ DesiredTag) & MatchMask); + if(!ScriptIndex || PerfectMatch || (Tag == KBTS_FOURCC('D', 'F', 'L', 'T'))) + { + kbts_langsys *Langsys = kbts_GetDefaultLangsys(ThisScript.Script); + KBTS_FOR(LangsysIndex, 0, ThisScript.Script->Count) + { + kbts_langsys_pointer LangsysPointer = kbts_GetLangsys(ThisScript.Script, LangsysIndex); + + if(LangsysPointer.Tag == Language) + { + Langsys = LangsysPointer.Langsys; + break; + } + } + + // It is tempting to try to look for another script if the one we want has no langsys. + // However, it is possible for a script to purposefully have no langsys at all. In that case, + // the shaper should not apply any GSUB features. + // In that case, the shaper should not apply any GSUB features. + // So, store the result _regardless_ of whether Langsys is null or not. + ChosenLangsys = Langsys; + if(ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) + { + // Apparently, it is allowed to have script-specific GSUB tables, and a huge DFLT GPOS table. + FoundScriptIsIndic3 = Indic3; + } + // And then get out if we found the appropriate script, even if the langsys is null! + if(PerfectMatch) + { + break; + } + } + } + + Result.Langsys[ShapingTableIndex] = ChosenLangsys; + } + } + + Result.IndicScriptProperties = kbts_IndicScriptProperties(Script); + Result.Shaper = FoundScriptIsIndic3 ? KBTS_SHAPER_USE : ScriptProperties->Shaper; + Result.OpLists[0] = kbts_ShaperOpLists[Result.Shaper]; + + switch(Result.Shaper) + { + case KBTS_SHAPER_INDIC: + Result.OpLists[1] = KBTS_OP_LIST(Indic1); + Result.OpLists[2] = KBTS_OP_LIST(Indic2); + Result.OpLists[3] = KBTS_OP_LIST(Indic3); + break; + case KBTS_SHAPER_USE: + Result.OpLists[1] = KBTS_OP_LIST(Use1); + Result.OpLists[3] = KBTS_OP_LIST(Use3); + break; + case KBTS_SHAPER_KHMER: + Result.OpLists[1] = KBTS_OP_LIST(Khmer1); + Result.OpLists[3] = KBTS_OP_LIST(Khmer3); + break; + case KBTS_SHAPER_MYANMAR: + Result.OpLists[1] = KBTS_OP_LIST(Myanmar1); + Result.OpLists[2] = KBTS_OP_LIST(Myanmar2); + Result.OpLists[3] = KBTS_OP_LIST(Myanmar3); + break; + } + + kbts_feature *Rclt = 0; + kbts_feature_set SyllableFeatureSet = {{KBTS_FEATURE_FLAG0(rphf) | KBTS_FEATURE_FLAG0(blwf) | KBTS_FEATURE_FLAG0(half) | KBTS_FEATURE_FLAG0(pstf) | KBTS_FEATURE_FLAG0(pref), + KBTS_FEATURE_FLAG1(rclt) | KBTS_FEATURE_FLAG1(locl) | KBTS_FEATURE_FLAG1(vatu)}}; + kbts_iterate_features IterateFeatures = kbts_IterateFeatures(&Result, KBTS_SHAPING_TABLE_GSUB, SyllableFeatureSet); + while(kbts_NextFeature(&IterateFeatures)) + { + switch(IterateFeatures.CurrentFeatureTag) + { + case KBTS_FEATURE_TAG_blwf: Result.Blwf = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_pref: Result.Pref = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_pstf: Result.Pstf = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_locl: Result.Locl = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_rphf: Result.Rphf = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_half: Result.Half = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_vatu: Result.Vatu = IterateFeatures.Feature; break; + case KBTS_FEATURE_TAG_rclt: Rclt = IterateFeatures.Feature; break; + } + } + + if((Result.Shaper == KBTS_SHAPER_ARABIC) && !Rclt) + { + Result.OpLists[0] = KBTS_OP_LIST(ArabicNoRclt); + } + + kbts_shape_state DummyState = KBTS_ZERO; + DummyState.Config = &Result; + + if(Result.IndicScriptProperties.ViramaCodepoint) + { + // Bake the locl-ized virama. + kbts_glyph Virama = kbts_CodepointToGlyph(Font, Result.IndicScriptProperties.ViramaCodepoint); + Result.Virama = kbts_Substitute1(&DummyState, kbts_GetLookupList(Gsub), Result.Locl, KBTS_SKIP_FLAG_ZWNJ | KBTS_SKIP_FLAG_ZWJ, &Virama); + } + + if((Result.Script == KBTS_SCRIPT_THAI) || (Result.Script == KBTS_SCRIPT_LAO)) + { + kbts_u32 NikhahitCodepoint = (Result.Script == KBTS_SCRIPT_THAI) ? 0xE4D : 0xECD; + kbts_u32 SaraAaCodepoint = (Result.Script == KBTS_SCRIPT_THAI) ? 0xE32 : 0xEB2; + Result.Nikhahit = kbts_CodepointToGlyph(Font, NikhahitCodepoint); + Result.SaraAa = kbts_CodepointToGlyph(Font, SaraAaCodepoint); + } + + Result.DottedCircle = kbts_CodepointToGlyph(Font, 0x25CC); + Result.Whitespace = kbts_CodepointToGlyph(Font, ' '); + + return Result; +} + +static kbts_op kbts_ReadOp(kbts_u8 *Ops, kbts_u32 *Ip_) +{ + kbts_u32 Ip = *Ip_; + kbts_op Result = KBTS_ZERO; + Result.Kind = Ops[Ip++]; + if((Result.Kind == KBTS_OP_KIND_GSUB_FEATURES) || (Result.Kind == KBTS_OP_KIND_GPOS_FEATURES)) + { + kbts_un FeatureCount = Ops[Ip++]; + KBTS_FOR(FeatureIndex, 0, FeatureCount) + { + kbts_u32 FeatureId = Ops[Ip++]; + kbts_AddFeature(&Result.Features, FeatureId); + } + } + *Ip_ = Ip; + return Result; +} + +KBTS_EXPORT int kbts_Shape(kbts_shape_state *State, kbts_shape_config *Config, kbts_direction MainDirection, kbts_direction RunDirection, kbts_glyph *Glyphs, kbts_u32 *GlyphCount, kbts_u32 GlyphCapacity) +{ + KBTS_INSTRUMENT_FUNCTION_BEGIN + State->Config = Config; + State->MainDirection = MainDirection; + State->RunDirection = RunDirection; + State->GlyphArray = kbts_GlyphArray(Glyphs, *GlyphCount, *GlyphCount, GlyphCapacity); + + kbts_glyph_array *GlyphArray = &State->GlyphArray; + kbts_glyph_array *Cluster = &State->ClusterGlyphArray; + Cluster->Glyphs = Glyphs + State->At; // In case the Glyphs array moved after a grow. + Cluster->Capacity = GlyphCapacity - State->At; + + kbts_u32 ResumePoint = State->ResumePoint; + State->ResumePoint = 0; + switch(ResumePoint) + { + case 1: goto ResumePoint1; break; + case 2: goto ResumePoint2; break; + case 3: goto ResumePoint3; break; + case 4: goto ResumePoint4; break; + case 5: goto ResumePoint5; break; + case 6: goto ResumePoint6; break; + } + + // For simple shapers, all of the shaping happens in this single loop. + // For complex shapers, this loop is preparing the text for clustering logic, which happens below. + for(State->Ip = 0; State->Ip < Config->OpLists[0].Length;) + { + State->Op = kbts_ReadOp(Config->OpLists[0].Ops, &State->Ip); + ResumePoint1:; + if(kbts_ExecuteOp(State, GlyphArray)) + { + State->ResumePoint = 1; + goto GrowRequest; + } + } + + if(KBTS_IN_SET(Config->Shaper, KBTS_SET32((KBTS_SHAPER_INDIC)(KBTS_SHAPER_USE)(KBTS_SHAPER_KHMER)(KBTS_SHAPER_MYANMAR)))) + { + State->ClusterAtStartOfWord = 1; + State->At = 0; + while(State->At < GlyphArray->Count) + { + if(KBTS_IN_SET(Config->Shaper, KBTS_SET32((KBTS_SHAPER_INDIC)(KBTS_SHAPER_KHMER)))) + { + // Reserve a slot in case we need to insert a dotted circle into a broken syllable. + ResumePoint2:; + if(!kbts_GrowGlyphArray(&State->ResumePoint, GlyphArray, GlyphArray->Count, 1, 2, 1)) + { + goto GrowRequest; + } + } + + kbts_begin_cluster_result BeginClusterResult = kbts_BeginCluster(State, Glyphs + State->At, GlyphArray->Count - State->At); + GlyphArray->Count += BeginClusterResult.InsertedGlyphCount; + GlyphArray->TotalCount += BeginClusterResult.InsertedGlyphCount; + State->ClusterGlyphCount = (kbts_u32)BeginClusterResult.ClusterGlyphCount; + + *Cluster = kbts_GlyphArray(Glyphs + State->At, BeginClusterResult.ClusterGlyphCount, GlyphArray->Count - State->At, GlyphCapacity - State->At); + + kbts_glyph *LastGlyphInCluster = &Glyphs[State->At + Cluster->Count - 1]; + State->WordBreak = !(LastGlyphInCluster->UnicodeFlags & KBTS_UNICODE_FLAG_PART_OF_WORD); + + for(State->Ip = 0; State->Ip < Config->OpLists[1].Length;) + { + State->Op = kbts_ReadOp(Config->OpLists[1].Ops, &State->Ip); + ResumePoint3:; + if(kbts_ExecuteOp(State, Cluster)) + { + State->ResumePoint = 3; + goto GrowRequest; + } + } + + kbts_end_cluster_result EndClusterResult = kbts_EndCluster(State, Cluster); + if(EndClusterResult.InsertDottedCircle) + { + State->DottedCircleInsertIndex = (kbts_u32)EndClusterResult.DottedCircleIndex; + ResumePoint6:; + if(!kbts_GrowGlyphArray(&State->ResumePoint, Cluster, State->DottedCircleInsertIndex, 1, 6, 0)) + { + State->RequiredGlyphCapacity = Cluster->RequiredCapacity + State->At; + goto GrowRequest; + } + Glyphs[State->At + State->DottedCircleInsertIndex] = Config->DottedCircle; + } + + for(State->Ip = 0; State->Ip < Config->OpLists[2].Length;) + { + State->Op = kbts_ReadOp(Config->OpLists[2].Ops, &State->Ip); + ResumePoint4:; + if(kbts_ExecuteOp(State, Cluster)) + { + State->ResumePoint = 4; + goto GrowRequest; + } + } + + State->At += Cluster->Count; + kbts_un DeltaClusterGlyphCount = Cluster->Count - State->ClusterGlyphCount; + GlyphArray->Count += DeltaClusterGlyphCount; + GlyphArray->TotalCount += DeltaClusterGlyphCount; + State->ClusterAtStartOfWord = State->WordBreak; + } + + // Post-clustering ops work across clusters. + // This is where Indic GPOS + post-passes happen. + for(State->Ip = 0; State->Ip < Config->OpLists[3].Length;) + { + State->Op = kbts_ReadOp(Config->OpLists[3].Ops, &State->Ip); + ResumePoint5:; + if(kbts_ExecuteOp(State, GlyphArray)) + { + State->ResumePoint = 5; + goto GrowRequest; + } + } + } + + if(0) + { + GrowRequest:; + kbts_TransferGrowRequest(Cluster, GlyphArray); + State->RequiredGlyphCapacity = GlyphArray->RequiredCapacity; + KBTS_INSTRUMENT_END + return 1; + } + + *GlyphCount = GlyphArray->Count; + KBTS_INSTRUMENT_END + return 0; +} + +KBTS_EXPORT kbts_cursor kbts_Cursor(kbts_direction Direction) +{ + kbts_cursor Result = KBTS_ZERO; + Result.Direction = Direction; + return Result; +} + +KBTS_EXPORT void kbts_PositionGlyph(kbts_cursor *Cursor, kbts_glyph *Glyph, kbts_s32 *X, kbts_s32 *Y) +{ + kbts_s32 AdvanceX = Glyph->AdvanceX; + kbts_s32 AdvanceY = Glyph->AdvanceY; + kbts_s32 OffsetX = Glyph->OffsetX; + kbts_s32 OffsetY = Glyph->OffsetY; + if(Cursor->Direction != KBTS_DIRECTION_RTL) + { + *X = Cursor->X + OffsetX; + *Y = Cursor->Y + OffsetY; + + Cursor->X += AdvanceX; + Cursor->Y += AdvanceY; + } + else + { + // Right-to-left should, in theory, work almost identically to left-to-right: just right-align everything. + // However, the convention for glyph bounding boxes, etc., is that they are left-aligned. + // To compensate for this, we add base glyphs' advances to their positions, which should left-align them. + // We can't accumulate the advances immediately into the cursor, though, because then mark offsets will be wrong. + // + // By the way, Harfbuzz just reverses glyphs to always be left-to-right for the sake of layout. + // The reason we try to handle right-to-left somewhat properly here is that it allows the user to position one + // glyph at a time by just going through the glyph sequence, no matter the text direction. + // This should hopefully save the user from having to allocate a buffer of glyph positions and/or doing a pre-pass + // just to get the total string width, in the case of cross-direction text. + // + // The classic Harfbuzz behavior can be obtained by passing MainDirection = LTR to Shape, even for RTL text. + // (Cursor.Direction also needs to be NONE or LTR, of course, which is the default.) + if(AdvanceX) + { + Cursor->X -= Cursor->LastAdvanceX; + Cursor->LastAdvanceX = AdvanceX; + } + + *X = Cursor->X - AdvanceX + OffsetX; + *Y = Cursor->Y + OffsetY; + + Cursor->Y += AdvanceY; + } +} + +KBTS_EXPORT kbts_un kbts_ReadFontHeader(kbts_font *Font, void *Data, kbts_un Size) +{ + // @Incomplete: Add a bounds checking/validation pass. + KBTS_UNUSED(Size); + Font->FileBase = (char *)Data; + kbts_table_directory *Directory = (kbts_table_directory *)Font->FileBase; + + Directory->TableCount = kbts_ByteSwap16(Directory->TableCount); + Directory->SearchRange = kbts_ByteSwap16(Directory->SearchRange); + Directory->EntrySelector = kbts_ByteSwap16(Directory->EntrySelector); + Directory->RangeShift = kbts_ByteSwap16(Directory->RangeShift); + + kbts_table_record *Tables = (kbts_table_record *)(Directory + 1); + + kbts_un ShapingTableSizes[KBTS_SHAPING_TABLE_COUNT] = {0}; + kbts_u32 GdefSize = 0; + + for(kbts_un TableIndex = 0; TableIndex < Directory->TableCount; ++TableIndex) + { + kbts_table_record *Table = &Tables[TableIndex]; + Table->Checksum = kbts_ByteSwap32(Table->Checksum); + Table->Offset = kbts_ByteSwap32(Table->Offset); + Table->Length = kbts_ByteSwap32(Table->Length); + void *TableBase = KBTS_POINTER_OFFSET(void, Font->FileBase, Table->Offset); + + switch(Table->Tag) + { + case KBTS_FOURCC('h', 'e', 'a', 'd'): + { + kbts_head *Head = (kbts_head *)TableBase; + kbts_ByteSwapArray16(&Head->Major, 2); + kbts_ByteSwapArray32(&Head->Revision, 2); + // We do not swap the magic number. + kbts_ByteSwapArray16(&Head->Flags, 2); + // We do not swap file times. + kbts_ByteSwapArray16((kbts_u16 *)&Head->XMin, 9); + + Font->Head = Head; + } break; + + case KBTS_FOURCC('c', 'm', 'a', 'p'): + { + kbts_cmap *Cmap = (kbts_cmap *)TableBase; + Cmap->Version = kbts_ByteSwap16(Cmap->Version); + Cmap->TableCount = kbts_ByteSwap16(Cmap->TableCount); + + kbts_encoding_record *Records = KBTS_POINTER_AFTER(kbts_encoding_record, Cmap); + + KBTS_FOR(It, 0, Cmap->TableCount) + { + kbts_encoding_record *Record = &Records[It]; + Record->EncodingId = kbts_ByteSwap16(Record->EncodingId); + Record->PlatformId = kbts_ByteSwap16(Record->PlatformId); + Record->SubtableOffset = kbts_ByteSwap32(Record->SubtableOffset); + } + + kbts_cmap_subtable_pointer PreferredSubtable = KBTS_ZERO; + kbts_u16 PreferredFormat = 1; + KBTS_FOR(It, 0, Cmap->TableCount) + { + kbts_cmap_subtable_pointer Subtable = kbts_GetCmapSubtable(Cmap, It); + kbts_u16 Format = kbts_ByteSwap16(*Subtable.Subtable); + + if(Format == 14) + { + Font->Cmap14 = (kbts_cmap_14 *)Subtable.Subtable; + } + else if(!PreferredSubtable.Subtable) + { + PreferredSubtable = Subtable; + } + else + { + kbts_u16 Precedence = kbts_CmapFormatPrecedence[Format]; + kbts_u16 PreferredPrecedence = kbts_CmapFormatPrecedence[PreferredFormat]; + + if((Precedence > PreferredPrecedence) || ((Precedence == PreferredPrecedence) && (Subtable.PlatformId == 3))) + { + PreferredSubtable = Subtable; + PreferredFormat = Format; + } + } + } + + *PreferredSubtable.Subtable = kbts_ByteSwap16(*PreferredSubtable.Subtable); + switch(*PreferredSubtable.Subtable) + { + case 0: + { + kbts_cmap_0 *Cmap0 = (kbts_cmap_0 *)PreferredSubtable.Subtable; + Cmap0->Length = kbts_ByteSwap16(Cmap0->Length); + Cmap0->Language = kbts_ByteSwap16(Cmap0->Language); + } + break; + + case 2: + { + kbts_cmap_2 *Cmap2 = (kbts_cmap_2 *)PreferredSubtable.Subtable; + kbts_ByteSwapArray16(&Cmap2->Length, 258); + + kbts_un SubHeaderCount = 0; + KBTS_FOR(It, 0, 256) + { + kbts_un SubHeaderIndex = Cmap2->SubHeaderKeys[It]; + SubHeaderCount = KBTS_MAX(SubHeaderCount, SubHeaderIndex + 1); + } + + kbts_sub_header *SubHeaders = KBTS_POINTER_AFTER(kbts_sub_header, Cmap2); + kbts_ByteSwapArray16(&SubHeaders->FirstCode, 4 * SubHeaderCount); + + kbts_u16 *GlyphIds = (kbts_u16 *)(SubHeaders + SubHeaderCount); + + kbts_sn GlyphIdCount = 0; + KBTS_FOR(It, 0, SubHeaderCount) + { + kbts_sub_header *SubHeader = &SubHeaders[It]; + + kbts_u16 *OnePastLastGlyphId = &SubHeader->IdRangeOffset + SubHeader->IdRangeOffset / 2 + SubHeader->EntryCount; + GlyphIdCount = KBTS_MAX(GlyphIdCount, OnePastLastGlyphId - GlyphIds); + } + + kbts_ByteSwapArray16(GlyphIds, (kbts_un)GlyphIdCount); + } + break; + + case 4: + { + kbts_cmap_4 *Cmap4 = (kbts_cmap_4 *)PreferredSubtable.Subtable; + kbts_ByteSwapArray16(&Cmap4->Length, 5); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Cmap4), Cmap4->SegmentCountTimesTwo * 2 + 1); + + kbts_un SegmentCount = Cmap4->SegmentCountTimesTwo / 2; + kbts_u16 *EndCodes = KBTS_POINTER_AFTER(kbts_u16, Cmap4); + kbts_u16 *StartCodes = EndCodes + SegmentCount + 1; + kbts_s16 *IdDeltas = (kbts_s16 *)(StartCodes + SegmentCount); + kbts_u16 *IdRangeOffsets = (kbts_u16 *)(IdDeltas + SegmentCount); + kbts_u16 *GlyphIds = IdRangeOffsets + SegmentCount; + + kbts_sn GlyphIdCount = 0; + + KBTS_FOR(SegmentIndex, 0, SegmentCount) + { + kbts_u16 Offset = IdRangeOffsets[SegmentIndex]; + + if(Offset) + { + kbts_u16 *IdLookup = &IdRangeOffsets[SegmentIndex] + (EndCodes[SegmentIndex] - StartCodes[SegmentIndex] + 1) + Offset / 2; + + GlyphIdCount = KBTS_MAX(GlyphIdCount, (IdLookup - GlyphIds)); + } + } + + kbts_ByteSwapArray16(GlyphIds, (kbts_un)GlyphIdCount); + } + break; + + case 6: + { + kbts_cmap_6 *Cmap6 = (kbts_cmap_6 *)PreferredSubtable.Subtable; + kbts_ByteSwapArray16(&Cmap6->Length, 4); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, Cmap6), Cmap6->EntryCount); + } + break; + + case 12: + { + kbts_cmap_12_13 *Cmap12 = (kbts_cmap_12_13 *)PreferredSubtable.Subtable; + kbts_ByteSwapArray32(&Cmap12->Length, 3); + kbts_ByteSwapArray32(KBTS_POINTER_AFTER(kbts_u32, Cmap12), Cmap12->GroupCount * 3); + } + break; + } + + Font->Cmap = PreferredSubtable.Subtable; + } + break; + + case KBTS_FOURCC('G', 'D', 'E', 'F'): + { + Font->Gdef = (kbts_gdef *)TableBase; + GdefSize = Table->Length; + + kbts_gdef *Gdef = Font->Gdef; + + kbts_ByteSwapArray16(&Gdef->Major, 6); + + if(Gdef->Minor >= 2) + { + Gdef->MarkGlyphSetsDefinitionOffset = kbts_ByteSwap16(Gdef->MarkGlyphSetsDefinitionOffset); + + if(Gdef->Minor == 3) + { + // @Incomplete + Gdef->ItemVariationStoreOffset = kbts_ByteSwap32(Gdef->ItemVariationStoreOffset); + } + } + } + break; + + case KBTS_FOURCC('G', 'S', 'U', 'B'): + case KBTS_FOURCC('G', 'P', 'O', 'S'): + { + kbts_un Index = (Table->Tag == KBTS_FOURCC('G', 'S', 'U', 'B')) ? KBTS_SHAPING_TABLE_GSUB : KBTS_SHAPING_TABLE_GPOS; + Font->ShapingTables[Index] = (kbts_gsub_gpos *)TableBase; + ShapingTableSizes[Index] = Table->Length; + } + break; + + case KBTS_FOURCC('h', 'h', 'e', 'a'): + case KBTS_FOURCC('v', 'h', 'e', 'a'): + { + kbts_un Orientation = Table->Tag == KBTS_FOURCC('h', 'h', 'e', 'a') ? KBTS_ORIENTATION_HORIZONTAL : KBTS_ORIENTATION_VERTICAL; + Font->Hea[Orientation] = (kbts_hea *)TableBase; + kbts_ByteSwapArray16((kbts_u16 *)Font->Hea[Orientation], Table->Length / sizeof(kbts_u16)); + } + break; + + case KBTS_FOURCC('h', 'm', 't', 'x'): + case KBTS_FOURCC('v', 'm', 't', 'x'): + { + kbts_un Orientation = Table->Tag == KBTS_FOURCC('h', 'm', 't', 'x') ? KBTS_ORIENTATION_HORIZONTAL : KBTS_ORIENTATION_VERTICAL; + Font->Mtx[Orientation] = KBTS_POINTER_OFFSET(kbts_u16, Font->FileBase, Table->Offset); + kbts_ByteSwapArray16(Font->Mtx[Orientation], Table->Length / sizeof(kbts_u16)); + } + break; + + case KBTS_FOURCC('m', 'a', 'x', 'p'): + { + Font->Maxp = KBTS_POINTER_OFFSET(kbts_maxp, Font->FileBase, Table->Offset); + Font->Maxp->Major = kbts_ByteSwap16(Font->Maxp->Major); + Font->Maxp->Minor = kbts_ByteSwap16(Font->Maxp->Minor); + + kbts_un U16Count = 0; + if(!Font->Maxp->Major && (Font->Maxp->Minor == 0x5000)) + { + U16Count = 1; + } + else if((Font->Maxp->Major == 1) && !Font->Maxp->Minor) + { + U16Count = 14; + } + + kbts_ByteSwapArray16(&Font->Maxp->GlyphCount, U16Count); + Font->GlyphCount = Font->Maxp->GlyphCount; + } + break; + } + } + + kbts_un Result = sizeof(kbts_u32) * ((ShapingTableSizes[KBTS_SHAPING_TABLE_GSUB] + ShapingTableSizes[KBTS_SHAPING_TABLE_GPOS] + GdefSize) / 2); + return (kbts_u32)Result; +} + +KBTS_EXPORT kbts_un kbts_ReadFontData(kbts_font *Font, void *Scratch, kbts_un ScratchSize) +{ + kbts_byteswap_context ByteSwapContext = KBTS_ZERO; + ByteSwapContext.FileBase = Font->FileBase; + ByteSwapContext.PointerCapacity = ScratchSize / sizeof(kbts_u32); + ByteSwapContext.Pointers = (kbts_u32 *)Scratch; + + kbts_un TotalLookupCount = 0; + kbts_un TotalSubtableCount = 0; + + kbts_gdef *Gdef = Font->Gdef; + if(Gdef) + { + if(Gdef->ClassDefinitionOffset) + { + kbts_u16 *ClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Gdef, Gdef->ClassDefinitionOffset); + kbts_ByteSwapClassDefinition(&ByteSwapContext, ClassDefBase); + } + + if(Gdef->MarkAttachmentClassDefinitionOffset) + { + kbts_u16 *ClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Gdef, Gdef->MarkAttachmentClassDefinitionOffset); + kbts_ByteSwapClassDefinition(&ByteSwapContext, ClassDefBase); + } + + if((Gdef->Minor >= 2) && Gdef->MarkGlyphSetsDefinitionOffset) + { + kbts_mark_glyph_sets *MarkGlyphSets = KBTS_POINTER_OFFSET(kbts_mark_glyph_sets, Gdef, Gdef->MarkGlyphSetsDefinitionOffset); + kbts_ByteSwapArray16(&MarkGlyphSets->Format, 2); + if(MarkGlyphSets->Format == 1) + { + kbts_u32 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u32, MarkGlyphSets); + kbts_ByteSwapArray32(CoverageOffsets, MarkGlyphSets->MarkGlyphSetCount); + + KBTS_FOR(MarkGlyphSetIndex, 0, MarkGlyphSets->MarkGlyphSetCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, MarkGlyphSets, CoverageOffsets[MarkGlyphSetIndex]); + kbts_ByteSwapCoverage(&ByteSwapContext, Coverage); + } + } + } + } + + kbts_gsub_gpos *Gsub = Font->ShapingTables[KBTS_SHAPING_TABLE_GSUB]; + if(Gsub) + { + kbts_ByteSwapGsubGposCommon(&ByteSwapContext, Gsub); + + kbts_lookup_list *LookupList = kbts_GetLookupList(Gsub); + LookupList->Count = kbts_ByteSwap16(LookupList->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, LookupList), LookupList->Count); + + TotalLookupCount += LookupList->Count; + + KBTS_FOR(LookupIndex, 0, LookupList->Count) + { + kbts_lookup *PackedLookup = kbts_GetLookup(LookupList, LookupIndex); + + KBTS_DUMPF("GSUB Lookup %llu:\n", LookupIndex); + + if(kbts_ByteSwapLookup(&ByteSwapContext, PackedLookup)) + { + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Font->Gdef, PackedLookup); + KBTS_DUMPF(" Flags %u\n", Lookup.Flags); + + KBTS_FOR(SubstitutionIndex, 0, Lookup.SubtableCount) + { + kbts_u16 *Base = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[SubstitutionIndex]); + + KBTS_DUMPF(" Subtable %llu:\n", SubstitutionIndex); + + kbts_ByteSwapGsubLookupSubtable(&ByteSwapContext, Lookup.Type, Base); + } + } + + TotalSubtableCount += PackedLookup->SubtableCount; + } + } + + kbts_gsub_gpos *Gpos = Font->ShapingTables[KBTS_SHAPING_TABLE_GPOS]; + if(Gpos) + { + kbts_ByteSwapGsubGposCommon(&ByteSwapContext, Gpos); + + kbts_lookup_list *LookupList = kbts_GetLookupList(Gpos); + LookupList->Count = kbts_ByteSwap16(LookupList->Count); + kbts_ByteSwapArray16(KBTS_POINTER_AFTER(kbts_u16, LookupList), LookupList->Count); + + TotalLookupCount += LookupList->Count; + + KBTS_FOR(LookupIndex, 0, LookupList->Count) + { + kbts_lookup *PackedLookup = kbts_GetLookup(LookupList, LookupIndex); + + KBTS_DUMPF("GPOS Lookup %llu:\n", LookupIndex); + + if(kbts_ByteSwapLookup(&ByteSwapContext, PackedLookup)) + { + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Font->Gdef, PackedLookup); + + KBTS_DUMPF(" Flags %x\n", Lookup.Flags); + + KBTS_FOR(SubstitutionIndex, 0, Lookup.SubtableCount) + { + kbts_u16 *Base = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[SubstitutionIndex]); + + KBTS_DUMPF(" Subtable %zu:\n", (size_t)SubstitutionIndex); + + kbts_ByteSwapGposLookupSubtable(&ByteSwapContext, LookupList, Lookup.Type, Base); + } + } + + TotalSubtableCount += PackedLookup->SubtableCount; + } + } + + // At this point, we are done byteswapping the file, so we can start reusing the scratch memory. + + if(Gsub) + { + kbts_lookup_list *LookupList = kbts_GetLookupList(Gsub); + + // Figure out lookup recursion depth and other useful metrics. + // Most of these are not used yet, but would be useful for a streaming shaper and/or to inform GLYPH_BUFFER_GROW_MARGIN. + kbts_un MaximumBacktrackWithoutSkippingGlyphs = 0; + kbts_un MaximumLookaheadWithoutSkippingGlyphs = 0; + kbts_un MaximumLookupStackSize = 1; + kbts_un MaximumSubstitutionOutputSize = 1; + kbts_un MaximumInputSequenceLength = 1; + + // We are done byteswapping the file, so we can reclaim the scratch memory. + kbts_lookup_info_frame *Frames = (kbts_lookup_info_frame *)Scratch; + kbts_un FrameCapacity = ScratchSize / sizeof(kbts_lookup_info_frame); + + KBTS_FOR(RootLookupIndex, 0, LookupList->Count) + { + kbts_lookup *PackedRootLookup = kbts_GetLookup(LookupList, RootLookupIndex); + kbts_unpacked_lookup RootLookup = kbts_UnpackLookup(Gdef, PackedRootLookup); + + KBTS_FOR(RootSubtableIndex, 0, RootLookup.SubtableCount) + { + kbts_un FrameCount = 0; + { + kbts_lookup_info_frame First = KBTS_ZERO; + First.LookupType = RootLookup.Type; + First.Base = KBTS_POINTER_OFFSET(kbts_u16, PackedRootLookup, RootLookup.SubtableOffsets[RootSubtableIndex]); + First.StackSize = 1; + if(FrameCount < FrameCapacity) + { + Frames[FrameCount++] = First; + } + else + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + + while(FrameCount) + { + kbts_lookup_info_frame Frame = Frames[--FrameCount]; + kbts_u16 LookupType = Frame.LookupType; + kbts_u16 *Base = Frame.Base; + kbts_u32 LookaheadOffset = Frame.LookaheadOffset; + kbts_u32 StackSize = Frame.StackSize; + + MaximumLookupStackSize = KBTS_MAX(MaximumLookupStackSize, StackSize); + + while(LookupType == 7) + { + kbts_extension *Subst = (kbts_extension *)Base; + + Base = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->Offset); + LookupType = Subst->LookupType; + } + + kbts_u32 Result = 1; + + switch(LookupType) + { + case 2: + { + kbts_multiple_substitution *Subst = (kbts_multiple_substitution *)Base; + KBTS_FOR(SequenceIndex, 0, Subst->SequenceCount) + { + kbts_sequence *Sequence = kbts_GetSequence(Subst, SequenceIndex); + + MaximumSubstitutionOutputSize = KBTS_MAX(MaximumSubstitutionOutputSize, Sequence->GlyphCount); + } + } break; + + case 4: + { + kbts_ligature_substitution *Subst = (kbts_ligature_substitution *)Base; + + KBTS_FOR(SetIndex, 0, Subst->LigatureSetCount) + { + kbts_ligature_set *Set = kbts_GetLigatureSet(Subst, SetIndex); + + KBTS_FOR(LigatureIndex, 0, Set->Count) + { + kbts_ligature *Ligature = kbts_GetLigature(Set, LigatureIndex); + + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Ligature->ComponentCount - 1); + } + } + } break; + + case 5: + { + if(Base[0] == 1) + { + kbts_sequence_context_1 *Subst = (kbts_sequence_context_1 *)Base; + + KBTS_FOR(SetIndex, 0, Subst->SeqRuleSetCount) + { + kbts_sequence_rule_set *Set = kbts_GetSequenceRuleSet(Subst, SetIndex); + + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_sequence_rule *Rule = kbts_GetSequenceRule(Set, RuleIndex); + + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Rule->GlyphCount - 1); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Rule->GlyphCount); + + kbts_u16 *InputSequence = KBTS_POINTER_AFTER(kbts_u16, Rule); + kbts_sequence_lookup_record *Records = (kbts_sequence_lookup_record *)(InputSequence + Rule->GlyphCount - 1); + KBTS_FOR(RecordIndex, 0, Rule->SequenceLookupCount) + { + kbts_sequence_lookup_record *Record = &Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } + } + else if(Base[0] == 2) + { + kbts_sequence_context_2 *Subst = (kbts_sequence_context_2 *)Base; + + KBTS_FOR(SetIndex, 0, Subst->ClassSequenceRuleSetCount) + { + kbts_class_sequence_rule_set *Set = kbts_GetClassSequenceRuleSet(Subst, SetIndex); + + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_class_sequence_rule *Rule = kbts_GetClassSequenceRule(Set, RuleIndex); + + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Rule->GlyphCount - 1); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Rule->GlyphCount); + + kbts_u16 *InputSequence = KBTS_POINTER_AFTER(kbts_u16, Rule); + kbts_sequence_lookup_record *Records = (kbts_sequence_lookup_record *)(InputSequence + Rule->GlyphCount - 1); + + KBTS_FOR(RecordIndex, 0, Rule->SequenceLookupCount) + { + kbts_sequence_lookup_record *Record = &Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } + } + } + else if(Base[0] == 3) + { + kbts_sequence_context_3 *Subst = (kbts_sequence_context_3 *)Base; + + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Subst->GlyphCount - 1); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Subst->GlyphCount); + + kbts_u16 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + kbts_sequence_lookup_record *Records = (kbts_sequence_lookup_record *)(CoverageOffsets + Subst->GlyphCount); + + KBTS_FOR(RecordIndex, 0, Subst->SequenceLookupCount) + { + kbts_sequence_lookup_record *Record = &Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } break; + + case 6: + { + if(Base[0] == 1) + { + kbts_chained_sequence_context_1 *Subst = (kbts_chained_sequence_context_1 *)Base; + + KBTS_FOR(SetIndex, 0, Subst->ChainedSequenceRuleSetCount) + { + kbts_chained_sequence_rule_set *Set = kbts_GetChainedSequenceRuleSet(Subst, SetIndex); + + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + MaximumBacktrackWithoutSkippingGlyphs = KBTS_MAX(MaximumBacktrackWithoutSkippingGlyphs, Unpacked.BacktrackCount); + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Unpacked.LookaheadCount); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Unpacked.InputCount); + + KBTS_FOR(RecordIndex, 0, Unpacked.RecordCount) + { + kbts_sequence_lookup_record *Record = &Unpacked.Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } + } + } + else if(Base[0] == 2) + { + kbts_chained_sequence_context_2 *Subst = (kbts_chained_sequence_context_2 *)Base; + + KBTS_FOR(SetIndex, 0, Subst->ChainedClassSequenceRuleSetCount) + { + // @Duplication with 6.1. + kbts_chained_sequence_rule_set *Set = kbts_GetChainedClassSequenceRuleSet(Subst, SetIndex); + + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + MaximumBacktrackWithoutSkippingGlyphs = KBTS_MAX(MaximumBacktrackWithoutSkippingGlyphs, Unpacked.BacktrackCount); + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Unpacked.LookaheadCount); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Unpacked.InputCount); + + KBTS_FOR(RecordIndex, 0, Unpacked.RecordCount) + { + kbts_sequence_lookup_record *Record = &Unpacked.Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } + } + } + else if(Base[0] == 3) + { + kbts_chained_sequence_context_3 *Subst = (kbts_chained_sequence_context_3 *)Base; + kbts_unpacked_chained_sequence_context_3 Unpacked = kbts_UnpackChainedSequenceContext3(Subst, 0); + + MaximumBacktrackWithoutSkippingGlyphs = KBTS_MAX(MaximumBacktrackWithoutSkippingGlyphs, Unpacked.BacktrackCount); + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Unpacked.LookaheadCount); + MaximumInputSequenceLength = KBTS_MAX(MaximumInputSequenceLength, Unpacked.InputCount); + + KBTS_FOR(RecordIndex, 0, Unpacked.RecordCount) + { + kbts_sequence_lookup_record *Record = &Unpacked.Records[RecordIndex]; + if(!kbts_PushLookup(Gdef, Frames, &FrameCount, FrameCapacity, kbts_GetLookup(LookupList, Record->LookupListIndex), LookaheadOffset + Record->SequenceIndex, StackSize + RecordIndex + 1)) + { + Font->Error = 1; + goto DoneGatheringLookupInfo; + } + } + } + } break; + + case 8: + { + kbts_reverse_chain_substitution *Subst = (kbts_reverse_chain_substitution *)Base; + kbts_unpacked_reverse_chain_substitution Unpacked = kbts_UnpackReverseChainSubstitution(Subst, 0); + + MaximumBacktrackWithoutSkippingGlyphs = KBTS_MAX(MaximumBacktrackWithoutSkippingGlyphs, Unpacked.BacktrackCount); + MaximumLookaheadWithoutSkippingGlyphs = KBTS_MAX(MaximumLookaheadWithoutSkippingGlyphs, LookaheadOffset + Unpacked.LookaheadCount); + } break; + } + } + } + } + + DoneGatheringLookupInfo:; + Font->LookupInfo.MaximumBacktrackWithoutSkippingGlyphs = (kbts_u32)MaximumBacktrackWithoutSkippingGlyphs; + Font->LookupInfo.MaximumLookaheadWithoutSkippingGlyphs = (kbts_u32)MaximumLookaheadWithoutSkippingGlyphs; + Font->LookupInfo.MaximumSubstitutionOutputSize = (kbts_u32)MaximumSubstitutionOutputSize; + Font->LookupInfo.MaximumInputSequenceLength = (kbts_u32)MaximumInputSequenceLength; + Font->LookupInfo.MaximumLookupStackSize = (kbts_u32)MaximumLookupStackSize; + } + + Font->LookupCount = (kbts_u32)TotalLookupCount; + Font->SubtableCount = (kbts_u32)TotalSubtableCount; + + kbts_un GlyphLookupMatrixSizeInBytes = ((((TotalLookupCount * Font->GlyphCount) + 7) / 8) + 3) & ~3; + kbts_un GlyphLookupSubtableMatrixSizeInBytes = ((((TotalSubtableCount * Font->GlyphCount) + 7) / 8) + 3) & ~3; + kbts_un Result = GlyphLookupMatrixSizeInBytes + GlyphLookupSubtableMatrixSizeInBytes + sizeof(kbts_u32) * TotalLookupCount + sizeof(kbts_lookup_subtable_info) * TotalSubtableCount; + return Result; +} + +KBTS_EXPORT int kbts_PostReadFontInitialize(kbts_font *Font, void *Memory, kbts_un MemorySize) +{ + if(kbts_FontIsValid(Font) && Font->Maxp) + { + // Bake table filters. + kbts_un GlyphCount = Font->GlyphCount; + + kbts_un GlyphLookupMatrixSizeInBits = Font->LookupCount * GlyphCount; + kbts_un GlyphLookupMatrixSizeInBytes = (GlyphLookupMatrixSizeInBits + 7) / 8; + GlyphLookupMatrixSizeInBytes = (GlyphLookupMatrixSizeInBytes + 3) & ~3; // Align to u32 + + kbts_un GlyphLookupSubtableMatrixSizeInBits = Font->SubtableCount * GlyphCount; + kbts_un GlyphLookupSubtableMatrixSizeInBytes = (GlyphLookupSubtableMatrixSizeInBits + 7) / 8; + GlyphLookupSubtableMatrixSizeInBytes = (GlyphLookupSubtableMatrixSizeInBytes + 3) & ~3; // Align to u32 + + memset(Memory, 0, MemorySize); + + kbts_u32 *GlyphLookupMatrix = (kbts_u32 *)Memory; + kbts_u32 *GlyphLookupSubtableMatrix = KBTS_POINTER_OFFSET(kbts_u32, GlyphLookupMatrix, GlyphLookupMatrixSizeInBytes); + kbts_u32 *LookupSubtableIndexOffsets = KBTS_POINTER_OFFSET(kbts_u32, GlyphLookupSubtableMatrix, GlyphLookupSubtableMatrixSizeInBytes); + kbts_lookup_subtable_info *SubtableInfos = KBTS_POINTER_OFFSET(kbts_lookup_subtable_info, LookupSubtableIndexOffsets, sizeof(kbts_u32) * Font->LookupCount); + kbts_un GposLookupIndexOffset = 0; + + kbts_un RunningLookupIndex = 0; + kbts_un RunningSubtableIndex = 0; + + KBTS_FOR(ShapingTableIndex, 0, KBTS_SHAPING_TABLE_COUNT) + { + kbts_gsub_gpos *ShapingTable = Font->ShapingTables[ShapingTableIndex]; + + if(ShapingTableIndex == KBTS_SHAPING_TABLE_GPOS) + { + GposLookupIndexOffset = RunningLookupIndex; + } + + if(ShapingTable) + { + kbts_lookup_list *LookupList = kbts_GetLookupList(ShapingTable); + KBTS_FOR(LookupIndex, 0, LookupList->Count) + { + kbts_lookup *PackedLookup = kbts_GetLookup(LookupList, LookupIndex); + kbts_unpacked_lookup Lookup = kbts_UnpackLookup(Font->Gdef, PackedLookup); + + LookupSubtableIndexOffsets[RunningLookupIndex] = (kbts_u32)RunningSubtableIndex; + + KBTS_FOR(SubtableIndex, 0, Lookup.SubtableCount) + { + kbts_lookup_subtable_info SubtableInfo = KBTS_ZERO; + kbts_u32 LookupType = Lookup.Type; + kbts_u16 *Base = KBTS_POINTER_OFFSET(kbts_u16, PackedLookup, Lookup.SubtableOffsets[SubtableIndex]); + + while(((ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) && (LookupType == 7)) || + ((ShapingTableIndex == KBTS_SHAPING_TABLE_GPOS) && (LookupType == 9))) + { + kbts_extension *Extension = (kbts_extension *)Base; + LookupType = Extension->LookupType; + Base = KBTS_POINTER_OFFSET(kbts_u16, Extension, Extension->Offset); + } + + KBTS_FOR(GlyphIndex, 0, GlyphCount) + { + kbts_glyph Glyph = KBTS_ZERO; + Glyph.Id = (kbts_u16)GlyphIndex; + Glyph.Classes = kbts_GlyphClasses(Font, Glyph.Id); + + // @Duplication + kbts_cover_glyph_result Cover = KBTS_ZERO; + Cover.Valid = kbts_GlyphPassesLookupFilter(&Glyph, &Lookup); + if(Cover.Valid && kbts_LookupBeginsWithCoverage((kbts_shaping_table)ShapingTableIndex, Lookup.Type, Base[0])) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Base, Base[1]); + Cover = kbts_CoverGlyph(Coverage, Glyph.Id); + } + + // The "primary" slot here refers to the "current glyph" when matching. + // It is the first glyph in the input sequence, not counting backtrack. + // We use the primary slot for per-feature filtering. + int InPrimary = Cover.Valid; + // The secondary slot is anything else: input sequence, lookahead, backtrack, ligature components. + // They are used for subtable filtering. + int InSecondary = 0; + + if((ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) && (LookupType == 4)) + { + kbts_ligature_substitution *Subst = (kbts_ligature_substitution *)Base; + KBTS_FOR(SetIndex, 0, Subst->LigatureSetCount) + { + kbts_ligature_set *Set = kbts_GetLigatureSet(Subst, SetIndex); + KBTS_FOR(LigatureIndex, 0, Set->Count) + { + kbts_ligature *Ligature = kbts_GetLigature(Set, LigatureIndex); + kbts_u16 *Ids = KBTS_POINTER_AFTER(kbts_u16, Ligature); + + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Ligature->ComponentCount - 1) + 1; + + KBTS_FOR(IdIndex, 1, Ligature->ComponentCount) + { + kbts_u16 LigatureGlyphId = Ids[IdIndex - 1]; + if(LigatureGlyphId == Glyph.Id) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + } + else if(((ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) && (LookupType == 5)) || + ((ShapingTableIndex == KBTS_SHAPING_TABLE_GPOS) && (LookupType == 7))) + { + if(Base[0] == 1) + { + kbts_sequence_context_1 *Subst = (kbts_sequence_context_1 *)Base; + + KBTS_FOR(SetIndex, 0, Subst->SeqRuleSetCount) + { + kbts_sequence_rule_set *Set = kbts_GetSequenceRuleSet(Subst, SetIndex); + + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_sequence_rule *Rule = kbts_GetSequenceRule(Set, RuleIndex); + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Rule->GlyphCount - 1) + 1; + + kbts_u16 *SequenceIds = KBTS_POINTER_AFTER(kbts_u16, Rule); + KBTS_FOR(InputIndex, 1, Rule->GlyphCount) + { + kbts_u16 SequenceId = SequenceIds[InputIndex - 1]; + if(SequenceId == Glyph.Id) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + } + } + else if(Base[0] == 2) + { + kbts_sequence_context_2 *Subst = (kbts_sequence_context_2 *)Base; + kbts_u16 *ClassDefBase = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->ClassDefOffset); + kbts_u32 Class = kbts_GlyphClassFromTable(ClassDefBase, Glyph.Id); + + KBTS_FOR(SetIndex, 0, Subst->ClassSequenceRuleSetCount) + { + kbts_class_sequence_rule_set *Set = kbts_GetClassSequenceRuleSet(Subst, SetIndex); + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_class_sequence_rule *Rule = kbts_GetClassSequenceRule(Set, RuleIndex); + kbts_u16 *SequenceClasses = KBTS_POINTER_AFTER(kbts_u16, Rule); + + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Rule->GlyphCount - 1) + 1; + + KBTS_FOR(SequenceIndex, 1, Rule->GlyphCount) + { + if(SequenceClasses[SequenceIndex - 1] == Class) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + } + } + else if(Base[0] == 3) + { + kbts_sequence_context_3 *Subst = (kbts_sequence_context_3 *)Base; + kbts_u16 *CoverageOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Subst->GlyphCount - 1) + 1; + + InPrimary = 0; + KBTS_FOR(CoverageIndex, 0, Subst->GlyphCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, CoverageOffsets[CoverageIndex]); + kbts_cover_glyph_result SequenceCover = kbts_CoverGlyph(Coverage, Glyph.Id); + if(SequenceCover.Valid) + { + if(!CoverageIndex) + { + InPrimary = 1; + } + else + { + InSecondary = 1; + } + goto DoneCheckingForInclusion; + } + } + } + } + else if(((ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) && (LookupType == 6)) || + ((ShapingTableIndex == KBTS_SHAPING_TABLE_GPOS) && (LookupType == 8))) + { + if(Base[0] == 1) + { + kbts_chained_sequence_context_1 *Subst = (kbts_chained_sequence_context_1 *)Base; + kbts_u16 *ChainedSequenceRuleSetOffsets = KBTS_POINTER_AFTER(kbts_u16, Subst); + + KBTS_FOR(SetIndex, 0, Subst->ChainedSequenceRuleSetCount) + { + kbts_chained_sequence_rule_set *Set = KBTS_POINTER_OFFSET(kbts_chained_sequence_rule_set, Subst, ChainedSequenceRuleSetOffsets[SetIndex]); + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedClassSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + SubtableInfo.MinimumBacktrackPlusOne = KBTS_MIN(SubtableInfo.MinimumBacktrackPlusOne - 1, Unpacked.BacktrackCount) + 1; + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Unpacked.InputCount - 1 + Unpacked.LookaheadCount) + 1; + + KBTS_FOR(BacktrackIndex, 0, Unpacked.BacktrackCount) + { + if(Unpacked.Backtrack[BacktrackIndex] == Glyph.Id) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + KBTS_FOR(InputIndex, 1, Unpacked.InputCount) + { + if(Unpacked.Input[InputIndex - 1] == Glyph.Id) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + KBTS_FOR(LookaheadIndex, 0, Unpacked.LookaheadCount) + { + if(Unpacked.Lookahead[LookaheadIndex] == Glyph.Id) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + } + else if(Base[0] == 2) + { + kbts_chained_sequence_context_2 *Subst = (kbts_chained_sequence_context_2 *)Base; + kbts_u16 *BacktrackClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->BacktrackClassDefOffset); + kbts_u16 *InputClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->InputClassDefOffset); + kbts_u16 *LookaheadClassDefinition = KBTS_POINTER_OFFSET(kbts_u16, Subst, Subst->LookaheadClassDefOffset); + + kbts_u16 BacktrackClass = kbts_GlyphClassFromTable(BacktrackClassDefinition, Glyph.Id); + kbts_u16 InputClass = kbts_GlyphClassFromTable(InputClassDefinition, Glyph.Id); + kbts_u16 LookaheadClass = kbts_GlyphClassFromTable(LookaheadClassDefinition, Glyph.Id); + + KBTS_FOR(SetIndex, 0, Subst->ChainedClassSequenceRuleSetCount) + { + kbts_chained_sequence_rule_set *Set = kbts_GetChainedClassSequenceRuleSet(Subst, SetIndex); + if(Set) + { + KBTS_FOR(RuleIndex, 0, Set->Count) + { + kbts_chained_sequence_rule *Rule = kbts_GetChainedSequenceRule(Set, RuleIndex); + kbts_unpacked_chained_sequence_rule Unpacked = kbts_UnpackChainedSequenceRule(Rule, 0); + + SubtableInfo.MinimumBacktrackPlusOne = KBTS_MIN(SubtableInfo.MinimumBacktrackPlusOne - 1, Unpacked.BacktrackCount) + 1; + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Unpacked.InputCount - 1 + Unpacked.LookaheadCount) + 1; + + KBTS_FOR(BacktrackIndex, 0, Unpacked.BacktrackCount) + { + if(Unpacked.Backtrack[BacktrackIndex] == BacktrackClass) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + KBTS_FOR(InputIndex, 1, Unpacked.InputCount) + { + if(Unpacked.Input[InputIndex - 1] == InputClass) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + KBTS_FOR(LookaheadIndex, 0, Unpacked.LookaheadCount) + { + if(Unpacked.Lookahead[LookaheadIndex] == LookaheadClass) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + } + } + else if(Base[0] == 3) + { + kbts_chained_sequence_context_3 *Subst = (kbts_chained_sequence_context_3 *)Base; + kbts_unpacked_chained_sequence_context_3 Unpacked = kbts_UnpackChainedSequenceContext3(Subst, 0); + + SubtableInfo.MinimumBacktrackPlusOne = KBTS_MIN(SubtableInfo.MinimumBacktrackPlusOne - 1, Unpacked.BacktrackCount) + 1; + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Unpacked.InputCount - 1 + Unpacked.LookaheadCount) + 1; + + KBTS_FOR(BacktrackCoverageIndex, 0, Unpacked.BacktrackCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.BacktrackCoverageOffsets[BacktrackCoverageIndex]); + kbts_cover_glyph_result SequenceCover = kbts_CoverGlyph(Coverage, Glyph.Id); + if(SequenceCover.Valid) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + + InPrimary = 0; + KBTS_FOR(InputCoverageIndex, 0, Unpacked.InputCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.InputCoverageOffsets[InputCoverageIndex]); + kbts_cover_glyph_result SequenceCover = kbts_CoverGlyph(Coverage, Glyph.Id); + if(SequenceCover.Valid) + { + if(!InputCoverageIndex) + { + InPrimary = 1; + } + else + { + InSecondary = 1; + } + goto DoneCheckingForInclusion; + } + } + + KBTS_FOR(LookaheadCoverageIndex, 0, Unpacked.LookaheadCount) + { + kbts_coverage *Coverage = KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.LookaheadCoverageOffsets[LookaheadCoverageIndex]); + kbts_cover_glyph_result SequenceCover = kbts_CoverGlyph(Coverage, Glyph.Id); + if(SequenceCover.Valid) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + } + else if((ShapingTableIndex == KBTS_SHAPING_TABLE_GSUB) && (LookupType == 8)) + { + kbts_reverse_chain_substitution *Subst = (kbts_reverse_chain_substitution *)Base; + kbts_unpacked_reverse_chain_substitution Unpacked = kbts_UnpackReverseChainSubstitution(Subst, 0); + + SubtableInfo.MinimumBacktrackPlusOne = KBTS_MIN(SubtableInfo.MinimumBacktrackPlusOne - 1, Unpacked.BacktrackCount) + 1; + SubtableInfo.MinimumFollowupPlusOne = KBTS_MIN(SubtableInfo.MinimumFollowupPlusOne - 1, Unpacked.LookaheadCount) + 1; + + KBTS_FOR(BacktrackIndex, 0, Unpacked.BacktrackCount) + { + kbts_cover_glyph_result BacktrackCover = kbts_CoverGlyph(KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.BacktrackCoverageOffsets[BacktrackIndex]), Glyph.Id); + if(BacktrackCover.Valid) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + KBTS_FOR(LookaheadIndex, 0, Unpacked.LookaheadCount) + { + kbts_cover_glyph_result LookaheadCover = kbts_CoverGlyph(KBTS_POINTER_OFFSET(kbts_coverage, Subst, Unpacked.LookaheadCoverageOffsets[LookaheadIndex]), Glyph.Id); + if(LookaheadCover.Valid) + { + InSecondary = 1; + goto DoneCheckingForInclusion; + } + } + } + DoneCheckingForInclusion:; + + if(InPrimary) + { + kbts_un FlatIndex = RunningLookupIndex * GlyphCount + GlyphIndex; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + GlyphLookupMatrix[WordIndex] |= (1 << BitIndex); + } + if(InPrimary || InSecondary) + { + kbts_un FlatIndex = RunningSubtableIndex * GlyphCount + GlyphIndex; + kbts_un WordIndex = FlatIndex / 32; + kbts_un BitIndex = FlatIndex % 32; + GlyphLookupSubtableMatrix[WordIndex] |= (1 << BitIndex); + } + } + + SubtableInfos[RunningSubtableIndex] = SubtableInfo; + RunningSubtableIndex += 1; + } + + RunningLookupIndex += 1; + } + } + } + + Font->SubtableInfos = SubtableInfos; + Font->GlyphLookupMatrix = GlyphLookupMatrix; + Font->GlyphLookupSubtableMatrix = GlyphLookupSubtableMatrix; + Font->LookupSubtableIndexOffsets = LookupSubtableIndexOffsets; + Font->GposLookupIndexOffset = (kbts_u32)GposLookupIndexOffset; + Font->GlyphCount = (kbts_u32)GlyphCount; + } + + return kbts_FontIsValid(Font); +} + +KBTS_EXPORT int kbts_FontIsValid(kbts_font *Font) +{ + int Result = !Font->Error; + return Result; +} + +#ifndef KB_TEXT_SHAPE_NO_CRT +KBTS_EXPORT kbts_font kbts_FontFromFile(const char *FileName) +{ + kbts_font Result = KBTS_ZERO; + + FILE *File; +# ifndef _MSC_VER + File = fopen(FileName, "rb"); +# else + fopen_s(&File, FileName, "rb"); +# endif + + if(File) + { + fseek(File, 0, SEEK_END); + long FileSize = ftell(File); + fseek(File, 0, SEEK_SET); + + void *Data = malloc((kbts_un)FileSize); + kbts_un Ok = fread(Data, (kbts_un)FileSize, 1, File); + fclose(File); + + if(Ok) + { + kbts_un ScratchSize = kbts_ReadFontHeader(&Result, Data, (kbts_un)FileSize); + + void *Scratch = malloc(ScratchSize); + kbts_un MemorySize = kbts_ReadFontData(&Result, Scratch, ScratchSize); + + void *Memory = Scratch; + if(MemorySize > ScratchSize) + { + free(Scratch); + Memory = malloc(MemorySize); + } + + kbts_PostReadFontInitialize(&Result, Memory, MemorySize); + } + } + + return Result; +} + +KBTS_EXPORT void kbts_FreeFont(kbts_font *Font) +{ + if(Font->FileBase) + { + free(Font->FileBase); + if(Font->GlyphLookupMatrix) + { + free(Font->GlyphLookupMatrix); // This frees everything else. + } + } +} +#endif + +KBTS_EXPORT int kbts_BreakStateIsValid(kbts_break_state *State) +{ + int Result = !(State->Flags & KBTS_BREAK_STATE_FLAG_RAN_OUT_OF_REORDER_BUFFER_SPACE); + return Result; +} + +static void kbts_DoBreak(kbts_break_state *State, kbts_s32 Position, kbts_u8 Flags, kbts_direction Direction, kbts_script Script) +{ + if(kbts_BreakStateIsValid(State) && Flags && (State->BreakCount < KBTS_BREAK_REORDER_BUFFER_SIZE)) + { + if(State->BreakCount < KBTS_BREAK_REORDER_BUFFER_SIZE) + { + kbts_break Break = KBTS_ZERO; + Break.Position = State->CurrentPosition + (kbts_u32)Position; + Break.Flags = Flags; + Break.Direction = Direction; + Break.Script = Script; + + int Matched = 0; + KBTS_FOR(BreakIndex, 0, State->BreakCount) + { + kbts_break *Existing = &State->Breaks[BreakIndex]; + + if(Existing->Position == Break.Position) + { + Existing->Flags |= Break.Flags; + if(Break.Flags & KBTS_BREAK_FLAG_DIRECTION) Existing->Direction = Break.Direction; + if(Break.Flags & KBTS_BREAK_FLAG_SCRIPT) Existing->Script = Break.Script; + Matched = 1; + break; + } + else if(Existing->Position < Break.Position) + { + kbts_break Swap = *Existing; + *Existing = Break; + Break = Swap; + } + } + State->Breaks[State->BreakCount] = Break; + State->BreakCount += !Matched; + } + else + { + // This should never happen as long as we call Break() after every BreakAddCodepoint(). + State->Flags |= KBTS_BREAK_STATE_FLAG_RAN_OUT_OF_REORDER_BUFFER_SPACE; + } + } +} + +// The line break state is a 4-character history. Each character is a bags of 12 bits (padded to 16 bits). +// Each character specifies allowed and required breaks on 6 levels of priority. +// A required break implies an allowed break. +// A priority N break implies priority 0..N-1 breaks. +enum { + KBTS_LINE_BREAK_ALLOWED0 = 1, + KBTS_LINE_BREAK_ALLOWED1 = 3, + KBTS_LINE_BREAK_ALLOWED2 = 7, + KBTS_LINE_BREAK_ALLOWED3 = 0xF, + KBTS_LINE_BREAK_ALLOWED4 = 0x1F, + KBTS_LINE_BREAK_ALLOWED5 = 0x3F, + KBTS_LINE_BREAK_REQUIRED0 = (1 << 6) | KBTS_LINE_BREAK_ALLOWED0, + KBTS_LINE_BREAK_REQUIRED1 = (3 << 6) | KBTS_LINE_BREAK_ALLOWED1, + KBTS_LINE_BREAK_REQUIRED2 = (7 << 6) | KBTS_LINE_BREAK_ALLOWED2, + KBTS_LINE_BREAK_REQUIRED3 = (0xF << 6) | KBTS_LINE_BREAK_ALLOWED3, + KBTS_LINE_BREAK_REQUIRED4 = (0x1F << 6) | KBTS_LINE_BREAK_ALLOWED4, + KBTS_LINE_BREAK_REQUIRED5 = (0x3F << 6) | KBTS_LINE_BREAK_ALLOWED5, + KBTS_LINE_BREAK_REQUIRED_MASK = 0x3F << 6, + KBTS_LINE_BREAK_ALLOWED_MASK = 0x3F, + KBTS_LINE_BREAK_MASK = KBTS_LINE_BREAK_REQUIRED_MASK | KBTS_LINE_BREAK_ALLOWED_MASK, +}; + +static void kbts_DoLineBreak(kbts_break_state *State, int Position, kbts_u64 EffectiveLineBreaks, int Rtl, kbts_script Script) +{ + if(EffectiveLineBreaks & KBTS_LINE_BREAK_MASK) + { + kbts_u8 Flags = 0; + if(EffectiveLineBreaks & KBTS_LINE_BREAK_ALLOWED_MASK) Flags |= KBTS_BREAK_FLAG_LINE_SOFT; + if(EffectiveLineBreaks & KBTS_LINE_BREAK_REQUIRED_MASK) Flags |= KBTS_BREAK_FLAG_LINE_HARD; + + kbts_DoBreak(State, Position, Flags, Rtl, Script); + } +} + +static void kbts_BreakAddCodepoint_(kbts_break_state *State, kbts_u32 Codepoint, kbts_u32 PositionIncrement, int MaybeEndOfText) +{ + // In these macros, and in FlagState, and in the way we buffer our state in general, + // index 0 means _after_ the codepoint currently being added, + // index 1 means _before_ the codepoint currently being added. +#define KBTS_BREAK(Flags, Position) do {FlagState |= ((Flags) << (8 * (Position)));} while(0) +#define KBTS_BREAK2(Flags, Position0, Position1) do {FlagState |= ((Flags) << (8 * (Position0))) | ((Flags) << (8 * (Position1)));} while(0) + if(!kbts_BreakStateIsValid(State)) return; + + kbts_u8 Script = kbts_GetUnicodeScript(Codepoint); + kbts_unicode_bidirectional_class BidirectionalClass = kbts_GetUnicodeBidirectionalClass(Codepoint); + kbts_u8 UnicodeFlags = kbts_GetUnicodeFlags(Codepoint); + kbts_u32 MatchingBracket = kbts_GetUnicodeMatchingBracket(Codepoint); + kbts_u8 GraphemeBreakClass = kbts_GetUnicodeGraphemeBreakClass(Codepoint); + kbts_u8 LineBreakClass = kbts_GetUnicodeLineBreakClass(Codepoint); + kbts_u8 WordBreakClass = kbts_GetUnicodeWordBreakClass(Codepoint); + kbts_u8 LastScript = State->LastScripts[0]; + kbts_u32 FlagState = State->FlagState << 8; + kbts_u8 LastLineBreakClass = State->LastLineBreakClass; + // Super secret cheat code for signaling end-of-text + int EndOfText = (Codepoint == 3) && MaybeEndOfText; + int StartOfText = !(State->Flags & KBTS_BREAK_STATE_FLAG_STARTED); + kbts_u32 LineBreakHistory = State->LineBreakHistory; + kbts_u32 WordBreakHistory = State->WordBreakHistory; + kbts_u8 LastWordBreakClass = State->LastWordBreakClass; + kbts_s16 WordBreak2PositionOffset = State->WordBreak2PositionOffset; + kbts_u8 LastWordBreakClassIncludingIgnored = State->LastWordBreakClassIncludingIgnored; + kbts_s16 PositionOffset2 = State->PositionOffset2; + kbts_s16 PositionOffset3 = State->PositionOffset3; + kbts_u32 Flags = State->Flags; + kbts_direction LastDirection = State->LastDirection; + + if(StartOfText) + { + LineBreakHistory = LastLineBreakClass = KBTS_LINE_BREAK_CLASS_SOT; + WordBreakHistory = LastWordBreakClass = KBTS_WORD_BREAK_CLASS_SOT; + } + + + if((Script == KBTS_SCRIPT_DEFAULT) || (Script == KBTS_SCRIPT_DEFAULT2)) + { + Script = LastScript; + } + + // Bracket pairing overrides default directions/scripts. + if(UnicodeFlags & KBTS_UNICODE_FLAG_OPEN_BRACKET) + { + if(State->BracketCount < KBTS_ARRAY_LENGTH(State->Brackets)) + { + kbts_bracket *Bracket = &State->Brackets[State->BracketCount++]; + + // @Incomplete: Canonicalize the bracket. + Bracket->Codepoint = Codepoint; + Bracket->Direction = KBTS_DIRECTION_NONE; + Bracket->Script = Script; + + State->Flags |= KBTS_BREAK_STATE_FLAG_LAST_WAS_BRACKET; + } + } + else if(UnicodeFlags & KBTS_UNICODE_FLAG_CLOSE_BRACKET) + { + if(State->BracketCount) + { + kbts_un FoundBracketIndex = 0; + kbts_bracket *FoundBracket = 0; + + // @Incomplete: Canonicalize the bracket. + KBTS_FOR(BracketIndex, 0, State->BracketCount) + { + kbts_bracket *Bracket = &State->Brackets[State->BracketCount - 1 - BracketIndex]; + + if(Bracket->Codepoint == MatchingBracket) + { + FoundBracket = Bracket; + FoundBracketIndex = State->BracketCount - 1 - BracketIndex; + + break; + } + } + + if(FoundBracket) + { + BidirectionalClass = FoundBracket->Direction; + Script = FoundBracket->Script; + + State->BracketCount = (kbts_u32)FoundBracketIndex; + } + } + } + + { // Direction breaking. + kbts_u8 Bidirectional2 = State->BidirectionalClass2; + kbts_u8 Bidirectional1 = State->BidirectionalClass1; + + switch(BidirectionalClass) + { + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_NSM: BidirectionalClass = Bidirectional1; break; + + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_L: + Flags &= ~(KBTS_BREAK_STATE_FLAG_SAW_R_AFTER_L | KBTS_BREAK_STATE_FLAG_SAW_AL_AFTER_LR); + break; + + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_R: + Flags |= KBTS_BREAK_STATE_FLAG_SAW_R_AFTER_L; + Flags &= ~KBTS_BREAK_STATE_FLAG_SAW_AL_AFTER_LR; + break; + + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_AL: + // Rule W3 occurs before W7, so we treat AL as R for the purposes of rule W7. + Flags |= (KBTS_BREAK_STATE_FLAG_SAW_AL_AFTER_LR | KBTS_BREAK_STATE_FLAG_SAW_R_AFTER_L); + BidirectionalClass = KBTS_UNICODE_BIDIRECTIONAL_CLASS_R; + break; + + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN: + if(Flags & KBTS_BREAK_STATE_FLAG_SAW_AL_AFTER_LR) + { + BidirectionalClass = KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN; + goto CaseAn; + } + if((Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN) && ((Bidirectional1 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_ES) || (Bidirectional1 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_CS))) + { + Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN; + } + if(!(Flags & KBTS_BREAK_STATE_FLAG_SAW_R_AFTER_L)) + { + BidirectionalClass = KBTS_UNICODE_BIDIRECTIONAL_CLASS_L; + } + break; + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN: + CaseAn:; + if((Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN) && (Bidirectional1 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_CS)) + { + Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN; + } + break; + case KBTS_UNICODE_BIDIRECTIONAL_CLASS_ET: + if(Bidirectional1 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN) + { + BidirectionalClass = KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN; + } + break; + } + + if(KBTS_IN_SET(BidirectionalClass, KBTS_SET32((KBTS_UNICODE_BIDIRECTIONAL_CLASS_ET)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_ES)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_CS)))) + { + BidirectionalClass = KBTS_UNICODE_BIDIRECTIONAL_CLASS_NI; + } + + if(Bidirectional1 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_NI) + { + if(KBTS_IN_SET(Bidirectional2, KBTS_SET32((KBTS_UNICODE_BIDIRECTIONAL_CLASS_R)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN))) && + KBTS_IN_SET(BidirectionalClass, KBTS_SET32((KBTS_UNICODE_BIDIRECTIONAL_CLASS_R)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN)(KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN)))) + { + Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_R; + } + else if((Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_L) && (BidirectionalClass == KBTS_UNICODE_BIDIRECTIONAL_CLASS_L)) + { + Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_L; + } + else + { + if (State->MainDirection == KBTS_DIRECTION_LTR) Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_L; + else if(State->MainDirection == KBTS_DIRECTION_RTL) Bidirectional1 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_R; + } + } + + // These rules happen at the very end, so we wait until the last slot to apply them. + if((Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_AN) || (Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_EN)) + { + Bidirectional2 = KBTS_UNICODE_BIDIRECTIONAL_CLASS_L; + } + + // @Incomplete: ET+ EN -> EN+ EN + kbts_direction Direction = KBTS_DIRECTION_NONE; + if(Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_L) Direction = KBTS_DIRECTION_LTR; + else if(Bidirectional2 == KBTS_UNICODE_BIDIRECTIONAL_CLASS_R) Direction = KBTS_DIRECTION_RTL; + if(Direction && (Direction != LastDirection)) + { + LastDirection = Direction; + KBTS_BREAK(KBTS_BREAK_FLAG_DIRECTION, 3); + + if(!State->MainDirection) + { + State->MainDirection = (kbts_u8)Direction; + } + } + + State->BidirectionalClass2 = Bidirectional1; + State->BidirectionalClass1 = BidirectionalClass; + } + + if(Script != LastScript) + { + KBTS_BREAK(KBTS_BREAK_FLAG_SCRIPT, 1); + } + + { // Grapheme breaking. + if(EndOfText && !StartOfText) + { + KBTS_BREAK(KBTS_BREAK_FLAG_GRAPHEME, 1); + State->GraphemeBreakState = KBTS_GRAPHEME_BREAK_STATE_START; + } + else + { + kbts_u8 GraphemeBreakState = kbts_GraphemeBreakTransition[GraphemeBreakClass][State->GraphemeBreakState]; + switch(GraphemeBreakState) + { + case KBTS_GRAPHEME_BREAK_STATE_b01: KBTS_BREAK2(KBTS_BREAK_FLAG_GRAPHEME, 1, 0); GraphemeBreakState = KBTS_GRAPHEME_BREAK_STATE_START; break; + case KBTS_GRAPHEME_BREAK_STATE_b0: KBTS_BREAK(KBTS_BREAK_FLAG_GRAPHEME, 0); GraphemeBreakState = KBTS_GRAPHEME_BREAK_STATE_START; break; + + case KBTS_GRAPHEME_BREAK_STATE_b1: + case KBTS_GRAPHEME_BREAK_STATE_b1toCR: + case KBTS_GRAPHEME_BREAK_STATE_b1toL: + case KBTS_GRAPHEME_BREAK_STATE_b1toLVxV: + case KBTS_GRAPHEME_BREAK_STATE_b1toLVTxT: + case KBTS_GRAPHEME_BREAK_STATE_b1toIndicConsonantxIndicLinker: + case KBTS_GRAPHEME_BREAK_STATE_PADDING0: // Padding values are just here to help the compiler. + case KBTS_GRAPHEME_BREAK_STATE_PADDING1: + case KBTS_GRAPHEME_BREAK_STATE_b1toExtendedPictographic: + case KBTS_GRAPHEME_BREAK_STATE_PADDING2: + case KBTS_GRAPHEME_BREAK_STATE_PADDING3: + case KBTS_GRAPHEME_BREAK_STATE_b1toRI: + case KBTS_GRAPHEME_BREAK_STATE_b1toSKIP: + KBTS_BREAK(KBTS_BREAK_FLAG_GRAPHEME, 1); + GraphemeBreakState -= KBTS_GRAPHEME_BREAK_STATE_b1; + } + + State->GraphemeBreakState = GraphemeBreakState; + } + } + + // Word breaks. + // We buffer 3 characters for word breaks. + // Each character gets 3 bits (padded to 4) representing 3 levels of priority. + #define KBTS_WORD_BREAK_BITS(Priority, Position) (((1 << ((Priority) + 1)) - 1) << ((Position) * 4)) + #define KBTS_C2(A, B) case (KBTS_WORD_BREAK_CLASS_##A << 8) | (KBTS_WORD_BREAK_CLASS_##B) + #define KBTS_C3(A, B, C) case (KBTS_WORD_BREAK_CLASS_##A << 16) | (KBTS_WORD_BREAK_CLASS_##B << 8) | (KBTS_WORD_BREAK_CLASS_##C) + + // Ignore [EX FO ZWJ] after ^[_sot_ CR LF NL]. + // @Cleanup: This is the only time we explicitly use EX and FO. They can be merged. + if(KBTS_IN_SET(WordBreakClass, KBTS_SET32((KBTS_WORD_BREAK_CLASS_EX)(KBTS_WORD_BREAK_CLASS_FO)(KBTS_WORD_BREAK_CLASS_ZWJ))) && + !KBTS_IN_SET(LastWordBreakClass, KBTS_SET32((KBTS_WORD_BREAK_CLASS_SOT)(KBTS_WORD_BREAK_CLASS_CR)(KBTS_WORD_BREAK_CLASS_LF)(KBTS_WORD_BREAK_CLASS_NL)))) + { + WordBreak2PositionOffset -= PositionIncrement; + State->WordBreak2PositionOffset = WordBreak2PositionOffset; + } + else + { + kbts_u32 WordBreaks = State->WordBreaks << 4; + kbts_u32 WordUnbreaks = State->WordUnbreaks << 4; + WordBreakHistory = (WordBreakHistory << 8) | WordBreakClass; + + WordBreaks |= KBTS_WORD_BREAK_BITS(0, 1) | KBTS_WORD_BREAK_BITS(0, 0); + if(StartOfText) + { + WordBreaks |= KBTS_WORD_BREAK_BITS(2, 1); + } + + if(KBTS_IN_SET(WordBreakClass, KBTS_SET32((KBTS_WORD_BREAK_CLASS_CR)(KBTS_WORD_BREAK_CLASS_LF)(KBTS_WORD_BREAK_CLASS_NL)))) + { + WordBreaks |= KBTS_WORD_BREAK_BITS(1, 1) | KBTS_WORD_BREAK_BITS(1, 0); + } + else if(KBTS_IN_SET(WordBreakClass, KBTS_SET32((KBTS_WORD_BREAK_CLASS_Oep)(KBTS_WORD_BREAK_CLASS_ALep)))) + { + // ZWJ x {Extended_Pictographic} + if(LastWordBreakClassIncludingIgnored == KBTS_WORD_BREAK_CLASS_ZWJ) + { + WordUnbreaks |= KBTS_WORD_BREAK_BITS(0, 1); + } + } + + switch(WordBreakHistory & 0xFFFF) + { + KBTS_C2(CR, LF): WordUnbreaks |= KBTS_WORD_BREAK_BITS(1, 1); break; + + KBTS_C2(WSS, WSS): + // WSS x WSS is a special rule, because it is supposed to happen _before_ ignores. + if(WordBreak2PositionOffset >= 0) WordUnbreaks |= KBTS_WORD_BREAK_BITS(0, 1); + break; + + // (RI RI)* RI x RI + KBTS_C2(RI, RI): + WordBreakHistory = 0; + // fallthrough + KBTS_C2(HL, SQ): + KBTS_C2(ALnep, ALnep): KBTS_C2(ALnep, ALep): KBTS_C2(ALnep, HL): KBTS_C2(ALnep, NM): KBTS_C2(ALnep, ENL): + KBTS_C2(ALep, ALnep): KBTS_C2(ALep, ALep): KBTS_C2(ALep, HL): KBTS_C2(ALep, NM): KBTS_C2(ALep, ENL): + KBTS_C2(HL, ALnep): KBTS_C2(HL, ALep): KBTS_C2(HL, HL): KBTS_C2(HL, NM): KBTS_C2(HL, ENL): + KBTS_C2(NM, ALnep): KBTS_C2(NM, ALep): KBTS_C2(NM, HL): KBTS_C2(NM, NM): KBTS_C2(NM, ENL): + KBTS_C2(KA, KA): KBTS_C2(KA, ENL): + KBTS_C2(ENL, ALnep): KBTS_C2(ENL, ALep): KBTS_C2(ENL, HL): KBTS_C2(ENL, NM): KBTS_C2(ENL, KA): KBTS_C2(ENL, ENL): + WordUnbreaks |= KBTS_WORD_BREAK_BITS(0, 1); break; + } + + switch(WordBreakHistory & 0xFFFFFF) + { + KBTS_C3(ALnep, ML, ALnep): KBTS_C3(ALnep, ML, ALep): KBTS_C3(ALnep, ML, HL): + KBTS_C3(ALnep, MNL, ALnep): KBTS_C3(ALnep, MNL, ALep): KBTS_C3(ALnep, MNL, HL): + KBTS_C3(ALnep, SQ, ALnep): KBTS_C3(ALnep, SQ, ALep): KBTS_C3(ALnep, SQ, HL): + KBTS_C3(ALep, ML, ALnep): KBTS_C3(ALep, ML, ALep): KBTS_C3(ALep, ML, HL): + KBTS_C3(ALep, MNL, ALnep): KBTS_C3(ALep, MNL, ALep): KBTS_C3(ALep, MNL, HL): + KBTS_C3(ALep, SQ, ALnep): KBTS_C3(ALep, SQ, ALep): KBTS_C3(ALep, SQ, HL): + KBTS_C3(HL, ML, ALnep): KBTS_C3(HL, ML, ALep): KBTS_C3(HL, ML, HL): + KBTS_C3(HL, MNL, ALnep): KBTS_C3(HL, MNL, ALep): KBTS_C3(HL, MNL, HL): + KBTS_C3(HL, SQ, ALnep): KBTS_C3(HL, SQ, ALep): KBTS_C3(HL, SQ, HL): + KBTS_C3(HL, DQ, HL): + KBTS_C3(NM, MN, NM): KBTS_C3(NM, MNL, NM): KBTS_C3(NM, SQ, NM): + WordUnbreaks |= KBTS_WORD_BREAK_BITS(0, 1) | KBTS_WORD_BREAK_BITS(0, 2); break; + } + + kbts_u32 EffectiveWordBreaks = WordBreaks & ~WordUnbreaks; + if(EffectiveWordBreaks & KBTS_WORD_BREAK_BITS(2, 2)) + { + kbts_DoBreak(State, PositionOffset2 + WordBreak2PositionOffset, KBTS_BREAK_FLAG_WORD, 0, 0); + } + if(EndOfText) + { + // Always break at the end of the text. + KBTS_BREAK(KBTS_BREAK_FLAG_WORD, 1); + // Do not break after the end of the text. + } + + State->WordBreaks = (kbts_u16)WordBreaks; + State->WordUnbreaks = (kbts_u16)WordUnbreaks; + State->LastWordBreakClass = WordBreakClass; + State->WordBreak2PositionOffset = 0; + State->WordBreakHistory = WordBreakHistory; + } + State->LastWordBreakClassIncludingIgnored = WordBreakClass; + #undef KBTS_WORD_BREAK_BITS + #undef KBTS_C2 + #undef KBTS_C3 + + kbts_s16 LineBreak3PositionOffset = State->LineBreak3PositionOffset; + kbts_s16 LineBreak2PositionOffset = State->LineBreak2PositionOffset; + { // Line breaking. + kbts_u64 LineBreaks = State->LineBreaks << 16; + kbts_u64 LineUnbreaks = State->LineUnbreaks << 16; + kbts_u64 LineUnbreaksAsync = State->LineUnbreaksAsync << 16; + + #define KBTS_C1(A) case KBTS_LINE_BREAK_CLASS_##A + #define KBTS_C2(A, B) case (KBTS_LINE_BREAK_CLASS_##A << 8) | (KBTS_LINE_BREAK_CLASS_##B) + #define KBTS_C3(A, B, C) case (KBTS_LINE_BREAK_CLASS_##A << 16) | (KBTS_LINE_BREAK_CLASS_##B << 8) | KBTS_LINE_BREAK_CLASS_##C + #define KBTS_C4(A, B, C, D) case (KBTS_LINE_BREAK_CLASS_##A << 24) | (KBTS_LINE_BREAK_CLASS_##B << 16) | (KBTS_LINE_BREAK_CLASS_##C << 8) | KBTS_LINE_BREAK_CLASS_##D + #define KBTS_REQUIRED_LINE_BREAK(Priority, Position) do {LineBreaks |= (kbts_u64)KBTS_LINE_BREAK_REQUIRED##Priority << ((Position) * 16);} while(0) + #define KBTS_LINE_BREAK(Priority, Position) do {LineBreaks |= (kbts_u64)KBTS_LINE_BREAK_ALLOWED##Priority << ((Position) * 16);} while(0) + #define KBTS_LINE_UNBREAK(Priority, Position) do {LineUnbreaks |= (kbts_u64)KBTS_LINE_BREAK_REQUIRED##Priority << ((Position) * 16);} while(0) + #define KBTS_LINE_UNBREAK_ASYNC(Priority, Position) do {LineUnbreaksAsync |= (kbts_u64)KBTS_LINE_BREAK_REQUIRED##Priority << ((Position) * 16);} while(0) + + if(EndOfText) + { + // Depending on the current line break state, we might need very different breaks. + // For now, we copy the transitions from the first row of the transition table, but + // we might want to special-case these. + LineBreakClass = KBTS_LINE_BREAK_CLASS_Onea; + } + else if(LineBreakClass > KBTS_LINE_BREAK_CLASS_COUNT) + { + // These guys have special rules. + if((LineBreakClass == KBTS_LINE_BREAK_CLASS_CM) || (LineBreakClass == KBTS_LINE_BREAK_CLASS_ZWJ)) + { + if(LineBreakClass == KBTS_LINE_BREAK_CLASS_ZWJ) + { + KBTS_LINE_UNBREAK_ASYNC(3, 0); + } + + switch(LastLineBreakClass) + { + case KBTS_LINE_BREAK_CLASS_SOT: + case KBTS_LINE_BREAK_CLASS_BK: + case KBTS_LINE_BREAK_CLASS_CR: + case KBTS_LINE_BREAK_CLASS_LF: + case KBTS_LINE_BREAK_CLASS_NL: + case KBTS_LINE_BREAK_CLASS_SP: + case KBTS_LINE_BREAK_CLASS_ZW: + LineBreakClass = KBTS_LINE_BREAK_CLASS_ALnea; + break; + + default: + // The standard says to treat X [CM ZWJ]* as X. + // This means that we need to hoist [CM ZWJ] completely out of the line breaking logic. + // However, we give our results in index offsets relative to the current glyph, so we + // do have to acknowledge that we are skipping glyphs. + goto LineBreakAbsorbCharacter; + } + } + else if(LineBreakClass == KBTS_LINE_BREAK_CLASS_CJ) + { + LineBreakClass = State->JapaneseLineBreakStyle == KBTS_JAPANESE_LINE_BREAK_STYLE_STRICT ? KBTS_LINE_BREAK_CLASS_NSea : KBTS_LINE_BREAK_CLASS_IDea; + } + } + + if(LastLineBreakClass == LineBreakClass) + { + // @Incomplete: Handle repeats that aren't SP*. + if(LineBreakClass == KBTS_LINE_BREAK_CLASS_SP) + { + goto LineBreakAbsorbCharacter; + } + } + + LineBreakHistory = (LineBreakHistory << 8) | LineBreakClass; + + if(EndOfText) + { + // Always break at the end of text. + KBTS_REQUIRED_LINE_BREAK(5, 1); + + // x QUPf _eot_ + if((LineBreakHistory & 0xFF00) == (KBTS_LINE_BREAK_CLASS_QUPf << 8)) + { + KBTS_LINE_UNBREAK(3, 2); + } + } + + KBTS_LINE_BREAK(0, 0); + KBTS_LINE_BREAK(0, 1); + + switch(LineBreakClass) + { + KBTS_C1(BK): + KBTS_C1(CR): + KBTS_C1(LF): + KBTS_C1(NL): KBTS_LINE_UNBREAK(4, 1); KBTS_REQUIRED_LINE_BREAK(5, 0); break; + KBTS_C1(ZW): KBTS_LINE_BREAK(4, 0); KBTS_LINE_UNBREAK(4, 1); break; + KBTS_C1(BB): KBTS_LINE_UNBREAK(0, 0); break; + + KBTS_C1(GLea): + KBTS_C1(GLnea): + KBTS_C1(OPea): + KBTS_C1(OPnea): KBTS_LINE_UNBREAK(3, 0); break; + + KBTS_C1(WJ): KBTS_LINE_UNBREAK(3, 0); KBTS_LINE_UNBREAK(3, 1); break; + + KBTS_C1(CLea): + KBTS_C1(CLnea): + KBTS_C1(CPea): + KBTS_C1(CPnea): + KBTS_C1(EXea): + KBTS_C1(EXnea): + KBTS_C1(SY): KBTS_LINE_UNBREAK(3, 1); break; + + KBTS_C1(IS): KBTS_LINE_UNBREAK(2, 1); break; + + KBTS_C1(SP): KBTS_LINE_UNBREAK(4, 1); KBTS_LINE_BREAK(2, 0); break; + + KBTS_C1(QU): KBTS_LINE_UNBREAK(1, 1); KBTS_LINE_UNBREAK(1, 0); break; + KBTS_C1(QUPi): KBTS_LINE_UNBREAK(1, 0); break; + KBTS_C1(QUPf): KBTS_LINE_UNBREAK(1, 1); break; + KBTS_C1(CB): KBTS_LINE_BREAK(1, 0); KBTS_LINE_BREAK(1, 1); break; + + KBTS_C1(BAnea): + KBTS_C1(BAea): + KBTS_C1(HYPHEN): + KBTS_C1(HY): + KBTS_C1(NSnea): + KBTS_C1(NSea): + KBTS_C1(INnea): + KBTS_C1(INea): + KBTS_LINE_UNBREAK(0, 1); break; + } + + switch(LineBreakHistory & 0xFFFF) + { + KBTS_C2(CR, LF): KBTS_LINE_UNBREAK(5, 1); break; + KBTS_C2(ZW, SP): KBTS_LINE_BREAK(4, 0); break; + + + KBTS_C2(OPea, QUPi): + KBTS_C2(GLea, QUPi): + KBTS_C2(OPea, SP): + KBTS_C2(OPnea,SP): + KBTS_LINE_UNBREAK(3, 0); + break; + + KBTS_C2(SOT, QUPi): + KBTS_C2(BK, QUPi): + KBTS_C2(CR, QUPi): + KBTS_C2(LF, QUPi): + KBTS_C2(NL, QUPi): + KBTS_C2(SP, QUPi): + KBTS_C2(ZW, QUPi): + KBTS_C2(GLnea, QUPi): + KBTS_C2(QU, QUPi): + KBTS_C2(OPnea, QUPi): + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + KBTS_LINE_UNBREAK(3, 0); + break; + + KBTS_C2(QUPi, QUPi): + KBTS_LINE_UNBREAK(3, 0); + KBTS_LINE_UNBREAK(1, 2); + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + break; + + KBTS_C2(QUPf, QUPi): + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + KBTS_LINE_UNBREAK(3, 0); + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(1, 1); + break; + + KBTS_C2(QUPf, GLnea): + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(3, 1); + KBTS_LINE_UNBREAK(1, 1); + break; + + KBTS_C2(QUPf, BK): + KBTS_C2(QUPf, CR): + KBTS_C2(QUPf, LF): + KBTS_C2(QUPf, NL): + KBTS_C2(QUPf, ZW): + KBTS_C2(QUPf, WJ): + KBTS_C2(QUPf, CLnea): + KBTS_C2(QUPf, CPnea): + KBTS_C2(QUPf, EXnea): + KBTS_C2(QUPf, SY): + KBTS_C2(QUPf, IS): + KBTS_C2(QUPf, SP): + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(1, 1); + break; + + KBTS_C2(QUPf, QUPf): + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + break; + + KBTS_C2(QUPf, QU): + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + break; + + KBTS_C2(QUPf, GLea): + KBTS_LINE_UNBREAK(3, 2); + KBTS_LINE_UNBREAK(3, 1); + break; + + KBTS_C2(QUPf, CPea): + KBTS_C2(QUPf, CLea): + KBTS_C2(QUPf, EXea): + KBTS_LINE_UNBREAK(3, 2); + break; + + KBTS_C2(QUPi, QU): + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + KBTS_LINE_UNBREAK(1, 2); + break; + + KBTS_C2(QUPi, QUPf): + KBTS_LINE_UNBREAK(1, 1); + KBTS_LINE_UNBREAK(1, 0); + KBTS_LINE_UNBREAK(1, 2); + break; + + KBTS_C2(QUPi, GLnea): + KBTS_LINE_UNBREAK(1, 2); + KBTS_LINE_UNBREAK(3, 1); + break; + + KBTS_C2(QUPi, Onea): KBTS_C2(QUPi, Ope): KBTS_C2(QUPi, BK): KBTS_C2(QUPi, CR): KBTS_C2(QUPi, LF): KBTS_C2(QUPi, NL): KBTS_C2(QUPi, SP): KBTS_C2(QUPi, ZW): + KBTS_C2(QUPi, WJ): KBTS_C2(QUPi, CLnea): KBTS_C2(QUPi, CPnea): KBTS_C2(QUPi, EXnea): KBTS_C2(QUPi, SY): KBTS_C2(QUPi, BAnea): + KBTS_C2(QUPi, OPnea): KBTS_C2(QUPi, IS): KBTS_C2(QUPi, NSnea): KBTS_C2(QUPi, B2): KBTS_C2(QUPi, CB): + KBTS_C2(QUPi, HY): KBTS_C2(QUPi, HYPHEN): KBTS_C2(QUPi, INnea): KBTS_C2(QUPi, BB): KBTS_C2(QUPi, HL): KBTS_C2(QUPi, ALnea): KBTS_C2(QUPi, NU): KBTS_C2(QUPi, PRnea): + KBTS_C2(QUPi, IDnea): KBTS_C2(QUPi, IDpe): KBTS_C2(QUPi, EBnea): KBTS_C2(QUPi, POnea): KBTS_C2(QUPi, JV): KBTS_C2(QUPi, JT): KBTS_C2(QUPi, AP): KBTS_C2(QUPi, AK): + KBTS_C2(QUPi, DOTTED_CIRCLE): KBTS_C2(QUPi, AS): KBTS_C2(QUPi, VF): KBTS_C2(QUPi, VI): KBTS_C2(QUPi, RI): + KBTS_LINE_UNBREAK(1, 2); break; + + + KBTS_C2(QUPf, Onea): KBTS_C2(QUPf, Ope): + KBTS_C2(QUPf, BAnea): + KBTS_C2(QUPf, OPnea): KBTS_C2(QUPf, NSnea): KBTS_C2(QUPf, B2): KBTS_C2(QUPf, CB): + KBTS_C2(QUPf, HY): KBTS_C2(QUPf, HYPHEN): KBTS_C2(QUPf, INnea): KBTS_C2(QUPf, BB): KBTS_C2(QUPf, HL): KBTS_C2(QUPf, ALnea): KBTS_C2(QUPf, NU): KBTS_C2(QUPf, PRnea): + KBTS_C2(QUPf, IDnea): KBTS_C2(QUPf, IDpe): KBTS_C2(QUPf, EBnea): KBTS_C2(QUPf, POnea): KBTS_C2(QUPf, JV): KBTS_C2(QUPf, JT): KBTS_C2(QUPf, AP): KBTS_C2(QUPf, AK): + KBTS_C2(QUPf, DOTTED_CIRCLE): KBTS_C2(QUPf, AS): KBTS_C2(QUPf, VF): KBTS_C2(QUPf, VI): KBTS_C2(QUPf, RI): + KBTS_LINE_UNBREAK(1, 1); break; + + KBTS_C2(SOT, QU): KBTS_C2(SOT, QUPf): + KBTS_C2(Onea, QU): KBTS_C2(Ope, QU): KBTS_C2(BK, QU): KBTS_C2(CR, QU): KBTS_C2(LF, QU): KBTS_C2(NL, QU): KBTS_C2(SP, QU): KBTS_C2(ZW, QU): + KBTS_C2(WJ, QU): KBTS_C2(GLnea, QU): KBTS_C2(CLnea, QU): KBTS_C2(CPnea, QU): KBTS_C2(EXnea, QU): KBTS_C2(SY, QU): KBTS_C2(BAnea, QU): + KBTS_C2(OPnea, QU): KBTS_C2(QU, QU): KBTS_C2(IS, QU): KBTS_C2(NSnea, QU): KBTS_C2(B2, QU): KBTS_C2(CB, QU): + KBTS_C2(HY, QU): KBTS_C2(HYPHEN, QU): KBTS_C2(INnea, QU): KBTS_C2(BB, QU): KBTS_C2(HL, QU): KBTS_C2(ALnea, QU): KBTS_C2(NU, QU): KBTS_C2(PRnea, QU): + KBTS_C2(IDnea, QU): KBTS_C2(IDpe, QU): KBTS_C2(EBnea, QU): KBTS_C2(POnea, QU): KBTS_C2(JV, QU): KBTS_C2(JT, QU): KBTS_C2(AP, QU): KBTS_C2(AK, QU): + KBTS_C2(DOTTED_CIRCLE, QU): KBTS_C2(AS, QU): KBTS_C2(VF, QU): KBTS_C2(VI, QU): KBTS_C2(RI, QU): + KBTS_C2(Onea, QUPi): KBTS_C2(Ope, QUPi): + KBTS_C2(WJ, QUPi): KBTS_C2(CLnea, QUPi): KBTS_C2(CPnea, QUPi): KBTS_C2(EXnea, QUPi): KBTS_C2(SY, QUPi): KBTS_C2(BAnea, QUPi): + KBTS_C2(IS, QUPi): + KBTS_C2(NSnea, QUPi): + KBTS_C2(B2, QUPi): + KBTS_C2(CB, QUPi): + KBTS_C2(HY, QUPi): KBTS_C2(HYPHEN, QUPi): KBTS_C2(INnea, QUPi): KBTS_C2(BB, QUPi): KBTS_C2(HL, QUPi): KBTS_C2(ALnea, QUPi): KBTS_C2(NU, QUPi): KBTS_C2(PRnea, QUPi): + KBTS_C2(IDnea, QUPi): KBTS_C2(IDpe, QUPi): KBTS_C2(EBnea, QUPi): KBTS_C2(POnea, QUPi): KBTS_C2(JV, QUPi): KBTS_C2(JT, QUPi): KBTS_C2(AP, QUPi): KBTS_C2(AK, QUPi): + KBTS_C2(DOTTED_CIRCLE, QUPi): KBTS_C2(AS, QUPi): KBTS_C2(VF, QUPi): KBTS_C2(VI, QUPi): KBTS_C2(RI, QUPi): + KBTS_C2(Onea, QUPf): KBTS_C2(Ope, QUPf): KBTS_C2(BK, QUPf): KBTS_C2(CR, QUPf): KBTS_C2(LF, QUPf): KBTS_C2(NL, QUPf): KBTS_C2(SP, QUPf): KBTS_C2(ZW, QUPf): + KBTS_C2(WJ, QUPf): KBTS_C2(GLnea, QUPf): KBTS_C2(CLnea, QUPf): KBTS_C2(CPnea, QUPf): KBTS_C2(EXnea, QUPf): KBTS_C2(SY, QUPf): KBTS_C2(BAnea, QUPf): + KBTS_C2(OPnea, QUPf): KBTS_C2(QU, QUPf): KBTS_C2(IS, QUPf): KBTS_C2(NSnea, QUPf): KBTS_C2(B2, QUPf): KBTS_C2(CB, QUPf): + KBTS_C2(HY, QUPf): KBTS_C2(HYPHEN, QUPf): KBTS_C2(INnea, QUPf): KBTS_C2(BB, QUPf): KBTS_C2(HL, QUPf): KBTS_C2(ALnea, QUPf): KBTS_C2(NU, QUPf): KBTS_C2(PRnea, QUPf): + KBTS_C2(IDnea, QUPf): KBTS_C2(IDpe, QUPf): KBTS_C2(EBnea, QUPf): KBTS_C2(POnea, QUPf): KBTS_C2(JV, QUPf): KBTS_C2(JT, QUPf): KBTS_C2(AP, QUPf): KBTS_C2(AK, QUPf): + KBTS_C2(DOTTED_CIRCLE, QUPf): KBTS_C2(AS, QUPf): KBTS_C2(VF, QUPf): KBTS_C2(VI, QUPf): KBTS_C2(RI, QUPf): + KBTS_LINE_UNBREAK(1, 1); KBTS_LINE_UNBREAK(1, 0); break; + + KBTS_C2(HL, NU): KBTS_C2(ALnea, NU): KBTS_C2(ALea, NU): KBTS_C2(DOTTED_CIRCLE, NU): + KBTS_C2(NU, ALnea): KBTS_C2(NU, ALea): KBTS_C2(NU, DOTTED_CIRCLE): KBTS_C2(NU, HL): + KBTS_C2(PRnea, IDnea): KBTS_C2(PRnea, IDea): KBTS_C2(PRnea, IDpe): KBTS_C2(PRnea, EBea): KBTS_C2(PRnea, EBnea): KBTS_C2(PRnea, EM): + KBTS_C2(PRea, IDnea): KBTS_C2(PRea, IDea): KBTS_C2(PRea, IDpe): KBTS_C2(PRea, EBea): KBTS_C2(PRea, EBnea): KBTS_C2(PRea, EM): + KBTS_C2(IDnea, POea): KBTS_C2(IDnea, POnea): KBTS_C2(IDea, POea): KBTS_C2(IDea, POnea): KBTS_C2(IDpe, POea): KBTS_C2(IDpe, POnea): + KBTS_C2(EBnea, POea): KBTS_C2(EBnea, POnea): KBTS_C2(EBea, POea): KBTS_C2(EBea, POnea): KBTS_C2(EM, POea): KBTS_C2(EM, POnea): + KBTS_C2(PRea, ALea): KBTS_C2(PRea, ALnea): KBTS_C2(PRea, DOTTED_CIRCLE): KBTS_C2(PRea, HL): + KBTS_C2(PRnea, ALea): KBTS_C2(PRnea, ALnea): KBTS_C2(PRnea, DOTTED_CIRCLE): KBTS_C2(PRnea, HL): + KBTS_C2(POea, ALea): KBTS_C2(POea, ALnea): KBTS_C2(POea, DOTTED_CIRCLE): KBTS_C2(POea, HL): + KBTS_C2(POnea, ALea): KBTS_C2(POnea, ALnea): KBTS_C2(POnea, DOTTED_CIRCLE): KBTS_C2(POnea, HL): + KBTS_C2(ALea, PRea): KBTS_C2(ALea, PRnea): KBTS_C2(ALea, POea): KBTS_C2(ALea, POnea): + KBTS_C2(ALnea, PRea): KBTS_C2(ALnea, PRnea): KBTS_C2(ALnea, POea): KBTS_C2(ALnea, POnea): + KBTS_C2(DOTTED_CIRCLE, PRea): KBTS_C2(DOTTED_CIRCLE, PRnea): KBTS_C2(DOTTED_CIRCLE, POea): KBTS_C2(DOTTED_CIRCLE, POnea): + KBTS_C2(HL, PRea): KBTS_C2(HL, PRnea): KBTS_C2(HL, POea): KBTS_C2(HL, POnea): + KBTS_C2(NU, POea): KBTS_C2(NU, POnea): KBTS_C2(NU, PRea): KBTS_C2(NU, PRnea): KBTS_C2(NU, NU): + KBTS_C2(POea, NU): KBTS_C2(POnea, NU): KBTS_C2(PRea, NU): KBTS_C2(PRnea, NU): + KBTS_C2(SY, HL): + KBTS_C2(JL, JL): KBTS_C2(JL, JV): KBTS_C2(JL, H2): KBTS_C2(JL, H3): + KBTS_C2(JV, JV): KBTS_C2(JV, JT): KBTS_C2(H2, JV): KBTS_C2(H2, JT): + KBTS_C2(JT, JT): KBTS_C2(H3, JT): + KBTS_C2(JL, POea): KBTS_C2(JL, POnea): KBTS_C2(JV, POea): KBTS_C2(JV, POnea): KBTS_C2(JT, POea): KBTS_C2(JT, POnea): + KBTS_C2(H2, POea): KBTS_C2(H2, POnea): KBTS_C2(H3, POea): KBTS_C2(H3, POnea): + KBTS_C2(PRea, JL): KBTS_C2(PRea, JV): KBTS_C2(PRea, JT): KBTS_C2(PRea, H2): KBTS_C2(PRea, H3): + KBTS_C2(PRnea, JL): KBTS_C2(PRnea, JV): KBTS_C2(PRnea, JT): KBTS_C2(PRnea, H2): KBTS_C2(PRnea, H3): + KBTS_C2(ALea, ALea): KBTS_C2(ALea, ALnea): KBTS_C2(ALea, DOTTED_CIRCLE): KBTS_C2(ALea, HL): + KBTS_C2(ALnea, ALea): KBTS_C2(ALnea, ALnea): KBTS_C2(ALnea, DOTTED_CIRCLE): KBTS_C2(ALnea, HL): + KBTS_C2(DOTTED_CIRCLE, ALea): KBTS_C2(DOTTED_CIRCLE, ALnea): KBTS_C2(DOTTED_CIRCLE, DOTTED_CIRCLE): KBTS_C2(DOTTED_CIRCLE, HL): + KBTS_C2(HL, ALea): KBTS_C2(HL, ALnea): KBTS_C2(HL, DOTTED_CIRCLE): KBTS_C2(HL, HL): + KBTS_C2(AP, AK): KBTS_C2(AP, DOTTED_CIRCLE): KBTS_C2(AP, AS): + KBTS_C2(AK, VF): KBTS_C2(AK, VI): KBTS_C2(DOTTED_CIRCLE, VF): KBTS_C2(DOTTED_CIRCLE, VI): KBTS_C2(AS, VF): KBTS_C2(AS, VI): + KBTS_C2(IS, ALea): KBTS_C2(IS, ALnea): KBTS_C2(IS, DOTTED_CIRCLE): KBTS_C2(IS, HL): + KBTS_C2(ALea, OPnea): KBTS_C2(ALnea, OPnea): KBTS_C2(DOTTED_CIRCLE, OPnea): KBTS_C2(HL, OPnea): KBTS_C2(NU, OPnea): + KBTS_C2(CPnea, ALea): KBTS_C2(CPnea, ALnea): KBTS_C2(CPnea, DOTTED_CIRCLE): KBTS_C2(CPnea, HL): KBTS_C2(CPnea, NU): + KBTS_C2(EBea, EM): KBTS_C2(EBnea, EM): KBTS_C2(Ope, EM): KBTS_C2(IDpe, EM): + KBTS_C2(HY, NU): KBTS_C2(IS, NU): + KBTS_LINE_UNBREAK(0, 1); break; + + KBTS_C2(Oea, GLea):KBTS_C2(Oea, GLnea): + KBTS_C2(Onea, GLea):KBTS_C2(Onea, GLnea): + KBTS_C2(Ope, GLea):KBTS_C2(Ope, GLnea): + KBTS_C2(BK, GLea):KBTS_C2(BK, GLnea): + KBTS_C2(CR, GLea):KBTS_C2(CR, GLnea): + KBTS_C2(LF, GLea):KBTS_C2(LF, GLnea): + KBTS_C2(NL, GLea):KBTS_C2(NL, GLnea): + KBTS_C2(ZW, GLea):KBTS_C2(ZW, GLnea): + KBTS_C2(WJ, GLea):KBTS_C2(WJ, GLnea): + KBTS_C2(GLea, GLea):KBTS_C2(GLea, GLnea): + KBTS_C2(GLnea, GLea):KBTS_C2(GLnea, GLnea): + KBTS_C2(CLea, GLea):KBTS_C2(CLea, GLnea): + KBTS_C2(CLnea, GLea):KBTS_C2(CLnea, GLnea): + KBTS_C2(CPea, GLea):KBTS_C2(CPea, GLnea): + KBTS_C2(CPnea, GLea):KBTS_C2(CPnea, GLnea): + KBTS_C2(EXea, GLea):KBTS_C2(EXea, GLnea): + KBTS_C2(EXnea, GLea):KBTS_C2(EXnea, GLnea): + KBTS_C2(SY, GLea):KBTS_C2(SY, GLnea): + KBTS_C2(OPea, GLea):KBTS_C2(OPea, GLnea): + KBTS_C2(OPnea, GLea):KBTS_C2(OPnea, GLnea): + KBTS_C2(QU, GLea):KBTS_C2(QU, GLnea): + KBTS_C2(QUPi, GLea): + KBTS_C2(IS, GLea):KBTS_C2(IS, GLnea): + KBTS_C2(NSea, GLea):KBTS_C2(NSea, GLnea): + KBTS_C2(NSnea, GLea):KBTS_C2(NSnea, GLnea): + KBTS_C2(B2, GLea):KBTS_C2(B2, GLnea): + KBTS_C2(CB, GLea):KBTS_C2(CB, GLnea): + KBTS_C2(INea, GLea):KBTS_C2(INea, GLnea): + KBTS_C2(INnea, GLea):KBTS_C2(INnea, GLnea): + KBTS_C2(BB, GLea):KBTS_C2(BB, GLnea): + KBTS_C2(HL, GLea):KBTS_C2(HL, GLnea): + KBTS_C2(ALea, GLea):KBTS_C2(ALea, GLnea): + KBTS_C2(ALnea, GLea):KBTS_C2(ALnea, GLnea): + KBTS_C2(NU, GLea):KBTS_C2(NU, GLnea): + KBTS_C2(PRea, GLea):KBTS_C2(PRea, GLnea): + KBTS_C2(PRnea, GLea):KBTS_C2(PRnea, GLnea): + KBTS_C2(IDea, GLea):KBTS_C2(IDea, GLnea): + KBTS_C2(IDnea, GLea):KBTS_C2(IDnea, GLnea): + KBTS_C2(IDpe, GLea):KBTS_C2(IDpe, GLnea): + KBTS_C2(EBea, GLea):KBTS_C2(EBea, GLnea): + KBTS_C2(EBnea, GLea):KBTS_C2(EBnea, GLnea): + KBTS_C2(EM, GLea):KBTS_C2(EM, GLnea): + KBTS_C2(POea, GLea):KBTS_C2(POea, GLnea): + KBTS_C2(POnea, GLea):KBTS_C2(POnea, GLnea): + KBTS_C2(JL, GLea):KBTS_C2(JL, GLnea): + KBTS_C2(JV, GLea):KBTS_C2(JV, GLnea): + KBTS_C2(JT, GLea):KBTS_C2(JT, GLnea): + KBTS_C2(H2, GLea):KBTS_C2(H2, GLnea): + KBTS_C2(H3, GLea):KBTS_C2(H3, GLnea): + KBTS_C2(AP, GLea):KBTS_C2(AP, GLnea): + KBTS_C2(AK, GLea):KBTS_C2(AK, GLnea): + KBTS_C2(DOTTED_CIRCLE, GLea):KBTS_C2(DOTTED_CIRCLE, GLnea): + KBTS_C2(AS, GLea):KBTS_C2(AS, GLnea): + KBTS_C2(VF, GLea):KBTS_C2(VF, GLnea): + KBTS_C2(VI, GLea):KBTS_C2(VI, GLnea): + KBTS_C2(RI, GLea):KBTS_C2(RI, GLnea): + KBTS_LINE_UNBREAK(3, 1); break; + + + KBTS_C2(CLea, NSnea): KBTS_C2(CLea, NSea): KBTS_C2(CLnea, NSnea): KBTS_C2(CLnea, NSea): + KBTS_C2(CPea, NSnea): KBTS_C2(CPea, NSea): KBTS_C2(CPnea, NSnea): KBTS_C2(CPnea, NSea): + KBTS_C2(B2, B2): + KBTS_LINE_UNBREAK(2, 1); break; + + KBTS_C2(RI, RI): // (RI RI)* RI x RI + KBTS_LINE_UNBREAK(0, 1); + LineBreakHistory = 0; + break; + } + + switch(LineBreakHistory & 0xFFFFFF) + { + KBTS_C3(SOT, QUPi, SP): KBTS_C3(BK, QUPi, SP): KBTS_C3(CR, QUPi, SP): KBTS_C3(LF, QUPi, SP): KBTS_C3(NL, QUPi, SP): KBTS_C3(OPea, QUPi, SP): KBTS_C3(OPnea, QUPi, SP): + KBTS_C3(SP, QUPi, SP): KBTS_C3(ZW, QUPi, SP): KBTS_C3(QU, QUPi, SP): KBTS_C3(QUPi, QUPi, SP): KBTS_C3(QUPf, QUPi, SP): KBTS_C3(GLea, QUPi, SP): KBTS_C3(GLnea, QUPi, SP): + KBTS_LINE_UNBREAK(3, 0); break; + + KBTS_C3(SP, IS, NU): + KBTS_LINE_BREAK(3, 2); break; + + KBTS_C3(CLea, SP, NSnea): KBTS_C3(CLea, SP, NSea): KBTS_C3(CLnea, SP, NSnea): KBTS_C3(CLnea, SP, NSea): + KBTS_C3(CPea, SP, NSnea): KBTS_C3(CPea, SP, NSea): KBTS_C3(CPnea, SP, NSnea): KBTS_C3(CPnea, SP, NSea): + KBTS_C3(B2, SP, B2): + KBTS_LINE_UNBREAK(2, 1); break; + + KBTS_C3(SOT, HY, ALnea): KBTS_C3(SOT, HY, ALea): KBTS_C3(SOT, HY, DOTTED_CIRCLE): KBTS_C3(SOT, HYPHEN, ALnea): KBTS_C3(SOT, HYPHEN, ALea): KBTS_C3(SOT, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(BK, HY, ALnea): KBTS_C3(BK, HY, ALea): KBTS_C3(BK, HY, DOTTED_CIRCLE): KBTS_C3(BK, HYPHEN, ALnea): KBTS_C3(BK, HYPHEN, ALea): KBTS_C3(BK, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(LF, HY, ALnea): KBTS_C3(LF, HY, ALea): KBTS_C3(LF, HY, DOTTED_CIRCLE): KBTS_C3(LF, HYPHEN, ALnea): KBTS_C3(LF, HYPHEN, ALea): KBTS_C3(LF, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(NL, HY, ALnea): KBTS_C3(NL, HY, ALea): KBTS_C3(NL, HY, DOTTED_CIRCLE): KBTS_C3(NL, HYPHEN, ALnea): KBTS_C3(NL, HYPHEN, ALea): KBTS_C3(NL, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(CR, HY, ALnea): KBTS_C3(CR, HY, ALea): KBTS_C3(CR, HY, DOTTED_CIRCLE): KBTS_C3(CR, HYPHEN, ALnea): KBTS_C3(CR, HYPHEN, ALea): KBTS_C3(CR, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(SP, HY, ALnea): KBTS_C3(SP, HY, ALea): KBTS_C3(SP, HY, DOTTED_CIRCLE): KBTS_C3(SP, HYPHEN, ALnea): KBTS_C3(SP, HYPHEN, ALea): KBTS_C3(SP, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(ZW, HY, ALnea): KBTS_C3(ZW, HY, ALea): KBTS_C3(ZW, HY, DOTTED_CIRCLE): KBTS_C3(ZW, HYPHEN, ALnea): KBTS_C3(ZW, HYPHEN, ALea): KBTS_C3(ZW, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(CB, HY, ALnea): KBTS_C3(CB, HY, ALea): KBTS_C3(CB, HY, DOTTED_CIRCLE): KBTS_C3(CB, HYPHEN, ALnea): KBTS_C3(CB, HYPHEN, ALea): KBTS_C3(CB, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(GLnea, HY, ALnea): KBTS_C3(GLnea, HY, ALea): KBTS_C3(GLnea, HY, DOTTED_CIRCLE): KBTS_C3(GLnea, HYPHEN, ALnea): KBTS_C3(GLnea, HYPHEN, ALea): KBTS_C3(GLnea, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(GLea, HY, ALnea): KBTS_C3(GLea, HY, ALea): KBTS_C3(GLea, HY, DOTTED_CIRCLE): KBTS_C3(GLea, HYPHEN, ALnea): KBTS_C3(GLea, HYPHEN, ALea): KBTS_C3(GLea, HYPHEN, DOTTED_CIRCLE): + KBTS_C3(NU, SY, POea): KBTS_C3(NU, SY, POnea): KBTS_C3(NU, SY, PRea): KBTS_C3(NU, SY, PRnea): KBTS_C3(NU, SY, NU): + KBTS_C3(NU, IS, POea): KBTS_C3(NU, IS, POnea): KBTS_C3(NU, IS, PRea): KBTS_C3(NU, IS, PRnea): KBTS_C3(NU, IS, NU): + KBTS_C3(NU, CLea, POea): KBTS_C3(NU, CLea, POnea): KBTS_C3(NU, CLea, PRea): KBTS_C3(NU, CLea, PRnea): + KBTS_C3(NU, CLnea, POea): KBTS_C3(NU, CLnea, POnea): KBTS_C3(NU, CLnea, PRea): KBTS_C3(NU, CLnea, PRnea): + KBTS_C3(NU, CPea, POea): KBTS_C3(NU, CPea, POnea): KBTS_C3(NU, CPea, PRea): KBTS_C3(NU, CPea, PRnea): + KBTS_C3(NU, CPnea, POea): KBTS_C3(NU, CPnea, POnea): KBTS_C3(NU, CPnea, PRea): KBTS_C3(NU, CPnea, PRnea): + KBTS_C3(AK, VI, AK): KBTS_C3(AK, VI, DOTTED_CIRCLE): KBTS_C3(DOTTED_CIRCLE, VI, AK): KBTS_C3(DOTTED_CIRCLE, VI, DOTTED_CIRCLE): KBTS_C3(AS, VI, AK): KBTS_C3(AS, VI, DOTTED_CIRCLE): + KBTS_LINE_UNBREAK(0, 1); break; + + KBTS_C3(POea, OPea, NU): KBTS_C3(POea, OPnea, NU): KBTS_C3(POnea, OPea, NU): KBTS_C3(POnea, OPnea, NU): + KBTS_C3(PRea, OPea, NU): KBTS_C3(PRea, OPnea, NU): KBTS_C3(PRnea, OPea, NU): KBTS_C3(PRnea, OPnea, NU): + KBTS_LINE_UNBREAK(0, 2); break; + + KBTS_C3(AK, AK, VF): KBTS_C3(AK, DOTTED_CIRCLE, VF): KBTS_C3(AK, AS, VF): + KBTS_C3(DOTTED_CIRCLE, AK, VF): KBTS_C3(DOTTED_CIRCLE, DOTTED_CIRCLE, VF): KBTS_C3(DOTTED_CIRCLE, AS, VF): + KBTS_C3(AS, AK, VF): KBTS_C3(AS, DOTTED_CIRCLE, VF): KBTS_C3(AS, AS, VF): + KBTS_LINE_UNBREAK(0, 2); break; + + KBTS_C3(HL, BAnea, Oea): KBTS_C3(HL, BAnea, Onea): KBTS_C3(HL, BAnea, Ope): KBTS_C3(HL, BAnea, BK): KBTS_C3(HL, BAnea, CR): KBTS_C3(HL, BAnea, LF): + KBTS_C3(HL, BAnea, NL): KBTS_C3(HL, BAnea, SP): KBTS_C3(HL, BAnea, ZW): KBTS_C3(HL, BAnea, WJ): KBTS_C3(HL, BAnea, GLea): KBTS_C3(HL, BAnea, GLnea): + KBTS_C3(HL, BAnea, CLea): KBTS_C3(HL, BAnea, CLnea): KBTS_C3(HL, BAnea, CPea): KBTS_C3(HL, BAnea, CPnea): KBTS_C3(HL, BAnea, EXea): KBTS_C3(HL, BAnea, EXnea): + KBTS_C3(HL, BAnea, SY): KBTS_C3(HL, BAnea, BAea): KBTS_C3(HL, BAnea, BAnea): KBTS_C3(HL, BAnea, OPea): KBTS_C3(HL, BAnea, OPnea): KBTS_C3(HL, BAnea, QU): + KBTS_C3(HL, BAnea, QUPi): KBTS_C3(HL, BAnea, QUPf): KBTS_C3(HL, BAnea, IS): KBTS_C3(HL, BAnea, NSea): KBTS_C3(HL, BAnea, NSnea): KBTS_C3(HL, BAnea, B2): + KBTS_C3(HL, BAnea, CB): KBTS_C3(HL, BAnea, HY): KBTS_C3(HL, BAnea, HYPHEN): KBTS_C3(HL, BAnea, INea): KBTS_C3(HL, BAnea, INnea): KBTS_C3(HL, BAnea, BB): + KBTS_C3(HL, BAnea, ALea): KBTS_C3(HL, BAnea, ALnea): KBTS_C3(HL, BAnea, NU): KBTS_C3(HL, BAnea, PRea): KBTS_C3(HL, BAnea, PRnea): KBTS_C3(HL, BAnea, IDea): + KBTS_C3(HL, BAnea, IDnea): KBTS_C3(HL, BAnea, IDpe): KBTS_C3(HL, BAnea, EBea): KBTS_C3(HL, BAnea, EBnea): KBTS_C3(HL, BAnea, EM): KBTS_C3(HL, BAnea, POea): + KBTS_C3(HL, BAnea, POnea): KBTS_C3(HL, BAnea, JL): KBTS_C3(HL, BAnea, JV): KBTS_C3(HL, BAnea, JT): KBTS_C3(HL, BAnea, H2): KBTS_C3(HL, BAnea, H3): + KBTS_C3(HL, BAnea, AP): KBTS_C3(HL, BAnea, AK): KBTS_C3(HL, BAnea, DOTTED_CIRCLE): KBTS_C3(HL, BAnea, AS): KBTS_C3(HL, BAnea, VF): KBTS_C3(HL, BAnea, VI): KBTS_C3(HL, BAnea, RI): + KBTS_C3(HL, HYPHEN, Oea): KBTS_C3(HL, HYPHEN, Onea): KBTS_C3(HL, HYPHEN, Ope): KBTS_C3(HL, HYPHEN, BK): KBTS_C3(HL, HYPHEN, CR): KBTS_C3(HL, HYPHEN, LF): + KBTS_C3(HL, HYPHEN, NL): KBTS_C3(HL, HYPHEN, SP): KBTS_C3(HL, HYPHEN, ZW): KBTS_C3(HL, HYPHEN, WJ): KBTS_C3(HL, HYPHEN, GLea): KBTS_C3(HL, HYPHEN, GLnea): + KBTS_C3(HL, HYPHEN, CLea): KBTS_C3(HL, HYPHEN, CLnea): KBTS_C3(HL, HYPHEN, CPea): KBTS_C3(HL, HYPHEN, CPnea): KBTS_C3(HL, HYPHEN, EXea): KBTS_C3(HL, HYPHEN, EXnea): + KBTS_C3(HL, HYPHEN, SY): KBTS_C3(HL, HYPHEN, BAea): KBTS_C3(HL, HYPHEN, BAnea): KBTS_C3(HL, HYPHEN, OPea): KBTS_C3(HL, HYPHEN, OPnea): KBTS_C3(HL, HYPHEN, QU): + KBTS_C3(HL, HYPHEN, QUPi): KBTS_C3(HL, HYPHEN, QUPf): KBTS_C3(HL, HYPHEN, IS): KBTS_C3(HL, HYPHEN, NSea): KBTS_C3(HL, HYPHEN, NSnea): KBTS_C3(HL, HYPHEN, B2): + KBTS_C3(HL, HYPHEN, CB): KBTS_C3(HL, HYPHEN, HY): KBTS_C3(HL, HYPHEN, HYPHEN): KBTS_C3(HL, HYPHEN, INea): KBTS_C3(HL, HYPHEN, INnea): KBTS_C3(HL, HYPHEN, BB): + KBTS_C3(HL, HYPHEN, ALea): KBTS_C3(HL, HYPHEN, ALnea): KBTS_C3(HL, HYPHEN, NU): KBTS_C3(HL, HYPHEN, PRea): KBTS_C3(HL, HYPHEN, PRnea): KBTS_C3(HL, HYPHEN, IDea): + KBTS_C3(HL, HYPHEN, IDnea): KBTS_C3(HL, HYPHEN, IDpe): KBTS_C3(HL, HYPHEN, EBea): KBTS_C3(HL, HYPHEN, EBnea): KBTS_C3(HL, HYPHEN, EM): KBTS_C3(HL, HYPHEN, POea): + KBTS_C3(HL, HYPHEN, POnea): KBTS_C3(HL, HYPHEN, JL): KBTS_C3(HL, HYPHEN, JV): KBTS_C3(HL, HYPHEN, JT): KBTS_C3(HL, HYPHEN, H2): KBTS_C3(HL, HYPHEN, H3): + KBTS_C3(HL, HYPHEN, AP): KBTS_C3(HL, HYPHEN, AK): KBTS_C3(HL, HYPHEN, DOTTED_CIRCLE): KBTS_C3(HL, HYPHEN, AS): KBTS_C3(HL, HYPHEN, VF): KBTS_C3(HL, HYPHEN, VI): KBTS_C3(HL, HYPHEN, RI): + KBTS_C3(HL, HY, Oea): KBTS_C3(HL, HY, Onea): KBTS_C3(HL, HY, Ope): KBTS_C3(HL, HY, BK): KBTS_C3(HL, HY, CR): KBTS_C3(HL, HY, LF): + KBTS_C3(HL, HY, NL): KBTS_C3(HL, HY, SP): KBTS_C3(HL, HY, ZW): KBTS_C3(HL, HY, WJ): KBTS_C3(HL, HY, GLea): KBTS_C3(HL, HY, GLnea): + KBTS_C3(HL, HY, CLea): KBTS_C3(HL, HY, CLnea): KBTS_C3(HL, HY, CPea): KBTS_C3(HL, HY, CPnea): KBTS_C3(HL, HY, EXea): KBTS_C3(HL, HY, EXnea): + KBTS_C3(HL, HY, SY): KBTS_C3(HL, HY, BAea): KBTS_C3(HL, HY, BAnea): KBTS_C3(HL, HY, OPea): KBTS_C3(HL, HY, OPnea): KBTS_C3(HL, HY, QU): + KBTS_C3(HL, HY, QUPi): KBTS_C3(HL, HY, QUPf): KBTS_C3(HL, HY, IS): KBTS_C3(HL, HY, NSea): KBTS_C3(HL, HY, NSnea): KBTS_C3(HL, HY, B2): + KBTS_C3(HL, HY, CB): KBTS_C3(HL, HY, HY): KBTS_C3(HL, HY, HYPHEN): KBTS_C3(HL, HY, INea): KBTS_C3(HL, HY, INnea): KBTS_C3(HL, HY, BB): + KBTS_C3(HL, HY, ALea): KBTS_C3(HL, HY, ALnea): KBTS_C3(HL, HY, NU): KBTS_C3(HL, HY, PRea): KBTS_C3(HL, HY, PRnea): KBTS_C3(HL, HY, IDea): + KBTS_C3(HL, HY, IDnea): KBTS_C3(HL, HY, IDpe): KBTS_C3(HL, HY, EBea): KBTS_C3(HL, HY, EBnea): KBTS_C3(HL, HY, EM): KBTS_C3(HL, HY, POea): + KBTS_C3(HL, HY, POnea): KBTS_C3(HL, HY, JL): KBTS_C3(HL, HY, JV): KBTS_C3(HL, HY, JT): KBTS_C3(HL, HY, H2): KBTS_C3(HL, HY, H3): + KBTS_C3(HL, HY, AP): KBTS_C3(HL, HY, AK): KBTS_C3(HL, HY, DOTTED_CIRCLE): KBTS_C3(HL, HY, AS): KBTS_C3(HL, HY, VF): KBTS_C3(HL, HY, VI): KBTS_C3(HL, HY, RI): + KBTS_LINE_UNBREAK(0, 1); break; + } + + switch(LineBreakHistory) + { + KBTS_C4(NU, SY, CLnea, POnea): KBTS_C4(NU, SY, CLnea, POea): KBTS_C4(NU, SY, CLnea, PRnea): KBTS_C4(NU, SY, CLnea, PRea): + KBTS_C4(NU, SY, CLea, POnea): KBTS_C4(NU, SY, CLea, POea): KBTS_C4(NU, SY, CLea, PRnea): KBTS_C4(NU, SY, CLea, PRea): + KBTS_C4(NU, SY, CPnea, POnea): KBTS_C4(NU, SY, CPnea, POea): KBTS_C4(NU, SY, CPnea, PRnea): KBTS_C4(NU, SY, CPnea, PRea): + KBTS_C4(NU, SY, CPea, POnea): KBTS_C4(NU, SY, CPea, POea): KBTS_C4(NU, SY, CPea, PRnea): KBTS_C4(NU, SY, CPea, PRea): + KBTS_C4(NU, IS, CLnea, POnea): KBTS_C4(NU, IS, CLnea, POea): KBTS_C4(NU, IS, CLnea, PRnea): KBTS_C4(NU, IS, CLnea, PRea): + KBTS_C4(NU, IS, CLea, POnea): KBTS_C4(NU, IS, CLea, POea): KBTS_C4(NU, IS, CLea, PRnea): KBTS_C4(NU, IS, CLea, PRea): + KBTS_C4(NU, IS, CPnea, POnea): KBTS_C4(NU, IS, CPnea, POea): KBTS_C4(NU, IS, CPnea, PRnea): KBTS_C4(NU, IS, CPnea, PRea): + KBTS_C4(NU, IS, CPea, POnea): KBTS_C4(NU, IS, CPea, POea): KBTS_C4(NU, IS, CPea, PRnea): KBTS_C4(NU, IS, CPea, PRea): + KBTS_LINE_UNBREAK(0, 1); break; + + KBTS_C4(POea, OPea, IS, NU): KBTS_C4(POea, OPnea, IS, NU): KBTS_C4(POnea, OPea, IS, NU): KBTS_C4(POnea, OPnea, IS, NU): + KBTS_C4(PRea, OPea, IS, NU): KBTS_C4(PRea, OPnea, IS, NU): KBTS_C4(PRnea, OPea, IS, NU): KBTS_C4(PRnea, OPnea, IS, NU): + KBTS_LINE_UNBREAK(0, 3); break; + } + + if(StartOfText) + { + // Never break lines. + KBTS_LINE_UNBREAK(5, 1); + // Always break graphemes. + KBTS_BREAK(KBTS_BREAK_FLAG_GRAPHEME, 1); + } + + #undef KBTS_C1 + #undef KBTS_C2 + #undef KBTS_C3 + #undef KBTS_C4 + #undef KBTS_REQUIRED_LINE_BREAK + #undef KBTS_LINE_BREAK + #undef KBTS_LINE_UNBREAK + + kbts_u64 EffectiveLineBreaks = LineBreaks & ~(LineUnbreaks | LineUnbreaksAsync); + + kbts_DoLineBreak(State, PositionOffset3 + LineBreak3PositionOffset, EffectiveLineBreaks >> 48, 0, 0); + if(EndOfText) + { + kbts_DoLineBreak(State, PositionOffset2 + LineBreak2PositionOffset, EffectiveLineBreaks >> 32, 0, 0); + { // @Cleanup: This is the same flag code as DoLineBreak, but we want to use FlagState buffering for this. + // The only places where we want to manually call DoBreak is for asynchronous/buffered guys. + kbts_u8 FlushFlags = 0; + if((EffectiveLineBreaks >> 16) & KBTS_LINE_BREAK_ALLOWED_MASK) FlushFlags |= KBTS_BREAK_FLAG_LINE_SOFT; + if((EffectiveLineBreaks >> 16) & KBTS_LINE_BREAK_REQUIRED_MASK) FlushFlags |= KBTS_BREAK_FLAG_LINE_HARD; + KBTS_BREAK(FlushFlags, 1); + } + // Lines are never broken after the end of text. + } + + State->LineBreaks = LineBreaks; + State->LineUnbreaks = LineUnbreaks; + State->LineBreak2PositionOffset = 0; + State->LineBreak3PositionOffset = LineBreak2PositionOffset; + State->LastLineBreakClass = LineBreakClass; + State->LineBreakHistory = LineBreakHistory; + State->LastDirection = (kbts_u8)LastDirection; + + if(0) + { + LineBreakAbsorbCharacter:; + State->LineBreak2PositionOffset -= PositionIncrement; + State->LineBreak3PositionOffset -= PositionIncrement; + } + + // This always gets updated. + State->LineUnbreaksAsync = LineUnbreaksAsync; + } + + // This is where we flush the normal breaks that don't need any special position adjustment. + kbts_DoBreak(State, PositionOffset3, (FlagState >> 24) & 0xFF, LastDirection, State->LastScripts[1]); + if(EndOfText) + { + kbts_DoBreak(State, PositionOffset2, (FlagState >> 16) & 0xFF, 0, LastScript); + kbts_DoBreak(State, 0, (FlagState >> 8) & 0xFF, 0, Script); + kbts_DoBreak(State, PositionIncrement, FlagState & 0xFF, 0, Script); + } + + State->FlagState = FlagState; + State->Flags |= KBTS_BREAK_STATE_FLAG_STARTED; + if(EndOfText) State->Flags |= KBTS_BREAK_STATE_FLAG_END; + State->PositionOffset2 = (kbts_s16)-(int)PositionIncrement; + State->PositionOffset3 = (kbts_s16)(PositionOffset2 - (int)PositionIncrement); + State->CurrentPosition += PositionIncrement; + + State->LastScripts[1] = State->LastScripts[0]; + State->LastScripts[0] = Script; +#undef KBTS_BREAK +#undef KBTS_BREAK2 +} + +KBTS_EXPORT void kbts_BreakFlush(kbts_break_state *State) +{ + // We pass 3, aka. ASCII end-of-text, at the end of text. + kbts_BreakAddCodepoint_(State, 3, 0, 1); +} + +KBTS_EXPORT void kbts_BreakAddCodepoint(kbts_break_state *State, kbts_u32 Codepoint, kbts_u32 PositionIncrement, int EndOfText) +{ + kbts_BreakAddCodepoint_(State, Codepoint, PositionIncrement, 0); + if(EndOfText) kbts_BreakFlush(State); +} + +KBTS_EXPORT int kbts_Break(kbts_break_state *State, kbts_break *Break) +{ + int Result = 0; + kbts_un Threshold = State->Flags & KBTS_BREAK_STATE_FLAG_END ? 0 : KBTS_BREAK_REORDER_BUFFER_FLUSH_THRESHOLD; + + if(kbts_BreakStateIsValid(State) && (State->BreakCount > Threshold)) + { + kbts_break *ToFlush = &State->Breaks[State->BreakCount - 1]; + // @Incomplete: Handle wrapping. + if(ToFlush->Position >= State->LastFlushedBreakPosition) + { + *Break = *ToFlush; + State->LastFlushedBreakPosition = ToFlush->Position; + State->BreakCount -= 1; + Result = 1; + } + else + { + State->Flags |= KBTS_BREAK_STATE_FLAG_RAN_OUT_OF_REORDER_BUFFER_SPACE; + } + } + + return Result; +} + +KBTS_EXPORT void kbts_BeginBreak(kbts_break_state *State, kbts_direction MainDirection, kbts_japanese_line_break_style JapaneseLineBreakStyle) +{ + if(State) + { + memset(State, 0, sizeof(*State)); + State->MainDirection = (kbts_u8)MainDirection; + State->JapaneseLineBreakStyle = JapaneseLineBreakStyle; + } +} + +KBTS_EXPORT kbts_decode kbts_DecodeUtf8(const char *Utf8, size_t Length) +{ + kbts_decode Result = KBTS_ZERO; + const char *Utf8Start = Utf8; + + if(Length) + { + kbts_u8 First = (kbts_u8)*Utf8++; + kbts_un FollowupCharacterCount = 0; + + switch((First & 0xF0) >> 4) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + { + Result.Codepoint = First & 0x7F; + Result.Valid = 1; + } + break; + + case 0xC: + case 0xD: + { + FollowupCharacterCount = 1; + Result.Codepoint = First & 0x1F; + Result.Valid = 1; + } + break; + + case 0xE: + { + FollowupCharacterCount = 2; + Result.Codepoint = First & 0xF; + Result.Valid = 1; + } + break; + + case 0xF: + { + FollowupCharacterCount = 3; + Result.Codepoint = First & 7; + Result.Valid = 1; + } + break; + } + + if(Length > FollowupCharacterCount) + { + KBTS_FOR(FollowupCharacterIndex, 0, FollowupCharacterCount) + { + kbts_u8 C = (kbts_u8)*Utf8++; + + if((C & 0xC0) == 0x80) + { + Result.Codepoint = (Result.Codepoint << 6) | (C & 0x3F); + } + else + { + Result.Valid = 0; + + break; + } + } + } + else + { + Result.Valid = 0; + } + } + + Result.SourceCharactersConsumed = (kbts_u32)(Utf8 - Utf8Start); + + return Result; +} + +KBTS_EXPORT kbts_u32 kbts_ShaperIsComplex(kbts_shaper Shaper) +{ + kbts_u32 Result = Shaper != KBTS_SHAPER_DEFAULT; // @Incomplete? + + return Result; +} + +KBTS_EXPORT int kbts_ScriptIsComplex(kbts_script Script) +{ + kbts_script_properties *Properties = &kbts_ScriptProperties[Script]; + int Result = kbts_ShaperIsComplex(Properties->Shaper); + return Result; +} + +#endif +#undef KBTS_X_FEATURES \ No newline at end of file From 63f1c5139a569e340ae121937efb08a503889c2a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 08:32:25 +0100 Subject: [PATCH 09/29] Add types and procs for kb_text_shape --- vendor/kb_text_shape/kb_text_shape_procs.odin | 41 + vendor/kb_text_shape/kb_text_shape_types.odin | 1842 +++++++++++++++++ 2 files changed, 1883 insertions(+) create mode 100644 vendor/kb_text_shape/kb_text_shape_procs.odin create mode 100644 vendor/kb_text_shape/kb_text_shape_types.odin diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin new file mode 100644 index 000000000..c320b2fdf --- /dev/null +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -0,0 +1,41 @@ +package vendor_kb_text_shape + +import "core:c" + +#assert(size_of(c.int) == size_of(b32)) +#assert(size_of(u32) == size_of(b32)) + +TEXT_SHAPE_NO_CRT :: #config(KB_TEXT_SHAPE_NO_CRT, false) + +@(default_calling_convention="c", link_prefix="kbts_") +foreign { + when !TEXT_SHAPE_NO_CRT { + FontFromFile :: proc(FileName: cstring) -> font --- + FreeFont :: proc(Font: ^font) --- + CreateShapeState :: proc(Font: ^font) -> ^shape_state --- + FreeShapeState :: proc(State: ^shape_state) --- + } + + + FontIsValid :: proc(Font: ^font) -> int --- + ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- + ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- + PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> int --- + SizeOfShapeState :: proc(Font: ^font) -> un --- + PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- + ResetShapeState :: proc(State: ^shape_state) --- + ShapeConfig :: proc(Font: ^font, Script: u32, Language: u32) -> shape_config --- + ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- + Shape :: proc(State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + Cursor :: proc(Direction: direction) -> cursor --- + PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- + BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- + BreakStateIsValid :: proc(State: ^break_state) -> c.int --- + BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- + BreakFlush :: proc(State: ^break_state) --- + Break :: proc(State: ^break_state, Break: ^break_type) -> c.int --- + DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- + CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- + InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- + ScriptIsComplex :: proc(Script: script) -> b32 --- +} \ No newline at end of file diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin new file mode 100644 index 000000000..c50d3a26e --- /dev/null +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -0,0 +1,1842 @@ +package vendor_kb_text_shape + +import "core:c" + +un :: distinct uintptr +sn :: distinct (i32 when size_of(uintptr) == 4 else i64) + +joining_feature :: enum u8 { + NONE, + ISOL, + FINA, + FIN2, + FIN3, + MEDI, + MED2, + INIT, +} + +reph_position :: enum u8 { + AFTER_POST, + BEFORE_POST, + BEFORE_SUBJOINED, + AFTER_SUBJOINED, + AFTER_MAIN, +} + +reph_encoding :: enum u8 { + IMPLICIT, + EXPLICIT, + LOGICAL_REPHA, + VISUAL_REPHA, +} + +syllabic_position :: enum u8 { + NONE, + + RA_TO_BECOME_REPH, + + PREBASE_MATRA, + PREBASE_CONSONANT, + + SYLLABLE_BASE, + AFTER_MAIN, + + ABOVEBASE_CONSONANT, + + BEFORE_SUBJOINED, + BELOWBASE_CONSONANT, + AFTER_SUBJOINED, + + BEFORE_POST, + POSTBASE_CONSONANT, + AFTER_POST, + + FINAL_CONSONANT, + SMVD, +} + +language :: enum u32 { + DONT_KNOW = 0, + + A_HMAO = ('H' | 'M'<<8 | 'D'<<16 | ' '<<24), + AARI = ('A' | 'R'<<8 | 'I'<<16 | ' '<<24), + ABAZA = ('A' | 'B'<<8 | 'A'<<16 | ' '<<24), + ABKHAZIAN = ('A' | 'B'<<8 | 'K'<<16 | ' '<<24), + ACHI = ('A' | 'C'<<8 | 'R'<<16 | ' '<<24), + ACHOLI = ('A' | 'C'<<8 | 'H'<<16 | ' '<<24), + ADYGHE = ('A' | 'D'<<8 | 'Y'<<16 | ' '<<24), + AFAR = ('A' | 'F'<<8 | 'R'<<16 | ' '<<24), + AFRIKAANS = ('A' | 'F'<<8 | 'K'<<16 | ' '<<24), + AGAW = ('A' | 'G'<<8 | 'W'<<16 | ' '<<24), + AITON = ('A' | 'I'<<8 | 'O'<<16 | ' '<<24), + AKAN = ('A' | 'K'<<8 | 'A'<<16 | ' '<<24), + ALBANIAN = ('S' | 'Q'<<8 | 'I'<<16 | ' '<<24), + ALSATIAN = ('A' | 'L'<<8 | 'S'<<16 | ' '<<24), + ALTAI = ('A' | 'L'<<8 | 'T'<<16 | ' '<<24), + ALUO = ('Y' | 'N'<<8 | 'A'<<16 | ' '<<24), + AMERICAN_PHONETIC = ('A' | 'P'<<8 | 'P'<<16 | 'H'<<24), + AMHARIC = ('A' | 'M'<<8 | 'H'<<16 | ' '<<24), + ANGLO_SAXON = ('A' | 'N'<<8 | 'G'<<16 | ' '<<24), + ARABIC = ('A' | 'R'<<8 | 'A'<<16 | ' '<<24), + ARAGONESE = ('A' | 'R'<<8 | 'G'<<16 | ' '<<24), + ARAKANESE = ('A' | 'R'<<8 | 'K'<<16 | ' '<<24), + ARAKWAL = ('R' | 'K'<<8 | 'W'<<16 | ' '<<24), + ARMENIAN = ('H' | 'Y'<<8 | 'E'<<16 | ' '<<24), + ARMENIAN_EAST = ('H' | 'Y'<<8 | 'E'<<16 | '0'<<24), + AROMANIAN = ('R' | 'U'<<8 | 'P'<<16 | ' '<<24), + ARPITAN = ('F' | 'R'<<8 | 'P'<<16 | ' '<<24), + ASSAMESE = ('A' | 'S'<<8 | 'M'<<16 | ' '<<24), + ASTURIAN = ('A' | 'S'<<8 | 'T'<<16 | ' '<<24), + ATHAPASKAN = ('A' | 'T'<<8 | 'H'<<16 | ' '<<24), + ATSINA = ('A' | 'T'<<8 | 'S'<<16 | ' '<<24), + AVAR = ('A' | 'V'<<8 | 'R'<<16 | ' '<<24), + AVATIME = ('A' | 'V'<<8 | 'N'<<16 | ' '<<24), + AWADHI = ('A' | 'W'<<8 | 'A'<<16 | ' '<<24), + AYMARA = ('A' | 'Y'<<8 | 'M'<<16 | ' '<<24), + AZERBAIDJANI = ('A' | 'Z'<<8 | 'E'<<16 | ' '<<24), + BADAGA = ('B' | 'A'<<8 | 'D'<<16 | ' '<<24), + BAGHELKHANDI = ('B' | 'A'<<8 | 'G'<<16 | ' '<<24), + BAGRI = ('B' | 'G'<<8 | 'Q'<<16 | ' '<<24), + BALANTE = ('B' | 'L'<<8 | 'N'<<16 | ' '<<24), + BALINESE = ('B' | 'A'<<8 | 'N'<<16 | ' '<<24), + BALKAR = ('B' | 'A'<<8 | 'L'<<16 | ' '<<24), + BALTI = ('B' | 'L'<<8 | 'T'<<16 | ' '<<24), + BALUCHI = ('B' | 'L'<<8 | 'I'<<16 | ' '<<24), + BAMBARA = ('B' | 'M'<<8 | 'B'<<16 | ' '<<24), + BAMILEKE = ('B' | 'M'<<8 | 'L'<<16 | ' '<<24), + BANDA = ('B' | 'A'<<8 | 'D'<<16 | '0'<<24), + BANDJALANG = ('B' | 'D'<<8 | 'Y'<<16 | ' '<<24), + BANGLA = ('B' | 'E'<<8 | 'N'<<16 | ' '<<24), + BASHKIR = ('B' | 'S'<<8 | 'H'<<16 | ' '<<24), + BASQUE = ('E' | 'U'<<8 | 'Q'<<16 | ' '<<24), + BATAK = ('B' | 'T'<<8 | 'K'<<16 | ' '<<24), + BATAK_ALAS_KLUET = ('B' | 'T'<<8 | 'Z'<<16 | ' '<<24), + BATAK_ANGKOLA = ('A' | 'K'<<8 | 'B'<<16 | ' '<<24), + BATAK_DAIRI = ('B' | 'T'<<8 | 'D'<<16 | ' '<<24), + BATAK_KARO = ('B' | 'T'<<8 | 'X'<<16 | ' '<<24), + BATAK_MANDAILING = ('B' | 'T'<<8 | 'M'<<16 | ' '<<24), + BATAK_SIMALUNGUN = ('B' | 'T'<<8 | 'S'<<16 | ' '<<24), + BATAK_TOBA = ('B' | 'B'<<8 | 'C'<<16 | ' '<<24), + BAULE = ('B' | 'A'<<8 | 'U'<<16 | ' '<<24), + BAVARIAN = ('B' | 'A'<<8 | 'R'<<16 | ' '<<24), + BELARUSIAN = ('B' | 'E'<<8 | 'L'<<16 | ' '<<24), + BEMBA = ('B' | 'E'<<8 | 'M'<<16 | ' '<<24), + BENCH = ('B' | 'C'<<8 | 'H'<<16 | ' '<<24), + BERBER = ('B' | 'B'<<8 | 'R'<<16 | ' '<<24), + BETI = ('B' | 'T'<<8 | 'I'<<16 | ' '<<24), + BETTE_KURUMA = ('X' | 'U'<<8 | 'B'<<16 | ' '<<24), + BHILI = ('B' | 'H'<<8 | 'I'<<16 | ' '<<24), + BHOJPURI = ('B' | 'H'<<8 | 'O'<<16 | ' '<<24), + BHUTANESE = ('D' | 'Z'<<8 | 'N'<<16 | ' '<<24), + BIBLE_CREE = ('B' | 'C'<<8 | 'R'<<16 | ' '<<24), + BIKOL = ('B' | 'I'<<8 | 'K'<<16 | ' '<<24), + BILEN = ('B' | 'I'<<8 | 'L'<<16 | ' '<<24), + BISHNUPRIYA_MANIPURI = ('B' | 'P'<<8 | 'Y'<<16 | ' '<<24), + BISLAMA = ('B' | 'I'<<8 | 'S'<<16 | ' '<<24), + BLACKFOOT = ('B' | 'K'<<8 | 'F'<<16 | ' '<<24), + BODO = ('B' | 'R'<<8 | 'X'<<16 | ' '<<24), + BOSNIAN = ('B' | 'O'<<8 | 'S'<<16 | ' '<<24), + BOUYEI = ('P' | 'C'<<8 | 'C'<<16 | ' '<<24), + BRAHUI = ('B' | 'R'<<8 | 'H'<<16 | ' '<<24), + BRAJ_BHASHA = ('B' | 'R'<<8 | 'I'<<16 | ' '<<24), + BRETON = ('B' | 'R'<<8 | 'E'<<16 | ' '<<24), + BUGIS = ('B' | 'U'<<8 | 'G'<<16 | ' '<<24), + BULGARIAN = ('B' | 'G'<<8 | 'R'<<16 | ' '<<24), + BUMTHANGKHA = ('K' | 'J'<<8 | 'Z'<<16 | ' '<<24), + BURMESE = ('B' | 'R'<<8 | 'M'<<16 | ' '<<24), + BURUSHASKI = ('B' | 'S'<<8 | 'K'<<16 | ' '<<24), + CAJUN_FRENCH = ('F' | 'R'<<8 | 'C'<<16 | ' '<<24), + CARRIER = ('C' | 'R'<<8 | 'R'<<16 | ' '<<24), + CATALAN = ('C' | 'A'<<8 | 'T'<<16 | ' '<<24), + CAYUGA = ('C' | 'A'<<8 | 'Y'<<16 | ' '<<24), + CEBUANO = ('C' | 'E'<<8 | 'B'<<16 | ' '<<24), + CENTRAL_YUPIK = ('E' | 'S'<<8 | 'U'<<16 | ' '<<24), + CHAHA_GURAGE = ('C' | 'H'<<8 | 'G'<<16 | ' '<<24), + CHAMORRO = ('C' | 'H'<<8 | 'A'<<16 | ' '<<24), + CHATTISGARHI = ('C' | 'H'<<8 | 'H'<<16 | ' '<<24), + CHECHEN = ('C' | 'H'<<8 | 'E'<<16 | ' '<<24), + CHEROKEE = ('C' | 'H'<<8 | 'R'<<16 | ' '<<24), + CHEYENNE = ('C' | 'H'<<8 | 'Y'<<16 | ' '<<24), + CHICHEWA = ('C' | 'H'<<8 | 'I'<<16 | ' '<<24), + CHIGA = ('C' | 'G'<<8 | 'G'<<16 | ' '<<24), + CHIMILA = ('C' | 'B'<<8 | 'G'<<16 | ' '<<24), + CHIN = ('Q' | 'I'<<8 | 'N'<<16 | ' '<<24), + CHINANTEC = ('C' | 'C'<<8 | 'H'<<16 | 'N'<<24), + CHINESE_PHONETIC = ('Z' | 'H'<<8 | 'P'<<16 | ' '<<24), + CHINESE_SIMPLIFIED = ('Z' | 'H'<<8 | 'S'<<16 | ' '<<24), + CHINESE_TRADITIONAL = ('Z' | 'H'<<8 | 'T'<<16 | ' '<<24), + CHINESE_TRADITIONAL_HONG_KONG = ('Z' | 'H'<<8 | 'H'<<16 | ' '<<24), + CHINESE_TRADITIONAL_MACAO = ('Z' | 'H'<<8 | 'T'<<16 | 'M'<<24), + CHIPEWYAN = ('C' | 'H'<<8 | 'P'<<16 | ' '<<24), + CHITTAGONIAN = ('C' | 'T'<<8 | 'G'<<16 | ' '<<24), + CHOCTAW = ('C' | 'H'<<8 | 'O'<<16 | ' '<<24), + CHUKCHI = ('C' | 'H'<<8 | 'K'<<16 | ' '<<24), + CHURCH_SLAVONIC = ('C' | 'S'<<8 | 'L'<<16 | ' '<<24), + CHUUKESE = ('C' | 'H'<<8 | 'K'<<16 | '0'<<24), + CHUVASH = ('C' | 'H'<<8 | 'U'<<16 | ' '<<24), + COMORIAN = ('C' | 'M'<<8 | 'R'<<16 | ' '<<24), + COMOX = ('C' | 'O'<<8 | 'O'<<16 | ' '<<24), + COPTIC = ('C' | 'O'<<8 | 'P'<<16 | ' '<<24), + CORNISH = ('C' | 'O'<<8 | 'R'<<16 | ' '<<24), + CORSICAN = ('C' | 'O'<<8 | 'S'<<16 | ' '<<24), + CREE = ('C' | 'R'<<8 | 'E'<<16 | ' '<<24), + CREOLES = ('C' | 'P'<<8 | 'P'<<16 | ' '<<24), + CRIMEAN_TATAR = ('C' | 'R'<<8 | 'T'<<16 | ' '<<24), + CRIOULO = ('K' | 'E'<<8 | 'A'<<16 | ' '<<24), + CROATIAN = ('H' | 'R'<<8 | 'V'<<16 | ' '<<24), + CYPRIOT_ARABIC = ('A' | 'C'<<8 | 'Y'<<16 | ' '<<24), + CZECH = ('C' | 'S'<<8 | 'Y'<<16 | ' '<<24), + DAGBANI = ('D' | 'A'<<8 | 'G'<<16 | ' '<<24), + DAN = ('D' | 'N'<<8 | 'J'<<16 | ' '<<24), + DANGME = ('D' | 'N'<<8 | 'G'<<16 | ' '<<24), + DANISH = ('D' | 'A'<<8 | 'N'<<16 | ' '<<24), + DARGWA = ('D' | 'A'<<8 | 'R'<<16 | ' '<<24), + DARI = ('D' | 'R'<<8 | 'I'<<16 | ' '<<24), + DAYI = ('D' | 'A'<<8 | 'X'<<16 | ' '<<24), + DEFAULT = ('d' | 'f'<<8 | 'l'<<16 | 't'), // Can be DFLT too.<<24.. + DEHONG_DAI = ('T' | 'D'<<8 | 'D'<<16 | ' '<<24), + DHANGU = ('D' | 'H'<<8 | 'G'<<16 | ' '<<24), + DHIVEHI = ('D' | 'I'<<8 | 'V'<<16 | ' '<<24), + DHUWAL = ('D' | 'U'<<8 | 'J'<<16 | ' '<<24), + DIMLI = ('D' | 'I'<<8 | 'Q'<<16 | ' '<<24), + DINKA = ('D' | 'N'<<8 | 'K'<<16 | ' '<<24), + DIVEHI = ('D' | 'I'<<8 | 'V'<<16 | ' '<<24), + DJAMBARRPUYNGU = ('D' | 'J'<<8 | 'R'<<16 | '0'<<24), + DOGRI = ('D' | 'G'<<8 | 'O'<<16 | ' '<<24), + DOGRI_MACROLANGUAGE = ('D' | 'G'<<8 | 'R'<<16 | ' '<<24), + DUNGAN = ('D' | 'U'<<8 | 'N'<<16 | ' '<<24), + DUTCH = ('N' | 'L'<<8 | 'D'<<16 | ' '<<24), + DZONGKHA = ('D' | 'Z'<<8 | 'N'<<16 | ' '<<24), + EASTERN_ABENAKI = ('A' | 'A'<<8 | 'Q'<<16 | ' '<<24), + EASTERN_CHAM = ('C' | 'J'<<8 | 'M'<<16 | ' '<<24), + EASTERN_CREE = ('E' | 'C'<<8 | 'R'<<16 | ' '<<24), + EASTERN_MANINKAKAN = ('E' | 'M'<<8 | 'K'<<16 | ' '<<24), + EASTERN_PWO_KAREN = ('K' | 'J'<<8 | 'P'<<16 | ' '<<24), + EBIRA = ('E' | 'B'<<8 | 'I'<<16 | ' '<<24), + EDO = ('E' | 'D'<<8 | 'O'<<16 | ' '<<24), + EFIK = ('E' | 'F'<<8 | 'I'<<16 | ' '<<24), + EMBERA_BAUDO = ('B' | 'D'<<8 | 'C'<<16 | ' '<<24), + EMBERA_CATIO = ('C' | 'T'<<8 | 'O'<<16 | ' '<<24), + EMBERA_CHAMI = ('C' | 'M'<<8 | 'I'<<16 | ' '<<24), + EMBERA_TADO = ('T' | 'D'<<8 | 'C'<<16 | ' '<<24), + ENGLISH = ('E' | 'N'<<8 | 'G'<<16 | ' '<<24), + EPENA = ('S' | 'J'<<8 | 'A'<<16 | ' '<<24), + ERZYA = ('E' | 'R'<<8 | 'Z'<<16 | ' '<<24), + KB_TEXT_SHAPEANTO = ('N' | 'T'<<8 | 'O'<<16 | ' '<<24), + ESTONIAN = ('E' | 'T'<<8 | 'I'<<16 | ' '<<24), + EVEN = ('E' | 'V'<<8 | 'N'<<16 | ' '<<24), + EVENKI = ('E' | 'V'<<8 | 'K'<<16 | ' '<<24), + EWE = ('E' | 'W'<<8 | 'E'<<16 | ' '<<24), + FALAM_CHIN = ('H' | 'A'<<8 | 'L'<<16 | ' '<<24), + FANG = ('F' | 'A'<<8 | 'N'<<16 | '0'<<24), + FANTI = ('F' | 'A'<<8 | 'T'<<16 | ' '<<24), + FAROESE = ('F' | 'O'<<8 | 'S'<<16 | ' '<<24), + FEFE = ('F' | 'M'<<8 | 'P'<<16 | ' '<<24), + FIJIAN = ('F' | 'J'<<8 | 'I'<<16 | ' '<<24), + FILIPINO = ('P' | 'I'<<8 | 'L'<<16 | ' '<<24), + FINNISH = ('F' | 'I'<<8 | 'N'<<16 | ' '<<24), + FLEMISH = ('F' | 'L'<<8 | 'E'<<16 | ' '<<24), + FON = ('F' | 'O'<<8 | 'N'<<16 | ' '<<24), + FOREST_ENETS = ('F' | 'N'<<8 | 'E'<<16 | ' '<<24), + FRENCH = ('F' | 'R'<<8 | 'A'<<16 | ' '<<24), + FRENCH_ANTILLEAN = ('F' | 'A'<<8 | 'N'<<16 | ' '<<24), + FRISIAN = ('F' | 'R'<<8 | 'I'<<16 | ' '<<24), + FRIULIAN = ('F' | 'R'<<8 | 'L'<<16 | ' '<<24), + FULAH = ('F' | 'U'<<8 | 'L'<<16 | ' '<<24), + FUTA = ('F' | 'T'<<8 | 'A'<<16 | ' '<<24), + GA = ('G' | 'A'<<8 | 'D'<<16 | ' '<<24), + GAGAUZ = ('G' | 'A'<<8 | 'G'<<16 | ' '<<24), + GALICIAN = ('G' | 'A'<<8 | 'L'<<16 | ' '<<24), + GANDA = ('L' | 'U'<<8 | 'G'<<16 | ' '<<24), + GARHWALI = ('G' | 'A'<<8 | 'W'<<16 | ' '<<24), + GARO = ('G' | 'R'<<8 | 'O'<<16 | ' '<<24), + GARSHUNI = ('G' | 'A'<<8 | 'R'<<16 | ' '<<24), + GEBA_KAREN = ('K' | 'V'<<8 | 'Q'<<16 | ' '<<24), + GEEZ = ('G' | 'E'<<8 | 'Z'<<16 | ' '<<24), + GEORGIAN = ('K' | 'A'<<8 | 'T'<<16 | ' '<<24), + GEPO = ('Y' | 'G'<<8 | 'P'<<16 | ' '<<24), + GERMAN = ('D' | 'E'<<8 | 'U'<<16 | ' '<<24), + GIKUYU = ('K' | 'I'<<8 | 'K'<<16 | ' '<<24), + GILAKI = ('G' | 'L'<<8 | 'K'<<16 | ' '<<24), + GILBERTESE = ('G' | 'I'<<8 | 'L'<<16 | '0'<<24), + GILYAK = ('G' | 'I'<<8 | 'L'<<16 | ' '<<24), + GITHABUL = ('G' | 'I'<<8 | 'H'<<16 | ' '<<24), + GOGO = ('G' | 'O'<<8 | 'G'<<16 | ' '<<24), + GONDI = ('G' | 'O'<<8 | 'N'<<16 | ' '<<24), + GREEK = ('E' | 'L'<<8 | 'L'<<16 | ' '<<24), + GREENLANDIC = ('G' | 'R'<<8 | 'N'<<16 | ' '<<24), + GUARANI = ('G' | 'U'<<8 | 'A'<<16 | ' '<<24), + GUINEA = ('G' | 'K'<<8 | 'P'<<16 | ' '<<24), + GUJARATI = ('G' | 'U'<<8 | 'J'<<16 | ' '<<24), + GUMATJ = ('G' | 'N'<<8 | 'N'<<16 | ' '<<24), + GUMUZ = ('G' | 'M'<<8 | 'Z'<<16 | ' '<<24), + GUPAPUYNGU = ('G' | 'U'<<8 | 'F'<<16 | ' '<<24), + GUSII = ('G' | 'U'<<8 | 'Z'<<16 | ' '<<24), + HAIDA = ('H' | 'A'<<8 | 'I'<<16 | '0'<<24), + HAITIAN_CREOLE = ('H' | 'A'<<8 | 'I'<<16 | ' '<<24), + HALKOMELEM = ('H' | 'U'<<8 | 'R'<<16 | ' '<<24), + HAMMER_BANNA = ('H' | 'B'<<8 | 'N'<<16 | ' '<<24), + HARARI = ('H' | 'R'<<8 | 'I'<<16 | ' '<<24), + HARAUTI = ('H' | 'A'<<8 | 'R'<<16 | ' '<<24), + HARYANVI = ('B' | 'G'<<8 | 'C'<<16 | ' '<<24), + HAUSA = ('H' | 'A'<<8 | 'U'<<16 | ' '<<24), + HAVASUPAI_WALAPAI_YAVAPAI = ('Y' | 'U'<<8 | 'F'<<16 | ' '<<24), + HAWAIIAN = ('H' | 'A'<<8 | 'W'<<16 | ' '<<24), + HAYA = ('H' | 'A'<<8 | 'Y'<<16 | ' '<<24), + HAZARAGI = ('H' | 'A'<<8 | 'Z'<<16 | ' '<<24), + HEBREW = ('I' | 'W'<<8 | 'R'<<16 | ' '<<24), + HEILTSUK = ('H' | 'E'<<8 | 'I'<<16 | ' '<<24), + HERERO = ('H' | 'E'<<8 | 'R'<<16 | ' '<<24), + HIGH_MARI = ('H' | 'M'<<8 | 'A'<<16 | ' '<<24), + HILIGAYNON = ('H' | 'I'<<8 | 'L'<<16 | ' '<<24), + HINDI = ('H' | 'I'<<8 | 'N'<<16 | ' '<<24), + HINDKO = ('H' | 'N'<<8 | 'D'<<16 | ' '<<24), + HIRI_MOTU = ('H' | 'M'<<8 | 'O'<<16 | ' '<<24), + HMONG = ('H' | 'M'<<8 | 'N'<<16 | ' '<<24), + HMONG_DAW = ('M' | 'W'<<8 | 'W'<<16 | ' '<<24), + HMONG_SHUAT = ('H' | 'M'<<8 | 'Z'<<16 | ' '<<24), + HO = ('H' | 'O'<<8 | ' '<<16 | ' '<<24), + HUNGARIAN = ('H' | 'U'<<8 | 'N'<<16 | ' '<<24), + IBAN = ('I' | 'B'<<8 | 'A'<<16 | ' '<<24), + IBIBIO = ('I' | 'B'<<8 | 'B'<<16 | ' '<<24), + ICELANDIC = ('I' | 'S'<<8 | 'L'<<16 | ' '<<24), + IDO = ('I' | 'D'<<8 | 'O'<<16 | ' '<<24), + IGBO = ('I' | 'B'<<8 | 'O'<<16 | ' '<<24), + IJO = ('I' | 'J'<<8 | 'O'<<16 | ' '<<24), + ILOKANO = ('I' | 'L'<<8 | 'O'<<16 | ' '<<24), + INARI_SAMI = ('I' | 'S'<<8 | 'M'<<16 | ' '<<24), + INDONESIAN = ('I' | 'N'<<8 | 'D'<<16 | ' '<<24), + INGUSH = ('I' | 'N'<<8 | 'G'<<16 | ' '<<24), + INTERLINGUA = ('I' | 'N'<<8 | 'A'<<16 | ' '<<24), + INTERLINGUE = ('I' | 'L'<<8 | 'E'<<16 | ' '<<24), + INUKTITUT = ('I' | 'N'<<8 | 'U'<<16 | ' '<<24), + INUPIAT = ('I' | 'P'<<8 | 'K'<<16 | ' '<<24), + IPA_PHONETIC = ('I' | 'P'<<8 | 'P'<<16 | ' '<<24), + IRISH = ('I' | 'R'<<8 | 'I'<<16 | ' '<<24), + IRISH_TRADITIONAL = ('I' | 'R'<<8 | 'T'<<16 | ' '<<24), + IRULA = ('I' | 'R'<<8 | 'U'<<16 | ' '<<24), + ITALIAN = ('I' | 'T'<<8 | 'A'<<16 | ' '<<24), + JAMAICAN_CREOLE = ('J' | 'A'<<8 | 'M'<<16 | ' '<<24), + JAPANESE = ('J' | 'A'<<8 | 'N'<<16 | ' '<<24), + JAVANESE = ('J' | 'A'<<8 | 'V'<<16 | ' '<<24), + JENNU_KURUMA = ('X' | 'U'<<8 | 'J'<<16 | ' '<<24), + JUDEO_TAT = ('J' | 'D'<<8 | 'T'<<16 | ' '<<24), + JULA = ('J' | 'U'<<8 | 'L'<<16 | ' '<<24), + KABARDIAN = ('K' | 'A'<<8 | 'B'<<16 | ' '<<24), + KABYLE = ('K' | 'A'<<8 | 'B'<<16 | '0'<<24), + KACHCHI = ('K' | 'A'<<8 | 'C'<<16 | ' '<<24), + KADIWEU = ('K' | 'B'<<8 | 'C'<<16 | ' '<<24), + KALENJIN = ('K' | 'A'<<8 | 'L'<<16 | ' '<<24), + KALMYK = ('K' | 'L'<<8 | 'M'<<16 | ' '<<24), + KAMBA = ('K' | 'M'<<8 | 'B'<<16 | ' '<<24), + KANAUJI = ('B' | 'J'<<8 | 'J'<<16 | ' '<<24), + KANNADA = ('K' | 'A'<<8 | 'N'<<16 | ' '<<24), + KANURI = ('K' | 'N'<<8 | 'R'<<16 | ' '<<24), + KAQCHIKEL = ('C' | 'A'<<8 | 'K'<<16 | ' '<<24), + KARACHAY = ('K' | 'A'<<8 | 'R'<<16 | ' '<<24), + KARAIM = ('K' | 'R'<<8 | 'M'<<16 | ' '<<24), + KARAKALPAK = ('K' | 'R'<<8 | 'K'<<16 | ' '<<24), + KARELIAN = ('K' | 'R'<<8 | 'L'<<16 | ' '<<24), + KAREN = ('K' | 'R'<<8 | 'N'<<16 | ' '<<24), + KASHMIRI = ('K' | 'S'<<8 | 'H'<<16 | ' '<<24), + KASHUBIAN = ('C' | 'S'<<8 | 'B'<<16 | ' '<<24), + KATE = ('K' | 'M'<<8 | 'G'<<16 | ' '<<24), + KAZAKH = ('K' | 'A'<<8 | 'Z'<<16 | ' '<<24), + KEBENA = ('K' | 'E'<<8 | 'B'<<16 | ' '<<24), + KEKCHI = ('K' | 'E'<<8 | 'K'<<16 | ' '<<24), + KHAKASS = ('K' | 'H'<<8 | 'A'<<16 | ' '<<24), + KHAMTI_SHAN = ('K' | 'H'<<8 | 'T'<<16 | ' '<<24), + KHAMYANG = ('K' | 'S'<<8 | 'U'<<16 | ' '<<24), + KHANTY_KAZIM = ('K' | 'H'<<8 | 'K'<<16 | ' '<<24), + KHANTY_SHURISHKAR = ('K' | 'H'<<8 | 'S'<<16 | ' '<<24), + KHANTY_VAKHI = ('K' | 'H'<<8 | 'V'<<16 | ' '<<24), + KHASI = ('K' | 'S'<<8 | 'I'<<16 | ' '<<24), + KHENGKHA = ('X' | 'K'<<8 | 'F'<<16 | ' '<<24), + KHINALUG = ('K' | 'J'<<8 | 'J'<<16 | ' '<<24), + KHMER = ('K' | 'H'<<8 | 'M'<<16 | ' '<<24), + KHORASANI_TURKIC = ('K' | 'M'<<8 | 'Z'<<16 | ' '<<24), + KHOWAR = ('K' | 'H'<<8 | 'W'<<16 | ' '<<24), + KHUTSURI_GEORGIAN = ('K' | 'G'<<8 | 'E'<<16 | ' '<<24), + KICHE = ('Q' | 'U'<<8 | 'C'<<16 | ' '<<24), + KIKONGO = ('K' | 'O'<<8 | 'N'<<16 | ' '<<24), + KILDIN_SAMI = ('K' | 'S'<<8 | 'M'<<16 | ' '<<24), + KINYARWANDA = ('R' | 'U'<<8 | 'A'<<16 | ' '<<24), + KIRMANJKI = ('K' | 'I'<<8 | 'U'<<16 | ' '<<24), + KISII = ('K' | 'I'<<8 | 'S'<<16 | ' '<<24), + KITUBA = ('M' | 'K'<<8 | 'W'<<16 | ' '<<24), + KODAGU = ('K' | 'O'<<8 | 'D'<<16 | ' '<<24), + KOKNI = ('K' | 'K'<<8 | 'N'<<16 | ' '<<24), + KOMI = ('K' | 'O'<<8 | 'M'<<16 | ' '<<24), + KOMI_PERMYAK = ('K' | 'O'<<8 | 'P'<<16 | ' '<<24), + KOMI_ZYRIAN = ('K' | 'O'<<8 | 'Z'<<16 | ' '<<24), + KOMO = ('K' | 'M'<<8 | 'O'<<16 | ' '<<24), + KOMSO = ('K' | 'M'<<8 | 'S'<<16 | ' '<<24), + KONGO = ('K' | 'O'<<8 | 'N'<<16 | '0'<<24), + KONKANI = ('K' | 'O'<<8 | 'K'<<16 | ' '<<24), + KOORETE = ('K' | 'R'<<8 | 'T'<<16 | ' '<<24), + KOREAN = ('K' | 'O'<<8 | 'R'<<16 | ' '<<24), + KOREAO_OLD_HANGUL = ('K' | 'O'<<8 | 'H'<<16 | ' '<<24), + KORYAK = ('K' | 'Y'<<8 | 'K'<<16 | ' '<<24), + KOSRAEAN = ('K' | 'O'<<8 | 'S'<<16 | ' '<<24), + KPELLE = ('K' | 'P'<<8 | 'L'<<16 | ' '<<24), + KPELLE_LIBERIA = ('X' | 'P'<<8 | 'E'<<16 | ' '<<24), + KRIO = ('K' | 'R'<<8 | 'I'<<16 | ' '<<24), + KRYMCHAK = ('J' | 'C'<<8 | 'T'<<16 | ' '<<24), + KUANYAMA = ('K' | 'U'<<8 | 'A'<<16 | ' '<<24), + KUBE = ('K' | 'G'<<8 | 'F'<<16 | ' '<<24), + KUI = ('K' | 'U'<<8 | 'I'<<16 | ' '<<24), + KULVI = ('K' | 'U'<<8 | 'K'<<16 | ' '<<24), + KUMAONI = ('K' | 'M'<<8 | 'N'<<16 | ' '<<24), + KUMYK = ('K' | 'U'<<8 | 'M'<<16 | ' '<<24), + KURDISH = ('K' | 'U'<<8 | 'R'<<16 | ' '<<24), + KURUKH = ('K' | 'U'<<8 | 'U'<<16 | ' '<<24), + KUY = ('K' | 'U'<<8 | 'Y'<<16 | ' '<<24), + KWAKWALA = ('K' | 'W'<<8 | 'K'<<16 | ' '<<24), + KYRGYZ = ('K' | 'I'<<8 | 'R'<<16 | ' '<<24), + L_CREE = ('L' | 'C'<<8 | 'R'<<16 | ' '<<24), + LADAKHI = ('L' | 'D'<<8 | 'K'<<16 | ' '<<24), + LADIN = ('L' | 'A'<<8 | 'D'<<16 | ' '<<24), + LADINO = ('J' | 'U'<<8 | 'D'<<16 | ' '<<24), + LAHULI = ('L' | 'A'<<8 | 'H'<<16 | ' '<<24), + LAK = ('L' | 'A'<<8 | 'K'<<16 | ' '<<24), + LAKI = ('L' | 'K'<<8 | 'I'<<16 | ' '<<24), + LAMBANI = ('L' | 'A'<<8 | 'M'<<16 | ' '<<24), + LAMPUNG = ('L' | 'J'<<8 | 'P'<<16 | ' '<<24), + LAO = ('L' | 'A'<<8 | 'O'<<16 | ' '<<24), + LATIN = ('L' | 'A'<<8 | 'T'<<16 | ' '<<24), + LATVIAN = ('L' | 'V'<<8 | 'I'<<16 | ' '<<24), + LAZ = ('L' | 'A'<<8 | 'Z'<<16 | ' '<<24), + LELEMI = ('L' | 'E'<<8 | 'F'<<16 | ' '<<24), + LEZGI = ('L' | 'E'<<8 | 'Z'<<16 | ' '<<24), + LIGURIAN = ('L' | 'I'<<8 | 'J'<<16 | ' '<<24), + LIMBU = ('L' | 'M'<<8 | 'B'<<16 | ' '<<24), + LIMBURGISH = ('L' | 'I'<<8 | 'M'<<16 | ' '<<24), + LINGALA = ('L' | 'I'<<8 | 'N'<<16 | ' '<<24), + LIPO = ('L' | 'P'<<8 | 'O'<<16 | ' '<<24), + LISU = ('L' | 'I'<<8 | 'S'<<16 | ' '<<24), + LITHUANIAN = ('L' | 'T'<<8 | 'H'<<16 | ' '<<24), + LIV = ('L' | 'I'<<8 | 'V'<<16 | ' '<<24), + LOJBAN = ('J' | 'B'<<8 | 'O'<<16 | ' '<<24), + LOMA = ('L' | 'O'<<8 | 'M'<<16 | ' '<<24), + LOMBARD = ('L' | 'M'<<8 | 'O'<<16 | ' '<<24), + LOMWE = ('L' | 'M'<<8 | 'W'<<16 | ' '<<24), + LOW_MARI = ('L' | 'M'<<8 | 'A'<<16 | ' '<<24), + LOW_SAXON = ('N' | 'D'<<8 | 'S'<<16 | ' '<<24), + LOWER_SORBIAN = ('L' | 'S'<<8 | 'B'<<16 | ' '<<24), + LU = ('X' | 'B'<<8 | 'D'<<16 | ' '<<24), + LUBA_KATANGA = ('L' | 'U'<<8 | 'B'<<16 | ' '<<24), + LUBA_LULUA = ('L' | 'U'<<8 | 'A'<<16 | ' '<<24), + LULE_SAMI = ('L' | 'S'<<8 | 'M'<<16 | ' '<<24), + LUO = ('L' | 'U'<<8 | 'O'<<16 | ' '<<24), + LURI = ('L' | 'R'<<8 | 'C'<<16 | ' '<<24), + LUSHOOTSEED = ('L' | 'U'<<8 | 'T'<<16 | ' '<<24), + LUXEMBOURGISH = ('L' | 'T'<<8 | 'Z'<<16 | ' '<<24), + LUYIA = ('L' | 'U'<<8 | 'H'<<16 | ' '<<24), + MACEDONIAN = ('M' | 'K'<<8 | 'D'<<16 | ' '<<24), + MADURA = ('M' | 'A'<<8 | 'D'<<16 | ' '<<24), + MAGAHI = ('M' | 'A'<<8 | 'G'<<16 | ' '<<24), + MAITHILI = ('M' | 'T'<<8 | 'H'<<16 | ' '<<24), + MAJANG = ('M' | 'A'<<8 | 'J'<<16 | ' '<<24), + MAKASAR = ('M' | 'K'<<8 | 'R'<<16 | ' '<<24), + MAKHUWA = ('M' | 'A'<<8 | 'K'<<16 | ' '<<24), + MAKONDE = ('K' | 'D'<<8 | 'E'<<16 | ' '<<24), + MALAGASY = ('M' | 'L'<<8 | 'G'<<16 | ' '<<24), + MALAY = ('M' | 'L'<<8 | 'Y'<<16 | ' '<<24), + MALAYALAM = ('M' | 'A'<<8 | 'L'<<16 | ' '<<24), + MALAYALAM_REFORMED = ('M' | 'L'<<8 | 'R'<<16 | ' '<<24), + MALE = ('M' | 'L'<<8 | 'E'<<16 | ' '<<24), + MALINKE = ('M' | 'L'<<8 | 'N'<<16 | ' '<<24), + MALTESE = ('M' | 'T'<<8 | 'S'<<16 | ' '<<24), + MAM = ('M' | 'A'<<8 | 'M'<<16 | ' '<<24), + MANCHU = ('M' | 'C'<<8 | 'H'<<16 | ' '<<24), + MANDAR = ('M' | 'D'<<8 | 'R'<<16 | ' '<<24), + MANDINKA = ('M' | 'N'<<8 | 'D'<<16 | ' '<<24), + MANINKA = ('M' | 'N'<<8 | 'K'<<16 | ' '<<24), + MANIPURI = ('M' | 'N'<<8 | 'I'<<16 | ' '<<24), + MANO = ('M' | 'E'<<8 | 'V'<<16 | ' '<<24), + MANSI = ('M' | 'A'<<8 | 'N'<<16 | ' '<<24), + MANX = ('M' | 'N'<<8 | 'X'<<16 | ' '<<24), + MAORI = ('M' | 'R'<<8 | 'I'<<16 | ' '<<24), + MAPUDUNGUN = ('M' | 'A'<<8 | 'P'<<16 | ' '<<24), + MARATHI = ('M' | 'A'<<8 | 'R'<<16 | ' '<<24), + MARSHALLESE = ('M' | 'A'<<8 | 'H'<<16 | ' '<<24), + MARWARI = ('M' | 'A'<<8 | 'W'<<16 | ' '<<24), + MAYAN = ('M' | 'Y'<<8 | 'N'<<16 | ' '<<24), + MAZANDERANI = ('M' | 'Z'<<8 | 'N'<<16 | ' '<<24), + MBEMBE_TIGON = ('N' | 'Z'<<8 | 'A'<<16 | ' '<<24), + MBO = ('M' | 'B'<<8 | 'O'<<16 | ' '<<24), + MBUNDU = ('M' | 'B'<<8 | 'N'<<16 | ' '<<24), + MEDUMBA = ('B' | 'Y'<<8 | 'V'<<16 | ' '<<24), + MEEN = ('M' | 'E'<<8 | 'N'<<16 | ' '<<24), + MENDE = ('M' | 'D'<<8 | 'E'<<16 | ' '<<24), + MERU = ('M' | 'E'<<8 | 'R'<<16 | ' '<<24), + MEWATI = ('W' | 'T'<<8 | 'M'<<16 | ' '<<24), + MINANGKABAU = ('M' | 'I'<<8 | 'N'<<16 | ' '<<24), + MINJANGBAL = ('X' | 'J'<<8 | 'B'<<16 | ' '<<24), + MIRANDESE = ('M' | 'W'<<8 | 'L'<<16 | ' '<<24), + MIZO = ('M' | 'I'<<8 | 'Z'<<16 | ' '<<24), + MOHAWK = ('M' | 'O'<<8 | 'H'<<16 | ' '<<24), + MOKSHA = ('M' | 'O'<<8 | 'K'<<16 | ' '<<24), + MOLDAVIAN = ('M' | 'O'<<8 | 'L'<<16 | ' '<<24), + MON = ('M' | 'O'<<8 | 'N'<<16 | ' '<<24), + MONGOLIAN = ('M' | 'N'<<8 | 'G'<<16 | ' '<<24), + MOOSE_CREE = ('M' | 'C'<<8 | 'R'<<16 | ' '<<24), + MORISYEN = ('M' | 'F'<<8 | 'E'<<16 | ' '<<24), + MOROCCAN = ('M' | 'O'<<8 | 'R'<<16 | ' '<<24), + MOSSI = ('M' | 'P'<<8 | 'S'<<16 | ' '<<24), + MUNDARI = ('M' | 'U'<<8 | 'N'<<16 | ' '<<24), + MUSCOGEE = ('M' | 'U'<<8 | 'S'<<16 | ' '<<24), + N_CREE = ('N' | 'C'<<8 | 'R'<<16 | ' '<<24), + NAGA_ASSAMESE = ('N' | 'A'<<8 | 'G'<<16 | ' '<<24), + NAGARI = ('N' | 'G'<<8 | 'R'<<16 | ' '<<24), + NAHUATL = ('N' | 'A'<<8 | 'H'<<16 | ' '<<24), + NANAI = ('N' | 'A'<<8 | 'N'<<16 | ' '<<24), + NASKAPI = ('N' | 'A'<<8 | 'S'<<16 | ' '<<24), + NAURUAN = ('N' | 'A'<<8 | 'U'<<16 | ' '<<24), + NAVAJO = ('N' | 'A'<<8 | 'V'<<16 | ' '<<24), + NDAU = ('N' | 'D'<<8 | 'C'<<16 | ' '<<24), + NDEBELE = ('N' | 'D'<<8 | 'B'<<16 | ' '<<24), + NDONGA = ('N' | 'D'<<8 | 'G'<<16 | ' '<<24), + NEAPOLITAN = ('N' | 'A'<<8 | 'P'<<16 | ' '<<24), + NEPALI = ('N' | 'E'<<8 | 'P'<<16 | ' '<<24), + NEWARI = ('N' | 'E'<<8 | 'W'<<16 | ' '<<24), + NGBAKA = ('N' | 'G'<<8 | 'A'<<16 | ' '<<24), + NIGERIAN_FULFULDE = ('F' | 'U'<<8 | 'V'<<16 | ' '<<24), + NIMADI = ('N' | 'O'<<8 | 'E'<<16 | ' '<<24), + NISI = ('N' | 'I'<<8 | 'S'<<16 | ' '<<24), + NIUEAN = ('N' | 'I'<<8 | 'U'<<16 | ' '<<24), + NKO = ('N' | 'K'<<8 | 'O'<<16 | ' '<<24), + NOGAI = ('N' | 'O'<<8 | 'G'<<16 | ' '<<24), + NORFOLK = ('P' | 'I'<<8 | 'H'<<16 | ' '<<24), + NORTH_SLAVEY = ('S' | 'C'<<8 | 'S'<<16 | ' '<<24), + NORTHERN_EMBERA = ('E' | 'M'<<8 | 'P'<<16 | ' '<<24), + NORTHERN_SAMI = ('N' | 'S'<<8 | 'M'<<16 | ' '<<24), + NORTHERN_SOTHO = ('N' | 'S'<<8 | 'O'<<16 | ' '<<24), + NORTHERN_TAI = ('N' | 'T'<<8 | 'A'<<16 | ' '<<24), + NORWAY_HOUSE_CREE = ('N' | 'H'<<8 | 'C'<<16 | ' '<<24), + NORWEGIAN = ('N' | 'O'<<8 | 'R'<<16 | ' '<<24), + NORWEGIAN_NYNORSK = ('N' | 'Y'<<8 | 'N'<<16 | ' '<<24), + NOVIAL = ('N' | 'O'<<8 | 'V'<<16 | ' '<<24), + NUMANGGANG = ('N' | 'O'<<8 | 'P'<<16 | ' '<<24), + NUNAVIK_INUKTITUT = ('I' | 'N'<<8 | 'U'<<16 | ' '<<24), + NUU_CHAH_NULTH = ('N' | 'U'<<8 | 'K'<<16 | ' '<<24), + NYAMWEZI = ('N' | 'Y'<<8 | 'M'<<16 | ' '<<24), + NYANKOLE = ('N' | 'K'<<8 | 'L'<<16 | ' '<<24), + OCCITAN = ('O' | 'C'<<8 | 'I'<<16 | ' '<<24), + ODIA = ('O' | 'R'<<8 | 'I'<<16 | ' '<<24), + OJI_CREE = ('O' | 'C'<<8 | 'R'<<16 | ' '<<24), + OJIBWAY = ('O' | 'J'<<8 | 'B'<<16 | ' '<<24), + OLD_IRISH = ('S' | 'G'<<8 | 'A'<<16 | ' '<<24), + OLD_JAVANESE = ('K' | 'A'<<8 | 'W'<<16 | ' '<<24), + ONEIDA = ('O' | 'N'<<8 | 'E'<<16 | ' '<<24), + ONONDAGA = ('O' | 'N'<<8 | 'O'<<16 | ' '<<24), + OROMO = ('O' | 'R'<<8 | 'O'<<16 | ' '<<24), + OSSETIAN = ('O' | 'S'<<8 | 'S'<<16 | ' '<<24), + PA_O_KAREN = ('B' | 'L'<<8 | 'K'<<16 | ' '<<24), + PALAUAN = ('P' | 'A'<<8 | 'U'<<16 | ' '<<24), + PALAUNG = ('P' | 'L'<<8 | 'G'<<16 | ' '<<24), + PALESTINIAN_ARAMAIC = ('P' | 'A'<<8 | 'A'<<16 | ' '<<24), + PALI = ('P' | 'A'<<8 | 'L'<<16 | ' '<<24), + PALPA = ('P' | 'A'<<8 | 'P'<<16 | ' '<<24), + PAMPANGAN = ('P' | 'A'<<8 | 'M'<<16 | ' '<<24), + PANGASINAN = ('P' | 'A'<<8 | 'G'<<16 | ' '<<24), + PAPIAMENTU = ('P' | 'A'<<8 | 'P'<<16 | '0'<<24), + PASHTO = ('P' | 'A'<<8 | 'S'<<16 | ' '<<24), + PATTANI_MALAY = ('M' | 'F'<<8 | 'A'<<16 | ' '<<24), + PENNSYLVANIA_GERMAN = ('P' | 'D'<<8 | 'C'<<16 | ' '<<24), + PERSIAN = ('F' | 'A'<<8 | 'R'<<16 | ' '<<24), + PHAKE = ('P' | 'J'<<8 | 'K'<<16 | ' '<<24), + PICARD = ('P' | 'C'<<8 | 'D'<<16 | ' '<<24), + PIEMONTESE = ('P' | 'M'<<8 | 'S'<<16 | ' '<<24), + PILAGA = ('P' | 'L'<<8 | 'G'<<16 | ' '<<24), + PITE_SAMI = ('S' | 'J'<<8 | 'E'<<16 | ' '<<24), + POCOMCHI = ('P' | 'O'<<8 | 'H'<<16 | ' '<<24), + POHNPEIAN = ('P' | 'O'<<8 | 'N'<<16 | ' '<<24), + POLISH = ('P' | 'L'<<8 | 'K'<<16 | ' '<<24), + POLYTONIC_GREEK = ('P' | 'G'<<8 | 'R'<<16 | ' '<<24), + PORTUGUESE = ('P' | 'T'<<8 | 'G'<<16 | ' '<<24), + PROVENCAL = ('P' | 'R'<<8 | 'O'<<16 | ' '<<24), + PUNJABI = ('P' | 'A'<<8 | 'N'<<16 | ' '<<24), + QUECHUA = ('Q' | 'U'<<8 | 'Z'<<16 | ' '<<24), + QUECHUA_BOLIVIA = ('Q' | 'U'<<8 | 'H'<<16 | ' '<<24), + QUECHUA_ECUADOR = ('Q' | 'V'<<8 | 'I'<<16 | ' '<<24), + QUECHUA_PERU = ('Q' | 'W'<<8 | 'H'<<16 | ' '<<24), + R_CREE = ('R' | 'C'<<8 | 'R'<<16 | ' '<<24), + RAJASTHANI = ('R' | 'A'<<8 | 'J'<<16 | ' '<<24), + RAKHINE = ('A' | 'R'<<8 | 'K'<<16 | ' '<<24), + RAROTONGAN = ('R' | 'A'<<8 | 'R'<<16 | ' '<<24), + REJANG = ('R' | 'E'<<8 | 'J'<<16 | ' '<<24), + RIANG = ('R' | 'I'<<8 | 'A'<<16 | ' '<<24), + RIPUARIAN = ('K' | 'S'<<8 | 'H'<<16 | ' '<<24), + RITARUNGO = ('R' | 'I'<<8 | 'T'<<16 | ' '<<24), + ROHINGYA = ('R' | 'H'<<8 | 'G'<<16 | ' '<<24), + ROMANIAN = ('R' | 'O'<<8 | 'M'<<16 | ' '<<24), + ROMANSH = ('R' | 'M'<<8 | 'S'<<16 | ' '<<24), + ROMANY = ('R' | 'O'<<8 | 'Y'<<16 | ' '<<24), + ROTUMAN = ('R' | 'T'<<8 | 'M'<<16 | ' '<<24), + RUNDI = ('R' | 'U'<<8 | 'N'<<16 | ' '<<24), + RUSSIAN = ('R' | 'U'<<8 | 'S'<<16 | ' '<<24), + RUSSIAN_BURIAT = ('R' | 'B'<<8 | 'U'<<16 | ' '<<24), + RUSYN = ('R' | 'S'<<8 | 'Y'<<16 | ' '<<24), + SADRI = ('S' | 'A'<<8 | 'D'<<16 | ' '<<24), + SAKHA = ('Y' | 'A'<<8 | 'K'<<16 | ' '<<24), + SAMOAN = ('S' | 'M'<<8 | 'O'<<16 | ' '<<24), + SAMOGITIAN = ('S' | 'G'<<8 | 'S'<<16 | ' '<<24), + SAN_BLAS_KUNA = ('C' | 'U'<<8 | 'K'<<16 | ' '<<24), + SANGO = ('S' | 'G'<<8 | 'O'<<16 | ' '<<24), + SANSKRIT = ('S' | 'A'<<8 | 'N'<<16 | ' '<<24), + SANTALI = ('S' | 'A'<<8 | 'T'<<16 | ' '<<24), + SARAIKI = ('S' | 'R'<<8 | 'K'<<16 | ' '<<24), + SARDINIAN = ('S' | 'R'<<8 | 'D'<<16 | ' '<<24), + SASAK = ('S' | 'A'<<8 | 'S'<<16 | ' '<<24), + SATERLAND_FRISIAN = ('S' | 'T'<<8 | 'Q'<<16 | ' '<<24), + SAYISI = ('S' | 'A'<<8 | 'Y'<<16 | ' '<<24), + SCOTS = ('S' | 'C'<<8 | 'I'<<16 | ' '<<24), + SCOTTISH_GAELIC = ('G' | 'A'<<8 | 'E'<<16 | ' '<<24), + SEKOTA = ('S' | 'E'<<8 | 'J'<<16 | ' '<<24), + SELKUP = ('S' | 'E'<<8 | 'L'<<16 | ' '<<24), + SENA = ('S' | 'N'<<8 | 'A'<<16 | ' '<<24), + SENECA = ('S' | 'E'<<8 | 'E'<<16 | ' '<<24), + SERBIAN = ('S' | 'R'<<8 | 'B'<<16 | ' '<<24), + SERER = ('S' | 'R'<<8 | 'R'<<16 | ' '<<24), + SGAW_KAREN = ('K' | 'S'<<8 | 'W'<<16 | ' '<<24), + SHAN = ('S' | 'H'<<8 | 'N'<<16 | ' '<<24), + SHONA = ('S' | 'N'<<8 | 'A'<<16 | ' '<<24), + SIBE = ('S' | 'I'<<8 | 'B'<<16 | ' '<<24), + SICILIAN = ('S' | 'C'<<8 | 'N'<<16 | ' '<<24), + SIDAMO = ('S' | 'I'<<8 | 'D'<<16 | ' '<<24), + SILESIAN = ('S' | 'Z'<<8 | 'L'<<16 | ' '<<24), + SILTE_GURAGE = ('S' | 'I'<<8 | 'G'<<16 | ' '<<24), + SINDHI = ('S' | 'N'<<8 | 'D'<<16 | ' '<<24), + SINHALA = ('S' | 'N'<<8 | 'H'<<16 | ' '<<24), + SKOLT_SAMI = ('S' | 'K'<<8 | 'S'<<16 | ' '<<24), + SLAVEY = ('S' | 'L'<<8 | 'A'<<16 | ' '<<24), + SLOVAK = ('S' | 'K'<<8 | 'Y'<<16 | ' '<<24), + SLOVENIAN = ('S' | 'L'<<8 | 'V'<<16 | ' '<<24), + SMALL_FLOWERY_MIAO = ('S' | 'F'<<8 | 'M'<<16 | ' '<<24), + SODO_GURAGE = ('S' | 'O'<<8 | 'G'<<16 | ' '<<24), + SOGA = ('X' | 'O'<<8 | 'G'<<16 | ' '<<24), + SOMALI = ('S' | 'M'<<8 | 'L'<<16 | ' '<<24), + SONGE = ('S' | 'O'<<8 | 'P'<<16 | ' '<<24), + SONINKE = ('S' | 'N'<<8 | 'K'<<16 | ' '<<24), + SOUTH_SLAVEY = ('S' | 'S'<<8 | 'L'<<16 | ' '<<24), + SOUTHERN_KIWAI = ('K' | 'J'<<8 | 'D'<<16 | ' '<<24), + SOUTHERN_SAMI = ('S' | 'S'<<8 | 'M'<<16 | ' '<<24), + SOUTHERN_SOTHO = ('S' | 'O'<<8 | 'T'<<16 | ' '<<24), + SPANISH = ('E' | 'S'<<8 | 'P'<<16 | ' '<<24), + STANDARD_MOROCCAN_TAMAZIGHT = ('Z' | 'G'<<8 | 'H'<<16 | ' '<<24), + STRAITS_SALISH = ('S' | 'T'<<8 | 'R'<<16 | ' '<<24), + SUKUMA = ('S' | 'U'<<8 | 'K'<<16 | ' '<<24), + SUNDANESE = ('S' | 'U'<<8 | 'N'<<16 | ' '<<24), + SURI = ('S' | 'U'<<8 | 'R'<<16 | ' '<<24), + SUTU = ('S' | 'X'<<8 | 'T'<<16 | ' '<<24), + SVAN = ('S' | 'V'<<8 | 'A'<<16 | ' '<<24), + SWADAYA_ARAMAIC = ('S' | 'W'<<8 | 'A'<<16 | ' '<<24), + SWAHILI = ('S' | 'W'<<8 | 'K'<<16 | ' '<<24), + SWATI = ('S' | 'W'<<8 | 'Z'<<16 | ' '<<24), + SWEDISH = ('S' | 'V'<<8 | 'E'<<16 | ' '<<24), + SYLHETI = ('S' | 'Y'<<8 | 'L'<<16 | ' '<<24), + SYRIAC = ('S' | 'Y'<<8 | 'R'<<16 | ' '<<24), + SYRIAC_EASTERN = ('S' | 'Y'<<8 | 'R'<<16 | 'N'<<24), + SYRIAC_ESTRANGELA = ('S' | 'Y'<<8 | 'R'<<16 | 'E'<<24), + SYRIAC_WESTERN = ('S' | 'Y'<<8 | 'R'<<16 | 'J'<<24), + TABASARAN = ('T' | 'A'<<8 | 'B'<<16 | ' '<<24), + TACHELHIT = ('S' | 'H'<<8 | 'I'<<16 | ' '<<24), + TAGALOG = ('T' | 'G'<<8 | 'L'<<16 | ' '<<24), + TAHAGGART_TAMAHAQ = ('T' | 'H'<<8 | 'V'<<16 | ' '<<24), + TAHITIAN = ('T' | 'H'<<8 | 'T'<<16 | ' '<<24), + TAI_LAING = ('T' | 'J'<<8 | 'L'<<16 | ' '<<24), + TAJIKI = ('T' | 'A'<<8 | 'J'<<16 | ' '<<24), + TALYSH = ('T' | 'L'<<8 | 'Y'<<16 | ' '<<24), + TAMASHEK = ('T' | 'M'<<8 | 'H'<<16 | ' '<<24), + TAMASHEQ = ('T' | 'A'<<8 | 'Q'<<16 | ' '<<24), + TAMAZIGHT = ('T' | 'Z'<<8 | 'M'<<16 | ' '<<24), + TAMIL = ('T' | 'A'<<8 | 'M'<<16 | ' '<<24), + TARIFIT = ('R' | 'I'<<8 | 'F'<<16 | ' '<<24), + TATAR = ('T' | 'A'<<8 | 'T'<<16 | ' '<<24), + TAWALLAMMAT_TAMAJAQ = ('T' | 'T'<<8 | 'Q'<<16 | ' '<<24), + TAY = ('T' | 'Y'<<8 | 'Z'<<16 | ' '<<24), + TAYART_TAMAJEQ = ('T' | 'H'<<8 | 'Z'<<16 | ' '<<24), + TELUGU = ('T' | 'E'<<8 | 'L'<<16 | ' '<<24), + TEMNE = ('T' | 'M'<<8 | 'N'<<16 | ' '<<24), + TETUM = ('T' | 'E'<<8 | 'T'<<16 | ' '<<24), + TH_CREE = ('T' | 'C'<<8 | 'R'<<16 | ' '<<24), + THAI = ('T' | 'H'<<8 | 'A'<<16 | ' '<<24), + THAILAND_MON = ('M' | 'O'<<8 | 'N'<<16 | 'T'<<24), + THOMPSON = ('T' | 'H'<<8 | 'P'<<16 | ' '<<24), + TIBETAN = ('T' | 'I'<<8 | 'B'<<16 | ' '<<24), + TIGRE = ('T' | 'G'<<8 | 'R'<<16 | ' '<<24), + TIGRINYA = ('T' | 'G'<<8 | 'Y'<<16 | ' '<<24), + TIV = ('T' | 'I'<<8 | 'V'<<16 | ' '<<24), + TLINGIT = ('T' | 'L'<<8 | 'I'<<16 | ' '<<24), + TOBO = ('T' | 'B'<<8 | 'V'<<16 | ' '<<24), + TODO = ('T' | 'O'<<8 | 'D'<<16 | ' '<<24), + TOK_PISIN = ('T' | 'P'<<8 | 'I'<<16 | ' '<<24), + TOMA = ('T' | 'O'<<8 | 'D'<<16 | '0'<<24), + TONGA = ('T' | 'N'<<8 | 'G'<<16 | ' '<<24), + TONGAN = ('T' | 'G'<<8 | 'N'<<16 | ' '<<24), + TORKI = ('A' | 'Z'<<8 | 'B'<<16 | ' '<<24), + TSHANGLA = ('T' | 'S'<<8 | 'J'<<16 | ' '<<24), + TSONGA = ('T' | 'S'<<8 | 'G'<<16 | ' '<<24), + TSWANA = ('T' | 'N'<<8 | 'A'<<16 | ' '<<24), + TULU = ('T' | 'U'<<8 | 'L'<<16 | ' '<<24), + TUMBUKA = ('T' | 'U'<<8 | 'M'<<16 | ' '<<24), + TUNDRA_ENETS = ('T' | 'N'<<8 | 'E'<<16 | ' '<<24), + TURKISH = ('T' | 'R'<<8 | 'K'<<16 | ' '<<24), + TURKMEN = ('T' | 'K'<<8 | 'M'<<16 | ' '<<24), + TUROYO_ARAMAIC = ('T' | 'U'<<8 | 'A'<<16 | ' '<<24), + TUSCARORA = ('T' | 'U'<<8 | 'S'<<16 | ' '<<24), + TUVALU = ('T' | 'V'<<8 | 'L'<<16 | ' '<<24), + TUVIN = ('T' | 'U'<<8 | 'V'<<16 | ' '<<24), + TWI = ('T' | 'W'<<8 | 'I'<<16 | ' '<<24), + TZOTZIL = ('T' | 'Z'<<8 | 'O'<<16 | ' '<<24), + UDI = ('U' | 'D'<<8 | 'I'<<16 | ' '<<24), + UDMURT = ('U' | 'D'<<8 | 'M'<<16 | ' '<<24), + UKRAINIAN = ('U' | 'K'<<8 | 'R'<<16 | ' '<<24), + UMBUNDU = ('U' | 'M'<<8 | 'B'<<16 | ' '<<24), + UME_SAMI = ('S' | 'J'<<8 | 'U'<<16 | ' '<<24), + UPPER_SAXON = ('S' | 'X'<<8 | 'U'<<16 | ' '<<24), + UPPER_SORBIAN = ('U' | 'S'<<8 | 'B'<<16 | ' '<<24), + URALIC_PHONETIC = ('U' | 'P'<<8 | 'P'<<16 | ' '<<24), + URDU = ('U' | 'R'<<8 | 'D'<<16 | ' '<<24), + UYGHUR = ('U' | 'Y'<<8 | 'G'<<16 | ' '<<24), + UZBEK = ('U' | 'Z'<<8 | 'B'<<16 | ' '<<24), + VENDA = ('V' | 'E'<<8 | 'N'<<16 | ' '<<24), + VENETIAN = ('V' | 'E'<<8 | 'C'<<16 | ' '<<24), + VIETNAMESE = ('V' | 'I'<<8 | 'T'<<16 | ' '<<24), + VLAX_ROMANI = ('R' | 'M'<<8 | 'Y'<<16 | ' '<<24), + VOLAPUK = ('V' | 'O'<<8 | 'L'<<16 | ' '<<24), + VORO = ('V' | 'R'<<8 | 'O'<<16 | ' '<<24), + WA = ('W' | 'A'<<8 | ' '<<16 | ' '<<24), + WACI_GBE = ('W' | 'C'<<8 | 'I'<<16 | ' '<<24), + WAGDI = ('W' | 'A'<<8 | 'G'<<16 | ' '<<24), + WAKHI = ('W' | 'B'<<8 | 'L'<<16 | ' '<<24), + WALLOON = ('W' | 'L'<<8 | 'N'<<16 | ' '<<24), + WARAY_WARAY = ('W' | 'A'<<8 | 'R'<<16 | ' '<<24), + WAYANAD_CHETTI = ('C' | 'T'<<8 | 'T'<<16 | ' '<<24), + WAYUU = ('G' | 'U'<<8 | 'C'<<16 | ' '<<24), + WELSH = ('W' | 'E'<<8 | 'L'<<16 | ' '<<24), + WENDAT = ('W' | 'D'<<8 | 'T'<<16 | ' '<<24), + WEST_CREE = ('W' | 'C'<<8 | 'R'<<16 | ' '<<24), + WESTERN_CHAM = ('C' | 'J'<<8 | 'A'<<16 | ' '<<24), + WESTERN_KAYAH = ('K' | 'Y'<<8 | 'U'<<16 | ' '<<24), + WESTERN_PANJABI = ('P' | 'N'<<8 | 'B'<<16 | ' '<<24), + WESTERN_PWO_KAREN = ('P' | 'W'<<8 | 'O'<<16 | ' '<<24), + WOLOF = ('W' | 'L'<<8 | 'F'<<16 | ' '<<24), + WOODS_CREE = ('D' | 'C'<<8 | 'R'<<16 | ' '<<24), + WUDING_LUQUAN_YI = ('Y' | 'W'<<8 | 'Q'<<16 | ' '<<24), + WYANDOT = ('W' | 'Y'<<8 | 'N'<<16 | ' '<<24), + XHOSA = ('X' | 'H'<<8 | 'S'<<16 | ' '<<24), + Y_CREE = ('Y' | 'C'<<8 | 'R'<<16 | ' '<<24), + YAO = ('Y' | 'A'<<8 | 'O'<<16 | ' '<<24), + YAPESE = ('Y' | 'A'<<8 | 'P'<<16 | ' '<<24), + YI_CLASSIC = ('Y' | 'I'<<8 | 'C'<<16 | ' '<<24), + YI_MODERN = ('Y' | 'I'<<8 | 'M'<<16 | ' '<<24), + YIDDISH = ('J' | 'I'<<8 | 'I'<<16 | ' '<<24), + YORUBA = ('Y' | 'B'<<8 | 'A'<<16 | ' '<<24), + ZAMBOANGA_CHAVACANO = ('C' | 'B'<<8 | 'K'<<16 | ' '<<24), + ZANDE = ('Z' | 'N'<<8 | 'D'<<16 | ' '<<24), + ZARMA = ('D' | 'J'<<8 | 'R'<<16 | ' '<<24), + ZAZAKI = ('Z' | 'Z'<<8 | 'A'<<16 | ' '<<24), + ZEALANDIC = ('Z' | 'E'<<8 | 'A'<<16 | ' '<<24), + ZHUANG = ('Z' | 'H'<<8 | 'A'<<16 | ' '<<24), + ZULU = ('Z' | 'U'<<8 | 'L'<<16 | ' '<<24), +} + +break_flags :: distinct bit_set[break_flag; u32] + +break_flag :: enum u32 { + // Direction changes from left-to-right to right-to-left, or vice versa. + DIRECTION = 0, + // Script changes. + // Note that some characters, such as digits, are used in multiple + // scripts and, as such, will not produce script breaks. + SCRIPT = 1, + // Graphemes are "visual units". They may be composed of more than one codepoint. + // They are used as interaction boundaries in graphical interfaces, e.g. moving the + // caret. + GRAPHEME = 2, + // In most scripts, words are broken up by whitespace, but Unicode word breaking has + // better script coverage and also handles some special cases that a simple stateless + // loop cannot handle. + WORD = 3, + // By default, you are not allowed to break a line. + // Soft line breaks allow for line breaking, but do not require it. + // This is useful for when you are doing line wrapping. + LINE_SOFT = 4, + // Hard line breaks are required. They signal the end of a paragraph. + // (In Unicode, there is no meaningful distinction between a line and a paragraph. + // a paragraph is pretty much just a line of text that can wrap.) + LINE_HARD = 5, +} + +BREAK_FLAGS_DIRECTION :: break_flags{.DIRECTION} +BREAK_FLAGS_SCRIPT :: break_flags{.SCRIPT} +BREAK_FLAGS_GRAPHEME :: break_flags{.GRAPHEME} +BREAK_FLAGS_WORD :: break_flags{.WORD} +BREAK_FLAGS_LINE_SOFT :: break_flags{.LINE_SOFT} +BREAK_FLAGS_LINE_HARD :: break_flags{.LINE_HARD} +BREAK_FLAGS_LINE :: break_flags{.LINE_SOFT, .LINE_HARD} +BREAK_FLAGS_ANY :: break_flags{.DIRECTION, .SCRIPT, .GRAPHEME, .WORD, .LINE_SOFT, .LINE_HARD} + + +op_kind :: enum u8 { + END, + + // Substitution ops. + PRE_NORMALIZE_DOTTED_CIRCLES, + NORMALIZE, + NORMALIZE_HANGUL, + FLAG_JOINING_LETTERS, + GSUB_FEATURES, + + // Positioning ops. + GPOS_METRICS, + GPOS_FEATURES, + + POST_GPOS_FIXUP, + STCH_POSTPASS, +} + + + +glyph_flags :: distinct bit_set[glyph_flag; u32] +glyph_flag :: enum u32 { + // These feature flags must coincide with joining_feature _and_ FEATURE_FLAG! + ISOL = 0, + FINA = 1, + FIN2 = 2, + FIN3 = 3, + MEDI = 4, + MED2 = 5, + INIT = 6, + + // These feature flags must coincide with FEATURE_FLAG! + LJMO = 7, + VJMO = 8, + TJMO = 9, + RPHF = 10, + BLWF = 11, + HALF = 12, + PSTF = 13, + ABVF = 14, + PREF = 15, + NUMR = 16, + FRAC = 17, + DNOM = 18, + CFAR = 19, + + // These can be anything. + DO_NOT_DECOMPOSE = 21, + FIRST_IN_MULTIPLE_SUBSTITUTION = 22, + NO_BREAK = 23, + CURSIVE = 24, + GENERATED_BY_GSUB = 25, + USED_IN_GPOS = 26, + + STCH_ENDPOINT = 27, + STCH_EXTENSION = 28, + + LIGATURE = 29, + MULTIPLE_SUBSTITUTION = 30, +}; + +GLYPH_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT, .LJMO, .VJMO, .TJMO, .RPHF, .BLWF, .HALF, .PSTF, .ABVF, .PREF, .NUMR, .FRAC, .DNOM, .CFAR} + +// In USE, glyphs are mostly not pre-flagged for feature application. +// However, we do want to flag rphf/pref results for reordering, so we want to +// keep all of the flags as usual, and only use these feature flags for filtering. + +USE_GLYPH_FEATURE_MASK :: glyph_flags{ + .ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT, + .NUMR, .DNOM, .FRAC, +} + +JOINING_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT} + + +// Japanese text contains "kinsoku" characters, around which breaking a line is forbidden. +// Exactly which characters are "kinsoku" or not depends on the context: +// - Strict style has the largest amount of kinsoku characters, which leads to longer lines. +// - Loose style has the smallest amount of kinsoku characters, which leads to smaller lines. +// - Normal style is somewhere in the middle. +// Note that, while the Unicode standard mentions all three of these styles, it does not mention +// any differences between the normal and loose styles. +// As such, normal and loose styles currently behave the same. +japanese_line_break_style :: enum u8 { + // The Unicode standard does not define what strict style is used for. + // Supposedly, it is used for anything that does not fall into the other two categories of text. + STRICT, + + // Normal style is used for books and documents. + NORMAL, + + // Loose style is used for newspapers, and (I assume) any other narrow column format. + LOOSE, +} + + +orientation :: enum u32 { + HORIZONTAL, + VERTICAL, +} + +direction :: enum u32 { + NONE, + LTR, + RTL, +} + +unicode_joining_type :: enum u8 { + NONE, + LEFT, + DUAL, + FORCE, + RIGHT, + TRANSPARENT, +} + +unicode_flags :: distinct bit_set[unicode_flag; u8] +unicode_flag :: enum u8 { + MODIFIER_COMBINING_MARK = 0, + DEFAULT_IGNORABLE = 1, + OPEN_BRACKET = 2, + CLOSE_BRACKET = 3, + PART_OF_WORD = 4, + DECIMAL_DIGIT = 5, + NON_SPACING_MARK = 6, +} + +unicode_bidirectional_class :: enum u8 { + NI, + L, + R, + NSM, + AL, + AN, + EN, + ES, + ET, + CS, +} + +line_break_class :: enum u8 { + /* 0 */ Onea, + /* 1 */ Oea, + /* 2 */ Ope, + /* 3 */ BK, + /* 4 */ CR, + /* 5 */ LF, + /* 6 */ NL, + /* 7 */ SP, + /* 8 */ ZW, + /* 9 */ WJ, + /* 10 */ GLnea, + /* 11 */ GLea, + /* 12 */ CLnea, + /* 13 */ CLea, + /* 14 */ CPnea, + /* 15 */ CPea, + /* 16 */ EXnea, + /* 17 */ EXea, + /* 18 */ SY, + /* 19 */ BAnea, + /* 20 */ BAea, + /* 21 */ OPnea, + /* 22 */ OPea, + /* 23 */ QU, + /* 24 */ QUPi, + /* 25 */ QUPf, + /* 26 */ IS, + /* 27 */ NSnea, + /* 28 */ NSea, + /* 29 */ B2, + /* 30 */ CB, + /* 31 */ HY, + /* 32 */ HYPHEN, + /* 33 */ INnea, + /* 34 */ INea, + /* 35 */ BB, + /* 36 */ HL, + /* 37 */ ALnea, + /* 38 */ ALea, + /* 39 */ NU, + /* 40 */ PRnea, + /* 41 */ PRea, + /* 42 */ IDnea, + /* 43 */ IDea, + /* 44 */ IDpe, + /* 45 */ EBnea, + /* 46 */ EBea, + /* 47 */ EM, + /* 48 */ POnea, + /* 49 */ POea, + /* 50 */ JL, + /* 51 */ JV, + /* 52 */ JT, + /* 53 */ H2, + /* 54 */ H3, + /* 55 */ AP, + /* 56 */ AK, + /* 57 */ DOTTED_CIRCLE, + /* 58 */ AS, + /* 59 */ VF, + /* 60 */ VI, + /* 61 */ RI, + + /* 62 */ COUNT, + + /* 63 */ CM, + /* 64 */ ZWJ, + + // CJ resolves to either NS or ID depending on the (Japanese) line break style. + // NS is strict line breaking, used for long lines. + // ID is normal line breaking, used for normal body text. + /* 65 */ CJ, + + /* 66 */ SOT, + /* 67 */ EOT, +} + +// @Cleanup: Merge EX and FO. +word_break_class :: enum u8 { + Onep, + Oep, + CR, + LF, + NL, + EX, + ZWJ, + RI, + FO, + KA, + HL, + ALnep, + ALep, + SQ, + DQ, + MNL, + ML, + MN, + NM, + ENL, + WSS, + + SOT, +} + +// Unicode defines scripts and languages. +// A language belongs to a single script, and a script belongs to a single writing system. +// On top of these, OpenType defines shapers, which are basically just designations for +// specific code paths that are taken depending on which script is being shapen. +// +// Some scripts, like Latin and Cyrillic, need relatively few operations, while complex +// scripts like Arabic and Indic scripts have specific processing steps that need to happen +// in order to obtain a correct result. +// +// These sequences of operations are _not_ described in the font file itself. The shaping +// code needs to know which script it is shaping, and implement all of those passes itself. +// That is why you, as a user, have to care about this. +// +// When creating shape_config, you can either pass in a known script, or you can specify +// SCRIPT_DONT_KNOW and let the library figure it out. +// While SCRIPT_DONT_KNOW may look appealing, it is worth noting that we can only infer +// the _script_, and not the language, of the text you pass in. +// This means that you might miss out on language-specific features when you use it. +shaper :: enum u32 { + DEFAULT, + ARABIC, + HANGUL, + HEBREW, + INDIC, + KHMER, + MYANMAR, + TIBETAN, + USE, +} + +script :: enum u32 { + DONT_KNOW, + ADLAM, + AHOM, + ANATOLIAN_HIEROGLYPHS, + ARABIC, + ARMENIAN, + AVESTAN, + BALINESE, + BAMUM, + BASSA_VAH, + BATAK, + BENGALI, + BHAIKSUKI, + BOPOMOFO, + BRAHMI, + BUGINESE, + BUHID, + CANADIAN_SYLLABICS, + CARIAN, + CAUCASIAN_ALBANIAN, + CHAKMA, + CHAM, + CHEROKEE, + CHORASMIAN, + CJK_IDEOGRAPHIC, + COPTIC, + CYPRIOT_SYLLABARY, + CYPRO_MINOAN, + CYRILLIC, + DEFAULT, + DEFAULT2, + DESERET, + DEVANAGARI, + DIVES_AKURU, + DOGRA, + DUPLOYAN, + EGYPTIAN_HIEROGLYPHS, + ELBASAN, + ELYMAIC, + ETHIOPIC, + GARAY, + GEORGIAN, + GLAGOLITIC, + GOTHIC, + GRANTHA, + GREEK, + GUJARATI, + GUNJALA_GONDI, + GURMUKHI, + GURUNG_KHEMA, + HANGUL, + HANIFI_ROHINGYA, + HANUNOO, + HATRAN, + HEBREW, + HIRAGANA, + IMPERIAL_ARAMAIC, + INSCRIPTIONAL_PAHLAVI, + INSCRIPTIONAL_PARTHIAN, + JAVANESE, + KAITHI, + KANNADA, + KATAKANA, + KAWI, + KAYAH_LI, + KHAROSHTHI, + KHITAN_SMALL_SCRIPT, + KHMER, + KHOJKI, + KHUDAWADI, + KIRAT_RAI, + LAO, + LATIN, + LEPCHA, + LIMBU, + LINEAR_A, + LINEAR_B, + LISU, + LYCIAN, + LYDIAN, + MAHAJANI, + MAKASAR, + MALAYALAM, + MANDAIC, + MANICHAEAN, + MARCHEN, + MASARAM_GONDI, + MEDEFAIDRIN, + MEETEI_MAYEK, + MENDE_KIKAKUI, + MEROITIC_CURSIVE, + MEROITIC_HIEROGLYPHS, + MIAO, + MODI, + MONGOLIAN, + MRO, + MULTANI, + MYANMAR, + NABATAEAN, + NAG_MUNDARI, + NANDINAGARI, + NEWA, + NEW_TAI_LUE, + NKO, + NUSHU, + NYIAKENG_PUACHUE_HMONG, + OGHAM, + OL_CHIKI, + OL_ONAL, + OLD_ITALIC, + OLD_HUNGARIAN, + OLD_NORTH_ARABIAN, + OLD_PERMIC, + OLD_PERSIAN_CUNEIFORM, + OLD_SOGDIAN, + OLD_SOUTH_ARABIAN, + OLD_TURKIC, + OLD_UYGHUR, + ODIA, + OSAGE, + OSMANYA, + PAHAWH_HMONG, + PALMYRENE, + PAU_CIN_HAU, + PHAGS_PA, + PHOENICIAN, + PSALTER_PAHLAVI, + REJANG, + RUNIC, + SAMARITAN, + SAURASHTRA, + SHARADA, + SHAVIAN, + SIDDHAM, + SIGN_WRITING, + SOGDIAN, + SINHALA, + SORA_SOMPENG, + SOYOMBO, + SUMERO_AKKADIAN_CUNEIFORM, + SUNDANESE, + SUNUWAR, + SYLOTI_NAGRI, + SYRIAC, + TAGALOG, + TAGBANWA, + TAI_LE, + TAI_THAM, + TAI_VIET, + TAKRI, + TAMIL, + TANGSA, + TANGUT, + TELUGU, + THAANA, + THAI, + TIBETAN, + TIFINAGH, + TIRHUTA, + TODHRI, + TOTO, + TULU_TIGALARI, + UGARITIC_CUNEIFORM, + VAI, + VITHKUQI, + WANCHO, + WARANG_CITI, + YEZIDI, + YI, + ZANABAZAR_SQUARE, +} + +feature_tag :: enum u32 { + isol = ('i' | 's'<<8 | 'o'<<16 | 'l'<<24), /* Isolated Forms */ + fina = ('f' | 'i'<<8 | 'n'<<16 | 'a'<<24), /* Terminal Forms */ + fin2 = ('f' | 'i'<<8 | 'n'<<16 | '2'<<24), /* Terminal Forms #2 */ + fin3 = ('f' | 'i'<<8 | 'n'<<16 | '3'<<24), /* Terminal Forms #3 */ + medi = ('m' | 'e'<<8 | 'd'<<16 | 'i'<<24), /* Medial Forms */ + med2 = ('m' | 'e'<<8 | 'd'<<16 | '2'<<24), /* Medial Forms #2 */ + init = ('i' | 'n'<<8 | 'i'<<16 | 't'<<24), /* Initial Forms */ + ljmo = ('l' | 'j'<<8 | 'm'<<16 | 'o'<<24), /* Leading Jamo Forms */ + vjmo = ('v' | 'j'<<8 | 'm'<<16 | 'o'<<24), /* Vowel Jamo Forms */ + tjmo = ('t' | 'j'<<8 | 'm'<<16 | 'o'<<24), /* Trailing Jamo Forms */ + rphf = ('r' | 'p'<<8 | 'h'<<16 | 'f'<<24), /* Reph Form */ + blwf = ('b' | 'l'<<8 | 'w'<<16 | 'f'<<24), /* Below-base Forms */ + half = ('h' | 'a'<<8 | 'l'<<16 | 'f'<<24), /* Half Forms */ + pstf = ('p' | 's'<<8 | 't'<<16 | 'f'<<24), /* Post-base Forms */ + abvf = ('a' | 'b'<<8 | 'v'<<16 | 'f'<<24), /* Above-base Forms */ + pref = ('p' | 'r'<<8 | 'e'<<16 | 'f'<<24), /* Pre-base Forms */ + numr = ('n' | 'u'<<8 | 'm'<<16 | 'r'<<24), /* Numerators */ + frac = ('f' | 'r'<<8 | 'a'<<16 | 'c'<<24), /* Fractions */ + dnom = ('d' | 'n'<<8 | 'o'<<16 | 'm'<<24), /* Denominators */ + cfar = ('c' | 'f'<<8 | 'a'<<16 | 'r'<<24), /* Conjunct Form After Ro */ + aalt = ('a' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Access All Alternates */ + abvm = ('a' | 'b'<<8 | 'v'<<16 | 'm'<<24), /* Above-base Mark Positioning */ + abvs = ('a' | 'b'<<8 | 'v'<<16 | 's'<<24), /* Above-base Substitutions */ + afrc = ('a' | 'f'<<8 | 'r'<<16 | 'c'<<24), /* Alternative Fractions */ + akhn = ('a' | 'k'<<8 | 'h'<<16 | 'n'<<24), /* Akhand */ + apkn = ('a' | 'p'<<8 | 'k'<<16 | 'n'<<24), /* Kerning for Alternate Proportional Widths */ + blwm = ('b' | 'l'<<8 | 'w'<<16 | 'm'<<24), /* Below-base Mark Positioning */ + blws = ('b' | 'l'<<8 | 'w'<<16 | 's'<<24), /* Below-base Substitutions */ + calt = ('c' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Contextual Alternates */ + Case = ('c' | 'a'<<8 | 's'<<16 | 'e'<<24), /* Case-sensitive Forms */ + ccmp = ('c' | 'c'<<8 | 'm'<<16 | 'p'<<24), /* Glyph Composition / Decomposition */ + chws = ('c' | 'h'<<8 | 'w'<<16 | 's'<<24), /* Contextual Half-width Spacing */ + cjct = ('c' | 'j'<<8 | 'c'<<16 | 't'<<24), /* Conjunct Forms */ + clig = ('c' | 'l'<<8 | 'i'<<16 | 'g'<<24), /* Contextual Ligatures */ + cpct = ('c' | 'p'<<8 | 'c'<<16 | 't'<<24), /* Centered CJK Punctuation */ + cpsp = ('c' | 'p'<<8 | 's'<<16 | 'p'<<24), /* Capital Spacing */ + cswh = ('c' | 's'<<8 | 'w'<<16 | 'h'<<24), /* Contextual Swash */ + curs = ('c' | 'u'<<8 | 'r'<<16 | 's'<<24), /* Cursive Positioning */ + cv01 = ('c' | 'v'<<8 | '0'<<16 | '1'<<24), /* 'cv99' Character Variant 1 – Character Variant 99 */ + c2pc = ('c' | '2'<<8 | 'p'<<16 | 'c'<<24), /* Petite Capitals From Capitals */ + c2sc = ('c' | '2'<<8 | 's'<<16 | 'c'<<24), /* Small Capitals From Capitals */ + dist = ('d' | 'i'<<8 | 's'<<16 | 't'<<24), /* Distances */ + dlig = ('d' | 'l'<<8 | 'i'<<16 | 'g'<<24), /* Discretionary Ligatures */ + dtls = ('d' | 't'<<8 | 'l'<<16 | 's'<<24), /* Dotless Forms */ + expt = ('e' | 'x'<<8 | 'p'<<16 | 't'<<24), /* Expert Forms */ + falt = ('f' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Final Glyph on Line Alternates */ + flac = ('f' | 'l'<<8 | 'a'<<16 | 'c'<<24), /* Flattened Accent Forms */ + fwid = ('f' | 'w'<<8 | 'i'<<16 | 'd'<<24), /* Full Widths */ + haln = ('h' | 'a'<<8 | 'l'<<16 | 'n'<<24), /* Halant Forms */ + halt = ('h' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Alternate Half Widths */ + hist = ('h' | 'i'<<8 | 's'<<16 | 't'<<24), /* Historical Forms */ + hkna = ('h' | 'k'<<8 | 'n'<<16 | 'a'<<24), /* Horizontal Kana Alternates */ + hlig = ('h' | 'l'<<8 | 'i'<<16 | 'g'<<24), /* Historical Ligatures */ + hngl = ('h' | 'n'<<8 | 'g'<<16 | 'l'<<24), /* Hangul */ + hojo = ('h' | 'o'<<8 | 'j'<<16 | 'o'<<24), /* Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) */ + hwid = ('h' | 'w'<<8 | 'i'<<16 | 'd'<<24), /* Half Widths */ + ital = ('i' | 't'<<8 | 'a'<<16 | 'l'<<24), /* Italics */ + jalt = ('j' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Justification Alternates */ + jp78 = ('j' | 'p'<<8 | '7'<<16 | '8'<<24), /* JIS78 Forms */ + jp83 = ('j' | 'p'<<8 | '8'<<16 | '3'<<24), /* JIS83 Forms */ + jp90 = ('j' | 'p'<<8 | '9'<<16 | '0'<<24), /* JIS90 Forms */ + jp04 = ('j' | 'p'<<8 | '0'<<16 | '4'<<24), /* JIS2004 Forms */ + kern = ('k' | 'e'<<8 | 'r'<<16 | 'n'<<24), /* Kerning */ + lfbd = ('l' | 'f'<<8 | 'b'<<16 | 'd'<<24), /* Left Bounds */ + liga = ('l' | 'i'<<8 | 'g'<<16 | 'a'<<24), /* Standard Ligatures */ + lnum = ('l' | 'n'<<8 | 'u'<<16 | 'm'<<24), /* Lining Figures */ + locl = ('l' | 'o'<<8 | 'c'<<16 | 'l'<<24), /* Localized Forms */ + ltra = ('l' | 't'<<8 | 'r'<<16 | 'a'<<24), /* Left-to-right Alternates */ + ltrm = ('l' | 't'<<8 | 'r'<<16 | 'm'<<24), /* Left-to-right Mirrored Forms */ + mark = ('m' | 'a'<<8 | 'r'<<16 | 'k'<<24), /* Mark Positioning */ + mgrk = ('m' | 'g'<<8 | 'r'<<16 | 'k'<<24), /* Mathematical Greek */ + mkmk = ('m' | 'k'<<8 | 'm'<<16 | 'k'<<24), /* Mark to Mark Positioning */ + mset = ('m' | 's'<<8 | 'e'<<16 | 't'<<24), /* Mark Positioning via Substitution */ + nalt = ('n' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Alternate Annotation Forms */ + nlck = ('n' | 'l'<<8 | 'c'<<16 | 'k'<<24), /* NLC Kanji Forms */ + nukt = ('n' | 'u'<<8 | 'k'<<16 | 't'<<24), /* Nukta Forms */ + onum = ('o' | 'n'<<8 | 'u'<<16 | 'm'<<24), /* Oldstyle Figures */ + opbd = ('o' | 'p'<<8 | 'b'<<16 | 'd'<<24), /* Optical Bounds */ + ordn = ('o' | 'r'<<8 | 'd'<<16 | 'n'<<24), /* Ordinals */ + ornm = ('o' | 'r'<<8 | 'n'<<16 | 'm'<<24), /* Ornaments */ + palt = ('p' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Proportional Alternate Widths */ + pcap = ('p' | 'c'<<8 | 'a'<<16 | 'p'<<24), /* Petite Capitals */ + pkna = ('p' | 'k'<<8 | 'n'<<16 | 'a'<<24), /* Proportional Kana */ + pnum = ('p' | 'n'<<8 | 'u'<<16 | 'm'<<24), /* Proportional Figures */ + pres = ('p' | 'r'<<8 | 'e'<<16 | 's'<<24), /* Pre-base Substitutions */ + psts = ('p' | 's'<<8 | 't'<<16 | 's'<<24), /* Post-base Substitutions */ + pwid = ('p' | 'w'<<8 | 'i'<<16 | 'd'<<24), /* Proportional Widths */ + qwid = ('q' | 'w'<<8 | 'i'<<16 | 'd'<<24), /* Quarter Widths */ + rand = ('r' | 'a'<<8 | 'n'<<16 | 'd'<<24), /* Randomize */ + rclt = ('r' | 'c'<<8 | 'l'<<16 | 't'<<24), /* Required Contextual Alternates */ + rkrf = ('r' | 'k'<<8 | 'r'<<16 | 'f'<<24), /* Rakar Forms */ + rlig = ('r' | 'l'<<8 | 'i'<<16 | 'g'<<24), /* Required Ligatures */ + rtbd = ('r' | 't'<<8 | 'b'<<16 | 'd'<<24), /* Right Bounds */ + rtla = ('r' | 't'<<8 | 'l'<<16 | 'a'<<24), /* Right-to-left Alternates */ + rtlm = ('r' | 't'<<8 | 'l'<<16 | 'm'<<24), /* Right-to-left Mirrored Forms */ + ruby = ('r' | 'u'<<8 | 'b'<<16 | 'y'<<24), /* Ruby Notation Forms */ + rvrn = ('r' | 'v'<<8 | 'r'<<16 | 'n'<<24), /* Required Variation Alternates */ + salt = ('s' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Stylistic Alternates */ + sinf = ('s' | 'i'<<8 | 'n'<<16 | 'f'<<24), /* Scientific Inferiors */ + size = ('s' | 'i'<<8 | 'z'<<16 | 'e'<<24), /* Optical size */ + smcp = ('s' | 'm'<<8 | 'c'<<16 | 'p'<<24), /* Small Capitals */ + smpl = ('s' | 'm'<<8 | 'p'<<16 | 'l'<<24), /* Simplified Forms */ + ss01 = ('s' | 's'<<8 | '0'<<16 | '1'<<24), /* 'ss20' Stylistic Set 1 – Stylistic Set 20 */ + ssty = ('s' | 's'<<8 | 't'<<16 | 'y'<<24), /* Math Script-style Alternates */ + stch = ('s' | 't'<<8 | 'c'<<16 | 'h'<<24), /* Stretching Glyph Decomposition */ + subs = ('s' | 'u'<<8 | 'b'<<16 | 's'<<24), /* Subscript */ + sups = ('s' | 'u'<<8 | 'p'<<16 | 's'<<24), /* Superscript */ + swsh = ('s' | 'w'<<8 | 's'<<16 | 'h'<<24), /* Swash */ + test = ('t' | 'e'<<8 | 's'<<16 | 't'<<24), /* Test features, only for development */ + titl = ('t' | 'i'<<8 | 't'<<16 | 'l'<<24), /* Titling */ + tnam = ('t' | 'n'<<8 | 'a'<<16 | 'm'<<24), /* Traditional Name Forms */ + tnum = ('t' | 'n'<<8 | 'u'<<16 | 'm'<<24), /* Tabular Figures */ + trad = ('t' | 'r'<<8 | 'a'<<16 | 'd'<<24), /* Traditional Forms */ + twid = ('t' | 'w'<<8 | 'i'<<16 | 'd'<<24), /* Third Widths */ + unic = ('u' | 'n'<<8 | 'i'<<16 | 'c'<<24), /* Unicase */ + valt = ('v' | 'a'<<8 | 'l'<<16 | 't'<<24), /* Alternate Vertical Metrics */ + vapk = ('v' | 'a'<<8 | 'p'<<16 | 'k'<<24), /* Kerning for Alternate Proportional Vertical Metrics */ + vatu = ('v' | 'a'<<8 | 't'<<16 | 'u'<<24), /* Vattu Variants */ + vchw = ('v' | 'c'<<8 | 'h'<<16 | 'w'<<24), /* Vertical Contextual Half-width Spacing */ + vert = ('v' | 'e'<<8 | 'r'<<16 | 't'<<24), /* Vertical Alternates */ + vhal = ('v' | 'h'<<8 | 'a'<<16 | 'l'<<24), /* Alternate Vertical Half Metrics */ + vkna = ('v' | 'k'<<8 | 'n'<<16 | 'a'<<24), /* Vertical Kana Alternates */ + vkrn = ('v' | 'k'<<8 | 'r'<<16 | 'n'<<24), /* Vertical Kerning */ + vpal = ('v' | 'p'<<8 | 'a'<<16 | 'l'<<24), /* Proportional Alternate Vertical Metrics */ + vrt2 = ('v' | 'r'<<8 | 't'<<16 | '2'<<24), /* Vertical Alternates and Rotation */ + vrtr = ('v' | 'r'<<8 | 't'<<16 | 'r'<<24), /* Vertical Alternates for Rotation */ + zero = ('z' | 'e'<<8 | 'r'<<16 | 'o'<<24), /* Slashed Zero */ +} + +feature_id :: enum u32 { + isol, /* Isolated Forms */ + fina, /* Terminal Forms */ + fin2, /* Terminal Forms #2 */ + fin3, /* Terminal Forms #3 */ + medi, /* Medial Forms */ + med2, /* Medial Forms #2 */ + init, /* Initial Forms */ + ljmo, /* Leading Jamo Forms */ + vjmo, /* Vowel Jamo Forms */ + tjmo, /* Trailing Jamo Forms */ + rphf, /* Reph Form */ + blwf, /* Below-base Forms */ + half, /* Half Forms */ + pstf, /* Post-base Forms */ + abvf, /* Above-base Forms */ + pref, /* Pre-base Forms */ + numr, /* Numerators */ + frac, /* Fractions */ + dnom, /* Denominators */ + cfar, /* Conjunct Form After Ro */ + aalt, /* Access All Alternates */ + abvm, /* Above-base Mark Positioning */ + abvs, /* Above-base Substitutions */ + afrc, /* Alternative Fractions */ + akhn, /* Akhand */ + apkn, /* Kerning for Alternate Proportional Widths */ + blwm, /* Below-base Mark Positioning */ + blws, /* Below-base Substitutions */ + calt, /* Contextual Alternates */ + Case, /* Case-sensitive Forms */ + ccmp, /* Glyph Composition / Decomposition */ + chws, /* Contextual Half-width Spacing */ + cjct, /* Conjunct Forms */ + clig, /* Contextual Ligatures */ + cpct, /* Centered CJK Punctuation */ + cpsp, /* Capital Spacing */ + cswh, /* Contextual Swash */ + curs, /* Cursive Positioning */ + cv01, /* 'cv99' Character Variant 1 – Character Variant 99 */ + c2pc, /* Petite Capitals From Capitals */ + c2sc, /* Small Capitals From Capitals */ + dist, /* Distances */ + dlig, /* Discretionary Ligatures */ + dtls, /* Dotless Forms */ + expt, /* Expert Forms */ + falt, /* Final Glyph on Line Alternates */ + flac, /* Flattened Accent Forms */ + fwid, /* Full Widths */ + haln, /* Halant Forms */ + halt, /* Alternate Half Widths */ + hist, /* Historical Forms */ + hkna, /* Horizontal Kana Alternates */ + hlig, /* Historical Ligatures */ + hngl, /* Hangul */ + hojo, /* Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) */ + hwid, /* Half Widths */ + ital, /* Italics */ + jalt, /* Justification Alternates */ + jp78, /* JIS78 Forms */ + jp83, /* JIS83 Forms */ + jp90, /* JIS90 Forms */ + jp04, /* JIS2004 Forms */ + kern, /* Kerning */ + lfbd, /* Left Bounds */ + liga, /* Standard Ligatures */ + lnum, /* Lining Figures */ + locl, /* Localized Forms */ + ltra, /* Left-to-right Alternates */ + ltrm, /* Left-to-right Mirrored Forms */ + mark, /* Mark Positioning */ + mgrk, /* Mathematical Greek */ + mkmk, /* Mark to Mark Positioning */ + mset, /* Mark Positioning via Substitution */ + nalt, /* Alternate Annotation Forms */ + nlck, /* NLC Kanji Forms */ + nukt, /* Nukta Forms */ + onum, /* Oldstyle Figures */ + opbd, /* Optical Bounds */ + ordn, /* Ordinals */ + ornm, /* Ornaments */ + palt, /* Proportional Alternate Widths */ + pcap, /* Petite Capitals */ + pkna, /* Proportional Kana */ + pnum, /* Proportional Figures */ + pres, /* Pre-base Substitutions */ + psts, /* Post-base Substitutions */ + pwid, /* Proportional Widths */ + qwid, /* Quarter Widths */ + rand, /* Randomize */ + rclt, /* Required Contextual Alternates */ + rkrf, /* Rakar Forms */ + rlig, /* Required Ligatures */ + rtbd, /* Right Bounds */ + rtla, /* Right-to-left Alternates */ + rtlm, /* Right-to-left Mirrored Forms */ + ruby, /* Ruby Notation Forms */ + rvrn, /* Required Variation Alternates */ + salt, /* Stylistic Alternates */ + sinf, /* Scientific Inferiors */ + size, /* Optical size */ + smcp, /* Small Capitals */ + smpl, /* Simplified Forms */ + ss01, /* 'ss20' Stylistic Set 1 – Stylistic Set 20 */ + ssty, /* Math Script-style Alternates */ + stch, /* Stretching Glyph Decomposition */ + subs, /* Subscript */ + sups, /* Superscript */ + swsh, /* Swash */ + test, /* Test features, only for development */ + titl, /* Titling */ + tnam, /* Traditional Name Forms */ + tnum, /* Tabular Figures */ + trad, /* Traditional Forms */ + twid, /* Third Widths */ + unic, /* Unicase */ + valt, /* Alternate Vertical Metrics */ + vapk, /* Kerning for Alternate Proportional Vertical Metrics */ + vatu, /* Vattu Variants */ + vchw, /* Vertical Contextual Half-width Spacing */ + vert, /* Vertical Alternates */ + vhal, /* Alternate Vertical Half Metrics */ + vkna, /* Vertical Kana Alternates */ + vkrn, /* Vertical Kerning */ + vpal, /* Proportional Alternate Vertical Metrics */ + vrt2, /* Vertical Alternates and Rotation */ + vrtr, /* Vertical Alternates for Rotation */ + zero, /* Slashed Zero */ +} + + +shaping_table :: enum u8 { + GSUB, + GPOS, +} + +lookup_info :: struct { + MaximumBacktrackWithoutSkippingGlyphs: u32, + MaximumLookaheadWithoutSkippingGlyphs: u32, + MaximumSubstitutionOutputSize: u32, + MaximumInputSequenceLength: u32, + MaximumLookupStackSize: u32, +} + +gdef :: struct {} +cmap_14 :: struct {} +gsub_gpos :: struct {} +maxp :: struct {} +hea :: struct {} +iterate_features :: struct {} +shaper_properties :: struct {} +feature :: struct {} +head :: struct {} + +lookup_subtable_info :: struct { + MinimumBacktrackPlusOne: u32, + MinimumFollowupPlusOne: u32, +} + +font :: struct { + FileBase: [^]byte, + Head: ^head, + Cmap: ^u16, + Gdef: ^gdef, + Cmap14: ^cmap_14, + ShapingTables: [shaping_table]^gsub_gpos, + Fvar: rawptr, + Maxp: ^maxp, + + Hea: [orientation]^hea, + Mtx: [orientation]^u16, + + LookupInfo: lookup_info, + + GlyphCount: u32, + LookupCount: u32, + SubtableCount: u32, + + GlyphLookupMatrix: [^]u32, // [LookupCount * GlyphCount] bitmap + GlyphLookupSubtableMatrix: [^]u32, // [LookupSubtableCount * GlyphCount] bitmap + LookupSubtableIndexOffsets: [^]u32, // [LookupCount] + SubtableInfos: [^]lookup_subtable_info, // [LookupSubtableCount] + GposLookupIndexOffset: u32, + + Error: c.int, +} + +glyph_classes :: struct { + Class: u16, + MarkAttachmentClass: u16, +} + +glyph :: struct { + Codepoint: rune, + Id: u16, + Uid: u16, + Classes: glyph_classes, + + Decomposition: u64, + + Flags: glyph_flags, + + OffsetX: i32, + OffsetY: i32, + AdvanceX: i32, + AdvanceY: i32, + + ParentInfo: u32, + + // This is set by GSUB and used by GPOS. + // A 0-index means that we should attach to the last component in the ligature. + // + // From the Microsoft docs: + // To correctly access the subtables, the client must keep track of the component associated with the mark. + // + // For a given mark assigned to a particular class, the appropriate base attachment point is determined by which + // ligature component the mark is associated with. This is dependent on the original character string and subsequent + // character- or glyph-sequence processing, not the font data alone. While a text-layout client is performing any + // character-based preprocessing or any glyph-substitution operations using the GSUB table, the text-layout client + // must keep track of associations of marks to particular ligature-glyph components. + LigatureUid: u16, + LigatureComponentIndexPlusOne: u16, + + // Earlier on, we used to assume that, if a glyph had no advance, or had the MARK glyph class, then + // it could be handled as a mark in layout operations. This is inaccurate. + // Unicode makes a distinction between attached marks and standalone marks. For our purposes, attached + // marks are marks that have found a valid base character to attach to. In practice, this means that the + // font contains a valid display position/configuration for it in the current context. + // In contrast, standalone marks are marks that aren't attached to anything. Fonts may still have glyphs + // for them, in which case we want to display those just like regular glyphs that take up horizontal space + // on the line. When fonts don't have glyphs for them, they simply stay around as zero-width glyphs. + // Standalone marks have notably different behavior compared to attached marks, and so, once we start + // applying positioning features, it becomes worthwhile to track exactly which glyph has attached to which. + AttachGlyphIndexPlusOne: u16, // Set by GPOS attachments. + + // Set in GSUB and used in GPOS, for STCH. + JoiningFeature: joining_feature, + + // Unicode properties filled in by CodepointToGlyph. + JoiningType: unicode_joining_type, + Script: u8, + UnicodeFlags: u8, + SyllabicClass: u8, + SyllabicPosition: u8, + UseClass: u8, + CombiningClass: u8, + + MarkOrdering: u8, // Only used temporarily in NORMALIZE for Arabic mark reordering. +} + +glyph_array :: struct { + Glyphs: [^]glyph `fmt:"v,Count"`, + Count: u32, + TotalCount: u32, + Capacity: u32, + RequiredCapacity: u32, +} + +op_state_normalize :: struct { + CodepointsToDecomposeCount: un, + AboveBaseGlyphCount: un, +} + +op_state_gsub :: struct { + LookupIndex: un, + GlyphFilter: u32, + SkipFlags: u32, +} + +op_state_normalize_hangul :: struct { + LvtGlyphs: [4]glyph `fmt:"v,LvtGlyphCount"`, + LvtGlyphCount: un, +} + +op_state_op_specific :: struct #raw_union { + Normalize: op_state_normalize, + Gsub: op_state_gsub, + NormalizeHangul: op_state_normalize_hangul, +} + +lookup_indices :: struct { + FeatureId: u32, + SkipFlags: u32, + GlyphFilter: u32, + Count: u32, + Indices: [^]u16 `fmt:"v,Count"`, +} + +feature_set :: struct { + Flags: [(uint(len(feature_id)) + 63) / 64]u64, +} + +op :: struct { + Kind: op_kind, + Features: feature_set, +} + +// This needs to be updated when we change the op lists! +MAX_SIMULTANEOUS_FEATURES :: 16 +op_state :: struct { + WrittenCount: un, + GlyphIndex: un, + FrameCount: u32, + ResumePoint: u32, + + FeatureCount: u32, + FeatureLookupIndices: [MAX_SIMULTANEOUS_FEATURES]lookup_indices, + + OpSpecific: op_state_op_specific, + + // Ops are free to use the following as they please: + // LeftoverMemory: [LeftoverMemorySize]u8, +} + +op_list :: struct { + Ops: [^]u8, + Length: un, +} + +indic_script_properties :: struct { + ViramaCodepoint: rune, + BlwfPostOnly: u8, + RephPosition: reph_position, + RephEncoding: reph_encoding, + RightSideMatraPosition: syllabic_position, + AboveBaseMatraPosition: syllabic_position, + BelowBaseMatraPosition: syllabic_position, +} + +langsys :: struct {} + +shape_config :: struct { + Font: ^font, + Script: script, + Language: language, + Langsys: [shaping_table]^langsys, + OpLists: [4]op_list, + + Shaper: shaper, + ShaperProperties: ^shaper_properties, + + IndicScriptProperties: indic_script_properties, + Blwf: ^feature, + Pref: ^feature, + Pstf: ^feature, + Locl: ^feature, + Rphf: ^feature, + Half: ^feature, + Vatu: ^feature, + + // Indic + Virama: glyph, + + DottedCircle: glyph, + Whitespace: glyph, + + // Thai + Nikhahit: glyph, + SaraAa: glyph, +} + +shape_state :: struct { + Op: op, + Config: ^shape_config, + MainDirection: direction, + RunDirection: direction, + + GlyphArray: glyph_array, + ClusterGlyphArray: glyph_array, + + DottedCircleInsertIndex: u32, + + GlyphCountStartingFromCurrentCluster: u32, + + At: u32, + ResumePoint: u32, + OpGlyphOffset: u32, + ClusterGlyphCount: u32, + Ip: u32, + NextGlyphUid: u32, + + RequiredGlyphCapacity: u32, + + RealCluster: c.int, + ClusterAtStartOfWord: c.int, + WordBreak: c.int, + + // This must always be the last member! + OpState: op_state, +} + +cursor :: struct { + Direction: direction, + LastAdvanceX: i32, + X: i32, + Y: i32, +} + +break_type :: struct { + // The break code mostly works in relative positions, but we convert to absolute positions for the user. + // That way, breaks can be trivially stored and compared and such and it just works. + Position: u32, + Flags: break_flags, + Direction: direction, // Only valid if (Flags & BREAK_FLAG_DIRECTION). + Script: script, // Only valid if (Flags & BREAK_FLAG_SCRIPT). +} + +bracket :: struct { + Codepoint: rune, + Direction: u8, + Script: u8, +} + +break_state_flags :: distinct bit_set[break_state_flag; u32] +break_state_flag :: enum u32 { + STARTED = 0, + END = 1, + RAN_OUT_OF_REORDER_BUFFER_SPACE = 2, + + // Bidirectional flags + SAW_R_AFTER_L = 3, + SAW_AL_AFTER_LR = 4, + LAST_WAS_BRACKET = 5, +}; + +// In the worst case, a single call to BreakAddCodepoint would generate 4 breaks. +// We buffer breaks to reorder them before returning them to the user. +// This potentially requires infinite memory, which we don't have, so you may want to tweak this constant, +// although, really, if the defaults don't work, then you have likely found very strange/adversarial text. +BREAK_REORDER_BUFFER_FLUSH_THRESHOLD :: 4 +BREAK_REORDER_BUFFER_SIZE :: BREAK_REORDER_BUFFER_FLUSH_THRESHOLD * 2 +break_state :: struct { + Breaks: [BREAK_REORDER_BUFFER_SIZE]break_type `fmt:"v,Breaks"`, + BreakCount: u32, + MainDirection: direction, + + LastFlushedBreakPosition: u32, + CurrentPosition: u32, + + LastScripts: [2]u8, + + Brackets: [64]bracket `fmt:"v,BracketCount"`, + BracketCount: u32, + Flags: break_state_flags, + + FlagState: u32, // u8(break_flags)x4 + PositionOffset2: i16, + PositionOffset3: i16, + + WordBreakHistory: u32, // u8x4 + WordBreaks: u16, // u4x4 + WordUnbreaks: u16, // u4x4 + WordBreak2PositionOffset: i16, + + LineBreaks: u64, // u16x4 + // Instead of staying synchronized with LineBreaks/LineUnbreaks, + // this advances every character always. + // (This is only needed because ZWJ can create an unbreak while simultaneously being ignored.) + LineUnbreaksAsync: u64, // u16x4 + LineUnbreaks: u64, // u16x4 + LineBreakHistory: u32, // u8(line_break_class)x4 + LineBreak2PositionOffset: i16, + LineBreak3PositionOffset: i16, + + LastDirection: u8, + BidirectionalClass2: u8, + BidirectionalClass1: u8, + + JapaneseLineBreakStyle: japanese_line_break_style, + GraphemeBreakState: u8, + LastLineBreakClass: u8, + LastWordBreakClass: u8, + LastWordBreakClassIncludingIgnored: u8, +} + +decode :: struct { + Codepoint: rune, + + SourceCharactersConsumed: u32, + Valid: u32, +} \ No newline at end of file From 61edcdbfc5baeb8a2259d9a4a11b73d548bacb62 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 08:38:20 +0100 Subject: [PATCH 10/29] Add lib and build script (Windows Only) --- vendor/kb_text_shape/lib/kb_text_shape.lib | Bin 0 -> 710778 bytes vendor/kb_text_shape/src/build.bat | 8 ++++++++ vendor/kb_text_shape/src/kb_text_shape.c | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 vendor/kb_text_shape/lib/kb_text_shape.lib create mode 100644 vendor/kb_text_shape/src/build.bat create mode 100644 vendor/kb_text_shape/src/kb_text_shape.c diff --git a/vendor/kb_text_shape/lib/kb_text_shape.lib b/vendor/kb_text_shape/lib/kb_text_shape.lib new file mode 100644 index 0000000000000000000000000000000000000000..9ec799712135215b62cc153e828f714c6c035dfb GIT binary patch literal 710778 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%0DnQ?nd>xpI_WOYKuutd8N5Ed-6M)9I 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≪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

-qQ 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 +#include + +#define KB_TEXT_SHAPE_IMPLEMENTATION +#include "kb_text_shape.h" \ No newline at end of file From c056fb75127739f7f32b0226bbe0607c4fe63b9d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 08:38:29 +0100 Subject: [PATCH 11/29] Update procs --- vendor/kb_text_shape/kb_text_shape_procs.odin | 29 ++++++++++++------- vendor/kb_text_shape/src/kb_text_shape.h | 4 +-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index c320b2fdf..342be282c 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -1,21 +1,28 @@ package vendor_kb_text_shape +when ODIN_OS == .Windows { + foreign import lib { + "lib/kb_text_shape.lib", + } +} else { + foreign import lib { + "kb_text_shape.a" + } +} + import "core:c" #assert(size_of(c.int) == size_of(b32)) -#assert(size_of(u32) == size_of(b32)) - -TEXT_SHAPE_NO_CRT :: #config(KB_TEXT_SHAPE_NO_CRT, false) +#assert(size_of(u32) == size_of(b32)) @(default_calling_convention="c", link_prefix="kbts_") -foreign { - when !TEXT_SHAPE_NO_CRT { - FontFromFile :: proc(FileName: cstring) -> font --- - FreeFont :: proc(Font: ^font) --- - CreateShapeState :: proc(Font: ^font) -> ^shape_state --- - FreeShapeState :: proc(State: ^shape_state) --- - } - +foreign lib { + // when !TEXT_SHAPE_NO_CRT { + FontFromFile :: proc(FileName: cstring) -> font --- + FreeFont :: proc(Font: ^font) --- + CreateShapeState :: proc(Font: ^font) -> ^shape_state --- + FreeShapeState :: proc(State: ^shape_state) --- + // } FontIsValid :: proc(Font: ^font) -> int --- ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- diff --git a/vendor/kb_text_shape/src/kb_text_shape.h b/vendor/kb_text_shape/src/kb_text_shape.h index cee82f6da..43949fecf 100644 --- a/vendor/kb_text_shape/src/kb_text_shape.h +++ b/vendor/kb_text_shape/src/kb_text_shape.h @@ -22279,8 +22279,8 @@ KBTS_EXPORT kbts_decode kbts_DecodeUtf8(const char *Utf8, size_t Length) FollowupCharacterCount = 3; Result.Codepoint = First & 7; Result.Valid = 1; - } - break; + +} break; } if(Length > FollowupCharacterCount) From 8f115c5bc8e0f683f69a239ca2dbe9d6fd70dc05 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:03:56 +0100 Subject: [PATCH 12/29] Remove need for CRT with kb_text_shape and implement the allocating calls manually --- vendor/kb_text_shape/kb_text_shape_procs.odin | 92 +++++++++++++++--- vendor/kb_text_shape/kb_text_shape_types.odin | 2 +- vendor/kb_text_shape/lib/kb_text_shape.lib | Bin 710778 -> 699064 bytes vendor/kb_text_shape/src/kb_text_shape.c | 2 +- 4 files changed, 81 insertions(+), 15 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 342be282c..30ad97500 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -11,29 +11,30 @@ when ODIN_OS == .Windows { } import "core:c" +import "core:mem" #assert(size_of(c.int) == size_of(b32)) #assert(size_of(u32) == size_of(b32)) -@(default_calling_convention="c", link_prefix="kbts_") +@(default_calling_convention="c", link_prefix="kbts_", require_results) foreign lib { - // when !TEXT_SHAPE_NO_CRT { - FontFromFile :: proc(FileName: cstring) -> font --- - FreeFont :: proc(Font: ^font) --- - CreateShapeState :: proc(Font: ^font) -> ^shape_state --- - FreeShapeState :: proc(State: ^shape_state) --- - // } - - FontIsValid :: proc(Font: ^font) -> int --- + FontIsValid :: proc(Font: ^font) -> b32 --- ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- - PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> int --- + PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> b32 --- SizeOfShapeState :: proc(Font: ^font) -> un --- + PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- ResetShapeState :: proc(State: ^shape_state) --- - ShapeConfig :: proc(Font: ^font, Script: u32, Language: u32) -> shape_config --- + + ShapeConfig :: proc(Font: ^font, Script: script, Language: language) -> shape_config --- ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- - Shape :: proc(State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + ScriptIsComplex :: proc(Script: script) -> b32 --- + + Shape :: proc(State: ^shape_state, Config: ^shape_config, + MainDirection, RunDirection: direction, + Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + Cursor :: proc(Direction: direction) -> cursor --- PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- @@ -44,5 +45,70 @@ foreign lib { DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- - ScriptIsComplex :: proc(Script: script) -> b32 --- +} + +@(require_results) +PlaceShapeStateFromSlice :: proc "c" (Memory: []byte) -> ^shape_state { + return PlaceShapeState(raw_data(Memory), un(len(Memory))) +} + +@(require_results) +DecodeUtf8String :: proc "c" (String: string) -> decode { + return DecodeUtf8(raw_data(String), len(String)) +} + + +@(require_results) +ReadFontHeaderFromSlice :: proc "c" (Font: ^font, Data: []byte) -> un { + return ReadFontHeader(Font, raw_data(Data), un(len(Data))) +} +@(require_results) +ReadFontDataFromSlice :: proc "c" (Font: ^font, Scratch: []byte) -> un { + return ReadFontData(Font, raw_data(Scratch), un(len(Scratch))) +} +@(require_results) +PostReadFontInitializeFromSlice :: proc "c" (Font: ^font, Memory: []byte) -> b32 { + return PostReadFontInitialize(Font, raw_data(Memory), un(len(Memory))) +} + +@(require_results) +FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, Err: mem.Allocator_Error) { + ClonedData := mem.make_aligned([]byte, len(Data), 16, allocator) or_return + defer if Err != nil { + delete(ClonedData, allocator) + } + copy(ClonedData, Data) + + ScratchSize := ReadFontHeaderFromSlice(&Result, ClonedData) + Scratch := mem.make_aligned([]byte, ScratchSize, 16, allocator) or_return + MemorySize := ReadFontDataFromSlice(&Result, Scratch) + + Memory := Scratch + if MemorySize > ScratchSize { + delete(Scratch, allocator) + Memory = mem.make_aligned([]byte, MemorySize, 16, allocator) or_return + } + defer if Err != nil { + delete(Memory, allocator) + } + + PostReadFontInitializeFromSlice(&Result, Memory) + return + +} +FreeFont :: proc(Font: ^font, allocator: mem.Allocator) { + free(Font.FileBase, allocator) + free(Font.GlyphLookupMatrix, allocator) + Font^ = {} +} + +@(require_results) +CreateShapeState :: proc(Font: ^font, allocator: mem.Allocator) -> (Result: ^shape_state, Err: mem.Allocator_Error) { + Size := SizeOfShapeState(Font) + Memory := mem.make_aligned([]byte, Size, 16, allocator) or_return + Result = PlaceShapeStateFromSlice(Memory) + return +} +FreeShapeState :: proc(State: ^shape_state, allocator: mem.Allocator) { + free(State, allocator) } \ No newline at end of file diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index c50d3a26e..2868492a2 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -3,7 +3,7 @@ package vendor_kb_text_shape import "core:c" un :: distinct uintptr -sn :: distinct (i32 when size_of(uintptr) == 4 else i64) +// sn :: distinct (i32 when size_of(uintptr) == 4 else i64) joining_feature :: enum u8 { NONE, diff --git a/vendor/kb_text_shape/lib/kb_text_shape.lib b/vendor/kb_text_shape/lib/kb_text_shape.lib index 9ec799712135215b62cc153e828f714c6c035dfb..eb30f917e5dbade034ecb8b0b874f2dd9da26a78 100644 GIT binary patch delta 55179 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%0Ad=fIAgYju zbmiXxQQW&oWhpu`JRvzQIU>Gqys}iaA!`+uB1tKa0golOWcXI7tVH$+@6$Uzv3E*T z%D-5t!pHzJlG&^ABcj4x2xmh!=m%_B6qy_z7vHCMbaZ?aH`kwdis&mx=mOQtAwl}6 zz$b{xqpxiGGGfT(b5)e062qhW#wJE4MMiTQ1Hmn`h)buF^ceb@Kwmsnc;5BuMEAYv z>j55~eEEij=7fc>A9>^(f kk|!cB&RG;CPI0VPC!3v+4)IYbeZtN8qr+LVjrz*}1M@e(`~Uy| diff --git a/vendor/kb_text_shape/src/kb_text_shape.c b/vendor/kb_text_shape/src/kb_text_shape.c index 041023013..1d5ad0255 100644 --- a/vendor/kb_text_shape/src/kb_text_shape.c +++ b/vendor/kb_text_shape/src/kb_text_shape.c @@ -1,5 +1,5 @@ -#include #include +#define KB_TEXT_SHAPE_NO_CRT #define KB_TEXT_SHAPE_IMPLEMENTATION #include "kb_text_shape.h" \ No newline at end of file From 448702875ebda7eb0378da4d4698cbcc8f252c58 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:05:50 +0100 Subject: [PATCH 13/29] Add `vendor:kb_text_shape` to examples/all/all_vendor.odin --- examples/all/all_vendor.odin | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/all/all_vendor.odin b/examples/all/all_vendor.odin index a41f9f986..71bb6ef86 100644 --- a/examples/all/all_vendor.odin +++ b/examples/all/all_vendor.odin @@ -45,4 +45,7 @@ package all @(require) import stbi "vendor:stb/image" @(require) import "vendor:stb/rect_pack" @(require) import "vendor:stb/truetype" -@(require) import "vendor:stb/vorbis" \ No newline at end of file +@(require) import "vendor:stb/vorbis" + + +@(require) import "vendor:kb_text_shape" From c3e9b16d5a5469e0041536f3c646a200be026856 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:09:04 +0100 Subject: [PATCH 14/29] Update types --- vendor/kb_text_shape/kb_text_shape_procs.odin | 8 +++++--- vendor/kb_text_shape/kb_text_shape_types.odin | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 30ad97500..ab8e885a4 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -53,8 +53,10 @@ PlaceShapeStateFromSlice :: proc "c" (Memory: []byte) -> ^shape_state { } @(require_results) -DecodeUtf8String :: proc "c" (String: string) -> decode { - return DecodeUtf8(raw_data(String), len(String)) +DecodeUtf8String :: proc "c" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { + Decode := DecodeUtf8(raw_data(String), len(String)) + Codepoint, SourceCharactersConsumed, Valid = Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid + return } @@ -92,7 +94,7 @@ FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, delete(Memory, allocator) } - PostReadFontInitializeFromSlice(&Result, Memory) + _ = PostReadFontInitializeFromSlice(&Result, Memory) return } diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 2868492a2..592766100 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -1838,5 +1838,5 @@ decode :: struct { Codepoint: rune, SourceCharactersConsumed: u32, - Valid: u32, + Valid: b32, } \ No newline at end of file From 9a328e1c97c5fa427051182c9deea784323c00ca Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:17:02 +0100 Subject: [PATCH 15/29] Use multiple return values where possible --- vendor/kb_text_shape/kb_text_shape_procs.odin | 108 +++++++++++------- 1 file changed, 68 insertions(+), 40 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index ab8e885a4..bd598d5c4 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -18,59 +18,77 @@ import "core:mem" @(default_calling_convention="c", link_prefix="kbts_", require_results) foreign lib { - FontIsValid :: proc(Font: ^font) -> b32 --- - ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- - ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- - PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> b32 --- - SizeOfShapeState :: proc(Font: ^font) -> un --- + FontIsValid :: proc(Font: ^font) -> b32 --- + SizeOfShapeState :: proc(Font: ^font) -> un --- - PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- - ResetShapeState :: proc(State: ^shape_state) --- + ResetShapeState :: proc(State: ^shape_state) --- - ShapeConfig :: proc(Font: ^font, Script: script, Language: language) -> shape_config --- - ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- - ScriptIsComplex :: proc(Script: script) -> b32 --- + ShapeConfig :: proc(Font: ^font, Script: script, Language: language) -> shape_config --- + ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- + ScriptIsComplex :: proc(Script: script) -> b32 --- - Shape :: proc(State: ^shape_state, Config: ^shape_config, - MainDirection, RunDirection: direction, - Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + Shape :: proc(State: ^shape_state, Config: ^shape_config, + MainDirection, RunDirection: direction, + Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- - Cursor :: proc(Direction: direction) -> cursor --- - PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- - BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- - BreakStateIsValid :: proc(State: ^break_state) -> c.int --- - BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- - BreakFlush :: proc(State: ^break_state) --- - Break :: proc(State: ^break_state, Break: ^break_type) -> c.int --- - DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- - CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- - InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- + Cursor :: proc(Direction: direction) -> cursor --- + BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- + BreakStateIsValid :: proc(State: ^break_state) -> b32 --- + BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- + BreakFlush :: proc(State: ^break_state) --- + Break :: proc(State: ^break_state, Break: ^break_type) -> b32 --- + CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- + InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- } @(require_results) -PlaceShapeStateFromSlice :: proc "c" (Memory: []byte) -> ^shape_state { - return PlaceShapeState(raw_data(Memory), un(len(Memory))) +PlaceShapeState :: proc "c" (Memory: []byte) -> ^shape_state { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- + } + + return kbts_PlaceShapeState(raw_data(Memory), un(len(Memory))) } @(require_results) -DecodeUtf8String :: proc "c" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { - Decode := DecodeUtf8(raw_data(String), len(String)) - Codepoint, SourceCharactersConsumed, Valid = Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid - return +DecodeUtf8 :: proc "contextless" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- + } + + Decode := kbts_DecodeUtf8(raw_data(String), len(String)) + return Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid } @(require_results) -ReadFontHeaderFromSlice :: proc "c" (Font: ^font, Data: []byte) -> un { - return ReadFontHeader(Font, raw_data(Data), un(len(Data))) +ReadFontHeader :: proc "c" (Font: ^font, Data: []byte) -> un { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- + } + + return kbts_ReadFontHeader(Font, raw_data(Data), un(len(Data))) } @(require_results) -ReadFontDataFromSlice :: proc "c" (Font: ^font, Scratch: []byte) -> un { - return ReadFontData(Font, raw_data(Scratch), un(len(Scratch))) +ReadFontData :: proc "c" (Font: ^font, Scratch: []byte) -> un { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- + } + + return kbts_ReadFontData(Font, raw_data(Scratch), un(len(Scratch))) } @(require_results) -PostReadFontInitializeFromSlice :: proc "c" (Font: ^font, Memory: []byte) -> b32 { - return PostReadFontInitialize(Font, raw_data(Memory), un(len(Memory))) +PostReadFontInitialize :: proc "c" (Font: ^font, Memory: []byte) -> b32 { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> b32 --- + } + + return kbts_PostReadFontInitialize(Font, raw_data(Memory), un(len(Memory))) } @(require_results) @@ -81,9 +99,9 @@ FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, } copy(ClonedData, Data) - ScratchSize := ReadFontHeaderFromSlice(&Result, ClonedData) + ScratchSize := ReadFontHeader(&Result, ClonedData) Scratch := mem.make_aligned([]byte, ScratchSize, 16, allocator) or_return - MemorySize := ReadFontDataFromSlice(&Result, Scratch) + MemorySize := ReadFontData(&Result, Scratch) Memory := Scratch if MemorySize > ScratchSize { @@ -94,7 +112,7 @@ FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, delete(Memory, allocator) } - _ = PostReadFontInitializeFromSlice(&Result, Memory) + _ = PostReadFontInitialize(&Result, Memory) return } @@ -108,9 +126,19 @@ FreeFont :: proc(Font: ^font, allocator: mem.Allocator) { CreateShapeState :: proc(Font: ^font, allocator: mem.Allocator) -> (Result: ^shape_state, Err: mem.Allocator_Error) { Size := SizeOfShapeState(Font) Memory := mem.make_aligned([]byte, Size, 16, allocator) or_return - Result = PlaceShapeStateFromSlice(Memory) + Result = PlaceShapeState(Memory) return } FreeShapeState :: proc(State: ^shape_state, allocator: mem.Allocator) { free(State, allocator) -} \ No newline at end of file +} + +@(require_results) +PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph) -> (X, Y: i32) { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- + } + kbts_PositionGlyph(Cursor, Glyph, &X, &Y) + return +} From a449ad8ed865d4d7519f435812d4b332aefe5602 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:20:50 +0100 Subject: [PATCH 16/29] Keep `-vet` happy --- vendor/kb_text_shape/kb_text_shape_procs.odin | 2 +- vendor/kb_text_shape/kb_text_shape_types.odin | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index bd598d5c4..8880aeccf 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -6,7 +6,7 @@ when ODIN_OS == .Windows { } } else { foreign import lib { - "kb_text_shape.a" + "kb_text_shape.a", } } diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 592766100..d25d826d1 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -840,7 +840,7 @@ glyph_flag :: enum u32 { LIGATURE = 29, MULTIPLE_SUBSTITUTION = 30, -}; +} GLYPH_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT, .LJMO, .VJMO, .TJMO, .RPHF, .BLWF, .HALF, .PSTF, .ABVF, .PREF, .NUMR, .FRAC, .DNOM, .CFAR} @@ -1782,7 +1782,7 @@ break_state_flag :: enum u32 { SAW_R_AFTER_L = 3, SAW_AL_AFTER_LR = 4, LAST_WAS_BRACKET = 5, -}; +} // In the worst case, a single call to BreakAddCodepoint would generate 4 breaks. // We buffer breaks to reorder them before returning them to the user. From 9d1517092892042bab12c31c2947b70097b47e54 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:29:41 +0100 Subject: [PATCH 17/29] Change types where possible to the correct ones --- vendor/kb_text_shape/kb_text_shape_procs.odin | 11 +++- vendor/kb_text_shape/kb_text_shape_types.odin | 65 ++++++++++--------- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 8880aeccf..83c5a9d6f 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -52,14 +52,21 @@ PlaceShapeState :: proc "c" (Memory: []byte) -> ^shape_state { } @(require_results) -DecodeUtf8 :: proc "contextless" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { +DecodeUtf8 :: proc "contextless" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: bool) { + decode :: struct { + Codepoint: rune, + + SourceCharactersConsumed: u32, + Valid: b32, + } + @(default_calling_convention="c", require_results) foreign lib { kbts_DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- } Decode := kbts_DecodeUtf8(raw_data(String), len(String)) - return Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid + return Decode.Codepoint, Decode.SourceCharactersConsumed, bool(Decode.Valid) } diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index d25d826d1..eab25ae67 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -1519,14 +1519,14 @@ lookup_subtable_info :: struct { } font :: struct { - FileBase: [^]byte, - Head: ^head, - Cmap: ^u16, - Gdef: ^gdef, - Cmap14: ^cmap_14, + FileBase: [^]byte, + Head: ^head, + Cmap: ^u16, + Gdef: ^gdef, + Cmap14: ^cmap_14, ShapingTables: [shaping_table]^gsub_gpos, - Fvar: rawptr, - Maxp: ^maxp, + Fvar: rawptr, + Maxp: ^maxp, Hea: [orientation]^hea, Mtx: [orientation]^u16, @@ -1537,10 +1537,11 @@ font :: struct { LookupCount: u32, SubtableCount: u32, - GlyphLookupMatrix: [^]u32, // [LookupCount * GlyphCount] bitmap - GlyphLookupSubtableMatrix: [^]u32, // [LookupSubtableCount * GlyphCount] bitmap - LookupSubtableIndexOffsets: [^]u32, // [LookupCount] + GlyphLookupMatrix: [^]u32, // [LookupCount * GlyphCount] bitmap + GlyphLookupSubtableMatrix: [^]u32, // [LookupSubtableCount * GlyphCount] bitmap + LookupSubtableIndexOffsets: [^]u32, // [LookupCount] SubtableInfos: [^]lookup_subtable_info, // [LookupSubtableCount] + GposLookupIndexOffset: u32, Error: c.int, @@ -1600,7 +1601,7 @@ glyph :: struct { // Unicode properties filled in by CodepointToGlyph. JoiningType: unicode_joining_type, Script: u8, - UnicodeFlags: u8, + UnicodeFlags: unicode_flags, SyllabicClass: u8, SyllabicPosition: u8, UseClass: u8, @@ -1622,10 +1623,17 @@ op_state_normalize :: struct { AboveBaseGlyphCount: un, } + +skip_flags :: distinct bit_set[skip_flag; u32] +skip_flag :: enum { + ZWNJ = 0, + ZWJ = 1, +} + op_state_gsub :: struct { LookupIndex: un, - GlyphFilter: u32, - SkipFlags: u32, + GlyphFilter: glyph_flags, + SkipFlags: skip_flags, } op_state_normalize_hangul :: struct { @@ -1640,9 +1648,9 @@ op_state_op_specific :: struct #raw_union { } lookup_indices :: struct { - FeatureId: u32, - SkipFlags: u32, - GlyphFilter: u32, + FeatureId: feature_id, + SkipFlags: skip_flags, + GlyphFilter: glyph_flags, Count: u32, Indices: [^]u16 `fmt:"v,Count"`, } @@ -1673,14 +1681,14 @@ op_state :: struct { // LeftoverMemory: [LeftoverMemorySize]u8, } -op_list :: struct { - Ops: [^]u8, +op_list :: struct { // TODO(bill): is this actually a slice? e.g. `op_list :: []op_kind` + Ops: [^]op_kind, Length: un, } indic_script_properties :: struct { ViramaCodepoint: rune, - BlwfPostOnly: u8, + BlwfPostOnly: b8, RephPosition: reph_position, RephEncoding: reph_encoding, RightSideMatraPosition: syllabic_position, @@ -1691,13 +1699,13 @@ indic_script_properties :: struct { langsys :: struct {} shape_config :: struct { - Font: ^font, - Script: script, + Font: ^font, + Script: script, Language: language, - Langsys: [shaping_table]^langsys, - OpLists: [4]op_list, + Langsys: [shaping_table]^langsys, + OpLists: [4]op_list, - Shaper: shaper, + Shaper: shaper, ShaperProperties: ^shaper_properties, IndicScriptProperties: indic_script_properties, @@ -1729,7 +1737,7 @@ shape_state :: struct { GlyphArray: glyph_array, ClusterGlyphArray: glyph_array, - DottedCircleInsertIndex: u32, + DottedCircleInsertIndex: u32, GlyphCountStartingFromCurrentCluster: u32, @@ -1833,10 +1841,3 @@ break_state :: struct { LastWordBreakClass: u8, LastWordBreakClassIncludingIgnored: u8, } - -decode :: struct { - Codepoint: rune, - - SourceCharactersConsumed: u32, - Valid: b32, -} \ No newline at end of file From f055d8e7147dd2761557e77ccaa732eb25f9a1f2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:42:05 +0100 Subject: [PATCH 18/29] Slight change to `un` definition --- vendor/kb_text_shape/kb_text_shape_types.odin | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index eab25ae67..bc5ee35e8 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -2,8 +2,16 @@ package vendor_kb_text_shape import "core:c" -un :: distinct uintptr -// sn :: distinct (i32 when size_of(uintptr) == 4 else i64) +un :: distinct ( + uint when (size_of(uintptr) == size_of(uint)) else + u32 when size_of(uintptr) == 4 else + u64 +) +// sn :: distinct ( +// int when (size_of(uintptr) == size_of(int)) else +// i32 when size_of(uintptr) == 4 else +// i64 +// ) joining_feature :: enum u8 { NONE, @@ -745,7 +753,6 @@ language :: enum u32 { } break_flags :: distinct bit_set[break_flag; u32] - break_flag :: enum u32 { // Direction changes from left-to-right to right-to-left, or vice versa. DIRECTION = 0, From 37fffe78d618489fffcbd3b4cd7fd6856218298e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:48:45 +0100 Subject: [PATCH 19/29] Use `bit_field`s to describe internal `break_state` --- vendor/kb_text_shape/kb_text_shape_types.odin | 46 +++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index bc5ee35e8..8e1f1e3fe 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -1819,22 +1819,52 @@ break_state :: struct { BracketCount: u32, Flags: break_state_flags, - FlagState: u32, // u8(break_flags)x4 + FlagState: bit_field u32 { + _0: u32 | 8, // break_flags + _1: u32 | 8, // break_flags + _2: u32 | 8, // break_flags + _3: u32 | 8, // break_flags + }, PositionOffset2: i16, PositionOffset3: i16, - WordBreakHistory: u32, // u8x4 - WordBreaks: u16, // u4x4 - WordUnbreaks: u16, // u4x4 + WordBreakHistory: bit_field u32 { + _0: u32 | 8, + _1: u32 | 8, + _2: u32 | 8, + _3: u32 | 8, + }, + WordBreaks, + WordUnbreaks: bit_field u16 { + _0: u16 | 4, + _1: u16 | 4, + _2: u16 | 4, + _3: u16 | 4, + }, WordBreak2PositionOffset: i16, - LineBreaks: u64, // u16x4 + LineBreaks: bit_field u64 { + _0: u64 | 16, + _1: u64 | 16, + _2: u64 | 16, + _3: u64 | 16, + }, // Instead of staying synchronized with LineBreaks/LineUnbreaks, // this advances every character always. // (This is only needed because ZWJ can create an unbreak while simultaneously being ignored.) - LineUnbreaksAsync: u64, // u16x4 - LineUnbreaks: u64, // u16x4 - LineBreakHistory: u32, // u8(line_break_class)x4 + LineUnbreaksAsync, + LineUnbreaks: bit_field u64 { + _0: u64 | 16, + _1: u64 | 16, + _2: u64 | 16, + _3: u64 | 16, + }, + LineBreakHistory: bit_field u32 { + _0: u32 | 8, // break_flags + _1: u32 | 8, // break_flags + _2: u32 | 8, // break_flags + _3: u32 | 8, // break_flags + }, LineBreak2PositionOffset: i16, LineBreak3PositionOffset: i16, From 41e3bda2a9a359819d7a22ce7fbcc2f3a0a1e528 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:51:04 +0100 Subject: [PATCH 20/29] Fix enum size --- vendor/kb_text_shape/kb_text_shape_types.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 8e1f1e3fe..700f2b765 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -1632,7 +1632,7 @@ op_state_normalize :: struct { skip_flags :: distinct bit_set[skip_flag; u32] -skip_flag :: enum { +skip_flag :: enum u32 { ZWNJ = 0, ZWJ = 1, } From e5a4f3bcae39f467c3f613874b14356a90efe11d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 09:59:25 +0100 Subject: [PATCH 21/29] More type corrections/improvements --- vendor/kb_text_shape/kb_text_shape_types.odin | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 700f2b765..e0ca1580d 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -1607,7 +1607,9 @@ glyph :: struct { // Unicode properties filled in by CodepointToGlyph. JoiningType: unicode_joining_type, - Script: u8, + using _: bit_field u8 { + Script: script | 8, + }, UnicodeFlags: unicode_flags, SyllabicClass: u8, SyllabicPosition: u8, @@ -1783,8 +1785,8 @@ break_type :: struct { bracket :: struct { Codepoint: rune, - Direction: u8, - Script: u8, + using _: bit_field u8 { Direction: direction | 8 }, + using _: bit_field u8 { Script: script | 8 }, } break_state_flags :: distinct bit_set[break_state_flag; u32] @@ -1868,13 +1870,15 @@ break_state :: struct { LineBreak2PositionOffset: i16, LineBreak3PositionOffset: i16, - LastDirection: u8, - BidirectionalClass2: u8, - BidirectionalClass1: u8, + using LastDirectionBitField: bit_field u8 { + LastDirection: direction | 8, + }, + BidirectionalClass2: unicode_bidirectional_class, + BidirectionalClass1: unicode_bidirectional_class, JapaneseLineBreakStyle: japanese_line_break_style, GraphemeBreakState: u8, - LastLineBreakClass: u8, - LastWordBreakClass: u8, - LastWordBreakClassIncludingIgnored: u8, + LastLineBreakClass: line_break_class, + LastWordBreakClass: word_break_class, + LastWordBreakClassIncludingIgnored: word_break_class, } From 0a7cf8cfe18007f952994e68d175e11537e0c9fb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 10:07:17 +0100 Subject: [PATCH 22/29] Even more minor changes --- vendor/kb_text_shape/kb_text_shape_types.odin | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index e0ca1580d..8f34f2589 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -2,6 +2,8 @@ package vendor_kb_text_shape import "core:c" +#assert(size_of(b8) == size_of(bool)) + un :: distinct ( uint when (size_of(uintptr) == size_of(uint)) else u32 when size_of(uintptr) == 4 else @@ -1607,7 +1609,7 @@ glyph :: struct { // Unicode properties filled in by CodepointToGlyph. JoiningType: unicode_joining_type, - using _: bit_field u8 { + using ScriptBitField: bit_field u8 { Script: script | 8, }, UnicodeFlags: unicode_flags, @@ -1697,7 +1699,7 @@ op_list :: struct { // TODO(bill): is this actually a slice? e.g. `op_list :: [] indic_script_properties :: struct { ViramaCodepoint: rune, - BlwfPostOnly: b8, + BlwfPostOnly: bool, // b8 RephPosition: reph_position, RephEncoding: reph_encoding, RightSideMatraPosition: syllabic_position, @@ -1785,8 +1787,12 @@ break_type :: struct { bracket :: struct { Codepoint: rune, - using _: bit_field u8 { Direction: direction | 8 }, - using _: bit_field u8 { Script: script | 8 }, + using DirectionBitField: bit_field u8 { + Direction: direction | 8, + }, + using ScriptBitField: bit_field u8 { + Script: script | 8, + }, } break_state_flags :: distinct bit_set[break_state_flag; u32] From 676727114f124ce2e2f11a75357045e88b09cc7d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 10:30:16 +0100 Subject: [PATCH 23/29] Add to `ShapeDynamic` to kb_text_shape_procs.odin --- vendor/kb_text_shape/kb_text_shape_procs.odin | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 83c5a9d6f..991aaeab6 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -149,3 +149,14 @@ PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph) -> (X, Y: i32) { kbts_PositionGlyph(Cursor, Glyph, &X, &Y) return } + +@(require_results) +ShapeDynamic :: proc(State: ^shape_state, Config: ^shape_config, + MainDirection, RunDirection: direction, + Glyphs: ^[dynamic]glyph) -> c.int { + GlyphCount := u32(len(Glyphs^)) + GlyphCapacity := u32(cap(Glyphs^)) + Res := Shape(State, Config, MainDirection, RunDirection, raw_data(Glyphs^), &GlyphCount, GlyphCapacity) + resize(Glyphs, int(GlyphCount)) + return Res +} \ No newline at end of file From 62db888ac159a613bb44320d460e4e01639339c0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 10:47:26 +0100 Subject: [PATCH 24/29] Change `c.int` to `b32` --- vendor/kb_text_shape/kb_text_shape_procs.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 991aaeab6..2e5a4706b 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -34,7 +34,7 @@ foreign lib { Cursor :: proc(Direction: direction) -> cursor --- BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- BreakStateIsValid :: proc(State: ^break_state) -> b32 --- - BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- + BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: b32) --- BreakFlush :: proc(State: ^break_state) --- Break :: proc(State: ^break_state, Break: ^break_type) -> b32 --- CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- From 293267c7b24713a4559a305e8b64b75bc6ec0676 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 10:48:30 +0100 Subject: [PATCH 25/29] Move `#assert` to types file --- vendor/kb_text_shape/kb_text_shape_procs.odin | 8 ++------ vendor/kb_text_shape/kb_text_shape_types.odin | 4 +++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index 2e5a4706b..b45a40eaa 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -10,12 +10,8 @@ when ODIN_OS == .Windows { } } -import "core:c" import "core:mem" -#assert(size_of(c.int) == size_of(b32)) -#assert(size_of(u32) == size_of(b32)) - @(default_calling_convention="c", link_prefix="kbts_", require_results) foreign lib { FontIsValid :: proc(Font: ^font) -> b32 --- @@ -29,7 +25,7 @@ foreign lib { Shape :: proc(State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, - Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> b32 --- Cursor :: proc(Direction: direction) -> cursor --- BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- @@ -153,7 +149,7 @@ PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph) -> (X, Y: i32) { @(require_results) ShapeDynamic :: proc(State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, - Glyphs: ^[dynamic]glyph) -> c.int { + Glyphs: ^[dynamic]glyph) -> b32 { GlyphCount := u32(len(Glyphs^)) GlyphCapacity := u32(cap(Glyphs^)) Res := Shape(State, Config, MainDirection, RunDirection, raw_data(Glyphs^), &GlyphCount, GlyphCapacity) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 8f34f2589..40be5727a 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -2,7 +2,9 @@ package vendor_kb_text_shape import "core:c" -#assert(size_of(b8) == size_of(bool)) +#assert(size_of(b8) == size_of(bool)) +#assert(size_of(b32) == size_of(u32)) +#assert(size_of(b32) == size_of(c.int)) un :: distinct ( uint when (size_of(uintptr) == size_of(uint)) else From bfa0e1110a4685aaf4f2778d584d7fca4ccd0fa3 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Fri, 20 Jun 2025 06:34:51 -0400 Subject: [PATCH 26/29] mem: Don't print `Buddy_Allocator.tail` This is always a pointer past the end of the buffer given to `buddy_allocator_init`, which could be an invalid address. Printing may result in a segmentation violation. --- core/mem/allocators.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index a5a7d9951..335cf008e 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -2196,7 +2196,7 @@ The buddy allocator data. */ Buddy_Allocator :: struct { head: ^Buddy_Block, - tail: ^Buddy_Block, + tail: ^Buddy_Block `fmt:"-"`, alignment: uint, } From 4d4356e80607273c91f107c91c89c78feef22c73 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Fri, 20 Jun 2025 06:44:44 -0400 Subject: [PATCH 27/29] mem: Guard against `Buddy_Allocator` overwriting metadata --- core/mem/allocators.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index 335cf008e..0eacb1b65 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -2328,6 +2328,7 @@ buddy_allocator_alloc_bytes_non_zeroed :: proc(b: ^Buddy_Allocator, size: uint) } found.is_free = false data := ([^]byte)(found)[b.alignment:][:size] + assert(cast(uintptr)raw_data(data)+cast(uintptr)size < cast(uintptr)buddy_block_next(found), "Buddy_Allocator has made an allocation which overlaps a block header.") // ensure_poisoned(data) // sanitizer.address_unpoison(data) return data, nil From 565c612f4a9960df1faa86f30016aac1184bafa7 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 20 Jun 2025 11:52:18 +0100 Subject: [PATCH 28/29] Fix typo --- vendor/kb_text_shape/kb_text_shape_types.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/kb_text_shape/kb_text_shape_types.odin b/vendor/kb_text_shape/kb_text_shape_types.odin index 40be5727a..0c94318eb 100644 --- a/vendor/kb_text_shape/kb_text_shape_types.odin +++ b/vendor/kb_text_shape/kb_text_shape_types.odin @@ -206,7 +206,7 @@ language :: enum u32 { DARGWA = ('D' | 'A'<<8 | 'R'<<16 | ' '<<24), DARI = ('D' | 'R'<<8 | 'I'<<16 | ' '<<24), DAYI = ('D' | 'A'<<8 | 'X'<<16 | ' '<<24), - DEFAULT = ('d' | 'f'<<8 | 'l'<<16 | 't'), // Can be DFLT too.<<24.. + DEFAULT = ('d' | 'f'<<8 | 'l'<<16 | 't'<<24), // Can be DFLT too... DEHONG_DAI = ('T' | 'D'<<8 | 'D'<<16 | ' '<<24), DHANGU = ('D' | 'H'<<8 | 'G'<<16 | ' '<<24), DHIVEHI = ('D' | 'I'<<8 | 'V'<<16 | ' '<<24), From 6563230bd05bb2422f198d5ada45bbbcbcb49229 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 20 Jun 2025 13:05:17 +0200 Subject: [PATCH 29/29] Add kb to vendor/README.md --- vendor/README.md | 6 ++++++ vendor/kb_text_shape/src/LICENSE | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 vendor/kb_text_shape/src/LICENSE diff --git a/vendor/README.md b/vendor/README.md index 186e6422a..94202cbd0 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -158,3 +158,9 @@ Se also LICENCE in `cgltf` directory itself. ## fontstash (Port) [Font stash](https://github.com/memononen/fontstash) is a light-weight online font texture atlas builder. It uses stb_truetype to render fonts on demand to a texture atlas. + +## kb + +[kb](https://github.com/JimmyLefevre/kb) provides ICU-like text segmentation (i.e. breaking Unicode text by direction, line, word and grapheme). It also provides Harfbuzz-like text shaping for OpenType fonts, which means it is capable of handling complex script layout and ligatures, among other things. + +It does not handle rasterization. It will only help you know which glyphs to display where! \ No newline at end of file diff --git a/vendor/kb_text_shape/src/LICENSE b/vendor/kb_text_shape/src/LICENSE new file mode 100644 index 000000000..cad70fa11 --- /dev/null +++ b/vendor/kb_text_shape/src/LICENSE @@ -0,0 +1,19 @@ +zlib License + +(C) Copyright 2024-2025 Jimmy Lefevre + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. \ No newline at end of file

4)?859`J3X98J*i+KeP4Q8E7O;{;}C)yGMlQQ#3 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

+iv&2V1NE*Pv7iY3ZIK~E$!dS?axO8Y4BVT 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