All Downloads are FREE. Search and download functionalities are using the official Maven repository.

macos-amd64.libggml.dylib Maven / Gradle / Ivy

???? ?__TEXT

	__text__TEXT?<Ku?<?__stubs__TEXT????__stub_helper__TEXTߴ?ߴ?__const__TEXT??????__cstring__TEXT??&j??__gcc_except_tab__TEXT?????__objc_classname__TEXT????__objc_methname__TEXT????__unwind_info__TEXT?? ???__DATA_CONST
@
@__got__DATA_CONST
?
~__const__DATA_CONST?
??
__cfstring__DATA_CONST?
??
__objc_classlist__DATA_CONSTH1
H1
__objc_imageinfo__DATA_CONSTP1
P1
__DATA@
@
?	__la_symbol_ptr__DATA@
?@
?__objc_const__DATA?C
??C
__objc_selrefs__DATA`D
?`D
__objc_classrefs__DATA?E
@?E
__objc_data__DATA(F
P(F
__data__DATA?F
?F
__ggml_metallib__DATA?G
Ϛ?G
__bss__DATAP??Z__common__DATA?<H__LINKEDIT@??
0@rpath/libggml.dylib"?0????H?xhp,?AІ fP???v???
 Wy{F?5c?IoA?힀2 ?*`/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate`?,/System/Library/Frameworks/Foundation.framework/Versions/C/FoundationX#U/System/Library/Frameworks/Metal.framework/Versions/A/Metal`?/System/Library/Frameworks/MetalKit.framework/Versions/A/MetalKit8=8/usr/lib/libSystem.B.dylib0?@/usr/lib/libc++.1.dylibh??/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation8?/usr/lib/libobjc.A.dylib&?<?)?A? @loader_pathUH??AWAVATSH???H??A??I????t4??)?@?????)?P?????)?`?????)?p?????)e???)m???)u???)}?H??(???L??0???L??8???H?a?H?8?*vL?%J?I?<$H?5gKL??D??1??vH?????H?E?H?EH?E?H?0H?E?I?<$H?U?H???`wI?4$?
??u?yufDUH??AWAVAUATSH??xH??p???H??x???L??????L????????t@??)???????)???????)???????)???????)???????)???????)???????)????H?e?H?H?E?H??`???H?? ???H?EH?????H?0H?????H????I????H?? ???H?E?H?????H?E?H?????H?E?H??0???H???????L???cv??H??H??0???????
?LA??E?g?L???RtI??H?M?H??L??L???vD??A?DH?????L????
L???tH?z?H?H;E?uH??x[A\A]A^A_]???sf.?UH??SPH??H?H?H?3?1tH?;H??[]?tf.?????wUH??Hc?H?
?~Hc?H?]?H??I?f?UH???H?
????]?fff.?UH????W???q???y?????]?DUH??????n?]?UH????~??ʁ???????????r??@]Ã?????]?ffffff.?UH??H?????Ѓ?H??s1??cH???1?L?W??D?Oāz????D?LOāz???D?D?LOāz???D?D?LOāz???D?H??H9?u?H??t4H??H?O1?H?=?ff.?D?qġz????H??H9?u?]?fDUH??H??|H?B?I??I??I??D????H??s1??X1??I???1?ff.??????}F??D? ??}DF??D?@??}DF ??oD?`??}DF0H?? I???u?H??t;ff.???o???}FH??H??u??f???o???yFH??H??H??H9?|?H9???A??A)?H??H??H?I??t fD?????y???yFH??I??u?H??rW?????y???yF??D???y???yDF??D???y???yDF??D???y???yDFH??H9?u?]??w?@UH??H??}E1??11?ffffff.???}3G??r????L?@H??H9?L??~?I9??#H??L)?H?? rJ??L?WL9???H??N?GI9?syL??A??A)?H??H??H?I??tDD?GA??D??H??I??u?H??????G?????LG???L??LG???L??LG???L?H??H9?u??I??I???K?N?GI??0N??I??`E1?fDĂ}3DZ?Ă}3LZ?Ă}3TZ?Ă}3Z??r???r???r???r?ā~D??ā~L??ā~T??ā~?I?? M9?u?L9??
???]??w?ffffff.?UH??H????H??s1???H??H9?vH?VH9?v1??H??H???1???}X?u??}X
?u??}X?u??}X?u??}X%?u???o,???????f???r??E??????Ž????r???????EJ?`??}???Q+???,NH??H9?u?H9?u ?J??D??????f?FH??H9?t,D??E??A?????D????A???rȃ?@f?FH??H9?u?]??w?@UH??H????H??s1???H??H9?vH?VH9?v1??H??H???1???}X?t??}X
?t??}X?t??}X?t??}X%?t???o,???????f???r??E??????Ž????r???????EJ?`??}???Q+???,NH??H9?u?H9?u ?J??D??????f?FH??H9?t,D??E??A?????D????A???rȃ?@f?FH??H9?u?]??w?@UH????o?????y???]?f.?UH??]?f.?UH??H??H?u???lHiM??H??4?ׂ?CH?m?H??H???H??H?H?H??]?ffff.?UH??H??H?u??lHiM?@BH???S㥛? H?m?H??H???H??H?H?H??]?ffff.?UH??]?[lfDUH???]?DUH??]?}lfDUH???$s???Hk?xH?
ʹ????L ??T@??\X??_X??W@??O ??H??]??w?H?=!BH?mBH?
}B??1??g????UH??=)?t!H??H?H?=cB?)?]?	l]?UH??=????]?UH??WH?L?GL?OH?5RB?1?]?????f.?UH??AVSH??L?wH?5fBH?{B?1?????M??t:H?Bfff.?A?VI?M?FM?N?H??1??r???M?vM??u?H?5H?
E@?C1?? ???UH??Hk?xH?
?H?D]??UH??H?uH?uH? u
H?(??]?1?]?f?UH??H?uH? u
H?(??]?1?]?UH??H? u
H?(??]?1?]??UH??H?(??]?f?UH??H?(?H? 1?H?????]?fDUH???s??????sHc?H?
?q??]?H?=?<H?=H?
?=?1??
???ffff.?UH??p]?DUH??H?G0H;G8??]?ffffff.?UH??Hk?xH?
ϳH?tH?LH?GH9?tH9O0usH??H	?H?? t&H?H??H??H?OH??u%H?O H??u/H?(u9?=1???H??H?OH??t?H9G8u)H??H?O H??t?H9G@uH??H?(tH9GHu?]?1?]?ffffff.?UH??Hk?xH?
?H?tH?LH?GH9?tH9O0usH??H	?H?? t&H?H??H??H?OH??u%H?O H??u/H?(u9?=1???H??H?OH??t?H9G8u)H??H?O H??t?H9G@uH??H?(tH9GHu?]?1?]?ffffff.?UH??Hk?xH?
o?H?tH?LH?GH9?tH9O0umH??H	?H?? t0H?H??H?WH??u/H??H?O H??t3H9G@u>H??H?(t/?'1???H?WH??t?H?W8H??H?O H??u?H?(tH9GHu?]?1?]?DUH??Hk?xH?
ϱH?tH?LH?GH9?tH9O0udH??H	?H?? tH?H??H?WH??uH??H?O H??u"?(1???H?WH??t?H?W8H??H?O H??tH?O@H??H?(tH9GHu?]?1?]?fffff.?UH??H?O8?H9O0wH?W@H9?wH;WH??]?fffff.?UH??H?tH?tH? tH?(??]?ff.?UH??H?GH;Fu!H?GH;FuH?G H;F u
H?G(H;F(??]?1?]?ffff.?UH??H?G0H;F0u!H?G8H;F8uH?G@H;F@u
H?GHH;FH??]?1?]?ffff.?UH??L?WM??t9L?OM??t0L?G M??t'H?O(H??tH?FH??L	?H?? t/H?I??H??t/1?]ðH?~tH?~tH?~ tH?~(??]?1?A??H??u?H?FH??L	?H?? tH?I??H??t1?]?1?A??H??u?H?F H??L	?H?? tH?I???1?A??H??t1?]?H?F(H??H	?H?? tH?H???1???H???f?UH??AWAVAUATSH??(??O??t?c??;??u?= ??5H?u???a1?L?5??L?=?L?%??E1?f.?A????n???y???)]???z^??Yh??E???Yh??Y
h??h??a????Y??b??X?g??YE???W???q???y?ģy;??(E???Y?g?a??
?g??X???^???YE???yph??y?ģy#A??H??H???????H?u???`H?u???`H?=̏?8X?`H?u???o`???H?U1?L?=??1?E1?ff.?B?<9t;B?|9`tCB??9?tPB??9 ??I??H???H??u??L??H?H??u??1I??L?H??`?H?H??u'?L?H???I???H?H??uH??L?rH?XH???M??M??HE?uiH??tJH?E???
aH?}?H??H???V`????L?m??1I??L?H?? ?H?H??u??H?5?YE1??1?????H?UD??H?@H??L?H??M??H?L?h?@?J?H?H??????@??@3H?@PM??t A??u>1Ɇ
u?H??([A\A]A^A_]??w?H?=5H?P5H?
?6?+1???w?G???H?=?4H?,5H?
36?-1???w?#?????t??uH?
sY?H?
?Y?H?
HY???n???b?e??\?e??y???X???Y?fH?5_YH??Y??????H?=X4H??5??1?????DH????UH??SPH????~??tf??6_??k??u?H? ?H9???H?p?H9???H???H9???H??H9???H?`?H9???H???H9???H??H9???H?P?H9???H???H9???H???H9???H?@?H9???H???H9???H???H9???H?0?H9???H???H9???H?БH9???H? ?H9???H?p?H9???H???H9???H??H9???H?`?H9??H???H9??yH??H9??sH?P?H9??mH???H9??gH??H9??aH?@?H9??[H???H9??UH???H9??OH?0?H9??IH???H9??CH?ЖH9??=H? ?H9??7H?p?H9??1H???H9??+H??H9??%H?`?H9??H???H9??H??H9??H?P?H9??
H???H9??H??H9??H?@?H9???H???H9???H???H9???H?0?H9???H???H9???H?ЛH9???H? ?H9???H?p?H9???H???H9???H??H9???H?`?H9???H???H9???H??H9???H?P?H9???H???H9???H??H9??zH?@?H9??qH???H9??hH???H9??_H?0?H9??VH???H9??MH?РH9??d???81??1??'??????	?????????????	???
????????
???????????}??s??i??_??U??K??A??7??-??#?????????? ???!???"???#???$???%??&??'??(??)??*??+??,?|?-?u?.?n?/?g?0?`?1?Y?2?R?3?K?4?D?5?=?6?6?7?/?8?(?9?!?:??;??<??=??>H?@H??H?
Ά??{t	H?{??W1????H??[]?fff.?UH??H?O H??t	H?AH]?1?]?fDUH??H?UH?O(H?8tH??1?H?rH?q????]?@UH???G]?fDUH??@?w]?fDUH??H?G]?fDUH??H?]??UH??H?GH??t'H?w1?ffff.??xtH?@H??u?H??]?1?H??]?1?H??t??_L?"?L?B?Hk?xH??r1J?D0J?DN?TH??L	?H?? t*1?I???.fffff.?J?DH??J?D0JD?1?A??fDJ?TH??J?T8H?N?T I??N?T@J?D?I?J?T(H??J?THL?H9?HF?H???7?????x?D???H?@H??u??????UH??H?OH??t"H?Gffffff.??yt
H?IH??u?1?]?H]??UH??H?N?H??t"H?Gffffff.??yt
H?IH??u?1?]?H]??UH??E1?E1?]?UH??AWAVAUATSH??H??$?
?ӍC???? M??tM???M??tM???E1??M?ʼn?Hk?xL?i?N?TN?\H?I??H??L	?H?? L?U?t1?I??I??A?܃?s?#1?A??A??A?܃?r??L??H??I9?u?M??L?]?H?]?t@M??t;M?A?E?_H????Hk?xI?E0I?EN?DH??L	?H?? t1?I???}M????E1??A???L?w8M????H?G(L?G0I?M9???H?5?OH?"P1ۿL??1??:????Hk?xI?EH??I?E0JD?1?A??I?UH??I?U8M?E I??M?E@H?I?I?E(H??I?EHL?I9??I??N?4H??LD?E1?L?W M??tI?RI?E1?M??L?W M??u?1?I??_H???L?H?H?? L9??eL?_I?L?B L?H?XE???W???@A???zL?_I?ZM??ID?H?H?G H?GJ?H?E???e]??E?M??N??PMD?B?4B?D??E?ġ|DH?u?J?t(??W?ġ|D0ġ|DPġ|Dpġ|??ġ|??ġ|??N???N???N??ġ|?ġ|?(JDŽHH?uЅ?L?}???L?C??rH?4H)?H??0H?????1?I??I??M?M??I??tff.?L??M??H??I??u?I???\H?H??Hffffff.?H??H?T??H?T?H?T??H?T?H?T??H?T?H??H??I9?u??D????M?T$?M??I??I??I??sE1??M??I???L?4I??E1?@ġ|?ġ|L? ġ|T?@ġ|\?`ā|?? ???ā|??@???ā|??`???ā|\րġ|?рġ|?Ѡġ|???ġ|???ā|D֠ā|L??ā|T??ā|?I?? I????o???A??t6ġ|?ġ|L? ġ|T?@ġ|\?`ā|?ā|L? ā|T?@ā|\?`L9??m???L?{0H?CH??H?u?H	?H?? tH?H???1???I??H?C8H?CH?C@H?C H?CH?GH??H??H[A\A]A^A_]??w?I?L?W(????H?="&H?n&H?
>K??1??h???H?=&H?M&H?
AK??1??G???H?5?SH??S?H??1??
???H?=?%H?&H?
?K??1??	???H?=?%H??%H?
?S??1??????H?=?%H??%H?
?J??1???????UH??H??H?U?H?M??E1?E1??????H??]?f.?UH??H?? H?A?H?H?E?H?U?H?M?H?M?E1?E1?????H?
?H?	H;M?uH?? ]??NUH??H?? H??H?H?E?H?U?H?M?L?E?H?M?E1?E1??Z???H?
ÛH?	H;M?uH?? ]?????E????????D??H?E?H??A??D??H??L?U???1??dE????????D??D?????D???????n???}y?D????E??A???M?N`E1???I??L?]?M?M?I9??WA??sE1??fff.?A??@s
1??VfDE1?ffff.?ā~DY?ā~DY?ā~DY?ā~YI??@L9?u?H??t?H??I?Ӄ?r,fff.???z^H??I9?u?M??H???U???DfC?4^I??M9?u??>???E????????D??D????D???????n???}X?I?~`E1??fff.?I??H?I?I9??[E1?A?? r5Dġ~D??ġ~D??ġ~D??ġ~?I?? L9?u?I??H??t?@C?4?I??M9?u??E?????*???~??????????????????????????@D??I???YA??????1??D????D???????}?H??H??K????E??????????,?D??H?M?H??A??D??H??L?U???1??`E??????????,?D??D?????D???????n???}y?D????E??A???M?N`E1??%ffffff.?I??L?]?M?M?I9??GA??sE1??fff.?A??@s
1??VfDE1?ffff.?ā~DY?ā~DY?ā~DY?ā~YI??@L9?u?H??t?H??I???r,fff.???z^H??I9?u?M??H???U???DfC?^I??M9?u??>???E??????????,?D??D????D???????n???}X?I?~`E1???I??H?I?I9??KE1?A?? r5Dġ~D??ġ~D??ġ~D??ġ~?I?? L9?u?I??H??t?@C??I??M9?u??E??????~??????????????????????????@D??I???MA??????1??D????D???????}X?H??H??K?I?I??u????D??I???WA??????1???L)?H?I?41?L???E1?ffff.?ġy~?I??M9?u?E1?ffffff.?ġy~?I??M9?u?H??H?H?H9?u?M????H??I?1????y~?H??I9?u??jD?????D?????D????E??A?????n???}y?M?N`E1??f?I??L?]?M?M?I9??'E1?A??@rA?ā~DY?ā~DY?ā~DY?ā~YI??@L9?u?H??t?I??H???r,fff.?āz^I??M9?u?L??H??t?f?fA?^H??I9?u??n???D?????D?????D????E??A?????n???}y?M?N`E1??I??L?]?M?M?I9??gE1?A??@rA?ā~DY?ā~DY?ā~DY?ā~YI??@L9?u?H??t?I??H???r,fff.?āz^I??M9?u?L??H??t?f?fA?^H??I9?u??n???L)?H?4I?<1?M??fffff.?E1?ffff.?fC?HI??M9?u?E1?fB?OI??M9?u?H??I?H?H9?u?M????H??I?1?f?fA?NH??I9?u??nL)?H?4I?<1?M??E1?ffff.?fC?HI??M9?u?E1?fB?OI??M9?u?H??I?H?H9?u?M??tH??I?1?fDfA?FH??I9?u?H?E?H??8[A\A]A^A_]??w?H?=&H???1??s??????????????????????????????????????????????????????????????????????????????????????????????????????????2???????????????????@UH??H?N?ƺE1?E1?]?#???UH??SPH??H?GH???BL?CM???5H?s H???(H?K(H???H?{t9??_H??rrHk?xH?=??H?C0H?|:H??H	?H?? ??1?H???~H??H?????A?_I??rBHk?xL?
:?H?C0N?L
H??L	?H?? tn1?I???lHk?xH?=?H??H?C0HD:?Hk?xL?
??H??H?C0JD
?81???I??L?C8I?H??H?s@L?H??H?KHH?H??1?1???y?.1?A??I??L?C8I?H??H?s@L?H??H?KHH?H???w8H??H??[]?H?=H?SH?
???1??M???ffff.?UH??SI??H??L?_H?_I??H?w H??H??H	?H?? tVH?H??H??H??H	?H?? tTH??H?H??H??H??L	?H?? tQH??H?I??M??tI?H??tH?M??tI?8M??tI?1[]?1?????H??H	?H?? u???1????H??L	?H?? u???1?A??M??u??ff.?UH??D?Ik?xH?
~?L?TH?LL?OM9?t
H9O0??L??L	?H?? t)L??H?I??H??H?OH??u)H?W H??u3H?(u=?AD??1?A??H??H?OH??t?H9G8ubH??H?W H??t?H9G@uNH??H?(tH9GHu=A???eD??H?
;Hc?H???H?0?aH??Hc???,?]?H?OHc?I??L?G L??H??L	?H?? t?H?I??I??H??H	?H?? tAH??H?H??H??H??L	?H?? t>H??H?I??H??H??]?4??1?A??A??H??H	?H?? u???1????H??L	?H?? u‰?1?A??։?]??H?0??H??Hc??HH?
Ƀ??,?]?H?0??H??Hc??]?H?0??H??Hc??H]?H?0??H??Hc΋?]?H?0??H??Hc??H????n???,?]?H?=H??
?N1??R???H?=?H?7H?
7?I1??1???H?=?H?H?
?
??1?????H?=?H??H?
I
?01?????H?=?H??H?
H
?51??ξ??H?=gH??H?
H
?:1?譾??H?=FH??H?
m
?D1?茾?????????? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??????????????? ??? ??? ???????UH??H??wxHc?H?w0H?Lc?L?O8Hc?H?O@I?Ic?H?WHL?H?5`Hc?H?????,]??H?
????,?]??]??]Ë]??????n???,?]?H?=%
H????1??r???f?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@UH??A??D?Ik?xH?
?L?\H?LL?WM9?t
H9O0??L??L	?H?? t)L??H?I??H??H?OH??u)H?W H??u3H?(u=?AD??1?A??H??H?OH??t?H9G8ugH??H?W H??t?H9G@uSH??H?(tH9GHuBA????D??H?
xHc?H???H?0????z*?H??Hc????]?H?OHc?I??L?G L??H??L	?H?? t?H?I??I??H??H	?H?? tAH??H?H??H??H??L	?H?? t>H??H?I??H??H??]?l??1?A??A??H??H	?H?? u???1????H??L	?H?? u‰?1?A??։?]?1H?0???z*???W???q???y?H??Hc???yH]?H?0??H??Hc?D?]?H?0??H??Hc?fD?H]?H?0??H??Hc?D??]?H?0???z*?H??Hc???~Ɖ?????????????r	??@f?H]Ã??????f?H]?H?=5H???{1?肺??H?=H?gH?
g	?v1??a???H?=?H?FH?
??l1??@???H?=?H?%H?
y?]1?????H?=?H?H?
x?b1??????H?=?H??H?
x?g1??ݹ??H?=vH??H?
??q1?輹??????K??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ???~??????????? ??? ??? ???????UH??D?I????Hc?H?w0H?Hc?H?W8Hc?H?G@H?Ic?H?OHH?H??Jc4?H?????z*???]???z*???W???q???y???y]?D?]?fD?]?D?]???z*???~Ɖ?????????????r	??@f?]Ã??????f?]?H?=H????1??`???n???z???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@UH??D?Ik?xH?
?{L?TH?LL?OM9?t
H9O0??L??L	?H?? t)L??H?I??H??H?OH??u)H?W H??u3H?(u=?AD??1?A??H??H?OH??t?H9G8uWH??H?W H??t?H9G@uCH??H?(tH9GHu2A???)D??H?
;Hc?H???H??Hc????]?H?OHc?I??L?G L??H??L	?H?? t?H?I??I??H??H	?H?? tAH??H?H??H??H??L	?H?? t>H??H?I??H??H??]????1?A??A??H??H	?H?? u???1????H??L	?H?? u‰?1?A??։?]?H??Hc??HH?
?z???]?H??Hc????*?]?H??Hc??H??*?]?H??Hc???*?]?H??Hc??H????n?]?H?=?H?<??1?????f?????x???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UH??H??w~Hc?H?w0H?Lc?L?O8Hc?H?O@I?Ic?H?WHL?H?5dHc?H?????]??H?
?x???]????*?]????*?]???*]??????n?]?H?=H??1??̴??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UH??D?Ik?xH?
NxL?TH?LL?OM9?t
H9O0??L??L	?H?? t)L??H?I??H??H?OH??u)H?W H??u3H?(u=?AD??1?A??H??H?OH??t?H9G8uWH??H?W H??t?H9G@uCH??H?(tH9GHu2A???ZD??H?
kHc?H???H??Hc????]?H?OHc?I??L?G L??H??L	?H?? t?H?I??I??H??H	?H?? tAH??H?H??H??H??L	?H?? t>H??H?I??H??H??]?o??1?A??A??H??H	?H?? u???1????H??L	?H?? u‰?1?A??։?]?4??W???q???y?H??Hc???yH]???,?H??Hcֈ]???,?H??Hc?f?Q]???,?H??Hc։?]?H??Hc???~Ɖ?????????????r	??@f?H]Ã??????f?H]?H?=??H?{??1??-????????H???????????????????????????????????????????????????????????????????????????????????????????k???~???????????????????????UH??D?I????Hc?H?w0H?Hc?H?W8Hc?H?G@H?Ic?H?OHH?H??Jc4?H?????]???W???q???y???y]???,Ј]???,?f?]???,Љ]???~Ɖ?????????????r	??@f?]Ã??????f?]?H?=??H?$??41??ְ??f?r???y????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UH??H??]?UH??H??]?UH??H??]?UH??H??H??
1??<@??t1@?|
??|@??t,@?|
??|@??t*@?<
H??H???u˹?Ƅ]?H??Ƅ]?H??Ƅ]ÐUH??SH???I??H??H??0???H??8???L??@???L??H?????t1??)?P?????)?`?????)?p?????)]???)e???)m???)u???)}?H?sH?H?E?H?? ???H?E?H?EH?E?H?0H?E?H??H?Mо@L????'H??rH?H;E?u
H??H???[]??1%@UH??AVSH??6H?K?I??E1?????I??H??H?5??H??1??????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHL??[A^]?ffff.?UH??AWAVATSL?M??t;I??H?_?M?M??t&A?u?M?'J?<#H??L????%??u?L??1?H??[A\A^A_]?UH??SPH??6H?K?E1?E1??A????@PH???H??[]?fff.?UH??AVSH??6H?K?I??E1?????I??H??H?5??H??1??????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FPI???L??[A^]?fffff.?UH??1?]?@UH??AWAVSPH??I??L?RM??t:L?KM??t1L?C M??t(H?s(H??tI?FH??L	?H?? t@H?I??H??tD?XI?~??I?~??I?~ ??I?~(???'1?A??H???I?FH??L	?H?? tH?I??H??t??1?A??H????I?F H??L	?H?? tH?I??H??t??1?A??H????I?F(H??H	?H?? ??H?H??H????A?6I?F???tKH??M??E1??d???I??I??H?58?H??1??I???I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?H??E1?E1?????I??A?GPM???I???L??H??[A^A_]?1???H???c???H?=.?H?z?H?
???1??t???@UH??]?!????UH??AVSH?BH;F?
H??I??H????L?KM??t1L?C M??t(H?s(H??tI?FH??L	?H?? t)H?I??H??t-??I?~taI?~ tZI?~(tS?1?A??H????I?F H??L	?H?? tH?I??H??t?}1?A??H??usI?F(H??H	?H?? tZH?H??H??uYA?H?????H??r
??t??u]I?F?κH??E1?E1??????@PL???H???[A^]?1???H??t?H?=??H?&?H?
??1?? ???H?=??H??H?
???1??????ffffff.?UH??1?]?@UH??AWAVSPH?z??H??H?z??H?{ ??H?{(??I??H?F0?6Hk?xL??mJ;D??I?VI?F@I?V8H9???I?F I9FH??I?F???tKH??M??E1?????I??I??H?5l?H??1??}???I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?H??E1?E1??M???I??A?GPM???I???L??H??[A^A_]?H?=o?H???H?
?1?赨??H?=N?H???H?
??1?蔨??@UH??]?????UH??j?u?H??]?fff.?UH??AWAVAUATSH??8H??I??H?lH?H?E?H?RH?SH?S H?S(H?FL?~L??H??M?f M?n(M??M??L??L9???A?6Hk?xL??kN?\N?TL9?t
M9V0?qH??L	?H?? tH?I??I??I??uI??u+I??u9?A1?A??I??I??t?I9F8?/I??I??t?I9F@?I??I??t
I9FH????AL?E??;?UI??M??I?N1???}tHM??E1?????I??I??H?5Y?H??1??j???I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?E1?E1??=???I??D?e?H?E??E?D?m?H?E?E??E?E?M?????E?A?Gd?E?A?GT?E?A?GX?E?A?G\?E?A?G`A?GPM???I???H?DjH?H;E???L??H??8[A\A]A^A_]?H?=??H?J?H?
q??'1??D???H?=??H?)?H?
??&1??#???H?=??H??H?
???(1?????H?=??H???H?
~?)1?????H?=z?H???H?
v?s1???????ff.?UH??j?u?B???H??]?fff.?UH??1?]?@UH??AWAVSPH??I??L?RM??t:L?KM??t1L?C M??t(H?s(H??tI?FH??L	?H?? t@H?I??H??tD?XI?~??I?~??I?~ ??I?~(???'1?A??H???I?FH??L	?H?? tH?I??H??t??1?A??H????I?F H??L	?H?? tH?I??H??t??1?A??H????I?F(H??H	?H?? ??H?H??H????A?6I?F???tKH??M??E1?????I??I??H?5x?H??1?????I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?H??E1?E1??Y???I??A?GPM???I???L??H??[A^A_]?1???H???c???H?=n?H???H?
A??T1?责??@UH??]?!????UH??1?]?@UH??AWAVSPH??I??L?RM??t:L?KM??t1L?C M??t(H?s(H??tI?FH??L	?H?? t@H?I??H??tD?XI?~??I?~??I?~ ??I?~(???'1?A??H???I?FH??L	?H?? tH?I??H??t??1?A??H????I?F H??L	?H?? tH?I??H??t??1?A??H????I?F(H??H	?H?? ??H?H??H????A?6I?F???tKH??M??E1?????I??I??H?5??H??1?????I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?H??E1?E1??i???I??A?GPM???I???L??H??[A^A_]?1???H???c???H?=~?H???H?
Q??t1??ġ??@UH??]?!????UH??1?]?@UH??AWAVSPH??I??L?RM??t:L?KM??t1L?C M??t(H?s(H??tI?FH??L	?H?? t@H?I??H??tD?XI?~??I?~??I?~ ??I?~(???'1?A??H???I?FH??L	?H?? tH?I??H??t??1?A??H????I?F H??L	?H?? tH?I??H??t??1?A??H????I?F(H??H	?H?? ??H?H??H????A?6I?F???tKH??M??E1??????I??I??H?5??H??1?????I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?H??E1?E1??y???I??A?GPM???I???L??H??[A^A_]?1???H???c???H?=??H???H?
a???1??ԟ??@UH??]?!????UH??SPH??6H?K?E1?E1???????@PH???H??[]?fff.?UH??AVSH??6H?K?I??E1?????I??H??H?5??H??1?????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FPI???L??[A^]?fffff.?UH??SPH??6H?K?E1?E1??1????@P	H???H??[]?fff.?UH??AVSH??6H?K?I??E1?????I??H??H?5??H??1??????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FP	I???L??[A^]?fffff.?UH??SPH??6H?K?E1?E1??q????@P
H???H??[]?fff.?UH??AVSH??6H?K?I??E1??0???I??H??H?5?H??1?????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FP
I???L??[A^]?fffff.?UH??SPH??6H?K?E1?E1?豾???@PH???H??[]?fff.?UH??AVSH??6H?K?I??E1??p???I??H??H?5D?H??1??U???H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FPI???L??[A^]?fffff.?UH??SPH??6H?K?E1?E1??????@PH???H??[]?fff.?UH??AVSH??6H?K?I??E1?谽??I??H??H?5??H??1?????H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHA?FPI???L??[A^]?fffff.?UH??SPH??6H?E?H?M?E1?E1??)????@P
H???H??[]?@UH??SH??(H??H?m_H?H?E???(>??)E???F??E?H?F(H?E?6H?MкE1?E1???????@PH???H?
_H?	H;M?uH??([]???UH??SH??(H??H??^H?H?E?H?E???F??E?H?F(H?E?H?M?1??E1?E1??F????@PH???H?
?^H?	H;M?uH??([]??fff.?UH??SPH?~ u@H??H?~(u6H?CH?E?H?M??E1?E1??ػ???@PH???H??[]?H?=?H?X?H?
???a1??R???f?UH??AVSH??H?FH;BucH??I??H?FH;BuSI?F H;C uII?F(H;C(u?H?E?H?M??E1?E1??F????@PL???H???H??[A^]?H?=q?H???H?
??q1?跙???UH??SPH??H??L?VM??t:L?KM??t1L?C M??t(H?s(H??tH?AH??L	?H?? t????@PL???L???H???H?
?BH?	H;M??H??([A^A_]É?1?A??H??t?H?=@?H???H?
E??=1??~??H?=?H?k?H?
???:1??e~??H?=??H?J?H?
c??51??D~??H?=??H?)?H?
Z??61??#~??H?=??H??H?
T??81??~??H?=??H???H?
B??91???}??H?=z?H???H?
R??;1???}??H?=Y?H???H?
H??<1??}?????
f.?UH??AVSH??0H?>AH?H?E?H?FH;B??H??I??H?J H?v H??H	?H?? tH??H?H??H??t???1???H????H?s(M?F(H??L	?H?? twH??H?I??H??uvI?F0I;F8??I?FH?E?H?CH?E?H?M?H?u?H?M?1??E1?E1??!????@PL???H???H?
u@H?	H;M?uWH??0[A^]É?1?A??H??t?H?=0?H?|?H?
P??P1??v|??H?=?H?[?H?
D??Q1??U|????
UH??1?]?@UH??AVSH??H????E?H?F0?6Hk?xL?,@J;D??H?KH?C@H?K8H9???H?C H9CH??H?K??tM?I??E1??$???I??H??H?5??H??1??	???H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FH??E1?E1??ל??I??H??tC?E?A?FTA?FPI???L??H??[A^]?H?=??H?B?H?
???e1??<{??H?=??H?!?H?
???s1??{??ff.?UH??]??????UH??j?u?H??]?fff.?UH??AWAVAUATSH??8H??>H?H?E?H?FH?FH?F I??H?F(H?RI?VI?V I?V(H9??H??I??M??L?M?H?N?6??}tHI??E1?趛??I??H??H?5??H??1?????H?C0I?G0H?C8I?G8H?C@I?G@H?CHI?GH?E1?E1??n???I??H?MH??@??D?e?D?m?H?E??E??M??E?E?M?????E?A?Gd?E?A?GT?E?A?GX?E?A?G\?E?A?G`A?GPI???M???H?h=H?H;E?uuL??H??8[A\A]A^A_]?H?=&?H?r?H?
1???1??ly??H?=?H?Q?H?
7???1??Ky??H?=??H?0?H?
???s1??*y???r?
DUH??j?u?2???H??]?fff.?UH??H??H?N8L?F@L?NHjP????H??]?ffffff.?UH??H??H?N8L?F@L?NHjP?????H??]?ffffff.?UH??L??L?F@L?NHjP????H??]?UH??L??L?F@L?NHjP????H??]?UH??AWAVATSH?FH?FH?F H?F(H?JH?JH?J H?J(H9???H??I??H?J?2?M??E1??Z???I??M??H?5.?H??L??1??a????
f?UH??AVSA??H??6H?K?E1?E1??]???H??tD?pT?@P(H???[A^]?H?=??H?֭H?
???s1???`??UH??AWAVSPA??H??6H?K?I??E1??????I??H??H?5ίH??1??߰??H?C0I?G0H?C8I?G8H?C@I?G@H?CHI?GHE?wTA?GP(I???L??H??[A^A_]?fffff.?UH??AVSA??H??6H?K?E1?E1??m???H??tD?pT?@P)H???[A^]?H?=??H??H?
???s1???_??UH??AWAVSPA??H??6H?K?I??E1??
???I??H??H?5ޮH??1?????H?C0I?G0H?C8I?G8H?C@I?G@H?CHI?GHE?wTA?GP)I???L??H??[A^A_]?fffff.?UH??????
??W?1?1?]?fDUH??AWAVSH??H??I??H??"H?H?E??6Hk?xL?
#N?\N?TM?FM9?t
M9V0?2L??L	?H?? t)L??H?I??I??M?VI??u)I?V H??u7I?~(uE?MD??1?A??I??M?VI??t?I9F8??I??I?V H??t?I9F@??H??I?~(t
I9FH??H??tQ?H????Hk?xN?|N?\L?KM9?t
L9[0??L??L	?H?? tCL??H?I??I??H?SH??uC?O??W???.?vpH?=??H??H?
????1???]??D??1?A??I??H?SH??tH9C8?mH??L?[ I???DH?{(?qM9???L9?????E???M?I?F???t_H??M??E1??~??I??I??H?5??H??1?裭??I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH??E???E???E???E??.H??E1?E1??_~??I????E???E???E???E?H???$H?E?I?GTA?GP*M???I???H?? H?H;E?u/L??H??[A^A_]?H?=L?H???H?
????1??\?????
H?=&?H?r?H?
????1??l\??H9C@uH?{(t1L??L9[Ht'H?=?H?:?H?
????1??4\??H9CHu?H?=ǨH??H?
_???1??
\??H?=??H??H?
S???1???[??H?=??H?ѨH?
J???1???[??H?=d?H???H?
`??s1??[??f.?UH??????
??W?1ҹ]?S???UH??1?]?D???@UH??AVSH??I???6I?N?E1?E1??|???@P+L???H???[A^]?UH??AWAVSPH??I???6I?N?M??E1??Z|??I??I??H?5.?H??1??????I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GHA?GP+M???I???L??H??[A^A_]?ff.?UH??E??A??????
??
??
??W???W???W?1???(?jj?H??]?DUH??AWAVAUATSH??XH?H?H?E?A???$I??H?z??I?~ ??I?~(??A?>?I??H?F I;F?'E??H??H??t ?;?ZD????D???H?H9C?dD?M???E???M???U???]???e???m?A?7I?O??}tLM??E1???z??I??I??H?5??H??1??é??I?G0I?D$0I?G8I?D$8I?G@I?D$@I?GHI?D$H?E1?E1??z??I???E?D?m??E??E??E??E?E???E???E???E???E???E???E???E???E???E???E???E???E?M???,?E??M??U??u??}?L?E?D?M?D?U?E?T$`D?U?E?T$d??E???xD$hL?U?M?T$xA?D$TA?L$XA?T$\A?t$`A?|$dM?D$hE?L$pA?D$P,M??$?M??$?I??$?H?H?H;E???L??H??X[A\A]A^A_]?H?=ͤH??H?
???+1??X??H?=??H???H?
???)1???W??H?=??H?פH?
??,1???W??H?=j?H???H?
i??-1??W??H?=I?H???H?
E??s1??W?????
H?=#?H?o?H?
:??01??iW??H?=?H?N?H?
2??11??HW???UH??E??A????v?
??
f?
??W???W???W?1???(?jj????H??]?DUH??EjP????H??]?ff.?UH??EjP?q???H??]?ff.?UH??D??E??A??1?jP?I???H??]?UH??D??E??A??1?jP?)???H??]?UH??AWAVAUATSH??XH?(H?H?E?H?z?dI??H?z ?VI?~(?KA?>?bI????E???M???U???]???e???m?H?F I;F?TE??E??H??A?7I?O?E1?E1??4w???E?D?m?D?e??E??M?M???E???E???E???E???E???E???E???E???E???E???E???E?H?????M??U??u??}?D?E?L?M?D?U?D?]?D?X`D?]?D?Xd??E???@hL?]?L?Xx?HT?PX?p\?x`D?@dL?HhD?Pp?@P-L???L???H???H?
?H?	H;M???H??X[A\A]A^A_]?H?=??H?סH?
x???1???T??H?=j?H???H?
????1??T??H?=I?H???H?
H???1??T??H?=(?H?t?H?
$??s1??nT????
f?UH??AVSH?? ??M???E?H??H?H?H?E?6H?K?I??E1??tu??I??H??H?5H?H??1??Y???H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FH??E???E???E???E?H?E?I?FTA?FP.I???H?wH?H;E?uL??H?? [A^]????
ffff.?UH??AWAVATSD??E??I??H??H??E1?jjjPj?tH??0I??H?PH?HH?H H??H???E???I??I?VI?N I?VH??L???*???H??L??H???????I?N I?WM?G H??H??[A\A^A_]????ffff.?UH??AWAVAUATSH??XH??D?e(?UH??H?H?E?E??tGH?F H;C ?L?^?Lc?LSHcU I?C?H??H??L?Mc?H??L	?H?? t(H?I??I???&L?^L;[??H?{(?E1??1?A??A??I??L?VC?	Hc?HSLc}I?B?I??H??H?Lc?H??L	?H?? tH?I??E??u?1???E??t	M????H???H?u?A??L?M??u0H??E??E??tH?M?L?Q M??L?U?H?S(?M??L?]?L?s ?H?E?L?u?H?U?H?M??E1?E1???r??D?m?D?}?H?M??M??M?M??M?M??M ?M?A?̉M?H?????M??H`?M??Hd?M??Hh?M??HlH?M?H?HT?M??H\?M??H`?@P0H?M?H???H???H?
?H?	H;M?urH??X[A\A]A^A_]?H?=??H??H?
??a1???P??H?=|?H?ȝH?
??b1???P??H?=[?H???H?
W??s1??P?????
H?=5?H???H?
y??X1??{P??H?=?H?`?H?
m??Z1??ZP??H?=?H???H?
???[1??9P??f?UH??AWAVATSD??I??H??H?vI??I???I?I??H??L??E1?jjjPj????H??0I??H?PH?HH?H H??H???????I??I?VI?N I?VH??L??????H??L??H???{???I?N I?WM?G H??H??[A\A^A_]?,???fff.?UH??AWAVSH??8H?,H?H?E?H?z ??H??H?z(??I??H?F H;C??I?~(??E???A???%H?CH??Lc?I??IFH?E?I?FH?E?H?E?H?E?H?M?1??E1?E1??)p??D?}?H?H?M?H?????M??H\H?M?H?HT?@P/L???H???H?
TH?	H;M???H??8[A^A_]?H?=?H?a?H?
)??1??[N??H?=??H?@?H?
6??1??:N??H?=ӚH??H?
???1??N??H?=??H???H?
??1???M??H?=??H?ݚH?
͡?1???M??H?=p?H???H?
l??s1??M?????
?UH??AWAVAUATSH??D?M?D?E?A??H??I???EH?E??EH?E?D?m H?VH?NL?N(L?N A?????I??H?SH?KL?K(L?K A?L??H???{???H??L??L??H??D??D?E?D?M?jjAU?u??u??"???H??0I??H?PH?HH?H L?C L?K(L??H???+???I??I?WI?O I?WM?G(A?L??L??????L??H??L??????I?T$I?L$ L?C L?K(L??H??H??[A\A]A^A_]?????ffff.?UH??AWAVAUATSH??(E??E??H??I??D?mH?H?H?E?1??E1?E1??m??D?e?D?}?D?m??M?M??M ?M??M(?M??M0?M?H??t`?M??H`?M??Hd?MĉHh?MȉHlH?M?H?HT?M??H\?M??H`?@P1L???H???H?
?H?	H;M?u0H??([A\A]A^A_]?H?=N?H???H?
J??s1??K?????
ffffff.?UH??AWAVATSI??H???ED?UD?] D?>H??AWjASARP?_???H??0I??H?PH?H H?H(H?HH??H???+???I??I?VI?N(I?VI?V H??L??????H??L??H???????I?WI?O M?G(M?N(H??H???"???H??H??1ҹA?A??????I?Ƌ0H?HH?ߺE1?E1???k??H??I??H?5??H??1??ݚ???CP L???H??[A\A^A_]?UH??ND?FH??E1?jjj?????H?? ]?ffff.?UH??H?FH?NI??I???I?I??H??H???H?H??H???A?jjP????H?? ]?ff.?UH??AWAVSH??(H??
H?H?E?H?F(H;B ??H??I??Lc???v????B???n???yY???s? ??????s? ??????????s? ???????????F??E?H?F H?E?H?B(H?E?H?M?1??E1?E1??j??D?xT?@P2L???H???H?
?H?	H;M?u,H??([A^A_]?H?=??H?	?H?
????1??I???K?
fffff.?UH??AWAVAUATSH??8E??H??H??H???z*?H?E????*NE????y?
?
A????*?A????j*???\???^???X??
???,?H?E???F??E?H?F(H?E?H?M?1??E1?E1??i??D?m?D?e?D?}?D?u?H??tE?M??HT?M??HX?M??H\?M??H`?@P3H???H?
?H?	H;M?u0H??8[A\A]A^A_]?H?=??H??H?
???s1???G???1?
@UH??AWAVAUATSH??XE??E??A??A??H????n???i"?H?oH???yn???a"]H?E????*f??[????*n??[???Q!???y!???)M???y??
??q????\???^???y
??
??X????,????n???????,????n???l???E???F ??)E?H?M?1??E1?E1??ch??D?m?D?e?D?}?D?u??M?M???[E???E?H??tY?M??H`?M??HdH?M?H?Hh?M??HT?M??HX?M??H\?M??H`?@P4H???H?
m
H?	H;M?u0H??X[A\A]A^A_]?H?=.?H?z?H?
*??s1??tF??輼
ffffff.?UH??AWAVAUATSH??H??)M???)E?E??E??A??H??I??H??	H?H?E?H?J1??E1?E1??bg??D?m?D?e?D?}??M?M??M?M???(E???y!E???[???E?H??t`?M??H`?M??HdH?M?H?Hh?M??HT?M??HX?M??H\?M??H`?@P5L???H???H?
X	H?	H;M?u0H??H[A\A]A^A_]?H?=?H?e?H?
??s1??_E??觻
f.?UH??ыV???ND?F D?N(]?f?UH??SH??(H??H?H?E?Hc?H9FyH??Hc?H9N??Ic?H9S ??Mc?L9C(???3H?E?H?M?H?U?L?E?H?MкE1?E1??f???@P6H???H?
kH?	H;M???H??([]?H?=0?H?|?H?
w??71??vD??H?=?H?[?H?
f??81??UD??H?=?H?:?H?
U??91??4D??H?=͐H??H?
D??:1??D???[?
fffff.?UH??]?????fDUH??SH??(H??H??H?H?E??6??n???y"???y"???y"???}%????C??E?H?MкE1?E1???w??d???@P7H???H?
CH?	H;M?uH??([]?軹
fffff.?UH??H?? ??.?vg??E???\???^???y
?
???,?H?E?H?M?1??E1?E1???U???M??fd????E???@T??E???@X??E???@\?@P8H?? ]?H?=??H?ЏH?
a??q1???B??f.?UH??AWAVSH??A??A??H??H?cH?H?E??Ѓ??H?H?NH?E?H?M?H?M?1??E1?E1???c??D?xTD?pX?@P9H???H?
H?	H;M?uH??[A^A_]?舸
ff.?UH??AVS??I??H?N??E1?E1??[c???XT?@P:L???[A^]?DUH??AWAVATSH??PH??H?H?E?Lc?L9f??I??I??H?N??E1?E1???b??H??H?:H?CPL???H?C(??C8??)E?L?{HL?e???C??E?H?E?H?E??3H?M?L???I??E1??b??I??H??H?5n?H??1?????M??tgH?E?I?FTA?FP"I?????(E???xF8M?~HH??H?H;E?uRL??H??P[A\A^A_]?H?=}?H?ɍH?
g???1???@??H?=\?H???H?
X??s1??@????
ffff.?UH??AWAVATSH??PL??H?7H?H?E?L?BL;F??I??I??I??H?N H?r H??H	?H?? tH??H?H??H??t???1???H????I?t$(M?O(H??L	?H?? tlH??H?I??H??ukH????U???M???E?tx?Hk?xH??L?TL?LH?CL9?t
L9K0??H??L	?H?? tWH?I??I??H?SH??uW?c??1?A??H??t?H?=0?H?|?H?
(???1??v?????W???.???I?D$?P1?A??I??H?SH??tH9C8?ZH??L?K I????H?{(?I?D$L?HI???L9??HL?E?H?M?H?E?H?u?H?M?1??E1?E1??;`????E???E???E???E???E???E?H??tY?M??H\H?M?H?HT?@P<Hǀ?L???L???L???H???H?
EH?	H;M?u.H??P[A\A^A_]?H?=?H?T?H?
??s1??N>??薴
H9C@uYH?{(t
L??L9KHuHH?=ˊH??H?
???1??>??H9CHu!H?=??H???H?
ݒ??1???=??H?=??H?ϊH?
????1???=??H?=b?H???H?
????1??=??H?=A?H???H?
-???1??=???UH??PL???H???H?
OH?	H;M???H?? [A^]?H?=?H?^?H?
_??H1??X?|A??Lc?H?KH??L	?H?? t
H??H?I?????1?A??L??H)?H??L	?H?? t
H?I??I???1?A??A??H?s H??L	?H?? t
H??H?I?????1?A??L??H)?H??L	?H?? t
H?I??I???1?A??A??I?L??L	?H?? t
L??H?I??I???D??1?A??A??I?L??L	?H?? t
L??H?I??I???D??1?A??A??H?CH?E?L?U?L?U?D??A??H?H?E?H?M?1??E1?E1??U??D?}?D?e?D?u?H??t{?M??H\H?M?H?HT?@P@H???H?
G?H?	H;M?upH??@[A\A^A_]?H?=
?H?V?H?
0???1??P3??H?=?H?5?H?
????1??/3??H?=?H??H?
Ħ?s1??3???V?
f?UH??AVSH??0H???H?H?E?>uiD??I??H?FH?E?Hc?H?E?Hc?H?E?H?E?H?M?1??E1?E1???S??H??tK?XT?@PAL???H?
K?H?	H;M?uKH??0[A^]?H?=H?^H?
"???1??X2??H?=?~H?=H?
???s1??72????
f?UH??SH??(H???H?H?E?9?uiH????H?H9FuzH?CH?E?Hc?H?E?H?E?H?E?H?Mо?E1?E1??!S???@PBH???H?
|?H?	H;M?uIH??([]?H?=E~H??~H?
n???1??1??H?=$~H?p~H?
V???1??j1??貧
DUH??E1?]?UH??AWAVAUATSH??8D?E?H??H?JH;K??I??L?JL;K??M?V L;S ??I?F(H?E?H;C(??I???H?E?Hk?xL???N?dJ?tM?GM9?t
I9w0??L??L	?H?? t)L??H?I??H??I?WH??u)I?w H??u7I?(uE?MD??1?A??H??I?WH??t?I9G8?hH??I?w H??t?I9G@?PH??I?(t
I9GH?;H?u?H?U?H?}?E?&Ik?xN?lJ?tL9?t
I9v0?0H??L	?H?? t!H??H?I??H??I??u I??u.H?}?uL?q(L??H???I??uL?T1?A??I??H?QH??t?H9A8?FH??L?Y I??t?H9A@?.I??L?q(L??H???I??t
H9AH?L??X???H??P???A?Hk?xN?tN?\I?@L9?t
M9X0??H??L	?H?? t&H?I??I??I?PH??u&I?P H??u4I?x(uB?J1?A??I??I?PH??t?I9@8??H??I?P H??t?I9@@??H??I?x(t
I9@H??L??`???L??@???L?}?A?Hk?xN?tN?\M?aM9?t
M9Y0?mL??L	?H?? t3L??H?I??I??M?iI??u3M?Y I??uAI?Q(H??h???H??uO?WD??1?A??I??M?iI??t?I9A8?I??M?Y I??t?I9A@??I??I?Q(H??h???H??t
I9AH??H?}?H?u?H?]?H?M?L??x???L??p???H?]?Hk?xN?|N?tL?SM9?H?M?H?????t
L9s0??L??L	?H?? t,L??H?I??I??H?SH??u,L?s I??u:L?{(I??uH?PD??1?A??I??H?SH??t?H9C8?PH??L?s I??t?H9C@?8I??L?{(I??t
H9CH? H??@????3H??`????FH??(???H;E??5H9?0????(H9? ????H??8????.H??P???H;E??H9?X????H9?H????I??H?}??I9??
I9??H9?h?????L??M??M??H??H??H??H??I9???H?M?H??H?H?U?H?E?H?E?H?M?H?}?1??E1?E1??uH???@PDH?M?H???H?M?H???H?M?H???H??x???H???H??p???H???H???H?
??H?	H;M??}H???[A\A]A^A_]?H?=MsH??sH?
?~?
1??&??H?=,sH?xsH?
?~?1??r&??H?=sH?WsH?
?~?1??Q&??H?=?rH?6sH?
|~?1??0&??H?=?rH?sH?
r~?1??&??H?=?rH??rH?
h~?1???%??H?=?rH??rH?
a~?1???%??H?=frH??rH?
N~?1??%??H?=ErH??rH?
u~?1??%??H?=$rH?prH?
?~?1??j%??H?=rH?OrH?
?~?1??I%??葛
@UH??SPH??H?U??6H?K?E1?E1??mF??H??tH?M?H?HT?@PFH???H??[]?H?=?qH??qH?
???s1???$??f.?UH??AVSH??H??H?U?6H?K?I??E1???E??I??H??H?5?sH??1???t??H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHH?E?I?FTA?FPFI???L??H??[A^]?f.?UH??E1?]?UH??AWAVSPH?M?H?FH;B??H??I??H?FH;B??I?F H;C ??I?F(H;C(??I?NA?6?E??tHM??E1??E??I??I??H?5?rH??1???s??I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GH?E1?E1???D??I??H??tMH?E?I?GTA?GPGM???I???L??H??[A^A_]?H?=?oH?1pH?
?r?x1??+#??H?=?oH?pH?
???s1??
#??f.?UH??A?]?????UH??SPH??H?U??6H?K?E1?E1??D??H??tH?M?H?HT?@PHH???H??[]?H?=DoH??oH?
@??s1??"??f.?UH??AVSH??H??H?U?6H?K?I??E1??C??I??H??H?5|qH??1??r??H?C0I?F0H?C8I?F8H?C@I?F@H?CHI?FHH?E?I?FTA?FPHI???L??H??[A^]?f.?UH??AVSH??H??I??H?M?6I?N?E1?E1??C??H??t&H?M?H?HT?@PIL???H???H??[A^]?H?=3nH?nH?
/??s1??y!??f?UH??AWAVSPH??I??H?M??6I?N?M??E1??B??I??I??H?5jpH??1??{q??I?F0I?G0I?F8I?G8I?F@I?G@I?FHI?GHH?E?I?GTA?GPIM???I???L??H??[A^A_]?ffffff.?UH??AWAVSPH??I??I??L?E??6I?O?E1?E1???A??H??t/H?M?H?HT?@PJL???L???H???H??[A^A_]?H?=mH?TmH?
??s1??N ??fffff.?UH??AWAVATSH??H??I??I??L?E؋6I?O?M??E1??^A??I??I??H?52oH??1??Cp??I?G0I?D$0I?G8I?D$8I?G@I?D$@I?GHI?D$HH?E?I?D$TA?D$PJM??$?M??$?I??$?L??H??[A\A^A_]?DUH??AWAVATSH?? M??A??I??H????tE??~^?3H?K?E1?E1??@??L?e?D?}?L?u?H??tXH?M?H?HdH?M?H?HT?MЉH\?MԉH`?@PKH???H?? [A\A^A_]?H?=?kH??kH?
??1?????H?=?kH??kH?
???s1?????ff.?UH??AWAVAUATSH??M??A??I??H????t	E?????3H?K?I??E1??????I??H??H?5?mH??1??n??H?C0I?E0H?C8I?E8H?C@I?E@H?CHI?EHL?e?D?}?L?u?M?udH?E?I?ET?E?A?E\?E?A?E`A?EPKI???L??H??[A\A]A^A_]?H?=?jH??jH?
	??1?????fff.?UH??AWAVAUATSH??M??E??I??H??I??A???tE??~hA?6I?N?E1?E1???>??L?m?D?e?L?}?H??taH?M?H?HdH?M?H?HT?MȉH\?M̉H`?@PLL???H???H??[A\A]A^A_]?H?=?iH?"jH?
I???1????H?=?iH?jH?
???s1?????ff.?UH??AWAVAUATSH??(M??E??I??H?U?I??A???t	E????A?6I?N?M??E1???=??H??I??H?5?kH??1???l??I?F0H?C0I?F8H?C8I?F@H?C@I?FHH?CHL?m?D?e?L?}?L?{dH?E?H?CT?E??C\?EĉC`?CPLL???H?E?H???H??H??([A\A]A^A_]?H?=?hH?iH?
+???1?????fffff.?UH??AWAVAUATSH??E??M??H??I??I??A???tE??~sA?7I?O?E1?E1??????QI??L?3N?$?M??u?H?5??E1??1????L?{I??I??v?I???L???l?
I??H??tkL?sH??[A\A^A_]????n???bޑ
??\?
??y???X???Y??
H?5^?H?x??????H?=S`H??a??1????H?5*?H?????B?
???^??H?=`H??a??1??d??@UH??H??? 1?H?
?
?f?H??H9?sH?<2H??H9?s?H??H??H9?r?H??wH??]?H??]?fffff.?UH??AVSH??tsH??H??tkH???=?
I??H??uq???n???b??
??\ǐ
??y???X???Ye?
H?5??H??????{??H?=4_H??`??1????H?58?E1??1??K??L??[A^]?UH??H?7H?H??H??H???]?B?
UH??SPH??H???
H?{H??[]??
ffffff.?UH??AWAVAUATSH??8E??M??I??H?U?I??H??H??H???1H?]?H??L??L??1???E????A?]L?m?A?E?Eȿ 謈
H????I??D?e?D?]?Hc?H??????I?]H??tk?H???͇
I??H??ulH?5??H?a????
???*??H?=?]H?~_??1??0??L??H?u?H??8[A\A]A^A_]?fH?5͇E1?1?????M?eI?uI?}D?E?E1?ffff.?O??L??H??H??H	?H?? t1?H??H???ffffff.?1????H???D1?H??H??H9??RH??H??????H??s/L9?t'H??H??H	?H?? u?1????H9?u???L??H???(L??K??I??I??M9??L???L?e?H?]?H??H?u??hLcsE;w??L?}??@I??L?}?IcGI9??~I?GJ??H???L?e?L??L?}?L??L???76H???H???L??L??L???6H???H???L??L??L????5H???H???L??L??L????5H???H???L??L??L????5H???H???L??L??L???5H???H???L??L??L???5H???H???L??L??L???s5H???H???L??L??L???W5H???H???L??L??L???;5H???L?e?E?|$L??H????IcD$D9??????H?M?H?IH9\???????H?=([H?t[H?
ͅ?rI1??n??I?}?*?
I?}?!?
H?}???
L??H??8[A\A]A^A_]??
H?=?ZH?"[H?
?h?GE1????H?=?ZH?[H?
}h?HE1???
??H?5??H???????
?????H?=rZH?
\??1??
??ffffff.?UH??AWAVSP??G9??&?O9??<L?N(L?W(M9??L?F?N?G@?F@?W?????Ѓ???s1??W???1?L?G M??L?^ M??L?G M?D?L?^ M?D?L?G M?D?L?^ M?D?L?G M?D?L?^ M?D?H??H9?u?H??t$fff.?H?W H??L?F I??H??H??u?G??????????s1??^A??A???1?fDL?_M??H?^L??L?_M?\?H?^L?\?L?_M?\?H?^L?\?L?_M?\?H?^L?\?H??I9?u?H??t$fff.?L?GM??L?^M??H??H??u?H???H?~???????????s1??[???1??L?GM??L?^M??L?GM?D?L?^M?D?L?GM?D?L?^M?D?L?GM?D?L?^M?D?H??H9?u?H??t$fff.?H?GH??L?FI??H??H??u?M???E1??%f.?A	?E?fffff.?I??sE1?E1??"H??&uA?UT?????A??E1?ff.?A???I???H??tH???t
A????I???H??tH???A??A??E????I???H??tH?????I???H??tH?????I???H??t
H???uzI???H??t
H???udI???H??t
H???uNI???H??t
H???u8I???H??t
H???u"I???H??tGH???t=fff.????K&I????9????A߃??-??????$????^&???8?????Hc3H??h???????Hc3H?}??y????{?A%H??h???L??p???L??x???L?U?L?]?L?}?E1?H??????9A	?E?4?I??H?????%ffff.?I??H?????HcCI9??wH?CN?,?I???H??t?H??H??H??H	?H?? t1?H??H????1?????H???D??1?????H9??H??H??A??A?A????s6I9???$H??H??H	?H?? t?H??1?H??H??H9?u???A	?E?4?I??H????l$?}??!???A???????I???H??H??H??L	?H?? t
1?I??H???1?A???H?????1?A???H9?tFH??H??A??A?A?????????I9??.$H??H??L	?H?? t?H??1?I??H??H9?u?H?=s}H??S??1????A??E???W#DH??H???????"L??I??H?CD??L?$?I??$?H??t?A?D$P?ȃ?P?M??$?M??$?M??$?H?
*Hc?H???I???H????H??h???L?E?I??H?}?H??L????L??H???I??$?H??????M???M????M??L?u?H?}?L??H??L??L????j???M???M???[L??P???H?}?L?u?E?l$T?3H?KL?u?L???E1?E1??%??H????#D?hT?@P)H???H??h???L?E?L??L??H?????H??P???H????I???H??t*H??h???L?E?I??H?}?H??L????I??L??H???I???H????H?}?I?BI;G??I?BI;G??I?B I;G ??I?B(I;G(??I??$?H??h???L?E?H?}?H????I???H??t'H??h???L?E?I??H?}?H??L???	?L??H???I???H????L?u?M??$?H?E???xF??E?I?F(H?E?H?M?L?m?H?}?L??1??E1?E1??7$???@PL???L?u?H??h???L?E?L???I???H??t'H??h???L?E?I??H?}?H??L???Y?L??H???I???H???OH?}?L?u???y%D$T???P???IcL$\H??@???McL$`M??$???@??E?L?????A?uH?M?L?u?L???M????w?o#??H??I??H?5CQH??1??TR??H???d!H?????H?CT?CP"L?????(?P?????C8H??@???H?CHI???H??P????3H?KL???E1?E1???"??I??H??H??H?5?RH??1???Q??A?EP I???I???L??L???d???H??h???L?E?L??H??P????.I???H??t'H??h???L?E?I??H?}?H??L?????L??H???I???H????I??$?H??h???L?E?H??H?}???H??I???I??$?H??????M???M??H?}?tFL?u?L?u?L??L??H??1?L???
]??H??h???L?E?L??L?u?L??H???@?I??H?}?H???I???H???2I??$?M??L?u?L??L??1??\??H??h???L?E?L??M??H????M???M??L?u?H?}?t?L?u?L??H??L??1?L???b^??H??h???L?E?L??L?u?L??H????H?}?H???I???H????M??$?L?u?L??L??L??1??^??L??L??H??1??\??H??h???L?E?L??L?u?H??H???Q??9M???M???<M??L?u?H?}?L??L??H??1?L???[?????|
?6M???M???M??L?u?H?}?L??H??L??1?L???v]????B|
L??H??1??M???M????M??L?u?H?}?L??H??L??1?L???3]???B
M???M????A?2I?JL?u?L?u?H?}?L???E1?E1?M???????@PL???L??H??H??1???Z??H??h???L?E?L??L?u?L??H?????tM???M???A?2I?JL?u?L?u?H?}?L???E1?E1?M???o???@PL???L??H??H??1??qZ??H??h???L?E?L??L?u?L??H????H?}?I???I??$?H??????I???H????H?}?H??H??L?}?H??L	?H?? ?GH??1?I??H???@M???M???DH?}?L?u???zD$T??E?A?2I?JL?u?L???E1?E1?M?????H?????M??HT?@PL???H???H??h???L?E?L??L??H?????I?????I???H?}???H?}?L??H??M???B??L??H?H I;M H?H(H;J(?AH?]?H??H???Hd??L???.M???M???`??zD$TM??L?u?H?}?L??H??1?L???.?????IcD$TIcL$XIcT$\H??@???McL$`I???L?u?H?}?uI???? A?2A;4$?B93?[H?? ???H??8???L??P???I???H??t90????|G??E?L?????H?M?H?}??I??L???????w???I??H??H?5?JH??1???K??M???H?????I?ETA?EP"I???H??8???I?]8L?? ???M?E@H??@???I?EHH??P???H???H????H??????I??$?H?????A?uHk?xH?
4?H?|H?LI?EH9?t
I9M0??H??H	?H?? ??
H?H???
I???H????I???Hk?xH?
ݾL?DH?|H?FL9?t
H9~0??H??L	?H?? ??H?I??H??H?VH????H?V H????H?~(????M???M???+H?}??3Hk?xH?
Z?H?|H?LH?CH9?L?u?t
H9K0??H??H	?H?? ?0H?H??H??H?KH???/H?K H???9H?{(???@I???H????M?\$TM?l$8M?|$@M?L$HA??9??*L?? ????M???M???gA?D$XA?L$\????A?T$`????W???)E??D???D???D???U??M?D?E?D?M?M??L?u?H?}?L??H??L???g????I???H????H??@????3H?KL?u?L?u?H?}?L???I??E1?L??P???????I??L??H?5HH??L??1??!I??H?C0I?E0H?C8I?E8H?C@I?E@H?CHI?EHH?5?KL??L??1???H??H?CI?EH?CI?EH?C8I?E0H?C0I?E8A?EP$I???H??h???L?E?L??L?u?H??@???L???
?H?}?H??P???H???I??$?H????FM???M??tp?3H?KL?u?L?u?H?}?L???E1?E1?L??P????=???@P+H???L???H??h???L?E?L??L?u?L??H???{?H?}?H??P???H???M???pI????b??I???H???ME?D$XE?L$\A?D$d??zD$h??zL$l??zT$p??z\$t??zd$x??zl$|L?u?L?u?H?}?L??H??P???H??L??L??jPL??躜??H??H??h???L?E?L??L?u?H??P????I???H????H??8???L??P???H?}?L?u?E1?A?|$lA??I?O??xD$T??)?@???I?D$dH?? ???L?m?L??1??E1?E1???????(?@?????)E?H?? ???H?M?D?u?H?????M??H`H?M?H?Hd?MȉHl??(E???@T?@P1H??P???H???H???H??h???L?E?L??H??8?????I???H????H??8???H?}?A?D$d??P???I?J??xD$T??)?@?????{D$h??[???)? ???L?m?L??1??E1?E1?M????????(?@?????)E???P????M???[? ?????E?H?????M??H`?M??HdH?M?H?Hh??(E???@T?@P5H???L???H??h???L?E?L??H??8????A?D$TH??
??H?
IHc?H???I???H????
H?}?M??A?2Hk?xH?
??H?|H?LI?BH9?t
I9J0??H??H	?H?? ??H?H????M???M???x
M??L?u?H?}?L??H??L??L???,\??H??h???L?E?L??M??L??H???0?H?}?H???I??$?H???1
?p
M???M???
L?u?L?u?H?}?L??H??L??L??L???????H??h???L?E?L??L?u?L???I???H????E?D$XE?L$\A?D$d??zD$h??zL$l??zT$p??z\$t??zd$x??zl$|H??L?u?L?u?H?}?L??H??P???H??L??L??PL??????H??H??h???L?E?L??L?u?H??P???H???.?H?}?H???M???*I??????M???M??tHL?u?L?u?H?}?L??L??L??H??L??????H??h???L?E?L??L?u?L??H????H?}?H???I???????I??$?M??L?u?L??L???fZ??H??h???L?E?L??M??H??H???j?I???H?}?I??$?H???k?I??Hk?xH???H?LHk?xH?|L??H	?H?? ??L??1?H??I???~??1?A????L?m?L?E?H????1?A????H9?t7H??H??A?T???s&I9??mH??H??L	?H?? t?1?I??H??H9?u?H??h???H??H	?H?? ??H??1?H??H????1?A??H??H?VH???&???H9F8??H??H?V H??????H9F@??H??H?~(t
H9FH?tM?ՋHk?xH?|H?LH?CH9?t
H9K0?oH??H	?H?? t&H?H??H??H?KH??u%H?K H??u3H?{(uA?I1???H??H?KH??t?H9C8?!H??H?K H??t?H9C@?	H??H?{(t
H9CH??H??h???L?E?H?}?H???|?I???L??I??$?H???~	?	L??@???L??P???H?}?H??H?ڹ?F??H??H??H??L	?H?? ??1?I??H????1???H??I?}I?U H??H??H??HD?H??tL9??I??H??I?}(t
H;?@?????L??H??L?u?L???E1?E1?????H?EH?HPL???L??H?????H??H??L?? ???L??@???j??????OG??H??H??h???L?E?L??H??????H???N?H??P???H???L?u?H?}?I???H???8H??P???A?uI?ML?u?L???E1?E1????H??I??H?5H@H??1??w????CP L???I???L??H???|??H??h???L?E?L??L?u?H??P????1???H??H?KH???????H9C8u5H??H?K H???????H9C@uH??H?{(tH9CHuL??L?u?M???`H?KL?u?L???E1?E1?M??????L??P???I??H??H?5y?H??1??>??A?EP I???I???L??L??P???L??H???-{??H??h???L?E?L??L??H?????I???L?u?H?}?I??$?H???????1?????L??p???L??x???H???@1?????H9?t6H??H??A????s&I9???H??H??H	?H?? t?1?H??H??H9?u?H?}?H??H??1?L???C???H?]?H???H??h???L?E?H??H????M??I???H?}?I???H???M??$?H??@???A?uI?ML?u?L?u?L???M??E1?L??P????N??H??I??H?? ???H?5<H??1??,=??I?E0H?C0I?E8H?C8I?E@H?C@I?EHH?CHH?5??H??H?? ???1???G1?????H?=W,H??-??F1?????H?==,H??-??F1?????H?=#,H??-??F1??p???H?=	,H??-??F1??V???H?=?+H??-??F1??H??H??@H9?uڨtHi? I??A??L??E1?H??1??6
H?]?H?{@1??6
A???=E1?fDHi? M?,I?<H??A??????W????????????????????`???@??? ?????????????????????G`??G@??G ???D?ፑ?????L?Hc?A?<6u'?q???????L?Hc?A?<6u?????u????7??A???D?L??? 5
L??1?H??L????w?i5
????H??Ic?H9??????I??A??????W???|????|????|????|????|?`??|?@??|? ??|???|????|????|????|????|G`??|G@??|G ??|?H?]?ffffff.?A??$???A??AL?Hc?A?<u+A?L$A??$?????L?Hc?A?<uA?????u??A???	?t(??L??L????3
H?]???	???D?? I??wH?lJc?H????E?(?A???E?P??E?ZA???w??3
H?U?H??D????3
??t/A??H??L? D???4
H?5T7L??D??H??E??1???2
H??H??[A\A]A^A_]??w?H?=?H??H?
7??N1???????t!??u%H?
<-?#??t6??u:H?
)-?8H?
8-?H?
?,H?5<-H?^-??p:
?EH?
-?H?
?,???n???bq9
??\y9
??y???X???Y:
H?5?,H?-???-???H?=?H??	??1??3??????????????????UH??AWAVAUATSH???H??@H??H??~H?H??$ H???`D?rE???tH??H?:tH?z??L?jM????I?upI?Ux1?A??1?A??
ADž(L?닋A9?~H?5C?D??1??S???D??H????1
D????????	??fD?? I????H?Jc?H????$(??D??$H?2H??$fDŽ$??W???)$??)D$ ??)D$@??)D$`??)?$???)?$???)?$???)?$???)?$??)?$ ??)?$@??)?$`??)?$???)?$???)?$???)?$?H????w????H?Ë?A9???????????A???$P??$ZA??0
H??H??D???0
??t/A??H??|L? D????0
H?54L??D??H??E??1??/
1???	H?{@?-0
H???[0
H???D??(M??uH??????H?i|H?H;?$ uTD??H?e?[A\A]A^A_]?H?=#H?oH?
???N1??i???H?=H?NH?
???N1??H????.
H?=?H?(H?
???N1??"???f?7???????????????UH??AWAVAUATSH???H??H??{H?H??$?H??H?QpH?qx????$????$H?H??$ H??$PH?FH??$(H??$XH??$0?z?N?H??1?H??$?H??$??0ffff.???H??$?H??H??$?HcBH9???H??$X??
???H?BH??$?L?4?A?FP????HI?VH??H?T$ H????HI?VH??H??$?H????HI?V H??H?T$0H???xHI?N(H??$?H???cH?ȃ?P?XHH?
??Hc?H?L?t$??H??$L????w? ??+HM???A?>?v???$H?\$?HI?F I?FI?F(????GH?KTH?L$@L???A?N?L$`A??E1?H?s8I??H?I?V8I??I?I?L$8I??I?$?|$`??w?T$@I??M9?u??GD??$D??$I?FdI???I???I???H?$L????wA?VT?PGM???A?????I???I?GH;F??M?gL;f?
?M?o L;n ???I?O(H;N(??H?t$`H??$?I?0?O?I???H??$?I???H??$?D??$M??I?G8H??$I?G@H??$ I?GHH??$`A?͋?$?1??L???????A??D??$?E??D?9?M?H?GTH??$?
?A(W???*???L$@??G\???$???W`??)?$???Gd??)D$ ??Gh??)?$???(???w?+
???$`??(D$ ??L$@?+
?x(?$?D??$@A9?H??$????H?????M??H?L$`L??H??$?L??H??$?L??I?4?I??I??H????$?I9?@??I9?A??A ?I9?@??I9?A??A ?H??$?I?Hc?$H??$@H9?$??'>H?|$ ?>H??$??>H?PH??$?H?PH??$?L?@8L??Lc?$L??$?I???H?L$ L?$?H?t$0H??H??$?H??H??$@L?,;M??M?M??L??L??I??H??$?H??H??L??L??$ M?L??H??L??$?M??L??$?L?|$L??H?P H??$L?X(H?P@H??$@L?pH1?H?T$`?FH?t$`H??L??$?H?L$I?L??$`I?H??$?H?$@H??H?t$`H;t$0??<H??$?L??$`L??$?L??H??$@H?t$@L??$??]ffffff.?H?t$@H?$?H??$?H??$?H?L??$@I?H??$`H?$?H?t$@H;?$??+???1?H??$`I??L??$@L??H??$??H??H??H??I??H;|$ ?v???H?t$@H;?$?@??L?L$`L;?$A??H;?$?A??A ?E ?A??uL1?I??M???f???z$H??M?M?I9?t???W?L9?}?L??āzL??$???fff.?I??u
1??2fDE1?1?ff.?B?	B?
H??I?I9?u?A??????H?t$0Ht$`H??$?Ht$@H?t$ H?L??$ A???????I????9??I?~0??H?A H?ALc?$H?A(L9?H?T$??:H?|$ ??:H?q8H??$?H?r8H?t$@Hc?$H??H?|$`H??H??$??JT???l??H?T$ H???xnH???H??$H?J?H??$ H??H??H??H??H??$`H???H??$@L?l$@M??M??H?L$`N?$9I???L??I??I?M?M?I9??:M??L?t$@Lt$`L?T$ I?? s1??TH??$  s??oa'
1?????oR'
1?H??$@???}X
?%
??????}X?%
??????}X?%
??????~?? ?????~??@?????~??`?????}X
n%
??~\????????}X^%
??????}XU%
??????}X%L%
??????~L????~T????~\????~$?H??@??}X
?$
????H????J?????$`tB??}X
?$
??????}X?$
??????}X?$
??????~???~L? ??~T?@??~\?`H??$H??I9?tfffff.?A??H??I9?u?L??H??$?H?$?1?L???f?H??H??L9??:???H?WL9?}?A??#ffffff.?N?I??I??L?T$ M9?}?Mc?Nc?ġz?ġx.?v?E??F????A?FT??$?????I?????H?T$ L??$???M???L?gH?GI?q?N?????$ Hc?I9?IO?H??H??$H??$8H)?H??$??ݠH?0???I?y0??I???H??$`H?x0??M9a??H??$`L9`???M???M9e??H??$8I9E?"?I?~0?;?I?F8H???Q?I?N@H9??ؠI;NH??L?W H?G8H??$xH?G@H??$?H?GHH??$`M?Y M?q(I?A8H??$ I?A@H??$XI?AHH??$PH??$`H?HH??$@H?H8H??$?H?H@H??$HH?@HH??$?I?E0H??$`I?E8H??$I?E@H??$ I?EHH??$?Hc?$??$H??$0??H??$?L??$?L??$8uVH?D$H??H?t$`H?t$0H??$?I??H??H??M????w?
H?t$`M??L??$8L??$?H??$?H??$0??????I???????????9?uǀ???????9??x???I????8?f?H??$??W??W?I????>?b?I???L?FI??tH?~0???J??L?NI??tH9F8???I??L?V I??tH9F@???I??L?^(I??t
H9FH?n??Hk?xL?%?fN?t J?\ H?OL9?t
H9_0?ԓH??L	?H?? ???H??H?I????I????>?????$L?D$?;4H?F H?FH?F(???%4H?~???4H?N8I?P8M??L??A??A??????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@?I??H?I?I?I?M9???3A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??tfDāz???Y?āzD?I??H??u?H???{???ffff.?āz???Y?āzD?āzD???Y?āzD?āzD???Y?āzD?āzD???Y?āzD?I??M9?u?????1?f???D????L????T???????Y???Y???Y???Y???|D????|L????|T????|?H?? I9?u?M??H??$??????????I????8?????$?`2H?L$ H9HH??$?H??$????H9P???H?L$0H9H ???H9p(???H?L$H?y0?|?H?x0???H?L$0H??H??H?ʅ?H?L$??1?|$ ??1H?q8H??$?H??H?H8H??$L??H?D$ A?Ɖ?H??$ ??L??H??$?H)?H??$?1?H??$?H??$@L??$?L??$`?4H??$?H??L?$H?$?H??H??$?H;?$ ?21A??rBH??$?H??H??$?H??$H?$?H?$@H)?H?? L??$???E1?L?l$ E)?L??M??I??I?I??t)ffff.?āz???w?s
ġz?I??I??u?I??L??$`?,???f?āz???w?C
ġz?āzD??1
ġzD?āzD??
ġzD?āzD??
ġzD?I??M9?u??????E1?f?āz???D$@āzD???w??
??)D$`??D$@??
??y!D$`??)D$@āzD??
??(L$@??q!? ??)D$@āzD??
??(L$@??q!?0??)D$@āzD??o
??)D$`āzD??]
??y!D$`??)D$`āzD??C
??(L$`??q!? ??)D$`āzD??%
??(L$`??q!?0ġxD???(D$@ġx?I??M9?????M??H??$??????????I???????F???????????$??.H?H(??W?H??$?H????.H?H H?L$@H????.H?PH????.?p????.H?x8L?@@H?HHH??$L??L?^???????I?J??W?E1??A?I???H??$????t???ѨH??$?H?x0H??$???A?FTH???ۘI???H??$?H?yH?|$`H?yH??$@H?y H??$H?y(H??$8H?y8H??$@H?y@H??$?L?AHL??$(L?F0L??$?L?n8L?F@L??$?H??$`L?NH??W?I?v0H?t$@I?v8H??$?I?v@H??$M?^H??)?$?
H?L?H??Ā
Hc?$H??$?Hc?$H?D$8H??H?D$0?=-H;?$??/-H??$?? -H?|$ ?-H??$?
H??$?L??$?
H??$?
H??$?
I??H??$L?d$ I???H??$?H??H??H??$@H)?L??$?I?عH)?L??$?I??H?L??H??$?H??H)?L??L??$`I??H)?L?t$8M??L??$`H??$I??L??H?T$@L?L??$L?H)?I??H??$?M?H)?L??H??$?H)?H??$?H??H??$?I??H??$?H?t$ H??H??$?M?H?t$@H?1?L??$?L??$8L??$0?eH??$?H??L??$8H??$?L?L??$0H??$?L?L??$ M?H??$@L?H??$?H?$(H;?$??a+I??L+?$?M??I??M??H??$?H9?$8H??$@H??$?L??$ H??$?H??$???L?$L??I??I??H??$?L??$@L??$??ff?H??$ HT$8H??$`I?H??$?L??$@I?H??$H?H?H??$?H?$?H9T$0L??$@L??$??????I??L+?$@L??$?H??H??$H??$ H9?$H??$ H??$?H??$L??$@??L??$L?H?L$1?I??I??H??L??M???HH??$?H??L??$?M?H??$?H?H?M?L??$?L?$@H;?$??????H??H+?$`I??H9?$@H??$?L??$???E1?I???8fDH??$?H??L?????zI??I??LD$@L9l$ ?N???L9l$`?L??H+?$?H??$?H??$`H??H?H?$H?$@H?H??$ ?@H??$`H??H??$?tJE1?I??E1?ffff.?āzġzāzġzI??M?I?M9?u??D$ ??????E1??D$ ?????H?$I??H??$?H??$?HT$L?$@I?L??H+?$?H??$?L?l$@??zġz*?7????H??$`H??H??I?M?L??$L?H?T$1?M??L??$??&f?H??L?H??$?I?H?L9??????H??$?t81?I??E1???z??āz??zI??M?H?M9?u??D$ t???E1??D$ t?H??H+?$`I??H?$I??L??$?L\$L??H+?$?H??$?L?T$@??H??$ āz?????z8I??L?H?M9?u??D$ t??f?E1??D$ t?L??H+?$`H??$?H?L??H??$?L?M??L+?$?L??$?L?l$@ġzġz/?5???I???????H?D$ H9GH??$??G?H??$?H9G?5?H?D$0H9G ?&?H9O(??H?0????zNT??W????$???.???H??H?D$??$H?|$0??$Hc?$H??$`H9?$???$Hc?$L?@8H?P@L?d$ ?A(W????*?H?HHIc?H??$`??
?
M??H??$H??$?H??$?K???$?L?O8L?W@L?_HI?D$?H?D$@D???M??I???I???M??H??$`L??M?nL??$@L??L??$`M?NL??H??H??L??H??H??$?1?L??$?H??$?L??$?L??$??PH??$@H??L??$?L??$ M?L??$@M?L??$?M?H??$H?$H9?H???c#H??I??H??$@H??$@H??$H??$@H??$H??1?L??$?H??L??$@L??$ ?P?H??$?H??L??$?L??$@M?L?t$8M?L??$M?H??$?H??$?H?H;L$0????H??I??H??$?H??$?H??H??$ H??$?I??L??$L??$?L?t$8L??M??H??$@H??L??$`???^???Z???X?$???Q???^????$?
H??$?
?A?H????w?
L?$H??$`H??$?H?I?H?$?L?\$`L?$?L;?$?H??$?L??$?H??$??????H??H?|$@H??$?s01???W?L?T$ L??$`??%
???$??zf.?H???W?1?L?T$ L??$`???
???$????L????T????Z???X???Z???X???L????Z???X??????Z???X?H??I9?u?H??t0H??L?H?1?ff.??????Z???X?H??H9?u?H?L$H??L??I??H??$ H?H?$@??^???Z?H?|$@tuH??$?L?L???W?1???zT????\???T????Y???Z???X???z???\??????Y???Z???X?H??I9?u?L?\$`H?A????????#ff.?1???W?L?\$`H?A???????H?$?H?$@L??H??$@H??????\??????Y???Z???X??z???I????:???H?D$ H9BH??$???|H??$?H9B??|H?D$0H9B ??|H9J(??|H?z0?ϊ??zNT??W????$???.??֊H??H?D$?RH?|$0?FHc?$H??$?H9?$??(Hc?$H?r8H?z@L?BHL?H8L?P@L?T$8H?@HH??$H?D$ ?A(W???*?L??L??$Lc?L??$ ??
Y

H??H?T$`H??$?H??$L??$???F???$`L??$?L?H?L??$?A??A??H???H?D$ I??L??$?M?nI??L??L??$?1?H??$??7H??$?H??L??$?L??$`M?L??$@M?H;?$??I??M??L??$?H??$?H??$H??$?1?L??$@L??$`?<?H??$@H??H??$L??$?I?L??$@I?H;L$0?Q???H??H??H??$`H??$@H?L$8H??$@L??$@L??$?L??$???f.???^???Z???D$@L??I??H?L$H??H?$@H?$?H?H????w?n
??D$@??X?$???Q???
?
??^????$?
H??$?
?A?H??H??L??$ ?.
L?$?H??$?I?I?L;?$?H?T$`H??$??????H??L??H??H??$`H?4H?$?H??$?L?D$ s0E1???W?L??$?H??$???$`?ff.?J?<(??W?E1?L??$?H??$???$`fff.?ġzL??ġzT????Y???Z???X???Y???Z???X?ġzL????Y???Z???X?ġz???Y???Z???X?I??M9?u?H?M???P???K??H?1???????Y???Z???X?H??I9?u??"???M???A?}???H?D$ I9EH??$???wH??$?I9M??wH?L$0I9M ??wI9U(??wI???H;A??wH??H??$@H??$?H??$@H;A?qwH?D$0H??$@H;A H??$@?RwH;P(?HwI?}0?k?H??H?D$??H?|$0??Hc?$H??$0H9?$??|I?u8I?M@H??$8M?MHH??$@L?y8H?Q@H??$L?YHH?P8H?H@H??$ H?xHL?t$ ???*???XTLc?$Ic?H?D$`E??L??$?L??$?L??$?H??$????$????$?L??$?H??$L??$?H??$??	FD??I??H??$0L??M??L??$?I??M??L??H??H??$@L??L?$?L??$?M??L??L??$`I??L??H??H??H??$?D????H??H??$8H)?H??$0L??L??$@H???H??$?I?D$I?WM?t$`I?J`H??$xI?JH??$pI?L$H??$?I?O`H??$?I?wL??$ L??$I??1?L??$L??$I??L??$??~H??$H??L??$?M?L??$?M?L??$?M?H??$?H?$xH?$L?$H?$pL?$?L?$?M?H??$?L?H9?H???0L??$?L??$@H??H??H??$H?H??$pL??H??H??$ H??$xH?H??$xH??$?H??$?H?H??$?L??H??$H??H??$?H??$?H?H??$?1?H??$?M??H??$?H??$L??$?H??$pH??$@H??$H??$ H??$H??$?H??$xH??$?L??$?L??$?L??$?L??$?H?T$H?|$ L??$ L??$ ??ff.?H??$?H??$8H?$?L??$L?$?H?$?L??$ L?$?L??$ L?$?I?L??$ H?$ H??$@L??$?I?H??$?L??$M?L??$L??$?M?H??$?L?L??$ H;L$0?????L??H??$pL?H??$?L??$8L??H??$xL??$?L?H??$8H??$?L??$?L?H??$?L??$H??$?L??H??$?L??$L?H??$(1?H?D$@H??$?H??$?L??$?L??$?H??$H??H??$`L??$?L??$@H??$@H??$@H??$ H??$?H??$?H??$H??$?H??$?H??$?H??$?H??$?H?D$8H??$?H??$@L??$0I??H??$?(ffffff.???^???X???Q???
L
??^????$?
H??$?
?A?L??L??L?L$`??w???	H?|$ L??$ L?$?H?D$@H??$?H?$@H??$`HD$8H?$?L??$?L?$?L?$H?$?L?$@H?$@H?$`H?$?H?$?L;?$?H?T$H??$?L??$@L??$?L??$ L??$H??$@L??$ ?????I??H??$@L??L??H??$?H??$M?$7L?$?I?H??~)H??uC??W?1???W????$????$??f???W???W????$????$????H??$@H?H?L$8I?4??W?1???W????$????$?L??$????T???????Y???Z???YT????X???Z???X???Y???Z???X???Y???Z???X?H??I9?u?@??H?T$tFH??$?H?L??H??$H?$xH????H?T$??Y???Z???X???jY???Z???X?L??$M??H?t$@L??L??L??$ L??H??$?H??$?M?4L?$?I΃? r5H??$?H??H?$8H??$?L?L?H?H)?H????1ɉ?)?H??H??H?H??t6H??$L?L??$?I?ffff.???z????H??H??u?H??rNH??$@L?H?$@@??T????T????T????T????T??????????T?H??H9?u???Z???(???Z???y??	???$`??A????W???^????$?
H??$?
?A?L??L??L?L$`??w?J?	?? s:1?H?t$ L??$????$????$????$`?ff.?H??$`H?D$@H?$(L?I9?H?t$ ???$????$?s;L?$?M?L9?$s&1?L??$????$`?fffff.?H??$`L?H??$?L?1?H??$0??D????L????T???????XD????XL????XT????X???D????L????T?????H?? H9?u?H??H??$8L??$????$`?????ffffff.???)?H??H??H?H??t4H??$L?H??$?L???????X????H??H??u?H???o???L?$@L?$?ffffff.???zD????zXD????zD????zD????zXD????zD????zD????zX???z???z???zXD???zD?H??H9?u???????H??$?H?H??$?L?1?L??$0??T????\????d????,???T????\????d????,?H?? I9?u?L??H??$8?????????I???L?L$ L;J?zM???H??$?I;D$L??$??zH?D$0I;D$ ?-zM;D$(?FzH?J0H??$?H??$?Hk?xH?=>@H;L8?>zI?T$0A?$Hk?xH;T>?JzH?T$H?z0?^zH?z8H???tzH??H?R@H9???zH;VH?VuH??$H?rH??$H?R8H??$ M?T$I?T$8H??$@Lc?$??$??$?Hc?H??$?H???D?\PIk?xH??$ H?tXH??$?H?t`H??$?H?thH??$@H?TpH??$8L??$?D9?H??$?L?T$`??CI?T$@H??$?I?T$HH??$`H??H??$ H?|0H?\@L?|H??$(H??$?H?DI??H?tH??H	?H?? ??1?H??I???I????;?byH?KH??tH?{0?kH??H?sH??tH9C8??jH??H?{ H??tH9C@??jH??L?C(I??t
H9CH??jA?Hk?xH?4>L?TL?LH?D$L9T$ L??$?t
L9H0?)kH?D$ H??L	?H?? ?j?H?I???e?I???????a~??????$H?|$?`L???D?Ik?xH??=H?LH?tL?L$ I9?t
H9w0?o?L??H	?H?? ?>?L??H?H???8?I???????E~?????H??$L??1???w?Q???
I???H?D$@?8?GmA?>?amA?Fl??H?T$0H??$?HE?H??$?HE?H?T$0A?IE?H??$?I???H?QIE?H??$?H?T$@LDB I?V@I?vHHE?IEV8I?~0?
mI??H??$?H??H?|$?,
Lc?$L?L$8L9L$0?
H??$??
H?|$ ??	Lc?$H??H??$@Hc?H??$`Hc?H??$?H??$?L??$@?G0L?QM??H?T$ H??$???nH?L$@H?YH?L$LcyTHcy\H??$?Lcid??L??$?T?LcqXHcA`H??$?HcAhH??$@H??$?I??H?L$0H??H??H??$?H??H?L$8H??$?I??H??$1?H?D$`1?H??$@?)H??$@H??LD$`H??H??$@H;?$???H??$@H??$`H??$?H??$?H??$?H?T$8H?D$ ?=ffff.?H?T$H?$@H??$?H?$H??$?H;T$0?e???H?T$H??$?H?$?H?$@H??$?1??fDH??$`H??H;?$?t?H??$?H?H??$`H??$`H??H??$?1?H??$?H??$ ?9H??$?H??$?H?H??$????H??H??$ H?D$ H9??w???H??$???W?E1?L??$??&fffff.?I??L??$M?L;?$?t?L??H??$@H??$`H)?H??$ M???@??1?A????H??t'I??L)?I??t?H??L	?H?? t?H??H?I??H??H??u?H??L	?H?? tH??H?I??H??t뾉?1?A??H??u?H??x?H9?}?H??x?L9?}?HD$`H??H?H??$?H?D$@H?ġzX??r???A?FTH??
?-?H?
?Hc?H???I????8?*???$L?D$?cH?p H?pH?p(???MH?x???AH?H8I?P8M??L??A??A?????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@??M???A?;??hM???A?9H?T$ H??$???hI?{0??hI?y0??mM?SM;Q?cI?CI;A??bI?{ I;y ??bI?K(I;I(??bH????rH??$???rH?|$0??rH????rA?>??rHc?$J??H??H9?$ ??rH??H??Lc?$H??$(H??$?H?7H??H??H	?H?? H?t$8L??$??&?H?H??? ?H??$L????w?j?M???A?H??#???M???H?
ߒHc?H?L??$?L??$??I?JI;KL?D$ L??$??XaI?RI;S?JaI?r I;s ??M??M?S L??$`M?S(L??$@M?s0M?S8L??$?M?S@L??$?L??$@M?SHL??$?M?P8L??$?M?P@L??$?M?@HL??$`???????9?M?I??L?L$@???9???H??$?H?@H??L	?H?? ??;H?I???;M???A????fM???A?;L?L$ ??fM?WM???'jM?GM???jI? H???
jI?w(H???jI?KH??L	?H?? ?f?H??H?I???`?I????>??f??$L?D$?U?H?F H?FH?F(?????H?~???3?H?N8I?P8M??L??A??A??????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@?I??H?I?I?I?M9????A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??tāz???Q?āzD?I??H??u?H??r??āz???Q?āzD?āzD???Q?āzD?āzD???Q?āzD?āzD???Q?āzD?I??M9?u??/???1?f???QD????QL????QT????Q???|D????|L????|T????|?H?? I9?u?M??H??$??????????I????8?e??$???H?L$ H9HH??$?H??$??WH9P?WH?L$0H9H ?WH9p(??VH?L$H?y0?rH?x0?rH?L$0H??H??H?ʅ?H?L$?&??|$ ??H?q8H??$?H??H?H8H??$L??H?D$ A?Ɖ?H??$ ??L??H??$?H)?H??$?1?H??$?H??$@L??$?L??$`?4H??$?H??L?$H?$?H??H??$?H;?$ ?r?A??rBH??$?H??H??$?H??$H?$?H?$@H)?H?? L??$???E1?L?l$ E)?L??M??I??I?I??t)ffff.?āz???w?7?	ġz?I??I??u?I??L??$`?,???f?āz???w??	ġz?āzD????	ġzD?āzD????	ġzD?āzD????	ġzD?I??M9?u??????E1?f?āz???D$@āzD???w??	??)D$`??D$@??	??y!D$`??)D$@āzD??o?	??(L$@??q!? ??)D$@āzD??Q?	??(L$@??q!?0??)D$@āzD??3?	??)D$`āzD??!?	??y!D$`??)D$`āzD???	??(L$`??q!? ??)D$`āzD????	??(L$`??q!?0ġxD???(D$@ġx?I??M9?????M??H??$??????????I????8??V??$?C?H?L$ H9HH??$?H??$??ySH9P?oSH?L$0H9H ?`SH9p(?VSH?L$H?y0?WpH?x0?ppH?L$0H??H??H?ʅ?H?L$????|$ ???H?q8H??$?H??H?H8H??$L??H?D$ A?Ɖ?H??$ ??L??H??$?H)?H??$?1?H??$?H??$@L??$?L??$`?4H??$?H??L?$H?$?H??H??$?H;?$ ??A??rBH??$?H??H??$?H??$H?$?H?$@H)?H?? L??$???E1?L?l$ E)?L??M??I??I?I??tāz???w??	ġz?I??I??u?I??L??$`?9???f?āz???w??	ġz?āzD??q?	ġzD?āzD??^?	ġzD?āzD??K?	ġzD?I??M9?u??????E1?f?āz???D$@āzD???w??	??)D$`??D$@??	??y!D$`??)D$@āzD????	??(L$@??q!? ??)D$@āzD????	??(L$@??q!?0??)D$@āzD???	??)D$`āzD???	??y!D$`??)D$`āzD???	??(L$`??q!? ??)D$`āzD??e?	??(L$`??q!?0ġxD???(D$@ġx?I??M9?????M??H??$??L????????I???H?D$@?8??S??$H?L$???H?D$@H?@(H??$?H?????H?D$@H?@ H??$ H?????H?D$@H?@H??$`H?????H?D$@H?P8H?T$`H?P@H??$@H?PHH??$?H?Q8H??$?H?Q@H??$?H?QHH??$@H?@Hc?H??$??A(W???*????$?H??E1?E1?1?H??$?1?L??$?L??$`fDH?t$ L??$?L??$L??$`H??$?L??$?L?H?D$@H??L??L????w??	H?D$H??ġz"??^?$?ġz"Lt$`I?I??u?H?t$ H??L??$L?$@L??$?L?$?H;?$ ?J???H??$?H??L??$`L?$?L??$?L?$@H??H??$?H;?$????????I??????y\??$H?L$???H?WH?????H?A0L?GH??E????5H?w8H??E??M?H?E??A??A???L?_1??I??L??F?<1H??I?H?H9??w???k?	E1?E1?I??rvāzL????_???.?āzL??E??EE?EJ???_?E?~??.?EE?EJ?āzL????_?E?f??.?EE?EJ?āz???_?E?~??.?EE?EJ?I??M9?u?M???P???M?Ԑġz???_???.?E??EE?EK?I??I??u??&???I????????k?B????|??$???H?YH??H??$?L??$???LL?IM????LL?Q M????LL?Y(M???yLH?D$ H??H	?H?? ??EH?H??I???EI????:??ZH?D$ H9BH??$???IH??$?H9B?rIH?D$0H9B ?cIH9J(?YIH??$@H?z0H?D$0?~ZHc?$IcvT??ș??H??$?9????H??$????H??$??{?Lc?$H??$@H?V8H??$L?N@M?V@L??$`??zFX??D$8L??$?H?T$ L??L??$?H??Ӄ?I??I???I??I???M??L??L??M??L??L??$?M??L??L??L??$@L??$M??H??$@L??L??$ H?FHH??$@I?F8H?D$@I?FHH??$`Hc?H??$?H?B?H?D$`I?BH??$L??$?I?BH??$@L??$?I?CH??$ ?VH??$`H?$H??$?H?$?H??$ H?$H?$?H?$@H?$ H;?$???H??$`H??$@H???H?L$09?M?H?H??$ H??$?H)??o???H??$????*?H?|$ ??1?H??$?H??$?H??$ H??$?H??$@H??$@H??$?H??$???$fDH??$?H??$@H??$?H??$@H??H??$?H?H??$?H???W?H??$?L??$?L??$?#@H??H??$@H?H?H;?$ ??E1?I??I???fD??X?I??M?M?M9?t?H?|$`s??W?1??bfffff.???W?1?f.???zT????z\????Z???X???Z???X???zT????Z???X???z???Z???X?H??I9?u?H???s???I??E1?fff.?ġz???Z???X?I??L9?u??E???D??^???Z?H??$?H??$`H?L$H??H?$?H?H??$?H?$@H?$???W?H??$?H??$@H??$`?1f.?H??H??$@H?H??$`H?H;?$ ?	I??L??L?$?I??L??L?$?E1?I??H?????X?I??L?L\$@M9?t?H?|$`td??W?1?fffff.???\????\???z\????Y???Z???X??????\???z???Y???Z???X?H??I9?u??D$ t??fD1???W??D$ ?o???M??M??M?M??L?l$@M???z?L??$???\???z\?L??$??Y???Z???X??'??????^???Z???XD$8??Q???
??	??^?L??$?H??$?H?D$???$?@H??$?L??$?L??$??H??L????$?
H??$?
?A?H??L??$???w?B?	???$?H?D$Lt$@I??u?H??$?H??L??$?L?$`H;?$ ?f???H??$?H??H??$@H??$?H?H??$?H?H?$@H??$`H?$?H?$?H;?$????$????????????W???^???Z???XD$8??Q???
??	??^?1?H??$????$?fff.?H??$?H??$?I??H??$?DH??$?L??$?L??$??H?D$H??L????$?
H??$?
?A?H??L??$???w???	???$?Lt$@I??u?H??$?H??L??$?L?$`H;?$ ?f???H??$?H??H??$?H?$`H;?$?????????M???A?}??RL?T$ M9UH??$???AH??$?I9E?vAH?D$0I9E ?gAI9M(?]AM???E?Ik?xH??H?LL?DI9?t
M9F0??AL??H	?H?? ?e?L??H?H???_?M???A???[RI???H??$???zFT???$`??zFX??)?$?Lc?$D??$I?GH??$?M?gL??$?I?_ ???A(W???*???w?$?	??y?	???,ȸ????y|?	??W?$?H??$@?A(W???*???L$@??^???	???$???(?$???Y??	??^D$@?Z?	???$?D??H??$???A?O(A??șA??L??$???L??A???9?M???$?M??L??$???rA?<$????$???rI????H??$??H??????$H?L$???H?y0?	aH?x0?"aH?P H?PH?P(??H?L$???H?pH??$????????AT??IXHc?$H?X8L?Y8H??H??Hc?H?D$`H??$?A??L??$ L??H??$H?t$@H?ރ?M??H??$`I)???}???}?L?a`L?o`H??$?L?q1?H?|$ 1??HL$@H??I?M?L?I?H;L$`???A?? r+I??L??L?$?M??L??L|$ M)?I?????E1?H??$?D)?M?G@??t?UCA?>?oCH?{0??CH?~0??CH?CH?KL?K L?{(H?VH??$?H?VH??$?H?V H??$@I?V@H??$ I?Ƌ?$D??$L??H??H??H??$?H??H??$`H??H??$?I??H??$???L?t$@L?|$`?iL??$@L??$x??$?L?c@H?CHH??$?H?F8H??$H??$pH?F@H??$?H??$ H??$(??w???	H??$(H??$?M???ɀH??$@???H??$`???M?????L??H??H??$`H??I??H?H??$O?$6L??H???L??H???M?F?L?D$8M??I??I??M??I???M??L??$@I???L??$?M??H?\$`L??M??L??L??$I??I??H??H??H??$@H??$?H??$?H)?H??$ L??H??H??$?J?H??`H??$0L??I?L??$?H??H??H??$?H??H?H??H?AH??$?H?[L??L??$8H?AH??$`I?F?H??$?L?H?D$ H??$??-,L?iL;n??%L?yL;~??%H?y H;~ ??%L?A(L??$?L;F(?l%H???h/H??$??Y/H?|$0?M/H???C/A?>??6L?I0H?A8H?D$8H?A@H??$@H?AHH??$`H?F0H??$?H?F8H??$?H?F@H??$?H?FHH??$?H??$I??H??$H??$?Lc?$J?H??H??L	?H?? Lc?$H??$(H??$8?*vH?I???%vI????9?+Lc?$??$?y ?y?y(?>?ș??H?L??D?9?M?L??$A9?H?t$??H?QH??$?????H?Y8L?f8H???H??L??L?z8H??H??$?A??H?H??$?L??$`H??$L??H??$`I?H??$ H??L??$?L?L??$@L??H??$?I׃?L??H??$@H)?H??$@E1?L??$?L?|$H??$?L??$????6H?{0?7H?y0?)7L?cL?{L?k H?AH??$H?AH??$ I?F8H??$?D??$D??$L??I??H??$?I??H??$E??L?d$`L?l$@???L??$?D??$?L?s8H?C@H??$?H??$?H?A8H??$xH??$ H??$(??w?{?	H??$(H??$?M????M???ܼM???ӼL??H??L??H???H??$@L??H???H??$`I?D$?H??$@H??H??H??E??A??L??H???H??$?H??H??$ H???H??$8M??M?M??M??L??H??H??$?L?I??`L??H??H??$?L??H??H??$?J??H?@H??$0K?$H??$?I?D$?H??$@K?RH?ZJ?4?H??$?N?4?J?4iH??$H??$H?H?D$8H???H?q`H??$O?,?L??$(L?j1?H??$?H?L$0H??L??L?l$@H??$8H??$?H??$1?H??$@L?|$ H??$?L??$`L??$@L??$??L??$@I??H??$?H??$?H?H??$?H?$?H??$ H?L??$@I??H??$H??H?D$0H??$?H?H??L??L??$@L;l$@L?l$@???I??L??$@H??$?H??$ H??$H??$???H?T$0L????L?H?H???,????H?f?
I??t??H?fB?I??t??H?fB??I??t??H?L??$fB?I??t??H?fB?2I??t??H?L??$(fB?I??t??L??$0fB??t???I???LH??$?H??$@H??H?$8H??$?H??$?H?4pH??$`1?H?t$0H??$?H??$?H??$?H???EH??$?H??H??$?H?L??$`M?L?L?$?H?L?$?L?|$ L9?????H??$?H??H?$`I??H??L??$?I??H?$?H)?H???s1??I??@s1??<H??$@@L??$?sE1?L??$??1?H??$8E1?L??$?ġ|?h ???ġ|?h@???ġ|?h`???ġ|\h???D
???L
???T
???
ġ~oDh?ġ|Lh?ġ|Th?ġ|h??~D???|L???|T???|I??L?H???u???$ tYH??$?H??$?I?Hġ~okġ|Lk ġ|Tk@ġ|\k`L?l$@L?$@ġ~iġ|Li ġ|Ti@ġ|\i`L;?$@?B???H??$@H??A??8tPH?|$@H??H?$@L??$?I?H??$?H?D$0H?D$@I????~"H?L$H????H????w赑	L??$?H??$0?????¤?????????9?uǀ????铤??9???????I???H?D$@?H??#?>3H?
:Hc?H???Hc?$Hc?$H?|$L???L?D$@I?HH??$I?HH??$?I?H8H??$ I?H@H??$`M?|$M?t$M??I?L$ I??I?L$(Hk?xH???
H?D(H??$@H?H??H??H	?H?? I?PHH??$?I?T$0H?T$`I?T$8H??$?I?T$@H?T$ H?W8H??$?H?W@H??$?H?WHH??$??o?H?H???i?I????8??H??$??—	L????w?;}鶫M???A?>??I?~0??I?FH??$?H??H?D$???H?H8H??$?LchTD????D???Lc?$Lc?$H??H??$??A(W?Ū*@X??w?y?	E????L??L??$@D ?A9??ӆHc?I??H??$@K?4<1?H9?I??LO???M???L?VIc?H9D$ ??H?~0??I???H?0?L?FH?N8J??H9??D??$D??$C??șA??D??D?D9?AMƒ|$0H?\$?,???$???A??E)?E????Ic?L?[0L??L?L??$?L?_L?s8H?[@H??$?E??L??$?:?E??H??H?F@H??$`H??H?H??H?W8H?<H??$ Ic?Mc?D?D$0L??$?D??$?L??$`E??L?D$@I??L?$I??E??A??H?H??H??$@E??A???H??I??1??7H??$?H??H??$`L??$?I?H??$?H?H;?$???H??$?H??$?H?$?H??$?1?H??$?L??$??9fffff.?H?T$`H??L?d$ I??H??$?H??H;?$`?[???H?T$`H??$H?$?E1?H??$?L??$ H??$@L?d$ ?-ffff.?ġz?I??I?L?M?H?L;l$@?p?????W?E1?I??rBāzL??āzT??Ģy?L??Ģi?L??āzT??Ģq?T??āz?Ģi??I??M9?u?M??t?K?4?N??1?f???z???q??H??I9?u??g???M???A?>???$L?|$???I?F I?FI?F(???}?I?OTH?L$@A?^A??E1?I?w8I??I?I?V8I??I?????w?T$@I??M9?u??6?A?????"???? I????:?? I????8?? H?HH?p A?~lH?x(HE?H??$HE?H??$@?HE?H??$?H?JHE?H?L$`H?p@H?HHHE?HEp8L?D$0LE?L?D$0H?z0?] H?x0?v H??$H?|$?r?H?|$0?f?H??$??W?Lc?$L??$?L9?$@?9?H?|$`?-?L?BM??? ?H?PLcOTLcWXLc_\Hc_`LcwdL??$ Lc?H??$?I??M??H??$L?$?L??H??$ H??I)?J??I)?HcWhH??L?L??$8H?D$`H??I??Hc?H??$8H??$@H??I??H??$?L??L??$?H??$?H?I??L??H??$@I?L??$(H??$?H?H??H?t$0H??I??H??$0I??H??$?H??H??$?Hc?$H??H??$?L??L??$@I??H??$?H?D$L??L??$@H?T$ L??L??$?I??L??$?K?H??$`L??$?J??H??$1?H??$??DH??$?H??H??$0H?$(H??$8H?$8H??H??$?H;?$?@?H??$?H?D$0H??$1?L??$8L??$(H??$L??$ H?D$H??$`??f?H??$@H??L??$?L?$?L??$ L?$?H;T$0?6???H??$H?H??$?H??$`H??$@H??$@H+?$ H?T$@1?L??$?L??$ L??$??B@H??$H??L??$@L?$?L?d$8L?$L?$?H;?$??2???H??$H??$?H?$`I??H??$?1?L?d$8L??$@H??$??M@H?D$H??$`H?H??$?H??L??$?L?$?L??$?L?$@H;?$@?7???H??$`H??$?H??H?$?H??$?H?$?H?H??$?1?L??$?L??$??aff.?H??H??H?$?H?$@M????w?m?	H??$`L??$ H??$M??H??I?L?$?H;\$`?
???H??H?D$ HD$@x?H;?$?}?1?1??f.?fA?OH??L?I9?t?1?M??I?x?I9?}???z???y???~??σ?$???M???A?FT??$@A?NXA?v\A?F`??$ A?Fd??$?A?Fh??$`A?Fl??$?I??H?D$@A??Ǻ_H?????Hk?xH?p?
L?LM?XI?@0I??H??L	?H?? ??"1?I???"A?>??I?~0H?L$ H??$?????{FT?????zN\??\???^???i
?
???,?H?T$0H??$?H??H??H9???H??Hc?$H9?H?|$?h?I??Hc?$H?1E1?I??I9?H??IO?H??A??L)?I??H)?H??H	?H?? ???1?H??速I????9??H?AH??$`H?AH?D$`H?A H??$?McvTH??$?H??L	?H?? ?`9H?I???[9??$???I???L????wA?VT頟??$???I???I???L????wA?VT?u?I??????t	???rH?|$0H?L$?M?H??$??>?H?|$ ?2?H?PH??L??H?L$ H?4	I??H??$?L??L??$@H??$@L?H??I??L??$?I??H??H???H?T$`I??I???H?Q?H??$?I??I??I??L??L??$?I???L??$???H?L$@L?48H?8H???H??$?H?H??I???M?X1?L??$L??$??eH??$?H??H??$?H??$?H?H??$@H??$`H?L??$@I?L?D$I?L??$?I?H??$?H?H;\$0???H?|$ H??$?H??$?H??$`L??$?H??$?L?D$L??$@??L??H??$??f.?H?L?H???4????P?f?Q?L?D$ I??t??P?f?Q?I??t??P?f?Q?I??t??P?f?Q?I??t??P?f?Q?I??t??P?f?Q?I??t??f??L??$@L??L?$H??$?H??H?$?H??$?L?L??$ H??H??$`E1?L??H???*ffff.?I??L?H?M?H?L;?$??V???L??I??H?I??M??M?I)?I???sE1?L?D$ ?fDH?|$ @s1??Q?H??$?@sE1??E1?H??$?f?ġ|?Y ???ġ|?Y@???ġ|?Y`???ġ|\Y?ġ|?_ ???ġ|?_@???ġ|?_`???ġ|\_?ġ|DY?ġ|LY?ġ|TY?ġ|Yġ|D_?ġ|L_?ġ|T_?ġ|_I??H????r?????$?tuL??H??H?$ L??$`O?$H??$@L?d$ L?L??$???|P??|LP ??|TP@??|\P`M?H??$ġ|bġ|Lb ġ|Tb@ġ|\b`L?D$ L;D$`?c???L?\$`L??A??8t*D??xV??SH??I9?u?M??L?D$ M9??+???L??H??L?L?d$@M??t?G?^fF?[I??I??u?H??L?D$ ?????ffffff.?C?^fB?[C?T^fB?T[C?T^fB?T[C?T^fB?T[I??M9?u???????$??$M?FdI???L????wA?VT?L?I???H??$`?8?j
A?FXH??$x??? ?A?NT????H?|$0??H??$????H?|$ ??I??H??$`H?zL?BMcN\H??$?H??H?D$ H??H??L??L??H??H??$@H?\$0H??M??L??$(I??H??$0L?D$`L??I??L??$?M??L??$pH??$@H??H?L$@L??$?I??H??$8H??H???H??$?H?H?H??$?I??I??I??L??L??$@I???L??$?????H??$@H??H???H??$?H?J H??$?H??H??$???A??E1?A?E1?A??E1?H??$`L??$H??H??$H??$8?yL??L??$?I??H??$0L??$?I?H??$pH??$?H?L??$?I?L??$?I?L??$?I?L??$?I?H??$?H?L;?$x??D??A??H??$?L??H??$?H?L$8L??L?D$ I?? H??$?L??$?H??$?L??$?L??$?L??$?L??$?H??$??1?I??L??H?L$?bf.?H??$?H??H??$H??$?H?L??$8L??$ M?L??$@M?L??$I?L??$(L9??????H??$??H?H?D$0H??$H??$?H??$?H??$?E1?L??$L??$@M??L??$ M??H??$?L??$@L??$???H???w??z	L??$?L??$@L??$L?D$ H?L$L??$ I??H??$@H??$?H?H??$?L??$`I?L??$?I?L??$?I?L;|$0H??$`?????H??$I?<H??H?D$8L??$ L?H;?$?L??$?L??$?L??$`H??$??'???H??$?E1??of.?L??I??H?$?H?L????w??y	L??$?L??$@L??$L?D$ I??L?H?D$@I?I?M?L;?$?H?L$?????H??$?L?H;D$`}?H??$`H??H??H??$?s1??K@H?4J?< 1?fD??D????D????D????D????D????D????????H??I9?u?A???M???H?4?L?H?I??H?1????????H??I9?u?????H??$0H??H??$H??$pH??H??$?I??H??$8E1?L??H?L$I???sDL??$8I??H??$H??$ H?L??$8H??$?L?L??$xM?L??$?I?L??$?M?L??$0I?L??$(M9??^???I??H?$H??$ M??L?$?L??$?I??H??$?D?I??Hc?H?D$0H??H??$?H??$8L?L??$8L??$?L??$ H??H??$?1?L??$0M??L??$?L??$?L??$xL??L??$?M??L??$ ?DH???w?`w	L??$H??$?H??H??$@L??$@I?H??$?L??$I?H??$?H?L??$ I?L??$@I?L??$I?H;T$0H?L$H??$`?D???H??$?H?<H??H?D$8L?L;?$?H??$?L??$L??$@L??$ H??$?L??$L??$@????H??$?H??$@H??H?$ H??$?H??$?H??H?$?H??$`H??$?H?H??$?H??$L?T$`L??$?E1?L??$?L??$??_fDH?$?H?D$H?L????w??u	L??$I??M?H?D$@I?H?M?H?$?L?$?L;?$??N???L??I??H??$ I?H;T$`}?H?t$@I??H?$`H?$?H??$`H??H?L$H??H?H?H)?H???s1?L?T$ ?3ff.?H??$? s1?L?T$ ?J?<)N? 1?L??$?L?T$ f???|?? ?????|??@?????|??`?????|\?????? ???????@???????`?????\????|D????|L????|T????|???D????L????T?????H??@I????z?????$@tTH??$L?H?$?I??H??$@H?H??????L? ??T?@??\?`?????L? ??T?@??\?`H??$?H??I9??/???H??$?H)?L??$@M??t#H?<N?1??????z?H??I??u?H???????H?$?H?$???D????D????D????D???????D????D????H??I9?u?????H??$0?????k?????????9?uǀ??????j??9???j???I?KH???mjI?{?g*I?{ ?\*I?{(?Q*?F?I?KH???AjI?{??0I?{ ??0I?{(??0?7?L?L$ I??H??$H??$?H?L?T$`I?L;?$???L?L$ E1?L?T$`H??$?H???ff.?I??L?M?L;d$@t?E1?M??I???D??X?I??I?I?I9?t???W?E1?I??rE?āzT??āz\????Z???X???Z???X?āzT????Z???X?āz???Z???X?I??L9?u?H??t?N??@H?{0?YH?y0?rL?{H?SL?c H?AH??$ H?AH?D$ I?F8H??$@D??$D??$L??I??H??H??H??$?E??L?|$@L??$???mH??$`L??$?D??$?H?C8H?D$`H?C@H??$ H??$?H?A8H??$?H??$ H??$(H??$???w??o	L??$(M???j?H??$??[?M???R?H??L??H???H??$?I?G?H??$H??H??H??E??A??L??H???H??H?L$8H???H??$?J??H??I??H??$M??I??K?dM??L??H??I?<H??`L??H??H??$?J??H??$?L?jK??H??$?K??H??$?L???I?N`L??H?T$0H??$?1?E1?L??$?L?|$@L??$@H??$?L??$`?L??$?I??H??$ L??$@I?H??$H??H?$?L??$ I?H??$H??H??$?H??H??$@H??M??L??$?L??$?M9?M??L?|$@?ŊI??H??$L??$@L??$ H??$?H??$H??$@?1?H??$?L??I??M???C?H??H?T$`I?H??$L??$@I?H?H?H;?$?H??$?L??$`?????H?|$@L??$@sE1??XE1?L??L??$?L??$?āzD????zāzD????zāzD????zāz???zI??L?L9?u??D$@?F???H??$?I??H?$?H??J?4?E1??ġz???I??H?M9?u?????I????H??$ H??$?H??Ht$0H??$?I??H??$@E1?H??$?L??$?L??$`M???ZL??$@I??H?T$`I?H??$H?H?H?$`I?H?$?L;?$?L??$@H??$?L??$`?????H??$?I??H?$@H?t$`I??H?$?H)?H???L??$@s1?H?T$@?+H??$ s1??E1?L??$?1?H??$?f???|?? ?????|??@?????|??`?????|\??ġ|D?ġ|L?ġ|T?ġ|??|D????|L????|T????|?ġ|D?ġ|L?ġ|T?ġ|H??@I?I????y????D$8tTH??$@H??$`I???????L? ??T?@??\?`H??$?H?$??????L? ??T?@??\?`H??$?H??H?T$@H9??6???I??I??I???t???fff.?āz?āzY?āzL?āz?ārYD?āzD?āzD?āzYD?āzD?āzD?āzYD?āzD?I??M9?u??????1?H?\$`f.???|D????|L????|T????|???YD????YL????YT????Y???|D????|L????|T????|?H?? H9?u?I??H??$L??$ ??????M???L??$`H??$??D????~???D??1???H??$?I??H??H?T$tH9B8??H??$?H?|$0tH9B@???H?D$0H??$?t
H9BH?ޱI??tI?|$0?̱J??H??$?tI9D$8???H??$?H?|$0tI9D$@???H?D$0H??$?tI9D$H?v?HcBTH?D$`HcBXH??$?HcB\H??$?HcB`H??$?zd?tG??$?GH??L?\$I??I??$?_L?????I?C0I??H??H	?H?? L??$???F1?H??I???FD??1???H??$?I??H??H?T$tH9B8?"?H??$?H?|$0tH9B@??H?D$0H??$?t
H9BH??I??tI?}0?۰J??H??$?tI9E8???H??$?H?|$0tI9E@???H?D$0H??$?t
I9EH???LcrTHcBXH?D$`HcB\H??$?HcB`H?D$@?zd??I??$??IL?\$I??I???_L?????I?C0I??H??H	?H?? L??$??I1?H??I???I??1?A??H??I?\$H??tI9D$8?F?H??M?t$ I??tI9D$@?,?I??M?|$(I??tI9D$H??L??$??Hk?xN?dN?LH?FL9?t
L9N0??H??L	?H?? tH?I???1?A??I??H?VH??tH9F8?۰H??H?V H??tH9F@?ðH??H?~(t
H9FH???H9?H?D$0?İI9????M9????M9????H;|$ ???L;?$????I9????L;?$??y?Lc?$Hc?$H??$?H??$?H??H?H??H??H	?H?? ??H?H???1?A??H??I??H?H9?HM?H??H9?H??$?L??$(L??$???M????H??$@H??H??$?H??H??$@I????L??H??H??H??H	???L??H???H??$????$ L??H??H??$?H??H??H??$?H?6H?D$0L??$?K?	H??$?E1?L??$?L??$??H??$`H??H;?$@??H??H??$H	?H?? t
H??H?H??I???	??1???A??H??$?H??$@L??H??$?I??I)?L??L	?H?? H??$`t
L??H?I???D??1?A??H??H??$H??I)?L??H??$`H?9I??L??$@L?M??H?T$8L??L??L?L??$?N?&H??$?I?L??$?M?$ L??$@tE1??????n?L??$@H??$ M?<9H??$?I?I?H??$L??$?L?L?H?H??$????1?H??$?????????H??$?L??$?@H??$`L??$ H??H??H??H??$@I??I??H??H??I??H??$?H??H??H?D$@H??H??H?D$`H??H??H??$?H??H??H?D$ H??H??H??$?H??H??	I??H??$?I??I??
H??H??H??H????yn'??Y"$3L??H????Y"$3L??H????Y"$3H??H?t$@H????n,3H?t$`H????Q",3H??$?H????Q",3H?t$ H????Q",3H??$?H????n43L??H????I"43L??H????I"43H??H????I"43H??H????n<3I??I??
L??H????A"<3I??I??L??H????A"<3I??I??L??H????A"<3L??$@M??H??$?yn?9"M???9"#L??$?M???9"#L?d$@M???yn#L?d$`M???1"#L??$?M???1"#L?d$ M???1"#L??$?M???yn#L??$?M???)"M???)"I???C)";I???AynH??$`M???!"3M???!";L??$ M???!"+Źv?űv?ũv?šv??b}Y?8	??}5?Ž????????}5?Ž????????}5?Ž????????}5?Ž??????H??L?$?H?$?H??$H?????????????????????}9???????p?????????~?H??$?I??L??$?I9?L??$?H??$L??$@L??$?H??$ H??$?????L??H??A??t9M??I??L??H??$??L??$?1?C;3L??L??$?@??I?I??I9?L?\$0?????L?L??L)?H?$@I??I?VI?H??$?H??H??H?$@L??$?I??M?L?$?I??M??fff.?G?1M??E1?D;8A??M?E?E1?D;0A??M?M??L?L?$?H???u??!???E1?H??$???tdH??$8L??H??$0?????NI?????????9?uǀ?????I??9??6a???H??$0???????????????9?uǀ?????܍??9??ˍ???1???I??L??$M??L?H9?H??$@HM???W?I9???^L??$?L??H??$H??H?t$8H??$?H??L?$?Ic?H??$@???^L??H??I??M??E??H??H??H??J?4?H??$@J??H?H??$?D????L??H??$?H)?H??$?A??L??$?L??$`M)?L??$@L??H??L?<I??L?t`??W?H??$@H??$?L??$?L??$?L??$??YDŽ$?	H??$?	?L??H????w?-	???$???X?$?	L?T$ I??M9?L??$?H??$???]???$?L??I??L?i8L?T$ M??K?<,I?A8H??$I??H??$ DŽ$?
??H??$?
?H??$`H????w?-	???$?
??$?uE1???W??K?,H????W?E1?L??$@??L$`f???D$@ġzD????\?āzD???B+	??Z???XD$@??D$@ġz???\D$`āz??+	??L$`??Z???XD$@I??M9?u?H??$`L??$?t=H??$`??D$@ġz???\?āz???*	??Z???L$@??X???L$@??D$@??Z??+	L??$?A?? L??$?H??$ s$1?H?T$ H??$@H??$?L??$???}?1?H?T$ H??$@H??$?L??$@??|T????|\????|d????|,???\???\???\???\???|T????|\????|d????|,?H?? H9?u?H??H??$?t??z???\???z?H??I9?u?L??J?A?? r%H??$@H?L?I9???H;?$???1?H??$?)?H??H??L?H??t#f.???z???Y???z?H??H??u?H???????J?H??D??zD????YD????z???zD????YD????z???zD???YD????zD???zD???Y???zD?H??I9?u??}???J?4H??`1?ff.???|D????|L????|T????|???YD????YL????YT????Y???|D????|L????|T????|?H?? H9?u?H??$???????????1?A?????Hc?I9?AN?H??$`L?D$?^CH??$??OC??)؅??CCLc?N?H??H?I8I??H??$`H??$@L?$I??I?M8I??H??$?H??$?L?,H??$?H?H8H??$H??H??$ DŽ$?	??H??$?	?L??L????w?$	???$?	A?????x(???}??AW?1?H?T$ ?fD??W??b}?)	????żT???}X=?)	??????????}?)	??????Y???U????Y???U????uJ?`??uJ?0??|???}???X???y???X??????X???Z??X?H?HH??H9?H??????|L???\???})	??})	??u????}?(	??X???}%?(	??m????}-?(	??m????}X
?(	??r???????}%y(	??T???}5?(	??Y??b}?(	?b}
?(	?BU???b}?(	?b}?(	?BU???BE???b}?(	żY???E????????P΅????????U???????1??AW?H?T$ L??$?9?|??x)?L??$?9???A?ω?)?M?w???)D$@t4??(?āzD???\??{d$`??w?!	?{d$`??Z??X?āz?M??L9???(L$@??H??$`H??$@L?,I??H??$?H??$?L?4I??ffffff.??{d$`āzD????\???w? 	??Z???XL$`??L$`āzD??āz???\D$@?n 	??Z??sXd$`??(L$@āzD?I??L9?u????(	??{^???Z????$?
H??$?
?A?L??L??L??$???w?!	H?|$ ??L??$?L??$?L??$?L??$L??$ ?????M??K?
?? r4H??$?I?L?I9???H??$`H?H?$@H9???1ɉ?)?H??H??H?H??t???z???\???z?H??H??u?H???g???K?
H??H??$`H??$@H?H??fffff.???D????\D????L????D????\D????D????D????\D????D???????\????H??H9?u??????H??$`H??$@H?H??`K?
H??`1?fff.???D????L????T???????\D????\L????\T????\???D????L????T?????H?? I9?u?L??H??$@??????U?????1?A??H??$pH??L	?H?? t
H??H?I?????1?A??H??$xH??L	?H?? t
H??H?I?????1?A??H??$?H??L	?H?? t
H??H?I?????1?A??H??$?H??H?D$0H??$????>?ș??A??A??D?d$`E?A9?DM?H?D$??@T???$???@X??)?$???@\??)?$@?????*???w?	??y?	???,ȸ????y$	??W?$?H??$x???*????$???^??	???$???(?$???Y$	??^?$???	???$?D??$8E9???7??W???(?$@??????y
m#	??qJ????$???^????$?A?DPHk?xH?D0H??$?I?DHH??$I?D(H??$H?D$ H?@H??H?L$`HcЉփ??H?t$8Hc?Mc?H??H)?A??A??H??$L)?H?H??$8H??H??H?H??$ ?Ӄ?I??I???H??$?L??$?L)?H??$(H?H??$L?,?H??H??$pH??$?H?FH??$?H??H??$8H??$?I?D?H??$0L??$@H??$?L??$????#"	??^????$?
H??$?
?A?L??$@L??L????w??	H??$@H?D$0H??$?H?H??$?H?$?H??$xH??H?D$H?L???p	I??D9?$8?6L??H??$?H	?H?? t
L??H?H??I???
D??1???A??H?t$ L??$?Ic?H??$@H??L??H)?H??H?|$0H	?H?? t
H?H??I???1???A????W???(?$???.?H?D$`L??$?vH??$x9?v%?????*????$??'??? 	???$`?')???????*????$???	???$`H?t$ H??$(H??$?H??$ H?f.???.?????$???\???	??)?$`???$?
H??$?
?A?H??$@H??L??$??B	??_	??)?$?????\??	??\$`??(???-6	H?|$ L??$?H?t$8L??$?L??$???????}?K?*1ɐ??}LH???}TK???}????}TK???}LH???}TK???}????}TK???}LH???}TK???}????}TK???}H??}TK???}????}TK?H?? H9?r?9??????H??$?@??tKH??$?L??$?A?pH?
?^
A?v?????I????W???q???y???ypH??$?H??$ ?\???M?f??LC?H??^
A?tE?????I????W???q???y???yDC??LC?A?tE?????I????q???y???yDC?H??I9?u????????\???	??)?$????	??)?$`??D$`???$?L??$@L??H??$?H?T$ ??$??(?$???}?H?L$8??~e1?f???|L????}?L????|L????|L????}?L????|L????|L????}?L????|L????|???}????|?H?? H9?r?H?|$ 9?L??$?H??$?L??$?L??$???(?$`??H??$?H??$ L??$?zH??$?H??$(???L????T????\????$???}?L????}?T????}?\????}?$???|L????|T????|\????|$?H?? H9?u?H??$8H??$?t`L??H)?H??$?H?????$ fff.?ġz)??I???H??H??u?????$ L??$???$????????$ ??I??H?I?I?I?M9???)A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??t"āz???y
	??T?āzD?I??H??u?H???x???āz???y
?	??T?āzD?āzD???T?āzD?āzD???T?āzD?āzD???T?āzD?I??M9?u?????1???}?	??TL????TT????T\????T???|L????|T????|\????|?H?? I9?u?M??H??$??
?????????$??(H?H(H??$H???V^H?H H?L$@H???D^H?PH???7^?p???,^H?x8H?H@H?L$`H?HHH??$ L??L?^???????I?J??W?E1??4L??$?I??H??$ H?L$ H?L??$?I?L;?$??(L??$?E1?L??$?H?L$ H???f?I??H?L$`H?I?L;d$@t?E1?M??I?????X?I??I?I?I9?t???W?E1?I??rM?C?L~?????n???X?C?L~?????n???X?C?L~?????n???X?C?~????n???X?I??L9?u?H??t?N?<}M?1?f?E?OA????yn???X?H??H9?u??a?????$?#'H?H(??W?H??$ H????@H?H H?L$`H????@H?PH????@?p????@H?x8H?H@H??$?H?HHH??$`L??L?^???????I?J??W?E1??4L??$I??H??$`H??$?H?L?T$ I?L;?$ ?5@L??$E1?L?T$ H??$?H??? L?D$@I??H??$?H?I?L;D$`t?L?D$@E1?M??I?????X?I??I?I?I9?t???W?E1?I??r@?C?L~?L?#X
??rX?C?L~???rX?C?L~???rX?C?~??rX?I??L9?u?H??t?N?<}M?1?ffffff.?E?OL?%?W
ārX?H??H9?u??a???1???H?H???H?H9?N?9??e%Lc?H??L	?H?? t!H??H?I??H??H??L	?H?? tH??H?I?????1?A????H??L	?H?? u??1?A??H??H?L$`I?$H??H??$?H?H??H?L$ Hc9H???H?H9?$??:?H??$ H?|$@H?I??L??$`I?H??H??$?L?H??$?H?L$H?H??$?H?H??$?H?H??$??w??$@H??I9???????R$1????1?????L??$??4$L??$?D?ȃ?I???Ȉ1???H?????H???$?D?????$???#H??$?
H??H??$?
H?L$H?AT??#??L??H?T$??_H???%?M?AM?AM?A M?A(L?L?L? L?(Hk?xH?
?U
H?|H??H??$?E??A?6?ș????????$0?D9?AM?L??L	?H?? L??$t
L??H?I??I???D??1?A??A??9??#E???
#H??$8??"L??M??L??I??I??I???I???M????*???Q???
\	??^????$?L??$0M?H??H?? Hc?H??$?L?@L??L??$ M??D????Lc?Ic?H??$?L??$Ic?H????L??H??$`H?L??$M??$??}4??H??$?~g1?ff.???|L????}?L????|L????|L????}?L????|L????|L????}?L????|L????|???}????|?H?? H9?r?;L$`L?d$@H?L$ H??$??*???H??$?H??$@ ????}?1?fff.???|T????|\????|d????|,???u?T????u?\????u?d????u?,???|T????|\????|d????|,?H?? H9?u?H??$@H??$?H?L$ H??$??????f??????y?????H??H9?u??c???H?T$`??H??H)?H??$?L?H??`H?|$0L?H?ǠE1?@ġ|D??ġ|L??ġ|T??ġ|?ġ|YD??ġtYL??ġlYT??ġdY?ġ|D??ġ|L??ġ|T??ġ|?I?? L9?u?H????????F?????H?D$0H??$?H?D$0L??K?0H??H??L	?H?? L??$?tH?I???1?A??H??H??H?L9?IM?H9??-H??$@?H??$(H?T$@H?JH??H??A??A???Mc?Lc?L??$`M)???L??$?H??$?I)?L??$?K?H??$@L??$?N??L??L??$@I??L?$I??`H??$??H??$?H??H;?$??yH??H?L$0H	?H?? t
H??H?H??H?????1????H??H??$?H	?H?? H??$?t
H??H?H?????1???H??H??$?H??H??$H?H??$?H??H??$@H??H??$`H?H??H?L$8H?H??$`H??$?H??$H?H??$?H?H?t$`E???E1???I??L;?$@?????L??H??$H?$?H??$?H?H??$?H??H?D$ L??$?L??$?L?$`H?D$L??H??H?T$@??w??$ H?D$ Ģ}8H?D$`L?H??`1???????}?L????L????L? ??}?L????L????L?@??}?L????L????L?`??}?????H?? L9?r?D;t$@L??$??????H??$?H??$? ????}?H??$@L?H?L$`H?H??`1?H??$?fffff.???|T????|\????|d????|,???u?T????u?\????u?d????u?,???T????\????d????,?H?? H9?u?H??$@H??$??C???H??$`H)?Ll$`H??L?H??1?f??????y?????H??H9?u?????D;t$@??E1??I??L;?$@?????L??H??$H?$?H??$?H?H??$?H??H??$?M??L??$?L?$`H?D$H??H?D$ H??H?T$@??w??$ H?t$ H??$?ġz8H??$?H??$? ????}?H??$@H?H?L$`H?H??`1?H??$?fffff.???|T????|\????|d????|,???u?T????u?\????u?d????u?,???T????\????d????,?H?? H9?u?H??$@H??$??????H??$`H)?Ht$`H??H??1?f??????y?????H??H9?u??s???L??$@ff.?H??$?H??L??$?L?H??H?T$@??w??$ L?$L??$?I??u?????Hk?xH??4
L?L$ M?y?M?V0M??L|饃Hk?xL?
?4
M?XI?C?I?@0JD
?	???1?A??I??L??$?I??tH??$`H9?uMH??I??H??$ tH??$@H9?u.H??H??$ H??$`??H9?$???Љ?$ ?DŽ$ Hk?$xxJ;L(?kuM9?H??$ ?~uI????uH??L??$@??uL9???uI9???uJ?L(HH?L$`B?L(PHk?xJ?T(`H??$?J?D(hH??$?M?@L??L??$(H?L$89?H??$?L??$`L??$@L??$?H??$?u#H??$8H?? I??I??M?H??$ ?L?L0H?LH??H??I??H??$ H??H??$`H?|H??H	?H?? ??1?H??I???I?@H??I?@0JD
?F?1???I?I???????????n????n???}Y???e(%???}Y???e(/???????????}???}?I?@?H??H??H??H???!1??H??$ H??L??$x?WH??$?HHc?$H??$?H?AH??$?H??H??$H???H?qH?I)?H??LD?H??H	?H?? t
H??H?H?????1???H?9H)?H??HD?L9??(?M??????H?D$0H??$(H??$?H?M??L?t$ I?D)?E1??yf?M??L??I?L??$?L?$H??$ H??$`H?H?D$H?J?4??$H?|$@H??$?L??A???w??$?I??M9?L??$??i???H??$@JcL??Jc4?H??L	?H?? tH??H?I????$ ?V????@??1?A??$ ?;???H??$?H?|$898?&???H??$`L??$@L??I????????͂Hc?Ic?H??H??H?H??tH??1?H??H9?u?H)?H?????H)?H???u???1???A?Å???gM????$H??$?H?pH??HI?H?|$0??$L??H??$?H??$`H?D$0H??$?H??$?H?Q?H?????HH?H??H??L??$?L??$?H??$?L?\$@??"????"J??H???H9?H??$`???H??$?H?4?H??$@H??H??$@H??H??H??H??H??$ 1?E1?H??$@L?|$8H??$?H??$??%I??H??$`H?H??$@H?H??M9??s#L??$?H??$@L??$?L?$?L??$1?H??$?H??$@H??$?H???p@H??$?H??H??$?H??$?H?H?$?H??H??$?H;L$0L?L$ L??$?L??$?I??H??$?H??$@L??$??#???I?|$(H??$???I?|$ ??I?|$??L??$?L??$`L?$L??$@L?|$8I??ffffff.?H??$?H??H?L??I??L?L??M????w??$@H??$`L?\$@L?T$`M?H?$?I9?|?I??L??$??E1?M?H??$?I9?L??$?H??$??????L??$?L??$`L?$L??$H??$@I??H?$?@H??H?L??I??H?$I??L??I????w??$?L??L??L?\$@L?T$`M?H?$ M9?|???????W?L??$@???$?I?{8I??I?DŽ$?
??H??$?
?L??M??H??M????w?H??$@H??$??H??$?H??H??$?H?I?H;?$??B?H??$?H??$H??H??H??$?H?H??$H??$???$L??$@L?|$L??$@??(L$@??(T$`??L??$?L?t$8L??$?I?2H??$?H?H??$`H?<2H?H??$?H??L	?H?? t1?I???1?A??L??$@L??N??M?H?$`H??$`L??I??I?H??$?I?M??I??I?I?L9?A??L9?A??L9?I?|???L9?@??L9???L9???H??$?E??L??$@L?|$??(L$@??(T$`L?t$8L??$??H??$?@ ??pH??$? ??`H??$???yD???)?$`H??$???o?$?L??$L??$@????$????????*???o?$????~????*???o?$???}9????????~????*???q!????*???y!? ??y!?0??Y?$???^?$???)D$ ??w?????)?$ ??D$ ?????(?$ ??q!???)?$ ??yD$ ????(?$ ??q!? ??)?$ ??yD$ ?????(?$ ??q!?0??Y?$`??)D$ ????)?$ ??D$ ????)?$???y!?$$??)?$???yD$ ?????)?$???(?$????????)?$???yD$ ?????(?$???q!?pH??$`??x??(?$ ???$????$???q!?0āx???(?$ ??q!???)?$ ??yD$ ????(?$ ??q!? ??)?$ ??yD$ ??????(?$ ??q!?0??Y?$`??)D$ 艿??)?$ ??D$ ?u???)?$???y!?$$??)?$???yD$ ?K???)?$???(?$????????)?$???yD$ ?????(?$???q!?pH??$`??xL??(?$ ???$????$???q!?0āxD5??o?$???Ԅ$@M?H????2???H??$ H??$?H9?$@L??$@L?t$L??$@??(L$@??(T$`H??$H??$???????*???Y???^?I??M????w蔾H??$???zY??9???(T$`??(L$@M??H??$L????y???z?L?L9?|?????H??$?H?D$ H??H??$?H??$?H???Wq1?H?D$`?^r??W???^???Z???X?$???Q???^???D$@L??H??$`L??1?H?L$ 1?H??$?I??ffffff.?H?L$`L??$?H??$`L??$?L??$`ff.?H?D$H??L???D$@???$?
H??$?
?M??A?H??M????w?پM??H?$M?L9?|?H?L$`H??L??$?L?$?H;L$0?X???H?T$ H??H??$?H?$H??H?T$ H;?$?????????W???^???Z???X?$???Q???^???D$@M??H??$?L??L??L??$?I??L??H??1?H??$?1?L??$?L??$?H?D$ L??$`L??$@L??$?I??H??L?H?D$H??L?H??H??$??w讼??D$@???$?
H??$?
?A?H??H??L??$ 臽L??H?T$`L?$?L?$?M?L;?$??s???H?D$ H??L??$@Lt$8L??$`L?$H;D$0?#???H??$?H??L??$?L?$L??$?L?$?H??H??$?H;?$???????z???1???H??I??tI9?u5L??I??H?|$0tI9?u!L??H?D$0H??$???$I9???$H??$?H?L$??$H?|$0??$H??$???$????$L??A??I??H??$?H?H?H??$`????H??$ I??I???H??$?M?,GL?4?I?<L?@M?E1?L??$@L??$??HL??$@I??H??$xL??$`I?H??$?H?L??$?I?L??$?I?I9??$L??$@1?L??$?L??$?H??$?L??$`?gff.?H??$H??H??$L??$?I?H?|$`H?L?D$@I?I?H;T$0H?L$H??$?M??L??$@L??$??%???L??$?H?|$`L?D$@H??$H??$`L??$?sE1??wf?1?E1?ff.?H??$?H?<L??M??M????w袸H?D$`H?<L??葸H??$?H?<L???}?H?D$@H?<L???l?M??M??I??L?M9?u?H??$ M??L??$?L??$??????M??M?H??$ f.?L??L????w??M?H??u???????W???^???X???a????Q???(???^????$???
/???^????$?I???H??H??$0H??H??$ I??H??$`H??H??H??H??$H??I??H??$@L??H??H??H??$@L??I??H??$?1?H??$??TH??$?H??H??$?H?$ L??$?L?$L??$?L?$@H??H??$?H;?$????L?D$ M???/H??$?H??I??H??$@H??I??H??$H??H??$`1?H??$@L??$H??$8H??$H??$ ?Pffffff.?H?t$8H??H??$8L??$`I?H??$H??$@H?H;t$0H??$ ?????I??L??L??$?H??H??H??$?H?t$8H??H??$ H??$@L??$`L??$0???Z???^???X???I????Q??????^????$L??H??$?H?L$H??H?$ H?$`??Z???y??H???W???^????$?
H??$?
?A?H??H??L?l$`M????w?o????$???$?
H??$?
?A?H??H??M????ā~\????????}X.???????}X%???????}X%?????ā~L??ā~T??ā~\??ā~$?I??@??}X
X?????I????J???A??tPL??H?T$@??}X
??HT$`??????}X????????}X??????ġ~?ġ~L? ġ~T?@ġ~\?`H??H?|$ H9????????H??H9?u?????H?D$H??1?1҃?с????f??*?L9?$??#H??$@H??I??H??$?1?H??$?H??$?H?$?H??$`E1?H??$@I??L??$L??$`L?$`L??$ M??L??$?@I??L?L??I??L?L????w??$?L?\$@L?T$`L?$?I?L;?$?|?L??$I??L??$ L?$?L;l$0L??$??b???H??$?H??H??$@H?$`L??$?L9?L?L$ L??$??????H??$0E??u
??$???????H??$?t=?????????9?uǀ???????9?u?????H?L$0H??I??D??	???HD?$?H?D$@H??H?L$0H???@?HD?I??HD?J?	H??H??H?? t
H?H??H???1????L??$?I?q?H?D$0H?H??H??H?? tH?H???1???L?T$0I?J?H??H??M??N??L9??ƒ=?3A??A?M9ѺIO?A?MN?E??I??LD?LD?L?H??L	?H?? t
H??H?I?????1?A??H??$ H?=??	L?T$`L??L?H??L	?H?? t
H??H?H?????1???H??$L??H??$H?x(H?T$@H?x ?Y	L??$?I??L9???1?H????H??H??$`H??H???H??$?H??H??$?H??$8H??H??$?H	?H?? tH??H?H??H??H???
??1????щ?H?D$ H??H??$ H??I??H??$?H?H9?HM?H??$@H??$H??I??H?H?D$0H9?HM?H??$ H?T$L???L???I?CH??$?M?S M?K(M?k8I?C@H??$?E?$Ik?xH?5k?	L?t0H?\0I?CHH??$I?t$I?D$H??$?I?D$ H??$@I?|$(I?D$8H??$8I?D$@H??$L??$?I?D$HH??$(H?BH??$`H?B0H??$?H?B8H??$`H?B@H??$@H?BHH??$ L??$?E?L9?tH??$?H9X0??H??L	?H?? t'H??H?I??H??H??$?u&H??$@H??u??Q??1?A??H??H??$?t?H??$8H9?H??$@uCH??H??$?H??tH??$H9?u$H??H??H????H9?$(??Љ?$?? DŽ$??DŽ$?H??$@Ik?xH???	L?\HL??$??DPH??$?H??L	?H?? t9H??H?I??I??H??L	?H?? t8H??H?I??I??H??$@H9?$?|;???1?A??A??H??L	?H?? uȉ?1?A??A??H??$@H9?$???L??L;?$ ??H??$?HH??$?A9?H??$(HE?H?H??$@Hk?xH???	H?tH?|H??H	?H?? t
H??1?H?????1???D;?$?H??HD?$8??$?H??$?HE?H??$`H??1?H?T$@H??A?MM?L??$ HL?H??$H??$?H?H??$xH??$ I??H??H??$?I??H??$?I??L??$0H??$`H?H??$?L??$?L??$H??$??@H?D$8I??H;?$ ?I?GH?D$8H??$?H??$?H??$xH??$H??$?H??$@L??$8?F?H??$H??$?H?$0H??$?H??$@H?L$`H9?L??$8?a???H??H??H9?H?L$`HL?H??$?H)?H??H??$??L??H	?H?? tL??H?H??I????D??1???A??M??L??L??H??$`H??L??H)?H??H	?H?? t>H?H??I??H??L??L	?H?? tu/L??$8H??H??$M??L??$(I?M??fDI?L??$?M?L??$?L?$@H?t$L??H??$@L??$ I?L??$@H?$?H?H?L??$?
L??$H?L$@@?L$H??$H?$H??$?L??H??$`H??L??$ M????w??$?H?L$@L;|$`}!I?H?$?L?$?L;?$@I??|?H??L??$??SH??$?H??$`H??$@H?I?E1?H??$?
A?H????H?L$@???L??H??$`H??L	?H?? ??1?I???f?1?I??H?$?I?H?$M?6L??$H??$?L??H??$@L?H??$?H??$ L?H??$@L?L?K?"H??$@L?$?L??$?H??$?L??$?I9???H??$?L??$`L9??? ???$?1??DH??L9??????H??$ H??$?L?H??$?ġz?M??H??$?H??H??$?L?$M?H??$@L?,M?H??$@L?H??$I?H?$?H?H??$?L9?@??H??$`I9?A??A ?D
?$?H9?@??I9?H??$ ??$`L;?$?@??L9?$???$@I9?A??M9?H?L?\$`??z?L??$???z?L??$??z?A??1?E????@"?$`??@"?$@L?T$@??E ?L??$?????}???}???}???}?1?L?d$8f?H?4J?<?A\Y??A\YL? ?A|??A|\? ?|(??B=???|(??B5???BM?$??BM?l? ?A|$??A|l? ?BE???BE???|??|\? H??I???u?H?t$8H??I9?????? L??$?L?T$@?L??$?f?M??I)?f.?H?4J?<??rY$???z,???(???Y????i?4???z4???a????,?H??I??u?????H?D$0I??H??H??$???H?L$~H????H????w苕H?L$??$??)?H??$?????$???H?|$0????$??H??$????|$8?ذ?|$ ?ͰL?D$ L??H??E??H??H??$@H????$?H??$???$?H??$???$H??$??L$8H?L$@H??$?H??$?H??$?H?L$0H??$@H??$?H??$?H??$?H??$@D????M??H??$`I)?A??M??M)?J??H??$?I?O?H?L$`H?N`H??$?H?J`H??$?H?NH??$?H??$@H?JH??$01?H??$?H??$?H??$??DH??$?H??H??$?H?$?H?$?H?$?H??H??$?H;?$??[?A?? ? 1?L??$?H??$@H??$@H??$0H??$`H??$??\ffff.?H??$?H??H??$?H??$ H?H??$xH?$`H?$@L??$?I?H;?$??"???H??$?1?L??$?H??$ ?9DH??$?H??H??$?H?\$8H?L??$I?H;?$??\???H??$?1?L??$H??$@H??$?H??$`H??$`H?\$8?LH??$?H??H??$@H?\$H?H??$H?$`H?$?L??$?I?H;t$0?G???H??$?1?L??$?H?\$?Efffff.?H??$ H??H??$@H??$?H?L??$@I?H;?$??Y???H??$ 1?L??$@L??$?H??$`H??$??Jffff.?H??$?H??H??$?H?H??$?H?I?L??$I?H;?$??S???H??$?1?L??$I???fff.?H??I?I?H;|$@t?H?|$`s1??f@1?fffff.???zD????XD????D????zD????XD????D????zD????XD????D????z???X????H??I9?u?M???u???I??I?4?E1?f.?ġz?ġzX?ġz?I??M9?u??A???H??$?H??$?H??$?H??$8H?H??$?E1?H??$?H??$ H??$@H??$H??$?H??$8H??$?H??$?H??$@H??$?L??$L??$xH??$?L??$@?YL??$I??H??$?H?$?L??$xL?$8L?$L??$?L?$ L??$xL;?$??????H??$?L??I??L??$?H??$ L?H??$?L??$?L??$M??H??$8L?H??$?L?$?L??$01?L??$ L??$??9f?H??$?H??H??$?L??$(I?L??$8I?H;?$??????H??$?H??H??$?H?H??$?H?$0H??$@1?L??$8H??$H??$@H??$8H??$`L??$(?RfDH??$ H??H??$@L??$I?L??$L?$`L?$@L??$?I?H;\$0????L??H??$ L?H?t$L?$?L??$?H??H??$ H??H??$?H?H??$?H?$@H??$?1?L??$?L??$L??L??$??Cffffff.?H??$?H??L??$@H?t$8L?L??$M?H;?$??????H??$?L??H??$?L?H??$?L?$?L??$`E1?L??$H??$@L??$`H?t$8?Pff.?L??$?I??H??$?H??$@H?H??$?I?H?L??$?I?L;?$??+???H??$@I??H?L$H?49H??$@H?H??$?H?$?H?H??$L??$?I??H??$?H?H??$ H?$`1?L??$?M??L??$@?f?H??I?I?H;t$@?,???H??H??H?<
L?H9?$?s$H?$ L?H;?$s1???1?fffff.???|D????|L????|T????|???|XD????tXL????lXT????dX\???|D????|L????|T????|\?H?? I9?u?L??H??$`?2???H?|$ )?L?L$`I)?H??t%ffff.???z???X????H??H??u?I??L??$??????fD??z???X??????zD???XD???D???zD???XD???D???zD???XD???D?H??I9?u?????1???A??H????H??L	?H?? t
H??H?I??H???	??1?A???H???H?D$0H??L	?H?? t
H?I??H???1?A???H???TL??L	?H?? t
L??H?I???D??1?A??H???-H?T$H?z0??$L??$?L??$?L??$?H?y0??$??H?T$???H??$?????????H??$?????????H??$???E???v?H???m?L?A8L??$?L?A@L??$@L?AHL??$xL?B8L?J@L?RHH??H????H??$p??H??$???H??$?D??H??$H??$?L??$ I??H??$?H??$?L??$ I??H??$?H??$?L??$`I??H??$?H??H???H??$?I??I???H?C?H??$ H??H???ƃ?H???H??$??؃?H?D$ H??$`H??H??$@H?H??$?H???H??$?H???H??$?H?B H??$?H??$H?A H??$?H?BH??$?1?H??$?H??$xH??$0?LH??$?H??H??$?H?$?H?$?H?$0H?$?H??H??$?H;?$p???H????1?H??$?L??$?L??$@H??$xH??$??7fDH??$?H??H??$?H?$ H;?$?H??$x?G???H??$?H??H?$H?D$@1?H??$??0f.?H?D$`H??H??$?H?$?H;?$??z???H?D$`E1?H??$??(?I??L??H?$ L;?$?L??$@t?M??Ll$@1?I???H??H?$?H;?$?t?E1?I??? I??L?$`L;?$?L??$?t?M??M??H??$?
f?I?H??t?C?DfA?D$?H??t?C?DfA?D$?H??t?C?DfA?D$?H??t?C?DfA?D$?H??t?C?DfA?D$?H??t?C?D
fA?D$?H??t?C?DfA?$?|???H??$?H??$?H?$xH??$?E1?H??$H??$8H??$?H??$0L??$0L??$?H??$?H??$?H??$?H??$?H??$`L??$ L??$ L??$?L??$?H??$??}fDL??$8I??H??$xH?$?L??$ L?$?L??$?M?L??$?M?H??$xH?$0H??$xH?$8H??$?L;?$??????M??L?$?L??$?L??$xL??$8M??L?$L?L$0E1?L??$?L??$?M??H??$?H??$?L??$H?T$ ?Nffffff.?L??$8I??L??$?L?$?L??$M?L??$(M?L;?$??????L??$8M??L?$?L??$?E1?L??$8L??$?L??$0L??$?L??$(L??$L??$?H??$?H??$?H??$@?bL??$I??H??$@H?$?L??$ L??$ M?L??$?M?L??$@M?H?$?H?$?L;?$??????M??L?$?L??$L??$I??HL$0H??$@1?L??$@L??$?L??$ ?DDH??$H??L??$?L??$`M?L??$@M?L?d$8M?H;?$?????H??$L??L?$L??$@1?L??$?L??$?L??$?L?d$8L??$@L??$`M??L??$??Vf?H??$?H??H??$?I?H??$`I?L?|$I?L??$?I?H?$?I?H;?$?????H??H?$@H?|$@H??$?H??H?$@H?D$`L??E1?L??$?L??H?L$M??L??$??fDI??I?H?H?M9??K???H??I??HD$@H+D$`H??@sE1??|fff.?H?? s
1??CH??$ `sE1??E1?H??$?f?ā|?B ???ā|?B@???ā|?D ???ā|?D@???ā|?B`???ā|LB?ā|?D`???ā|LD?ā|DB?ā|LB?ā|DD?ā|LD?ā|DB?ā|Bā|DD?ā|DI??H????r???H??$`H??$@tAJ?AN?,GH??$?J?BO?AE1?@ā|ġ|ā|Dġ|I??@L9?u?H;?$?L??$H?T$ H??$?L??$??????L??$?L????t#??xA??GH??I9?u?M??L9??P???L??H??H?H??tf?G?AfF?GI??H??u?H??H?T$ L??$??????C?AfB?GC?DAfB?DGC?DAfB?DGC?DAfB?DGI??L9?u??????I???H??$?H??$@H??J?4?K?<@1??B?B?B?:H??H?I9?u?H?????I??H??$@H??H?$?H??$??L?H??$?H??u????H??H??H??$?H??$?H????d1?H?D$`??eI????8?T??$H?t$?p?L?H L?HL?H(E???Y?H?HH?L$ ???H?H?H8H?V8L??H??H?D$ A??D??H??$???M??H??$?I)?H?^`M?u`H?t$`L?~1?L?l$@?H??H?I?I?I?H;?$??יI??L??Ld$@I??L??LT$`A?? sE1???L??L)?E1?H?????ġ|D??ġ|L??ġ|T??ġ|???W??????????????\???????????????b}
@?????ŴT?ŴT?ŴT?ŴT???}%„??}J?P??uJ?`??mJ?p??eJ܀ā|D??ā|L??ā|T??ā|?I?? M9??W???M??H??$??????H?t$ D)?I?{@??t8āz???W???????????T???????y
5???iJ?āz?I??I9??????āzD????W???????e???T???????%???iJ?āzD?āz???????T???????iJ?āzD?I??M9?u??4???I????8???$L?D$??H?p H?pH?p(????H?x????H?H8I?P8M??L??A??A?????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@?I??H?I?I?I?M9????A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??t"āz???y
݂??W?āzD?I??H??u?H???x???āz???y
????W?āzD?āzD???W?āzD?āzD???W?āzD?āzD???W?āzD?I??M9?u?????1???}W???WL????WT????W\????W???|L????|T????|\????|?H?? I9?u?M??H??$??
???????I????8?T??$L?D$?6?H?p H?pH?p(??? ?H?x????H?H8I?P8M??L??A??A?????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@?I??H?I?I?I?M9????A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??t&??W?āz????
???T?āzD?I??H??u?H???t?????W?āz????????T?āzL?āz?L???T?āzL?āz?L???T?āzL?āz?D???T?āzD?I??M9?u?????1???W????L?????T?????\????????}%B???T???T???T???T???|L????|T????|\????|?H?? I9?u?M??H??$??????????I????8???$H?t$?D?H?H H?HH?H(???.?H?P???"?H?x8H?|$@A??H?V8H?T$`L??L????H??$?E1?1???zD???w?(z??z?H??I9?u?I??Ld$`Ll$@L;?$?u?鷓I????8????$H?t$???H?H H?HH?H(???~?H?P???r?H?x8H?|$@A??H?V8H?T$`L??L????H??$?E1??I??Ld$`Ll$@L;?$??%?1????z?H??I9?t???zD???W???.?w???w??w??I????8?J??$L?D$?ՒH?p H?pH?p(?????H?x?????H?H8I?P8M??L??A??A?????M??H??$?I)?I?\$`M?u`E1?L?d$`L?l$@?I??H?I?I?I?M9??T?A?? r'L??H??L??H??Ht$`HD$@H)?H=???E1ۉ?D)?L??H??L?H??tāz???W???_?āzD?I??H??u?H??r?āz???W???_?āzD?āzD???_?āzD?āzD???_?āzD?āzD???_?āzD?I??M9?u??(???1???D????L????T???????W???_???_???_???_???|D????|L????|T????|?H?? I9?u?M??H??$??
????????I????8????$H?T$?	?H?H H?HH?H(????H?pH??$????ߐH?p8H??$?H?r8H??$L??L??H??$??É?H??$???H??H??$?H)?H??$?1?H?D$ L??$`L??$@?.H?L$ H??L?$?L?$H??H?L$ H;?$??E?H?D$ H??H??$H?$`H??H??$?H?$@??rH??H)?H?? ??E1?H??$?D)?M?l$?tDġz???y
?{??W?H??$ ??w?t??
Q{??X???^?H??$ ġz?M??L9??,???āz???y
<{??)L$@??W???w?]t??
{??X???^?āz?āzD???WD$@?5t??
?z??X???^?āzD?I??L9?u?????H??$?H??$ E1?L??$???}?zā|W???)D$@??}???)D$`??w??s??)?$???yD$`??s??(?$???q!???)?$???yD$`N?s??(?$???q!? ??)?$???yD$`??ls??(?$???q!?0??)D$`??(D$@??w?Is??)?$???yD$@??3s??(?$???q!???)?$???yD$@N?s??(?$???q!? ??)?$???yD$@???r??(?$???q!?0??}D$`??}
zy??X???^?ā|?I??M9??????M??H??$?H??$ H??$???????5???M???A?:?3Hc?$??$E?B E?BE?B(B??ș??Hc?H???D9?AM?9?L?L$?T?I?R???H?I?B8??I?q8Hc?I??L??M?I??L??M??H??I?I?H9???E1???ș??Lc?I??A?A9?DM?D9?H?|$?M?I?P???A?I?@8??H?w8H??M??Mc?A??A??A??A???H??H??L?D$@L?H??I??L??I??I?I???H??H?I?L9????E1???t_ġzD????y??y??L?-??G?deH?=?	ġz?āzD??ġz???y??y??G?deġz?āz?I??M9?u?M??t?H??H??I??L??L?Ld$@āz???y??y??L?-??G?deL?-i?	āzD?ġz??5???I????8??
Hc?$??$?p ?pH??$@?p(?1?ș??H?H???9?M?H??$ 9??ЊH??$@H?QA?փ?H??$`???I???IC?H?H??$????L??H)ȃ?H??$?H??$@H)?H??$?H?D$?)H??$ H??H??H??$ H;?$?H?D$?B?L??H?x8H??$ H??M?H??H?H??I??H??L??L	?H?? t;L??H?I??I??H??H	?H?? t;H??H?H??I???7??1???A?ԉ?L??L	?H?? u?D??1?A??A??H??H	?H?? uʼn?1???A??L??H	?H??H?? t
L??H?H??I???
D??1???A??L??H??$?L??$?M?L??$?M?H??H??$?L??$?M?L??H??$`L??$ H??$L??$?H?D$ H??H?T$uE1???H?\$`L??$@M?I?L?$L?<I?L|$8E1??0f.?L??H?H??I??āz???z^āz?I??M9?tbM??L??H?\$@H	?H?? tL??H?H???fff.?D??1???I??āzD????z^āzD??M?QL??H	?H?? u?D??1????I??H?D$ H?\$`L??$?L??$@?L?T$@?????H?$@L?$?H?Lt$H?M?L??L	?H?? ?L???D??1?A???G???1?A??H?D$ H????_N?$?H??H?L$0H	?H?? t
H??H?H??H?????1????H??$?L??$`L??$@H??$?L??$@H??H	?H?? t>H??H?H??I??H??H??H	?H?? t;H??H?H??H??H??L	?H?? t8H??H?I??I???5??1???A?Չ?H??H	?H?? uʼn?1?????H??L	?H?? uȉ?1?A??A??L??L	?H?? H?\$`t
L??H?I??I???D??1?A??A??H??H??$?H?T$H?H??H??$?H?M??L??$`I?H??$ I?H??$H?L??$?I?H??$?H??$@H?L??$?I?L??$?M?H?\$ fffff.?L?$??A?L??L??M????w?:DL?T$@M?M?H??u?H?\$`H?$?H;?$??????]1???H??L?t$?j?L9??a?H??$?I9CH?D$0?J?I9C ?@?H??$?I9K(?.?I?~0???I?{0H??$????Hc?$Hc?$H??$?H??$?H?D$0H??I?C8H??$?I?C@H??$L??$@I?CHH??$ I?GH??$`I?G H??$@I?G(H??$?M?_0I?G8H??$?I?G@H??$?L??$@I?GHH??$?I?F8H??$`I?F@H??$?I?FHH??$?I??L?T$@H??$?u(H9??U\H?D$ H??L	?H?? ?>H?I???9H9?H?D$?(\H?|$ ?\H??H??$@H??H??$@L??L?l$ I???H??$?H?BH??$H??$@H?AH?D$8L??$??4L??H?I??I??āz???zYġz?H?$?H;?$???[H??H?L$0H	?H?? t
H??H?H??I???	??1???A??H??$`H??$@L??$?H??H??$?H	?H?? t>H??H?H??I??H??L??L	?H?? t;L??H?I??I??H??H	?H?? t;H??H?H??I???7??1???A?ԉ?L??L	?H?? u?D??1?A??A??H??H	?H?? uʼn?1???A??L??H	?H??H?? t
L??H?H??I???
D??1???A??L??H??$?L??$?M?L??$?M?H??H??$?L??$?M?L??H??$`L??$ H??$L??$?H?D$ H??H?T$uE1???H?\$`L??$@M?I?L?$L?<I?L|$8E1??,fDL??H?H??I??āz???zYāz?I??M9?tbM??L??H?\$@H	?H?? tL??H?H???fff.?D??1???I??āzD????zYāzD??M?QL??H	?H?? u?D??1????I??H?D$ H?\$`L??$?L??$@?L?T$@?????H?$@L?$?H?Lt$H?M?L??L	?H?? ?P???D??1?A???K???1?A??H?D$ H????XN?$?H??H?L$0H	?H?? t
H??H?H??H?????1????H??$?L??$`L??$@H??$?L??$@H??H	?H?? t>H??H?H??I??H??H??H	?H?? t;H??H?H??H??H??L	?H?? t8H??H?I??I???5??1???A?Չ?H??H	?H?? uʼn?1?????H??L	?H?? uȉ?1?A??A??L??L	?H?? H?\$`t
L??H?I??I???D??1?A??A??H??H??$?H?T$H?H??H??$?H?M??L??$`I?H??$ I?H??$H?L??$?I?H??$?H??$@H?L??$?I?L??$?M?H?\$ fffff.?L?$??A?L??L??M????w?=L?T$@M?M?H??u?H?\$`H?$?H;?$???????V1?A??A??H???ϷH??L	?H?? t
H??H?I??H???	??1?A???H?????H?D$0H??L	?H?? t
H?I??H???1?A???H???y?L??H	?H?? t
L??H?H???D??1???H???S?H?T$H?z0???H??$?L??$@L??$@L??$?H?y0?????H?T$?&VH??$??V???VH??$@?V????UH??$@??UE????U??$???UL?A8L??$ L?A@L??$L?AHL?D$0L?B8L?J@L?RHH??H????H??$???H??$ ??H??$?D??H?D$@H??$?L??$?I??H??$?H??$@L?L$8I??H??$@H??$@L??$`I??H??$`H??$??ƃ?A??M??H??$I)?A??A??L??L)?H??I?D$?H?D$`H?A`H??$H?B`H??$?H??$(H?AH??$?H?BH??$x1?H??$8H??$ H??$0?DH??$8H??H??$?H?$?H?$0H?$xH??H??$8H;?$??KTA?? ??1?H??$(H??$`H??$0L??$xH??$?H??$??OH??$?H??H?D$0H?$?H??$?L??$I?H??$?H?H??H?$`H;?$??/???H??$?1?H??$?L??$?9f?H??$@H??H??$@L??$?I?H??$?H?H;?$ ?\???H??$@1?H??$`H??$?H??$?L??$?H??$?H??$??Yffff.?H??$?H??H??$H?$?H?L$8L??$@I?H?t$H?H??H?$?H;?$@?4???H??$?1?H?L$L??$@?Bff.?H??$?H??H??$`L??$?I?H??$?H?H;?$??Y???H??$?1?L??$?H??$?L??$?H??$??Jffff.?H??$?H??H??$ H?H??$`I?L?L$ I?L??I?H;?$@?S???H??$?1?H?L$ M???ffffff.?H??I?H?H;t$@t?H?|$`sE1??RE1?ffff.?ġzD??āzD??ġzD??āzD??ġzD??āzD??ġz?āz?I??L9?u?M??t?J??O?,?E1ɐāzD?ġz?I??M9?u??f???H??$?H??$8H?$ H??$E1?H??$(H??$?L??$0L??$?H??$H??$ H??$H?L$0H?T$8H??$?L??$`?DL??$?I??H?L$0H?$ H??$?I?L??$8I?H?$?L;?$??????L?l$ I??H?$H??$?L??$?I??H?$(H??$1?L??$8M??L??$ H??$`??fDH??$?H??L??$@L?$@L??$L?$@H;?$ ?)???L??$@H??$?L??L?$?L??$?1?L??$?L??$@L??$L??$@L??$ L??$??[ffffff.?H??$`H??H??$H?$?H?T$8L??$?I?L??$?I?H?$@H;?$@????H??H?$?H??$?H??$`H??H?$H??$?1?L??$?L??L??$??Affff.?H??$?H??L??$`L??$@M?H?T$L?H;?$??,???H??$?L??L?$?L??$?1?H??$@H?T$L??$@L??$??Tffffff.?H??$?H??L??$ M?H??$`L??$?I?H??$?H?L?H;?$@?;???H??H?$?H??$?H??$?L??L?$?E1?H??$?L??$??'fffff.?I??I?H?L;\$@L?l$ ?W???H??I??H?$?L)?H=?s
E1??i?1?fffff.???|D????|L????|T????|???|D????|L????|T????|?H?? I9?u?M??H??$?_???H??$?D)?H?D$`L)?H??tfDġz?ġz?I??H??u?H???"???f?ġz?ġz?ġzD?ġzD?ġzD?ġzD?ġzD?ġzD?I??M9?u?????????%T????L??W???^?H?L$ H??H?????}?H???H??H??H?‰փ?H???H??H???M?J??M9??bLL?T$ E1?I?? ??H??`??I??ġ|?ġ|L? ġ|L?@ġ|L?`ġ|???ġ|???ġ|???ġ|???ġ|??ġ|?? ġ|??@ġ|??`ġ|???ġ|???ġ|???ġ|???I??I????_???H??t+N??E1?ā|ā|L ā|L@ā|L`I??L9?u?I??I9??????ġz?I??M9?u??????H??$@H??$?1?1??H??H?$`L9??/???H??$?H??$?H??$?H?$?H??$?1?H??$ H??$@?tff.?H??$ H??H??$@H?$?H??$@H??H??$ H;T$0L?L$ L??$?L??$?I??H??$`H??$?H??$??;???I?|$(I?|$ ~E1??
E1?I?|$LM?M?L??$?M9?H??$?H??$??Q???L??$ L??$`L?$?L??$H??$@I??H?$@fff.?H??H?L??I??H?$L??I??I????w??$?L??H??$?L??L?\$@L?T$`M?L?M9?|?????H?T$@H??H?????}?L??$`I???H??$ I??L??$I?H??`H??$?H?L$ L??M??H??$@L??L??$?H?4?H?t$`H?4?L?H??$?I?4H??$@H??L?H??$???H???IH??$?H??H??$ H?$?H?$?H?$@H?$?H??$?H;?$??HH?|$@ ?k1?H??$?L??$?L??$@1??P@H??$ H??H??$?L??$I?L?L$ I?H??$?H?$@H??$?H;?$??=???H??$ 1?L??$@L?L$ L??L??$?H??L?L$`M?L?M?H;?$??q???H??$`uE1??g?E1?H??M???E1?L?|$@?āzX?āz?I??M9?u?E1?f?ġzX?ġz?I??M9?u?I??I??I?H?M9?u???$`H?\$@?W???L?$?M??M?E1?DāzX?āz?I??L9?u??'???E1?L??$?H??$??)f?I??H??$?H?L??$?I?L;?$?????E1?L??$?H???!f?I??H?D$`H?I?L;?$?t?E1?M??I??? ffff.?I??M?M?L;?$`t?1?ff.???tXT????tX\????tXd????tXl???|T????|\????|d????|l?H?? H9?u?H9|$@t?1?fD??zX???z?H??H9?u??w???H??H???????1?????????L??$8??}?D???u?L?(??m?T?H??e?\?h??}ԄЈ??uԌШ??mԔ????eԜ??H?? H???u?H??H???@??t'H??H??H??$8??????L ???T@???\`??????????????}9???????p?????????~?H9?uH?L$?H??H?L$H??$8L?H??H9?u?H??L??,EH???L??L?@1?I??A?A?A?BC?
H??M?H9?u?H????DH??H??H?H??u???DA???[E????DH??$?H?d$ H??$@L??$?H?T$ H?5[1H????w??)H?T$ H?I??u?H?D$@H?$?H??$@H?$?H??$@H?D$@H;?$`r??:D???2DE????$?؉?$??DH?D$@H??$?H?HL$`H??$`H??$`H??H??$`H?D$@H;?$???C1?D??$??"ffff.?H??$?H??H;?$?t?H??H??$?H??$`H??H?D$ ??$@H??$???+?$???$ Hc?E1ɋ?$??+??X????DI??D??$?D?L;?$??t???Lc?H?L$ ġz?E??D+?$???????
)/E1ۺ?????I??I9???L??H?x?A??H?L$L9q~?L?q8Lt$`1??(O?$???z$??.?AB?B???????qJ?0H??I9?t?M??I?x?E??L?l$M9e~?A?}t?G?$fI??L%?t	?f????????????????$ Hc?H?T$H?J8HL$@D??:Hc???????4QL?[t	??zX???W???q???y???yQ????H???j?A?>???I????9???I;q???H??$?H;A???H?D$0I;A ???H;A ???L;A(??M9A(?*?I?y0?C?I?~0?\?I?AH??$pI?A8H??$?I?A@H??$@I?AHH??$8H?A0H??$0H?A8H??$?H?A@H??$(H??$ H?AHH??$ I?F8H??$I?F@H??$I?FHH??$Hc?$Hc?$I?Dž?L??$?u7L??H?D$0H??I????~"H?L$H????H????w??$L??$?H??$0??????a?????????9?uǀ?????da??9??Sa???A?;H?T$ ???M?KM??H?D$L??L??$???,M?CM????,I?{ H????,I?s(H????,I?JH??L	?H?? ?ĔH??H?I??龔A???H?|$ ?E??L??$??B?I?BI;C???I?JI;K???I?R I;S ???I?r(I;s(???H9??~?L9??u?H;T$0?j?H;?$??\?H?D$?8???H?x0??I?z0H?D$0????$??$I??H?D$0L??$?D??I?{0A?0?ș?????D9?AM?H?????9?H?T$??>H?|$ ??>H??$?H?~8H??$ H?~@H??$`H?~HH??$@H??$L?G8L??$?L?G@L??$?L?B8L??$?L?B@L??$?L?BHL??$`H??H??L?GHL??$?H??Hc?H?H??$L?|$ I???H??$?H?FH??$@H?|$H?GH??$@H??$?H?BH??$??H??H;?$??=H??H?|$0H	?H?? t
H??H?H?????1???L?L$ H??$?Lc?L??H??H??H)?H??H	?H?? tH?H???1???Hc?L??H??$`I??L??$?Hc?I??L??$?L??H??$@H??H??$`I??L??$ L??$?H??$?H??$?I??L?T$@L?\$`L??$?uE1??N?,6I?L?$@M?$I?L?$@N?M?L?$?E1?G?Tu?L??n	āz?G?Tt?āzX???W???q???y?ăyDq?G?Tuāz?G?tāzX???q???y?ăyqI??M9?u??D$ ?l???H?$?H?$?LD$HD$`H?I?HD$@H?$?I?B?vH?5Kn	???C?p??X???W???q???y?ģyp????A???H?|$ ?8B??L??$????I?BI;C??I?JI;K?޼I?R I;S ?мI?r(I;s(?¼H9????L9????H;T$0???H;?$????H?D$?8???H?x0???I?z0H?D$0?????$??$I??H?D$0L??$?D??I?{0A?0?ș?????D9?AM?H?????9?H?T$??:H?|$ ??:H??$?H?~8H??$ H?~@H??$`H?vHH??$@H??$H?~8H??$?H?~@H??$?H?vHH??$?H?r8H??$?H?r@H??$`H?RHH??$?Hc?H?L$@H?H??$?H?D$ H??H???H??$?H???H??$??I??L?t$@L;?$??:L?t$@L??L?D$0L	?H?? t
L??H?I???D??1?A??H??$?Hc?H??I??L??H)?H??H	?H?? tH?H???1???Lc?I??L??$?M??L??$`Lc?M??L??$?H??H??$@L??H??$`M??L??$ H??$?L??$?L??$?H?D$H??H??$?H??H??$H??H?|$ H?|$`L??$???E1?I?M?K?M?M?YI?O?,I?M?ZI?L??$?I)?1???}3Z??r???}U??X???T???}X%H??f???r???}X-:??????}X51??????????r???}X-??????]J?0??}???i+???zYH??I9?u?L??$?M??L9L$ ?????????O?I?I?M?M??H?|$`fD?????q??H??I??u?H??$?s2?-???ffff.?H?|$`H??$?????fff.???L????T????y????i?L???T????q?T??????i?D?H??I9?u??????Hc???W???|???|?E9?H?|$@?:H?d$  H?D$`H??L?D?ك?I??M??M??L??L??$@H??$L??I?H??H??H??$??)H??$H??L?$@H??$H;?$??L??$L??$@L?$`1??ffffff.?H??H;?$ t?H?T$ H??H?? H??$`L?4?I??L??$?H??$?L?$?1?L???+ff.?J?<:??rX???z?H??L??L?H;T$@t?H??t;I??H?|$`??(?ffffff.???z???i??H??I??u?H??s?@H?|$`??(?H??r????zT????z\????q????a?T???z\????i?\???z???a?L?H??I9?u??L???I??L??$?L??L?\$`L??H??H??H?H??`H??H??`H??H??$@H?$`1?L?|$@L??$ L??$?I??L?D$ I??L??$?I??I?E1?H??fffff.???W?E1???W???W???W?ffff.?ā|d??ā|l??ā|t??ā|M????cL9?$`??cH??$?I??L??$?L??H??$@L??$?H??$?L??$`H?|$H??H?|$@L???|$` r$I?<H?H?N?0M?M?L)?H?????1?L??$@A)?I??I??Ll$`I??tVN?
I?M??H??$?I?J?L?H??L??$?L?E1?ġz?āz?I??M9?u?L?L??$?H??$?I???]???L?T$`I)?L?H?H??H?H??L?L?H??L?H??1???D????D????D????D????D????D????????H??I9?u??????J?<L?L?H??`N?
I?I?I??`E1?ġ|D??ġ|L??ġ|T??ġ|?ā|D??ā|L??ā|T??ā|?I?? M9?u?L??H??$??????????H??H??$?H	?H?? H??$?t
H??H?H??H?????1?????H??H	?H?? t
H??H?H?????1???H?T$ H?$@H??$H?H??$ HcH???AaH9?$`?3aH??H9?$??d??????Z?H?D$H????H??$???toH???????̶???????????9?u ǀ????靶??f.???9?????????fffff.?H??$PH?@ H??t?H??$PH?y(??w?Є??g????H??$X??
ǁ(?H?????~?H?D$H???ց?????????????4????@f?????H??H?????}?H??$H???H??$?L??I??L??$?I?4
H??`L??$`J?M?M?YI?O?,I?M?ZI?L??$?I)?1???}3Z??r???}????X???T???}X%????f???r???}X-????????}X5????????????r???}X-????????]J?0??}???i+???zYH??I9?u?L??$?M??L9L$ ?????????O?I?I?M???)?$L??$???}>??)?$?L??$x??}>??)?$?L??$ ??}>??)?$L??$???}>??)?$?L??$??}>??)?$@L??$??}>??)?$ L??$0??}>??)?$L??$???}>??)?$?L??$???}>??)?$ L??$???}>??)?$`L??$???}>??)?$L??$???}>??)?$@L??$???}>??)?$?L??$x??}>??)?$ L??$p??}>??)?$?f?H?L$8H?H|$@?|(?$???%?:L???(?$???u?9L??|(?$??5?9L???(?$???u?9L???(?$@??u?9L??|(?$ ???9L???(?$??u?9L??|(?$????9L???(?$ ??u?9L???(?$`??u?9L???(?$??u?9L???(?$@??u?9L???(?$???u?9L???(?$ ??u?9L???(?$???u?9L???|D????|D? L????m?D??I??L??L??$8??e?8L???]?9H???(?$???]?;L???U?>L???M?:H???(L$`??u?9L???E?9L???(?$`??u?D=L???=?;H???(?$???u?9L???-?9L???(?$@??u?9L???
?9L???(?$???u?9L????9L?L?|$@?|(?$????H|$@??%?:L???(?$???u?9L???5?9L???(?$???u?9L??|(?$@??5?9L????9L???(?$??u?9L????9L???(?$ ??u?9L???(?$`??u?9L???(?$??u?9L???(?$@??m?9L???(?$???U?9L??|(?$ ??=?9L??|(?$???
?9L?L??$???|D????D?@??(?$@??e?D????(?$???e?8L???(?$???e?9H???]?;L???(?$???e?>L???M?:H???(\$`??e?9L???E?9L??|(?$`???D=L???(?$???e?;H??|(?$????9L???-?9L??|(?$@??-?9L???(?$@??e?9L??|(?$???%?9L???(?$???e?9L?H?t$@???>H|$@??(?$???E?:L???(?$???e?9L???(?$??M?9L???(?$???e?9L???5?9?A|(?L???(?$ ??]?9L???(?$??e?9L??|(?$???5?9L???(?$ ??e?9L???(?$`??e?9L???u?9L???m?9L???U?9L???=?9L???
?9L???|D??H?t$8??D?`??(?$@??e????(?$???e?8L?I??L????(?$???e?9H?L??H?L$@??(?$???e?;L???(?$???e?>L???(?$@??e?8L???(\$`??e?9L???(?$`??e?9L????D=L???(?$???e?;H????9L???(?$???e?9L???-?9L???(?$@??e?9L???%?9L???(?$???e?9L???(?$??e?9H???E?:L???(?$???e?9L???M?9L???(?$???e?9L????9L???]?9L???(?$??e?9L???5?9L???(?$ ??e?9L???(?$`??e?9L???u?9L???m?9L???U?9L???=?9L???
?9??|?H?? H;?$??????H??$?;D$ H??$@L??$8L??$`H??$X?????H?? ??M?L?$(1?DH??Ā	??H??Ā
L?1???????y????z?H??H9?u?H??H??H???	??H???
L?1?f??????y????z?H??H9?u?H??H?? ?y????4???@K?H??$(H?H??`L?$8I?1??fffff.?H??H?? ?????H??Ԁ
L??Ԁ	??}N?<I??`E1?ā|L??ā|T??ā|\??ā|$?Ģ}?L??Ģ}?T??Ģ}?\??Ģ}?$?ġ|L??ġ|T??ġ|\??ġ|$?I?? M9?u?H???m???H?$8E1?f?ġz?Ăy??āz?I??L9?u??A????H??$??????H??$?I??H??H??$(H??$I??L??$ I?H??$?H??H??$0I?L??$?H??H??$H??$H?H??H??$H?H??$L??$@H??$8H??$????CH??$?L?,8M?H??$?L?8M?H?$L?L??$??"I??H??$?I?I?H?L;?$0?????L??I??H??$?H??L??H??$ H??M??L??$?L?$?L?|$M??Ģ}2H??$L?|$`L?H??`N?<(E1?H??$?fffff.?ā|L??Ģ}?L??ġ|L??ā|L??Ģ}?L??ġ|L??ā|L??Ģ}?L??ġ|L??ā|?Ģ}??ġ|?I?? I9?r?;|$ L??I???????L??$pH?? ????}?J?H?\$`N?4H??$N?<3I??`E1?ffffff.?ġ|T??ġ|\??ġ|d??ġ|,?Ău?T??Ău?\??Ău?d??Ău?,?ā|T??ā|\??ā|d??ā|,?I?? M9?u?L??$`H???E???H??$hL)?H?\$`H?$N?4?N????9?H?T$????H?|$ ????H??H??$?H??H??$H??Hc?H?H??$@H?D$ L??L??$@L?GL??$?L??L??$?H???H??$`H?G0H??$?H?B`H??$?H?F`H??$?H??$?H?FH??$H?T$H?BH?D$8H??$?H?GH??$@?H??H;?$@?;???H??H?|$0H	?H?? t
H??H?H?????1???H??$?Lc?L??H??H??H)?H??H	?H?? tH?H???1???H?M??L??$`H??$?N?<&I??L??$?M?Hc?I??L??$?M?M??L??$`H??$?N?,2H??H??$ I?H??H??$?I?L??$?H?t$L?H??$?H?H??$@H?H?|$  H?|$@L?D$`sE1??]M?L??$M?L?$@L?L??$?M?L?$?L?4M?L?$?M9?A??M9?@??M9?A??L9?A??E1?A????E ?L??$?L??$??H?|$@M?>I?L?$?M?I?L?$?H?|$`M?41???w???H?=YH?iYH?
}??>1???w?`??H?=?XH?EYH?
c??>1???w?<??H?=?XH?!YH?
I??>1???w???H?=?XH??XH?
??>1???w????H?=?XH??XH?
\??>1???w????H?=iXH??XH?
???.:1???w???H?=EXH??XH?
???/:1???w???H?=!XH?mXH?
s??L:1???w?d??H?=?WH??Y??B1???w?G??H?=?WH?,XH?

??>B1???w?#??H?=?WH?XH?
ߐ??B1???w??
??H?=?WH?3Y?5'1???w??
??H?={WH?Y?)1???w??
??H?=^WH??X?*1???w?
??H?=AWH??WH?
???:1???w?
??H?=WH?iWH?
J???:1???w?`
??H?=?VH?EWH?
????:1???w?<
??H?=?VH?!WH?
???:1???w?
??H?=?VH??VH?
j???:1???w??	??H?=?VH?(X??)1???w??	??H?=pVH?X??*1???w?	??H?=SVH??VH?
???[*1???w?	??H?=/VH??W?.1???w?y	??H?=VH??W???1???w?\	??H?=?UH?AVH?
????1???w?8	??H?=?UH?VH?
?????1???w?	??H?=?UH??UH?
]????1???w????H?=?UH??UH?
???1???w????H?=eUH??UH?
?????1???w???H?=AUH??UH?
?????1???w???H?=UH?iUH?
?????1???w?`??H?=?TH?EUH?
ƌ???1???w?<??H?=?TH?!UH?
?????1???w???H?=?TH??TH?
?????1???w????H?=?TH?(V?pA1???w????H?=pTH?V??A1???w???H?=STH??U?N@1???w???H?=6TH??TH?
D???61???w?y??H?=TH?^TH?
???61???w?U??H?=?SH?:TH?
@??	(1???w?1??H?=?SH?TH?
1??
(1???w?
??H?=?SH??SH?
????'1???w????H?=?SH??SH?
???'1???w????H?=^SH??SH?
???31???w???H?=:SH??SH?
"??l+1???w?}??H?=SH?bSH?
????01???w?Y??H?=?RH?>SH?
???@B1???w?5??H?=?RH?SH?
1???w????H?=eQH??QH?
???>1???w???H?=AQH??QH?
u??>1???w???H?=QH?iQH?
g??
>1???w?`??H?=?PH?EQH?
Ӂ?>1???w?<??H?=?PH?!QH?
???>1???w???H?=?PH?LR?61???w????H?=?PH?/R??61???w????H?=wPH?R?z(1???w????H?=ZPH??Q?.)1???w???H?==PH??PH?
??u+1???w???H?=PH??Q??.1???w?c??H?=?OH?HPH?
???.1???w????H?=?OH?$PH?
????.1???w???H?=?OH?OQ?)/1???w????H?=?OH??OH?
???.1???w????H?=sOH??OH?
Z???.1???w???H?=OOH??P??/1???w???H?=2OH?~OH?
??7/1???w?u??H?=OH?ZOH?
B???01???w?Q??H?=?NH?6OH?
*???01???w?-??H?=?NH?OH?
???01???w?	??H?=?NH??NH?
????01???w????H?=~NH??NH?
??01???w????H?=ZNH??NH?
????01???w???H?=6NH??NH?
?}??01???w?y??H?=NH?^NH?
?~??01???w?U??H?=?MH?:NH?
?~??01???w?1??H?=?MH?eO?w31???w???H?=?MH??MH?
??BB1???w????H?=?MH??MH?
B??CB1???w????H?=eMH??MH?
܆?PB1???w???H?=AMH??N??'1???w???H?=$MH?pMH?
v|?L'1???w?g??H?=MH?LMH?
g|?M'1???w?C??H?=?LH?(MH?
g??'1???w???H?=?LH?SN??'1???w???H?=?LH?6N??(1???w?????H?=~LH?N??(1???w?????H?=aLH??M?J*1???w????H?=DLH??M?501???w????H?='LH?sLH?
??/1???w?j???H?=LH??M??31???w?M???H?=?KH??M??61???w?0???H?=?KH?LH?
?R?";1???w????H?=?KH??KH?
??#;1???w?????H?=?KH?M??-1???w?????H?=dKH??L??B1???w????H?=GKH??L?M(1???w????H?=*KH?vKH?
?~?^*1???w?m???H?=KH??L??51???w?P???H?=?JH??L??=1???w?3???H?=?JH?KH?
]??=1???w????H?=?JH??JH?
B??=1???w?????H?=?JH??JH?
'??=1???w?????H?=`JH??JH?
#??=1???w????H?=???H?=?GH?#HH?
K~?u<1???w????H?=?GH?NI?@1???w?????H?=?GH??GH?
?x?J31???w?????H?=rGH??GH?
?~?(>1???w????H?=NGH??GH?
?w??11???w????H?=*GH?vGH?
?{??11???w?m???H?=GH?RGH?
Xv??11???w?I???H?=?FH?.GH?
?w??11???w?%???H?=?FH?
GH?
?w??11???w????H?=?FH??FH?
w??11???w?????H?=vFH??FH?
?w??&1???w????H?=RFH??FH?
Bx??&1???w????H?=.FH?zFH?
?v??&1???w?q???H?=
FH?VFH?
{??31???w?M???H?=?EH?2FH?
mz??21???w?)???H?=?EH?FH?
Vz??21???w????H?=?EH??EH?
?y??21???w?????H?=zEH??EH?
?y??21???w????H?=VEH??EH?
?u??21???w????H?=2EH?~EH?
?t??21???w?u???H?=EH?ZEH?
?y??21???w?Q???H?=?DH?6EH?
?y??21???w?-???H?=?DH?EH?
bu??$1???w?	???H?=?DH??DH?
[u??$1???w?????H?=~DH??DH?
?t??$1???w?????H?=ZDH??DH?
)u??%1???w????H?=6DH??DH?
u??%1???w?y???H?=DH?^DH?
?t??%1???w?U???H?=?CH?:DH?
?t??%1???w?1???H?=?CH?DH?
?t??$1???w?
???H?=?CH??CH?
?t??$1???w?????H?=?CH??CH?
gt??$1???w?????H?=^CH??CH?
Nt??$1???w????H?=:CH??CH?
?s??%1???w?}???H?=CH?bCH?
Xt??%1???w?Y???H?=?BH?>CH?
s??%1???w?5???H?=?BH?CH?
x?y41???w????H?=?BH??BH?
?w??41???w?????H?=?BH?!D??81???w?????H?=iBH?D?q51???w????H?=LBH??C??81???w????H?=/BH??C?t91???w?y???H?=BH?^BH?
?r??81???w?U???H?=?AH?:BH?
?v??81???w?1???H?=?AH?BH?
?q??81???w?
???H?=?AH??AH?
_r??81???w?????H?=?AH?C? :1???w?????H?=eAH??AH?
$q??91???w????H?=AAH??AH?
nq??91???w????H?=AH?iAH?
.q??91???w?`???H?=?@H?EAH?
?q??91???w?H?7?H?
~t??51???w?.???H?=?>H??H?
ft??51???w?
???H?=?>H??>H?
Nt??51???w?????H?=>H??>H?
4t??51???w?????H?=[>H??>H?
t??51???w????H?=7>H??>H?
?m??51???w?z???H?=>H?_>H?
em??51???w?V???H?=?=H?;>H?
Am?,+1???w?2???H?=?=H?>H?
2m?-+1???w????H?=?=H??=H?
?r?)51???w?????H?=?=H??=H?
Op??(1???w?????H?=_=H??=H?
Gp??(1???w????H?=;=H??=H?
#p??)1???w?~???H?==H?c=H?
?o??)1???w?Z???H?=?<H??=H?
?o??)1???w?6???H?=?<H?=H?
?o??)1???w????H?=?<H??<H?
?o??)1???w?????H?=?<H??<H?
?o??)1???w?????H?=c<H??<H?
Pq?J51???w????H?=?<H??=??)1???w????H?="<H?n<H?
l??*1???w?e???H?=?;H?J<H?
l??*1???w?A???H?=?;H?u=?+1???w?$???H?=?;H?	<H?
k?71???w????H?=?;H??;H?
k?71???w?????H?=u;H??;H?
?p?251?????H?=T;H??;H?
?p?351?????H?=3;H?;H?
?p?S51??y???H?=;H?^;H?
&j?f#1???w?U???H?=?:H?:;H?
?m?T51??4???H?=?:H?h<?;1???w????H?=?:H??:H?
j??*1???w?????H?=?:H??:H?
?i??*1???w?????H?=h:H??:H?
vk?H%1???w????H?=D:H??:H?
qk?I%1???w????H?= :H??;?S;1???w?j???H?=:H?O:H?
qp??;1??I???H?=?9H?.:H?
_i?G$1???w?%???H?=?9H?
:H?
;i?{$1???w????H?=?9H??9H?
i??#1???w?????H?=v9H??9H?
?h??#1???w????H?=R9H??:??@1???w????H?=59H??:??+1???w????H?=9H??:??+1???w?b???H?=?8H??:?",1???w?E???H?=?8H?y:?N,1???w?(???H?=?8H?\:?z,1???w????H?=?8H??:??,1???w?????H?=?8H?":??,1???w?????H?=j8H?:??,1???w????H?=M8H??9?9-1???w????H?=08H??9?t-1???w?z???H?=8H??9??-1???w?]???H?=?7H??9?I.1???w?@???H?=?7H?t9?s.1???w?#???H?=?7H?W9??.1???w????H?=?7H??7H?
?h??%1???w?????H?={7H??7H?
?h??%1???w????H?=W7H??7H?
eh?K&1???w????H?=37H?7H?
`h?L&1???w?v???H?=7H?[7H?
h?z%1???w?R???H?=?6H?77H?
h?{%1???w?.???H?=?6H?7H?
?g?&1???w?
???H?=?6H??6H?
?g?&1???w?????H????H?=u6H?8?231???w????H?=X6H??6H?
k?J21???w????H?=46H??6H?
af?L21???w?w???H?=6H?\6H?
?j?Q21???w?S???H?=?5H?86H?
?j?R21???w?/???H?=?5H?6H?
?h?S21???w????H?=?5H??5H?
+j?T21???w?????H?=?5H??5H?
?i?U21???w?????H?=\5H??5H?
?i?V21???w????H?=85H??5H?
?d?Y21???w?{???H?=5H?`5H?
fd?\21???w?W???H?=?4H??6?;31???w?:???H?=?4H?n6?:%1???w????H?=?4H?Q6??&1???w????H?=?4H?46?51???w?????H?=|4H?6?%1???w?????H?=_4H??5?%1???w????H?=B4H??4H?
d?R$1???w????H?=4H?j4H?
d?T$1???w?a???H?=?3H?F4H?
d?U$1???w?=???H?=?3H?q5?p$1???w? ???H?=?3H?T5?%1???w????H?=?3H??3H?
?c??$1???w?????H?=x3H??3H?
?c??$1???w????H?=T3H??3H?
?c??$1???w????H?=03H??4??$1???w?z???H?=3H?_3H?
eb?R%1???w?V???H?=?2H?;3H?
Vb?S%1???w?2???H?=?2H?f4??&1???w????H?=?2H??2H?
?b??%1???w?????H?=?2H??2H?
?b??%1???w?????H?=f2H??2H?
wb??%1???w????H?=B2H??3??&1???w????H?=%2H?q2H?
nb?Z&1???w?h???H?=2H?M2H?
fb?\&1???w?D???H?=?1H?)2H?
]b?]&1???w? ???H?=?1H?2H?
?a??#1???w?????H?=?1H??1H?
?`??#1???w?????H?=q1H??1H?
?a?$1???w????H?=M1H??1H?
?`?	$1???w????H?=)1H?u1H?
a??%1???w?l???H?=1H?Q1H?
?`??%1???w?H???H?=?0H?-1H?
?`??%1???w?$???H?=?0H?	1H?
a?*&1???w????H?=?0H??0H?
?`?,&1???w?????H?=u0H??0H?
?`?-&1???w????H?=Q0H??0H?
G`??#1???w????H?=-0H?y0H?
>`??#1???w?p???H?=	0H??1??#1???w?S???H?=?/H?80H?
Q`?
$1???w?/???H?=?/H?0H?
H`?$1???w????H?=?/H??1?<$1???w?????H?=?/H??/H?
?^?o#1???w?????H?=c/H??/H?
?^?p#1???w????f??o???o??Iu??ky??z??`{??????????{???}??????A??3E??Y???C???S????????????????E??????N??zT???X??.???f??(???Q???h??L???,??,??Tt??Tt??Tt??Tt??N????h?????n?????????7???2??Di??=???$??????xi??????ڥ??????\???I2???5??o???????A9??'???;??X\??????????(???(???????????????????????????????????????(???????????????????????????????????(???(??????(???(???????*]??????????????????????#>??-@??ps??ps??{???{???ps??ps??ps??ps??ps??ps??ps??ps??ps??{???ps??ps??ps??ps??ps??ps??ps??ps??{???{???{???{???{???ps??(C??ps??ps??ps??ps??ps??k1???1??:m??:m??????????:m??:m??:m??????:m??:m??:m??:m??:m??????:m??:m??:m??:m??:m??:m??:m??:m??????????????????????:m???5??:m??:m??:m??:m??:m???UH??AWAVSH??8H??I??E1?H?}?1????H?U?I?F H??tL?xL8H??H???M?I?H?? L9???I?vJ?>I?? L?9H?QH?AH?AD?@??u5I?VH?pH??HD?H?I?N M~L?}?H?u?H???#??H??8[A^A_]?H?=W+H??+H?
OY??1?????H?5?XH?%Y?1??c????UH??AWAVAUATSPH??H?}?D?gE??~2H?E?L?h E1??O?|?I??H???	V??tJI??M9?u?H?E?D?`E??~2L?pE1?fff.?O?L??L??L???)LI?G(H?E?I?GHH??x?????H??L???L??L??L????KI????@L????KI?T??@L???KA??_H??I?G?????Hk?xI?G0H?ИH?LH??H	?H?? t
1?H???????1?????????y??E1??f.?Hk?xH??I?D$0H?|?HDI?L$H??I?L$8I?t$ H??I?t$@H?H?I?T$(H??I?T$HH?I??$?L????JI??H??h???HcAI9??7H?AN?$?A?$??p???A?D$P??t???A??$???d?????H??p???L???J??H??t???L???J??H??d???L???iJI?D$H?E?I?D$0H??x?????H?]?H??L???;J??L??x???L??L???JI?D$H?E?I?D$8H??x?????H??L????I??L??L????II?D$ H?E?I?D$@H??x?????H??L???I??L??L???II?D$(H?E?I?D$HH??x?????H??L???wI??L??L???bII??$??@L???HII?|$T??@L???1I??|?$???|?$???|?$???U???M???E??E1??DfDDžx?????????H??x???L????w??HI??	I?G??I??H??
??J?L??H??t?Džx???????H??h????G??~H?w 1?f.?H;?t=H??H9?u?W??~;H?1?DH;?t
H??H9?u?? ???x???????Y????
??x????L???f?H?!?H?8H?5?0H??0D??E??1???w??GL????G??ub??d????????A?$?_H??I?D$?????Hk?xI?D$0H??H?LH??H	?H?? t
1?H???s???1????j???L???dGH???H?H;E???H?Ĉ[A\A]A^A_]?H?d?H???F?8?fHH?
F?H?	H;M???H?5?/H??/H??L??I??1?H?Ĉ[A\A]A^A_]??FH?=?H?/H?
?.?>O1??)???H?=?H?H?
?.??O1?????H?=?H??H?
?.?@O1???????/Ff?UH??AWAVAUATSH???I??I??H??H?|?H?H?E?H?5~/?PFH???ZI??L??x???H??1???RFL???PFI??L??1?1??;FI??pH?E?H?E??E?H?E?H?D$??E???$?????I?$H???'L?u?H?M?H?Ǿ?E1?E1??d???I??H???L??L???EL9??L???EM??$A???lmgg??A??XA?wA?W9։?G?I?GH??P???H??X????Hc?H?A? 1?H?5NNL??x????
DM??L9?sM?8I??J9?s?I??L??L9?r?Hi?pH????H????H??L?8?xD?8?	FH?5?-H??-E1?L??H??I??1??D?QH?ΑH?8H?5?-H??-E1?1??D?%H???H?8H?5?-H??-E1?H??1??qDL???WDH?u?H?H;E???L??H???[A\A]A^A_]?H?T?H?8H?5?-H?N-E1?1??D?H?0?H?8H?5?-?oH??H?4?H?4?H?4?H??H??H??H??WH???H?H?H?? H?E?H?E??E?H?E?H?D$??E???$????I?H????
I??H??H??1??????I??H??X????HH??P???A?D$??L??H????cE1??LDI??L??H?
??LTI?M?M?H?5?,H?Y,D??1???w?&CI??L9?X????L?m?A?7A?G?E?A?G??`???I?GM?wH?E?I?GM?o$H?E?I?G,M?g4H?E?I?GL??I??M??1???-H???tD?L?e?L??H???1???.H???L?$$L??H?5x>L??I??M??1??-H???tD?L?e?L??H?z?1??.H???L?$$L??H?5*>L??I??M??1??F-H????????L?e?L??H?(?	1??3.H???L?$$L??H?5?=L??I??M??1???,?????H?=???L???-L???,H?5?H???H?M?I??I??1??ݶ??H??yH?H;E?u0H??X[A\A]A^A_]?H?=wH??H?
?8Q1?轵???,?UH??H????t{?????H?@??(?3??@f?@ H?'H?H$???2??@,?@4??(?3??@8???3??@H??W???@PH?@p]??w???W???@4??@(?H?@??(%3??@f?@ ?@$H?dH?HT?@\??(3??@`H??x?`H?Hp]??w?fffff.?UH??AWAVATSH??@I??H??H?TxH?H?E?H?>L?~??E??M0??UP??]h??F??N(??VH??^`dž?H???Ɔ?H???L?eA?????????L?u?E1?H?M?1??E1?E1???w?U???H???H?;L?u?H?M?1??E1?E1??1???H???H?;L?u?H?M?1??E1?E1??
???H???A?D$??~ H?;H?E?H?M?1??E1?E1??????I??L???H???????H???????H???H????H?wH?H;E???H??@[A\A^A_]??w?A???t2??ucJ??H?@H???H?M??K??~EH?@H??H?1HcC\H?H??I??H?AH???
H?E??K??~H??H?H?E?H?E??E?H?E?H?D$??E???$??w?4???H??H?L?eA????a???L?u?E1?H?M?1??E1?E1???w????H???H?;L?u?H?M?1??E1?E1?????H???H?;L?u?H?M?1??E1?E1??v???H???H?;L?u?H?M?1??E1?E1??R???H???H?;L?u?H?M?1??E1?E1??.???H???A?D$??~ H?;H?E?H?M?1??E1?E1?????I??L???H?;Mc|$TL?}?H?M?1??E1?E1??????H??H?;L?}?H?M?1??E1?E1?????H??H?;L?u?L?}?H?M?1??E1?E1?????H??H?;L?u?L?}?H?M?1??E1?E1??a???H??H????.???H????"???H???????H????
???H????????H???H??t?????H???????H???????H???????H??H?KtH?H;E?uH??@[A\A^A_]??????w?&f?UH??AWAVAUATSPI??H??H?tH?H?E?I??H??u2H?? H??0H?D$???0??$????H?? I??H????L?m?8??%H??H???H)?I??H????|E??|M ??|U@??|]X??\$X??T$@??L$ ??$L??L??1???w?????H?ĀL??L??L???MA??H??uL???????H?6sH?H;E?u(D??H?e?[A\A]A^A_]?A?H?sH?H;E?t??%UH??AWAVAUATSPH??I??I??H?v??????I??D?hH??H???Y?IcD$D9?~I?L$H9\??ucIc4$1?I?|$??L??????I??L??H??????L??L??L??1??ޤ??H?$L??L??H??L??M??E1???H??[A\A]A^A_]?H?=)?H?u?H?
?%?rI1??o???ffffff.?UH??AWAVAUATSP?XC?A$H)?XL??????L?????H??@???H??qH?H?E?H??H???H????d@I??I??H?F?N??H???????	E1???-<????H ??P@??XX?????????н????????????????H??H???H?x???H?x???H?x ???H?x(????8?4@H??@????A???yH?IE1?E1?1??5DIc?H???п??H?~H?~H?~ A??H?~(H?I??L9??;J?4????t?A??|?H?=??H???H?
?4??Q1???w????????H ??P@??XX?????????н????????????????D?????A?G???w.?????????.?)A???:?????????.???:?????H?????H??@????A????H?I1?Dž????E1??
?H??H9???H?4????t?D??????A???#>Ic?H???п???~?~?~ A??D???????~(A??1?E1???????H??8???uI9??uA?r;?????t`A???I?:?????????????????н??????????\$X??T$@??L$ ??$L????w?????L??????A???????????????????????????????Ƚ???????????Mȉ?X???I???I???I?????~I???H???1?H??`???????????Y??????????????̽????????????н????????????Խ?????????????????ؾ????Ľ????????L??H??H?? ???H??H??0?????????1?H?? ???H?????1???w?????H?? ???I?F H??tH?XHH??H???M?H?H?? L9??=I?vH?H?? H?H?QH?AH?A?@??H????????<??*?X?????
'I?VH?pH??HD?H?I?N I^??^????????H??(???ƅϿ??H????????D??H?????E??D??ȿ??L???????51???W??/H??H???1??????????????X?H????????;?X?????.???????H??????H??t#H?}??H??????H??Ͽ???Ѐ?Ͽ???07H??????H??H???H?????-&????H?????H?? ???????E1?1?H????????I??L;?????@???N???п??M?uM?uM?u M?u(M??~?H??P???L?$?1?I??????????????????q????z?H??I9?u?H??P???H?H???????H???????I-E1???W?L??????L??Ͽ??H?? ???L??H???f????????H?}D??L??L??????????Ͽ???6I?????%????H?????H??????L??1???????????????X?A??D9?X???u??#-E1?Dž??????????D?? ???Ic?u"I9??uA?B;?????u
H?????A9B\tYA????????????????????н??????????\$X??T$@??L$ ??$L??L????w?`???H???????????????1?H?? ???H?????1???w?S???H?? ???I?F H??tH?XHH??H???M?H?H?? L9???9I?vH?H?? H?H?QH?AH?A?@??L???????9I?VH?pH??HD?H?I?N I^H??(???I???I???I???I???I???D??????D?????E??L??????~M???M???E1?L??(???D??????L??H??H??`???H??H??P???H??H??????H??H???????????????Mȉ?D???D??H?????E??L??????}E1?1??@I??L;????tfN???п??M?wM?wM?w M?w(M??~ԉ?????H?I??E1?DL??D???U???ġz?I??M9?u狅????D?L??????L????????*?D??????????I??I??H??H??x???H??H??????I??H??H?????I??H??H??8???ƅ???????????? ?????E1?1??f?I??L;????tnN???п??M?wM?wM?w M?w(M??H?????~͉?????Hc?H??E1?ffff.?ġz?L??D???????I??M9?u狕????D⋅ ??????>!??^????????????H?H??????H?4?L??P???L??H??P???????W?E1?H??H???L???????4H??H???H??1??????????????X?L??????A??D;?D????%???????H??????H??t.Džh???H?}D??H??h???H???????Ѐ??????(L??????H?????d ?????H?????H?? ???????????????O???1?1??f?H??H;?????0???L???п??M?t$M?t$M?t$ M?t$(M??~?H??????M????L>???T>???>H??I9?u?H??????H??L??h???L9???????L??`???H??M??L??h???rjH??Ⱦ??H???;K??{K?V1???Q??H?=??H?ӞH?
??:V1???Q??H?=f?H???H?
??;V1??Q??H?=E?H???H?
3??BV1??Q??H?=$?H?p?H?
6??CV1??jQ??H?=?H?O?H?
E??DV1??IQ??H?5??H?>???C??????H?=ǝH???W1??Q??H?5??H?	?????????H?=??H?ޝH?
???5V1???P?????n???b????\????y???X???Ya?H?5;?H????i???H?=7?H?s??W1??P??????????`???`???+???+???+???????????????????????????H????UH??AWAVSPH??H?H??t3H?{t'E1?E1?@H?{L??TI??I??0L;{r?H?{???H?{ H??tCH?CH??t5A?E1??
?I??I??XI9?sH?K J?<1H??t???H?C???H?{ ?w?H??H??[A^A_]?e?UH??AWAVAUATSPH??I??I????W?????L??L???+?HM?'I???t?I??I?|$???H??teI?GI??uH?H??L??L?????HL9????,H??H?8H?5??H??1?H??????1????1ۉ?H??[A\A]A^A_]?H?5n?H?????~????O??H?=[?H?????1??N???UH??AWAVAUATSPH?G???????~6I??A??L?gI??E1?@I?4$L???1???tI??I??0M9?u??D???H??[A\A]A^A_]?fffff.?UH???x 9w~H?G??H?IH???|u'?D]?H?=??H??H?
 ??iX1???M??H?=??H?̚H?
??jX1???M??fDUH??AWAVSPH??H?H??t?j??C??uH?{ H??tX?T??C??	uKH?{(H??tB?{uKH?C H??tBA?E1??@I??I??I9?s#H?K(J?<1H??t???H?C ??H??[A^A_]?H?{(H??[A^A_]???fffff.?UH???H?
??Hc?H?]?f.?UH??G]??UH??H?G(]?fDUH??H?G0]?fDUH??H?G@]?fDUH??G]??UH???x9w~H?G??H?IH??H?D]?H?=?H?c?H?
???-X1??]L??ffff.?UH???x9w~H?G??H?IH???D]?H?=ȘH??H?
G??2X1??L??fffff.?UH???x 9w~H?G??H?IH???|	u'?D]?H?=q?H???H?
??7X1??K??H?=P?H???H?
???8X1??K??fDUH???x!9w~H?G??H?IH???|	u(H?D(]?H?=?H?L?H?
??=X1??FK??H?=ߗH?+?H?
???>X1??%K??DUH???x-9w~(H?G??H?IH???|	u4H?D(Hc?H??H?D]?H?=??H?ЗH?
??CX1???J??H?=c?H???H?

??DX1??J??f?UH???x 9w~H?G??H?IH???|	u'?D ]?H?=?H?]?H?
???KX1??WJ??H?=?H?0??L>@??L>??>D9?tW????D?H??H?I?H?s??D0??L@??L??H?s??D`??Lp??L@??D0H??`???u?H?{H?H??H?4@??w?_?H?CH?KH??[A\A]A^A_]?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L??????tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}?裹I??H?E?L?xL??躹Ic?L?4[I??K?7L??藹K?D7H?E?H?@H?[H??A?D?M?A?LH??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L??????tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}?蓸I??H?E?L?xL??誸Ic?L?4[I??K?7L??臸K?D7H?E?H?@H?[H??A?D?M?A?LH??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L??????tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}?胷I??H?E?L?xL??蚷Ic?L?4[I??K?7L???w?K?D7H?E?H?@H?[H??A?D?M?fA?LH??[A\A]A^A_]?fffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L??????tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}??s?I??H?E?L?xL??芶Ic?L?4[I??K?7L???g?K?D7H?E?H?@H?[H??A?D?M?fA?LH??[A\A]A^A_]?fffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L???ҵ??tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}??c?I??H?E?L?xL???z?Ic?L?4[I??K?7L???W?K?D7H?E?H?@H?[H??A?D?M?A?LH??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L???´??tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}??S?I??H?E?L?xL???j?Ic?L?4[I??K?7L???G?K?D7H?E?H?@H?[H??A?D?M?A?LH??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH????E?I??H?GH?}?H?OH?M?A?ą?~MH?E?H?XE1?E1?f?H?3L??貳??tI??H?I?H??0M9?u??A???u
I?? L?u??cL??H?? H?H?H??H?4@H?}??C?I??H?E?L?pL???Z?Mc?J?mL?H??I?L???0?I?DH?E?H?@J?mL?H??A?D??E???zDH??[A\A]A^A_]?ffff.?UH??AWAVAUATSH??H?U?I??H?GH?}?H?OH?M?A?Ņ?~NH?E?L?p1?E1?@I?6L??蒲??tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}??#?I??H?E?L?xL???:?Ic?L?4[I??K?7L????K?D7H?E?H?@H?[H??A?D
H?M?I?LH??[A\A]A^A_]?fffff.?UH??AWAVAUATSH??H?U?I??H?GH?}?H?OH?M?A?Ņ?~NH?E?L?p1?E1?@I?6L??肱??tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}???I??H?E?L?xL???*?Ic?L?4[I??K?7L????K?D7H?E?H?@H?[H??A?DH?M?I?LH??[A\A]A^A_]?fffff.?UH??AWAVAUATSH????E?I??H?GH?}?H?OH?M?A?ą?~MH?E?H?XE1?E1?f?H?3L???r???tI??H?I?H??0M9?u??A???u
I?? L?u??cL??H?? H?H?H??H?4@H?}???I??H?E?L?pL????Mc?J?mL?H??I?L????I?DH?E?H?@J?mL?H??A?D??E???{DH??[A\A]A^A_]?ffff.?UH??AWAVAUATSH???U?I??H?GH?}?H?OH?M?A?Ņ?~OH?E?L?p1?E1?DI?6L???R???tI??H?H?I??0M9?u??A???u
H?? L?}??\L??H?? H?H?H??H?4@H?}???I??H?E?L?xL?????Ic?L?4[I??K?7L???׮K?D7H?E?H?@H?[H??A?D?M?A?LH??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH??H?U?I??H?GH?}?H?OH?M?A?Ņ?~QH?E?L?xE1?1?@I?7L???B???tH??H?I?I??0I9?u?????uI?? L?e?L?}??]L??H?? H?H?H??H?4@H?}??ЭI??H?E?L?xL????Mc?K?vH??I?L??L?e????I?DI?D$I??K?vA?DL?u?L??襭I?DL??茭I?L$H?D H??[A\A]A^A_]?UH??AWAVAUATSH??(D?E?H?M??U?H??H?GH?}?H?OH?M?A?Dž?~\H?E?L?hE1?E1?fff.?I?uH??????tI??H?I?I??0M9?u??A???uI?? H?E?L?m??]L??H?? H?H?H??H?4@H?}?螬I??H?E?L?hH??赬Mc?O?4dI??K?D5H??葬K?D5H?E?H?@I??O?4dC?D5	?u?C?t5?U?Hc?H?@J?\0 ??
????H?
??L?,???	tr??tnH??L??踪I??H??uq???n???b:???\B???y???X???Y?H?5??H?%?????4??H?=??H?J???1???3??H?5??E1??1???4??H?M?H?AN?|0(H?AJ?|0(L??H?u?L??H??([A\A]A^A_]鿪H?=K?H???H?
???5V1??3???UH??AWAVAUATSH??(?M?H?U?I??H?GH?}?H?OH?M?A?ƅ?~OH?E?H?XE1?E1?H?3L??????tI??H?I?H??0M9?u??A???uI?? H?]?L?e??\L??H?? H?H?H??H?4@H?}?蟪I??H?E?L?`L??趪Mc?K?H??I?L??蓪I?DH?]?H?CL??H??H?@A?D	A?DD?u?Ic?H?KH?| ??????ͨH????H?SK?H??H?D
(E??H?U??{H?CH?H??(H?E?E??I??E1?@H?E?L?(N?4"L??H?????K?DeL????H??K?DeI??M9?u??(H?5???1???2??H?CK?H??H?D(H??([A\A]A^A_]?H?5M?H?????Ͱ???2??H?=:~H????1??1???UH??AWAVAUATSH??H?~?3I??I??E1?H?u?H?}??/H?pB?T3L??????ffffff.?A??M9|$??I?\$O?4I??B?L3H????J?3H?KHc?H???H?pB?T3L???`????H?pB?T3L???\????H?pB?T3L???X????H?pB?T3L???U????p???H?pB?T3L???O????Z???H?pġzD3L???G????B???H?pB?T3L???????+???H?pJ?T3 L??????????J?<3H??B?T3??tf??	?"H?pH?OD?GL???v????????H?pJ?T3L????????????H?pJ?T3L???????????H?pġ{D3L???????????L?oM??t?L????I??H??u2??H?5\?1??w0??I?\$N?l3 A??M??t'J?D3(1?fDH??H??H?TI????I9?w?L??J?t3L?m?L??L??????L?????L?e?????H??[A\A]A^A_]?H?=?{H????iY1??/??H?=?{H????dY1???.??H?5x?H?????????/??H?=e{H?}??1??.??f?_??????????????????????&???>???U???k???????????????fff.?UH??AWAVAUATSH??H???I??L??H?GH?}?L? ??H?Mȅ?~EHk]?XE1?fffff.?K?t/L??????tI??XL9?u??H?????WI9???H?]?H??H?? H?H?M?H?H?? Hk?XL???z?I??H?E?L?x L??葥Hc?Hk?XI?L???r?I?DM?$I??H?5+?? L??藤M?n(?I???I?~ 1?I?~????A?TI?v??L???P?A?A?L8I?D@I??I?DH?_H??I?Fr,Hk?xH??I?F0H?LH??H	?H?? L?E?t%1?H???"Hk?xH???H??I?F0HDL?E??1???I?NI?V H??I?N8H?H??I?V@H?I??M?nHI?M?lPI?@H??t>I?H??@H?????H?u?H?H?? Hk?XI?tPI?x(H?H??H??H!?I|@H?9H??I?@H??[A\A]A^A_]?H?=?xH?#yH?
???qY1??,??H?=?xH???sY1??,??UH??AWAVAUATSPH?G??~5??I??A??L? I??E1??I?7L??蒣??t&I??I??XM9?u?H?=NxH?????Y1??+??A???u?A?_0H??[A\A]A^A_]?ffffff.?UH??AWAVAUATSH??(H?M?H?U?H?}?H?GH?Eȅ?~3I??H?E?L?p D?m?I?^PE1??H?s?L??????t&I??H??XM9?u?H?=?wH?????Y1???*??A???u?H?E?H?C?H?E?H?I?WL?E?I9?vBH?E?H?@(H??H???D??Hk?XI?|6PH?H??H!?I|6@Hk?XI?|6@I????I9?w?H??([A\A]A^A_]?@UH??AWAVSH??A??H??I??H?5ӉH????H??tqH?ÿ?@蝠H??ttH?E?H?E?@H?E?A??H?u?L???H?}?H?U?H???ݠH?}?H??t轠H??苠H??[A^A_]?H?=~vH?ْ?^Z1???)??H?5U?H?????ݨ???*??H?=BvH??w??1??)??ffffff.?UH??AWAVAUATSH??8?U?H??I??L?nH?FH??L?FH;FL?E?ve???n???b/???\7???y???X???YU????,?H????\M?H??????,?H!?H	?H?sH?;H??t&誠L?E?H?H??u
?H?H??tI?MA?$?I?EH?HI?MH??I;ve???n???b????\????y???X???Yȧ???,?H????\??H??????,?H!?H	?H?sH?;H??t'??L?E?H?H??u
?H?H??tI?MA?T$?I?EH?HI?MH??I;ve???n???b???\???y???X???Y:????,?H????\2?H??????,?H!?H	?H?sH?;H??t(菟L?E?H?H??u
?H?H??t
I?MI?T$H?I?EH?HI?MH??I;ve???n???b????\????y???X???Y?????,?H????\??H??????,?H!?H	?H?sH?;H??t(??L?E?H?H??u
?H?H??t
I?MI?T$H?I?EI?|$L?e???E1?M?t$O?$I??K?4&H??臫L?u?M?I??H?CH??H;Cvn???n???b????\ɤ??y???X???Y????,?H??H?????\ۥ???,?H!?H	?H?sH?;H??L?E?t.?8?H?H??L?E?u?DH?H??L?E?t
I?MA??I?EH?HI?MA?H???H?JHc?H???H??I;?????n???b???\???y???X???Y-????,?H??H?????\!????,?H!?H	?H?sH?;H?????~?L?E?H?H?????@H??I;?????n???b????\????y???X???Y?????,?H??H?????\?????,?H!?H	?H?sH?;H???Y???L?E?H?H???0??H??I;?9???n???b???\???y???X???Y,????,?H??H?????\ ????,?H!?H	?H?sH?;H????}?L?E?H?H??????H??I;????n???b????\????y???X???Y?????,?H??H?????\?????,?H!?H	?H?sH?;H???G??L?E?H?H????-H?H??tH?M?L?H??I?U?	?I?E?H?H??tH?M?L?H??I?U?	?I?E??H?H??tH?M?L?H??I?UH?	H?I?E??H?E?J?4 H??H???>?L?E??H?M?N?4!I??H??I;?????n???bo???\w???y???X???Y?????,?H??H?????\?????,?H!?H	?H?sH?;H??tc??L?E?H?H??uH?PH?H??tH?M?L?H??I?U?	f?I?E@L?e?A??M9|$???????H?H??t
I?MA??I?EH?HI?MH??I;ve???n???b????\????y???X???Yˡ???,?H??H?????\?????,?H!?H	?H?sH?;H??t'? ?L?E?H?H??u
?H?H??tI?MI?VH?I?EH??I?EA?H??r?Q?????H?Q?L?$?M?fM?vL?I;vd???n???b???\????y???X???Y????,?H??H?????\	????,?H!?H	?H?sH?;H??t)?j?H??H?H??u
?H?;H??tI}L??L??螘MeL?e?L?E????????kI?~L?e??l???L??E1?L?}?fffff.?L??H??HpH??I???ʥL??L?}?L?E?A??L9pw??%???I?|$?1???I?EH??I?EH?M???I9L$??M?|$ H?M?Lk?XK?4'H???j?O?4'I??H?CH??H;Cvt???n???b????\????y???X???Y͟???,?H??H?????\?????,?H!?H	?H?sH?;H??L?E?t4??H?H??L?E?u?!ff.?H?H??L?E?t
I?MA??I?EH??I?EA?>L?}?L?e???M?I??E1??I?EH??I?EI??A?I9???H??I;vl???n???bϝ??\ם??y???X???Y?????,?H??H?????\????,?H!?H	?H?sH?;H??t??J?L?E?H?H??u?t???@H?H???d???I?MK??H??S???H??I;vw???n???b:???\B???y???X???Y`????,?H??H?????\T????,?H!?H	?H?sH?;H??L?e?L?u?tA譖L?E?H?H??u?.f.?H?L?e?L?u?H??tH?M?L?H??8I?U?	?I?EH?HI?MH??I;vw???n???b????\????y???X???Y?????,?H??H?????\?????,?H!?H	?H?sH?;H???A?????L?E?H?H??u?+???ff.?H?H??????H?M?L?H??@I?UH?	H??????I?EM?t$(J?0H??I??I!?I)????}???I?|$??1?1?H?U?I?T$ M?d$(H?M?Hk?XL?t
HH?U?H?M?L?|
PK?'H??I??I!?L?I;vs???n???bv???\~???y???X???Y?????,?H??H?????\?????,?H!?H	?H?sH?;H??t?S;??A??uH?5??L??1??,a???SH?C Hc?L?4????K[A^]ËS;}3A??uH?5r?L??1???`???SH?CHc?L?4????K[A^]?H?=#]H?o]H?
??XI1??i??H?=]H?N]H?
ԇ?OI1??H???UH??AVSL??I??I??I??L?L??L	?H?? t
L??1?I??I???D??1?A??A??L?sL???fff.?1?I??H??L9?t5H??H??A????s%H?SH94?t7H??H??L	?H?? u?1?A???L9?u?L?L??L	?H?? t:L??1?I??I???8L?¹?Eb??I??H??H?;H??H	?H?? ts1?H??H???oD??1?A??A??L?YL????1?I??H??L9?t9H??H??A????s)H?QH94???H??H??L	?H?? u?1?A???L9?u?L??1?[A^]?a??1?????L?KH???ffff.?H??1?H??H??H9?t?H??H??A??A?A????s@H?CL9?tSH??H??H	?H?? u???1?????H9?u?H?=X?H??\??1??w??A	?E??H?CL??H???tL??[A^]?H?=?ZH??[H?
?i?pE1??9??f?UH??AVSM??H??I??I??M?L??L	?H?? t
L??1?I??I???D??1?A??A??M?^L???fff.?1?I??H??L9?t5H??H??A????s%I?VH94?t7H??H??L	?H?? u?1?A???L9?u?L?	L??L	?H?? tAL??1?I??I????H?ڹ??g??H??H??M?H??L	?H?? ??1?I??H????D??1?A??A??L?QL???f.?1?I??H??L9?t5H??H??A????s%H?QH94?t)H??H??L	?H?? u?1?A???L9?u?H??1?[A^]?`g???3Hk?xH?
??L?DH?LH?CL9?t
H9K0?pH??L	?H?? ??H?I??H?SH????H??H?K H????H?{(????1?A????M?NH??????1?A????H9?tFH??H??A??A?A????sGI?FH94???H??H??L	?H?? t?H??1?I??H??H9?u?H?=ӃH?@Z??1?????A	?E??I?FH?4?H???tvH??[A^]?1?A??H?SH???/???H?S8H??H?K H???+???H9C@u`H??H?{(tH9CHuOH?K?E1?E1???,??H?EH?HPH???[A^]?H?=XH?LXH?
?f??E1??F??H?=?WH?+XH?
:??71??%??DUH??AWAVAUATSPH??L??E?? I??wH?|Jc?H????E?(?A???E?P??E?ZA??P?H?U?H??D???G???t/A??H?j?L?(D???p?H?5??L??D??H??E??1??*?M?~@??L????A??	?t!L???فA??	?t?L??L??褁??A?????L??A??$9???????A??$$H??1?DH????@??u~??	@??uq???;?u!??@??@??t:?Qffffff.?H????9?@??????@??uH9?s?H?????p????	??t????u+?????L???????t)L??趀???????ƃH????P??????M?l$@?9H????9?????|?L??L???:???u?H??????u???	???t??????;?u???t??X???1?H??[A\A]A^A_]?f??????????????????UH??AWAVAUATSH??XI??L???A?D?>D9?L??@???H?u??L?nH?NH??x???I??H?~ H?V(H?}?H??p???H??H??M?xI?HH??`???I??I?P M?H(H??X???L?????I??H??H9??EiI?H0H?M?I?H8H??P???M?H@I?HHH??(???L?v0H?^8H?N@H?M?Hk?xH?
??L?DL?\H?FHH?E?M9?t
L9]??P!L??L	?H?? ?L??H?I??H??I??H??H??`????H??X????8H??????H?PH??L??p????P???{????hL?nH?FH?E?I??H?N H?V(H?M?H?U?H??H??I?PM?`I?@ I?x(H?E?I??H??H?U?L??L??H??x???H??L?? ???I??H9??ChM??I?@0H?E?I?@8H?E?I?@@H?E?I?@HH?????H?~0L?^8L?v@L?~HH??p???Hc0?HA??ș????H?u??Ή?H????D9?AMĉ?`???Mk?xH??M?DI?LM9?L??t	H9???H??L	?H?? ?bH??H?I??H??H?}??aH?}??nH?}??{?H?NH?FH?E?H??H?V H?~(H?U?H?}?H??H??I?@M?PI?x M?H(H?}?I??H?E?L??L??L??8???I??I??H9??0gM?h0I?@8H?E?I?@@H??h???I?@HH??`???H?F0H?E?L?f8H?^@H?FHH?E?H??p???Hc8?pA?2?ș??Lc?I??H??X???A?E9?EM?Ik?xL?
??J?|J?tH9?L?m?t
H9u??'H??H	?H?? ??H??H?H??H??H?}???H?}???H?}????L?vH?FH?E?I??H?V H?N(H?U?H?M?H??H??I?HM?PI?@ I?x(H?E?I??H??H?M?L??L??H??x???H??L??(???I??H9??fM?h0I?@8H?E?I?@@H?E?I?@HH??H???L?F0L?f8L?^@H?~HH??p???Lc?pA?2?ș????L??h???A?ɉ??????D9?L?U?AM‰? ???M??Ik?xL?=??N?T;J?t;L?u?M9?L?m?t	I9???H?E?H??L	?H?? ??H?I??H??H?}???H?}???H?}?????D??1?A????I??H??H??`????????H9?P?????H??P???H??`???H??X????????I9???L??H??X???H?????t
H9?(?????M9?t	M9???L??L	?H?? ?:L??H?I??I??H??H??x????6?A??1?A??H??H?}??????I9?u4L??H?E?H?}??????I9?uL??H?E?H?}??(I9??A??H?u???E???>dH??x????}cH?}??rc??H???;?`????`cH?}??UcHc?H???H?E?H??H??H?????Hc?`???H??p???I)?L??L?e?H?U?H?????H??H??@???H?H?E?H??1?H??X???E1?E1?1?E1??-DL??X???I??H????M??L??X???L;?x?????bH??E1?H??0????f?I??H]?L;M?t?L????I9?L??P?????H??h???H??????+fff.?H?U?H??H??@???H]?H;?p?????H?U?H??@???H?u??E1?H]?H??t?L??H??H?I??M??I?L??I??L?D?L?k?āyn?M??M????y~I??L;m?u?H??H;M?u?I??L;e?uI??L;U??LD?E1?1?E1??E1?1??|???f?I??L;U??LD?1?E1?I9?????I)?H??H;M?u?I??L;e?t?1???f?Lm?H?u?I9?H??0???H??h???L??P???},????f?I??L;U??LD?1?E1?I9??r???I)?H??H;M?u?I??L;e?t?1???L?e?H??x?????`H?}???`??H???;?`?????`H?}???`Hc?H???H?E?H??H??H?????Hc?`???L?E?H??h???I)?L??L??X???H?E?H?????H??1?H??8???E1?E1?E1?1??0?L??8???I??H??`???H????L??L??8???L;?x????1`H??`???I??1?H?E??ffffff.?H??LM?H;]?t?H????H9?H??0????L??P???L??H??????$f?H??H??p???HM?H;?h?????H??p???H???f?1?HM?H??t?H??@???L??H??H??L?M?I?M??M??I?L??I??L?M??M??E?l
fE?,H?E?H??H9?u?I??L;E?u?I??L;e?u I??L;?x????LD?1?E1?E1??s???1?E1??i????I??L;U??LD?E1?E1?H9??????H)?I??L;E?u?I??L;e?t?E1????H?X???H?u?H9?L??P???H??0???}1????ffff.?I??L;U??LD?E1?E1?H9??a???H)?I??L;E?u?I??L;e?t?E1??݉?1???H??H?}??:???I9?u5L??H?E?H?}??-???H9?uH??H?E?H?}??DH9E??:M????A???MA????^H??8?????]H?}???]D9?X?????]H?}???]Hc?X???H?E?H??H??H?????Ic?H??p???I)?L??H?u?H??X???H??1?H??H???E1?1?1?1?L??P????.fDL??H???I??H?`???M??L??H???L;?8????8]I??E1?H??????f?I??L?h???L;M?t?H????H9?L??????FL??0???M??H??X????%fDH?u?H??L??x???LU?H;?p????1H?u?L??x???L?}??
1?I?I??t?H??@???L??H??H?u?L?M?I?I??M??I?H??H??L?M??L?M?G?E??A?????E??A??A???vA??@?DA??E?A???A??fF?H??H9?H?u??k???H??H;}??\???H??H;U?uI??L;u??LD?1?1?1??:???1?1??1???ffffff.?I??L;u??LD?1?1?H9??????H)?H??H;}?u?H??H;U?t?1???f.?L??P???L?H9?H?????L??0???L?????})?G????I??L;u??LD?1?1?H9??#???H)?H??H;}?u?H??H;U?t?1???H??8????[H?}??[D9?X????[H?}???ZHc?X???H?E?H??H??H?????Ic?H??x???I)?L??L??P???H?u?H?????H??1?H??X???E1?1?E1?1??,@L??X???I??H?`???L??L??X???L;?8????xZI??1?H??0????f.?H??L?h???H;}?t?H????H9?H??p????L?]?L?????? fff.?I??L]?L;?x?????M??H?u??H?}?I?H??t?H??@???L??I??L?m?H?}?L?L??I??L?I??L??I?L??H?}?G?F?/H??H9?u?I??L;}?H?}?u*H??H;U?u(I??L;u??LD?1?E1?1??y???D1??m???1?E1??c???ffffff.?I??L;u??LD?E1?1?H9??????H)?I??L;}?u?H??H;U?t?E1????H?P???H9?H??0???L?]?H??p???}0????ffff.?I??L;u??LD?E1?1?H9??b???H)?I??L;}?u?H??H;U?t?E1???H??8?????XH?}???XD9?X?????XH?}??wXHc?X???H?E?H??H??H??0???Ic?H??x???I)?L??L??P???H?E?L??H?u?H??p???H??H??@???H?1?H?????1?1?E1?1??2f.?L?????I??H?`???M??L?????L;?8?????WI??E1?H?u??fff.?I??L?h???L;E?t?H?0???H9?L?E???L??@???L??p???? fff.?I??LM?L;?x?????M??H?u??L?E?M?H??t?I??L?E?M?M??M??M?I??L??M?I??L?m???z??y?ăyDH??H9?u?I??L;}?L?E?u%H??H;}?u H??H;E??HD?1?E1?1??1??1?E1??v???f?H??H;E??HD?E1?1?H9?????H)?I??L;}?u?H??H;}?t?E1????H?P???H9?H?u?L??@???L?E?}#????H??H;E??HD?E1?1?H9??????H)?I??L;}?u?H??H;}?t?E1???1?A??H??H?}??d???I9?u4L??H?E?H?}??W???I9?uL??H?E?H?}??LH9??CA????A??H?u??mE????VH??x?????UH?}???U??????;? ?????UH?}???UHc?????H?E?H??H??H?????Lc? ???H?M?L??p???L)?H??H?M?H?E?L??H?M?H?????H??H??@???H?1?H??X???1?1?1?E1??*f?L??X???I??H?H???M??L??X???L;?x?????TI??E1?L??h???H??0???? f?L??h???I??LM?M??L??h???L;m?t?L?????f?H??H;U??HD?1?1?I9?|'I)?H??H;]?u?H??H;E?t?1???fffff.?L??P???L??H??????,ffff.?H?M?H??H??@???Hu?H;?p?????H?M?H??@???L?M??H?M?H?I??t?M??M??M?I??M??M?I??M??M?I??L?????C?L5I??L;U?u?H??H;]?H?M?u.H??H;E?u-H??H;U??HD?E1?1?1??fff.?E1??|???E1?1??r???fffff.?LU?H?u?I9?H??0???L??P???}"????H??H;U??HD?1?1?I9??c???I)?H??H;]?u?H??H;E?t?1???H??x???H?u??SH?}??
S??????;? ?????RH?}???RHc?????H?E?H??H??H?????Hc? ???L?M?H??h???I)?L??L??X???H?E?H?????H??H??1?H?????1?E1?E1?1??/H?????H??H??8???H?H???I??H?????H;?x????aRH??8???H??E1?H?M??fffff.?I??H]?L;}?t?H?????!f.?H??H;U?A?ID?E1?E1?H9?|$H)?I??L;U?u?I??L;u?t?E1???f.?L??0???H??P???H??H??????!fDH??H??p???Hu?H;?h?????H??p???I???f?L?}?L?I??t?H??@???H??I??M??L?m?M?M??M??M?M??M??M?I??L???1fC?L=H?M?H??H9?u?I??L;U?L?}?u6I??L;u?u4H??H;?x????HD?1?E1?E1??q???ffff.?1??]???1?E1??S???ffffff.?H?X???H?u?H9?H??P???L??0???}2?m???ffff.?H??H;U?A?ID?E1?E1?H9??@???H)?I??L;U?u?I??L;u?t?E1???H??x????XPH?}??MP??????;? ????;PH?}??0PHc?????H?E?H??H??H?????Lc? ???H?M?L??p???L)?H??H?M?H?M?H??0???H??H??@???H?H?E?L??????1?H?????1?1?E1?E1??1f?H?????H??H?H???I??H?????H;?x?????OI??1?H??P????f.?H??LU?H;]?t?L????I9?H??h????L?U?L??L??0????'fff.?I??H??@???H]?L;?p????H??@???H?u???H?M?H?H??t?L??I??L?M??M??I?H??I??L?D?+A????yn?I??L????y???y???yL
I??L;u?u?I??L;M?H?M?u(H??H;E?u'H??H;U??HD?E1?E1?1??v???f?E1??l???E1?E1??a???ffff.?H??H;U??HD?E1?1?I9??????I)?I??L;M?u?H??H;E?t?E1????Lu?H?u?I9?H??P???L?U?H??h???}/?|???fff.?H??H;U??HD?E1?1?I9??R???I)?I??L;M?u?H??H;E?t?E1???I????M???<A????@A????BH??x????sMH?}??hMH?E?H?H?M?H??Hc?????H??H??H?M?Lc? ???H?U?H??L)?H??H??p???H?L)?H??(???H??H?H??(???L??H)?H??h???H??H??H??P???H?M?H??H??H?????H?????H?WH??8???L??X???I??L??0???H?H?M?H?E?H?u?H?H?E?1?H??`???1?H??????E1?L??@???L?u??KH?}???M???X+A???-H??x????WLH?}??LLH?M?H?H?E?H??Hc?H???H??H??H?E?Hc?`???L??H)?H??H?E?I?I)?H?? ???I??H?H?? ???H??H)?H??p???H??H??H??h???H?E?I??L??L??X???H?????H??H??8???H?????H??H??P???H?H?E?H?M?H?U?H?
H?E?1?H??????1?H??????E1?L??@????=L? ???H??????H??H??????H????H??????H??H??????H;?x????8K??H???;?`???}?H??????H?????H??0???H??????H?E?1?H?U?H?M??*ffff.?L}?H?E?H??H?M?HM?H;E??e???L}???p???H?E?u"H?????H??P???H9?h???t??_f?H??H??@???H??H?0???H?H?X???H?E?J?<8H?U??	`H?U?I?H??8???H??P???H9?h????Z???L?????I)?L?cH?E?L??H?M?I?H??H?fDI??H?H?E?J?<8?_I??L?H?E?J?<8L}?H?U??_H?}?H?U?I?I?H?I???u??????I??L???????gM??H?E??	&H?1?L????JIk?xJ?L	0H?M?H??H	?H?? ??>H?H????>L?(???H??????H??H??`???H?H???H??`???H??H??????H;?x????8I??????;? ???}?H??????H??H???H?????H??`???H?E?1??)DL?p???H?M?H??H?E?HE?H?E?H;M??n???L}???h???H?M?uH?????H??0???H9?P???t??[f?H??H?E?H??@???H??H????H?H????H?E?J?<8H?]?H???^I?H??8???H??0???H9?P????W???H??X???H)?L?cH?E?L??H?M?I?H??H?H?}?I??H?H?E?J?<8L???]I??L?H?E?J?<8M?L???]H?}?H?u?M?I?H?H???u??????D??1?A??I??H??H??x???tH9?u9H??H??x???H?}?tH9U?u!H?U?H?U?H??p?????H9U???Mc$A?L$H??`?????ș??Hc?L??L?U?D?9?M?M9?L?????H?]?L?u???L9]???M9???H??????GH??X????G9M??GH?E?I??H?E?Hc?H??H?U?H)?H??0???H??H??H?????H?M?H??H??H?? ???H??P???H??H??H??????H??H??????H??H???H??H?????H?H?E?H?	H??x???1?1?1?L??@???L?e??3H??????H??H??????H?(???H??????HE?H;?????@FH??H?u?H??8???H??????H??(???H??`???H??????H?E?H??????H??h???1?H??????8?H??p???H??H?????H?h???H?E?HE?H?E?H;?X????O???L?E???0???tZH??H?E?H??H??H?U?H??H?8???H?H? ???H??@???H??H?`???H?H?????H?U???ZL??????H??p???H?????H9?????M???L??H???M)?M?XH??P???I??M??L??h???M?H?E?L??H?M?I?L?]?I??L?L??I?fDL?U?L?E?H?E?H??L?I??H?L???eZH?E?H??L?u?L?I??L?L???AZL?U?L?E?H??x???H?E?I?I?L?u?H?I?I???u?????M9?L?]?L??0???t	M9???L??L	?H?? t,L??H?I??I??H??x???u,H?}?uH??X????A>9M??8>M???/>HcE?Hc?L??`???H?M?I)?L??L??`???H??L??H???H?M?L??P???H??8???L??H?E?J?<(H?H?E?J?H?E?1?E1?H?U??2H??????H??H??(???H?? ???H?L??H???I?H;??????=H??????H??(???H??h???L??H???H?? ???1?H??????Eff.?L?`???H?????H??H?????H?????H?L?m?I?H;?X???H?U??Z???I?H?????H??H??p???L?m?H?????H??8????/ffff.?H??H??P???H?}?H?L?m?I?H;]??n???H??x???I??L?m?H?}?u	E1??o@I??E1?f.?H??@???H??L?H?E?J?< L???RH??L?H?E?J?< Le?H?U???QL?]?M?I??H?E?I?I?L9u?u?L??0???A??H??x????=???H??H??P???L?u?H??@???H??H?p???H?h???H?L?H?E?J?< L???QL?]?M??????A????A???4$E???=H??x?????;H?}???;H?E?H??Hc?????L?e?L??H??H??8???Hc? ???H?M?H??H)?I??H??`???H?H?E?H)?H??(???H??H??(???J??H??h???H?E?H?????H??I?H??H??????L??H???H?M?I?L$?H?M?I???J?(H??????M??M?H?U?L?RJ??H?????1?H??????H??????H??????1??=H?(???H??????H??H??H???H?????H?????H??H??????H;?x?????:??????;? ???}?L?u?M??H?}?~?H??H???H??????H??@???L??I???L?H??????M?L?????1?H?u?H??X????;?H?`???H?E?H??H?u?L?M?I?L??P???I?H;E?H??X????)???H?E?H??H?H?8???L??P???L?M?H??????fDH??I?I?H;]?t?H?}?tJM?LE?H??`???H??H?M?H??h???H?L?e?I?L?m?I?H?]?H?H;u?????H??`???L?8???H?]?L?m?L?e?H??h???H??X????(ff.?H??H?u?H?I?I?H?H;M??s???H?}?s1?H??@???um??fffff.?O?AE1?1??F?<fE?|r?G?<fE?|r?F?<fE?|r?G?|fE?L?????L??h???I??H?u?H?}?H?L?U?I?L?e?I?L??p???I?L;E??????L??h???L?`???L??p???L??L?e?L?U?H?}?I??H??8????*ffff.?H??H?u?I?I?I?H?H;}??h???H?}?s1?H?}?u\?ѐN?IE1?1??F?,sfE?ls?G?,rfE?ls?G?,pfE?ls?G?,tfE?,sH??I?I9?u?I?L?m?H?}??w???I??H?L?]?fff.?D?6fF?4HI??L?I??u??G???H??x?????H?}??~H?E?H??Hc?????L?M?L??H??H?M?Hc? ???H?U?H??H)?I??H??p???H?H)?H??(???H??H??(???I???H?M?H?u?H??H??h???L?H??P???L?p1?H?M?????E1??7L?(???H?U?H??H??H???H?P???H?h???H??H?U?H;?x???????????;? ???}?H?}?H??@???~?H?U?H??H???L??L?H?U?H??P???I?4L?h???1?H?M??8fffff.?L?p???H?]?H??H?M?H?u?H?L?]?I?H;]??H???Le?H?]?H??H]?L?]?H?u?H?U???H??H?M?H?I?H9?t?H?}?uE1??E?t??|fff.?M??O?,f1?E1?@E?KA????yn???y???y?ăyLE?D?NA????yn???y???y?ăyLEI??L?M9?u?M?M???E??`???H??H?M?H?M??B?????n???y???y?ģy`I???*???H??8????,H?}??!D9?X????H?E?H??Hc?X???L?M?L??H??H?M?Ic?L??H)?I??H?M?I?I)?H?????I??H?????I??H?M?H?U?H??H?M?1?1??)M)?L??H?U?H??H?M?H?`???H?M?H;?8?????H?}???H?U?L?]?E1??LU?L??L)?I??L?h???L;u?t?Hu?L??L?m??f?I??H]?L??L)?I9?t?I??H?4pI??E1??%ffffff.???@f?I??Le?H??M9?t?H??@???H??B?!A??A?????????A???w???с?????H?????
???H??8?????H?}???H?E?H??Hc?X???L?M?L??H??H?M?Ic?L??H)?I??H?M?I?I)?H?????I??H?????I???H?M?H?U?H??H?M?L?H??p???H?X1?H??x???E1??AL????H??x???H??H??`???H?p???HM?H??H??x???H;?8???L????????D9?X???}?L?e?M??~?H??x???H??`???H??@???L??L?H?U?H??p???N?)Lm?E1?H??h????5ffffff.?L}?I??H??h???L?]?I?L?m?I?L;U??@???L}?L??H??Hu?L?m?L?]?H?U??ffff.?H??L?E?M?M?H9?t?I??uE1?A??t??bffff.?N?${E1?E1?H?M?f?āzDu??y?ăyDD?āzs??y?ăyDI??I?M9?u?M?L?e?A???{???I??L?u?I?L?E?āz??y?ģyxI???P???H??x????rH?}??gH?E?H??Hc?????L?e?L??H??H??h???Hc? ???H?U?H??H)?I??H??P???H?H?M?H)?H??(???H??H??(???J??H?M?H?M?H??p???H??J?aH??????M??I???I?T$?H?U?D???I???H?y0H?P`H?U?L?AH?PH?U?E1?H??????H??E1??CL?(???L??????I??H??H???H??8???H?H?????H?L??`???I?L;?x????b??????;? ???H??8???L??`???L??????H?????}?H?U?H??~?H??@???L??H?? ?O?I?1??&L?P???H??H?M?L?U?I?L?}?I?H;}??H???L?h???L?}?M??L?U?H??p????ff.?H??H?M?I?I?H;]?t?H?}?sE1???uq??fff.?H?M?N?4?E1?DG?|j?A??G?|??G?|j?A??G?|??G?|j?A??G?|??G??H?M?H?E?L?CL?[L??I??L?S H?K(L??H??H??I?~I?FH?E?H??I?v M?N(H?u?L?M?I??H??H9???H?E?Hk?xL?
`J?TJ?DH?E?H?U?I9?tH?E?H9C0??L??H?u?H	?H?? t!L??H?H??H?E?I??u I??u.H??uI??A??L???H???H?E?L????F\?????D?fd??Vh??U???Fl??E???Fp???t?????Ft??E???Fx??E???F|??E?I?@0H??X???H?VH?F H?~(A?JH??????H?U???H??????????șM?H8L??X???M?H@L??????L?? ???M?@HL??????L?F8L??P???L?F@L??????H?????H?vHH??????L??H???Ic?????ˉ??????9???r*?Mlj??????U???P?????^???(??
??E???b*???M???E???X???Y???^??4
???x?????E??"
??E???E???X???Yg??M???^?????(?M??tLA????D????D???H?I9GL?e???I??L?m?E??u&??
cH??????*??1?L?e?L?m?E??t???
?H????????H?M?H??H???????????^E?H?E???M???U??R??m?L?M?L????????e?H???????????P?????Y?x?????U???X???Y???^???q
?	??^???i
?
H?}??G???W???_???*???]ʉ????????!??i????Y???????????????\???
???_???????Lc?L?u?I?FH??H??H???H?QL??H??H??L?H??H??H??H??????L??H??`???H???N???ġzp?C???H??`???taE1???M?H??`???ġr^p??YE?????????U???Y?H?E?ġzL????M???Y???YE?ġz???YM?I??M9?|??I??sE1??H??????E1?L?e?f???M?H?E???YE????????U???Y?āz???Y???YE?āzD???E???YE???E???YE??H?H?E??????U???Y?āzL???Y???YE?āzD???E???YM?I??H????q?????????L??????tAN??E?H?????H?????H?????H?E?H?????L?? ???L??(???L??0???E1??6f?I??H??`???I?I?L??h???M?L?HE?L?H?L?}?M9?????????p;?L???|?;?X?????H?u???\?????E??M???H??h???L??I?H??x???H??HE?E1???y??ġz???W?L?e?ā{???q!???y????y????Y?ĢyL????i????xI??I?M9?|??ff.?E??M??~xH??x???L??H??h???H??O?<M?E1?f?H??H?]?ġzD??ġz?H??āzfāzg??Y???i????$8??Y???i??ġzI??H?????M9?|?H??????L9?M??I??H?u??v???H??h???H??H?L??x???M??I?M????zF???@???z??I??H?I??M9?|??'????H?u???????L?}??????H??x[A\A]A^A_]?H?=??H???H?
???71???{??H?=??H???H?
????71???{??H?=l?H???H?
????71??{??H?=K?H???H?
z???71??{??H?=*?H?v?H?
u???71??p{??UH??AVSI??H??H?H?OH?H??H;Gvi???n???b2???\:???y???X???YX????,?H????\P?H??????,?H!?H	?H?sH?;H??t??H?H?KH??uH???:H?H?KH??t?I?H?H?;H?KH??H?KH??tH?I?I?v??H?KIH?K[A^]?UH??AWAVSPI??H??H???*I??L???M*H??L?;L?sH?CL??H	?H?? t
L??1?H???D??1???H??H)?H??H	?H?? t1?H???1???H?SH??H??[A^A_]?UH??AWAVATSH??I??H???*I??M?wL?H??I??I!?M?gM??X)I9?w*I???[)I??I?OH?I?M?wH??[A\A^A_]鉒H?z=L? H??I???)I+GH?5?H?<L??H??M??I??1??(?H?=5H???^1??ay???UH??AWAVAUATSH??(A??I????`??H???cI??Ic߾H???w?I?$H?E?H???`?H???Y?I?D$H?E?H???b?H???:?L?e?I?D$H???dD?}?E??H?M?H?U???H?Ëu?E1?H?u??&ff.?H??J??J????fffff.?UH??AWAVAUATSH??(A??I??I??H??H??H? H??H	?H?? t
1?H??H???1?????M?D$(I???DL??1?H??I??I9???L??H??A??A?D??A??D??s.I?D$0N9J?L2?D>?@??I?$I?L$Ic?L?$?H??H?
????1??8K???UH??AWAVAUATSPH?U?H????L??I??I??I??M?<H????V??I9???I?E(H??uEI??$?H??ID?L?hM????I??$??L???V??I9???H??t$I?E0L??L??H?U?L??I??H??[A\A]A^A_]??H??[A\A]A^A_]?H?=:?H?W?H?
????1??QJ??H?=?H?6?H?
???1??0J??H?=??H??H?
9???1??J??H?=??H???H?
`??1???I??H?=??H?ӖH?
???1???I??ffff.?UH??AWAVAUATSPH???H??HD?L?hM??t`I??H?u?H??tpH??I??L?<L???XU??I9?wzH??t$I?E0L??L??H?U?L??I??H??[A\A]A^A_]??H??[A\A]A^A_]?H?=?H? ?H?
D???1??I??H?=??H???H?
k??1???H??H?=??H?ޕH?
???1???H???UH??AWAVAUATSP?u?H???H??HD?L?hM??tiI??H??t}H??I??L?$L???iT??I9???H??t-I?E H?????U?L??L??L??I??H??[A\A]A^A_]??H??[A\A]A^A_]?H?=?H?$?H?
H??
1??H??H?=??H??H?
o??1???G??H?=??H??H?
}??1???G??H?=??H???H?
??1??G??ff.?UH??H?G8H??t]??]?fffff.?UH??H?G@H??t]??H?=H?H?e?H?
???#1??_G??ffffff.?UH??H?GHH??t]??H?=?H?%?H?
???)1??G??ffffff.?UH??H?GXH??t]??H?=??H??H?
???/1???F??ffffff.?UH??AVSH???W`A??H?C8H??tH????D??[A^]?f.?UH??H?G`]??DUH??H???H?OhH?PHH??HD?HE?H?]??fff.?UH??H?GH]??DUH??H???H?OpH?PPH??HD?HE?H?]??fff.?UH??H?GP]??DUH??H???H??t
H?HXH??]??H?GxH??t]??1?]?fDUH??H?GX]??DUH??H???]?UH??AWAVAUATSP?;??H??I??H?GH;F?wI?F0H;C0?iI?FH;C?[I?F8H;C8?MI?F H;C ??I?F@H;C@?1I?F(H;C(?#I?FHH;CH?I9??3I?FH?xPH?G(H??tp?Є?tjM??L????P??I??H???H??HD?L?`M????H????H???P??I9??M????I?D$(L??H??L??1?M???{H?CH?xPH?G(H??tz?Є?ttH??L???bP??I??I???H??ID?L?`M????I????L???.P??I9???M??tJI?D$0L??L??H??1?M??H??[A\A]A^A_]??H???H??HD?H?xH?G8H??tL??H???Є?tH??[A\A]A^A_]?L???O??I??H???պI??I???H??ID?L?hM???I???0L???O??I9??@M??tL??L??L??1?M??A?U0H???H??HD?L?pM??tmH????H???3O??I9???M??tL??H??L??1?M??A?V(L??H??[A\A]A^A_]??H?=??H??H?
??r1???B??H?=??H??H?
???1???B??H?=??H???H?
,???1??B??H?=??H???H?
:???1??B??H?=a?H?~?H?
????1??xB??H?=@?H?]?H?
???1??WB??H?=?H?4??t3H?4H??H??[]?H?=x?H???H?
???Y1??5??H?=4謫??t?H?=?3?[H?=?[H?5?3H??????d?H?=?3?|??H??H?=?3?_?H??苪@UH??AWAVATSI???}???1?H??t7E1?L???(???I??H???H??L???¬??tI???I???I9?r??L??H??[A\A^A_]?UH??AWAVATSA??????1?H??t.E1?L???????I??H???PD9?tI???????I9?r??L??H??[A\A^A_]?fff.?UH??AWAVATSH??I??????H??t1E1?f?L???h???I??H???H??L??????tI??????I9?r?1?[A\A^A_]?I?D$(L??H??[A\A^A_]??@UH??AWAVATSH??A???J???H??t(E1?f?L???????I??H???PD9?tI???"???I9?r?1?[A\A^A_]?I?D$(L??H??[A\A^A_]??ffff.?UH??AVS?????H??t21?ffff.?H??????I??H???P??tDH??????H9?r?????H??t&1ېH???X???I??H???P??tH??????H9?r?1?[A^]?I?F(L??1?[A^]???UH??SP?31??tH??0H??[]?H?=1?????t?H??H??0H??H??0H?H??0??W????0H?H??0H?=v<1??~<H??0H??0H?=?0菨?l???H??H?=?0?o?H??蛧@UH??H?;?]?UH??AWAVSPH??I??H?? H????H??tHI?ǿp??????
?????
??@ ???
??@0L?pPL?xXH?X`?@h?$H???H?8H?5??H???H??1??R?1?H??[A^A_]??w?DUH?? ]?DUH??]??UH??H?U;]?UH??AVS?0?B?H?????W???@H?@(????w??I??H?>;I??????|F?????|F(?????|FH?????|FhH??I???H?=?:1???w??:I???I???L??[A^]?H??L??艦H????f.?H??tUH??H??H?5?:]?9??1??@UH??AVSH??t&??I??H??H?5u:?9????tI????[A^]?H?=?H?#}H?
3???1??0??ffff.?UH??AVSH??t?Wh?????H??????H???>??H??????H????ӜH??(?ǜH??0軜H??8诜H??@補H??H藜H??P苜H??(??H??h?s?H??x?g?H??[A\A^A_]?W?ÐUH??AWAVSP?FF;???H????H??XH??H??8H??@????A?Ƅ????;uRH??????H??H??(H?????&?H??0HcsHc??H??H??H??????C?C??~.E1??f?I??Hc?I9?}J?|?H?O8H??t??ыC??D??H??[A^A_]?H?=j?H??qH?
???1??$???UH??AWAVAUATSH???I??I??LJ?LJ?H??0H??M??(????????M???M???)???H?E?L??(L??H??H??H	?H?? t
1?H??H???1?????H?E?L??H???ff.?H??1?H??H??H9??Z
H??H??A??A?A????s6H?E?H?? L9?L?]?t;H??H??H	?H?? u???1?????H9?u??
A	?E??H?E?H?? L??L?]?A???????????Q???H?U?H???H?M?L??????????A??H?M?H?I1?fDL??A?QP??߃??&H??I9?u?A?D$A?D$`1?L?m?A?D$??H?MЉ????8??????H?7?1?1??1f?H?3?
?{L?m?H?u??U?H??IcEH9???H?E?;???BH?E?H?Hc?Li??B?L8H9??#H?u?Jc8H?u?H?|?H?H?
O?H??L?u?tM??A???WD??M??H??I?F?D8`H??H?5L??U?1??dzI?B?|8`H?o?L?-???I?OH?M?E1?L?}?L?u??HE?L?3J?H??H??L	?H?? u???1?A????H9?u??????	?A??H?M?H?? L??L??H?E?H??(H???@H??1?I??H??H9??????H??H??A??A?A????s3H?E?H?? L9?t8H??H??L	?H?? u???1?A????H9?u??^???A	?E?H?GpH???
??L??L??說??I??H?E?HcI9?H?E?L?m???J?(N?L?H??L??(L??H??H??H	?H?? t1?H??H???ff.?1?????N??I??L??H???fD??1?????H9??XH??H??A??A?A????s6H?? L9?t;H??H??H	?H?? t?H??1?H??H??H9?u??DA	?E?4?H?? L??Ic?H???tL?\??ffff.?E1?M?"L??0L??H??H??H	?H?? t1?H??H???fD1?????L??H???fffff.???1?????H9??xH??H??A??A?A????s6H?? L9$?t;H??H??H	?H?? t?H??1?H??H??H9?u??.DA	?E??H?? L?$?HcCH??Hc??H??L?m?I??H?Hc??H?M?4?I??I?A??$?I??͸?????L?u?L?]?H??t1L?u?I???H????L?????(H?E?H?@8H????????L?u?I?F8H??tL????I?F0H??L?u?tL??H?u?L??H?M??Є??u???I?F8H??tL????Hc??I??ŸH??tH?>H?GpH??L?u??2????7H?E?H?@8H??L?u?????H?}???????@H??J?t(h?MH?u?B?|(l?HH?E?N?4(I??l1?L?u??f?D??L?u?E;.?H?M?I?FLc?N?,?H?? L????A???tL?m?L?m??rff.?L??A???L?m?A9?}OA?Eff.?A??I?FJ?|?H?? H?}Ⱦ??A?DŽ?uI??IcH??A?EI9?|??
H?M?E1?A??L??H???L??H?u?H?U?D?????L?e?L??L??A?T$`????I?D$8H??tL????E???????H?? H?}?1???????????H?}??W`??u|H?E??8????Hc??H?M?H??H?H????H???????H?}?H???H???????H?=?xH??8H?
{??1?????????????????1?H?Ę[A\A]A^A_]?H?=NcH??9??1??m???H?=5xH?R8H?
?z??1??L???H?=xH?18H?
?z??1??+???ff.?UH??H??H?? ]?fff.?UH?勇?]?@UH?勇?]?@UH??G]??UH???x9w~	??H?D?]?H?=?wH??7H?
?|?	1?????f?UH??O??~H??1?H9D?t)H??H9?u?H?=9wH?V7H?
j|?	1??P?????x?9?~?H??]?K???ff.?UH??AVS?G??~!E1?ffffff.?J9T?t)I??L9?u?H?=?vH??6H?
?{?!	1??????E??x?D9?~?L??L??(H??H??H??L	?H?? t
1?I??I???1?A??A??H??L????H??1?I??H??L9?tBH??H????A?A????sDH?? H94?tIH??H??L	?H?? u???1?A???L9?u?H?=aH?r7??1??$???A	?D?4?H?? H?4?E???[A^]?fDUH??SPL??L??(H??H??H??L	?H?? t
1?I??I???1?A??A??L??L???ff.?H??1?I??H??L9?tAH??H??A???????sDH?? H94?tHH??H??L	?H?? u???1?A???L9?u?H?=&`H??6??1??E???	?A??H?? H?4?Ic?H???tH?D?H??[]?1?H??[]?DUH??H?uHH??H???H??tZH?xH??trH??H????H?~H??H??H?GH??t]??]?H?=?tH??4H?
?y?2	1?????H?=dtH??4H?
?y?3	1??{???H?=CtH?`4H?
?y?4	1??Z???H?="tH??4H?
?y?5	1??9???f?UH??AWAVATSH?~??H??H????H?????I??I???WH??tqL9???I?~PH?G H??tH?????H??????I??L??A?VH??t=M?IF`I9???L?sL??I?FH??tL??H??[A\A^A_]??[A\A^A_]?H?=DsH?a3H?
?s?q1??[???H?=#sH?@3H?
?x?=	1??:???H?=sH?3H?
?x?>	1?????H?=?rH??2H?
?x??	1??????H?=?rH??2H?
?x?@	1??????H?=?rH??2H?
?x?B	1?????fDUH??AWAVAUATSH??H??H?u?I??H?r(H?}?????L?e??L????[I?ǾL???[H?E??[???I??L?e?Hc;1??)??I??M?L??h???HDžp???ƅx???H??x???H?D$???h?????$????I??L?m?H?E??E?H?E?H?D$??E???$?q???I??M????M????L?u??{~GE1?ffffff.?H?CJ??H?E?H?D$??E???$L??L??L???WI??HcCI9?|?L??H?u?菊??H????H?E?L?m?L?eЃ{L?e?~2E1?L?u?f?H?CJ??L??L??L???I??HcCI9?|?Hc3H?}?1?????I?Ƌs???H?}?E1??(f?H??????I??I?NJ??I??I9???H?CN??L??H??H??H	?H?? t1?H??H???fff.?1?????L?U?L?]?H???ffff.?1?H??H??H9?t?H??H??A?????v???M9??l???H??H??H	?H?? u?1?????H9?u??F???H???H?H?=?v?*???YH?}??????L????YH?}???YL???T???L???L?????W??A?vH?}?????L???YL???YH?E?H?M?H?H?M?H?HH?M?H?HL?pI???WH?c?H?H?=fv?)??YYH?}??9???L???6YH?}??-YL???????L????????W?L?u???|L??H?Ĉ[A\A]A^A_]??w?UH??AWAVAUATSH??(H?U?H?u?H???(I??H???8H??L?}L??H??I??H??H	?H?? t
1?H??H???1?????M?GM?OI???L??1?H??I??I9?tEL??H??A??A?D??A??D??sBO94??BI??L??H	?H?? u?D??1???A??I9?u?H?=2YH??/??1??Q???A	?E??O?4?H??I????I??tI???H?}?tH?}?L???%??I??I?F0I?D$0I?F8I?D$8I?F@I?D$@I?FHI?D$HI???H??t:I?GH?D$??x??$H??H?u?H?U?????I??$?I???I??$?A?FPA?D$P??|FT??|Nt??|D$T??|L$tI??L????w?S0??I???H??t+I?GH?D$??x??$H??H?u?H?U?????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U?????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??o???I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??8???I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U?????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U?????I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??\???I??$?I???H??t+I?GH?D$??x??$H??H?u?H?U??%???I??$?N?$??OH???f?1?H??H??H9?t0H??H??A????s'M94?t!H??H??H	?H?? u?1?????H9?u?H??????L?$?L??H??([A\A]A^A_]?H?=?jH??*H?
&t?L	1??????H?=?jH??*H?
t?M	1?????@UH??AWAVAUATSPH??I??I??I???@H???H????H??H??I?4$H??H	?H?? t1?H??H???ffffff.?1?????I?|$H???
1?H??H??H9?t4H??H??????s,I?T$H9?t!H??H??H	?H?? u?1?????H9?u?H??????A?<?MA?M?,?I????H???L??L??L??????L??????H???H??tL??L??L???????H???H??tL??L??L???????H???H??tL??L??L??????H???H??tL??L??L??????H???H??tL??L??L??????H???H??tL??L??L???m???H???H??tL??L??L???S???H???H??tL??L??L???9???H???H???I???L??L??L???????6???fDH??L??????H???H???????????H??[A\A]A^A_]ÐUH??AVSL?uH?]H??tH?CH??tH????H???=QI?~????I?~[A^]????UH??AWAVAUATSH???L?E?H?M?I??H??I??H??x????_???L??x???M???L?}?A?~??L??H?E?H?E?E1?L?u?H?]?L?e??@H?u?HcFM??I9???H?FJ??H?E?I?D$J??H?E?M?wH??????H??D??D???	??H??0???L??D??D???	??L??H??A?U`I?E8H??tL????H?]?H??H??0????S`H?C8H??tH????H?u??FP??߃??[???D??H?U?H?M??UȄ??E???L?u?H?]?L?}?I?GH??tL????L????OL???K???H???C???M????H???[A\A]A^A_]?ff.?UH??AVSH????W???G??H?5????w????[A^]?I??H?{H??t	H?{ ?gOH???NL????NUH??SPH??H?H??t	H?{ ????H?????W?????H?4???H???H?=??1????H???H???H?=???H?l???H??H?=???HH???G@UH??H??H??]? ???UH??AVSH???NP???????H??H??Hc?H???H???D?0E????H????0H??x????&???D;u??VH????8??t????????t2?4???s:?????????-H???u?C\?H????8t1??
H????8??H?Ā[A^]ð??f???????????????????????????????????????????????????????????????????????????????????????????????@UH??H?F(H??tH??]??1?]?f?UH??AVSH??H????GCPUH?E?H?=CeH?U?1?1?E1??H??u2H?u?H??1??&F?uH?s?H?sH?=eH?U?1?E1??HH??[A^]?I???t	H?{?`FL????E?UH??AWAVSPH?_XH?CH??t9E1??@L???/FH?CI??I9?sH?N?4?M??t?I?FH??t?L??????H?;??FH??H??[A^A_]??FfDUH??AWAVSPL?wXI?~t E1?@??@I?J?H??H????A?A????s/H?? H94?t4H??H??L	?H?? u???1?A???L9?u???A	?D?4?H?? H?4?A?????tCH?H??H?H?0H????Ic?H?D?H???H?HpH?WPH??HD?HD?H?[A^]??L???M????L??(L??H??H??L	?H?? t
1?I??H???1?A???H??H???H??1?I??H??H9?tBH??H????A?A????sDH?? L9?tIH??H??L	?H?? u???1?A???H9?u?H?=?AH?B??1??????A	?D?4?H?? L??A??????????1?[A^]?fffff.?UH??H?BH??HI?H????????H??1???y?F??
?K??W????F??}%?K??o-?L??o5?L??f???}??DY?DYL@???}%C??o-CD??o5D??o=#D?yo;D?}o
?H?}o?H?}oI?}o%+I?JfD??}???Y??Y\@??X???[???}9???ik???c???i8???X???[???}9???ak???c???a8??i??ʼnq??	???A	???y?n??q?Ź????}1???mG???q?Ź????}1???eG??tYl ??????YL`ŔX???[???}9???ak???c???a8???X???[???}9???qk???c???q8??a??ʼnq??	???A	???y?n??q?Ź????}1???eG???q?Ź????}1???uG???????????}9???????p????????p?U??????~NH??H??H9????z4?AW??Ax.?u?AW??@?T???
??ňT??ztňT?ł????aJ? ??r_???\?`T??Ar????iJ??Ŋ_???\?`T??Ar????iJ??Ŋ_???\?`T??Ar????iJ??Ŋ_???\?`T??Ar????iJ??Ŋ_???\?`T??Ar????iJ??Ŋ_???\?`T??Ar????iJ??Ŋ_???\ ?`T??Ar????iJ??Ŋ_???\$?`T??Ar????iJ??Ŋ_???\(?`T??Ar????iJ??Ŋ_???\,?`T??Ar????iJ??Ŋ_???\0?`T??Ar????iJ??Ŋ_???\4?`T??Ar????iJ??Ŋ_???\8?`T??Ar????iJ??Ŋ_???\??	
:??y???y?Ax.?u?E?????
9?Ar^??3???]??w?fffff.?UH??]????fDUH??H?BH??HI?H???????H??1????=??W???}-?8??o5?>??o=?>?yo?>?}o
?C?}oD?}o(D?}o%@D?`ff.??B}??B}???$?||@??\\?ŔY??A\??AY???X???[???}9???k???g?ńX???[???}9???Yk???g??y????q?????Ł?????N??q?Ź????}1???}G???q?Ź????}1???uG??}????D ??L`??|\?ŔY???t\?ŔY???X???[???}9???k???g???X???[???}9???k???g?????őq????ő?????f??q?Ź????}1???}G???q?Ź????}1???uG?????Ņ????}9???????p????????p?U??????~FH??H??H9??W?z,?zt?]=?;?_-?7?A
]??A
_??zt?A
]??A
_??zt?A
]??A
_??zt?A
]??A
_??zt?A
]??A
_??zt?A
]??A
_??zt?A
]??A
_??zt ?A
]??A
_??zt$?A
]??A
_??zt(?A
]??A
_??zt,?A
]??A
_??zt0?A
]??A
_??zt4?A
]??A
_??zt8?A
]??A
_??zt??????.?u?N?????^??E???]??w?UH??H?BH??HI?H?????!??H??H????}211???
<6??W???o=?mf.??B}?żY?żY?żY?żY???}???}???}???}???[???[???k???[???[???k???c???e6???&H??"H??H9?????$??l ??t@??|`?\T??TT??A<_??LT??A<_??DT??A<_??C}??A0_??Cy??A8_??Az??A:_??:^??Ci??Cy??cyN??A1???Ax.?u?????Ar^?????]??w?ffffff.?UH??H?BH??HI?H?????b??H??|H????y?/1???
?4??W????/??}%?/??}-?4?<D??}??DYD??DYL????????.?u???????^??????]??w?fffff.?UH??H?BH??HI?H?????l??H??H????}R,1???
\1??W???o\8???B}?ŴY?ŴY?ŴY??A??}???ģy>L??H??$?H????yL?|$`I??ģy>??????[???Y?ġzl&@H?T$8??a DUăy Duăy DE??y D]ăy D]ăy DUăy DM??}1?ŭ????????[???Y?ġzT&??yTH??$?E?LU?Ayn?L?T$ ģyTL?D$ģyT??}?L?\$(ġzT??yT>H????yTE?LU?Ayn?ģyT>??r???????[???Y?ġzT&D??i!?L??D@H?????ġxD@??y???y!??ġxD@??}???}????ġxT@??Q!?L??T>@?????T@E?LU?Ayn???y???Q!????)D$`E?LU??yn?H?D$8?Cq lE??A \E?C9 \E??1 |E??o?$??Cq DE??o?$??Cq LE	??o?$???q LE
??o?$???i TE??o?$???Q lE?C |E
?C	 tE?C dE?C) TE??y DEL??$?? luăa \u?! \uăA |u?9 Du?1 Lu	ăq Lu
ăi TuăQ lu? |u
?	 tu? du?) Tuăy DuH??$??C lE??a \E?C! \E??A |E?C9 DE?C1 LE	??q LE
??i TE??Q lE?C |E
?C	 tE?C dE?C) TE??y DEH??$??C lU??a \U?C! \U??A |U?C9 DU?C1 LU	??q LU
??i TU??Q lU?C |U
?C	 tU?C dU?C) TU??y DUH?T$P?C lU??a \U?C! \U??A |U?C9 DU?C1 LU	??q LU
??i TU??Q lU?C |U
?C	 tU?C dU?C) TU??y DUH?T$@?C lU??a \U?C! \U??A |U?C9 DU?C1 LU	??q LU
??i TU??Q lU?C |U
?C	 tU?C dU?C) TU??y DUH??$??C lU??a \U?C! \U?y\$@??A |U?C9 DU?C1 LU	??q LU
??i TU??Q lU?C |U
?C	 tU?C \U?y\$P?C) TU??y DU?x(\$`?!x\>@?B}1??}o?$?A??????A|[??Y??!zl&?cylL???#yl?#yl?C}?L???!zl?cyl>??r?I???cyl????#yl>?A|[??Y??!zd&H??}1??%??????A|[??Y??!zl&?cyl?#yl?#yl?C}??zl?cyl>?cyl?#yl>??r???????[???Y?ġz\&L?Ca!?L?xlH???!xlH?cy??C!???!xlH?C}???}????xlH?Ca!?L?xl>H???xlH??y???a!??ġx\>H??}1\$@?%??????A|[??Y??!zd&?cyd?#yd?#yd?C}??zd?cyd>??r??cyd?????#yd>??[???Y?ġz\&P??}1??%??????A|[??Y??!zd&?cyd?#yd?#yd?C}??zd?cyd>?cyd?#yd>??r???????[???Y?ġz|&T?cA!?L?xdP?`??!xdP?cy??c!???!xdP??}???}??`??xdP?cA!?L?xd>P?`??xdP??y???A!??ġx\>P??}1?ť????????[???Y?ġz|&??y|ģy|ģy|??}???|??y|>??r???y|????ģy|>??[???Y?ġz\&X??}1??%???=???A|[???cyD?#yD>??r???????[???Y?ġz|&\?cA!?L?xDX?`??!xDX?cy??c9!???!xDX??}???}??`??xDX?cA!?L?xD>X?`??xDX??y???A!??ġx\>X??}1?ť????????[???Y?ġz\& ??y\ ģy\ ģy\ ??}???\ ??y\> ??r???y\ ????ģy\> ??[???Y?ġzL&`??}1?ť????????[???Y?ġz\&$??y\$ģy\$ģy\$??}???\$??y\>$??y\$ģy\>$??r???????[???Y?ġzT&d??i!?L??\`???ġx\`??y???a!??ġx\`??}???}??????\`??i!?L??\>`?????\`??y???i!??ġxL>`??}1?ť????????[???Y?ġzT&(??yT(ģyT(ģyT(??}???T(??yT>(??r???yT(????ģyT>(??[???Y?ġzL&h??}1?ť????????[???Y?ġz\&,??y\,ģy\,ģy\,??}???\,??y\>,??y\,ģy\>,??r???????[???Y?ġzT&l??i!?L??\h???ġx\h??y???a!??ġx\h??}???}??????\h??i!?L??\>h?????\h??y???i!??ġxL>h??}1?ť????????[???Y?ġzT&0??yT0ģyT0ģyT0??}???T0??yT>0??r???yT0????ģyT>0??[???Y?ġzL&p??}1T$Pť????????[???Y?ġz\&4??y\4ģy\4ģy\4??}???\4??y\>4??y\4ģy\>4??r???????[???Y?ġzT&t??i!?L??\p???ġx\p??y???a!??ġx\p??}???}??????\p??i!?L??\>p?????\p??y???i!??ġxL>p??}1?ť????????[???Y?ġzT&8??yT8ģyT8ģyT8??}???T8??yT>8??r???yT8????ģyT>8??[???Y?ġzL&x??}1?ť????????[???Y?ġzT&<??yT<??r?ģyT><??????[???Y?ġzD&|H?D$0??y!?L??Tx?????Tx??y???i!??ġxTx??}???}????ġxTx??y!?L??T>x?????Tx??y???y!??ġxD>xH??L9??????H?|$pL?D$x??K??H?EL?M)?I??I?1H??`H??_??}X<??}X
7??0??}1P??????????[???}$???Y???Y???r???????[???Y???Q???}1P
??????????[???Y???Y???r???????[???Y???H??H??I??u?H?e?[A\A]A^A_]??w??UH??H?BH??HI?H????????H??1?H?_??}Xiffff.?D???}1OD?O??????[?Ģ}?Ģ}$???e??????r???[???e????}1W??L@??????[???e????L ??r???[???e????L`H??H??H9?u?]??w?UH??H?BH??HI?H???????H??1?H?V^??}X!??o
?#??o?#??}X???}X%???o-?#??o5?#ff.?D?Ģ}??W???x)$??W??A8W??z???x(?@????z??????f???fffff.???W?Ų??ŰT??x(??????2?????aJ???????z?X????2 ?????aJ???????z?\????2@?????aJ???????z?`????2`?????aJ??????z?d????2??????aJ?0?????z?h????2??????aJ?P?????z?l????2??????aJ?p?????z?p????2??????aJ???????z?t????2?????aJ???????z?x????2?????aJ???????z?|???Ų????aJ?????Ţ????yJ???????yJ?ź????yJ???J????yJ???
A???^?E1???W??A8W??z!??x(?@????z??????Bffffff.?D????C???Y???Y???W???Z*???a????Y???a??I??I??t=ġz???Y?Ū\???~ҁ?????@|?@?????}??????f?E1?E1???I??I???ġz$?C?.?AW?Œ*???Y??by
N???Y???(???y????x.?v?ŰW???Y???I????Y???^?ŪX???y~?A????A??@} A?????|&A????9??x????*fDA?@A?????}?A????A????9??L????AW?Œ*???Y???Y????x.??/?????y????Y???Y???Y???Y???.?????G?.A????(???(??????fff.?E??????E1?E1??ffffff.?I??I????ġz$???Y?C?.?AW?Œ*???Y???(???y????x.?v?ŰW???Y???I????Y???^?ŪX???y~?A????A??@}A?????|A????9?t??'A?@A?????}?A????A????9??\???Œ*???Y???Y????x.??D?????y????Y???Y???Y???Y???.??%???G?.A????(???(??????E???????E1?E1??ffffff.?I??I????ġz$???Y?C??AW?Œ*???Y???(???y????x.?v?ŰW???Y???I????Y???^?ŪX???y~?A????A??@}A?????|A????9?t??'A?@A?????}?A????A????9??\???Œ*???Y???Y????x.??D?????y????Y???Y???Y???Y???.??%???G?A????(???(?????E???????E1?E1??
I??I????ġz$???Y?C?Œ*???Y???(???y????x.?v?ŰW???Y???I????Y???^?ŪX???y~?A????A??@}A?????|$A????9?t??,?A?@A?????}?A????A????9??\???Œ*???Y???Y????x.??D?????y????Y???Y???Y???Y???.??%???G?A????(???(?????E???????E1??I??I???????ġz$???Y?C?Œ*???Y???(???y????x.?v?ŰW???Y???I????Y???^?ŪX???y~?A????A??@}A?????|$E????A9?t??,?A?@A?????}?A????E????A9??[?????*???Y???Y????x.??B?????y????Y???Y???Y???Y???.??#???G?,??(???(?????f?Lk?nH??????N?<1B?D1hJ?D1`?Ax.?u????&???z^?E1??-E???CL:`??D????????D?ك?BT9hI??I??tcġRY??????ŪX???~??Ƀ?}???|?ʃ? I??w??!?????}??????ʃ? I??w???C??ffff.???X???^???y?????W???y???~?H??????fB?L2l??H??/??,?E1?E1???oH??fDI??I??I???I??wC? ???ffffff.?A?B?T9`??D???F?T9hD??????A??A??A??0A?A???A???AW?Œ*???Y???x.?u{?ġ|?ġ|T? ??}???^???^???}????X???X???}[???T???T???}XN???}9???u9???}X[???u=???}=???}X ???????????u+???}9???g???p??????ġy??????????f???W???|E1۲E1??-ffff.?A??A?? ??ED???I??I???????B????????|?Ic?A???B???????H??-H?H;E?uH??[A\A]A^A_]??w???w?^??UH??AWAVAUATSH??H??h???H??-H?H?E?H???H??HI?H?????I???H??p???1???oG???o
O???oW??H??`???Hk?nH??h???H??LlH?=^-???H?L`H?M??Lh??yYe??M???Y"???n?????Q"?L?4I?? ??????yX???IG???YE???I???????????e??1?@?H?]???E?Hc?H?E?H??X???H?H??x???1?L?u?ffffff.?E?A??H??x????T
?????U?E1?A??@?3A?VA????1???@?sA?~??H?E???1ۃ?L?E?A?pE?F??A??1?A??L?M?A?qE?N??H?E?A??1?A??L?}?A?wL?u?E?n??H?E?A??A??E1?L?}?A?wŲ*e?C?D??Ų*???Y?A??M??H?E??@???E1?L?]?A?s??Y?L?U?B?T??ź*???z,$A??H?U??R???E1?L?U?A?r??Y?|??ź*???zl$A??L?]?H?}?????E1?L?U?A?r??Y?L?U?G?D????z*???zl$A??L?]?L?E?A?X	???E1?L?E?A?p	??Y?L?E?G?D????z*???zl$A??L?U?L?E?E?P
A??A??E1?L?E?A?p
??Y?G?D????z*???zl$A??L?E?E?HA??A??E1?L?}?A?w??Y?B?D????*???zl$A??L?E?H?E??@???E1?L?}?A?w??Y?L?u?B?T????*???zl$A??L?E?H?U?D?B
A??A??E1?H?U?@?r
??Y?H?U??T????*???zl$A??L?m?H?U??z???E1?H?U?@?r??Y?H?U??T????*?C?T????*???z|$ A??L?}?H?U?D?jA??A??1?L?U?A?r??H?U?H??x????
???L?U?A?Z???E1?L?U?A?r??Y?L?U?G?L????z*???z|$$A??M??L?M?E?IA??A??E1?L?U?A?r??Y?L?U?B?D????*???z|$(A??L?]?H?E?D?XA??A??E1?L?U?A?r??Y?L?U?G?D????z*???z|$,A??H?E?D?@A??A??1?L?U?A?r??Y?L?U?B?|????*???zl$0??H?E?H?E??x???1?L?U?A?r??Y???zl$4??*?H?U?A?T????*???Y???H?E?H?E?D?hA??A??E1?H?U?@?r??z|$8B?D??A??M??H?U??R???1?L?U?A?r??Y???Y???*?H?E?A?D????H?]?L?M?E?IA??A??1?L?U?A?r??zt$???W????A(W?ŐW?$?????p?z??PH??H?? H??H????I??I??ā|D??(?$???}????Q?ġ|Y4???$?ā|D ??}????Q??!|YL ?|?$?ā|D@??}????Q??!|Yd@?|?$?ā|D`??}????Q?ġ|Yd`ŢX??????)?$???X???y???)?$p??X???y????)?$`??X???}?ŪX???z???)?$??X???y???)?$P??X???y????)?$@??X?ŲX???z???)?$0??X???y???)?$ ??X???y????)?$??X??c}???X??????)?$???X???y???)?$???X???)?$??y????)?$???X?ŚX???z???)?$???X???y???)?$???X???y????)?$???X??c}???X??????)?$???X???y???)?$???X???y????)?$p??X???X??????)?$`??X???y???)?$P??X???y????)?$@??X???}?łX???z???)?$0??X???y???)?$ ??X???y????)?$??X??????H??H?????$H?H??`?zDāz\āzL??b]???]???b_????$???_?āzL??]???L$|??_?āz|??]???_?āzL??]????$???_?āzL??]???_??zlŒ]??zl$xŒ_??zl Œ]??zl$tŒ_??zl$Œ]??zl$pŒ_??zl(Œ]??zl$lŒ_??zl,Œ]??zl$hŒ_??zl0Œ]??zl$dŒ_??zl4Œ]??zl$`Œ_??zl8Œ]??zl$\Œ_??zl<Œ]??zl$XŒ_??zl@Œ]??zl$TŒ_??zlDŒ]??zl$PŒ_??zlHŒ]??zl$LŒ_??zlLŒ]??zl$HŒ_??zlPŒ]??zl$DŒ_??zlTŒ]??zl$@Œ_??zlXŒ]??zl$<Œ_??zl\Œ]??zl$8Œ_??zl`Œ]??zl$4Œ_??zldŒ]??zl$0Œ_??zlhŒ]??zl$,Œ_??zllŒ]??zl$(Œ_??zlpŒ]??zl$$Œ_??zltŒ]??zl$ Œ_??zlxŒ]??zl$Œ_??zl|Œ]??_??x)??"]??Ax.????????l$??(?$@?z?$??:Y???)?$ ?A|(??x(???(?$???X????$??ba????(?$p??X??bI??$???(?$`??X??bI?D$|ŪX??x)?$????$??BA????(?$??X????$??bA????(?$P??X??z?$??b????X??bQ?D$xŲX??|)?$?b1?D$t??(?$0??X??bq?D$p??(?$ ??X??bq?D$l??(?$??X??bq?D$h??(?$??X??bq?D$d??(?$???X??bq?D$`??(?$???X??bq?D$\??(?$???X??bq?D$XŢX??b!?D$T??(?$???X??bq?D$P??(?$???X??bq?D$L??(?$???X??bq?D$H??X???)?$??bi?D$D??(?$???X??bq?D$@??(?$???X??bq?D$D?|3?D?3E??A??D?F?M?G?DA??A??0E?A??@??@??0D?E???AW???*???Y???x.?u?x???@???AW?Ś*???rY???}???tX\????}???^???}????X???}%f???}X-????T???M9???}X5S???E=???}9??B9???A???Ab???ּH??tX|????^???X???T???E9???E=???}9??B9???A??AtXL????Ab??4^???ּPżX???T???E9???E=???}9??B9???A???Ab???ּX??tXL???^???X???T???u9???u=???}9???i???q???b???֌`?G???L??L??L??L???????(?؃?H??rH??H????H???u?H??t
DH??u?H???H?H;?$`uH??$?H??H?e?[A\A]A^A_]??w???w????UH??AWAVAUATSH???H??H?t$hH?L?H?H??$?H???H??HI?H??$?H???H??$?H?D$hH?HH?P0L?@1?H?D$p??}T???)?$???y~???)?$???y????)?$?b}^???}=???)?$@??}k???)?$ ??y
???)?$?L????z%??|)?$`?Hfffff.?H??H?t$pH??H???H?°I???H??H?t$pH;?$??H??L??$?E1???W??Uf???W???|E??W?ŠW?$?ġz??`ġz??@??a!???(?$??_?I??I?? H??I?????)?$M??I??M??I??ġz'ġzL'?!z|'?!zt'?!zl'?!z\'?!zT'?!zL'?!zD' ġz|'$ġzt'(ġzl',ġzd'0ġz\'4ġzT'8???$?ġzT'fDA?????*?D?????????BA??ŊY??BA????A??H??H?? tH????Az\??A*Y??A
X??Ay~?A????A??@|A?@A??@}?A?@????2Y???Y???AW???x.?????ŰW?$??2Y?$??bY???2^???Y???9?|$P??^???R^?Ŋ???c1J?p??$???*??
]???)????R\$??Y???	?D$??$???*???)????R\l$??Y???y?l$L??$???*???)????z\D$??Y???$???*???Q?D$H??)????B\l$??$???*???Y???)????B\|$??y?l$D??Y???Q?D$@??$???*???)????R\l$??Y???y?l$<??$???*???)????z\D$??Y???$???*???Q?D$8??)????B\l$??$???*???Y???)????B\|$ ??y?l$4??Y???Q?D$0??$???*???)????R\l$$??Y???y?l$,??$???*???)????z\D$(??Y???$???*???Q?D$(??)????B\l$,??$???*???Y???)????B\|$0??y?l$$??Y???Q?D$ ??$???*???)????R\l$4??Y???y?l$??$???*???)????z\D$8??Y???$???*???Q?D$??)????B\l$<??$???*???Y???)????B\|$@??y?l$??Y???Q?D$??$???*???)????R\l$D??Y???y?l$??$???*???)????z\D$H??Y???$???*???Q?D$??)????B\l$L??$???*???Y???)????B\|$P??y??$???Y???Q??$???$???*???)????R\l$T??Y???y??$???$???*???)????z\D$X??Y???$???*???Q??$???)????B\l$\??$???*???Y???)????B\|$`??y??$???Y???Q??$???$???*???)????R\l$d??Y???y??$???$???*???)????z\D$h??Y???$???*???Q??$???)????B\l$l??$???*???Y???)????B\|$p??y??$???Y???Q??$???$???*???)????R\l$t??Y???i????$???*???)????z\D$x??Y???$???*???I????)????z\D$|??Y???????.??W??????$???|M?x)???(??Ax(??6???fD??W???????(?$??^???T?LiT$p?L?L$hK?H????y?P????P???$@??u?$`??Y??|(?$`ŬX???(?$@??T???o?$ ??u;???}9???q+???g???(?$P??m?$p??Y?ŬX???T???};???}9???y+???g???q?????????āy?L??r???ۄ$???????y΂āy~D??
c???^???Y???y???~?fC??????^???Y???y???~?fC?t????z?D??A?E1??A0W??yoe??I??I?? I????I??wF?l!?B?!A???$??9fDB?D!?B?4!A??A??E?l$?F?,+A??A??0E?@????$0@?A??Ś*???Y???x.?u{???Ś*?ājY???}???}?ġlX\????^?ŬX???}%???}X%H???T???U9???}X-???M=???}9???A???I???b?ġyִ???I??I??Lm?I??H?u?H?E?w%H?E?F?4B?tA???@????Lfff.?L?U?C?4
C?D
??@??A?????E?A???G?4A??A??0A???@??@??0@?Lm?L??H??H??wL?E?A?8$?C?|@????F?H?]?E?TE??A???????D??????$0D?A???<;H?]?@??@??0D?E????*?@???*???Y??:Y?H???H;M?A??H9???L9?A??I9?A??A???
E ???B}???}??Ayn??Byx??Az~?)???B}1?H?]??z~?A!???!t??B}1??%???A%???A|[??BE???|?Az~S?)???B}1??z~[?A!???!t??B}1??%???A%???A|[??BE???|Q ?Az~S?)???B}1??z~[?A!???!t??B}1??%???A%???A|[??BE???|Q@?Az~S?)???B}1??z~[?A!???1t??B}1??5???A5???A|[??BE???|I`?yf?E1?H??f.?G?3A??E1?F?|2?A??A??E	??A*??BA??G?D3A??E1?F?<2?zA??A??E	??A*??BA???zNH??I??I?? u?H?]???Ś*?@???*???Y??:Y?H??H;u?@??H9?A??L9???I9???D??u ??????1??A???1?D?d?@????	??*??BA??A?L??1?D?$?z@????	??z*??BA???zNH??H??H?? u?H???w???[A\A]A^A_]??wÐUH??]?????fDUH??AWAVAUATSH???H??M??I??H??I??I??H??H?H??$`?
H???z??H??$?L??$?M???TH????I???M??II?I???DH??I?D$I?T$1?H??$??A W???y#r??)?$?H??$?L??$?H??$??g@L??$?L??$?O?l?H??$?I?H??$?H??H??$?H?H??$?H?H??H??H??$?H??H??$?H9???H??$?H??H??$?I??1?L??$??4ff.?I??H??I?ǰH?ðH??$?H9??G?????W??fffff.???zL????zT????q????i????zD????y????zL????q????zD????y????zL????q????zT????i????zD???y??H??H=u???X???Y?uH??$?????H??$?H????}???)?$?L??H??$`1???f???W????A(W?ŐW?$??????z???H??H?? H??H????I??I??ā|D??(?$???}????Q?ġ|Y4???$Pā|D ??}????Q??!|YL ?|?$pā|D@??}????Q??!|Yd@?|?$?ā|D`??}????Q?ġ|Yd`ŢX??????)?$???X???y???)?$p??X???y????)?$`??X???}?ŪX???z???)?$??X???y???)?$P??X???y????)?$@??X?ŲX???z???)?$0??X???y???)?$ ??X???y????)?$??X??c}???X??????)?$???X???y???)?$???X???)?$??y????)?$???X?ŚX???z???)?$???X???y???)?$???X???y????)?$???X??c}???X??????)?$???X???y???)?$???X???y????)?$p??X???X??????)?$`??X???y???)?$P??X???y????)?$@??X???}?łX???z???)?$0??X???y???)?$ ??X???y????)?$??X??????H??H?????$?H?H??`?zDāz\āzL??b]???]???b_???L$p??_?āzL??]???L$l??_?āz|??]???_?āzL??]???L$t??_?āzL??]???_??zlŒ]??zl$hŒ_??zl Œ]??zl$dŒ_??zl$Œ]??zl$`Œ_??zl(Œ]??zl$\Œ_??zl,Œ]??zl$XŒ_??zl0Œ]??zl$TŒ_??zl4Œ]??zl$PŒ_??zl8Œ]??zl$LŒ_??zl<Œ]??zl$HŒ_??zl@Œ]??zl$DŒ_??zlDŒ]??zl$@Œ_??zlHŒ]??zl$<Œ_??zlLŒ]??zl$8Œ_??zlPŒ]??zl$4Œ_??zlTŒ]??zl$0Œ_??zlXŒ]??zl$,Œ_??zl\Œ]??zl$(Œ_??zl`Œ]??zl$$Œ_??zldŒ]??zl$ Œ_??zlhŒ]??zl$Œ_??zllŒ]??zl$Œ_??zlpŒ]??zl$Œ_??zltŒ]??zl$Œ_??zlxŒ]??zl$Œ_??zl|Œ]??_??x)??"]??Ax.????????l$??(?$@?z?$??:Y???)?$ ?A|(??x(???(?$???X????$??ba????(?$p??X??bI?D$p??(?$`??X??bI?D$lŪX??x)?$???|$|?BA????(?$??X???|$t?bA????(?$P??X??zd$x?b????X??bQ?D$hŲX??|)?$?b1?D$d??(?$0??X??bq?D$`??(?$ ??X??bq?D$\??(?$??X??bq?D$X??(?$??X??bq?D$T??(?$???X??bq?D$P??(?$???X??bq?D$L??(?$???X??bq?D$HŢX??b!?D$D??(?$???X??bq?D$@??(?$???X??bq?D$@A?|7?E?7E??A??D?F?M?G?DA??A??0E?A??@??@??0D?E???AW???*???Y???x.?u?w???@???AW?Ś*???rY???}???tX\????}???^???}v_??X???}%Ud??}X-xd??T???M9???}X5Bd??E=???}9??B9???A???Ab???ּH??tX|????^???X???T???E9???E=???}9??B9???A??AtXL????Ab??4^???ּPżX???T???E9???E=???}9??B9???A???Ab???ּX??tXL???^???X???T???u9???u=???}9???i???q???b???֌`?F???fD??W???|D1?H??$??f???ʈT H??H?? t.??`??r?????????r̀?????@1??fff.???ʈT@H??H?? t.?????r?????????r̀?????@1??fff.???ʈT`H??H?? t.?????r????????r̀??? ??@1??%fff.???ʈ??H??H?? ??????? ??r????@??@??rƀ?????L??L??L??L????????.?؃?H??rH??H????H???u?H??t
DH??u?H?4?H?H;?$`uH??$?H??H?e?[A\A]A^A_]??w???w?U?UH??AWAVAUATSH??H??H?H?E?H???H??HI?H?????H???H?????H???H?????1?H??H?????y
?[??yX?[???p???H????????)??????ffffff.???o???????o???????o??????o?0?????q???o=?k????????????H????????$??q???????????????d ??q???o57k?????}okkŽ????}????q??}o
ukŵ???}o?kŭ????u???}o?kť????????????????q??}o%?kŝ????????????o?P?????o?p?????oU???o]???q???????????????d@??q???????????????d`??q?????Ž????}????q?ŵ??ŭ????u??ť????????????????q?ŝ????????????(?????H??H??H???H??H??????H??H??H???H;?????
H??????H??????H??????E1???W???W?H???????u@J?-????H???W???)??W?ġz????????T?p??????D?????_???????(?`?????aJ?I??H??????H??????@??(?I????(??????L??H??????W???.???)?`??????D???u	??W????T?M??I????\??)?P?????T???)??????)?@?????_???\??)?0?????T??????????)?`?????_???\??)?P?????T??????????)???????_???\??)?p?????T??????????)???????_???\??)???????T??????????)???????_???\??)???????T????`?????)???????_???\??)???????T????l?????)???????_???\ ??)???????T????p?????)???????_???\$??)???????T????t?????)??????_???\(??)???????T????x?????)? ?????_???\,??)??????T????|?????_???l0?PT?Ų_??zD4?8T??_??z\8??(?ŠT??Ar_??zt<ňT??Aj_????\??x.??j????z?=XŀT???(?????b½@?????yJ?P????????????b½`?????yJ?0????????????b½??????yJ?P????????????b½??????yJ?p????????????b½??????yJ?????????`????b½??????yJ?????????l????b½??????yJ?????????p????b½??????yJ?????????t????b½?????yJ?????????x????? ?????yJ?????0???|?????????yJ????0??Z????yJ?0??B????yJ?0Ū????yJ?Œ????yJ???F[??)?P?????^???W?1???W??zV???yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y??????yxw???}!???[???Y???}!???[???Y???????~?8????????z~G???1q??1??ű???????z~?X????1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY???~ ??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y???? ??yxw???}!???[???Y???}!???[???Y???????~?@????????z~G???1q??1??ű???????z~?`????1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY???~@??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y????@??yxw???}!???[???Y???}!???[???Y???????~?H????????z~G???1q??1??ű???????z~?h????1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY???~`??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y????`??yxw???}!???[???Y???}!???[???Y???????~?p????????z~G???1q??1??ű???????z~O??1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY??????yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y??????yxw???}!???[???Y???}!???[???Y???????~?x????????z~G???1q??1??ű???????z~O??1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY???? ??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y???? ??yxw???}!???[???Y???}!???[???Y???????~w??????z~G???1q??1??ű???????z~O??1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY????@??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y????@??yxw???}!???[???Y???}!???[???Y???????~w??????z~G???1q??1??ű???????z~O??1????!q??!???A!???)????q??????9??š????????1q??1????9q??9???A9???9???byxO??B}!??A|[??4Y???}!???[?ŴY????`??yx???}!???[???Y??B}!??A|[?ŴY??byxO???????}!???[???Y???}!???[???Y????`??yxw???}!???[???Y???}!???[???Y?????H???H??H???O???]??w?f.?UH??]?????fDUH??AWAVAUATSH??M??H??I??I??I??H?ƀH?H?EпH???B???H??????L??????M??L??8??????H??????M?????H??????H???H??HI?H=????H??I???1?H????????y?9??)??????y?9??)?0???H???????G@H??????M????x.??/H????????W???)????W????@??W???.???)??????

??W???(?????
f???W???.?u{??^???Y????@?????????Jffff.?L??????H???????z??H????????(??????????????
L????????????t??AW?Ś*???
ژ??q?i???y
H???W???^?`????????????????Y?ŪX???~???????@|?@?????}????????????????Y?ŪX???~?????@|?@?????}????????????????Y?ŪX???~ǁ?????@|?@?????}????????????????? ?????Y?ŪX???~ǁ?????@|?@?????}???????????0?????Y?ŪX???y~?A????A??@|A?@A?????}A??????z????z???????????z????z????z????????????????@?????Y?ŪX???y~?A????A??@|A?@A?????}A??????z?????????P?????Y?ŪX???y~?A????A??@|A?@A?????}A?????Az?????????`?????Y?ŪX???y~?A????A??@|A?@A?????}A?????Az?????????p?????Y?ŪX???~Á?????@|?@?????}?????Az???????????????Y?ŪX???y~?A????A??@|A?@H??????A?????}A?????Az???????????????Y?ŪX???~???????@|?@?????}?????Az?????????`?????Y?ŪX???y~?A????A??@|A?@?????A?????}A?????Az?????????P?????Y?ŪX???~?%??=@|?@=???}?????Az?????????@?????Y?ŪX???y~?A????A??@|A?@A??A?????}A????H?????????????????????????????Y?ŪX???~?????@|?@L???????????}??????????L????????z????? ????????????????Y?ŪX???~Ɓ?????@|?@?z?p????z?`????z?P????z?@????z?0????z??????z???????(???)?p?????)?????L??????A????A??????????????????????A????A????A????A????????A????????A??????H???????????????????}?????Ar*??Ar*??r*??????r*??????Ar*???r*?????????Ar*??Ar*???*??????????r*??????????*??Aj*???*???*?źY???W??z???????9????????????????ŲY??z???????1??ŪY??z???????)???????????(?ŢY??z???????!??ŚY??????z??????????z??????z??????:Y??????z???????2Y??z???????	???z??????z???????*Y??z??????????z?????ŊY?0?????	??łY?@?????????Y?P?????q??ŒY?`?????????Y?p?????i????W???*???Y???????y????Y? ?????Y?݁????A W??"*?H????????????? ???ŢY??z???????!???A W??????????x.??"????????????Y??????????????a????Y?????????????a???????????Y?????????????a????Y? ????????????a???????????Y?0????????????a??źY?@????ba??ŲY?P????????????a??ŪY?`????????????a?????0?????Y?p????ba?????@?????Y??????Ba?????P?????Y???????a?????`?????Y?`????ba?????p?????Y?P?????q???????????Y?@?????q????? ?????Y??????q????? ?????Y??????????????y????Y??z?????ŢY?@?????.?L??????H???????z?Az??:Y??2X??Ay~?A????A??@|A?@A?????}?A?????@??.-<@?B????AY??ZY??Ax.??.?????}???lY??}%????}5~D??X???T??b}X?D??}9??b}X
?D??}=???}9??yo=?E??a???y???b??yo5*Fʼn?????$???lYB ??X???T???}9???}=???}9???a???y???b?ʼn????lYZ@??X???T???e9???e=???}9??B)???a???ab???lYR`ʼn????X???T???m9???m=???}9???Y???i???b?ʼn???^???Y?????I??H??I??L??L???i????H???l???L?D$H?D$H?
˄H?	H;?$???H?D$I??H?e?[A\A]A^A_]??w?D????I??rL??H???fff.?H???u?H??t?DH??u??D????I??rL??H???fDH???u?H???o????H??u??d?????w?6fffff.?UH??AWAVAUATSH???H??M??H??I??I??H???H?H??$?M??H?T$`??H???_???H?|$`H?D$XH???!H?KH??HI??CH???hH?????*???D$h?ڃ?H??H???1???%=H??$??$f?H??$?M?$?L|$XH??H?|$`H9???H??sE1???W??fff.???W?E1?f?āz?āzT???q????i??āzD???y??āzL???q??āzD???y??āzL???q??āzT???i??āzD???y??I??L9?u??A(W?H??t!O??E1??āz???q??I??L9?u???^D$h??}???)?$M??E1??fffff.???(?$@??(?$PD??$BD??$R???$C???$S???$G???$W?A W???!???y?K???*???y????r\Jx?rY???$???*??bA????y????r\J|??Y???I???x.??{??????$ ??)?$@?x(??x(??Ax(??W???I??H??I??L??L???????H???5???H?|$`H?D$XH??rH?H;?$??}H?D$XH??H?e?[A\A]A^A_]??wÉ???H??rH??H???fDH???u?H??t?DH??u?랉???H??rH??H????H???u?H???v????H??u??k?????w?$fffff.?UH??AWAVAUATSH???H???M??H??I??I??H??qH?H??$?M??H?T$??
?H???/???L?D$H?$M????
H?KH??HI??H??H???6???*???D$H???ƒ?H??H???1???y
?*?z-?*??)?$??fDM?$?L<$H??L?D$L9???
H??sE1???W??}D??W?E1?f?āz?āz\???i????a??āzD???y??āzT???i??āzD???y??āzT???i??āz\???a??āzD???y??I??L9?u?H??t&O??E1?fff.?āz???i??I??L9?u???^D$??}???)?$M??E1??_fffff.???%8???=8???l?????????$ ??)W*??y?O??O??M?ăy??~?$ ??~?$0??o-U/??????q???o5T/????????āy?\??q???o=X/??????}1???}G?:??q???????}1???mG?:??????~?$(??~?$8??????q?????????āy?d??q???????}1???mG?:??q???????}1???eG?:??????????}9???????p????????p?U????āy~DI??I??I9???(?$??????M??I??ā|??(?$??}????Q?ā|YDā|T ??m????Q????$@ālYD ā|T@??m????Q????$`ālYD@ā|T`??m????Q????$?ālYD`???$?āz$??W???.?u??W??f.???T?āzT??)?$???T???)?$???)?$???_?āzT??)?$???T???D$|??)?$???_?āzT??)?$???T???D$x??)?$???_?āzT??)?$???T???D$t??)?$`??_?āzT??)?$p??T???D$p??)?$@??_?āzT??)?$P??T???D$l??)?$ ??_?āzT??)?$0??T???D$h??)?$??_?āzT ??)?$??T???D$d??)?$???_?āzT$??)?$???T???D$`??)?$???_?āzT(??)?$???T???D$\??)?$???_?āzT,??)?$???T???D$X??)?$???_?āzT0??)?$???T???D$T??)?$`??_?āzT4??)?$p??T???D$P??)?$@??_?āzT8??)?$P??T???D$L??)?$ ??_?āzT?C??D??D?@????Ų*???Y???~?D?@????Ų*???Y??D?@?????2*???~?D?@????Ų*??:Y??zF??Y???~?D?@????Ų*???Y???~?D?@????Ų*???Y??D?@?????2*???~?D?@????Ų*??:Y??zF??Y???~ ?D	?@????Ų*???Y???~$?D
?@????Ų*???Y??D?@?????2*???~(?D?@????Ų*??:Y??zF,??Y???~0?D
?@????Ų*???Y???~4?D?@????Ų*???Y??D?@?????2*???~8?D?@????Ų*??:Y??zF???]??w?fff.?UH??H???H??HI?H????H??H?O1??f?Ģ}!LĢ}!TĢ}!\??}Ģ}!d??[???[???[???[???Y???Y???Y???Y?????V ??^@Ģ}!L$Ģ}!T,Ģ}!\4??f`Ģ}!d??D$ġz~D1B??q???`????????*????2???D$PA?E1?E1??A???A??f?ġ~o0?}???}L$ ??q?	??q?
??????e??u???Ay???Ay??ġ|???)?$???y???A?~?E??āz~?āz~???l???z~??z~?ũl???u8???y???Ay???Ay???Ay????z~??z~?ũl??z~??z~??A9l???=8??C}9???y???Ay???Ay??D?l$0?Az~??z~??A1l??z~??z~??A)l??C58??t$>D?D$H??$???$?f?>??W???)?$ ??)?$H??$H?D>BH??$?????H??$?H??H??$???W?1????L????T????q????i????D????y????L????q???????y????L???q????T???i????D???y??H??H??u???Y[H??$?H??H??$???y???)?$???W?E1??5f?BDŽ????W???)?$???D$8I??I???D??D$8L??$?L??H??L??$???{\??(???(?$???a????Q?H??$????pY???D??L ??d8??xl??(???Q????Q??hYd??{T??(???i????Q???Y??AxD ?x)???9????Q??pY??x)D$ ??9?L0??q????Q??pYD(??{L8??q????Q???Y???y???)?$???%???{???]???????Q???)?$ ???$@??y???)?$@?|)?$???5??x)?$0??{???)?$P??]???????Q????$`???????u???u???????W?$??????}???y???y???y???y???y?A?E(?A????y?A??E??E??EE?E??A????y?A??E??ED?E??A????y?A??E??ED?E??A????A??AD?A??A?? ??A??Dщр?@@????Dʉʀʀ@????]J??A|T ??D????$??AzL(??P??AzD,??z|0??zt4??zd8??zL??W???.??D$??A????F???$???$?????$?????$???	?	???y0????
?F??p?U??????r???????~?	?	???A?4????M??W???.??T$??A????F?K?	??		?f??T??$???n?$???y ???y0???i????
?E??$???
??$?????$???	?	???p?U??????r???????~?	?	???A?4???????_?????		?H?H??f????.??kġz?????L$8??_?A??A?I??I???N????H?H??$?H)??H???b???$`??D$ ???$d???$????$h??D$???$l???$ ???$p???$????$t???$x??yp<??W?$??z?$??8W??xW?$??xW?$??xW?$?xW?$?xW?$ ?xW?$0?z?$|H??$H)ʹ????1????@D?2L??H???0H??1??*2L??H???0H??1??2L??H???0H??1??2L??H???0H??1???1I??A?6H??1???1?
?&2H?=QH????51??i???H?=?PH?NH?
?S??51???w?E???H?=?PH?*H?
?S?s41???w?!???H?=?PH?H?
?S?d41???w?????H?=~PH??H?
?R?/51???w?ٹ??H?=ZPH??H?
zR?051???w赹??H?=6PH??H?
?R?151???w葹??H?=PH?vH?
?P??51??p?????w?/H?=?OH?MH?
?Q?.51??G????UH??AWAVAUATSH???H??A????t
A???~1?A????H?@H?
	?
H????~oN??????}9???g???????????????q???????????q???????}9???g???????????q???}9???g???????????`???h???`???h???a???i???a???i???z\?0??z|? ??zl???z4?H??H9??Y???L9??A??uH???D??????oT<??o
;??o>??o?=fff.???yo$F??Y???????????????q???????????`???q???I???????????q???g???????????`???a???i???zd???z4?H??H9?u?L9?tg??o?=??o
?=fffff.?A?N???@??????@??????n???i ???i ?????i ???????????y~?H??I9?u?L?;?@??w?-H??H?D$8H?
??
H?\??@H?߾??-I??1???v??A???׉????????~??????????z??????????????????n?????	???????q???????q???q?	??q???~?	?????	???A??H??I9?u?L?l$0C?D-Hc?H??L?D$(??,L?D$(I??E??A???1??yo?9?yo%G<?yo-O<?b}X5V3?yo=N<1?1??}t$@?!f?D???L$ ??ȋ|$H??H???A?:?fff.?H??I9??????A?t?9?~?9?????????????Hc?H???w?N*L?\$(H??H?D$8H?
I?
H?T$ H?T?H?D$0??H?D$01??D$?#?D??H?L$ f?AH??H???LA?L??I??I??L?u?H?M?ff.?L??L??H??H???OH?M?M?l?M?I??u?L?}?L??H??[A\A]A^A_]?H?=?EH???H?
kF??71??????fDUH??AWAVAUATSH???H???H??$?H?|$PH??rH?H??$?L?®
M???AL?
??
M???RL?%??
M???c???|H???H??HI?H?D$HH????H?|$HH?N??W???y???D$(H?D$PH?PL?p??}?+??)?$ ??W??yo
?11??D??^80??Y
?0??q
,??y?H?t$x??y??
+??^???}???}
k+??}??$???}?*??Y???}
+??X???}
?/??}X!0??T???}9???}X
?/??}=???r????$????$???(?$@??(?$`H?L$p??I ????(?$???A@H?T$hL?t$`H?D$XH??bH??bH??H??I??H;D$H?*H?L$pH?t$xH???D$(f???W???)?$???)?$`??)?$@HDŽ$?H??H??H?L$XH??
HL$PH??$?1???W?@??L????T????q????i????D????y????L????q????D????y????L????q????T????i???????y??H??H??u?H?T$h??X???Y?.H??$?H??H??$???}???)?$??W?L?t$`1??@fff.?H?D$ DŽ????W???)?$`??L$H??I??H????H?D$ H??H??$???L$??H??$??????(?$??}????Q???L? ??u????Q?H??$???Y???YL? ???$???$ ??D?@??}????Q???L?`??u????Q???YD?@??YL?`???$@???$`???$0???$4??H??$??????Y????$??D? ??Y???)?$ ??D?0??Y????$0??D?4??Y????$4??T?T??Y????$T??T?t??Y????$t??T?|??Y????$|??Q?$??}???u?$ ???yؐ??}???u????Q????$????$???(
?C??u???}?$T??}? ???$X??}???????Q???Q?$`???$???$ H??$?E1??fD@??@?8I??H??I?? ?ā{T??āyL??ā{????????e
???e???????W?$ ??????}???y??(???y???????@??Eʉʀ???y???@??Dщр???y???@??Dʉʀ???y???@??Dщр? ??y???@??Dʉʀ?@??y???@??Dщрɀ??]J?0??y???@??D?ġ|?????P˄??????ġ{????Y???Y????1???.???ġrY????]???Y???.ӺG????ġZY????]???Y???.ӺG???y?ġZY????]???Y???.ӺG???y??ġrY????]???Y???.ѺG?ġzY????]???Y???.ʺG????ġzY????]???Y???.ȺG?J????????y
%??W?????????@0??????fD???$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???_?$???@)??.??n????AW???^u(??)D$0??W???D$?????H??$???T$,?fff.???????nT$,???A(W?Ū*???
?(??q?(??^???
)#?r^???y?E1???)?$??gf??x(߉???yn???y ?????+??q???????q???y?+??~?<@??(???(?$???o?$???(?$?I??I???;L??H???x(???by?"?x)???a????y=t"??Y???y5?"??X??by-r'ŐT??byX=?'??yXd'??y9???y=???y?ġy~??@??~???y?@??????y?@????	???y?????		?	???Ic?BƄ?H???6???BƄ?H?M??I)?A?R?H????	???$??y?$??x)?$???)?$???(??x)?J?H??$PDŽ$X??H????H??$@DŽ$H`???(?$P??D$\H???H?L$1?1?L??$?/DH??$H??H??$HH??$?H9??????H??$%???H?L$xH??Hk?2H?T$PH?4
H??$??t$\f?4
??W???D
H?t
"H??$???W???D
"H??$????H?T$L?,???W?1?fD??L????T????q????i????D????y????L????q???????y????L???q????T???i????D???y??H??H??u???X???Y??H?D$pH?4???}???)?$ ??W???D$1?H??$??,DŽ? ??(??)?$?H??H????H??H????|D??)?$ ??(?$ ??}????Q???Y?x(?$`??TD?Az|?Azd?AzT?AzD??zt??zT??)T$0??|T ??m????Q????$???YL ??zT ?Azl$?Az\(?AzL,??z|0??zl4??zd8??)d$`???$???|L@??u????Q???YL@???$???|L`??u????Q???YL`???$??y????_??x)?$???T???_??x)?$???T???_??x)?$??(T???_??x)?$???8T???_???)?$?ňT???_?ňTL$0??_???)?$?ňT???_??x)?$???T???_??x)?$??? T???_??x)?$??0T???_???)?$?ňT???_???)?$?ňT???_?ňTL$`??_???zLH??$pDŽ$x??H????H??$`DŽ$h`?H???H??$?L?T$ 1?1?H??$??D??Y???y???~????????????????????????
????q???q?H??$???~???????H?L$@H?|$(H??H??I??8H??H9??????H??H?L$@????I??I??I??H??
H?$?Hk?8H?t$ L?L??$???W?????W???D L?L0L??$?H?D0H?|$(????L????W?1?f.???L????T????q????i????D????y????L????q???????y????L???q????T???i????D???y??H??H??u???X???Y(?I??H??$???)?$??}???)?$ ??W???D$E1?L?T$HH?L$@H?|$(L??$?L??$??>ffffff.?BDŽ? ??(|???)?$??A(W?I??I????M??I??M?M?????|??(?$ ??}????Q?L??H??H??$???Y???z>??zv??zn??zf??z^??zV??)T$P??zV??)T$p??zV??)T$`???$??AxF ?x)???9????Q???YD? ?Az^$?AzV(?AzN,??)?$??D?0?A{f0?Ax(??b???AxQ?ŐY????$?Azn8?x)???(?$??????Q???YD?8???$?Azv??zv??zn??zf??z^??zN??)L$P??zN??)L$p??zN??)L$`???$??AxF ??8Y??Az^$?AzV(?AzN,??)?$?A{f0??Y????$?Azn8??Y????$?Azv??z=???z
??? fff.?H??H??H??H????I??E1?I????I??I??I??I??t???W?H??????W?E1???W???W??WHc???y?????Y5??????????y??Az??c9n???9????y???A????Q????Q??I??L9?tqB???T??|???y?????Y-???y?????Az??c9
???A???z
????A?????9=???y???I????Q??I??L9?u?L9?r?????W???W???W?L9???E1??RfDHc???y???ŠY?????????y??Az??C9???9????y???A????Q????Q??I??M9?taB?ރ?|???y???ňY???y?????Az??C9???A???z
????A????9=k???y???I????Q??I??M9?u?I????M???a@Hc???y?????Y5{?????????y??Az??c9>???9????y???A????5????Q????Q??I??I??szB???\??|???y?????Y-????y?????Az??c9
????A???z
!???A????9=????y???I????5???Q??I??I??r??????x.?v$??Y???Y???.?v??^???)D$??Y?E1?D?Љ???y???x.?v'??Y???Y???.?v??^???)D$??Y?A?D?Љ???x.?v+?????Y???Y???.?v??^???)D$??Y?A?D?Љ???x.????????y????Y???Y???.????????^???)D$??Y?A?D?Љ??s?????????E????
???x(D$???Ή????s1??V???1?@Lc??TBƄ?Lc??\BƄ?Lc??dBƄ?Lc??lBƄ?H??H9?u?H??t#H??$TH?4?1?Lc?BƄ?H??H9?u?9???Hc?Hc?A??A)?H??H??H?I??t*?I??E1?Hc?Lc??TBƄ?I?Ƀ?M9?u?L)?H??rf?6H)?f?Hc?Hc??TƄ4??qHc?Hc??TƄ4??qHc?Hc??TƄ4??qHc?Hc??TƄ4???H???u???L??$?5??H???H??ff.?H?Hc??TƄ4?H?ƒ???H??u??Ax.???$?L??$L??$??@?@(?@??$???n?$???o
???????~?$???~?$???o???????֌$??*?$???$??*?$???$??*?$???$???y&??8W?E??teA????A??Yffffff.???n?$???$???$???$?A??L??$`M??H??$pLD?A??|i?oA?A??L??$`M??H??$pLD???~???y???y????:1?A??L??$pH??$`LD?????~???y???y?A?ʼn?L??$p??}"???}2???u?????G?????
????@????	?	???}9???????p????????~???	?	???Ic???H??ySH??H?H??$?H)?H?t$0L??H??$??x)?M??L??$??x)D$??w?cm?x(D$L??$??A(W҉???$???$???	???$?????$???	?	???$?????$???
	???$???	?	???$???	???Ic?H??x
?????OH?H??$?H)lj?H?t$0H??$H??$?x)?M??L??$??x)D$??w?l???x(D$?A(W???H?T$0??y ???v???????q???????q???~?H????z???Y?$???z??a??????H????z$???Y?$???a????Q?F??Q??????H????z???Y?$???Y?F????H????z,???Y?$???I?F??Y????I??????H????z???Y?$???Y?F????H????z,???Y?$???Y????I?F??I??????H????z???Y?$???Y?F????H????z???Y?$???Q?F??Y??????y ???Q????????q???????q???~?H????z???Y?$??Y?F ????H????z,???Y?$??I?F$??Y????I??????H????z???Y?$??Y?F(????H????z,???Y?$??Y????I?F,??I??????H????z???Y?$??Y?F0????H????z,???Y?$??I?F4??Y????I??????H????z???Y?$??Y?F8????H????z???Y?$??Y????Q?FH?? ???H??H???[A\A]A^A_]?H?=??H?a?H?
	??H;1??[G??製fDUH??AWAVAUATSH??HL??8???L??0???H??H??@?????~???Ѓ???s??W?1??|??W???????W?1?f.??????L???y????q????L???q????D???y????L???q????D???y????L???q????T???i??H??H9?u?H??tH??1?D?????y??H??H9?u???U?H?u?D?}0L?u ????}?H???M?E???Eԉ????Mă? ????*?H?M(H?}??
o???^???Y]?D???؉E?DIȋEă??C?H?U?1???y-?????????H?5
e??W???)? ?????W???M??OH?U?z???y
??ŨT???u???????_???(? ?????IJ?@??)? ?????M?H??H;E???
I??I??I??I??L]?H?ɋU0????z??q????Q?ġrY?????zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK??q????Q?ġrYL???O??zK ??q????Q?ġrYL? ??O ??zK$??q????Q?ġrYL?$??O$??zK(??q????Q?ġrYL?(??O(??zK,??q????Q?ġrYL?,??O,??zK0??q????Q?ġrYL?0??O0??zK4??q????Q?ġrYL?4??O4??zK8??q????Q?ġrYL?8??O8??zKH??(???H??H???[A\A]A^A_]?H?=??H?+|H?
???r;1??%/???m?UH??AWAVAUATSH??H???H?H?EЄ???L???H??LI?H??|fH??I??I??L??P???L??0????H?KL?CL?KH???L??H??jjH??????PAUAT?@???H??0H?ÈI??I??u?H?2?H?H;E?u3H?Ĩ[A\A]A^A_]?H?=??H?<{H?
???r;1??6.???~??UH??AWAVAUATSH??H???H?H?EЄ???L???H??LI?H??|fH??I??I??L??P???L??0????H?KL?CL?KH???L??H??jjH??????PAUAT?P???H??0H?ÈI??I??u?H?B?H?H;E?u3H?Ĩ[A\A]A^A_]?H?=??H?LzH?
???r;1??F-??莣?UH??AWAVAUATSH???H??H?t$xH?|$@H???H?H??$?????H???H??HI?H??H???)Hk?RH?D$pH???H??$H?D$@H??H??$?H??H??$???W???y???)?$???}B???)?$?1?H??$L??$ H??$??Zf?H??$?H?D$@H??H?D$@H?D$xHD$pH?D$xH??$H??H??$?H?$?H??$H9???H??$H?,
H???(L?%?+
M???<H??+
H???PH??$?H???H?D$H??(?$????$?1?1??-fffff.?H??H??$HH;?$?!???H??$%???H??$?H??Hk?RH?T$xL?
??W???
??D
2??D
 ??$?f?4
????H?T$@H?4???W?1????L????T????q????i????D????y????L????q???????y????L???q????T???i????D???y??H??H??u???X???Y?I??H??$8??}???)?$???W???D$E1?H??$0L??$?H??$(?,ffffff.?BDŽ????W?I??I????L??H??M??tG?????D? ??(???(?$???u????Q???(???}????Q?H??$8??Y,???Yd? ?3@?????D? ??Y???(?$???(?$???e????Y???e????)?$`??)?$@??Q???Q???)?$????$??}???)?$????$ ??W???????}???y??(?$??y???????E???????y?????Dȉ???y?????D???????y?????Dȉ? ??y?????D?????@??y?????Dȉ????y?D????DD???uJ?@???$`??W???????}???y??(???y?$??????E???????y?????Dȉ???y?????D???????y?????Dȉ? ??y?????D?????@??y?????Dȉ????y?????D???}J? ???$??????)L$ ??_???y???_???y????_???)?$???}???_??????)L$`??_???y???)L$P?B_???y???:_??:_??z??A2_??cy??A*_??cy???A"_???}??A_???z??_??Cy??A
_??Cy????_???
??H??H??2H9??????;A??A???A??|??A??A??A??|uǁ??t???L9??????H???HC?H??1?H?5??H?̣?H??H?ðH9???????{?A??A???A??|?{A??A??A??|u????]?;A??A???A??|?FA??A??A??|u????t??'L9??1???H???HC???y&?1?H?5????
	?H??????T???.?????.???H??H??$H9?u??????H????	???}X????oL????????v???Pʅ??8
H?JH??H9?H??r?H????i	L9?????H???HC?1?H?5D?H?s??H??H??H9??P????;A??A???A??|?&A??A??A??|uǁ??t??L9?????H???HC?1?H?5֡H???H??H??JH9???????;A??A???A??|??
A??A??A??|uǁ??t??
L9??????H???HC?1?H?5h?H????H??H??H9??t????;A??A???A??|?J
A??A??A??|uǁ??t??+
L9??5???H???HC???y*?1?H?5???

?H???????Z???T???.???	??.???	H??H9?u??????H???????o-???oLS???????u????ʅ??o	H?JH??H9?H??r?H????L9??????H???HC?1?H?5K?H?z??H??H??RH9??W????;A??A???A??|?-	A??A??A??|uǁ??t??	L9?????H???HC?H??1?H?5ٟH???H??H??H9???????{?A??A???A??|??A??A??A??|u??????;A??A???A??|??A??A??A??|u????t??fL9??p???H???HC?H??1?H?51?H?`??H??H?ÐH9??:????{?A??A???A??|?A??A??A??|u??????;A??A???A??|??A??A??A??|u????t??L9??????H???HC?H??41?H?5??H????H??H??6H9???????;A??A???A??|?hA??A??A??|uǁ??t??IL9??S???H???HC?1?H?5?H?G??H??H??nH9??$????;A??A???A??|??A??A??A??|uǁ??t???L9??????H???HC?H??1?H?5??H?՝?H??H??H9???????{?A??A???A??|??A??A??A??|u????i?;A??A???A??|?RA??A??A??|u????t??3L9??=???H???HC?1?H?5?H?1??H??H??"H9??????;A??A???A??|??A??A??A??|uǁ??t???L9??????H???HC?1?H?5??H?Ü?H??H??H9???????;A??A???A??|?vA??A??A??|uǁ??t??WL9??a???H???HC?1?H?5&?H?U??H??H??bH9??2????;A??A???A??|?A??A??A??|uǁ??t???L9??????H???HC?1?H?5??H???H??H?ÈH9???????;A??A???A??|??A??A??A??|uā??t??xL9??????H???HC?H??l1?H?5C?H?r??H??H??nH9??O????;A??A???A??|?%A??A??A??|uǁ??t??H???8??8??L??H??I????????H??H??H???A?LC?D?D?Ɂ????|?5H?u?H?8H?5??1?1??L9??????H???HC?H??R1?H?5g?H????H??H??TH9??s????{?A??A???A??|?HA??A??A??|u????*?;A??A???A??|?A??A??A??|u????t???L9??????H???HC?H???1?H?5??H???H??H???H9???????;A??A???A??|??A??A??A??|uā??t??|L9??????H???HC?1?H?5K?H?z??H??H??BH9??W????;A??A???A??|?-A??A??A??|uǁ??t??1?H9???????y{H?5???
??H???????T???.?sk??.?zbH??H9?u??????1?H9??????H?5??H?͘?H??H9???????E??A??A??|u
A????D?KE??A???A??|?E??A??A??|u
A?????I9??????H9?A??D???E??A???H?ÐH??H??A??|????H??H?????A??A??H?5??A??|u???tH???V???H?J??|S?A??A???A??|?0???A??A??A??|u???u?H?J??|S?A??A???A??|?????A??A??A??|u???u?H?J??|S?A??A???A??|?????A??A??A??|u????O???H?J??|S?A??A???A??|?????A??A??A??|u???????H?J??|S?A??A???A??|?L???A??A??A??|u????????H?J??|S?A??A???A??|????A??A??A??|u?????????S?ρ????|???????????|u????????H?J?|SA??A???A??|?????A??A??A??|u????3???H?J?|SA??A???A??|?k???A??A??A??|u????????H?J?|SA??A???A??|?0???A??A??A??|u????????H?J?|SA??A???A??|?????A??A??A??|u????????H?J?|S
A??A???A??|?????A??A??A??|u????G???H?J?|SA??A???A??|????A??A??A??|u???????H?J?|SA??A???A??|?D???A??A??A??|u?????????LSH???ρ????|????????1۩|????????????????H??H??L???	H??H??H??H???H?81?1??qkA???????????????????????+???????????????????????I???E???E???E???E??????Q???%???L???L???,???w???????UH???~??A??A????s??W?E1??E??W?]?A??A?????W?E1?ffff.?ġr_?ġz_D?ġz_D?ġz_L?I??M9?u?M??tN??E1?ār_?I??M9?u???W???.?u{??*???^?? sE1???H??H????h??W?]?A??A?????}?E1???}8p??o-?vġ|Y4?ġ|Y|? ?!|YD?@?!|YL?`??X???X??hfffff.?A?TL??y $????%?H?E?H?ף?8H?u?L???	X????H?5?|H??|?1?????H?L?c?C?CM???????n???b~]??\?]??y???X???
?(??Y???Y?H?5?zH??{???2???H???V?
??uH?=???-?H?r?1??H?U?H?L?c?C?CH???`???H?SL?s H?C(M??t&H?5`?L??L??E1?E1??ƢH?C(H???.?????a???D$0??C???D$ ?????$L??H??L????w?_???H??X[A\A]A^A_]?UH?? ]?DUH??SPH?=??H??u?SH??H??????H?5???,?H???
s?uH?=r???H?a?H??H??[]?ffffff.?UH??]??UH??AWAVAUATSH???H??I??I?????TH?E?L?(L?x??UH??L??H	?H?? t
L??1?H??I???
D??1???A??M?L??H	?H?? H?]?t
L??1?H???D??1???H?M?H??H)?H??HD?L?L?%??M??u?RI??H?~?M)??m?L?5~?L??L???
?H9?H?]?v2H?u?H?E?H?H??H??H	?H?? L??x?????1?H??H???{H??H?]?L?kL?{ H?C(H??t*H?54?L??L??E1?E1????H?M?H?C(H????L?}????n???bxZ??\?Z??y???X???
?%??Y???Y???E?H?R?L?-C?L??H??A?????n???b-Z??\5Z??y???X???
K%??Y???Y???E?L?5??L??L??A?????n???b?Y??\?Y??y???X???
%??Y???Y?H?5?xH??x???~E???M??????L??H??A??I??L??L??A?ջI9?vH?5?xH??x?1??Z???H?uЉ^L?}??I1?????L?-M?L??L??A??H?E?L??L??A??H?E?M??H?u??L?}?H??H?E?H??HE?H?E?H???H?E?H??H?E?H???H?E?I??I??(?E?E1?L?m?L?e?DH?M?I?M)?H;E?LF?H??x???J?8I?V?M?n?I?M??H???tL??H?u?L??E1?E1???I?H????L?u????n???o
hX??b???(
lX??\???y???X???
~#??Y???Y????h???L??L?m?L???????n???bX??\%X??y???X???
;#??Y???Y????p???L??I??H?]?H??A?????n???b?W??\?W??y???X???
?"??Y???YѿH?5?vH??v??~?h??????p?????z???L??L??A??I??L??H??A??I9?v?H?5?vH??v1??F???L}?L;}??]?L?u???????H?5u1?????H?EЉX?É]?I??L?m?L?e??A?????????D$0??????D$ ??om???$H?=!?L????w趇???R???n?????n???b?V??\?V??y???X???
?!??Y???Y?H?5!tH?Rt???t???1?H???[A\A]A^A_]?UH??AVS??H????I?ƿ??_OH??H?=?H?8??????@??̴??@(??ߴ??@H?????@hH??H???Hǃ?L???H????w?"?????t;A???t)Adž??H?5?sH??s1ۿ1?????H??[A^]?H?=?sH??$H?

t??
1?????f?UH??AWAVAUATSH???H?? H?1?H?H??$H?5uH?u?1??,????L??W???)D$@??)D$`H?5 ?H?T$@H??$?A?H?D$ H????w???H????I??H?D$PL?(L?5??=ffffff.?A?H?|$ H?5??H?T$@H??$?A??I??H????L?=?H?d?H?D$01??Nff.?H?D$HH?rE1??H??1??M???H?|$ ?KH??H?H;?$??L??H?e?[A\A]A^A_]?H?D$H?\$(I??H?|$ ?GKH?;H?t$8A??H??H?t$0A??H?5WrH??q?H??1??????L?- ?H?;??L??A??A?????XI????L?????A?????9I????L?????A?????I????L???m?A??????I????L???N?A??????I????L???/?A??????I????L????A??????I????L????A?????I????L???ҖA?????`I????L?????A?????AI????L?????A?????"I????L???u?A?????I????L???V?A??????I????L???7?A??????I????L????A??????I????L?????A??????I????L???ڕA????ulI????L?????A????uQI????L?????A????u6I????L?????A????uI????L???n?A????t!A?????H?5?oH?o?1??3???I????L???2?A??????I????L????A????ulI????L?????A????uQI????L???ݔA????u6I????L???”A????uI????L?????A????t!A??H???H?50oH?Wn?1??l???I????L???k?A??????I????L???L?A????ulI????L???1?A????uQI????L????A????u6I????L?????A????uI????L?????A????t!A??z???H?5?nH??m?1?????I????L??A?ք?A???I????L??A????A???	?A???I????L??A?ք?A???A???L?%RL?-knL??ID?H?55nH?m?H??1?????A???L??ID?H?56n?H??1??????I??H?5I?A?ք?MD?H?55n?H??L??1??????fALJ?ILJ???W???}????}????}?I??H?5i???wA?????n???b?L??\?L??y???X???^?H?5?m?H?ڰ?F???H?D$H?D$(H?x???IDL?-??H?d?H?|$L??A??H??I??L?%??H?L$L??H??A??I?GH????H?|$H????H??H?|$H???-H?٫H?|$L??A??H??I??H?L$L??H??A??I?G8H?????H?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I?G@H?????H?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I?GHH???{?H?|$H???jH?v?H?|$L??A??H??I??H?L$L??H??A??I?GPH???:?H?|$H???)H?U?H?|$L??A??H??I??H?L$L??H??A??I?GXH?????H?|$H????H?4?H?|$L??A??H??I??H?L$L??H??A??I?G`H?????H?|$H????H??H?|$L??A??H??I??H?L$L??H??A??I?GhH???w?H?|$H???fH??H?|$L??A??H??I??H?L$L??H??A??I?GpH???6?H?|$H???%H?ѪH?|$L??A??H??I??H?L$L??H??A??I?GxH?????H?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I???H???m?H?|$H???\H?h?H?|$L??A??H??I??H?L$L??H??A??I???H???)?H?|$H???H?D?H?|$L??A??H??I??H?L$L??H??A??I???H????H?|$H????H? ?H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I???H???]?H?|$H???LH?ةH?|$L??A??H??I??H?L$L??H??A??I???H????H?|$H???H???H?|$L??A??H??I??H?L$L??H??A??I???H???ՌH?|$H????H???H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H????H?l?H?|$L??A??H??I??H?L$L??H??A??I???H???M?H?|$H??u@H?L?H?|$L??A??H??I??H?L$L??H??A??I???H???
?H?|$H??t]H?5?A??H??H?t$0A??H?5?gH??eE1??H??1?????H?|$?ËH???H?H;?$?h?????=H?D$(H?H?D$ ?8tUH???H?|$H?5?L?5o?A??H??I??H?L$H?5??H??A??I???H???L?H?|$H???;????!H?5ahH??dH?
?h?1?????H?D$ ?8tUH?Z?H?|$H?5??L?5?A??H??I??H?L$H?5z?H??A??I???H???̊H?|$H????????!H?5?gH?udH?
?g?1?????H?D$ ?8tUH???H?|$H?5?L?5o?A??H??I??H?L$H?5??H??A??I???H???L?H?|$H???;????!H?5agH??cH?
?g?1?????H?D$ ?8t[H???H?|$H?5??I??L?5?A??H??I??H?L$L?-w?L??H??A??I???H???ƉH?|$H????????6H?5?fH?ocH?
g?1??}???L?5??L?%'?L?-?H?)?H?|$L??A??H??I??H?L$L??H??A??I???H???J?H?|$H???9???H??H?|$L??A??H??I??H?L$L??H??A??I??H????H?|$H???????H??H?|$L??A??H??I??H?L$L??H??A??I??H???ˆH?|$H???????H???H?|$L??A??H??I??H?L$L??H??A??I??H???~?H?|$H???m???H???H?|$L??A??H??I??H?L$L??H??A??I??H???:?H?|$H???)???H?u?H?|$L??A??H??I??H?L$L??H??A??I?? H?????H?|$H???????H?Q?H?|$L??A??H??I??H?L$L??H??A??I??(H?????H?|$H???????H?-?H?|$L??A??H??I??H?L$L??H??A??I??0H???n?H?|$H???]???H?	?H?|$L??A??H??I??H?L$L??H??A??I??8H???*?H?|$H??????H??H?|$L??A??H??I??H?L$L??H??A??I??@H????H?|$H???????H???H?|$L??A??H??I??H?L$L??H??A??I??HH?????H?|$H???????H???H?|$L??A??H??I??H?L$L??H??A??I??PH???^?H?|$H???M???H?y?H?|$L??A??H??I??H?L$L??H??A??I??XH????H?|$H???	???H?U?H?|$L??A??H??I??H?L$L??H??A??I??`H???օH?|$H???????H?1?H?|$L??A??H??I??H?L$L??H??A??I??hH?????H?|$H???????H?
?H?|$L??A??H??I??H?L$L??H??A??I??pH???N?H?|$H???=???H??H?|$L??A??H??I??H?L$L??H??A??I??xH???
?H?|$H???????H?ŤH?|$L??A??H??I??H?L$L??H??A??I???H???ƄH?|$H???????H???H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H???q???H?}?H?|$L??A??H??I??H?L$L??H??A??I???H???>?H?|$H???-???H?Y?H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H???????H?5?H?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H???????H??H?|$L??A??H??I??H?L$L??H??A??I???H???r?H?|$H???a???H???H?|$L??A??H??I??H?L$L??H??A??I???H???.?H?|$H??????H?D$ ?8tUH???H?|$H?5??L?5?A??H??I??H?L$H?5?H??A??I???H???тH?|$H????????!H?5?_H?z\H?
Cb?1?舿??H?D$ ?8t[H?_?H?|$L?%#?L??L?5q?A??H??I??H?L$L?-??L??H??A??I???H???K?H?|$H???:????6H?5`_H??[H?
?a?1?????L?5?L?%??L?-??H??H?|$L??A??H??I??H?L$L??H??A??I???H???ρH?|$H???????H?ʢH?|$L??A??H??I??H?L$L??H??A??I???H?????H?|$H???z???H???H?|$L??A??H??I??H?L$L??H??A??I???H???G?H?|$H???6???H?D$ ?8tUH?x?H?|$H?5??L?5
?A??H??I??H?L$H?5??H??A??I???H????H?|$H????????!H?5?]H??ZH?
?`?1?衽??H?D$ ?8tUH??H?|$H?5gH?D$H??H???*????!H?5PDH??@H?
?K?1?????H?D$(?8tXH?ɎH?|$H?5??L?5?fA??H??I??H?L$H?5i?H??A??I???H????fH?D$H??H????????!H?5?CH?a@H?
?K?1??o???H?D$(?8tXH?f?H?|$H?5
?L?5[fA??H??I??H?L$H?5?H??A??I???H???8fH?D$H??H???$????!H?5JCH???H?
K?1?????H?D$(?8tXH??H?|$H?5??L?5?eA??H??I??H?L$H?5c?H??A??I???H????eH?D$H??H????????!H?5?BH?[?H?
?J?1??i???H?D$(?8tXH???H?|$H?5?L?5UeA??H??I??H?L$H?5?H??A??I???H???2eH?D$H??H???????!H?5DBH??>H?
FJ?1?????H?D$(?8tXH?=?H?|$H?5??L?5?dA??H??I??H?L$H?5]?H??A??I???H????dH?D$H??H????????!H?5?AH?U>H?
?I?1??c???H?D$(?8tXH?ڌH?|$H?5??L?5OdA??H??I??H?L$H?5ڨH??A??I???H???,dH?D$H??H???????!H?5>AH??=H?
nI?1?????H?D$(?8tXH?w?H?|$H?5{?L?5?cA??H??I??H?L$H?5W?H??A??I???H????cH?D$H??H????????!H?5?@H?O=H?
I?1??]???H?D$(?8tXH??H?|$H?5??L?5IcA??H??I??H?L$H?5ԧH??A??I???H???&cH?D$H??H???????!H?58@H??<H?
?H?1??ڟ??H?D$(?8tXH???H?|$H?5u?L?5?bA??H??I??H?L$H?5Q?H??A??I???H????bH?D$H??H????????!H?5??H?I<H?
2H?1??W???H?D$(?8tXH?N?H?|$H?5?L?5CbA??H??I??H?L$H?5ΦH??A??I???H??? bH?D$H??H???????!H?52?H??;H?
?G?1??Ԟ??H?D$(?8tXH??H?|$H?5o?L?5?aA??H??I??H?L$H?5K?H??A??I???H????aH?D$H??H????????!H?5?>H?C;H?
\G?1??Q???H?D$(?8tXH???H?|$H?5?L?5=aA??H??I??H?L$H?5ȥH??A??I???H???aH?D$H??H???????!H?5,>H??:H?
?F?1??Ν??H?D$(?8tXH?%?H?|$H?5i?L?5?`A??H??I??H?L$H?5E?H??A??I???H????`H?D$H??H????????!H?5?=H?=:H?
?F?1??K???H?D$(?8tXH?‰H?|$H?5?L?57`A??H??I??H?L$H?5¤H??A??I???H???`H?D$H??H???????!H?5&=H??9H?
F?1??Ȝ??H?D$(?8tXH?_?H?|$H?5c?L?5?_A??H??I??H?L$H?5??H??A??I???H????_H?D$H??H???}????!H?5?<H?79H?
?E?1??E???H?D$(?8tXH???H?|$H?5?L?51_A??H??I??H?L$H?5??H??A??I???H???_H?D$H??H????????!H?5 <H??8H?
HE?1??›??H?D$(?8tXH???H?|$H?5]?L?5?^A??H??I??H?L$H?59?H??A??I??H????^H?D$H??H???w????!H?5?;H?18H?
?D?1??????H?D$(?8tXH?6?H?|$H?5ڢL?5+^A??H??I??H?L$H?5??H??A??I??H???^H?D$H??H????????!H?5;H??7H?
uD?1?輚??H?D$(?8tXH?ӇH?|$H?5W?L?5?]A??H??I??H?L$H?53?H??A??I??H????]H?D$H??H???q????!H?5?:H?+7H?
D?1??9???H?D$(?8tXH?p?H?|$H?5ԡL?5%]A??H??I??H?L$H?5??H??A??I??H???]H?D$H??H????????!H?5:H??6H?
?C?1?趙??H?D$(?8tXH?
?H?|$H?5Q?L?5?\A??H??I??H?L$H?5-?H??A??I?? H???\H?D$H??H???k????!H?5?9H?%6H?
:C?1??3???H?D$(?8tXH???H?|$H?5ΠL?5\A??H??I??H?L$H?5??H??A??I??(H????[H?D$H??H????????!H?59H??5H?
?B?1?谘??H?D$(?8tXH?G?H?|$H?5K?L?5?[A??H??I??H?L$H?5'?H??A??I??0H???y[H?D$H??H???e????!H?5?8H?5H?
hB?1??-???H?D$(?8tXH??H?|$H?5ȟL?5[A??H??I??H?L$H?5??H??A??I??8H????ZH?D$H??H????????!H?58H??4H?
?A?1?誗??H?D$(?8tXH???H?|$H?5E?L?5?ZA??H??I??H?L$H?5!?H??A??I??@H???sZH?D$H??H???_????!H?5?7H?4H?
?A?1??'???H?D$(?8tXH??H?|$H?5žL?5ZA??H??I??H?L$H?5??H??A??I??HH????YH?D$H??H????????!H?57H??3H?
-A?1?褖??H?D$(?8tXH???H?|$H?5??L?5?YA??H??I??H?L$H?5?H??A??I??PH???mYH?D$H??H???Y????!H?56H?3H?
?@?1??!???H?D$(?8tXH?X?H?|$H?5??L?5
YA??H??I??H?L$H?5??H??A??I??XH????XH?D$H??H????????!H?5?5H??2H?
^@?1?螕??H?D$(?8tXH???H?|$H?59?L?5?XA??H??I??H?L$H?5?H??A??I??`H???gXH?D$H??H???S????!H?5y5H?
2H?
???1?????H?D$(?8tXH???H?|$H?5??L?5XA??H??I??H?L$H?5??H??A??I??hH????WH?D$H??H????????!H?5?4H??1H?
???1?蘔??H?D$(?8tXH?/?H?|$H?53?L?5?WA??H??I??H?L$H?5?H??A??I??pH???aWH?D$H??H???M????!H?5s4H?1H?
)??1?????H?D$(?8tXH?̂H?|$H?5??L?5WA??H??I??H?L$H?5??H??A??I??xH????VH?D$H??H????????!H?5?3H??0H?
?>?1?蒓??H?D$(?8tXH?i?H?|$H?5-?L?5~VA??H??I??H?L$H?5	?H??A??I???H???[VH?D$H??H???G????!H?5m3H?0H?
Y>?1?????H?D$(?8tXH??H?|$H?5??L?5?UA??H??I??H?L$H?5??H??A??I???H????UH?D$H??H????????!H?5?2H?~/H?
?=?1?茒??H?D$(?8t^H???H?|$L?%'?L??L?5uUA??H??I??H?L$L?-?L??H??A??I???H???OUH?D$H??H???;????6H?5a2H??.H?
?=?1?????L?5UL?%??L?-??H?/?H?|$L??A??H??I??H?L$L??H??A??I???H????TH?|$H???????H??H?|$L??A??H??I??H?L$L??H??A??I???H????TH?D$H??H???x???H??H?|$L??A??H??I??H?L$L??H??A??I???H???ETH?D$H??H???1???H???H?|$L??A??H??I??H?L$L??H??A??I???H????SH?D$H??H???????H???H?|$L??A??H??I??H?L$L??H??A??I???H????SH?D$H??H???????H?o?H?|$L??A??H??I??H?L$L??H??A??I???H???pSH?D$H??H???\???H?H?H?|$L??A??H??I??H?L$L??H??A??I???H???)SH?D$H??H??????H?!?H?|$L??A??H??I??H?L$L??H??A??I???H????RH?D$H??H???????H??H?|$L??A??H??I??H?L$L??H??A??I???H????RH?D$H??H???????H??H?|$L??A??H??I??H?L$L??H??A??I???H???TRH?D$H??H???@???H??H?|$L??A??H??I??H?L$L??H??A??I???H???
RH?D$H??H???????H??H?|$L??A??H??I??H?L$L??H??A??I???H????QH?D$H??H???????H?^H?|$L??A??H??I??H?L$L??H??A??I???H???QH?D$H??H???k???H?D$(?8tXH?-H?|$H?5?L?5BQA??H??I??H?L$H?5͕H??A??I??H???QH?D$H??H???????!H?51.H??*H?
?:?1??Ӎ??H?D$(?8tXH??~H?|$H?5n?L?5?PA??H??I??H?L$H?5J?H??A??I??H????PH?D$H??H????????!H?5?-H?B*H?
":?1??P???H?D$(?8tXH?g~H?|$H?5?L?5}H?|$L?-b?L??L?5?NA??H??I??H?L$L?%;?L??H??A??I??(H????NH?D$H??H???v????6H?5?+H?0(H?
?8?1??>???L?5GNL?-?L?%ْH??|H?|$L??A??H??I??H?L$L??H??A??I??8H???NH?|$H???????H??|H?|$L??A??H??I??H?L$L??H??A??I??0H????MH?D$H??H???????H?|H?|$L??A??H??I??H?L$L??H??A??I??@H????MH?D$H??H???l???H?X|H?|$L??A??H??I??H?L$L??H??A??I??HH???9MH?D$H??H???%???H?1|H?|$L??A??H??I??H?L$L??H??A??I??PH????LH?D$H??H???????H?
|H?|$L??A??H??I??H?L$L??H??A??I??XH????LH?D$H??H???????H??{H?|$L??A??H??I??H?L$L??H??A??I??`H???dLH?D$H??H???P???H??{H?|$L??A??H??I??H?L$L??H??A??I??hH???LH?D$H??H???	???H??{H?|$L??A??H??I??H?L$L??H??A??I??pH????KH?D$H??H???¿??H?n{H?|$L??A??H??I??H?L$L??H??A??I??xH????KH?D$H??H???{???H?G{H?|$L??A??H??I??H?L$L??H??A??I???H???HKH?D$H??H???4???H? {H?|$L??A??H??I??H?L$L??H??A??I???H???KH?D$H??H???????H??zH?|$L??A??H??I??H?L$L??H??A??I???H????JH?D$H??H???????H??zH?|$L??A??H??I??H?L$L??H??A??I???H???sJH?D$H??H???_???H??zH?|$L??A??H??I??H?L$L??H??A??I???H???,JH?D$H??H??????H??zH?|$L??A??H??I??H?L$L??H??A??I???H????IH?|$H???	???H?5؍H??I??H??H?t$0???ʽ??H??tUH??H??H?5m?]?׎??1??@UH??AWAVSPH??t?詎????t I???L??(H??0H??[A^A_]?H?=d!H?:?H?
?!??
1??4???@UH??AVSH??tC??I??H??H?5Տ?@?????t+I???H?8Hc?H???H?5)???H????[A^]?H?=? H???H?
;!??
1??????UH??SPH??t+H??H??H?5h??Ӎ????tH???ƀ?H??[]?H?=? H?o?H?
? ??
1??i???f?UH??AVS?Ĭ??H????I?ƿ????H??H?=?H?8???`??@???`??@(???`??@H???`??@hH??`H???Hǃ?L???H????w??????t;A???t)Adž??H?5?H??1ۿ1??{???H??[A^]?H?=?H?x?H?
???
1??r???f?UH??H??]?UH??AWAVATSH?_X?{~1L?s(E1?L?%5Gffff.?I?>A??I??HcCI??I9?|??
T?t+?{tH??F?8H?3H?S?*?H??[A\A^A_]??H?=(???FH???{u????UH??H?GXH?]?UH??H?H??H??L??]??fDUH??H?H??H??L??]??fDUH??AWAVATSI??I??H?~?2???Ä?t$M??M??L??????L??L??H???9???[A\A^A_]ÐUH??H?GXH?8H?P]??ff.?UH??H??]?UH??AWAVATSH??L???H?5(1H?31?1?衂??A?L?=?E@K?A??I?~?
?L???D?H??[A\A^A_]?4?ffffff.?UH??H???]?UH??AWAVAUATSH??hI??L???Mc?$?D??H?E??L?H?E?M??$?A?G=???L?A??$?)?A??$?A??$???ș??A??$?A??$???L?u??M??OAƄ$?A??$??7H?=?H?5??H??D??I?$H?5	?H????I??$?H?=???I??I??$?H?56?H????H?5:??L????L?5??H?=??H?5c?H??t1???H?5Y?L??H????H?5?L??H????HDžx???H?=h?H?5????H?5??H??x???H??L???ӄ?t I??$?H?5????CAƄ$??9H??x???H?5????H?5^?H????H?5!/H?C/?H??1??\???L?u??M?H??BH??x?????H?E?H??H?E?H?C\H?E?L?e??M?L?}?H??x???I??$?I?|$H???L?-
CH??A??K????H?5-?H??A??I??$?L???W?}?~PI?|$H??A??I??$?H??H?5??A?Ճ}?t*I?|$H??A??I??$?H??H?5ІA?Ճ}???I?t$I??$?H?]?H?????I????H?5??H??A??H?5~?H??A??H?????}??7H?%?H?E?E1??L??H?u?A??f?L9}??L??O????L??H?5Q?A??L??H?5?A??H????L?{L;}?}?M????M??t?L??H?5?A??H??u?I??$(H??t?I??$0?Є??s???H?5?-H?Y-A????1??m~???I??H?5X-H?/-?H?M?I??1??D~??A?????I????H?5}?H??A??H?5??H??A??H?5?H??A??H?5.-?H??1???}???DE1??}?u;A??$?t0I??$?H?5?A??H?=X?H?5?A??H?5??H??A??H?}????D??H??h[A\A]A^A_]?H?E?L?x?E1??f?I??M9??????I?|$H??A??K????I??$(u?H??H?5??A????I??H?57,H?,???I??1??%}??I??u=H?5h?L??A??H?5{?H??A??H?5ރH??A??H?5,?H??1???|??H?}?A??????&???UH??H???]?Ϗffffff.?UH??H?5???H9??]?ffff.?UH??AWAVAUATSH??8I??H??H?G D???????MЋ???M?????M?Mc?J????H?5I?H?}??G?D??I??E1?D9?L?e?~9?M?A??E??D?u?E???A?D$???M?9?M?D9?D?A?E??E9?|?D?e?E9???H? ?H?E?H???H?E?H???H?E?L?}???A??E9?to?{0tEL?=?H?{(D???߬??H???'????L??L?}?H?u?H??L?5}>A??L??H?u?H??A??H?{ D??L???n?{0t?L??H?u??K>?H?5j?L???9>?}?|H?C H??(tH??8[A\A]A^A_]?H?5??H?}?H??8[A\A]A^A_]?%?=?UH??AWAVAUATSH??
I??A??H?}?H???????H??H???H?E?L???L???H??貌??????r?CP?H߃???r????rH?}?H???w????d}H?}?H???pH?OH??H??`???H??X???H?OH??H??(???H?M?H?O H??H?????H??p???H?O(H??H?? ???H??0???H?G0H?????H?O8H??H??@???H??8???H?G@H?????H?GHH??????M???iI?OH??H?????H??????I?OH??H??P???H??x???I?O H??H??????H??@???I?O(H?? ???I?G0H??????I?G8H??????I?G@H??????I?GHH??H???M??H???????fI?L$H??H??????H??????I?L$H??H??????H?????I?D$0H??????I?D$8H??0???I?D$@H??????I?D$H?WHDžX???H?E?HDžp???HDž0???HDž???HDž8???HDž???1?H??(???1?H?? ???1?H??@???1?H?????1?H??`???1?H??????M???????HDž????HDžx???HDž@???HDž ???HDž????HDž????HDž????1?1?H??????1?H?????1?H??P???1?H??H???M??H???????????HDž????HDž???HDž????HDž0???HDž????1?H??????1?H??????1?H??????H?SH??P???H?CH??????H??H???H?C H??????H?????H?C(H??????H??????H?C0H??????H?C8H??????H?C@H??????H?CHH???????$?$H??t?M??tA?H????????????H??(??????|???H????ԁ??L?U?I???H??ID?H?IH?IX?q??~8I??H??H?x?????;lL???H?E?M??L??`?????'H?u?L???{A???xpH?u?H?NH??H???I9O?pH??????I?G8?d'L????t??????kH?E?H???H?5emL?=n(L?e?L??A??L?55mL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H????o??H??@???HDžH???HDžP???HDžX???HDž`???HDžh???H?5lH??h???H?D$(???X?????D$H??P???H?D$???@?????\A?<$?.kM?p L???s????L??`????4kL???s?????Ek??????L???????RkL??????H?]?H?;H?5?k?L'H?????H?H??A9??=kH?;H?5pl???'??L????????I??@??D??????E9???H?E??H???2qH?
?sHc?H?????@????/qH?E?H???XI?X0A?8?Go??H9???jH?E?H???H?5|kL?5?&L?}?L??A??H?LkL??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H?"kH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?	L??H??A??H???????A?
L??H??A??H??x????A?L??H??A??H??@????A?L??H??A??H?? ????A?
L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??H????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H?E?H??p???H??0???H??????H??????H??????HDž????HDž????HDž????H?5?gH??????H?D$(?????????D$H??????H?D$?????????GL???so?????xgH?E?H???H?5	hL?=#L?e?L??A??L?5?gL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H???~j??H?????HDž???HDž ???HDž(???HDž0???HDž8???H?5?fH??8???H?D$(???(?????D$H?? ???H?D$???????sWL???n??????fH?E?H???H?5$gL?=-"L?e?L??A??L?5?fL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H???i??H??p???HDžx???HDž????HDž????HDž????HDž????H?5?eH??????H?D$(?????????D$H??????H?D$???p????VH??(??????-j??H?
?pHc?H???H?E?H??X?_,??`?????eL???mm????L?}?H?M???e?CX?E??CT??h???H???H?5?eL?5? L??A??H??eL??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H??eH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H??h????A?L??H??A??H?U??A?	L??H??A??H?5?d??L??1?A??Hc?h???H?????HDž???HDž ???HDž(??? HDž0???HDž8???H?5?cH??8???H?D$(???(?????D$H?? ???H?D$???????YCH?E?H????CT?E?H?5-dL?56L?}?L??A??H??cL??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??H??cH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?	L??H??A??H???????A?
L??H??A??H???????A?L??H??A??H??x????A?L??H??A??H??@????A?
L??H??A??H?? ????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??H????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H?U??A?L??H??A??H??P???H=?HL?H??H???H?????H??????H??p???H??x???H??????Hc?H??????HDž????HDž????H?5?_H??????H?D$(?????????D$H??????H?D$???p?????L??`???A???_`L???&i?????p`?CT?E?A? I???L?e?H?E?|IL??A?@I??|7A??H??|(A?H??|E1?H??A??I??	I??H???H?5?_L?=L??A??H??_L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H??_H??X????A?L??H??A??H??8????A?L??H??A??H?U??A?L??H??A??H?5_??L??1?A??H?}??)b??H??????HDž????HDž????L??????HDž???HDž???H?58^H?????H?D$(?????????D$H??????H?D$????????OA?H????cH?
YfHc?H???H?E?H??;A?8??^A????^?????^?KT?M??KX??h????K\??????K`???????Kd???????Kh??X????sl1???@??H?WH?OM?L?I?|? ????A?w??h???A?w??p???E?hLcS ??A?8??^?CT?E??KX??h???A??A??A?A??H?E?H???H?5?]L?5?L?e?L??A??H??]L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H?}]H???????A?L??H??A??H?U??A?L??H??A??H??h????A?L??H??A??A???AL?H??`???H??`???HDžh???HDžp???H?H??x???HDž????HDž????H?5\H??????H?D$(???x?????D$H??p???H?D$???`????oL??M???We?????F]?CT?E?H??`???H=A?LL?H?E?H???H?5p\L?5yL?e?L??A??H?@\L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H?\H??X????A?L??H??A??H??8????A?L??H??A??H?U??A?L??H??A??Ic?H??H???H?5?[L??1?A??L???^??H??@???HDžH???HDžP???H??X???HDž`???HDžh???H?5?ZH??h???H?D$(???X?????D$H??P???H?D$???@?????$L??A???kKA?8??[?;L??`????\L????]??I?ƋKT?H??H?L9?|?H?E???L?m??Z????]H?M?H????MA?8??[H?E?H???H?5?ZL?5?L?}?L??A??H??ZL??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H?\ZH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?	L??H??A??H??P????A?
L??H??A??H??H????A?L??H??A??H??????A?L??H??A??H???????A?
L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??P???H=?HL?H??H???H?????H??????H?????H?????H?????Hc?H?????HDž ???HDž(???H?5?WH??(???H?D$(????????D$H?????H?D$???????97?;?GY?CT?E??C\??h???H?E?H???H?5?WL?5L?}?L??A??H?5?WL??H?U?H?M?E1?A??H??WH??P????A?L??H??A??H?U??A?L??H??A??H??h????A?L??H??A??H??P???H=?HL?HDž0???HDž8???HDž@???Hc?H??H???HDžP???HDžX???H?5OVH??X???H?D$(???H?????D$H??@???H?D$???0????6A?8?.X?CT?E?H?E?H???H?5?VL?=?L?e?L??A??L?5?VL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H?5pVH?U??A?L??A??H???#Y??H??????HDž????HDž????HDž????HDž????HDž????H?5NUH??????H?D$(?????????D$H??????H?D$????????FL??`???L;?????DWL??????L??H?????H	?H?? H?? ????QL??H?H??H???J?CT?E?1???`?????H?M?H????H?5}UL?5?L?}?L??A??H?MUL??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??H?#UH??X????A?L??H??A??H?U??A?L??H??A??H?U??A?L??H??A??H??X???H?E????nH??p???H??`???H??h???H??p???HDžx???HDž????HDž????H?5?SH??????H?D$(???x?????D$H??p???H?D$???`????H?????H;??????UH??`???H=?HLȋCT?E??CX??h????C\?Cd??????Ch???????Cl???????Cp??X????Ct??h????Cx??p????C|??8???A?H??`????!????????WH?E?H??A?8?VU???*????????*H??^????*???????E????*@??^????*????????h??????*@ ??^????*??????????????*@(??^????????H?E?H???H?5,SL?=5L?e?L??H??A??L?5?RL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??L?5?RH??X????A?L??L??A??H?U??A?L??L??A??H??p????A?L??L??A??H??0????A?L??L??A??H??????A?L??L??A??H??8????A?L??L??A??H??????A?L??L??A??H???????A?	L??L??A??H??P????A?
L??L??A??H??H????A?L??L??A??H??????A?L??L??A??H???????A?
L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H?U??A?L??L??A??H??h????A?L??L??A??H??????A?L??L??A??H???????A?L??L??A??L?5JPH??L??A??Hc?H??P???H9?}H??L????H??H???H?????H??????H??????H??????H??????H?H??????HDž????HDž????H?5~OH??????H?D$(?????????D$H??????H?D$???????? I??(?
I??8?I??H?E???H??(?????? U??H?
nXHc?H???H?E?H??41???Lc?H??(?????t3???ZK?;?H??(??????&K??H?
PHc?H??????????4KH????j%1?H??????1?H?u?H??h????CT??????KX???????S\????????n???W???.???n???M?u{??n???^????????F ???*??ڳ??y
?	???,ȸ????X?????y&???WE????*????(?????^??8????h?????(E???YB???^?(????????p???H?}???A???? ˆ?(?????I????xHH?E?H(H?H?5'EL?=0H?]?H??H?U?A??L?%?DH??L??H?U?L?u?L??E1?A??A?H??L??H??????H??????A??A?H??L??H??`???L??A??H??????H????H?M?A?H??L?=?DL????I?F?L??H???IH?
?KHc?H???H?E?H?/???M??0H?5RDL?5[?L?m?L??L??A??L?%DL??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H??CH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?	L??H??A??H??P????A?
L??H??A??H??H????A?L??H??A??H??????A?L??H??A??H???????A?
L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??M??H??A??H?5?AL??I??A??Hc?H??X???H9?}L??L???:?H?M?H??p???H??0???H??0???H??8???H??@???H?H??H???HDžP???HDžX???H?5
AH??X???H?D$(???H?????D$H??@???H?D$???0?????$L?m?L?????L?}?H?5?AH?E?L?xL?5??L??L??A??L??L??H?U?H?M?E1?A??A?L??L??H??????H??????A??A?L??L??H?U?H?M?A??H??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H?U??A?L??H??A??H??h????A?	L??H??A??L??????A?
L??H??L??A??H???????A?L??H??A??H??x????A?L??H??A??H??@????A?
L??H??A??H?? ????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??H????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A?ֹA?L??H??H?U?A?ֹA?L??H??H??h???A?ֹA?L??H??L??A??H???????A?L??H??A??L??H?]?H??A??Hc?H??X???H9?}L??H?????H??x???H??@???H?? ???H??`???H??h???H??p???H?H??x???HDž????HDž????H?5Q=H??????H?D$(???x?????D$H??p???H?D$???`?????$L??????.A?H??L?=?=L??H?U?L?????I??A?H??L??H?U?H?M?L?=??A??L?5?=H?U??A?H??L??A??H??p????A?H??L??A??H??0????A?H??L??A??H??8????A?H??L??A??H??????A?	H??L??A??H???????A?
H??L??A??H??x????A?H??L??A??H??@????A?H??L??A??H?? ????A?
H??L??A??H???????A?H??L??A??H???????A?H??L??A??H??H????A?H??L??A??H??0????A?H??L??A??H???????A?H??L??A??H???????A?H??L??A??H??h????A?H??L??A??H??H????A?H??L??A??H??????A?H??L??A??H??????A?H??L??A??H???????A?H??L??A??H??h????A?H??L??A??H??p????A?H??L??A??H??X????A?H??L??A??H???????A?H??L??A?׀?(???L??`???tUH??x???H?XH??HI?H??H?5n:L?u?L?????H?HH??HI?H??H9??%H??x???H?;:?%?H?5":L?m?I??H??H??L?H??I?}I?????L??K??H9?v?L??`????H?}??,M??I???M?I??H??x???L?xH??LI?I??L?%?9H?]?H??L???2?H?HH??HI?H??I9??xH??x????xH?E?H???H?E?H??`?H?E?H??p?H?E?H??hL?e?H?H?5?9L?=??L??H??A??L?5?9L??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??L?5l9H??X????A?L??L??A??H?U??A?L??L??A??H??p????A?L??L??A??H??0????A?L??L??A??H??????A?L??L??A??H??8????A?L??L??A??H??????A?L??L??A??H???????A?	L??L??A??H??P????A?
L??L??A??H??H????A?L??L??A??H??????A?L??L??A??H???????A?
L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??L?5P7H??L??A??Hc?H??P???H9?}H??L?????H??H???H?????H??????H?????H?????H?????H?H?????HDž ???HDž(???H?5?6H??(???H?D$(????????D$H?????H?D$????????H?E?H??
H?E?H?H?H?57L?e?L????L?=?6L??L??H?]?H??L?u?L??E1????A?L??L??L?=??H??????H??????A??H??`???A?L??H??tH?x6H??L???H?5i6H??H??L?????A?L??H??H?U?H?M?A??H?D6H??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??0????A?L??H??A??H??????A?L??H??A??H??8????A?	L??H??A??H??????A?
L??H??A??H???????A?L??H??A??H??P????A?L??H??A??H??H????A?
L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H?U??A?L??H??A??H??h????A?L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??X????A?L??H??A??H??h????A?L??H??A??H??p????A?L??H??A??H??8????A?L??H??A??H?E?H??p???H??0???H??p???H??x???H??????Hc?`???H??????HDž????HDž????H?5?2H??????H?D$(?????????D$H??????H?D$???p????_#I??0?
I??@?I??P??E?M?6H?53L?-?L?e?L??L??A??L?=?2L??L??H?U?H?M?E1?A??A?L??L??H??????H??????A??A?L??L??H?U?H?M?A??L?=?2H??X????A?L??L??A??H?U??A?L??L??A??H??p????A?L??L??A??H??0????A?L??L??A??H??????A?L??L??A??H??8????A?L??L??A??H??????A?	L??L??A??H???????A?
L??L??A??H???????A?L??L??A??H??x????A?L??L??A??H??@????A?
L??L??A??H?? ????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H??H????A?L??L??A??H??P????A?L??L??A??H??H????A?L??L??A??H??????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H???????A?L??L??A??H?U??A?L??L??A??H??h????A?L??L??A?Հ}???H???2??H?HH??HI?H??H??????HDž????HDž????HDž????HDž????HDž????H?5?.H??????H?D$(?????????D$H??????H?D$?????????$L???_??H??.L??H???G?Hc?H??P???H9?}L??H???,?H?M?H??p???H??0???H??????H??????H??????H?H??????HDž????HDž????H?5?-H??????H?D$(?????????D$H??????H?D$????????L??H?.H??????H??@??H??x???H??H?XH??HI?H??L?u?L???d?H?HH??HI?H??H9??)H??x????-L?=9??3H?E?H?L?0?CT?E??[X??h???L??M????0??I?L$H??H	?H?? tH?H???1???????*?????y
?	???,ȸ?????????n???M???yX'????????*???M???^??=??????????(E???YG???^E??????????H?5f-L?%o?L??L??A??H?57-L??H?]?H??L?u?L??E1?A??H??????A?L??H??tH?-H??H???????H?5?,H??H??L???
?A?L??H??H?U?H?M?A??H??,H??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H?U??A?L??H??A??H??h????A?L??H??A??H???????A?L??H??A??H???????A?	L??H??A??H??????A?
L??H??A??H?5#,??L??1?A??H??p???H?E?H??0???H?????HDž???HDž???D??H?????HDž ???HDž(???H?5?*H??(???H?D$(????????D$H?????H?D$????????$L??A???I??X?????I??`?????I??h?????I??p?????I??x????I??8????I??P????H?E?H???H?5?*L?=?L?e?L??A??L?5?*L??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H???o-??H?? ???HDž(???HDž0???HDž8???HDž@???HDžH???H?5?)H??H???H?D$(???8?????D$H??0???H?D$??? ????dH?E?H???H?5%*L?=.?L?e?L??A??L?5?)L??L??H?U?H?M?E1?A??A?L??L??H?U?H?M?A??H???,??H??P???HDžX???HDž`???HDžh???HDžp???HDžx???H?5?(H??x???H?D$(???h?????D$H??`???H?D$???P????H???,??L?xH??LI?I??1ɨ??LE?H?E?H??ȨH?5-)L?56?L?e?L??A??H??(L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??L??????HDž????HDž????HDž????HDž????HDž????H?5?'H??????H?D$(?????????D$H??????H?D$????????/???H???*+??L?xH??LI?I??1ɨ??LE?H?E?H??ȸH?5=(L?5F?L?e?L??A??H?
(L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??L??????HDž????HDž????HDž????HDž????HDž????H?5?&H??????H?D$(?????????D$H??????H?D$????????????H???:*??L?xH??LI?I??1ɨ??LE?H?E?H????H?5M'L?5V?L?e?L??A??H?'L??H??H?U?H?M?E1?A??A?L??H??H?U?H?M?A??L??????HDž????HDž????HDž????HDž???HDž???H?5?%H?????H?D$(?????????D$H??????H?D$????????O???H??L?????H?PH??HI?H??L??I9?L?=z???H??x???L?xH??LI?I??H?]?H??L?%?%L???G?H?HH??HI?H??I9??^H??x????^L??H?5?%??H?HH??HI?H???H??H?H9?~?H??H??H????????H!?H??H??H?L?L??I?M?H?E?H?8H?5,%???I9??)I??I???H?5?%L??L??1?A??H?E?H??p???H??0???H?? ???H??(???H??0???HDž8??? H??@???HDžH???H?5h$H??H???H?D$(???8?????D$H??0???H?D$??? ?????$L???2H?E?H????H?E?H????H?E?H????H?E?H ????H??L?????H?HH??HI?H??L?=??H??L?????H??x???H?XH??HI?H??H?}?L?%?#L???s?H?HH??HI?H??H9?}	H??x????
H?}?L???I?H?HH??HI?H??L??I9?L???*H??x???H?XH??HI?H??L?m?L??L?%#L?????H?HH??HI?H??H9???H??x?????H?E?H?	H?E?H??H?E?H ??H?E?H(??H?E?H0??H?E?H8?H?E?H@?H?E?HH?H?E?HP?H?E?HX?H?E?H`?vH?E?Hh?jH?E?Hp?^H?E?Hx?RH?E?H??FH?E?H??:H?E?H??.H?E?H??"H?E?H??H?E?H??
H?E?H?L?}?H?H?5?"L?5??L??A??H?x"L??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??H?1"H??X????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?	L??H??A??H???????A?
L??H??A??H??????H??x???H??????H??????HDž????HDž???? HDž????HDž????H?5J H??????H?D$(?????????D$H??????H?D$?????????$L??A???????????H???A? A????H???"H???H???H?? ?H??(A??H?E?A??H??0?.H??8?%H??@A?A??yH??H?H??PA?A? ?[H??X?FH??`?=H??h?4H?À?+H?Ð?"H??p?H??x?H?Ø?H?ÈA?A??H?E?H?H?5?L?-??L?e?L??A??H??L??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??H?CH??X????A?L??H??A??H?U??A?L??H??A??H??p????A?L??H??A??H??????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?	L??H??A??H??x????A?
L??H??A??H??@????A?L??H??A??H???????A?L??H??A??H???????A?
L??H??A??H???????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H?U??A?L??H??A??H??h????A?L??H??A??H??(?????????H ????H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H?? ???H??(???H??0???L??8???L??@???HDžH???H?5YH??H???H?D$(???8?????D$H??0???H?D$??? ?????$H?}?????
?????????1҃???H??H?€H?5?H?]?H??1?A??H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H??P???H??X???H??`???L??h???L??p???HDžx???H?5?H??x???H?D$(???h?????D$H??`???H?D$???P?????$H??A???K?F????GH?
$&Hc?H????????HD?H?5?H?]?H??1?A??H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H??????H??????H??????L??????L??????HDž????H?5?H??????H?D$(?????????D$H??????H?D$???????????H?E?H?A? A??H?E?H??.H?E?H??"H?E?H??H?E?H??
H?E?H?A?A???H?E?H??=H?E?H??1H?E?H?A?A??H?E?H??
H?E?H?A?A? ?vH?E?H?^H?E?H?RH?E?H?FH?E?H(?:H?E?H8?.H?E?H?"H?E?H ?H?E?H@?
H?E?H0A?A?H??#????tD??A??I9??tD?u?H?5?L?%??L?u?L??H??A??H??L??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??A?L??H??H??`???L??A??H?QH???????A?L??H??A??H??????A?L??H??A??H??0????A?L??H??A??H??X????A?L??H??A??H?U??A?L??H??A??H??p????A?	L??H??A??H??????A?
L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H???????A?
L??H??A??H??x????A?L??H??A??H??@????A?L??H??A??H?? ????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H???????A?L??H??A??H??(?????????H ????H?E?H?HH??H??HI?H??Hc?????H?????HDž???H?????D???M?H?????H?? ???HDž(???H?5H??(???H?D$(????????D$H?????H?D$????????$L????????ȃ??????1҃???H??H?€H?5?L??1?A??H?E?H?HH??H??HI?H??Hc?????H??0???HDž8???H??@???D???M?H??H???H??P???HDžX???H?5JH??X???H?D$(???H?????D$H??@???H?D$???0?????$L???w????A?????H?
?Hc?H?????(??????HD?H?5?L??1?A??H?E?H?HH??H??HI?H??Hc?????H??`???HDžh???H??p???D???M?H??x???H??????HDž????H?5rH??????H?D$(???x?????D$H??p???H?D$???`????#???L??L????H?XH??HI?H??L??H??H??L??`???I?I??H?E?H?8???I9??fH?5?L?u?L??L??1?A??H?E?H?HH??H??HI?H??H??p???H??0???H??????H??????H?????HDž??? H?????HDž???H?5?H?????H?D$(????????D$H?????H?D$?????????$L???KL??P???I????H?]?H???A? ?H?E??$??@????vH?E?H???H?E?H??H?E?H??H?E?H??H?E?H?H?E?H ?H?E?H(?H?E?H0?H?E?H8?H?E?H@?vH?E?HH?jH?E?HP?^H?E?HX?RH?E?H`?FH?E?Hx?:H?E?H??.H?E?Hh?"H?E?Hp?H?E?H??
H?E?H?H?H?5?L?=??L?e?L??A??H??L??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??A?L??H??H??`???L??A??H?5H???????A?L??H??A??H??????A?L??H??A??H??0????A?L??H??A??H??X????A?L??H??A??H??p????A?L??H??A??H??8????A?	L??H??A??H??????A?
L??H??A??H??x????A?L??H??A??H??@????A?L??H??A??H?? ????A?
L??H??A??H???????A?L??H??A??H???????A?L??H??A??H???????A?L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H???????A?L??H??A??H???????? ???Hc?H?5?L??1?A??H?????H?HH??>H??HI?H??H?M?H?Q?H??~H??HI?H??Ic?H??????H??????H??????HDž?????HDž????HDž????H?51H??????H?D$(?????????D$H??????H?D$?????????$L??A??H?Ę
[A\A]A^A_]?H?5???H?]?H??1?A??H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H??????H??????H??????L??????L??????HDž????H?5lH??????H?D$(?????????D$H??????H?D$??????????????`????hH??`?????WH??(????IH?]?H??Hc?P???H?E?A? A??????H?5???L??1?A??H?E?H?HH??H??HI?H??Hc?????H??????HDž????H??????D???M?H??????H??????HDž????H?5u
H??????H?D$(?????????D$H??????H?D$????????&???H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H?????H?????H?? ???L??(???L??0???HDž8???H?5?H??8???H?D$(???(?????D$H?? ???H?D$??????????H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H??????H??????H??????L??????L?????HDž???H?5KH?????H?D$(?????????D$H??????H?D$????????????H?E?H?HH??H??HI?H??H?? ???H??@???H??x???H??@???H??H???H??P???L??X???L??`???HDžh???H?5?H??h???H?D$(???X?????D$H??P???H?D$???@????X???H?E?H?HH???H?H??H??H?? ???H??@???H??x???H??p???H??x???H??????L??????L??????HDž????H?5#H??????H?D$(?????????D$H??????H?D$???p????????H??x???H?U?H?H??H??H	?H?? ?$H?H?}??H?]?H???????H?E?H?HH??H??HI?H??Hc?????H??????HDž????H?????D???M?H?????H?????HDž???H?5W
H?????H?D$(????????D$H?????H?D$????????:???H?E?H?HH??H??HI?H??Hc?????H??????HDž????H??????D???M?H??????H??????HDž????H?5?	H??????H?D$(?????????D$H??????H?D$???????????H?E?H?HH??H??HI?H??Hc?????H?? ???HDž(???H??0???D???M?H??8???H??@???HDžH???H?57	H??H???H?D$(???8?????D$H??0???H?D$??? ???????H?E?H?HH???H?H??H??Hc?????H??P???HDžX???H??`???D???M?H??h???H??p???HDžx???H?5?H??x???H?D$(???h?????D$H??`???H?D$???P???????H?E?Hc?????H??????HDž????H??????D???M?H??????H??????HDž????H?5,H??????H?D$(?????????D$H??????H?D$???????????H?È??H?Ð??H?Ø?H?à?H?è?H????H??????@????bH?]?H??P?jH??X?aH??`?XH??h?OH??p?FH??x?=H?À?4H?ð?+H?ø?"H????H????H????H???L?}?H?H?5?L?5??L??A??H??L??H??H?U?H?M?E1?A??A?L??H??H??????H??????A??A?L??H??H?U?H?M?A??H?pH??X????A?L??H??A??H??p????A?L??H??A??H??8????A?L??H??A??H??????A?L??H??A??H??@????A?L??H??A??H???????A?L??H??A??H???????A?	L??H??A??H???????A?
L??H??A??H??P????A?L??H??A??H??H????A?L??H??A??H?U??A?
L??H??A??H??h????A?L??H??A??H?5X? L??1?A??H??x???H?HH??>H??HI?H??H?M?H?Q?H??~H??HI?H?? ???H??@???H??H??????H??????H?????HDž????HDž???HDž???H?5?H?????H?D$(????????D$H?????H?D$???????????1??u?H?? ???H??@???H?U?H??????H??????H??????L??????L??????HDž????H?5^H??????H?D$(?????????D$H??????H?D$???????????H???
??H?5=?H?V??H??1??????H?=?H?P???1??????H?=?H??HH?
>???1?????H?=ʗH??HH?
4???1?????H?=??H?HH?
??L1??y???H?=??H?)??k1??_???H?=n?H?DHH?
???U1??>???H?=M?H?#HH?
?|?1?????H?=,?H?HH?
???1??????H?=?H??GH?
??01??????H?=?H??GH?
???11?????H?=ɖH??GH?
??21?????H?=??H?~GH?
???l1??x???H?=??H?]GH?
??m1??W???H?=f?H??H?BH?
x???1??????)??H?5کH?L??D??I??1??????H?=??H?C??1??????H?=ސH?C?1?????H?=ĐH?e??h1?????H?=??H??AH?
Ӧ??1??z???H?=??H?_AH?
R???1??Y???H?=h?H?>AH?
y???
1??8???H?=G?H?AH?
}???
1?????H?=&?H?KB?{
1??????H?=?H?1B??	1??????H?5̧?L??1?????H?5Χ?1?????H?=ɏH?ߧ??
1?????H?=??H??@H?
??B1?????H?=??H?d@H?
ǧ?(1??^???H?=m?H??A?1??D???H?=S?H?xA?O1??*???H?=9?H?^A??	1?????H?=?H?DA??	1??????H?=?H????`1???????{P????H?5??H???D??I??1?????H?=ÎH??@?O1?????H?5???L??1??d???H?5???1??Q???H?=??H?????
1??W???H?5???1??$???H?=S?H????w1??*???H?=9?H??H?
????1??	???H?=?H????	1??????H?5????1?????H?=?H?????1?????H?=̍H????1?????H?=??H??>H?
????1?????H?=??H?g>H?
???1??a???H?=p?H?ߢ??1??G???H?=V?H?,>H?
????1??&???H?=5?H?>H?
????1??????P~???}??????A????}???}???}??????]???????????É??????A???????????????????????????????2???U???????????????B???????????????P~??P~?????????????????????????????B???????C???????????????%??????;???????????????????????3??????????՛??????????Nj?????????x???????????????????????ʈ?????????p???|???????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????%???4??????@???L???X???d???p???|???????????????????????????????1??????'???6???S???S???E???T???c???S???r???????????????????S??????????????????????????????????S???S???S???S???S??????????:???U???a???????????m???y????????????????????????????????????????????????'???3???????K???????????????????????W???|??????????,???????????????=???????J???=???????J???B???W???q???z????????????????????????????????????????'???????3???????????????????????????????????????????????????K???	???x?????????????????????????????????????????????????????,???5???>???G???P???Y???b???k??????????????????t???????_???????????????????????????&??????????&???????????????q???F???6???&???M???????h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h???h????????????y??q???q????????????ky??????????????????????UH??SPH??H??H???H??t??t"H???H??t?:tH???H??t?>u	1?H??[]?D?CPI??Ew??L?
?Oc?M?A??H??[]??????????H??[]Ë??????u????s??????u???t???u??:?
H?{(?????H??[]Ã:?n????>?e???H??W???????H????????H???sH???H??[]?-????;??H??[]Ã??????֐???U?????????????????????9???9??????9???9??????D???????????????????????????D??????D???u???u????????????U???U????????????????????????????????D???????????????????????????????????????????????????????????????????????????????????????fff.?UH??AVSI??H??????H???H??HD?H?IH?IX?q??~IH??H??H?1?????H?=D?H??$H?
?X??1??????H?=#?H??$H?
?X?@1??????H?=?H??$H?
?T?C1?????H?=?H??$H?
?X?D1??????H??H?}??9MH????L?I??L????L?@I???TI???OI??M?uI?EM??uM???L???LL???MM???I???6I??L????L?I??H????????LH???????H?H??u	I?L???PL????L?MH????LH???$LH????????d???????????????????????????????????????????????????????????????????????????????????????????????????????????????*???????????????????d???d???d???d???UH??AWAVAUATSPI??L???H????FP??uFH?CH?E?M?gM?oL???!?????t&H????????t?;uI?? |I?? |	?H?}?mA?GP??ubI????8uVI????8uJL?????????t>H?????????t2L????????t&H???????????uH??H??[A\A]A^A_]?l???1?H??[A\A]A^A_]?ff.?UH??H??]?Ӄ??UH??H?=$i????UH??SPH??H???H??H?H??X?JH?{?JH?{?QJH??H??[]?UJUH??SPH??H?X?H??H?H??X?_JH?{?hJH?{?JH???JH??H??[]?J?UH??SPH???JH??H??[]?JH???|???fff.?UH??AVSH??H??L???L;??}?f?H???I??H??H???H??I??H??H?????I??L;??|?H???IH??[A^]??H????IL?u?L???IH??L???XIH?}??+I??I??H??H?}??I??IH????HH??????UH??AVSH??H??H?}??.IH?3H?H?8?KH?CH?{H{?tH?H?D???L?3H?M??tL????HL???%IH???I1?H??[A^]?H??H?}??H???nH?UH??AVSH?H?H??t+L?3H?M??tL???dHL????HH??[A^]?H[A^]?UH??AVSH?? H?k?H?H?E?H?BH??HI?H?????SH????H??|1???y?OL????????
?T???O??W???}%?O??}-?Tff.?M??I??E1??6Dġz????????a???y?ģy4^I??I?I??I?????|r???|z??A|B??A|J??A|I`?A|A@??|y ??|1??{r???T???y????_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???zz???T???_???z:??T???_???^???W???.?u???????^??????fff.?A??E1??E??A?????D?Ӄ?D?s????????H??H?H??????I??I?I??????ġx(?H?H?E?H??H??????H???|I??H??H?FH??HI?H?????_H????H???HM?H??????H?RH??????H??H??????1?L??@???H??????H??????ff.?H??????H??????L?$?L???????? L??L????w?????H??????I?<? H??R????????H??????I?<? H??d????????I?<? H??v?????????oH??@?????R???f??????f????????d???f????????v???f????????n?B?????y"?T?????n?f?????l???~?x?????yX???y???n?F?????}8???~?X?????}X???}? ??n?j?????}Y???}????}X?|?????}????????n?J?????q"?\???????????n?n?????yXU???l???y???n?N?????}8???}X?`?????}? ??n?r?????}Y???}????}XM???}????????? ????????????|H??8???I?G@????????|G I??HI??I???7???H??????H???????Hc?H;??????????H??????H?AH??HI?H?
??H?	H;M?u H??H?H??H??[A\A]A^A_]??w???w??=ffff.?UH??AWAVAUATSH??H??????H?.?H?H?E?H??H??????H???I??H??H?FH??HI?H??????H????H???HM?H??????H?RH??????H??H??????1?L??@???H??????H??????ff.?H??????H??????L?$?L???????? L??L????w?????H??????I?<? H??R????????H??????I?<? H??d???????I?<? H??v?????????(%X??@?????R???f??????f????????d???f????????v???f?????????B??????T??????f??????x?????m???}???????????W??????????J??????\??????n?????]???m???}???????????W???? ???????????|G H??8???I?G@?????????|I??HI??I???????H??????H???????Hc?H;??????h???H??????H?AH??HI?H?
?H?	H;M?u H??H?H??H??[A\A]A^A_]??w???w?K;fffff.?UH??AWAVAUATSH??XH??????H???H?H?E?H??H??????H????I??H?AH??HI?H??????I??J??H????????H???HM?H??????I??1?L??@???@H??????H??????H??H???????H??????? H??L????w?f???N?,#? L??H??R????N???M? L??H??d????7???M? L??H??v???? ???M? L??H?u?????M? L??H?u??????M? L??H?u??????M? L??H?u????????(%?
??@?????R???f??????f??????H????????d???f????????v???f???????E?f???????E?f???????E?f???????E?f?????????B??????T??????f??????x?????m???}???????????W??????????E???M???U???]???m???}???????????W???????????J??????\??????n?????]???m???}???????????W?????????E???M???U???]???m???}???????????W???? ?????|Gp?????????|????????|G`?????????|G@?????????|G I?ǐH??H???????H???????????Hc?H;??????b???H??????H?AH??HI?H?
i?H?	H;M?u H??H?H??H??X[A\A]A^A_]??w???w??7?UH??AWAVAUATSL?E?H?MЋU?G??IǍJ??Iʃ???????????HcЉ?H?E???H?E?H?E?L?HH?U?H??H??H?E?H?E?H??H?E?1???o?D??o
gH?u?H??H??H?M?H?E?H?E?H??H?M?L?$???W?L?m?L?M?E1ҐK??L??H??J?QH?U??
A??A?t?A?|?A?D?L?[???z???a!???a!? ??a!?0??y$??DA?|
?E?D
A?\
?A?T
A?t
E?|
A?D
E?\
E?t????yn???Q l????Q ,???Q l???q???????y!???????y!???n???yX???A@???yn???yX???A@?????A?|????n???I t????I t???I t???r???q???????y!???????y!??yn??ByX???9@??yn??ByX???9@???????r?A?T????n???A |????A |???????A t???q???????y!???????y!??yn??ByX???9@??Ayn??ByX???9@???????r?A?T????n???A |????A |???A |?Źq??9???By!???????y!??yn??ByX??B1@??Ayn??ByX???1@?Ź????r???????????[???Y???Y??H??H???.???I??I??HI??"L;U??????H?u?H?E???H?E?H??L?M?LM?H;E??c??????H?Q??ȃ?H??s1??M???H?~p1?????fff.???G???G???G???G???G???G???G?H????H??H9?u?H??t%H??H?H??1?????fD??H??H9?u?[A\A]A^A_]??UH??AWAVAUATSH??hH?M??UH?A?H?H?EЍG??IǍJ??Iʃ????????$??H???H?M?H?E???H?E?1???W???o
?@??o?H?u?fDH??H??H?H?M?H?E?H?E???)E?H??H?M?H??H?E???(]?1?ffff.?H??L?M?M??????hX????hp????h?????h?????h?????h?????h??~???h	?t???h?j???h1?`???hJ?V???hX?L???hg?B???h??8???h??.???h??$???h?????h?????h?????h
?????h?????h%?????h4?????hC?????hR?????hm?????h}????h?????h?????h?????h?????h?????h??z???h??p???h??f???h??\???h
?R???h?H???h%?>???h5?4???hD?*???hS? ???hb????hq????h?????h??????h??????h??????h??????h?????h+?????hB????hO????h^????h}????h?????h?????h?????h??v???h??l???h	?b???h3	?X???hN	?N???hk	?D???h?	?:???h?	?0???h?	?&???h?	????h?	????h?	????h?	?????h	
?????h
?????h'
?????h6
?????hE
?????hV
?????he
????hu
????h?
????h?
????h?
????h?
????h?
?|???h?
?r???h?
?h???h?^???h?T???h&?J???h7?@???hK?6???ha?,????????@?*BL?'7=??#?ٿ@F@?I@@@?@?@K;???@?r1??????B?+= 3?*>????@C ? A???A??? (08???ff@????=o?:0C0E0C0E??'7??'7??8fff??<??'7do?:fff?w??w?+2??'7o?:?????????????????????>?>?>?4??? ????>?????C%C?	 @? @	?+# @?T??W??[??J?_dhl????`???????

 !?A??pA???A?A?B???>???????????@@?;??L=fff?}?&?@????B@???=|B?@?@??A@????A????>>????@@w?+2??L>????X9??̼?+??`?????`????3ff???B???|????̾??????L???̽???>???>??????????????????0000000000000000                ????????????????00000000????????	

????????????????
QQQQQQQQ0000000000000000????????????????????????
&5EYq????????????@(0?????????????????	

@????????????????	

	?????`?`???`????>>?>?`?????`???`????????????????????	

	


	

	
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????                                ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????                                ????????????????????????????????????????????????????????????????	

	

  ?????????????????????????????????????߿?????߿?????߿?????߿???????????????????????????????? @? @?
 @? @?
?????߿?????߿?????߿?????߿
	
????????????????????????????????				????????????????								















								















????????????????????????????????                                ????????????????







?	
	
	
	




?	
||||||||||||||||	Q?+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++?????	
????????????!"?$??'(??+?-.?0??3?56??9:?$>,>,$$,>$>,>,,>>,>$>$$$$>,$>$,>$,>,,,,,4$44>$>4>$>4>$>$,>4$44$,$,$,$,4$,>,,4>$>4$,4>4>>>$,,$>$>,$,$,>,$,$>,>>4>,$>,,4>$$4$,,>$>$$>$,4,,,,,$44444>4>$$>$,$>$,$>,$$>$$>$$$4$44$>$,$$$$$,$$$4$$,,$$,$>,$,>$>$>$>$,$,>,,4,4,,,,$,,>,,,,$,$,>$,>$,,,,,,4,$>,$>,$4$$44$4$44444>4$44444$$$4,,4,,444>4>4>,>>>>>,>4>$>>,$>,>>,>>4>$>$$>,>,>$,>4>	
				

				


				
		
														
			








	
			
	


		
			
			
									
					
	

		

	
	
	
			
							

												







					
		

							
				
		
			


	
																																	
																											
	
		
	

												

	
		
					
		
	
	









	


	
	





	

	
	
		

	


	




	



	
		
				
						

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
&5EYq????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
 "(*ADPXad????@??"?!$@BH`???? Fi??	@??(ADPR?	@	

!@`??? PZ?$E %I?b@??Q  
 D a ? ? )!H!""$$$@$V$%A%d%?&( (?(D*@@@@!@$@@@H@V@`@?@?@?@A AaA?A?ABBHBVBhBDD D?D?DE$EFHHH@HEHIXIaI?IEJ?JPPPP P?P?PQBQ?Q?R?T?T
UVTVXXXdX@YZ``@`h`aUab`bddee?eBh??
?A?????@??????@?`??F???	?@?`??????$?@??????E??"?D?Q??? ??P???	???P??
 "%(ADFIPRUXad????????	!$@BEHQT`h??? ADPU??	!$@BEHQTV`??? ADPa?&@B?
 %ADPX???			@	?	?	
 
(
?
?
	!$@BEHQT`j??? ADP???@` ADIPd?@I@T?fQ?    
     A D P ? ? !!!@!H!e!"""?"?"$$$)$@$%A%R%?%&&?&((
( (U(?(?(h)?)* *?*?*?*@@@	@@@@@!@$@@@B@E@H@J@Q@T@`@e@?@?@?@AAAAAA AAADAPA?A?A?ABBBB)B@BDDDDDDD DADDDPD?D?DEEE$E@E?EF
FDFPFHHH@HEHTHbHIIDIPIiIJPPPPPP P(PAPDPPP?PQQQQ@QBQRDR?RTTT!T@T`T?T?TUU?U?U!VhV?VXXAXPX?XY@YBY?Z```@`T`b`?`?`a$bJb?bdde@eEe?ehjh%ijTjbj?????? ?*?A?D?P?????????????@?Q?Y?? ??????????????@?`????D????j???%?Z????????"????????????@?V????"?d?V?????D?P?X?)?????A?Q???I??`????
? ?*???Q?Y??????*?????@???e???
? ?"?(??????????(?*?????
 "(*EQTVe?????????%AFIRUZadfh?????
 "(*EQYdi???????????%AIUZde???)@EJPQTUVY`behj??????????ADPRUX`afi????
 "(*EQVe?????????				$	%	A	P	Q	U	a	d	i	?	?	?	?	?	





 
"
(
*
E
Q
Y
a
e
?
?
?
?
?
?
?
?
?
?
$%ADPUXadei?????	!$)EJPQRTUVY`e?????%@FIRUXZdf?????	!&AEFHJQTUVYbeh????????????
 "%(*ADEFQRTUVYZadefi????????????????!&@BDEHJQUVXYadehij??????%ADFIPUXZ`adfi????!%BDEHQTUVYZ`ej????????	$&DFIPRUXafi????   
    " % ( * E Q Y a e ? ? ? ? ? ? ? ? ? ? !!!!%!B!D!I!U!X!Z!a!d!e!f!?!?!?!?!?!""
""" """("*"E"Q"V"Y"e"?"?"?"?"?"?"?"?"?"$$$$%$D$E$F$I$R$U$X$Z$f$?$?$?$?$?$?$	%%!%)%@%E%H%Q%T%U%Y%b%e%h%?%?%?%?%?%?%?%?%?%?%&&&&%&A&I&U&`&a&i&?&?&?&?&(((
(( ("(((*(E(Q(T(e(?(?(?(?(?(?(?(?(	))))%)F)I)R)U)a)d)f)i)?)?)?)?)?)?)***
* *"*(***E*Q*V*Y*e*?*?*?*?*?*?*?*?*?*@@@%@I@R@U@X@Z@a@d@f@?@?@?@?@AAAA	AAAAAA!A&A)AEAHAJAQATAUAVAYAZAeAhAjA?A?A?A?A?A?A?A?A?ABBBB%BABRBUBZBdBiB?B?B?BDDD)DEDHDJDQDTDUDVDaDbDeDhDjD?D?D?D?D?D?D?D?D?DEEE
EEEEEE E%E*EAEDEEEFEIEPEQETEUEVEXEYEaEdEeEfEiE?E?E?E?E?E?E?E?E?E?E?E?E?EFF	FFFFF!F$F)F@FBFEFHFPFQFRFUFVFYFbFeFhF?F?F?F?F?F?F?F?FHHHH%HBHIHPHUHXHaHdHfHiH?H?H?H?H?H?HIII
IIIII!I$I&I@IEIJIQIRITIUIVIYI`IbIeIfIjI?I?I?I?I?I?I?I?I?I?IJDJFJIJUJXJZJdJiJ?J?JPPPP	PPPP!P$P)P@PEPHPQPTPUPVPYPePhP?P?P?P?P?P?P?P?PQQ	Q
QQQQQQQ Q%Q&Q(Q*QAQDQEQFQIQPQQQRQTQUQVQXQYQZQaQdQeQfQiQ?Q?Q?Q?Q?Q?Q?Q?Q?Q?QRRRRR!R$RBRERJRQRTRURVRYRbReR?R?R?R?R?R?R?RTTTTTTTT!T%T(T*TATDTETFTITJTPTQTTTUTVTXTYTZTaTbTdTeTfTiT?T?T?T?T?T?T?T?T?T?T?T?TUUUUU	UUUUUUUUU!U$U%U&U)U@UAUBUDUEUFUHUIUPUQURUTUUUVUXUYUZU`UaUdUeUfUhUiUjU?U?U?U?U?U?U?U?U?U?U?U?U?U?U?U?U?UVVVVVV	VVVVVV V!V"V$V%V&V(V)VAVEVFVHVIVJVPVQVRVTVUVVVXVYVZVaVdVeViV?V?V?V?V?V?V?V?V?V?V?V?V?V?VXXX	XXXX!X*XEXHXJXQXTXUXVXXXYX`XbXdXeX?X?X?X?X?X?X?X?XYYY
YYYYYY%YAYDYEYFYIYPYQYRYTYUYVYXYYYZYaYdYeYfYiY?Y?Y?Y?Y?Y?Y?Y?Y?Y?YZZZZ Z%Z&Z)ZEZHZIZQZUZVZXZYZbZeZhZjZ?Z?Z?Z?Z?Z?Z?Z?Z````%`D`P`U`V`X`Z`a`d`f`i`?`?`?`aaa	aaa!a"a&a)aEaIaQaUaVaYaeafaja?a?a?a?a?a?a?abbb@bAbFbUbVbXb`b?b?b?b?bddddd!d&d)d@dBdEdHdJdQdTdUdVdYdZd`dbded?d?d?d?d?d?d?d?d?d?d?d?d?dee
eeeeeDeEeFeIePeQeTeUeVeYeaedeeefeie?e?e?e?e?e?e?e?e?e?e?e?ef	ff f&f(f)f@fEfHfJfQfTfUfVfXfZf`fefhf?f?f?f?f?f?f?f?f?f?f?f?fhh%hAhRhUhZhahih?h?h?h?hiiii!i$i&i)i@iAiEiFiHiQiTiUiViYi`ieiji?i?i?i?i?i?i?i?ijjjAjDjIjPjUjXjZjdjejij?j?j?j?j?j???
? ?"?(?*?E?P?Q?T?V?Y?e????????????????????????%?A?D?I?P?R?U?V?X?Y?d?f?i????????????????
?? ?"?(?*?Q?T?Y?e?????????????????????A?D?Q?U?Z?a?d?i??????	????&?)?@?A?E?H?Q?T?U?V?Y?Z?e?f?h?j??????????????????????%?A?D?I?J?P?U?Y?Z?a?f?j????????????
?? ?"?(?*?A?E?Q?T?Y?e?i????????????????????????%?A?D?F?I?P?R?U?Z?a?d????????????
?? ?"?(?*?E?Q?T?V????????????????????????%?A?F?I?U?X?Z?i?j????????????????	?????!?$?&?)?@?E?P?Q?T?U?V?Y?b?e???????????????????????%?D?F?I?P?R?U?X?f?i???????????????&?@?J?Q?T?U?V?X?Y?`?a?b?e????????????????????
???????!?%?)?*?A?D?E?F?I?P?Q?R?T?U?V?X?Y?Z?a?d?e?f?i???????????????????????????????????? ?&?)?E?H?I?Q?R?U?V?Y?e?h????????????????????????%?A?F?P?R?U?V?Z?d?e?????????????	?????? ?!?$?&?@?B?E?H?J?Q?T?U?V?Y?b?e?f?j???????????????????%?D?F?I?P?U?X?a??????????????
?? ?"?(?*?E?Q?T?V?Y????????????????????	??????F?I?Q?U?X?Z?a?d?????????????
???"?(?*?E?Q?V?Y?e????????????????????%?A?D?P?T?U?X?Z?a?e?f?h?i????	?????&?)?B?E?Q?T?U?V?Y?e?j?????????????????????!?%?D?F?J?R?U?V?X?`?b????????????????????
? ?"?(?*?Q?T?V?Y??????????????????????!?%?A?P?U?Z?a?f?i????????
? ?"?(?*?Q?T?V???????????????????
 "%(ADFIPRUXadfi?????????	!$@BEHQTVY`eh??????? *ADFIPU?????	!$&)@BEHJQTVY`be?????????
 %(ADFIPRUXad???????	@EHQT`??? %*ADFIPRUXad????						!	@	E	H	Q	T	`	?	?	


"
(
*
P
?
	!$&@BEHQTVY`beh????????
 "%(ADFIPRUXad??????	!$@EQT??? %(ADFIPRUXad???????	!$@BEHQT`??? ADP??	!@BEHQT`?? ADPi?@V          % * A D P R U d ? ? ? ? !!!!!!!@!B!E!Q!T!`!?!?!?!"
"""("*"D"P"?"?"?"$$$	$$$$!$$$@$B$E$H$Q$T$`$?$?$?$%%%%% %A%D%P%f%?%&&&@&Y&((((A(D(P(?(?()))?)
*"*d*?*?*@@@	@@@@@@!@$@&@@@B@E@H@J@Q@T@V@Y@`@b@e@?@?@?@?@?@?@?@AAAAAAAA A"A%AAADAFAIAPARAUAXAaAdA?A?A?A?A?A?A?ABBBBBB$B@BEBHBQBTB`B?B?BDDDD
DDDDD D"D%D(DADDDFDIDPDRDUDXDaDdD?D?D?D?D?D?D?DEEE	EEEEE!E$E@EBEEEHEQETE`EjE?E?E?EFFFFFF FAFDFPF?F?FHH	HHHHH!H$H@HBHEHHHQHTH`H?H?HIIIIII IAIDIPI?I?IJJJ@JPPPPPPPP P"P%P(PAPDPFPIPPPRPUPXPaPdP?P?P?P?P?P?PQQQ	QQQQQ!Q$Q@QBQEQHQQQTQ`Q?Q?Q?QRRRRR RARDRPRiR?RTTT	TTTTT!T$T@TBTETHTQTTT`T?T?T?TUUUUUU UAUDUPU?UVVV&V@VXXXXXX XAXDXPXZX?XYYY@YZZ?Z?Z```````!`$`@`E`H`Q`T```?`?`aaaaaa aAaDaPa?a?abb@bVb?bddddd dAdDdPd?deee@eJehe?ef?fhhheh?hi*iBj?j??????? ?%?A?D?P?R?U?X?a???????????	?????!?$?@?B?E?H?Q?T???????????
???A?D?P????	?????!?@?B?E?H?Q?T?`????????????? ?A?D?P????????)?@?????A?D?P?????@?e?"?X?Z???????	?????$?@?B?E?H?Q?T?`???????????A?D?P?Z????@????????? ?A?D?P????????@??????F?d????&?@????I?R?????
??"?*?A?D?P?????@?e??
?"?(?*????????????@???????Q?
?(???T????
? ?"?(?????	";=ACHJQUXZalx??????????????????$/;=AGZj???????
'(@BIPR?????????????(PTfy???	"ACEHJQXswx??????????????+CWa|????
(5:@BPYdf????????':@FRm?????+/|???????	)	4	U	c	x	?	?	?	?	

!
8
@
F
V
m
?
?
?
?
?
:BY???$&4Qq????$
E
j
?
?
?
*V`???????!@BT?	
 "%')+029<?@ABDHIMPSWY]dquz???????????????????????????????? #)8BDPRV[aegv{???????????????	
,.1:@ACFHLQX[ahjx~????????????????????????
"&(,AHKQXZi??????????????
!#%(*78;=@BHKORUY\bi???????????????????????!:=DIR_`kx????????????	
"$')39ACELQS`pz~??????????????????	*04AHJUZdn{???????
!(8BGIKRX]cim?????????????????				 	9	E	G	Q	r	?	?	?	?	?	?	?	?	



 
$
'
*
6
<
A
C
E
J
Q
Z
z
?
?
?
?
?
?
?
?
?
?
?
?
?
?
&JVik????	
0@PWt??????????
#
2
@
C
\
p
?
?
?
?
 ,2BITce???????????(Rb???																































								















`?>?????`??>????????00000000???? @?P???.ANSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEE????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????	

????????%s:%d: GGML status: error (failed to allocate memory)GGML status: error (operation failed)GGML status: successGGML status: warning (operation aborted)GGML status: unknown/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml.cGGML_ASSERT(%s) failedtype < GGML_TYPE_COUNTggml_numa_init: NUMA already initialized
 - ggml_object: type = %d, offset = %zu, size = %zu, next = %p
%s: objects in context %p:
ggml_print_objects%s: --- end ---
NONEwtype != GGML_TYPE_COUNTctx->mem_buffer != NULL((uintptr_t) (ctx->mem_buffer))%GGML_MEM_ALIGN == 0tensor->datafatal errortensor->nb[0] == sizeof(int8_t)tensor->nb[0] == sizeof(int16_t)tensor->nb[0] == sizeof(int32_t)tensor->nb[0] == sizeof(ggml_fp16_t)tensor->nb[0] == sizeof(ggml_bf16_t)tensor->nb[0] == sizeof(float)tensor->op == GGML_OP_UNARY%s (view)ggml_is_matrix(a)ggml_are_same_shape(a, b)ggml_can_repeat(a, b)ggml_can_repeat(b, a)dim >= 0 && dim < GGML_MAX_DIMSa->ne[d] == b->ne[d]ggml_can_mul_mat(a, b)!ggml_is_transposed(a)a->op == GGML_OP_MUL_MAT!ggml_is_transposed(as)ids->type == GGML_TYPE_I32as->ne[3] == 1b->ne[3] == 1ids->ne[2] == 1 && ids->ne[3] == 1ids->ne[1] == b->ne[2]as->ne[0] == b->ne[0]ids->ne[0] % b->ne[1] == 0ggml_can_out_prod(a, b)%s (copy)ggml_nelements(a) == (ne0*ne1*ne2*ne3)%s (cont)ggml_is_contiguous(a)ggml_nelements(a) == ggml_nelements(b)%s (reshaped)ggml_nelements(a) == ne0ggml_nelements(a) == ne0*ne1ggml_nelements(a) == ne0*ne1*ne2ggml_nelements(a) == ne0*ne1*ne2*ne3axis0 >= 0 && axis0 < GGML_MAX_DIMSaxis1 >= 0 && axis1 < GGML_MAX_DIMSaxis2 >= 0 && axis2 < GGML_MAX_DIMSaxis3 >= 0 && axis3 < GGML_MAX_DIMSaxis0 != axis1axis0 != axis2axis0 != axis3axis1 != axis2axis1 != axis3axis2 != axis3%s (permuted)%s (transposed)a->ne[2] == b->ne[1]b->type == GGML_TYPE_I32ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32ggml_is_matrix(c) && (a->ne[0] == c->ne[0])a->ne[1] == 1ggml_is_vector(b)a->ne[2] == b->ne[0]ggml_is_matrix(b)a->ne[3] == 1p0 == 0d0 == 1a->ne[2] == b->ne[2]a->ne[1] == b->ne[1](!is_2D || OH > 0) && "b too small compared to a"(OW > 0) && "b too small compared to a"a->ne[3] == b->ne[2]stop > starta->ne[0] >= kggml_can_mul_mat(k, q)ggml_is_contiguous(mask)mask->ne[2] == 1mask->ne[3] == 1mask->ne[1] >= GGML_PAD(q->ne[1], GGML_KQ_MASK_PAD) && "the Flash-Attention kernel requires the mask to be padded to GGML_KQ_MASK_PAD and at least n_queries big"maska->op == GGML_OP_FLASH_ATTN_EXTTODO: adapt to ggml_flash_attn_ext() changesggml_is_3d(sx)ggml_is_matrix(c)sx->ne[1] == d_innern_t >= 0ggml_is_contiguous(s)ggml_is_contiguous(x)ggml_is_contiguous(dt)ggml_is_contiguous(A)ggml_is_matrix(A)ggml_is_3d(B)ggml_is_3d(s)B->nb[0] == ggml_type_size(B->type)C->nb[0] == ggml_type_size(C->type)ggml_are_same_shape(x, dt)ggml_are_same_shape(B, C)s->ne[2] == n_seqsx->ne[0] == d_innerA->ne[0] == d_stateA->ne[1] == d_innerB->ne[0] == d_stateB->ne[1] == n_seq_tokensB->ne[2] == n_seqsa->type == GGML_TYPE_F32qh == kh2*MAX(qh, kh) - 1 == a->ne[1]ggml_is_contiguous(k)ggml_is_contiguous(v)ggml_is_contiguous(r)ggml_is_contiguous(tf)ggml_is_contiguous(td)ggml_is_contiguous(state)k->ne[1] == 1v->ne[0] == 1 && v->ne[1] == S && v->ne[2] == H && v->ne[3] == n_tokensr->ne[0] == 1 && r->ne[1] == S && r->ne[2] == H && r->ne[3] == n_tokenstd->ne[0] == 1 && td->ne[1] == S && td->ne[2] == H && td->ne[3] == n_tokensggml_nelements(state) == S * S * H * n_seqsggml_is_scalar(c)a->flags & GGML_TENSOR_FLAG_PARAMggml_are_same_shape(a, grad)alpha > 0.0fbeta1 >= 0.0f && beta1 <= 1.0fbeta2 >= 0.0f && beta2 <= 1.0feps >= 0.0fwd >= 0.0f && wd <= 1.0fk != GGML_HASHSET_FULLreplacements->set.keys[k] == NULLgf->n_nodes > 0gf->gradsnode->src[j]->type == GGML_TYPE_F32 || node->src[j]->type == GGML_TYPE_F16!node->view_src || node->op == GGML_OP_CPY || node->op == GGML_OP_VIEW || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_TRANSPOSEinsert_result != GGML_HASHSET_ALREADY_EXISTSdst->size >= src->n_leafsdst->size >= src->n_nodesdst->visited_hash_set.size >= src->visited_hash_set.sizedst->grads != NULLcgraph->grads != NULLnode->grad->buffernode->type == GGML_TYPE_F32ggml_is_scalar(node)cgraph->n_nodes + i >= 0i < cgraph->n_nodescgraph->size > cgraph->n_nodesrc == GGML_EXIT_SUCCESS || rc == GGML_EXIT_ABORTEDnode->src[0]->ne[3] == 1node->src[1]->ne[2] == 1node->src[1]->ne[3] == 1cplancplan->n_threads > 0cplan->work_size == 0 || cplan->work_data != NULLcplan requested more threads (%d) than available (%d)
%-16s %8x
magic%-16s %8d
versionleafsnodes%-16s %llu
eval%-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %16s %16s
TYPEOPNDIMSNE0NE1NE2NE3NB0NB1NB2NB3DATANAMEcgraph->leafs[i]->op == GGML_OP_NONEcgraph->leafs[i]->src[0] == NULLcgraph->leafs[i]->src[1] == NULL%-6s %-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %8s %16s %16s
ARGNTASKSDSTSRCwb%s: failed to open %s: %s
ggml_graph_export%s: failed to find tensor, arg = %d, node = %d
rbggml_graph_import%s: failed to create ggml context
%s: failed to read %s
%s: invalid magic number, got %08x
%s: invalid version number
%s: loaded leaf %u: '%16s', %9zu bytes
%s: loaded node %u: '%16s', %9zu bytes
=== GRAPH ===
n_nodes = %d
 - %3d: [ %5lld, %5lld, %5lld] %16s %s
xg n_leafs = %d
 - %3d: [ %5lld, %5lld] %8s %16s
========================================
wfpdigraph G {
  newrank = true;
  rankdir = TB;
yellowgreenlightbluewhite  "%p" [ style = filled; fillcolor = %s; shape = record; label="%s (%s)|(%s)|%d [%lld, %lld] | %s%d [%lld, %lld, %lld] | %s | %s"; ]
"; ]
pink  "%p" [ style = filled; fillcolor = %s; shape = record; label="CONST %d [%lld, %lld] | (%d%.1e, src %d}
%s: dot -Tpng %s -o %s.png && open %s.png
ggml_graph_dump_dotf->grad && "ggml_set_param must be called for at least one ancestor"opt-forward.dotopt-backward.dotggml_is_scalar(tensor)tensor->type == GGML_TYPE_F32imatrix != NULLstart % type_traits[type].blck_size == 0start % n_per_row == 0result == nrows * row_size%s: failed to open '%s': '%s'
gguf_init_from_file%s: invalid magic characters '%c%c%c%c'
%s: GGUFv1 is no longer supported. please use a more up-to-date version
%s: failed to read header
%s: array size is too large (%llu)
invalid type%s: failed to read key-value pairs
%s: duplicated tensor name %s
%s: failed to read tensor info
general.alignment%s: tensor '%s' of type %d (%s) number of elements (%lld) is not a multiple of block size (%lld)
%s: failed to initialize context
%s: failed to read tensor data
%s: failed to read the tensor data
key_id >= 0 && key_id < gguf_get_n_kv(ctx)ctx->kv[key_id].type == GGUF_TYPE_ARRAYctx->kv[key_id].type == GGUF_TYPE_UINT8ctx->kv[key_id].type == GGUF_TYPE_INT8ctx->kv[key_id].type == GGUF_TYPE_UINT16ctx->kv[key_id].type == GGUF_TYPE_INT16ctx->kv[key_id].type == GGUF_TYPE_UINT32ctx->kv[key_id].type == GGUF_TYPE_INT32ctx->kv[key_id].type == GGUF_TYPE_FLOAT32ctx->kv[key_id].type == GGUF_TYPE_UINT64ctx->kv[key_id].type == GGUF_TYPE_INT64ctx->kv[key_id].type == GGUF_TYPE_FLOAT64ctx->kv[key_id].type == GGUF_TYPE_BOOLctx->kv[key_id].type == GGUF_TYPE_STRINGctx->kv[key_id].type != GGUF_TYPE_ARRAYctx->kv[key_id].type != GGUF_TYPE_STRINGnested arrays not supportedtensorduplicated tensor nametensor not foundfailed to open file for writingf32f16q4_0q4_1DEPRECATEDq5_0q5_1q8_0q8_1q2_Kq3_Kq4_Kq5_Kq6_Kq8_Kiq2_xxsiq2_xsiq3_xxsiq1_siq4_nliq3_siq2_siq4_xsi8i16i32i64f64iq1_mbf16q4_0_4x4q4_0_4x8q4_0_8x8tq1_0tq2_0DUPADDADD1ACCSUBMULDIVSQRSQRTLOGSINCOSSUMSUM_ROWSMEANARGMAXCOUNT_EQUALREPEATREPEAT_BACKCONCATSILU_BACKNORMRMS_NORMRMS_NORM_BACKGROUP_NORMMUL_MATMUL_MAT_IDOUT_PRODSCALESETCPYCONTRESHAPEVIEWPERMUTETRANSPOSEGET_ROWSGET_ROWS_BACKDIAGDIAG_MASK_INFDIAG_MASK_ZEROSOFT_MAXSOFT_MAX_BACKROPEROPE_BACKCLAMPCONV_TRANSPOSE_1DIM2COLIM2COL_BACKCONV_TRANSPOSE_2DPOOL_1DPOOL_2DPOOL_2D_BACKUPSCALEPADARANGETIMESTEP_EMBEDDINGARGSORTLEAKY_RELUFLASH_ATTN_EXTFLASH_ATTN_BACKSSM_CONVSSM_SCANWIN_PARTWIN_UNPARTGET_REL_POSADD_REL_POSRWKV_WKVUNARYMAP_UNARYMAP_BINARYMAP_CUSTOM1_F32MAP_CUSTOM2_F32MAP_CUSTOM3_F32MAP_CUSTOM1MAP_CUSTOM2MAP_CUSTOM3CROSS_ENTROPY_LOSSCROSS_ENTROPY_LOSS_BACKOPT_STEP_ADAMWnonex+yview(x,nb,offset)+=y->xx-yx*yx/yx^2√xlog(x)sin(x)cos(x)ΣxΣx_kΣx/nargmax(x)count_equal(x)repeat(x)repeat_back(x)concat(x, y)silu_back(x)norm(x)rms_norm(x)rms_norm_back(x)group_norm(x)X*YX[i]*Yx*vy-\>view(x)x-\>ycont(x)reshape(x)view(x)permute(x)transpose(x)get_rows(x)get_rows_back(x)diag(x)diag_mask_inf(x)diag_mask_zero(x)soft_max(x)soft_max_back(x)rope(x)rope_back(x)clamp(x)conv_transpose_1d(x)im2col(x)im2col_back(x)conv_transpose_2d(x)pool_1d(x)pool_2d(x)pool_2d_back(x)upscale(x)pad(x)arange(start, stop, step)timestep_embedding(timesteps, dim, max_period)argsort(x)leaky_relu(x)flash_attn_ext(x)flash_attn_back(x)ssm_conv(x)ssm_scan(x)win_part(x)win_unpart(x)get_rel_pos(x)add_rel_pos(x)rwkv_wkv(k, v, r, tf, td, s)unary(x)f(x)f(x,y)custom_f32(x)custom_f32(x,y)custom_f32(x,y,z)custom(x)custom(x,y)custom(x,y,z)cross_entropy_loss(x,y)cross_entropy_loss_back(x,y)adamw(x)ABSSGNNEGSTEPTANHELURELUSIGMOIDGELUGELU_QUICKSILUHARDSWISHHARDSIGMOIDEXPBehavior may be unexpected when allocating 0 bytes for ggml_aligned_malloc!
unknown allocation errorinvalid alignment valueinsufficient memory%s: %s (attempted to allocate %6.2f MB)
ggml_aligned_malloctype >= 0 && type < GGML_TYPE_COUNTn_dims >= 1 && n_dims <= GGML_MAX_DIMSview_src == NULL || data_size == 0 || data_size + view_offs <= ggml_nbytes(view_src)%s: not enough space in the scratch memory pool (needed %zu, available %zu)
ggml_new_tensor_implobj_newggml_can_repeat_rows(b, a)ggml_is_quantized(a->type) || a->type == GGML_TYPE_F16 || a->type == GGML_TYPE_BF16ggml_is_scalar(b)ggml_is_padded_1d(a)ggml_nelements(b) <= ggml_nelements(a)b->type == GGML_TYPE_F32tensor != NULLggml_nelements(a) >= ggml_nelements(b)offset < (size_t)(1 << 30)%s (copy of %s)mask->type == GGML_TYPE_F16 || mask->type == GGML_TYPE_F32ggml_is_matrix(mask)mask->ne[0] == a->ne[0]mask->ne[1] >= a->ne[1](mode & 1) == 0 && "mode & 1 == 1 is no longer supported"c->type == GGML_TYPE_F32c->ne[0] >= n_dims / 2a->ne[0] <= ne0a->ne[1] <= ne1a->ne[2] <= ne2a->ne[3] <= ne3ggml_are_same_shape(pw, ph)ggml_is_contiguous(pw)ggml_is_contiguous(ph)ph->type == GGML_TYPE_F32pw->type == GGML_TYPE_F32pw->ne[3] == a->ne[2]pw->ne[0]*pw->ne[0] == a->ne[0]pw->ne[1]*pw->ne[2] == a->ne[1]ggml_is_contiguous_1(a)n_tasks == GGML_N_TASKS_MAX || n_tasks > 0Behavior may be unexpected when allocating 0 bytes for ggml_malloc!
%s: failed to allocate %6.2f MB
ggml_mallocBehavior may be unexpected when allocating 0 bytes for ggml_calloc!
ggml_calloci != GGML_HASHSET_FULLreplacements->set.keys[i] == NULL%s (clone)cgraph->nodes[cgraph->n_nodes - 1] == tensorcgraph->n_leafs < cgraph->sizeleaf_%dcgraph->n_nodes < cgraph->sizenode_%d/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/./ggml-impl.hsrc0->type == tensor->typetensor->grad->type == tensor->type!src1->grad || src1->grad->type == tensor->grad->typeggml_is_contiguous(src0->grad)ggml_is_contiguous(tensor->grad)offset % n0 == 0nb1 % n0 == 0nb2 % n0 == 0nb3 % n0 == 0(!src1 || !src1->grad) && "backward pass for softmax mask not implemented"(!src2 || !src2->grad) && "gradients for freq factors not implemented"FA backward pass not adapted after rework!src1->grad && "backward pass for labels not implemented"ggml_are_same_shape(tensor->src[i], tensor->src[i]->grad)%s: not enough space in the context's memory pool (needed %zu, available %zu)
ggml_new_object((uintptr_t) (mem_buffer + obj_new->offs))%GGML_MEM_ALIGN == 0%s: op not implemented: ggml_get_n_tasks%s
%d
rc == 0warn: failed to set thread priority %d : %s (%d)
t == 0 || t == 1ggml_nelements(dst) == ggml_nelements(src0)ggml_is_contiguous(dst) && ggml_is_contiguous(src0)ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst)nb0 == sizeof(float)nb00 == sizeof(float)ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)src0->type == GGML_TYPE_F16dst->type == GGML_TYPE_F16nb0 == sizeof(ggml_fp16_t)nb00 == sizeof(ggml_fp16_t)src1->type == GGML_TYPE_F32dst->type == GGML_TYPE_BF16nb0 == sizeof(ggml_bf16_t)nb00 == sizeof(ggml_bf16_t)nb00 == ggml_type_size(type)nb10 == sizeof(float)nb0 <= nb1nb1 <= nb2nb2 <= nb3ggml_is_quantized(src0->type)ggml_are_same_shape(src0, dst)ggml_is_scalar(src1)dst->type == src0->typeoffset + (ne10 == 0 ? 0 : ne10-1)*nb0 + (ne11 == 0 ? 0 : ne11-1)*nb1 + (ne12 == 0 ? 0 : ne12-1)*nb2 + (ne13 == 0 ? 0 : ne13-1)*nb3 < ggml_nbytes(dst)offset + (ne10 == 0 ? 0 : ne10-1)*nb00 + (ne11 == 0 ? 0 : ne11-1)*nb01 + (ne12 == 0 ? 0 : ne12-1)*nb02 + (ne13 == 0 ? 0 : ne13-1)*nb03 < ggml_nbytes(src0)src1->type == GGML_TYPE_F32 && "only f32 src1 supported for now"dst->nb[0] == sizeof(float)src0->nb[0] == sizeof(float)ne0 == 1ne1 == ne01ne2 == ne02ne3 == ne03src1->type == GGML_TYPE_I32ggml_are_same_shape(src0, src1)ggml_is_scalar(dst)dst->type == GGML_TYPE_I64ggml_can_repeat(src0, dst)ggml_can_repeat(dst, src0)dim >= 0 && dim < 4eps > 0.0fggml_are_same_shape(src0, dst) && ggml_are_same_shape(src0, src1)ne0 == ne01ne1 == ne11ne2 == ne12ne3 == ne13nb10 == ggml_type_size(src1->type)ne02 == ne12ne03 == ne13ne0 == ne00ne1 == ne10dst->type == GGML_TYPE_F32ggml_is_contiguous(src0)ggml_is_contiguous(dst)offset + im0*nb0 + im1*nb1 + im2*nb2 + im3*nb3 <= ggml_nbytes(dst)i01 >= 0 && i01 < ne01dst->ne[0] == ncsrc0->nb[0] == sizeof(ggml_fp16_t)ne00 == ne0ne00 == ne1ne01 == 1ne02 == ne2ne03 == ne3n_past >= 0ggml_is_contiguous(src1)ggml_are_same_shape(src1, dst)n_dims <= ne0n_dims % 2 == 0src2->type == GGML_TYPE_F32src2->ne[0] >= n_dims / 2k0 == s0falseggml_nelements(dst) == stepsne0 == Dne2 == Nnbq0 == ggml_type_size(q->type)nbk0 == ggml_type_size(k->type)nbv0 == ggml_type_size(v->type)nek0 == Dnev0 == DP >= 0nbq0 == sizeof(float)nbk0 == sizeof(float)nbv0 == sizeof(float)nev1 == Dned0 == Dned1 == Nggml_blck_size(result_type) == 1dst->ne[0] == nrsrc1->nb[0] == sizeof(float)src0->nb[1] == src0->ne[0]*sizeof(float)ggml_nelements(src1) + ggml_nelements(src0) == ggml_nelements(dst)src2->nb[0] == sizeof(float)src3->nb[0] == sizeof(float)src4->nb[0] == sizeof(float)src5->nb[0] == sizeof(float)src0->nb[2] == src0->ne[0]*src0->ne[1]*sizeof(float)src1->nb[3] == src1->ne[0]*src1->ne[1]*src1->ne[2]*sizeof(float)src0->nb[0] == ggml_type_size(src0->type)src1->nb[0] == ggml_type_size(src1->type)params->wsize >= sizeof(float) * (nth + nth * nc)ggml_is_contiguous(opt0)ggml_are_same_shape(src0, src0_grad)%-6s %-12s %8d %lld %lld %lld %lld %16zu %16zu %16zu %16zu %16p %32s
%-6s %-6s %-12s %8d %lld %lld %lld %lld %16zu %16zu %16zu %16zu %16p %32s
  "%p":%s -> "%p":%s [ arrowhead = %s; style = %s; label = "%s"; ]
emptyveedashedsolid  "%p":%s -> "%p":%s [ label = "%s"; ]
ggml_is_scalar(f)f->type == GGML_TYPE_F32np < GGML_MAX_PARAMS%s: invalid string length (%llu)
gguf_fread_str0 <= type && type < GGUF_TYPE_COUNTinfo->n_dims <= GGML_MAX_DIMS0 <= info->type && info->type < GGML_TYPE_COUNTinfo->ne[i] > 0INT64_MAX/info->ne[1] > info->ne[0]INT64_MAX/info->ne[2] > info->ne[0]*info->ne[1]INT64_MAX/info->ne[3] > info->ne[0]*info->ne[1]*info->ne[2]u8u16u32boolstrarru64offset == info->offset%s: not enough space in the buffer to allocate %s (needed %zu, available %zu)
ggml_tallocr_alloc/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml-alloc.cnot enough space in the buffergalloc != NULLgalloc->bufts != NULLgalloc->buffers != NULLgalloc->buf_tallocs != NULLgalloc->hash_set.keys != NULLgalloc->hash_values != NULLgalloc->node_allocs != NULLgalloc->leaf_allocs != NULL%s: failed to allocate %s buffer of size %zu
ggml_gallocr_reserve_nbuffer_id >= 0 && buffer_id < galloc->n_buffersggml_get_no_alloc(ctx) == true%s: tensor %s is too large to fit in a %s buffer (tensor size: %zu, max buffer size: %zu)
ggml_backend_alloc_ctx_tensors_from_buft%s: not enough space in the buffer to allocate %zu bytes, largest block available %zu bytes
ggml_dyn_tallocr_allocalloc->n_free_blocks < MAX_FREE_BLOCKS && "out of free blocks"/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml-backend.cppbase != NULL && "backend buffer base cannot be NULL"NULLtensor->data != NULL && "tensor not allocated"offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds"offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds"buf != NULL && "tensor buffer not set"buf->iface.memset_tensor != NULL && "memset not supported by backend buffer"backend->iface.graph_plan_create != NULLbackend->iface.graph_plan_free != NULLbackend->iface.graph_plan_compute != NULLggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts"backend->iface.event_record != NULLevent->device->iface.event_synchronizebackend->iface.event_wait != NULLindex < ggml_backend_reg_count()index < ggml_backend_dev_count()ggml_backend_is_cpu(backend_cpu)(uintptr_t)ptr % TENSOR_ALIGNMENT == 0 && "buffer pointer must be aligned"ctx->buffers != NULLggml_backend_buffer_is_multi_buffer(buffer)n_backends > 0n_backends <= GGML_SCHED_MAX_BACKENDSggml_backend_is_cpu(backends[n_backends - 1])GGML_SCHED_DEBUGggml_backend_supports_buft(backends[b], sched->bufts[b])(int)sched->hash_set.size >= measure_graph->n_nodes + measure_graph->n_leafs(int)sched->hash_set.size >= graph->n_nodes + graph->n_leafsi >= 0 && i < sched->n_backendsbackend_index >= 0 && backend_index < sched->n_backendstensor->buffer == NULLtensor->view_src != NULLtensor->view_src->buffer != NULLtensor->view_src->data != NULLtensor->data == NULLtensor->view_src == NULLaddr >= ggml_backend_buffer_get_base(buffer)(char *)addr + ggml_backend_buffer_get_alloc_size(buffer, tensor) <= (char *)ggml_backend_buffer_get_base(buffer) + ggml_backend_buffer_get_size(buffer)failed to allocate context for graph copy
failed to allocate buffer for graph copy
vectorCPU%s: failed to allocate buffer of size %zu
ggml_backend_cpu_buffer_type_alloc_bufferindex == 0machdep.cpu.brand_stringggml_backend_sched_split_graphsched->splits != NULL%s#%s#%dn_graph_inputs < GGML_SCHED_MAX_SPLIT_INPUTSn_inputs < GGML_SCHED_MAX_SPLIT_INPUTSsched->graph.nodes != NULLsched->graph.leafs != NULLpre-allocated tensor in a backend that cannot run the operation
## SPLIT #%d: %s # %d inputs: [%s (%5.5s)] node #%3d (%10.10s): %20.20s (%5.5s) [%5.5s %8.8s]: %20.20s (%5.5s) [%5.5s %8.8s]%zuM%zuK%s: failed to allocate graph
ggml_backend_sched_alloc_splitssrc != NULLsrc->data && "graph must be allocated"/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml-quants.ctype == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_Sn_per_row%QK_K == 0grid_size == 256 || grid_size == 512n_per_row%QK4_NL == 0k%QK4_NL == 0%s: invalid type %d
ggml_validate_row_data%s: invalid size %zu for type %s (type size = %zu)
%s: found %d NaNs in row of %zu BF16 values
%s: found %d infinities in row of %zu BF16 values
quant_weights && "missing quantization weights"kgrid_q2xs && "forgot to call ggml_quantize_init()?"kmap_q2xs && "forgot to call ggml_quantize_init()?"kneighbors_q2xs && "forgot to call ggml_quantize_init()?"n%QK_K == 0Oops: found point %u not on grid: %dscale >= 0num_neighbors > 0grid_index >= 0kgrid_q3xs && "forgot to call ggml_quantize_init()?"kmap_q3xs && "forgot to call ggml_quantize_init()?"kneighbors_q3xs && "forgot to call ggml_quantize_init()?"besti1 >= 0 && besti2 >= 0 && best_shift != 0Have %d neighbours
    neighbour %d: sumqx = %g sumq2 = %g
besti1 >= 0 && besti2 >= 0 && best_k >= 0ggml_validate_row_data: found inf value at block %zu
ggml_validate_row_data: found nan value at block %zu
Oops, did not find grid point%s: error: failed to allocate buffer, size = %8.2f MiB
ggml_backend_metal_buffer_from_ptr
%s: error: failed to allocate context
ggml_backend_metal_init/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml-metal.mggml_backend_is_metal(backend)Metalggml_backend_metal_buffer_type_alloc_buffer%s: error: vm_allocate failed
ggml_metal_host_malloc%s: allocated buffer, size = %8.2f MiB, (%8.2f / %8.2f)
ggml_backend_metal_log_allocated_size%s: warning: current allocated size is greater than the recommended max working set size
%s: allocating
ggml_metal_init%s: found device: %s
%s: picking default device: %s
ggml-metaldefaultmetallib%s: using embedded metal library
%s: error: %s
%s: GPU name:   %s
%s: GPU family: MTLGPUFamilyApple%d  (%d)
%s: GPU family: MTLGPUFamilyCommon%d (%d)
%s: GPU family: MTLGPUFamilyMetal%d  (%d)
%s: simdgroup reduction support   = %s
true%s: simdgroup matrix mul. support = %s
%s: hasUnifiedMemory              = %s
%s: recommendedMaxWorkingSetSize  = %8.2f MB
kernel_add%s: error: load pipeline error: %s
kernel_add_rowkernel_subkernel_sub_rowkernel_mulkernel_mul_rowkernel_divkernel_div_rowkernel_repeat_f32kernel_repeat_f16kernel_repeat_i32kernel_repeat_i16kernel_scalekernel_scale_4kernel_clampkernel_tanhkernel_relukernel_sigmoidkernel_gelukernel_gelu_4kernel_gelu_quickkernel_gelu_quick_4kernel_silukernel_silu_4kernel_soft_max_f16%s: skipping %-40s (not supported)
kernel_soft_max_f16_4kernel_soft_max_f32kernel_soft_max_f32_4kernel_diag_mask_infkernel_diag_mask_inf_8kernel_get_rows_f32kernel_get_rows_f16kernel_get_rows_q4_0kernel_get_rows_q4_1kernel_get_rows_q5_0kernel_get_rows_q5_1kernel_get_rows_q8_0kernel_get_rows_q2_Kkernel_get_rows_q3_Kkernel_get_rows_q4_Kkernel_get_rows_q5_Kkernel_get_rows_q6_Kkernel_get_rows_iq2_xxskernel_get_rows_iq2_xskernel_get_rows_iq3_xxskernel_get_rows_iq3_skernel_get_rows_iq2_skernel_get_rows_iq1_skernel_get_rows_iq1_mkernel_get_rows_iq4_nlkernel_get_rows_iq4_xskernel_get_rows_i32kernel_rms_normkernel_group_normkernel_normkernel_ssm_conv_f32kernel_ssm_scan_f32kernel_mul_mv_f32_f32kernel_mul_mv_f16_f16kernel_mul_mv_f16_f32kernel_mul_mv_f16_f32_1rowkernel_mul_mv_f16_f32_l4kernel_mul_mv_q4_0_f32kernel_mul_mv_q4_1_f32kernel_mul_mv_q5_0_f32kernel_mul_mv_q5_1_f32kernel_mul_mv_q8_0_f32kernel_mul_mv_q2_K_f32kernel_mul_mv_q3_K_f32kernel_mul_mv_q4_K_f32kernel_mul_mv_q5_K_f32kernel_mul_mv_q6_K_f32kernel_mul_mv_iq2_xxs_f32kernel_mul_mv_iq2_xs_f32kernel_mul_mv_iq3_xxs_f32kernel_mul_mv_iq3_s_f32kernel_mul_mv_iq2_s_f32kernel_mul_mv_iq1_s_f32kernel_mul_mv_iq1_m_f32kernel_mul_mv_iq4_nl_f32kernel_mul_mv_iq4_xs_f32kernel_mul_mv_id_f32_f32kernel_mul_mv_id_f16_f32kernel_mul_mv_id_q4_0_f32kernel_mul_mv_id_q4_1_f32kernel_mul_mv_id_q5_0_f32kernel_mul_mv_id_q5_1_f32kernel_mul_mv_id_q8_0_f32kernel_mul_mv_id_q2_K_f32kernel_mul_mv_id_q3_K_f32kernel_mul_mv_id_q4_K_f32kernel_mul_mv_id_q5_K_f32kernel_mul_mv_id_q6_K_f32kernel_mul_mv_id_iq2_xxs_f32kernel_mul_mv_id_iq2_xs_f32kernel_mul_mv_id_iq3_xxs_f32kernel_mul_mv_id_iq3_s_f32kernel_mul_mv_id_iq2_s_f32kernel_mul_mv_id_iq1_s_f32kernel_mul_mv_id_iq1_m_f32kernel_mul_mv_id_iq4_nl_f32kernel_mul_mv_id_iq4_xs_f32kernel_mul_mm_f32_f32kernel_mul_mm_f16_f32kernel_mul_mm_q4_0_f32kernel_mul_mm_q4_1_f32kernel_mul_mm_q5_0_f32kernel_mul_mm_q5_1_f32kernel_mul_mm_q8_0_f32kernel_mul_mm_q2_K_f32kernel_mul_mm_q3_K_f32kernel_mul_mm_q4_K_f32kernel_mul_mm_q5_K_f32kernel_mul_mm_q6_K_f32kernel_mul_mm_iq2_xxs_f32kernel_mul_mm_iq2_xs_f32kernel_mul_mm_iq3_xxs_f32kernel_mul_mm_iq3_s_f32kernel_mul_mm_iq2_s_f32kernel_mul_mm_iq1_s_f32kernel_mul_mm_iq1_m_f32kernel_mul_mm_iq4_nl_f32kernel_mul_mm_iq4_xs_f32kernel_mul_mm_id_f32_f32kernel_mul_mm_id_f16_f32kernel_mul_mm_id_q4_0_f32kernel_mul_mm_id_q4_1_f32kernel_mul_mm_id_q5_0_f32kernel_mul_mm_id_q5_1_f32kernel_mul_mm_id_q8_0_f32kernel_mul_mm_id_q2_K_f32kernel_mul_mm_id_q3_K_f32kernel_mul_mm_id_q4_K_f32kernel_mul_mm_id_q5_K_f32kernel_mul_mm_id_q6_K_f32kernel_mul_mm_id_iq2_xxs_f32kernel_mul_mm_id_iq2_xs_f32kernel_mul_mm_id_iq3_xxs_f32kernel_mul_mm_id_iq3_s_f32kernel_mul_mm_id_iq2_s_f32kernel_mul_mm_id_iq1_s_f32kernel_mul_mm_id_iq1_m_f32kernel_mul_mm_id_iq4_nl_f32kernel_mul_mm_id_iq4_xs_f32kernel_rope_norm_f32kernel_rope_norm_f16kernel_rope_neox_f32kernel_rope_neox_f16kernel_im2col_f16kernel_im2col_f32kernel_upscale_f32kernel_pad_f32kernel_timestep_embedding_f32kernel_arange_f32kernel_argsort_f32_i32_asckernel_argsort_f32_i32_desckernel_leaky_relu_f32kernel_flash_attn_ext_f16_h64kernel_flash_attn_ext_f16_h80kernel_flash_attn_ext_f16_h96kernel_flash_attn_ext_f16_h112kernel_flash_attn_ext_f16_h128kernel_flash_attn_ext_vec_f16_h128kernel_cpy_f32_f16kernel_cpy_f32_f32kernel_cpy_f16_f16kernel_cpy_f16_f32kernel_cpy_f32_q8_0kernel_cpy_f32_q4_0kernel_cpy_f32_q4_1kernel_cpy_f32_q5_0kernel_cpy_f32_q5_1kernel_cpy_f32_iq4_nlkernel_concatkernel_sqrkernel_sqrtkernel_sinkernel_coskernel_sum_rows%s: deallocating
ggml_metal_free/tmp/perf-metal.gputrace%s: error: unable to start capture '%s'
ggml_metal_graph_computev16@?0Q8%s: command buffer %d failed with status %lu
error: %s
%s: command buffer %d aborted%s: error: unsupported op '%s'
ggml_metal_encode_nodeunsupported opsrc0t == GGML_TYPE_F32src1t == GGML_TYPE_F32ne11 == 1dstt == GGML_TYPE_F32%s: node %3d, op = %8s not implemented
!src1 || src1->type == GGML_TYPE_F16 || src1->type == GGML_TYPE_F32src3src4src5ne00 == ne10ne12 % ne02 == 0ne13 % ne03 == 0nb01 % 16 == 0nb01 % 8 == 0MUL MAT-MAT not implementedAsserting on type %d
not implementedsrc2t == GGML_TYPE_I32!ggml_is_transposed(src0)!ggml_is_transposed(src1)dst_rows <= dst_rows_maxMUL_MAT_ID not implementedne00 >= nth0*nth1ne00 % 4 == 0ggml_is_contiguous_1(src0)ne10 == ne02dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32src0->type == GGML_TYPE_F32dst->type == GGML_TYPE_I32ne11 % 32 == 0ggml_are_same_shape (src1, src2)!src3 || src3->type == GGML_TYPE_F16!src3 || src3->ne[1] >= GGML_PAD(src0->ne[1], 8) && "the Flash-Attention Metal kernel requires the mask to be padded to 8 and at least n_queries big"unsupported size: %lld
add template specialization for this size
add template specialization for this sizesmem <= ctx->device.maxThreadgroupMemoryLengthne00 % ggml_blck_size(src0->type) == 0ne0 % ggml_blck_size(dst->type) == 0%s: error: node %3d, op = %8s not implemented
%s: error: tensor '%s' buffer is nil
ggml_metal_get_buffer/Users/runner/work/whisper-jni/whisper-jni/build/w/src/whisper-cpp/ggml/src/ggml-blas.cppggml_backend_is_blas(backend_blas)BLAS%s: unsupported op %s
ggml_backend_blas_graph_computethread constructor failed??
TT?c\??
TT?c\??	U?d\??
aa?m???	U?d\??
aa?m???
z??:??????)??????:??cc?o???+&*??8")??
z??:??????)??
z??:?? Mvm"??md?
?
? ?
??? ?
????? ??????????????? ? ? ? ? ??8")??
	??-"Kp]ne????????1uCFGGMLMetalClassbundleForClass:beginScopemaxBufferLengthcommitpushDebugGroup:countByEnumeratingWithState:objects:count:supportsFamily:UTF8StringenqueuecommandBufferWithUnretainedReferencesnewCommandQueuecomputeCommandEncodersetDestination:currentAllocatedSizedescriptiondictionarydispatchThreadgroups:threadsPerThreadgroup:endEncodingendScopeerrorfileURLWithPath:hasUnifiedMemoryinitWithBytes:length:encoding:localizedDescriptionmaxThreadgroupMemoryLengthmaxTotalThreadsPerThreadgroupnamenewBufferWithBytesNoCopy:length:options:deallocator:newCaptureScopeWithDevice:newComputePipelineStateWithFunction:error:newFunctionWithName:newLibraryWithSource:options:error:pathForResource:ofType:popDebugGrouprecommendedMaxWorkingSetSizesetBuffer:offset:atIndex:setBytes:length:atIndex:setCaptureObject:setComputePipelineState:setOutputURL:setPreprocessorMacros:setThreadgroupMemoryLength:atIndex:sharedCaptureManagerstartCaptureWithDescriptor:error:statusstopCapturestringWithCString:encoding:stringWithFormat:waitUntilCompleted<@?X!aQ!QX
?<d?`??????0?????????	(?@8?p
L??`??bt??c???e???h???i???k??pU??hP?@h`?i????p???`P!@'?()P2?2<0<?>PP Q?Q?Q0R?R?R?T?TV VpW?WPZ?ZP\p\@^`^0`@`?`a@a?ab?b?b@c?cd?ePf?h@j0k l0lpm`npn`opo`ppp`qpq`rpr`sps@t0u@u0v@v0w@w0x@x?xP{`{?{`|?|0~?~?@?p??????? ???????@????P?0?@??0?О0??? ???Р`???Ф`?????????p??Я??P?????????к????@?н??????????????????0?????????????@?????p?0???????????P? ??*?*?+?,/?/?/?13?3p4`= ?? ?!PJPK?O ???@???@?????`?б@??P??? ?????P???@?P?????`??????????????Л??? ?P?0?Ю0?@?p?`????`? ?@?p?P?0?`?@?но????0?????P??`? ???p??????p???p???`????0?`???????@?p???PP????P?$?$@&?&?&?&0'?'P(?(?( )?)?*?*?*@+,?,?-?-?./?/@0 4@60R?d?hz zp???? ??
?
@4?9?B?}?}?~ ? ?P? ? ??????			
	?O	?O	`P	0g	Pg	`?	??	??	?	`

`
?
?!
?!
"
"
?'
p(
@z
`z
?z
@{
?{
?|
?|
@}
?}
?}
~
?~
?~
?
P?
?@??? 0??	?)?*?*p+?+`,?,?0`5?t?XQ?<¥?$ƥ@?@?@&ʥ Ў?w?r ?ϥ @?p{?w??	ԥ$ԥ$ߥ ????{??? @?0????		? "p?`?@??q?	? $@???	?T0??? ??	??n???0??
	???p
?@??
	???A G?*?	??@v``]?	?$??Bp??	?J0??	 ?b0?У	?	` 	(?2???&	.? ???	
?

?-	5?n???	 ?	p#	;?R???/
p/
?	A??@??
p
?1	H?K?O?S?W?[?8P?`)	a?0B?D?CP'f? 0{@?o? ??x? 0?0???6@?`? ?	??B??p???	k???????????????????????????æ̦Ѧئ???????
??$?/?7?B?K?Q?U?Y?^?f?k?s?}?????????????ͧҧܧ???????!?)?6?>?B?I?\?d?o?~?????????????̨ըۨ???? ?,?8?D?W?o?~???????????????????????©ɩͩө٩??????%?-?9?J?X?\?X?c?g?s?y?????????????ɪѪ??????&?/?D?N?]?r?}?????????ī?????1?=?I?U?c?r?????????????Ѭ???????

typedef uint16_t ggml_half;
typedef uint32_t ggml_half2;

#define GGML_COMMON_AGGR

#define GGML_COMMON_DECL
#elif defined(GGML_COMMON_DECL_METAL)
#include 

typedef half  ggml_half;
typedef half2 ggml_half2;

#define GGML_COMMON_AGGR

#define GGML_COMMON_DECL
#elif defined(GGML_COMMON_DECL_CUDA)
#if defined(GGML_COMMON_DECL_MUSA)
#include 
#else
#include 
#endif
#include 

typedef half  ggml_half;
typedef half2 ggml_half2;

#define GGML_COMMON_AGGR data

#define GGML_COMMON_DECL
#elif defined(GGML_COMMON_DECL_HIP)
#include 
#include 

typedef half  ggml_half;
typedef half2 ggml_half2;

#define GGML_COMMON_AGGR data

#define GGML_COMMON_DECL
#elif defined(GGML_COMMON_DECL_SYCL)
#include 
#include 

typedef sycl::half  ggml_half;
typedef sycl::half2 ggml_half2;

#define GGML_COMMON_AGGR data

#define GGML_COMMON_DECL
#endif

#if defined(GGML_COMMON_DECL)

#ifndef __cplusplus
#ifndef static_assert
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L)
#define static_assert(cond, msg) _Static_assert(cond, msg)
#else
#define static_assert(cond, msg) struct global_scope_noop_trick
#endif
#endif
#endif // __cplusplus

// QK = number of values after dequantization
// QK_K = super-block size

#define QK_K 256
#define K_SCALE_SIZE 12

#if defined(GGML_COMMON_DECL_CUDA) || defined(GGML_COMMON_DECL_HIP) || defined(GGML_COMMON_DECL_SYCL)
// QR = QK / number of values before dequantization
// QI = number of 32 bit integers before dequantization

#define QI4_0 (QK4_0 / (4 * QR4_0))
#define QR4_0 2

#define QI4_1 (QK4_1 / (4 * QR4_1))
#define QR4_1 2

#define QI5_0 (QK5_0 / (4 * QR5_0))
#define QR5_0 2

#define QI5_1 (QK5_1 / (4 * QR5_1))
#define QR5_1 2

#define QI8_0 (QK8_0 / (4 * QR8_0))
#define QR8_0 1

#define QI8_1 (QK8_1 / (4 * QR8_1))
#define QR8_1 1

#define QI2_K (QK_K / (4*QR2_K))
#define QR2_K 4

#define QI3_K (QK_K / (4*QR3_K))
#define QR3_K 4

#define QI4_K (QK_K / (4*QR4_K))
#define QR4_K 2

#define QI5_K (QK_K / (4*QR5_K))
#define QR5_K 2

#define QI6_K (QK_K / (4*QR6_K))
#define QR6_K 2

#define QI2_XXS (QK_K / (4*QR2_XXS))
#define QR2_XXS 4

#define QI2_XS (QK_K / (4*QR2_XS))
#define QR2_XS 4

#define QI2_S (QK_K / (4*QR2_S))
#define QR2_S 4

#define QI3_XXS (QK_K / (4*QR3_XXS))
#define QR3_XXS 4

#define QI3_XS (QK_K / (4*QR3_XS))
#define QR3_XS 4

#define QI1_S (QK_K / (4*QR1_S))
#define QR1_S 8

#define QI1_M (QK_K / (4*QR1_M))
#define QR1_M 8

#define QI4_NL (QK4_NL / (4*QR4_NL))
#define QR4_NL 2

#define QI4_XS (QK_K / (4*QR4_XS))
#define QR4_XS 2

#define QI3_S (QK_K / (4*QR3_S))
#define QR3_S 4

#endif // GGML_COMMON_DECL_CUDA || GGML_COMMON_DECL_HIP

#define QK4_0 32
typedef struct {
    ggml_half d;           // delta
    uint8_t qs[QK4_0 / 2]; // nibbles / quants
} block_q4_0;
static_assert(sizeof(block_q4_0) == sizeof(ggml_half) + QK4_0 / 2, "wrong q4_0 block size/padding");

#define QK4_1 32
typedef struct {
    union {
        struct {
            ggml_half d; // delta
            ggml_half m; // min
        } GGML_COMMON_AGGR;
        ggml_half2 dm;
    };
    uint8_t qs[QK4_1 / 2]; // nibbles / quants
} block_q4_1;
static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_half) + QK4_1 / 2, "wrong q4_1 block size/padding");

#define QK5_0 32
typedef struct {
    ggml_half d;           // delta
    uint8_t qh[4];         // 5-th bit of quants
    uint8_t qs[QK5_0 / 2]; // nibbles / quants
} block_q5_0;
static_assert(sizeof(block_q5_0) == sizeof(ggml_half) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding");

#define QK5_1 32
typedef struct {
    union {
        struct {
            ggml_half d; // delta
            ggml_half m; // min
        } GGML_COMMON_AGGR;
        ggml_half2 dm;
    };
    uint8_t qh[4];         // 5-th bit of quants
    uint8_t qs[QK5_1 / 2]; // nibbles / quants
} block_q5_1;
static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_half) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding");

#define QK8_0 32
typedef struct {
    ggml_half d;       // delta
    int8_t  qs[QK8_0]; // quants
} block_q8_0;
static_assert(sizeof(block_q8_0) == sizeof(ggml_half) + QK8_0, "wrong q8_0 block size/padding");

#define QK8_1 32
typedef struct {
    union {
        struct {
            ggml_half d; // delta
            ggml_half s; // d * sum(qs[i])
        } GGML_COMMON_AGGR;
        ggml_half2 ds;
    };
    int8_t qs[QK8_1]; // quants
} block_q8_1;
static_assert(sizeof(block_q8_1) == 2*sizeof(ggml_half) + QK8_1, "wrong q8_1 block size/padding");

typedef struct {
    ggml_half d[4];        // deltas for 4 q4_0 blocks
    uint8_t qs[QK4_0 * 2]; // nibbles / quants for 4 q4_0 blocks
} block_q4_0x4;
static_assert(sizeof(block_q4_0x4) == 4 * sizeof(ggml_half) + QK4_0 * 2, "wrong q4_0x4 block size/padding");

typedef struct {
    ggml_half d[8];        // deltas for 8 q4_0 blocks
    uint8_t qs[QK4_0 * 4]; // nibbles / quants for 8 q4_0 blocks
} block_q4_0x8;
static_assert(sizeof(block_q4_0x8) == 8 * sizeof(ggml_half) + QK4_0 * 4, "wrong q4_0x8 block size/padding");

typedef struct {
    ggml_half d[4];        // deltas for 4 q8_0 blocks
    int8_t qs[QK8_0 * 4];  // quants for 4 q8_0 blocks
} block_q8_0x4;
static_assert(sizeof(block_q8_0x4) == 4 * sizeof(ggml_half) + QK8_0 * 4, "wrong q8_0x4 block size/padding");

typedef struct {
    ggml_half d[8];        // deltas for 8 q8_0 blocks
    int8_t qs[QK8_0 * 8];  // quants for 8 q8_0 blocks
} block_q8_0x8;
static_assert(sizeof(block_q8_0x8) == 8 * sizeof(ggml_half) + QK8_0 * 8, "wrong q8_0x8 block size/padding");

//
// Ternary quantization
//

// 1.6875 bpw
typedef struct {
    uint8_t qs[(QK_K - 4 * QK_K / 64) / 5]; // 5 elements per byte (3^5 = 243 < 256)
    uint8_t qh[QK_K/64]; // 4 elements per byte
    ggml_half d;
} block_tq1_0;
static_assert(sizeof(block_tq1_0) == sizeof(ggml_half) + QK_K / 64 + (QK_K - 4 * QK_K / 64) / 5, "wrong tq1_0 block size/padding");

// 2.0625 bpw
typedef struct {
    uint8_t qs[QK_K/4]; // 2 bits per element
    ggml_half d;
} block_tq2_0;
static_assert(sizeof(block_tq2_0) == sizeof(ggml_half) + QK_K / 4, "wrong tq2_0 block size/padding");

//
// Super-block quantization structures
//

// 2-bit quantization
// weight is represented as x = a * q + b
// 16 blocks of 16 elements each
// Effectively 2.625 bits per weight
typedef struct {
    uint8_t scales[QK_K/16]; // scales and mins, quantized with 4 bits
    uint8_t qs[QK_K/4];      // quants
    union {
        struct {
            ggml_half d;    // super-block scale for quantized scales
            ggml_half dmin; // super-block scale for quantized mins
        } GGML_COMMON_AGGR;
        ggml_half2 dm;
    };
} block_q2_K;
static_assert(sizeof(block_q2_K) == 2*sizeof(ggml_half) + QK_K/16 + QK_K/4, "wrong q2_K block size/padding");

// 3-bit quantization
// weight is represented as x = a * q
// 16 blocks of 16 elements each
// Effectively 3.4375 bits per weight
typedef struct {
    uint8_t hmask[QK_K/8]; // quants - high bit
    uint8_t qs[QK_K/4];    // quants - low 2 bits
    uint8_t scales[12];    // scales, quantized with 6 bits
    ggml_half d;           // super-block scale
} block_q3_K;
static_assert(sizeof(block_q3_K) == sizeof(ggml_half) + QK_K / 4 + QK_K / 8 + 12, "wrong q3_K block size/padding");

// 4-bit quantization
// 8 blocks of 32 elements each
// weight is represented as x = a * q + b
// Effectively 4.5 bits per weight
typedef struct {
    union {
        struct {
            ggml_half d;    // super-block scale for quantized scales
            ggml_half dmin; // super-block scale for quantized mins
        } GGML_COMMON_AGGR;
        ggml_half2 dm;
    };
    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
    uint8_t qs[QK_K/2];           // 4--bit quants
} block_q4_K;
static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2, "wrong q4_K block size/padding");

// 5-bit quantization
// 8 blocks of 32 elements each
// weight is represented as x = a * q + b
// Effectively 5.5 bits per weight
typedef struct {
    union {
        struct {
            ggml_half d;    // super-block scale for quantized scales
            ggml_half dmin; // super-block scale for quantized mins
        } GGML_COMMON_AGGR;
        ggml_half2 dm;
    };
    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
    uint8_t qh[QK_K/8];           // quants, high bit
    uint8_t qs[QK_K/2];           // quants, low 4 bits
} block_q5_K;
static_assert(sizeof(block_q5_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2 + QK_K/8, "wrong q5_K block size/padding");

// 6-bit quantization
// weight is represented as x = a * q
// 16 blocks of 16 elements each
// Effectively 6.5625 bits per weight
typedef struct {
    uint8_t ql[QK_K/2];      // quants, lower 4 bits
    uint8_t qh[QK_K/4];      // quants, upper 2 bits
    int8_t  scales[QK_K/16]; // scales, quantized with 8 bits
    ggml_half d;             // super-block scale
} block_q6_K;
static_assert(sizeof(block_q6_K) == sizeof(ggml_half) + QK_K / 16 + 3*QK_K/4, "wrong q6_K block size/padding");

// This is only used for intermediate quantization and dot products
typedef struct {
    float   d;              // delta
    int8_t  qs[QK_K];       // quants
    int16_t bsums[QK_K/16]; // sum of quants in groups of 16
} block_q8_K;
static_assert(sizeof(block_q8_K) == sizeof(float) + QK_K + QK_K/16*sizeof(int16_t), "wrong q8_K block size/padding");

// (Almost) "true" 2-bit quantization.
// Due to the need to use blocks as per ggml design, it ends up using
// 2.0625 bpw because of the 16-bit scale for each block of 256.
typedef struct {
    ggml_half d;
    uint16_t qs[QK_K/8];
} block_iq2_xxs;
static_assert(sizeof(block_iq2_xxs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t), "wrong iq2_xxs block size/padding");

// 2.3125 bpw quants
typedef struct {
    ggml_half d;
    uint16_t qs[QK_K/8];
    uint8_t  scales[QK_K/32];
} block_iq2_xs;
static_assert(sizeof(block_iq2_xs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t) + QK_K/32, "wrong iq2_xs block size/padding");

// 2.5625 bpw quants
typedef struct {
    ggml_half d;
    uint8_t qs[QK_K/4];
    uint8_t qh[QK_K/32];
    uint8_t scales[QK_K/32];
} block_iq2_s;
static_assert(sizeof(block_iq2_s) == sizeof(ggml_half) + QK_K/4 + QK_K/16, "wrong iq2_s block size/padding");

// (Almost) "true" 3-bit quantization.
// Due to the need to use blocks as per ggml design, it ends up using
// 3.0625 bpw because of the 16-bit scale for each block of 256.
typedef struct {
    ggml_half d;
    uint8_t qs[3*QK_K/8];
} block_iq3_xxs;
static_assert(sizeof(block_iq3_xxs) == sizeof(ggml_half) + 3*(QK_K/8), "wrong iq3_xxs block size/padding");

// 3.4375 bpw
#define IQ3S_N_SCALE QK_K/64
typedef struct {
    ggml_half d;
    uint8_t qs[QK_K/4];
    uint8_t qh[QK_K/32];
    uint8_t signs[QK_K/8];
    uint8_t scales[IQ3S_N_SCALE];
} block_iq3_s;
static_assert(sizeof(block_iq3_s) == sizeof(ggml_half) + 13*(QK_K/32) + IQ3S_N_SCALE, "wrong iq3_s block size/padding");

// 1.5625 bpw
typedef struct {
    ggml_half d;
    uint8_t  qs[QK_K/8];
    uint16_t qh[QK_K/32];
} block_iq1_s;
static_assert(sizeof(block_iq1_s) == sizeof(ggml_half) + QK_K/8 + QK_K/16, "wrong iq1_s block size/padding");

// 1.75 bpw
typedef struct {
    uint8_t  qs[QK_K/8];      // grid index, low 8 bits
    uint8_t  qh[QK_K/16];     // grid index, high 3 bits + grid shift bit (for two groups of 8)
    uint8_t  scales[QK_K/32]; // 3-bit block scales (4-bit if QK_K == 64)
} block_iq1_m;
static_assert(sizeof(block_iq1_m) == QK_K/8 + QK_K/16 + QK_K/32, "wrong iq1_m block size/padding");

// Used by IQ1_M quants
typedef union {
    ggml_half f16;
    uint16_t  u16;
} iq1m_scale_t;

// Non-linear quants
#define QK4_NL 32
typedef struct {
    ggml_half d;
    uint8_t qs[QK4_NL/2];
} block_iq4_nl;
static_assert(sizeof(block_iq4_nl) == sizeof(ggml_half) + QK4_NL/2, "wrong iq4_nl block size/padding");

typedef struct {
    ggml_half d;
    uint16_t scales_h;
    uint8_t  scales_l[QK_K/64];
    uint8_t  qs[QK_K/2];
} block_iq4_xs;
static_assert(sizeof(block_iq4_xs) == sizeof(ggml_half) + sizeof(uint16_t) + QK_K/64 + QK_K/2, "wrong iq4_xs block size/padding");

#endif // GGML_COMMON_DECL
#endif // GGML_COMMON_DECL

////////////////////////////////////////////////////////////////////////////////

#ifndef GGML_COMMON_IMPL

#if defined(GGML_COMMON_IMPL_C)
#include 

#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
#define GGML_TABLE_END() };

#define GGML_COMMON_IMPL
#elif defined(GGML_COMMON_IMPL_METAL)
#include 

#define GGML_TABLE_BEGIN(type, name, size) static const constant type name[size] = {
#define GGML_TABLE_END() };

#define GGML_COMMON_IMPL
#elif defined(GGML_COMMON_IMPL_CUDA) || defined(GGML_COMMON_IMPL_HIP) || defined(GGML_COMMON_IMPL_MUSA)
#include 

#define GGML_TABLE_BEGIN(type, name, size) static const __device__ type name[size] = {
#define GGML_TABLE_END() };

#define GGML_COMMON_IMPL
#elif defined(GGML_COMMON_IMPL_SYCL)

#include 

#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
#define GGML_TABLE_END() };

#define GGML_COMMON_IMPL
#endif

#if defined(GGML_COMMON_IMPL)

GGML_TABLE_BEGIN(uint8_t, kmask_iq2xs, 8)
    1, 2, 4, 8, 16, 32, 64, 128
GGML_TABLE_END()

GGML_TABLE_BEGIN(uint8_t, ksigns_iq2xs, 128)
      0, 129, 130,   3, 132,   5,   6, 135, 136,   9,  10, 139,  12, 141, 142,  15,
    144,  17,  18, 147,  20, 149, 150,  23,  24, 153, 154,  27, 156,  29,  30, 159,
    160,  33,  34, 163,  36, 165, 166,  39,  40, 169, 170,  43, 172,  45,  46, 175,
     48, 177, 178,  51, 180,  53,  54, 183, 184,  57,  58, 187,  60, 189, 190,  63,
    192,  65,  66, 195,  68, 197, 198,  71,  72, 201, 202,  75, 204,  77,  78, 207,
     80, 209, 210,  83, 212,  85,  86, 215, 216,  89,  90, 219,  92, 221, 222,  95,
     96, 225, 226,  99, 228, 101, 102, 231, 232, 105, 106, 235, 108, 237, 238, 111,
    240, 113, 114, 243, 116, 245, 246, 119, 120, 249, 250, 123, 252, 125, 126, 255,
GGML_TABLE_END()

//#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
GGML_TABLE_BEGIN(uint64_t, ksigns64, 128)
    0x0000000000000000, 0xff000000000000ff, 0xff0000000000ff00, 0x000000000000ffff,
    0xff00000000ff0000, 0x0000000000ff00ff, 0x0000000000ffff00, 0xff00000000ffffff,
    0xff000000ff000000, 0x00000000ff0000ff, 0x00000000ff00ff00, 0xff000000ff00ffff,
    0x00000000ffff0000, 0xff000000ffff00ff, 0xff000000ffffff00, 0x00000000ffffffff,
    0xff0000ff00000000, 0x000000ff000000ff, 0x000000ff0000ff00, 0xff0000ff0000ffff,
    0x000000ff00ff0000, 0xff0000ff00ff00ff, 0xff0000ff00ffff00, 0x000000ff00ffffff,
    0x000000ffff000000, 0xff0000ffff0000ff, 0xff0000ffff00ff00, 0x000000ffff00ffff,
    0xff0000ffffff0000, 0x000000ffffff00ff, 0x000000ffffffff00, 0xff0000ffffffffff,
    0xff00ff0000000000, 0x0000ff00000000ff, 0x0000ff000000ff00, 0xff00ff000000ffff,
    0x0000ff0000ff0000, 0xff00ff0000ff00ff, 0xff00ff0000ffff00, 0x0000ff0000ffffff,
    0x0000ff00ff000000, 0xff00ff00ff0000ff, 0xff00ff00ff00ff00, 0x0000ff00ff00ffff,
    0xff00ff00ffff0000, 0x0000ff00ffff00ff, 0x0000ff00ffffff00, 0xff00ff00ffffffff,
    0x0000ffff00000000, 0xff00ffff000000ff, 0xff00ffff0000ff00, 0x0000ffff0000ffff,
    0xff00ffff00ff0000, 0x0000ffff00ff00ff, 0x0000ffff00ffff00, 0xff00ffff00ffffff,
    0xff00ffffff000000, 0x0000ffffff0000ff, 0x0000ffffff00ff00, 0xff00ffffff00ffff,
    0x0000ffffffff0000, 0xff00ffffffff00ff, 0xff00ffffffffff00, 0x0000ffffffffffff,
    0xffff000000000000, 0x00ff0000000000ff, 0x00ff00000000ff00, 0xffff00000000ffff,
    0x00ff000000ff0000, 0xffff000000ff00ff, 0xffff000000ffff00, 0x00ff000000ffffff,
    0x00ff0000ff000000, 0xffff0000ff0000ff, 0xffff0000ff00ff00, 0x00ff0000ff00ffff,
    0xffff0000ffff0000, 0x00ff0000ffff00ff, 0x00ff0000ffffff00, 0xffff0000ffffffff,
    0x00ff00ff00000000, 0xffff00ff000000ff, 0xffff00ff0000ff00, 0x00ff00ff0000ffff,
    0xffff00ff00ff0000, 0x00ff00ff00ff00ff, 0x00ff00ff00ffff00, 0xffff00ff00ffffff,
    0xffff00ffff000000, 0x00ff00ffff0000ff, 0x00ff00ffff00ff00, 0xffff00ffff00ffff,
    0x00ff00ffffff0000, 0xffff00ffffff00ff, 0xffff00ffffffff00, 0x00ff00ffffffffff,
    0x00ffff0000000000, 0xffffff00000000ff, 0xffffff000000ff00, 0x00ffff000000ffff,
    0xffffff0000ff0000, 0x00ffff0000ff00ff, 0x00ffff0000ffff00, 0xffffff0000ffffff,
    0xffffff00ff000000, 0x00ffff00ff0000ff, 0x00ffff00ff00ff00, 0xffffff00ff00ffff,
    0x00ffff00ffff0000, 0xffffff00ffff00ff, 0xffffff00ffffff00, 0x00ffff00ffffffff,
    0xffffffff00000000, 0x00ffffff000000ff, 0x00ffffff0000ff00, 0xffffffff0000ffff,
    0x00ffffff00ff0000, 0xffffffff00ff00ff, 0xffffffff00ffff00, 0x00ffffff00ffffff,
    0x00ffffffff000000, 0xffffffffff0000ff, 0xffffffffff00ff00, 0x00ffffffff00ffff,
    0xffffffffffff0000, 0x00ffffffffff00ff, 0x00ffffffffffff00, 0xffffffffffffffff,
GGML_TABLE_END()
//#endif


GGML_TABLE_BEGIN(uint64_t, iq2xxs_grid, 256)
    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x08080808082b0808,
    0x08080808082b082b, 0x08080808082b2b08, 0x08080808082b2b2b, 0x0808080819080819,
    0x0808080819081908, 0x0808080819190808, 0x0808080819192b08, 0x08080808192b0819,
    0x08080808192b1908, 0x080808082b080808, 0x080808082b08082b, 0x080808082b082b2b,
    0x080808082b2b082b, 0x0808081908080819, 0x0808081908081908, 0x0808081908190808,
    0x0808081908191919, 0x0808081919080808, 0x080808192b081908, 0x080808192b192b08,
    0x0808082b08080808, 0x0808082b0808082b, 0x0808082b082b082b, 0x0808082b2b08082b,
    0x0808190808080819, 0x0808190808081908, 0x0808190808190808, 0x08081908082b0819,
    0x08081908082b1908, 0x0808190819080808, 0x080819081908082b, 0x0808190819082b08,
    0x08081908192b0808, 0x080819082b080819, 0x080819082b081908, 0x080819082b190808,
    0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b, 0x0808191908082b08,
    0x08081919082b0808, 0x080819191908192b, 0x08081919192b2b19, 0x080819192b080808,
    0x080819192b190819, 0x0808192b08082b19, 0x0808192b08190808, 0x0808192b19080808,
    0x0808192b2b081908, 0x0808192b2b2b1908, 0x08082b0808080808, 0x08082b0808081919,
    0x08082b0808082b08, 0x08082b0808191908, 0x08082b08082b2b08, 0x08082b0819080819,
    0x08082b0819081908, 0x08082b0819190808, 0x08082b081919082b, 0x08082b082b082b08,
    0x08082b1908081908, 0x08082b1919080808, 0x08082b2b0808082b, 0x08082b2b08191908,
    0x0819080808080819, 0x0819080808081908, 0x0819080808190808, 0x08190808082b0819,
    0x0819080819080808, 0x08190808192b0808, 0x081908082b081908, 0x081908082b190808,
    0x081908082b191919, 0x0819081908080808, 0x0819081908082b08, 0x08190819082b0808,
    0x0819081919190808, 0x0819081919192b2b, 0x081908192b080808, 0x0819082b082b1908,
    0x0819082b19081919, 0x0819190808080808, 0x0819190808082b08, 0x08191908082b0808,
    0x08191908082b1919, 0x0819190819082b19, 0x081919082b080808, 0x0819191908192b08,
    0x08191919192b082b, 0x0819192b08080808, 0x0819192b0819192b, 0x08192b0808080819,
    0x08192b0808081908, 0x08192b0808190808, 0x08192b0819080808, 0x08192b082b080819,
    0x08192b1908080808, 0x08192b1908081919, 0x08192b192b2b0808, 0x08192b2b19190819,
    0x082b080808080808, 0x082b08080808082b, 0x082b080808082b2b, 0x082b080819081908,
    0x082b0808192b0819, 0x082b08082b080808, 0x082b08082b08082b, 0x082b0819082b2b19,
    0x082b081919082b08, 0x082b082b08080808, 0x082b082b0808082b, 0x082b190808080819,
    0x082b190808081908, 0x082b190808190808, 0x082b190819080808, 0x082b19081919192b,
    0x082b191908080808, 0x082b191919080819, 0x082b1919192b1908, 0x082b192b2b190808,
    0x082b2b0808082b08, 0x082b2b08082b0808, 0x082b2b082b191908, 0x082b2b2b19081908,
    0x1908080808080819, 0x1908080808081908, 0x1908080808190808, 0x1908080808192b08,
    0x19080808082b0819, 0x19080808082b1908, 0x1908080819080808, 0x1908080819082b08,
    0x190808081919192b, 0x19080808192b0808, 0x190808082b080819, 0x190808082b081908,
    0x190808082b190808, 0x1908081908080808, 0x19080819082b0808, 0x19080819192b0819,
    0x190808192b080808, 0x190808192b081919, 0x1908082b08080819, 0x1908082b08190808,
    0x1908082b19082b08, 0x1908082b1919192b, 0x1908082b192b2b08, 0x1908190808080808,
    0x1908190808082b08, 0x19081908082b0808, 0x190819082b080808, 0x190819082b192b19,
    0x190819190819082b, 0x19081919082b1908, 0x1908192b08080808, 0x19082b0808080819,
    0x19082b0808081908, 0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919,
    0x19082b1908080808, 0x19082b1919192b08, 0x19082b19192b0819, 0x19082b192b08082b,
    0x19082b2b19081919, 0x19082b2b2b190808, 0x1919080808080808, 0x1919080808082b08,
    0x1919080808190819, 0x1919080808192b19, 0x19190808082b0808, 0x191908082b080808,
    0x191908082b082b08, 0x1919081908081908, 0x191908191908082b, 0x191908192b2b1908,
    0x1919082b2b190819, 0x191919082b190808, 0x191919082b19082b, 0x1919191908082b2b,
    0x1919192b08080819, 0x1919192b19191908, 0x19192b0808080808, 0x19192b0808190819,
    0x19192b0808192b19, 0x19192b08192b1908, 0x19192b1919080808, 0x19192b2b08082b08,
    0x192b080808081908, 0x192b080808190808, 0x192b080819080808, 0x192b0808192b2b08,
    0x192b081908080808, 0x192b081919191919, 0x192b082b08192b08, 0x192b082b192b0808,
    0x192b190808080808, 0x192b190808081919, 0x192b191908190808, 0x192b19190819082b,
    0x192b19192b081908, 0x192b2b081908082b, 0x2b08080808080808, 0x2b0808080808082b,
    0x2b08080808082b2b, 0x2b08080819080819, 0x2b0808082b08082b, 0x2b08081908081908,
    0x2b08081908192b08, 0x2b08081919080808, 0x2b08082b08190819, 0x2b08190808080819,
    0x2b08190808081908, 0x2b08190808190808, 0x2b08190808191919, 0x2b08190819080808,
    0x2b081908192b0808, 0x2b08191908080808, 0x2b0819191908192b, 0x2b0819192b191908,
    0x2b08192b08082b19, 0x2b08192b19080808, 0x2b08192b192b0808, 0x2b082b080808082b,
    0x2b082b1908081908, 0x2b082b2b08190819, 0x2b19080808081908, 0x2b19080808190808,
    0x2b190808082b1908, 0x2b19080819080808, 0x2b1908082b2b0819, 0x2b1908190819192b,
    0x2b1908192b080808, 0x2b19082b19081919, 0x2b19190808080808, 0x2b191908082b082b,
    0x2b19190819081908, 0x2b19191919190819, 0x2b192b082b080819, 0x2b192b19082b0808,
    0x2b2b08080808082b, 0x2b2b080819190808, 0x2b2b08082b081919, 0x2b2b081908082b19,
    0x2b2b082b08080808, 0x2b2b190808192b08, 0x2b2b2b0819190808, 0x2b2b2b1908081908,
GGML_TABLE_END()

GGML_TABLE_BEGIN(uint64_t, iq2xs_grid, 512)
    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x080808082b080808,
    0x080808082b08082b, 0x080808082b081919, 0x080808082b082b08, 0x080808082b190819,
    0x080808082b191908, 0x080808082b192b19, 0x080808082b2b0808, 0x0808081908080819,
    0x0808081908081908, 0x080808190808192b, 0x0808081908082b19, 0x0808081908190808,
    0x080808190819082b, 0x0808081908191919, 0x0808081908192b08, 0x0808081908192b2b,
    0x08080819082b0819, 0x08080819082b1908, 0x0808081919080808, 0x080808191908082b,
    0x0808081919081919, 0x0808081919082b08, 0x0808081919190819, 0x0808081919191908,
    0x08080819192b0808, 0x08080819192b2b08, 0x080808192b080819, 0x080808192b081908,
    0x080808192b190808, 0x0808082b08080808, 0x0808082b0808082b, 0x0808082b08081919,
    0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908, 0x0808082b082b0808,
    0x0808082b19080819, 0x0808082b19081908, 0x0808082b19190808, 0x0808082b19191919,
    0x0808082b2b080808, 0x0808082b2b082b2b, 0x0808190808080819, 0x0808190808081908,
    0x080819080808192b, 0x0808190808082b19, 0x0808190808190808, 0x080819080819082b,
    0x0808190808191919, 0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908,
    0x0808190819080808, 0x080819081908082b, 0x0808190819081919, 0x0808190819082b08,
    0x0808190819190819, 0x0808190819191908, 0x080819081919192b, 0x08081908192b0808,
    0x080819082b080819, 0x080819082b081908, 0x080819082b190808, 0x0808191908080808,
    0x080819190808082b, 0x0808191908081919, 0x0808191908082b08, 0x0808191908190819,
    0x0808191908191908, 0x08081919082b0808, 0x0808191919080819, 0x0808191919081908,
    0x0808191919190808, 0x08081919192b0819, 0x080819192b080808, 0x0808192b08080819,
    0x0808192b08081908, 0x0808192b08190808, 0x0808192b082b192b, 0x0808192b19080808,
    0x0808192b1908082b, 0x0808192b2b081908, 0x08082b0808080808, 0x08082b080808082b,
    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808082b2b, 0x08082b0808190819,
    0x08082b0808191908, 0x08082b08082b0808, 0x08082b08082b1919, 0x08082b0819080819,
    0x08082b0819081908, 0x08082b0819190808, 0x08082b0819192b08, 0x08082b082b080808,
    0x08082b082b2b0808, 0x08082b082b2b2b2b, 0x08082b1908080819, 0x08082b1908081908,
    0x08082b1908190808, 0x08082b1919080808, 0x08082b192b080819, 0x08082b192b082b19,
    0x08082b2b08080808, 0x08082b2b082b0808, 0x08082b2b082b2b08, 0x08082b2b2b19192b,
    0x08082b2b2b2b0808, 0x0819080808080819, 0x0819080808081908, 0x081908080808192b,
    0x0819080808082b19, 0x0819080808190808, 0x081908080819082b, 0x0819080808191919,
    0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908, 0x0819080819080808,
    0x081908081908082b, 0x0819080819081919, 0x0819080819082b08, 0x0819080819190819,
    0x0819080819191908, 0x08190808192b0808, 0x08190808192b2b2b, 0x081908082b080819,
    0x081908082b081908, 0x081908082b190808, 0x0819081908080808, 0x081908190808082b,
    0x0819081908081919, 0x0819081908082b08, 0x0819081908190819, 0x0819081908191908,
    0x08190819082b0808, 0x0819081919080819, 0x0819081919081908, 0x0819081919190808,
    0x081908192b080808, 0x081908192b191908, 0x081908192b19192b, 0x0819082b08080819,
    0x0819082b08081908, 0x0819082b0808192b, 0x0819082b08190808, 0x0819082b19080808,
    0x0819082b192b0808, 0x0819190808080808, 0x081919080808082b, 0x0819190808081919,
    0x0819190808082b08, 0x0819190808190819, 0x0819190808191908, 0x08191908082b0808,
    0x0819190819080819, 0x0819190819081908, 0x0819190819082b19, 0x0819190819190808,
    0x08191908192b1908, 0x081919082b080808, 0x0819191908080819, 0x0819191908081908,
    0x0819191908190808, 0x0819191919080808, 0x0819192b08080808, 0x0819192b08191908,
    0x0819192b19082b19, 0x08192b0808080819, 0x08192b0808081908, 0x08192b0808190808,
    0x08192b080819082b, 0x08192b0819080808, 0x08192b0819191908, 0x08192b082b08192b,
    0x08192b1908080808, 0x08192b1908081919, 0x08192b19192b192b, 0x08192b2b19190819,
    0x08192b2b2b2b2b19, 0x082b080808080808, 0x082b08080808082b, 0x082b080808081919,
    0x082b080808082b08, 0x082b080808082b2b, 0x082b080808190819, 0x082b080808191908,
    0x082b0808082b0808, 0x082b080819080819, 0x082b080819081908, 0x082b080819190808,
    0x082b08082b080808, 0x082b08082b2b0808, 0x082b081908080819, 0x082b081908081908,
    0x082b081908190808, 0x082b081919080808, 0x082b081919082b08, 0x082b0819192b1919,
    0x082b082b08080808, 0x082b082b082b082b, 0x082b082b2b080808, 0x082b082b2b2b2b08,
    0x082b190808080819, 0x082b190808081908, 0x082b190808190808, 0x082b1908082b2b19,
    0x082b190819080808, 0x082b191908080808, 0x082b191919080819, 0x082b19191919082b,
    0x082b19192b192b19, 0x082b192b08080819, 0x082b192b08192b2b, 0x082b192b2b2b192b,
    0x082b2b0808080808, 0x082b2b0808082b08, 0x082b2b0808082b2b, 0x082b2b08082b0808,
    0x082b2b0819191919, 0x082b2b082b082b08, 0x082b2b082b2b082b, 0x082b2b19192b2b08,
    0x082b2b192b190808, 0x082b2b2b08082b08, 0x082b2b2b082b0808, 0x082b2b2b2b08082b,
    0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819, 0x1908080808081908,
    0x190808080808192b, 0x1908080808082b19, 0x1908080808190808, 0x190808080819082b,
    0x1908080808191919, 0x1908080808192b08, 0x19080808082b0819, 0x19080808082b1908,
    0x1908080819080808, 0x190808081908082b, 0x1908080819081919, 0x1908080819082b08,
    0x1908080819082b2b, 0x1908080819190819, 0x1908080819191908, 0x19080808192b0808,
    0x19080808192b1919, 0x190808082b080819, 0x190808082b081908, 0x190808082b190808,
    0x1908081908080808, 0x190808190808082b, 0x1908081908081919, 0x1908081908082b08,
    0x1908081908190819, 0x1908081908191908, 0x19080819082b0808, 0x1908081919080819,
    0x1908081919081908, 0x1908081919190808, 0x190808192b080808, 0x190808192b081919,
    0x190808192b2b082b, 0x1908082b08080819, 0x1908082b08081908, 0x1908082b08190808,
    0x1908082b0819082b, 0x1908082b082b2b19, 0x1908082b19080808, 0x1908190808080808,
    0x190819080808082b, 0x1908190808081919, 0x1908190808082b08, 0x1908190808190819,
    0x1908190808191908, 0x1908190808192b19, 0x19081908082b0808, 0x1908190819080819,
    0x1908190819081908, 0x1908190819190808, 0x190819082b080808, 0x190819082b191908,
    0x1908191908080819, 0x1908191908081908, 0x1908191908190808, 0x19081919082b1908,
    0x1908191919080808, 0x190819192b192b2b, 0x1908192b08080808, 0x1908192b08082b2b,
    0x1908192b19081908, 0x1908192b19190808, 0x19082b0808080819, 0x19082b0808081908,
    0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919, 0x19082b0819191908,
    0x19082b08192b082b, 0x19082b1908080808, 0x19082b1908190819, 0x19082b1919081908,
    0x19082b1919190808, 0x19082b19192b2b19, 0x19082b2b08081908, 0x1919080808080808,
    0x191908080808082b, 0x1919080808081919, 0x1919080808082b08, 0x1919080808190819,
    0x1919080808191908, 0x19190808082b0808, 0x19190808082b2b08, 0x1919080819080819,
    0x1919080819081908, 0x1919080819190808, 0x191908082b080808, 0x1919081908080819,
    0x1919081908081908, 0x1919081908190808, 0x1919081908191919, 0x1919081919080808,
    0x191908191908082b, 0x1919082b08080808, 0x1919082b19081908, 0x1919082b2b2b2b2b,
    0x1919190808080819, 0x1919190808081908, 0x1919190808190808, 0x19191908082b0819,
    0x1919190819080808, 0x19191908192b0808, 0x191919082b080819, 0x191919082b2b0819,
    0x1919191908080808, 0x1919191908082b08, 0x191919192b080808, 0x191919192b082b08,
    0x1919192b082b0819, 0x1919192b192b2b08, 0x1919192b2b2b0819, 0x19192b0808080808,
    0x19192b0808191908, 0x19192b0819080819, 0x19192b0819190808, 0x19192b082b192b19,
    0x19192b1908192b2b, 0x19192b1919080808, 0x19192b191908082b, 0x19192b2b2b081919,
    0x192b080808080819, 0x192b080808081908, 0x192b080808190808, 0x192b080819080808,
    0x192b080819191908, 0x192b0808192b082b, 0x192b08082b08192b, 0x192b08082b2b2b19,
    0x192b081908080808, 0x192b082b082b1908, 0x192b082b19082b2b, 0x192b082b2b19082b,
    0x192b190808080808, 0x192b19080819192b, 0x192b191908190808, 0x192b191919080808,
    0x192b191919081919, 0x192b19192b2b1908, 0x192b2b0808080819, 0x192b2b08192b2b2b,
    0x192b2b19082b1919, 0x192b2b2b0808192b, 0x192b2b2b19191908, 0x192b2b2b192b082b,
    0x2b08080808080808, 0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08,
    0x2b08080808190819, 0x2b08080808191908, 0x2b080808082b0808, 0x2b080808082b2b2b,
    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808082b080808,
    0x2b0808082b08082b, 0x2b0808082b2b2b08, 0x2b0808082b2b2b2b, 0x2b08081908080819,
    0x2b08081908081908, 0x2b0808190808192b, 0x2b08081908190808, 0x2b08081919080808,
    0x2b08081919190819, 0x2b08081919192b19, 0x2b08082b08080808, 0x2b08082b082b0808,
    0x2b08082b2b080808, 0x2b08082b2b08082b, 0x2b08082b2b2b0808, 0x2b08082b2b2b2b08,
    0x2b08190808080819, 0x2b08190808081908, 0x2b08190808190808, 0x2b0819080819082b,
    0x2b08190808191919, 0x2b08190819080808, 0x2b081908192b0808, 0x2b0819082b082b19,
    0x2b08191908080808, 0x2b08191919081908, 0x2b0819192b2b1919, 0x2b08192b08192b08,
    0x2b08192b192b2b2b, 0x2b082b0808080808, 0x2b082b0808082b08, 0x2b082b08082b1919,
    0x2b082b0819192b2b, 0x2b082b082b080808, 0x2b082b082b08082b, 0x2b082b082b2b2b08,
    0x2b082b190808192b, 0x2b082b2b082b082b, 0x2b082b2b2b080808, 0x2b082b2b2b082b08,
    0x2b082b2b2b19192b, 0x2b082b2b2b2b2b08, 0x2b19080808080819, 0x2b19080808081908,
    0x2b19080808190808, 0x2b19080819080808, 0x2b1908081919192b, 0x2b1908082b081908,
    0x2b19081908080808, 0x2b190819082b082b, 0x2b190819192b1908, 0x2b19082b1919192b,
    0x2b19082b2b082b19, 0x2b19190808080808, 0x2b19190808081919, 0x2b19190819081908,
    0x2b19190819190808, 0x2b19190819192b08, 0x2b191919082b2b19, 0x2b1919192b190808,
    0x2b1919192b19082b, 0x2b19192b19080819, 0x2b192b0819190819, 0x2b192b082b2b192b,
    0x2b192b1919082b19, 0x2b192b2b08191919, 0x2b192b2b192b0808, 0x2b2b080808080808,
    0x2b2b08080808082b, 0x2b2b080808082b08, 0x2b2b080808082b2b, 0x2b2b0808082b0808,
    0x2b2b0808082b2b2b, 0x2b2b08082b2b0808, 0x2b2b081919190819, 0x2b2b081919192b19,
    0x2b2b08192b2b192b, 0x2b2b082b08080808, 0x2b2b082b0808082b, 0x2b2b082b08082b08,
    0x2b2b082b082b2b2b, 0x2b2b082b2b080808, 0x2b2b082b2b2b0808, 0x2b2b190819080808,
    0x2b2b19082b191919, 0x2b2b192b192b1919, 0x2b2b192b2b192b08, 0x2b2b2b0808082b2b,
    0x2b2b2b08082b0808, 0x2b2b2b08082b082b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b0808,
    0x2b2b2b082b2b2b08, 0x2b2b2b1908081908, 0x2b2b2b192b081908, 0x2b2b2b192b08192b,
    0x2b2b2b2b082b2b08, 0x2b2b2b2b082b2b2b, 0x2b2b2b2b2b190819, 0x2b2b2b2b2b2b2b2b,
GGML_TABLE_END()

GGML_TABLE_BEGIN(uint64_t, iq2s_grid, 1024)
    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x08080808192b192b,
    0x08080808192b2b19, 0x080808082b080808, 0x080808082b08082b, 0x080808082b081919,
    0x080808082b082b08, 0x080808082b190819, 0x080808082b191908, 0x080808082b2b0808,
    0x080808082b2b1919, 0x080808082b2b2b2b, 0x0808081908080819, 0x0808081908081908,
    0x080808190808192b, 0x0808081908082b19, 0x0808081908190808, 0x080808190819082b,
    0x0808081908191919, 0x0808081908192b08, 0x08080819082b0819, 0x08080819082b1908,
    0x0808081919080808, 0x080808191908082b, 0x0808081919081919, 0x0808081919082b08,
    0x0808081919190819, 0x0808081919191908, 0x080808191919192b, 0x0808081919192b19,
    0x08080819192b0808, 0x08080819192b1919, 0x08080819192b2b08, 0x080808192b080819,
    0x080808192b081908, 0x080808192b190808, 0x080808192b19082b, 0x080808192b191919,
    0x080808192b2b0819, 0x080808192b2b1908, 0x0808082b08080808, 0x0808082b0808082b,
    0x0808082b08081919, 0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908,
    0x0808082b082b0808, 0x0808082b082b2b2b, 0x0808082b19080819, 0x0808082b19081908,
    0x0808082b1908192b, 0x0808082b19082b19, 0x0808082b19190808, 0x0808082b19191919,
    0x0808082b2b080808, 0x0808082b2b081919, 0x0808082b2b082b2b, 0x0808082b2b191908,
    0x0808082b2b2b082b, 0x0808190808080819, 0x0808190808081908, 0x080819080808192b,
    0x0808190808082b19, 0x0808190808190808, 0x080819080819082b, 0x0808190808191919,
    0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908, 0x08081908082b192b,
    0x08081908082b2b19, 0x0808190819080808, 0x080819081908082b, 0x0808190819081919,
    0x0808190819082b08, 0x0808190819082b2b, 0x0808190819190819, 0x0808190819191908,
    0x080819081919192b, 0x0808190819192b19, 0x08081908192b0808, 0x08081908192b082b,
    0x08081908192b1919, 0x080819082b080819, 0x080819082b081908, 0x080819082b08192b,
    0x080819082b082b19, 0x080819082b190808, 0x080819082b191919, 0x080819082b192b08,
    0x080819082b2b0819, 0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b,
    0x0808191908081919, 0x0808191908082b08, 0x0808191908082b2b, 0x0808191908190819,
    0x0808191908191908, 0x080819190819192b, 0x0808191908192b19, 0x08081919082b0808,
    0x08081919082b1919, 0x08081919082b2b08, 0x0808191919080819, 0x0808191919081908,
    0x080819191908192b, 0x0808191919082b19, 0x0808191919190808, 0x080819191919082b,
    0x0808191919191919, 0x0808191919192b08, 0x08081919192b0819, 0x08081919192b1908,
    0x080819192b080808, 0x080819192b08082b, 0x080819192b081919, 0x080819192b082b08,
    0x080819192b190819, 0x080819192b191908, 0x080819192b2b0808, 0x0808192b08080819,
    0x0808192b08081908, 0x0808192b0808192b, 0x0808192b08082b19, 0x0808192b08190808,
    0x0808192b08191919, 0x0808192b19080808, 0x0808192b19081919, 0x0808192b19082b08,
    0x0808192b19190819, 0x0808192b19191908, 0x0808192b192b0808, 0x0808192b2b080819,
    0x0808192b2b081908, 0x0808192b2b190808, 0x08082b0808080808, 0x08082b080808082b,
    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808190819, 0x08082b0808191908,
    0x08082b080819192b, 0x08082b0808192b19, 0x08082b08082b0808, 0x08082b08082b1919,
    0x08082b08082b2b2b, 0x08082b0819080819, 0x08082b0819081908, 0x08082b081908192b,
    0x08082b0819082b19, 0x08082b0819190808, 0x08082b081919082b, 0x08082b0819191919,
    0x08082b0819192b08, 0x08082b08192b0819, 0x08082b08192b1908, 0x08082b082b080808,
    0x08082b082b081919, 0x08082b082b191908, 0x08082b082b2b2b2b, 0x08082b1908080819,
    0x08082b1908081908, 0x08082b1908190808, 0x08082b190819082b, 0x08082b1908191919,
    0x08082b1908192b08, 0x08082b19082b0819, 0x08082b1919080808, 0x08082b1919081919,
    0x08082b1919082b08, 0x08082b1919190819, 0x08082b1919191908, 0x08082b19192b0808,
    0x08082b192b080819, 0x08082b192b190808, 0x08082b2b08080808, 0x08082b2b08190819,
    0x08082b2b08191908, 0x08082b2b082b082b, 0x08082b2b082b2b08, 0x08082b2b082b2b2b,
    0x08082b2b19190808, 0x08082b2b2b192b19, 0x0819080808080819, 0x0819080808081908,
    0x081908080808192b, 0x0819080808082b19, 0x0819080808190808, 0x081908080819082b,
    0x0819080808191919, 0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908,
    0x08190808082b192b, 0x0819080819080808, 0x081908081908082b, 0x0819080819081919,
    0x0819080819082b08, 0x0819080819190819, 0x0819080819191908, 0x081908081919192b,
    0x0819080819192b19, 0x08190808192b0808, 0x08190808192b082b, 0x08190808192b1919,
    0x08190808192b2b08, 0x081908082b080819, 0x081908082b081908, 0x081908082b08192b,
    0x081908082b190808, 0x081908082b191919, 0x081908082b192b08, 0x081908082b2b0819,
    0x081908082b2b1908, 0x0819081908080808, 0x081908190808082b, 0x0819081908081919,
    0x0819081908082b08, 0x0819081908082b2b, 0x0819081908190819, 0x0819081908191908,
    0x081908190819192b, 0x0819081908192b19, 0x08190819082b0808, 0x08190819082b082b,
    0x08190819082b1919, 0x08190819082b2b08, 0x0819081919080819, 0x0819081919081908,
    0x081908191908192b, 0x0819081919082b19, 0x0819081919190808, 0x081908191919082b,
    0x0819081919191919, 0x0819081919192b08, 0x08190819192b0819, 0x08190819192b1908,
    0x081908192b080808, 0x081908192b08082b, 0x081908192b081919, 0x081908192b082b08,
    0x081908192b190819, 0x081908192b191908, 0x0819082b08080819, 0x0819082b08081908,
    0x0819082b08082b19, 0x0819082b08190808, 0x0819082b08191919, 0x0819082b082b0819,
    0x0819082b082b1908, 0x0819082b19080808, 0x0819082b19081919, 0x0819082b19190819,
    0x0819082b19191908, 0x0819082b2b080819, 0x0819082b2b081908, 0x0819082b2b190808,
    0x0819190808080808, 0x081919080808082b, 0x0819190808081919, 0x0819190808082b08,
    0x0819190808190819, 0x0819190808191908, 0x081919080819192b, 0x0819190808192b19,
    0x08191908082b0808, 0x08191908082b1919, 0x08191908082b2b08, 0x0819190819080819,
    0x0819190819081908, 0x081919081908192b, 0x0819190819082b19, 0x0819190819190808,
    0x081919081919082b, 0x0819190819191919, 0x0819190819192b08, 0x08191908192b0819,
    0x08191908192b1908, 0x081919082b080808, 0x081919082b08082b, 0x081919082b081919,
    0x081919082b082b08, 0x081919082b190819, 0x081919082b191908, 0x081919082b2b0808,
    0x0819191908080819, 0x0819191908081908, 0x081919190808192b, 0x0819191908082b19,
    0x0819191908190808, 0x081919190819082b, 0x0819191908191919, 0x0819191908192b08,
    0x08191919082b0819, 0x08191919082b1908, 0x0819191919080808, 0x081919191908082b,
    0x0819191919081919, 0x0819191919082b08, 0x0819191919190819, 0x0819191919191908,
    0x08191919192b0808, 0x081919192b080819, 0x081919192b081908, 0x081919192b190808,
    0x0819192b08080808, 0x0819192b08081919, 0x0819192b08082b08, 0x0819192b08190819,
    0x0819192b08191908, 0x0819192b082b0808, 0x0819192b19080819, 0x0819192b19081908,
    0x0819192b19190808, 0x0819192b2b080808, 0x0819192b2b2b2b2b, 0x08192b0808080819,
    0x08192b0808081908, 0x08192b080808192b, 0x08192b0808082b19, 0x08192b0808190808,
    0x08192b0808191919, 0x08192b0808192b08, 0x08192b08082b0819, 0x08192b0819080808,
    0x08192b081908082b, 0x08192b0819081919, 0x08192b0819082b08, 0x08192b0819190819,
    0x08192b0819191908, 0x08192b08192b0808, 0x08192b082b080819, 0x08192b082b081908,
    0x08192b1908080808, 0x08192b190808082b, 0x08192b1908081919, 0x08192b1908082b08,
    0x08192b1908190819, 0x08192b1908191908, 0x08192b19082b0808, 0x08192b1919080819,
    0x08192b1919081908, 0x08192b1919190808, 0x08192b19192b2b19, 0x08192b192b2b082b,
    0x08192b2b08081908, 0x08192b2b08190808, 0x08192b2b19080808, 0x08192b2b1919192b,
    0x082b080808080808, 0x082b08080808082b, 0x082b080808081919, 0x082b080808082b08,
    0x082b080808190819, 0x082b080808191908, 0x082b08080819192b, 0x082b080808192b19,
    0x082b0808082b0808, 0x082b0808082b1919, 0x082b0808082b2b2b, 0x082b080819080819,
    0x082b080819081908, 0x082b080819190808, 0x082b08081919082b, 0x082b080819191919,
    0x082b0808192b1908, 0x082b08082b080808, 0x082b08082b082b2b, 0x082b08082b191908,
    0x082b08082b2b2b2b, 0x082b081908080819, 0x082b081908081908, 0x082b081908190808,
    0x082b08190819082b, 0x082b081908191919, 0x082b0819082b0819, 0x082b081919080808,
    0x082b08191908082b, 0x082b081919081919, 0x082b081919190819, 0x082b081919191908,
    0x082b0819192b0808, 0x082b08192b080819, 0x082b08192b081908, 0x082b08192b190808,
    0x082b082b08080808, 0x082b082b08082b2b, 0x082b082b082b082b, 0x082b082b082b2b08,
    0x082b082b082b2b2b, 0x082b082b19081908, 0x082b082b19190808, 0x082b082b2b082b08,
    0x082b082b2b082b2b, 0x082b082b2b2b2b08, 0x082b190808080819, 0x082b190808081908,
    0x082b19080808192b, 0x082b190808082b19, 0x082b190808190808, 0x082b190808191919,
    0x082b190808192b08, 0x082b1908082b0819, 0x082b1908082b1908, 0x082b190819080808,
    0x082b19081908082b, 0x082b190819081919, 0x082b190819082b08, 0x082b190819190819,
    0x082b190819191908, 0x082b1908192b0808, 0x082b19082b080819, 0x082b19082b081908,
    0x082b19082b190808, 0x082b191908080808, 0x082b191908081919, 0x082b191908082b08,
    0x082b191908190819, 0x082b191908191908, 0x082b1919082b0808, 0x082b191919080819,
    0x082b191919081908, 0x082b191919190808, 0x082b1919192b192b, 0x082b19192b080808,
    0x082b192b08080819, 0x082b192b08081908, 0x082b192b08190808, 0x082b192b19080808,
    0x082b192b19192b19, 0x082b2b0808080808, 0x082b2b0808081919, 0x082b2b0808190819,
    0x082b2b0808191908, 0x082b2b0819080819, 0x082b2b0819081908, 0x082b2b0819190808,
    0x082b2b082b082b2b, 0x082b2b082b2b2b2b, 0x082b2b1908080819, 0x082b2b1908081908,
    0x082b2b1908190808, 0x082b2b192b191919, 0x082b2b2b08082b2b, 0x082b2b2b082b082b,
    0x082b2b2b192b1908, 0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819,
    0x1908080808081908, 0x190808080808192b, 0x1908080808082b19, 0x1908080808190808,
    0x190808080819082b, 0x1908080808191919, 0x1908080808192b08, 0x1908080808192b2b,
    0x19080808082b0819, 0x19080808082b1908, 0x19080808082b192b, 0x1908080819080808,
    0x190808081908082b, 0x1908080819081919, 0x1908080819082b08, 0x1908080819082b2b,
    0x1908080819190819, 0x1908080819191908, 0x190808081919192b, 0x1908080819192b19,
    0x19080808192b0808, 0x19080808192b082b, 0x19080808192b1919, 0x190808082b080819,
    0x190808082b081908, 0x190808082b190808, 0x190808082b191919, 0x190808082b192b08,
    0x190808082b2b0819, 0x190808082b2b1908, 0x1908081908080808, 0x190808190808082b,
    0x1908081908081919, 0x1908081908082b08, 0x1908081908190819, 0x1908081908191908,
    0x190808190819192b, 0x1908081908192b19, 0x19080819082b0808, 0x19080819082b082b,
    0x19080819082b1919, 0x1908081919080819, 0x1908081919081908, 0x190808191908192b,
    0x1908081919082b19, 0x1908081919190808, 0x190808191919082b, 0x1908081919191919,
    0x1908081919192b08, 0x19080819192b0819, 0x19080819192b1908, 0x190808192b080808,
    0x190808192b08082b, 0x190808192b081919, 0x190808192b082b08, 0x190808192b190819,
    0x190808192b191908, 0x190808192b2b0808, 0x1908082b08080819, 0x1908082b08081908,
    0x1908082b08190808, 0x1908082b0819082b, 0x1908082b08191919, 0x1908082b08192b08,
    0x1908082b082b1908, 0x1908082b19080808, 0x1908082b19081919, 0x1908082b19082b08,
    0x1908082b19190819, 0x1908082b19191908, 0x1908082b192b0808, 0x1908082b2b080819,
    0x1908082b2b081908, 0x1908190808080808, 0x190819080808082b, 0x1908190808081919,
    0x1908190808082b08, 0x1908190808082b2b, 0x1908190808190819, 0x1908190808191908,
    0x190819080819192b, 0x1908190808192b19, 0x19081908082b0808, 0x19081908082b082b,
    0x19081908082b1919, 0x19081908082b2b08, 0x1908190819080819, 0x1908190819081908,
    0x190819081908192b, 0x1908190819082b19, 0x1908190819190808, 0x190819081919082b,
    0x1908190819191919, 0x1908190819192b08, 0x19081908192b0819, 0x19081908192b1908,
    0x190819082b080808, 0x190819082b08082b, 0x190819082b081919, 0x190819082b082b08,
    0x190819082b190819, 0x190819082b191908, 0x190819082b2b0808, 0x1908191908080819,
    0x1908191908081908, 0x190819190808192b, 0x1908191908082b19, 0x1908191908190808,
    0x190819190819082b, 0x1908191908191919, 0x1908191908192b08, 0x19081919082b0819,
    0x19081919082b1908, 0x1908191919080808, 0x190819191908082b, 0x1908191919081919,
    0x1908191919082b08, 0x1908191919190819, 0x1908191919191908, 0x19081919192b0808,
    0x19081919192b2b2b, 0x190819192b080819, 0x190819192b081908, 0x190819192b190808,
    0x1908192b08080808, 0x1908192b0808082b, 0x1908192b08081919, 0x1908192b08082b08,
    0x1908192b08190819, 0x1908192b08191908, 0x1908192b082b0808, 0x1908192b19080819,
    0x1908192b19081908, 0x1908192b19190808, 0x1908192b2b080808, 0x1908192b2b2b1919,
    0x19082b0808080819, 0x19082b0808081908, 0x19082b0808082b19, 0x19082b0808190808,
    0x19082b080819082b, 0x19082b0808191919, 0x19082b0808192b08, 0x19082b08082b0819,
    0x19082b08082b1908, 0x19082b0819080808, 0x19082b081908082b, 0x19082b0819081919,
    0x19082b0819082b08, 0x19082b0819190819, 0x19082b0819191908, 0x19082b08192b0808,
    0x19082b082b081908, 0x19082b082b190808, 0x19082b1908080808, 0x19082b190808082b,
    0x19082b1908081919, 0x19082b1908082b08, 0x19082b1908190819, 0x19082b1908191908,
    0x19082b19082b0808, 0x19082b1919080819, 0x19082b1919081908, 0x19082b1919190808,
    0x19082b192b080808, 0x19082b192b19192b, 0x19082b2b08080819, 0x19082b2b08081908,
    0x19082b2b08190808, 0x19082b2b19080808, 0x1919080808080808, 0x191908080808082b,
    0x1919080808081919, 0x1919080808082b08, 0x1919080808190819, 0x1919080808191908,
    0x191908080819192b, 0x1919080808192b19, 0x19190808082b0808, 0x19190808082b082b,
    0x19190808082b1919, 0x19190808082b2b08, 0x1919080819080819, 0x1919080819081908,
    0x191908081908192b, 0x1919080819082b19, 0x1919080819190808, 0x191908081919082b,
    0x1919080819191919, 0x1919080819192b08, 0x19190808192b0819, 0x19190808192b1908,
    0x191908082b080808, 0x191908082b08082b, 0x191908082b081919, 0x191908082b082b08,
    0x191908082b190819, 0x191908082b191908, 0x1919081908080819, 0x1919081908081908,
    0x191908190808192b, 0x1919081908082b19, 0x1919081908190808, 0x191908190819082b,
    0x1919081908191919, 0x1919081908192b08, 0x19190819082b0819, 0x19190819082b1908,
    0x1919081919080808, 0x191908191908082b, 0x1919081919081919, 0x1919081919082b08,
    0x1919081919190819, 0x1919081919191908, 0x19190819192b0808, 0x191908192b080819,
    0x191908192b081908, 0x191908192b190808, 0x1919082b08080808, 0x1919082b08081919,
    0x1919082b08082b08, 0x1919082b08190819, 0x1919082b08191908, 0x1919082b082b0808,
    0x1919082b19080819, 0x1919082b19081908, 0x1919082b19190808, 0x1919082b192b2b19,
    0x1919082b2b080808, 0x1919190808080819, 0x1919190808081908, 0x191919080808192b,
    0x1919190808082b19, 0x1919190808190808, 0x191919080819082b, 0x1919190808191919,
    0x1919190808192b08, 0x19191908082b0819, 0x19191908082b1908, 0x1919190819080808,
    0x191919081908082b, 0x1919190819081919, 0x1919190819082b08, 0x1919190819190819,
    0x1919190819191908, 0x19191908192b0808, 0x191919082b080819, 0x191919082b081908,
    0x191919082b190808, 0x1919191908080808, 0x191919190808082b, 0x1919191908081919,
    0x1919191908082b08, 0x1919191908190819, 0x1919191908191908, 0x19191919082b0808,
    0x1919191919080819, 0x1919191919081908, 0x1919191919190808, 0x191919192b080808,
    0x1919192b08080819, 0x1919192b08081908, 0x1919192b08190808, 0x1919192b082b192b,
    0x1919192b19080808, 0x19192b0808080808, 0x19192b080808082b, 0x19192b0808081919,
    0x19192b0808082b08, 0x19192b0808190819, 0x19192b0808191908, 0x19192b08082b0808,
    0x19192b0819080819, 0x19192b0819081908, 0x19192b0819190808, 0x19192b0819192b2b,
    0x19192b082b080808, 0x19192b1908080819, 0x19192b1908081908, 0x19192b1908190808,
    0x19192b1919080808, 0x19192b2b08080808, 0x19192b2b08192b19, 0x19192b2b2b081919,
    0x19192b2b2b2b2b08, 0x192b080808080819, 0x192b080808081908, 0x192b08080808192b,
    0x192b080808190808, 0x192b08080819082b, 0x192b080808191919, 0x192b080808192b08,
    0x192b0808082b0819, 0x192b0808082b1908, 0x192b080819080808, 0x192b080819081919,
    0x192b080819082b08, 0x192b080819190819, 0x192b080819191908, 0x192b0808192b0808,
    0x192b08082b081908, 0x192b08082b190808, 0x192b081908080808, 0x192b08190808082b,
    0x192b081908081919, 0x192b081908082b08, 0x192b081908190819, 0x192b081908191908,
    0x192b0819082b0808, 0x192b081919080819, 0x192b081919081908, 0x192b081919190808,
    0x192b08192b080808, 0x192b08192b192b19, 0x192b082b08081908, 0x192b082b08190808,
    0x192b082b19080808, 0x192b082b1919192b, 0x192b082b2b2b0819, 0x192b190808080808,
    0x192b190808081919, 0x192b190808082b08, 0x192b190808190819, 0x192b190808191908,
    0x192b1908082b0808, 0x192b190819080819, 0x192b190819081908, 0x192b190819190808,
    0x192b19082b080808, 0x192b191908080819, 0x192b191908081908, 0x192b191908190808,
    0x192b191919080808, 0x192b191919082b2b, 0x192b1919192b2b08, 0x192b19192b19082b,
    0x192b192b08080808, 0x192b192b2b191908, 0x192b2b0808080819, 0x192b2b0808081908,
    0x192b2b0808190808, 0x192b2b08192b1919, 0x192b2b082b192b08, 0x192b2b1908080808,
    0x192b2b19082b2b2b, 0x192b2b2b1908082b, 0x192b2b2b2b2b0819, 0x2b08080808080808,
    0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08, 0x2b08080808190819,
    0x2b08080808191908, 0x2b08080808192b19, 0x2b080808082b0808, 0x2b080808082b1919,
    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808081919082b,
    0x2b08080819191919, 0x2b08080819192b08, 0x2b080808192b0819, 0x2b0808082b080808,
    0x2b0808082b081919, 0x2b0808082b190819, 0x2b0808082b191908, 0x2b08081908080819,
    0x2b08081908081908, 0x2b08081908082b19, 0x2b08081908190808, 0x2b0808190819082b,
    0x2b08081908191919, 0x2b08081908192b08, 0x2b080819082b0819, 0x2b080819082b1908,
    0x2b08081919080808, 0x2b0808191908082b, 0x2b08081919081919, 0x2b08081919082b08,
    0x2b08081919190819, 0x2b08081919191908, 0x2b0808192b080819, 0x2b0808192b081908,
    0x2b0808192b190808, 0x2b0808192b2b2b19, 0x2b08082b08080808, 0x2b08082b08081919,
    0x2b08082b08082b2b, 0x2b08082b08190819, 0x2b08082b08191908, 0x2b08082b19080819,
    0x2b08082b19081908, 0x2b08082b19190808, 0x2b08190808080819, 0x2b08190808081908,
    0x2b0819080808192b, 0x2b08190808082b19, 0x2b08190808190808, 0x2b0819080819082b,
    0x2b08190808191919, 0x2b08190808192b08, 0x2b081908082b0819, 0x2b08190819080808,
    0x2b0819081908082b, 0x2b08190819081919, 0x2b08190819082b08, 0x2b08190819190819,
    0x2b08190819191908, 0x2b081908192b0808, 0x2b0819082b080819, 0x2b0819082b081908,
    0x2b0819082b190808, 0x2b08191908080808, 0x2b0819190808082b, 0x2b08191908081919,
    0x2b08191908082b08, 0x2b08191908190819, 0x2b08191908191908, 0x2b081919082b0808,
    0x2b08191919080819, 0x2b08191919081908, 0x2b08191919190808, 0x2b0819192b080808,
    0x2b0819192b082b2b, 0x2b08192b08080819, 0x2b08192b08081908, 0x2b08192b08190808,
    0x2b08192b082b2b19, 0x2b08192b19080808, 0x2b082b0808080808, 0x2b082b0808081919,
    0x2b082b0808190819, 0x2b082b0808191908, 0x2b082b0819080819, 0x2b082b0819081908,
    0x2b082b0819190808, 0x2b082b082b2b082b, 0x2b082b1908080819, 0x2b082b1908081908,
    0x2b082b1919080808, 0x2b082b19192b1919, 0x2b082b2b082b082b, 0x2b082b2b19192b08,
    0x2b082b2b19192b2b, 0x2b082b2b2b08082b, 0x2b082b2b2b2b082b, 0x2b19080808080819,
    0x2b19080808081908, 0x2b19080808082b19, 0x2b19080808190808, 0x2b1908080819082b,
    0x2b19080808191919, 0x2b19080808192b08, 0x2b190808082b1908, 0x2b19080819080808,
    0x2b1908081908082b, 0x2b19080819081919, 0x2b19080819082b08, 0x2b19080819190819,
    0x2b19080819191908, 0x2b190808192b0808, 0x2b1908082b080819, 0x2b1908082b081908,
    0x2b1908082b190808, 0x2b19081908080808, 0x2b19081908081919, 0x2b19081908190819,
    0x2b19081908191908, 0x2b19081919080819, 0x2b19081919081908, 0x2b19081919190808,
    0x2b19081919192b2b, 0x2b19082b08080819, 0x2b19082b08081908, 0x2b19082b08190808,
    0x2b19082b19080808, 0x2b19082b2b2b192b, 0x2b19190808080808, 0x2b1919080808082b,
    0x2b19190808081919, 0x2b19190808082b08, 0x2b19190808190819, 0x2b19190808191908,
    0x2b191908082b0808, 0x2b19190819080819, 0x2b19190819081908, 0x2b19190819190808,
    0x2b1919082b080808, 0x2b1919082b19192b, 0x2b19191908080819, 0x2b19191908081908,
    0x2b19191908190808, 0x2b19191919080808, 0x2b1919192b192b08, 0x2b1919192b2b0819,
    0x2b19192b08080808, 0x2b19192b1908192b, 0x2b19192b192b1908, 0x2b192b0808080819,
    0x2b192b0808081908, 0x2b192b0808190808, 0x2b192b08082b192b, 0x2b192b0819080808,
    0x2b192b082b2b2b19, 0x2b192b1908080808, 0x2b192b1919082b19, 0x2b192b191919082b,
    0x2b192b2b2b190808, 0x2b2b080808080808, 0x2b2b080808081919, 0x2b2b080808082b2b,
    0x2b2b080808191908, 0x2b2b0808082b082b, 0x2b2b0808082b2b2b, 0x2b2b080819080819,
    0x2b2b080819081908, 0x2b2b080819190808, 0x2b2b08082b2b082b, 0x2b2b08082b2b2b2b,
    0x2b2b081919080808, 0x2b2b0819192b1919, 0x2b2b082b0808082b, 0x2b2b082b08082b2b,
    0x2b2b082b082b082b, 0x2b2b082b082b2b08, 0x2b2b082b082b2b2b, 0x2b2b082b2b08082b,
    0x2b2b082b2b082b08, 0x2b2b082b2b082b2b, 0x2b2b082b2b2b2b08, 0x2b2b190808080819,
    0x2b2b190808081908, 0x2b2b190808190808, 0x2b2b190819080808, 0x2b2b19082b082b19,
    0x2b2b19082b2b1908, 0x2b2b191908080808, 0x2b2b191908192b19, 0x2b2b192b19190819,
    0x2b2b2b0808082b2b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b082b, 0x2b2b2b1919191908,
    0x2b2b2b192b08192b, 0x2b2b2b2b08082b08, 0x2b2b2b2b08082b2b, 0x2b2b2b2b082b0808,
    0x2b2b2b2b082b082b, 0x2b2b2b2b082b2b08, 0x2b2b2b2b2b082b08, 0x2b2b2b2b2b2b2b2b,
GGML_TABLE_END()

GGML_TABLE_BEGIN(uint32_t, iq3xxs_grid, 256)
    0x04040404, 0x04040414, 0x04040424, 0x04040c0c, 0x04040c1c, 0x04040c3e, 0x04041404, 0x04041414,
    0x04041c0c, 0x04042414, 0x04043e1c, 0x04043e2c, 0x040c040c, 0x040c041c, 0x040c0c04, 0x040c0c14,
    0x040c140c, 0x040c142c, 0x040c1c04, 0x040c1c14, 0x040c240c, 0x040c2c24, 0x040c3e04, 0x04140404,
    0x04140414, 0x04140424, 0x04140c0c, 0x04141404, 0x04141414, 0x04141c0c, 0x04141c1c, 0x04141c3e,
    0x04142c0c, 0x04142c3e, 0x04143e2c, 0x041c040c, 0x041c043e, 0x041c0c04, 0x041c0c14, 0x041c142c,
    0x041c3e04, 0x04240c1c, 0x04241c3e, 0x04242424, 0x04242c3e, 0x04243e1c, 0x04243e2c, 0x042c040c,
    0x042c043e, 0x042c1c14, 0x042c2c14, 0x04341c2c, 0x04343424, 0x043e0c04, 0x043e0c24, 0x043e0c34,
    0x043e241c, 0x043e340c, 0x0c04040c, 0x0c04041c, 0x0c040c04, 0x0c040c14, 0x0c04140c, 0x0c04141c,
    0x0c041c04, 0x0c041c14, 0x0c041c24, 0x0c04243e, 0x0c042c04, 0x0c0c0404, 0x0c0c0414, 0x0c0c0c0c,
    0x0c0c1404, 0x0c0c1414, 0x0c14040c, 0x0c14041c, 0x0c140c04, 0x0c140c14, 0x0c14140c, 0x0c141c04,
    0x0c143e14, 0x0c1c0404, 0x0c1c0414, 0x0c1c1404, 0x0c1c1c0c, 0x0c1c2434, 0x0c1c3434, 0x0c24040c,
    0x0c24042c, 0x0c242c04, 0x0c2c1404, 0x0c2c1424, 0x0c2c2434, 0x0c2c3e0c, 0x0c34042c, 0x0c3e1414,
    0x0c3e2404, 0x14040404, 0x14040414, 0x14040c0c, 0x14040c1c, 0x14041404, 0x14041414, 0x14041434,
    0x14041c0c, 0x14042414, 0x140c040c, 0x140c041c, 0x140c042c, 0x140c0c04, 0x140c0c14, 0x140c140c,
    0x140c1c04, 0x140c341c, 0x140c343e, 0x140c3e04, 0x14140404, 0x14140414, 0x14140c0c, 0x14140c3e,
    0x14141404, 0x14141414, 0x14141c3e, 0x14142404, 0x14142c2c, 0x141c040c, 0x141c0c04, 0x141c0c24,
    0x141c3e04, 0x141c3e24, 0x14241c2c, 0x14242c1c, 0x142c041c, 0x142c143e, 0x142c240c, 0x142c3e24,
    0x143e040c, 0x143e041c, 0x143e0c34, 0x143e242c, 0x1c04040c, 0x1c040c04, 0x1c040c14, 0x1c04140c,
    0x1c04141c, 0x1c042c04, 0x1c04342c, 0x1c043e14, 0x1c0c0404, 0x1c0c0414, 0x1c0c1404, 0x1c0c1c0c,
    0x1c0c2424, 0x1c0c2434, 0x1c14040c, 0x1c14041c, 0x1c140c04, 0x1c14142c, 0x1c142c14, 0x1c143e14,
    0x1c1c0c0c, 0x1c1c1c1c, 0x1c241c04, 0x1c24243e, 0x1c243e14, 0x1c2c0404, 0x1c2c0434, 0x1c2c1414,
    0x1c2c2c2c, 0x1c340c24, 0x1c341c34, 0x1c34341c, 0x1c3e1c1c, 0x1c3e3404, 0x24040424, 0x24040c3e,
    0x24041c2c, 0x24041c3e, 0x24042c1c, 0x24042c3e, 0x240c3e24, 0x24141404, 0x24141c3e, 0x24142404,
    0x24143404, 0x24143434, 0x241c043e, 0x241c242c, 0x24240424, 0x24242c0c, 0x24243424, 0x242c142c,
    0x242c241c, 0x242c3e04, 0x243e042c, 0x243e0c04, 0x243e0c14, 0x243e1c04, 0x2c040c14, 0x2c04240c,
    0x2c043e04, 0x2c0c0404, 0x2c0c0434, 0x2c0c1434, 0x2c0c2c2c, 0x2c140c24, 0x2c141c14, 0x2c143e14,
    0x2c1c0414, 0x2c1c2c1c, 0x2c240c04, 0x2c24141c, 0x2c24143e, 0x2c243e14, 0x2c2c0414, 0x2c2c1c0c,
    0x2c342c04, 0x2c3e1424, 0x2c3e2414, 0x34041424, 0x34042424, 0x34042434, 0x34043424, 0x340c140c,
    0x340c340c, 0x34140c3e, 0x34143424, 0x341c1c04, 0x341c1c34, 0x34242424, 0x342c042c, 0x342c2c14,
    0x34341c1c, 0x343e041c, 0x343e140c, 0x3e04041c, 0x3e04042c, 0x3e04043e, 0x3e040c04, 0x3e041c14,
    0x3e042c14, 0x3e0c1434, 0x3e0c2404, 0x3e140c14, 0x3e14242c, 0x3e142c14, 0x3e1c0404, 0x3e1c0c2c,
    0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04,
GGML_TABLE_END()

GGML_TABLE_BEGIN(uint32_t, iq3s_grid, 512)
    0x01010101, 0x01010103, 0x01010105, 0x0101010b, 0x0101010f, 0x01010301, 0x01010303, 0x01010305,
    0x01010309, 0x0101030d, 0x01010501, 0x01010503, 0x0101050b, 0x01010707, 0x01010901, 0x01010905,
    0x0101090b, 0x0101090f, 0x01010b03, 0x01010b07, 0x01010d01, 0x01010d05, 0x01010f03, 0x01010f09,
    0x01010f0f, 0x01030101, 0x01030103, 0x01030105, 0x01030109, 0x01030301, 0x01030303, 0x0103030b,
    0x01030501, 0x01030507, 0x0103050f, 0x01030703, 0x0103070b, 0x01030909, 0x01030d03, 0x01030d0b,
    0x01030f05, 0x01050101, 0x01050103, 0x0105010b, 0x0105010f, 0x01050301, 0x01050307, 0x0105030d,
    0x01050503, 0x0105050b, 0x01050701, 0x01050709, 0x01050905, 0x0105090b, 0x0105090f, 0x01050b03,
    0x01050b07, 0x01050f01, 0x01050f07, 0x01070107, 0x01070303, 0x0107030b, 0x01070501, 0x01070505,
    0x01070703, 0x01070707, 0x0107070d, 0x01070909, 0x01070b01, 0x01070b05, 0x01070d0f, 0x01070f03,
    0x01070f0b, 0x01090101, 0x01090307, 0x0109030f, 0x01090503, 0x01090509, 0x01090705, 0x01090901,
    0x01090907, 0x01090b03, 0x01090f01, 0x010b0105, 0x010b0109, 0x010b0501, 0x010b0505, 0x010b050d,
    0x010b0707, 0x010b0903, 0x010b090b, 0x010b090f, 0x010b0d0d, 0x010b0f07, 0x010d010d, 0x010d0303,
    0x010d0307, 0x010d0703, 0x010d0b05, 0x010d0f03, 0x010f0101, 0x010f0105, 0x010f0109, 0x010f0501,
    0x010f0505, 0x010f050d, 0x010f0707, 0x010f0b01, 0x010f0b09, 0x03010101, 0x03010103, 0x03010105,
    0x03010109, 0x03010301, 0x03010303, 0x03010307, 0x0301030b, 0x0301030f, 0x03010501, 0x03010505,
    0x03010703, 0x03010709, 0x0301070d, 0x03010b09, 0x03010b0d, 0x03010d03, 0x03010f05, 0x03030101,
    0x03030103, 0x03030107, 0x0303010d, 0x03030301, 0x03030309, 0x03030503, 0x03030701, 0x03030707,
    0x03030903, 0x03030b01, 0x03030b05, 0x03030f01, 0x03030f0d, 0x03050101, 0x03050305, 0x0305030b,
    0x0305030f, 0x03050501, 0x03050509, 0x03050705, 0x03050901, 0x03050907, 0x03050b0b, 0x03050d01,
    0x03050f05, 0x03070103, 0x03070109, 0x0307010f, 0x03070301, 0x03070307, 0x03070503, 0x0307050f,
    0x03070701, 0x03070709, 0x03070903, 0x03070d05, 0x03070f01, 0x03090107, 0x0309010b, 0x03090305,
    0x03090309, 0x03090703, 0x03090707, 0x03090905, 0x0309090d, 0x03090b01, 0x03090b09, 0x030b0103,
    0x030b0301, 0x030b0307, 0x030b0503, 0x030b0701, 0x030b0705, 0x030b0b03, 0x030d0501, 0x030d0509,
    0x030d050f, 0x030d0909, 0x030d090d, 0x030f0103, 0x030f0107, 0x030f0301, 0x030f0305, 0x030f0503,
    0x030f070b, 0x030f0903, 0x030f0d05, 0x030f0f01, 0x05010101, 0x05010103, 0x05010107, 0x0501010b,
    0x0501010f, 0x05010301, 0x05010305, 0x05010309, 0x0501030d, 0x05010503, 0x05010507, 0x0501050f,
    0x05010701, 0x05010705, 0x05010903, 0x05010907, 0x0501090b, 0x05010b01, 0x05010b05, 0x05010d0f,
    0x05010f01, 0x05010f07, 0x05010f0b, 0x05030101, 0x05030105, 0x05030301, 0x05030307, 0x0503030f,
    0x05030505, 0x0503050b, 0x05030703, 0x05030709, 0x05030905, 0x05030b03, 0x05050103, 0x05050109,
    0x0505010f, 0x05050503, 0x05050507, 0x05050701, 0x0505070f, 0x05050903, 0x05050b07, 0x05050b0f,
    0x05050f03, 0x05050f09, 0x05070101, 0x05070105, 0x0507010b, 0x05070303, 0x05070505, 0x05070509,
    0x05070703, 0x05070707, 0x05070905, 0x05070b01, 0x05070d0d, 0x05090103, 0x0509010f, 0x05090501,
    0x05090507, 0x05090705, 0x0509070b, 0x05090903, 0x05090f05, 0x05090f0b, 0x050b0109, 0x050b0303,
    0x050b0505, 0x050b070f, 0x050b0901, 0x050b0b07, 0x050b0f01, 0x050d0101, 0x050d0105, 0x050d010f,
    0x050d0503, 0x050d0b0b, 0x050d0d03, 0x050f010b, 0x050f0303, 0x050f050d, 0x050f0701, 0x050f0907,
    0x050f0b01, 0x07010105, 0x07010303, 0x07010307, 0x0701030b, 0x0701030f, 0x07010505, 0x07010703,
    0x07010707, 0x0701070b, 0x07010905, 0x07010909, 0x0701090f, 0x07010b03, 0x07010d07, 0x07010f03,
    0x07030103, 0x07030107, 0x0703010b, 0x07030309, 0x07030503, 0x07030507, 0x07030901, 0x07030d01,
    0x07030f05, 0x07030f0d, 0x07050101, 0x07050305, 0x07050501, 0x07050705, 0x07050709, 0x07050b01,
    0x07070103, 0x07070301, 0x07070309, 0x07070503, 0x07070507, 0x0707050f, 0x07070701, 0x07070903,
    0x07070907, 0x0707090f, 0x07070b0b, 0x07070f07, 0x07090107, 0x07090303, 0x0709030d, 0x07090505,
    0x07090703, 0x07090b05, 0x07090d01, 0x07090d09, 0x070b0103, 0x070b0301, 0x070b0305, 0x070b050b,
    0x070b0705, 0x070b0909, 0x070b0b0d, 0x070b0f07, 0x070d030d, 0x070d0903, 0x070f0103, 0x070f0107,
    0x070f0501, 0x070f0505, 0x070f070b, 0x09010101, 0x09010109, 0x09010305, 0x09010501, 0x09010509,
    0x0901050f, 0x09010705, 0x09010903, 0x09010b01, 0x09010f01, 0x09030105, 0x0903010f, 0x09030303,
    0x09030307, 0x09030505, 0x09030701, 0x0903070b, 0x09030907, 0x09030b03, 0x09030b0b, 0x09050103,
    0x09050107, 0x09050301, 0x0905030b, 0x09050503, 0x09050707, 0x09050901, 0x09050b0f, 0x09050d05,
    0x09050f01, 0x09070109, 0x09070303, 0x09070307, 0x09070501, 0x09070505, 0x09070703, 0x0907070b,
    0x09090101, 0x09090105, 0x09090509, 0x0909070f, 0x09090901, 0x09090f03, 0x090b010b, 0x090b010f,
    0x090b0503, 0x090b0d05, 0x090d0307, 0x090d0709, 0x090d0d01, 0x090f0301, 0x090f030b, 0x090f0701,
    0x090f0907, 0x090f0b03, 0x0b010105, 0x0b010301, 0x0b010309, 0x0b010505, 0x0b010901, 0x0b010909,
    0x0b01090f, 0x0b010b05, 0x0b010d0d, 0x0b010f09, 0x0b030103, 0x0b030107, 0x0b03010b, 0x0b030305,
    0x0b030503, 0x0b030705, 0x0b030f05, 0x0b050101, 0x0b050303, 0x0b050507, 0x0b050701, 0x0b05070d,
    0x0b050b07, 0x0b070105, 0x0b07010f, 0x0b070301, 0x0b07050f, 0x0b070909, 0x0b070b03, 0x0b070d0b,
    0x0b070f07, 0x0b090103, 0x0b090109, 0x0b090501, 0x0b090705, 0x0b09090d, 0x0b0b0305, 0x0b0b050d,
    0x0b0b0b03, 0x0b0b0b07, 0x0b0d0905, 0x0b0f0105, 0x0b0f0109, 0x0b0f0505, 0x0d010303, 0x0d010307,
    0x0d01030b, 0x0d010703, 0x0d010707, 0x0d010d01, 0x0d030101, 0x0d030501, 0x0d03050f, 0x0d030d09,
    0x0d050305, 0x0d050709, 0x0d050905, 0x0d050b0b, 0x0d050d05, 0x0d050f01, 0x0d070101, 0x0d070309,
    0x0d070503, 0x0d070901, 0x0d09050b, 0x0d090907, 0x0d090d05, 0x0d0b0101, 0x0d0b0107, 0x0d0b0709,
    0x0d0b0d01, 0x0d0d010b, 0x0d0d0901, 0x0d0f0303, 0x0d0f0307, 0x0f010101, 0x0f010109, 0x0f01010f,
    0x0f010501, 0x0f010505, 0x0f01070d, 0x0f010901, 0x0f010b09, 0x0f010d05, 0x0f030105, 0x0f030303,
    0x0f030509, 0x0f030907, 0x0f03090b, 0x0f050103, 0x0f050109, 0x0f050301, 0x0f05030d, 0x0f050503,
    0x0f050701, 0x0f050b03, 0x0f070105, 0x0f070705, 0x0f07070b, 0x0f070b07, 0x0f090103, 0x0f09010b,
    0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101,
GGML_TABLE_END()

#define NGRID_IQ1S 2048
#define IQ1S_DELTA 0.125f
#define IQ1M_DELTA 0.125f
#if defined(GGML_COMMON_IMPL_C)
GGML_TABLE_BEGIN(uint64_t, iq1s_grid, NGRID_IQ1S)
    0xffffffffffffffff, 0xffffffffffffff01, 0xffffffffffff0000, 0xffffffffffff01ff,
    0xffffffffffff0101, 0xffffffffff00ff00, 0xffffffffff000000, 0xffffffffff01ffff,
    0xffffffffff01ff01, 0xffffffffff0101ff, 0xffffffffff010101, 0xffffffff00ff0000,
    0xffffffff0000ff00, 0xffffffff000000ff, 0xffffffff00000001, 0xffffffff00010000,
    0xffffffff01ffffff, 0xffffffff01ffff01, 0xffffffff01ff01ff, 0xffffffff01ff0101,
    0xffffffff01000000, 0xffffffff0101ffff, 0xffffffff0101ff01, 0xffffffff010101ff,
    0xffffffff01010101, 0xffffff00ffff00ff, 0xffffff00ffff0000, 0xffffff00ff00ff00,
    0xffffff00ff0000ff, 0xffffff00ff000001, 0xffffff00ff000100, 0xffffff00ff000101,
    0xffffff00ff010000, 0xffffff0000ffff00, 0xffffff0000ff0001, 0xffffff0000ff0100,
    0xffffff000000ff01, 0xffffff0000000000, 0xffffff0000000101, 0xffffff000001ff00,
    0xffffff00000100ff, 0xffffff0000010001, 0xffffff00000101ff, 0xffffff0001ff0000,
    0xffffff000100ff00, 0xffffff00010000ff, 0xffffff0001000001, 0xffffff0001010000,
    0xffffff01ffffffff, 0xffffff01ffffff01, 0xffffff01ffff01ff, 0xffffff01ffff0101,
    0xffffff01ff000000, 0xffffff01ff01ffff, 0xffffff01ff01ff01, 0xffffff01ff0101ff,
    0xffffff01ff010101, 0xffffff0100ff0000, 0xffffff010000ff00, 0xffffff0100000100,
    0xffffff01000100ff, 0xffffff0100010100, 0xffffff0101ffffff, 0xffffff0101ffff01,
    0xffffff0101ff01ff, 0xffffff0101ff0101, 0xffffff010100ff00, 0xffffff0101000000,
    0xffffff0101000100, 0xffffff010101ffff, 0xffffff010101ff01, 0xffffff01010101ff,
    0xffffff0101010101, 0xffff00ffff00ff00, 0xffff00ffff0000ff, 0xffff00ffff000001,
    0xffff00ffff010000, 0xffff00ff00ffff00, 0xffff00ff00ff0100, 0xffff00ff00000000,
    0xffff00ff00000101, 0xffff00ff000100ff, 0xffff00ff00010000, 0xffff00ff0100ff00,
    0xffff00ff01000100, 0xffff00ff01010000, 0xffff0000ffffff00, 0xffff0000ffff00ff,
    0xffff0000ffff0000, 0xffff0000ffff0001, 0xffff0000ff000000, 0xffff0000ff0001ff,
    0xffff0000ff000101, 0xffff0000ff010100, 0xffff000000ffffff, 0xffff000000ff0000,
    0xffff000000ff0101, 0xffff00000000ffff, 0xffff00000000ff00, 0xffff0000000000ff,
    0xffff000000000000, 0xffff000000000001, 0xffff000000000100, 0xffff00000001ffff,
    0xffff00000001ff01, 0xffff000000010000, 0xffff0000000101ff, 0xffff000000010101,
    0xffff000001ffff00, 0xffff00000100ff00, 0xffff000001000000, 0xffff0000010001ff,
    0xffff000001000101, 0xffff00000101ff00, 0xffff0000010100ff, 0xffff000001010000,
    0xffff000001010001, 0xffff000001010100, 0xffff0001ff0000ff, 0xffff0001ff000100,
    0xffff000100ffff00, 0xffff000100ff00ff, 0xffff00010000ffff, 0xffff00010000ff01,
    0xffff000100000000, 0xffff0001000001ff, 0xffff00010001ffff, 0xffff00010001ff00,
    0xffff000100010001, 0xffff000100010100, 0xffff000101ff0000, 0xffff00010100ff00,
    0xffff0001010000ff, 0xffff000101000100, 0xffff01ffffffffff, 0xffff01ffffffff01,
    0xffff01ffffff01ff, 0xffff01ffffff0101, 0xffff01ffff000000, 0xffff01ffff01ffff,
    0xffff01ffff01ff01, 0xffff01ffff0101ff, 0xffff01ffff010101, 0xffff01ff00ff0000,
    0xffff01ff0000ff00, 0xffff01ff00000001, 0xffff01ff00010000, 0xffff01ff01ffffff,
    0xffff01ff01ffff01, 0xffff01ff01ff01ff, 0xffff01ff01ff0101, 0xffff01ff01000000,
    0xffff01ff0101ffff, 0xffff01ff0101ff01, 0xffff01ff010101ff, 0xffff01ff01010101,
    0xffff0100ffff0000, 0xffff0100ff00ff00, 0xffff0100ff0000ff, 0xffff0100ff000100,
    0xffff0100ff0100ff, 0xffff0100ff010000, 0xffff010000ffff00, 0xffff01000000ffff,
    0xffff01000000ff00, 0xffff010000000000, 0xffff01000001ff00, 0xffff0100000100ff,
    0xffff010000010100, 0xffff01000100ff00, 0xffff0100010000ff, 0xffff010001000001,
    0xffff010001000100, 0xffff010001010000, 0xffff0101ffffffff, 0xffff0101ffffff01,
    0xffff0101ffff01ff, 0xffff0101ffff0101, 0xffff0101ff000000, 0xffff0101ff01ffff,
    0xffff0101ff01ff01, 0xffff0101ff0101ff, 0xffff0101ff010101, 0xffff010100ff0000,
    0xffff01010000ff00, 0xffff010100000100, 0xffff01010001ff00, 0xffff010100010000,
    0xffff010101ffffff, 0xffff010101ffff01, 0xffff010101ff0000, 0xffff010101ff01ff,
    0xffff010101ff0101, 0xffff010101000000, 0xffff01010101ffff, 0xffff01010101ff01,
    0xffff0101010101ff, 0xffff010101010101, 0xff00ffffff00ffff, 0xff00ffffff00ff00,
    0xff00ffffff0000ff, 0xff00ffffff000100, 0xff00ffffff0100ff, 0xff00ffffff010000,
    0xff00ffff00ffff00, 0xff00ffff00ff00ff, 0xff00ffff0000ffff, 0xff00ffff00000000,
    0xff00ffff000001ff, 0xff00ffff0001ff00, 0xff00ffff000100ff, 0xff00ffff00010000,
    0xff00ffff00010100, 0xff00ffff0100ff00, 0xff00ffff010000ff, 0xff00ffff01000001,
    0xff00ffff0101ff00, 0xff00ffff01010000, 0xff00ff00ffffff00, 0xff00ff00ffff00ff,
    0xff00ff00ffff0001, 0xff00ff00ffff0100, 0xff00ff00ff00ffff, 0xff00ff00ff00ff01,
    0xff00ff00ff000000, 0xff00ff00ff0001ff, 0xff00ff00ff01ff00, 0xff00ff00ff0100ff,
    0xff00ff00ff010100, 0xff00ff0000ff0000, 0xff00ff0000ff0101, 0xff00ff000000ffff,
    0xff00ff000000ff00, 0xff00ff000000ff01, 0xff00ff00000000ff, 0xff00ff0000000000,
    0xff00ff0000000001, 0xff00ff0000000100, 0xff00ff000001ffff, 0xff00ff0000010000,
    0xff00ff0001ff00ff, 0xff00ff000100ff01, 0xff00ff0001000000, 0xff00ff000101ff00,
    0xff00ff00010100ff, 0xff00ff01ff00ff00, 0xff00ff01ff0000ff, 0xff00ff01ff000001,
    0xff00ff01ff010000, 0xff00ff0100ffffff, 0xff00ff0100ff0001, 0xff00ff0100ff0100,
    0xff00ff010000ff01, 0xff00ff0100000000, 0xff00ff01000001ff, 0xff00ff0100000101,
    0xff00ff01000100ff, 0xff00ff0100010001, 0xff00ff0101ff0000, 0xff00ff010100ff00,
    0xff00ff01010000ff, 0xff00ff0101000001, 0xff00ff0101010000, 0xff0000ffffffff00,
    0xff0000ffffff0001, 0xff0000ffffff0100, 0xff0000ffff0000ff, 0xff0000ffff000000,
    0xff0000ffff0001ff, 0xff0000ffff000100, 0xff0000ffff01ff00, 0xff0000ffff010001,
    0xff0000ff00ffff00, 0xff0000ff00ff0000, 0xff0000ff00ff0001, 0xff0000ff00ff01ff,
    0xff0000ff00ff0101, 0xff0000ff0000ff00, 0xff0000ff000000ff, 0xff0000ff00000000,
    0xff0000ff00000001, 0xff0000ff00000100, 0xff0000ff0001ff01, 0xff0000ff00010000,
    0xff0000ff000101ff, 0xff0000ff01ff00ff, 0xff0000ff01ff0100, 0xff0000ff0100ffff,
    0xff0000ff010000ff, 0xff0000ff01000000, 0xff0000ff010001ff, 0xff0000ff01000100,
    0xff0000ff01000101, 0xff0000ff0101ff00, 0xff0000ff010100ff, 0xff0000ff01010000,
    0xff0000ff01010100, 0xff000000ffffff01, 0xff000000ffff0000, 0xff000000ffff0101,
    0xff000000ff00ff00, 0xff000000ff0000ff, 0xff000000ff000000, 0xff000000ff000001,
    0xff000000ff000100, 0xff000000ff01ffff, 0xff000000ff01ff01, 0xff000000ff010000,
    0xff000000ff0101ff, 0xff000000ff010101, 0xff00000000ffff00, 0xff00000000ff00ff,
    0xff00000000ff0000, 0xff00000000ff0001, 0xff0000000000ff00, 0xff0000000000ff01,
    0xff000000000000ff, 0xff00000000000000, 0xff00000000000001, 0xff00000000000100,
    0xff00000000000101, 0xff0000000001ff00, 0xff000000000100ff, 0xff00000000010000,
    0xff00000000010001, 0xff00000000010100, 0xff00000001ffffff, 0xff00000001ffff01,
    0xff00000001ff00ff, 0xff00000001ff0000, 0xff00000001ff01ff, 0xff00000001ff0101,
    0xff0000000100ffff, 0xff0000000100ff00, 0xff000000010000ff, 0xff00000001000000,
    0xff00000001000001, 0xff00000001000100, 0xff00000001000101, 0xff0000000101ffff,
    0xff0000000101ff01, 0xff00000001010000, 0xff000001ffffff00, 0xff000001ffff00ff,
    0xff000001ffff0000, 0xff000001ffff0001, 0xff000001ff000000, 0xff000001ff000001,
    0xff000001ff0001ff, 0xff000001ff000101, 0xff000001ff01ff00, 0xff000001ff010001,
    0xff00000100ffffff, 0xff00000100ffff01, 0xff00000100ff00ff, 0xff00000100ff0000,
    0xff00000100ff01ff, 0xff00000100ff0101, 0xff0000010000ff00, 0xff00000100000000,
    0xff00000100000001, 0xff000001000001ff, 0xff00000100000100, 0xff0000010001ff00,
    0xff000001000100ff, 0xff00000100010000, 0xff000001000101ff, 0xff00000100010100,
    0xff00000100010101, 0xff00000101ff0001, 0xff00000101ff0101, 0xff0000010100ff01,
    0xff00000101000000, 0xff000001010100ff, 0xff00000101010100, 0xff0001ffff00ff00,
    0xff0001ffff000001, 0xff0001ffff010000, 0xff0001ff00ffff00, 0xff0001ff00ff00ff,
    0xff0001ff00ff0001, 0xff0001ff00ff0100, 0xff0001ff0000ffff, 0xff0001ff00000000,
    0xff0001ff000001ff, 0xff0001ff00000101, 0xff0001ff0001ffff, 0xff0001ff0001ff00,
    0xff0001ff000100ff, 0xff0001ff00010001, 0xff0001ff00010100, 0xff0001ff01ff0000,
    0xff0001ff0100ff00, 0xff0001ff010000ff, 0xff0001ff01010000, 0xff000100ff00ffff,
    0xff000100ff00ff01, 0xff000100ff000000, 0xff000100ff000101, 0xff000100ff01ff00,
    0xff000100ff010000, 0xff00010000ffff01, 0xff00010000ff00ff, 0xff00010000ff0000,
    0xff00010000ff01ff, 0xff0001000000ff00, 0xff000100000000ff, 0xff00010000000000,
    0xff00010000000001, 0xff00010000000100, 0xff00010000000101, 0xff0001000001ffff,
    0xff00010000010000, 0xff00010000010101, 0xff00010001ff0100, 0xff0001000100ff00,
    0xff0001000100ff01, 0xff00010001000000, 0xff000100010001ff, 0xff0001000101ff00,
    0xff00010001010001, 0xff00010001010100, 0xff000101ffff0100, 0xff000101ff000001,
    0xff000101ff0100ff, 0xff000101ff010001, 0xff00010100ff00ff, 0xff00010100ff0001,
    0xff00010100ff0100, 0xff0001010000ffff, 0xff0001010000ff01, 0xff00010100000000,
    0xff000101000001ff, 0xff0001010001ff00, 0xff00010100010001, 0xff00010100010100,
    0xff00010101ff0000, 0xff0001010100ff00, 0xff00010101000001, 0xff00010101000101,
    0xff01ffffffffffff, 0xff01ffffffffff01, 0xff01ffffffff01ff, 0xff01ffffffff0101,
    0xff01ffffff000000, 0xff01ffffff01ffff, 0xff01ffffff01ff01, 0xff01ffffff010000,
    0xff01ffffff0101ff, 0xff01ffffff010101, 0xff01ffff00ff0000, 0xff01ffff0000ff00,
    0xff01ffff00000100, 0xff01ffff0001ff00, 0xff01ffff00010000, 0xff01ffff01ffffff,
    0xff01ffff01ffff01, 0xff01ffff01ff01ff, 0xff01ffff01ff0101, 0xff01ffff01000000,
    0xff01ffff0101ffff, 0xff01ffff0101ff01, 0xff01ffff01010000, 0xff01ffff010101ff,
    0xff01ffff01010101, 0xff01ff00ffff0000, 0xff01ff00ff00ff00, 0xff01ff00ff0000ff,
    0xff01ff00ff000100, 0xff01ff00ff010000, 0xff01ff0000ffff01, 0xff01ff0000ff00ff,
    0xff01ff0000ff0100, 0xff01ff0000000000, 0xff01ff00000001ff, 0xff01ff0000000101,
    0xff01ff000001ff00, 0xff01ff00000100ff, 0xff01ff0000010000, 0xff01ff0000010001,
    0xff01ff0001ff0000, 0xff01ff000100ffff, 0xff01ff0001000001, 0xff01ff0001000100,
    0xff01ff0001010000, 0xff01ff01ffffff00, 0xff01ff01ffff01ff, 0xff01ff01ffff0101,
    0xff01ff01ff00ff00, 0xff01ff01ff000000, 0xff01ff01ff01ffff, 0xff01ff01ff01ff01,
    0xff01ff01ff0101ff, 0xff01ff01ff010101, 0xff01ff0100ff0000, 0xff01ff010000ff00,
    0xff01ff0100000001, 0xff01ff0100000100, 0xff01ff0100010000, 0xff01ff0101ffff00,
    0xff01ff0101ff01ff, 0xff01ff0101ff0101, 0xff01ff010100ff00, 0xff01ff0101000000,
    0xff01ff010101ffff, 0xff01ff010101ff01, 0xff01ff01010101ff, 0xff01ff0101010101,
    0xff0100ffffff0000, 0xff0100ffff0000ff, 0xff0100ffff000001, 0xff0100ffff000100,
    0xff0100ffff010000, 0xff0100ff00ff00ff, 0xff0100ff00ff0000, 0xff0100ff00ff0001,
    0xff0100ff00ff0100, 0xff0100ff0000ff01, 0xff0100ff00000000, 0xff0100ff000001ff,
    0xff0100ff00000101, 0xff0100ff00010001, 0xff0100ff01ff0000, 0xff0100ff0100ff00,
    0xff0100ff010000ff, 0xff0100ff01000100, 0xff0100ff0101ff00, 0xff0100ff01010000,
    0xff010000ffff0100, 0xff010000ff000000, 0xff010000ff01ff00, 0xff010000ff010100,
    0xff01000000ffffff, 0xff01000000ff0000, 0xff01000000ff01ff, 0xff0100000000ff00,
    0xff010000000000ff, 0xff01000000000000, 0xff01000000000100, 0xff0100000001ff01,
    0xff01000000010000, 0xff010000000101ff, 0xff01000001ff0100, 0xff0100000100ffff,
    0xff010000010000ff, 0xff01000001000000, 0xff010000010001ff, 0xff01000001000101,
    0xff0100000101ff00, 0xff010000010100ff, 0xff01000001010001, 0xff01000001010100,
    0xff010001ffff0000, 0xff010001ff00ffff, 0xff010001ff00ff01, 0xff010001ff000100,
    0xff010001ff010000, 0xff01000100ffff00, 0xff01000100ff0100, 0xff01000100000000,
    0xff0100010001ffff, 0xff0100010001ff00, 0xff01000100010100, 0xff01000101ff00ff,
    0xff01000101ff0001, 0xff0100010100ffff, 0xff01000101000101, 0xff0101ffffffffff,
    0xff0101ffffffff01, 0xff0101ffffff01ff, 0xff0101ffffff0101, 0xff0101ffff000000,
    0xff0101ffff01ffff, 0xff0101ffff01ff01, 0xff0101ffff0101ff, 0xff0101ffff010101,
    0xff0101ff00ff0000, 0xff0101ff0000ff00, 0xff0101ff000000ff, 0xff0101ff00010000,
    0xff0101ff01ffffff, 0xff0101ff01ffff01, 0xff0101ff01ff01ff, 0xff0101ff01ff0101,
    0xff0101ff0101ffff, 0xff0101ff0101ff01, 0xff0101ff010101ff, 0xff0101ff01010101,
    0xff010100ffff0100, 0xff010100ff00ff00, 0xff010100ff0000ff, 0xff010100ff000100,
    0xff010100ff010000, 0xff01010000ff0001, 0xff01010000ff0100, 0xff0101000000ff01,
    0xff01010000000000, 0xff0101000001ff00, 0xff010100000100ff, 0xff01010000010001,
    0xff01010000010100, 0xff01010001ff0000, 0xff0101000100ffff, 0xff01010001000001,
    0xff01010001000100, 0xff010100010100ff, 0xff01010001010000, 0xff010101ffffffff,
    0xff010101ffffff01, 0xff010101ffff01ff, 0xff010101ffff0101, 0xff010101ff01ffff,
    0xff010101ff01ff01, 0xff010101ff0101ff, 0xff010101ff010101, 0xff01010100ff0000,
    0xff0101010000ff00, 0xff01010100000001, 0xff01010100000100, 0xff01010100010000,
    0xff01010101ffffff, 0xff01010101ffff01, 0xff01010101ff01ff, 0xff01010101ff0101,
    0xff01010101000000, 0xff0101010101ffff, 0xff0101010101ff01, 0xff010101010101ff,
    0xff01010101010101, 0x00ffffffffff0000, 0x00ffffffff00ff00, 0x00ffffffff000001,
    0x00ffffffff010000, 0x00ffffff00ff0100, 0x00ffffff0000ff01, 0x00ffffff00000000,
    0x00ffffff000001ff, 0x00ffffff00000101, 0x00ffffff0001ff00, 0x00ffffff000100ff,
    0x00ffffff00010001, 0x00ffffff010000ff, 0x00ffffff01000100, 0x00ffffff0101ff00,
    0x00ffffff01010001, 0x00ffff00ffffffff, 0x00ffff00ffffff00, 0x00ffff00ffff00ff,
    0x00ffff00ffff0001, 0x00ffff00ffff0100, 0x00ffff00ff00ff01, 0x00ffff00ff000000,
    0x00ffff00ff000001, 0x00ffff00ff0001ff, 0x00ffff00ff000101, 0x00ffff00ff01ff00,
    0x00ffff00ff010001, 0x00ffff00ff010100, 0x00ffff0000ff0000, 0x00ffff0000ff01ff,
    0x00ffff0000ff0101, 0x00ffff000000ff00, 0x00ffff00000000ff, 0x00ffff0000000000,
    0x00ffff0000000001, 0x00ffff0000000100, 0x00ffff0000000101, 0x00ffff0000010000,
    0x00ffff00000101ff, 0x00ffff0000010101, 0x00ffff0001ffff00, 0x00ffff0001ff00ff,
    0x00ffff0001ff0001, 0x00ffff000100ffff, 0x00ffff000100ff01, 0x00ffff0001000000,
    0x00ffff000101ffff, 0x00ffff000101ff00, 0x00ffff000101ff01, 0x00ffff01ffff0000,
    0x00ffff01ff00ff00, 0x00ffff01ff0000ff, 0x00ffff01ff000001, 0x00ffff01ff010000,
    0x00ffff0100ffff00, 0x00ffff010000ff01, 0x00ffff0100000000, 0x00ffff0100000101,
    0x00ffff01000100ff, 0x00ffff0100010100, 0x00ffff0101ff0100, 0x00ffff01010000ff,
    0x00ffff0101010000, 0x00ff00ffffffff00, 0x00ff00ffff000000, 0x00ff00ffff000100,
    0x00ff00ffff010100, 0x00ff00ff00ff0000, 0x00ff00ff00ff01ff, 0x00ff00ff00ff0101,
    0x00ff00ff0000ff00, 0x00ff00ff000000ff, 0x00ff00ff00000000, 0x00ff00ff00000001,
    0x00ff00ff0001ff00, 0x00ff00ff0001ff01, 0x00ff00ff00010000, 0x00ff00ff000101ff,
    0x00ff00ff00010101, 0x00ff00ff01ffff00, 0x00ff00ff01ff0001, 0x00ff00ff01ff0100,
    0x00ff00ff0100ffff, 0x00ff00ff0100ff01, 0x00ff00ff01000000, 0x00ff00ff0101ffff,
    0x00ff00ff0101ff00, 0x00ff00ff01010100, 0x00ff0000ffffff00, 0x00ff0000ffffff01,
    0x00ff0000ffff0000, 0x00ff0000ffff0101, 0x00ff0000ff00ff00, 0x00ff0000ff0000ff,
    0x00ff0000ff000000, 0x00ff0000ff000001, 0x00ff0000ff000100, 0x00ff0000ff01ffff,
    0x00ff0000ff010000, 0x00ff0000ff010101, 0x00ff000000ffff00, 0x00ff000000ff00ff,
    0x00ff000000ff0000, 0x00ff000000ff0001, 0x00ff000000ff0100, 0x00ff00000000ffff,
    0x00ff00000000ff00, 0x00ff0000000000ff, 0x00ff000000000000, 0x00ff000000000001,
    0x00ff0000000001ff, 0x00ff000000000100, 0x00ff00000001ff00, 0x00ff0000000100ff,
    0x00ff000000010000, 0x00ff000000010001, 0x00ff000000010100, 0x00ff000001ffff01,
    0x00ff000001ff00ff, 0x00ff000001ff0000, 0x00ff000001ff01ff, 0x00ff00000100ff00,
    0x00ff0000010000ff, 0x00ff000001000000, 0x00ff000001000001, 0x00ff000001000100,
    0x00ff000001000101, 0x00ff000001010000, 0x00ff0000010101ff, 0x00ff000001010101,
    0x00ff0001ffffff00, 0x00ff0001ffff0000, 0x00ff0001ffff0100, 0x00ff0001ff0000ff,
    0x00ff0001ff000000, 0x00ff0001ff0001ff, 0x00ff0001ff000101, 0x00ff0001ff01ff00,
    0x00ff0001ff0100ff, 0x00ff0001ff010100, 0x00ff000100ffffff, 0x00ff000100ffff01,
    0x00ff000100ff0000, 0x00ff000100ff01ff, 0x00ff00010000ffff, 0x00ff00010000ff00,
    0x00ff00010000ff01, 0x00ff000100000000, 0x00ff000100000001, 0x00ff000100000100,
    0x00ff00010001ff01, 0x00ff000100010000, 0x00ff0001000101ff, 0x00ff000101ffff00,
    0x00ff000101ff0000, 0x00ff000101ff0101, 0x00ff0001010000ff, 0x00ff000101000000,
    0x00ff00010101ff00, 0x00ff0001010100ff, 0x00ff000101010001, 0x00ff01ffffff0000,
    0x00ff01ffff00ff00, 0x00ff01ffff000000, 0x00ff01ffff000101, 0x00ff01ffff010000,
    0x00ff01ff00ffff01, 0x00ff01ff00ff0100, 0x00ff01ff0000ffff, 0x00ff01ff00000000,
    0x00ff01ff000001ff, 0x00ff01ff0001ff00, 0x00ff01ff000100ff, 0x00ff01ff00010001,
    0x00ff01ff00010100, 0x00ff01ff01ff0000, 0x00ff01ff0100ff00, 0x00ff01ff010000ff,
    0x00ff01ff01000001, 0x00ff01ff01000100, 0x00ff01ff01010000, 0x00ff0100ffffff00,
    0x00ff0100ffff0000, 0x00ff0100ffff0001, 0x00ff0100ffff0101, 0x00ff0100ff00ffff,
    0x00ff0100ff0000ff, 0x00ff0100ff000000, 0x00ff0100ff0001ff, 0x00ff0100ff01ff00,
    0x00ff0100ff0100ff, 0x00ff0100ff010001, 0x00ff010000ffffff, 0x00ff010000ff0000,
    0x00ff010000ff0101, 0x00ff01000000ff00, 0x00ff01000000ff01, 0x00ff0100000000ff,
    0x00ff010000000000, 0x00ff010000000001, 0x00ff010000000100, 0x00ff01000001ffff,
    0x00ff01000001ff01, 0x00ff010000010000, 0x00ff010000010001, 0x00ff010000010101,
    0x00ff010001ff0001, 0x00ff010001ff0100, 0x00ff01000100ff01, 0x00ff010001000000,
    0x00ff010001000001, 0x00ff0100010001ff, 0x00ff01000101ff00, 0x00ff0100010100ff,
    0x00ff010001010001, 0x00ff010001010100, 0x00ff0101ff000001, 0x00ff010100ff00ff,
    0x00ff010100ff0001, 0x00ff010100ff0100, 0x00ff010100000000, 0x00ff0101000001ff,
    0x00ff010100000101, 0x00ff0101000100ff, 0x00ff010100010100, 0x00ff0101010000ff,
    0x00ff010101010000, 0x0000ffffffffff00, 0x0000ffffffff00ff, 0x0000ffffffff0000,
    0x0000ffffffff0001, 0x0000ffffffff0100, 0x0000ffffff00ff01, 0x0000ffffff000000,
    0x0000ffffff000101, 0x0000ffffff01ff00, 0x0000ffffff0100ff, 0x0000ffffff010100,
    0x0000ffff00ffffff, 0x0000ffff00ff0000, 0x0000ffff00ff01ff, 0x0000ffff0000ff00,
    0x0000ffff000000ff, 0x0000ffff00000000, 0x0000ffff00000001, 0x0000ffff00000100,
    0x0000ffff00010000, 0x0000ffff000101ff, 0x0000ffff01ff0001, 0x0000ffff01ff0100,
    0x0000ffff01000000, 0x0000ffff010001ff, 0x0000ffff0101ffff, 0x0000ffff0101ff00,
    0x0000ffff01010001, 0x0000ffff01010100, 0x0000ff00ffff0000, 0x0000ff00ffff01ff,
    0x0000ff00ffff0100, 0x0000ff00ffff0101, 0x0000ff00ff00ff00, 0x0000ff00ff0000ff,
    0x0000ff00ff000000, 0x0000ff00ff000001, 0x0000ff00ff0001ff, 0x0000ff00ff000100,
    0x0000ff00ff01ffff, 0x0000ff00ff010000, 0x0000ff00ff010001, 0x0000ff00ff0101ff,
    0x0000ff00ff010101, 0x0000ff0000ffff00, 0x0000ff0000ff00ff, 0x0000ff0000ff0000,
    0x0000ff0000ff0001, 0x0000ff0000ff0100, 0x0000ff000000ffff, 0x0000ff000000ff00,
    0x0000ff000000ff01, 0x0000ff00000000ff, 0x0000ff0000000000, 0x0000ff0000000001,
    0x0000ff00000001ff, 0x0000ff0000000100, 0x0000ff0000000101, 0x0000ff000001ff00,
    0x0000ff00000100ff, 0x0000ff0000010000, 0x0000ff0000010001, 0x0000ff0000010100,
    0x0000ff0001ffff01, 0x0000ff0001ff0000, 0x0000ff000100ff00, 0x0000ff00010000ff,
    0x0000ff0001000000, 0x0000ff0001000001, 0x0000ff0001000100, 0x0000ff000101ffff,
    0x0000ff0001010000, 0x0000ff0001010101, 0x0000ff01ffffff00, 0x0000ff01ffff0001,
    0x0000ff01ff00ff01, 0x0000ff01ff000000, 0x0000ff01ff000101, 0x0000ff01ff01ff00,
    0x0000ff01ff0100ff, 0x0000ff0100ffff01, 0x0000ff0100ff0000, 0x0000ff0100ff0101,
    0x0000ff010000ff00, 0x0000ff01000000ff, 0x0000ff0100000000, 0x0000ff0100000001,
    0x0000ff0100000100, 0x0000ff010001ff01, 0x0000ff0100010000, 0x0000ff0101ff0000,
    0x0000ff010100ffff, 0x0000ff010100ff01, 0x0000ff0101000000, 0x0000ff0101000100,
    0x0000ff0101000101, 0x0000ff01010100ff, 0x000000ffffff00ff, 0x000000ffffff0000,
    0x000000ffff00ff00, 0x000000ffff0000ff, 0x000000ffff000000, 0x000000ffff000001,
    0x000000ffff0001ff, 0x000000ffff000100, 0x000000ffff01ff00, 0x000000ffff010000,
    0x000000ffff0101ff, 0x000000ffff010101, 0x000000ff00ffff00, 0x000000ff00ff00ff,
    0x000000ff00ff0000, 0x000000ff00ff0001, 0x000000ff00ff0100, 0x000000ff00ff0101,
    0x000000ff0000ffff, 0x000000ff0000ff00, 0x000000ff000000ff, 0x000000ff00000000,
    0x000000ff00000001, 0x000000ff000001ff, 0x000000ff00000100, 0x000000ff00000101,
    0x000000ff0001ff00, 0x000000ff0001ff01, 0x000000ff000100ff, 0x000000ff00010000,
    0x000000ff00010001, 0x000000ff00010100, 0x000000ff01ffffff, 0x000000ff01ff01ff,
    0x000000ff01ff0101, 0x000000ff0100ff00, 0x000000ff010000ff, 0x000000ff01000000,
    0x000000ff01000001, 0x000000ff01000100, 0x000000ff0101ff00, 0x000000ff010100ff,
    0x000000ff01010000, 0x000000ff01010101, 0x00000000ffffff00, 0x00000000ffffff01,
    0x00000000ffff00ff, 0x00000000ffff0000, 0x00000000ffff0001, 0x00000000ffff0100,
    0x00000000ff00ffff, 0x00000000ff00ff00, 0x00000000ff00ff01, 0x00000000ff0000ff,
    0x00000000ff000000, 0x00000000ff000001, 0x00000000ff000100, 0x00000000ff000101,
    0x00000000ff01ff00, 0x00000000ff0100ff, 0x00000000ff010000, 0x00000000ff010001,
    0x00000000ff010100, 0x0000000000ffffff, 0x0000000000ffff00, 0x0000000000ffff01,
    0x0000000000ff00ff, 0x0000000000ff0000, 0x0000000000ff0001, 0x0000000000ff01ff,
    0x0000000000ff0100, 0x000000000000ffff, 0x000000000000ff00, 0x000000000000ff01,
    0x00000000000000ff, 0x0000000000000000, 0x0000000000000001, 0x00000000000001ff,
    0x0000000000000100, 0x0000000000000101, 0x000000000001ffff, 0x000000000001ff00,
    0x00000000000100ff, 0x0000000000010000, 0x0000000000010001, 0x00000000000101ff,
    0x0000000000010100, 0x0000000000010101, 0x0000000001ffff00, 0x0000000001ff00ff,
    0x0000000001ff0000, 0x0000000001ff0100, 0x0000000001ff0101, 0x000000000100ffff,
    0x000000000100ff00, 0x00000000010000ff, 0x0000000001000000, 0x0000000001000001,
    0x00000000010001ff, 0x0000000001000100, 0x000000000101ff00, 0x00000000010100ff,
    0x0000000001010000, 0x0000000001010001, 0x0000000001010100, 0x00000001ffffffff,
    0x00000001ffffff00, 0x00000001ffffff01, 0x00000001ffff00ff, 0x00000001ffff0001,
    0x00000001ffff01ff, 0x00000001ffff0100, 0x00000001ff00ff00, 0x00000001ff0000ff,
    0x00000001ff000000, 0x00000001ff0001ff, 0x00000001ff000100, 0x00000001ff01ffff,
    0x00000001ff01ff00, 0x00000001ff01ff01, 0x00000001ff0100ff, 0x00000001ff010000,
    0x00000001ff010001, 0x00000001ff0101ff, 0x00000001ff010100, 0x0000000100ffff00,
    0x0000000100ff0000, 0x0000000100ff0001, 0x0000000100ff01ff, 0x0000000100ff0100,
    0x0000000100ff0101, 0x000000010000ffff, 0x000000010000ff00, 0x000000010000ff01,
    0x00000001000000ff, 0x0000000100000000, 0x0000000100000001, 0x00000001000001ff,
    0x0000000100000100, 0x0000000100000101, 0x000000010001ff00, 0x00000001000100ff,
    0x0000000100010000, 0x0000000100010100, 0x0000000101ffff01, 0x0000000101ff0000,
    0x0000000101ff0001, 0x0000000101ff01ff, 0x0000000101ff0100, 0x0000000101ff0101,
    0x000000010100ff00, 0x0000000101000000, 0x0000000101000101, 0x000000010101ff01,
    0x0000000101010000, 0x0000000101010001, 0x00000001010101ff, 0x0000000101010100,
    0x000001ffffff00ff, 0x000001ffffff0000, 0x000001ffffff0001, 0x000001ffffff0100,
    0x000001ffff00ffff, 0x000001ffff000000, 0x000001ffff0001ff, 0x000001ffff01ff00,
    0x000001ffff010101, 0x000001ff00ff0000, 0x000001ff00ff01ff, 0x000001ff00ff0101,
    0x000001ff0000ff00, 0x000001ff000000ff, 0x000001ff00000000, 0x000001ff00000001,
    0x000001ff000001ff, 0x000001ff00000100, 0x000001ff0001ffff, 0x000001ff0001ff01,
    0x000001ff000100ff, 0x000001ff00010000, 0x000001ff01ffff01, 0x000001ff01ff0100,
    0x000001ff0100ffff, 0x000001ff0100ff01, 0x000001ff01000000, 0x000001ff010001ff,
    0x000001ff0101ff00, 0x000001ff01010100, 0x00000100ffffff00, 0x00000100ffffff01,
    0x00000100ffff0000, 0x00000100ffff0101, 0x00000100ff00ff00, 0x00000100ff0000ff,
    0x00000100ff000000, 0x00000100ff000001, 0x00000100ff000100, 0x00000100ff010000,
    0x0000010000ffff00, 0x0000010000ff00ff, 0x0000010000ff0000, 0x0000010000ff0001,
    0x0000010000ff0100, 0x000001000000ffff, 0x000001000000ff00, 0x000001000000ff01,
    0x00000100000000ff, 0x0000010000000000, 0x0000010000000001, 0x00000100000001ff,
    0x0000010000000100, 0x0000010000000101, 0x000001000001ff00, 0x00000100000100ff,
    0x0000010000010000, 0x0000010000010001, 0x0000010000010100, 0x0000010001ffff00,
    0x0000010001ff0000, 0x0000010001ff0100, 0x000001000100ff00, 0x00000100010000ff,
    0x0000010001000000, 0x0000010001000001, 0x00000100010001ff, 0x0000010001000100,
    0x0000010001010000, 0x00000101ffff00ff, 0x00000101ffff01ff, 0x00000101ff000000,
    0x00000101ff000101, 0x00000101ff01ffff, 0x00000101ff010000, 0x00000101ff010001,
    0x00000101ff010100, 0x0000010100ff0000, 0x0000010100ff01ff, 0x0000010100ff0100,
    0x000001010000ff00, 0x0000010100000000, 0x0000010100000001, 0x00000101000001ff,
    0x0000010100000100, 0x000001010001ff01, 0x0000010100010000, 0x00000101000101ff,
    0x0000010100010101, 0x0000010101ffff00, 0x0000010101ff0101, 0x000001010100ff01,
    0x0000010101000000, 0x0000010101000001, 0x00000101010001ff, 0x0000010101000101,
    0x000001010101ff00, 0x0001ffffffff0000, 0x0001ffffff0000ff, 0x0001ffffff000001,
    0x0001ffffff000100, 0x0001ffffff010000, 0x0001ffff00ff00ff, 0x0001ffff0000ffff,
    0x0001ffff00000000, 0x0001ffff00000001, 0x0001ffff000001ff, 0x0001ffff00000101,
    0x0001ffff0001ff00, 0x0001ffff000100ff, 0x0001ffff00010001, 0x0001ffff00010100,
    0x0001ffff01ffff00, 0x0001ffff01000001, 0x0001ffff01010000, 0x0001ff00ffffff00,
    0x0001ff00ffff00ff, 0x0001ff00ffff0001, 0x0001ff00ffff0100, 0x0001ff00ff00ff01,
    0x0001ff00ff000000, 0x0001ff00ff01ff00, 0x0001ff00ff01ff01, 0x0001ff00ff010001,
    0x0001ff00ff010100, 0x0001ff0000ff0000, 0x0001ff0000ff0100, 0x0001ff000000ff00,
    0x0001ff0000000000, 0x0001ff0000000001, 0x0001ff0000000100, 0x0001ff0000010000,
    0x0001ff0000010001, 0x0001ff0000010101, 0x0001ff0001ff00ff, 0x0001ff0001ff0101,
    0x0001ff000100ff01, 0x0001ff0001000000, 0x0001ff000101ff00, 0x0001ff0001010001,
    0x0001ff0001010100, 0x0001ff01ff00ff00, 0x0001ff01ff000001, 0x0001ff01ff000100,
    0x0001ff0100ffffff, 0x0001ff0100ffff00, 0x0001ff0100ff0001, 0x0001ff0100000000,
    0x0001ff0100000001, 0x0001ff01000001ff, 0x0001ff010001ffff, 0x0001ff0101ff0000,
    0x0001ff010100ff00, 0x0001ff0101000001, 0x0001ff0101010000, 0x000100ffff00ff00,
    0x000100ffff00ff01, 0x000100ffff000000, 0x000100ffff000001, 0x000100ffff000101,
    0x000100ffff01ff00, 0x000100ffff010001, 0x000100ffff010100, 0x000100ff00ffffff,
    0x000100ff00ffff01, 0x000100ff00ff0000, 0x000100ff00ff01ff, 0x000100ff00ff0101,
    0x000100ff0000ff00, 0x000100ff000000ff, 0x000100ff00000000, 0x000100ff00000001,
    0x000100ff00000100, 0x000100ff00000101, 0x000100ff0001ffff, 0x000100ff0001ff01,
    0x000100ff00010000, 0x000100ff01ff00ff, 0x000100ff01ff0000, 0x000100ff01ff0100,
    0x000100ff0100ffff, 0x000100ff0100ff01, 0x000100ff010000ff, 0x000100ff01000000,
    0x000100ff01000001, 0x000100ff010001ff, 0x000100ff01000101, 0x000100ff0101ff00,
    0x000100ff010100ff, 0x000100ff01010100, 0x00010000ffff0000, 0x00010000ffff01ff,
    0x00010000ffff0101, 0x00010000ff00ff00, 0x00010000ff000000, 0x00010000ff000001,
    0x00010000ff000100, 0x0001000000ff00ff, 0x0001000000ff0000, 0x0001000000ff0001,
    0x0001000000ff0100, 0x000100000000ffff, 0x000100000000ff00, 0x00010000000000ff,
    0x0001000000000000, 0x0001000000000001, 0x0001000000000100, 0x000100000001ff00,
    0x00010000000100ff, 0x0001000000010000, 0x0001000000010001, 0x0001000000010100,
    0x0001000001ff0001, 0x0001000001ff0100, 0x0001000001ff0101, 0x000100000100ff00,
    0x0001000001000000, 0x0001000001000001, 0x0001000001000100, 0x0001000001000101,
    0x000100000101ff01, 0x0001000001010000, 0x0001000001010001, 0x00010000010101ff,
    0x00010001ffffff01, 0x00010001ffff0100, 0x00010001ff000000, 0x00010001ff01ffff,
    0x00010001ff010001, 0x00010001ff0101ff, 0x00010001ff010100, 0x0001000100ffffff,
    0x0001000100ff0000, 0x0001000100ff01ff, 0x0001000100ff0101, 0x000100010000ff00,
    0x00010001000000ff, 0x0001000100000000, 0x0001000100000001, 0x00010001000001ff,
    0x0001000100000101, 0x000100010001ffff, 0x0001000100010000, 0x00010001000101ff,
    0x0001000101ffffff, 0x0001000101ffff01, 0x0001000101ff0000, 0x0001000101ff0101,
    0x00010001010000ff, 0x0001000101000001, 0x00010001010001ff, 0x0001000101000100,
    0x000100010101ffff, 0x00010001010100ff, 0x0001000101010001, 0x0001000101010101,
    0x000101ffff000001, 0x000101ffff000100, 0x000101ffff010000, 0x000101ff00ffff00,
    0x000101ff0000ff01, 0x000101ff00000000, 0x000101ff00000101, 0x000101ff0001ff00,
    0x000101ff00010100, 0x000101ff01ff0000, 0x000101ff0100ff00, 0x000101ff010001ff,
    0x000101ff01010001, 0x00010100ffffff00, 0x00010100ffff00ff, 0x00010100ff00ffff,
    0x00010100ff000000, 0x00010100ff01ff00, 0x00010100ff0100ff, 0x00010100ff010001,
    0x00010100ff010100, 0x0001010000ffffff, 0x0001010000ffff00, 0x0001010000ff0000,
    0x0001010000ff0001, 0x0001010000ff01ff, 0x000101000000ff00, 0x00010100000000ff,
    0x0001010000000000, 0x0001010000000001, 0x0001010000000100, 0x000101000001ffff,
    0x0001010000010000, 0x0001010000010101, 0x0001010001ffff01, 0x0001010001ff00ff,
    0x0001010001ff0101, 0x0001010001000000, 0x000101000101ff00, 0x00010100010100ff,
    0x0001010001010000, 0x0001010001010100, 0x00010101ff00ff00, 0x00010101ff000001,
    0x00010101ff0001ff, 0x0001010100ffff00, 0x0001010100ff00ff, 0x0001010100ff0100,
    0x000101010000ffff, 0x0001010100000000, 0x00010101000001ff, 0x0001010100000101,
    0x00010101000100ff, 0x0001010100010000, 0x0001010100010100, 0x0001010101ff0001,
    0x00010101010000ff, 0x00010101010001ff, 0x0001010101000101, 0x0001010101010001,
    0x01ffffffffffffff, 0x01ffffffffffff01, 0x01ffffffffff01ff, 0x01ffffffffff0101,
    0x01ffffffff01ffff, 0x01ffffffff01ff01, 0x01ffffffff0101ff, 0x01ffffffff010101,
    0x01ffffff00ff0000, 0x01ffffff0000ffff, 0x01ffffff0000ff00, 0x01ffffff000000ff,
    0x01ffffff00000001, 0x01ffffff00000100, 0x01ffffff00010000, 0x01ffffff01ffffff,
    0x01ffffff01ffff01, 0x01ffffff01ff01ff, 0x01ffffff01ff0101, 0x01ffffff01000000,
    0x01ffffff0101ffff, 0x01ffffff0101ff01, 0x01ffffff010101ff, 0x01ffffff01010101,
    0x01ffff00ffff0000, 0x01ffff00ff00ff00, 0x01ffff00ff0000ff, 0x01ffff00ff000001,
    0x01ffff00ff000100, 0x01ffff00ff010000, 0x01ffff0000ffff00, 0x01ffff0000ff00ff,
    0x01ffff0000ff0100, 0x01ffff000000ffff, 0x01ffff000000ff01, 0x01ffff0000000000,
    0x01ffff0000000001, 0x01ffff00000001ff, 0x01ffff0000000100, 0x01ffff00000100ff,
    0x01ffff0000010001, 0x01ffff0000010100, 0x01ffff0001ff0000, 0x01ffff0001ff0100,
    0x01ffff00010000ff, 0x01ffff0001000001, 0x01ffff0001000100, 0x01ffff0001010000,
    0x01ffff01ffffffff, 0x01ffff01ffffff01, 0x01ffff01ffff01ff, 0x01ffff01ffff0101,
    0x01ffff01ff000000, 0x01ffff01ff01ffff, 0x01ffff01ff01ff01, 0x01ffff01ff0101ff,
    0x01ffff01ff010101, 0x01ffff010000ff00, 0x01ffff01000000ff, 0x01ffff0100000100,
    0x01ffff0100010000, 0x01ffff0101ffffff, 0x01ffff0101ffff01, 0x01ffff0101ff01ff,
    0x01ffff0101ff0101, 0x01ffff0101000000, 0x01ffff010101ffff, 0x01ffff010101ff01,
    0x01ffff01010101ff, 0x01ffff0101010101, 0x01ff00ffff0000ff, 0x01ff00ffff000100,
    0x01ff00ff00ffff00, 0x01ff00ff00ff00ff, 0x01ff00ff0000ff00, 0x01ff00ff00000000,
    0x01ff00ff00000101, 0x01ff00ff0001ff00, 0x01ff00ff000100ff, 0x01ff00ff00010100,
    0x01ff00ff010000ff, 0x01ff00ff01000100, 0x01ff0000ffffff00, 0x01ff0000ffff0100,
    0x01ff0000ff00ff01, 0x01ff0000ff000000, 0x01ff0000ff000101, 0x01ff0000ff010001,
    0x01ff0000ff010100, 0x01ff000000ffffff, 0x01ff000000ffff00, 0x01ff000000ff0000,
    0x01ff000000ff01ff, 0x01ff00000000ff00, 0x01ff0000000000ff, 0x01ff000000000000,
    0x01ff000000000001, 0x01ff000000000100, 0x01ff000000000101, 0x01ff000000010000,
    0x01ff000000010001, 0x01ff0000000101ff, 0x01ff000000010101, 0x01ff000001ffff00,
    0x01ff000001ff00ff, 0x01ff000001ff0001, 0x01ff000001ff0100, 0x01ff00000100ffff,
    0x01ff00000100ff01, 0x01ff000001000000, 0x01ff0000010001ff, 0x01ff000001010001,
    0x01ff0001ff00ff00, 0x01ff0001ff000001, 0x01ff0001ff000100, 0x01ff0001ff010000,
    0x01ff000100ffff00, 0x01ff000100ff00ff, 0x01ff000100ff0100, 0x01ff000100ff0101,
    0x01ff00010000ffff, 0x01ff000100000000, 0x01ff000100000100, 0x01ff000100000101,
    0x01ff00010001ff00, 0x01ff000100010001, 0x01ff000100010101, 0x01ff000101ff0000,
    0x01ff00010100ff00, 0x01ff000101000101, 0x01ff0001010100ff, 0x01ff01ffffffffff,
    0x01ff01ffffffff01, 0x01ff01ffffff01ff, 0x01ff01ffffff0101, 0x01ff01ffff000000,
    0x01ff01ffff01ffff, 0x01ff01ffff01ff01, 0x01ff01ffff0101ff, 0x01ff01ffff010101,
    0x01ff01ff00ffff00, 0x01ff01ff00ff0000, 0x01ff01ff0000ff00, 0x01ff01ff000000ff,
    0x01ff01ff00000100, 0x01ff01ff00010000, 0x01ff01ff00010100, 0x01ff01ff01ffffff,
    0x01ff01ff01ffff01, 0x01ff01ff01ff01ff, 0x01ff01ff01ff0101, 0x01ff01ff01000000,
    0x01ff01ff0101ffff, 0x01ff01ff0101ff01, 0x01ff01ff010101ff, 0x01ff01ff01010101,
    0x01ff0100ffff0000, 0x01ff0100ffff0001, 0x01ff0100ff00ff00, 0x01ff0100ff0000ff,
    0x01ff0100ff000001, 0x01ff0100ff010000, 0x01ff010000ffff00, 0x01ff010000ff00ff,
    0x01ff010000ff0001, 0x01ff010000ff0100, 0x01ff01000000ffff, 0x01ff01000000ff01,
    0x01ff010000000000, 0x01ff010000000101, 0x01ff01000001ff00, 0x01ff0100000100ff,
    0x01ff010001ff0000, 0x01ff010001000001, 0x01ff010001000100, 0x01ff010001010000,
    0x01ff0101ffffffff, 0x01ff0101ffffff01, 0x01ff0101ffff01ff, 0x01ff0101ffff0101,
    0x01ff0101ff000000, 0x01ff0101ff01ffff, 0x01ff0101ff01ff01, 0x01ff0101ff0101ff,
    0x01ff0101ff010101, 0x01ff010100ff0000, 0x01ff01010000ff00, 0x01ff0101000000ff,
    0x01ff010100000001, 0x01ff010101ffffff, 0x01ff010101ffff01, 0x01ff010101ff01ff,
    0x01ff010101ff0101, 0x01ff010101000000, 0x01ff01010101ffff, 0x01ff01010101ff01,
    0x01ff0101010101ff, 0x01ff010101010101, 0x0100ffffffff0000, 0x0100ffffff00ff00,
    0x0100ffffff000001, 0x0100ffffff0001ff, 0x0100ffffff000100, 0x0100ffffff010000,
    0x0100ffff00ffff00, 0x0100ffff00ff0001, 0x0100ffff00ff0100, 0x0100ffff00000000,
    0x0100ffff000001ff, 0x0100ffff00000101, 0x0100ffff00010100, 0x0100ffff00010101,
    0x0100ffff01ff0000, 0x0100ffff0100ff00, 0x0100ffff010000ff, 0x0100ffff01000001,
    0x0100ffff01000100, 0x0100ffff01010000, 0x0100ff00ffffff00, 0x0100ff00ffff00ff,
    0x0100ff00ffff0001, 0x0100ff00ffff0100, 0x0100ff00ff00ffff, 0x0100ff00ff000000,
    0x0100ff00ff0001ff, 0x0100ff00ff000101, 0x0100ff00ff01ff00, 0x0100ff00ff0100ff,
    0x0100ff00ff010001, 0x0100ff00ff010100, 0x0100ff0000ffffff, 0x0100ff0000ff0000,
    0x0100ff000000ffff, 0x0100ff000000ff00, 0x0100ff00000000ff, 0x0100ff0000000000,
    0x0100ff0000000001, 0x0100ff0000000100, 0x0100ff000001ff01, 0x0100ff0000010000,
    0x0100ff0001ff00ff, 0x0100ff0001ff0001, 0x0100ff000100ff01, 0x0100ff0001000000,
    0x0100ff00010001ff, 0x0100ff000101ff00, 0x0100ff00010100ff, 0x0100ff0001010001,
    0x0100ff0001010100, 0x0100ff01ffff0000, 0x0100ff01ff00ff00, 0x0100ff01ff0000ff,
    0x0100ff01ff000100, 0x0100ff01ff010000, 0x0100ff0100ff00ff, 0x0100ff0100ff0001,
    0x0100ff0100ff0100, 0x0100ff010000ffff, 0x0100ff010000ff01, 0x0100ff0100000000,
    0x0100ff01000001ff, 0x0100ff0100010001, 0x0100ff0100010100, 0x0100ff0101ff0000,
    0x0100ff01010000ff, 0x0100ff0101000001, 0x0100ff0101010100, 0x010000ffffffff00,
    0x010000ffffff00ff, 0x010000ffffff0001, 0x010000ffff00ffff, 0x010000ffff000000,
    0x010000ffff0001ff, 0x010000ffff010001, 0x010000ff00ffffff, 0x010000ff00ff0101,
    0x010000ff0000ff00, 0x010000ff000000ff, 0x010000ff00000000, 0x010000ff00000001,
    0x010000ff000001ff, 0x010000ff00000100, 0x010000ff0001ffff, 0x010000ff0001ff00,
    0x010000ff0001ff01, 0x010000ff00010000, 0x010000ff01ff00ff, 0x010000ff01ff0001,
    0x010000ff0100ff01, 0x010000ff010000ff, 0x010000ff01000000, 0x010000ff010001ff,
    0x010000ff0101ff00, 0x010000ff01010100, 0x01000000ffffffff, 0x01000000ffff0000,
    0x01000000ffff01ff, 0x01000000ffff0101, 0x01000000ff00ffff, 0x01000000ff00ff00,
    0x01000000ff0000ff, 0x01000000ff000000, 0x01000000ff000001, 0x01000000ff000100,
    0x01000000ff01ff00, 0x01000000ff010000, 0x01000000ff010100, 0x01000000ff010101,
    0x0100000000ffff00, 0x0100000000ff00ff, 0x0100000000ff0000, 0x0100000000ff0001,
    0x0100000000ff0100, 0x010000000000ffff, 0x010000000000ff00, 0x010000000000ff01,
    0x01000000000000ff, 0x0100000000000000, 0x0100000000000001, 0x01000000000001ff,
    0x0100000000000100, 0x0100000000000101, 0x010000000001ff00, 0x01000000000100ff,
    0x0100000000010000, 0x0100000000010001, 0x0100000000010100, 0x0100000001ffff00,
    0x0100000001ff0000, 0x0100000001ff01ff, 0x010000000100ff00, 0x010000000100ff01,
    0x01000000010000ff, 0x0100000001000000, 0x0100000001000001, 0x0100000001000100,
    0x0100000001000101, 0x010000000101ffff, 0x010000000101ff01, 0x0100000001010000,
    0x01000000010101ff, 0x0100000001010101, 0x01000001ffffff00, 0x01000001ffff00ff,
    0x01000001ff00ffff, 0x01000001ff000000, 0x01000001ff000100, 0x01000001ff01ffff,
    0x01000001ff010001, 0x01000001ff010100, 0x0100000100ff0000, 0x0100000100ff01ff,
    0x0100000100ff0100, 0x010000010000ff00, 0x010000010000ff01, 0x0100000100000000,
    0x0100000100000001, 0x0100000100000100, 0x0100000100010000, 0x01000001000101ff,
    0x0100000101ffff01, 0x0100000101ff00ff, 0x0100000101ff0100, 0x0100000101ff0101,
    0x010000010100ff01, 0x01000001010000ff, 0x0100000101000000, 0x01000001010100ff,
    0x0100000101010001, 0x0100000101010100, 0x010001ffffff0000, 0x010001ffff000001,
    0x010001ffff000100, 0x010001ffff010000, 0x010001ff00ffff00, 0x010001ff00ff0001,
    0x010001ff0000ffff, 0x010001ff0000ff01, 0x010001ff00000000, 0x010001ff00000001,
    0x010001ff00000101, 0x010001ff000100ff, 0x010001ff00010000, 0x010001ff01ff0000,
    0x010001ff0100ff00, 0x010001ff01000001, 0x010001ff01000100, 0x010001ff01010000,
    0x01000100ffff00ff, 0x01000100ffff0001, 0x01000100ffff0100, 0x01000100ff00ffff,
    0x01000100ff00ff01, 0x01000100ff000000, 0x01000100ff0001ff, 0x01000100ff000101,
    0x01000100ff01ffff, 0x01000100ff01ff00, 0x01000100ff0100ff, 0x01000100ff010001,
    0x0100010000ffffff, 0x0100010000ffff01, 0x0100010000ff0000, 0x0100010000ff01ff,
    0x0100010000ff0101, 0x010001000000ff00, 0x01000100000000ff, 0x0100010000000000,
    0x0100010000000001, 0x0100010000000100, 0x010001000001ff01, 0x0100010000010000,
    0x0100010000010001, 0x0100010000010101, 0x0100010001ffff00, 0x0100010001ff00ff,
    0x010001000100ffff, 0x010001000100ff01, 0x0100010001000000, 0x0100010001000101,
    0x010001000101ff00, 0x0100010001010001, 0x01000101ffff0000, 0x01000101ff000000,
    0x01000101ff010000, 0x0100010100ff00ff, 0x0100010100ff0001, 0x0100010100ff0100,
    0x010001010000ffff, 0x0100010100000000, 0x01000101000001ff, 0x010001010001ff00,
    0x0100010101ff0000, 0x010001010100ff00, 0x01000101010000ff, 0x0100010101000000,
    0x0100010101000001, 0x0101ffffffffffff, 0x0101ffffffffff01, 0x0101ffffffff01ff,
    0x0101ffffffff0101, 0x0101ffffff000000, 0x0101ffffff01ffff, 0x0101ffffff01ff01,
    0x0101ffffff0101ff, 0x0101ffffff010101, 0x0101ffff00ff0000, 0x0101ffff0000ff00,
    0x0101ffff000000ff, 0x0101ffff00000001, 0x0101ffff00000100, 0x0101ffff01ffffff,
    0x0101ffff01ffff01, 0x0101ffff01ff01ff, 0x0101ffff01ff0101, 0x0101ffff01000000,
    0x0101ffff0101ffff, 0x0101ffff0101ff01, 0x0101ffff010101ff, 0x0101ffff01010101,
    0x0101ff00ffff0000, 0x0101ff00ffff0100, 0x0101ff00ff00ff00, 0x0101ff00ff0000ff,
    0x0101ff00ff000001, 0x0101ff00ff000100, 0x0101ff00ff000101, 0x0101ff0000ff0001,
    0x0101ff0000ff0100, 0x0101ff000000ff00, 0x0101ff0000000000, 0x0101ff00000001ff,
    0x0101ff0000000101, 0x0101ff000001ff00, 0x0101ff00000100ff, 0x0101ff0001ff0000,
    0x0101ff000100ffff, 0x0101ff000100ff01, 0x0101ff0001000001, 0x0101ff0001000100,
    0x0101ff01ffffff01, 0x0101ff01ffff01ff, 0x0101ff01ffff0101, 0x0101ff01ff00ffff,
    0x0101ff01ff000100, 0x0101ff01ff01ff01, 0x0101ff01ff0101ff, 0x0101ff01ff010101,
    0x0101ff0100ff0000, 0x0101ff010000ff00, 0x0101ff0100000001, 0x0101ff0100000100,
    0x0101ff0100010000, 0x0101ff0101ffffff, 0x0101ff0101ffff01, 0x0101ff0101ff01ff,
    0x0101ff0101ff0101, 0x0101ff0101000000, 0x0101ff010101ffff, 0x0101ff010101ff01,
    0x0101ff01010101ff, 0x0101ff0101010101, 0x010100ffff000100, 0x010100ffff010000,
    0x010100ff00ffff00, 0x010100ff00ff00ff, 0x010100ff0000ffff, 0x010100ff000000ff,
    0x010100ff00000000, 0x010100ff000001ff, 0x010100ff00000101, 0x010100ff0001ff00,
    0x010100ff00010000, 0x010100ff00010001, 0x010100ff000101ff, 0x010100ff00010100,
    0x010100ff01ff0000, 0x01010000ffff0001, 0x01010000ffff0100, 0x01010000ff00ffff,
    0x01010000ff00ff01, 0x01010000ff000000, 0x01010000ff0001ff, 0x01010000ff010001,
    0x01010000ff010100, 0x0101000000ffff01, 0x0101000000ff0000, 0x010100000000ff00,
    0x01010000000000ff, 0x0101000000000000, 0x0101000000000001, 0x0101000000000100,
    0x0101000000010000, 0x0101000000010101, 0x0101000001ffff00, 0x0101000001ff00ff,
    0x0101000001ff0000, 0x0101000001ff0001, 0x0101000001ff0100, 0x010100000100ff01,
    0x0101000001000000, 0x01010000010001ff, 0x01010001ffff0000, 0x01010001ff00ff00,
    0x01010001ff000001, 0x01010001ff000101, 0x01010001ff01ff00, 0x01010001ff010000,
    0x0101000100ff00ff, 0x0101000100ff0001, 0x0101000100ff0101, 0x010100010000ff01,
    0x0101000100000000, 0x0101000100000001, 0x01010001000001ff, 0x010100010001ffff,
    0x010100010001ff01, 0x0101000101ff0001, 0x010100010100ffff, 0x0101000101000000,
    0x0101000101000001, 0x0101000101000100, 0x010100010101ff00, 0x01010001010100ff,
    0x0101000101010001, 0x010101ffffffffff, 0x010101ffffffff01, 0x010101ffffff01ff,
    0x010101ffffff0101, 0x010101ffff01ffff, 0x010101ffff01ff01, 0x010101ffff0101ff,
    0x010101ffff010101, 0x010101ff0000ff00, 0x010101ff000000ff, 0x010101ff00000001,
    0x010101ff00000100, 0x010101ff01ffffff, 0x010101ff01ffff01, 0x010101ff01ff01ff,
    0x010101ff01ff0101, 0x010101ff01000000, 0x010101ff0101ffff, 0x010101ff0101ff01,
    0x010101ff010101ff, 0x010101ff01010101, 0x01010100ffff0000, 0x01010100ff0000ff,
    0x01010100ff000100, 0x01010100ff01ff00, 0x01010100ff010000, 0x0101010000ffff00,
    0x010101000000ffff, 0x0101010000000000, 0x0101010000000101, 0x010101000001ff00,
    0x0101010000010001, 0x0101010000010100, 0x010101000100ffff, 0x0101010001000001,
    0x01010101ffffffff, 0x01010101ffffff01, 0x01010101ffff01ff, 0x01010101ffff0101,
    0x01010101ff01ffff, 0x01010101ff01ff01, 0x01010101ff0101ff, 0x01010101ff010101,
    0x010101010000ff00, 0x01010101000000ff, 0x0101010100000001, 0x0101010101ffffff,
    0x0101010101ffff01, 0x0101010101ff01ff, 0x0101010101ff0101, 0x0101010101000000,
    0x010101010101ffff, 0x010101010101ff01, 0x01010101010101ff, 0x0101010101010101,
GGML_TABLE_END()
#else
GGML_TABLE_BEGIN(uint32_t, iq1s_grid_gpu, NGRID_IQ1S)
    0x00000000, 0x00000002, 0x00000101, 0x00000200, 0x00000202, 0x00010001, 0x00010101, 0x00020000,
    0x00020002, 0x00020200, 0x00020202, 0x01000101, 0x01010001, 0x01010100, 0x01010102, 0x01020101,
    0x02000000, 0x02000002, 0x02000200, 0x02000202, 0x02010101, 0x02020000, 0x02020002, 0x02020200,
    0x02020202, 0x00000110, 0x00000111, 0x00010011, 0x00010110, 0x00010112, 0x00010211, 0x00010212,
    0x00020111, 0x01000011, 0x01000112, 0x01000211, 0x01010012, 0x01010111, 0x01010212, 0x01020011,
    0x01020110, 0x01020112, 0x01020210, 0x02000111, 0x02010011, 0x02010110, 0x02010112, 0x02020111,
    0x00000020, 0x00000022, 0x00000220, 0x00000222, 0x00010121, 0x00020020, 0x00020022, 0x00020220,
    0x00020222, 0x01000121, 0x01010021, 0x01010221, 0x01020120, 0x01020221, 0x02000020, 0x02000022,
    0x02000220, 0x02000222, 0x02010021, 0x02010121, 0x02010221, 0x02020020, 0x02020022, 0x02020220,
    0x02020222, 0x00011001, 0x00011100, 0x00011102, 0x00021101, 0x01001001, 0x01001201, 0x01011101,
    0x01011202, 0x01021100, 0x01021101, 0x02011001, 0x02011201, 0x02021101, 0x00001011, 0x00001110,
    0x00001111, 0x00001112, 0x00011111, 0x00011210, 0x00011212, 0x00021211, 0x01001010, 0x01001111,
    0x01001212, 0x01011010, 0x01011011, 0x01011110, 0x01011111, 0x01011112, 0x01011211, 0x01021010,
    0x01021012, 0x01021111, 0x01021210, 0x01021212, 0x02001011, 0x02011011, 0x02011111, 0x02011210,
    0x02011212, 0x02021011, 0x02021110, 0x02021111, 0x02021112, 0x02021211, 0x00011120, 0x00011221,
    0x01001021, 0x01001120, 0x01011020, 0x01011022, 0x01011121, 0x01011220, 0x01021020, 0x01021021,
    0x01021122, 0x01021221, 0x02001121, 0x02011021, 0x02011120, 0x02011221, 0x00002000, 0x00002002,
    0x00002200, 0x00002202, 0x00012101, 0x00022000, 0x00022002, 0x00022200, 0x00022202, 0x01002101,
    0x01012001, 0x01012102, 0x01022101, 0x02002000, 0x02002002, 0x02002200, 0x02002202, 0x02012101,
    0x02022000, 0x02022002, 0x02022200, 0x02022202, 0x00002111, 0x00012011, 0x00012110, 0x00012211,
    0x00022110, 0x00022111, 0x01002011, 0x01012010, 0x01012011, 0x01012111, 0x01022011, 0x01022110,
    0x01022211, 0x02012011, 0x02012110, 0x02012112, 0x02012211, 0x02022111, 0x00002020, 0x00002022,
    0x00002220, 0x00002222, 0x00012121, 0x00022020, 0x00022022, 0x00022220, 0x00022222, 0x01002121,
    0x01012021, 0x01012221, 0x01022021, 0x01022121, 0x02002020, 0x02002022, 0x02002121, 0x02002220,
    0x02002222, 0x02012121, 0x02022020, 0x02022022, 0x02022220, 0x02022222, 0x00110000, 0x00110001,
    0x00110100, 0x00110201, 0x00120100, 0x00120101, 0x01100001, 0x01100100, 0x01110000, 0x01110101,
    0x01110200, 0x01120001, 0x01120100, 0x01120101, 0x01120201, 0x02110001, 0x02110100, 0x02110102,
    0x02120001, 0x02120101, 0x00100011, 0x00100110, 0x00100112, 0x00100211, 0x00110010, 0x00110012,
    0x00110111, 0x00110210, 0x00120011, 0x00120110, 0x00120211, 0x01100111, 0x01100212, 0x01110010,
    0x01110011, 0x01110012, 0x01110110, 0x01110111, 0x01110112, 0x01110211, 0x01120010, 0x01120111,
    0x02100110, 0x02110012, 0x02110111, 0x02120011, 0x02120110, 0x00110021, 0x00110120, 0x00110122,
    0x00120121, 0x01100020, 0x01100122, 0x01100221, 0x01110022, 0x01110121, 0x01110220, 0x01110222,
    0x01120120, 0x01120122, 0x02100121, 0x02110021, 0x02110120, 0x02110122, 0x02120121, 0x00101001,
    0x00101102, 0x00101201, 0x00111100, 0x00111101, 0x00111200, 0x00111201, 0x00121001, 0x00121102,
    0x01101001, 0x01101101, 0x01101102, 0x01101200, 0x01101202, 0x01111001, 0x01111100, 0x01111101,
    0x01111102, 0x01111201, 0x01121002, 0x01121101, 0x01121200, 0x02101100, 0x02101201, 0x02111000,
    0x02111100, 0x02111101, 0x02111200, 0x02111201, 0x02111202, 0x02121001, 0x02121100, 0x02121101,
    0x02121201, 0x00101012, 0x00101111, 0x00101212, 0x00111011, 0x00111110, 0x00111111, 0x00111112,
    0x00111211, 0x00121010, 0x00121012, 0x00121111, 0x00121210, 0x00121212, 0x01101011, 0x01101110,
    0x01101111, 0x01101112, 0x01111011, 0x01111012, 0x01111110, 0x01111111, 0x01111112, 0x01111211,
    0x01111212, 0x01121011, 0x01121110, 0x01121111, 0x01121112, 0x01121211, 0x02101010, 0x02101012,
    0x02101110, 0x02101111, 0x02101210, 0x02101212, 0x02111010, 0x02111011, 0x02111110, 0x02111111,
    0x02111112, 0x02111211, 0x02111212, 0x02121010, 0x02121012, 0x02121111, 0x00101021, 0x00101120,
    0x00101121, 0x00101122, 0x00111121, 0x00111122, 0x00111220, 0x00111222, 0x00121021, 0x00121122,
    0x01101020, 0x01101022, 0x01101120, 0x01101121, 0x01101220, 0x01101222, 0x01111021, 0x01111121,
    0x01111122, 0x01111220, 0x01111221, 0x01121021, 0x01121120, 0x01121121, 0x01121220, 0x01121221,
    0x01121222, 0x02101122, 0x02101222, 0x02111022, 0x02111121, 0x02121120, 0x02121221, 0x00112001,
    0x00112102, 0x00122101, 0x01102001, 0x01102100, 0x01102102, 0x01102201, 0x01112000, 0x01112101,
    0x01112200, 0x01112202, 0x01122000, 0x01122001, 0x01122100, 0x01122102, 0x01122201, 0x02102101,
    0x02112001, 0x02112100, 0x02122101, 0x00112010, 0x00112012, 0x00112111, 0x00112212, 0x00122011,
    0x00122111, 0x01102012, 0x01102110, 0x01102111, 0x01102210, 0x01112011, 0x01112110, 0x01112111,
    0x01112112, 0x01112211, 0x01112212, 0x01122010, 0x01122111, 0x01122212, 0x02102211, 0x02112011,
    0x02112012, 0x02112111, 0x02112210, 0x02122011, 0x02122112, 0x02122211, 0x00102221, 0x00112122,
    0x00122120, 0x00122122, 0x01102120, 0x01102122, 0x01102221, 0x01112020, 0x01112022, 0x01112121,
    0x01112220, 0x01122021, 0x01122122, 0x01122221, 0x02102121, 0x02112021, 0x02112122, 0x02112222,
    0x00200000, 0x00200002, 0x00200200, 0x00200202, 0x00210101, 0x00220000, 0x00220002, 0x00220101,
    0x00220200, 0x00220202, 0x01200101, 0x01210001, 0x01210201, 0x01220001, 0x01220101, 0x02200000,
    0x02200002, 0x02200200, 0x02200202, 0x02210101, 0x02220000, 0x02220002, 0x02220101, 0x02220200,
    0x02220202, 0x00200111, 0x00210011, 0x00210110, 0x00210211, 0x00220111, 0x01200012, 0x01200110,
    0x01200211, 0x01210111, 0x01210210, 0x01210212, 0x01220011, 0x01220110, 0x01220111, 0x01220112,
    0x02200111, 0x02210010, 0x02210112, 0x02210211, 0x02220111, 0x00200021, 0x00200220, 0x00200222,
    0x00210021, 0x00210121, 0x00220020, 0x00220022, 0x00220220, 0x00220222, 0x01200121, 0x01210021,
    0x01210122, 0x01210221, 0x01220121, 0x02200021, 0x02200220, 0x02200222, 0x02210021, 0x02210121,
    0x02220020, 0x02220022, 0x02220220, 0x02220222, 0x00201101, 0x00211100, 0x00211102, 0x00211201,
    0x00221101, 0x01201100, 0x01201101, 0x01201102, 0x01201201, 0x01211002, 0x01211101, 0x01211200,
    0x01211202, 0x01221102, 0x02201101, 0x02211001, 0x02211100, 0x02211201, 0x02221001, 0x02221101,
    0x00201211, 0x00211111, 0x00221011, 0x00221211, 0x01201010, 0x01201111, 0x01201210, 0x01211011,
    0x01211110, 0x01211111, 0x01211211, 0x01221012, 0x01221111, 0x01221210, 0x02201211, 0x02211010,
    0x02211110, 0x02211111, 0x02211210, 0x02211212, 0x02221011, 0x02221110, 0x02221112, 0x02221211,
    0x00201121, 0x00211020, 0x00211022, 0x00211221, 0x00221121, 0x01201021, 0x01201221, 0x01211121,
    0x01221020, 0x01221021, 0x01221221, 0x02201120, 0x02201122, 0x02211020, 0x02211222, 0x00202000,
    0x00202002, 0x00202200, 0x00202202, 0x00212101, 0x00222000, 0x00222002, 0x00222200, 0x00222202,
    0x01202101, 0x01212001, 0x01212100, 0x01222101, 0x02202000, 0x02202002, 0x02202200, 0x02202202,
    0x02222000, 0x02222002, 0x02222200, 0x02222202, 0x00202211, 0x00212011, 0x00212110, 0x00212211,
    0x00222111, 0x01202112, 0x01202211, 0x01212012, 0x01212111, 0x01222011, 0x01222110, 0x01222112,
    0x01222211, 0x02202111, 0x02212010, 0x02212112, 0x02212211, 0x02222110, 0x02222111, 0x00202020,
    0x00202022, 0x00202220, 0x00202222, 0x00222020, 0x00222022, 0x00222220, 0x00222222, 0x01202121,
    0x01212021, 0x01212122, 0x01212221, 0x01222121, 0x02202020, 0x02202022, 0x02202220, 0x02202222,
    0x02212121, 0x02222020, 0x02222022, 0x02222220, 0x02222222, 0x10000101, 0x10010001, 0x10010102,
    0x10020101, 0x11000201, 0x11010002, 0x11010101, 0x11010200, 0x11010202, 0x11020001, 0x11020100,
    0x11020102, 0x12010100, 0x12010201, 0x12020001, 0x12020102, 0x10000010, 0x10000011, 0x10000110,
    0x10000112, 0x10000211, 0x10010012, 0x10010111, 0x10010112, 0x10010210, 0x10010212, 0x10020011,
    0x10020112, 0x10020211, 0x11000111, 0x11000210, 0x11000212, 0x11010011, 0x11010110, 0x11010111,
    0x11010112, 0x11010211, 0x11010212, 0x11020111, 0x11020210, 0x11020212, 0x12000011, 0x12000110,
    0x12000112, 0x12010010, 0x12010012, 0x12010111, 0x12020010, 0x12020011, 0x12020012, 0x10000121,
    0x10010021, 0x10010120, 0x10010122, 0x10020121, 0x11000021, 0x11010022, 0x11010121, 0x11010222,
    0x11020120, 0x11020221, 0x12000221, 0x12010120, 0x12020121, 0x10001001, 0x10011101, 0x10011201,
    0x10021201, 0x11001101, 0x11001200, 0x11001202, 0x11011001, 0x11011100, 0x11011101, 0x11011102,
    0x11021001, 0x11021002, 0x11021101, 0x11021200, 0x11021202, 0x12001001, 0x12001102, 0x12001201,
    0x12011000, 0x12011002, 0x12011101, 0x12021000, 0x12021001, 0x12021201, 0x10001011, 0x10001012,
    0x10001111, 0x10001212, 0x10011011, 0x10011110, 0x10011111, 0x10011112, 0x10011211, 0x10021010,
    0x10021111, 0x10021212, 0x11001011, 0x11001110, 0x11001111, 0x11001112, 0x11001211, 0x11011010,
    0x11011011, 0x11011110, 0x11011111, 0x11011112, 0x11011210, 0x11011211, 0x11021011, 0x11021110,
    0x11021111, 0x11021112, 0x11021211, 0x12001012, 0x12001110, 0x12001111, 0x12001210, 0x12011011,
    0x12011110, 0x12011111, 0x12011112, 0x12011211, 0x12011212, 0x12021111, 0x12021210, 0x12021212,
    0x10001021, 0x10001121, 0x10001221, 0x10011120, 0x10011121, 0x10011220, 0x10011222, 0x10021021,
    0x10021120, 0x10021221, 0x11001020, 0x11001022, 0x11001121, 0x11001220, 0x11011020, 0x11011021,
    0x11011022, 0x11011121, 0x11011122, 0x11011221, 0x11021022, 0x11021121, 0x11021220, 0x12001021,
    0x12001121, 0x12001222, 0x12011120, 0x12011121, 0x12021021, 0x12021120, 0x12021122, 0x10002101,
    0x10012001, 0x10012101, 0x10012202, 0x10022101, 0x11002002, 0x11002201, 0x11012000, 0x11012101,
    0x11012200, 0x11022001, 0x11022100, 0x11022102, 0x11022201, 0x12002101, 0x12012001, 0x12012100,
    0x12012102, 0x12012201, 0x12022101, 0x10002011, 0x10002111, 0x10002112, 0x10002212, 0x10012010,
    0x10012110, 0x10012111, 0x10012210, 0x10022011, 0x10022110, 0x10022112, 0x11002010, 0x11002111,
    0x11002212, 0x11012011, 0x11012012, 0x11012110, 0x11012111, 0x11012112, 0x11012211, 0x11022010,
    0x11022012, 0x11022111, 0x11022112, 0x11022212, 0x12002112, 0x12002211, 0x12012012, 0x12012111,
    0x12012112, 0x12012210, 0x12022011, 0x12022110, 0x12022112, 0x12022211, 0x10012122, 0x11002120,
    0x11002122, 0x11002221, 0x11012121, 0x11012220, 0x11012222, 0x11022120, 0x11022221, 0x12012120,
    0x12022121, 0x10100001, 0x10100100, 0x10100101, 0x10100102, 0x10100201, 0x10110002, 0x10110101,
    0x10110202, 0x10120001, 0x10120100, 0x10120201, 0x11100000, 0x11100101, 0x11100200, 0x11110001,
    0x11110100, 0x11110101, 0x11110102, 0x11110201, 0x11120101, 0x11120200, 0x12100102, 0x12100201,
    0x12110101, 0x12110200, 0x12120000, 0x12120001, 0x12120102, 0x12120201, 0x10100111, 0x10100210,
    0x10100211, 0x10100212, 0x10110011, 0x10110110, 0x10110111, 0x10110112, 0x10110210, 0x10110211,
    0x10120010, 0x10120111, 0x10120112, 0x10120210, 0x10120212, 0x11100011, 0x11100110, 0x11100111,
    0x11100112, 0x11100211, 0x11110010, 0x11110011, 0x11110012, 0x11110110, 0x11110111, 0x11110112,
    0x11110210, 0x11110211, 0x11110212, 0x11120011, 0x11120110, 0x11120111, 0x11120112, 0x11120211,
    0x12100012, 0x12100111, 0x12110011, 0x12110110, 0x12110111, 0x12110112, 0x12110211, 0x12120010,
    0x12120111, 0x12120212, 0x10100021, 0x10100122, 0x10110022, 0x10110121, 0x10110222, 0x10120021,
    0x10120120, 0x11100022, 0x11100121, 0x11100222, 0x11110021, 0x11110120, 0x11110121, 0x11110122,
    0x11110221, 0x11120022, 0x11120121, 0x12100121, 0x12110020, 0x12110022, 0x12110121, 0x12110221,
    0x12110222, 0x12120120, 0x10101100, 0x10101101, 0x10111001, 0x10111100, 0x10111101, 0x10111102,
    0x10111200, 0x10111201, 0x10121001, 0x10121101, 0x10121200, 0x10121202, 0x11101001, 0x11101100,
    0x11101101, 0x11101102, 0x11101201, 0x11101202, 0x11111000, 0x11111001, 0x11111100, 0x11111101,
    0x11111102, 0x11111200, 0x11111201, 0x11111202, 0x11121001, 0x11121002, 0x11121100, 0x11121101,
    0x11121102, 0x11121201, 0x12101000, 0x12101200, 0x12101202, 0x12111001, 0x12111100, 0x12111101,
    0x12111102, 0x12111201, 0x12121001, 0x12121100, 0x12121101, 0x12121202, 0x10101011, 0x10101012,
    0x10101110, 0x10101111, 0x10101112, 0x10101211, 0x10111010, 0x10111011, 0x10111012, 0x10111110,
    0x10111111, 0x10111112, 0x10111211, 0x10111212, 0x10121011, 0x10121110, 0x10121111, 0x10121112,
    0x10121211, 0x11101010, 0x11101011, 0x11101012, 0x11101110, 0x11101111, 0x11101112, 0x11101210,
    0x11101211, 0x11111010, 0x11111011, 0x11111012, 0x11111110, 0x11111111, 0x11111112, 0x11111210,
    0x11111211, 0x11111212, 0x11121010, 0x11121011, 0x11121110, 0x11121111, 0x11121112, 0x11121210,
    0x11121211, 0x11121212, 0x12101011, 0x12101110, 0x12101111, 0x12101211, 0x12101212, 0x12111010,
    0x12111011, 0x12111110, 0x12111111, 0x12111112, 0x12111210, 0x12111211, 0x12121011, 0x12121110,
    0x12121111, 0x12121112, 0x12121211, 0x10101020, 0x10101021, 0x10101022, 0x10101120, 0x10101122,
    0x10101220, 0x10101221, 0x10111021, 0x10111120, 0x10111121, 0x10111220, 0x10111221, 0x10121020,
    0x10121021, 0x10121022, 0x10121120, 0x10121121, 0x10121122, 0x10121220, 0x10121221, 0x11101021,
    0x11101121, 0x11101122, 0x11101220, 0x11101221, 0x11101222, 0x11111020, 0x11111021, 0x11111022,
    0x11111120, 0x11111121, 0x11111122, 0x11111220, 0x11111221, 0x11111222, 0x11121021, 0x11121120,
    0x11121121, 0x11121221, 0x12101022, 0x12101121, 0x12101122, 0x12101220, 0x12101221, 0x12101222,
    0x12111021, 0x12111121, 0x12111222, 0x12121022, 0x12121121, 0x12121122, 0x12121220, 0x12121221,
    0x10102100, 0x10102101, 0x10102102, 0x10102201, 0x10112000, 0x10112101, 0x10112200, 0x10122001,
    0x10122202, 0x11102101, 0x11102200, 0x11102202, 0x11112001, 0x11112100, 0x11112101, 0x11112102,
    0x11112200, 0x11112201, 0x11122000, 0x11122002, 0x11122100, 0x11122101, 0x12102002, 0x12102201,
    0x12112000, 0x12112002, 0x12112101, 0x12112200, 0x12122001, 0x12122201, 0x10102011, 0x10102012,
    0x10102111, 0x10102212, 0x10112011, 0x10112110, 0x10112111, 0x10112112, 0x10112211, 0x10122111,
    0x11102011, 0x11102110, 0x11102111, 0x11102112, 0x11102211, 0x11112010, 0x11112011, 0x11112012,
    0x11112110, 0x11112111, 0x11112112, 0x11112210, 0x11112211, 0x11112212, 0x11122011, 0x11122110,
    0x11122111, 0x11122112, 0x11122211, 0x12102011, 0x12102111, 0x12102211, 0x12112011, 0x12112110,
    0x12112111, 0x12112112, 0x12112210, 0x12112211, 0x12122111, 0x10102120, 0x10102220, 0x10112121,
    0x10112222, 0x10122020, 0x10122121, 0x10122122, 0x10122221, 0x11102121, 0x11102220, 0x11102221,
    0x11112021, 0x11112121, 0x11112122, 0x11112220, 0x11112221, 0x11122022, 0x11122121, 0x11122220,
    0x11122222, 0x12102021, 0x12102222, 0x12112022, 0x12112121, 0x12112122, 0x12112220, 0x12112222,
    0x12122021, 0x10200101, 0x10210100, 0x10210102, 0x10210201, 0x10220101, 0x11200100, 0x11210000,
    0x11210101, 0x11210102, 0x11210200, 0x11210202, 0x11220001, 0x11220100, 0x11220102, 0x11220201,
    0x12200001, 0x12210102, 0x12220101, 0x10200011, 0x10200110, 0x10200112, 0x10200211, 0x10210012,
    0x10210111, 0x10220011, 0x10220012, 0x10220112, 0x10220211, 0x11200111, 0x11200211, 0x11210011,
    0x11210111, 0x11210112, 0x11210211, 0x11220111, 0x11220112, 0x11220212, 0x12200110, 0x12200212,
    0x12210012, 0x12210111, 0x12220011, 0x12220112, 0x12220211, 0x10210021, 0x10210122, 0x10210221,
    0x11200020, 0x11200021, 0x11200122, 0x11210121, 0x11210122, 0x11210220, 0x11220020, 0x12200121,
    0x12210021, 0x12210122, 0x12220121, 0x10211001, 0x10211002, 0x10211101, 0x10211102, 0x10211202,
    0x10221001, 0x10221102, 0x10221201, 0x11201000, 0x11201002, 0x11201101, 0x11201200, 0x11201202,
    0x11211001, 0x11211100, 0x11211101, 0x11211102, 0x11211201, 0x11211202, 0x11221000, 0x11221002,
    0x11221101, 0x12201100, 0x12201101, 0x12201201, 0x12211000, 0x12211002, 0x12211100, 0x12211101,
    0x12211102, 0x12211200, 0x12211202, 0x12221001, 0x12221100, 0x12221201, 0x10201111, 0x10201210,
    0x10201212, 0x10211011, 0x10211111, 0x10211112, 0x10211211, 0x11201110, 0x11201111, 0x11201112,
    0x11201211, 0x11211010, 0x11211011, 0x11211110, 0x11211111, 0x11211112, 0x11211211, 0x11221011,
    0x11221110, 0x11221111, 0x11221112, 0x11221211, 0x12201112, 0x12201211, 0x12201212, 0x12211011,
    0x12211111, 0x12211112, 0x12211211, 0x12211212, 0x12221012, 0x12221111, 0x12221112, 0x12221210,
    0x10201022, 0x10201221, 0x10211121, 0x10221020, 0x10221122, 0x10221220, 0x10221221, 0x11201020,
    0x11201121, 0x11201220, 0x11201222, 0x11211021, 0x11211120, 0x11211121, 0x11211122, 0x11211220,
    0x11211222, 0x11221020, 0x11221121, 0x11221220, 0x12201020, 0x12201022, 0x12201121, 0x12201222,
    0x12211120, 0x12211122, 0x12211220, 0x12211221, 0x12221020, 0x12221120, 0x12221122, 0x12221222,
    0x10212102, 0x10212201, 0x10222101, 0x11202001, 0x11212002, 0x11212101, 0x11212202, 0x11222001,
    0x11222201, 0x12202101, 0x12212001, 0x12212200, 0x12222102, 0x10202011, 0x10202110, 0x10212010,
    0x10212111, 0x10222011, 0x10222110, 0x10222112, 0x10222211, 0x11202010, 0x11202011, 0x11202111,
    0x11202112, 0x11202210, 0x11212011, 0x11212110, 0x11212111, 0x11212112, 0x11212211, 0x11222010,
    0x11222111, 0x11222212, 0x12202012, 0x12202110, 0x12202212, 0x12212111, 0x12222011, 0x12222110,
    0x12222111, 0x12222211, 0x10212021, 0x10212122, 0x10212220, 0x11202021, 0x11202120, 0x11202221,
    0x11212020, 0x11212121, 0x11212220, 0x11212222, 0x11222120, 0x11222121, 0x11222221, 0x12202122,
    0x12212120, 0x12212220, 0x12212222, 0x12222122, 0x20000000, 0x20000002, 0x20000200, 0x20000202,
    0x20020000, 0x20020002, 0x20020200, 0x20020202, 0x21000101, 0x21010000, 0x21010001, 0x21010100,
    0x21010102, 0x21010201, 0x21020101, 0x22000000, 0x22000002, 0x22000200, 0x22000202, 0x22010101,
    0x22020000, 0x22020002, 0x22020200, 0x22020202, 0x20000111, 0x20010011, 0x20010110, 0x20010112,
    0x20010211, 0x20020111, 0x21000011, 0x21000110, 0x21000211, 0x21010010, 0x21010012, 0x21010111,
    0x21010112, 0x21010210, 0x21010211, 0x21020110, 0x21020112, 0x21020211, 0x22000111, 0x22000211,
    0x22010110, 0x22010112, 0x22010211, 0x22020111, 0x20000020, 0x20000022, 0x20000220, 0x20000222,
    0x20010121, 0x20020020, 0x20020022, 0x20020220, 0x20020222, 0x21010021, 0x21010120, 0x21010221,
    0x21020121, 0x22000020, 0x22000022, 0x22000220, 0x22000222, 0x22010121, 0x22020020, 0x22020022,
    0x22020220, 0x22020222, 0x20011100, 0x20011201, 0x21001001, 0x21001100, 0x21011001, 0x21011101,
    0x21011202, 0x21021001, 0x21021100, 0x21021201, 0x22011100, 0x22011201, 0x20001011, 0x20001211,
    0x20011012, 0x20011111, 0x20011212, 0x20021112, 0x20021211, 0x21001010, 0x21001011, 0x21001111,
    0x21001210, 0x21011011, 0x21011110, 0x21011111, 0x21011112, 0x21011211, 0x21011212, 0x21021111,
    0x21021112, 0x21021210, 0x21021212, 0x22001011, 0x22001110, 0x22001112, 0x22001211, 0x22011010,
    0x22011012, 0x22011111, 0x22011210, 0x22021112, 0x20011021, 0x20011122, 0x20011221, 0x20021121,
    0x21001021, 0x21001120, 0x21001221, 0x21001222, 0x21011020, 0x21011121, 0x21011221, 0x21011222,
    0x21021021, 0x21021122, 0x21021222, 0x22001121, 0x22011021, 0x22011222, 0x22021120, 0x20002000,
    0x20002002, 0x20002200, 0x20002202, 0x20012101, 0x20022000, 0x20022002, 0x20022200, 0x20022202,
    0x21002001, 0x21002101, 0x21012001, 0x21012100, 0x21012201, 0x21022101, 0x21022201, 0x22002000,
    0x22002002, 0x22002200, 0x22002202, 0x22012101, 0x22022000, 0x22022002, 0x22022200, 0x22022202,
    0x20002111, 0x20002112, 0x20012011, 0x20012110, 0x20012112, 0x20022111, 0x21002011, 0x21002110,
    0x21002112, 0x21002211, 0x21012010, 0x21012012, 0x21012111, 0x21012212, 0x21022011, 0x21022110,
    0x22002111, 0x22012112, 0x22012211, 0x22022111, 0x20002020, 0x20002022, 0x20002220, 0x20002222,
    0x20012121, 0x20022020, 0x20022022, 0x20022220, 0x20022222, 0x21002121, 0x21012021, 0x21012120,
    0x21012122, 0x22002020, 0x22002022, 0x22002220, 0x22002222, 0x22012121, 0x22022020, 0x22022022,
    0x22022220, 0x22022222, 0x20100101, 0x20110001, 0x20110102, 0x20110200, 0x20110201, 0x20120101,
    0x21100001, 0x21100102, 0x21100201, 0x21110101, 0x21110200, 0x21110202, 0x21120201, 0x21120202,
    0x22100101, 0x22110001, 0x22110100, 0x22110102, 0x22110201, 0x22120101, 0x20100011, 0x20100110,
    0x20100112, 0x20100211, 0x20110010, 0x20110111, 0x20110210, 0x20110212, 0x20120011, 0x20120110,
    0x20120112, 0x20120211, 0x21100010, 0x21100111, 0x21110010, 0x21110011, 0x21110110, 0x21110111,
    0x21110112, 0x21110211, 0x21120012, 0x21120111, 0x22100110, 0x22100112, 0x22110012, 0x22110111,
    0x22110210, 0x22120011, 0x22120110, 0x22120112, 0x22120211, 0x20100121, 0x20110021, 0x20110120,
    0x20110221, 0x20120121, 0x21100120, 0x21100122, 0x21100221, 0x21110020, 0x21110022, 0x21110121,
    0x21110220, 0x21120122, 0x21120221, 0x22100121, 0x22110120, 0x22110122, 0x22120221, 0x20101001,
    0x20101100, 0x20101102, 0x20111000, 0x20111101, 0x20111200, 0x20121102, 0x21101000, 0x21101202,
    0x21111001, 0x21111100, 0x21111101, 0x21111102, 0x21111200, 0x21111201, 0x21121000, 0x21121001,
    0x21121002, 0x21121101, 0x22101100, 0x22101102, 0x22111002, 0x22111100, 0x22111101, 0x22111200,
    0x22121001, 0x22121201, 0x20101010, 0x20101111, 0x20101210, 0x20101212, 0x20111010, 0x20111011,
    0x20111110, 0x20111111, 0x20111112, 0x20111211, 0x20121011, 0x20121111, 0x20121211, 0x20121212,
    0x21101011, 0x21101110, 0x21101111, 0x21101112, 0x21101211, 0x21111010, 0x21111011, 0x21111012,
    0x21111110, 0x21111111, 0x21111112, 0x21111210, 0x21111211, 0x21111212, 0x21121011, 0x21121110,
    0x21121111, 0x21121112, 0x21121211, 0x22101011, 0x22101111, 0x22101210, 0x22111011, 0x22111012,
    0x22111110, 0x22111111, 0x22111112, 0x22111211, 0x22111212, 0x22121010, 0x22121012, 0x22121111,
    0x22121210, 0x22121212, 0x20101021, 0x20101120, 0x20111020, 0x20111121, 0x20111221, 0x20121020,
    0x20121122, 0x20121221, 0x21101121, 0x21101220, 0x21101221, 0x21111021, 0x21111022, 0x21111121,
    0x21111122, 0x21111221, 0x21121121, 0x21121220, 0x22101022, 0x22101120, 0x22101221, 0x22101222,
    0x22111022, 0x22111120, 0x22111121, 0x22121120, 0x22121122, 0x22121221, 0x20102101, 0x20112102,
    0x20112201, 0x20122101, 0x21102001, 0x21102102, 0x21112000, 0x21112002, 0x21112101, 0x21112102,
    0x21112202, 0x21122100, 0x21122101, 0x22102101, 0x22112001, 0x22112102, 0x22112201, 0x22122101,
    0x20102110, 0x20102112, 0x20102211, 0x20112010, 0x20112012, 0x20112111, 0x20112210, 0x20112212,
    0x20122010, 0x20122011, 0x20122110, 0x20122112, 0x21102010, 0x21102012, 0x21102111, 0x21102210,
    0x21102212, 0x21112011, 0x21112110, 0x21112111, 0x21112112, 0x21112211, 0x21122012, 0x21122111,
    0x21122112, 0x21122212, 0x22102011, 0x22102110, 0x22112010, 0x22112012, 0x22112111, 0x22112212,
    0x22122011, 0x22122112, 0x20102121, 0x20112121, 0x20122121, 0x21102120, 0x21102122, 0x21102221,
    0x21112020, 0x21112121, 0x21112220, 0x21122021, 0x22102121, 0x22112021, 0x22112120, 0x22112121,
    0x22112122, 0x20200000, 0x20200002, 0x20200200, 0x20200202, 0x20210101, 0x20220000, 0x20220002,
    0x20220200, 0x20220202, 0x21200101, 0x21210001, 0x21210100, 0x21210102, 0x21210201, 0x22200000,
    0x22200002, 0x22200200, 0x22200202, 0x22210101, 0x22220000, 0x22220002, 0x22220200, 0x22220202,
    0x20200111, 0x20200211, 0x20210011, 0x20210110, 0x20210112, 0x20210211, 0x20210212, 0x21200112,
    0x21200211, 0x21210011, 0x21210111, 0x21210210, 0x21210212, 0x21220011, 0x21220110, 0x22200111,
    0x22210010, 0x22210012, 0x22210112, 0x22210211, 0x20200022, 0x20200220, 0x20200222, 0x20210020,
    0x20210221, 0x20220022, 0x20220220, 0x20220222, 0x21200121, 0x21210021, 0x21210122, 0x21210221,
    0x21220121, 0x22200020, 0x22200022, 0x22200220, 0x22200222, 0x22210121, 0x22220020, 0x22220022,
    0x22220220, 0x22220222, 0x20211201, 0x20221101, 0x21201001, 0x21201100, 0x21211000, 0x21211100,
    0x21211101, 0x21211200, 0x21211202, 0x21221001, 0x21221101, 0x21221102, 0x21221200, 0x21221201,
    0x22201101, 0x20201112, 0x20201211, 0x20211010, 0x20211012, 0x20211111, 0x20211210, 0x20221112,
    0x20221211, 0x21201012, 0x21201111, 0x21211011, 0x21211110, 0x21211111, 0x21211112, 0x21211211,
    0x21221111, 0x21221212, 0x22201011, 0x22201110, 0x22201111, 0x22201112, 0x22201211, 0x22211012,
    0x22211111, 0x22211210, 0x20201121, 0x20211021, 0x20211122, 0x20211222, 0x20221021, 0x20221121,
    0x21201120, 0x21201122, 0x21201222, 0x21211022, 0x21211121, 0x21211122, 0x21211220, 0x21221020,
    0x21221022, 0x22201122, 0x22211020, 0x22211121, 0x22211122, 0x22211221, 0x22221021, 0x22221120,
    0x22221122, 0x20202000, 0x20202002, 0x20202200, 0x20202202, 0x20222000, 0x20222002, 0x20222200,
    0x20222202, 0x21212001, 0x21212100, 0x21212102, 0x21212201, 0x22202000, 0x22202002, 0x22202200,
    0x22202202, 0x22212101, 0x22222000, 0x22222002, 0x22222200, 0x22222202, 0x20202111, 0x20212110,
    0x20212211, 0x20222011, 0x20222111, 0x21202011, 0x21212010, 0x21212111, 0x21212212, 0x21222011,
    0x21222112, 0x21222211, 0x22212010, 0x22212112, 0x20202020, 0x20202022, 0x20202220, 0x20202222,
    0x20222020, 0x20222022, 0x20222220, 0x20222222, 0x21212021, 0x21212120, 0x21212122, 0x22202020,
    0x22202022, 0x22202220, 0x22202222, 0x22212121, 0x22222020, 0x22222022, 0x22222220, 0x22222222,
GGML_TABLE_END()
#endif

#endif // GGML_COMMON_IMPL
#endif // GGML_COMMON_IMPL

#include 

using namespace metal;

#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define SWAP(x, y) { auto tmp = (x); (x) = (y); (y) = tmp; }

#define N_SIMDWIDTH 32 // assuming SIMD group size is 32

enum ggml_sort_order {
    GGML_SORT_ORDER_ASC,
    GGML_SORT_ORDER_DESC,
};

// general-purpose kernel for addition, subtraction, multiplication and division of two tensors
// pros: works for non-contiguous tensors, supports broadcast across all dims
// cons: not very efficient
kernel void kernel_add(
        device const char * src0,
        device const char * src1,
        device       char * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne10,
        constant  int64_t & ne11,
        constant  int64_t & ne12,
        constant  int64_t & ne13,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        constant  int64_t & offs,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig.z;
    const int64_t i02 = tgpig.y;
    const int64_t i01 = tgpig.x;

    const int64_t i13 = i03 % ne13;
    const int64_t i12 = i02 % ne12;
    const int64_t i11 = i01 % ne11;

    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + offs;
    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1  + offs;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int i10 = i0 % ne10;
        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) + *((device float *)(src1_ptr + i10*nb10));
    }
}

kernel void kernel_sub(
        device const char * src0,
        device const char * src1,
        device       char * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne10,
        constant  int64_t & ne11,
        constant  int64_t & ne12,
        constant  int64_t & ne13,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        constant  int64_t & offs,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig.z;
    const int64_t i02 = tgpig.y;
    const int64_t i01 = tgpig.x;

    const int64_t i13 = i03 % ne13;
    const int64_t i12 = i02 % ne12;
    const int64_t i11 = i01 % ne11;

    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + offs;
    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1  + offs;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int i10 = i0 % ne10;
        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) - *((device float *)(src1_ptr + i10*nb10));
    }
}

kernel void kernel_mul(
        device const char * src0,
        device const char * src1,
        device       char * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne10,
        constant  int64_t & ne11,
        constant  int64_t & ne12,
        constant  int64_t & ne13,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig.z;
    const int64_t i02 = tgpig.y;
    const int64_t i01 = tgpig.x;

    const int64_t i13 = i03 % ne13;
    const int64_t i12 = i02 % ne12;
    const int64_t i11 = i01 % ne11;

    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int i10 = i0 % ne10;
        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) * *((device float *)(src1_ptr + i10*nb10));
    }
}

kernel void kernel_div(
        device const char * src0,
        device const char * src1,
        device       char * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne10,
        constant  int64_t & ne11,
        constant  int64_t & ne12,
        constant  int64_t & ne13,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig.z;
    const int64_t i02 = tgpig.y;
    const int64_t i01 = tgpig.x;

    const int64_t i13 = i03 % ne13;
    const int64_t i12 = i02 % ne12;
    const int64_t i11 = i01 % ne11;

    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int i10 = i0 % ne10;
        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) / *((device float *)(src1_ptr + i10*nb10));
    }
}

template
kernel void kernel_repeat(
        device const char * src0,
        device       char * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i3 = tgpig.z;
    const int64_t i2 = tgpig.y;
    const int64_t i1 = tgpig.x;

    const int64_t i03 = i3 % ne03;
    const int64_t i02 = i2 % ne02;
    const int64_t i01 = i1 % ne01;

    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
    device       char * dst_ptr  = dst  +  i3*nb3  +  i2*nb2  +  i1*nb1 ;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int i00 = i0 % ne00;
        *((device T *)(dst_ptr + i0*nb0)) = *((device T *)(src0_ptr + i00*nb00));
    }
}

typedef decltype(kernel_repeat) kernel_repeat_t;

template [[host_name("kernel_repeat_f32")]] kernel kernel_repeat_t kernel_repeat;
template [[host_name("kernel_repeat_f16")]] kernel kernel_repeat_t kernel_repeat;
template [[host_name("kernel_repeat_i32")]] kernel kernel_repeat_t kernel_repeat;
template [[host_name("kernel_repeat_i16")]] kernel kernel_repeat_t kernel_repeat;

// assumption: src1 is a row
// broadcast src1 into src0
kernel void kernel_add_row(
        device const float4 * src0,
        device const float4 * src1,
        device       float4 * dst,
        constant   uint64_t & nb [[buffer(28)]],
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] + src1[tpig % nb];
}

kernel void kernel_sub_row(
        device const float4 * src0,
        device const float4 * src1,
        device       float4 * dst,
        constant   uint64_t & nb [[buffer(28)]],
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] - src1[tpig % nb];
}

kernel void kernel_mul_row(
        device const float4 * src0,
        device const float4 * src1,
        device       float4 * dst,
        constant   uint64_t & nb  [[buffer(28)]],
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] * src1[tpig % nb];
}

kernel void kernel_div_row(
        device const float4 * src0,
        device const float4 * src1,
        device       float4 * dst,
        constant   uint64_t & nb  [[buffer(28)]],
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] / src1[tpig % nb];
}

kernel void kernel_scale(
        device const float * src0,
        device       float * dst,
        constant     float & scale,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] * scale;
}

kernel void kernel_scale_4(
        device const float4 * src0,
        device       float4 * dst,
        constant     float  & scale,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] * scale;
}

kernel void kernel_clamp(
        device const float * src0,
        device       float * dst,
        constant     float & min,
        constant     float & max,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] < min ? min : (src0[tpig] > max ? max : src0[tpig]);
}

kernel void kernel_relu(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = max(0.0f, src0[tpig]);
}

kernel void kernel_sigmoid(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = 1.0f / (1.0f + exp(-src0[tpig]));
}

kernel void kernel_tanh(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    device const float & x = src0[tpig];
    dst[tpig] = precise::tanh(x);
}

constant float GELU_COEF_A     = 0.044715f;
constant float GELU_QUICK_COEF = -1.702f;
constant float SQRT_2_OVER_PI  = 0.79788456080286535587989211986876f;

kernel void kernel_gelu(
    device const float * src0,
    device       float * dst,
    uint tpig[[thread_position_in_grid]]) {
    device const float & x = src0[tpig];

    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
}

kernel void kernel_gelu_4(
    device const float4 * src0,
    device       float4 * dst,
    uint tpig[[thread_position_in_grid]]) {
    device const float4 & x = src0[tpig];

    // BEWARE !!!
    // Simply using "tanh" instead of "precise::tanh" will sometimes results in NaNs!
    // This was observed with Falcon 7B and 40B models
    //
    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
}

kernel void kernel_gelu_quick(
    device const float * src0,
    device       float * dst,
    uint tpig[[thread_position_in_grid]]) {
    device const float & x = src0[tpig];

    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
}

kernel void kernel_gelu_quick_4(
    device const float4 * src0,
    device       float4 * dst,
    uint tpig[[thread_position_in_grid]]) {
    device const float4 & x = src0[tpig];

    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
}

kernel void kernel_silu(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    device const float & x = src0[tpig];
    dst[tpig] = x / (1.0f + exp(-x));
}

kernel void kernel_silu_4(
        device const float4 * src0,
        device       float4 * dst,
        uint tpig[[thread_position_in_grid]]) {
    device const float4 & x = src0[tpig];
    dst[tpig] = x / (1.0f + exp(-x));
}

kernel void kernel_sqr(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] * src0[tpig];
}

kernel void kernel_sqrt(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = sqrt(src0[tpig]);
}

kernel void kernel_sin(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = sin(src0[tpig]);
}

kernel void kernel_cos(
        device const float * src0,
        device       float * dst,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = cos(src0[tpig]);
}

kernel void kernel_sum_rows(
        device const float * src0,
        device       float * dst,
        constant  int64_t & ne00,
        constant  int64_t & ne01,
        constant  int64_t & ne02,
        constant  int64_t & ne03,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb03,
        constant  int64_t & ne10,
        constant  int64_t & ne11,
        constant  int64_t & ne12,
        constant  int64_t & ne13,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant  int64_t & ne0,
        constant  int64_t & ne1,
        constant  int64_t & ne2,
        constant  int64_t & ne3,
        constant uint64_t & nb0,
        constant uint64_t & nb1,
        constant uint64_t & nb2,
        constant uint64_t & nb3,
        uint3 tpig[[thread_position_in_grid]]) {
    int64_t i3 = tpig.z;
    int64_t i2 = tpig.y;
    int64_t i1 = tpig.x;

    if (i3 >= ne03 || i2 >= ne02 || i1 >= ne01) {
        return;
    }

    device const float * src_row = (device const float *) ((device const char *) src0 + i1*nb01 + i2*nb02 + i3*nb03);
    device       float * dst_row = (device       float *) ((device       char *) dst  + i1*nb1  + i2*nb2  + i3*nb3);

    float row_sum = 0;

    for (int64_t i0 = 0; i0 < ne00; i0++) {
        row_sum += src_row[i0];
    }

    dst_row[0] = row_sum;
}

template
kernel void kernel_soft_max(
        device const  char * src0,
        device const  char * src1,
        device        char * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant     float & scale,
        constant     float & max_bias,
        constant     float & m0,
        constant     float & m1,
        constant  uint32_t & n_head_log2,
        threadgroup  float * buf [[threadgroup(0)]],
        uint  tgpig[[threadgroup_position_in_grid]],
        uint  tpitg[[thread_position_in_threadgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint    ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = (tgpig) / (ne02*ne01);
    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);

    device const float * psrc0 = (device const float *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);
    device const     T * pmask = src1 != src0 ? (device const    T *) src1         + i01*ne00 : nullptr;
    device       float * pdst  = (device       float *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);

    float slope = 1.0f;

    // ALiBi
    if (max_bias > 0.0f) {
        const int64_t h = i02;

        const float base = h < n_head_log2 ? m0 : m1;
        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;

        slope = pow(base, exp);
    }

    // parallel max
    float lmax = -INFINITY;

    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        lmax = MAX(lmax, psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f));
    }

    // find the max value in the block
    float max_val = simd_max(lmax);
    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = -INFINITY;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = max_val;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        max_val = buf[tiisg];
        max_val = simd_max(max_val);
    }

    // parallel sum
    float lsum = 0.0f;
    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        const float exp_psrc0 = exp((psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f)) - max_val);
        lsum += exp_psrc0;
        pdst[i00] = exp_psrc0;
    }

    // This barrier fixes a failing test
    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
    threadgroup_barrier(mem_flags::mem_none);

    float sum = simd_sum(lsum);

    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = 0.0f;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = sum;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        sum = buf[tiisg];
        sum = simd_sum(sum);
    }

    const float inv_sum = 1.0f/sum;

    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        pdst[i00] *= inv_sum;
    }
}

template
kernel void kernel_soft_max_4(
        device const  char * src0,
        device const  char * src1,
        device        char * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant     float & scale,
        constant     float & max_bias,
        constant     float & m0,
        constant     float & m1,
        constant  uint32_t & n_head_log2,
        threadgroup  float * buf [[threadgroup(0)]],
        uint  tgpig[[threadgroup_position_in_grid]],
        uint  tpitg[[thread_position_in_threadgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint    ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = (tgpig) / (ne02*ne01);
    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);

    device const float4 * psrc4 = (device const float4 *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;
    device const      T * pmask = src1 != src0 ? (device const     T *) src1         + i01*ne00/4 : nullptr;
    device       float4 * pdst4 = (device       float4 *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;

    float slope = 1.0f;

    if (max_bias > 0.0f) {
        const int64_t h = i02;

        const float base = h < n_head_log2 ? m0 : m1;
        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;

        slope = pow(base, exp);
    }

    // parallel max
    float4 lmax4 = -INFINITY;

    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
        lmax4 = fmax(lmax4, psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f)));
    }

    const float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3]));

    float max_val = simd_max(lmax);
    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = -INFINITY;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = max_val;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        max_val = buf[tiisg];
        max_val = simd_max(max_val);
    }

    // parallel sum
    float4 lsum4 = 0.0f;
    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
        const float4 exp_psrc4 = exp((psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f))) - max_val);
        lsum4 += exp_psrc4;
        pdst4[i00] = exp_psrc4;
    }

    const float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3];

    // This barrier fixes a failing test
    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
    threadgroup_barrier(mem_flags::mem_none);

    float sum = simd_sum(lsum);

    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = 0.0f;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = sum;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        sum = buf[tiisg];
        sum = simd_sum(sum);
    }

    const float inv_sum = 1.0f/sum;

    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
        pdst4[i00] *= inv_sum;
    }
}

typedef decltype(kernel_soft_max)    kernel_soft_max_t;
typedef decltype(kernel_soft_max_4) kernel_soft_max_4_t;

template [[host_name("kernel_soft_max_f16")]]   kernel kernel_soft_max_t   kernel_soft_max;
template [[host_name("kernel_soft_max_f32")]]   kernel kernel_soft_max_t   kernel_soft_max;
template [[host_name("kernel_soft_max_f16_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4;
template [[host_name("kernel_soft_max_f32_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4;

kernel void kernel_diag_mask_inf(
        device const float * src0,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant       int & n_past,
        uint3 tpig[[thread_position_in_grid]]) {
    const int64_t i02 = tpig[2];
    const int64_t i01 = tpig[1];
    const int64_t i00 = tpig[0];

    if (i00 > n_past + i01) {
        dst[i02*ne01*ne00 + i01*ne00 + i00] = -INFINITY;
    } else {
        dst[i02*ne01*ne00 + i01*ne00 + i00] = src0[i02*ne01*ne00 + i01*ne00 + i00];
    }
}

kernel void kernel_diag_mask_inf_8(
        device const float4 * src0,
        device       float4 * dst,
        constant    int64_t & ne00,
        constant    int64_t & ne01,
        constant        int & n_past,
        uint3 tpig[[thread_position_in_grid]]) {

    const int64_t i = 2*tpig[0];

    dst[i+0] = src0[i+0];
    dst[i+1] = src0[i+1];
    int64_t i4 = 4*i;
    const int64_t i02 = i4/(ne00*ne01); i4 -= i02*ne00*ne01;
    const int64_t i01 = i4/(ne00);      i4 -= i01*ne00;
    const int64_t i00 = i4;
    for (int k = 3; k >= 0; --k) {
        if (i00 + 4 + k <= n_past + i01) {
            break;
        }
        dst[i+1][k] = -INFINITY;
        if (i00 + k > n_past + i01) {
            dst[i][k] = -INFINITY;
        }
    }
}

// ref: ggml.c:ggml_compute_forward_ssm_conv_f32
// TODO: optimize
kernel void kernel_ssm_conv_f32(
        device const  void * src0,
        device const  void * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t ir = tgpig.x;
    const int64_t i2 = tgpig.y;
    const int64_t i3 = tgpig.z;

    const int64_t nc  = ne10;
    const int64_t ncs = ne00;
    const int64_t nr  = ne01;
    const int64_t n_t = ne1;
    const int64_t n_s = ne2;

    device const float * s = (device const float *) ((device const char *) src0 + ir*nb01 + i2*nb00 + i3*nb02);
    device const float * c = (device const float *) ((device const char *) src1 + ir*nb11);
    device       float * x = (device       float *) ((device       char *) dst  + ir*nb0  + i2*nb1  + i3*nb2);

    float sumf = 0.0f;

    for (int64_t i0 = 0; i0 < nc; ++i0) {
        sumf += s[i0] * c[i0];
    }

    x[0] = sumf;
}

// ref: ggml.c:ggml_compute_forward_ssm_scan_f32
// TODO: optimize
kernel void kernel_ssm_scan_f32(
        device const void * src0,
        device const void * src1,
        device const void * src2,
        device const void * src3,
        device const void * src4,
        device const void * src5,
        device      float * dst,
        constant  int64_t & d_state,
        constant  int64_t & d_inner,
        constant  int64_t & n_seq_tokens,
        constant  int64_t & n_seqs,
        constant uint64_t & nb00,
        constant uint64_t & nb01,
        constant uint64_t & nb02,
        constant uint64_t & nb10,
        constant uint64_t & nb11,
        constant uint64_t & nb12,
        constant uint64_t & nb13,
        constant uint64_t & nb20,
        constant uint64_t & nb21,
        constant uint64_t & nb22,
        constant uint64_t & nb30,
        constant uint64_t & nb31,
        constant uint64_t & nb40,
        constant uint64_t & nb41,
        constant uint64_t & nb42,
        constant uint64_t & nb50,
        constant uint64_t & nb51,
        constant uint64_t & nb52,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t ir = tgpig.x;
    const int64_t i3 = tgpig.y;

    const int64_t nc  = d_state;
    const int64_t nr  = d_inner;
    const int64_t n_t = n_seq_tokens;
    const int64_t n_s = n_seqs;

    for (int64_t i2 = 0; i2 < n_t; ++i2) {
        device const float * s0 = (device const float *) ((device const char *) src0 + ir*nb01 + i3*nb02);
        device const float * x  = (device const float *) ((device const char *) src1 + ir*nb10 + i2*nb11 + i3*nb12);
        device const float * dt = (device const float *) ((device const char *) src2 + ir*nb20 + i2*nb21 + i3*nb22);
        device const float * A  = (device const float *) ((device const char *) src3 + ir*nb31);
        device const float * B  = (device const float *) ((device const char *) src4 + i2*nb41 + i3*nb42);
        device const float * C  = (device const float *) ((device const char *) src5 + i2*nb51 + i3*nb52);
        device       float * y  = (device       float *) ((device       char *) dst  + ir*nb10 + i2*nb11 + i3*nb12); // TODO: do not use src1 strides
        device       float * s  = (device       float *) ((device       char *) dst  + ir*nb01 + i3*nb02 +    nb13);

        if (i2 > 0) {
            s0 = s;
        }

        // i1 == 0
        float dt_soft_plus = dt[0] <= 20.0f ? log(1.0f + exp(dt[0])) : dt[0];
        float x_dt = x[0] * dt_soft_plus;
        float sumf = 0.0f;

        for (int64_t i0 = 0; i0 < nc; ++i0) {
            int64_t i = i0;
            float state = (s0[i] * exp(dt_soft_plus * A[i])) + (B[i0] * x_dt);
            sumf += state * C[i0];
            s[i] = state;
        }

        y[0] = sumf;
    }
}

kernel void kernel_norm(
        device const  void * src0,
        device       float * dst,
        constant   int64_t & ne00,
        constant  uint64_t & nb01,
        constant     float & eps,
        threadgroup float  * sum [[threadgroup(0)]],
        uint tgpig[[threadgroup_position_in_grid]],
        uint tpitg[[thread_position_in_threadgroup]],
        uint   ntg[[threads_per_threadgroup]]) {
    device const float * x = (device const float *) ((device const char *) src0 + tgpig*nb01);
    // MEAN
    // parallel sum
    sum[tpitg] = 0.0f;
    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        sum[tpitg] += x[i00];
    }
    // reduce
    threadgroup_barrier(mem_flags::mem_threadgroup);
    for (uint i = ntg/2; i > 0; i /= 2) {
        if (tpitg < i) {
            sum[tpitg] += sum[tpitg + i];
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }
    const float mean  = sum[0] / ne00;

    // recenter and VARIANCE
    threadgroup_barrier(mem_flags::mem_threadgroup);
    device float * y = dst + tgpig*ne00;
    sum[tpitg] = 0.0f;
    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        y[i00] = x[i00] - mean;
        sum[tpitg] += y[i00] * y[i00];
    }

    // reduce
    threadgroup_barrier(mem_flags::mem_threadgroup);
    for (uint i = ntg/2; i > 0; i /= 2) {
        if (tpitg < i) {
            sum[tpitg] += sum[tpitg + i];
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }
    const float variance = sum[0] / ne00;

    const float scale = 1.0f/sqrt(variance + eps);
    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
        y[i00] = y[i00] * scale;
    }
}

kernel void kernel_rms_norm(
        device const  void * src0,
        device       float * dst,
        constant   int64_t & ne00,
        constant  uint64_t & nb01,
        constant     float & eps,
        threadgroup float  * buf [[threadgroup(0)]],
        uint tgpig[[threadgroup_position_in_grid]],
        uint tpitg[[thread_position_in_threadgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint   ntg[[threads_per_threadgroup]]) {
    device const float4 * x = (device const float4 *) ((device const char *) src0 + tgpig*nb01);

    float4 sumf = 0;
    float all_sum = 0;

    // parallel sum
    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
        sumf += x[i00] * x[i00];
    }
    all_sum = sumf[0] + sumf[1] + sumf[2] + sumf[3];
    all_sum = simd_sum(all_sum);
    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = 0.0f;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = all_sum;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        all_sum = buf[tiisg];
        all_sum = simd_sum(all_sum);
    }

    const float mean  = all_sum/ne00;
    const float scale = 1.0f/sqrt(mean + eps);

    device float4 * y = (device float4 *) (dst + tgpig*ne00);
    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
        y[i00] = x[i00] * scale;
    }
}

kernel void kernel_group_norm(
        device const float * src0,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int32_t & n_groups,
        constant     float & eps,
        threadgroup float  * buf [[threadgroup(0)]],
        uint tgpig[[threadgroup_position_in_grid]],
        uint tpitg[[thread_position_in_threadgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint   ntg[[threads_per_threadgroup]]) {
    const int64_t ne = ne00*ne01*ne02;
    const int64_t gs = ne00*ne01*((ne02 + n_groups - 1) / n_groups);

    int start = tgpig * gs;
    int end   = start + gs;

    start += tpitg;

    if (end >= ne) {
        end = ne;
    }

    float tmp = 0.0f; // partial sum for thread in warp

    for (int j = start; j < end; j += ntg) {
        tmp += src0[j];
    }

    threadgroup_barrier(mem_flags::mem_threadgroup);
    tmp = simd_sum(tmp);
    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = 0.0f;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = tmp;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        tmp = buf[tiisg];
        tmp = simd_sum(tmp);
    }

    const float mean = tmp / gs;
    tmp = 0.0f;

    for (int j = start; j < end; j += ntg) {
        float xi = src0[j] - mean;
        dst[j] = xi;
        tmp += xi * xi;
    }

    tmp = simd_sum(tmp);
    if (ntg > N_SIMDWIDTH) {
        if (sgitg == 0) {
            buf[tiisg] = 0.0f;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        if (tiisg == 0) {
            buf[sgitg] = tmp;
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        tmp = buf[tiisg];
        tmp = simd_sum(tmp);
    }

    const float variance = tmp / gs;
    const float scale = 1.0f/sqrt(variance + eps);
    for (int j = start; j < end; j += ntg) {
        dst[j] *= scale;
    }
}

// function for calculate inner product between half a q4_0 block and 16 floats (yl), sumy is SUM(yl[i])
// il indicates where the q4 quants begin (0 or QK4_0/4)
// we assume that the yl's have been multiplied with the appropriate scale factor
// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
inline float block_q_n_dot_y(device const block_q4_0 * qb_curr, float sumy, thread float * yl, int il) {
    float d = qb_curr->d;

    float2 acc = 0.f;

    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 1 + il/2);

    for (int i = 0; i < 8; i+=2) {
        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
                + yl[i + 1] * (qs[i / 2] & 0x0F00);
        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
                + yl[i + 9] * (qs[i / 2] & 0xF000);
    }
    return d * (sumy * -8.f + acc[0] + acc[1]);
}

// function for calculate inner product between half a q4_1 block and 16 floats (yl), sumy is SUM(yl[i])
// il indicates where the q4 quants begin (0 or QK4_0/4)
// we assume that the yl's have been multiplied with the appropriate scale factor
// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
inline float block_q_n_dot_y(device const block_q4_1 * qb_curr, float sumy, thread float * yl, int il) {
    float d = qb_curr->d;
    float m = qb_curr->m;

    float2 acc = 0.f;

    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 2 + il/2);

    for (int i = 0; i < 8; i+=2) {
        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
                + yl[i + 1] * (qs[i / 2] & 0x0F00);
        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
                + yl[i + 9] * (qs[i / 2] & 0xF000);
    }
    return d * (acc[0] + acc[1]) + sumy * m;
}

// function for calculate inner product between half a q5_0 block and 16 floats (yl), sumy is SUM(yl[i])
// il indicates where the q5 quants begin (0 or QK5_0/4)
// we assume that the yl's have been multiplied with the appropriate scale factor
// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
inline float block_q_n_dot_y(device const block_q5_0 * qb_curr, float sumy, thread float * yl, int il) {
    float d = qb_curr->d;

    float2 acc = 0.f;

    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 3 + il/2);
           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);

    for (int i = 0; i < 8; i+=2) {
        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
    }
    return d * (sumy * -16.f + acc[0] + acc[1]);
}

// function for calculate inner product between half a q5_1 block and 16 floats (yl), sumy is SUM(yl[i])
// il indicates where the q5 quants begin (0 or QK5_1/4)
// we assume that the yl's have been multiplied with the appropriate scale factor
// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
inline float block_q_n_dot_y(device const block_q5_1 * qb_curr, float sumy, thread float * yl, int il) {
    float d = qb_curr->d;
    float m = qb_curr->m;

    float2 acc = 0.f;

    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 4 + il/2);
           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);

    for (int i = 0; i < 8; i+=2) {
        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
    }
    return d * (acc[0] + acc[1]) + sumy * m;
}

// putting them in the kernel cause a significant performance penalty
#define N_DST 4        // each SIMD group works on 4 rows
#define N_SIMDGROUP 2  // number of SIMD groups in a thread group
//Note: This is a template, but strictly speaking it only applies to
//      quantizations where the block size is 32. It also does not
//      guard against the number of rows not being divisible by
//      N_DST, so this is another explicit assumption of the implementation.
template
void mul_vec_q_n_f32_impl(
        device const void  * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3 tgpig, uint tiisg, uint sgitg) {
    const int nb = ne00/QK4_0;

    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * nsg + sgitg) * nr;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q_type * x = (device const block_q_type *) src0 + offset0;
    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[16]; // src1 vector cache
    float sumf[nr] = {0.f};

    const int ix = (tiisg/2);
    const int il = (tiisg%2)*8;

    device const float * yb = y + ix * QK4_0 + il;

    // each thread in a SIMD group deals with half a block.
    for (int ib = ix; ib < nb; ib += nw/2) {
        float sumy = 0;
        for (int i = 0; i < 8; i += 2) {
            sumy += yb[i] + yb[i+1];
            yl[i+0] = yb[i+ 0];
            yl[i+1] = yb[i+ 1]/256.f;

            sumy += yb[i+16] + yb[i+17];
            yl[i+8] = yb[i+16]/16.f;
            yl[i+9] = yb[i+17]/4096.f;
        }

        for (int row = 0; row < nr; row++) {
            sumf[row] += block_q_n_dot_y(x+ib+row*nb, sumy, yl, il);
        }

        yb += QK4_0 * 16;
    }

    for (int row = 0; row < nr; ++row) {
        const float tot = simd_sum(sumf[row]);
        if (tiisg == 0 && first_row + row < ne01) {
            dst[im*ne0*ne1 + r1*ne0 + first_row + row] = tot;
        }
    }
}

kernel void kernel_mul_mv_q4_0_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
    mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
}

kernel void kernel_mul_mv_q4_1_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]]) {
     mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
}

kernel void kernel_mul_mv_q5_0_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
    mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
}

kernel void kernel_mul_mv_q5_1_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
    mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
}


#define NB_Q8_0 8

void kernel_mul_mv_q8_0_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {
    const int nr  = N_DST;
    const int nsg = N_SIMDGROUP;
    const int nw  = N_SIMDWIDTH;

    const int nb = ne00/QK8_0;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * nsg + sgitg) * nr;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0;
    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[NB_Q8_0];
    float sumf[nr]={0.f};

    const int ix = tiisg/4;
    const int il = tiisg%4;

    device const float * yb = y + ix * QK8_0 + NB_Q8_0*il;

    // each thread in a SIMD group deals with NB_Q8_0 quants at a time
    for (int ib = ix; ib < nb; ib += nw/4) {
        for (int i = 0; i < NB_Q8_0; ++i) {
            yl[i] = yb[i];
        }

        for (int row = 0; row < nr; row++) {
            device const int8_t * qs = x[ib+row*nb].qs + NB_Q8_0*il;
            float sumq = 0.f;
            for (int iq = 0; iq < NB_Q8_0; ++iq) {
                sumq += qs[iq] * yl[iq];
            }
            sumf[row] += sumq*x[ib+row*nb].d;
        }

        yb += NB_Q8_0 * nw;
    }

    for (int row = 0; row < nr; ++row) {
        const float tot = simd_sum(sumf[row]);
        if (tiisg == 0 && first_row + row < ne01) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
        }
    }
}

[[host_name("kernel_mul_mv_q8_0_f32")]]
kernel void kernel_mul_mv_q8_0_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
    kernel_mul_mv_q8_0_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
}

#define N_MV_T_T 4

template
void kernel_mul_mv_impl(
        device const  char * src0,
        device const  char * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                  uint64_t   nb00,
                  uint64_t   nb01,
                  uint64_t   nb02,
                   int64_t   ne10,
                   int64_t   ne11,
                   int64_t   ne12,
                  uint64_t   nb10,
                  uint64_t   nb11,
                  uint64_t   nb12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
                   uint3     tgpig,
                   uint      tiisg) {
    const int64_t r0 = tgpig.x;
    const int64_t rb = tgpig.y*N_MV_T_T;
    const int64_t im = tgpig.z;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;

    device const T0 * x = (device const T0 *) (src0 + offset0);

    if (ne00 < 128) {
        for (int row = 0; row < N_MV_T_T; ++row) {
            int r1 = rb + row;
            if (r1 >= ne11) {
                break;
            }

            device const T1 * y = (device const T1 *) (src1 + r1*nb11 + im*nb12);

            float sumf = 0;
            for (int i = tiisg; i < ne00; i += 32) {
                sumf += (T0) x[i] * (T1) y[i];
            }

            float all_sum = simd_sum(sumf);
            if (tiisg == 0) {
                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
            }
        }
    } else {
        device const T04 * x4 = (device const T04 *) x;
        for (int row = 0; row < N_MV_T_T; ++row) {
            int r1 = rb + row;
            if (r1 >= ne11) {
                break;
            }

            device const T1  * y  = (device const T1  *) (src1 + r1*nb11 + im*nb12);
            device const T14 * y4 = (device const T14 *) y;

            float sumf = 0;
            for (int i = tiisg; i < ne00/4; i += 32) {
                for (int k = 0; k < 4; ++k) sumf += (float) (x4[i][k] * y4[i][k]);
            }

            float all_sum = simd_sum(sumf);
            if (tiisg == 0) {
                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) (x[i] * y[i]);
                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
            }
        }
    }
}

template
kernel void kernel_mul_mv(
        device const  char * src0,
        device const  char * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]]) {
    kernel_mul_mv_impl(
        src0,
        src1,
        dst,
        ne00,
        ne01,
        ne02,
        nb00,
        nb01,
        nb02,
        ne10,
        ne11,
        ne12,
        nb10,
        nb11,
        nb12,
        ne0,
        ne1,
        r2,
        r3,
        tgpig,
        tiisg);
}

typedef decltype(kernel_mul_mv) mul_mv_t;

template [[host_name("kernel_mul_mv_f32_f32")]]   kernel mul_mv_t kernel_mul_mv;
template [[host_name("kernel_mul_mv_f16_f32")]]   kernel mul_mv_t kernel_mul_mv;
template [[host_name("kernel_mul_mv_f16_f16")]]   kernel mul_mv_t kernel_mul_mv;

template
kernel void kernel_mul_mv_1row(
        device const  char * src0,
        device const  char * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]]) {

    const int64_t r0 = tgpig.x;
    const int64_t r1 = tgpig.y;
    const int64_t im = tgpig.z;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;

    device const T     * x = (device const T     *) (src0 + offset0);
    device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);

    float sumf = 0;
    if (ne00 < 128) {
        for (int i = tiisg; i < ne00; i += 32) {
            sumf += (float) x[i] * (float) y[i];
        }
        float all_sum = simd_sum(sumf);
        if (tiisg == 0) {
            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
        }
    } else {
        device const T4     * x4 = (device const T4     *) x;
        device const float4 * y4 = (device const float4 *) y;

        for (int i = tiisg; i < ne00/4; i += 32) {
            for (int k = 0; k < 4; ++k) sumf += (float) (x4[i][k] * y4[i][k]);
        }

        float all_sum = simd_sum(sumf);

        if (tiisg == 0) {
            for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) (x[i] * y[i]);
            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
        }
    }
}

typedef decltype(kernel_mul_mv_1row) mul_mv_1row_t;

template [[host_name("kernel_mul_mv_f16_f32_1row")]]  kernel mul_mv_1row_t kernel_mul_mv_1row;

// Assumes row size (ne00) is a multiple of 4
template
kernel void kernel_mul_mv_l4(
        device const  char * src0,
        device const  char * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint tiisg[[thread_index_in_simdgroup]]) {

    const int nrows = ne11;
    const int64_t r0 = tgpig.x;
    const int64_t im = tgpig.z;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;

    device const T4 * x4 = (device const T4 *) (src0 + offset0);

    for (int r1 = 0; r1 < nrows; ++r1) {
        device const float4 * y4 = (device const float4 *) (src1 + r1*nb11 + im*nb12);

        float sumf = 0;
        for (int i = tiisg; i < ne00/4; i += 32) {
            for (int k = 0; k < 4; ++k) sumf += (float) (x4[i][k] * y4[i][k]);
        }

        float all_sum = simd_sum(sumf);
        if (tiisg == 0) {
            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
        }
    }
}

typedef decltype(kernel_mul_mv_l4) mul_mv_l4_t;

template [[host_name("kernel_mul_mv_f16_f32_l4")]]  kernel mul_mv_l4_t kernel_mul_mv_l4;

static float rope_yarn_ramp(const float low, const float high, const int i0) {
    const float y = (i0 / 2 - low) / max(0.001f, high - low);
    return 1.0f - min(1.0f, max(0.0f, y));
}

// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
static void rope_yarn(
    float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale,
    thread float * cos_theta, thread float * sin_theta) {
    // Get n-d rotational scaling corrected for extrapolation
    float theta_interp = freq_scale * theta_extrap;
    float theta = theta_interp;
    if (ext_factor != 0.0f) {
        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;

        // Get n-d magnitude scaling corrected for interpolation
        mscale *= 1.0f + 0.1f * log(1.0f / freq_scale);
    }
    *cos_theta = cos(theta) * mscale;
    *sin_theta = sin(theta) * mscale;
}

// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
static float rope_yarn_corr_factor(int n_dims, int n_ctx_orig, float n_rot, float base) {
    return n_dims * log(n_ctx_orig / (n_rot * 2 * M_PI_F)) / (2 * log(base));
}

static void rope_yarn_corr_dims(
    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]
) {
    // start and end correction dims
    dims[0] = max(0.0f,         floor(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_fast, freq_base)));
    dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_slow, freq_base)));
}

template
kernel void kernel_rope_norm(
        device const    void * src0,
        device const int32_t * src1,
        device const   float * src2,
        device         float * dst,
        constant     int64_t & ne00,
        constant     int64_t & ne01,
        constant     int64_t & ne02,
        constant     int64_t & ne03,
        constant    uint64_t & nb00,
        constant    uint64_t & nb01,
        constant    uint64_t & nb02,
        constant    uint64_t & nb03,
        constant     int64_t & ne0,
        constant     int64_t & ne1,
        constant     int64_t & ne2,
        constant     int64_t & ne3,
        constant    uint64_t & nb0,
        constant    uint64_t & nb1,
        constant    uint64_t & nb2,
        constant    uint64_t & nb3,
        constant         int & n_past,
        constant         int & n_dims,
        constant         int & n_ctx_orig,
        constant       float & freq_base,
        constant       float & freq_scale,
        constant       float & ext_factor,
        constant       float & attn_factor,
        constant       float & beta_fast,
        constant       float & beta_slow,
        uint  tiitg[[thread_index_in_threadgroup]],
        uint3 tptg[[threads_per_threadgroup]],
        uint3 tgpig[[threadgroup_position_in_grid]]) {
    const int64_t i3 = tgpig[2];
    const int64_t i2 = tgpig[1];
    const int64_t i1 = tgpig[0];

    float corr_dims[2];
    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);

    device const int32_t * pos = src1;

    const float theta_base = (float) pos[i2];
    const float inv_ndims = -1.f/n_dims;

    float cos_theta;
    float sin_theta;

    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
        if (i0 < n_dims) {
            const int64_t ic = i0/2;

            const float theta = theta_base * pow(freq_base, inv_ndims*i0);

            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;

            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);

            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);

            const float x0 = src[0];
            const float x1 = src[1];

            dst_data[0] = x0*cos_theta - x1*sin_theta;
            dst_data[1] = x0*sin_theta + x1*cos_theta;
        } else {
            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);

            dst_data[0] = src[0];
            dst_data[1] = src[1];
        }
    }
}

template
kernel void kernel_rope_neox(
        device const    void * src0,
        device const int32_t * src1,
        device const   float * src2,
        device         float * dst,
        constant     int64_t & ne00,
        constant     int64_t & ne01,
        constant     int64_t & ne02,
        constant     int64_t & ne03,
        constant    uint64_t & nb00,
        constant    uint64_t & nb01,
        constant    uint64_t & nb02,
        constant    uint64_t & nb03,
        constant     int64_t & ne0,
        constant     int64_t & ne1,
        constant     int64_t & ne2,
        constant     int64_t & ne3,
        constant    uint64_t & nb0,
        constant    uint64_t & nb1,
        constant    uint64_t & nb2,
        constant    uint64_t & nb3,
        constant         int & n_past,
        constant         int & n_dims,
        constant         int & n_ctx_orig,
        constant       float & freq_base,
        constant       float & freq_scale,
        constant       float & ext_factor,
        constant       float & attn_factor,
        constant       float & beta_fast,
        constant       float & beta_slow,
        uint  tiitg[[thread_index_in_threadgroup]],
        uint3 tptg[[threads_per_threadgroup]],
        uint3 tgpig[[threadgroup_position_in_grid]]) {
    const int64_t i3 = tgpig[2];
    const int64_t i2 = tgpig[1];
    const int64_t i1 = tgpig[0];

    float corr_dims[2];
    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);

    device const int32_t * pos = src1;

    const float theta_base = (float) pos[i2];
    const float inv_ndims = -1.f/n_dims;

    float cos_theta;
    float sin_theta;

    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
        if (i0 < n_dims) {
            const int64_t ic = i0/2;

            const float theta = theta_base * pow(freq_base, inv_ndims*i0);

            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;

            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);

            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);

            const float x0 = src[0];
            const float x1 = src[n_dims/2];

            dst_data[0]        = x0*cos_theta - x1*sin_theta;
            dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta;
        } else {
            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);

            dst_data[0] = src[0];
            dst_data[1] = src[1];
        }
    }
}

typedef decltype(kernel_rope_norm) kernel_rope_norm_t;
typedef decltype(kernel_rope_neox) kernel_rope_neox_t;

template [[host_name("kernel_rope_norm_f32")]] kernel kernel_rope_norm_t kernel_rope_norm;
template [[host_name("kernel_rope_norm_f16")]] kernel kernel_rope_norm_t kernel_rope_norm;

template [[host_name("kernel_rope_neox_f32")]] kernel kernel_rope_neox_t kernel_rope_neox;
template [[host_name("kernel_rope_neox_f16")]] kernel kernel_rope_neox_t kernel_rope_neox;

typedef void (im2col_t)(
        device const float * x,
        device        char * dst,
        constant   int32_t & ofs0,
        constant   int32_t & ofs1,
        constant   int32_t & IW,
        constant   int32_t & IH,
        constant   int32_t & CHW,
        constant   int32_t & s0,
        constant   int32_t & s1,
        constant   int32_t & p0,
        constant   int32_t & p1,
        constant   int32_t & d0,
        constant   int32_t & d1,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3  tgpg[[threadgroups_per_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]);

template 
kernel void kernel_im2col(
        device const float * x,
        device        char * dst,
        constant   int32_t & ofs0,
        constant   int32_t & ofs1,
        constant   int32_t & IW,
        constant   int32_t & IH,
        constant   int32_t & CHW,
        constant   int32_t & s0,
        constant   int32_t & s1,
        constant   int32_t & p0,
        constant   int32_t & p1,
        constant   int32_t & d0,
        constant   int32_t & d1,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3  tgpg[[threadgroups_per_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int32_t iiw = tgpig[2] * s0 + tpitg[2] * d0 - p0;
    const int32_t iih = tgpig[1] * s1 + tpitg[1] * d1 - p1;

    const int32_t offset_dst =
        (tpitg[0] * tgpg[1] * tgpg[2] + tgpig[1] * tgpg[2] + tgpig[2]) * CHW +
        (tgpig[0] * (ntg[1] * ntg[2]) + tpitg[1] * ntg[2] + tpitg[2]);

    device T * pdst = (device T *) (dst);

    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
        pdst[offset_dst] = 0.0f;
    } else {
        const int32_t offset_src = tpitg[0] * ofs0 + tgpig[0] * ofs1;
        pdst[offset_dst] = x[offset_src + iih * IW + iiw];
    }
}

template [[host_name("kernel_im2col_f32")]] kernel im2col_t kernel_im2col;
template [[host_name("kernel_im2col_f16")]] kernel im2col_t kernel_im2col;

kernel void kernel_upscale_f32(
    device  const char * src0,
    device        char * dst,
    constant   int64_t & ne00,
    constant   int64_t & ne01,
    constant   int64_t & ne02,
    constant   int64_t & ne03,
    constant  uint64_t & nb00,
    constant  uint64_t & nb01,
    constant  uint64_t & nb02,
    constant  uint64_t & nb03,
    constant   int64_t & ne0,
    constant   int64_t & ne1,
    constant   int64_t & ne2,
    constant   int64_t & ne3,
    constant  uint64_t & nb0,
    constant  uint64_t & nb1,
    constant  uint64_t & nb2,
    constant  uint64_t & nb3,
    constant     float & sf0,
    constant     float & sf1,
    constant     float & sf2,
    constant     float & sf3,
    uint3 tgpig[[threadgroup_position_in_grid]],
    uint3 tpitg[[thread_position_in_threadgroup]],
    uint3   ntg[[threads_per_threadgroup]]) {

    const int64_t i3 = tgpig.z;
    const int64_t i2 = tgpig.y;
    const int64_t i1 = tgpig.x;

    const int64_t i03 = i3/sf3;
    const int64_t i02 = i2/sf2;
    const int64_t i01 = i1/sf1;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        const int64_t i00 = i0/sf0;

        device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
        device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1  +  i0*nb0);

        dst_ptr[0] = src0_ptr[0];
    }
}

kernel void kernel_pad_f32(
    device  const char * src0,
    device        char * dst,
    constant   int64_t & ne00,
    constant   int64_t & ne01,
    constant   int64_t & ne02,
    constant   int64_t & ne03,
    constant  uint64_t & nb00,
    constant  uint64_t & nb01,
    constant  uint64_t & nb02,
    constant  uint64_t & nb03,
    constant   int64_t & ne0,
    constant   int64_t & ne1,
    constant   int64_t & ne2,
    constant   int64_t & ne3,
    constant  uint64_t & nb0,
    constant  uint64_t & nb1,
    constant  uint64_t & nb2,
    constant  uint64_t & nb3,
    uint3 tgpig[[threadgroup_position_in_grid]],
    uint3 tpitg[[thread_position_in_threadgroup]],
    uint3   ntg[[threads_per_threadgroup]]) {

    const int64_t i3 = tgpig.z;
    const int64_t i2 = tgpig.y;
    const int64_t i1 = tgpig.x;

    const int64_t i03 = i3;
    const int64_t i02 = i2;
    const int64_t i01 = i1;

    device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01);
    device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1);

    if (i1 < ne01 && i2 < ne02 && i3 < ne03) {
        for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
            if (i0 < ne00) {
                dst_ptr[i0] = src0_ptr[i0];
            } else {
                dst_ptr[i0] = 0.0f;
            }
        }

        return;
    }

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        dst_ptr[i0] = 0.0f;
    }
}

kernel void kernel_arange_f32(
    device        char * dst,
    constant   int64_t & ne0,
    constant   float   & start,
    constant   float   & step,
    uint3 tgpig[[threadgroup_position_in_grid]],
    uint3 tpitg[[thread_position_in_threadgroup]],
    uint3   ntg[[threads_per_threadgroup]]) {

    device float * dst_ptr = (device float *) dst;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        dst_ptr[i0] = start + step * i0;
    }
}

kernel void kernel_timestep_embedding_f32(
    device  const char * src0,
    device        char * dst,
    constant  uint64_t & nb1,
    constant  int      & dim,
    constant  int      & max_period,
    uint3 tgpig[[threadgroup_position_in_grid]],
    uint3 tpitg[[thread_position_in_threadgroup]],
    uint3   ntg[[threads_per_threadgroup]]) {

    int i = tgpig.x;
    device float * embed_data = (device float *)(dst +  i*nb1);

    int half_ = dim / 2;
    for (int j = tpitg.x; j < half_; j += ntg.x) {
        float timestep = ((device float *)src0)[i];
        float freq = (float)exp(-log((float)max_period) * j / half_);
        float arg = timestep * freq;
        embed_data[j        ] = cos(arg);
        embed_data[j + half_] = sin(arg);
    }

    if (dim % 2 != 0 && tpitg.x == 0) {
        embed_data[dim] = 0.f;
    }
}

// bitonic sort implementation following the CUDA kernels as reference
typedef void (argsort_t)(
        device const float  * x,
        device     int32_t  * dst,
        constant   int64_t  & ncols,
        constant   int64_t  & ncols_pad,
        threadgroup int32_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]]);

template
kernel void kernel_argsort_f32_i32(
        device const float   * x,
        device       int32_t * dst,
        constant     int64_t & ncols,
        constant     int64_t & ncols_pad,
        threadgroup int32_t  * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]]) {
    // bitonic sort
    int col = tpitg[0];
    int row = tgpig[1];

    if (col >= ncols_pad) return;

    device const float   * x_row   = x + row * ncols;
    threadgroup int32_t  * dst_row = shared_values;

    // initialize indices
    dst_row[col] = col;

    threadgroup_barrier(mem_flags::mem_threadgroup);

    for (int k = 2; k <= ncols_pad; k *= 2) {
        for (int j = k / 2; j > 0; j /= 2) {
            int ixj = col ^ j;
            if (ixj > col) {
                if ((col & k) == 0) {
                    if (dst_row[col] >= ncols ||
                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
                    ) {
                        SWAP(dst_row[col], dst_row[ixj]);
                    }
                } else {
                    if (dst_row[ixj] >= ncols ||
                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
                    ) {
                        SWAP(dst_row[col], dst_row[ixj]);
                    }
                }
            }
            threadgroup_barrier(mem_flags::mem_threadgroup);
        }
    }

    // copy the result to dst without the padding
    if (col < ncols) {
        dst[row * ncols + col] = dst_row[col];
    }
}

template [[host_name("kernel_argsort_f32_i32_asc")]]  kernel argsort_t kernel_argsort_f32_i32;
template [[host_name("kernel_argsort_f32_i32_desc")]] kernel argsort_t kernel_argsort_f32_i32;

kernel void kernel_leaky_relu_f32(
        device const float * src0,
        device       float * dst,
        constant     float & slope,
        uint tpig[[thread_position_in_grid]]) {
    dst[tpig] = src0[tpig] > 0.0f ? src0[tpig] : src0[tpig] * slope;
}

typedef void (flash_attn_ext_f16_t)(
        device const  char * q,
        device const  char * k,
        device const  char * v,
        device const  char * mask,
        device       float * dst,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant   int64_t & ne13,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant  uint64_t & nb13,
        constant  uint64_t & nb21,
        constant  uint64_t & nb22,
        constant  uint64_t & nb23,
        constant  uint64_t & nb31,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant     float & scale,
        constant     float & max_bias,
        constant     float & m0,
        constant     float & m1,
        constant  uint32_t & n_head_log2,
        constant     float & logit_softcap,
        threadgroup   half * shared,
        uint3  tgpig[[threadgroup_position_in_grid]],
        uint3  tpitg[[thread_position_in_threadgroup]],
        uint3    ntg[[threads_per_threadgroup]],
        ushort tiisg[[thread_index_in_simdgroup]],
        ushort sgitg[[simdgroup_index_in_threadgroup]]);

// ref: https://arxiv.org/pdf/2307.08691.pdf
template // head size, queries per threadgroup, cache items per threadgroup
kernel void kernel_flash_attn_ext_f16(
        device const  char * q,
        device const  char * k,
        device const  char * v,
        device const  char * mask,
        device       float * dst,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant   int64_t & ne13,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant  uint64_t & nb13,
        constant  uint64_t & nb21,
        constant  uint64_t & nb22,
        constant  uint64_t & nb23,
        constant  uint64_t & nb31,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant     float & scale,
        constant     float & max_bias,
        constant     float & m0,
        constant     float & m1,
        constant  uint32_t & n_head_log2,
        constant     float & logit_softcap,
        threadgroup   half * shared [[threadgroup(0)]],
        uint3  tgpig[[threadgroup_position_in_grid]],
        uint3  tpitg[[thread_position_in_threadgroup]],
        uint3    ntg[[threads_per_threadgroup]],
        ushort tiisg[[thread_index_in_simdgroup]],
        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
    const short nsg = ntg.y; // number of simdgroups

    const short iq3 = tgpig[2];
    const short iq2 = tgpig[1];
    const short iq1 = tgpig[0]*Q;

    const short D4 = D/4;
    const short D8 = D/8;
  //const short Q8 = Q/8;
    const short NW = N_SIMDWIDTH;
    const short SH = (C + Q); // shared memory per simdgroup in (half)

    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)
    const short TF = T/2;        // shared memory size per query in (float)
    const short T4 = T/4;        // shared memory size per query in (half4)

    threadgroup half  * sq  = (threadgroup half  *) (shared +              0*D); // holds the query data
    threadgroup half4 * sq4 = (threadgroup half4 *) (shared +              0*D); // same as above but in half4
    threadgroup float * ss  = (threadgroup float *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix

    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
    simdgroup_half8x8 lo[D8];

    // load heads from Q to shared memory
    for (short j = sgitg; j < Q; j += nsg) {
        device const float4 * q4 = (device const float4 *) ((device const char *) q + ((iq1 + j)*nb01 + iq2*nb02 + iq3*nb03));

        for (short i = tiisg; i < D4; i += NW) {
            if (iq1 + j < ne01) {
                sq4[j*T4 + i] = (half4) q4[i];
            } else {
                sq4[j*T4 + i] = 0.0h;
            }
        }
    }

    // zero out lo
    for (short i = 0; i < D8; ++i) {
        lo[i] = make_filled_simdgroup_matrix(0.0h);
    }

    // zero out shared memory SH
    for (short j = 0; j < Q; ++j) {
        for (short i = tiisg; i < SH; i += NW) {
            ss[j*TF + i] = 0.0f;
        }
    }

    threadgroup_barrier(mem_flags::mem_threadgroup);

    {
        float S[Q] = { [0 ... Q-1] = 0.0h };
        float M[Q] = { [0 ... Q-1] = -FLT_MAX/2 };

        // assume K and V are same shape
        const short ne22 = ne12;
        const short ne23 = ne13;

        // broadcast
        const short rk2 = ne02/ne12;
        const short rk3 = ne03/ne13;

        const short rv2 = ne02/ne22;
        const short rv3 = ne03/ne23;

        // k indices
        const short ik2 = iq2/rk2;
        const short ik3 = iq3/rk3;

        // v indices
        const short iv2 = iq2/rv2;
        const short iv3 = iq3/rv3;

        // load the queries from shared memory into local memory
        simdgroup_half8x8 mq[D8];

        for (short i = 0; i < D8; ++i) {
            simdgroup_load(mq[i], sq + i*8, T);
        }

        // pointer to the mask
        device const half * mp = (device const half *) (mask + iq1*nb31);

        float slope = 1.0f;

        // ALiBi
        if (max_bias > 0.0f) {
            const uint32_t h = iq2;

            const float base = h < n_head_log2 ? m0 : m1;
            const int   exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;

            slope = pow(base, exph);
        }

        // loop over the KV cache
        // each simdgroup handles blocks of Q rows and C columns
        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
            const int ic = ic0 + C*sgitg;
            if (ic >= ne11) {
                break;
            }

            // Q*K^T
            {
                for (short cc = 0; cc < C/8; ++cc) {
                    simdgroup_float8x8 mqk = make_filled_simdgroup_matrix(0.h);

                    device const half * pk = (device const half *) ((device const char *) k + ((ic + 8*cc)*nb11 + ik2*nb12 + ik3*nb13));

                    for (short i = 0; i < D8; ++i) {
                        simdgroup_half8x8 mk;
                        simdgroup_load(mk, pk + i*8, nb11/sizeof(half), 0, true); // transpose

                        simdgroup_multiply_accumulate(mqk, mq[i], mk, mqk);
                    }

                    simdgroup_store(mqk, ss + 8*cc, TF, 0, false);
                }
            }

            // used to detect blocks full of -INF
            float smax = -INFINITY;

            // online softmax
            {
                float ms[Q];

                for (short j = 0; j < Q; ++j) {
                    const float m = M[j];

                    // scale and apply the logitcap / mask
                    float s = ss[j*TF + tiisg]*scale;

                    if (logit_softcap != 0.0f) {
                        s = logit_softcap*precise::tanh(s);
                    }

                    if (mask != q) {
                        // mqk = mqk + mask*slope
                        s += slope*mp[ic + j*nb31/sizeof(half) + tiisg];
                    }

                    smax = simd_max(max(smax, s));
                    M[j] = simd_max(max(M[j], s));

                                ms[j] = exp(m - M[j]);
                    const float vs    = exp(s - M[j]);

                    S[j] = S[j]*ms[j] + simd_sum(vs);

                    // the P matrix from the paper (Q rows, C columns)
                    ss[j*TF + tiisg] = vs;
                }

                // create a QxQ diagonal matrix for rescaling the output
                if (tiisg < Q) {
                    ss[tiisg*TF + C + tiisg] = ms[tiisg];
                }
            }

            // skip -INF blocks
            if (smax == -INFINITY) {
                continue;
            }

            // O = diag(ms)*O
            {
                simdgroup_float8x8 mm;
                simdgroup_load(mm, ss + C, TF, 0, false);

                for (short i = 0; i < D8; ++i) {
                    simdgroup_multiply(lo[i], mm, lo[i]);
                }
            }

            // O = O + (Q*K^T)*V
            {
                for (short cc = 0; cc < C/8; ++cc) {
                    device const half * pv = (device const half *) ((device const char *) v + ((ic + 8*cc)*nb21 + iv2*nb22 + iv3*nb23));

                    for (short i = 0; i < D8; ++i) {
                        simdgroup_half8x8 mk;
                        simdgroup_load(mk, pv + i*8, nb21/sizeof(half), 0, false);

                        simdgroup_float8x8 mv;
                        simdgroup_load(mv, ss + 8*cc, TF, 0, false);

                        simdgroup_multiply_accumulate(lo[i], mv, mk, lo[i]);
                    }
                }
            }
        }

        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
        for (short j = 0; j < Q; ++j) {
            if (tiisg == 0) {
                ss[j*TF + 0] = S[j];
                ss[j*TF + 1] = M[j];
            }
        }
    }

    // reduce the warps sequentially
    for (short sg = 1; sg < nsg; ++sg) {
        float S = { 0.0h };
        float M = { -FLT_MAX/2 };

        threadgroup_barrier(mem_flags::mem_threadgroup);

        // each simdgroup stores its output to shared memory, reusing sq
        if (sgitg == sg) {
            for (short i = 0; i < D8; ++i) {
                simdgroup_store(lo[i], sq + i*8, T, 0, false);
            }
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        // the first simdgroup accumulates the results from the other simdgroups
        if (sgitg == 0) {
            for (short j = 0; j < Q; ++j) {
                const float S0 = ss[j*TF +         0];
                const float S1 = ss[j*TF + sg*SH + 0];

                const float M0 = ss[j*TF +         1];
                const float M1 = ss[j*TF + sg*SH + 1];

                M = max(M0, M1);

                const float ms0 = exp(M0 - M);
                const float ms1 = exp(M1 - M);

                S = S0*ms0 + S1*ms1;

                if (tiisg == 0) {
                    ss[j*TF + 0] = S;
                    ss[j*TF + 1] = M;

                    ss[j*TF + C + j        ] = ms0;
                    ss[j*TF + C + j + sg*SH] = ms1;
                }
            }

            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
            {
                simdgroup_half8x8 t;
                simdgroup_float8x8 ms0;
                simdgroup_float8x8 ms1;

                simdgroup_load(ms0, ss + C,         TF, 0, false);
                simdgroup_load(ms1, ss + C + sg*SH, TF, 0, false);

                for (short i = 0; i < D8; ++i) {
                    simdgroup_load    (t, sq + i*8, T, 0, false);
                    simdgroup_multiply(t, ms1, t);

                    simdgroup_multiply_accumulate(lo[i], ms0, lo[i], t);
                }
            }
        }
    }

    // store result to shared memory (reuse sq)
    if (sgitg == 0) {
        for (short i = 0; i < D8; ++i) {
            simdgroup_store(lo[i], sq + i*8, T, 0, false);
        }
    }

    device float4 * dst4 = (device float4 *) dst;

    // final rescale with 1/S and store to global memory
    if (sgitg == 0) {
        for (short j = 0; j < Q && iq1 + j < ne01; ++j) {
            const float S = ss[j*TF + 0];

            for (short i = tiisg; i < D4; i += NW) {
                dst4[(iq3*ne2*ne1 + iq2 + (iq1 + j)*ne1)*D4 + i] = (float4) sq4[j*T4 + i]/S;
            }
        }
    }
}

template [[host_name("kernel_flash_attn_ext_f16_h64" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<64>;
template [[host_name("kernel_flash_attn_ext_f16_h80" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<80>;
template [[host_name("kernel_flash_attn_ext_f16_h96" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<96>;
template [[host_name("kernel_flash_attn_ext_f16_h112")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<112>;
template [[host_name("kernel_flash_attn_ext_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<128>;
//template [[host_name("kernel_flash_attn_ext_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<256>;

template // head size, queries per threadgroup, cache items per threadgroup
kernel void kernel_flash_attn_ext_vec_f16(
        device const  char * q,
        device const  char * k,
        device const  char * v,
        device const  char * mask,
        device       float * dst,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant   int64_t & ne13,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant  uint64_t & nb13,
        constant  uint64_t & nb21,
        constant  uint64_t & nb22,
        constant  uint64_t & nb23,
        constant  uint64_t & nb31,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant     float & scale,
        constant     float & max_bias,
        constant     float & m0,
        constant     float & m1,
        constant  uint32_t & n_head_log2,
        constant     float & logit_softcap,
        threadgroup   half * shared [[threadgroup(0)]],
        uint3  tgpig[[threadgroup_position_in_grid]],
        uint3  tpitg[[thread_position_in_threadgroup]],
        uint3    ntg[[threads_per_threadgroup]],
        ushort tiisg[[thread_index_in_simdgroup]],
        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
    const short nsg = ntg.y; // number of simdgroups

    const short iq3 = tgpig[2];
    const short iq2 = tgpig[1];
    const short iq1 = tgpig[0];

    const short D4 = D/4;
    const short NW = N_SIMDWIDTH;
    const short SH = (C + Q); // shared memory per simdgroup in (half)

    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)

    float slope = 1.0f;

    // ALiBi
    if (max_bias > 0.0f) {
        const uint32_t h = iq2;

        const float base = h < n_head_log2 ? m0 : m1;
        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;

        slope = pow(base, exp);
    }

  //threadgroup half   * sq  = (threadgroup half   *) (shared +              0*D); // holds the query data
    threadgroup half4  * sq4 = (threadgroup half4  *) (shared +              0*D); // same as above but in half4
    threadgroup float  * ss  = (threadgroup float  *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix
    threadgroup float4 * ss4 = (threadgroup float4 *) (shared + 2*sgitg*SH + 1*D); // same as above but in half4
    threadgroup half4  * sr4 = (threadgroup half4  *) (shared +   sgitg*D  + 1*T); // scratch buffer for the results

    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
    half4 lo[D4/NW];

    // load heads from Q to shared memory
    device const float4 * q4 = (device const float4 *) ((device const char *) q + (iq1*nb01 + iq2*nb02 + iq3*nb03));

    for (short i = tiisg; i < D4; i += NW) {
        if (iq1 < ne01) {
            sq4[i] = (half4) q4[i];
        } else {
            sq4[i] = 0.0h;
        }
    }

    // zero out lo
    for (short i = tiisg; i < D4; i += NW) {
        lo[i/NW] = 0.0h;
    }

    // zero out shared memory SH
    for (short i = tiisg; i < SH/4; i += NW) {
        ss4[i] = 0.0h;
    }

    threadgroup_barrier(mem_flags::mem_threadgroup);

    {
        float S = { 0.0h };
        float M = { -FLT_MAX/2 };

        // assume K and V are same shape
        const short ne22 = ne12;
        const short ne23 = ne13;

        // broadcast
        const short rk2 = ne02/ne12;
        const short rk3 = ne03/ne13;

        const short rv2 = ne02/ne22;
        const short rv3 = ne03/ne23;

        // k indices
        const short ik2 = iq2 / rk2;
        const short ik3 = iq3 / rk3;

        // v indices
        const short iv2 = iq2 / rv2;
        const short iv3 = iq3 / rv3;

        // load the queries from shared memory into local memory
        float4 mq[D4];

        for (short ii = 0; ii < D4; ii += NW) {
            short i = ii + tiisg;
            mq[i] = (float4) sq4[i];
        }

        // pointer to the mask
        device const half4 * mp4 = (device const half4 *) (mask + iq1*nb31);

        // loop over the KV cache
        // each simdgroup handles blocks of Q rows and C columns
        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
            const int ic = ic0 + C*sgitg;
            if (ic >= ne11) {
                break;
            }

            // Q*K^T
            {
#pragma unroll
                for (short cc = 0; cc < C/4; ++cc) {
                    float4 mqk = { 0.0h };

                    device const half4 * pk4 = (device const half4 *) ((device const char *) k + ((ic + 4*cc)*nb11 + ik2*nb12 + ik3*nb13));

#pragma unroll
                    for (short ii = 0; ii < D4; ii += NW) {
                        const short i = ii + tiisg;

                        float4x4 mk;
                        mk[0] = (float4) pk4[i + 0*(nb11/8)];
                        mk[1] = (float4) pk4[i + 1*(nb11/8)];
                        mk[2] = (float4) pk4[i + 2*(nb11/8)];
                        mk[3] = (float4) pk4[i + 3*(nb11/8)];

                        mqk += (float4) (mq[i] * mk);
                    }

                    // reduce the results from the threads in the simdgroup
                    mqk += simd_shuffle_down(mqk, 16);
                    mqk += simd_shuffle_down(mqk,  8);
                    mqk += simd_shuffle_down(mqk,  4);
                    mqk += simd_shuffle_down(mqk,  2);
                    mqk += simd_shuffle_down(mqk,  1);

                    // mqk = mqk*scale + mask*slope
                    if (tiisg == 0) {
                        mqk *= scale;

                        if (logit_softcap != 0.0f) {
                            mqk = logit_softcap*precise::tanh(mqk);
                        }

                        mqk += (mask != q) ? ((float4) mp4[ic/4 + cc])*slope : (float4) 0.0f;

                        ss4[cc] = mqk;
                    }
                }
            }

            // online softmax
            {
                const short p = tiisg;

                const float m = M;
                const float s = ss[p];

                M = simd_max(max(M, s));

                const float ms = exp(m - M);
                const float vs = exp(s - M);

                S = S*ms + simd_sum(vs);

                // the P matrix from the paper (Q rows, C columns)
                ss[p] = vs;

                // O = diag(ms)*O
#pragma unroll
                for (short ii = 0; ii < D4; ii += NW) {
                    const short i = ii + tiisg;
                    lo[i/NW] *= ms;
                }
            }

            // O = O + (Q*K^T)*V
            {
#pragma unroll
                for (short cc = 0; cc < C/4; ++cc) {
                    device const half4 * pv4 = (device const half4 *) ((device const char *) v + ((ic + 4*cc)*nb21 + iv2*nb22 + iv3*nb23));

#pragma unroll
                    for (short ii = 0; ii < D4; ii += NW) {
                        const short i = ii + tiisg;

                        lo[i/NW] += pv4[i + 0*(nb21/8)] * ss[4*cc + 0];
                        lo[i/NW] += pv4[i + 1*(nb21/8)] * ss[4*cc + 1];
                        lo[i/NW] += pv4[i + 2*(nb21/8)] * ss[4*cc + 2];
                        lo[i/NW] += pv4[i + 3*(nb21/8)] * ss[4*cc + 3];
                    }
                }
            }

        }

        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
        if (tiisg == 0) {
            ss[0] = S;
            ss[1] = M;
        }
    }

    // store results to shared memory
    for (short ii = 0; ii < D4; ii += NW) {
        short i = ii + tiisg;
        sr4[i] = lo[ii/NW];
    }

    threadgroup_barrier(mem_flags::mem_threadgroup);

    // parallel reduce
    for (short r = nsg/2; r > 0; r >>= 1) {
        if (sgitg < r) {
            const float S0 = ss[       0];
            const float S1 = ss[r*SH + 0];

            const float M0 = ss[       1];
            const float M1 = ss[r*SH + 1];

            const float M = max(M0, M1);

            const float ms0 = exp(M0 - M);
            const float ms1 = exp(M1 - M);

            const float S = S0*ms0 + S1*ms1;

            if (tiisg == 0) {
                ss[0] = S;
                ss[1] = M;
            }

            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
            for (short ii = 0; ii < D4; ii += NW) {
                short i = ii + tiisg;
                sr4[i] = sr4[i]*ms0 + sr4[i + r*D4]*ms1;
            }
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);
    }

    device float4 * dst4 = (device float4 *) dst;

    // final rescale with 1/S and store to global memory
    if (sgitg == 0) {
        const float S = ss[0];

        for (short ii = 0; ii < D4; ii += NW) {
            short i = ii + tiisg;
            dst4[(iq3*ne2*ne1 + iq2 + (iq1)*ne1)*D4 + i] = (float4) sr4[i]/S;
        }
    }
}

template [[host_name("kernel_flash_attn_ext_vec_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<128>;
//template [[host_name("kernel_flash_attn_ext_vec_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<256>;

template
kernel void kernel_cpy(
        device  const void * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);

    device T1 * dst_data = (device T1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
        device const T0 * src = (device T0 *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
        dst_data[i00] = (T1) src[0];
    }
}

typedef decltype(kernel_cpy) kernel_cpy_t;

template [[host_name("kernel_cpy_f32_f32")]]  kernel kernel_cpy_t kernel_cpy;
template [[host_name("kernel_cpy_f32_f16")]]  kernel kernel_cpy_t kernel_cpy;
template [[host_name("kernel_cpy_f16_f16")]]  kernel kernel_cpy_t kernel_cpy;
template [[host_name("kernel_cpy_f16_f32")]]  kernel kernel_cpy_t kernel_cpy;

kernel void kernel_cpy_f32_q8_0(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK8_0;

    device block_q8_0 * dst_data = (device block_q8_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK8_0; i00 < ne00; i00 += ntg.x*QK8_0) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float amax = 0.0f; // absolute max

        for (int j = 0; j < QK8_0; j++) {
            const float v = src[j];
            amax = MAX(amax, fabs(v));
        }

        const float d = amax / ((1 << 7) - 1);
        const float id = d ? 1.0f/d : 0.0f;

        dst_data[i00/QK8_0].d = d;

        for (int j = 0; j < QK8_0; ++j) {
            const float x0 = src[j]*id;

            dst_data[i00/QK8_0].qs[j] = round(x0);
        }
    }
}

kernel void kernel_cpy_f32_q4_0(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_0;

    device block_q4_0 * dst_data = (device block_q4_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK4_0; i00 < ne00; i00 += ntg.x*QK4_0) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float amax = 0.0f; // absolute max
        float max  = 0.0f;

        for (int j = 0; j < QK4_0; j++) {
            const float v = src[j];
            if (amax < fabs(v)) {
                amax = fabs(v);
                max  = v;
            }
        }

        const float d = max / -8;
        const float id = d ? 1.0f/d : 0.0f;

        dst_data[i00/QK4_0].d = d;

        for (int j = 0; j < QK4_0/2; ++j) {
            const float x0 = src[0       + j]*id;
            const float x1 = src[QK4_0/2 + j]*id;

            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f));
            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f));

            dst_data[i00/QK4_0].qs[j]  = xi0;
            dst_data[i00/QK4_0].qs[j] |= xi1 << 4;
        }
    }
}

kernel void kernel_cpy_f32_q4_1(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_1;

    device block_q4_1 * dst_data = (device block_q4_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK4_1; i00 < ne00; i00 += ntg.x*QK4_1) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float min = FLT_MAX;
        float max = -FLT_MAX;

        for (int j = 0; j < QK4_1; j++) {
            const float v = src[j];
            if (min > v) min = v;
            if (max < v) max = v;
        }

        const float d = (max - min) / ((1 << 4) - 1);
        const float id = d ? 1.0f/d : 0.0f;

        dst_data[i00/QK4_1].d = d;
        dst_data[i00/QK4_1].m = min;

        for (int j = 0; j < QK4_1/2; ++j) {
            const float x0 = (src[0       + j] - min)*id;
            const float x1 = (src[QK4_1/2 + j] - min)*id;

            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f));
            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f));

            dst_data[i00/QK4_1].qs[j]  = xi0;
            dst_data[i00/QK4_1].qs[j] |= xi1 << 4;
        }
    }
}

kernel void kernel_cpy_f32_q5_0(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_0;

    device block_q5_0 * dst_data = (device block_q5_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK5_0; i00 < ne00; i00 += ntg.x*QK5_0) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float amax = 0.0f; // absolute max
        float max  = 0.0f;

        for (int j = 0; j < QK5_0; j++) {
            const float v = src[j];
            if (amax < fabs(v)) {
                amax = fabs(v);
                max  = v;
            }
        }

        const float d = max / -16;
        const float id = d ? 1.0f/d : 0.0f;

        dst_data[i00/QK5_0].d = d;

        uint32_t qh = 0;
        for (int j = 0; j < QK5_0/2; ++j) {
            const float x0 = src[0       + j]*id;
            const float x1 = src[QK5_0/2 + j]*id;

            const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f));
            const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f));

            dst_data[i00/QK5_0].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
        }
        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
        for (int j = 0; j < 4; ++j) {
            dst_data[i00/QK5_0].qh[j] = qh8[j];
        }
    }
}

kernel void kernel_cpy_f32_q5_1(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_1;

    device block_q5_1 * dst_data = (device block_q5_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK5_1; i00 < ne00; i00 += ntg.x*QK5_1) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float max = src[0];
        float min = src[0];

        for (int j = 1; j < QK5_1; j++) {
            const float v = src[j];
            min = v < min ? v : min;
            max = v > max ? v : max;
        }

        const float d = (max - min) / 31;
        const float id = d ? 1.0f/d : 0.0f;

        dst_data[i00/QK5_1].d = d;
        dst_data[i00/QK5_1].m = min;

        uint32_t qh = 0;
        for (int j = 0; j < QK5_1/2; ++j) {
            const float x0 = (src[0       + j] - min)*id;
            const float x1 = (src[QK5_1/2 + j] - min)*id;

            const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
            const uint8_t xi1 = (uint8_t)(x1 + 0.5f);

            dst_data[i00/QK5_1].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2);
        }
        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
        for (int j = 0; j < 4; ++j) {
            dst_data[i00/QK5_1].qh[j] = qh8[j];
        }
    }
}

static inline int best_index_int8(int n, constant float * val, float x) {
    if (x <= val[0]) return 0;
    if (x >= val[n-1]) return n-1;
    int ml = 0, mu = n-1;
    while (mu-ml > 1) {
        int mav = (ml+mu)/2;
        if (x < val[mav]) mu = mav; else ml = mav;
    }
    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
}

constexpr constant static float kvalues_iq4nl_f[16] = {
    -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f
};

kernel void kernel_cpy_f32_iq4_nl(
        device const float * src0,
        device        void * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant   int64_t & ne03,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant  uint64_t & nb03,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   int64_t & ne2,
        constant   int64_t & ne3,
        constant  uint64_t & nb0,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        constant  uint64_t & nb3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint3 tpitg[[thread_position_in_threadgroup]],
        uint3   ntg[[threads_per_threadgroup]]) {
    const int64_t i03 = tgpig[2];
    const int64_t i02 = tgpig[1];
    const int64_t i01 = tgpig[0];

    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;

    const int64_t i3 = n / (ne2*ne1*ne0);
    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_NL;

    device block_iq4_nl * dst_data = (device block_iq4_nl *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

    for (int64_t i00 = tpitg.x*QK4_NL; i00 < ne00; i00 += ntg.x*QK4_NL) {
        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);

        float amax = 0.0f; // absolute max
        float max  = 0.0f;

        for (int j = 0; j < QK4_0; j++) {
            const float v = src[j];
            if (amax < fabs(v)) {
                amax = fabs(v);
                max  = v;
            }
        }

        const float d = max / kvalues_iq4nl_f[0];
        const float id = d ? 1.0f/d : 0.0f;

        float sumqx = 0, sumq2 = 0;
        for (int j = 0; j < QK4_NL/2; ++j) {
            const float x0 = src[0        + j]*id;
            const float x1 = src[QK4_NL/2 + j]*id;

            const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl_f, x0);
            const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl_f, x1);

            dst_data[i00/QK4_NL].qs[j] = xi0 | (xi1 << 4);

            const float v0 = kvalues_iq4nl_f[xi0];
            const float v1 = kvalues_iq4nl_f[xi1];
            const float w0 = src[0        + j]*src[0        + j];
            const float w1 = src[QK4_NL/2 + j]*src[QK4_NL/2 + j];
            sumqx += w0*v0*src[j] + w1*v1*src[QK4_NL/2 + j];
            sumq2 += w0*v0*v0 + w1*v1*v1;

        }

        dst_data[i00/QK4_NL].d = sumq2 > 0 ? sumqx/sumq2 : d;

    }
}

kernel void kernel_concat(
    device  const char * src0,
    device  const char * src1,
    device        char * dst,
    constant   int64_t & ne00,
    constant   int64_t & ne01,
    constant   int64_t & ne02,
    constant   int64_t & ne03,
    constant  uint64_t & nb00,
    constant  uint64_t & nb01,
    constant  uint64_t & nb02,
    constant  uint64_t & nb03,
    constant   int64_t & ne10,
    constant   int64_t & ne11,
    constant   int64_t & ne12,
    constant   int64_t & ne13,
    constant  uint64_t & nb10,
    constant  uint64_t & nb11,
    constant  uint64_t & nb12,
    constant  uint64_t & nb13,
    constant   int64_t & ne0,
    constant   int64_t & ne1,
    constant   int64_t & ne2,
    constant   int64_t & ne3,
    constant  uint64_t & nb0,
    constant  uint64_t & nb1,
    constant  uint64_t & nb2,
    constant  uint64_t & nb3,
    constant   int32_t & dim,
    uint3 tgpig[[threadgroup_position_in_grid]],
    uint3 tpitg[[thread_position_in_threadgroup]],
    uint3   ntg[[threads_per_threadgroup]]) {

    const int64_t i3 = tgpig.z;
    const int64_t i2 = tgpig.y;
    const int64_t i1 = tgpig.x;

    int64_t o[4] = {0, 0, 0, 0};
    o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03));

    device const float * x;

    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
        if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
            x = (device const float *)(src0 + (i3       )*nb03 + (i2       )*nb02 + (i1       )*nb01 + (i0       )*nb00);
        } else {
            x = (device const float *)(src1 + (i3 - o[3])*nb13 + (i2 - o[2])*nb12 + (i1 - o[1])*nb11 + (i0 - o[0])*nb10);
        }

        device float * y = (device float *)(dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);

        *y = *x;
    }
}

void kernel_mul_mv_q2_K_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q2_K * x = (device const block_q2_K *) src0 + ib_row + offset0;
    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int step = sizeof(block_q2_K) * nb;

    const int ix = tiisg/8;  // 0...3
    const int it = tiisg%8;  // 0...7
    const int iq = it/4;     // 0 or 1
    const int ir = it%4;     // 0...3
    const int is = (8*ir)/16;// 0 or 1

    device const float * y4 = y + ix * QK_K + 128 * iq + 8 * ir;

    for (int ib = ix; ib < nb; ib += 4) {

        float4 sumy = {0.f, 0.f, 0.f, 0.f};
        for (int i = 0; i < 8; ++i) {
            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
            yl[i+ 8] = y4[i+32]; sumy[1] += yl[i+ 8];
            yl[i+16] = y4[i+64]; sumy[2] += yl[i+16];
            yl[i+24] = y4[i+96]; sumy[3] += yl[i+24];
        }

        device const uint8_t  * sc = (device const uint8_t  *)x[ib].scales + 8*iq + is;
        device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
        device const half     * dh = &x[ib].d;

        for (int row = 0; row < N_DST; row++) {

            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
            for (int i = 0; i < 8; i += 2) {
                acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003);
                acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300);
                acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c);
                acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00);
                acc1[2] += yl[i+16] * (qs[i/2] & 0x0030);
                acc2[2] += yl[i+17] * (qs[i/2] & 0x3000);
                acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0);
                acc2[3] += yl[i+25] * (qs[i/2] & 0xc000);
            }
            float dall = dh[0];
            float dmin = dh[1] * 1.f/16.f;
            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f +
                                 (acc1[1] + 1.f/256.f * acc2[1]) * (sc[2] & 0xF) * 1.f/ 4.f +
                                 (acc1[2] + 1.f/256.f * acc2[2]) * (sc[4] & 0xF) * 1.f/16.f +
                                 (acc1[3] + 1.f/256.f * acc2[3]) * (sc[6] & 0xF) * 1.f/64.f) -
                         dmin * (sumy[0] * (sc[0] & 0xF0) + sumy[1] * (sc[2] & 0xF0) + sumy[2] * (sc[4] & 0xF0) + sumy[3] * (sc[6] & 0xF0));

            qs += step/2;
            sc += step;
            dh += step/2;
        }

        y4 += 4 * QK_K;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

[[host_name("kernel_mul_mv_q2_K_f32")]]
kernel void kernel_mul_mv_q2_K_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_q2_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_q3_K_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;

    const int64_t r0 = tgpig.x;
    const int64_t r1 = tgpig.y;
    const int64_t im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q3_K * x = (device const block_q3_K *) src0 + first_row*nb + offset0;
    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];

    //const uint16_t kmask1 = 0x3030;
    //const uint16_t kmask2 = 0x0f0f;

    const int tid = tiisg/4;
    const int ix  = tiisg%4;
    const int ip  = tid/4;          // 0 or 1
    const int il  = 2*((tid%4)/2);  // 0 or 2
    const int ir  = tid%2;
    const int n   = 8;
    const int l0  = n*ir;

    // One would think that the Metal compiler would figure out that ip and il can only have
    // 4 possible states, and optimize accordingly. Well, no. It needs help, and we do it
    // with these two tales.
    //
    // Possible masks for the high bit
    const ushort4 mm[4] = {{0x0001, 0x0100, 0x0002, 0x0200},  // ip = 0, il = 0
                           {0x0004, 0x0400, 0x0008, 0x0800},  // ip = 0, il = 2
                           {0x0010, 0x1000, 0x0020, 0x2000},  // ip = 1, il = 0
                           {0x0040, 0x4000, 0x0080, 0x8000}}; // ip = 1, il = 2

    // Possible masks for the low 2 bits
    const int4 qm[2] = {{0x0003, 0x0300, 0x000c, 0x0c00}, {0x0030, 0x3000, 0x00c0, 0xc000}};

    const ushort4 hm = mm[2*ip + il/2];

    const int shift = 2*il;
    const float    v1 = il == 0 ? 4.f : 64.f;
    const float    v2 = 4.f * v1;

    const uint16_t s_shift1 = 4*ip;
    const uint16_t s_shift2 = s_shift1 + il;

    const int q_offset = 32*ip + l0;
    const int y_offset = 128*ip + 32*il + l0;

    const int step = sizeof(block_q3_K) * nb / 2;

    device const float * y1 = yy + ix*QK_K + y_offset;

    uint32_t scales32, aux32;
    thread uint16_t * scales16 = (thread uint16_t *)&scales32;
    thread const int8_t * scales = (thread const int8_t *)&scales32;

    float sumf1[2] = {0.f};
    float sumf2[2] = {0.f};
    for (int i = ix; i < nb; i += 4) {

        for (int l = 0; l < 8; ++l) {
            yl[l+ 0] = y1[l+ 0];
            yl[l+ 8] = y1[l+16];
            yl[l+16] = y1[l+32];
            yl[l+24] = y1[l+48];
        }

        device const uint16_t * q = (device const uint16_t *)(x[i].qs + q_offset);
        device const uint16_t * h = (device const uint16_t *)(x[i].hmask + l0);
        device const uint16_t * a = (device const uint16_t *)(x[i].scales);
        device const half * dh = &x[i].d;

        for (int row = 0; row < 2; ++row) {

            const float d_all = (float)dh[0];

            scales16[0] = a[4];
            scales16[1] = a[5];
            aux32 = ((scales32 >> s_shift2) << 4) & 0x30303030;
            scales16[0] = a[il+0];
            scales16[1] = a[il+1];
            scales32 = ((scales32 >> s_shift1) & 0x0f0f0f0f) | aux32;

            float s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0;
            for (int l = 0; l < n; l += 2) {
                const int32_t qs = q[l/2];
                s1 += yl[l+0] * (qs & qm[il/2][0]);
                s2 += yl[l+1] * (qs & qm[il/2][1]);
                s3 += ((h[l/2] & hm[0]) ? 0.f : yl[l+0]) + ((h[l/2] & hm[1]) ? 0.f : yl[l+1]);
                s4 += yl[l+16] * (qs & qm[il/2][2]);
                s5 += yl[l+17] * (qs & qm[il/2][3]);
                s6 += ((h[l/2] & hm[2]) ? 0.f : yl[l+16]) + ((h[l/2] & hm[3]) ? 0.f : yl[l+17]);
            }
            float d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
            float d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
            sumf1[row] += d1 * (scales[0] - 32);
            sumf2[row] += d2 * (scales[2] - 32);

            s1 = s2 = s3 = s4 = s5 = s6 = 0;
            for (int l = 0; l < n; l += 2) {
                const int32_t qs = q[l/2+8];
                s1 += yl[l+8] * (qs & qm[il/2][0]);
                s2 += yl[l+9] * (qs & qm[il/2][1]);
                s3 += ((h[l/2+8] & hm[0]) ? 0.f : yl[l+8]) + ((h[l/2+8] & hm[1]) ? 0.f : yl[l+9]);
                s4 += yl[l+24] * (qs & qm[il/2][2]);
                s5 += yl[l+25] * (qs & qm[il/2][3]);
                s6 += ((h[l/2+8] & hm[2]) ? 0.f : yl[l+24]) + ((h[l/2+8] & hm[3]) ? 0.f : yl[l+25]);
            }
            d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
            d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
            sumf1[row] += d1 * (scales[1] - 32);
            sumf2[row] += d2 * (scales[3] - 32);

            q  += step;
            h  += step;
            a  += step;
            dh += step;

        }

        y1 += 4 * QK_K;

    }

    for (int row = 0; row < 2; ++row) {
        const float sumf = (sumf1[row] + 0.25f * sumf2[row]) / (1 << shift);
        sumf1[row] = simd_sum(sumf);
    }
    if (tiisg == 0) {
        for (int row = 0; row < 2; ++row) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = sumf1[row];
        }
    }
}

[[host_name("kernel_mul_mv_q3_K_f32")]]
kernel void kernel_mul_mv_q3_K_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_q3_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_q4_K_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const uint16_t kmask1 = 0x3f3f;
    const uint16_t kmask2 = 0x0f0f;
    const uint16_t kmask3 = 0xc0c0;

    const int ix = tiisg/8;  // 0...3
    const int it = tiisg%8;  // 0...7
    const int iq = it/4;     // 0 or 1
    const int ir = it%4;     // 0...3

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;
    //const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int first_row = r0 * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0;
    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[16];
    float yh[16];
    float sumf[N_DST]={0.f}, all_sum;

    const int step = sizeof(block_q4_K) * nb / 2;

    device const float * y4 = y + ix * QK_K + 64 * iq + 8 * ir;

    uint16_t sc16[4];
    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;

    for (int ib = ix; ib < nb; ib += 4) {

        float4 sumy = {0.f, 0.f, 0.f, 0.f};
        for (int i = 0; i < 8; ++i) {
            yl[i+0] = y4[i+  0]; sumy[0] += yl[i+0];
            yl[i+8] = y4[i+ 32]; sumy[1] += yl[i+8];
            yh[i+0] = y4[i+128]; sumy[2] += yh[i+0];
            yh[i+8] = y4[i+160]; sumy[3] += yh[i+8];
        }

        device const uint16_t * sc = (device const uint16_t *)x[ib].scales + iq;
        device const uint16_t * q1 = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
        device const half     * dh = &x[ib].d;

        for (int row = 0; row < N_DST; row++) {

            sc16[0] = sc[0] & kmask1;
            sc16[1] = sc[2] & kmask1;
            sc16[2] = ((sc[4] >> 0) & kmask2) | ((sc[0] & kmask3) >> 2);
            sc16[3] = ((sc[4] >> 4) & kmask2) | ((sc[2] & kmask3) >> 2);

            device const uint16_t * q2 = q1 + 32;

            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
            for (int i = 0; i < 8; i += 2) {
                acc1[0] += yl[i+0] * (q1[i/2] & 0x000F);
                acc1[1] += yl[i+1] * (q1[i/2] & 0x0F00);
                acc1[2] += yl[i+8] * (q1[i/2] & 0x00F0);
                acc1[3] += yl[i+9] * (q1[i/2] & 0xF000);
                acc2[0] += yh[i+0] * (q2[i/2] & 0x000F);
                acc2[1] += yh[i+1] * (q2[i/2] & 0x0F00);
                acc2[2] += yh[i+8] * (q2[i/2] & 0x00F0);
                acc2[3] += yh[i+9] * (q2[i/2] & 0xF000);
            }

            float dall = dh[0];
            float dmin = dh[1];
            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc8[0] +
                                 (acc1[2] + 1.f/256.f * acc1[3]) * sc8[1] * 1.f/16.f +
                                 (acc2[0] + 1.f/256.f * acc2[1]) * sc8[4] +
                                 (acc2[2] + 1.f/256.f * acc2[3]) * sc8[5] * 1.f/16.f) -
                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);

            q1 += step;
            sc += step;
            dh += step;
        }

        y4 += 4 * QK_K;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

[[host_name("kernel_mul_mv_q4_K_f32")]]
kernel void kernel_mul_mv_q4_K_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_q4_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_q5_K_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;

    const int64_t r0 = tgpig.x;
    const int64_t r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q5_K * x = (device const block_q5_K *) src0 + first_row*nb + offset0;
    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float sumf[2]={0.f};

    const int step = sizeof(block_q5_K) * nb;

    float yl[16], yh[16];

    const uint16_t kmask1 = 0x3f3f;
    const uint16_t kmask2 = 0x0f0f;
    const uint16_t kmask3 = 0xc0c0;

    const int tid = tiisg/4;
    const int ix  = tiisg%4;
    const int iq  = tid/4;
    const int ir  = tid%4;
    const int n   = 8;

    const int l0 = n*ir;
    const int q_offset = 32*iq + l0;
    const int y_offset = 64*iq + l0;

    const uint8_t hm1 = 1u << (2*iq);
    const uint8_t hm2 = hm1 << 1;
    const uint8_t hm3 = hm1 << 4;
    const uint8_t hm4 = hm2 << 4;

    uint16_t sc16[4];
    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;

    device const float * y1 = yy + ix*QK_K + y_offset;

    for (int i = ix; i < nb; i += 4) {

        device const uint8_t * q1 = x[i].qs + q_offset;
        device const uint8_t * qh = x[i].qh + l0;
        device const half * dh = &x[i].d;
        device const uint16_t * a = (device const uint16_t *)x[i].scales + iq;

        device const float * y2 = y1 + 128;
        float4 sumy = {0.f, 0.f, 0.f, 0.f};
        for (int l = 0; l < 8; ++l) {
            yl[l+0] = y1[l+ 0]; sumy[0] += yl[l+0];
            yl[l+8] = y1[l+32]; sumy[1] += yl[l+8];
            yh[l+0] = y2[l+ 0]; sumy[2] += yh[l+0];
            yh[l+8] = y2[l+32]; sumy[3] += yh[l+8];
        }

        for (int row = 0; row < 2; ++row) {

            device const uint8_t * q2 = q1 + 64;

            sc16[0] = a[0] & kmask1;
            sc16[1] = a[2] & kmask1;
            sc16[2] = ((a[4] >> 0) & kmask2) | ((a[0] & kmask3) >> 2);
            sc16[3] = ((a[4] >> 4) & kmask2) | ((a[2] & kmask3) >> 2);

            float4 acc1 = {0.f};
            float4 acc2 = {0.f};
            for (int l = 0; l < n; ++l) {
                uint8_t h = qh[l];
                acc1[0] += yl[l+0] * (q1[l] & 0x0F);
                acc1[1] += yl[l+8] * (q1[l] & 0xF0);
                acc1[2] += yh[l+0] * (q2[l] & 0x0F);
                acc1[3] += yh[l+8] * (q2[l] & 0xF0);
                acc2[0] += h & hm1 ? yl[l+0] : 0.f;
                acc2[1] += h & hm2 ? yl[l+8] : 0.f;
                acc2[2] += h & hm3 ? yh[l+0] : 0.f;
                acc2[3] += h & hm4 ? yh[l+8] : 0.f;
            }
            const float dall = dh[0];
            const float dmin = dh[1];
            sumf[row] += dall * (sc8[0] * (acc1[0] +  16.f*acc2[0]) +
                                 sc8[1] * (acc1[1]/16.f + 16.f*acc2[1]) +
                                 sc8[4] * (acc1[2] +  16.f*acc2[2]) +
                                 sc8[5] * (acc1[3]/16.f + 16.f*acc2[3])) -
                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);

            q1 += step;
            qh += step;
            dh += step/2;
            a  += step/2;

        }

        y1 += 4 * QK_K;

    }

    for (int row = 0; row < 2; ++row) {
        const float tot = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
        }
    }
}

[[host_name("kernel_mul_mv_q5_K_f32")]]
kernel void kernel_mul_mv_q5_K_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_q5_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_q6_K_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const uint8_t kmask1 = 0x03;
    const uint8_t kmask2 = 0x0C;
    const uint8_t kmask3 = 0x30;
    const uint8_t kmask4 = 0xC0;

    const int nb = ne00/QK_K;

    const int64_t r0 = tgpig.x;
    const int64_t r1 = tgpig.y;
    const int     im = tgpig.z;

    const int row = 2 * r0 + sgitg;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_q6_K * x = (device const block_q6_K *) src0 + row * nb + offset0;
    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;

    float sumf = 0;

    const int tid  = tiisg/2;
    const int ix   = tiisg%2;
    const int ip   = tid/8;         // 0 or 1
    const int il   = tid%8;
    const int n    = 4;
    const int l0   = n*il;
    const int is   = 8*ip + l0/16;

    const int y_offset = 128*ip + l0;
    const int q_offset_l = 64*ip + l0;
    const int q_offset_h = 32*ip + l0;

    for (int i = ix; i < nb; i += 2) {

        device const uint8_t * q1 = x[i].ql + q_offset_l;
        device const uint8_t * q2 = q1 + 32;
        device const uint8_t * qh = x[i].qh + q_offset_h;
        device const int8_t  * sc = x[i].scales + is;

        device const float * y = yy + i * QK_K + y_offset;

        const float dall = x[i].d;

        float4 sums = {0.f, 0.f, 0.f, 0.f};
        for (int l = 0; l < n; ++l) {
            sums[0] += y[l+ 0] * ((int8_t)((q1[l] & 0xF) | ((qh[l] & kmask1) << 4)) - 32);
            sums[1] += y[l+32] * ((int8_t)((q2[l] & 0xF) | ((qh[l] & kmask2) << 2)) - 32);
            sums[2] += y[l+64] * ((int8_t)((q1[l]  >> 4) | ((qh[l] & kmask3) << 0)) - 32);
            sums[3] += y[l+96] * ((int8_t)((q2[l]  >> 4) | ((qh[l] & kmask4) >> 2)) - 32);
        }

        sumf += dall * (sums[0] * sc[0] + sums[1] * sc[2] + sums[2] * sc[4] + sums[3] * sc[6]);

    }

    const float tot = simd_sum(sumf);
    if (tiisg == 0) {
        dst[r1*ne0 + im*ne0*ne1 + row] = tot;
    }
}

[[host_name("kernel_mul_mv_q6_K_f32")]]
kernel void kernel_mul_mv_q6_K_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_q6_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

// ======================= "True" 2-bit

void kernel_mul_mv_iq2_xxs_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_iq2_xxs * x = (device const block_iq2_xxs *) src0 + ib_row + offset0;
    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
    {
        int nval = 4;
        int pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xxs_grid[pos + i];
        nval = 2;
        pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq2_xxs * xr = x + ibl;
        device const uint16_t * q2 = xr->qs + 4 * ib;
        device const half * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            const float db = dh[0];
            device const uint8_t * aux8 = (device const uint8_t *)q2;
            const uint32_t aux32 = q2[2] | (q2[3] << 16);
            const float d = db * (0.5f + (aux32 >> 28));

            float sum = 0;
            for (int l = 0; l < 4; ++l) {
                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + aux8[l]);
                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
                for (int j = 0; j < 8; ++j) {
                    sum += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
                }
            }
            sumf[row] += d * sum;

            dh += nb*sizeof(block_iq2_xxs)/2;
            q2 += nb*sizeof(block_iq2_xxs)/2;
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
        }
    }
}

[[host_name("kernel_mul_mv_iq2_xxs_f32")]]
kernel void kernel_mul_mv_iq2_xxs_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq2_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_iq2_xs_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_iq2_xs * x = (device const block_iq2_xs *) src0 + ib_row + offset0;
    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 512);
    {
        int nval = 8;
        int pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xs_grid[pos + i];
        nval = 2;
        pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq2_xs * xr = x + ibl;
        device const uint16_t * q2 = xr->qs + 4 * ib;
        device const uint8_t  * sc = xr->scales + ib;
        device const half * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            const float db = dh[0];
            const uint8_t ls1 = sc[0] & 0xf;
            const uint8_t ls2 = sc[0] >>  4;
            const float d1 = db * (0.5f + ls1);
            const float d2 = db * (0.5f + ls2);

            float sum1 = 0, sum2 = 0;
            for (int l = 0; l < 2; ++l) {
                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
                const uint8_t signs = shared_signs[(q2[l] >> 9)];
                for (int j = 0; j < 8; ++j) {
                    sum1 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
                }
            }
            for (int l = 2; l < 4; ++l) {
                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
                const uint8_t signs = shared_signs[(q2[l] >> 9)];
                for (int j = 0; j < 8; ++j) {
                    sum2 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
                }
            }
            sumf[row] += d1 * sum1 + d2 * sum2;

            dh += nb*sizeof(block_iq2_xs)/2;
            q2 += nb*sizeof(block_iq2_xs)/2;
            sc += nb*sizeof(block_iq2_xs);
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
        }
    }
}

[[host_name("kernel_mul_mv_iq2_xs_f32")]]
kernel void kernel_mul_mv_iq2_xs_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq2_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_iq3_xxs_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_iq3_xxs * x = (device const block_iq3_xxs *) src0 + ib_row + offset0;
    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
    {
        int nval = 4;
        int pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) values[pos + i] = iq3xxs_grid[pos + i];
        nval = 2;
        pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq3_xxs * xr = x + ibl;
        device const uint8_t  * q3 = xr->qs + 8 * ib;
        device const uint16_t * gas = (device const uint16_t *)(xr->qs + QK_K/4) + 2 * ib;
        device const half * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            const float db = dh[0];
            const uint32_t aux32 = gas[0] | (gas[1] << 16);
            const float d = db * (0.5f + (aux32 >> 28));

            float2 sum = {0};
            for (int l = 0; l < 4; ++l) {
                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + q3[2*l+0]);
                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + q3[2*l+1]);
                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
                for (int j = 0; j < 4; ++j) {
                    sum[0] += yl[8*l + j + 0] * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
                    sum[1] += yl[8*l + j + 4] * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
                }
            }
            sumf[row] += d * (sum[0] + sum[1]);

            dh  += nb*sizeof(block_iq3_xxs)/2;
            q3  += nb*sizeof(block_iq3_xxs);
            gas += nb*sizeof(block_iq3_xxs)/2;
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.5f;
        }
    }
}

[[host_name("kernel_mul_mv_iq3_xxs_f32")]]
kernel void kernel_mul_mv_iq3_xxs_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq3_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_iq3_s_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_iq3_s * x = (device const block_iq3_s *) src0 + ib_row + offset0;
    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
    {
        int nval = 8;
        int pos  = (32*sgitg + tiisg)*nval;
        for (int i = 0; i < nval; ++i) values[pos + i] = iq3s_grid[pos + i];
        threadgroup_barrier(mem_flags::mem_threadgroup);
    }

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq3_s * xr = x + ibl;
        device const uint8_t * qs = xr->qs + 8 * ib;
        device const uint8_t * qh = xr->qh + ib;
        device const uint8_t * sc = xr->scales + (ib/2);
        device const uint8_t * signs = xr->signs + 4 * ib;
        device const half * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            const float db = dh[0];
            const float d = db * (1 + 2*((sc[0] >> 4*(ib%2)) & 0xf));

            float2 sum = {0};
            for (int l = 0; l < 4; ++l) {
                const threadgroup uint32_t * table1 = qh[0] & kmask_iq2xs[2*l+0] ? values + 256 : values;
                const threadgroup uint32_t * table2 = qh[0] & kmask_iq2xs[2*l+1] ? values + 256 : values;
                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(table1 + qs[2*l+0]);
                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(table2 + qs[2*l+1]);
                for (int j = 0; j < 4; ++j) {
                    sum[0] += yl[8*l + j + 0] * grid1[j] * select(1, -1, signs[l] & kmask_iq2xs[j+0]);
                    sum[1] += yl[8*l + j + 4] * grid2[j] * select(1, -1, signs[l] & kmask_iq2xs[j+4]);
                }
            }
            sumf[row] += d * (sum[0] + sum[1]);

            dh  += nb*sizeof(block_iq3_s)/2;
            qs  += nb*sizeof(block_iq3_s);
            qh  += nb*sizeof(block_iq3_s);
            sc  += nb*sizeof(block_iq3_s);
            signs += nb*sizeof(block_iq3_s);
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

[[host_name("kernel_mul_mv_iq3_s_f32")]]
kernel void kernel_mul_mv_iq3_s_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq3_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_iq2_s_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);

    device const block_iq2_s * x = (device const block_iq2_s *) src0 + ib_row + offset0;
    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    //threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
    //{
    //    int nval = 32;
    //    int pos  = (32*sgitg + tiisg)*nval;
    //    for (int i = 0; i < nval; ++i) values[pos + i] = iq2s_grid[pos + i];
    //    threadgroup_barrier(mem_flags::mem_threadgroup);
    //}

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq2_s * xr = x + ibl;
        device const uint8_t * qs = xr->qs + 4 * ib;
        device const uint8_t * qh = xr->qh + ib;
        device const uint8_t * sc = xr->scales + ib;
        device const uint8_t * signs = qs + QK_K/8;
        device const half * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            const float db = dh[0];
            const float d1 = db * (0.5f + (sc[0] & 0xf));
            const float d2 = db * (0.5f + (sc[0] >>  4));

            float2 sum = {0};
            for (int l = 0; l < 2; ++l) {
                //const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
                //const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
                constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
                constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
                for (int j = 0; j < 8; ++j) {
                    sum[0] += yl[8*l + j +  0] * grid1[j] * select(1, -1, signs[l+0] & kmask_iq2xs[j]);
                    sum[1] += yl[8*l + j + 16] * grid2[j] * select(1, -1, signs[l+2] & kmask_iq2xs[j]);
                }
            }
            sumf[row] += d1 * sum[0] + d2 * sum[1];

            dh  += nb*sizeof(block_iq2_s)/2;
            qs  += nb*sizeof(block_iq2_s);
            qh  += nb*sizeof(block_iq2_s);
            sc  += nb*sizeof(block_iq2_s);
            signs += nb*sizeof(block_iq2_s);
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
        }
    }
}

[[host_name("kernel_mul_mv_iq2_s_f32")]]
kernel void kernel_mul_mv_iq2_s_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq2_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

void kernel_mul_mv_iq1_s_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_value,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
    device const block_iq1_s * x = (device const block_iq1_s *) src0 + ib_row + offset0;
    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        float sumy = 0;
        for (int i = 0; i < 32; ++i) {
            yl[i] = y4[i];
            sumy += yl[i];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq1_s * xr = x + ibl;
        device const uint8_t  * qs = xr->qs + 4 * ib;
        device const uint16_t * qh = xr->qh + ib;
        device const half     * dh = &xr->d;

        for (int row = 0; row < N_DST; row++) {

            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 5) & 0x700)));
            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[0] << 2) & 0x700)));
            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[0] >> 1) & 0x700)));

            float sum = 0;
            for (int j = 0; j < 4; ++j) {
                sum += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
                     + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4)
                     + yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
                     + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
            }
            sumf[row] += (float)dh[0] * (sum + sumy * (qh[0] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA)) * (2*((qh[0] >> 12) & 7) + 1);

            dh += nb*sizeof(block_iq1_s)/2;
            qs += nb*sizeof(block_iq1_s);
            qh += nb*sizeof(block_iq1_s)/2;
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

void kernel_mul_mv_iq1_m_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_value,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;

    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
    device const block_iq1_m * x = (device const block_iq1_m *) src0 + ib_row + offset0;
    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;

    float yl[32];
    float sumf[N_DST]={0.f}, all_sum;

    const int nb32 = nb * (QK_K / 32);

    const int ix = tiisg;

    device const float * y4 = y + 32 * ix;

    iq1m_scale_t scale;

    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {

        float4 sumy = {0.f};
        for (int i = 0; i < 8; ++i) {
            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
            yl[i+ 8] = y4[i+ 8]; sumy[1] += yl[i+ 8];
            yl[i+16] = y4[i+16]; sumy[2] += yl[i+16];
            yl[i+24] = y4[i+24]; sumy[3] += yl[i+24];
        }

        const int ibl = ib32 / (QK_K / 32);
        const int ib  = ib32 % (QK_K / 32);

        device const block_iq1_m * xr = x + ibl;
        device const uint8_t  * qs = xr->qs + 4 * ib;
        device const uint8_t  * qh = xr->qh + 2 * ib;
        device const uint16_t * sc = (device const uint16_t *)xr->scales;

        for (int row = 0; row < N_DST; row++) {
            scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);

            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[1] << 8) & 0x700)));
            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[1] << 4) & 0x700)));

            float2 sum = {0.f};
            for (int j = 0; j < 4; ++j) {
                sum[0] += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
                        + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4);
                sum[1] += yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
                        + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
            }
            const float delta1 = sumy[0] * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[1] * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
            const float delta2 = sumy[2] * (qh[1] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[3] * (qh[1] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);

            sumf[row] += (float)scale.f16 * ((sum[0] + delta1) * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 7) + 1) +
                                             (sum[1] + delta2) * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 7) + 1));

            sc += nb*sizeof(block_iq1_m)/2;
            qs += nb*sizeof(block_iq1_m);
            qh += nb*sizeof(block_iq1_m);
        }

        y4 += 32 * 32;
    }

    for (int row = 0; row < N_DST; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

void kernel_mul_mv_iq4_nl_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values_i8,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
    const int nb = ne00/QK4_NL;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;
    const int first_row = (r0 * 2 + sgitg) * 2;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
    device const block_iq4_nl * x = (device const block_iq4_nl *) src0 + ib_row + offset0;
    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;

    const int ix = tiisg/2;  // 0...15
    const int it = tiisg%2;  // 0 or 1

    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
    threadgroup_barrier(mem_flags::mem_threadgroup);

    float4 yl[4];
    float sumf[2]={0.f}, all_sum;

    device const float * yb = y + ix * QK4_NL + it * 8;

    uint32_t aux32[2];
    thread const uint8_t * q8 = (thread const uint8_t *)aux32;

    float4 qf1, qf2;

    for (int ib = ix; ib < nb; ib += 16) {

        device const float4 * y4 = (device const float4 *)yb;
        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];

        for (int row = 0; row < 2 && first_row + row < ne01; ++row) {

            device const block_iq4_nl & xb = x[row*nb + ib];
            device const uint16_t * q4 = (device const uint16_t *)(xb.qs + 8*it);

            float4 acc1 = {0.f}, acc2 = {0.f};

            aux32[0] = q4[0] | (q4[1] << 16);
            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
            aux32[0] &= 0x0f0f0f0f;
            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
            acc1 += yl[0] * qf1;
            acc2 += yl[1] * qf2;

            aux32[0] = q4[2] | (q4[3] << 16);
            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
            aux32[0] &= 0x0f0f0f0f;
            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
            acc1 += yl[2] * qf1;
            acc2 += yl[3] * qf2;

            acc1 += acc2;

            sumf[row] += (float)xb.d * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);

        }

        yb += 16 * QK4_NL;
    }

    for (int row = 0; row < 2 && first_row + row < ne01; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

void kernel_mul_mv_iq4_xs_f32_impl(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values_i8,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg) {

    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
    const int nb = ne00/QK_K;
    const int r0 = tgpig.x;
    const int r1 = tgpig.y;
    const int im = tgpig.z;
    const int first_row = (r0 * 2 + sgitg) * 2;
    const int ib_row = first_row * nb;

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
    device const block_iq4_xs * x = (device const block_iq4_xs *) src0 + ib_row + offset0;
    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;

    const int ix = tiisg/16;  // 0 or 1
    const int it = tiisg%16;  // 0...15
    const int ib = it/2;
    const int il = it%2;

    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
    threadgroup_barrier(mem_flags::mem_threadgroup);

    float4 yl[4];
    float sumf[2]={0.f}, all_sum;

    device const float * yb = y + ix * QK_K + ib * 32 + il * 8;

    uint32_t aux32[2];
    thread const uint8_t * q8 = (thread const uint8_t *)aux32;

    float4 qf1, qf2;

    for (int ibl = ix; ibl < nb; ibl += 2) {

        device const float4 * y4 = (device const float4 *)yb;
        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];

        for (int row = 0; row < 2; ++row) {

            device const block_iq4_xs & xb = x[row*nb + ibl];
            device const uint32_t * q4 = (device const uint32_t *)(xb.qs + 16*ib + 8*il);

            float4 acc1 = {0.f}, acc2 = {0.f};

            aux32[0] = q4[0] & 0x0f0f0f0f;
            aux32[1] = (q4[0] >> 4) & 0x0f0f0f0f;
            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
            acc1 += yl[0] * qf1;
            acc2 += yl[1] * qf2;

            aux32[0] = q4[1] & 0x0f0f0f0f;
            aux32[1] = (q4[1] >> 4) & 0x0f0f0f0f;
            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
            acc1 += yl[2] * qf1;
            acc2 += yl[3] * qf2;

            acc1 += acc2;

            const int ls = (((xb.scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((xb.scales_h >> 2*ib) & 3) << 4)) - 32;
            sumf[row] += (float)xb.d * ls * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);

        }

        yb += 2 * QK_K;
    }

    for (int row = 0; row < 2; ++row) {
        all_sum = simd_sum(sumf[row]);
        if (tiisg == 0) {
            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
        }
    }
}

[[host_name("kernel_mul_mv_iq1_s_f32")]]
kernel void kernel_mul_mv_iq1_s_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq1_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

[[host_name("kernel_mul_mv_iq1_m_f32")]]
kernel void kernel_mul_mv_iq1_m_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint  tiisg[[thread_index_in_simdgroup]],
        uint  sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq1_m_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
}

[[host_name("kernel_mul_mv_iq4_nl_f32")]]
kernel void kernel_mul_mv_iq4_nl_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq4_nl_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

[[host_name("kernel_mul_mv_iq4_xs_f32")]]
kernel void kernel_mul_mv_iq4_xs_f32(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant   int64_t & ne01,
        constant   int64_t & ne02,
        constant  uint64_t & nb00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant   int64_t & ne11,
        constant   int64_t & ne12,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb12,
        constant   int64_t & ne0,
        constant   int64_t & ne1,
        constant   uint    & r2,
        constant   uint    & r3,
        threadgroup int8_t * shared_values [[threadgroup(0)]],
        uint3 tgpig[[threadgroup_position_in_grid]],
        uint tiisg[[thread_index_in_simdgroup]],
        uint sgitg[[simdgroup_index_in_threadgroup]]) {

    kernel_mul_mv_iq4_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
}

//============================= templates and their specializations =============================

// NOTE: this is not dequantizing - we are simply fitting the template
template 
void dequantize_f32(device const float4x4 * src, short il, thread type4x4 & reg) {
    float4x4 temp = *(((device float4x4 *)src));
    for (int i = 0; i < 16; i++){
        reg[i/4][i%4] = temp[i/4][i%4];
    }
}

template 
void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) {
    half4x4 temp = *(((device half4x4 *)src));
    for (int i = 0; i < 16; i++){
        reg[i/4][i%4] = temp[i/4][i%4];
    }
}

template 
void dequantize_q4_0(device const block_q4_0 *xb, short il, thread type4x4 & reg) {
    device const uint16_t * qs = ((device const uint16_t *)xb + 1);
    const float d1 = il ? (xb->d / 16.h) : xb->d;
    const float d2 = d1 / 256.f;
    const float md = -8.h * xb->d;
    const ushort mask0 = il ? 0x00F0 : 0x000F;
    const ushort mask1 = mask0 << 8;

    for (int i=0;i<8;i++) {
        reg[i/2][2*(i%2)+0] = d1 * (qs[i] & mask0) + md;
        reg[i/2][2*(i%2)+1] = d2 * (qs[i] & mask1) + md;
    }
}

template 
void dequantize_q4_1(device const block_q4_1 *xb, short il, thread type4x4 & reg) {
    device const uint16_t * qs = ((device const uint16_t *)xb + 2);
    const float d1 = il ? (xb->d / 16.h) : xb->d;
    const float d2 = d1 / 256.f;
    const float  m = xb->m;
    const ushort mask0 = il ? 0x00F0 : 0x000F;
    const ushort mask1 = mask0 << 8;

    for (int i=0;i<8;i++) {
        reg[i/2][2*(i%2)+0] = ((qs[i] & mask0) * d1) + m;
        reg[i/2][2*(i%2)+1] = ((qs[i] & mask1) * d2) + m;
    }
}

template 
void dequantize_q5_0(device const block_q5_0 *xb, short il, thread type4x4 & reg) {
    device const uint16_t * qs = ((device const uint16_t *)xb + 3);
    const float d = xb->d;
    const float md = -16.h * xb->d;
    const ushort mask = il ? 0x00F0 : 0x000F;

    const uint32_t qh = *((device const uint32_t *)xb->qh);

    const int x_mv = il ? 4 : 0;

    const int gh_mv = il ? 12 : 0;
    const int gh_bk = il ?  0 : 4;

    for (int i = 0; i < 8; i++) {
        // extract the 5-th bits for x0 and x1
        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;

        // combine the 4-bits from qs with the 5th bit
        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);

        reg[i/2][2*(i%2)+0] = d * x0 + md;
        reg[i/2][2*(i%2)+1] = d * x1 + md;
    }
}

template 
void dequantize_q5_1(device const block_q5_1 *xb, short il, thread type4x4 & reg) {
    device const uint16_t * qs = ((device const uint16_t *)xb + 4);
    const float d = xb->d;
    const float m = xb->m;
    const ushort mask = il ? 0x00F0 : 0x000F;

    const uint32_t qh = *((device const uint32_t *)xb->qh);

    const int x_mv = il ? 4 : 0;

    const int gh_mv = il ? 12 : 0;
    const int gh_bk = il ?  0 : 4;

    for (int i = 0; i < 8; i++) {
        // extract the 5-th bits for x0 and x1
        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;

        // combine the 4-bits from qs with the 5th bit
        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);

        reg[i/2][2*(i%2)+0] = d * x0 + m;
        reg[i/2][2*(i%2)+1] = d * x1 + m;
    }
}

template 
void dequantize_q8_0(device const block_q8_0 *xb, short il, thread type4x4 & reg) {
    device const int8_t * qs = ((device const int8_t *)xb->qs);
    const half d = xb->d;

    for (int i = 0; i < 16; i++) {
        reg[i/4][i%4] = (qs[i + 16*il] * d);
    }
}

template 
void dequantize_q2_K(device const block_q2_K *xb, short il, thread type4x4 & reg) {
    const float d = xb->d;
    const float min = xb->dmin;
    device const uint8_t * q = (device const uint8_t *)xb->qs;
    float dl, ml;
    uint8_t sc = xb->scales[il];

    q = q + 32*(il/8) + 16*(il&1);
    il = (il/2)%4;

    half  coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
    uchar mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
    dl = d * (sc & 0xF) * coef, ml = min * (sc >> 4);
    for (int i = 0; i < 16; ++i) {
        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
    }
}

template 
void dequantize_q3_K(device const block_q3_K *xb, short il, thread type4x4 & reg) {
    const half d_all = xb->d;
    device const uint8_t * q = (device const uint8_t *)xb->qs;
    device const uint8_t * h = (device const uint8_t *)xb->hmask;
    device const int8_t * scales = (device const int8_t *)xb->scales;

    q = q + 32 * (il/8) + 16 * (il&1);
    h = h + 16 * (il&1);
    uint8_t m = 1 << (il/2);
    uint16_t kmask1 = (il/4)>1 ? ((il/4)>2 ? 192 : 48) : \
                                 ((il/4)>0 ? 12  : 3);
    uint16_t kmask2 = il/8 ? 0xF0 : 0x0F;
    uint16_t scale_2 = scales[il%8], scale_1 = scales[8 + il%4];
    int16_t  dl_int = (il/4)&1 ? (scale_2&kmask2) | ((scale_1&kmask1) << 2)
                               : (scale_2&kmask2) | ((scale_1&kmask1) << 4);
    float dl = il<8 ? d_all * (dl_int - 32.f) : d_all * (dl_int / 16.f - 32.f);
    const float ml = 4.f * dl;

    il = (il/2) & 3;
    const half    coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
    const uint8_t mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
    dl *= coef;

    for (int i = 0; i < 16; ++i) {
        reg[i/4][i%4] = dl * (q[i] & mask) - (h[i] & m ? 0 : ml);
    }
}

static inline uchar2 get_scale_min_k4_just2(int j, int k, device const uchar * q) {
    return j < 4 ? uchar2{uchar(q[j+0+k] & 63), uchar(q[j+4+k] & 63)}
                 : uchar2{uchar((q[j+4+k] & 0xF) | ((q[j-4+k] & 0xc0) >> 2)), uchar((q[j+4+k] >> 4) | ((q[j-0+k] & 0xc0) >> 2))};
}

template 
void dequantize_q4_K(device const block_q4_K *xb, short il, thread type4x4 & reg) {
    device const uchar * q = xb->qs;

    short is = (il/4) * 2;
    q = q + (il/4) * 32 + 16 * (il&1);
    il = il & 3;
    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
    const float d   = il < 2 ? xb->d : xb->d / 16.h;
    const float min = xb->dmin;
    const float dl = d * sc[0];
    const float ml = min * sc[1];

    const ushort mask = il<2 ? 0x0F : 0xF0;
    for (int i = 0; i < 16; ++i) {
        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
    }
}

template 
void dequantize_q5_K(device const block_q5_K *xb, short il, thread type4x4 & reg) {
    device const uint8_t * q  = xb->qs;
    device const uint8_t * qh = xb->qh;

    short is = (il/4) * 2;
    q  = q + 32 * (il/4) + 16 * (il&1);
    qh = qh + 16 * (il&1);
    uint8_t ul = 1 << (il/2);
    il = il & 3;
    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
    const float d = il < 2 ? xb->d : xb->d / 16.f;
    const float min = xb->dmin;
    const float dl = d * sc[0];
    const float ml = min * sc[1];

    const ushort mask  = il<2 ? 0x0F : 0xF0;
    const float qh_val = il<2 ? 16.f : 256.f;
    for (int i = 0; i < 16; ++i) {
        reg[i/4][i%4] = dl * ((q[i] & mask) + (qh[i] & ul ? qh_val : 0)) - ml;
    }
}

template 
void dequantize_q6_K(device const block_q6_K *xb, short il, thread type4x4 & reg) {
    const half d_all = xb->d;
    device const uint8_t * ql = (device const uint8_t *)xb->ql;
    device const uint8_t * qh = (device const uint8_t *)xb->qh;
    device const int8_t * scales = (device const int8_t *)xb->scales;

    ql = ql + 64*(il/8) + 32*((il/2)&1) + 16*(il&1);
    qh = qh + 32*(il/8) + 16*(il&1);
    float sc = scales[(il%2) + 2 * ((il/2))];
    il = (il/2) & 3;

    const uint16_t  kmask1 = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3);
    const uint16_t  kmask2 = il>1 ? 0xF0              : 0x0F;
    const float       coef = il>1 ? 1.f/16.f          : 1.f;
    const float ml = d_all * sc * 32.f;
    const float dl = d_all * sc * coef;
    for (int i = 0; i < 16; ++i) {
        const half q = il&1 ? ((ql[i] & kmask2) | ((qh[i] & kmask1) << 2))
                            : ((ql[i] & kmask2) | ((qh[i] & kmask1) << 4));
        reg[i/4][i%4] = dl * q - ml;
    }
}

template 
void dequantize_iq2_xxs(device const block_iq2_xxs * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const float d = xb->d;
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    // each block of 32 needs 2 uint32_t's for the quants & scale, so 4 uint16_t's.
    device const uint16_t * q2 = xb->qs + 4*ib32;
    const uint32_t aux32_g = q2[0] | (q2[1] << 16);
    const uint32_t aux32_s = q2[2] | (q2[3] << 16);
    thread const uint8_t * aux8 = (thread const uint8_t *)&aux32_g;
    const float dl = d * (0.5f + (aux32_s >> 28)) * 0.25f;
    constant uint8_t * grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
    uint8_t signs = ksigns_iq2xs[(aux32_s >> 14*il) & 127];
    for (int i = 0; i < 8; ++i) {
        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
    }
    grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
    signs = ksigns_iq2xs[(aux32_s >> (14*il+7)) & 127];
    for (int i = 0; i < 8; ++i) {
        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
    }
}

template 
void dequantize_iq2_xs(device const block_iq2_xs * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const float d = xb->d;
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    device const uint16_t * q2 = xb->qs + 4*ib32;
    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
    constant uint8_t * grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+0] & 511));
    uint8_t signs = ksigns_iq2xs[q2[2*il+0] >> 9];
    for (int i = 0; i < 8; ++i) {
        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
    }
    grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+1] & 511));
    signs = ksigns_iq2xs[q2[2*il+1] >> 9];
    for (int i = 0; i < 8; ++i) {
        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
    }
}

template 
void dequantize_iq3_xxs(device const block_iq3_xxs * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const float d = xb->d;
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    device const uint8_t * q3 = xb->qs + 8*ib32;
    device const uint16_t * gas = (device const uint16_t *)(xb->qs + QK_K/4) + 2*ib32;
    const uint32_t aux32 = gas[0] | (gas[1] << 16);
    const float dl = d * (0.5f + (aux32 >> 28)) * 0.5f;
    constant uint8_t * grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+0]);
    constant uint8_t * grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+1]);
    uint8_t signs = ksigns_iq2xs[(aux32 >> 14*il) & 127];
    for (int i = 0; i < 4; ++i) {
        reg[0][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
        reg[1][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
    }
    grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+2]);
    grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+3]);
    signs = ksigns_iq2xs[(aux32 >> (14*il+7)) & 127];
    for (int i = 0; i < 4; ++i) {
        reg[2][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
        reg[3][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
    }
}

template 
void dequantize_iq3_s(device const block_iq3_s * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const float d = xb->d;
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    device const uint8_t * qs = xb->qs + 8*ib32;
    device const uint8_t * signs = xb->signs + 4*ib32 + 2*il;
    const uint8_t qh = xb->qh[ib32] >> 4*il;
    const float dl = d * (1 + 2*((xb->scales[ib32/2] >> 4*(ib32%2)) & 0xf));
    constant uint8_t * grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+0] | ((qh << 8) & 256)));
    constant uint8_t * grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+1] | ((qh << 7) & 256)));
    for (int i = 0; i < 4; ++i) {
        reg[0][i] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i+0]);
        reg[1][i] = dl * grid2[i] * select(1, -1, signs[0] & kmask_iq2xs[i+4]);
    }
    grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+2] | ((qh << 6) & 256)));
    grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+3] | ((qh << 5) & 256)));
    for (int i = 0; i < 4; ++i) {
        reg[2][i] = dl * grid1[i] * select(1, -1, signs[1] & kmask_iq2xs[i+0]);
        reg[3][i] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i+4]);
    }
}

template 
void dequantize_iq2_s(device const block_iq2_s * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const float d = xb->d;
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
    device const uint8_t * signs = qs + QK_K/8;
    const uint8_t qh = xb->qh[ib32] >> 4*il;
    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
    constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[0] | ((qh << 8) & 0x300)));
    constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[1] | ((qh << 6) & 0x300)));
    for (int i = 0; i < 8; ++i) {
        reg[i/4+0][i%4] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i]);
        reg[i/4+2][i%4] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i]);
    }
}

template 
void dequantize_iq1_s(device const block_iq1_s * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const int ib32 = il/2;
    il = il%2;
    const float d = xb->d;
    device const uint8_t  * qs = xb->qs + 4*ib32 + 2*il;
    device const uint16_t * qh = xb->qh;
    const float dl = d * (2*((qh[ib32] >> 12) & 7) + 1);
    const float ml = dl * (qh[ib32] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA);
    const uint16_t h = qh[ib32] >> 6*il;
    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((h << 8) & 0x700)));
    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((h << 5) & 0x700)));
    for (int i = 0; i < 4; ++i) {
        reg[0][i] = dl * (grid1[i] & 0xf) + ml;
        reg[1][i] = dl * (grid1[i] >>  4) + ml;
        reg[2][i] = dl * (grid2[i] & 0xf) + ml;
        reg[3][i] = dl * (grid2[i] >>  4) + ml;
    }
}

template 
void dequantize_iq1_m(device const block_iq1_m * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const int ib32 = il/2;
    il = il%2;
    device const uint16_t * sc = (device const uint16_t *)xb->scales;

    iq1m_scale_t scale;
    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
    const float d = scale.f16;

    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
    device const uint8_t * qh = xb->qh + 2*ib32 + il;

    const float dl  = d * (2*((sc[ib32/2] >> (6*(ib32%2)+3*il)) & 7) + 1);
    const float ml1 = dl * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
    const float ml2 = dl * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
    for (int i = 0; i < 4; ++i) {
        reg[0][i] = dl * (grid1[i] & 0xf) + ml1;
        reg[1][i] = dl * (grid1[i] >>  4) + ml1;
        reg[2][i] = dl * (grid2[i] & 0xf) + ml2;
        reg[3][i] = dl * (grid2[i] >>  4) + ml2;
    }
}

template 
void dequantize_iq4_nl(device const block_iq4_nl * xb, short il, thread type4x4 & reg) {
    device const uint16_t * q4 = (device const uint16_t *)xb->qs;
    const float d = xb->d;
    uint32_t aux32;
    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
    for (int i = 0; i < 4; ++i) {
        aux32 = ((q4[2*i] | (q4[2*i+1] << 16)) >> 4*il) & 0x0f0f0f0f;
        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
    }
}

template 
void dequantize_iq4_xs(device const block_iq4_xs * xb, short il, thread type4x4 & reg) {
    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
    const int ib32 = il/2;
    il = il%2;
    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
    device const uint32_t * q4 = (device const uint32_t *)xb->qs + 4*ib32;
    const int ls = ((xb->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((xb->scales_h >> 2*ib32) & 3) << 4);
    const float d = (float)xb->d * (ls - 32);
    uint32_t aux32;
    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
    for (int i = 0; i < 4; ++i) {
        aux32 = (q4[i] >> 4*il) & 0x0f0f0f0f;
        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
    }
}

template
kernel void kernel_get_rows_q(
        device const  void * src0,
        device const  void * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        uint3                tgpig[[threadgroup_position_in_grid]],
        uint                 tiitg[[thread_index_in_threadgroup]],
        uint3                tptg [[threads_per_threadgroup]]) {
    const int64_t i10 = tgpig.x;
    const int64_t i11 = tgpig.y;

    const int64_t r = ((const device int32_t *) ((const device char *) src1 + i11*nb11 + i10*nb10))[0];

    const int64_t i02 = i11;

    for (int64_t ind = tiitg; ind < ne00/16; ind += tptg.x) {
        float4x4 temp;
        dequantize_func(((device const block_q *) ((const device char *) src0 + r*nb01 + i02*nb02)) + ind/nl, ind%nl, temp);
        *(((device float4x4 *) ((device char *) dst + i11*nb2 + i10*nb1)) + ind) = temp;
    }
}

template
kernel void kernel_get_rows_f(
        device const  void * src0,
        device const  void * src1,
        device       float * dst,
        constant   int64_t & ne00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        uint3                tgpig[[threadgroup_position_in_grid]],
        uint                 tiitg[[thread_index_in_threadgroup]],
        uint3                tptg [[threads_per_threadgroup]]) {
    const int64_t i10 = tgpig.x;
    const int64_t i11 = tgpig.y;

    const int64_t r = ((const device int32_t *) ((const device char *) src1 + i11*nb11 + i10*nb10))[0];

    const int64_t i02 = i11;

    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
        ((      device float *) ((      device char *)  dst + i11*nb2  + i10*nb1))[ind] =
        ((const device T     *) ((const device char *) src0 + i02*nb02 +  r*nb01))[ind];
    }
}

kernel void kernel_get_rows_i32(
        device const  void * src0,
        device const  void * src1,
        device     int32_t * dst,
        constant   int64_t & ne00,
        constant  uint64_t & nb01,
        constant  uint64_t & nb02,
        constant   int64_t & ne10,
        constant  uint64_t & nb10,
        constant  uint64_t & nb11,
        constant  uint64_t & nb1,
        constant  uint64_t & nb2,
        uint3                tgpig[[threadgroup_position_in_grid]],
        uint                 tiitg[[thread_index_in_threadgroup]],
        uint3                tptg [[threads_per_threadgroup]]) {
    const int64_t i10 = tgpig.x;
    const int64_t i11 = tgpig.y;

    const int64_t r = ((const device int32_t *) ((const device char *) src1 + i11*nb11 + i10*nb10))[0];

    const int64_t i02 = i11;

    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
        ((      device int32_t *) ((      device char *) dst  + i11*nb2 + i10*nb1))[ind] =
        ((const device int32_t *) ((const device char *) src0 + i02*nb02 + r*nb01))[ind];
    }
}


#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A
#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix B
#define BLOCK_SIZE_K 32
#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A
#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B
#define THREAD_PER_BLOCK 128
#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers
#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers
#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8
#define SG_MAT_ROW 8

// each block_q contains 16*nl weights
template
kernel void kernel_mul_mm(device const  uchar * src0,
                          device const  uchar * src1,
                          device        float * dst,
                          constant    int64_t & ne00,
                          constant    int64_t & ne02,
                          constant   uint64_t & nb01,
                          constant   uint64_t & nb02,
                          constant    int64_t & ne12,
                          constant   uint64_t & nb10,
                          constant   uint64_t & nb11,
                          constant   uint64_t & nb12,
                          constant    int64_t & ne0,
                          constant    int64_t & ne1,
                          constant       uint & r2,
                          constant       uint & r3,
                          threadgroup   uchar * shared_memory [[threadgroup(0)]],
                          uint3                 tgpig[[threadgroup_position_in_grid]],
                          uint                  tiitg[[thread_index_in_threadgroup]],
                          uint                  sgitg[[simdgroup_index_in_threadgroup]]) {

    threadgroup T     * sa = (threadgroup T     *)(shared_memory);
    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);

    const uint r0 = tgpig.y;
    const uint r1 = tgpig.x;
    const uint im = tgpig.z;

    // if this block is of 64x32 shape or smaller
    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;

    // a thread shouldn't load data outside of the matrix
    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;

    simdgroup_T8x8     ma[4];
    simdgroup_float8x8 mb[2];
    simdgroup_float8x8 c_res[8];
    for (int i = 0; i < 8; i++){
        c_res[i] = make_filled_simdgroup_matrix(0.f);
    }

    short il = (tiitg % THREAD_PER_ROW);

    const uint i12 = im%ne12;
    const uint i13 = im/ne12;

    uint   offset0 = (i12/r2)*nb02 + (i13/r3)*(nb02*ne02);
    ushort offset1 = il/nl;

    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01 + offset0) + offset1;
    device const float   * y = (device const float   *)(src1
        + nb12 * im
        + nb11 * (r1 * BLOCK_SIZE_N + thread_col)
        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));

    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
        // load data and store to threadgroup memory
        T4x4 temp_a;
        dequantize_func(x, il, temp_a);
        threadgroup_barrier(mem_flags::mem_threadgroup);

        #pragma unroll(16)
        for (int i = 0; i < 16; i++) {
            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
        }

        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);

        il = (il + 2 < nl) ? il + 2 : il % 2;
        x  = (il < 2) ? x + (2+nl-1)/nl : x;
        y += BLOCK_SIZE_K;

        threadgroup_barrier(mem_flags::mem_threadgroup);

        // load matrices from threadgroup memory and conduct outer products
        threadgroup T     * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));

        #pragma unroll(4)
        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
            #pragma unroll(4)
            for (int i = 0; i < 4; i++) {
                simdgroup_load(ma[i],lsma + SG_MAT_SIZE * i);
            }
            simdgroup_barrier(mem_flags::mem_none);
            #pragma unroll(2)
            for (int i = 0; i < 2; i++) {
                simdgroup_load(mb[i],lsmb + SG_MAT_SIZE * i);
            }

            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;

            #pragma unroll(8)
            for (int i = 0; i < 8; i++){
                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
            }
        }
    }

    if ((r0 + 1) * BLOCK_SIZE_M <= ne0 && (r1 + 1) * BLOCK_SIZE_N <= ne1) {
        device float * C = dst + (BLOCK_SIZE_M * r0 + 32 * (sgitg &  1)) \
                               + (BLOCK_SIZE_N * r1 + 16 * (sgitg >> 1)) * ne0 + im*ne1*ne0;
        for (int i = 0; i < 8; i++) {
            simdgroup_store(c_res[i], C + 8 * (i%4) + 8 * ne0 * (i/4), ne0);
        }
    } else {
        // block is smaller than 64x32, we should avoid writing data outside of the matrix
        threadgroup_barrier(mem_flags::mem_threadgroup);
        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
        for (int i = 0; i < 8; i++) {
            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        device float * C = dst + (BLOCK_SIZE_M * r0) + (BLOCK_SIZE_N * r1) * ne0 + im*ne1*ne0;
        if (sgitg == 0) {
            for (int i = 0; i < n_rows; i++) {
                for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
                    *(C + i + j * ne0) = *(temp_str + i + j * BLOCK_SIZE_M);
                }
            }
        }
    }
}

// same as kernel_mul_mm_impl, but src1 and dst are accessed via indices stored in rowids
template
void kernel_mul_mm_id_impl(
        device const  uchar * src0,
        device const  uchar * src1,
        threadgroup ushort2 * rowids,
        device        float * dst,
        constant    int64_t & ne00,
        constant    int64_t & ne02,
        constant   uint64_t & nb01,
        constant   uint64_t & nb02,
        constant    int64_t & ne11,
        constant    int64_t & ne12,
        constant   uint64_t & nb10,
        constant   uint64_t & nb11,
        constant   uint64_t & nb12,
        constant    int64_t & ne0,
                    int64_t   ne1,
                    int64_t   ne0ne1,
        threadgroup   uchar * shared_memory,
        uint3                 tgpig[[threadgroup_position_in_grid]],
        uint                  tiitg[[thread_index_in_threadgroup]],
        uint                  sgitg[[simdgroup_index_in_threadgroup]]) {

    threadgroup half  * sa = (threadgroup half  *)(shared_memory);
    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);

    const uint r0 = tgpig.y;
    const uint r1 = tgpig.x;

    if (r1 * BLOCK_SIZE_N >= ne1) return;

    // if this block is of 64x32 shape or smaller
    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;

    // a thread shouldn't load data outside of the matrix
    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;

    simdgroup_half8x8  ma[4];
    simdgroup_float8x8 mb[2];
    simdgroup_float8x8 c_res[8];
    for (int i = 0; i < 8; i++){
        c_res[i] = make_filled_simdgroup_matrix(0.f);
    }
    short il = (tiitg % THREAD_PER_ROW);

    ushort offset1 = il/nl;

    threadgroup const auto & id = rowids[r1 * BLOCK_SIZE_N + thread_col];

    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01) + offset1;
    device const float   * y = (device const float   *)(src1
        + nb12 * id[1]
        + nb11 * (id[0] % ne11)
        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));

    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
        // load data and store to threadgroup memory
        half4x4 temp_a;
        dequantize_func(x, il, temp_a);
        threadgroup_barrier(mem_flags::mem_threadgroup);

        for (int i = 0; i < 16; i++) {
            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
        }

        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);

        il = (il + 2 < nl) ? il + 2 : il % 2;
        x  = (il < 2) ? x + (2+nl-1)/nl : x;
        y += BLOCK_SIZE_K;

        threadgroup_barrier(mem_flags::mem_threadgroup);

        // load matrices from threadgroup memory and conduct outer products
        threadgroup half  * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));

        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
            for (int i = 0; i < 4; i++) {
                simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i);
            }
            simdgroup_barrier(mem_flags::mem_none);
            for (int i = 0; i < 2; i++) {
                simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i);
            }

            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;

            for (int i = 0; i < 8; i++){
                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
            }
        }
    }

    {
        threadgroup_barrier(mem_flags::mem_threadgroup);
        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
        for (int i = 0; i < 8; i++) {
            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
        }

        threadgroup_barrier(mem_flags::mem_threadgroup);

        device float * C = dst + (BLOCK_SIZE_M * r0);
        if (sgitg == 0) {
            for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
                threadgroup const auto & jid = rowids[r1 * BLOCK_SIZE_N + j];
                int joff =  jid[0] * ne0 + jid[1] * ne0ne1;
                for (int i = 0; i < n_rows; i++) {
                    *(C + i + joff) = *(temp_str + i + j * BLOCK_SIZE_M);
                }
            }
        }
    }
}

template
kernel void kernel_mul_mm_id(
        device const   uchar * src0s,
        device const   uchar * src1,
        device         float * dst,
        device const   uchar * ids,
        constant     int64_t & nei0,
        constant     int64_t & nei1,
        constant    uint64_t & nbi1,
        constant     int64_t & ne00,
        constant     int64_t & ne02,
        constant    uint64_t & nb01,
        constant    uint64_t & nb02,
        constant     int64_t & ne11,
        constant     int64_t & ne12,
        constant     int64_t & ne13,
        constant    uint64_t & nb10,
        constant    uint64_t & nb11,
        constant    uint64_t & nb12,
        constant     int64_t & ne0,
        constant     int64_t & ne1,
        constant    uint64_t & nb1,
        threadgroup    uchar * shared_memory [[threadgroup(0)]],
        uint3                  tgpig[[threadgroup_position_in_grid]],
        uint                   tiitg[[thread_index_in_threadgroup]],
        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {

    const int32_t i02 = tgpig.z;
    tgpig.z = 0;

    device const uchar * src0 = src0s + i02*nb02;

    // row indices
    threadgroup ushort2 * rowids = (threadgroup ushort2 *)(shared_memory + 8192);

    // TODO: parallelize this loop
    int64_t _ne1 = 0;
    for (ushort ii1 = 0; ii1 < nei1; ii1++) {
        for (ushort ii0 = 0; ii0 < nei0; ii0++) {
            int32_t id = ((device int32_t *) (ids + ii1*nbi1))[ii0];
            if (id == i02) {
                //if (tiitg == 0) {
                    rowids[_ne1] = ushort2(ii0, ii1);
                //}
                _ne1++;
            }
        }
    }

    threadgroup_barrier(mem_flags::mem_threadgroup);

    kernel_mul_mm_id_impl(
        src0,
        src1,
        rowids,
        dst,
        ne00,
        ne02,
        nb01,
        nb02,
        ne11,
        ne12,
        nb10,
        nb11,
        nb12,
        ne0,
        _ne1,
        ne0*ne1,
        shared_memory,
        tgpig,
        tiitg,
        sgitg);
}

#define QK_NL 16

//
// get rows
//

typedef decltype(kernel_get_rows_f) get_rows_f_t;

template [[host_name("kernel_get_rows_f32")]]  kernel get_rows_f_t kernel_get_rows_f;
template [[host_name("kernel_get_rows_f16")]]  kernel get_rows_f_t kernel_get_rows_f;

typedef decltype(kernel_get_rows_q) get_rows_q_t;

template [[host_name("kernel_get_rows_q4_0")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q4_1")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q5_0")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q5_1")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q8_0")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q2_K")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q3_K")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q4_K")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q5_K")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_q6_K")]]    kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq2_xxs")]] kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq2_xs")]]  kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq3_xxs")]] kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq3_s")]]   kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq2_s")]]   kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq1_s")]]   kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq1_m")]]   kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq4_nl")]]  kernel get_rows_q_t kernel_get_rows_q;
template [[host_name("kernel_get_rows_iq4_xs")]]  kernel get_rows_q_t kernel_get_rows_q;

//
// matrix-matrix multiplication
//

typedef decltype(kernel_mul_mm) mat_mm_t;

template [[host_name("kernel_mul_mm_f32_f32")]]     kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_f16_f32")]]     kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q4_0_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q4_1_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q5_0_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q5_1_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q8_0_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q2_K_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q3_K_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q4_K_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q5_K_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_q6_K_f32")]]    kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq2_xxs_f32")]] kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq2_xs_f32")]]  kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq3_xxs_f32")]] kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq3_s_f32")]]   kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq2_s_f32")]]   kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq1_s_f32")]]   kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq1_m_f32")]]   kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq4_nl_f32")]]  kernel mat_mm_t kernel_mul_mm;
template [[host_name("kernel_mul_mm_iq4_xs_f32")]]  kernel mat_mm_t kernel_mul_mm;

//
// indirect matrix-matrix multiplication
//

typedef decltype(kernel_mul_mm_id) mat_mm_id_t;

template [[host_name("kernel_mul_mm_id_f32_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_f16_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q4_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q4_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q5_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q5_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q8_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q2_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q3_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q4_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q5_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_q6_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq2_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq2_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq3_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq3_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq2_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq1_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq1_m_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq4_nl_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id;
template [[host_name("kernel_mul_mm_id_iq4_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id;

//
// matrix-vector multiplication
//

typedef void (kernel_mul_mv_impl_t)(
        device const  char * src0,
        device const  char * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                  uint64_t   nb00,
                  uint64_t   nb01,
                  uint64_t   nb02,
                   int64_t   ne10,
                   int64_t   ne11,
                   int64_t   ne12,
                  uint64_t   nb10,
                  uint64_t   nb11,
                  uint64_t   nb12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
                   uint3     tgpig,
                   uint      tiisg);

typedef void (kernel_mul_mv2_impl_t)(
        device const  void * src0,
        device const float * src1,
        device       float * dst,
                   int64_t   ne00,
                   int64_t   ne01,
                   int64_t   ne02,
                   int64_t   ne10,
                   int64_t   ne12,
                   int64_t   ne0,
                   int64_t   ne1,
                   uint      r2,
                   uint      r3,
        threadgroup int8_t * shared_values,
                   uint3     tgpig,
                   uint      tiisg,
                   uint      sgitg);

template
void mmv_fn(
        device const    char * src0,
        device const    char * src1,
        device         float * dst,
                     int64_t   ne00,
                     int64_t   ne01,
                     int64_t   ne02,
                    uint64_t   nb00,
                    uint64_t   nb01,
                    uint64_t   nb02,
                     int64_t   ne10,
                     int64_t   ne11,
                     int64_t   ne12,
                     int64_t   ne13,
                    uint64_t   nb10,
                    uint64_t   nb11,
                    uint64_t   nb12,
                     int64_t   ne0,
                     int64_t   ne1,
                    uint64_t   nb1,
                        uint   r2,
                        uint   r3,
        threadgroup int8_t   * shared_values,
        uint3                  tgpig,
        uint                   tiitg,
        uint                   tiisg,
        uint                   sgitg) {
    impl_fn(src0,src1,dst,ne00,ne01,ne02,nb00,nb01,nb02,ne10,ne11,ne12,nb10,nb11,nb12,ne0,ne1,r2,r3,tgpig,tiisg);
}

template
void mmv_fn(
        device const    char * src0,
        device const    char * src1,
        device         float * dst,
                     int64_t   ne00,
                     int64_t   ne01,
                     int64_t   ne02,
                    uint64_t   nb00,
                    uint64_t   nb01,
                    uint64_t   nb02,
                     int64_t   ne10,
                     int64_t   ne11,
                     int64_t   ne12,
                     int64_t   ne13,
                    uint64_t   nb10,
                    uint64_t   nb11,
                    uint64_t   nb12,
                     int64_t   ne0,
                     int64_t   ne1,
                    uint64_t   nb1,
                        uint   r2,
                        uint   r3,
        threadgroup int8_t   * shared_values,
        uint3                  tgpig,
        uint                   tiitg,
        uint                   tiisg,
        uint                   sgitg) {
    impl_fn(src0,(const device float *)src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,shared_values,tgpig,tiisg,sgitg);
}

typedef decltype(mmv_fn>) mul_mv_impl_fn_t;

template
kernel void kernel_mul_mv_id(
        device const    char * src0s,
        device const    char * src1,
        device         float * dst,
        device const    char * ids,
        constant     int64_t & nei0,
        constant     int64_t & nei1,
        constant    uint64_t & nbi1,
        constant     int64_t & ne00,
        constant     int64_t & ne01,
        constant     int64_t & ne02,
        constant    uint64_t & nb00,
        constant    uint64_t & nb01,
        constant    uint64_t & nb02,
        constant     int64_t & ne10,
        constant     int64_t & ne11,
        constant     int64_t & ne12,
        constant     int64_t & ne13,
        constant    uint64_t & nb10,
        constant    uint64_t & nb11,
        constant    uint64_t & nb12,
        constant     int64_t & ne0,
        constant     int64_t & ne1,
        constant    uint64_t & nb1,
        threadgroup int8_t   * shared_values [[threadgroup(0)]],
        uint3                  tgpig[[threadgroup_position_in_grid]],
        uint                   tiitg[[thread_index_in_threadgroup]],
        uint                   tiisg[[thread_index_in_simdgroup]],
        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {
    const int iid1 = tgpig.z/nei0;
    const int idx = tgpig.z%nei0;

    tgpig.z = 0;

    const int32_t i02 = ((device const int32_t *) (ids + iid1*nbi1))[idx];

    const int64_t i11 = idx % ne11;
    const int64_t i12 = iid1;

    const int64_t i1 = idx;
    const int64_t i2 = i12;

    device const char * src0_cur = src0s + i02*nb02;
    device const char * src1_cur = src1 + i11*nb11 + i12*nb12;
    device      float * dst_cur  = dst + i1*ne0 + i2*ne1*ne0;

    impl_fn(
        /* src0 */ src0_cur,
        /* src1 */ src1_cur,
        /* dst  */ dst_cur,
        /* ne00 */ ne00,
        /* ne01 */ ne01,
        /* ne02 */ 1,//ne02,
        /* nb00 */ nb00,
        /* nb01 */ nb01,
        /* nb02 */ nb02,
        /* ne10 */ ne10,
        /* ne11 */ 1,//ne11,
        /* ne12 */ 1,//ne12,
        /* ne13 */ 1,//ne13,
        /* nb10 */ nb10,
        /* nb11 */ nb11,
        /* nb12 */ nb12,
        /* ne0  */ ne0,
        /* ne1  */ 1,//ne1,
        /* nb1  */ nb1,
        /* r2   */ 1,
        /* r3   */ 1,
        shared_values,
        tgpig,
        tiitg,
        tiisg,
        sgitg);
}

typedef decltype(kernel_mul_mv_id>>) kernel_mul_mv_id_t;

template [[host_name("kernel_mul_mv_id_f32_f32")]]     kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_f16_f32")]]     kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_q8_0_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_q4_0_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_q4_1_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_q5_0_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_q5_1_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>>;
template [[host_name("kernel_mul_mv_id_q2_K_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_q3_K_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_q4_K_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_q5_K_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_q6_K_f32")]]    kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq1_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq1_m_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq2_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq2_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq3_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq3_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq2_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq4_nl_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
template [[host_name("kernel_mul_mv_id_iq4_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id>;
!?p(p@p(p SAp(p SAp(p SAp(ppppp SAp(p SAp(p UEp(RGp SAp(p SAp(p SAp(p SAp(p SAp(p(p@p pp(p pp(p SAp(p pp(p SAp(p SAp(p SAp(p SAp(?pp pp(p SAp(p`SLSLSDSAp(p SAp(`QA`QA`DRAREppUARFpSAUAWASDSHSEUHSDUA??pQ"`zCp@p(`1ApPRCpTETApSBT@_OBJC_CLASS_$_NSBundleQr??@_OBJC_CLASS_$_NSString??@_OBJC_CLASS_$_MTLCaptureDescriptor??@_OBJC_CLASS_$_MTLCaptureManager???????????@_OBJC_CLASS_$_MTLCompileOptions???????????@__NSConcreteStackBlockq?@___stack_chk_guard?X?@___stderrp?@___stdoutp?@__dispatch_queue_attr_concurrent?@_mach_task_self_??@dyld_stub_binder??@__ZNSt12length_errorD1Ev???????????@__ZNSt20bad_array_new_lengthD1Ev?@__ZTINSt3__117__assoc_sub_stateE??4?@__ZTISt12length_error???????????@__ZTISt20bad_array_new_length?@__ZTVN10__cxxabiv120__si_class_type_infoE??4`?@__ZTVNSt3__117__assoc_sub_stateE??????????`?@__ZTVSt12length_error?@__ZdaPv?@__ZdlPv?@__Znam?@__Znwm?@___gxx_personality_v0?@_OBJC_CLASS_$_NSMutableDictionaryr??@_OBJC_CLASS_$_NSURL??@___CFConstantStringClassReferenceq?5???@_OBJC_CLASS_$_NSObjectr??@_OBJC_METACLASS_$_NSObject????????????@__objc_empty_cache??@_objc_msgSendq??@_objc_release?@__ZTISt12length_errorQq?@__ZdaPv??@__ZdlPv?@__Znam?@__Znwm?r@_MTLCopyAllDevices?r@_MTLCreateSystemDefaultDevice?r@__Unwind_Resume?r@__ZNSt11logic_errorC2EPKc?r @__ZNSt13exception_ptrD1Ev?r(@__ZNSt20bad_array_new_lengthC1Ev?r0@__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc?r8@__ZNSt3__114__shared_countD2Ev?r@@__ZNSt3__115__thread_structC1Ev?rH@__ZNSt3__115__thread_structD1Ev?rP@__ZNSt3__117__assoc_sub_state13set_exceptionESt13exception_ptr?rX@__ZNSt3__117__assoc_sub_state16__on_zero_sharedEv?r`@__ZNSt3__117__assoc_sub_state4waitEv?rh@__ZNSt3__117__assoc_sub_state9set_valueEv?rp@__ZNSt3__118condition_variableD1Ev?rx@__ZNSt3__119__thread_local_dataEv?r?@__ZNSt3__120__throw_system_errorEiPKc?r?@__ZNSt3__15mutexD1Ev?r?@__ZNSt3__16futureIvE3getEv?r?@__ZNSt3__16futureIvEC1EPNS_17__assoc_sub_stateE?r?@__ZNSt3__16futureIvED1Ev?r?@__ZNSt3__16thread6detachEv?r?@__ZNSt3__16threadD1Ev?r?@__ZSt17current_exceptionv?r?@__ZSt9terminatev?r?@____chkstk_darwin?r?@___bzero?r?@___cxa_allocate_exception?r?@___cxa_atexit?r?@___cxa_begin_catch?r?@___cxa_end_catch?r?@___cxa_free_exception?r?@___cxa_guard_abort?r?@___cxa_guard_acquire?r?@___cxa_guard_release?r?@___cxa_rethrow?r?@___cxa_throw?r?@___error?r?@___sincosf_stret?r?@___stack_chk_fail?r?@_abort?r?@_calloc?r?A_cblas_sgemm$NEWLAPACK$ILP64?r?@_clock?r?@_clock_gettime?r?@_cosf?r?@_dispatch_apply?r?@_dispatch_queue_create?r?@_dispatch_release?r?@_exp2f?r?@_expf?r?@_expm1f?r?@_fclose?r?@_fflush?r?@_fopen$DARWIN_EXTSN?r?@_fprintf?r?@_fputc?r?@_fputs?r?@_fread?r?@_free?r?@_fseek?r?@_ftell?r?@_fwrite?r?@_getenv?r?@_log1pf?r?@_log2?r?@_log2f?r?@_logf?r?@_lroundf?r?@_malloc?r?@_memcmp?r?@_memcpy?r?@_memset?r?@_memset_pattern16?r?@_objc_alloc?r?@_objc_autoreleasePoolPop?r?@_objc_autoreleasePoolPush?r?@_objc_enumerationMutation?r?@_objc_opt_class?r?@_objc_opt_new?r?@_posix_memalign?r?@_powf?r?@_printf?r?@_pthread_cond_broadcast?r?@_pthread_cond_destroy?r?@_pthread_cond_init?r?@_pthread_cond_wait?r?@_pthread_create?r?@_pthread_join?r?@_pthread_mutex_destroy?r?@_pthread_mutex_init?r?@_pthread_mutex_lock?r?@_pthread_mutex_unlock?r?@_pthread_self?r?@_pthread_setschedparam?r?@_pthread_setspecific?r?@_putchar?r?@_puts?r?@_qsort?r?@_realloc?r?@_sched_yield?r?@_sinf?r?@_snprintf?r?@_strcmp?r?@_strdup?r?@_strerror?r?@_strlen?r?@_strncpy?r?@_sysconf?r?@_sysctlbyname?r?@_tanhf?r?@_vDSP_maxv?r?@_vDSP_sve?r?@_vDSP_vadd?r?@_vDSP_vdiv?r?@_vDSP_vmul?r?@_vDSP_vsmul?r?@_vDSP_vsub?r?@_vfprintf?r?@_vm_allocate?r?@_vm_deallocate?r?@_vsnprintf?_?XЌ5??5CLASS_$_GGMLMetalClass	METACLASS_$_GGMLMetalClass??#п#mKsQЫ#??#?#sexsks_xq?#??#s?xxs???#??#nl?xs?1_W2_z3_?4_?????Н???0?1?K???????0?1?K???????#0?K?2_K?3_K?4_?5_?6_K?8_???"??#1_0?2_0?iq?q?tq??y????_inplace?ort?s????_inplace?????_inplace?????????_inplace?cast?inplace?rel_pos?О1?_???П??hape?tride?????max?sort?ange?e_same_s?g?b?cc?dd?r???????_from_buft?buffer?ctx_tensors???-Ш-init?set_n_threads?????lear?opy_tensor???????ignment?loc_size???????????al?base?max_size?size?type?usage?????_tensor?????host?multi_buffer?nit?s_???????c?free?get_?i?name?reset?set_usage???????ignment?loc_size?????al?device?max_size?????alloc_buffer?get_?is_host?name?fer_?t_?las_?uf?	?????from_ptr?	type?	??????????abort_callback?	n_threads?	threadpool?	buffer_?	init?	reg?	set_?	ompare_graph_backend?	pu_?
??????from_host_ptr?
type?
??Џname?type?ackend_reg?
uffer_?
y_?????????_props???????????????buft?op???b?count?description?get?host_buffer_type?init?memory?name?offload_op?supports_?type?Ё_?ice_register?
??????????free?
new?
record?
synchronize?
wait?
????????fault_buffer_type?
vice???alignment?
de?max_size?????_async????_free?mpute?py?????ompute?reate???c?free?co?plan_???et_?raph_?uid???????name?type?est?y_???-????*blas?cpu?metal?nit_b?s_???)??)from_ptr?type???*??)??*??*et_abort_callback?upports_family?buffer_?capture_next_compute?init?s?????alloc_buffer?set_usage?etal_?ulti_buffer_?????????????count?get?????_proc_address???*??by_name?count?dev_?get?metal_init?name???_?ister???У??ackend?uffer_size???????backends?copies?splits???b?n_?tensor_backend????_async?et_?raph_compute?Т???rve?t????eval_callback?tensor_backend???et_?ynchronize?alloc_graph?free?g?new?rese?s?????buft?op???ched_?upports_?ynchronize??????_async?????_async???????_async?alloc?copy?get?memset?set???alloc_?b?	c?
dev?
event_?
free?
g?i?m?name?offload_op?reg?s?tensor_?view_init????_row???????expand?gradient_checkpointing?????backward_?forward_expand?opt_adamw?ackend_?f16_to_fp32?lck_size?uild_?Р??n_repeat?st?????????????1d?2d?3d?4d???_?????_ph?????1_ph?k_p0???_s???????1d?2d_p0?1d?2d?depthwise_2d?transpose_?cat?t?v_????_inplace???n?s?unt_equal?????????????bmi?nni?bf16?v???_?????2?512?_vnni?rm_fma?vx???????ann?uda???????16c?ma?p16_va???????????atmul_int8?etal???????iscv_v?pc?????e3?se3?????s?ve?ycl?????sx?ulkan???
a?blas?c?f?gpublas?kompute?llamafile?m?neon?r?s?v?wasm_simd?get_sve_cnt?has_???u_?y?????_back?????_per_ms?a?lamp?o?p?ross_entropy_loss?ycles?з?_inplace? ???_inplace? inf? zero? е_mask_? й?_inplace?!ag? v?!Н??inplace?!tensor?!??_?!i?!up?!??????_inplace?!ement_size?!u?!????_inplace?"l?!xp?"??????_set_prec?"back?"ext?"???pen?"rmat_name?"???~_row?"????_ref?#?_row?#???_row?#bf16?#fp16?#16_to_fp32?#32_to_?#??Иlash_attn_?"o?"p?#ree?#type_to_ggml_type?#?????????_n?$???_n?$alloc_graph?$free?$get_buffer_size?$new?$reserve?$??????_inplace?%inplace?%quick?%??_?%??.?.4_q8_0?%8_q8_0?%??.4x?%8x8_q8_0?%??-??-4_q8_0?&8_q8_0?&??.4x?&8x8_q8_0?&m_q4_0_?%v_q4_0_?&??И_f32?&????1d?&nd?&?32_?&irst_tensor?&????1d?'nd?'??????buffer?'size?'ax_tensor_size?'em_?'?????ame?'ext_tensor?'o_alloc?'?????_back?(el_pos?(ows?(??Жdata?&f?'i32_?'m?'n?'r?(tensor?(unary_op?(lu?%m?&t_?(????????_with_ctx?)??lear?)ompute?)py?)????mp_dot?)p?)н??????????s?*_nodes?*ode?*????_custom?*????lan?*rint?*??????add_node?)c?)du?)export?)get_tensor?)import?*n?*overhead?*p?*reset?*size?*view?*????_inplace?+aph_?*oup_norm?+Ћallocr_?$e?)r?+uid_matches?+????igmoid?,wish?,??????free?,new?,reset?,??et_?,ize?,rds?,sh_s?,????_back?-??Ѝit?-ternal_get_type_traits?-??????Н0?-1?-2?-Й_?-????????????З
3d?-contiguous?-empty?-matrix?.numa?.permuted?.quantized?.scalar?.transposed?.vector?.m2col?-n?-s_?.???~???{place?/ternal?/??callback_default?/in?/set?/?_?/eaky_relu?/og?/???f32?0inplace_f32?0?????_f32?0f32?0inplace?0??_?0??????_f32?0f32?0inplace?0н_?0з???_f32?1f32?1inplace?1??_?11?02?13?1?Яf32?1inplace_f32?1binary_?0custom?1unary_?1????K??5end?2start?2an?2tallib_?2?????id?2set_prec?2??_?2inplace?2mat?2??_?2ap_?1e?2ul?3??В??_pad?3????_inplace?3????????_custom?3??????????1d?42d?43d?44d?4?_?4f32?3graph?3i32?3tensor?4g?3lements?3w_?4????_inplace?4????_dims?3bytes?3e?4orm?4rows?5uma_init?5??????desc?5name?5symbol?5????????_g?5??default_params?5init?5resume?5step_adamw?6??_?6_?5t?6??p?6ut_prod?6??Щ??????_back?61d?62d?6????s?7ad?6ermute?6ool_?7rint_object?7?????chunk?7free?7init?7requires_imatrix?7????_inplace?8????_back?8????????1d?82d?83d?84d?8??_?8lu?8peat?8shape?8????back?9inplace?9??_?9??????_inplace?9????_inplace?9????back?9custom?9ext?9inplace?9yarn_corr_dims?9??_?9?pe?:w_size?:??e?8ms_norm?9o?:wkv_wkv?:??Ѐ_inplace?:Ї??_inplace?;????_inplace?;А?1d?;nd?;??_?;????1d?;nd?;??_?;????lace?;ut?;32?;np?;?????ame?????back?>ext?>inplace?>к_?>?????_inplace?>?_inplace?>t?>????conv??scan???~????_inplace??atus_to_string??ep?????_inplace??????_rows?@b??m?@	cale?:et?=gn?=i?>oft_max?>qr??sm_??t??u?@??\????alloc?@new?@????_inplace?@ble_f32_f16?@llocr_?@nh?@????????????default?Ainit?Amatch?A??rams_?Ause?A??free?Anew?Apa?Aresume?B????Ќinit?Bms?Bus?B??_?Bstep_embedding?B????????f?Bname?Bsize?Ba?Aensor_overhead?Ahreadpool_?Bime?Bop_k?Branspose?Bype_?C????inplace?Cop_name?C??_?C??ary?Cravel_index?D????_ext?D??n?Dpscale?Dsed_mem?D??(??$??$m_q8_K?Ds_q8_K?D??$??$??$s_q8_K?Exs_q8_K?Es_q8_K?Dx?E??$??$s_q8_K?Exxs_q8_K?E??$??$nl_q8_0?Exs_q8_K?E1_?D2_?E3_?E4_?EБ$?$??#??#?$0_q8_0?F1_q8_1?FK_q8_K?F??#??$??$0_q8_0?F1_q8_1?FK_q8_K?F??$??$2_K_q8_K?F3_K_q8_K?F4_?F5_?F6_K_q8_K?F8_0_q8_0?F??$??$1_0_q8_K?G2_0_q8_K?Giq?Eq?Gtq?G?????????1d?G2d?G3d?G4d?Gtensor?Halidate_row_data?Dec_dot_?Giew_?H????part?Hunpart?Ha?b?c? d?!e?"f?#g?,ha?,i?/l?/m?3n?5o?6p?7quantize_?7r?:s?@t?Cu?Dv?Hwin_?H??????key?Itensor?I??ind_?Iree?I??????????data?Jn?Jstr?Jtype?Jlignment?Jrr_?J????_offset?J????ey?Jv_type?J????data?Ksize?K????kv?Ktensors?K??????name?Koffset?Ktype?K????????32?K64?K????????16?L32?L64?L8?L??????????16?L32?L64?L8?Lbool?Kdata?Kf?Li?Lstr?Lu?L??al_?Lersion?Ma?Jdata?Jk?Jmeta_?Kn_?Ktensor_?Kv?M?иempty?Mfrom_file?M??????data?Mstr?M??????data?Ntype?NЉ????32?N64?N????????16?N32?N64?N8?N??????????16?O32?O64?O8?Obool?Nf?Ni?Nstr?Ou?Oarr_?Nkv?Ntensor_?Nval_?O????add_tensor?If?Iget_?Minit_?Mremove_key?Mset_?Otype_name?Owrite_to_file?Oml_?Huf_?O??%??$free_impl?Pinit_impl?P??&??&free_impl?Qinit_impl?Q2xs_?P3xs_?Q??'??&m?Qs?Q??(??%??%s?Qxs?Qs?Qx?Q??&??&s?Qxxs?Q??'??(nl?Rxs?R1_?Q2_?Q3_?Q4_?R??-??????-??-4?R8?R??-4x?R8x8?R??!_?R??!??0?R1?RK?S?"?"??0?S1?SK?S????-??-4?S8?S??"_4x?S2_K?R3_K?R4_?S5_?S6_K?S8_0?S??(??(_ref?T??&??&_ref?T??&??&_ref?Ts?Txxs?T??(Г(_ref?T?(??(_ref?Tnl?Txs?T2_s?T3_?T4_?T????_ref?U????_ref?U????_ref?U????_ref?U????_ref?U0?U1?UK?U????_ref?U????_ref?V????_ref?V0?V1?VK?V???_ref?V????_ref?V????_ref?V??#??#_ref?V0?V1?VK?W2_K?U3_K?U4_?U5_?V6_K?V8_?W??"??"_ref?W??"??"_ref?W1_0?W2_0?Wiq?Tq?Wtq?W??"??"1_0?X2_0?Xiq?Rmat_q8_0?Rq?Srow_?Wtq?XOBJC_dequantize_row_?gg?Piq?Qquantize_?X?y??00  @????? PPp00?  ?  ?@@0    00 0  0P ????00@@???
 0?@@?0P``???? ??????????p?p`@???? ? ???@?@?@?@?@?@??p??????????????????@???p?p??P??0??? ? 00  ?``??????????????????`?`? ? @?@?@    ?????????0P???? ????@??0 ??
?????p??p????????????????`? 0???`?`??p? `@?0p@?@@???`????????????????p?` ?p? ??pp? PPpp?pppppppppppp?p   ?????????????????????@?0??????????	?#????? ??"??p??0?   `00    ` ? 0    ????? @@@0000??  @@@ ??????`??``pp???? `pp??? ?p???aP?`?
 @`??????	?@?P@P0@    ` @??0?   P??? ?p@???	??
??????$??????????:?*??*?-??,?'?
?????$??*`?	?``??
?????????	???????????????????????? 0??4?E?0???,?4  ?4?5??)??????@  ?2??0??p?
?У pp`??  P ??
  ????? `??"?@P0??P??0?????????,    ?A?]?A`??A???A@??A ??A??A??A`?	B??Bp?,B@?Vpf?V`g?V?pg'W?g?W?g9Xh?X@hcYidZ?i^[P?|[p??[???[???[б\`?\x?6\нF\P?S\P?a\??m\??x\??\??\??\?[?\?[?\?_?\?a?\?e]?u>]?}Y]?t]???]???]؅9^??L^??_^??r^???^??^??^(??^8??^L??^`??^t?_??_??3_??G_??[_??o_???_@??_P??_`??_???_?
?_?
?_ 
?_?
` 
%`?
N`?
p`H
?`?
?`
?`??
?`?
?`@
?ap
b?C
4bD
Ub?F
db?F
vb?F
?b?F
?b?F
cG
(c`G
FcpG
kcP?tc?:?c?:?c?:?c?:?c?:?c?:#d?:gd?:{d;?d ;?d8;e@;he?;?e?;?eP<?e?<?e?<f?<PF
(F
@P?V??l???0??p?????0?????@?
0?"??7ЎL@?ap
v??@???A?@v?p??P??@?
?? ?<,?6??H ?R?dP?n??y??@??0??@???@???O?P?p?,??G??g ???S?PT????0??? p?C??g ???????????p?P?=??Z`????????????? ?6`?T?t@?????`a?p
??	@"08
]0}?????????p?5M??k??????????????p?	??$	??D	@?b	??y	??	???	p??	???	??
0?
??/
??K
??q
???
???
???
??
?V?
 a??;?[P?y`??	?0???0T??
?^
@\
`?
? d
??
?p?
?
??:
??M
??f
??
0?
 ??
0??
??
@?@?
$?;`?R?Hr???Q?R??Q??Q?Q4?S[?J}?J?P??p??QpR@?H`P?|?????pU????p???p?=??Y??r???T????0B?I??2??*+0gF?g\PPm`?x@???????? ????????????p?? ?`?0?)??A ?Y??t??~ ??P???$??#??"?#?#@#" #<0#V?"m?#?@$??#??#?P#??#?`$?$
P$%?$??#S`#f?#|0$?p$??$?p#? $??$?$?#@?#?"<0#Z?Fg?F{???p?????`???????М??Ў ?x1?KD?N?`?j?|P???? ???F????p??@
?? ?D7?CR??e?@|U?PL?p????????`??@?`?'`???Jв]?nг?@?????0??0{?0?P?,`????P0?a`]x {??~?@\? \?0\?p???]\p
&??5??I0?ZPKm`o??n????0]??.?p|? l??^
 ^$?l7PoK?n\@oni??h?q?{?`l??n??k???к ?E3?E ?U`*i?'|@*?@)???? ??0Q??F?L??L
?M 0N6?NL?O[?KkpGypO??J??K??L??K???`??????=-?$;`P?m???? ?????? 0- ? ? ?U ?!o `? `? ?? `?? O?? ?G
? ?? ??!p?!?+!??B! LO!?H\!PIm!?w!??!@H?!?n?!?k?!?i?! e?!?]?!?c"d"`d)"?d="?H"p?["`Hg"@Gw" K?"?J?"?J?"@??"???"???"`??"@??"$#?#??'#??5#??C#??Q#@?d#?Gw#?G?#`??#???#`??#@??#??#?$?$@?%$??3$?D$??U$@?f$??w$??$??$p??$??$ ??$???$??$??%??%`?1%?&K%?IZ%?i%P?u%???%???%???%???%??% ??%po?%P??%??&?e&?&&`?7&??I&??Y&??h&??w&\?&???&???&?[?&?x?&??&??&??&б'?'?''д:' ?D'`?V'P?e'0?y'p??' ??'??'???' ??'???'???'p?(?(@?.(?9(?L(?V(?h(??r(??(?<?(???(??(??(??(?L?(?o)?{)?z:)zW)P{u)?p?)?p?)?E?)F?)PF?)???)???)??*pJ*0I%*0J6*ЧB*ШV*Kj*`z~*P??*???*?[?*?/
?*`)	?*?&	?*?	+?	*+?	E+p#	^+` 	y+?-	?+?1	?+?	?+?
	?+ ??+??
,?
	%,??=,?	U,?	m,?	?,?	?,	?,?	?,???, ??,??,??-??-?(-?	9-0J-?Y-??k-P?v-???-??-??-???-???-???-???-?.P?.0"+.?!?.??N.??b.`?x.???.???.`??.@??.???.???.??/0?/??&/??7/??I/P?[/p?m/?/p??/???/???/P??/???/?/	?/ 00!0?70?J0p\0?n0@??0`??0??0 ??0??00??0P??0??0?1??1 21?E	C1P5	T1`?	e1`?	v1??	?1@?	?1`
?1?`	?1?F	?1?	?1?	?1??	?1?

2?q 2??/2 ?>2nM2r`2us2?w?2@|?2??2p??2p??20G?2p?2???2?i3?m3?/
)3p/
A3?	U3 ?	m3У	?3?	?3?	
?3?

?3?
?3p
?3??4 ?#4?640?M4?w`4?rw4p{?4?w?4??4@??4???4?{?40?5??5 G25?*I5`\5`]s5`??5@??5@??5???5??5???5`?6 ?6p?16?I6??Y6?i6|6?6?6?6?6767M7d7x7?7?7?7?7?78(8I8?8?8?8?829d9?9?9?9?9:3:N:~:?:?:?:?:?:;*;H;r;?;?;?;?;?;?;?;?;<<,<?<P<f<y<?<?<?<?<?<?<?<===*=K=^=e=m=@?=?=?=?=?=?=?=?=?=?=?=>>!>(>/>6><>C>J>R>Z>b>h>o>u>~>?>?>?>?>?>?>?>?>??(?8?F?T?d?j?r???????????????@#@9@G@^@s@|@?@?@?@?@?@?@?@?@?@?@?@?@?@?@A
AA#A.A:AEAOA\AkAvAvw????????????????????????????????????????????????????????????????????????????????????????????????????????????	

????????????????????vw????????????????????????????????????????????????????????????????????????????????????????????????????????	

 _OBJC_CLASS_$_GGMLMetalClass_OBJC_METACLASS_$_GGMLMetalClass_dequantize_row_iq1_m_dequantize_row_iq1_s_dequantize_row_iq2_s_dequantize_row_iq2_xs_dequantize_row_iq2_xxs_dequantize_row_iq3_s_dequantize_row_iq3_xxs_dequantize_row_iq4_nl_dequantize_row_iq4_xs_dequantize_row_q2_K_dequantize_row_q3_K_dequantize_row_q4_0_dequantize_row_q4_1_dequantize_row_q4_K_dequantize_row_q5_0_dequantize_row_q5_1_dequantize_row_q5_K_dequantize_row_q6_K_dequantize_row_q8_0_dequantize_row_q8_K_dequantize_row_tq1_0_dequantize_row_tq2_0_ggml_abort_ggml_abs_ggml_abs_inplace_ggml_acc_ggml_acc_inplace_ggml_add_ggml_add1_ggml_add1_inplace_ggml_add_cast_ggml_add_inplace_ggml_add_rel_pos_ggml_add_rel_pos_inplace_ggml_arange_ggml_are_same_shape_ggml_are_same_stride_ggml_argmax_ggml_argsort_ggml_backend_alloc_buffer_ggml_backend_alloc_ctx_tensors_ggml_backend_alloc_ctx_tensors_from_buft_ggml_backend_blas_init_ggml_backend_blas_set_n_threads_ggml_backend_buffer_clear_ggml_backend_buffer_copy_tensor_ggml_backend_buffer_free_ggml_backend_buffer_get_alignment_ggml_backend_buffer_get_alloc_size_ggml_backend_buffer_get_base_ggml_backend_buffer_get_max_size_ggml_backend_buffer_get_size_ggml_backend_buffer_get_type_ggml_backend_buffer_get_usage_ggml_backend_buffer_init_ggml_backend_buffer_init_tensor_ggml_backend_buffer_is_host_ggml_backend_buffer_is_multi_buffer_ggml_backend_buffer_name_ggml_backend_buffer_reset_ggml_backend_buffer_set_usage_ggml_backend_buft_alloc_buffer_ggml_backend_buft_get_alignment_ggml_backend_buft_get_alloc_size_ggml_backend_buft_get_device_ggml_backend_buft_get_max_size_ggml_backend_buft_is_host_ggml_backend_buft_name_ggml_backend_compare_graph_backend_ggml_backend_cpu_buffer_from_ptr_ggml_backend_cpu_buffer_type_ggml_backend_cpu_init_ggml_backend_cpu_reg_ggml_backend_cpu_set_abort_callback_ggml_backend_cpu_set_n_threads_ggml_backend_cpu_set_threadpool_ggml_backend_dev_backend_reg_ggml_backend_dev_buffer_from_host_ptr_ggml_backend_dev_buffer_type_ggml_backend_dev_by_name_ggml_backend_dev_by_type_ggml_backend_dev_count_ggml_backend_dev_description_ggml_backend_dev_get_ggml_backend_dev_get_props_ggml_backend_dev_host_buffer_type_ggml_backend_dev_init_ggml_backend_dev_memory_ggml_backend_dev_name_ggml_backend_dev_offload_op_ggml_backend_dev_supports_buft_ggml_backend_dev_supports_op_ggml_backend_dev_type_ggml_backend_device_register_ggml_backend_event_free_ggml_backend_event_new_ggml_backend_event_record_ggml_backend_event_synchronize_ggml_backend_event_wait_ggml_backend_free_ggml_backend_get_alignment_ggml_backend_get_default_buffer_type_ggml_backend_get_device_ggml_backend_get_max_size_ggml_backend_graph_compute_ggml_backend_graph_compute_async_ggml_backend_graph_copy_ggml_backend_graph_copy_free_ggml_backend_graph_plan_compute_ggml_backend_graph_plan_create_ggml_backend_graph_plan_free_ggml_backend_guid_ggml_backend_init_best_ggml_backend_init_by_name_ggml_backend_init_by_type_ggml_backend_is_blas_ggml_backend_is_cpu_ggml_backend_is_metal_ggml_backend_metal_buffer_from_ptr_ggml_backend_metal_buffer_type_ggml_backend_metal_capture_next_compute_ggml_backend_metal_init_ggml_backend_metal_set_abort_callback_ggml_backend_metal_supports_family_ggml_backend_multi_buffer_alloc_buffer_ggml_backend_multi_buffer_set_usage_ggml_backend_name_ggml_backend_offload_op_ggml_backend_reg_by_name_ggml_backend_reg_count_ggml_backend_reg_dev_count_ggml_backend_reg_dev_get_ggml_backend_reg_get_ggml_backend_reg_get_proc_address_ggml_backend_reg_metal_init_ggml_backend_reg_name_ggml_backend_register_ggml_backend_sched_alloc_graph_ggml_backend_sched_free_ggml_backend_sched_get_backend_ggml_backend_sched_get_buffer_size_ggml_backend_sched_get_n_backends_ggml_backend_sched_get_n_copies_ggml_backend_sched_get_n_splits_ggml_backend_sched_get_tensor_backend_ggml_backend_sched_graph_compute_ggml_backend_sched_graph_compute_async_ggml_backend_sched_new_ggml_backend_sched_reserve_ggml_backend_sched_reset_ggml_backend_sched_set_eval_callback_ggml_backend_sched_set_tensor_backend_ggml_backend_sched_synchronize_ggml_backend_supports_buft_ggml_backend_supports_op_ggml_backend_synchronize_ggml_backend_tensor_alloc_ggml_backend_tensor_copy_ggml_backend_tensor_copy_async_ggml_backend_tensor_get_ggml_backend_tensor_get_async_ggml_backend_tensor_memset_ggml_backend_tensor_set_ggml_backend_tensor_set_async_ggml_backend_view_init_ggml_bf16_to_fp32_ggml_bf16_to_fp32_row_ggml_blck_size_ggml_build_backward_expand_ggml_build_backward_gradient_checkpointing_ggml_build_forward_expand_ggml_build_opt_adamw_ggml_can_repeat_ggml_cast_ggml_clamp_ggml_concat_ggml_cont_ggml_cont_1d_ggml_cont_2d_ggml_cont_3d_ggml_cont_4d_ggml_conv_1d_ggml_conv_1d_ph_ggml_conv_2d_ggml_conv_2d_s1_ph_ggml_conv_2d_sk_p0_ggml_conv_depthwise_2d_ggml_conv_transpose_1d_ggml_conv_transpose_2d_p0_ggml_cos_ggml_cos_inplace_ggml_count_equal_ggml_cpu_get_sve_cnt_ggml_cpu_has_arm_fma_ggml_cpu_has_avx_ggml_cpu_has_avx2_ggml_cpu_has_avx512_ggml_cpu_has_avx512_bf16_ggml_cpu_has_avx512_vbmi_ggml_cpu_has_avx512_vnni_ggml_cpu_has_avx_vnni_ggml_cpu_has_blas_ggml_cpu_has_cann_ggml_cpu_has_cuda_ggml_cpu_has_f16c_ggml_cpu_has_fma_ggml_cpu_has_fp16_va_ggml_cpu_has_gpublas_ggml_cpu_has_kompute_ggml_cpu_has_llamafile_ggml_cpu_has_matmul_int8_ggml_cpu_has_metal_ggml_cpu_has_neon_ggml_cpu_has_riscv_v_ggml_cpu_has_rpc_ggml_cpu_has_sse3_ggml_cpu_has_ssse3_ggml_cpu_has_sve_ggml_cpu_has_sycl_ggml_cpu_has_vsx_ggml_cpu_has_vulkan_ggml_cpu_has_wasm_simd_ggml_cpy_ggml_cross_entropy_loss_ggml_cross_entropy_loss_back_ggml_cycles_ggml_cycles_per_ms_ggml_diag_ggml_diag_mask_inf_ggml_diag_mask_inf_inplace_ggml_diag_mask_zero_ggml_diag_mask_zero_inplace_ggml_div_ggml_div_inplace_ggml_dup_ggml_dup_inplace_ggml_dup_tensor_ggml_element_size_ggml_elu_ggml_elu_inplace_ggml_exp_ggml_exp_inplace_ggml_flash_attn_back_ggml_flash_attn_ext_ggml_flash_attn_ext_set_prec_ggml_fopen_ggml_format_name_ggml_fp16_to_fp32_ggml_fp16_to_fp32_row_ggml_fp32_to_bf16_ggml_fp32_to_bf16_row_ggml_fp32_to_bf16_row_ref_ggml_fp32_to_fp16_ggml_fp32_to_fp16_row_ggml_free_ggml_ftype_to_ggml_type_ggml_gallocr_alloc_graph_ggml_gallocr_free_ggml_gallocr_get_buffer_size_ggml_gallocr_new_ggml_gallocr_new_n_ggml_gallocr_reserve_ggml_gallocr_reserve_n_ggml_gelu_ggml_gelu_inplace_ggml_gelu_quick_ggml_gelu_quick_inplace_ggml_gemm_q4_0_4x4_q8_0_ggml_gemm_q4_0_4x8_q8_0_ggml_gemm_q4_0_8x8_q8_0_ggml_gemv_q4_0_4x4_q8_0_ggml_gemv_q4_0_4x8_q8_0_ggml_gemv_q4_0_8x8_q8_0_ggml_get_data_ggml_get_data_f32_ggml_get_f32_1d_ggml_get_f32_nd_ggml_get_first_tensor_ggml_get_i32_1d_ggml_get_i32_nd_ggml_get_max_tensor_size_ggml_get_mem_buffer_ggml_get_mem_size_ggml_get_name_ggml_get_next_tensor_ggml_get_no_alloc_ggml_get_rel_pos_ggml_get_rows_ggml_get_rows_back_ggml_get_tensor_ggml_get_unary_op_ggml_graph_add_node_ggml_graph_clear_ggml_graph_compute_ggml_graph_compute_with_ctx_ggml_graph_cpy_ggml_graph_dump_dot_ggml_graph_dup_ggml_graph_export_ggml_graph_get_tensor_ggml_graph_import_ggml_graph_n_nodes_ggml_graph_node_ggml_graph_nodes_ggml_graph_overhead_ggml_graph_overhead_custom_ggml_graph_plan_ggml_graph_print_ggml_graph_reset_ggml_graph_size_ggml_graph_view_ggml_group_norm_ggml_group_norm_inplace_ggml_guid_matches_ggml_hardsigmoid_ggml_hardswish_ggml_hash_set_free_ggml_hash_set_new_ggml_hash_set_reset_ggml_hash_size_ggml_im2col_ggml_im2col_back_ggml_init_ggml_internal_get_type_traits_ggml_is_3d_ggml_is_contiguous_ggml_is_contiguous_0_ggml_is_contiguous_1_ggml_is_contiguous_2_ggml_is_empty_ggml_is_matrix_ggml_is_numa_ggml_is_permuted_ggml_is_quantized_ggml_is_scalar_ggml_is_transposed_ggml_is_vector_ggml_leaky_relu_ggml_log_ggml_log_callback_default_ggml_log_inplace_ggml_log_internal_ggml_log_set_ggml_map_binary_f32_ggml_map_binary_inplace_f32_ggml_map_custom1_ggml_map_custom1_f32_ggml_map_custom1_inplace_ggml_map_custom1_inplace_f32_ggml_map_custom2_ggml_map_custom2_f32_ggml_map_custom2_inplace_ggml_map_custom2_inplace_f32_ggml_map_custom3_ggml_map_custom3_f32_ggml_map_custom3_inplace_ggml_map_custom3_inplace_f32_ggml_map_unary_f32_ggml_map_unary_inplace_f32_ggml_mean_ggml_metallib_end_ggml_metallib_start_ggml_mul_ggml_mul_inplace_ggml_mul_mat_ggml_mul_mat_id_ggml_mul_mat_set_prec_ggml_n_dims_ggml_nbytes_ggml_nbytes_pad_ggml_neg_ggml_neg_inplace_ggml_nelements_ggml_new_f32_ggml_new_graph_ggml_new_graph_custom_ggml_new_i32_ggml_new_tensor_ggml_new_tensor_1d_ggml_new_tensor_2d_ggml_new_tensor_3d_ggml_new_tensor_4d_ggml_norm_ggml_norm_inplace_ggml_nrows_ggml_numa_init_ggml_op_desc_ggml_op_name_ggml_op_symbol_ggml_opt_ggml_opt_default_params_ggml_opt_init_ggml_opt_resume_ggml_opt_resume_g_ggml_opt_step_adamw_ggml_out_prod_ggml_pad_ggml_permute_ggml_pool_1d_ggml_pool_2d_ggml_pool_2d_back_ggml_print_object_ggml_print_objects_ggml_quantize_chunk_ggml_quantize_free_ggml_quantize_init_ggml_quantize_requires_imatrix_ggml_relu_ggml_relu_inplace_ggml_repeat_ggml_repeat_back_ggml_reshape_ggml_reshape_1d_ggml_reshape_2d_ggml_reshape_3d_ggml_reshape_4d_ggml_rms_norm_ggml_rms_norm_back_ggml_rms_norm_inplace_ggml_rope_ggml_rope_back_ggml_rope_custom_ggml_rope_custom_inplace_ggml_rope_ext_ggml_rope_ext_inplace_ggml_rope_inplace_ggml_rope_yarn_corr_dims_ggml_row_size_ggml_rwkv_wkv_ggml_scale_ggml_scale_inplace_ggml_set_ggml_set_1d_ggml_set_1d_inplace_ggml_set_2d_ggml_set_2d_inplace_ggml_set_f32_ggml_set_f32_1d_ggml_set_f32_nd_ggml_set_i32_ggml_set_i32_1d_ggml_set_i32_nd_ggml_set_inplace_ggml_set_input_ggml_set_loss_ggml_set_name_ggml_set_no_alloc_ggml_set_output_ggml_set_param_ggml_set_scratch_ggml_set_zero_ggml_sgn_ggml_sgn_inplace_ggml_sigmoid_ggml_sigmoid_inplace_ggml_silu_ggml_silu_back_ggml_silu_inplace_ggml_sin_ggml_sin_inplace_ggml_soft_max_ggml_soft_max_back_ggml_soft_max_back_inplace_ggml_soft_max_ext_ggml_soft_max_inplace_ggml_sqr_ggml_sqr_inplace_ggml_sqrt_ggml_sqrt_inplace_ggml_ssm_conv_ggml_ssm_scan_ggml_status_to_string_ggml_step_ggml_step_inplace_ggml_sub_ggml_sub_inplace_ggml_sum_ggml_sum_rows_ggml_table_f32_f16_ggml_tallocr_alloc_ggml_tallocr_new_ggml_tanh_ggml_tanh_inplace_ggml_tensor_overhead_ggml_threadpool_free_ggml_threadpool_new_ggml_threadpool_params_default_ggml_threadpool_params_init_ggml_threadpool_params_match_ggml_threadpool_pause_ggml_threadpool_resume_ggml_time_init_ggml_time_ms_ggml_time_us_ggml_timestep_embedding_ggml_top_k_ggml_transpose_ggml_type_name_ggml_type_size_ggml_type_sizef_ggml_unary_ggml_unary_inplace_ggml_unary_op_name_ggml_unravel_index_ggml_upscale_ggml_upscale_ext_ggml_used_mem_ggml_validate_row_data_ggml_vec_dot_iq1_m_q8_K_ggml_vec_dot_iq1_s_q8_K_ggml_vec_dot_iq2_s_q8_K_ggml_vec_dot_iq2_xs_q8_K_ggml_vec_dot_iq2_xxs_q8_K_ggml_vec_dot_iq3_s_q8_K_ggml_vec_dot_iq3_xxs_q8_K_ggml_vec_dot_iq4_nl_q8_0_ggml_vec_dot_iq4_xs_q8_K_ggml_vec_dot_q2_K_q8_K_ggml_vec_dot_q3_K_q8_K_ggml_vec_dot_q4_0_q8_0_ggml_vec_dot_q4_1_q8_1_ggml_vec_dot_q4_K_q8_K_ggml_vec_dot_q5_0_q8_0_ggml_vec_dot_q5_1_q8_1_ggml_vec_dot_q5_K_q8_K_ggml_vec_dot_q6_K_q8_K_ggml_vec_dot_q8_0_q8_0_ggml_vec_dot_tq1_0_q8_K_ggml_vec_dot_tq2_0_q8_K_ggml_view_1d_ggml_view_2d_ggml_view_3d_ggml_view_4d_ggml_view_tensor_ggml_win_part_ggml_win_unpart_gguf_add_tensor_gguf_find_key_gguf_find_tensor_gguf_free_gguf_get_alignment_gguf_get_arr_data_gguf_get_arr_n_gguf_get_arr_str_gguf_get_arr_type_gguf_get_data_gguf_get_data_offset_gguf_get_key_gguf_get_kv_type_gguf_get_meta_data_gguf_get_meta_size_gguf_get_n_kv_gguf_get_n_tensors_gguf_get_tensor_name_gguf_get_tensor_offset_gguf_get_tensor_type_gguf_get_val_bool_gguf_get_val_data_gguf_get_val_f32_gguf_get_val_f64_gguf_get_val_i16_gguf_get_val_i32_gguf_get_val_i64_gguf_get_val_i8_gguf_get_val_str_gguf_get_val_u16_gguf_get_val_u32_gguf_get_val_u64_gguf_get_val_u8_gguf_get_version_gguf_init_empty_gguf_init_from_file_gguf_remove_key_gguf_set_arr_data_gguf_set_arr_str_gguf_set_kv_gguf_set_tensor_data_gguf_set_tensor_type_gguf_set_val_bool_gguf_set_val_f32_gguf_set_val_f64_gguf_set_val_i16_gguf_set_val_i32_gguf_set_val_i64_gguf_set_val_i8_gguf_set_val_str_gguf_set_val_u16_gguf_set_val_u32_gguf_set_val_u64_gguf_set_val_u8_gguf_type_name_gguf_write_to_file_iq2xs_free_impl_iq2xs_init_impl_iq3xs_free_impl_iq3xs_init_impl_quantize_iq1_m_quantize_iq1_s_quantize_iq2_s_quantize_iq2_xs_quantize_iq2_xxs_quantize_iq3_s_quantize_iq3_xxs_quantize_iq4_nl_quantize_iq4_xs_quantize_mat_q8_0_quantize_q2_K_quantize_q3_K_quantize_q4_0_quantize_q4_0_4x4_quantize_q4_0_4x8_quantize_q4_0_8x8_quantize_q4_1_quantize_q4_K_quantize_q5_0_quantize_q5_1_quantize_q5_K_quantize_q6_K_quantize_q8_0_quantize_q8_0_4x4_quantize_q8_0_4x8_quantize_row_iq2_s_quantize_row_iq2_s_ref_quantize_row_iq3_s_quantize_row_iq3_s_ref_quantize_row_iq3_xxs_quantize_row_iq3_xxs_ref_quantize_row_iq4_nl_quantize_row_iq4_nl_ref_quantize_row_iq4_xs_quantize_row_iq4_xs_ref_quantize_row_q2_K_quantize_row_q2_K_ref_quantize_row_q3_K_quantize_row_q3_K_ref_quantize_row_q4_0_quantize_row_q4_0_ref_quantize_row_q4_1_quantize_row_q4_1_ref_quantize_row_q4_K_quantize_row_q4_K_ref_quantize_row_q5_0_quantize_row_q5_0_ref_quantize_row_q5_1_quantize_row_q5_1_ref_quantize_row_q5_K_quantize_row_q5_K_ref_quantize_row_q6_K_quantize_row_q6_K_ref_quantize_row_q8_0_quantize_row_q8_0_ref_quantize_row_q8_1_quantize_row_q8_1_ref_quantize_row_q8_K_quantize_row_q8_K_ref_quantize_row_tq1_0_quantize_row_tq1_0_ref_quantize_row_tq2_0_quantize_row_tq2_0_ref_quantize_tq1_0_quantize_tq2_0_MTLCopyAllDevices_MTLCreateSystemDefaultDevice_OBJC_CLASS_$_MTLCaptureDescriptor_OBJC_CLASS_$_MTLCaptureManager_OBJC_CLASS_$_MTLCompileOptions_OBJC_CLASS_$_NSBundle_OBJC_CLASS_$_NSMutableDictionary_OBJC_CLASS_$_NSObject_OBJC_CLASS_$_NSString_OBJC_CLASS_$_NSURL_OBJC_METACLASS_$_NSObject__NSConcreteStackBlock__Unwind_Resume__ZNSt11logic_errorC2EPKc__ZNSt12length_errorD1Ev__ZNSt13exception_ptrD1Ev__ZNSt20bad_array_new_lengthC1Ev__ZNSt20bad_array_new_lengthD1Ev__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc__ZNSt3__114__shared_countD2Ev__ZNSt3__115__thread_structC1Ev__ZNSt3__115__thread_structD1Ev__ZNSt3__117__assoc_sub_state13set_exceptionESt13exception_ptr__ZNSt3__117__assoc_sub_state16__on_zero_sharedEv__ZNSt3__117__assoc_sub_state4waitEv__ZNSt3__117__assoc_sub_state9set_valueEv__ZNSt3__118condition_variableD1Ev__ZNSt3__119__thread_local_dataEv__ZNSt3__120__throw_system_errorEiPKc__ZNSt3__15mutexD1Ev__ZNSt3__16futureIvE3getEv__ZNSt3__16futureIvEC1EPNS_17__assoc_sub_stateE__ZNSt3__16futureIvED1Ev__ZNSt3__16thread6detachEv__ZNSt3__16threadD1Ev__ZSt17current_exceptionv__ZSt9terminatev__ZTINSt3__117__assoc_sub_stateE__ZTISt12length_error__ZTISt20bad_array_new_length__ZTVN10__cxxabiv120__si_class_type_infoE__ZTVNSt3__117__assoc_sub_stateE__ZTVSt12length_error__ZdaPv__ZdlPv__Znam__Znwm___CFConstantStringClassReference____chkstk_darwin___bzero___cxa_allocate_exception___cxa_atexit___cxa_begin_catch___cxa_end_catch___cxa_free_exception___cxa_guard_abort___cxa_guard_acquire___cxa_guard_release___cxa_rethrow___cxa_throw___error___gxx_personality_v0___sincosf_stret___stack_chk_fail___stack_chk_guard___stderrp___stdoutp__dispatch_queue_attr_concurrent__objc_empty_cache_abort_calloc_cblas_sgemm$NEWLAPACK$ILP64_clock_clock_gettime_cosf_dispatch_apply_dispatch_queue_create_dispatch_release_exp2f_expf_expm1f_fclose_fflush_fopen$DARWIN_EXTSN_fprintf_fputc_fputs_fread_free_fseek_ftell_fwrite_getenv_log1pf_log2_log2f_logf_lroundf_mach_task_self__malloc_memcmp_memcpy_memset_memset_pattern16_objc_alloc_objc_autoreleasePoolPop_objc_autoreleasePoolPush_objc_enumerationMutation_objc_msgSend_objc_opt_class_objc_opt_new_objc_release_posix_memalign_powf_printf_pthread_cond_broadcast_pthread_cond_destroy_pthread_cond_init_pthread_cond_wait_pthread_create_pthread_join_pthread_mutex_destroy_pthread_mutex_init_pthread_mutex_lock_pthread_mutex_unlock_pthread_self_pthread_setschedparam_pthread_setspecific_putchar_puts_qsort_realloc_sched_yield_sinf_snprintf_strcmp_strdup_strerror_strlen_strncpy_sysconf_sysctlbyname_tanhf_vDSP_maxv_vDSP_sve_vDSP_vadd_vDSP_vdiv_vDSP_vmul_vDSP_vsmul_vDSP_vsub_vfprintf_vm_allocate_vm_deallocate_vsnprintfdyld_stub_binder_ggml_new_tensor_impl_ggml_add_impl_ggml_add1_impl_ggml_acc_impl_ggml_sub_impl_ggml_mul_impl_ggml_div_impl_ggml_scale_impl_ggml_set_impl_ggml_soft_max_impl_ggml_rope_impl_ggml_upscale_impl_ggml_add_rel_pos_impl_ggml_map_binary_impl_f32_ggml_calloc_ggml_recompute_graph_node_ggml_threadpool_new_impl_ggml_graph_compute_thread_gguf_fread_str_gguf_free_kv_gguf_write_to_buf_ggml_vec_dot_f32_ggml_vec_dot_f16_ggml_vec_dot_bf16_ggml_visit_parents_ggml_add_or_set_ggml_sub_or_set_ggml_graph_compute_secondary_thread_ggml_compute_forward_dup_ggml_compute_forward_diag_mask_f32_ggml_compute_forward_rope_f16_ggml_compute_forward_rope_f32_gguf_bwrite_str_ggml_gallocr_hash_get_alloc_tensor_range_ggml_gallocr_allocate_node__ZN21ggml_backend_registry16register_backendEP16ggml_backend_reg__ZN21ggml_backend_registry15register_deviceEP19ggml_backend_device__ZL37ggml_backend_cpu_buffer_type_get_nameP24ggml_backend_buffer_type__ZL41ggml_backend_cpu_buffer_type_alloc_bufferP24ggml_backend_buffer_typem__ZL42ggml_backend_cpu_buffer_type_get_alignmentP24ggml_backend_buffer_type__ZL36ggml_backend_cpu_buffer_type_is_hostP24ggml_backend_buffer_type__ZL29ggml_backend_cpu_reg_get_nameP16ggml_backend_reg__ZL37ggml_backend_cpu_reg_get_device_countP16ggml_backend_reg__ZL31ggml_backend_cpu_reg_get_deviceP16ggml_backend_regm__ZL34ggml_backend_multi_buffer_get_nameP19ggml_backend_buffer__ZL30ggml_backend_sched_split_graphP18ggml_backend_schedP11ggml_cgraph__ZL21graph_copy_dup_tensor13ggml_hash_setPP11ggml_tensorP12ggml_contextS4_S1___ZL22graph_copy_init_tensorP13ggml_hash_setPP11ggml_tensorPbS2___ZN21ggml_backend_registryC1Ev__ZN21ggml_backend_registryD1Ev__ZNKSt3__16vectorIP16ggml_backend_regNS_9allocatorIS2_EEE20__throw_length_errorB7v160006Ev__ZNSt3__120__throw_length_errorB7v160006EPKc__ZNSt12length_errorC1B7v160006EPKc__ZSt28__throw_bad_array_new_lengthB7v160006v__ZNKSt3__16vectorIP19ggml_backend_deviceNS_9allocatorIS2_EEE20__throw_length_errorB7v160006Ev__ZL32ggml_backend_cpu_buffer_get_nameP19ggml_backend_buffer__ZL35ggml_backend_cpu_buffer_free_bufferP19ggml_backend_buffer__ZL32ggml_backend_cpu_buffer_get_baseP19ggml_backend_buffer__ZL37ggml_backend_cpu_buffer_memset_tensorP19ggml_backend_bufferP11ggml_tensorhmm__ZL34ggml_backend_cpu_buffer_set_tensorP19ggml_backend_bufferP11ggml_tensorPKvmm__ZL34ggml_backend_cpu_buffer_get_tensorP19ggml_backend_bufferPK11ggml_tensorPvmm__ZL34ggml_backend_cpu_buffer_cpy_tensorP19ggml_backend_bufferPK11ggml_tensorPS1___ZL29ggml_backend_cpu_buffer_clearP19ggml_backend_bufferh__ZL25ggml_backend_cpu_get_nameP12ggml_backend__ZL21ggml_backend_cpu_freeP12ggml_backend__ZL40ggml_backend_cpu_get_default_buffer_typeP12ggml_backend__ZL34ggml_backend_cpu_graph_plan_createP12ggml_backendPK11ggml_cgraph__ZL32ggml_backend_cpu_graph_plan_freeP12ggml_backendPv__ZL35ggml_backend_cpu_graph_plan_computeP12ggml_backendPv__ZL30ggml_backend_cpu_graph_computeP12ggml_backendP11ggml_cgraph__ZN31ggml_backend_cpu_device_contextD1Ev__ZL32ggml_backend_cpu_device_get_nameP19ggml_backend_device__ZL39ggml_backend_cpu_device_get_descriptionP19ggml_backend_device__ZL34ggml_backend_cpu_device_get_memoryP19ggml_backend_devicePmS1___ZL32ggml_backend_cpu_device_get_typeP19ggml_backend_device__ZL33ggml_backend_cpu_device_get_propsP19ggml_backend_deviceP22ggml_backend_dev_props__ZL28ggml_backend_cpu_device_initP19ggml_backend_devicePKc__ZL39ggml_backend_cpu_device_get_buffer_typeP19ggml_backend_device__ZL39ggml_backend_cpu_device_buffer_from_ptrP19ggml_backend_devicePvmm__ZL35ggml_backend_cpu_device_supports_opP19ggml_backend_devicePK11ggml_tensor__ZL37ggml_backend_cpu_device_supports_buftP19ggml_backend_deviceP24ggml_backend_buffer_type__ZN31ggml_backend_cpu_device_contextC2Ev__ZL37ggml_backend_multi_buffer_free_bufferP19ggml_backend_buffer__ZL31ggml_backend_multi_buffer_clearP19ggml_backend_bufferh__ZL38ggml_backend_sched_backend_id_from_curP18ggml_backend_schedP11ggml_tensor__ZL35ggml_backend_sched_buffer_supportedP18ggml_backend_schedP11ggml_tensori_make_qx_quants_iq2_compare_func_iq3_compare_func_quantize_row_iq3_xxs_impl_quantize_row_iq4_nl_impl_make_qp_quants_iq2_find_best_neighbour_iq1_sort_helper_iq1_find_best_neighbour2_ggml_backend_metal_buffer_type_get_name_ggml_backend_metal_buffer_type_alloc_buffer_ggml_backend_metal_buffer_type_get_alignment_ggml_backend_metal_buffer_type_get_max_size_ggml_backend_metal_buffer_type_is_host_ggml_metal_init_ggml_backend_metal_buffer_get_name_ggml_backend_metal_buffer_free_buffer_ggml_backend_metal_buffer_get_base_ggml_backend_metal_buffer_set_tensor_ggml_backend_metal_buffer_get_tensor_ggml_backend_metal_buffer_cpy_tensor_ggml_backend_metal_buffer_clear_ggml_backend_metal_name_ggml_backend_metal_free_ggml_backend_metal_get_default_buffer_type_ggml_backend_metal_graph_compute_ggml_backend_metal_supports_op_ggml_backend_metal_supports_buft___ggml_metal_graph_compute_block_invoke_ggml_metal_encode_node_ggml_metal_supports_op_ggml_metal_get_buffer___clang_call_terminate__ZL22ggml_backend_blas_nameP12ggml_backend__ZL22ggml_backend_blas_freeP12ggml_backend__ZL41ggml_backend_blas_get_default_buffer_typeP12ggml_backend__ZL31ggml_backend_blas_graph_computeP12ggml_backendP11ggml_cgraph__ZL29ggml_backend_blas_supports_opP12ggml_backendPK11ggml_tensor__ZL31ggml_backend_blas_supports_buftP12ggml_backendP24ggml_backend_buffer_type__ZNKSt3__16vectorINS_6futureIvEENS_9allocatorIS2_EEE20__throw_length_errorB7v160006Ev__ZNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEED1Ev__ZNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEED0Ev__ZNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEE16__on_zero_sharedEv__ZNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEE9__executeEv__ZNSt3__114__thread_proxyB7v160006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMNS_19__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEEFvvEPSF_EEEEEPvSK___ZNSt3__110unique_ptrINS_5tupleIJNS0_INS_15__thread_structENS_14default_deleteIS2_EEEEMNS_19__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEEFvvEPSE_EEENS3_ISI_EEED1B7v160006Ev_ggml_backend_register.cold.1_ggml_backend_device_register.cold.1_ggml_backend_reg_count.cold.1_ggml_backend_dev_count.cold.1__ZN21ggml_backend_registryC1Ev.cold.1_ggml_hash_size.primes_reltable.gguf_type_name_GGUF_TYPE_SIZE_iq2xxs_grid_ksigns_iq2xs_iq2xs_grid_iq2s_grid_iq3xxs_grid_iq3s_grid_iq1s_grid_kvalues_iq4nl_keven_signs_q2xs_iq2xs_init_impl.kgrid_2bit_256_iq2xs_init_impl.kgrid_2bit_512_iq2xs_init_impl.kgrid_1bit_2048_iq2xs_init_impl.kgrid_2bit_1024_iq3xs_init_impl.kgrid_256_iq3xs_init_impl.kgrid_512_get_scale_shuffle_k4.k_shuffle_get_scale_shuffle.k_shuffle__ZTSNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEEGCC_except_table71GCC_except_table73GCC_except_table75GCC_except_table76GCC_except_table78GCC_except_table79GCC_except_table85GCC_except_table91GCC_except_table96GCC_except_table99GCC_except_table126GCC_except_table129GCC_except_table143GCC_except_table154GCC_except_table155GCC_except_table159GCC_except_table7GCC_except_table11GCC_except_table16GCC_except_table17GCC_except_table18_type_traits_GGML_OP_NAME_GGML_OP_SYMBOL_GGML_UNARY_OP_NAME__ZL18ggml_backend_cpu_i__ZL34ggml_backend_cpu_buffer_from_ptr_i__ZL27ggml_backend_multi_buffer_i__ZL25ggml_backend_cpu_buffer_i__ZL25ggml_backend_cpu_device_i_ggml_backend_metal_i___block_descriptor_49_e8_v16?0Q8l__ZL14blas_backend_i__ZTVNSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEE__ZTINSt3__119__async_assoc_stateIvNS_12__async_funcIZL25ggml_backend_blas_mul_matP25ggml_backend_blas_contextP11ggml_tensorE3$_0JEEEEE__OBJC_METACLASS_RO_$_GGMLMetalClass__OBJC_CLASS_RO_$_GGMLMetalClass__dyld_private_g_logger_state.0__ZZ20ggml_backend_cpu_regE20ggml_backend_cpu_reg__ZZL21ggml_backend_cpu_guidvE4guid_ggml_backend_metal_buffer_type.ggml_backend_buffer_type_metal_ggml_backend_metal_buffer_i_ggml_backend_metal_guid.guid__ZZL22ggml_backend_blas_guidvE4guid_g_state_ggml_init.is_first_call_ggml_table_gelu_f16_ggml_table_gelu_quick_f16_g_logger_state.1_g_state_critical__ZZ28ggml_backend_cpu_buffer_typeE28ggml_backend_cpu_buffer_type__ZGVZ28ggml_backend_cpu_buffer_typeE28ggml_backend_cpu_buffer_type__ZZL7get_regvE3reg__ZGVZL7get_regvE3reg__ZZL31ggml_backend_cpu_reg_get_deviceP16ggml_backend_regmE3ctx__ZGVZL31ggml_backend_cpu_reg_get_deviceP16ggml_backend_regmE3ctx__ZZL31ggml_backend_cpu_reg_get_deviceP16ggml_backend_regmE23ggml_backend_cpu_device__ZGVZL31ggml_backend_cpu_reg_get_deviceP16ggml_backend_regmE23ggml_backend_cpu_device__ZZL8fmt_sizemE6buffer_iq2_data_iq3_data_g_backend_device_ref_count_g_backend_device




© 2015 - 2025 Weber Informatics LLC | Privacy Policy